import { defineAsyncComponent, reactive, ref, Ref, watch, PropType, } from 'vue'; import { model, blockProps, } from '/@components/TreeElement'; import SbToolbar from '/@internal/Toolbar'; import SbButton from '/@internal/Button'; import { getDefaultData, ImageData, ImageProps, } from './util'; import './style.scss'; export default defineAsyncComponent({ name: 'sb-image-edit', model, props: { ...blockProps, eventUpdate: { type: Function, default: () => {} }, data: { type: (null as unknown) as PropType, default: getDefaultData, }, }, setup(props: ImageProps) { const localData = reactive({ src: props.data.src, alt: props.data.alt, }); const fileInput: Ref = ref(null); watch(() => props.data, () => { localData.src = props.data.src; localData.alt = props.data.alt; }); const selectImage = () => { if (fileInput.value) { fileInput.value.click(); } }; const onImageSelect = () => { if (fileInput.value && fileInput.value.files && fileInput.value.files.length) { const reader = new FileReader(); reader.addEventListener('load', () => { props.eventUpdate({ src: reader.result, alt: props.data.alt, }); }); reader.readAsDataURL(fileInput.value.files[0]); } }; return () => (
{localData.src ? Change Image : null} {localData.src ? {localData.alt} : Select Image}
); }, });