feat: filter templates by category + top-bar search in the Add-a-document drawer - EXO-88766 - #2012
Merged
bmestrallet merged 6 commits intoJul 22, 2026
Conversation
bmestrallet
force-pushed
the
feat/EXO-88755-documents-templates
branch
2 times, most recently
from
July 22, 2026 20:48
03adc67 to
e15fd04
Compare
Base automatically changed from
feat/EXO-88755-documents-templates
to
feature/ai-contribution
July 22, 2026 20:49
bmestrallet
force-pushed
the
feat/EXO-88766-templates-category-filter
branch
from
July 22, 2026 20:52
ed25939 to
0bea4db
Compare
…ment drawer - EXO-88766 Adds a filter row to the drawer's Templates section, reusing the shared <categories-filter> chip bar (the same flat component the activity stream + Docs app use, from categoryVueComponents; object-type=document, space-id=drive owner, hide-on-empty so it only shows when templates are actually categorized). Free-text search follows the standard drawer pattern — a filter icon in the title bar opens a full-width search field with a back arrow. Both filters apply client-side over the already-loaded templates (category via item.categoryIds compared as strings so number/string ids match; search via name); no extra backend. Filters only surface once there are enough templates (>3). Wiring: AttachmentApp gatein module now depends on categoryVueComponents so the chip component resolves in the bundle. Live-verified: chips render + filter, top-bar search filters + back-arrow restores. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…rawer - EXO-88766 Replace the hand-rolled title-bar search with exo-drawer's built-in header filter (use-filter + filter-placeholder + @filter-updated), so the filter icon sits at the platform-standard location next to the close button with the standard glyph/size/margin, and add allow-expand for a full-screen icon to browse templates more comfortably. The category chip bar stays in the content; both filters remain client-side over the loaded templates. Live-verified: funnel → inline search filters (Budget → 3); expand toggles full screen and reveals more category chips. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…nded - EXO-88766 Switch the template grid to CSS grid auto-fill (repeat(auto-fill, minmax(240px, 1fr))): one full-width card per row in the normal narrow drawer, flowing to several columns automatically when the drawer is expanded — purely container-width driven, no expand-state needed. Live-verified: collapsed = 1/row, expanded = 5/row. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…s fix - EXO-88766 - Detect the expanded (full-screen) state via exo-drawer's own @expand-updated event (same pattern as App Center's launcher drawer) — no ResizeObserver hack. - Show the category chip bar only in the expanded view (room for it there). - Centre the expanded content (max-width 1200, margin-inline auto) so it has left/ right margins like the notification/favorite drawers instead of edge-to-edge. - Fix the selected-template ring to the card's own 4px radius so it hugs the corners instead of bowing out. Live-verified: collapsed = no chips / full-width card / ring hugs; expanded = chips shown, content centred with margins, multi-column, event flips drawerExpanded. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…-root; hide checkbox+menu - EXO-88766 - Category filter: navigating back to root emits `undefined`, which the filter treated as a value (String(undefined)) and matched nothing → no templates. Use `!= null` so null/undefined both mean 'no filter' (show all). - Template cards now use show-details=true so the reused card's title band (file icon + name) shows permanently, like the Documents card view, and the info button is kept visible without hovering. - Suppress the docs card-view selection checkbox and 3-dots actions menu on the template cards (they make no sense when picking a template); keep the info button. Live-verified: root shows all; band + info always visible; hover shows no checkbox/menu; category filter still narrows correctly. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
bmestrallet
force-pushed
the
feat/EXO-88766-templates-category-filter
branch
from
July 22, 2026 20:59
0bea4db to
7079040
Compare
…8768 (#2013) * EXO-88721: Revamp attachment drive-explorer picker onto /v1/documents API Rewrite the level-2 "Use existing uploads" picker (AttachmentsDriveExplorerDrawer) off the legacy ECMS/WCM XML drive listing onto the modern documents-service /v1/documents JSON API. - Two-source model: My Documents (userIdentityId) + My Spaces (space.identity.id); cloud drives dropped. - Reuse the mobile FolderTreeViewDrawer for drive/space/folder navigation; the panel icon opens it and it auto-expands to the current folder (fix a Vuetify v-treeview buildTree crash caused by backend children:null on empty leaf folders). - Reuse documents-breadcrumb with a new global mobile branch (fa-angle-left to parent + current folder / drive name). - Simple list rows (checkbox + icon + name); exo-drawer use-filter header search driving server-side query; server-side pagination. - Reuse Documents list cells via a $root shim on the attachment app. - Preserve the level-1 emit contract and folder CRUD. - Scope two leaking documents.css rules (.v-alert__content, .py-10px) under .documents-application to avoid bleeding into other portlets. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat: revamp attachments drawer UX and add dedicated create-document drawer - EXO-88732 Level-1 "Attach files" drawer: - Empty state: hero drop-zone + secondary tiles (Select from Documents / Create a new document); populated state: compact add bar (Upload / Documents / New) keeping room for the list. - Full-drawer drag-and-drop overlay (bound to the drawer body, since exo-drawer teleports its panel out of the component root), remove-all with confirm, retry-on-failed-upload, and de-dup of the rendered list by (id || uploadId). - Richer attachment rows: thumbnails, transparent source + location chips, and a remove/detach control that shows in both composer and entity-bound modes. Create document is now a dedicated nested "Add a document" drawer (replacing the popup menu): - Doc-type selectable cards (Document/Spreadsheet/Presentation) with hover and a primary-ring selected state, keyboard-accessible (role/tabindex/Enter-Space). - Inline title field + a footer Cancel/Create (Create disabled until a type is picked and the title is valid); reuses the existing create / 409 / OnlyOffice editor-tab logic; returns to the populated level-1 list on success. - "Or start from a template" separator + a Templates placeholder empty-state (scaffold for a future templates backend). Level-2 drive picker: - Explicit back arrow returning to level-1. - Ship the breadcrumb root label keys in the attachments bundle so they resolve on host pages (notes/task/news editors) that do not load the Documents bundle. UI polish: shadow + light-grey tile hover (kept border), larger top margin, and FA5-safe icons throughout. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat: Drive "+ New" menu — Upload item + shared "Add a document" drawer - EXO-88752 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat: document templates in the shared "Add a document" drawer - EXO-88755 Make the scaffolded Templates section of the shared create-document drawer real, entirely in the documents repo and reusing existing components. - Source = the "Templates" folder (by convention) at the current drive's docs root, resolved per context (space identity in a space, user identity in personal) via GET /v1/documents; its files are listed and rendered. - Cards REUSE the Documents-app grid card (documents-item-card) for the thumbnail preview + hover title/info bar, registered into the attachment bundle via initComponents.js. Real thumbnails come for free. - Card click copies the template node into the current target folder (POST /v1/documents/duplicate, destinationId resolved from the drive-root relative path via the breadcrumb endpoint) then behaves like blank-create: attachment-list add / Drive refresh, and OnlyOffice open only for office document types (PDF/image templates are copied but not opened, avoiding an editor error). - The card's hover info icon opens the existing document-info-drawer. - Visibility: the Templates section is always shown; when the folder is absent/empty a neutral, context word-swapped placeholder is displayed (new i18n keys in attachments_en.properties). No backend changes: reuses /v1/documents list + /v1/documents/duplicate + /v1/documents/breadcrumb. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat: rename Drive Import to Mass Import with archive icon - EXO-88752 The '+ New' menu 'Import' entry (zip mass import) is renamed 'Mass Import' and uses a distinct 'far fa-file-archive' icon (was the same fa-upload as the Upload entry). i18n via the existing documents.label.zip.upload key; desktop + mobile menus both updated. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat: templates drawer — name-first create, full-width cards, folder bootstrap, symlink templates - EXO-88755 Follow-up polish on the shared Add-a-document drawer's Templates section: - Name-first create (option B): clicking a template card selects it (primary ring) and reveals an editable title field right under that card, pre-filled with the template's base name; the footer Create commits it with that name. - Full-width, stacked template cards (were fixed-width side-by-side). - Readable card hover band: the reused Documents card's title band rendered white in the drawer (theme --allPagesMaskColor + a nested white v-card hid the white file name); force the activity-stream grey and make the inner name card transparent, teleport-proof selectors. - Collision-safe create: copy the template into the target folder, re-fetch the created node for a valid (openable) id, and fall back to a dedupe-safe in-place duplicate on the JCR 'same name sibling' 500 — no backend change. - Bootstrap (A): when the Templates folder is missing and the user can edit the drive root, offer a one-click 'Create a Templates folder'; context-aware empty states otherwise. - Global/other-space templates via symlinks (B): copy the symlink target (sourceID) so the new doc holds real content; filter symlinks whose target the viewer can't read. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix: create-from-template targets the copy by id-diff, not by name - EXO-88755 The created copy was located by name (name === template.name). When the backend de-duplicated a clashing name to 'name (1)', that match instead picked the source template, so the option-B rename hit the template's id — renaming/consuming the source and 503-ing (JCR refuses to rename a node OnlyOffice has open). Fix: snapshot the destination folder's file ids before the copy (listFolderFileIds) and pick the one new id afterwards (findNewCopy). The rename now targets the actual copy (a fresh, unopened node). Verified live in the collision scenario: copy id != template id, rename 200, source template preserved; symlink templates also copy their target into a real file. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat: filter templates by category + top-bar search in the Add-a-document drawer - EXO-88766 Adds a filter row to the drawer's Templates section, reusing the shared <categories-filter> chip bar (the same flat component the activity stream + Docs app use, from categoryVueComponents; object-type=document, space-id=drive owner, hide-on-empty so it only shows when templates are actually categorized). Free-text search follows the standard drawer pattern — a filter icon in the title bar opens a full-width search field with a back arrow. Both filters apply client-side over the already-loaded templates (category via item.categoryIds compared as strings so number/string ids match; search via name); no extra backend. Filters only surface once there are enough templates (>3). Wiring: AttachmentApp gatein module now depends on categoryVueComponents so the chip component resolves in the bundle. Live-verified: chips render + filter, top-bar search filters + back-arrow restores. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat: use exo-drawer built-in filter icon + expand in the templates drawer - EXO-88766 Replace the hand-rolled title-bar search with exo-drawer's built-in header filter (use-filter + filter-placeholder + @filter-updated), so the filter icon sits at the platform-standard location next to the close button with the standard glyph/size/margin, and add allow-expand for a full-screen icon to browse templates more comfortably. The category chip bar stays in the content; both filters remain client-side over the loaded templates. Live-verified: funnel → inline search filters (Budget → 3); expand toggles full screen and reveals more category chips. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat: responsive template grid — multi-column when the drawer is expanded - EXO-88766 Switch the template grid to CSS grid auto-fill (repeat(auto-fill, minmax(240px, 1fr))): one full-width card per row in the normal narrow drawer, flowing to several columns automatically when the drawer is expanded — purely container-width driven, no expand-state needed. Live-verified: collapsed = 1/row, expanded = 5/row. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat: expanded-only category bar + centered side margins + ring radius fix - EXO-88766 - Detect the expanded (full-screen) state via exo-drawer's own @expand-updated event (same pattern as App Center's launcher drawer) — no ResizeObserver hack. - Show the category chip bar only in the expanded view (room for it there). - Centre the expanded content (max-width 1200, margin-inline auto) so it has left/ right margins like the notification/favorite drawers instead of edge-to-edge. - Fix the selected-template ring to the card's own 4px radius so it hugs the corners instead of bowing out. Live-verified: collapsed = no chips / full-width card / ring hugs; expanded = chips shown, content centred with margins, multi-column, event flips drawerExpanded. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix: template cards always show icon/title/info; fix category back-to-root; hide checkbox+menu - EXO-88766 - Category filter: navigating back to root emits `undefined`, which the filter treated as a value (String(undefined)) and matched nothing → no templates. Use `!= null` so null/undefined both mean 'no filter' (show all). - Template cards now use show-details=true so the reused card's title band (file icon + name) shows permanently, like the Documents card view, and the info button is kept visible without hovering. - Suppress the docs card-view selection checkbox and 3-dots actions menu on the template cards (they make no sense when picking a template); keep the info button. Live-verified: root shows all; band + info always visible; hover shows no checkbox/menu; category filter still narrows correctly. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat: drive search + back arrow in the Folder tree nav drawer - EXO-88768 Add exo-drawer's built-in header filter (use-filter -> filter icon -> full-width search) to the shared FolderTreeViewDrawer, wired to the tree's existing searchDrives(query) via the 'search-drives' event (the same event DocumentsMain already emits) — searches the user's spaces server-side, resets on empty. Add a back arrow in the title for consistency with the other level-2 drawers (closes the nav drawer, revealing the explorer/list underneath). Shared component, so it benefits both the Documents mobile nav and the attachment drive explorer. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix: wire the Folder tree filter to v-treeview's native search - EXO-88768 The filter was emitting 'search-drives', but that event's handler (searchDrives) lives on the desktop side-panel component (FolderTreeView), which isn't mounted when the drawer is used — so typing did nothing. Instead feed the filter text into v-treeview's built-in :search: added a 'search' prop to TreeView (document-tree-view) and bound the drawer's filter to it, filtering the loaded tree (drives + expanded folders) by name client-side. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
bmestrallet
added a commit
that referenced
this pull request
Jul 28, 2026
…ment drawer - EXO-88766 (#2012) * feat: filter templates by category + top-bar search in the Add-a-document drawer - EXO-88766 Adds a filter row to the drawer's Templates section, reusing the shared <categories-filter> chip bar (the same flat component the activity stream + Docs app use, from categoryVueComponents; object-type=document, space-id=drive owner, hide-on-empty so it only shows when templates are actually categorized). Free-text search follows the standard drawer pattern — a filter icon in the title bar opens a full-width search field with a back arrow. Both filters apply client-side over the already-loaded templates (category via item.categoryIds compared as strings so number/string ids match; search via name); no extra backend. Filters only surface once there are enough templates (>3). Wiring: AttachmentApp gatein module now depends on categoryVueComponents so the chip component resolves in the bundle. Live-verified: chips render + filter, top-bar search filters + back-arrow restores. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat: use exo-drawer built-in filter icon + expand in the templates drawer - EXO-88766 Replace the hand-rolled title-bar search with exo-drawer's built-in header filter (use-filter + filter-placeholder + @filter-updated), so the filter icon sits at the platform-standard location next to the close button with the standard glyph/size/margin, and add allow-expand for a full-screen icon to browse templates more comfortably. The category chip bar stays in the content; both filters remain client-side over the loaded templates. Live-verified: funnel → inline search filters (Budget → 3); expand toggles full screen and reveals more category chips. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat: responsive template grid — multi-column when the drawer is expanded - EXO-88766 Switch the template grid to CSS grid auto-fill (repeat(auto-fill, minmax(240px, 1fr))): one full-width card per row in the normal narrow drawer, flowing to several columns automatically when the drawer is expanded — purely container-width driven, no expand-state needed. Live-verified: collapsed = 1/row, expanded = 5/row. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat: expanded-only category bar + centered side margins + ring radius fix - EXO-88766 - Detect the expanded (full-screen) state via exo-drawer's own @expand-updated event (same pattern as App Center's launcher drawer) — no ResizeObserver hack. - Show the category chip bar only in the expanded view (room for it there). - Centre the expanded content (max-width 1200, margin-inline auto) so it has left/ right margins like the notification/favorite drawers instead of edge-to-edge. - Fix the selected-template ring to the card's own 4px radius so it hugs the corners instead of bowing out. Live-verified: collapsed = no chips / full-width card / ring hugs; expanded = chips shown, content centred with margins, multi-column, event flips drawerExpanded. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix: template cards always show icon/title/info; fix category back-to-root; hide checkbox+menu - EXO-88766 - Category filter: navigating back to root emits `undefined`, which the filter treated as a value (String(undefined)) and matched nothing → no templates. Use `!= null` so null/undefined both mean 'no filter' (show all). - Template cards now use show-details=true so the reused card's title band (file icon + name) shows permanently, like the Documents card view, and the info button is kept visible without hovering. - Suppress the docs card-view selection checkbox and 3-dots actions menu on the template cards (they make no sense when picking a template); keep the info button. Live-verified: root shows all; band + info always visible; hover shows no checkbox/menu; category filter still narrows correctly. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat: drive search + back arrow in the Folder tree nav drawer - EXO-88768 (#2013) * EXO-88721: Revamp attachment drive-explorer picker onto /v1/documents API Rewrite the level-2 "Use existing uploads" picker (AttachmentsDriveExplorerDrawer) off the legacy ECMS/WCM XML drive listing onto the modern documents-service /v1/documents JSON API. - Two-source model: My Documents (userIdentityId) + My Spaces (space.identity.id); cloud drives dropped. - Reuse the mobile FolderTreeViewDrawer for drive/space/folder navigation; the panel icon opens it and it auto-expands to the current folder (fix a Vuetify v-treeview buildTree crash caused by backend children:null on empty leaf folders). - Reuse documents-breadcrumb with a new global mobile branch (fa-angle-left to parent + current folder / drive name). - Simple list rows (checkbox + icon + name); exo-drawer use-filter header search driving server-side query; server-side pagination. - Reuse Documents list cells via a $root shim on the attachment app. - Preserve the level-1 emit contract and folder CRUD. - Scope two leaking documents.css rules (.v-alert__content, .py-10px) under .documents-application to avoid bleeding into other portlets. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat: revamp attachments drawer UX and add dedicated create-document drawer - EXO-88732 Level-1 "Attach files" drawer: - Empty state: hero drop-zone + secondary tiles (Select from Documents / Create a new document); populated state: compact add bar (Upload / Documents / New) keeping room for the list. - Full-drawer drag-and-drop overlay (bound to the drawer body, since exo-drawer teleports its panel out of the component root), remove-all with confirm, retry-on-failed-upload, and de-dup of the rendered list by (id || uploadId). - Richer attachment rows: thumbnails, transparent source + location chips, and a remove/detach control that shows in both composer and entity-bound modes. Create document is now a dedicated nested "Add a document" drawer (replacing the popup menu): - Doc-type selectable cards (Document/Spreadsheet/Presentation) with hover and a primary-ring selected state, keyboard-accessible (role/tabindex/Enter-Space). - Inline title field + a footer Cancel/Create (Create disabled until a type is picked and the title is valid); reuses the existing create / 409 / OnlyOffice editor-tab logic; returns to the populated level-1 list on success. - "Or start from a template" separator + a Templates placeholder empty-state (scaffold for a future templates backend). Level-2 drive picker: - Explicit back arrow returning to level-1. - Ship the breadcrumb root label keys in the attachments bundle so they resolve on host pages (notes/task/news editors) that do not load the Documents bundle. UI polish: shadow + light-grey tile hover (kept border), larger top margin, and FA5-safe icons throughout. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat: Drive "+ New" menu — Upload item + shared "Add a document" drawer - EXO-88752 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat: document templates in the shared "Add a document" drawer - EXO-88755 Make the scaffolded Templates section of the shared create-document drawer real, entirely in the documents repo and reusing existing components. - Source = the "Templates" folder (by convention) at the current drive's docs root, resolved per context (space identity in a space, user identity in personal) via GET /v1/documents; its files are listed and rendered. - Cards REUSE the Documents-app grid card (documents-item-card) for the thumbnail preview + hover title/info bar, registered into the attachment bundle via initComponents.js. Real thumbnails come for free. - Card click copies the template node into the current target folder (POST /v1/documents/duplicate, destinationId resolved from the drive-root relative path via the breadcrumb endpoint) then behaves like blank-create: attachment-list add / Drive refresh, and OnlyOffice open only for office document types (PDF/image templates are copied but not opened, avoiding an editor error). - The card's hover info icon opens the existing document-info-drawer. - Visibility: the Templates section is always shown; when the folder is absent/empty a neutral, context word-swapped placeholder is displayed (new i18n keys in attachments_en.properties). No backend changes: reuses /v1/documents list + /v1/documents/duplicate + /v1/documents/breadcrumb. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat: rename Drive Import to Mass Import with archive icon - EXO-88752 The '+ New' menu 'Import' entry (zip mass import) is renamed 'Mass Import' and uses a distinct 'far fa-file-archive' icon (was the same fa-upload as the Upload entry). i18n via the existing documents.label.zip.upload key; desktop + mobile menus both updated. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat: templates drawer — name-first create, full-width cards, folder bootstrap, symlink templates - EXO-88755 Follow-up polish on the shared Add-a-document drawer's Templates section: - Name-first create (option B): clicking a template card selects it (primary ring) and reveals an editable title field right under that card, pre-filled with the template's base name; the footer Create commits it with that name. - Full-width, stacked template cards (were fixed-width side-by-side). - Readable card hover band: the reused Documents card's title band rendered white in the drawer (theme --allPagesMaskColor + a nested white v-card hid the white file name); force the activity-stream grey and make the inner name card transparent, teleport-proof selectors. - Collision-safe create: copy the template into the target folder, re-fetch the created node for a valid (openable) id, and fall back to a dedupe-safe in-place duplicate on the JCR 'same name sibling' 500 — no backend change. - Bootstrap (A): when the Templates folder is missing and the user can edit the drive root, offer a one-click 'Create a Templates folder'; context-aware empty states otherwise. - Global/other-space templates via symlinks (B): copy the symlink target (sourceID) so the new doc holds real content; filter symlinks whose target the viewer can't read. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix: create-from-template targets the copy by id-diff, not by name - EXO-88755 The created copy was located by name (name === template.name). When the backend de-duplicated a clashing name to 'name (1)', that match instead picked the source template, so the option-B rename hit the template's id — renaming/consuming the source and 503-ing (JCR refuses to rename a node OnlyOffice has open). Fix: snapshot the destination folder's file ids before the copy (listFolderFileIds) and pick the one new id afterwards (findNewCopy). The rename now targets the actual copy (a fresh, unopened node). Verified live in the collision scenario: copy id != template id, rename 200, source template preserved; symlink templates also copy their target into a real file. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat: filter templates by category + top-bar search in the Add-a-document drawer - EXO-88766 Adds a filter row to the drawer's Templates section, reusing the shared <categories-filter> chip bar (the same flat component the activity stream + Docs app use, from categoryVueComponents; object-type=document, space-id=drive owner, hide-on-empty so it only shows when templates are actually categorized). Free-text search follows the standard drawer pattern — a filter icon in the title bar opens a full-width search field with a back arrow. Both filters apply client-side over the already-loaded templates (category via item.categoryIds compared as strings so number/string ids match; search via name); no extra backend. Filters only surface once there are enough templates (>3). Wiring: AttachmentApp gatein module now depends on categoryVueComponents so the chip component resolves in the bundle. Live-verified: chips render + filter, top-bar search filters + back-arrow restores. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat: use exo-drawer built-in filter icon + expand in the templates drawer - EXO-88766 Replace the hand-rolled title-bar search with exo-drawer's built-in header filter (use-filter + filter-placeholder + @filter-updated), so the filter icon sits at the platform-standard location next to the close button with the standard glyph/size/margin, and add allow-expand for a full-screen icon to browse templates more comfortably. The category chip bar stays in the content; both filters remain client-side over the loaded templates. Live-verified: funnel → inline search filters (Budget → 3); expand toggles full screen and reveals more category chips. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat: responsive template grid — multi-column when the drawer is expanded - EXO-88766 Switch the template grid to CSS grid auto-fill (repeat(auto-fill, minmax(240px, 1fr))): one full-width card per row in the normal narrow drawer, flowing to several columns automatically when the drawer is expanded — purely container-width driven, no expand-state needed. Live-verified: collapsed = 1/row, expanded = 5/row. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat: expanded-only category bar + centered side margins + ring radius fix - EXO-88766 - Detect the expanded (full-screen) state via exo-drawer's own @expand-updated event (same pattern as App Center's launcher drawer) — no ResizeObserver hack. - Show the category chip bar only in the expanded view (room for it there). - Centre the expanded content (max-width 1200, margin-inline auto) so it has left/ right margins like the notification/favorite drawers instead of edge-to-edge. - Fix the selected-template ring to the card's own 4px radius so it hugs the corners instead of bowing out. Live-verified: collapsed = no chips / full-width card / ring hugs; expanded = chips shown, content centred with margins, multi-column, event flips drawerExpanded. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix: template cards always show icon/title/info; fix category back-to-root; hide checkbox+menu - EXO-88766 - Category filter: navigating back to root emits `undefined`, which the filter treated as a value (String(undefined)) and matched nothing → no templates. Use `!= null` so null/undefined both mean 'no filter' (show all). - Template cards now use show-details=true so the reused card's title band (file icon + name) shows permanently, like the Documents card view, and the info button is kept visible without hovering. - Suppress the docs card-view selection checkbox and 3-dots actions menu on the template cards (they make no sense when picking a template); keep the info button. Live-verified: root shows all; band + info always visible; hover shows no checkbox/menu; category filter still narrows correctly. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat: drive search + back arrow in the Folder tree nav drawer - EXO-88768 Add exo-drawer's built-in header filter (use-filter -> filter icon -> full-width search) to the shared FolderTreeViewDrawer, wired to the tree's existing searchDrives(query) via the 'search-drives' event (the same event DocumentsMain already emits) — searches the user's spaces server-side, resets on empty. Add a back arrow in the title for consistency with the other level-2 drawers (closes the nav drawer, revealing the explorer/list underneath). Shared component, so it benefits both the Documents mobile nav and the attachment drive explorer. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix: wire the Folder tree filter to v-treeview's native search - EXO-88768 The filter was emitting 'search-drives', but that event's handler (searchDrives) lives on the desktop side-panel component (FolderTreeView), which isn't mounted when the drawer is used — so typing did nothing. Instead feed the filter text into v-treeview's built-in :search: added a 'search' prop to TreeView (document-tree-view) and bound the drawer's filter to it, filtering the loaded tree (drives + expanded folders) by name client-side. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Jihed525
pushed a commit
that referenced
this pull request
Jul 30, 2026
…ment drawer - EXO-88766 (#2012) * feat: filter templates by category + top-bar search in the Add-a-document drawer - EXO-88766 Adds a filter row to the drawer's Templates section, reusing the shared <categories-filter> chip bar (the same flat component the activity stream + Docs app use, from categoryVueComponents; object-type=document, space-id=drive owner, hide-on-empty so it only shows when templates are actually categorized). Free-text search follows the standard drawer pattern — a filter icon in the title bar opens a full-width search field with a back arrow. Both filters apply client-side over the already-loaded templates (category via item.categoryIds compared as strings so number/string ids match; search via name); no extra backend. Filters only surface once there are enough templates (>3). Wiring: AttachmentApp gatein module now depends on categoryVueComponents so the chip component resolves in the bundle. Live-verified: chips render + filter, top-bar search filters + back-arrow restores. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat: use exo-drawer built-in filter icon + expand in the templates drawer - EXO-88766 Replace the hand-rolled title-bar search with exo-drawer's built-in header filter (use-filter + filter-placeholder + @filter-updated), so the filter icon sits at the platform-standard location next to the close button with the standard glyph/size/margin, and add allow-expand for a full-screen icon to browse templates more comfortably. The category chip bar stays in the content; both filters remain client-side over the loaded templates. Live-verified: funnel → inline search filters (Budget → 3); expand toggles full screen and reveals more category chips. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat: responsive template grid — multi-column when the drawer is expanded - EXO-88766 Switch the template grid to CSS grid auto-fill (repeat(auto-fill, minmax(240px, 1fr))): one full-width card per row in the normal narrow drawer, flowing to several columns automatically when the drawer is expanded — purely container-width driven, no expand-state needed. Live-verified: collapsed = 1/row, expanded = 5/row. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat: expanded-only category bar + centered side margins + ring radius fix - EXO-88766 - Detect the expanded (full-screen) state via exo-drawer's own @expand-updated event (same pattern as App Center's launcher drawer) — no ResizeObserver hack. - Show the category chip bar only in the expanded view (room for it there). - Centre the expanded content (max-width 1200, margin-inline auto) so it has left/ right margins like the notification/favorite drawers instead of edge-to-edge. - Fix the selected-template ring to the card's own 4px radius so it hugs the corners instead of bowing out. Live-verified: collapsed = no chips / full-width card / ring hugs; expanded = chips shown, content centred with margins, multi-column, event flips drawerExpanded. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix: template cards always show icon/title/info; fix category back-to-root; hide checkbox+menu - EXO-88766 - Category filter: navigating back to root emits `undefined`, which the filter treated as a value (String(undefined)) and matched nothing → no templates. Use `!= null` so null/undefined both mean 'no filter' (show all). - Template cards now use show-details=true so the reused card's title band (file icon + name) shows permanently, like the Documents card view, and the info button is kept visible without hovering. - Suppress the docs card-view selection checkbox and 3-dots actions menu on the template cards (they make no sense when picking a template); keep the info button. Live-verified: root shows all; band + info always visible; hover shows no checkbox/menu; category filter still narrows correctly. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat: drive search + back arrow in the Folder tree nav drawer - EXO-88768 (#2013) * EXO-88721: Revamp attachment drive-explorer picker onto /v1/documents API Rewrite the level-2 "Use existing uploads" picker (AttachmentsDriveExplorerDrawer) off the legacy ECMS/WCM XML drive listing onto the modern documents-service /v1/documents JSON API. - Two-source model: My Documents (userIdentityId) + My Spaces (space.identity.id); cloud drives dropped. - Reuse the mobile FolderTreeViewDrawer for drive/space/folder navigation; the panel icon opens it and it auto-expands to the current folder (fix a Vuetify v-treeview buildTree crash caused by backend children:null on empty leaf folders). - Reuse documents-breadcrumb with a new global mobile branch (fa-angle-left to parent + current folder / drive name). - Simple list rows (checkbox + icon + name); exo-drawer use-filter header search driving server-side query; server-side pagination. - Reuse Documents list cells via a $root shim on the attachment app. - Preserve the level-1 emit contract and folder CRUD. - Scope two leaking documents.css rules (.v-alert__content, .py-10px) under .documents-application to avoid bleeding into other portlets. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat: revamp attachments drawer UX and add dedicated create-document drawer - EXO-88732 Level-1 "Attach files" drawer: - Empty state: hero drop-zone + secondary tiles (Select from Documents / Create a new document); populated state: compact add bar (Upload / Documents / New) keeping room for the list. - Full-drawer drag-and-drop overlay (bound to the drawer body, since exo-drawer teleports its panel out of the component root), remove-all with confirm, retry-on-failed-upload, and de-dup of the rendered list by (id || uploadId). - Richer attachment rows: thumbnails, transparent source + location chips, and a remove/detach control that shows in both composer and entity-bound modes. Create document is now a dedicated nested "Add a document" drawer (replacing the popup menu): - Doc-type selectable cards (Document/Spreadsheet/Presentation) with hover and a primary-ring selected state, keyboard-accessible (role/tabindex/Enter-Space). - Inline title field + a footer Cancel/Create (Create disabled until a type is picked and the title is valid); reuses the existing create / 409 / OnlyOffice editor-tab logic; returns to the populated level-1 list on success. - "Or start from a template" separator + a Templates placeholder empty-state (scaffold for a future templates backend). Level-2 drive picker: - Explicit back arrow returning to level-1. - Ship the breadcrumb root label keys in the attachments bundle so they resolve on host pages (notes/task/news editors) that do not load the Documents bundle. UI polish: shadow + light-grey tile hover (kept border), larger top margin, and FA5-safe icons throughout. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat: Drive "+ New" menu — Upload item + shared "Add a document" drawer - EXO-88752 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat: document templates in the shared "Add a document" drawer - EXO-88755 Make the scaffolded Templates section of the shared create-document drawer real, entirely in the documents repo and reusing existing components. - Source = the "Templates" folder (by convention) at the current drive's docs root, resolved per context (space identity in a space, user identity in personal) via GET /v1/documents; its files are listed and rendered. - Cards REUSE the Documents-app grid card (documents-item-card) for the thumbnail preview + hover title/info bar, registered into the attachment bundle via initComponents.js. Real thumbnails come for free. - Card click copies the template node into the current target folder (POST /v1/documents/duplicate, destinationId resolved from the drive-root relative path via the breadcrumb endpoint) then behaves like blank-create: attachment-list add / Drive refresh, and OnlyOffice open only for office document types (PDF/image templates are copied but not opened, avoiding an editor error). - The card's hover info icon opens the existing document-info-drawer. - Visibility: the Templates section is always shown; when the folder is absent/empty a neutral, context word-swapped placeholder is displayed (new i18n keys in attachments_en.properties). No backend changes: reuses /v1/documents list + /v1/documents/duplicate + /v1/documents/breadcrumb. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat: rename Drive Import to Mass Import with archive icon - EXO-88752 The '+ New' menu 'Import' entry (zip mass import) is renamed 'Mass Import' and uses a distinct 'far fa-file-archive' icon (was the same fa-upload as the Upload entry). i18n via the existing documents.label.zip.upload key; desktop + mobile menus both updated. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat: templates drawer — name-first create, full-width cards, folder bootstrap, symlink templates - EXO-88755 Follow-up polish on the shared Add-a-document drawer's Templates section: - Name-first create (option B): clicking a template card selects it (primary ring) and reveals an editable title field right under that card, pre-filled with the template's base name; the footer Create commits it with that name. - Full-width, stacked template cards (were fixed-width side-by-side). - Readable card hover band: the reused Documents card's title band rendered white in the drawer (theme --allPagesMaskColor + a nested white v-card hid the white file name); force the activity-stream grey and make the inner name card transparent, teleport-proof selectors. - Collision-safe create: copy the template into the target folder, re-fetch the created node for a valid (openable) id, and fall back to a dedupe-safe in-place duplicate on the JCR 'same name sibling' 500 — no backend change. - Bootstrap (A): when the Templates folder is missing and the user can edit the drive root, offer a one-click 'Create a Templates folder'; context-aware empty states otherwise. - Global/other-space templates via symlinks (B): copy the symlink target (sourceID) so the new doc holds real content; filter symlinks whose target the viewer can't read. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix: create-from-template targets the copy by id-diff, not by name - EXO-88755 The created copy was located by name (name === template.name). When the backend de-duplicated a clashing name to 'name (1)', that match instead picked the source template, so the option-B rename hit the template's id — renaming/consuming the source and 503-ing (JCR refuses to rename a node OnlyOffice has open). Fix: snapshot the destination folder's file ids before the copy (listFolderFileIds) and pick the one new id afterwards (findNewCopy). The rename now targets the actual copy (a fresh, unopened node). Verified live in the collision scenario: copy id != template id, rename 200, source template preserved; symlink templates also copy their target into a real file. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat: filter templates by category + top-bar search in the Add-a-document drawer - EXO-88766 Adds a filter row to the drawer's Templates section, reusing the shared <categories-filter> chip bar (the same flat component the activity stream + Docs app use, from categoryVueComponents; object-type=document, space-id=drive owner, hide-on-empty so it only shows when templates are actually categorized). Free-text search follows the standard drawer pattern — a filter icon in the title bar opens a full-width search field with a back arrow. Both filters apply client-side over the already-loaded templates (category via item.categoryIds compared as strings so number/string ids match; search via name); no extra backend. Filters only surface once there are enough templates (>3). Wiring: AttachmentApp gatein module now depends on categoryVueComponents so the chip component resolves in the bundle. Live-verified: chips render + filter, top-bar search filters + back-arrow restores. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat: use exo-drawer built-in filter icon + expand in the templates drawer - EXO-88766 Replace the hand-rolled title-bar search with exo-drawer's built-in header filter (use-filter + filter-placeholder + @filter-updated), so the filter icon sits at the platform-standard location next to the close button with the standard glyph/size/margin, and add allow-expand for a full-screen icon to browse templates more comfortably. The category chip bar stays in the content; both filters remain client-side over the loaded templates. Live-verified: funnel → inline search filters (Budget → 3); expand toggles full screen and reveals more category chips. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat: responsive template grid — multi-column when the drawer is expanded - EXO-88766 Switch the template grid to CSS grid auto-fill (repeat(auto-fill, minmax(240px, 1fr))): one full-width card per row in the normal narrow drawer, flowing to several columns automatically when the drawer is expanded — purely container-width driven, no expand-state needed. Live-verified: collapsed = 1/row, expanded = 5/row. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat: expanded-only category bar + centered side margins + ring radius fix - EXO-88766 - Detect the expanded (full-screen) state via exo-drawer's own @expand-updated event (same pattern as App Center's launcher drawer) — no ResizeObserver hack. - Show the category chip bar only in the expanded view (room for it there). - Centre the expanded content (max-width 1200, margin-inline auto) so it has left/ right margins like the notification/favorite drawers instead of edge-to-edge. - Fix the selected-template ring to the card's own 4px radius so it hugs the corners instead of bowing out. Live-verified: collapsed = no chips / full-width card / ring hugs; expanded = chips shown, content centred with margins, multi-column, event flips drawerExpanded. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix: template cards always show icon/title/info; fix category back-to-root; hide checkbox+menu - EXO-88766 - Category filter: navigating back to root emits `undefined`, which the filter treated as a value (String(undefined)) and matched nothing → no templates. Use `!= null` so null/undefined both mean 'no filter' (show all). - Template cards now use show-details=true so the reused card's title band (file icon + name) shows permanently, like the Documents card view, and the info button is kept visible without hovering. - Suppress the docs card-view selection checkbox and 3-dots actions menu on the template cards (they make no sense when picking a template); keep the info button. Live-verified: root shows all; band + info always visible; hover shows no checkbox/menu; category filter still narrows correctly. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat: drive search + back arrow in the Folder tree nav drawer - EXO-88768 Add exo-drawer's built-in header filter (use-filter -> filter icon -> full-width search) to the shared FolderTreeViewDrawer, wired to the tree's existing searchDrives(query) via the 'search-drives' event (the same event DocumentsMain already emits) — searches the user's spaces server-side, resets on empty. Add a back arrow in the title for consistency with the other level-2 drawers (closes the nav drawer, revealing the explorer/list underneath). Shared component, so it benefits both the Documents mobile nav and the attachment drive explorer. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix: wire the Folder tree filter to v-treeview's native search - EXO-88768 The filter was emitting 'search-drives', but that event's handler (searchDrives) lives on the desktop side-panel component (FolderTreeView), which isn't mounted when the drawer is used — so typing did nothing. Instead feed the filter text into v-treeview's built-in :search: added a 'search' prop to TreeView (document-tree-view) and bound the drawer's filter to it, filtering the loaded tree (drives + expanded folders) by name client-side. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> (cherry picked from commit fa7a76e)
bmestrallet
added a commit
that referenced
this pull request
Aug 1, 2026
…ment drawer - EXO-88766 (#2012) * feat: filter templates by category + top-bar search in the Add-a-document drawer - EXO-88766 Adds a filter row to the drawer's Templates section, reusing the shared <categories-filter> chip bar (the same flat component the activity stream + Docs app use, from categoryVueComponents; object-type=document, space-id=drive owner, hide-on-empty so it only shows when templates are actually categorized). Free-text search follows the standard drawer pattern — a filter icon in the title bar opens a full-width search field with a back arrow. Both filters apply client-side over the already-loaded templates (category via item.categoryIds compared as strings so number/string ids match; search via name); no extra backend. Filters only surface once there are enough templates (>3). Wiring: AttachmentApp gatein module now depends on categoryVueComponents so the chip component resolves in the bundle. Live-verified: chips render + filter, top-bar search filters + back-arrow restores. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat: use exo-drawer built-in filter icon + expand in the templates drawer - EXO-88766 Replace the hand-rolled title-bar search with exo-drawer's built-in header filter (use-filter + filter-placeholder + @filter-updated), so the filter icon sits at the platform-standard location next to the close button with the standard glyph/size/margin, and add allow-expand for a full-screen icon to browse templates more comfortably. The category chip bar stays in the content; both filters remain client-side over the loaded templates. Live-verified: funnel → inline search filters (Budget → 3); expand toggles full screen and reveals more category chips. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat: responsive template grid — multi-column when the drawer is expanded - EXO-88766 Switch the template grid to CSS grid auto-fill (repeat(auto-fill, minmax(240px, 1fr))): one full-width card per row in the normal narrow drawer, flowing to several columns automatically when the drawer is expanded — purely container-width driven, no expand-state needed. Live-verified: collapsed = 1/row, expanded = 5/row. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat: expanded-only category bar + centered side margins + ring radius fix - EXO-88766 - Detect the expanded (full-screen) state via exo-drawer's own @expand-updated event (same pattern as App Center's launcher drawer) — no ResizeObserver hack. - Show the category chip bar only in the expanded view (room for it there). - Centre the expanded content (max-width 1200, margin-inline auto) so it has left/ right margins like the notification/favorite drawers instead of edge-to-edge. - Fix the selected-template ring to the card's own 4px radius so it hugs the corners instead of bowing out. Live-verified: collapsed = no chips / full-width card / ring hugs; expanded = chips shown, content centred with margins, multi-column, event flips drawerExpanded. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix: template cards always show icon/title/info; fix category back-to-root; hide checkbox+menu - EXO-88766 - Category filter: navigating back to root emits `undefined`, which the filter treated as a value (String(undefined)) and matched nothing → no templates. Use `!= null` so null/undefined both mean 'no filter' (show all). - Template cards now use show-details=true so the reused card's title band (file icon + name) shows permanently, like the Documents card view, and the info button is kept visible without hovering. - Suppress the docs card-view selection checkbox and 3-dots actions menu on the template cards (they make no sense when picking a template); keep the info button. Live-verified: root shows all; band + info always visible; hover shows no checkbox/menu; category filter still narrows correctly. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat: drive search + back arrow in the Folder tree nav drawer - EXO-88768 (#2013) * EXO-88721: Revamp attachment drive-explorer picker onto /v1/documents API Rewrite the level-2 "Use existing uploads" picker (AttachmentsDriveExplorerDrawer) off the legacy ECMS/WCM XML drive listing onto the modern documents-service /v1/documents JSON API. - Two-source model: My Documents (userIdentityId) + My Spaces (space.identity.id); cloud drives dropped. - Reuse the mobile FolderTreeViewDrawer for drive/space/folder navigation; the panel icon opens it and it auto-expands to the current folder (fix a Vuetify v-treeview buildTree crash caused by backend children:null on empty leaf folders). - Reuse documents-breadcrumb with a new global mobile branch (fa-angle-left to parent + current folder / drive name). - Simple list rows (checkbox + icon + name); exo-drawer use-filter header search driving server-side query; server-side pagination. - Reuse Documents list cells via a $root shim on the attachment app. - Preserve the level-1 emit contract and folder CRUD. - Scope two leaking documents.css rules (.v-alert__content, .py-10px) under .documents-application to avoid bleeding into other portlets. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat: revamp attachments drawer UX and add dedicated create-document drawer - EXO-88732 Level-1 "Attach files" drawer: - Empty state: hero drop-zone + secondary tiles (Select from Documents / Create a new document); populated state: compact add bar (Upload / Documents / New) keeping room for the list. - Full-drawer drag-and-drop overlay (bound to the drawer body, since exo-drawer teleports its panel out of the component root), remove-all with confirm, retry-on-failed-upload, and de-dup of the rendered list by (id || uploadId). - Richer attachment rows: thumbnails, transparent source + location chips, and a remove/detach control that shows in both composer and entity-bound modes. Create document is now a dedicated nested "Add a document" drawer (replacing the popup menu): - Doc-type selectable cards (Document/Spreadsheet/Presentation) with hover and a primary-ring selected state, keyboard-accessible (role/tabindex/Enter-Space). - Inline title field + a footer Cancel/Create (Create disabled until a type is picked and the title is valid); reuses the existing create / 409 / OnlyOffice editor-tab logic; returns to the populated level-1 list on success. - "Or start from a template" separator + a Templates placeholder empty-state (scaffold for a future templates backend). Level-2 drive picker: - Explicit back arrow returning to level-1. - Ship the breadcrumb root label keys in the attachments bundle so they resolve on host pages (notes/task/news editors) that do not load the Documents bundle. UI polish: shadow + light-grey tile hover (kept border), larger top margin, and FA5-safe icons throughout. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat: Drive "+ New" menu — Upload item + shared "Add a document" drawer - EXO-88752 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat: document templates in the shared "Add a document" drawer - EXO-88755 Make the scaffolded Templates section of the shared create-document drawer real, entirely in the documents repo and reusing existing components. - Source = the "Templates" folder (by convention) at the current drive's docs root, resolved per context (space identity in a space, user identity in personal) via GET /v1/documents; its files are listed and rendered. - Cards REUSE the Documents-app grid card (documents-item-card) for the thumbnail preview + hover title/info bar, registered into the attachment bundle via initComponents.js. Real thumbnails come for free. - Card click copies the template node into the current target folder (POST /v1/documents/duplicate, destinationId resolved from the drive-root relative path via the breadcrumb endpoint) then behaves like blank-create: attachment-list add / Drive refresh, and OnlyOffice open only for office document types (PDF/image templates are copied but not opened, avoiding an editor error). - The card's hover info icon opens the existing document-info-drawer. - Visibility: the Templates section is always shown; when the folder is absent/empty a neutral, context word-swapped placeholder is displayed (new i18n keys in attachments_en.properties). No backend changes: reuses /v1/documents list + /v1/documents/duplicate + /v1/documents/breadcrumb. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat: rename Drive Import to Mass Import with archive icon - EXO-88752 The '+ New' menu 'Import' entry (zip mass import) is renamed 'Mass Import' and uses a distinct 'far fa-file-archive' icon (was the same fa-upload as the Upload entry). i18n via the existing documents.label.zip.upload key; desktop + mobile menus both updated. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat: templates drawer — name-first create, full-width cards, folder bootstrap, symlink templates - EXO-88755 Follow-up polish on the shared Add-a-document drawer's Templates section: - Name-first create (option B): clicking a template card selects it (primary ring) and reveals an editable title field right under that card, pre-filled with the template's base name; the footer Create commits it with that name. - Full-width, stacked template cards (were fixed-width side-by-side). - Readable card hover band: the reused Documents card's title band rendered white in the drawer (theme --allPagesMaskColor + a nested white v-card hid the white file name); force the activity-stream grey and make the inner name card transparent, teleport-proof selectors. - Collision-safe create: copy the template into the target folder, re-fetch the created node for a valid (openable) id, and fall back to a dedupe-safe in-place duplicate on the JCR 'same name sibling' 500 — no backend change. - Bootstrap (A): when the Templates folder is missing and the user can edit the drive root, offer a one-click 'Create a Templates folder'; context-aware empty states otherwise. - Global/other-space templates via symlinks (B): copy the symlink target (sourceID) so the new doc holds real content; filter symlinks whose target the viewer can't read. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix: create-from-template targets the copy by id-diff, not by name - EXO-88755 The created copy was located by name (name === template.name). When the backend de-duplicated a clashing name to 'name (1)', that match instead picked the source template, so the option-B rename hit the template's id — renaming/consuming the source and 503-ing (JCR refuses to rename a node OnlyOffice has open). Fix: snapshot the destination folder's file ids before the copy (listFolderFileIds) and pick the one new id afterwards (findNewCopy). The rename now targets the actual copy (a fresh, unopened node). Verified live in the collision scenario: copy id != template id, rename 200, source template preserved; symlink templates also copy their target into a real file. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat: filter templates by category + top-bar search in the Add-a-document drawer - EXO-88766 Adds a filter row to the drawer's Templates section, reusing the shared <categories-filter> chip bar (the same flat component the activity stream + Docs app use, from categoryVueComponents; object-type=document, space-id=drive owner, hide-on-empty so it only shows when templates are actually categorized). Free-text search follows the standard drawer pattern — a filter icon in the title bar opens a full-width search field with a back arrow. Both filters apply client-side over the already-loaded templates (category via item.categoryIds compared as strings so number/string ids match; search via name); no extra backend. Filters only surface once there are enough templates (>3). Wiring: AttachmentApp gatein module now depends on categoryVueComponents so the chip component resolves in the bundle. Live-verified: chips render + filter, top-bar search filters + back-arrow restores. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat: use exo-drawer built-in filter icon + expand in the templates drawer - EXO-88766 Replace the hand-rolled title-bar search with exo-drawer's built-in header filter (use-filter + filter-placeholder + @filter-updated), so the filter icon sits at the platform-standard location next to the close button with the standard glyph/size/margin, and add allow-expand for a full-screen icon to browse templates more comfortably. The category chip bar stays in the content; both filters remain client-side over the loaded templates. Live-verified: funnel → inline search filters (Budget → 3); expand toggles full screen and reveals more category chips. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat: responsive template grid — multi-column when the drawer is expanded - EXO-88766 Switch the template grid to CSS grid auto-fill (repeat(auto-fill, minmax(240px, 1fr))): one full-width card per row in the normal narrow drawer, flowing to several columns automatically when the drawer is expanded — purely container-width driven, no expand-state needed. Live-verified: collapsed = 1/row, expanded = 5/row. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat: expanded-only category bar + centered side margins + ring radius fix - EXO-88766 - Detect the expanded (full-screen) state via exo-drawer's own @expand-updated event (same pattern as App Center's launcher drawer) — no ResizeObserver hack. - Show the category chip bar only in the expanded view (room for it there). - Centre the expanded content (max-width 1200, margin-inline auto) so it has left/ right margins like the notification/favorite drawers instead of edge-to-edge. - Fix the selected-template ring to the card's own 4px radius so it hugs the corners instead of bowing out. Live-verified: collapsed = no chips / full-width card / ring hugs; expanded = chips shown, content centred with margins, multi-column, event flips drawerExpanded. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix: template cards always show icon/title/info; fix category back-to-root; hide checkbox+menu - EXO-88766 - Category filter: navigating back to root emits `undefined`, which the filter treated as a value (String(undefined)) and matched nothing → no templates. Use `!= null` so null/undefined both mean 'no filter' (show all). - Template cards now use show-details=true so the reused card's title band (file icon + name) shows permanently, like the Documents card view, and the info button is kept visible without hovering. - Suppress the docs card-view selection checkbox and 3-dots actions menu on the template cards (they make no sense when picking a template); keep the info button. Live-verified: root shows all; band + info always visible; hover shows no checkbox/menu; category filter still narrows correctly. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat: drive search + back arrow in the Folder tree nav drawer - EXO-88768 Add exo-drawer's built-in header filter (use-filter -> filter icon -> full-width search) to the shared FolderTreeViewDrawer, wired to the tree's existing searchDrives(query) via the 'search-drives' event (the same event DocumentsMain already emits) — searches the user's spaces server-side, resets on empty. Add a back arrow in the title for consistency with the other level-2 drawers (closes the nav drawer, revealing the explorer/list underneath). Shared component, so it benefits both the Documents mobile nav and the attachment drive explorer. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix: wire the Folder tree filter to v-treeview's native search - EXO-88768 The filter was emitting 'search-drives', but that event's handler (searchDrives) lives on the desktop side-panel component (FolderTreeView), which isn't mounted when the drawer is used — so typing did nothing. Instead feed the filter text into v-treeview's built-in :search: added a 'search' prop to TreeView (document-tree-view) and bound the drawer's filter to it, filtering the loaded tree (drives + expanded folders) by name client-side. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stacked on feat/EXO-88755 (PR #2011). Retarget up the chain as the lower PRs merge.
What this adds
A filter row for the Templates section of the shared "Add a document" drawer, so template lists stay usable as they grow.
<categories-filter>component (the same flat chip bar the activity stream and Documents app use, fromcategoryVueComponents):object-type="document",space-id= drive owner,hide-on-emptyso it only appears when the drive's templates are actually categorized. Zero new taxonomy code.item.categoryIds, compared as strings so number/string ids match; search via name) — no extra backend. The row only surfaces once there are more than 3 templates.Wiring
The
AttachmentAppgatein module now<depends>oncategoryVueComponentsso the chip component resolves inside the attachment bundle (the Documents portlet already depends on it).Testing
Built, deployed on a local 7.3.x instance, and live-verified: the category chip bar renders and filters (a real "Company Resources" category narrowed 5 → 1); the top-bar filter icon opens a full-width search that filtered "Budget" → 3 and the back arrow restored the title + cleared the query; category matching confirmed robust to number-vs-string ids. Filters hide for small/uncategorized sets (
hide-on-empty+ the >3 threshold).🤖 Generated with Claude Code