@multiplatform.one/backoffice 6.7.0 → 7.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/chrome/BackofficeAwesomebar.cjs +1 -0
- package/dist/cjs/chrome/BackofficeAwesomebar.native.js +1 -0
- package/dist/cjs/chrome/BackofficeAwesomebar.native.js.map +1 -1
- package/dist/cjs/chrome/CommandPalette.cjs +95 -18
- package/dist/cjs/chrome/CommandPalette.native.js +114 -31
- package/dist/cjs/chrome/CommandPalette.native.js.map +1 -1
- package/dist/cjs/chrome/HelpMenu.cjs +40 -55
- package/dist/cjs/chrome/HelpMenu.native.js +50 -66
- package/dist/cjs/chrome/HelpMenu.native.js.map +1 -1
- package/dist/cjs/chrome/awesomebar-data.cjs +51 -8
- package/dist/cjs/chrome/awesomebar-data.native.js +58 -10
- package/dist/cjs/chrome/awesomebar-data.native.js.map +1 -1
- package/dist/cjs/chrome/command-palette-model.cjs +1 -2
- package/dist/cjs/chrome/command-palette-model.native.js +1 -2
- package/dist/cjs/chrome/command-palette-model.native.js.map +1 -1
- package/dist/cjs/chrome/notifications-data.cjs +2 -0
- package/dist/cjs/chrome/notifications-data.native.js +2 -0
- package/dist/cjs/chrome/notifications-data.native.js.map +1 -1
- package/dist/cjs/chrome/notifications-panel.cjs +14 -4
- package/dist/cjs/chrome/notifications-panel.native.js +16 -4
- package/dist/cjs/chrome/notifications-panel.native.js.map +1 -1
- package/dist/cjs/chrome/shortcuts.native.js.map +1 -1
- package/dist/cjs/config/BackofficeProvider.cjs +2 -0
- package/dist/cjs/config/BackofficeProvider.native.js +2 -0
- package/dist/cjs/config/BackofficeProvider.native.js.map +1 -1
- package/dist/cjs/form/DocFormScreen.cjs +123 -14
- package/dist/cjs/form/DocFormScreen.native.js +147 -14
- package/dist/cjs/form/DocFormScreen.native.js.map +1 -1
- package/dist/cjs/form/FormConnections.cjs +37 -5
- package/dist/cjs/form/FormConnections.native.js +36 -5
- package/dist/cjs/form/FormConnections.native.js.map +1 -1
- package/dist/cjs/form/FormDialogs.cjs +104 -0
- package/dist/cjs/form/FormDialogs.native.js +110 -0
- package/dist/cjs/form/FormDialogs.native.js.map +1 -1
- package/dist/cjs/form/FormErrorBoundary.cjs +26 -5
- package/dist/cjs/form/FormErrorBoundary.native.js +25 -5
- package/dist/cjs/form/FormErrorBoundary.native.js.map +1 -1
- package/dist/cjs/form/FormSidebarPanel.cjs +71 -22
- package/dist/cjs/form/FormSidebarPanel.native.js +70 -22
- package/dist/cjs/form/FormSidebarPanel.native.js.map +1 -1
- package/dist/cjs/form/FormTimeline.cjs +133 -22
- package/dist/cjs/form/FormTimeline.native.js +171 -24
- package/dist/cjs/form/FormTimeline.native.js.map +1 -1
- package/dist/cjs/form/FormToolbar.cjs +50 -4
- package/dist/cjs/form/FormToolbar.native.js +50 -4
- package/dist/cjs/form/FormToolbar.native.js.map +1 -1
- package/dist/cjs/form/formActions.native.js.map +1 -1
- package/dist/cjs/form/formLayout.cjs +3 -13
- package/dist/cjs/form/formLayout.native.js +7 -13
- package/dist/cjs/form/formLayout.native.js.map +1 -1
- package/dist/cjs/form/platformHooks.cjs +48 -0
- package/dist/cjs/form/platformHooks.native.js +52 -0
- package/dist/cjs/form/platformHooks.native.js.map +1 -1
- package/dist/cjs/form/timeline-entries.cjs +56 -13
- package/dist/cjs/form/timeline-entries.native.js +58 -16
- package/dist/cjs/form/timeline-entries.native.js.map +1 -1
- package/dist/cjs/i18n/en.cjs +31 -9
- package/dist/cjs/i18n/en.native.js +31 -9
- package/dist/cjs/i18n/en.native.js.map +1 -1
- package/dist/cjs/index.cjs +13 -1
- package/dist/cjs/index.native.js +13 -1
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/list/AddTagsDialog.cjs +12 -7
- package/dist/cjs/list/AddTagsDialog.native.js +12 -7
- package/dist/cjs/list/AddTagsDialog.native.js.map +1 -1
- package/dist/cjs/list/AssignToDialog.cjs +7 -4
- package/dist/cjs/list/AssignToDialog.native.js +7 -4
- package/dist/cjs/list/AssignToDialog.native.js.map +1 -1
- package/dist/cjs/list/DoctypeListScreen.cjs +124 -153
- package/dist/cjs/list/DoctypeListScreen.native.js +152 -198
- package/dist/cjs/list/DoctypeListScreen.native.js.map +1 -1
- package/dist/cjs/list/ListFilterBar.cjs +60 -41
- package/dist/cjs/list/ListFilterBar.native.js +62 -41
- package/dist/cjs/list/ListFilterBar.native.js.map +1 -1
- package/dist/cjs/list/ListSidebar.cjs +15 -13
- package/dist/cjs/list/ListSidebar.native.js +17 -17
- package/dist/cjs/list/ListSidebar.native.js.map +1 -1
- package/dist/cjs/list/bulk-edit-dialog.cjs +12 -7
- package/dist/cjs/list/bulk-edit-dialog.native.js +12 -7
- package/dist/cjs/list/bulk-edit-dialog.native.js.map +1 -1
- package/dist/cjs/list/filter-fields.cjs +23 -1
- package/dist/cjs/list/filter-fields.native.js +28 -1
- package/dist/cjs/list/filter-fields.native.js.map +1 -1
- package/dist/cjs/list/filter-saved.cjs +4 -4
- package/dist/cjs/list/filter-saved.native.js +4 -7
- package/dist/cjs/list/filter-saved.native.js.map +1 -1
- package/dist/cjs/list/filter-sort.cjs +2 -1
- package/dist/cjs/list/filter-sort.native.js +2 -1
- package/dist/cjs/list/filter-sort.native.js.map +1 -1
- package/dist/cjs/list/filter-standard.cjs +1 -1
- package/dist/cjs/list/filter-standard.native.js +1 -1
- package/dist/cjs/list/listColumns.cjs +258 -109
- package/dist/cjs/list/listColumns.native.js +263 -118
- package/dist/cjs/list/listColumns.native.js.map +1 -1
- package/dist/cjs/list/listFields.cjs +6 -1
- package/dist/cjs/list/listFields.native.js +8 -1
- package/dist/cjs/list/listFields.native.js.map +1 -1
- package/dist/cjs/list/sidebar-section.cjs +57 -19
- package/dist/cjs/list/sidebar-section.native.js +60 -19
- package/dist/cjs/list/sidebar-section.native.js.map +1 -1
- package/dist/cjs/oneAdapter/index.cjs +5 -1
- package/dist/cjs/oneAdapter/index.native.js +8 -1
- package/dist/cjs/oneAdapter/index.native.js.map +1 -1
- package/dist/cjs/quickEntry/quickEntryPlan.cjs +2 -6
- package/dist/cjs/quickEntry/quickEntryPlan.native.js +4 -6
- package/dist/cjs/quickEntry/quickEntryPlan.native.js.map +1 -1
- package/dist/cjs/report/QueryReportScreen.cjs +103 -94
- package/dist/cjs/report/QueryReportScreen.native.js +125 -143
- package/dist/cjs/report/QueryReportScreen.native.js.map +1 -1
- package/dist/cjs/report/queryReportColumns.cjs +10 -1
- package/dist/cjs/report/queryReportColumns.native.js +16 -1
- package/dist/cjs/report/queryReportColumns.native.js.map +1 -1
- package/dist/cjs/report/queryReportFilterBar.cjs +274 -0
- package/dist/cjs/report/queryReportFilterBar.native.js +339 -0
- package/dist/cjs/report/queryReportFilterBar.native.js.map +1 -0
- package/dist/cjs/report/queryReportUrlState.cjs +55 -0
- package/dist/cjs/report/queryReportUrlState.native.js +108 -0
- package/dist/cjs/report/queryReportUrlState.native.js.map +1 -0
- package/dist/cjs/report/report-grid.cjs +155 -50
- package/dist/cjs/report/report-grid.native.js +174 -54
- package/dist/cjs/report/report-grid.native.js.map +1 -1
- package/dist/cjs/report/report-toolbar.cjs +1 -6
- package/dist/cjs/report/report-toolbar.native.js +6 -6
- package/dist/cjs/report/report-toolbar.native.js.map +1 -1
- package/dist/cjs/report/reportShapes.cjs +269 -11
- package/dist/cjs/report/reportShapes.native.js +333 -11
- package/dist/cjs/report/reportShapes.native.js.map +1 -1
- package/dist/cjs/report/reportViewModel.cjs +13 -5
- package/dist/cjs/report/reportViewModel.native.js +38 -5
- package/dist/cjs/report/reportViewModel.native.js.map +1 -1
- package/dist/cjs/report/useQueryReport.cjs +48 -17
- package/dist/cjs/report/useQueryReport.native.js +56 -37
- package/dist/cjs/report/useQueryReport.native.js.map +1 -1
- package/dist/cjs/shared/deskLinks.cjs +39 -0
- package/dist/cjs/shared/deskLinks.native.js +43 -0
- package/dist/cjs/shared/deskLinks.native.js.map +1 -0
- package/dist/cjs/shared/listNavContext.cjs +102 -0
- package/dist/cjs/shared/listNavContext.native.js +130 -0
- package/dist/cjs/shared/listNavContext.native.js.map +1 -0
- package/dist/cjs/shared/useDocinfo.cjs +42 -2
- package/dist/cjs/shared/useDocinfo.native.js +82 -2
- package/dist/cjs/shared/useDocinfo.native.js.map +1 -1
- package/dist/cjs/shared/useDoctypeMeta.native.js.map +1 -1
- package/dist/cjs/shared/useFrappeApp.cjs +10 -5
- package/dist/cjs/shared/useFrappeApp.native.js +10 -5
- package/dist/cjs/shared/useFrappeApp.native.js.map +1 -1
- package/dist/cjs/shell/BackofficeShell.cjs +83 -20
- package/dist/cjs/shell/BackofficeShell.native.js +89 -24
- package/dist/cjs/shell/BackofficeShell.native.js.map +1 -1
- package/dist/cjs/shell/WorkspaceSidebar.cjs +113 -4
- package/dist/cjs/shell/WorkspaceSidebar.native.js +120 -4
- package/dist/cjs/shell/WorkspaceSidebar.native.js.map +1 -1
- package/dist/cjs/shell/useWorkspaces.cjs +2 -0
- package/dist/cjs/shell/useWorkspaces.native.js +2 -0
- package/dist/cjs/shell/useWorkspaces.native.js.map +1 -1
- package/dist/cjs/shell/workspaceIcons.cjs +12 -2
- package/dist/cjs/shell/workspaceIcons.native.js +35 -2
- package/dist/cjs/shell/workspaceIcons.native.js.map +1 -1
- package/dist/cjs/views/CalendarView.cjs +1 -4
- package/dist/cjs/views/CalendarView.native.js +1 -6
- package/dist/cjs/views/CalendarView.native.js.map +1 -1
- package/dist/cjs/views/DoctypeViewScreen.cjs +7 -3
- package/dist/cjs/views/DoctypeViewScreen.native.js +7 -3
- package/dist/cjs/views/DoctypeViewScreen.native.js.map +1 -1
- package/dist/cjs/views/KanbanView.cjs +2 -0
- package/dist/cjs/views/KanbanView.native.js +2 -0
- package/dist/cjs/views/KanbanView.native.js.map +1 -1
- package/dist/cjs/views/ViewHeader.cjs +45 -74
- package/dist/cjs/views/ViewHeader.native.js +51 -78
- package/dist/cjs/views/ViewHeader.native.js.map +1 -1
- package/dist/cjs/views/ViewSwitcherMenu.cjs +95 -0
- package/dist/cjs/views/ViewSwitcherMenu.native.js +99 -0
- package/dist/cjs/views/ViewSwitcherMenu.native.js.map +1 -0
- package/dist/cjs/views/connection.cjs +5 -1
- package/dist/cjs/views/connection.native.js +5 -1
- package/dist/cjs/views/connection.native.js.map +1 -1
- package/dist/cjs/views/dashboard-data.cjs +1 -2
- package/dist/cjs/views/dashboard-data.native.js +1 -4
- package/dist/cjs/views/dashboard-data.native.js.map +1 -1
- package/dist/cjs/views/kanban-board-controls.cjs +4 -9
- package/dist/cjs/views/kanban-board-controls.native.js +9 -10
- package/dist/cjs/views/kanban-board-controls.native.js.map +1 -1
- package/dist/cjs/views/viewAvailability.cjs +59 -0
- package/dist/cjs/views/viewAvailability.native.js +63 -0
- package/dist/cjs/views/viewAvailability.native.js.map +1 -0
- package/dist/cjs/workspace/WorkspaceLinkCard.cjs +120 -25
- package/dist/cjs/workspace/WorkspaceLinkCard.native.js +126 -28
- package/dist/cjs/workspace/WorkspaceLinkCard.native.js.map +1 -1
- package/dist/cjs/workspace/WorkspaceLinkDirectory.cjs +27 -21
- package/dist/cjs/workspace/WorkspaceLinkDirectory.native.js +32 -23
- package/dist/cjs/workspace/WorkspaceLinkDirectory.native.js.map +1 -1
- package/dist/cjs/workspace/WorkspaceNumberCard.cjs +1 -1
- package/dist/cjs/workspace/WorkspaceNumberCard.native.js +1 -1
- package/dist/cjs/workspace/WorkspaceNumberCard.native.js.map +1 -1
- package/dist/cjs/workspace/WorkspaceQuickList.cjs +61 -29
- package/dist/cjs/workspace/WorkspaceQuickList.native.js +65 -32
- package/dist/cjs/workspace/WorkspaceQuickList.native.js.map +1 -1
- package/dist/cjs/workspace/WorkspaceRecents.cjs +8 -0
- package/dist/cjs/workspace/WorkspaceRecents.native.js +8 -0
- package/dist/cjs/workspace/WorkspaceRecents.native.js.map +1 -1
- package/dist/cjs/workspace/WorkspaceShortcut.cjs +10 -0
- package/dist/cjs/workspace/WorkspaceShortcut.native.js +10 -0
- package/dist/cjs/workspace/WorkspaceShortcut.native.js.map +1 -1
- package/dist/cjs/workspace/parseContent.cjs +22 -0
- package/dist/cjs/workspace/parseContent.native.js +24 -0
- package/dist/cjs/workspace/parseContent.native.js.map +1 -1
- package/dist/esm/chrome/BackofficeAwesomebar.mjs +1 -0
- package/dist/esm/chrome/BackofficeAwesomebar.mjs.map +1 -1
- package/dist/esm/chrome/BackofficeAwesomebar.native.js +1 -0
- package/dist/esm/chrome/BackofficeAwesomebar.native.js.map +1 -1
- package/dist/esm/chrome/CommandPalette.mjs +96 -19
- package/dist/esm/chrome/CommandPalette.mjs.map +1 -1
- package/dist/esm/chrome/CommandPalette.native.js +115 -32
- package/dist/esm/chrome/CommandPalette.native.js.map +1 -1
- package/dist/esm/chrome/HelpMenu.mjs +41 -56
- package/dist/esm/chrome/HelpMenu.mjs.map +1 -1
- package/dist/esm/chrome/HelpMenu.native.js +51 -67
- package/dist/esm/chrome/HelpMenu.native.js.map +1 -1
- package/dist/esm/chrome/awesomebar-data.mjs +51 -9
- package/dist/esm/chrome/awesomebar-data.mjs.map +1 -1
- package/dist/esm/chrome/awesomebar-data.native.js +58 -11
- package/dist/esm/chrome/awesomebar-data.native.js.map +1 -1
- package/dist/esm/chrome/command-palette-model.mjs +2 -3
- package/dist/esm/chrome/command-palette-model.mjs.map +1 -1
- package/dist/esm/chrome/command-palette-model.native.js +2 -3
- package/dist/esm/chrome/command-palette-model.native.js.map +1 -1
- package/dist/esm/chrome/notifications-data.mjs +2 -0
- package/dist/esm/chrome/notifications-data.mjs.map +1 -1
- package/dist/esm/chrome/notifications-data.native.js +2 -0
- package/dist/esm/chrome/notifications-data.native.js.map +1 -1
- package/dist/esm/chrome/notifications-panel.mjs +15 -5
- package/dist/esm/chrome/notifications-panel.mjs.map +1 -1
- package/dist/esm/chrome/notifications-panel.native.js +17 -5
- package/dist/esm/chrome/notifications-panel.native.js.map +1 -1
- package/dist/esm/chrome/shortcuts.mjs.map +1 -1
- package/dist/esm/chrome/shortcuts.native.js.map +1 -1
- package/dist/esm/config/BackofficeProvider.mjs +2 -0
- package/dist/esm/config/BackofficeProvider.mjs.map +1 -1
- package/dist/esm/config/BackofficeProvider.native.js +2 -0
- package/dist/esm/config/BackofficeProvider.native.js.map +1 -1
- package/dist/esm/form/DocFormScreen.mjs +126 -17
- package/dist/esm/form/DocFormScreen.mjs.map +1 -1
- package/dist/esm/form/DocFormScreen.native.js +150 -17
- package/dist/esm/form/DocFormScreen.native.js.map +1 -1
- package/dist/esm/form/FormConnections.mjs +38 -6
- package/dist/esm/form/FormConnections.mjs.map +1 -1
- package/dist/esm/form/FormConnections.native.js +37 -6
- package/dist/esm/form/FormConnections.native.js.map +1 -1
- package/dist/esm/form/FormDialogs.mjs +107 -4
- package/dist/esm/form/FormDialogs.mjs.map +1 -1
- package/dist/esm/form/FormDialogs.native.js +113 -4
- package/dist/esm/form/FormDialogs.native.js.map +1 -1
- package/dist/esm/form/FormErrorBoundary.mjs +28 -7
- package/dist/esm/form/FormErrorBoundary.mjs.map +1 -1
- package/dist/esm/form/FormErrorBoundary.native.js +27 -7
- package/dist/esm/form/FormErrorBoundary.native.js.map +1 -1
- package/dist/esm/form/FormSidebarPanel.mjs +71 -23
- package/dist/esm/form/FormSidebarPanel.mjs.map +1 -1
- package/dist/esm/form/FormSidebarPanel.native.js +70 -23
- package/dist/esm/form/FormSidebarPanel.native.js.map +1 -1
- package/dist/esm/form/FormTimeline.mjs +136 -25
- package/dist/esm/form/FormTimeline.mjs.map +1 -1
- package/dist/esm/form/FormTimeline.native.js +174 -27
- package/dist/esm/form/FormTimeline.native.js.map +1 -1
- package/dist/esm/form/FormToolbar.mjs +51 -5
- package/dist/esm/form/FormToolbar.mjs.map +1 -1
- package/dist/esm/form/FormToolbar.native.js +51 -5
- package/dist/esm/form/FormToolbar.native.js.map +1 -1
- package/dist/esm/form/formActions.mjs.map +1 -1
- package/dist/esm/form/formActions.native.js.map +1 -1
- package/dist/esm/form/formLayout.mjs +3 -13
- package/dist/esm/form/formLayout.mjs.map +1 -1
- package/dist/esm/form/formLayout.native.js +7 -13
- package/dist/esm/form/formLayout.native.js.map +1 -1
- package/dist/esm/form/platformHooks.mjs +47 -1
- package/dist/esm/form/platformHooks.mjs.map +1 -1
- package/dist/esm/form/platformHooks.native.js +51 -1
- package/dist/esm/form/platformHooks.native.js.map +1 -1
- package/dist/esm/form/timeline-entries.mjs +56 -13
- package/dist/esm/form/timeline-entries.mjs.map +1 -1
- package/dist/esm/form/timeline-entries.native.js +58 -16
- package/dist/esm/form/timeline-entries.native.js.map +1 -1
- package/dist/esm/i18n/en.mjs +31 -9
- package/dist/esm/i18n/en.mjs.map +1 -1
- package/dist/esm/i18n/en.native.js +31 -9
- package/dist/esm/i18n/en.native.js.map +1 -1
- package/dist/esm/index.mjs +6 -3
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/index.native.js +6 -3
- package/dist/esm/index.native.js.map +1 -1
- package/dist/esm/list/AddTagsDialog.mjs +12 -7
- package/dist/esm/list/AddTagsDialog.mjs.map +1 -1
- package/dist/esm/list/AddTagsDialog.native.js +12 -7
- package/dist/esm/list/AddTagsDialog.native.js.map +1 -1
- package/dist/esm/list/AssignToDialog.mjs +7 -4
- package/dist/esm/list/AssignToDialog.mjs.map +1 -1
- package/dist/esm/list/AssignToDialog.native.js +7 -4
- package/dist/esm/list/AssignToDialog.native.js.map +1 -1
- package/dist/esm/list/DoctypeListScreen.mjs +127 -156
- package/dist/esm/list/DoctypeListScreen.mjs.map +1 -1
- package/dist/esm/list/DoctypeListScreen.native.js +155 -201
- package/dist/esm/list/DoctypeListScreen.native.js.map +1 -1
- package/dist/esm/list/ListFilterBar.mjs +60 -41
- package/dist/esm/list/ListFilterBar.mjs.map +1 -1
- package/dist/esm/list/ListFilterBar.native.js +62 -41
- package/dist/esm/list/ListFilterBar.native.js.map +1 -1
- package/dist/esm/list/ListSidebar.mjs +16 -14
- package/dist/esm/list/ListSidebar.mjs.map +1 -1
- package/dist/esm/list/ListSidebar.native.js +18 -18
- package/dist/esm/list/ListSidebar.native.js.map +1 -1
- package/dist/esm/list/bulk-edit-dialog.mjs +12 -7
- package/dist/esm/list/bulk-edit-dialog.mjs.map +1 -1
- package/dist/esm/list/bulk-edit-dialog.native.js +12 -7
- package/dist/esm/list/bulk-edit-dialog.native.js.map +1 -1
- package/dist/esm/list/filter-fields.mjs +23 -1
- package/dist/esm/list/filter-fields.mjs.map +1 -1
- package/dist/esm/list/filter-fields.native.js +28 -1
- package/dist/esm/list/filter-fields.native.js.map +1 -1
- package/dist/esm/list/filter-saved.mjs +4 -4
- package/dist/esm/list/filter-saved.mjs.map +1 -1
- package/dist/esm/list/filter-saved.native.js +4 -7
- package/dist/esm/list/filter-saved.native.js.map +1 -1
- package/dist/esm/list/filter-sort.mjs +2 -1
- package/dist/esm/list/filter-sort.mjs.map +1 -1
- package/dist/esm/list/filter-sort.native.js +2 -1
- package/dist/esm/list/filter-sort.native.js.map +1 -1
- package/dist/esm/list/filter-standard.mjs +1 -1
- package/dist/esm/list/filter-standard.mjs.map +1 -1
- package/dist/esm/list/filter-standard.native.js +1 -1
- package/dist/esm/list/filter-standard.native.js.map +1 -1
- package/dist/esm/list/listColumns.mjs +261 -112
- package/dist/esm/list/listColumns.mjs.map +1 -1
- package/dist/esm/list/listColumns.native.js +266 -121
- package/dist/esm/list/listColumns.native.js.map +1 -1
- package/dist/esm/list/listFields.mjs +6 -2
- package/dist/esm/list/listFields.mjs.map +1 -1
- package/dist/esm/list/listFields.native.js +8 -2
- package/dist/esm/list/listFields.native.js.map +1 -1
- package/dist/esm/list/sidebar-section.mjs +58 -21
- package/dist/esm/list/sidebar-section.mjs.map +1 -1
- package/dist/esm/list/sidebar-section.native.js +61 -21
- package/dist/esm/list/sidebar-section.native.js.map +1 -1
- package/dist/esm/oneAdapter/index.mjs +5 -1
- package/dist/esm/oneAdapter/index.mjs.map +1 -1
- package/dist/esm/oneAdapter/index.native.js +8 -1
- package/dist/esm/oneAdapter/index.native.js.map +1 -1
- package/dist/esm/quickEntry/quickEntryPlan.mjs +2 -6
- package/dist/esm/quickEntry/quickEntryPlan.mjs.map +1 -1
- package/dist/esm/quickEntry/quickEntryPlan.native.js +4 -6
- package/dist/esm/quickEntry/quickEntryPlan.native.js.map +1 -1
- package/dist/esm/report/QueryReportScreen.mjs +103 -94
- package/dist/esm/report/QueryReportScreen.mjs.map +1 -1
- package/dist/esm/report/QueryReportScreen.native.js +125 -143
- package/dist/esm/report/QueryReportScreen.native.js.map +1 -1
- package/dist/esm/report/queryReportColumns.mjs +9 -1
- package/dist/esm/report/queryReportColumns.mjs.map +1 -1
- package/dist/esm/report/queryReportColumns.native.js +15 -1
- package/dist/esm/report/queryReportColumns.native.js.map +1 -1
- package/dist/esm/report/queryReportFilterBar.mjs +246 -0
- package/dist/esm/report/queryReportFilterBar.mjs.map +1 -0
- package/dist/esm/report/queryReportFilterBar.native.js +308 -0
- package/dist/esm/report/queryReportFilterBar.native.js.map +1 -0
- package/dist/esm/report/queryReportUrlState.mjs +29 -0
- package/dist/esm/report/queryReportUrlState.mjs.map +1 -0
- package/dist/esm/report/queryReportUrlState.native.js +79 -0
- package/dist/esm/report/queryReportUrlState.native.js.map +1 -0
- package/dist/esm/report/report-grid.mjs +158 -53
- package/dist/esm/report/report-grid.mjs.map +1 -1
- package/dist/esm/report/report-grid.native.js +177 -57
- package/dist/esm/report/report-grid.native.js.map +1 -1
- package/dist/esm/report/report-toolbar.mjs +2 -7
- package/dist/esm/report/report-toolbar.mjs.map +1 -1
- package/dist/esm/report/report-toolbar.native.js +7 -7
- package/dist/esm/report/report-toolbar.native.js.map +1 -1
- package/dist/esm/report/reportShapes.mjs +266 -12
- package/dist/esm/report/reportShapes.mjs.map +1 -1
- package/dist/esm/report/reportShapes.native.js +330 -12
- package/dist/esm/report/reportShapes.native.js.map +1 -1
- package/dist/esm/report/reportViewModel.mjs +13 -5
- package/dist/esm/report/reportViewModel.mjs.map +1 -1
- package/dist/esm/report/reportViewModel.native.js +38 -5
- package/dist/esm/report/reportViewModel.native.js.map +1 -1
- package/dist/esm/report/useQueryReport.mjs +46 -20
- package/dist/esm/report/useQueryReport.mjs.map +1 -1
- package/dist/esm/report/useQueryReport.native.js +54 -40
- package/dist/esm/report/useQueryReport.native.js.map +1 -1
- package/dist/esm/shared/deskLinks.mjs +13 -0
- package/dist/esm/shared/deskLinks.mjs.map +1 -0
- package/dist/esm/shared/deskLinks.native.js +14 -0
- package/dist/esm/shared/deskLinks.native.js.map +1 -0
- package/dist/esm/shared/listNavContext.mjs +74 -0
- package/dist/esm/shared/listNavContext.mjs.map +1 -0
- package/dist/esm/shared/listNavContext.native.js +99 -0
- package/dist/esm/shared/listNavContext.native.js.map +1 -0
- package/dist/esm/shared/useDocinfo.mjs +40 -3
- package/dist/esm/shared/useDocinfo.mjs.map +1 -1
- package/dist/esm/shared/useDocinfo.native.js +80 -3
- package/dist/esm/shared/useDocinfo.native.js.map +1 -1
- package/dist/esm/shared/useDoctypeMeta.mjs.map +1 -1
- package/dist/esm/shared/useDoctypeMeta.native.js.map +1 -1
- package/dist/esm/shared/useFrappeApp.mjs +10 -5
- package/dist/esm/shared/useFrappeApp.mjs.map +1 -1
- package/dist/esm/shared/useFrappeApp.native.js +10 -5
- package/dist/esm/shared/useFrappeApp.native.js.map +1 -1
- package/dist/esm/shell/BackofficeShell.mjs +75 -23
- package/dist/esm/shell/BackofficeShell.mjs.map +1 -1
- package/dist/esm/shell/BackofficeShell.native.js +81 -27
- package/dist/esm/shell/BackofficeShell.native.js.map +1 -1
- package/dist/esm/shell/WorkspaceSidebar.mjs +115 -6
- package/dist/esm/shell/WorkspaceSidebar.mjs.map +1 -1
- package/dist/esm/shell/WorkspaceSidebar.native.js +122 -6
- package/dist/esm/shell/WorkspaceSidebar.native.js.map +1 -1
- package/dist/esm/shell/useWorkspaces.mjs +2 -0
- package/dist/esm/shell/useWorkspaces.mjs.map +1 -1
- package/dist/esm/shell/useWorkspaces.native.js +2 -0
- package/dist/esm/shell/useWorkspaces.native.js.map +1 -1
- package/dist/esm/shell/workspaceIcons.mjs +13 -3
- package/dist/esm/shell/workspaceIcons.mjs.map +1 -1
- package/dist/esm/shell/workspaceIcons.native.js +36 -3
- package/dist/esm/shell/workspaceIcons.native.js.map +1 -1
- package/dist/esm/views/CalendarView.mjs +2 -5
- package/dist/esm/views/CalendarView.mjs.map +1 -1
- package/dist/esm/views/CalendarView.native.js +2 -7
- package/dist/esm/views/CalendarView.native.js.map +1 -1
- package/dist/esm/views/DoctypeViewScreen.mjs +7 -3
- package/dist/esm/views/DoctypeViewScreen.mjs.map +1 -1
- package/dist/esm/views/DoctypeViewScreen.native.js +7 -3
- package/dist/esm/views/DoctypeViewScreen.native.js.map +1 -1
- package/dist/esm/views/KanbanView.mjs +2 -0
- package/dist/esm/views/KanbanView.mjs.map +1 -1
- package/dist/esm/views/KanbanView.native.js +2 -0
- package/dist/esm/views/KanbanView.native.js.map +1 -1
- package/dist/esm/views/ViewHeader.mjs +49 -78
- package/dist/esm/views/ViewHeader.mjs.map +1 -1
- package/dist/esm/views/ViewHeader.native.js +55 -82
- package/dist/esm/views/ViewHeader.native.js.map +1 -1
- package/dist/esm/views/ViewSwitcherMenu.mjs +69 -0
- package/dist/esm/views/ViewSwitcherMenu.mjs.map +1 -0
- package/dist/esm/views/ViewSwitcherMenu.native.js +70 -0
- package/dist/esm/views/ViewSwitcherMenu.native.js.map +1 -0
- package/dist/esm/views/connection.mjs +5 -1
- package/dist/esm/views/connection.mjs.map +1 -1
- package/dist/esm/views/connection.native.js +5 -1
- package/dist/esm/views/connection.native.js.map +1 -1
- package/dist/esm/views/dashboard-data.mjs +2 -3
- package/dist/esm/views/dashboard-data.mjs.map +1 -1
- package/dist/esm/views/dashboard-data.native.js +2 -5
- package/dist/esm/views/dashboard-data.native.js.map +1 -1
- package/dist/esm/views/kanban-board-controls.mjs +4 -9
- package/dist/esm/views/kanban-board-controls.mjs.map +1 -1
- package/dist/esm/views/kanban-board-controls.native.js +9 -10
- package/dist/esm/views/kanban-board-controls.native.js.map +1 -1
- package/dist/esm/views/viewAvailability.mjs +33 -0
- package/dist/esm/views/viewAvailability.mjs.map +1 -0
- package/dist/esm/views/viewAvailability.native.js +34 -0
- package/dist/esm/views/viewAvailability.native.js.map +1 -0
- package/dist/esm/workspace/WorkspaceLinkCard.mjs +121 -26
- package/dist/esm/workspace/WorkspaceLinkCard.mjs.map +1 -1
- package/dist/esm/workspace/WorkspaceLinkCard.native.js +127 -29
- package/dist/esm/workspace/WorkspaceLinkCard.native.js.map +1 -1
- package/dist/esm/workspace/WorkspaceLinkDirectory.mjs +27 -21
- package/dist/esm/workspace/WorkspaceLinkDirectory.mjs.map +1 -1
- package/dist/esm/workspace/WorkspaceLinkDirectory.native.js +32 -23
- package/dist/esm/workspace/WorkspaceLinkDirectory.native.js.map +1 -1
- package/dist/esm/workspace/WorkspaceNumberCard.mjs +1 -1
- package/dist/esm/workspace/WorkspaceNumberCard.mjs.map +1 -1
- package/dist/esm/workspace/WorkspaceNumberCard.native.js +1 -1
- package/dist/esm/workspace/WorkspaceNumberCard.native.js.map +1 -1
- package/dist/esm/workspace/WorkspaceQuickList.mjs +62 -30
- package/dist/esm/workspace/WorkspaceQuickList.mjs.map +1 -1
- package/dist/esm/workspace/WorkspaceQuickList.native.js +66 -33
- package/dist/esm/workspace/WorkspaceQuickList.native.js.map +1 -1
- package/dist/esm/workspace/WorkspaceRecents.mjs +9 -1
- package/dist/esm/workspace/WorkspaceRecents.mjs.map +1 -1
- package/dist/esm/workspace/WorkspaceRecents.native.js +9 -1
- package/dist/esm/workspace/WorkspaceRecents.native.js.map +1 -1
- package/dist/esm/workspace/WorkspaceShortcut.mjs +11 -1
- package/dist/esm/workspace/WorkspaceShortcut.mjs.map +1 -1
- package/dist/esm/workspace/WorkspaceShortcut.native.js +11 -1
- package/dist/esm/workspace/WorkspaceShortcut.native.js.map +1 -1
- package/dist/esm/workspace/parseContent.mjs +21 -1
- package/dist/esm/workspace/parseContent.mjs.map +1 -1
- package/dist/esm/workspace/parseContent.native.js +23 -1
- package/dist/esm/workspace/parseContent.native.js.map +1 -1
- package/dist/jsx/chrome/BackofficeAwesomebar.mjs +1 -0
- package/dist/jsx/chrome/BackofficeAwesomebar.mjs.map +1 -1
- package/dist/jsx/chrome/BackofficeAwesomebar.native.js +1 -0
- package/dist/jsx/chrome/BackofficeAwesomebar.native.js.map +1 -1
- package/dist/jsx/chrome/CommandPalette.mjs +96 -19
- package/dist/jsx/chrome/CommandPalette.mjs.map +1 -1
- package/dist/jsx/chrome/CommandPalette.native.js +114 -31
- package/dist/jsx/chrome/CommandPalette.native.js.map +1 -1
- package/dist/jsx/chrome/HelpMenu.mjs +41 -56
- package/dist/jsx/chrome/HelpMenu.mjs.map +1 -1
- package/dist/jsx/chrome/HelpMenu.native.js +50 -66
- package/dist/jsx/chrome/HelpMenu.native.js.map +1 -1
- package/dist/jsx/chrome/awesomebar-data.mjs +51 -9
- package/dist/jsx/chrome/awesomebar-data.mjs.map +1 -1
- package/dist/jsx/chrome/awesomebar-data.native.js +58 -10
- package/dist/jsx/chrome/awesomebar-data.native.js.map +1 -1
- package/dist/jsx/chrome/command-palette-model.mjs +2 -3
- package/dist/jsx/chrome/command-palette-model.mjs.map +1 -1
- package/dist/jsx/chrome/command-palette-model.native.js +1 -2
- package/dist/jsx/chrome/command-palette-model.native.js.map +1 -1
- package/dist/jsx/chrome/notifications-data.mjs +2 -0
- package/dist/jsx/chrome/notifications-data.mjs.map +1 -1
- package/dist/jsx/chrome/notifications-data.native.js +2 -0
- package/dist/jsx/chrome/notifications-data.native.js.map +1 -1
- package/dist/jsx/chrome/notifications-panel.mjs +15 -5
- package/dist/jsx/chrome/notifications-panel.mjs.map +1 -1
- package/dist/jsx/chrome/notifications-panel.native.js +16 -4
- package/dist/jsx/chrome/notifications-panel.native.js.map +1 -1
- package/dist/jsx/chrome/shortcuts.mjs.map +1 -1
- package/dist/jsx/chrome/shortcuts.native.js.map +1 -1
- package/dist/jsx/config/BackofficeProvider.mjs +2 -0
- package/dist/jsx/config/BackofficeProvider.mjs.map +1 -1
- package/dist/jsx/config/BackofficeProvider.native.js +2 -0
- package/dist/jsx/config/BackofficeProvider.native.js.map +1 -1
- package/dist/jsx/form/DocFormScreen.mjs +126 -17
- package/dist/jsx/form/DocFormScreen.mjs.map +1 -1
- package/dist/jsx/form/DocFormScreen.native.js +147 -14
- package/dist/jsx/form/DocFormScreen.native.js.map +1 -1
- package/dist/jsx/form/FormConnections.mjs +38 -6
- package/dist/jsx/form/FormConnections.mjs.map +1 -1
- package/dist/jsx/form/FormConnections.native.js +36 -5
- package/dist/jsx/form/FormConnections.native.js.map +1 -1
- package/dist/jsx/form/FormDialogs.mjs +107 -4
- package/dist/jsx/form/FormDialogs.mjs.map +1 -1
- package/dist/jsx/form/FormDialogs.native.js +110 -0
- package/dist/jsx/form/FormDialogs.native.js.map +1 -1
- package/dist/jsx/form/FormErrorBoundary.mjs +28 -7
- package/dist/jsx/form/FormErrorBoundary.mjs.map +1 -1
- package/dist/jsx/form/FormErrorBoundary.native.js +25 -5
- package/dist/jsx/form/FormErrorBoundary.native.js.map +1 -1
- package/dist/jsx/form/FormSidebarPanel.mjs +71 -23
- package/dist/jsx/form/FormSidebarPanel.mjs.map +1 -1
- package/dist/jsx/form/FormSidebarPanel.native.js +70 -22
- package/dist/jsx/form/FormSidebarPanel.native.js.map +1 -1
- package/dist/jsx/form/FormTimeline.mjs +136 -25
- package/dist/jsx/form/FormTimeline.mjs.map +1 -1
- package/dist/jsx/form/FormTimeline.native.js +171 -24
- package/dist/jsx/form/FormTimeline.native.js.map +1 -1
- package/dist/jsx/form/FormToolbar.mjs +51 -5
- package/dist/jsx/form/FormToolbar.mjs.map +1 -1
- package/dist/jsx/form/FormToolbar.native.js +50 -4
- package/dist/jsx/form/FormToolbar.native.js.map +1 -1
- package/dist/jsx/form/formActions.mjs.map +1 -1
- package/dist/jsx/form/formActions.native.js.map +1 -1
- package/dist/jsx/form/formLayout.mjs +3 -13
- package/dist/jsx/form/formLayout.mjs.map +1 -1
- package/dist/jsx/form/formLayout.native.js +7 -13
- package/dist/jsx/form/formLayout.native.js.map +1 -1
- package/dist/jsx/form/platformHooks.mjs +47 -1
- package/dist/jsx/form/platformHooks.mjs.map +1 -1
- package/dist/jsx/form/platformHooks.native.js +52 -0
- package/dist/jsx/form/platformHooks.native.js.map +1 -1
- package/dist/jsx/form/timeline-entries.mjs +56 -13
- package/dist/jsx/form/timeline-entries.mjs.map +1 -1
- package/dist/jsx/form/timeline-entries.native.js +58 -16
- package/dist/jsx/form/timeline-entries.native.js.map +1 -1
- package/dist/jsx/i18n/en.mjs +31 -9
- package/dist/jsx/i18n/en.mjs.map +1 -1
- package/dist/jsx/i18n/en.native.js +31 -9
- package/dist/jsx/i18n/en.native.js.map +1 -1
- package/dist/jsx/index.js +6 -3
- package/dist/jsx/index.js.map +1 -1
- package/dist/jsx/index.mjs +6 -3
- package/dist/jsx/index.mjs.map +1 -1
- package/dist/jsx/index.native.js +13 -1
- package/dist/jsx/index.native.js.map +1 -1
- package/dist/jsx/list/AddTagsDialog.mjs +12 -7
- package/dist/jsx/list/AddTagsDialog.mjs.map +1 -1
- package/dist/jsx/list/AddTagsDialog.native.js +12 -7
- package/dist/jsx/list/AddTagsDialog.native.js.map +1 -1
- package/dist/jsx/list/AssignToDialog.mjs +7 -4
- package/dist/jsx/list/AssignToDialog.mjs.map +1 -1
- package/dist/jsx/list/AssignToDialog.native.js +7 -4
- package/dist/jsx/list/AssignToDialog.native.js.map +1 -1
- package/dist/jsx/list/DoctypeListScreen.mjs +127 -156
- package/dist/jsx/list/DoctypeListScreen.mjs.map +1 -1
- package/dist/jsx/list/DoctypeListScreen.native.js +152 -198
- package/dist/jsx/list/DoctypeListScreen.native.js.map +1 -1
- package/dist/jsx/list/ListFilterBar.mjs +60 -41
- package/dist/jsx/list/ListFilterBar.mjs.map +1 -1
- package/dist/jsx/list/ListFilterBar.native.js +62 -41
- package/dist/jsx/list/ListFilterBar.native.js.map +1 -1
- package/dist/jsx/list/ListSidebar.mjs +16 -14
- package/dist/jsx/list/ListSidebar.mjs.map +1 -1
- package/dist/jsx/list/ListSidebar.native.js +17 -17
- package/dist/jsx/list/ListSidebar.native.js.map +1 -1
- package/dist/jsx/list/bulk-edit-dialog.mjs +12 -7
- package/dist/jsx/list/bulk-edit-dialog.mjs.map +1 -1
- package/dist/jsx/list/bulk-edit-dialog.native.js +12 -7
- package/dist/jsx/list/bulk-edit-dialog.native.js.map +1 -1
- package/dist/jsx/list/filter-fields.mjs +23 -1
- package/dist/jsx/list/filter-fields.mjs.map +1 -1
- package/dist/jsx/list/filter-fields.native.js +28 -1
- package/dist/jsx/list/filter-fields.native.js.map +1 -1
- package/dist/jsx/list/filter-saved.mjs +4 -4
- package/dist/jsx/list/filter-saved.mjs.map +1 -1
- package/dist/jsx/list/filter-saved.native.js +4 -7
- package/dist/jsx/list/filter-saved.native.js.map +1 -1
- package/dist/jsx/list/filter-sort.mjs +2 -1
- package/dist/jsx/list/filter-sort.mjs.map +1 -1
- package/dist/jsx/list/filter-sort.native.js +2 -1
- package/dist/jsx/list/filter-sort.native.js.map +1 -1
- package/dist/jsx/list/filter-standard.mjs +1 -1
- package/dist/jsx/list/filter-standard.mjs.map +1 -1
- package/dist/jsx/list/filter-standard.native.js +1 -1
- package/dist/jsx/list/filter-standard.native.js.map +1 -1
- package/dist/jsx/list/listColumns.mjs +261 -112
- package/dist/jsx/list/listColumns.mjs.map +1 -1
- package/dist/jsx/list/listColumns.native.js +263 -118
- package/dist/jsx/list/listColumns.native.js.map +1 -1
- package/dist/jsx/list/listFields.mjs +6 -2
- package/dist/jsx/list/listFields.mjs.map +1 -1
- package/dist/jsx/list/listFields.native.js +8 -1
- package/dist/jsx/list/listFields.native.js.map +1 -1
- package/dist/jsx/list/sidebar-section.mjs +58 -21
- package/dist/jsx/list/sidebar-section.mjs.map +1 -1
- package/dist/jsx/list/sidebar-section.native.js +60 -19
- package/dist/jsx/list/sidebar-section.native.js.map +1 -1
- package/dist/jsx/oneAdapter/index.mjs +5 -1
- package/dist/jsx/oneAdapter/index.mjs.map +1 -1
- package/dist/jsx/oneAdapter/index.native.js +8 -1
- package/dist/jsx/oneAdapter/index.native.js.map +1 -1
- package/dist/jsx/quickEntry/quickEntryPlan.mjs +2 -6
- package/dist/jsx/quickEntry/quickEntryPlan.mjs.map +1 -1
- package/dist/jsx/quickEntry/quickEntryPlan.native.js +4 -6
- package/dist/jsx/quickEntry/quickEntryPlan.native.js.map +1 -1
- package/dist/jsx/report/QueryReportScreen.mjs +103 -94
- package/dist/jsx/report/QueryReportScreen.mjs.map +1 -1
- package/dist/jsx/report/QueryReportScreen.native.js +125 -143
- package/dist/jsx/report/QueryReportScreen.native.js.map +1 -1
- package/dist/jsx/report/queryReportColumns.mjs +9 -1
- package/dist/jsx/report/queryReportColumns.mjs.map +1 -1
- package/dist/jsx/report/queryReportColumns.native.js +16 -1
- package/dist/jsx/report/queryReportColumns.native.js.map +1 -1
- package/dist/jsx/report/queryReportFilterBar.mjs +246 -0
- package/dist/jsx/report/queryReportFilterBar.mjs.map +1 -0
- package/dist/jsx/report/queryReportFilterBar.native.js +339 -0
- package/dist/jsx/report/queryReportFilterBar.native.js.map +1 -0
- package/dist/jsx/report/queryReportUrlState.mjs +29 -0
- package/dist/jsx/report/queryReportUrlState.mjs.map +1 -0
- package/dist/jsx/report/queryReportUrlState.native.js +108 -0
- package/dist/jsx/report/queryReportUrlState.native.js.map +1 -0
- package/dist/jsx/report/report-grid.mjs +158 -53
- package/dist/jsx/report/report-grid.mjs.map +1 -1
- package/dist/jsx/report/report-grid.native.js +174 -54
- package/dist/jsx/report/report-grid.native.js.map +1 -1
- package/dist/jsx/report/report-toolbar.mjs +2 -7
- package/dist/jsx/report/report-toolbar.mjs.map +1 -1
- package/dist/jsx/report/report-toolbar.native.js +6 -6
- package/dist/jsx/report/report-toolbar.native.js.map +1 -1
- package/dist/jsx/report/reportShapes.mjs +266 -12
- package/dist/jsx/report/reportShapes.mjs.map +1 -1
- package/dist/jsx/report/reportShapes.native.js +333 -11
- package/dist/jsx/report/reportShapes.native.js.map +1 -1
- package/dist/jsx/report/reportViewModel.mjs +13 -5
- package/dist/jsx/report/reportViewModel.mjs.map +1 -1
- package/dist/jsx/report/reportViewModel.native.js +38 -5
- package/dist/jsx/report/reportViewModel.native.js.map +1 -1
- package/dist/jsx/report/useQueryReport.mjs +46 -20
- package/dist/jsx/report/useQueryReport.mjs.map +1 -1
- package/dist/jsx/report/useQueryReport.native.js +56 -37
- package/dist/jsx/report/useQueryReport.native.js.map +1 -1
- package/dist/jsx/shared/deskLinks.mjs +13 -0
- package/dist/jsx/shared/deskLinks.mjs.map +1 -0
- package/dist/jsx/shared/deskLinks.native.js +43 -0
- package/dist/jsx/shared/deskLinks.native.js.map +1 -0
- package/dist/jsx/shared/listNavContext.mjs +74 -0
- package/dist/jsx/shared/listNavContext.mjs.map +1 -0
- package/dist/jsx/shared/listNavContext.native.js +130 -0
- package/dist/jsx/shared/listNavContext.native.js.map +1 -0
- package/dist/jsx/shared/useDocinfo.mjs +40 -3
- package/dist/jsx/shared/useDocinfo.mjs.map +1 -1
- package/dist/jsx/shared/useDocinfo.native.js +82 -2
- package/dist/jsx/shared/useDocinfo.native.js.map +1 -1
- package/dist/jsx/shared/useDoctypeMeta.mjs.map +1 -1
- package/dist/jsx/shared/useDoctypeMeta.native.js.map +1 -1
- package/dist/jsx/shared/useFrappeApp.mjs +10 -5
- package/dist/jsx/shared/useFrappeApp.mjs.map +1 -1
- package/dist/jsx/shared/useFrappeApp.native.js +10 -5
- package/dist/jsx/shared/useFrappeApp.native.js.map +1 -1
- package/dist/jsx/shell/BackofficeShell.mjs +75 -23
- package/dist/jsx/shell/BackofficeShell.mjs.map +1 -1
- package/dist/jsx/shell/BackofficeShell.native.js +89 -24
- package/dist/jsx/shell/BackofficeShell.native.js.map +1 -1
- package/dist/jsx/shell/WorkspaceSidebar.mjs +115 -6
- package/dist/jsx/shell/WorkspaceSidebar.mjs.map +1 -1
- package/dist/jsx/shell/WorkspaceSidebar.native.js +120 -4
- package/dist/jsx/shell/WorkspaceSidebar.native.js.map +1 -1
- package/dist/jsx/shell/useWorkspaces.mjs +2 -0
- package/dist/jsx/shell/useWorkspaces.mjs.map +1 -1
- package/dist/jsx/shell/useWorkspaces.native.js +2 -0
- package/dist/jsx/shell/useWorkspaces.native.js.map +1 -1
- package/dist/jsx/shell/workspaceIcons.mjs +13 -3
- package/dist/jsx/shell/workspaceIcons.mjs.map +1 -1
- package/dist/jsx/shell/workspaceIcons.native.js +35 -2
- package/dist/jsx/shell/workspaceIcons.native.js.map +1 -1
- package/dist/jsx/views/CalendarView.mjs +2 -5
- package/dist/jsx/views/CalendarView.mjs.map +1 -1
- package/dist/jsx/views/CalendarView.native.js +1 -6
- package/dist/jsx/views/CalendarView.native.js.map +1 -1
- package/dist/jsx/views/DoctypeViewScreen.mjs +7 -3
- package/dist/jsx/views/DoctypeViewScreen.mjs.map +1 -1
- package/dist/jsx/views/DoctypeViewScreen.native.js +7 -3
- package/dist/jsx/views/DoctypeViewScreen.native.js.map +1 -1
- package/dist/jsx/views/KanbanView.mjs +2 -0
- package/dist/jsx/views/KanbanView.mjs.map +1 -1
- package/dist/jsx/views/KanbanView.native.js +2 -0
- package/dist/jsx/views/KanbanView.native.js.map +1 -1
- package/dist/jsx/views/ViewHeader.mjs +49 -78
- package/dist/jsx/views/ViewHeader.mjs.map +1 -1
- package/dist/jsx/views/ViewHeader.native.js +51 -78
- package/dist/jsx/views/ViewHeader.native.js.map +1 -1
- package/dist/jsx/views/ViewSwitcherMenu.mjs +69 -0
- package/dist/jsx/views/ViewSwitcherMenu.mjs.map +1 -0
- package/dist/jsx/views/ViewSwitcherMenu.native.js +99 -0
- package/dist/jsx/views/ViewSwitcherMenu.native.js.map +1 -0
- package/dist/jsx/views/connection.mjs +5 -1
- package/dist/jsx/views/connection.mjs.map +1 -1
- package/dist/jsx/views/connection.native.js +5 -1
- package/dist/jsx/views/connection.native.js.map +1 -1
- package/dist/jsx/views/dashboard-data.mjs +2 -3
- package/dist/jsx/views/dashboard-data.mjs.map +1 -1
- package/dist/jsx/views/dashboard-data.native.js +1 -4
- package/dist/jsx/views/dashboard-data.native.js.map +1 -1
- package/dist/jsx/views/kanban-board-controls.mjs +4 -9
- package/dist/jsx/views/kanban-board-controls.mjs.map +1 -1
- package/dist/jsx/views/kanban-board-controls.native.js +9 -10
- package/dist/jsx/views/kanban-board-controls.native.js.map +1 -1
- package/dist/jsx/views/viewAvailability.mjs +33 -0
- package/dist/jsx/views/viewAvailability.mjs.map +1 -0
- package/dist/jsx/views/viewAvailability.native.js +63 -0
- package/dist/jsx/views/viewAvailability.native.js.map +1 -0
- package/dist/jsx/workspace/WorkspaceLinkCard.mjs +121 -26
- package/dist/jsx/workspace/WorkspaceLinkCard.mjs.map +1 -1
- package/dist/jsx/workspace/WorkspaceLinkCard.native.js +126 -28
- package/dist/jsx/workspace/WorkspaceLinkCard.native.js.map +1 -1
- package/dist/jsx/workspace/WorkspaceLinkDirectory.mjs +27 -21
- package/dist/jsx/workspace/WorkspaceLinkDirectory.mjs.map +1 -1
- package/dist/jsx/workspace/WorkspaceLinkDirectory.native.js +32 -23
- package/dist/jsx/workspace/WorkspaceLinkDirectory.native.js.map +1 -1
- package/dist/jsx/workspace/WorkspaceNumberCard.mjs +1 -1
- package/dist/jsx/workspace/WorkspaceNumberCard.mjs.map +1 -1
- package/dist/jsx/workspace/WorkspaceNumberCard.native.js +1 -1
- package/dist/jsx/workspace/WorkspaceNumberCard.native.js.map +1 -1
- package/dist/jsx/workspace/WorkspaceQuickList.mjs +62 -30
- package/dist/jsx/workspace/WorkspaceQuickList.mjs.map +1 -1
- package/dist/jsx/workspace/WorkspaceQuickList.native.js +65 -32
- package/dist/jsx/workspace/WorkspaceQuickList.native.js.map +1 -1
- package/dist/jsx/workspace/WorkspaceRecents.mjs +9 -1
- package/dist/jsx/workspace/WorkspaceRecents.mjs.map +1 -1
- package/dist/jsx/workspace/WorkspaceRecents.native.js +8 -0
- package/dist/jsx/workspace/WorkspaceRecents.native.js.map +1 -1
- package/dist/jsx/workspace/WorkspaceShortcut.mjs +11 -1
- package/dist/jsx/workspace/WorkspaceShortcut.mjs.map +1 -1
- package/dist/jsx/workspace/WorkspaceShortcut.native.js +10 -0
- package/dist/jsx/workspace/WorkspaceShortcut.native.js.map +1 -1
- package/dist/jsx/workspace/parseContent.mjs +21 -1
- package/dist/jsx/workspace/parseContent.mjs.map +1 -1
- package/dist/jsx/workspace/parseContent.native.js +24 -0
- package/dist/jsx/workspace/parseContent.native.js.map +1 -1
- package/package.json +14 -14
- package/src/chrome/BackofficeAwesomebar.tsx +1 -0
- package/src/chrome/CommandPalette.spec.tsx +66 -12
- package/src/chrome/CommandPalette.tsx +139 -37
- package/src/chrome/HelpMenu.tsx +48 -67
- package/src/chrome/awesomebar-data.spec.ts +46 -0
- package/src/chrome/awesomebar-data.tsx +62 -12
- package/src/chrome/command-palette-model.ts +2 -2
- package/src/chrome/notifications-data.tsx +2 -0
- package/src/chrome/notifications-panel.tsx +21 -5
- package/src/chrome/shortcuts.ts +2 -0
- package/src/config/BackofficeProvider.tsx +15 -0
- package/src/form/DocFormScreen.tsx +169 -15
- package/src/form/FormConnections.tsx +34 -5
- package/src/form/FormDialogs.tsx +117 -3
- package/src/form/FormErrorBoundary.spec.tsx +1 -0
- package/src/form/FormErrorBoundary.tsx +32 -9
- package/src/form/FormSidebarPanel.spec.tsx +57 -0
- package/src/form/FormSidebarPanel.tsx +69 -14
- package/src/form/FormTimeline.optimistic.spec.tsx +187 -0
- package/src/form/FormTimeline.tsx +246 -28
- package/src/form/FormToolbar.tsx +73 -2
- package/src/form/formActions.ts +4 -0
- package/src/form/formLayout.ts +3 -14
- package/src/form/platformHooks.ts +57 -0
- package/src/form/timeline-entries.spec.ts +180 -0
- package/src/form/timeline-entries.tsx +84 -15
- package/src/i18n/en.ts +32 -9
- package/src/index.ts +14 -1
- package/src/list/AddTagsDialog.tsx +10 -5
- package/src/list/AssignToDialog.tsx +5 -2
- package/src/list/DoctypeListScreen.tsx +208 -209
- package/src/list/ListFilterBar.tsx +61 -26
- package/src/list/ListSidebar.tsx +24 -24
- package/src/list/bulk-edit-dialog.tsx +10 -5
- package/src/list/filter-fields.spec.ts +29 -0
- package/src/list/filter-fields.tsx +22 -2
- package/src/list/filter-saved.tsx +16 -16
- package/src/list/filter-sort.tsx +5 -2
- package/src/list/filter-standard.tsx +1 -1
- package/src/list/listColumns.tsx +307 -114
- package/src/list/listFields.spec.ts +16 -2
- package/src/list/listFields.ts +11 -0
- package/src/list/listUrlState.spec.ts +10 -0
- package/src/list/sidebar-section.spec.tsx +28 -0
- package/src/list/sidebar-section.tsx +57 -14
- package/src/oneAdapter/index.tsx +13 -1
- package/src/quickEntry/quickEntryPlan.ts +2 -6
- package/src/report/DoctypeReportView.tsx +3 -3
- package/src/report/QueryReportScreen.spec.tsx +74 -0
- package/src/report/QueryReportScreen.tsx +159 -121
- package/src/report/queryReportColumns.tsx +17 -0
- package/src/report/queryReportFilterBar.spec.tsx +139 -0
- package/src/report/queryReportFilterBar.tsx +315 -0
- package/src/report/queryReportUrlState.spec.ts +61 -0
- package/src/report/queryReportUrlState.ts +68 -0
- package/src/report/report-grid.spec.tsx +175 -0
- package/src/report/report-grid.tsx +211 -48
- package/src/report/report-toolbar.spec.tsx +90 -0
- package/src/report/report-toolbar.tsx +13 -10
- package/src/report/reportShapes.spec.ts +291 -1
- package/src/report/reportShapes.ts +398 -18
- package/src/report/reportViewModel.spec.ts +55 -0
- package/src/report/reportViewModel.ts +27 -8
- package/src/report/useQueryReport.ts +99 -37
- package/src/shared/deskLinks.spec.ts +38 -0
- package/src/shared/deskLinks.ts +31 -0
- package/src/shared/listNavContext.spec.ts +83 -0
- package/src/shared/listNavContext.ts +115 -0
- package/src/shared/useDocinfo.ts +79 -2
- package/src/shared/useDoctypeMeta.ts +4 -0
- package/src/shared/useFrappeApp.ts +12 -3
- package/src/shell/BackofficeShell.spec.tsx +43 -0
- package/src/shell/BackofficeShell.tsx +93 -24
- package/src/shell/WorkspaceSidebar.spec.tsx +82 -0
- package/src/shell/WorkspaceSidebar.tsx +130 -3
- package/src/shell/useWorkspaces.ts +2 -0
- package/src/shell/workspaceIcons.ts +17 -2
- package/src/views/CalendarView.tsx +2 -5
- package/src/views/DoctypeViewScreen.tsx +3 -1
- package/src/views/KanbanView.tsx +7 -1
- package/src/views/ViewHeader.tsx +63 -99
- package/src/views/ViewSwitcherMenu.spec.tsx +44 -0
- package/src/views/ViewSwitcherMenu.tsx +92 -0
- package/src/views/connection.ts +8 -2
- package/src/views/dashboard-data.tsx +2 -3
- package/src/views/kanban-board-controls.tsx +9 -11
- package/src/views/viewAvailability.spec.ts +199 -0
- package/src/views/viewAvailability.ts +85 -0
- package/src/workspace/WorkspaceLinkCard.tsx +118 -22
- package/src/workspace/WorkspaceLinkDirectory.tsx +32 -27
- package/src/workspace/WorkspaceNumberCard.tsx +1 -1
- package/src/workspace/WorkspaceQuickList.tsx +54 -37
- package/src/workspace/WorkspaceRecents.tsx +5 -1
- package/src/workspace/WorkspaceShortcut.tsx +7 -1
- package/src/workspace/parseContent.spec.ts +89 -0
- package/src/workspace/parseContent.ts +32 -0
- package/types/chrome/BackofficeAwesomebar.d.ts.map +1 -1
- package/types/chrome/CommandPalette.d.ts.map +1 -1
- package/types/chrome/HelpMenu.d.ts.map +1 -1
- package/types/chrome/awesomebar-data.d.ts +9 -2
- package/types/chrome/awesomebar-data.d.ts.map +1 -1
- package/types/chrome/command-palette-model.d.ts.map +1 -1
- package/types/chrome/notifications-data.d.ts.map +1 -1
- package/types/chrome/notifications-panel.d.ts.map +1 -1
- package/types/chrome/shortcuts.d.ts.map +1 -1
- package/types/config/BackofficeProvider.d.ts +13 -0
- package/types/config/BackofficeProvider.d.ts.map +1 -1
- package/types/form/DocFormScreen.d.ts.map +1 -1
- package/types/form/FormConnections.d.ts.map +1 -1
- package/types/form/FormDialogs.d.ts +14 -0
- package/types/form/FormDialogs.d.ts.map +1 -1
- package/types/form/FormErrorBoundary.d.ts +0 -5
- package/types/form/FormErrorBoundary.d.ts.map +1 -1
- package/types/form/FormSidebarPanel.d.ts +22 -0
- package/types/form/FormSidebarPanel.d.ts.map +1 -1
- package/types/form/FormTimeline.d.ts.map +1 -1
- package/types/form/FormToolbar.d.ts +19 -2
- package/types/form/FormToolbar.d.ts.map +1 -1
- package/types/form/formActions.d.ts +4 -0
- package/types/form/formActions.d.ts.map +1 -1
- package/types/form/formLayout.d.ts.map +1 -1
- package/types/form/platformHooks.d.ts +11 -0
- package/types/form/platformHooks.d.ts.map +1 -1
- package/types/form/timeline-entries.d.ts +19 -3
- package/types/form/timeline-entries.d.ts.map +1 -1
- package/types/i18n/en.d.ts +30 -9
- package/types/i18n/en.d.ts.map +1 -1
- package/types/index.d.ts +8 -3
- package/types/index.d.ts.map +1 -1
- package/types/list/AddTagsDialog.d.ts.map +1 -1
- package/types/list/AssignToDialog.d.ts.map +1 -1
- package/types/list/DoctypeListScreen.d.ts +1 -1
- package/types/list/DoctypeListScreen.d.ts.map +1 -1
- package/types/list/ListFilterBar.d.ts +12 -1
- package/types/list/ListFilterBar.d.ts.map +1 -1
- package/types/list/bulk-edit-dialog.d.ts.map +1 -1
- package/types/list/filter-fields.d.ts +4 -1
- package/types/list/filter-fields.d.ts.map +1 -1
- package/types/list/filter-saved.d.ts +1 -1
- package/types/list/filter-saved.d.ts.map +1 -1
- package/types/list/filter-sort.d.ts.map +1 -1
- package/types/list/listColumns.d.ts +8 -1
- package/types/list/listColumns.d.ts.map +1 -1
- package/types/list/listFields.d.ts +2 -0
- package/types/list/listFields.d.ts.map +1 -1
- package/types/list/sidebar-section.d.ts +4 -1
- package/types/list/sidebar-section.d.ts.map +1 -1
- package/types/oneAdapter/index.d.ts.map +1 -1
- package/types/quickEntry/quickEntryPlan.d.ts.map +1 -1
- package/types/report/QueryReportScreen.d.ts +1 -1
- package/types/report/QueryReportScreen.d.ts.map +1 -1
- package/types/report/queryReportColumns.d.ts +2 -0
- package/types/report/queryReportColumns.d.ts.map +1 -1
- package/types/report/queryReportFilterBar.d.ts +22 -0
- package/types/report/queryReportFilterBar.d.ts.map +1 -0
- package/types/report/queryReportUrlState.d.ts +29 -0
- package/types/report/queryReportUrlState.d.ts.map +1 -0
- package/types/report/report-grid.d.ts.map +1 -1
- package/types/report/report-toolbar.d.ts.map +1 -1
- package/types/report/reportShapes.d.ts +49 -2
- package/types/report/reportShapes.d.ts.map +1 -1
- package/types/report/reportViewModel.d.ts +7 -3
- package/types/report/reportViewModel.d.ts.map +1 -1
- package/types/report/useQueryReport.d.ts +10 -5
- package/types/report/useQueryReport.d.ts.map +1 -1
- package/types/shared/deskLinks.d.ts +16 -0
- package/types/shared/deskLinks.d.ts.map +1 -0
- package/types/shared/listNavContext.d.ts +33 -0
- package/types/shared/listNavContext.d.ts.map +1 -0
- package/types/shared/useDocinfo.d.ts +14 -0
- package/types/shared/useDocinfo.d.ts.map +1 -1
- package/types/shared/useDoctypeMeta.d.ts +4 -0
- package/types/shared/useDoctypeMeta.d.ts.map +1 -1
- package/types/shared/useFrappeApp.d.ts.map +1 -1
- package/types/shell/BackofficeShell.d.ts.map +1 -1
- package/types/shell/WorkspaceSidebar.d.ts.map +1 -1
- package/types/shell/useWorkspaces.d.ts.map +1 -1
- package/types/shell/workspaceIcons.d.ts +1 -1
- package/types/shell/workspaceIcons.d.ts.map +1 -1
- package/types/views/CalendarView.d.ts.map +1 -1
- package/types/views/DoctypeViewScreen.d.ts.map +1 -1
- package/types/views/KanbanView.d.ts.map +1 -1
- package/types/views/ViewHeader.d.ts +6 -6
- package/types/views/ViewHeader.d.ts.map +1 -1
- package/types/views/ViewSwitcherMenu.d.ts +14 -0
- package/types/views/ViewSwitcherMenu.d.ts.map +1 -0
- package/types/views/connection.d.ts +4 -0
- package/types/views/connection.d.ts.map +1 -1
- package/types/views/dashboard-data.d.ts.map +1 -1
- package/types/views/kanban-board-controls.d.ts +3 -2
- package/types/views/kanban-board-controls.d.ts.map +1 -1
- package/types/views/viewAvailability.d.ts +27 -0
- package/types/views/viewAvailability.d.ts.map +1 -0
- package/types/workspace/WorkspaceLinkCard.d.ts +7 -1
- package/types/workspace/WorkspaceLinkCard.d.ts.map +1 -1
- package/types/workspace/WorkspaceLinkDirectory.d.ts +1 -6
- package/types/workspace/WorkspaceLinkDirectory.d.ts.map +1 -1
- package/types/workspace/WorkspaceQuickList.d.ts.map +1 -1
- package/types/workspace/WorkspaceRecents.d.ts.map +1 -1
- package/types/workspace/WorkspaceShortcut.d.ts.map +1 -1
- package/types/workspace/parseContent.d.ts +18 -0
- package/types/workspace/parseContent.d.ts.map +1 -1
package/src/list/listColumns.tsx
CHANGED
|
@@ -1,14 +1,23 @@
|
|
|
1
|
-
// Meta-driven column builder for the doctype list view (desk
|
|
2
|
-
//
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
|
|
1
|
+
// Meta-driven column builder for the doctype list view (desk ListView
|
|
2
|
+
// parity): subject-led document rows, not a report grid.
|
|
3
|
+
//
|
|
4
|
+
// Desk row anatomy (list_view.js):
|
|
5
|
+
// checkbox | subject <a> | indicator pills (filterable) | remaining
|
|
6
|
+
// in_list_view values (filterable) | activity cluster
|
|
7
|
+
// (assignee avatars · relative time · comment count · like)
|
|
8
|
+
// Title is a real permalink (middle-click / ⌘-click). Pills and values
|
|
9
|
+
// click-to-filter (data-filter) instead of navigating. Like is a sibling
|
|
10
|
+
// of the subject link (LC-74). Extra ID / Last Updated columns stay out —
|
|
11
|
+
// the timestamp lives in the activity cluster.
|
|
12
|
+
import type { ReactNode } from "react";
|
|
13
|
+
import { Avatar, Anchor, Text, XStack, YStack } from "@multiplatform.one/components";
|
|
6
14
|
// House control for the like toggle — the icon rides the Button icon slot
|
|
7
15
|
// (LC-53 GLYPH-SLOT) and the sub-44 circular size resolves the press floor
|
|
8
16
|
// through the house channel (LC-54: 44px box + hitSlop).
|
|
9
17
|
import { Button } from "@multiplatform.one/forms";
|
|
10
|
-
import { HeartIcon } from "@phosphor-icons/react";
|
|
18
|
+
import { ChatCircleIcon, HeartIcon } from "@phosphor-icons/react";
|
|
11
19
|
import type { DataTableColumn } from "@multiplatform.one/table";
|
|
20
|
+
import { formatAbsoluteDateTime } from "@multiplatform.one/theme";
|
|
12
21
|
import type { PermLevelMatrix } from "../form/fieldPermissions";
|
|
13
22
|
import type { DocFieldMeta, DoctypeMeta } from "../shared/useDoctypeMeta";
|
|
14
23
|
// Field selection + permlevel pruning live in the pure listFields module
|
|
@@ -46,6 +55,13 @@ export interface BuildListColumnsArgs {
|
|
|
46
55
|
* the server strips no-read values either way.
|
|
47
56
|
*/
|
|
48
57
|
permMatrix?: PermLevelMatrix;
|
|
58
|
+
/** Document form href — subject renders as a real `<a>` when set (C1). */
|
|
59
|
+
getDocHref?: (name: string) => string;
|
|
60
|
+
/**
|
|
61
|
+
* Desk cell click-to-filter (C2). Status/priority pills, dates, and
|
|
62
|
+
* remaining values add (or toggle off) a tuple instead of opening the doc.
|
|
63
|
+
*/
|
|
64
|
+
onFilterClick?: (fieldname: string, value: string) => void;
|
|
49
65
|
}
|
|
50
66
|
|
|
51
67
|
const NUMERIC_FIELDTYPES = new Set(["Currency", "Float", "Int", "Percent", "Duration"]);
|
|
@@ -79,16 +95,64 @@ function isStatusField(field: DocFieldMeta, meta?: DoctypeMeta): boolean {
|
|
|
79
95
|
return options.some((option) => option && stateTitles.has(option));
|
|
80
96
|
}
|
|
81
97
|
|
|
82
|
-
|
|
98
|
+
/** Desk indicator cells: every Select in the list, plus User.enabled. */
|
|
99
|
+
function isIndicatorField(field: DocFieldMeta, meta?: DoctypeMeta): boolean {
|
|
100
|
+
if (field.fieldtype === "Select") return true;
|
|
101
|
+
if (field.fieldtype === "Check" && field.fieldname === "enabled") return true;
|
|
102
|
+
return isStatusField(field, meta);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
function stopRowPress(event?: { stopPropagation?: () => void }) {
|
|
106
|
+
event?.stopPropagation?.();
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
function IndicatorPill({
|
|
110
|
+
value,
|
|
111
|
+
meta,
|
|
112
|
+
fieldname,
|
|
113
|
+
filterValue,
|
|
114
|
+
onFilterClick,
|
|
115
|
+
}: {
|
|
116
|
+
value: string;
|
|
117
|
+
meta?: DoctypeMeta;
|
|
118
|
+
fieldname: string;
|
|
119
|
+
/** Wire value when it differs from the label (Check enabled → 1/0). */
|
|
120
|
+
filterValue?: string;
|
|
121
|
+
onFilterClick?: (fieldname: string, value: string) => void;
|
|
122
|
+
}) {
|
|
83
123
|
const colors = statusPillColors(value, meta);
|
|
124
|
+
const applied = filterValue ?? value;
|
|
125
|
+
const handlePress = onFilterClick
|
|
126
|
+
? (event?: { stopPropagation?: () => void }) => {
|
|
127
|
+
stopRowPress(event);
|
|
128
|
+
onFilterClick(fieldname, applied);
|
|
129
|
+
}
|
|
130
|
+
: undefined;
|
|
84
131
|
return (
|
|
85
132
|
<XStack
|
|
86
133
|
alignSelf="flex-start"
|
|
134
|
+
alignItems="center"
|
|
135
|
+
gap="$1.5"
|
|
87
136
|
backgroundColor={colors.background as "$color3"}
|
|
88
137
|
borderRadius={999}
|
|
89
|
-
paddingHorizontal="$2
|
|
90
|
-
paddingVertical=
|
|
138
|
+
paddingHorizontal="$2"
|
|
139
|
+
paddingVertical={3}
|
|
140
|
+
{...(handlePress
|
|
141
|
+
? {
|
|
142
|
+
role: "button" as const,
|
|
143
|
+
cursor: "pointer" as const,
|
|
144
|
+
onPress: handlePress,
|
|
145
|
+
"data-filter": `${fieldname},=,${applied}`,
|
|
146
|
+
}
|
|
147
|
+
: {})}
|
|
91
148
|
>
|
|
149
|
+
<YStack
|
|
150
|
+
width={6}
|
|
151
|
+
height={6}
|
|
152
|
+
borderRadius={999}
|
|
153
|
+
backgroundColor={colors.text as "$color11"}
|
|
154
|
+
flexShrink={0}
|
|
155
|
+
/>
|
|
92
156
|
<Text color={colors.text as "$color11"} fontSize="$2" fontWeight="600">
|
|
93
157
|
{value}
|
|
94
158
|
</Text>
|
|
@@ -96,7 +160,162 @@ function StatusPill({ value, meta }: { value: string; meta?: DoctypeMeta }) {
|
|
|
96
160
|
);
|
|
97
161
|
}
|
|
98
162
|
|
|
99
|
-
function
|
|
163
|
+
function FilterableText({
|
|
164
|
+
fieldname,
|
|
165
|
+
value,
|
|
166
|
+
children,
|
|
167
|
+
onFilterClick,
|
|
168
|
+
}: {
|
|
169
|
+
fieldname: string;
|
|
170
|
+
value: string;
|
|
171
|
+
children: ReactNode;
|
|
172
|
+
onFilterClick?: (fieldname: string, value: string) => void;
|
|
173
|
+
}) {
|
|
174
|
+
if (!onFilterClick) return <>{children}</>;
|
|
175
|
+
return (
|
|
176
|
+
<XStack
|
|
177
|
+
role="button"
|
|
178
|
+
cursor="pointer"
|
|
179
|
+
minWidth={0}
|
|
180
|
+
flexShrink={1}
|
|
181
|
+
onPress={(event) => {
|
|
182
|
+
stopRowPress(event);
|
|
183
|
+
onFilterClick(fieldname, value);
|
|
184
|
+
}}
|
|
185
|
+
hoverStyle={{ opacity: 0.8 }}
|
|
186
|
+
{...{ "data-filter": `${fieldname},=,${value}` }}
|
|
187
|
+
>
|
|
188
|
+
{children}
|
|
189
|
+
</XStack>
|
|
190
|
+
);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
function commentCount(doc: ListRow): number {
|
|
194
|
+
const raw = doc._comment_count;
|
|
195
|
+
if (typeof raw === "number" && Number.isFinite(raw)) return raw;
|
|
196
|
+
if (typeof raw === "string" && raw.trim()) {
|
|
197
|
+
const parsed = Number(raw);
|
|
198
|
+
if (Number.isFinite(parsed)) return parsed;
|
|
199
|
+
}
|
|
200
|
+
const comments = doc._comments;
|
|
201
|
+
if (typeof comments === "string" && comments.trim()) {
|
|
202
|
+
try {
|
|
203
|
+
const parsed = JSON.parse(comments) as unknown;
|
|
204
|
+
if (Array.isArray(parsed)) return parsed.length;
|
|
205
|
+
} catch {
|
|
206
|
+
return 0;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
return 0;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
function LikeControl({
|
|
213
|
+
doc,
|
|
214
|
+
t,
|
|
215
|
+
sessionUser,
|
|
216
|
+
onToggleLike,
|
|
217
|
+
likeOverrides,
|
|
218
|
+
}: {
|
|
219
|
+
doc: ListRow;
|
|
220
|
+
t: Translate;
|
|
221
|
+
sessionUser?: string;
|
|
222
|
+
onToggleLike?: (name: string, nextLiked: boolean) => void;
|
|
223
|
+
likeOverrides?: Record<string, boolean>;
|
|
224
|
+
}) {
|
|
225
|
+
const name = doc.name ?? "";
|
|
226
|
+
const likedBy = parseUserListField(doc._liked_by);
|
|
227
|
+
const liked = likeOverrides?.[name] ?? (sessionUser ? likedBy.includes(sessionUser) : false);
|
|
228
|
+
const likeLabel = liked ? t("list.unlike", "Remove from liked") : t("list.like", "Add to liked");
|
|
229
|
+
if (!onToggleLike || !name) {
|
|
230
|
+
return (
|
|
231
|
+
<Text fontSize="$4" color={liked ? "$red10" : "$color8"} role="img" aria-label={likeLabel}>
|
|
232
|
+
{liked ? "♥" : "♡"}
|
|
233
|
+
</Text>
|
|
234
|
+
);
|
|
235
|
+
}
|
|
236
|
+
return (
|
|
237
|
+
<Button
|
|
238
|
+
circular
|
|
239
|
+
chromeless
|
|
240
|
+
size="$2"
|
|
241
|
+
col={(liked ? "$red10" : "$color8") as never}
|
|
242
|
+
icon={<HeartIcon size={16} weight={liked ? "fill" : "regular"} />}
|
|
243
|
+
aria-label={likeLabel}
|
|
244
|
+
aria-pressed={liked}
|
|
245
|
+
onPress={(event) => {
|
|
246
|
+
stopRowPress(event);
|
|
247
|
+
onToggleLike(name, !liked);
|
|
248
|
+
}}
|
|
249
|
+
/>
|
|
250
|
+
);
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
function ActivityCluster({
|
|
254
|
+
doc,
|
|
255
|
+
t,
|
|
256
|
+
sessionUser,
|
|
257
|
+
onToggleLike,
|
|
258
|
+
likeOverrides,
|
|
259
|
+
}: {
|
|
260
|
+
doc: ListRow;
|
|
261
|
+
t: Translate;
|
|
262
|
+
sessionUser?: string;
|
|
263
|
+
onToggleLike?: (name: string, nextLiked: boolean) => void;
|
|
264
|
+
likeOverrides?: Record<string, boolean>;
|
|
265
|
+
}) {
|
|
266
|
+
const assignees = parseUserListField(doc._assign);
|
|
267
|
+
const comments = commentCount(doc);
|
|
268
|
+
const modified = doc.modified ? String(doc.modified) : "";
|
|
269
|
+
const absolute = modified ? formatAbsoluteDateTime(modified) : "";
|
|
270
|
+
return (
|
|
271
|
+
<XStack
|
|
272
|
+
alignItems="center"
|
|
273
|
+
justifyContent="flex-end"
|
|
274
|
+
gap="$2"
|
|
275
|
+
minWidth={0}
|
|
276
|
+
testID="list-activity"
|
|
277
|
+
>
|
|
278
|
+
{assignees.slice(0, 3).map((user) => (
|
|
279
|
+
<Avatar key={user} name={user} size={20} circular aria-label={user} />
|
|
280
|
+
))}
|
|
281
|
+
{modified ? (
|
|
282
|
+
<Text
|
|
283
|
+
fontSize="$2"
|
|
284
|
+
color="$color9"
|
|
285
|
+
{...({ title: absolute || undefined } as Record<string, unknown>)}
|
|
286
|
+
>
|
|
287
|
+
{formatTimeAgo(modified)}
|
|
288
|
+
</Text>
|
|
289
|
+
) : null}
|
|
290
|
+
<XStack
|
|
291
|
+
alignItems="center"
|
|
292
|
+
gap="$1"
|
|
293
|
+
{...({ "aria-label": t("list.comments", "Comments") } as Record<
|
|
294
|
+
string,
|
|
295
|
+
unknown
|
|
296
|
+
>)}
|
|
297
|
+
>
|
|
298
|
+
<ChatCircleIcon size={14} />
|
|
299
|
+
<Text fontSize="$2" color="$color9">
|
|
300
|
+
{comments}
|
|
301
|
+
</Text>
|
|
302
|
+
</XStack>
|
|
303
|
+
<LikeControl
|
|
304
|
+
doc={doc}
|
|
305
|
+
t={t}
|
|
306
|
+
sessionUser={sessionUser}
|
|
307
|
+
onToggleLike={onToggleLike}
|
|
308
|
+
likeOverrides={likeOverrides}
|
|
309
|
+
/>
|
|
310
|
+
</XStack>
|
|
311
|
+
);
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
function fieldCell(
|
|
315
|
+
field: DocFieldMeta,
|
|
316
|
+
meta: DoctypeMeta | undefined,
|
|
317
|
+
onFilterClick?: (fieldname: string, value: string) => void,
|
|
318
|
+
) {
|
|
100
319
|
return ({ getValue }: { getValue: () => unknown }) => {
|
|
101
320
|
const raw = getValue();
|
|
102
321
|
if (raw === null || raw === undefined || raw === "")
|
|
@@ -105,8 +324,29 @@ function fieldCell(field: DocFieldMeta, meta: DoctypeMeta | undefined) {
|
|
|
105
324
|
—
|
|
106
325
|
</Text>
|
|
107
326
|
);
|
|
327
|
+
if (field.fieldtype === "Check" && field.fieldname === "enabled") {
|
|
328
|
+
const on = raw === true || raw === 1 || raw === "1";
|
|
329
|
+
return (
|
|
330
|
+
<IndicatorPill
|
|
331
|
+
value={on ? "Active" : "Disabled"}
|
|
332
|
+
meta={meta}
|
|
333
|
+
fieldname={field.fieldname}
|
|
334
|
+
filterValue={on ? "1" : "0"}
|
|
335
|
+
onFilterClick={onFilterClick}
|
|
336
|
+
/>
|
|
337
|
+
);
|
|
338
|
+
}
|
|
108
339
|
const value = String(raw);
|
|
109
|
-
if (
|
|
340
|
+
if (isIndicatorField(field, meta)) {
|
|
341
|
+
return (
|
|
342
|
+
<IndicatorPill
|
|
343
|
+
value={value}
|
|
344
|
+
meta={meta}
|
|
345
|
+
fieldname={field.fieldname}
|
|
346
|
+
onFilterClick={onFilterClick}
|
|
347
|
+
/>
|
|
348
|
+
);
|
|
349
|
+
}
|
|
110
350
|
switch (field.fieldtype) {
|
|
111
351
|
case "Check":
|
|
112
352
|
return (
|
|
@@ -115,12 +355,16 @@ function fieldCell(field: DocFieldMeta, meta: DoctypeMeta | undefined) {
|
|
|
115
355
|
</Text>
|
|
116
356
|
);
|
|
117
357
|
case "Date":
|
|
118
|
-
case "Datetime":
|
|
358
|
+
case "Datetime": {
|
|
359
|
+
const display = formatDateCell(value);
|
|
119
360
|
return (
|
|
120
|
-
<
|
|
121
|
-
|
|
122
|
-
|
|
361
|
+
<FilterableText fieldname={field.fieldname} value={value} onFilterClick={onFilterClick}>
|
|
362
|
+
<Text fontSize="$3" color="$color11">
|
|
363
|
+
{display}
|
|
364
|
+
</Text>
|
|
365
|
+
</FilterableText>
|
|
123
366
|
);
|
|
367
|
+
}
|
|
124
368
|
case "Currency":
|
|
125
369
|
case "Float":
|
|
126
370
|
case "Int":
|
|
@@ -132,15 +376,13 @@ function fieldCell(field: DocFieldMeta, meta: DoctypeMeta | undefined) {
|
|
|
132
376
|
);
|
|
133
377
|
case "Link":
|
|
134
378
|
return (
|
|
135
|
-
<
|
|
136
|
-
{
|
|
137
|
-
|
|
379
|
+
<FilterableText fieldname={field.fieldname} value={value} onFilterClick={onFilterClick}>
|
|
380
|
+
<Text fontSize="$3" color="$color11" numberOfLines={1} flexShrink={1} minWidth={0}>
|
|
381
|
+
{value}
|
|
382
|
+
</Text>
|
|
383
|
+
</FilterableText>
|
|
138
384
|
);
|
|
139
385
|
default:
|
|
140
|
-
// One-line plain-text preview (rich markup stripped) that SHRINKS
|
|
141
|
-
// inside the cell (flexShrink + minWidth 0) so numberOfLines can
|
|
142
|
-
// ellipsize instead of painting under the neighbor column
|
|
143
|
-
// (LC-06/LC-10; cell-containment rule candidate, audit pair 16).
|
|
144
386
|
return (
|
|
145
387
|
<Text fontSize="$3" color="$color11" numberOfLines={1} flexShrink={1} minWidth={0}>
|
|
146
388
|
{cellPreview(value, field.fieldtype)}
|
|
@@ -158,69 +400,12 @@ export function buildListColumns({
|
|
|
158
400
|
onToggleLike,
|
|
159
401
|
likeOverrides,
|
|
160
402
|
permMatrix,
|
|
403
|
+
getDocHref,
|
|
404
|
+
onFilterClick,
|
|
161
405
|
}: BuildListColumnsArgs): DataTableColumn<ListRow>[] {
|
|
162
406
|
const titleField = meta?.title_field || "name";
|
|
163
407
|
const columns: DataTableColumn<ListRow>[] = [];
|
|
164
408
|
|
|
165
|
-
// Liked hearts (desk `_liked_by` column). Press toggles; navigation is
|
|
166
|
-
// stopped so the row click underneath does not fire.
|
|
167
|
-
columns.push({
|
|
168
|
-
id: "_liked_by",
|
|
169
|
-
// Glyph header with a spoken name — a bare "♥" string gives the column
|
|
170
|
-
// an unpronounceable accessible name. Presentational glyph + aria-label.
|
|
171
|
-
header: () => (
|
|
172
|
-
<Text role="img" aria-label={t("list.likedColumn", "Liked")} color="$color9" fontSize="$4">
|
|
173
|
-
♥
|
|
174
|
-
</Text>
|
|
175
|
-
),
|
|
176
|
-
accessorKey: "_liked_by",
|
|
177
|
-
sortable: false,
|
|
178
|
-
filterable: false,
|
|
179
|
-
width: 56,
|
|
180
|
-
maxWidth: 64,
|
|
181
|
-
align: "center",
|
|
182
|
-
cell: ({ row }) => {
|
|
183
|
-
const doc = row.original;
|
|
184
|
-
const name = doc.name ?? "";
|
|
185
|
-
const likedBy = parseUserListField(doc._liked_by);
|
|
186
|
-
const liked = likeOverrides?.[name] ?? (sessionUser ? likedBy.includes(sessionUser) : false);
|
|
187
|
-
const likeLabel = liked
|
|
188
|
-
? t("list.unlike", "Remove from liked")
|
|
189
|
-
: t("list.like", "Add to liked");
|
|
190
|
-
if (!onToggleLike || !name) {
|
|
191
|
-
// Read-only surface (fixtures / no session): presentational glyph.
|
|
192
|
-
return (
|
|
193
|
-
<Text
|
|
194
|
-
fontSize="$4"
|
|
195
|
-
color={liked ? "$red10" : "$color8"}
|
|
196
|
-
role="img"
|
|
197
|
-
aria-label={likeLabel}
|
|
198
|
-
>
|
|
199
|
-
{liked ? "♥" : "♡"}
|
|
200
|
-
</Text>
|
|
201
|
-
);
|
|
202
|
-
}
|
|
203
|
-
return (
|
|
204
|
-
<Button
|
|
205
|
-
circular
|
|
206
|
-
chromeless
|
|
207
|
-
size="$2"
|
|
208
|
-
// LC-53 GLYPH-SLOT: glyph rides the icon slot; the slot themes the
|
|
209
|
-
// clone from the control's color (`col` shorthand).
|
|
210
|
-
col={(liked ? "$red10" : "$color8") as never}
|
|
211
|
-
icon={<HeartIcon size={16} weight={liked ? "fill" : "regular"} />}
|
|
212
|
-
aria-label={likeLabel}
|
|
213
|
-
aria-pressed={liked}
|
|
214
|
-
onPress={(event) => {
|
|
215
|
-
event?.stopPropagation?.();
|
|
216
|
-
onToggleLike(name, !liked);
|
|
217
|
-
}}
|
|
218
|
-
/>
|
|
219
|
-
);
|
|
220
|
-
},
|
|
221
|
-
});
|
|
222
|
-
|
|
223
|
-
// Title column: title_field bolded (desk subject).
|
|
224
409
|
const titleMeta = meta?.fields?.find((field) => field.fieldname === titleField);
|
|
225
410
|
columns.push({
|
|
226
411
|
id: titleField,
|
|
@@ -230,13 +415,14 @@ export function buildListColumns({
|
|
|
230
415
|
: titleMeta?.label || t("list.titleColumn", "Title"),
|
|
231
416
|
accessorKey: titleField,
|
|
232
417
|
minWidth: 180,
|
|
418
|
+
meta: { role: "title" },
|
|
233
419
|
cell: ({ row, getValue }) => {
|
|
234
420
|
const raw = getValue();
|
|
235
|
-
const
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
421
|
+
const name = row.original.name ?? "";
|
|
422
|
+
const value = raw === null || raw === undefined || raw === "" ? name : String(raw);
|
|
423
|
+
const href = name && getDocHref ? getDocHref(name) : undefined;
|
|
424
|
+
const label = cellPreview(value, titleMeta?.fieldtype);
|
|
425
|
+
const subject = (
|
|
240
426
|
<Text
|
|
241
427
|
fontSize="$3"
|
|
242
428
|
fontWeight="600"
|
|
@@ -245,52 +431,59 @@ export function buildListColumns({
|
|
|
245
431
|
flexShrink={1}
|
|
246
432
|
minWidth={0}
|
|
247
433
|
>
|
|
248
|
-
{
|
|
434
|
+
{label}
|
|
249
435
|
</Text>
|
|
250
436
|
);
|
|
437
|
+
if (!href) return subject;
|
|
438
|
+
return (
|
|
439
|
+
<Anchor
|
|
440
|
+
href={href}
|
|
441
|
+
textDecorationLine="none"
|
|
442
|
+
minWidth={0}
|
|
443
|
+
flexShrink={1}
|
|
444
|
+
onPress={stopRowPress}
|
|
445
|
+
>
|
|
446
|
+
{subject}
|
|
447
|
+
</Anchor>
|
|
448
|
+
);
|
|
251
449
|
},
|
|
252
450
|
});
|
|
253
451
|
|
|
254
|
-
// in_list_view fields from meta (permlevel-pruned).
|
|
255
452
|
for (const field of listViewFields(meta, titleField, permMatrix)) {
|
|
256
453
|
columns.push({
|
|
257
454
|
id: field.fieldname,
|
|
258
455
|
header: field.label || field.fieldname,
|
|
259
456
|
accessorKey: field.fieldname,
|
|
260
457
|
...(NUMERIC_FIELDTYPES.has(field.fieldtype) ? { align: "right" as const } : {}),
|
|
261
|
-
cell: fieldCell(field, meta),
|
|
458
|
+
cell: fieldCell(field, meta, onFilterClick),
|
|
262
459
|
});
|
|
263
460
|
}
|
|
264
461
|
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
462
|
+
columns.push({
|
|
463
|
+
id: "_activity",
|
|
464
|
+
header: t("list.activity", "Activity"),
|
|
465
|
+
meta: { role: "actions", label: t("list.activity", "Activity") },
|
|
466
|
+
sortable: false,
|
|
467
|
+
filterable: false,
|
|
468
|
+
cell: ({ row }) => (
|
|
469
|
+
<ActivityCluster
|
|
470
|
+
doc={row.original}
|
|
471
|
+
t={t}
|
|
472
|
+
sessionUser={sessionUser}
|
|
473
|
+
onToggleLike={onToggleLike}
|
|
474
|
+
likeOverrides={likeOverrides}
|
|
475
|
+
/>
|
|
476
|
+
),
|
|
477
|
+
});
|
|
279
478
|
|
|
280
|
-
//
|
|
479
|
+
// Hidden sort key — desk default is Last Updated On. The timestamp paints
|
|
480
|
+
// in the activity cluster; the column exists so TanStack can sort on it
|
|
481
|
+
// without a second visible "Last Updated" slot.
|
|
281
482
|
columns.push({
|
|
282
483
|
id: "modified",
|
|
283
|
-
header: t("list.lastUpdated", "Last Updated On"),
|
|
284
484
|
accessorKey: "modified",
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
const raw = getValue();
|
|
288
|
-
return (
|
|
289
|
-
<Text fontSize="$2" color="$color9">
|
|
290
|
-
{raw ? formatTimeAgo(String(raw)) : ""}
|
|
291
|
-
</Text>
|
|
292
|
-
);
|
|
293
|
-
},
|
|
485
|
+
header: t("list.lastUpdated", "Last Updated On"),
|
|
486
|
+
enableHiding: true,
|
|
294
487
|
});
|
|
295
488
|
|
|
296
489
|
return columns;
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
import { describe, expect, it } from "vitest";
|
|
11
11
|
import { buildPermLevelMatrix, type PermLevelMatrix } from "../form/fieldPermissions";
|
|
12
12
|
import type { DoctypeMeta } from "../shared/useDoctypeMeta";
|
|
13
|
-
import { listFieldsToFetch, listViewFields } from "./listFields";
|
|
13
|
+
import { listDocumentColumnIds, listFieldsToFetch, listViewFields } from "./listFields";
|
|
14
14
|
|
|
15
15
|
const meta: DoctypeMeta = {
|
|
16
16
|
name: "User",
|
|
@@ -85,7 +85,9 @@ describe("listFieldsToFetch permlevel pruning", () => {
|
|
|
85
85
|
it("skips unreadable in_list_view fields but keeps bookkeeping fields", () => {
|
|
86
86
|
const matrix = buildPermLevelMatrix(meta.permissions, ["Desk User"]);
|
|
87
87
|
const fields = listFieldsToFetch(meta, matrix);
|
|
88
|
-
expect(fields).toEqual(
|
|
88
|
+
expect(fields).toEqual(
|
|
89
|
+
expect.arrayContaining(["name", "modified", "full_name", "enabled", "_comment_count"]),
|
|
90
|
+
);
|
|
89
91
|
expect(fields).not.toContain("role_profile_name");
|
|
90
92
|
expect(fields).not.toContain("api_secret_hint");
|
|
91
93
|
});
|
|
@@ -96,3 +98,15 @@ describe("listFieldsToFetch permlevel pruning", () => {
|
|
|
96
98
|
expect(fields).toContain("api_secret_hint");
|
|
97
99
|
});
|
|
98
100
|
});
|
|
101
|
+
|
|
102
|
+
describe("listDocumentColumnIds desk list anatomy", () => {
|
|
103
|
+
it("is title, in_list_view values, then the activity cluster — no extra ID/modified", () => {
|
|
104
|
+
expect(listDocumentColumnIds(meta)).toEqual([
|
|
105
|
+
"full_name",
|
|
106
|
+
"enabled",
|
|
107
|
+
"role_profile_name",
|
|
108
|
+
"api_secret_hint",
|
|
109
|
+
"_activity",
|
|
110
|
+
]);
|
|
111
|
+
});
|
|
112
|
+
});
|
package/src/list/listFields.ts
CHANGED
|
@@ -24,6 +24,7 @@ export function listFieldsToFetch(meta?: DoctypeMeta, permMatrix?: PermLevelMatr
|
|
|
24
24
|
"_liked_by",
|
|
25
25
|
"_assign",
|
|
26
26
|
"_user_tags",
|
|
27
|
+
"_comment_count",
|
|
27
28
|
]);
|
|
28
29
|
if (meta?.title_field) fields.add(meta.title_field);
|
|
29
30
|
for (const field of meta?.fields ?? []) {
|
|
@@ -56,3 +57,13 @@ export function listViewFields(
|
|
|
56
57
|
fieldLevelReadable(field, permMatrix),
|
|
57
58
|
);
|
|
58
59
|
}
|
|
60
|
+
|
|
61
|
+
/** Column ids the list view paints, in order: title, in_list_view, activity. */
|
|
62
|
+
export function listDocumentColumnIds(meta?: DoctypeMeta, permMatrix?: PermLevelMatrix): string[] {
|
|
63
|
+
const titleField = meta?.title_field || "name";
|
|
64
|
+
return [
|
|
65
|
+
titleField,
|
|
66
|
+
...listViewFields(meta, titleField, permMatrix).map((field) => field.fieldname),
|
|
67
|
+
"_activity",
|
|
68
|
+
];
|
|
69
|
+
}
|
|
@@ -38,6 +38,12 @@ describe("filters param (?f=)", () => {
|
|
|
38
38
|
expect(parseFiltersParam("[[1,2,3]]")).toEqual([]);
|
|
39
39
|
});
|
|
40
40
|
|
|
41
|
+
it('treats the one-router removal sentinel ("undefined") as no filters', () => {
|
|
42
|
+
// The one adapter clears a param by writing the literal "undefined"
|
|
43
|
+
// (one's URL serializer drops it); a stale echo must parse to empty.
|
|
44
|
+
expect(parseFiltersParam("undefined")).toEqual([]);
|
|
45
|
+
});
|
|
46
|
+
|
|
41
47
|
it("normalizes tuples to three entries and drops malformed rows", () => {
|
|
42
48
|
expect(parseFiltersParam(JSON.stringify([["a", "=", "b", "extra"], ["short"]]))).toEqual([
|
|
43
49
|
["a", "=", "b"],
|
|
@@ -65,6 +71,10 @@ describe("sort param (?sort=<fieldname>.<asc|desc>)", () => {
|
|
|
65
71
|
expect(parseSortParam(".desc")).toBeUndefined();
|
|
66
72
|
});
|
|
67
73
|
|
|
74
|
+
it('treats the one-router removal sentinel ("undefined") as no sort', () => {
|
|
75
|
+
expect(parseSortParam("undefined")).toBeUndefined();
|
|
76
|
+
});
|
|
77
|
+
|
|
68
78
|
it("accepts urlencoded input (defensive decode)", () => {
|
|
69
79
|
expect(parseSortParam(encodeURIComponent("due_date.asc"))).toEqual({
|
|
70
80
|
field: "due_date",
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { GroupPositionContext } from "@multiplatform.one/theme";
|
|
2
|
+
import { renderWithProviders } from "@multiplatform.one/test-utils";
|
|
3
|
+
import { cleanup, screen } from "@testing-library/react";
|
|
4
|
+
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
5
|
+
import { SidebarFacetRow } from "./sidebar-section";
|
|
6
|
+
|
|
7
|
+
afterEach(cleanup);
|
|
8
|
+
|
|
9
|
+
describe("SidebarFacetRow stacked-group radius (LC-72)", () => {
|
|
10
|
+
it("resolves first / middle / last from GroupPositionContext", () => {
|
|
11
|
+
renderWithProviders(
|
|
12
|
+
<>
|
|
13
|
+
<GroupPositionContext.Provider value="first">
|
|
14
|
+
<SidebarFacetRow label="Open" count={4} active={false} onPress={vi.fn()} />
|
|
15
|
+
</GroupPositionContext.Provider>
|
|
16
|
+
<GroupPositionContext.Provider value="middle">
|
|
17
|
+
<SidebarFacetRow label="Closed" count={2} active={false} onPress={vi.fn()} />
|
|
18
|
+
</GroupPositionContext.Provider>
|
|
19
|
+
<GroupPositionContext.Provider value="last">
|
|
20
|
+
<SidebarFacetRow label="Cancelled" count={1} active={false} onPress={vi.fn()} />
|
|
21
|
+
</GroupPositionContext.Provider>
|
|
22
|
+
</>,
|
|
23
|
+
);
|
|
24
|
+
expect(screen.getByLabelText("Open").getAttribute("data-group-position")).toBe("first");
|
|
25
|
+
expect(screen.getByLabelText("Closed").getAttribute("data-group-position")).toBe("middle");
|
|
26
|
+
expect(screen.getByLabelText("Cancelled").getAttribute("data-group-position")).toBe("last");
|
|
27
|
+
});
|
|
28
|
+
});
|