0
Fork 0
mirror of https://github.com/penpot/penpot.git synced 2025-03-15 17:21:17 -05:00

Improve error checking and notification

This commit is contained in:
Andrés Moya 2020-05-29 09:54:37 +02:00 committed by Alonso Torres
parent bbf3bc7909
commit e3e8180b7a
5 changed files with 124 additions and 83 deletions

View file

@ -14,14 +14,14 @@
} }
}, },
"auth.create-demo-profile" : { "auth.create-demo-profile" : {
"used-in" : [ "src/uxbox/main/ui/auth/login.cljs:114", "src/uxbox/main/ui/auth/register.cljs:116" ], "used-in" : [ "src/uxbox/main/ui/auth/register.cljs:116", "src/uxbox/main/ui/auth/login.cljs:115" ],
"translations" : { "translations" : {
"en" : "Create demo account", "en" : "Create demo account",
"fr" : null "fr" : null
} }
}, },
"auth.create-demo-profile-label" : { "auth.create-demo-profile-label" : {
"used-in" : [ "src/uxbox/main/ui/auth/login.cljs:111", "src/uxbox/main/ui/auth/register.cljs:113" ], "used-in" : [ "src/uxbox/main/ui/auth/register.cljs:113", "src/uxbox/main/ui/auth/login.cljs:112" ],
"translations" : { "translations" : {
"en" : "Just wanna try it?" "en" : "Just wanna try it?"
} }
@ -33,14 +33,14 @@
} }
}, },
"auth.email-label" : { "auth.email-label" : {
"used-in" : [ "src/uxbox/main/ui/auth/login.cljs:73", "src/uxbox/main/ui/auth/recovery_request.cljs:45", "src/uxbox/main/ui/auth/register.cljs:82" ], "used-in" : [ "src/uxbox/main/ui/auth/register.cljs:82", "src/uxbox/main/ui/auth/recovery_request.cljs:45", "src/uxbox/main/ui/auth/login.cljs:73" ],
"translations" : { "translations" : {
"en" : "Email", "en" : "Email",
"fr" : "adresse email" "fr" : "adresse email"
} }
}, },
"auth.forgot-password" : { "auth.forgot-password" : {
"used-in" : [ "src/uxbox/main/ui/auth/login.cljs:102" ], "used-in" : [ "src/uxbox/main/ui/auth/login.cljs:97" ],
"translations" : { "translations" : {
"en" : "Forgot your password?", "en" : "Forgot your password?",
"fr" : "Mot de passe oublié ?" "fr" : "Mot de passe oublié ?"
@ -119,7 +119,7 @@
} }
}, },
"auth.password-label" : { "auth.password-label" : {
"used-in" : [ "src/uxbox/main/ui/auth/login.cljs:79", "src/uxbox/main/ui/auth/register.cljs:86" ], "used-in" : [ "src/uxbox/main/ui/auth/register.cljs:86", "src/uxbox/main/ui/auth/login.cljs:79" ],
"translations" : { "translations" : {
"en" : "Password", "en" : "Password",
"fr" : "Mot de passe" "fr" : "Mot de passe"
@ -156,13 +156,13 @@
} }
}, },
"auth.register" : { "auth.register" : {
"used-in" : [ "src/uxbox/main/ui/auth/login.cljs:108" ], "used-in" : [ "src/uxbox/main/ui/auth/login.cljs:103" ],
"translations" : { "translations" : {
"en" : "Sign up here" "en" : "Sign up here"
} }
}, },
"auth.register-label" : { "auth.register-label" : {
"used-in" : [ "src/uxbox/main/ui/auth/login.cljs:105" ], "used-in" : [ "src/uxbox/main/ui/auth/login.cljs:100" ],
"translations" : { "translations" : {
"en" : "No account yet?" "en" : "No account yet?"
} }
@ -299,21 +299,21 @@
"unused" : true "unused" : true
}, },
"dashboard.library.menu.icons" : { "dashboard.library.menu.icons" : {
"used-in" : [ "src/uxbox/main/ui/dashboard/library.cljs:96" ], "used-in" : [ "src/uxbox/main/ui/dashboard/library.cljs:89" ],
"translations" : { "translations" : {
"en" : "Icons", "en" : "Icons",
"fr" : "ICÔNES" "fr" : "ICÔNES"
} }
}, },
"dashboard.library.menu.images" : { "dashboard.library.menu.images" : {
"used-in" : [ "src/uxbox/main/ui/dashboard/library.cljs:100" ], "used-in" : [ "src/uxbox/main/ui/dashboard/library.cljs:93" ],
"translations" : { "translations" : {
"en" : "Images", "en" : "Images",
"fr" : "Images" "fr" : "Images"
} }
}, },
"dashboard.library.menu.palettes" : { "dashboard.library.menu.palettes" : {
"used-in" : [ "src/uxbox/main/ui/dashboard/library.cljs:104" ], "used-in" : [ "src/uxbox/main/ui/dashboard/library.cljs:97" ],
"translations" : { "translations" : {
"en" : "Palettes" "en" : "Palettes"
} }
@ -368,19 +368,19 @@
} }
}, },
"ds.button.delete" : { "ds.button.delete" : {
"used-in" : [ "src/uxbox/main/ui/dashboard/library.cljs:152", "src/uxbox/main/ui/dashboard/library.cljs:220", "src/uxbox/main/ui/dashboard/library.cljs:259", "src/uxbox/main/ui/dashboard/library.cljs:300" ], "used-in" : [ "src/uxbox/main/ui/dashboard/library.cljs:145", "src/uxbox/main/ui/dashboard/library.cljs:210", "src/uxbox/main/ui/dashboard/library.cljs:249", "src/uxbox/main/ui/dashboard/library.cljs:290" ],
"translations" : { "translations" : {
"en" : "Delete" "en" : "Delete"
} }
}, },
"ds.button.rename" : { "ds.button.rename" : {
"used-in" : [ "src/uxbox/main/ui/dashboard/library.cljs:149" ], "used-in" : [ "src/uxbox/main/ui/dashboard/library.cljs:142" ],
"translations" : { "translations" : {
"en" : "Rename" "en" : "Rename"
} }
}, },
"ds.button.save" : { "ds.button.save" : {
"used-in" : [ "src/uxbox/main/ui/dashboard/library.cljs:54" ], "used-in" : [ "src/uxbox/main/ui/dashboard/library.cljs:55" ],
"translations" : { "translations" : {
"en" : "Save" "en" : "Save"
} }
@ -484,11 +484,11 @@
"unused" : true "unused" : true
}, },
"ds.store-images-title" : { "ds.store-images-title" : {
"used-in" : [ "src/uxbox/main/ui/workspace/images.cljs:183" ],
"translations" : { "translations" : {
"en" : "IMAGES STORE", "en" : "IMAGES STORE",
"fr" : "BOUTIQUE" "fr" : "BOUTIQUE"
} },
"unused" : true
}, },
"ds.updated-at" : { "ds.updated-at" : {
"used-in" : [ "src/uxbox/main/ui/dashboard/grid.cljs:45" ], "used-in" : [ "src/uxbox/main/ui/dashboard/grid.cljs:45" ],
@ -505,11 +505,11 @@
"unused" : true "unused" : true
}, },
"ds.your-images-title" : { "ds.your-images-title" : {
"used-in" : [ "src/uxbox/main/ui/workspace/images.cljs:180" ],
"translations" : { "translations" : {
"en" : "YOUR IMAGES", "en" : "YOUR IMAGES",
"fr" : "VOS IMAGES" "fr" : "VOS IMAGES"
} },
"unused" : true
}, },
"errors.api.form.registration-disabled" : { "errors.api.form.registration-disabled" : {
"translations" : { "translations" : {
@ -533,18 +533,30 @@
} }
}, },
"errors.email-already-exists" : { "errors.email-already-exists" : {
"used-in" : [ "src/uxbox/main/ui/settings/change_email.cljs:38", "src/uxbox/main/ui/auth.cljs:87" ], "used-in" : [ "src/uxbox/main/ui/auth.cljs:87", "src/uxbox/main/ui/settings/change_email.cljs:38" ],
"translations" : { "translations" : {
"en" : "Email already used" "en" : "Email already used"
} }
}, },
"errors.generic" : { "errors.generic" : {
"used-in" : [ "src/uxbox/main/ui/settings/profile.cljs:37", "src/uxbox/main/ui/auth.cljs:91", "src/uxbox/main/ui.cljs:184" ], "used-in" : [ "src/uxbox/main/ui.cljs:184", "src/uxbox/main/ui/auth.cljs:91", "src/uxbox/main/ui/settings/profile.cljs:37" ],
"translations" : { "translations" : {
"en" : "Something wrong has happened.", "en" : "Something wrong has happened.",
"fr" : "Quelque chose c'est mal passé." "fr" : "Quelque chose c'est mal passé."
} }
}, },
"errors.image-format-unsupported" : {
"used-in" : [ "src/uxbox/main/data/images.cljs:375", "src/uxbox/main/data/workspace/persistence.cljs:320" ],
"translations" : {
"en" : "The image format is not supported (must be svg, jpg or png)."
}
},
"errors.image-too-large" : {
"used-in" : [ "src/uxbox/main/data/images.cljs:373", "src/uxbox/main/data/workspace/persistence.cljs:318" ],
"translations" : {
"en" : "The image is too large to be inserted (must be under 5mb)."
}
},
"errors.network" : { "errors.network" : {
"used-in" : [ "src/uxbox/main/ui.cljs:178" ], "used-in" : [ "src/uxbox/main/ui.cljs:178" ],
"translations" : { "translations" : {
@ -573,7 +585,7 @@
} }
}, },
"errors.unexpected-error" : { "errors.unexpected-error" : {
"used-in" : [ "src/uxbox/main/ui/settings/change_email.cljs:42", "src/uxbox/main/ui/auth/register.cljs:54" ], "used-in" : [ "src/uxbox/main/data/images.cljs:382", "src/uxbox/main/data/workspace/persistence.cljs:333", "src/uxbox/main/ui/auth/register.cljs:54", "src/uxbox/main/ui/settings/change_email.cljs:42" ],
"translations" : { "translations" : {
"en" : "An unexpected error occurred.", "en" : "An unexpected error occurred.",
"fr" : "Une erreur inattendue c'est produite" "fr" : "Une erreur inattendue c'est produite"
@ -593,7 +605,7 @@
} }
}, },
"header.sitemap" : { "header.sitemap" : {
"used-in" : [ "src/uxbox/main/ui/workspace/header.cljs:67" ], "used-in" : [ "src/uxbox/main/ui/workspace/header.cljs:65" ],
"translations" : { "translations" : {
"en" : null, "en" : null,
"fr" : null "fr" : null
@ -607,35 +619,35 @@
} }
}, },
"image.import-library" : { "image.import-library" : {
"used-in" : [ "src/uxbox/main/ui/workspace/images.cljs:172" ],
"translations" : { "translations" : {
"en" : "Import image from library", "en" : "Import image from library",
"fr" : "Importer une image depuis une librairie" "fr" : "Importer une image depuis une librairie"
} },
"unused" : true
}, },
"image.new" : { "image.new" : {
"used-in" : [ "src/uxbox/main/ui/workspace/images.cljs:86" ],
"translations" : { "translations" : {
"en" : "New image", "en" : "New image",
"fr" : "Nouvelle image" "fr" : "Nouvelle image"
} },
"unused" : true
}, },
"image.select" : { "image.select" : {
"used-in" : [ "src/uxbox/main/ui/workspace/images.cljs:92", "src/uxbox/main/ui/workspace/images.cljs:97" ],
"translations" : { "translations" : {
"en" : "Select from library", "en" : "Select from library",
"fr" : "Choisir depuis une librairie" "fr" : "Choisir depuis une librairie"
} },
"unused" : true
}, },
"image.upload" : { "image.upload" : {
"used-in" : [ "src/uxbox/main/ui/workspace/images.cljs:104" ],
"translations" : { "translations" : {
"en" : "Upload file", "en" : "Upload file",
"fr" : "Envoyer un fichier" "fr" : "Envoyer un fichier"
} },
"unused" : true
}, },
"modal.create-color.new-color" : { "modal.create-color.new-color" : {
"used-in" : [ "src/uxbox/main/ui/dashboard/library.cljs:48" ], "used-in" : [ "src/uxbox/main/ui/dashboard/library.cljs:49" ],
"translations" : { "translations" : {
"en" : "New Color" "en" : "New Color"
} }
@ -843,7 +855,7 @@
} }
}, },
"settings.profile-submit-label" : { "settings.profile-submit-label" : {
"used-in" : [ "src/uxbox/main/ui/settings/options.cljs:65", "src/uxbox/main/ui/settings/password.cljs:94", "src/uxbox/main/ui/settings/profile.cljs:89" ], "used-in" : [ "src/uxbox/main/ui/settings/password.cljs:94", "src/uxbox/main/ui/settings/options.cljs:65", "src/uxbox/main/ui/settings/profile.cljs:89" ],
"translations" : { "translations" : {
"en" : "Update settings", "en" : "Update settings",
"fr" : "Mettre à jour les paramètres" "fr" : "Mettre à jour les paramètres"
@ -1031,91 +1043,91 @@
} }
}, },
"workspace.header.menu.disable-dynamic-alignment" : { "workspace.header.menu.disable-dynamic-alignment" : {
"used-in" : [ "src/uxbox/main/ui/workspace/header.cljs:119" ], "used-in" : [ "src/uxbox/main/ui/workspace/header.cljs:117" ],
"translations" : { "translations" : {
"en" : "Disable dynamic alignment" "en" : "Disable dynamic alignment"
} }
}, },
"workspace.header.menu.disable-snap-grid" : { "workspace.header.menu.disable-snap-grid" : {
"used-in" : [ "src/uxbox/main/ui/workspace/header.cljs:91" ], "used-in" : [ "src/uxbox/main/ui/workspace/header.cljs:89" ],
"translations" : { "translations" : {
"en" : "Disable snap to grid" "en" : "Disable snap to grid"
} }
}, },
"workspace.header.menu.enable-dynamic-alignment" : { "workspace.header.menu.enable-dynamic-alignment" : {
"used-in" : [ "src/uxbox/main/ui/workspace/header.cljs:120" ], "used-in" : [ "src/uxbox/main/ui/workspace/header.cljs:118" ],
"translations" : { "translations" : {
"en" : "Enable dynamic aligment" "en" : "Enable dynamic aligment"
} }
}, },
"workspace.header.menu.enable-snap-grid" : { "workspace.header.menu.enable-snap-grid" : {
"used-in" : [ "src/uxbox/main/ui/workspace/header.cljs:92" ], "used-in" : [ "src/uxbox/main/ui/workspace/header.cljs:90" ],
"translations" : { "translations" : {
"en" : "Snap to grid" "en" : "Snap to grid"
} }
}, },
"workspace.header.menu.hide-grid" : { "workspace.header.menu.hide-grid" : {
"used-in" : [ "src/uxbox/main/ui/workspace/header.cljs:84" ], "used-in" : [ "src/uxbox/main/ui/workspace/header.cljs:82" ],
"translations" : { "translations" : {
"en" : "Hide grid" "en" : "Hide grid"
} }
}, },
"workspace.header.menu.hide-layers" : { "workspace.header.menu.hide-layers" : {
"used-in" : [ "src/uxbox/main/ui/workspace/header.cljs:98" ], "used-in" : [ "src/uxbox/main/ui/workspace/header.cljs:96" ],
"translations" : { "translations" : {
"en" : "Hide layers" "en" : "Hide layers"
} }
}, },
"workspace.header.menu.hide-libraries" : { "workspace.header.menu.hide-libraries" : {
"used-in" : [ "src/uxbox/main/ui/workspace/header.cljs:112" ], "used-in" : [ "src/uxbox/main/ui/workspace/header.cljs:110" ],
"translations" : { "translations" : {
"en" : "Hide libraries" "en" : "Hide libraries"
} }
}, },
"workspace.header.menu.hide-palette" : { "workspace.header.menu.hide-palette" : {
"used-in" : [ "src/uxbox/main/ui/workspace/header.cljs:105" ], "used-in" : [ "src/uxbox/main/ui/workspace/header.cljs:103" ],
"translations" : { "translations" : {
"en" : "Hide color palette" "en" : "Hide color palette"
} }
}, },
"workspace.header.menu.hide-rules" : { "workspace.header.menu.hide-rules" : {
"used-in" : [ "src/uxbox/main/ui/workspace/header.cljs:77" ], "used-in" : [ "src/uxbox/main/ui/workspace/header.cljs:75" ],
"translations" : { "translations" : {
"en" : "Hide rules" "en" : "Hide rules"
} }
}, },
"workspace.header.menu.show-grid" : { "workspace.header.menu.show-grid" : {
"used-in" : [ "src/uxbox/main/ui/workspace/header.cljs:85" ], "used-in" : [ "src/uxbox/main/ui/workspace/header.cljs:83" ],
"translations" : { "translations" : {
"en" : "Show grid" "en" : "Show grid"
} }
}, },
"workspace.header.menu.show-layers" : { "workspace.header.menu.show-layers" : {
"used-in" : [ "src/uxbox/main/ui/workspace/header.cljs:99" ], "used-in" : [ "src/uxbox/main/ui/workspace/header.cljs:97" ],
"translations" : { "translations" : {
"en" : "Show layers" "en" : "Show layers"
} }
}, },
"workspace.header.menu.show-libraries" : { "workspace.header.menu.show-libraries" : {
"used-in" : [ "src/uxbox/main/ui/workspace/header.cljs:113" ], "used-in" : [ "src/uxbox/main/ui/workspace/header.cljs:111" ],
"translations" : { "translations" : {
"en" : "Show libraries" "en" : "Show libraries"
} }
}, },
"workspace.header.menu.show-palette" : { "workspace.header.menu.show-palette" : {
"used-in" : [ "src/uxbox/main/ui/workspace/header.cljs:106" ], "used-in" : [ "src/uxbox/main/ui/workspace/header.cljs:104" ],
"translations" : { "translations" : {
"en" : "Show color palette" "en" : "Show color palette"
} }
}, },
"workspace.header.menu.show-rules" : { "workspace.header.menu.show-rules" : {
"used-in" : [ "src/uxbox/main/ui/workspace/header.cljs:78" ], "used-in" : [ "src/uxbox/main/ui/workspace/header.cljs:76" ],
"translations" : { "translations" : {
"en" : "Show rules" "en" : "Show rules"
} }
}, },
"workspace.header.viewer" : { "workspace.header.viewer" : {
"used-in" : [ "src/uxbox/main/ui/workspace/header.cljs:158" ], "used-in" : [ "src/uxbox/main/ui/workspace/header.cljs:156" ],
"translations" : { "translations" : {
"en" : "View mode (Ctrl + P)", "en" : "View mode (Ctrl + P)",
"fr" : "Mode visualisation (Ctrl + P)" "fr" : "Mode visualisation (Ctrl + P)"
@ -1473,7 +1485,7 @@
"unused" : true "unused" : true
}, },
"workspace.options.position" : { "workspace.options.position" : {
"used-in" : [ "src/uxbox/main/ui/workspace/sidebar/options/frame.cljs:127", "src/uxbox/main/ui/workspace/sidebar/options/measures.cljs:134" ], "used-in" : [ "src/uxbox/main/ui/workspace/sidebar/options/measures.cljs:134", "src/uxbox/main/ui/workspace/sidebar/options/frame.cljs:127" ],
"translations" : { "translations" : {
"en" : "Position", "en" : "Position",
"fr" : "Position" "fr" : "Position"
@ -1519,7 +1531,7 @@
} }
}, },
"workspace.options.size" : { "workspace.options.size" : {
"used-in" : [ "src/uxbox/main/ui/workspace/sidebar/options/frame.cljs:102", "src/uxbox/main/ui/workspace/sidebar/options/measures.cljs:106" ], "used-in" : [ "src/uxbox/main/ui/workspace/sidebar/options/measures.cljs:106", "src/uxbox/main/ui/workspace/sidebar/options/frame.cljs:102" ],
"translations" : { "translations" : {
"en" : "Size", "en" : "Size",
"fr" : "Taille" "fr" : "Taille"
@ -1626,21 +1638,21 @@
} }
}, },
"workspace.toolbar.circle" : { "workspace.toolbar.circle" : {
"used-in" : [ "src/uxbox/main/ui/workspace/left_toolbar.cljs:45" ], "used-in" : [ "src/uxbox/main/ui/workspace/left_toolbar.cljs:63" ],
"translations" : { "translations" : {
"en" : "Circle (E)", "en" : "Circle (E)",
"fr" : "Cercle (E)" "fr" : "Cercle (E)"
} }
}, },
"workspace.toolbar.color-palette" : { "workspace.toolbar.color-palette" : {
"used-in" : [ "src/uxbox/main/ui/workspace/left_toolbar.cljs:84" ], "used-in" : [ "src/uxbox/main/ui/workspace/left_toolbar.cljs:107" ],
"translations" : { "translations" : {
"en" : "Color Palette (---)", "en" : "Color Palette (---)",
"fr" : "Palette de couleurs (---)" "fr" : "Palette de couleurs (---)"
} }
}, },
"workspace.toolbar.curve" : { "workspace.toolbar.curve" : {
"used-in" : [ "src/uxbox/main/ui/workspace/left_toolbar.cljs:59" ], "used-in" : [ "src/uxbox/main/ui/workspace/left_toolbar.cljs:82" ],
"translations" : { "translations" : {
"en" : "Curve", "en" : "Curve",
"fr" : "Courbe" "fr" : "Courbe"
@ -1654,7 +1666,7 @@
"unused" : true "unused" : true
}, },
"workspace.toolbar.frame" : { "workspace.toolbar.frame" : {
"used-in" : [ "src/uxbox/main/ui/workspace/left_toolbar.cljs:35" ], "used-in" : [ "src/uxbox/main/ui/workspace/left_toolbar.cljs:53" ],
"translations" : { "translations" : {
"en" : "Artboard (A)", "en" : "Artboard (A)",
"fr" : null "fr" : null
@ -1675,20 +1687,20 @@
"unused" : true "unused" : true
}, },
"workspace.toolbar.image" : { "workspace.toolbar.image" : {
"used-in" : [ "src/uxbox/main/ui/workspace/left_toolbar.cljs:55" ], "used-in" : [ "src/uxbox/main/ui/workspace/left_toolbar.cljs:73" ],
"translations" : { "translations" : {
"en" : "Image (Ctrl + I)", "en" : "Image (Ctrl + I)",
"fr" : "Image (Ctrl + I)" "fr" : "Image (Ctrl + I)"
} }
}, },
"workspace.toolbar.libraries" : { "workspace.toolbar.libraries" : {
"used-in" : [ "src/uxbox/main/ui/workspace/left_toolbar.cljs:76" ], "used-in" : [ "src/uxbox/main/ui/workspace/left_toolbar.cljs:99" ],
"translations" : { "translations" : {
"en" : "Libraries (Ctrl + Shift + L)" "en" : "Libraries (Ctrl + Shift + L)"
} }
}, },
"workspace.toolbar.path" : { "workspace.toolbar.path" : {
"used-in" : [ "src/uxbox/main/ui/workspace/left_toolbar.cljs:64" ], "used-in" : [ "src/uxbox/main/ui/workspace/left_toolbar.cljs:87" ],
"translations" : { "translations" : {
"en" : "Path", "en" : "Path",
"fr" : "Chemin" "fr" : "Chemin"
@ -1702,7 +1714,7 @@
"unused" : true "unused" : true
}, },
"workspace.toolbar.rect" : { "workspace.toolbar.rect" : {
"used-in" : [ "src/uxbox/main/ui/workspace/left_toolbar.cljs:40" ], "used-in" : [ "src/uxbox/main/ui/workspace/left_toolbar.cljs:58" ],
"translations" : { "translations" : {
"en" : "Box (B)", "en" : "Box (B)",
"fr" : "Boîte (B)" "fr" : "Boîte (B)"
@ -1716,7 +1728,7 @@
"unused" : true "unused" : true
}, },
"workspace.toolbar.text" : { "workspace.toolbar.text" : {
"used-in" : [ "src/uxbox/main/ui/workspace/left_toolbar.cljs:50" ], "used-in" : [ "src/uxbox/main/ui/workspace/left_toolbar.cljs:68" ],
"translations" : { "translations" : {
"en" : "Text (T)", "en" : "Text (T)",
"fr" : "Texte (T)" "fr" : "Texte (T)"

View file

@ -12,6 +12,7 @@
[potok.core :as ptk] [potok.core :as ptk]
[uxbox.common.spec :as us] [uxbox.common.spec :as us]
[uxbox.common.data :as d] [uxbox.common.data :as d]
[uxbox.main.data.messages :as dm]
[uxbox.main.store :as st] [uxbox.main.store :as st]
[uxbox.main.repo :as rp] [uxbox.main.repo :as rp]
[uxbox.util.i18n :refer [tr]] [uxbox.util.i18n :refer [tr]]
@ -352,7 +353,11 @@
;; --- Create Image ;; --- Create Image
(declare create-images-result) (declare create-images-result)
(def allowed-file-types #{"image/jpeg" "image/png"}) (def allowed-file-types #{"image/jpeg" "image/png" "image/webp"})
(def max-file-size (* 5 1024 1024))
;; TODO: unify with upload-image at main/data/workspace/persistence.cljs
;; https://tree.taiga.io/project/uxboxproject/us/440
(defn create-images (defn create-images
([library-id files] (create-images library-id files identity)) ([library-id files] (create-images library-id files identity))
@ -362,22 +367,28 @@
(ptk/reify ::create-images (ptk/reify ::create-images
ptk/WatchEvent ptk/WatchEvent
(watch [_ state stream] (watch [_ state stream]
(letfn [(allowed-file? [file] (let [check-file
(contains? allowed-file-types (.-type file))) (fn [file]
#_(finalize-upload [state] (when (> (.-size file) max-file-size)
(assoc-in state [:dashboard-images :uploading] false)) (throw (ex-info (tr "errors.image-too-large") {})))
(on-success [_] (when-not (contains? allowed-file-types (.-type file))
#_(st/emit! finalize-upload) (throw (ex-info (tr "errors.image-format-unsupported") {})))
(on-uploaded)) file)
(on-error [e]
#_(st/emit! finalize-upload) on-success on-uploaded
(rx/throw e))
(prepare [file] on-error #(if (.-message %)
{:name (.-name file) (rx/of (dm/error (.-message %)))
:library-id library-id (rx/of (dm/error (tr "errors.unexpected-error"))))
:content file})]
prepare
(fn [file]
{:name (.-name file)
:library-id library-id
:content file})]
(->> (rx/from files) (->> (rx/from files)
(rx/filter allowed-file?) (rx/map check-file)
(rx/map prepare) (rx/map prepare)
(rx/mapcat #(rp/mutation! :upload-image %)) (rx/mapcat #(rp/mutation! :upload-image %))
(rx/reduce conj []) (rx/reduce conj [])

View file

@ -16,10 +16,12 @@
[uxbox.common.pages :as cp] [uxbox.common.pages :as cp]
[uxbox.common.spec :as us] [uxbox.common.spec :as us]
[uxbox.main.data.dashboard :as dd] [uxbox.main.data.dashboard :as dd]
[uxbox.main.data.messages :as dm]
[uxbox.main.data.workspace.common :as dwc] [uxbox.main.data.workspace.common :as dwc]
[uxbox.main.repo :as rp] [uxbox.main.repo :as rp]
[uxbox.main.store :as st] [uxbox.main.store :as st]
[uxbox.common.geom.point :as gpt] [uxbox.common.geom.point :as gpt]
[uxbox.util.i18n :as i18n :refer [tr]]
[uxbox.util.router :as rt] [uxbox.util.router :as rt]
[uxbox.util.time :as dt] [uxbox.util.time :as dt]
[uxbox.util.transit :as t])) [uxbox.util.transit :as t]))
@ -292,7 +294,11 @@
;; --- Upload Image ;; --- Upload Image
(declare image-uploaded) (declare image-uploaded)
(def allowed-file-types #{"image/jpeg" "image/png"}) (def allowed-file-types #{"image/jpeg" "image/png" "image/webp"})
(def max-file-size (* 5 1024 1024))
;; TODO: unify with create-images at main/data/images.cljs
;; https://tree.taiga.io/project/uxboxproject/us/440
(defn upload-image (defn upload-image
([file] (upload-image file identity)) ([file] (upload-image file identity))
@ -305,22 +311,34 @@
ptk/WatchEvent ptk/WatchEvent
(watch [_ state stream] (watch [_ state stream]
(let [allowed-file? #(contains? allowed-file-types (.-type %)) (let [check-file
(fn [file]
(when (> (.-size file) max-file-size)
(throw (ex-info (tr "errors.image-too-large") {})))
(when-not (contains? allowed-file-types (.-type file))
(throw (ex-info (tr "errors.image-format-unsupported") {})))
file)
finalize-upload #(assoc-in % [:workspace-local :uploading] false) finalize-upload #(assoc-in % [:workspace-local :uploading] false)
file-id (get-in state [:workspace-page :file-id]) file-id (get-in state [:workspace-page :file-id])
on-success #(do (st/emit! finalize-upload) on-success #(do (st/emit! finalize-upload)
(on-uploaded %)) (on-uploaded %))
on-error #(do (st/emit! finalize-upload) on-error #(do (st/emit! finalize-upload)
(rx/throw %)) (if (.-message %)
(rx/of (dm/error (.-message %)))
(rx/of (dm/error (tr "errors.unexpected-error")))))
prepare prepare
(fn [file] (fn [file]
{:name (.-name file) {:name (.-name file)
:file-id file-id :file-id file-id
:content file})] :content file})]
(->> (rx/of file) (->> (rx/of file)
(rx/filter allowed-file?) (rx/map check-file)
(rx/map prepare) (rx/map prepare)
(rx/mapcat #(rp/mutation! :upload-file-image %)) (rx/mapcat #(rp/mutation! :upload-file-image %))
(rx/do on-success) (rx/do on-success)

View file

@ -19,11 +19,11 @@
(let [opt-pick-one #(if multi % (first %)) (let [opt-pick-one #(if multi % (first %))
on-files-selected (fn [event] (st/emit! on-files-selected (fn [event] (st/emit!
(-> (dom/get-target event) (some-> (dom/get-target event)
(dom/get-files) (dom/get-files)
(array-seq) (array-seq)
(opt-pick-one) (opt-pick-one)
(on-selected))))] (on-selected))))]
[:* [:*
(when label-text (when label-text
[:label {:for input-id :class-name label-class} label-text]) [:label {:for input-id :class-name label-class} label-text])

View file

@ -165,7 +165,7 @@
(t locale (str "dashboard.library.add-item." (name section)))] (t locale (str "dashboard.library.add-item." (name section)))]
[:& file-uploader {:accept (case section [:& file-uploader {:accept (case section
:images "image" :images "image/jpeg,image/png,image/webp"
:icons "image/svg+xml" :icons "image/svg+xml"
"") "")
:multi true :multi true