Skip to content

EXO-88721: Revamp attachment drive-explorer picker onto /v1/documents API - #2007

Merged
bmestrallet merged 1 commit into
feature/ai-contributionfrom
feat/EXO-88721-revamp-attachments-drive-explorer
Jul 22, 2026
Merged

EXO-88721: Revamp attachment drive-explorer picker onto /v1/documents API#2007
bmestrallet merged 1 commit into
feature/ai-contributionfrom
feat/EXO-88721-revamp-attachments-drive-explorer

Conversation

@bmestrallet

Copy link
Copy Markdown
Contributor

What

Rewrites the level-2 "Use existing uploads" attachment picker (AttachmentsDriveExplorerDrawer) off the legacy ECMS/WCM XML drive listing (wcmDriver/getDrivers + managedocument/getFoldersAndFiles) onto the modern documents-service /v1/documents JSON API.

Task: AI Contributions Board #88721

Highlights

  • Two-source model: My Documents (ownerId = userIdentityId) + My Spaces (space.identity.id); cloud drives dropped.
  • Navigation reuses the mobile FolderTreeViewDrawer: the panel icon opens the folder tree to pick a drive/space/folder; the tree auto-expands to the current folder on open.
    • Fixes a Vuetify v-treeview.buildTree crash caused by the JCR backend serializing children: null for empty leaf folders (must be an array or absent).
  • Reuses documents-breadcrumb with a new global mobile branch (fa-angle-left to parent + current folder / drive name) — the generic Documents mobile view benefits too.
  • Simple list rows (checkbox + icon + name); exo-drawer use-filter header search driving the server-side query; server-side pagination.
  • Reuses the Documents list cells via a $root shim on the attachment app.
  • Preserves the level-1 emit contract (attachments-changed-from-drives, destination emits) and folder CRUD.
  • Scopes two leaking documents.css rules (.v-alert__content, .py-10px) under .documents-application so they don't bleed into other portlets that render the attachment app.

Verified

Live-tested on a local 7.3.x platform: select → Post binds the attachment to the activity; drive/space navigation, breadcrumb, search, pagination, folder CRUD, and tree auto-expand all work; console clean. Impact-audited against the other attachment-picker consumers (activities/tasks/notes/news/comments) and the desktop Documents/Drive app — no regressions.

Level-1 attachments drawer UX revamp is a separate follow-up PR (stacked on this one).

🤖 Generated with Claude Code

