@multiplatform.one/backoffice 7.6.2 → 7.7.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.native.js +1 -1
- package/dist/cjs/chrome/BackofficeAwesomebar.native.js.map +1 -1
- package/dist/cjs/chrome/CommandPalette.native.js +1 -1
- package/dist/cjs/chrome/CommandPalette.native.js.map +1 -1
- package/dist/cjs/chrome/HelpMenu.native.js +1 -1
- package/dist/cjs/chrome/HelpMenu.native.js.map +1 -1
- package/dist/cjs/chrome/NotificationsButton.native.js +1 -1
- package/dist/cjs/chrome/NotificationsButton.native.js.map +1 -1
- package/dist/cjs/chrome/UserMenu.native.js +1 -1
- package/dist/cjs/chrome/UserMenu.native.js.map +1 -1
- package/dist/cjs/chrome/awesomebar-data.native.js.map +1 -1
- package/dist/cjs/chrome/command-palette-model.native.js +1 -1
- package/dist/cjs/chrome/command-palette-model.native.js.map +1 -1
- package/dist/cjs/chrome/help-about-dialog.native.js +1 -1
- package/dist/cjs/chrome/help-about-dialog.native.js.map +1 -1
- package/dist/cjs/chrome/help-shortcuts-dialog.native.js +1 -1
- package/dist/cjs/chrome/help-shortcuts-dialog.native.js.map +1 -1
- package/dist/cjs/chrome/notifications-data.native.js.map +1 -1
- package/dist/cjs/chrome/notifications-panel.native.js +1 -1
- package/dist/cjs/chrome/notifications-panel.native.js.map +1 -1
- package/dist/cjs/chrome/notifications-utils.native.js.map +1 -1
- package/dist/cjs/chrome/shortcuts.native.js.map +1 -1
- package/dist/cjs/chrome/user-session.native.js.map +1 -1
- package/dist/cjs/config/BackofficeProvider.native.js +1 -1
- package/dist/cjs/config/BackofficeProvider.native.js.map +1 -1
- package/dist/cjs/config/capabilities.native.js.map +1 -1
- package/dist/cjs/config/events.native.js.map +1 -1
- package/dist/cjs/config/slots.native.js.map +1 -1
- package/dist/cjs/desk/Desk.native.js.map +1 -1
- package/dist/cjs/desk/DeskSurface.native.js.map +1 -1
- package/dist/cjs/desk/resolveDeskPath.native.js.map +1 -1
- package/dist/cjs/desk/scope.native.js.map +1 -1
- package/dist/cjs/desk/target.native.js.map +1 -1
- package/dist/cjs/form/DocFormScreen.native.js +1 -1
- package/dist/cjs/form/DocFormScreen.native.js.map +1 -1
- package/dist/cjs/form/FormConnections.native.js +1 -1
- package/dist/cjs/form/FormConnections.native.js.map +1 -1
- package/dist/cjs/form/FormDialogs.native.js +1 -1
- package/dist/cjs/form/FormDialogs.native.js.map +1 -1
- package/dist/cjs/form/FormErrorBoundary.native.js +1 -1
- package/dist/cjs/form/FormErrorBoundary.native.js.map +1 -1
- package/dist/cjs/form/FormHeaderCluster.native.js +1 -1
- package/dist/cjs/form/FormHeaderCluster.native.js.map +1 -1
- package/dist/cjs/form/FormSidebarPanel.native.js +1 -1
- package/dist/cjs/form/FormSidebarPanel.native.js.map +1 -1
- package/dist/cjs/form/FormTimeline.native.js +1 -1
- package/dist/cjs/form/FormTimeline.native.js.map +1 -1
- package/dist/cjs/form/FormToolbar.native.js +1 -1
- package/dist/cjs/form/FormToolbar.native.js.map +1 -1
- package/dist/cjs/form/connections-data.native.js.map +1 -1
- package/dist/cjs/form/createPrefill.cjs +3 -11
- package/dist/cjs/form/createPrefill.native.js +3 -11
- package/dist/cjs/form/createPrefill.native.js.map +1 -1
- package/dist/cjs/form/dependsOn.native.js.map +1 -1
- package/dist/cjs/form/dirtyTracking.cjs +4 -29
- package/dist/cjs/form/dirtyTracking.native.js +4 -48
- package/dist/cjs/form/dirtyTracking.native.js.map +1 -1
- package/dist/cjs/form/docinfo.native.js.map +1 -1
- package/dist/cjs/form/fetchFrom.cjs +4 -41
- package/dist/cjs/form/fetchFrom.native.js +4 -81
- package/dist/cjs/form/fetchFrom.native.js.map +1 -1
- package/dist/cjs/form/fieldPermissions.cjs +4 -29
- package/dist/cjs/form/fieldPermissions.native.js +4 -51
- package/dist/cjs/form/fieldPermissions.native.js.map +1 -1
- package/dist/cjs/form/formActions.cjs +2 -171
- package/dist/cjs/form/formActions.native.js +2 -178
- package/dist/cjs/form/formActions.native.js.map +1 -1
- package/dist/cjs/form/formLayout.cjs +5 -219
- package/dist/cjs/form/formLayout.native.js +5 -359
- package/dist/cjs/form/formLayout.native.js.map +1 -1
- package/dist/cjs/form/platformHooks.native.js.map +1 -1
- package/dist/cjs/form/sidebar-attachments.native.js +1 -1
- package/dist/cjs/form/sidebar-attachments.native.js.map +1 -1
- package/dist/cjs/form/sidebar-dialogs.native.js +1 -1
- package/dist/cjs/form/sidebar-dialogs.native.js.map +1 -1
- package/dist/cjs/form/sidebar-people.native.js +1 -1
- package/dist/cjs/form/sidebar-people.native.js.map +1 -1
- package/dist/cjs/form/sidebar-rpc.native.js.map +1 -1
- package/dist/cjs/form/sidebar-utils.native.js.map +1 -1
- package/dist/cjs/form/timeline-entries.native.js.map +1 -1
- package/dist/cjs/form/timeline-utils.native.js.map +1 -1
- package/dist/cjs/form/useFormEngine.cjs +2 -361
- package/dist/cjs/form/useFormEngine.native.js +2 -447
- package/dist/cjs/form/useFormEngine.native.js.map +1 -1
- package/dist/cjs/i18n/en.native.js.map +1 -1
- package/dist/cjs/i18n/index.native.js.map +1 -1
- package/dist/cjs/index.native.js +1 -1
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/list/AddTagsDialog.native.js +1 -1
- package/dist/cjs/list/AddTagsDialog.native.js.map +1 -1
- package/dist/cjs/list/AssignToDialog.native.js +1 -1
- package/dist/cjs/list/AssignToDialog.native.js.map +1 -1
- package/dist/cjs/list/DoctypeListScreen.native.js +1 -1
- package/dist/cjs/list/DoctypeListScreen.native.js.map +1 -1
- package/dist/cjs/list/ListBulkActionsBar.native.js +1 -1
- package/dist/cjs/list/ListBulkActionsBar.native.js.map +1 -1
- package/dist/cjs/list/ListFilterBar.native.js +1 -1
- package/dist/cjs/list/ListFilterBar.native.js.map +1 -1
- package/dist/cjs/list/ListSidebar.native.js +1 -1
- package/dist/cjs/list/ListSidebar.native.js.map +1 -1
- package/dist/cjs/list/bulk-edit-dialog.native.js +1 -1
- package/dist/cjs/list/bulk-edit-dialog.native.js.map +1 -1
- package/dist/cjs/list/bulk-export.native.js.map +1 -1
- package/dist/cjs/list/bulk-submit-cancel.native.js.map +1 -1
- package/dist/cjs/list/bulkActions.native.js.map +1 -1
- package/dist/cjs/list/filter-chips.native.js +1 -1
- package/dist/cjs/list/filter-chips.native.js.map +1 -1
- package/dist/cjs/list/filter-editor.native.js +1 -1
- package/dist/cjs/list/filter-editor.native.js.map +1 -1
- package/dist/cjs/list/filter-fields.native.js.map +1 -1
- package/dist/cjs/list/filter-saved.native.js +1 -1
- package/dist/cjs/list/filter-saved.native.js.map +1 -1
- package/dist/cjs/list/filter-sort.native.js +1 -1
- package/dist/cjs/list/filter-sort.native.js.map +1 -1
- package/dist/cjs/list/filter-standard.native.js.map +1 -1
- package/dist/cjs/list/filterConversion.native.js.map +1 -1
- package/dist/cjs/list/list-tools-sheet.native.js +1 -1
- package/dist/cjs/list/list-tools-sheet.native.js.map +1 -1
- package/dist/cjs/list/listColumns.native.js.map +1 -1
- package/dist/cjs/list/listFields.native.js.map +1 -1
- package/dist/cjs/list/listFormat.native.js.map +1 -1
- package/dist/cjs/list/listUrlState.native.js.map +1 -1
- package/dist/cjs/list/sidebar-section.native.js +1 -1
- package/dist/cjs/list/sidebar-section.native.js.map +1 -1
- package/dist/cjs/list/sidebar-stats.native.js.map +1 -1
- package/dist/cjs/list/statusColors.native.js.map +1 -1
- package/dist/cjs/navigation/navigator.native.js.map +1 -1
- package/dist/cjs/navigation/paths.native.js.map +1 -1
- package/dist/cjs/oneAdapter/index.native.js.map +1 -1
- package/dist/cjs/quickEntry/QuickEntryDialog.native.js +1 -1
- package/dist/cjs/quickEntry/QuickEntryDialog.native.js.map +1 -1
- package/dist/cjs/quickEntry/quickEntryPlan.native.js.map +1 -1
- package/dist/cjs/report/DoctypeReportView.native.js +1 -1
- package/dist/cjs/report/DoctypeReportView.native.js.map +1 -1
- package/dist/cjs/report/QueryReportScreen.native.js +1 -1
- package/dist/cjs/report/QueryReportScreen.native.js.map +1 -1
- package/dist/cjs/report/queryReportColumns.native.js.map +1 -1
- package/dist/cjs/report/queryReportFilterBar.native.js +1 -1
- package/dist/cjs/report/queryReportFilterBar.native.js.map +1 -1
- package/dist/cjs/report/queryReportUrlState.native.js.map +1 -1
- package/dist/cjs/report/report-grid.native.js +1 -1
- package/dist/cjs/report/report-grid.native.js.map +1 -1
- package/dist/cjs/report/report-toolbar.native.js +1 -1
- package/dist/cjs/report/report-toolbar.native.js.map +1 -1
- package/dist/cjs/report/reportShapes.native.js.map +1 -1
- package/dist/cjs/report/reportViewModel.native.js.map +1 -1
- package/dist/cjs/report/savedReports.native.js.map +1 -1
- package/dist/cjs/report/useQueryReport.native.js.map +1 -1
- package/dist/cjs/shared/deskLinks.native.js.map +1 -1
- package/dist/cjs/shared/listNavContext.native.js.map +1 -1
- package/dist/cjs/shared/types.native.js.map +1 -1
- 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.native.js.map +1 -1
- package/dist/cjs/shared/useRecentVisit.native.js.map +1 -1
- package/dist/cjs/shared/useSessionUserId.native.js.map +1 -1
- package/dist/cjs/shared/useSlugTarget.native.js.map +1 -1
- package/dist/cjs/shared/useUserRoles.native.js.map +1 -1
- package/dist/cjs/shell/BackofficeShell.native.js +1 -1
- package/dist/cjs/shell/BackofficeShell.native.js.map +1 -1
- package/dist/cjs/shell/HomeRedirect.native.js +1 -1
- package/dist/cjs/shell/HomeRedirect.native.js.map +1 -1
- package/dist/cjs/shell/NotFoundScreen.native.js +1 -1
- package/dist/cjs/shell/NotFoundScreen.native.js.map +1 -1
- package/dist/cjs/shell/SlugScreen.native.js +1 -1
- package/dist/cjs/shell/SlugScreen.native.js.map +1 -1
- package/dist/cjs/shell/WorkspaceSidebar.native.js +1 -1
- package/dist/cjs/shell/WorkspaceSidebar.native.js.map +1 -1
- package/dist/cjs/shell/useWorkspaces.native.js.map +1 -1
- package/dist/cjs/shell/workspaceIcons.native.js.map +1 -1
- package/dist/cjs/views/CalendarView.native.js +1 -1
- package/dist/cjs/views/CalendarView.native.js.map +1 -1
- package/dist/cjs/views/DashboardView.native.js +1 -1
- package/dist/cjs/views/DashboardView.native.js.map +1 -1
- package/dist/cjs/views/DoctypeViewScreen.native.js.map +1 -1
- package/dist/cjs/views/ImageView.native.js +1 -1
- package/dist/cjs/views/ImageView.native.js.map +1 -1
- package/dist/cjs/views/KanbanView.native.js +1 -1
- package/dist/cjs/views/KanbanView.native.js.map +1 -1
- package/dist/cjs/views/ReportView.native.js +1 -1
- package/dist/cjs/views/ReportView.native.js.map +1 -1
- package/dist/cjs/views/TreeView.native.js +1 -1
- package/dist/cjs/views/TreeView.native.js.map +1 -1
- package/dist/cjs/views/ViewHeader.native.js +1 -1
- package/dist/cjs/views/ViewHeader.native.js.map +1 -1
- package/dist/cjs/views/ViewStates.native.js +1 -1
- package/dist/cjs/views/ViewStates.native.js.map +1 -1
- package/dist/cjs/views/ViewSwitcherMenu.native.js +1 -1
- package/dist/cjs/views/ViewSwitcherMenu.native.js.map +1 -1
- package/dist/cjs/views/calendar-field-selector.native.js +1 -1
- package/dist/cjs/views/calendar-field-selector.native.js.map +1 -1
- package/dist/cjs/views/connection.native.js.map +1 -1
- package/dist/cjs/views/dashboard-data.native.js.map +1 -1
- package/dist/cjs/views/deskViewConfigs.native.js.map +1 -1
- package/dist/cjs/views/kanban-board-controls.native.js +1 -1
- package/dist/cjs/views/kanban-board-controls.native.js.map +1 -1
- package/dist/cjs/views/kanban-field-picker.native.js +1 -1
- package/dist/cjs/views/kanban-field-picker.native.js.map +1 -1
- package/dist/cjs/views/kanbanBoardOps.native.js.map +1 -1
- package/dist/cjs/views/report-controls.native.js +1 -1
- package/dist/cjs/views/report-controls.native.js.map +1 -1
- package/dist/cjs/views/viewAvailability.native.js.map +1 -1
- package/dist/cjs/views/viewMeta.native.js.map +1 -1
- package/dist/cjs/workspace/WorkspaceChartBlock.native.js +1 -1
- package/dist/cjs/workspace/WorkspaceChartBlock.native.js.map +1 -1
- package/dist/cjs/workspace/WorkspaceGrid.native.js.map +1 -1
- package/dist/cjs/workspace/WorkspaceLinkCard.native.js +1 -1
- package/dist/cjs/workspace/WorkspaceLinkCard.native.js.map +1 -1
- package/dist/cjs/workspace/WorkspaceLinkDirectory.native.js +1 -1
- package/dist/cjs/workspace/WorkspaceLinkDirectory.native.js.map +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 +1 -1
- package/dist/cjs/workspace/WorkspaceQuickList.native.js +4 -2
- package/dist/cjs/workspace/WorkspaceQuickList.native.js.map +1 -1
- package/dist/cjs/workspace/WorkspaceRecents.cjs +1 -3
- package/dist/cjs/workspace/WorkspaceRecents.native.js +4 -4
- package/dist/cjs/workspace/WorkspaceRecents.native.js.map +1 -1
- package/dist/cjs/workspace/WorkspaceScreen.native.js +1 -1
- package/dist/cjs/workspace/WorkspaceScreen.native.js.map +1 -1
- package/dist/cjs/workspace/WorkspaceShortcut.cjs +1 -3
- package/dist/cjs/workspace/WorkspaceShortcut.native.js +5 -4
- package/dist/cjs/workspace/WorkspaceShortcut.native.js.map +1 -1
- package/dist/cjs/workspace/parseContent.native.js.map +1 -1
- package/dist/cjs/workspace/types.native.js.map +1 -1
- package/dist/cjs/workspace/useDashboardChart.native.js.map +1 -1
- package/dist/cjs/workspace/useWorkspaceDoc.native.js.map +1 -1
- package/dist/esm/desk/DeskSurface.mjs.map +1 -1
- package/dist/esm/desk/DeskSurface.native.js.map +1 -1
- package/dist/esm/form/createPrefill.mjs +1 -9
- package/dist/esm/form/createPrefill.mjs.map +1 -1
- package/dist/esm/form/createPrefill.native.js +1 -9
- package/dist/esm/form/createPrefill.native.js.map +1 -1
- package/dist/esm/form/dirtyTracking.mjs +1 -26
- package/dist/esm/form/dirtyTracking.mjs.map +1 -1
- package/dist/esm/form/dirtyTracking.native.js +1 -45
- package/dist/esm/form/dirtyTracking.native.js.map +1 -1
- package/dist/esm/form/fetchFrom.mjs +1 -38
- package/dist/esm/form/fetchFrom.mjs.map +1 -1
- package/dist/esm/form/fetchFrom.native.js +1 -78
- package/dist/esm/form/fetchFrom.native.js.map +1 -1
- package/dist/esm/form/fieldPermissions.mjs +1 -26
- package/dist/esm/form/fieldPermissions.mjs.map +1 -1
- package/dist/esm/form/fieldPermissions.native.js +1 -48
- package/dist/esm/form/fieldPermissions.native.js.map +1 -1
- package/dist/esm/form/formActions.mjs +1 -145
- package/dist/esm/form/formActions.mjs.map +1 -1
- package/dist/esm/form/formActions.native.js +1 -152
- package/dist/esm/form/formActions.native.js.map +1 -1
- package/dist/esm/form/formLayout.mjs +1 -215
- package/dist/esm/form/formLayout.mjs.map +1 -1
- package/dist/esm/form/formLayout.native.js +1 -355
- package/dist/esm/form/formLayout.native.js.map +1 -1
- package/dist/esm/form/useFormEngine.mjs +1 -360
- package/dist/esm/form/useFormEngine.mjs.map +1 -1
- package/dist/esm/form/useFormEngine.native.js +1 -446
- package/dist/esm/form/useFormEngine.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/workspace/WorkspaceQuickList.mjs +2 -2
- package/dist/esm/workspace/WorkspaceQuickList.mjs.map +1 -1
- package/dist/esm/workspace/WorkspaceQuickList.native.js +4 -2
- package/dist/esm/workspace/WorkspaceQuickList.native.js.map +1 -1
- package/dist/esm/workspace/WorkspaceRecents.mjs +1 -3
- package/dist/esm/workspace/WorkspaceRecents.mjs.map +1 -1
- package/dist/esm/workspace/WorkspaceRecents.native.js +3 -3
- package/dist/esm/workspace/WorkspaceRecents.native.js.map +1 -1
- package/dist/esm/workspace/WorkspaceShortcut.mjs +1 -3
- package/dist/esm/workspace/WorkspaceShortcut.mjs.map +1 -1
- package/dist/esm/workspace/WorkspaceShortcut.native.js +4 -3
- package/dist/esm/workspace/WorkspaceShortcut.native.js.map +1 -1
- package/dist/jsx/desk/DeskSurface.mjs.map +1 -1
- package/dist/jsx/desk/DeskSurface.native.js.map +1 -1
- package/dist/jsx/form/createPrefill.mjs +1 -9
- package/dist/jsx/form/createPrefill.mjs.map +1 -1
- package/dist/jsx/form/createPrefill.native.js +3 -11
- package/dist/jsx/form/createPrefill.native.js.map +1 -1
- package/dist/jsx/form/dirtyTracking.mjs +1 -26
- package/dist/jsx/form/dirtyTracking.mjs.map +1 -1
- package/dist/jsx/form/dirtyTracking.native.js +4 -48
- package/dist/jsx/form/dirtyTracking.native.js.map +1 -1
- package/dist/jsx/form/fetchFrom.mjs +1 -38
- package/dist/jsx/form/fetchFrom.mjs.map +1 -1
- package/dist/jsx/form/fetchFrom.native.js +4 -81
- package/dist/jsx/form/fetchFrom.native.js.map +1 -1
- package/dist/jsx/form/fieldPermissions.mjs +1 -26
- package/dist/jsx/form/fieldPermissions.mjs.map +1 -1
- package/dist/jsx/form/fieldPermissions.native.js +4 -51
- package/dist/jsx/form/fieldPermissions.native.js.map +1 -1
- package/dist/jsx/form/formActions.mjs +1 -145
- package/dist/jsx/form/formActions.mjs.map +1 -1
- package/dist/jsx/form/formActions.native.js +2 -178
- package/dist/jsx/form/formActions.native.js.map +1 -1
- package/dist/jsx/form/formLayout.mjs +1 -215
- package/dist/jsx/form/formLayout.mjs.map +1 -1
- package/dist/jsx/form/formLayout.native.js +5 -359
- package/dist/jsx/form/formLayout.native.js.map +1 -1
- package/dist/jsx/form/useFormEngine.mjs +1 -360
- package/dist/jsx/form/useFormEngine.mjs.map +1 -1
- package/dist/jsx/form/useFormEngine.native.js +2 -447
- package/dist/jsx/form/useFormEngine.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/workspace/WorkspaceQuickList.mjs +2 -2
- package/dist/jsx/workspace/WorkspaceQuickList.mjs.map +1 -1
- package/dist/jsx/workspace/WorkspaceQuickList.native.js +3 -1
- package/dist/jsx/workspace/WorkspaceQuickList.native.js.map +1 -1
- package/dist/jsx/workspace/WorkspaceRecents.mjs +1 -3
- package/dist/jsx/workspace/WorkspaceRecents.mjs.map +1 -1
- package/dist/jsx/workspace/WorkspaceRecents.native.js +3 -3
- package/dist/jsx/workspace/WorkspaceRecents.native.js.map +1 -1
- package/dist/jsx/workspace/WorkspaceShortcut.mjs +1 -3
- package/dist/jsx/workspace/WorkspaceShortcut.mjs.map +1 -1
- package/dist/jsx/workspace/WorkspaceShortcut.native.js +4 -3
- package/dist/jsx/workspace/WorkspaceShortcut.native.js.map +1 -1
- package/package.json +12 -13
- package/src/desk/DeskSurface.tsx +8 -4
- package/src/form/createPrefill.ts +5 -25
- package/src/form/dirtyTracking.ts +4 -61
- package/src/form/fetchFrom.ts +5 -108
- package/src/form/fieldPermissions.ts +7 -65
- package/src/form/formActions.ts +10 -281
- package/src/form/formEngineShim.spec.ts +122 -0
- package/src/form/formLayout.ts +15 -387
- package/src/form/useFormEngine.ts +5 -493
- package/src/shared/useDoctypeMeta.ts +12 -100
- package/src/workspace/WorkspaceQuickList.tsx +10 -2
- package/src/workspace/WorkspaceRecents.tsx +3 -1
- package/src/workspace/WorkspaceShortcut.tsx +4 -1
- package/types/desk/DeskSurface.d.ts.map +1 -1
- package/types/form/createPrefill.d.ts +5 -16
- package/types/form/createPrefill.d.ts.map +1 -1
- package/types/form/dirtyTracking.d.ts +4 -33
- package/types/form/dirtyTracking.d.ts.map +1 -1
- package/types/form/fetchFrom.d.ts +5 -40
- package/types/form/fetchFrom.d.ts.map +1 -1
- package/types/form/fieldPermissions.d.ts +7 -35
- package/types/form/fieldPermissions.d.ts.map +1 -1
- package/types/form/formActions.d.ts +6 -91
- package/types/form/formActions.d.ts.map +1 -1
- package/types/form/formLayout.d.ts +12 -89
- package/types/form/formLayout.d.ts.map +1 -1
- package/types/form/useFormEngine.d.ts +5 -58
- package/types/form/useFormEngine.d.ts.map +1 -1
- package/types/shared/useDoctypeMeta.d.ts +2 -100
- package/types/shared/useDoctypeMeta.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/src/form/dirtyTracking.spec.ts +0 -91
- package/src/form/fetchFrom.spec.ts +0 -92
- package/src/form/fieldPermissions.spec.ts +0 -61
- package/src/form/formLayout.spec.ts +0 -373
package/src/form/formActions.ts
CHANGED
|
@@ -1,285 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Desk
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* Desk RPC helpers — moved to
|
|
3
|
+
* `@multiplatform.one/frappe-ui/src/formEngine/formActions` (MPO-15),
|
|
4
|
+
* because useFormEngine consumes them and the engine now lives there.
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* frappe.desk.form.utils.add_comment {reference_doctype, reference_name, content,
|
|
9
|
-
* comment_email, comment_by}
|
|
10
|
-
* frappe.desk.doctype.tag.tag.add_tag {tag, dt, dn}
|
|
11
|
-
* frappe.desk.doctype.tag.tag.remove_tag{tag, dt, dn}
|
|
12
|
-
* frappe.desk.like.toggle_like {doctype, name, add: "Yes"|"No"}
|
|
13
|
-
* frappe.desk.form.document_follow.follow_document / unfollow_document
|
|
14
|
-
* {doctype, doc_name, user}
|
|
15
|
-
* frappe.model.rename_doc.update_document_title
|
|
16
|
-
* {doctype, docname, name, merge: 0} → new name
|
|
17
|
-
* (what desk calls — syncs the title field too)
|
|
18
|
-
* frappe.client.submit {doc} (full doc incl. modified — OCC enforced)
|
|
19
|
-
* frappe.client.cancel {doctype, name}
|
|
20
|
-
* frappe.client.get_count {doctype, filters}
|
|
21
|
-
* frappe.client.validate_link {doctype, docname, fields: [..]} →
|
|
22
|
-
* {name, <field>: value} (fetch_from preview)
|
|
23
|
-
* frappe.core.doctype.communication.email.make
|
|
24
|
-
* {doctype, name, recipients, subject, content,
|
|
25
|
-
* send_email: 1}
|
|
26
|
-
* frappe.desk.form.utils.remove_attach {fid, dt, dn}
|
|
6
|
+
* Deep-import only on both sides: these utility names collide with the list
|
|
7
|
+
* and shell surfaces, so neither barrel carries them.
|
|
27
8
|
*/
|
|
28
9
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
*
|
|
34
|
-
* compatible with frappe-ui's FrappeConfig and the frappe package's
|
|
35
|
-
* UseFrappeCollectionConfig (function tokens included).
|
|
36
|
-
*/
|
|
37
|
-
export interface FrappeConnection {
|
|
38
|
-
baseURL: string;
|
|
39
|
-
socketPort?: number;
|
|
40
|
-
/** Same-origin socket override (see FrappeConfig.socketBaseURL). */
|
|
41
|
-
socketBaseURL?: string;
|
|
42
|
-
/** Frappe site name — the realtime Socket.IO namespace. */
|
|
43
|
-
siteName?: string;
|
|
44
|
-
auth?: {
|
|
45
|
-
useToken?: boolean;
|
|
46
|
-
token?: string | (() => string | Promise<string>);
|
|
47
|
-
type?: string;
|
|
48
|
-
};
|
|
49
|
-
// biome-ignore lint: matches FrappeConfig.syncOptions
|
|
50
|
-
syncOptions?: any;
|
|
51
|
-
fixtures?: FixtureProvider;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
export function createHttpClient(connection: FrappeConnection): HttpClient {
|
|
55
|
-
const auth: AuthConfig | undefined = connection.auth
|
|
56
|
-
? {
|
|
57
|
-
useToken: connection.auth.useToken,
|
|
58
|
-
token: connection.auth.token,
|
|
59
|
-
type: connection.auth.type as AuthConfig["type"],
|
|
60
|
-
}
|
|
61
|
-
: undefined;
|
|
62
|
-
return new HttpClient(connection.baseURL, auth);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
async function post<T = unknown>(
|
|
66
|
-
http: HttpClient,
|
|
67
|
-
method: string,
|
|
68
|
-
body: Record<string, unknown>,
|
|
69
|
-
): Promise<T | undefined> {
|
|
70
|
-
const response = await http.post<{ message?: T }>(`/api/method/${method}`, body);
|
|
71
|
-
return response.payload?.message;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
// ---------------------------------------------------------------------------
|
|
75
|
-
// Assignments
|
|
76
|
-
// ---------------------------------------------------------------------------
|
|
77
|
-
|
|
78
|
-
export function addAssignment(
|
|
79
|
-
http: HttpClient,
|
|
80
|
-
doctype: string,
|
|
81
|
-
name: string,
|
|
82
|
-
users: string[],
|
|
83
|
-
description?: string,
|
|
84
|
-
) {
|
|
85
|
-
return post(http, "frappe.desk.form.assign_to.add", {
|
|
86
|
-
doctype,
|
|
87
|
-
name,
|
|
88
|
-
assign_to: users,
|
|
89
|
-
description: description || undefined,
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
export function removeAssignment(http: HttpClient, doctype: string, name: string, user: string) {
|
|
94
|
-
return post(http, "frappe.desk.form.assign_to.remove", { doctype, name, assign_to: user });
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
// ---------------------------------------------------------------------------
|
|
98
|
-
// Comments
|
|
99
|
-
// ---------------------------------------------------------------------------
|
|
100
|
-
|
|
101
|
-
export function addComment(
|
|
102
|
-
http: HttpClient,
|
|
103
|
-
args: {
|
|
104
|
-
doctype: string;
|
|
105
|
-
name: string;
|
|
106
|
-
content: string;
|
|
107
|
-
commentEmail: string;
|
|
108
|
-
commentBy?: string;
|
|
109
|
-
},
|
|
110
|
-
) {
|
|
111
|
-
return post(http, "frappe.desk.form.utils.add_comment", {
|
|
112
|
-
reference_doctype: args.doctype,
|
|
113
|
-
reference_name: args.name,
|
|
114
|
-
content: args.content,
|
|
115
|
-
comment_email: args.commentEmail,
|
|
116
|
-
comment_by: args.commentBy ?? args.commentEmail,
|
|
117
|
-
});
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
// ---------------------------------------------------------------------------
|
|
121
|
-
// Tags
|
|
122
|
-
// ---------------------------------------------------------------------------
|
|
123
|
-
|
|
124
|
-
export function addTag(http: HttpClient, doctype: string, name: string, tag: string) {
|
|
125
|
-
return post(http, "frappe.desk.doctype.tag.tag.add_tag", { tag, dt: doctype, dn: name });
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
export function removeTag(http: HttpClient, doctype: string, name: string, tag: string) {
|
|
129
|
-
return post(http, "frappe.desk.doctype.tag.tag.remove_tag", { tag, dt: doctype, dn: name });
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
// ---------------------------------------------------------------------------
|
|
133
|
-
// Like / Follow
|
|
134
|
-
// ---------------------------------------------------------------------------
|
|
135
|
-
|
|
136
|
-
export function toggleLike(http: HttpClient, doctype: string, name: string, add: boolean) {
|
|
137
|
-
return post(http, "frappe.desk.like.toggle_like", {
|
|
138
|
-
doctype,
|
|
139
|
-
name,
|
|
140
|
-
add: add ? "Yes" : "No",
|
|
141
|
-
});
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
export function followDocument(http: HttpClient, doctype: string, name: string, user: string) {
|
|
145
|
-
return post(http, "frappe.desk.form.document_follow.follow_document", {
|
|
146
|
-
doctype,
|
|
147
|
-
doc_name: name,
|
|
148
|
-
user,
|
|
149
|
-
});
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
export function unfollowDocument(http: HttpClient, doctype: string, name: string, user: string) {
|
|
153
|
-
return post(http, "frappe.desk.form.document_follow.unfollow_document", {
|
|
154
|
-
doctype,
|
|
155
|
-
doc_name: name,
|
|
156
|
-
user,
|
|
157
|
-
});
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
// ---------------------------------------------------------------------------
|
|
161
|
-
// Document lifecycle
|
|
162
|
-
// ---------------------------------------------------------------------------
|
|
163
|
-
|
|
164
|
-
/**
|
|
165
|
-
* Rename a document; resolves with the new name. Uses desk's own
|
|
166
|
-
* `update_document_title` (handles title-field sync; the bare
|
|
167
|
-
* `frappe.rename_doc` does not). Pass a `title` argument instead of `name`
|
|
168
|
-
* to retitle without renaming — not needed here yet.
|
|
169
|
-
*/
|
|
170
|
-
export async function renameDoc(
|
|
171
|
-
http: HttpClient,
|
|
172
|
-
doctype: string,
|
|
173
|
-
oldName: string,
|
|
174
|
-
newName: string,
|
|
175
|
-
): Promise<string> {
|
|
176
|
-
const result = await post<string>(http, "frappe.model.rename_doc.update_document_title", {
|
|
177
|
-
doctype,
|
|
178
|
-
docname: oldName,
|
|
179
|
-
name: newName,
|
|
180
|
-
merge: 0,
|
|
181
|
-
});
|
|
182
|
-
return result ?? newName;
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
/** Submit a saved draft (docstatus 0 → 1). Requires the current full doc for OCC. */
|
|
186
|
-
export function submitDoc(http: HttpClient, doc: Record<string, unknown>) {
|
|
187
|
-
return post<Record<string, unknown>>(http, "frappe.client.submit", { doc });
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
/** Cancel a submitted doc (docstatus 1 → 2). */
|
|
191
|
-
export function cancelDoc(http: HttpClient, doctype: string, name: string) {
|
|
192
|
-
return post<Record<string, unknown>>(http, "frappe.client.cancel", { doctype, name });
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
/** Direct REST insert — returns the created doc (with its server-issued name). */
|
|
196
|
-
export async function insertDoc(
|
|
197
|
-
http: HttpClient,
|
|
198
|
-
doctype: string,
|
|
199
|
-
values: Record<string, unknown>,
|
|
200
|
-
): Promise<Record<string, unknown>> {
|
|
201
|
-
const response = await http.post<{ data?: Record<string, unknown> }>(
|
|
202
|
-
`/api/resource/${encodeURIComponent(doctype)}`,
|
|
203
|
-
values,
|
|
204
|
-
);
|
|
205
|
-
const data = response.payload?.data;
|
|
206
|
-
if (!data) throw new Error(`Insert into ${doctype} returned no document`);
|
|
207
|
-
return data;
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
/**
|
|
211
|
-
* Validate a link value and fetch columns off the linked doc in one call —
|
|
212
|
-
* what desk's Link control uses to drive fetch_from previews. Resolves with
|
|
213
|
-
* `{name, <field>: value, ...}`; rejects when the target doc is missing.
|
|
214
|
-
*/
|
|
215
|
-
export async function validateLink(
|
|
216
|
-
http: HttpClient,
|
|
217
|
-
doctype: string,
|
|
218
|
-
docname: string,
|
|
219
|
-
fields: string[],
|
|
220
|
-
): Promise<Record<string, unknown>> {
|
|
221
|
-
const result = await post<Record<string, unknown>>(http, "frappe.client.validate_link", {
|
|
222
|
-
doctype,
|
|
223
|
-
docname,
|
|
224
|
-
fields,
|
|
225
|
-
});
|
|
226
|
-
return result ?? {};
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
// ---------------------------------------------------------------------------
|
|
230
|
-
// Misc
|
|
231
|
-
// ---------------------------------------------------------------------------
|
|
232
|
-
|
|
233
|
-
export async function getCount(
|
|
234
|
-
http: HttpClient,
|
|
235
|
-
doctype: string,
|
|
236
|
-
filters: Record<string, unknown>,
|
|
237
|
-
): Promise<number> {
|
|
238
|
-
const response = await http.get<{ message?: number }>("/api/method/frappe.client.get_count", {
|
|
239
|
-
doctype,
|
|
240
|
-
filters: JSON.stringify(filters),
|
|
241
|
-
});
|
|
242
|
-
return response.payload?.message ?? 0;
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
let cachedUser: string | undefined;
|
|
246
|
-
export async function getLoggedUser(http: HttpClient): Promise<string> {
|
|
247
|
-
if (cachedUser) return cachedUser;
|
|
248
|
-
const response = await http.get<{ message?: string }>("/api/method/frappe.auth.get_logged_user");
|
|
249
|
-
cachedUser = response.payload?.message ?? "Guest";
|
|
250
|
-
return cachedUser;
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
export function removeAttachment(http: HttpClient, fileId: string, doctype: string, name: string) {
|
|
254
|
-
return post(http, "frappe.desk.form.utils.remove_attach", { fid: fileId, dt: doctype, dn: name });
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
export function uploadAttachment(
|
|
258
|
-
http: HttpClient,
|
|
259
|
-
file: File | Blob,
|
|
260
|
-
doctype: string,
|
|
261
|
-
name: string,
|
|
262
|
-
): Promise<unknown> {
|
|
263
|
-
const files = new FileModule(http);
|
|
264
|
-
return files.uploadFile(file, { doctype, docname: name });
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
export function sendEmail(
|
|
268
|
-
http: HttpClient,
|
|
269
|
-
args: {
|
|
270
|
-
doctype: string;
|
|
271
|
-
name: string;
|
|
272
|
-
recipients: string;
|
|
273
|
-
subject: string;
|
|
274
|
-
content: string;
|
|
275
|
-
},
|
|
276
|
-
) {
|
|
277
|
-
return post(http, "frappe.core.doctype.communication.email.make", {
|
|
278
|
-
doctype: args.doctype,
|
|
279
|
-
name: args.name,
|
|
280
|
-
recipients: args.recipients,
|
|
281
|
-
subject: args.subject,
|
|
282
|
-
content: args.content,
|
|
283
|
-
send_email: 1,
|
|
284
|
-
});
|
|
285
|
-
}
|
|
10
|
+
// Dedicated "./formActions" subpath (see frappe-ui package.json exports),
|
|
11
|
+
// following the ./dependsOn precedent: a deep, extension-less
|
|
12
|
+
// "@multiplatform.one/frappe-ui/src/*" import does NOT resolve under the
|
|
13
|
+
// storybook workspace aliases (bare-name alias -> src/index.ts).
|
|
14
|
+
export * from "@multiplatform.one/frappe-ui/formActions";
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MPO-15 — the form-engine seam, from this side.
|
|
3
|
+
*
|
|
4
|
+
* The engine moved down to `@multiplatform.one/frappe-ui`
|
|
5
|
+
* (`src/formEngine/*`). The move must be invisible to anyone importing this
|
|
6
|
+
* package: the barrel keeps the same names, and the
|
|
7
|
+
* `@multiplatform.one/backoffice/src/form/*` deep imports keep resolving
|
|
8
|
+
* (the GNOME shim deep-imports `form/fieldPermissions` and
|
|
9
|
+
* `form/createPrefill`; `DocFormScreen` deep-imports `form/formActions`).
|
|
10
|
+
*
|
|
11
|
+
* Source-level on purpose: importing the backoffice barrel here would drag
|
|
12
|
+
* the whole desk UI into a node-ish spec run to prove a re-export.
|
|
13
|
+
*/
|
|
14
|
+
import fs from "node:fs";
|
|
15
|
+
import path from "node:path";
|
|
16
|
+
import { describe, expect, it } from "vitest";
|
|
17
|
+
|
|
18
|
+
const srcDir = path.resolve(__dirname, "..");
|
|
19
|
+
|
|
20
|
+
function read(rel: string): string {
|
|
21
|
+
return fs.readFileSync(path.resolve(srcDir, rel), "utf-8");
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/** module path (relative to src/) → names it must still hand out. */
|
|
25
|
+
const SHIMS: Record<string, string[]> = {
|
|
26
|
+
"form/formLayout.ts": [
|
|
27
|
+
"buildCopyValues",
|
|
28
|
+
"buildCreateDefaults",
|
|
29
|
+
"buildFormTabs",
|
|
30
|
+
"isPromptNamed",
|
|
31
|
+
"BuildTabsOptions",
|
|
32
|
+
"FormTab",
|
|
33
|
+
],
|
|
34
|
+
"form/useFormEngine.ts": ["useFormEngine", "FormEngine"],
|
|
35
|
+
"form/fieldPermissions.ts": [
|
|
36
|
+
"buildPermLevelMatrix",
|
|
37
|
+
"canReadLevel",
|
|
38
|
+
"canWriteLevel",
|
|
39
|
+
"LevelPerm",
|
|
40
|
+
"PermLevelMatrix",
|
|
41
|
+
],
|
|
42
|
+
"form/fetchFrom.ts": [
|
|
43
|
+
"applyFetchedValues",
|
|
44
|
+
"buildFetchMap",
|
|
45
|
+
"isFetchLocked",
|
|
46
|
+
"FetchMap",
|
|
47
|
+
"FetchRule",
|
|
48
|
+
],
|
|
49
|
+
"form/dirtyTracking.ts": ["computeDirtyFields", "isEmptyValue", "isSameValue"],
|
|
50
|
+
"form/createPrefill.ts": ["setCreatePrefill", "takeCreatePrefill"],
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
describe("form engine shims (MPO-15)", () => {
|
|
54
|
+
it("re-exports every hoisted name from its old path", () => {
|
|
55
|
+
for (const [rel, names] of Object.entries(SHIMS)) {
|
|
56
|
+
const source = read(rel);
|
|
57
|
+
expect(source, `${rel} must source from frappe-ui`).toMatch(
|
|
58
|
+
/from ["']@multiplatform\.one\/frappe-ui["']/,
|
|
59
|
+
);
|
|
60
|
+
for (const name of names) {
|
|
61
|
+
expect(source, `${rel} must still hand out "${name}"`).toContain(name);
|
|
62
|
+
}
|
|
63
|
+
// A shim that grew an implementation back is the drift this guards.
|
|
64
|
+
expect(source, `${rel} is a re-export, not an implementation`).not.toMatch(
|
|
65
|
+
/^(export )?function |^const |^class /m,
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
it("reaches formActions through its dedicated subpath, not src/*", () => {
|
|
71
|
+
// A deep, extension-less "@multiplatform.one/frappe-ui/src/*" import does
|
|
72
|
+
// NOT resolve under the storybook workspace aliases (bare-name alias →
|
|
73
|
+
// src/index.ts) — the same trap ./dependsOn already documents.
|
|
74
|
+
const source = read("form/formActions.ts");
|
|
75
|
+
expect(source).toMatch(/from ["']@multiplatform\.one\/frappe-ui\/formActions["']/);
|
|
76
|
+
expect(source).not.toMatch(/from ["']@multiplatform\.one\/frappe-ui\/src\//);
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
it("stops declaring the meta shapes and re-exports them instead", () => {
|
|
80
|
+
const source = read("shared/useDoctypeMeta.ts");
|
|
81
|
+
for (const name of ["DocFieldMeta", "DocLinkMeta", "DocPermissionRule", "DoctypeMeta"]) {
|
|
82
|
+
expect(source, `${name} must no longer be declared here`).not.toContain(
|
|
83
|
+
`export interface ${name} {`,
|
|
84
|
+
);
|
|
85
|
+
}
|
|
86
|
+
expect(source, "the shapes still leave this module").toMatch(
|
|
87
|
+
/export type \{[\s\S]*DocFieldMeta[\s\S]*\} from "@multiplatform\.one\/frappe-ui"/,
|
|
88
|
+
);
|
|
89
|
+
// The loader hook itself stays — it needs the backoffice app context.
|
|
90
|
+
expect(source).toContain("export function useDoctypeMeta");
|
|
91
|
+
expect(source).toContain("export interface DoctypeMetaBundle");
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
it("keeps the barrel surface unchanged", () => {
|
|
95
|
+
const barrel = read("index.ts");
|
|
96
|
+
const names = [
|
|
97
|
+
"buildPermLevelMatrix",
|
|
98
|
+
"canReadLevel",
|
|
99
|
+
"canWriteLevel",
|
|
100
|
+
"applyFetchedValues",
|
|
101
|
+
"buildFetchMap",
|
|
102
|
+
"isFetchLocked",
|
|
103
|
+
"computeDirtyFields",
|
|
104
|
+
"isEmptyValue",
|
|
105
|
+
"isSameValue",
|
|
106
|
+
"setCreatePrefill",
|
|
107
|
+
"takeCreatePrefill",
|
|
108
|
+
"buildCopyValues",
|
|
109
|
+
"buildCreateDefaults",
|
|
110
|
+
"buildFormTabs",
|
|
111
|
+
"isPromptNamed",
|
|
112
|
+
"useFormEngine",
|
|
113
|
+
"DocFieldMeta",
|
|
114
|
+
"DocLinkMeta",
|
|
115
|
+
"DocPermissionRule",
|
|
116
|
+
"DoctypeMeta",
|
|
117
|
+
];
|
|
118
|
+
for (const name of names) {
|
|
119
|
+
expect(barrel, `the backoffice barrel must still export "${name}"`).toContain(name);
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
});
|