@multiplatform.one/backoffice 6.6.0 → 7.0.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 +15 -15
- 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
|
@@ -5,7 +5,16 @@
|
|
|
5
5
|
* the per-section loading skeleton.
|
|
6
6
|
*/
|
|
7
7
|
import { Accordion, SizableText, Skeleton, XStack, YStack } from "@multiplatform.one/components";
|
|
8
|
-
import
|
|
8
|
+
import {
|
|
9
|
+
GroupPositionContext,
|
|
10
|
+
ensureFocusVisibleRing,
|
|
11
|
+
getGroupPosition,
|
|
12
|
+
hairline,
|
|
13
|
+
stackRadiusProps,
|
|
14
|
+
useGroupPosition,
|
|
15
|
+
useResolvedKnobs,
|
|
16
|
+
} from "@multiplatform.one/theme";
|
|
17
|
+
import { Children, Fragment, isValidElement, type ReactNode } from "react";
|
|
9
18
|
import { useTranslation } from "react-i18next";
|
|
10
19
|
import { BACKOFFICE_I18N_NAMESPACE } from "../i18n";
|
|
11
20
|
|
|
@@ -16,17 +25,37 @@ export interface SidebarSectionProps {
|
|
|
16
25
|
children: ReactNode;
|
|
17
26
|
}
|
|
18
27
|
|
|
19
|
-
|
|
28
|
+
/** Trigger + facet stack. ListSidebar wraps this in Accordion.Item so the
|
|
29
|
+
* Accordion root can count items (a custom Item wrapper is opaque). */
|
|
30
|
+
export function SidebarSectionChrome({ title, children }: Omit<SidebarSectionProps, "value">) {
|
|
31
|
+
const rows = Children.toArray(children);
|
|
20
32
|
return (
|
|
21
|
-
|
|
22
|
-
<Accordion.Trigger minHeight={
|
|
33
|
+
<>
|
|
34
|
+
<Accordion.Trigger minHeight={32} paddingVertical="$1.5" paddingHorizontal="$2">
|
|
23
35
|
<SizableText size="$2" fontWeight="600" color="$color11" numberOfLines={1} flexShrink={1}>
|
|
24
36
|
{title}
|
|
25
37
|
</SizableText>
|
|
26
38
|
</Accordion.Trigger>
|
|
27
|
-
<Accordion.Content
|
|
28
|
-
<YStack
|
|
39
|
+
<Accordion.Content padding={0}>
|
|
40
|
+
<YStack>
|
|
41
|
+
{rows.map((child, index) => (
|
|
42
|
+
<Fragment key={isValidElement(child) && child.key != null ? String(child.key) : index}>
|
|
43
|
+
{index > 0 ? <YStack {...hairline.line} /> : null}
|
|
44
|
+
<GroupPositionContext.Provider value={getGroupPosition(index, rows.length)}>
|
|
45
|
+
{child}
|
|
46
|
+
</GroupPositionContext.Provider>
|
|
47
|
+
</Fragment>
|
|
48
|
+
))}
|
|
49
|
+
</YStack>
|
|
29
50
|
</Accordion.Content>
|
|
51
|
+
</>
|
|
52
|
+
);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export function SidebarSection({ value, title, children }: SidebarSectionProps) {
|
|
56
|
+
return (
|
|
57
|
+
<Accordion.Item value={value}>
|
|
58
|
+
<SidebarSectionChrome title={title}>{children}</SidebarSectionChrome>
|
|
30
59
|
</Accordion.Item>
|
|
31
60
|
);
|
|
32
61
|
}
|
|
@@ -40,6 +69,9 @@ export interface SidebarFacetRowProps {
|
|
|
40
69
|
}
|
|
41
70
|
|
|
42
71
|
export function SidebarFacetRow({ label, count, active, onPress }: SidebarFacetRowProps) {
|
|
72
|
+
const { knobProps } = useResolvedKnobs();
|
|
73
|
+
const position = useGroupPosition() ?? "only";
|
|
74
|
+
const corners = stackRadiusProps(position, knobProps.borderRadius.borderRadius);
|
|
43
75
|
return (
|
|
44
76
|
<XStack
|
|
45
77
|
role="button"
|
|
@@ -50,18 +82,29 @@ export function SidebarFacetRow({ label, count, active, onPress }: SidebarFacetR
|
|
|
50
82
|
gap="$2"
|
|
51
83
|
paddingVertical="$1.5"
|
|
52
84
|
paddingHorizontal="$2"
|
|
53
|
-
|
|
85
|
+
overflow="hidden"
|
|
86
|
+
{...corners}
|
|
87
|
+
{...{ "data-group-position": position }}
|
|
54
88
|
cursor="pointer"
|
|
55
89
|
backgroundColor={active ? "$color4" : "transparent"}
|
|
56
|
-
hoverStyle={{
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
outlineColor: "$outlineColor",
|
|
60
|
-
outlineWidth: 2,
|
|
61
|
-
outlineStyle: "solid",
|
|
62
|
-
outlineOffset: -2,
|
|
90
|
+
hoverStyle={{
|
|
91
|
+
backgroundColor: active ? "$color5" : "$color3",
|
|
92
|
+
...corners,
|
|
63
93
|
}}
|
|
94
|
+
pressStyle={{ backgroundColor: "$color5", ...corners }}
|
|
95
|
+
tabIndex={0}
|
|
96
|
+
outlineWidth={0}
|
|
97
|
+
focusStyle={{ outlineWidth: 0 }}
|
|
98
|
+
focusVisibleStyle={ensureFocusVisibleRing({ outlineOffset: -2 })}
|
|
64
99
|
onPress={onPress}
|
|
100
|
+
onKeyDown={
|
|
101
|
+
((e: { key?: string; preventDefault?: () => void }) => {
|
|
102
|
+
if (e.key === "Enter" || e.key === " ") {
|
|
103
|
+
e.preventDefault?.();
|
|
104
|
+
onPress();
|
|
105
|
+
}
|
|
106
|
+
}) as unknown as () => void
|
|
107
|
+
}
|
|
65
108
|
>
|
|
66
109
|
<SizableText size="$3" numberOfLines={1} flexShrink={1} fontWeight={active ? "600" : "400"}>
|
|
67
110
|
{label}
|
package/src/oneAdapter/index.tsx
CHANGED
|
@@ -57,7 +57,19 @@ export function useOneNavigator(): BackofficeNavigator {
|
|
|
57
57
|
// URL-state mirror (list `?f=`/`?sort=`): one's setParams merges
|
|
58
58
|
// into the focused route's params and lands as a history REPLACE
|
|
59
59
|
// on web — desk's update_url_with_filters channel, no remount.
|
|
60
|
-
|
|
60
|
+
// Key removal rides one's OWN sentinel: its URL serializer drops
|
|
61
|
+
// params whose value is the literal string "undefined" but prints
|
|
62
|
+
// a real `undefined` into the query (`?sort=undefined`) — so
|
|
63
|
+
// removals are translated to the sentinel before the merge.
|
|
64
|
+
setParams: (nextParams) =>
|
|
65
|
+
routerRef.current.setParams(
|
|
66
|
+
Object.fromEntries(
|
|
67
|
+
Object.entries(nextParams).map(([key, value]) => [
|
|
68
|
+
key,
|
|
69
|
+
value === undefined ? "undefined" : value,
|
|
70
|
+
]),
|
|
71
|
+
) as never,
|
|
72
|
+
),
|
|
61
73
|
},
|
|
62
74
|
{ path: pathname, params },
|
|
63
75
|
),
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
* field (rendered as the synthetic `__newname` Data field).
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
+
import { formatCalendarDate } from "@multiplatform.one/theme";
|
|
17
18
|
import type { DocFieldMeta, DoctypeMeta } from "../shared/useDoctypeMeta";
|
|
18
19
|
import type { FieldSchema, FormSchema } from "@multiplatform.one/frappe-ui";
|
|
19
20
|
|
|
@@ -50,12 +51,7 @@ export function planQuickEntry(meta: DoctypeMeta): QuickEntryPlan {
|
|
|
50
51
|
};
|
|
51
52
|
}
|
|
52
53
|
|
|
53
|
-
|
|
54
|
-
const now = new Date();
|
|
55
|
-
const month = String(now.getMonth() + 1).padStart(2, "0");
|
|
56
|
-
const day = String(now.getDate()).padStart(2, "0");
|
|
57
|
-
return `${now.getFullYear()}-${month}-${day}`;
|
|
58
|
-
}
|
|
54
|
+
const todayISO = () => formatCalendarDate(new Date());
|
|
59
55
|
|
|
60
56
|
/**
|
|
61
57
|
* Seed a draft from simple meta field defaults ("Today" for Date/Datetime,
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
// Desk "report" view parity (audit punch #1). Replaces the old
|
|
2
2
|
// FrappeReportBuilder composition (triple-stacked toolbars, 2-column
|
|
3
3
|
// defaults, no filter row, no saved reports) with:
|
|
4
|
-
// - desk default columns: name + title
|
|
5
|
-
// in_standard_filter fields +
|
|
6
|
-
// set_default_fields parity)
|
|
4
|
+
// - desk default columns: name + status + title/image fields +
|
|
5
|
+
// in_list_view / in_standard_filter fields + currency sources +
|
|
6
|
+
// modified (reportViewModel, desk set_default_fields parity)
|
|
7
7
|
// - a column add/remove picker; the choice persists per doctype on this
|
|
8
8
|
// device (@multiplatform.one/store) while no saved report is selected
|
|
9
9
|
// - a per-column FILTER ROW driving the standard frappe filter pipeline
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* QueryReportScreen filter URL round-trip (fixture — no bench RPC).
|
|
3
|
+
* Apply commits the draft into navigator.setParams(`?filters=`).
|
|
4
|
+
*/
|
|
5
|
+
import { renderWithProviders } from "@multiplatform.one/test-utils";
|
|
6
|
+
import { fireEvent, screen, waitFor } from "@testing-library/react";
|
|
7
|
+
import React from "react";
|
|
8
|
+
import { describe, expect, it } from "vitest";
|
|
9
|
+
import { BackofficeProvider } from "../config/BackofficeProvider";
|
|
10
|
+
import { createMemoryNavigator } from "../navigation/navigator";
|
|
11
|
+
import { QueryReportScreen } from "./QueryReportScreen";
|
|
12
|
+
import type { QueryReportFixture } from "./reportShapes";
|
|
13
|
+
import { parseQueryReportFiltersParam } from "./queryReportUrlState";
|
|
14
|
+
|
|
15
|
+
const MOCK_HOST = "https://backoffice-query-report-filters.mock.test";
|
|
16
|
+
|
|
17
|
+
const gatedFixture: QueryReportFixture = {
|
|
18
|
+
meta: {
|
|
19
|
+
report_name: "Team Workload",
|
|
20
|
+
ref_doctype: "ToDo",
|
|
21
|
+
filters: [{ fieldname: "owner", label: "Owner", fieldtype: "Data", mandatory: 1 }],
|
|
22
|
+
},
|
|
23
|
+
columns: [
|
|
24
|
+
{ label: "ID", fieldname: "id", fieldtype: "Link", options: "ToDo", width: "120" },
|
|
25
|
+
{ label: "Description", fieldname: "description", fieldtype: "Data", width: "260" },
|
|
26
|
+
],
|
|
27
|
+
rows: [{ id: "TD-0001", description: "Confirm launch checklist" }],
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
describe("QueryReportScreen filter URL round-trip", () => {
|
|
31
|
+
it("writes applied filters into ?filters= and renders rows", async () => {
|
|
32
|
+
const navigation = createMemoryNavigator("/backoffice/query-report/Team%20Workload");
|
|
33
|
+
renderWithProviders(
|
|
34
|
+
<BackofficeProvider frappe={{ baseURL: MOCK_HOST }} navigation={navigation}>
|
|
35
|
+
<QueryReportScreen reportName="Team Workload" fixture={gatedFixture} />
|
|
36
|
+
</BackofficeProvider>,
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
await screen.findByText("Filters required");
|
|
40
|
+
const owner = await screen.findByRole("textbox", { name: /owner/i });
|
|
41
|
+
fireEvent.change(owner, { target: { value: "jane@example.com" } });
|
|
42
|
+
fireEvent.click(screen.getByRole("button", { name: "Apply" }));
|
|
43
|
+
|
|
44
|
+
await waitFor(() => {
|
|
45
|
+
expect(screen.queryByText("Filters required")).toBeNull();
|
|
46
|
+
expect(screen.getByText("TD-0001")).toBeTruthy();
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
const raw = navigation.getLocation().params.filters;
|
|
50
|
+
const parsed = parseQueryReportFiltersParam(typeof raw === "string" ? raw : raw?.[0]);
|
|
51
|
+
expect(parsed).toMatchObject({ owner: "jane@example.com" });
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
it("hides the table Search chrome and offers CSV export (Desk query-report)", async () => {
|
|
55
|
+
const navigation = createMemoryNavigator("/backoffice/query-report/Team%20Workload");
|
|
56
|
+
renderWithProviders(
|
|
57
|
+
<BackofficeProvider frappe={{ baseURL: MOCK_HOST }} navigation={navigation}>
|
|
58
|
+
<QueryReportScreen reportName="Team Workload" fixture={gatedFixture} />
|
|
59
|
+
</BackofficeProvider>,
|
|
60
|
+
);
|
|
61
|
+
|
|
62
|
+
const owner = await screen.findByRole("textbox", { name: /owner/i });
|
|
63
|
+
fireEvent.change(owner, { target: { value: "jane@example.com" } });
|
|
64
|
+
fireEvent.click(screen.getByRole("button", { name: "Apply" }));
|
|
65
|
+
|
|
66
|
+
await waitFor(() => {
|
|
67
|
+
expect(screen.getByText("TD-0001")).toBeTruthy();
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
expect(screen.queryByPlaceholderText(/search/i)).toBeNull();
|
|
71
|
+
expect(screen.queryByRole("searchbox")).toBeNull();
|
|
72
|
+
expect(screen.getByRole("button", { name: /export csv/i })).toBeTruthy();
|
|
73
|
+
});
|
|
74
|
+
});
|
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
// Desk /app/query-report/<name> parity surface: report title header +
|
|
2
|
-
// refresh,
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
//
|
|
2
|
+
// refresh, a sticky declared-filter band (queryReportFilterBar — Metabase /
|
|
3
|
+
// Looker / Desk page-form / Linear insights), and the query_report.run
|
|
4
|
+
// result in the catalog DataTable (client-side sort/search/pagination —
|
|
5
|
+
// desk also loads query-report rows in one shot).
|
|
6
|
+
//
|
|
7
|
+
// Filters apply on change for discrete controls (select/link/date/check);
|
|
8
|
+
// text waits for Enter/blur/Apply. Applied values mirror into `?filters=`
|
|
9
|
+
// so reload/deep-link reproduces the run. Mandatory empties gate the run
|
|
10
|
+
// behind an honest empty state; a filtered-empty grid offers Clear all.
|
|
7
11
|
import React from "react";
|
|
8
12
|
import {
|
|
9
13
|
Button,
|
|
@@ -16,18 +20,29 @@ import {
|
|
|
16
20
|
YStack,
|
|
17
21
|
isWeb,
|
|
18
22
|
} from "@multiplatform.one/components";
|
|
19
|
-
import { Input, Select } from "@multiplatform.one/forms";
|
|
20
23
|
import { DataTable, DataTablePagination } from "@multiplatform.one/table";
|
|
21
|
-
import {
|
|
24
|
+
import { downloadBlob } from "@multiplatform.one/platform";
|
|
25
|
+
import { DownloadSimpleIcon } from "@phosphor-icons/react";
|
|
26
|
+
import { useCallback, useEffect, useMemo, useRef } from "react";
|
|
22
27
|
import { useTranslation } from "react-i18next";
|
|
23
|
-
import {
|
|
28
|
+
import {
|
|
29
|
+
useBackofficeLocation,
|
|
30
|
+
useBackofficeNavigator,
|
|
31
|
+
useBackofficePaths,
|
|
32
|
+
} from "../config/BackofficeProvider";
|
|
24
33
|
import { BACKOFFICE_I18N_NAMESPACE } from "../i18n";
|
|
25
|
-
import {
|
|
26
|
-
import {
|
|
34
|
+
import { buildQueryReportColumns, buildQueryReportCsv } from "./queryReportColumns";
|
|
35
|
+
import { QueryReportFilterBar, queryReportFilterLabel } from "./queryReportFilterBar";
|
|
36
|
+
import {
|
|
37
|
+
parseQueryReportFiltersParam,
|
|
38
|
+
serializeQueryReportFiltersParam,
|
|
39
|
+
} from "./queryReportUrlState";
|
|
27
40
|
import {
|
|
28
|
-
|
|
41
|
+
defaultFilterValues,
|
|
42
|
+
isEmptyFilterValue,
|
|
29
43
|
type QueryReportFilters,
|
|
30
44
|
type QueryReportFixture,
|
|
45
|
+
scrubFieldname,
|
|
31
46
|
stripHtml,
|
|
32
47
|
useQueryReport,
|
|
33
48
|
} from "./useQueryReport";
|
|
@@ -37,7 +52,7 @@ export interface QueryReportScreenProps {
|
|
|
37
52
|
reportName: string;
|
|
38
53
|
/** Fixture override for stories/tests (skips bench RPCs). */
|
|
39
54
|
fixture?: QueryReportFixture;
|
|
40
|
-
/**
|
|
55
|
+
/** Filter values applied before the first run (`?filters=` wins when both set). */
|
|
41
56
|
initialFilters?: QueryReportFilters;
|
|
42
57
|
/** Hide result columns by fieldname. */
|
|
43
58
|
hiddenColumns?: readonly string[];
|
|
@@ -47,93 +62,6 @@ export interface QueryReportScreenProps {
|
|
|
47
62
|
|
|
48
63
|
const PAGE_SIZES = [20, 100, 500];
|
|
49
64
|
|
|
50
|
-
function draftFromFilters(
|
|
51
|
-
filterMeta: readonly QueryReportFilterMeta[],
|
|
52
|
-
filters: QueryReportFilters,
|
|
53
|
-
): Record<string, string> {
|
|
54
|
-
const draft: Record<string, string> = {};
|
|
55
|
-
for (const filter of filterMeta) {
|
|
56
|
-
const value = filters[filter.fieldname] ?? filter.default;
|
|
57
|
-
draft[filter.fieldname] = value === undefined || value === null ? "" : String(value);
|
|
58
|
-
}
|
|
59
|
-
return draft;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* Minimal doc-level filter bar: one input per Report Filter row (Select
|
|
64
|
-
* fieldtypes get the options picker, everything else free text) + Apply.
|
|
65
|
-
*/
|
|
66
|
-
function ReportFilterBar({
|
|
67
|
-
filterMeta,
|
|
68
|
-
filters,
|
|
69
|
-
onApply,
|
|
70
|
-
}: {
|
|
71
|
-
filterMeta: readonly QueryReportFilterMeta[];
|
|
72
|
-
filters: QueryReportFilters;
|
|
73
|
-
onApply: (next: QueryReportFilters) => void;
|
|
74
|
-
}) {
|
|
75
|
-
const { t } = useTranslation(BACKOFFICE_I18N_NAMESPACE);
|
|
76
|
-
const [draft, setDraft] = useState<Record<string, string>>(() =>
|
|
77
|
-
draftFromFilters(filterMeta, filters),
|
|
78
|
-
);
|
|
79
|
-
useEffect(() => {
|
|
80
|
-
setDraft(draftFromFilters(filterMeta, filters));
|
|
81
|
-
}, [filterMeta, filters]);
|
|
82
|
-
|
|
83
|
-
const apply = useCallback(() => {
|
|
84
|
-
const next: QueryReportFilters = {};
|
|
85
|
-
for (const [fieldname, value] of Object.entries(draft)) {
|
|
86
|
-
if (value !== "") next[fieldname] = value;
|
|
87
|
-
}
|
|
88
|
-
onApply(next);
|
|
89
|
-
}, [draft, onApply]);
|
|
90
|
-
|
|
91
|
-
return (
|
|
92
|
-
<XStack gap="$2" flexWrap="wrap" alignItems="flex-end">
|
|
93
|
-
{filterMeta.map((filter) => {
|
|
94
|
-
const label = filter.label || filter.fieldname;
|
|
95
|
-
const requiredMark = filter.mandatory === 1 ? " *" : "";
|
|
96
|
-
return (
|
|
97
|
-
<YStack key={filter.fieldname} gap="$1" minWidth={180}>
|
|
98
|
-
<Text fontSize="$2" color="$color10">
|
|
99
|
-
{label}
|
|
100
|
-
{requiredMark}
|
|
101
|
-
</Text>
|
|
102
|
-
{filter.fieldtype === "Select" && filter.options ? (
|
|
103
|
-
<Select
|
|
104
|
-
value={draft[filter.fieldname] ?? ""}
|
|
105
|
-
onChange={(next) => {
|
|
106
|
-
if (typeof next === "string")
|
|
107
|
-
setDraft((previous) => ({ ...previous, [filter.fieldname]: next }));
|
|
108
|
-
}}
|
|
109
|
-
options={selectOptionsFromField(filter.options)}
|
|
110
|
-
placeholder={t("queryReport.selectValue", "Select...")}
|
|
111
|
-
size="$3"
|
|
112
|
-
compact
|
|
113
|
-
aria-label={label}
|
|
114
|
-
/>
|
|
115
|
-
) : (
|
|
116
|
-
<Input
|
|
117
|
-
value={draft[filter.fieldname] ?? ""}
|
|
118
|
-
onChangeText={(next) =>
|
|
119
|
-
setDraft((previous) => ({ ...previous, [filter.fieldname]: next }))
|
|
120
|
-
}
|
|
121
|
-
placeholder={filter.fieldtype === "Date" ? "YYYY-MM-DD" : undefined}
|
|
122
|
-
size="$3"
|
|
123
|
-
compact
|
|
124
|
-
aria-label={label}
|
|
125
|
-
/>
|
|
126
|
-
)}
|
|
127
|
-
</YStack>
|
|
128
|
-
);
|
|
129
|
-
})}
|
|
130
|
-
<Button size="$3" theme="blue" onPress={apply}>
|
|
131
|
-
{t("queryReport.apply", "Apply")}
|
|
132
|
-
</Button>
|
|
133
|
-
</XStack>
|
|
134
|
-
);
|
|
135
|
-
}
|
|
136
|
-
|
|
137
65
|
export function QueryReportScreen({
|
|
138
66
|
reportName,
|
|
139
67
|
fixture,
|
|
@@ -144,7 +72,63 @@ export function QueryReportScreen({
|
|
|
144
72
|
const { t } = useTranslation(BACKOFFICE_I18N_NAMESPACE);
|
|
145
73
|
const navigator = useBackofficeNavigator();
|
|
146
74
|
const paths = useBackofficePaths();
|
|
147
|
-
const
|
|
75
|
+
const { params } = useBackofficeLocation();
|
|
76
|
+
|
|
77
|
+
// `?filters=` deep link (queryReportUrlState.ts): wins over the host's
|
|
78
|
+
// initialFilters prop at mount, mirrors applied changes back out, and
|
|
79
|
+
// inbound changes (back/forward, pasted links) are adopted below.
|
|
80
|
+
const rawFiltersParam =
|
|
81
|
+
typeof params.filters === "string"
|
|
82
|
+
? params.filters
|
|
83
|
+
: Array.isArray(params.filters)
|
|
84
|
+
? params.filters[0]
|
|
85
|
+
: undefined;
|
|
86
|
+
const initialFilterValues = useMemo(() => {
|
|
87
|
+
const fromParam = parseQueryReportFiltersParam(rawFiltersParam);
|
|
88
|
+
if (Object.keys(fromParam).length > 0) return fromParam;
|
|
89
|
+
return initialFilters;
|
|
90
|
+
}, [rawFiltersParam, initialFilters]);
|
|
91
|
+
|
|
92
|
+
const report = useQueryReport(reportName, { fixture, initialFilters: initialFilterValues });
|
|
93
|
+
const { setFilters } = report;
|
|
94
|
+
|
|
95
|
+
// URL round-trip, outbound half (desk update_url_with_filters parity):
|
|
96
|
+
// applied filters mirror into `?filters=` through the navigator's
|
|
97
|
+
// optional setParams — no history entry; hosts without the primitive
|
|
98
|
+
// skip silently and state stays local.
|
|
99
|
+
const applyFilters = useCallback(
|
|
100
|
+
(next: QueryReportFilters) => {
|
|
101
|
+
setFilters(next);
|
|
102
|
+
navigator.setParams?.({ filters: serializeQueryReportFiltersParam(next) });
|
|
103
|
+
},
|
|
104
|
+
[setFilters, navigator],
|
|
105
|
+
);
|
|
106
|
+
|
|
107
|
+
// Inbound half: a changed `?filters=` on the SAME report (back/forward,
|
|
108
|
+
// deep link) adopts into state; param removal restores declared defaults.
|
|
109
|
+
// Report swaps are the hook's job (it reseeds from initialFilters), and
|
|
110
|
+
// echoes of our own outbound writes no-op on the serialized comparison.
|
|
111
|
+
const filtersRef = useRef(report.filters);
|
|
112
|
+
filtersRef.current = report.filters;
|
|
113
|
+
const filterMetaRef = useRef(report.filterMeta);
|
|
114
|
+
filterMetaRef.current = report.filterMeta;
|
|
115
|
+
const lastAdopted = useRef({ report: reportName, param: rawFiltersParam });
|
|
116
|
+
useEffect(() => {
|
|
117
|
+
const last = lastAdopted.current;
|
|
118
|
+
const reportChanged = last.report !== reportName;
|
|
119
|
+
const paramChanged = last.param !== rawFiltersParam;
|
|
120
|
+
lastAdopted.current = { report: reportName, param: rawFiltersParam };
|
|
121
|
+
if (reportChanged || !paramChanged) return;
|
|
122
|
+
const parsed = parseQueryReportFiltersParam(rawFiltersParam);
|
|
123
|
+
const next =
|
|
124
|
+
Object.keys(parsed).length > 0 ? parsed : defaultFilterValues(filterMetaRef.current);
|
|
125
|
+
if (
|
|
126
|
+
serializeQueryReportFiltersParam(next) ===
|
|
127
|
+
serializeQueryReportFiltersParam(filtersRef.current)
|
|
128
|
+
)
|
|
129
|
+
return;
|
|
130
|
+
setFilters(next);
|
|
131
|
+
}, [reportName, rawFiltersParam, setFilters]);
|
|
148
132
|
|
|
149
133
|
const handleOpenLink = useCallback(
|
|
150
134
|
(doctype: string, name: string) => {
|
|
@@ -166,6 +150,28 @@ export function QueryReportScreen({
|
|
|
166
150
|
}, [report.columns, handleOpenLink, hiddenColumns]);
|
|
167
151
|
|
|
168
152
|
const title = report.meta?.report_name || reportName;
|
|
153
|
+
const hasVisibleFilters = report.filterMeta.some(
|
|
154
|
+
(filter) => filter.hidden !== 1 && !isEmptyFilterValue(report.filters[filter.fieldname]),
|
|
155
|
+
);
|
|
156
|
+
const clearVisibleFilters = useCallback(() => {
|
|
157
|
+
const next: QueryReportFilters = {};
|
|
158
|
+
for (const filter of report.filterMeta) {
|
|
159
|
+
if (filter.hidden === 1 && !isEmptyFilterValue(report.filters[filter.fieldname])) {
|
|
160
|
+
next[filter.fieldname] = report.filters[filter.fieldname];
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
applyFilters(next);
|
|
164
|
+
}, [report.filterMeta, report.filters, applyFilters]);
|
|
165
|
+
|
|
166
|
+
const handleExport = useCallback(() => {
|
|
167
|
+
if (!isWeb || report.rows.length === 0) return;
|
|
168
|
+
downloadBlob(
|
|
169
|
+
new Blob([buildQueryReportCsv(report.columns, report.rows)], {
|
|
170
|
+
type: "text/csv;charset=utf-8;",
|
|
171
|
+
}),
|
|
172
|
+
`${scrubFieldname(title)}.csv`,
|
|
173
|
+
);
|
|
174
|
+
}, [report.columns, report.rows, title]);
|
|
169
175
|
|
|
170
176
|
const subtitle = useMemo(() => {
|
|
171
177
|
if (report.loading) return undefined;
|
|
@@ -220,17 +226,19 @@ export function QueryReportScreen({
|
|
|
220
226
|
})}
|
|
221
227
|
description={report.error.message}
|
|
222
228
|
action={
|
|
223
|
-
<Button theme="
|
|
229
|
+
<Button theme="accent" onPress={report.reload}>
|
|
224
230
|
{t("queryReport.retry", "Retry")}
|
|
225
231
|
</Button>
|
|
226
232
|
}
|
|
227
233
|
/>
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
+
{report.scriptFilterGap ? (
|
|
235
|
+
<Text fontSize="$2" color="$color9" textAlign="center" paddingHorizontal="$4">
|
|
236
|
+
{t(
|
|
237
|
+
"queryReport.scriptFiltersHint",
|
|
238
|
+
"Some of this report's filters are declared in desk-side scripts and could not be derived here",
|
|
239
|
+
)}
|
|
240
|
+
</Text>
|
|
241
|
+
) : null}
|
|
234
242
|
</YStack>
|
|
235
243
|
);
|
|
236
244
|
} else if (report.missingRequired.length > 0) {
|
|
@@ -240,7 +248,7 @@ export function QueryReportScreen({
|
|
|
240
248
|
description={t("queryReport.filtersRequiredDescription", {
|
|
241
249
|
defaultValue: "Set the required filter(s) to run this report: {{filters}}",
|
|
242
250
|
filters: report.missingRequired
|
|
243
|
-
.map((filter) => filter
|
|
251
|
+
.map((filter) => queryReportFilterLabel(filter))
|
|
244
252
|
.join(", "),
|
|
245
253
|
})}
|
|
246
254
|
/>
|
|
@@ -249,11 +257,21 @@ export function QueryReportScreen({
|
|
|
249
257
|
body = (
|
|
250
258
|
<EmptyState
|
|
251
259
|
title={t("queryReport.emptyTitle", "No results")}
|
|
252
|
-
description={
|
|
260
|
+
description={
|
|
261
|
+
hasVisibleFilters
|
|
262
|
+
? t("queryReport.emptyFiltered", "No rows match the current filters")
|
|
263
|
+
: t("queryReport.emptyDescription", "The report ran but returned no rows")
|
|
264
|
+
}
|
|
253
265
|
action={
|
|
254
|
-
|
|
255
|
-
{
|
|
256
|
-
|
|
266
|
+
hasVisibleFilters ? (
|
|
267
|
+
<Button chromeless onPress={clearVisibleFilters}>
|
|
268
|
+
{t("queryReport.clearAllFilters", "Clear all filters")}
|
|
269
|
+
</Button>
|
|
270
|
+
) : (
|
|
271
|
+
<Button chromeless onPress={report.reload}>
|
|
272
|
+
{t("queryReport.refresh", "Refresh")}
|
|
273
|
+
</Button>
|
|
274
|
+
)
|
|
257
275
|
}
|
|
258
276
|
/>
|
|
259
277
|
);
|
|
@@ -265,6 +283,7 @@ export function QueryReportScreen({
|
|
|
265
283
|
columns={tableColumns}
|
|
266
284
|
enableSorting
|
|
267
285
|
enableFiltering={false}
|
|
286
|
+
enableGlobalSearch={false}
|
|
268
287
|
enablePagination
|
|
269
288
|
initialState={{ pagination: { pageIndex: 0, pageSize: PAGE_SIZES[0] } }}
|
|
270
289
|
renderPagination={(paginationProps) => (
|
|
@@ -285,6 +304,15 @@ export function QueryReportScreen({
|
|
|
285
304
|
<Button size="$2" chromeless onPress={report.reload} disabled={report.loading}>
|
|
286
305
|
{t("queryReport.refresh", "Refresh")}
|
|
287
306
|
</Button>
|
|
307
|
+
<Button
|
|
308
|
+
size="$2"
|
|
309
|
+
chromeless
|
|
310
|
+
icon={DownloadSimpleIcon}
|
|
311
|
+
onPress={handleExport}
|
|
312
|
+
disabled={report.loading || report.rows.length === 0}
|
|
313
|
+
>
|
|
314
|
+
{t("queryReport.exportCsv", "Export CSV")}
|
|
315
|
+
</Button>
|
|
288
316
|
</XStack>
|
|
289
317
|
}
|
|
290
318
|
/>
|
|
@@ -293,15 +321,25 @@ export function QueryReportScreen({
|
|
|
293
321
|
{stripHtml(report.serverMessage)}
|
|
294
322
|
</Text>
|
|
295
323
|
) : null}
|
|
296
|
-
{
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
{
|
|
324
|
+
<YStack flex={1} minWidth={0} borderWidth={1} borderColor="$borderColor" borderRadius="$4">
|
|
325
|
+
{report.filterMeta.length > 0 ? (
|
|
326
|
+
<QueryReportFilterBar
|
|
327
|
+
filterMeta={report.filterMeta}
|
|
328
|
+
filters={report.filters}
|
|
329
|
+
onApply={applyFilters}
|
|
330
|
+
/>
|
|
331
|
+
) : null}
|
|
332
|
+
{!report.loading && report.scriptFilterGap && !report.error ? (
|
|
333
|
+
<Text fontSize="$2" color="$color9" paddingHorizontal="$3" paddingVertical="$2">
|
|
334
|
+
{t(
|
|
335
|
+
"queryReport.scriptFiltersGap",
|
|
336
|
+
"Some of this report's filters are defined in code and aren't supported here yet",
|
|
337
|
+
)}
|
|
338
|
+
</Text>
|
|
339
|
+
) : null}
|
|
340
|
+
<YStack flex={1} minWidth={0}>
|
|
341
|
+
{body}
|
|
342
|
+
</YStack>
|
|
305
343
|
</YStack>
|
|
306
344
|
</YStack>
|
|
307
345
|
);
|
|
@@ -104,3 +104,20 @@ export function buildQueryReportColumns({
|
|
|
104
104
|
cell: queryReportCell(column, onOpenLink),
|
|
105
105
|
}));
|
|
106
106
|
}
|
|
107
|
+
|
|
108
|
+
function escapeCsvCell(value: unknown): string {
|
|
109
|
+
if (value === null || value === undefined) return "";
|
|
110
|
+
const text = stripHtml(String(value));
|
|
111
|
+
return /[",\n]/.test(text) ? `"${text.replace(/"/g, '""')}"` : text;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/** CSV over the full run result (Desk Export, not just the current page). */
|
|
115
|
+
export function buildQueryReportCsv(
|
|
116
|
+
columns: readonly QueryReportColumn[],
|
|
117
|
+
rows: readonly QueryReportRow[],
|
|
118
|
+
): string {
|
|
119
|
+
return [
|
|
120
|
+
columns.map((column) => escapeCsvCell(column.label)).join(","),
|
|
121
|
+
...rows.map((row) => columns.map((column) => escapeCsvCell(row[column.fieldname])).join(",")),
|
|
122
|
+
].join("\n");
|
|
123
|
+
}
|