… 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>
@bmestrallet
bmestrallet merged commit 015a1ea into feature/ai-contribution Jul 22, 2026
3 checks passed
@bmestrallet
bmestrallet deleted the feat/EXO-88721-revamp-attachments-drive-explorer branch July 22, 2026 19:04
bmestrallet added a commit that referenced this pull request Jul 28, 2026
… API (#2007)

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>
Jihed525 added a commit that referenced this pull request Jul 31, 2026
…XO-88732 - EXO-88752 - EXO-88777 - EXO-88830 (#2022)

* EXO-88721: Revamp attachment drive-explorer picker onto /v1/documents API (#2007)

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>
(cherry picked from commit 015a1ea)

* feat: revamp attachments drawer UX and add dedicated create-document drawer - EXO-88732 (#2009)

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>
(cherry picked from commit 34d6107)

* feat: Drive "+ New" menu — Upload item + shared "Add a document" drawer - EXO-88752 (#2010)

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
(cherry picked from commit b9c589a)

* fix: align the attachments list drawer rows (info/detach icons) - EXO-88777 (#2014)

The EXO-88732 revamp styled only the picker (.attachmentsAppDrawer); the 'View
all attachments' list drawer (.attachmentsListDrawer) kept raw Vuetify — its rows
had no right gutter (info/detach icons hugging the panel edge + scrollbar) and
align-items:normal (icons not vertically centered). Add a scoped .attachmentsListDrawer
block: 20px right gutter on .uploadedFilesItems, align-items:center on the row, and
zeroed v-list-item__action margins. Scoped so the picker and other consumers are
untouched.

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
(cherry picked from commit b8d00d6)

* fix: center the attachment row so the detach icon aligns - EXO-88777 (#2019)

The attachment rows shown in the task drawer (and every other place the shared
attachment list appears — activities, notes, news) render the detach/info icons
aligned to the top of the row instead of vertically centered against the two-line
title + size block.

Cause: the row root .attachment.d-flex declares no vertical alignment, so its three
columns — thumbnail, the title/size content, and the action icons — top-align.
EXO-88777 (#2014) fixed the same thing but only via a LESS rule scoped to
.attachmentsListDrawer, so the inline "View all attachments" list rendered in the
task drawer, which is not that drawer, kept the misalignment.

Fix it at the source: add align-center to the row in AttachmentItem.vue, so every
surface centers its rows. The conflict-actions block is a sibling of the row, not a
child, so the failed/conflict layouts are unaffected. #2014's drawer LESS is left in
place (harmless; the right-gutter and action-margin parts are drawer-specific).

Verified that the deployed bundle rendered "attachment d-flex" without the class, and
that adding align-center centers the icons; a full local WAR build was not possible
offline (npm install needs network), so the built-bundle capture was done by patching
the class string in the deployed bundle, which is exactly what this source change
compiles to.

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
(cherry picked from commit 4ced318)

* feat: Reusable Documents folder picker (+ remove add-folder from the destination picker) - EXO-88830 (#2018)

* feat: Reusable standalone Documents folder picker on the revamped drive explorer - EXO-88830

Two-part module: a tiny site-wide bootstrap (DocumentsFolderPickerQuickActionExtension,
QuickActionsGrp) listening for open-documents-folder-picker, and a lazily required
SHARED/DocumentsFolderPickerApp that mounts JUST the existing revamped
attachments-drive-explorer-drawer on its own small root, replicating the attachment
app's $root shim. On confirm it publishes documents-folder-picker-selected with BOTH
the /v1/documents folder id (breadcrumb tail) and the legacy drive + relative path;
closing without picking publishes documents-folder-picker-cancelled. The compose/staging
attachment flow and its $root events are untouched; there is still exactly one
explorer implementation.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix: Clean create-folder button and inline validate/cancel on the drive explorer folder input - EXO-88830

The create-folder header control was a legacy bordered <a> box misaligned with
the breadcrumb row; it is now the same v-btn/v-icon markup as the drawer's
other header icons. The inline new-folder / rename input was a bare <input>
with no visible confirm/cancel: it now mirrors the Documents app inline name
edit (DocumentsFileEditNameCell) — a dense outlined field with appended
validate (check) and cancel (times) icons — while keeping Enter/Esc and the
existing folder CRUD calls unchanged.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* feat: Remove the add-folder feature from the drive-explorer picker - EXO-88830

The inline create-folder affordance (header button + inline new-folder
input) was introduced into the destination-picker with the July-22
drive-explorer revamp (EXO-88721). It is removed here: the picker's job
is to choose an existing destination, and the create-folder UI is
unwanted. Only the create path is removed — folder rename/delete via the
folder-actions menu is untouched.

Removed: the add-folder header button, the inline new-folder input row,
the creatingNewFolder/newFolderName state, and addNewFolder/
createNewFolder/cancelCreatingNewFolder. The destination-selection and
/v1/documents navigation are unchanged.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix: No phantom "Load more" in the folders-only destination picker - EXO-88830

In destination-picker mode the list shows only folders, but hasMore was
computed from the mixed folder+file page, so a folder holding more than a
page of files kept offering a "Load more" that revealed no new folder. The
server returns folders before files, so once a fetched page contains a file
every folder is already loaded — hasMore is now false in that case.

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 5299d4c)

---------

Co-authored-by: Benjamin Mestrallet <benjamin.mestrallet@gmail.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant