From 240e8ce50c99c031c9cf23bb5c3e2b3472406d22 Mon Sep 17 00:00:00 2001 From: Dexterity <173429049+Dexterity104@users.noreply.github.com> Date: Fri, 10 Apr 2026 05:21:14 -0400 Subject: [PATCH] :bug: Use page name for multi-export downloads (#8874) * :bug: Use page name for multi-export downloads * :recycle: Refactor parameter formatting in asset export function * :sparkles: Use page name for multi-export ZIP/PDF downloads [Github #8773] --------- Co-authored-by: Andrey Antukh --- CHANGES.md | 1 + .../src/app/main/data/exports/assets.cljs | 59 +++++++++++-------- frontend/src/app/main/ui/exports/assets.cljs | 14 +++-- frontend/src/app/main/ui/inspect/exports.cljs | 2 +- 4 files changed, 46 insertions(+), 30 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index c703c050b3..2f4847e0b7 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -26,6 +26,7 @@ - Save and restore selection state in undo/redo (by @eureka928) [Github #6007](https://github.com/penpot/penpot/issues/6007) - Fix warnings for unsupported token $type (by @Dexterity104) [Github #8790](https://github.com/penpot/penpot/issues/8790) - Add per-group add button for typographies (by @eureka928) [Github #5275](https://github.com/penpot/penpot/issues/5275) +- Use page name for multi-export ZIP/PDF downloads (by @Dexterity104) [Github #8773](https://github.com/penpot/penpot/issues/8773) ### :bug: Bugs fixed diff --git a/frontend/src/app/main/data/exports/assets.cljs b/frontend/src/app/main/data/exports/assets.cljs index 8ab85b5228..143dec67d4 100644 --- a/frontend/src/app/main/data/exports/assets.cljs +++ b/frontend/src/app/main/data/exports/assets.cljs @@ -65,6 +65,9 @@ (dsh/lookup-shapes state selected) (reverse (dsh/filter-shapes state #(pos? (count (:exports %)))))) + page (dsh/lookup-page state) + page-name (:name page) + exports (for [shape shapes export (:exports shape)] (-> export @@ -76,10 +79,12 @@ (assoc :name (:name shape))))] (rx/of (modal/show :export-shapes - {:exports (vec exports) :origin origin})))))) + {:exports (vec exports) + :origin origin + :name page-name})))))) (defn show-viewer-export-dialog - [{:keys [shapes page-id file-id share-id exports]}] + [{:keys [shapes page-id file-id share-id exports name]}] (ptk/reify ::show-viewer-export-dialog ptk/WatchEvent (watch [_ _ _] @@ -93,27 +98,32 @@ (assoc :shape (dissoc shape :exports)) (assoc :name (:name shape)) (cond-> share-id (assoc :share-id share-id))))] - (rx/of (modal/show :export-shapes {:exports (vec exports) :origin "viewer"})))))) #_TODO + (rx/of (modal/show :export-shapes {:exports (vec exports) + :origin "viewer" + :name name})))))) #_TODO (defn show-workspace-export-frames-dialog [frames] (ptk/reify ::show-workspace-export-frames-dialog ptk/WatchEvent (watch [_ state _] - (let [file-id (:current-file-id state) - page-id (:current-page-id state) - exports (mapv (fn [frame] - {:enabled true - :page-id page-id - :file-id file-id - :object-id (:id frame) - :shape frame - :name (:name frame)}) - frames)] + (let [file-id (:current-file-id state) + page-id (:current-page-id state) + page (dsh/lookup-page state) + page-name (:name page) + exports (mapv (fn [frame] + {:enabled true + :page-id page-id + :file-id file-id + :object-id (:id frame) + :shape frame + :name (:name frame)}) + frames)] (rx/of (modal/show :export-frames {:exports exports - :origin "workspace:menu"})))))) + :origin "workspace:menu" + :name page-name})))))) (defn- initialize-export-status [exports cmd resource] @@ -197,7 +207,7 @@ (rx/throw cause))))))))))) (defn request-multiple-export - [{:keys [exports cmd] + [{:keys [exports cmd name] :or {cmd :export-shapes} :as params}] (ptk/reify ::request-multiple-export @@ -206,14 +216,17 @@ (let [resource-id (volatile! nil) profile-id (:profile-id state) ws-conn (:ws-conn state) - params {:exports exports - :cmd cmd - :profile-id profile-id - :force-multiple true - :is-wasm - (and - (features/active-feature? state "render-wasm/v1") - (contains? cf/flags :wasm-export))} + params (cond-> + {:exports exports + :cmd cmd + :profile-id profile-id + :force-multiple true + :is-wasm + (and + (features/active-feature? state "render-wasm/v1") + (contains? cf/flags :wasm-export))} + (some? name) + (assoc :name name)) progress-stream (->> (ws/get-rcv-stream ws-conn) diff --git a/frontend/src/app/main/ui/exports/assets.cljs b/frontend/src/app/main/ui/exports/assets.cljs index feb7f52906..a32a2ca5f6 100644 --- a/frontend/src/app/main/ui/exports/assets.cljs +++ b/frontend/src/app/main/ui/exports/assets.cljs @@ -36,7 +36,7 @@ (mf/defc export-multiple-dialog* {::mf/private true} - [{:keys [exports title cmd no-selection origin]}] + [{:keys [exports title cmd no-selection origin name]}] (let [lstate (mf/deref refs/export) in-progress? (:in-progress lstate) exports (mf/use-state exports) @@ -59,7 +59,7 @@ (fn [event] (dom/prevent-default event) (st/emit! (modal/hide) - (de/request-multiple-export {:exports enabled-exports :cmd cmd}) + (de/request-multiple-export {:exports enabled-exports :cmd cmd :name name}) (de/export-shapes-event enabled-exports origin))) on-toggle-enabled @@ -185,25 +185,27 @@ (mf/defc export-shapes-dialog {::mf/register modal/components ::mf/register-as :export-shapes} - [{:keys [exports origin]}] + [{:keys [exports origin name]}] (let [title (tr "dashboard.export-shapes.title")] [:> export-multiple-dialog* {:exports exports :title title :cmd :export-shapes :no-selection shapes-no-selection - :origin origin}])) + :origin origin + :name name}])) (mf/defc export-frames {::mf/register modal/components ::mf/register-as :export-frames} - [{:keys [exports origin]}] + [{:keys [exports origin name]}] (let [title (tr "dashboard.export-frames.title")] [:> export-multiple-dialog* {:exports exports :title title :cmd :export-frames - :origin origin}])) + :origin origin + :name name}])) ;; FIXME: deprecated, should be refactored in two components and use ;; the generic progress reporter diff --git a/frontend/src/app/main/ui/inspect/exports.cljs b/frontend/src/app/main/ui/inspect/exports.cljs index 7240ad59ea..04cd8260ac 100644 --- a/frontend/src/app/main/ui/inspect/exports.cljs +++ b/frontend/src/app/main/ui/inspect/exports.cljs @@ -47,7 +47,7 @@ (if (= :multiple type) (st/emit! (de/show-viewer-export-dialog {:shapes shapes :exports @exports - :filename filename + :name filename :page-id page-id :file-id file-id :share-id share-id}))