🐛 Use page name for multi-export downloads (#8874)

* 🐛 Use page name for multi-export downloads

* ♻️ Refactor parameter formatting in asset export function

*  Use page name for multi-export ZIP/PDF downloads [Github #8773]

---------

Co-authored-by: Andrey Antukh <niwi@niwi.nz>
This commit is contained in:
Dexterity 2026-04-10 05:21:14 -04:00 committed by GitHub
parent 9e4c8981be
commit 240e8ce50c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 46 additions and 30 deletions

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -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}))