@multiplatform.one/backoffice 7.6.3 → 7.7.1
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/chrome/BackofficeAwesomebar.native.js.map +1 -1
- package/dist/esm/chrome/CommandPalette.native.js.map +1 -1
- package/dist/esm/chrome/HelpMenu.native.js.map +1 -1
- package/dist/esm/chrome/NotificationsButton.native.js.map +1 -1
- package/dist/esm/chrome/UserMenu.native.js.map +1 -1
- package/dist/esm/chrome/awesomebar-data.native.js.map +1 -1
- package/dist/esm/chrome/command-palette-model.native.js.map +1 -1
- package/dist/esm/chrome/help-about-dialog.native.js.map +1 -1
- package/dist/esm/chrome/help-shortcuts-dialog.native.js.map +1 -1
- package/dist/esm/chrome/notifications-data.native.js.map +1 -1
- package/dist/esm/chrome/notifications-panel.native.js.map +1 -1
- package/dist/esm/chrome/notifications-utils.native.js.map +1 -1
- package/dist/esm/chrome/shortcuts.native.js.map +1 -1
- package/dist/esm/chrome/user-session.native.js.map +1 -1
- package/dist/esm/config/BackofficeProvider.native.js.map +1 -1
- package/dist/esm/config/capabilities.native.js.map +1 -1
- package/dist/esm/config/events.native.js.map +1 -1
- package/dist/esm/config/slots.native.js.map +1 -1
- package/dist/esm/desk/Desk.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/desk/resolveDeskPath.native.js.map +1 -1
- package/dist/esm/desk/scope.native.js.map +1 -1
- package/dist/esm/desk/target.native.js.map +1 -1
- package/dist/esm/form/DocFormScreen.native.js.map +1 -1
- package/dist/esm/form/FormConnections.native.js.map +1 -1
- package/dist/esm/form/FormDialogs.native.js.map +1 -1
- package/dist/esm/form/FormErrorBoundary.native.js.map +1 -1
- package/dist/esm/form/FormHeaderCluster.native.js.map +1 -1
- package/dist/esm/form/FormSidebarPanel.native.js.map +1 -1
- package/dist/esm/form/FormTimeline.native.js.map +1 -1
- package/dist/esm/form/FormToolbar.native.js.map +1 -1
- package/dist/esm/form/connections-data.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/dependsOn.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/docinfo.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/platformHooks.native.js.map +1 -1
- package/dist/esm/form/sidebar-attachments.native.js.map +1 -1
- package/dist/esm/form/sidebar-dialogs.native.js.map +1 -1
- package/dist/esm/form/sidebar-people.native.js.map +1 -1
- package/dist/esm/form/sidebar-rpc.native.js.map +1 -1
- package/dist/esm/form/sidebar-utils.native.js.map +1 -1
- package/dist/esm/form/timeline-entries.native.js.map +1 -1
- package/dist/esm/form/timeline-utils.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/i18n/en.native.js.map +1 -1
- package/dist/esm/i18n/index.native.js.map +1 -1
- package/dist/esm/index.native.js.map +1 -1
- package/dist/esm/list/AddTagsDialog.native.js.map +1 -1
- package/dist/esm/list/AssignToDialog.native.js.map +1 -1
- package/dist/esm/list/DoctypeListScreen.native.js.map +1 -1
- package/dist/esm/list/ListBulkActionsBar.native.js.map +1 -1
- package/dist/esm/list/ListFilterBar.native.js.map +1 -1
- package/dist/esm/list/ListSidebar.native.js.map +1 -1
- package/dist/esm/list/bulk-edit-dialog.native.js.map +1 -1
- package/dist/esm/list/bulk-export.native.js.map +1 -1
- package/dist/esm/list/bulk-submit-cancel.native.js.map +1 -1
- package/dist/esm/list/bulkActions.native.js.map +1 -1
- package/dist/esm/list/filter-chips.native.js.map +1 -1
- package/dist/esm/list/filter-editor.native.js.map +1 -1
- package/dist/esm/list/filter-fields.native.js.map +1 -1
- package/dist/esm/list/filter-saved.native.js.map +1 -1
- package/dist/esm/list/filter-sort.native.js.map +1 -1
- package/dist/esm/list/filter-standard.native.js.map +1 -1
- package/dist/esm/list/filterConversion.native.js.map +1 -1
- package/dist/esm/list/list-tools-sheet.native.js.map +1 -1
- package/dist/esm/list/listColumns.native.js.map +1 -1
- package/dist/esm/list/listFields.native.js.map +1 -1
- package/dist/esm/list/listFormat.native.js.map +1 -1
- package/dist/esm/list/listUrlState.native.js.map +1 -1
- package/dist/esm/list/sidebar-section.native.js.map +1 -1
- package/dist/esm/list/sidebar-stats.native.js.map +1 -1
- package/dist/esm/list/statusColors.native.js.map +1 -1
- package/dist/esm/navigation/navigator.native.js.map +1 -1
- package/dist/esm/navigation/paths.native.js.map +1 -1
- package/dist/esm/oneAdapter/index.native.js.map +1 -1
- package/dist/esm/quickEntry/QuickEntryDialog.native.js.map +1 -1
- package/dist/esm/quickEntry/quickEntryPlan.native.js.map +1 -1
- package/dist/esm/report/DoctypeReportView.native.js.map +1 -1
- package/dist/esm/report/QueryReportScreen.native.js.map +1 -1
- package/dist/esm/report/queryReportColumns.native.js.map +1 -1
- package/dist/esm/report/queryReportFilterBar.native.js.map +1 -1
- package/dist/esm/report/queryReportUrlState.native.js.map +1 -1
- package/dist/esm/report/report-grid.native.js.map +1 -1
- package/dist/esm/report/report-toolbar.native.js.map +1 -1
- package/dist/esm/report/reportShapes.native.js.map +1 -1
- package/dist/esm/report/reportViewModel.native.js.map +1 -1
- package/dist/esm/report/savedReports.native.js.map +1 -1
- package/dist/esm/report/useQueryReport.native.js.map +1 -1
- package/dist/esm/shared/deskLinks.native.js.map +1 -1
- package/dist/esm/shared/listNavContext.native.js.map +1 -1
- package/dist/esm/shared/types.native.js.map +1 -1
- 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.native.js.map +1 -1
- package/dist/esm/shared/useRecentVisit.native.js.map +1 -1
- package/dist/esm/shared/useSessionUserId.native.js.map +1 -1
- package/dist/esm/shared/useSlugTarget.native.js.map +1 -1
- package/dist/esm/shared/useUserRoles.native.js.map +1 -1
- package/dist/esm/shell/BackofficeShell.native.js.map +1 -1
- package/dist/esm/shell/HomeRedirect.native.js.map +1 -1
- package/dist/esm/shell/NotFoundScreen.native.js.map +1 -1
- package/dist/esm/shell/SlugScreen.native.js.map +1 -1
- package/dist/esm/shell/WorkspaceSidebar.native.js.map +1 -1
- package/dist/esm/shell/useWorkspaces.native.js.map +1 -1
- package/dist/esm/shell/workspaceIcons.native.js.map +1 -1
- package/dist/esm/views/CalendarView.native.js.map +1 -1
- package/dist/esm/views/DashboardView.native.js.map +1 -1
- package/dist/esm/views/DoctypeViewScreen.native.js.map +1 -1
- package/dist/esm/views/ImageView.native.js.map +1 -1
- package/dist/esm/views/KanbanView.native.js.map +1 -1
- package/dist/esm/views/ReportView.native.js.map +1 -1
- package/dist/esm/views/TreeView.native.js.map +1 -1
- package/dist/esm/views/ViewHeader.native.js.map +1 -1
- package/dist/esm/views/ViewStates.native.js.map +1 -1
- package/dist/esm/views/ViewSwitcherMenu.native.js.map +1 -1
- package/dist/esm/views/calendar-field-selector.native.js.map +1 -1
- package/dist/esm/views/connection.native.js.map +1 -1
- package/dist/esm/views/dashboard-data.native.js.map +1 -1
- package/dist/esm/views/deskViewConfigs.native.js.map +1 -1
- package/dist/esm/views/kanban-board-controls.native.js.map +1 -1
- package/dist/esm/views/kanban-field-picker.native.js.map +1 -1
- package/dist/esm/views/kanbanBoardOps.native.js.map +1 -1
- package/dist/esm/views/report-controls.native.js.map +1 -1
- package/dist/esm/views/viewAvailability.native.js.map +1 -1
- package/dist/esm/views/viewMeta.native.js.map +1 -1
- package/dist/esm/workspace/WorkspaceChartBlock.native.js.map +1 -1
- package/dist/esm/workspace/WorkspaceGrid.native.js.map +1 -1
- package/dist/esm/workspace/WorkspaceLinkCard.native.js.map +1 -1
- package/dist/esm/workspace/WorkspaceLinkDirectory.native.js.map +1 -1
- package/dist/esm/workspace/WorkspaceNumberCard.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/WorkspaceScreen.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/esm/workspace/parseContent.native.js.map +1 -1
- package/dist/esm/workspace/types.native.js.map +1 -1
- package/dist/esm/workspace/useDashboardChart.native.js.map +1 -1
- package/dist/esm/workspace/useWorkspaceDoc.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/index.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 +14 -14
- package/src/chrome/CommandPalette.spec.tsx +54 -0
- package/src/chrome/CommandPalette.stories.tsx +207 -0
- package/src/desk/Desk.spec.tsx +44 -0
- package/src/desk/Desk.stories.tsx +299 -0
- package/src/desk/DeskSurface.spec.tsx +160 -0
- package/src/desk/DeskSurface.stories.tsx +297 -0
- 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/shell/NotFoundScreen.spec.tsx +51 -0
- package/src/shell/NotFoundScreen.stories.tsx +79 -0
- package/src/views/DoctypeViewScreen.spec.tsx +110 -0
- package/src/views/DoctypeViewScreen.stories.tsx +279 -0
- 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
|
@@ -1,38 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* frappe/
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* holds. A field at permlevel L then resolves to:
|
|
8
|
-
* - no read at L → hidden ("None")
|
|
9
|
-
* - read, no write → read-only ("Read")
|
|
10
|
-
* - write → editable ("Write", subject to the other rules)
|
|
11
|
-
*
|
|
12
|
-
* Levels that appear on fields but have no granting rows resolve to
|
|
13
|
-
* {read: false} — desk hides those fields (gap-filled `{}` in perm.js:153).
|
|
14
|
-
* When the caller has no role list (fixtures, roles RPC unavailable) the
|
|
15
|
-
* matrix is undefined and formLayout falls back to the conservative
|
|
16
|
-
* "permlevel > 0 → read-only" rule (never hides, never unlocks).
|
|
2
|
+
* Permlevel matrix helpers — moved to
|
|
3
|
+
* `@multiplatform.one/frappe-ui/src/formEngine/fieldPermissions` (MPO-15),
|
|
4
|
+
* because formLayout consumes them and formLayout now lives there.
|
|
5
|
+
* Re-exported here so existing imports keep resolving (the GNOME shim
|
|
6
|
+
* deep-imports this path).
|
|
17
7
|
*/
|
|
18
|
-
|
|
19
|
-
export
|
|
20
|
-
read: boolean;
|
|
21
|
-
write: boolean;
|
|
22
|
-
}
|
|
23
|
-
/** Sparse array indexed by permlevel; missing entries mean "no rights". */
|
|
24
|
-
export type PermLevelMatrix = LevelPerm[];
|
|
25
|
-
export declare function buildPermLevelMatrix(permissions: DocPermissionRule[] | undefined, userRoles: string[] | undefined): PermLevelMatrix | undefined;
|
|
26
|
-
/**
|
|
27
|
-
* Read access at a permlevel. Level 0 is implied by having the doc at all
|
|
28
|
-
* (docinfo/doc-level perms govern it — including share/if_owner grants the
|
|
29
|
-
* role matrix can't see), so only higher levels consult the matrix.
|
|
30
|
-
*/
|
|
31
|
-
export declare function canReadLevel(matrix: PermLevelMatrix | undefined, permlevel: number): boolean;
|
|
32
|
-
/**
|
|
33
|
-
* Write access at a permlevel. Level 0 defers to the doc-level write flag
|
|
34
|
-
* (formReadOnly); higher levels require a granting role row — without a
|
|
35
|
-
* matrix the coarse fallback keeps them read-only (desk-safe direction).
|
|
36
|
-
*/
|
|
37
|
-
export declare function canWriteLevel(matrix: PermLevelMatrix | undefined, permlevel: number): boolean;
|
|
8
|
+
export { buildPermLevelMatrix, canReadLevel, canWriteLevel } from "@multiplatform.one/frappe-ui";
|
|
9
|
+
export type { LevelPerm, PermLevelMatrix } from "@multiplatform.one/frappe-ui";
|
|
38
10
|
//# sourceMappingURL=fieldPermissions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fieldPermissions.d.ts","sourceRoot":"","sources":["../../src/form/fieldPermissions.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"fieldPermissions.d.ts","sourceRoot":"","sources":["../../src/form/fieldPermissions.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AACjG,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC"}
|
|
@@ -1,95 +1,10 @@
|
|
|
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
|
-
|
|
29
|
-
import type { FixtureProvider } from "@multiplatform.one/frappe";
|
|
30
|
-
/**
|
|
31
|
-
* Connection shape shared by every form loader/action — structurally
|
|
32
|
-
* compatible with frappe-ui's FrappeConfig and the frappe package's
|
|
33
|
-
* UseFrappeCollectionConfig (function tokens included).
|
|
34
|
-
*/
|
|
35
|
-
export interface FrappeConnection {
|
|
36
|
-
baseURL: string;
|
|
37
|
-
socketPort?: number;
|
|
38
|
-
/** Same-origin socket override (see FrappeConfig.socketBaseURL). */
|
|
39
|
-
socketBaseURL?: string;
|
|
40
|
-
/** Frappe site name — the realtime Socket.IO namespace. */
|
|
41
|
-
siteName?: string;
|
|
42
|
-
auth?: {
|
|
43
|
-
useToken?: boolean;
|
|
44
|
-
token?: string | (() => string | Promise<string>);
|
|
45
|
-
type?: string;
|
|
46
|
-
};
|
|
47
|
-
syncOptions?: any;
|
|
48
|
-
fixtures?: FixtureProvider;
|
|
49
|
-
}
|
|
50
|
-
export declare function createHttpClient(connection: FrappeConnection): HttpClient;
|
|
51
|
-
export declare function addAssignment(http: HttpClient, doctype: string, name: string, users: string[], description?: string): Promise<unknown>;
|
|
52
|
-
export declare function removeAssignment(http: HttpClient, doctype: string, name: string, user: string): Promise<unknown>;
|
|
53
|
-
export declare function addComment(http: HttpClient, args: {
|
|
54
|
-
doctype: string;
|
|
55
|
-
name: string;
|
|
56
|
-
content: string;
|
|
57
|
-
commentEmail: string;
|
|
58
|
-
commentBy?: string;
|
|
59
|
-
}): Promise<unknown>;
|
|
60
|
-
export declare function addTag(http: HttpClient, doctype: string, name: string, tag: string): Promise<unknown>;
|
|
61
|
-
export declare function removeTag(http: HttpClient, doctype: string, name: string, tag: string): Promise<unknown>;
|
|
62
|
-
export declare function toggleLike(http: HttpClient, doctype: string, name: string, add: boolean): Promise<unknown>;
|
|
63
|
-
export declare function followDocument(http: HttpClient, doctype: string, name: string, user: string): Promise<unknown>;
|
|
64
|
-
export declare function unfollowDocument(http: HttpClient, doctype: string, name: string, user: string): Promise<unknown>;
|
|
65
|
-
/**
|
|
66
|
-
* Rename a document; resolves with the new name. Uses desk's own
|
|
67
|
-
* `update_document_title` (handles title-field sync; the bare
|
|
68
|
-
* `frappe.rename_doc` does not). Pass a `title` argument instead of `name`
|
|
69
|
-
* to retitle without renaming — not needed here yet.
|
|
70
|
-
*/
|
|
71
|
-
export declare function renameDoc(http: HttpClient, doctype: string, oldName: string, newName: string): Promise<string>;
|
|
72
|
-
/** Submit a saved draft (docstatus 0 → 1). Requires the current full doc for OCC. */
|
|
73
|
-
export declare function submitDoc(http: HttpClient, doc: Record<string, unknown>): Promise<Record<string, unknown> | undefined>;
|
|
74
|
-
/** Cancel a submitted doc (docstatus 1 → 2). */
|
|
75
|
-
export declare function cancelDoc(http: HttpClient, doctype: string, name: string): Promise<Record<string, unknown> | undefined>;
|
|
76
|
-
/** Direct REST insert — returns the created doc (with its server-issued name). */
|
|
77
|
-
export declare function insertDoc(http: HttpClient, doctype: string, values: Record<string, unknown>): Promise<Record<string, unknown>>;
|
|
78
|
-
/**
|
|
79
|
-
* Validate a link value and fetch columns off the linked doc in one call —
|
|
80
|
-
* what desk's Link control uses to drive fetch_from previews. Resolves with
|
|
81
|
-
* `{name, <field>: value, ...}`; rejects when the target doc is missing.
|
|
82
|
-
*/
|
|
83
|
-
export declare function validateLink(http: HttpClient, doctype: string, docname: string, fields: string[]): Promise<Record<string, unknown>>;
|
|
84
|
-
export declare function getCount(http: HttpClient, doctype: string, filters: Record<string, unknown>): Promise<number>;
|
|
85
|
-
export declare function getLoggedUser(http: HttpClient): Promise<string>;
|
|
86
|
-
export declare function removeAttachment(http: HttpClient, fileId: string, doctype: string, name: string): Promise<unknown>;
|
|
87
|
-
export declare function uploadAttachment(http: HttpClient, file: File | Blob, doctype: string, name: string): Promise<unknown>;
|
|
88
|
-
export declare function sendEmail(http: HttpClient, args: {
|
|
89
|
-
doctype: string;
|
|
90
|
-
name: string;
|
|
91
|
-
recipients: string;
|
|
92
|
-
subject: string;
|
|
93
|
-
content: string;
|
|
94
|
-
}): Promise<unknown>;
|
|
9
|
+
export * from "@multiplatform.one/frappe-ui/formActions";
|
|
95
10
|
//# sourceMappingURL=formActions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formActions.d.ts","sourceRoot":"","sources":["../../src/form/formActions.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"formActions.d.ts","sourceRoot":"","sources":["../../src/form/formActions.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,cAAc,0CAA0C,CAAC"}
|
|
@@ -1,91 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Desk form layout engine
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
* - mandatory_depends_on → `required: true` on the built FieldSchema
|
|
15
|
-
* - read_only_depends_on → `readOnly: true` on the built FieldSchema
|
|
16
|
-
* - permlevel → hidden without level read, read-only without
|
|
17
|
-
* level write (role matrix via fieldPermissions.ts; coarse read-only
|
|
18
|
-
* fallback when roles are unavailable)
|
|
19
|
-
* - set_only_once → read-only on saved docs
|
|
20
|
-
* - fetch_from → read-only while the source link holds a value
|
|
21
|
-
* (unless fetch_if_empty)
|
|
22
|
-
* - docstatus > 0 → everything read-only except allow_on_submit
|
|
23
|
-
* fields on a submitted (1) doc
|
|
24
|
-
* - collapsible / collapsible_depends_on / missing-mandatory → per-section
|
|
25
|
-
* computed collapse state (desk refresh_section_collapse)
|
|
26
|
-
*
|
|
27
|
-
* Sections whose Section Break has a false depends_on hide wholesale; a
|
|
28
|
-
* section with no visible fields is dropped so SchemaForm never renders an
|
|
29
|
-
* empty card.
|
|
30
|
-
*/
|
|
31
|
-
import type { FormSchema } from "@multiplatform.one/frappe-ui";
|
|
32
|
-
import { type PermLevelMatrix } from "./fieldPermissions";
|
|
33
|
-
import type { DocFieldMeta } from "../shared/useDoctypeMeta";
|
|
34
|
-
export interface FormTab {
|
|
35
|
-
/** Stable key (fieldname of the Tab Break or "__details") */
|
|
36
|
-
key: string;
|
|
37
|
-
label: string;
|
|
38
|
-
schema: FormSchema;
|
|
39
|
-
}
|
|
40
|
-
export interface BuildTabsOptions {
|
|
41
|
-
fields: DocFieldMeta[];
|
|
42
|
-
doc: Record<string, unknown>;
|
|
43
|
-
/** docstatus of the loaded doc (0 draft / 1 submitted / 2 cancelled). */
|
|
44
|
-
docstatus: number;
|
|
45
|
-
/** Meta-level read_only or missing write permission. */
|
|
46
|
-
formReadOnly: boolean;
|
|
47
|
-
/** Create mode relaxes read_only_depends_on on unsaved values. */
|
|
48
|
-
isCreate: boolean;
|
|
49
|
-
/** Default label for the implicit first tab. */
|
|
50
|
-
detailsLabel: string;
|
|
51
|
-
/**
|
|
52
|
-
* Role-derived permlevel matrix (fieldPermissions.ts). Desk semantics:
|
|
53
|
-
* fields at a level without read HIDE; read without write → read-only.
|
|
54
|
-
* Undefined (fixtures / roles unavailable) → coarse fallback: any
|
|
55
|
-
* permlevel > 0 renders read-only, never hidden.
|
|
56
|
-
*/
|
|
57
|
-
permLevels?: PermLevelMatrix;
|
|
58
|
-
/** Host-hidden fields (fieldnames) — dropped before layout resolution. */
|
|
59
|
-
hiddenFields?: readonly string[];
|
|
60
|
-
/**
|
|
61
|
-
* Host-hidden sections/tabs. Matches a Section Break's or Tab Break's
|
|
62
|
-
* fieldname OR label; the whole section (or tab) is dropped.
|
|
63
|
-
*/
|
|
64
|
-
hiddenSections?: readonly string[];
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Build the desk tab list for the current doc state. Recomputed whenever
|
|
68
|
-
* the doc changes so depends_on chains re-resolve; the work is O(fields).
|
|
69
|
-
*/
|
|
70
|
-
export declare function buildFormTabs(options: BuildTabsOptions): FormTab[];
|
|
71
|
-
/**
|
|
72
|
-
* Seed a create-mode doc from meta field defaults — desk parity with
|
|
73
|
-
* create_new.js get_default_value / set_default_values:
|
|
74
|
-
*
|
|
75
|
-
* - `Today` → today's date; `now` → time (Time) / local datetime (else)
|
|
76
|
-
* - `__user` / `user` (Link/Data only, avoiding Select option collisions)
|
|
77
|
-
* → session user
|
|
78
|
-
* - Select fields with no default seed their first option
|
|
79
|
-
* (create_new.js:107-114)
|
|
80
|
-
* - `:fieldname` boot sysdefaults, `frappe.*`, `user_fullname` stay unset —
|
|
81
|
-
* server-resolved on insert (documented gap)
|
|
82
|
-
*/
|
|
83
|
-
export declare function buildCreateDefaults(fields: DocFieldMeta[], currentUser?: string): Record<string, unknown>;
|
|
84
|
-
/**
|
|
85
|
-
* Copyable field values for Duplicate / Amend: strips standard bookkeeping
|
|
86
|
-
* fields, `no_copy` fields, layout breaks, and empty values.
|
|
87
|
-
*/
|
|
88
|
-
export declare function buildCopyValues(fields: DocFieldMeta[], doc: Record<string, unknown>): Record<string, unknown>;
|
|
89
|
-
/** True when the doctype names docs by user prompt (show a name input). */
|
|
90
|
-
export declare function isPromptNamed(autoname?: string, namingRule?: string): boolean;
|
|
2
|
+
* Desk form layout engine — moved to
|
|
3
|
+
* `@multiplatform.one/frappe-ui/src/formEngine/formLayout` (MPO-15).
|
|
4
|
+
*
|
|
5
|
+
* The exported `FrappeForm` needed the same tab / section / depends_on /
|
|
6
|
+
* permlevel / fetch_from resolution the desk uses, and backoffice sits a
|
|
7
|
+
* tier ABOVE frappe-ui, so the engine could not be reached from there. It
|
|
8
|
+
* lives in frappe-ui now. This module re-exports it so the barrel and the
|
|
9
|
+
* `@multiplatform.one/backoffice/src/form/formLayout` deep import keep
|
|
10
|
+
* resolving unchanged; the specs moved with the implementation.
|
|
11
|
+
*/
|
|
12
|
+
export { buildCopyValues, buildCreateDefaults, buildFormTabs, isPromptNamed, } from "@multiplatform.one/frappe-ui";
|
|
13
|
+
export type { BuildTabsOptions, FormTab } from "@multiplatform.one/frappe-ui";
|
|
91
14
|
//# sourceMappingURL=formLayout.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formLayout.d.ts","sourceRoot":"","sources":["../../src/form/formLayout.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"formLayout.d.ts","sourceRoot":"","sources":["../../src/form/formLayout.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,aAAa,EACb,aAAa,GACd,MAAM,8BAA8B,CAAC;AACtC,YAAY,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAC"}
|
|
@@ -1,61 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* -
|
|
5
|
-
* (useFrappeCollection + useLiveQuery) so realtime updates flow in; saves
|
|
6
|
-
* write only dirty fields through the collection's optimistic update path
|
|
7
|
-
* (live update_doc enforces If-Match OCC — a version conflict surfaces as
|
|
8
|
-
* a save error and flips `conflict` so the UI can offer a reload).
|
|
9
|
-
* - Create mode: seeds meta defaults (+ optional Duplicate/Amend prefill)
|
|
10
|
-
* and inserts via direct REST so the server-issued name is returned for
|
|
11
|
-
* router.replace(formPath(...)).
|
|
12
|
-
* - Dirty tracking against the last server baseline; external updates land
|
|
13
|
-
* on clean fields in place, dirty fields are preserved.
|
|
14
|
-
* - Submit / Cancel lifecycle for is_submittable doctypes via
|
|
15
|
-
* frappe.client.submit / frappe.client.cancel (probed) — realtime then
|
|
16
|
-
* refreshes the live doc; Amend is a create-mode copy with amended_from.
|
|
2
|
+
* Desk form state engine — moved to
|
|
3
|
+
* `@multiplatform.one/frappe-ui/src/formEngine/useFormEngine` (MPO-15).
|
|
4
|
+
* Re-exported here so existing imports keep resolving.
|
|
17
5
|
*/
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
export interface FormEngine {
|
|
21
|
-
/** Current (locally edited) doc values. */
|
|
22
|
-
doc: Record<string, unknown>;
|
|
23
|
-
/** Last authoritative server snapshot (undefined in create mode). */
|
|
24
|
-
baseline: Record<string, unknown> | undefined;
|
|
25
|
-
isLoading: boolean;
|
|
26
|
-
/** Edit-mode doc missing after load settles (bad name / no permission). */
|
|
27
|
-
notFound: boolean;
|
|
28
|
-
/** The open doc was deleted on the server while open. */
|
|
29
|
-
wasDeleted: boolean;
|
|
30
|
-
isCreate: boolean;
|
|
31
|
-
isDirty: boolean;
|
|
32
|
-
dirtyFields: string[];
|
|
33
|
-
isSaving: boolean;
|
|
34
|
-
/** Per-field + `general` error messages. */
|
|
35
|
-
errors: Record<string, string>;
|
|
36
|
-
/** True after a save failed with a version conflict (OCC 409). */
|
|
37
|
-
conflict: boolean;
|
|
38
|
-
/** Logged-in user (for comments / likes / assignments). */
|
|
39
|
-
currentUser: string;
|
|
40
|
-
docstatus: number;
|
|
41
|
-
setValue: (field: string, value: unknown) => void;
|
|
42
|
-
/**
|
|
43
|
-
* Save. Create mode resolves with the server-issued doc name;
|
|
44
|
-
* edit mode resolves with the current name. Undefined = validation failed.
|
|
45
|
-
*/
|
|
46
|
-
save: () => Promise<string | undefined>;
|
|
47
|
-
/** Submit lifecycle (is_submittable): docstatus 0 → 1. */
|
|
48
|
-
submit: () => Promise<boolean>;
|
|
49
|
-
/** Cancel lifecycle: docstatus 1 → 2. */
|
|
50
|
-
cancel: () => Promise<boolean>;
|
|
51
|
-
/** Delete the doc through the live collection. */
|
|
52
|
-
remove: () => Promise<boolean>;
|
|
53
|
-
/** Discard local edits / clear conflict, back to the server baseline. */
|
|
54
|
-
reload: () => void;
|
|
55
|
-
/** Client-side required validation (fires on save too). */
|
|
56
|
-
validate: () => Record<string, string>;
|
|
57
|
-
}
|
|
58
|
-
export declare function useFormEngine(connection: FrappeConnection | undefined, doctype: string,
|
|
59
|
-
/** Document name, or undefined for create mode. */
|
|
60
|
-
name: string | undefined, meta: DoctypeMeta | undefined, translate: (key: string, options?: Record<string, unknown>) => string): FormEngine;
|
|
6
|
+
export { useFormEngine } from "@multiplatform.one/frappe-ui";
|
|
7
|
+
export type { FormEngine } from "@multiplatform.one/frappe-ui";
|
|
61
8
|
//# sourceMappingURL=useFormEngine.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFormEngine.d.ts","sourceRoot":"","sources":["../../src/form/useFormEngine.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"useFormEngine.d.ts","sourceRoot":"","sources":["../../src/form/useFormEngine.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,YAAY,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC"}
|
|
@@ -1,103 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
export
|
|
3
|
-
fieldname: string;
|
|
4
|
-
label?: string;
|
|
5
|
-
fieldtype: string;
|
|
6
|
-
options?: string;
|
|
7
|
-
reqd?: 0 | 1;
|
|
8
|
-
hidden?: 0 | 1;
|
|
9
|
-
read_only?: 0 | 1;
|
|
10
|
-
bold?: 0 | 1;
|
|
11
|
-
in_list_view?: 0 | 1;
|
|
12
|
-
in_standard_filter?: 0 | 1;
|
|
13
|
-
in_global_search?: 0 | 1;
|
|
14
|
-
allow_in_quick_entry?: 0 | 1;
|
|
15
|
-
allow_on_submit?: 0 | 1;
|
|
16
|
-
no_copy?: 0 | 1;
|
|
17
|
-
collapsible?: 0 | 1;
|
|
18
|
-
collapsible_depends_on?: string;
|
|
19
|
-
depends_on?: string;
|
|
20
|
-
mandatory_depends_on?: string;
|
|
21
|
-
read_only_depends_on?: string;
|
|
22
|
-
fetch_from?: string;
|
|
23
|
-
permlevel?: number;
|
|
24
|
-
length?: number;
|
|
25
|
-
default?: string;
|
|
26
|
-
description?: string;
|
|
27
|
-
precision?: string | number;
|
|
28
|
-
idx?: number;
|
|
29
|
-
[key: string]: unknown;
|
|
30
|
-
}
|
|
31
|
-
/** DocType Link child row (Connections tab). Probed: `group` arrives null when unset. */
|
|
32
|
-
export interface DocLinkMeta {
|
|
33
|
-
name?: string;
|
|
34
|
-
link_doctype: string;
|
|
35
|
-
link_fieldname: string;
|
|
36
|
-
group?: string | null;
|
|
37
|
-
hidden?: 0 | 1;
|
|
38
|
-
is_child_table?: 0 | 1;
|
|
39
|
-
parent_doctype?: string;
|
|
40
|
-
table_fieldname?: string;
|
|
41
|
-
[key: string]: unknown;
|
|
42
|
-
}
|
|
43
|
-
/** Role permission row from the DocType meta. */
|
|
44
|
-
export interface DocPermissionRule {
|
|
45
|
-
role?: string;
|
|
46
|
-
permlevel?: number;
|
|
47
|
-
read?: 0 | 1;
|
|
48
|
-
write?: 0 | 1;
|
|
49
|
-
create?: 0 | 1;
|
|
50
|
-
delete?: 0 | 1;
|
|
51
|
-
submit?: 0 | 1;
|
|
52
|
-
cancel?: 0 | 1;
|
|
53
|
-
amend?: 0 | 1;
|
|
54
|
-
print?: 0 | 1;
|
|
55
|
-
email?: 0 | 1;
|
|
56
|
-
share?: 0 | 1;
|
|
57
|
-
if_owner?: 0 | 1;
|
|
58
|
-
[key: string]: unknown;
|
|
59
|
-
}
|
|
60
|
-
/** DocType meta as returned by frappe.desk.form.load.getdoctype (loose). */
|
|
61
|
-
export interface DoctypeMeta {
|
|
62
|
-
doctype?: string;
|
|
63
|
-
name: string;
|
|
64
|
-
module?: string;
|
|
65
|
-
issingle?: 0 | 1;
|
|
66
|
-
istable?: 0 | 1;
|
|
67
|
-
is_submittable?: 0 | 1;
|
|
68
|
-
is_tree?: 0 | 1;
|
|
69
|
-
/** Desk treeview_settings asset (`{doctype}_tree.js`) — gates Tree. */
|
|
70
|
-
__tree_js?: string;
|
|
71
|
-
/** Desk calendar_settings asset (`{doctype}_calendar.js`) — gates Calendar. */
|
|
72
|
-
__calendar_js?: string;
|
|
73
|
-
is_virtual?: 0 | 1;
|
|
74
|
-
editable_grid?: 0 | 1;
|
|
75
|
-
track_changes?: 0 | 1;
|
|
76
|
-
quick_entry?: 0 | 1;
|
|
77
|
-
autoname?: string;
|
|
78
|
-
naming_rule?: string;
|
|
79
|
-
allow_rename?: 0 | 1;
|
|
80
|
-
allow_copy?: 0 | 1;
|
|
81
|
-
read_only?: 0 | 1;
|
|
82
|
-
in_create?: 0 | 1;
|
|
83
|
-
hide_toolbar?: 0 | 1;
|
|
84
|
-
max_attachments?: number;
|
|
85
|
-
title_field?: string;
|
|
86
|
-
image_field?: string;
|
|
87
|
-
search_fields?: string;
|
|
88
|
-
sort_field?: string;
|
|
89
|
-
sort_order?: string;
|
|
90
|
-
icon?: string;
|
|
91
|
-
document_type?: string;
|
|
92
|
-
fields: DocFieldMeta[];
|
|
93
|
-
permissions?: DocPermissionRule[];
|
|
94
|
-
links?: DocLinkMeta[];
|
|
95
|
-
states?: Array<{
|
|
96
|
-
title?: string;
|
|
97
|
-
color?: string;
|
|
98
|
-
} & Record<string, unknown>>;
|
|
99
|
-
[key: string]: unknown;
|
|
100
|
-
}
|
|
1
|
+
import type { DoctypeMeta } from "@multiplatform.one/frappe-ui";
|
|
2
|
+
export type { DocFieldMeta, DocLinkMeta, DocPermissionRule, DoctypeMeta, } from "@multiplatform.one/frappe-ui";
|
|
101
3
|
export interface DoctypeMetaBundle {
|
|
102
4
|
/** Parent doctype meta (docs[0]) */
|
|
103
5
|
meta: DoctypeMeta;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDoctypeMeta.d.ts","sourceRoot":"","sources":["../../src/shared/useDoctypeMeta.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useDoctypeMeta.d.ts","sourceRoot":"","sources":["../../src/shared/useDoctypeMeta.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAgB,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAS9E,YAAY,EACV,YAAY,EACZ,WAAW,EACX,iBAAiB,EACjB,WAAW,GACZ,MAAM,8BAA8B,CAAC;AAEtC,MAAM,WAAW,iBAAiB;IAChC,oCAAoC;IACpC,IAAI,EAAE,WAAW,CAAC;IAClB,kEAAkE;IAClE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACxC,mEAAmE;IACnE,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC;AAmCD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG;IAChD,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB,CAgFA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkspaceQuickList.d.ts","sourceRoot":"","sources":["../../src/workspace/WorkspaceQuickList.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"WorkspaceQuickList.d.ts","sourceRoot":"","sources":["../../src/workspace/WorkspaceQuickList.tsx"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAcrD,MAAM,WAAW,uBAAuB;IACtC,GAAG,EAAE,qBAAqB,CAAC;CAC5B;AAED,wBAAgB,kBAAkB,CAAC,EAAE,GAAG,EAAE,EAAE,uBAAuB,2CAwFlE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkspaceRecents.d.ts","sourceRoot":"","sources":["../../src/workspace/WorkspaceRecents.tsx"],"names":[],"mappings":"AAyBA,wBAAgB,gBAAgB,
|
|
1
|
+
{"version":3,"file":"WorkspaceRecents.d.ts","sourceRoot":"","sources":["../../src/workspace/WorkspaceRecents.tsx"],"names":[],"mappings":"AAyBA,wBAAgB,gBAAgB,mDA8E/B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkspaceShortcut.d.ts","sourceRoot":"","sources":["../../src/workspace/WorkspaceShortcut.tsx"],"names":[],"mappings":"AAsCA,OAAO,EAAyB,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAGlF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAcpD;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,oBAAoB,EACzB,KAAK,GAAE,eAA8B,GACpC;IACD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAgBA;AAED,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,oBAAoB,CAAC;IAC1B,mEAAmE;IACnE,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,oBAAoB,KAAK,IAAI,CAAC;CAC/C;AAWD,wBAAgB,iBAAiB,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,sBAAsB,
|
|
1
|
+
{"version":3,"file":"WorkspaceShortcut.d.ts","sourceRoot":"","sources":["../../src/workspace/WorkspaceShortcut.tsx"],"names":[],"mappings":"AAsCA,OAAO,EAAyB,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAGlF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAcpD;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,oBAAoB,EACzB,KAAK,GAAE,eAA8B,GACpC;IACD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAgBA;AAED,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,oBAAoB,CAAC;IAC1B,mEAAmE;IACnE,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,oBAAoB,KAAK,IAAI,CAAC;CAC/C;AAWD,wBAAgB,iBAAiB,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,sBAAsB,kDAoIzE"}
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
// R-1 false "Not Saved": engine-level dirty-tracking contract.
|
|
2
|
-
// An untouched existing doc must read pristine, a real edit must read dirty,
|
|
3
|
-
// create mode must read dirty from applied defaults (desk parity).
|
|
4
|
-
import { describe, expect, it } from "vitest";
|
|
5
|
-
import { computeDirtyFields, isSameValue } from "./dirtyTracking";
|
|
6
|
-
|
|
7
|
-
describe("isSameValue (normalization-insensitive equality)", () => {
|
|
8
|
-
it("treats null / undefined / empty string / empty array as one empty state", () => {
|
|
9
|
-
expect(isSameValue(null, "")).toBe(true);
|
|
10
|
-
expect(isSameValue(undefined, "")).toBe(true);
|
|
11
|
-
expect(isSameValue(null, undefined)).toBe(true);
|
|
12
|
-
expect(isSameValue([], null)).toBe(true);
|
|
13
|
-
expect(isSameValue(" ", "")).toBe(true);
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
it("folds boolean and wire 0/1 representations", () => {
|
|
17
|
-
expect(isSameValue(false, 0)).toBe(true);
|
|
18
|
-
expect(isSameValue(true, 1)).toBe(true);
|
|
19
|
-
expect(isSameValue(0, false)).toBe(true);
|
|
20
|
-
expect(isSameValue(true, 0)).toBe(false);
|
|
21
|
-
expect(isSameValue(false, 1)).toBe(false);
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
it("does not conflate empty with falsy non-empty values", () => {
|
|
25
|
-
expect(isSameValue(0, "")).toBe(false);
|
|
26
|
-
expect(isSameValue(false, "")).toBe(false);
|
|
27
|
-
expect(isSameValue(0, null)).toBe(false);
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
it("stays strict for real values — no deep equality", () => {
|
|
31
|
-
expect(isSameValue("a", "a")).toBe(true);
|
|
32
|
-
expect(isSameValue("a", "b")).toBe(false);
|
|
33
|
-
// Distinct array/object identities read as different even when
|
|
34
|
-
// structurally equal (deliberate: no deep-equality time bombs).
|
|
35
|
-
expect(isSameValue([{ a: 1 }], [{ a: 1 }])).toBe(false);
|
|
36
|
-
// Representation changes of real content are edits (the field layer is
|
|
37
|
-
// responsible for not emitting them during initialization).
|
|
38
|
-
expect(isSameValue("plain", "<p>plain</p>")).toBe(false);
|
|
39
|
-
});
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
describe("computeDirtyFields", () => {
|
|
43
|
-
const baseline = {
|
|
44
|
-
doctype: "ToDo",
|
|
45
|
-
name: "abc",
|
|
46
|
-
description: "hello",
|
|
47
|
-
status: "Open",
|
|
48
|
-
color: null,
|
|
49
|
-
priority: "Medium",
|
|
50
|
-
date: "2026-08-12",
|
|
51
|
-
checked: 0,
|
|
52
|
-
};
|
|
53
|
-
|
|
54
|
-
it("existing doc mount: local === baseline snapshot reads pristine", () => {
|
|
55
|
-
expect(computeDirtyFields({ ...baseline }, baseline)).toEqual([]);
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
it("field re-representation during init does not dirty (null→'' and 0→false)", () => {
|
|
59
|
-
const local = { ...baseline, color: "", checked: false };
|
|
60
|
-
expect(computeDirtyFields(local, baseline)).toEqual([]);
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
it("a real edit reads dirty", () => {
|
|
64
|
-
const local = { ...baseline, description: "hello edited" };
|
|
65
|
-
expect(computeDirtyFields(local, baseline)).toEqual(["description"]);
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
it("revert to the exact baseline value reads clean again", () => {
|
|
69
|
-
// Documented behavior: value equality, not edit history — typing and
|
|
70
|
-
// deleting back to the original string is pristine. An equivalent-but-
|
|
71
|
-
// differently-represented value (e.g. tiptap-normalized HTML) would
|
|
72
|
-
// still read dirty, which matches desk.
|
|
73
|
-
const local = { ...baseline, description: "hello" };
|
|
74
|
-
expect(computeDirtyFields(local, baseline)).toEqual([]);
|
|
75
|
-
});
|
|
76
|
-
|
|
77
|
-
it("bookkeeping keys never dirty", () => {
|
|
78
|
-
const local = { ...baseline, name: "renamed", doctype: "Other" };
|
|
79
|
-
expect(computeDirtyFields(local, baseline)).toEqual([]);
|
|
80
|
-
});
|
|
81
|
-
|
|
82
|
-
it("new doc (no baseline) with applied create-defaults reads dirty — desk parity", () => {
|
|
83
|
-
const local = { doctype: "ToDo", status: "Open", priority: "Medium", description: "" };
|
|
84
|
-
expect(computeDirtyFields(local, undefined)).toEqual(["status", "priority"]);
|
|
85
|
-
});
|
|
86
|
-
|
|
87
|
-
it("new doc with only empty values reads pristine", () => {
|
|
88
|
-
const local = { doctype: "ToDo", description: "", color: null };
|
|
89
|
-
expect(computeDirtyFields(local, undefined)).toEqual([]);
|
|
90
|
-
});
|
|
91
|
-
});
|