diff --git a/src/components/InputFile.vue b/src/components/InputFile.vue new file mode 100644 index 0000000..a4cd5c3 --- /dev/null +++ b/src/components/InputFile.vue @@ -0,0 +1,106 @@ + + + {{ label }} + + + + + + + + {{ + t( + 'components.wishlist-header.main.form.image-file.text-dropzone-link' + ) + }} + + + + + + + {{ errorMessage }} + + + + + diff --git a/src/components/WishlistHeader.vue b/src/components/WishlistHeader.vue index bdc6b7d..2531480 100644 --- a/src/components/WishlistHeader.vue +++ b/src/components/WishlistHeader.vue @@ -43,6 +43,10 @@ :value="modelValue.imageSrc" :label="t('components.wishlist-header.main.form.image-src.label')" /> + !imageFile || imageFile.length === 0, + then: string().required( + t('components.wishlist-header.main.form.image-src.error-requried') + ), + }), + imageFile: string().when('imageSrc', { + is: (imageSrc: string) => !imageSrc || imageSrc.length === 0, + then: string().required( + t('components.wishlist-header.main.form.image-file.error-requried') + ), + }), + }, + //@ts-expect-error ... + ['imageSrc', 'imageFile'] +) const onSubmit = async (values: any): Promise => { try { + values.imageSrc = values.imageFile || values.imageSrc await update(values) toast.success(t('common.wishlist.saved.text')) router.push(`/${values.slugUrlText}`) diff --git a/src/components/index.ts b/src/components/index.ts index b40f386..2d60a54 100644 --- a/src/components/index.ts +++ b/src/components/index.ts @@ -4,6 +4,7 @@ export { default as ImagePreview } from './ImagePreview.vue' export { default as ImageTile } from './ImageTile.vue' export { default as InputCheckbox } from './InputCheckbox.vue' export { default as InputText } from './InputText.vue' +export { default as InputFile } from './InputFile.vue' export { default as InputTextArea } from './InputTextArea.vue' export { default as Modal } from './Modal.vue' export { default as WishlistHeader } from './WishlistHeader.vue' diff --git a/src/config/locales/de-DE.json b/src/config/locales/de-DE.json index 37fd7d7..4a51327 100644 --- a/src/config/locales/de-DE.json +++ b/src/config/locales/de-DE.json @@ -98,8 +98,13 @@ }, "image-src": { "label": "Bild-URL", - "error-requried": "Bild-URL wird benötigt", - "error-url": "Bild-URL muss eine gültige URL sein" + "error-requried": "Bild-URL wird benötigt" + }, + "image-file": { + "label": "Bild-Datei", + "text-dropzone-link": "hier", + "text-dropzone": "Ziehen Sie ein beliebiges Bild hierher oder klicken Sie {0}, um den Dialog zu öffnen.", + "error-requried": "Bild-Datei wird benötigt" }, "submit": { "text": "Speichern" diff --git a/src/config/locales/en-US.json b/src/config/locales/en-US.json index 17c1134..35ecbec 100644 --- a/src/config/locales/en-US.json +++ b/src/config/locales/en-US.json @@ -96,8 +96,13 @@ }, "image-src": { "label": "Image-URL", - "error-requried": "Image-URL is required", - "error-url": "Image-URL has to be a valid url" + "error-requried": "Image-URL is required" + }, + "image-file": { + "label": "Image-File", + "text-dropzone-link": "click here", + "text-dropzone": "drag and drop any image here or {0} to open dialog.", + "error-requried": "Image-File is required" }, "submit": { "text": "Save"
+ {{ errorMessage }} +