@multiplatform.one/backoffice 7.28.1 → 7.29.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/README.md +1 -1
- package/dist/cjs/desk/DeskSurface.native.js.map +1 -1
- package/dist/cjs/form/DocFormScreen.cjs +167 -224
- package/dist/cjs/form/DocFormScreen.native.js +182 -259
- package/dist/cjs/form/DocFormScreen.native.js.map +1 -1
- package/dist/cjs/i18n/en.cjs +1 -0
- package/dist/cjs/i18n/en.native.js +1 -0
- package/dist/cjs/i18n/en.native.js.map +1 -1
- package/dist/cjs/list/ListBulkActionsBar.cjs +30 -18
- package/dist/cjs/list/ListBulkActionsBar.native.js +43 -31
- package/dist/cjs/list/ListBulkActionsBar.native.js.map +1 -1
- package/dist/cjs/list/sidebar-section.cjs +15 -7
- package/dist/cjs/list/sidebar-section.native.js +16 -7
- package/dist/cjs/list/sidebar-section.native.js.map +1 -1
- package/dist/cjs/report/DoctypeReportView.cjs +20 -374
- package/dist/cjs/report/DoctypeReportView.native.js +23 -455
- package/dist/cjs/report/DoctypeReportView.native.js.map +1 -1
- package/dist/cjs/report/QueryReportScreen.cjs +33 -23
- package/dist/cjs/report/QueryReportScreen.native.js +33 -23
- package/dist/cjs/report/QueryReportScreen.native.js.map +1 -1
- package/dist/cjs/report/queryReportColumns.cjs +3 -105
- package/dist/cjs/report/queryReportColumns.native.js +2 -129
- package/dist/cjs/report/queryReportColumns.native.js.map +1 -1
- package/dist/cjs/report/queryReportFilterBar.cjs +3 -4
- package/dist/cjs/report/queryReportFilterBar.native.js +3 -4
- package/dist/cjs/report/queryReportFilterBar.native.js.map +1 -1
- package/dist/cjs/report/queryReportUrlState.cjs +2 -2
- package/dist/cjs/report/queryReportUrlState.native.js +2 -2
- package/dist/cjs/report/queryReportUrlState.native.js.map +1 -1
- package/dist/cjs/report/report-grid.cjs +2 -426
- package/dist/cjs/report/report-grid.native.js +1 -479
- package/dist/cjs/report/report-grid.native.js.map +1 -1
- package/dist/cjs/report/report-toolbar.cjs +2 -228
- package/dist/cjs/report/report-toolbar.native.js +1 -274
- package/dist/cjs/report/report-toolbar.native.js.map +1 -1
- package/dist/cjs/report/reportShapes.cjs +12 -383
- package/dist/cjs/report/reportShapes.native.js +12 -501
- package/dist/cjs/report/reportShapes.native.js.map +1 -1
- package/dist/cjs/report/reportViewModel.cjs +20 -360
- package/dist/cjs/report/reportViewModel.native.js +19 -627
- package/dist/cjs/report/reportViewModel.native.js.map +1 -1
- package/dist/cjs/report/savedReports.cjs +2 -106
- package/dist/cjs/report/savedReports.native.js +1 -132
- package/dist/cjs/report/savedReports.native.js.map +1 -1
- package/dist/cjs/report/useQueryReport.cjs +11 -219
- package/dist/cjs/report/useQueryReport.native.js +11 -244
- package/dist/cjs/report/useQueryReport.native.js.map +1 -1
- package/dist/cjs/shared/measures.cjs +3 -5
- package/dist/cjs/shared/measures.native.js +3 -5
- package/dist/cjs/shared/measures.native.js.map +1 -1
- package/dist/cjs/views/ReportView.cjs +3 -256
- package/dist/cjs/views/ReportView.native.js +3 -382
- package/dist/cjs/views/ReportView.native.js.map +1 -1
- package/dist/cjs/views/report-controls.cjs +6 -6
- package/dist/cjs/views/report-controls.native.js +6 -6
- package/dist/cjs/views/report-controls.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/DocFormScreen.mjs +169 -226
- package/dist/esm/form/DocFormScreen.mjs.map +1 -1
- package/dist/esm/form/DocFormScreen.native.js +184 -261
- package/dist/esm/form/DocFormScreen.native.js.map +1 -1
- package/dist/esm/i18n/en.mjs +1 -0
- package/dist/esm/i18n/en.mjs.map +1 -1
- package/dist/esm/i18n/en.native.js +1 -0
- package/dist/esm/i18n/en.native.js.map +1 -1
- package/dist/esm/list/ListBulkActionsBar.mjs +31 -19
- package/dist/esm/list/ListBulkActionsBar.mjs.map +1 -1
- package/dist/esm/list/ListBulkActionsBar.native.js +37 -25
- package/dist/esm/list/ListBulkActionsBar.native.js.map +1 -1
- package/dist/esm/list/sidebar-section.mjs +16 -8
- package/dist/esm/list/sidebar-section.mjs.map +1 -1
- package/dist/esm/list/sidebar-section.native.js +17 -8
- package/dist/esm/list/sidebar-section.native.js.map +1 -1
- package/dist/esm/report/DoctypeReportView.mjs +21 -375
- package/dist/esm/report/DoctypeReportView.mjs.map +1 -1
- package/dist/esm/report/DoctypeReportView.native.js +24 -456
- package/dist/esm/report/DoctypeReportView.native.js.map +1 -1
- package/dist/esm/report/QueryReportScreen.mjs +26 -16
- package/dist/esm/report/QueryReportScreen.mjs.map +1 -1
- package/dist/esm/report/QueryReportScreen.native.js +26 -16
- package/dist/esm/report/QueryReportScreen.native.js.map +1 -1
- package/dist/esm/report/queryReportColumns.mjs +1 -103
- package/dist/esm/report/queryReportColumns.mjs.map +1 -1
- package/dist/esm/report/queryReportColumns.native.js +1 -117
- package/dist/esm/report/queryReportColumns.native.js.map +1 -1
- package/dist/esm/report/queryReportFilterBar.mjs +1 -2
- package/dist/esm/report/queryReportFilterBar.mjs.map +1 -1
- package/dist/esm/report/queryReportFilterBar.native.js +1 -2
- package/dist/esm/report/queryReportFilterBar.native.js.map +1 -1
- package/dist/esm/report/queryReportUrlState.mjs +1 -1
- package/dist/esm/report/queryReportUrlState.native.js +1 -1
- package/dist/esm/report/report-grid.mjs +1 -425
- package/dist/esm/report/report-grid.mjs.map +1 -1
- package/dist/esm/report/report-grid.native.js +1 -468
- package/dist/esm/report/report-grid.native.js.map +1 -1
- package/dist/esm/report/report-toolbar.mjs +2 -228
- package/dist/esm/report/report-toolbar.mjs.map +1 -1
- package/dist/esm/report/report-toolbar.native.js +2 -264
- package/dist/esm/report/report-toolbar.native.js.map +1 -1
- package/dist/esm/report/reportShapes.mjs +2 -373
- package/dist/esm/report/reportShapes.mjs.map +1 -1
- package/dist/esm/report/reportShapes.native.js +2 -491
- package/dist/esm/report/reportShapes.native.js.map +1 -1
- package/dist/esm/report/reportViewModel.mjs +2 -342
- package/dist/esm/report/reportViewModel.mjs.map +1 -1
- package/dist/esm/report/reportViewModel.native.js +2 -610
- package/dist/esm/report/reportViewModel.native.js.map +1 -1
- package/dist/esm/report/savedReports.mjs +1 -105
- package/dist/esm/report/savedReports.mjs.map +1 -1
- package/dist/esm/report/savedReports.native.js +1 -132
- package/dist/esm/report/savedReports.native.js.map +1 -1
- package/dist/esm/report/useQueryReport.mjs +2 -210
- package/dist/esm/report/useQueryReport.mjs.map +1 -1
- package/dist/esm/report/useQueryReport.native.js +2 -235
- package/dist/esm/report/useQueryReport.native.js.map +1 -1
- package/dist/esm/shared/measures.mjs +1 -3
- package/dist/esm/shared/measures.mjs.map +1 -1
- package/dist/esm/shared/measures.native.js +1 -3
- package/dist/esm/shared/measures.native.js.map +1 -1
- package/dist/esm/views/ReportView.mjs +3 -256
- package/dist/esm/views/ReportView.mjs.map +1 -1
- package/dist/esm/views/ReportView.native.js +3 -382
- package/dist/esm/views/ReportView.native.js.map +1 -1
- package/dist/esm/views/report-controls.mjs +3 -3
- package/dist/esm/views/report-controls.mjs.map +1 -1
- package/dist/esm/views/report-controls.native.js +3 -3
- package/dist/esm/views/report-controls.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/DocFormScreen.mjs +169 -226
- package/dist/jsx/form/DocFormScreen.mjs.map +1 -1
- package/dist/jsx/form/DocFormScreen.native.js +182 -259
- package/dist/jsx/form/DocFormScreen.native.js.map +1 -1
- package/dist/jsx/i18n/en.mjs +1 -0
- package/dist/jsx/i18n/en.mjs.map +1 -1
- package/dist/jsx/i18n/en.native.js +1 -0
- package/dist/jsx/i18n/en.native.js.map +1 -1
- package/dist/jsx/list/ListBulkActionsBar.mjs +31 -19
- package/dist/jsx/list/ListBulkActionsBar.mjs.map +1 -1
- package/dist/jsx/list/ListBulkActionsBar.native.js +43 -31
- package/dist/jsx/list/ListBulkActionsBar.native.js.map +1 -1
- package/dist/jsx/list/sidebar-section.mjs +16 -8
- package/dist/jsx/list/sidebar-section.mjs.map +1 -1
- package/dist/jsx/list/sidebar-section.native.js +16 -7
- package/dist/jsx/list/sidebar-section.native.js.map +1 -1
- package/dist/jsx/report/DoctypeReportView.mjs +21 -375
- package/dist/jsx/report/DoctypeReportView.mjs.map +1 -1
- package/dist/jsx/report/DoctypeReportView.native.js +23 -455
- package/dist/jsx/report/DoctypeReportView.native.js.map +1 -1
- package/dist/jsx/report/QueryReportScreen.mjs +26 -16
- package/dist/jsx/report/QueryReportScreen.mjs.map +1 -1
- package/dist/jsx/report/QueryReportScreen.native.js +33 -23
- package/dist/jsx/report/QueryReportScreen.native.js.map +1 -1
- package/dist/jsx/report/queryReportColumns.mjs +1 -103
- package/dist/jsx/report/queryReportColumns.mjs.map +1 -1
- package/dist/jsx/report/queryReportColumns.native.js +2 -129
- package/dist/jsx/report/queryReportColumns.native.js.map +1 -1
- package/dist/jsx/report/queryReportFilterBar.mjs +1 -2
- package/dist/jsx/report/queryReportFilterBar.mjs.map +1 -1
- package/dist/jsx/report/queryReportFilterBar.native.js +3 -4
- package/dist/jsx/report/queryReportFilterBar.native.js.map +1 -1
- package/dist/jsx/report/queryReportUrlState.mjs +1 -1
- package/dist/jsx/report/queryReportUrlState.native.js +2 -2
- package/dist/jsx/report/queryReportUrlState.native.js.map +1 -1
- package/dist/jsx/report/report-grid.mjs +1 -425
- package/dist/jsx/report/report-grid.mjs.map +1 -1
- package/dist/jsx/report/report-grid.native.js +1 -479
- package/dist/jsx/report/report-grid.native.js.map +1 -1
- package/dist/jsx/report/report-toolbar.mjs +2 -228
- package/dist/jsx/report/report-toolbar.mjs.map +1 -1
- package/dist/jsx/report/report-toolbar.native.js +1 -274
- package/dist/jsx/report/report-toolbar.native.js.map +1 -1
- package/dist/jsx/report/reportShapes.mjs +2 -373
- package/dist/jsx/report/reportShapes.mjs.map +1 -1
- package/dist/jsx/report/reportShapes.native.js +12 -501
- package/dist/jsx/report/reportShapes.native.js.map +1 -1
- package/dist/jsx/report/reportViewModel.mjs +2 -342
- package/dist/jsx/report/reportViewModel.mjs.map +1 -1
- package/dist/jsx/report/reportViewModel.native.js +19 -627
- package/dist/jsx/report/reportViewModel.native.js.map +1 -1
- package/dist/jsx/report/savedReports.mjs +1 -105
- package/dist/jsx/report/savedReports.mjs.map +1 -1
- package/dist/jsx/report/savedReports.native.js +1 -132
- package/dist/jsx/report/savedReports.native.js.map +1 -1
- package/dist/jsx/report/useQueryReport.mjs +2 -210
- package/dist/jsx/report/useQueryReport.mjs.map +1 -1
- package/dist/jsx/report/useQueryReport.native.js +11 -244
- package/dist/jsx/report/useQueryReport.native.js.map +1 -1
- package/dist/jsx/shared/measures.mjs +1 -3
- package/dist/jsx/shared/measures.mjs.map +1 -1
- package/dist/jsx/shared/measures.native.js +3 -5
- package/dist/jsx/shared/measures.native.js.map +1 -1
- package/dist/jsx/views/ReportView.mjs +3 -256
- package/dist/jsx/views/ReportView.mjs.map +1 -1
- package/dist/jsx/views/ReportView.native.js +3 -382
- package/dist/jsx/views/ReportView.native.js.map +1 -1
- package/dist/jsx/views/report-controls.mjs +3 -3
- package/dist/jsx/views/report-controls.mjs.map +1 -1
- package/dist/jsx/views/report-controls.native.js +6 -6
- package/dist/jsx/views/report-controls.native.js.map +1 -1
- package/package.json +12 -12
- package/src/backofficeScreens.designLaw.spec.ts +0 -5
- package/src/desk/DeskSurface.tsx +4 -7
- package/src/form/DocFormScreen.chrome.spec.ts +77 -0
- package/src/form/DocFormScreen.guest.screen.spec.tsx +175 -0
- package/src/form/DocFormScreen.rights.spec.tsx +7 -3
- package/src/form/DocFormScreen.tsx +214 -315
- package/src/i18n/en.ts +1 -0
- package/src/list/ListBulkActionsBar.rights.spec.tsx +134 -0
- package/src/list/ListBulkActionsBar.screen.spec.tsx +7 -1
- package/src/list/ListBulkActionsBar.tsx +76 -57
- package/src/list/ListFilterBar.screen.spec.tsx +14 -13
- package/src/list/sidebar-section.tsx +11 -3
- package/src/report/DoctypeReportView.tsx +28 -550
- package/src/report/QueryReportScreen.spec.tsx +75 -1
- package/src/report/QueryReportScreen.tsx +38 -22
- package/src/report/queryReportColumns.tsx +4 -123
- package/src/report/queryReportFilterBar.tsx +3 -5
- package/src/report/queryReportUrlState.ts +1 -1
- package/src/report/report-grid.tsx +4 -529
- package/src/report/report-toolbar.tsx +4 -308
- package/src/report/reportShapes.ts +25 -613
- package/src/report/reportShim.spec.ts +162 -0
- package/src/report/reportViewModel.ts +32 -605
- package/src/report/savedReports.ts +4 -161
- package/src/report/useQueryReport.ts +9 -347
- package/src/shared/measures.ts +3 -11
- package/src/views/ReportView.screen.spec.tsx +25 -20
- package/src/views/ReportView.tsx +7 -439
- package/src/views/report-controls.tsx +12 -20
- package/types/desk/DeskSurface.d.ts.map +1 -1
- package/types/form/DocFormScreen.d.ts +2 -2
- package/types/form/DocFormScreen.d.ts.map +1 -1
- package/types/i18n/en.d.ts +1 -0
- package/types/i18n/en.d.ts.map +1 -1
- package/types/list/ListBulkActionsBar.d.ts.map +1 -1
- package/types/list/sidebar-section.d.ts.map +1 -1
- package/types/report/DoctypeReportView.d.ts.map +1 -1
- package/types/report/QueryReportScreen.d.ts +1 -1
- package/types/report/QueryReportScreen.d.ts.map +1 -1
- package/types/report/queryReportColumns.d.ts +2 -11
- package/types/report/queryReportColumns.d.ts.map +1 -1
- package/types/report/queryReportFilterBar.d.ts +1 -1
- package/types/report/queryReportFilterBar.d.ts.map +1 -1
- package/types/report/queryReportUrlState.d.ts +1 -1
- package/types/report/queryReportUrlState.d.ts.map +1 -1
- package/types/report/report-grid.d.ts +2 -19
- package/types/report/report-grid.d.ts.map +1 -1
- package/types/report/report-toolbar.d.ts +2 -29
- package/types/report/report-toolbar.d.ts.map +1 -1
- package/types/report/reportShapes.d.ts +2 -115
- package/types/report/reportShapes.d.ts.map +1 -1
- package/types/report/reportViewModel.d.ts +2 -135
- package/types/report/reportViewModel.d.ts.map +1 -1
- package/types/report/savedReports.d.ts +2 -18
- package/types/report/savedReports.d.ts.map +1 -1
- package/types/report/useQueryReport.d.ts +2 -35
- package/types/report/useQueryReport.d.ts.map +1 -1
- package/types/shared/measures.d.ts +1 -2
- package/types/shared/measures.d.ts.map +1 -1
- package/types/views/ReportView.d.ts +3 -22
- package/types/views/ReportView.d.ts.map +1 -1
- package/types/views/report-controls.d.ts +2 -5
- package/types/views/report-controls.d.ts.map +1 -1
- package/src/report/report-grid.spec.tsx +0 -175
- package/src/report/report-toolbar.spec.tsx +0 -90
- package/src/report/reportShapes.spec.ts +0 -391
- package/src/report/reportViewModel.spec.ts +0 -393
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import React from "react";
|
|
3
|
-
import { AsyncSkeleton, Button, ConfirmDialog, EmptyState, ScrollView,
|
|
4
|
-
import {
|
|
5
|
-
import { SchemaForm, sessionDocRights, useFrappeConfig } from "@multiplatform.one/frappe-ui";
|
|
3
|
+
import { AsyncBoundary, AsyncSkeleton, Button, ConfirmDialog, EmptyState, ScrollView, Text, XStack, YStack, notify } from "@multiplatform.one/components";
|
|
4
|
+
import { FrappeForm, docinfoRights, fixtureDocRights, isPermissionError, refusalReason, useFrappeConfig, useFrappeForm } from "@multiplatform.one/frappe-ui";
|
|
6
5
|
import { useLayoutSizeClass, useResolvedKnobs } from "@multiplatform.one/theme";
|
|
7
6
|
import { ListBulletsIcon } from "@phosphor-icons/react";
|
|
8
7
|
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
@@ -14,14 +13,11 @@ import { getListNavNeighbors } from "../shared/listNavContext.native.js";
|
|
|
14
13
|
import { invalidateDocinfo, useDocinfo } from "../shared/useDocinfo.native.js";
|
|
15
14
|
import { useRecentVisit } from "../shared/useRecentVisit.native.js";
|
|
16
15
|
import { useDoctypeMeta } from "../shared/useDoctypeMeta.native.js";
|
|
17
|
-
import {
|
|
16
|
+
import { groupConnectionLinks } from "./connections-data.native.js";
|
|
18
17
|
import { setCreatePrefill } from "./createPrefill.native.js";
|
|
19
|
-
import { normalizeDocPermissions } from "./docinfo.native.js";
|
|
20
|
-
import { buildPermLevelMatrix } from "./fieldPermissions.native.js";
|
|
21
18
|
import { createHttpClient, renameDoc, sendEmail } from "./formActions.native.js";
|
|
22
19
|
import { EmailDialog, JumpToFieldDialog, RenameDialog } from "./FormDialogs.native.js";
|
|
23
20
|
import { FormErrorBoundary, wrapFieldWithErrorBoundary } from "./FormErrorBoundary.native.js";
|
|
24
|
-
import { buildCopyValues, buildFormTabs, isPromptNamed } from "./formLayout.native.js";
|
|
25
21
|
import { FormConnections } from "./FormConnections.native.js";
|
|
26
22
|
import { FormHeaderCluster } from "./FormHeaderCluster.native.js";
|
|
27
23
|
import { FormSidebarPanel } from "./FormSidebarPanel.native.js";
|
|
@@ -29,7 +25,6 @@ import { FormTimeline } from "./FormTimeline.native.js";
|
|
|
29
25
|
import { FormToolbar, resolveIndicator } from "./FormToolbar.native.js";
|
|
30
26
|
import { htmlToText } from "./timeline-utils.native.js";
|
|
31
27
|
import { canOpenNewTab, openInNewTab, useBeforeUnloadGuard, useDocPagerShortcuts, useJumpToFieldShortcut, useNavigationDirtyGuard, useSaveShortcut } from "./platformHooks.native.js";
|
|
32
|
-
import { useFormEngine } from "./useFormEngine.native.js";
|
|
33
28
|
var CONNECTIONS_TAB = "__connections";
|
|
34
29
|
function DocFormScreen(param) {
|
|
35
30
|
var {
|
|
@@ -43,8 +38,8 @@ function DocFormScreen(param) {
|
|
|
43
38
|
onDeleted,
|
|
44
39
|
actionOverrides
|
|
45
40
|
} = param;
|
|
46
|
-
var
|
|
47
|
-
var
|
|
41
|
+
var _form_user;
|
|
42
|
+
var _form_baseline;
|
|
48
43
|
var {
|
|
49
44
|
t
|
|
50
45
|
} = useTranslation(BACKOFFICE_I18N_NAMESPACE);
|
|
@@ -80,31 +75,20 @@ function DocFormScreen(param) {
|
|
|
80
75
|
name
|
|
81
76
|
});
|
|
82
77
|
}, [isCreate, doctype, name, emitEvent]);
|
|
83
|
-
var connection = useMemo(function () {
|
|
84
|
-
return (config === null || config === void 0 ? void 0 : config.baseURL) ? {
|
|
85
|
-
baseURL: config.baseURL,
|
|
86
|
-
socketPort: config.socketPort,
|
|
87
|
-
siteName: config.siteName,
|
|
88
|
-
socketBaseURL: config.socketBaseURL,
|
|
89
|
-
auth: config.auth,
|
|
90
|
-
syncOptions: config.syncOptions,
|
|
91
|
-
fixtures: config.fixtures
|
|
92
|
-
} : void 0;
|
|
93
|
-
}, [config]);
|
|
94
78
|
var {
|
|
95
79
|
meta,
|
|
96
80
|
loading: isMetaLoading,
|
|
97
81
|
error: metaError,
|
|
98
82
|
reload: refetchMeta
|
|
99
83
|
} = useDoctypeMeta(doctype);
|
|
100
|
-
var
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
error: metaError
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
84
|
+
var metaSource = useMemo(function () {
|
|
85
|
+
return {
|
|
86
|
+
meta,
|
|
87
|
+
isLoading: isMetaLoading,
|
|
88
|
+
error: metaError
|
|
89
|
+
};
|
|
90
|
+
}, [meta, isMetaLoading, metaError]);
|
|
91
|
+
var metaRefused = !meta && metaError !== void 0 && isPermissionError(metaError);
|
|
108
92
|
var {
|
|
109
93
|
docinfo,
|
|
110
94
|
reload: reloadDocinfo
|
|
@@ -113,7 +97,35 @@ function DocFormScreen(param) {
|
|
|
113
97
|
if (docName) invalidateDocinfo(doctype, docName);
|
|
114
98
|
reloadDocinfo();
|
|
115
99
|
}, [doctype, docName, reloadDocinfo]);
|
|
116
|
-
var
|
|
100
|
+
var fixtureMode = Boolean(config === null || config === void 0 ? void 0 : config.fixtures);
|
|
101
|
+
var rights = useMemo(function () {
|
|
102
|
+
var _docinfoRights;
|
|
103
|
+
return (_docinfoRights = docinfoRights(docinfo === null || docinfo === void 0 ? void 0 : docinfo.permissions)) !== null && _docinfoRights !== void 0 ? _docinfoRights : fixtureMode ? fixtureDocRights(meta) : void 0;
|
|
104
|
+
}, [docinfo === null || docinfo === void 0 ? void 0 : docinfo.permissions, fixtureMode, meta]);
|
|
105
|
+
var form = useFrappeForm({
|
|
106
|
+
doctype,
|
|
107
|
+
name: docName,
|
|
108
|
+
meta: metaSource,
|
|
109
|
+
rights,
|
|
110
|
+
shares: docinfo === null || docinfo === void 0 ? void 0 : docinfo.shared,
|
|
111
|
+
readShares: false,
|
|
112
|
+
disabled: readOnly,
|
|
113
|
+
hideFields: hiddenFields,
|
|
114
|
+
hideSections: hiddenSections
|
|
115
|
+
});
|
|
116
|
+
var connection = form.connection;
|
|
117
|
+
var currentUser = (_form_user = form.user) !== null && _form_user !== void 0 ? _form_user : "";
|
|
118
|
+
var perms = form.rights;
|
|
119
|
+
useEffect(function () {
|
|
120
|
+
if (metaError && !meta && !metaRefused) {
|
|
121
|
+
emitEvent({
|
|
122
|
+
type: "error",
|
|
123
|
+
error: metaError,
|
|
124
|
+
context: "form-meta"
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
}, [metaError, meta, metaRefused, emitEvent]);
|
|
128
|
+
var modifiedStamp = typeof ((_form_baseline = form.baseline) === null || _form_baseline === void 0 ? void 0 : _form_baseline.modified) === "string" ? form.baseline.modified : void 0;
|
|
117
129
|
var stampRef = useRef(void 0);
|
|
118
130
|
useEffect(function () {
|
|
119
131
|
stampRef.current = void 0;
|
|
@@ -128,118 +140,20 @@ function DocFormScreen(param) {
|
|
|
128
140
|
reloadDocinfo();
|
|
129
141
|
}
|
|
130
142
|
}, [modifiedStamp, docName, doctype, reloadDocinfo]);
|
|
131
|
-
var
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
var fixtureMode = Boolean(config === null || config === void 0 ? void 0 : config.fixtures);
|
|
136
|
-
var recordOwner = !isCreate && typeof ((_engine_baseline1 = engine.baseline) === null || _engine_baseline1 === void 0 ? void 0 : _engine_baseline1.owner) === "string" ? engine.baseline.owner : void 0;
|
|
137
|
-
var perms = useMemo(function () {
|
|
138
|
-
var _ref2;
|
|
139
|
-
var docPerms = normalizeDocPermissions(docinfo === null || docinfo === void 0 ? void 0 : docinfo.permissions);
|
|
140
|
-
if (docPerms) {
|
|
141
|
-
return {
|
|
142
|
-
write: !!docPerms.write,
|
|
143
|
-
create: !!docPerms.create,
|
|
144
|
-
delete: !!docPerms.delete,
|
|
145
|
-
submit: !!docPerms.submit,
|
|
146
|
-
cancel: !!docPerms.cancel,
|
|
147
|
-
amend: !!docPerms.amend,
|
|
148
|
-
email: !!docPerms.email,
|
|
149
|
-
print: !!docPerms.print
|
|
150
|
-
};
|
|
151
|
-
}
|
|
152
|
-
if (!fixtureMode) {
|
|
153
|
-
var rights = sessionDocRights({
|
|
154
|
-
fixtures: false,
|
|
155
|
-
meta,
|
|
156
|
-
roles,
|
|
157
|
-
user: sessionUser,
|
|
158
|
-
owner: recordOwner,
|
|
159
|
-
shares: docinfo === null || docinfo === void 0 ? void 0 : docinfo.shared
|
|
160
|
-
});
|
|
161
|
-
return {
|
|
162
|
-
write: rights.write,
|
|
163
|
-
create: rights.create,
|
|
164
|
-
delete: rights.delete,
|
|
165
|
-
submit: rights.submit,
|
|
166
|
-
cancel: rights.cancel,
|
|
167
|
-
amend: rights.amend,
|
|
168
|
-
email: rights.email,
|
|
169
|
-
print: rights.print
|
|
170
|
-
};
|
|
171
|
-
}
|
|
172
|
-
var rules = (_ref2 = meta === null || meta === void 0 ? void 0 : meta.permissions) !== null && _ref2 !== void 0 ? _ref2 : [];
|
|
173
|
-
var anyRole = function anyRole2(key) {
|
|
174
|
-
return rules.some(function (rule) {
|
|
175
|
-
return !rule.permlevel && !!rule[key];
|
|
176
|
-
});
|
|
177
|
-
};
|
|
178
|
-
return {
|
|
179
|
-
write: rules.length === 0 || anyRole("write"),
|
|
180
|
-
create: rules.length === 0 || anyRole("create"),
|
|
181
|
-
delete: anyRole("delete"),
|
|
182
|
-
submit: anyRole("submit"),
|
|
183
|
-
cancel: anyRole("cancel"),
|
|
184
|
-
amend: anyRole("amend"),
|
|
185
|
-
email: rules.length === 0 || anyRole("email"),
|
|
186
|
-
print: rules.length === 0 || anyRole("print")
|
|
187
|
-
};
|
|
188
|
-
}, [docinfo === null || docinfo === void 0 ? void 0 : docinfo.permissions, docinfo === null || docinfo === void 0 ? void 0 : docinfo.shared, meta, fixtureMode, roles, sessionUser, recordOwner]);
|
|
189
|
-
var isSubmittable = !!(meta === null || meta === void 0 ? void 0 : meta.is_submittable);
|
|
190
|
-
var formReadOnly = !!readOnly || !!(meta === null || meta === void 0 ? void 0 : meta.read_only) || engine.wasDeleted || !isCreate && !perms.write || isCreate && !perms.create;
|
|
191
|
-
var permLevels = useMemo(function () {
|
|
192
|
-
return buildPermLevelMatrix(meta === null || meta === void 0 ? void 0 : meta.permissions, roles);
|
|
193
|
-
}, [meta === null || meta === void 0 ? void 0 : meta.permissions, roles]);
|
|
194
|
-
var formTabs = useMemo(function () {
|
|
195
|
-
if (!meta) return [];
|
|
196
|
-
return buildFormTabs({
|
|
197
|
-
fields: meta.fields,
|
|
198
|
-
// depends_on evaluates against the doc plus desk's ambient context:
|
|
199
|
-
// __islocal (unsaved doc flag) and the session user behind
|
|
200
|
-
// `frappe.session.user` references.
|
|
201
|
-
doc: {
|
|
202
|
-
...engine.doc,
|
|
203
|
-
__islocal: isCreate ? 1 : 0,
|
|
204
|
-
...(engine.currentUser ? {
|
|
205
|
-
__session_user: engine.currentUser
|
|
206
|
-
} : {})
|
|
207
|
-
},
|
|
208
|
-
docstatus: engine.docstatus,
|
|
209
|
-
formReadOnly,
|
|
210
|
-
isCreate,
|
|
211
|
-
detailsLabel: t("detailsTab", "Details"),
|
|
212
|
-
permLevels,
|
|
213
|
-
hiddenFields,
|
|
214
|
-
hiddenSections
|
|
215
|
-
});
|
|
216
|
-
}, [meta, engine.doc, engine.currentUser, engine.docstatus, formReadOnly, isCreate, permLevels, hiddenFields, hiddenSections, t]);
|
|
217
|
-
var jumpTargets = useMemo(function () {
|
|
218
|
-
return formTabs.flatMap(function (tab) {
|
|
219
|
-
return tab.schema.fields.map(function (field) {
|
|
220
|
-
return {
|
|
221
|
-
name: field.name,
|
|
222
|
-
label: field.label || field.name,
|
|
223
|
-
tabKey: tab.key,
|
|
224
|
-
tabLabel: tab.label
|
|
225
|
-
};
|
|
226
|
-
});
|
|
227
|
-
});
|
|
228
|
-
}, [formTabs]);
|
|
229
|
-
var [activeTab, setActiveTab] = useState(void 0);
|
|
230
|
-
var showConnections = !isCreate && !!connection && ((_ref = meta === null || meta === void 0 ? void 0 : (_meta_links = meta.links) === null || _meta_links === void 0 ? void 0 : _meta_links.some(function (link) {
|
|
231
|
-
return !link.hidden;
|
|
232
|
-
})) !== null && _ref !== void 0 ? _ref : false);
|
|
143
|
+
var isSubmittable = form.isSubmittable;
|
|
144
|
+
var formReadOnly = form.readOnly;
|
|
145
|
+
var jumpTargets = form.fieldTargets;
|
|
146
|
+
var showConnections = !isCreate && !!connection && groupConnectionLinks(meta).length > 0;
|
|
233
147
|
var [pendingNav, setPendingNav] = useState(void 0);
|
|
234
148
|
var navigate = useCallback(function (href) {
|
|
235
|
-
if (
|
|
149
|
+
if (form.isDirty) {
|
|
236
150
|
setPendingNav(href);
|
|
237
151
|
return;
|
|
238
152
|
}
|
|
239
153
|
navigator.navigate(href);
|
|
240
|
-
}, [
|
|
241
|
-
useBeforeUnloadGuard(
|
|
242
|
-
var backGuard = useNavigationDirtyGuard(
|
|
154
|
+
}, [form.isDirty, navigator]);
|
|
155
|
+
useBeforeUnloadGuard(form.isDirty);
|
|
156
|
+
var backGuard = useNavigationDirtyGuard(form.isDirty);
|
|
243
157
|
var [confirmAction, setConfirmAction] = useState(void 0);
|
|
244
158
|
var [renameOpen, setRenameOpen] = useState(false);
|
|
245
159
|
var [emailOpen, setEmailOpen] = useState(false);
|
|
@@ -247,15 +161,12 @@ function DocFormScreen(param) {
|
|
|
247
161
|
var [pendingJump, setPendingJump] = useState(void 0);
|
|
248
162
|
var [validationSummary, setValidationSummary] = useState(void 0);
|
|
249
163
|
var handleSave = useCallback(async function () {
|
|
250
|
-
var validationErrors =
|
|
164
|
+
var validationErrors = form.validate();
|
|
251
165
|
var errorFields = Object.keys(validationErrors);
|
|
252
166
|
if (errorFields.length > 0) {
|
|
253
|
-
|
|
254
|
-
return
|
|
255
|
-
return errorFields.includes(field.name);
|
|
256
|
-
});
|
|
167
|
+
errorFields.some(function (field) {
|
|
168
|
+
return form.revealField(field);
|
|
257
169
|
});
|
|
258
|
-
if (owner) setActiveTab(owner.key);
|
|
259
170
|
setValidationSummary(t("validationSummary", {
|
|
260
171
|
count: errorFields.length,
|
|
261
172
|
defaultValue_one: "Cannot save \u2014 {{count}} required field is missing.",
|
|
@@ -264,7 +175,7 @@ function DocFormScreen(param) {
|
|
|
264
175
|
} else {
|
|
265
176
|
setValidationSummary(void 0);
|
|
266
177
|
}
|
|
267
|
-
var savedName = await
|
|
178
|
+
var savedName = await form.save();
|
|
268
179
|
if (!savedName) return;
|
|
269
180
|
setValidationSummary(void 0);
|
|
270
181
|
notify({
|
|
@@ -280,7 +191,7 @@ function DocFormScreen(param) {
|
|
|
280
191
|
isNew: isCreate
|
|
281
192
|
});
|
|
282
193
|
onSaved === null || onSaved === void 0 ? void 0 : onSaved({
|
|
283
|
-
...
|
|
194
|
+
...form.doc,
|
|
284
195
|
name: savedName
|
|
285
196
|
});
|
|
286
197
|
if (isCreate) {
|
|
@@ -288,26 +199,19 @@ function DocFormScreen(param) {
|
|
|
288
199
|
} else {
|
|
289
200
|
reloadDocinfo();
|
|
290
201
|
}
|
|
291
|
-
}, [
|
|
202
|
+
}, [form, isCreate, navigator, paths, doctype, reloadDocinfo, t, emitEvent, onSaved]);
|
|
292
203
|
useSaveShortcut(!formReadOnly, function () {
|
|
293
|
-
if (
|
|
204
|
+
if (form.isDirty || isCreate) void handleSave();
|
|
294
205
|
});
|
|
295
206
|
useJumpToFieldShortcut(jumpTargets.length > 0 && !jumpOpen, function () {
|
|
296
207
|
return setJumpOpen(true);
|
|
297
208
|
});
|
|
298
209
|
var handleAmend = useCallback(function () {
|
|
299
|
-
if (
|
|
300
|
-
|
|
301
|
-
...buildCopyValues(meta.fields, engine.doc),
|
|
302
|
-
amended_from: docName
|
|
303
|
-
});
|
|
304
|
-
navigator.navigate(paths.newDoc(doctype));
|
|
305
|
-
}, [meta, docName, doctype, engine.doc, navigator, paths]);
|
|
210
|
+
if (form.amend()) navigator.navigate(paths.newDoc(doctype));
|
|
211
|
+
}, [form, doctype, navigator, paths]);
|
|
306
212
|
var handleDuplicate = useCallback(function () {
|
|
307
|
-
if (
|
|
308
|
-
|
|
309
|
-
navigator.navigate(paths.newDoc(doctype));
|
|
310
|
-
}, [meta, doctype, engine.doc, navigator, paths]);
|
|
213
|
+
if (form.duplicate()) navigator.navigate(paths.newDoc(doctype));
|
|
214
|
+
}, [form, doctype, navigator, paths]);
|
|
311
215
|
var handleRename = useCallback(async function (newName) {
|
|
312
216
|
if (!connection || !docName) return;
|
|
313
217
|
try {
|
|
@@ -330,11 +234,11 @@ function DocFormScreen(param) {
|
|
|
330
234
|
}, function () {
|
|
331
235
|
return openNeighborDoc(docPager.next);
|
|
332
236
|
});
|
|
333
|
-
var titleFieldValue = (meta === null || meta === void 0 ? void 0 : meta.title_field) && typeof
|
|
237
|
+
var titleFieldValue = (meta === null || meta === void 0 ? void 0 : meta.title_field) && typeof form.doc[meta.title_field] === "string" ?
|
|
334
238
|
// Title fields can hold rich text (e.g. ToDo.description = "<p>…</p>");
|
|
335
239
|
// strip to plain text so the breadcrumb + toolbar heading don't show
|
|
336
240
|
// literal HTML tags.
|
|
337
|
-
htmlToText(
|
|
241
|
+
htmlToText(form.doc[meta.title_field]) : void 0;
|
|
338
242
|
var title = isCreate ? t("newDocTitle", "New {{doctype}}", {
|
|
339
243
|
doctype
|
|
340
244
|
}) : titleFieldValue || name;
|
|
@@ -345,18 +249,21 @@ function DocFormScreen(param) {
|
|
|
345
249
|
label: t("menuReload", "Reload"),
|
|
346
250
|
icon: "reload",
|
|
347
251
|
onSelect: function onSelect() {
|
|
348
|
-
|
|
252
|
+
form.reset();
|
|
349
253
|
setValidationSummary(void 0);
|
|
350
254
|
refetchMeta();
|
|
351
255
|
invalidateDocinfo(doctype, name);
|
|
352
256
|
reloadDocinfo();
|
|
353
257
|
}
|
|
354
|
-
}, {
|
|
355
|
-
key: "duplicate",
|
|
356
|
-
label: t("menuDuplicate", "Duplicate"),
|
|
357
|
-
icon: "duplicate",
|
|
358
|
-
onSelect: handleDuplicate
|
|
359
258
|
}];
|
|
259
|
+
if (!metaRefused) {
|
|
260
|
+
items.push({
|
|
261
|
+
key: "duplicate",
|
|
262
|
+
label: t("menuDuplicate", "Duplicate"),
|
|
263
|
+
icon: "duplicate",
|
|
264
|
+
onSelect: handleDuplicate
|
|
265
|
+
});
|
|
266
|
+
}
|
|
360
267
|
if ((meta === null || meta === void 0 ? void 0 : meta.allow_rename) && perms.write) {
|
|
361
268
|
items.push({
|
|
362
269
|
key: "rename",
|
|
@@ -394,7 +301,7 @@ function DocFormScreen(param) {
|
|
|
394
301
|
label: t("menuLinks", "Links"),
|
|
395
302
|
icon: "links",
|
|
396
303
|
onSelect: function onSelect() {
|
|
397
|
-
return setActiveTab(CONNECTIONS_TAB);
|
|
304
|
+
return form.setActiveTab(CONNECTIONS_TAB);
|
|
398
305
|
}
|
|
399
306
|
});
|
|
400
307
|
}
|
|
@@ -452,12 +359,12 @@ function DocFormScreen(param) {
|
|
|
452
359
|
});
|
|
453
360
|
}
|
|
454
361
|
return items;
|
|
455
|
-
}, [isCreate, t,
|
|
362
|
+
}, [isCreate, t, form, refetchMeta, reloadDocinfo, handleDuplicate, metaRefused, meta === null || meta === void 0 ? void 0 : meta.allow_rename, perms, connection, doctype, name, showConnections, jumpTargets, navigate, paths, capabilities]);
|
|
456
363
|
var effectiveMenuItems = useMemo(function () {
|
|
457
|
-
var
|
|
458
|
-
var
|
|
364
|
+
var _ref;
|
|
365
|
+
var hiddenKeys = new Set((_ref = actionOverrides === null || actionOverrides === void 0 ? void 0 : actionOverrides.hide) !== null && _ref !== void 0 ? _ref : []);
|
|
459
366
|
var items = menuItems.filter(function (item) {
|
|
460
|
-
return !
|
|
367
|
+
return !hiddenKeys.has(item.key);
|
|
461
368
|
});
|
|
462
369
|
var injected = [...actionsForDoctype(actions.form, doctype), ...actionsForDoctype(actionOverrides === null || actionOverrides === void 0 ? void 0 : actionOverrides.extra, doctype)];
|
|
463
370
|
var _iteratorNormalCompletion = true,
|
|
@@ -498,9 +405,9 @@ function DocFormScreen(param) {
|
|
|
498
405
|
}, [menuItems, actions.form, actionOverrides, doctype, docName]);
|
|
499
406
|
var handleJumpToField = useCallback(function (field) {
|
|
500
407
|
setJumpOpen(false);
|
|
501
|
-
setActiveTab(field.tabKey);
|
|
408
|
+
form.setActiveTab(field.tabKey);
|
|
502
409
|
setPendingJump(field.name);
|
|
503
|
-
}, []);
|
|
410
|
+
}, [form]);
|
|
504
411
|
useEffect(function () {
|
|
505
412
|
if (!pendingJump) return;
|
|
506
413
|
if (typeof document === "undefined") {
|
|
@@ -547,18 +454,63 @@ function DocFormScreen(param) {
|
|
|
547
454
|
})
|
|
548
455
|
});
|
|
549
456
|
}
|
|
550
|
-
if (metaError && !meta) {
|
|
457
|
+
if (metaError && !meta && !metaRefused) {
|
|
551
458
|
return /* @__PURE__ */_jsx(YStack, {
|
|
552
459
|
flex: 1,
|
|
553
|
-
children: /* @__PURE__ */_jsx(
|
|
554
|
-
|
|
460
|
+
children: /* @__PURE__ */_jsx(AsyncBoundary, {
|
|
461
|
+
error: metaError,
|
|
462
|
+
errorTitle: t("metaError", "Could not load {{doctype}}", {
|
|
555
463
|
doctype
|
|
556
464
|
}),
|
|
557
|
-
|
|
465
|
+
onRetry: refetchMeta
|
|
466
|
+
})
|
|
467
|
+
});
|
|
468
|
+
}
|
|
469
|
+
if (!isCreate && form.status === "error" && form.docError && isPermissionError(form.docError)) {
|
|
470
|
+
return /* @__PURE__ */_jsx(YStack, {
|
|
471
|
+
flex: 1,
|
|
472
|
+
children: /* @__PURE__ */_jsx(EmptyState, {
|
|
473
|
+
testID: "frappe-form-not-permitted",
|
|
474
|
+
title: t("docNotPermitted", "You can't open {{doctype}} {{name}}", {
|
|
475
|
+
doctype,
|
|
476
|
+
name
|
|
477
|
+
}),
|
|
478
|
+
description: refusalReason(form.docError),
|
|
479
|
+
action: /* @__PURE__ */_jsx(Button, {
|
|
480
|
+
icon: ListBulletsIcon,
|
|
481
|
+
onPress: function onPress() {
|
|
482
|
+
return navigator.navigate(paths.list(doctype));
|
|
483
|
+
},
|
|
484
|
+
children: t("backToList", "Back to {{doctype}} list", {
|
|
485
|
+
doctype
|
|
486
|
+
})
|
|
487
|
+
})
|
|
558
488
|
})
|
|
559
489
|
});
|
|
560
490
|
}
|
|
561
|
-
if (!isCreate &&
|
|
491
|
+
if (!isCreate && form.status === "error" && form.docError) {
|
|
492
|
+
return /* @__PURE__ */_jsx(YStack, {
|
|
493
|
+
flex: 1,
|
|
494
|
+
children: /* @__PURE__ */_jsx(EmptyState, {
|
|
495
|
+
intent: "error",
|
|
496
|
+
title: t("docLoadError", "Could not load {{doctype}} {{name}}", {
|
|
497
|
+
doctype,
|
|
498
|
+
name
|
|
499
|
+
}),
|
|
500
|
+
description: form.docError.message,
|
|
501
|
+
action: /* @__PURE__ */_jsx(Button, {
|
|
502
|
+
icon: ListBulletsIcon,
|
|
503
|
+
onPress: function onPress() {
|
|
504
|
+
return navigator.navigate(paths.list(doctype));
|
|
505
|
+
},
|
|
506
|
+
children: t("backToList", "Back to {{doctype}} list", {
|
|
507
|
+
doctype
|
|
508
|
+
})
|
|
509
|
+
})
|
|
510
|
+
})
|
|
511
|
+
});
|
|
512
|
+
}
|
|
513
|
+
if (!isCreate && form.status === "notFound") {
|
|
562
514
|
return /* @__PURE__ */_jsx(YStack, {
|
|
563
515
|
flex: 1,
|
|
564
516
|
children: /* @__PURE__ */_jsx(EmptyState, {
|
|
@@ -579,7 +531,7 @@ function DocFormScreen(param) {
|
|
|
579
531
|
})
|
|
580
532
|
});
|
|
581
533
|
}
|
|
582
|
-
if (!isCreate &&
|
|
534
|
+
if (!isCreate && form.status === "loading") {
|
|
583
535
|
return /* @__PURE__ */_jsx(YStack, {
|
|
584
536
|
flex: 1,
|
|
585
537
|
...knobProps.panelPadding,
|
|
@@ -591,16 +543,16 @@ function DocFormScreen(param) {
|
|
|
591
543
|
}
|
|
592
544
|
var indicator = resolveIndicator({
|
|
593
545
|
isCreate,
|
|
594
|
-
isDirty:
|
|
595
|
-
docstatus:
|
|
546
|
+
isDirty: form.isDirty,
|
|
547
|
+
docstatus: form.docstatus,
|
|
596
548
|
isSubmittable,
|
|
597
|
-
statusValue: typeof
|
|
549
|
+
statusValue: typeof form.doc.status === "string" ? form.doc.status : void 0,
|
|
598
550
|
states: meta === null || meta === void 0 ? void 0 : meta.states
|
|
599
551
|
});
|
|
600
|
-
var canSave = !formReadOnly && (isCreate ? perms.create : perms.write &&
|
|
601
|
-
var canSubmit = !isCreate && isSubmittable &&
|
|
602
|
-
var canCancel = !isCreate && isSubmittable &&
|
|
603
|
-
var canAmend = !isCreate && isSubmittable &&
|
|
552
|
+
var canSave = !formReadOnly && (isCreate ? perms.create : perms.write && form.docstatus === 0);
|
|
553
|
+
var canSubmit = !isCreate && isSubmittable && form.docstatus === 0 && !form.isDirty && perms.submit && !form.wasDeleted;
|
|
554
|
+
var canCancel = !isCreate && isSubmittable && form.docstatus === 1 && perms.cancel && !form.wasDeleted;
|
|
555
|
+
var canAmend = !isCreate && isSubmittable && form.docstatus === 2 && perms.amend && !form.wasDeleted;
|
|
604
556
|
var breadcrumbs = [{
|
|
605
557
|
label: t("home", "Home"),
|
|
606
558
|
href: paths.home()
|
|
@@ -610,37 +562,8 @@ function DocFormScreen(param) {
|
|
|
610
562
|
}, {
|
|
611
563
|
label: isCreate ? t("newCrumb", "New") : title
|
|
612
564
|
}];
|
|
613
|
-
var promptNamed = isCreate && isPromptNamed(meta === null || meta === void 0 ? void 0 : meta.autoname, meta === null || meta === void 0 ? void 0 : meta.naming_rule);
|
|
614
565
|
var sidebarStacked = sizeClass === "compact";
|
|
615
|
-
var
|
|
616
|
-
return {
|
|
617
|
-
value: tab.key,
|
|
618
|
-
label: tab.label,
|
|
619
|
-
content: /* @__PURE__ */_jsx(YStack, {
|
|
620
|
-
...knobProps.gapLg,
|
|
621
|
-
paddingTop: "$3",
|
|
622
|
-
children: (
|
|
623
|
-
/* Containment at two granularities: each field renders behind its
|
|
624
|
-
own boundary (a broken field degrades to an inline error slot;
|
|
625
|
-
siblings stay editable), and the whole tab body behind another
|
|
626
|
-
(a SchemaForm-level crash costs one tab, not the route). */
|
|
627
|
-
/* @__PURE__ */
|
|
628
|
-
_jsx(FormErrorBoundary, {
|
|
629
|
-
errorTitle: t("formTabRenderError", "This form tab failed to render"),
|
|
630
|
-
testID: `form-tab-error-${tab.key}`,
|
|
631
|
-
children: /* @__PURE__ */_jsx(SchemaForm, {
|
|
632
|
-
schema: tab.schema,
|
|
633
|
-
doc: engine.doc,
|
|
634
|
-
setValue: engine.setValue,
|
|
635
|
-
errors: engine.errors,
|
|
636
|
-
disabled: formReadOnly || engine.isSaving,
|
|
637
|
-
sectionHeadingLevel: 2,
|
|
638
|
-
renderFieldWrapper: wrapFieldWithErrorBoundary
|
|
639
|
-
})
|
|
640
|
-
}))
|
|
641
|
-
})
|
|
642
|
-
};
|
|
643
|
-
}), ...(showConnections ? [{
|
|
566
|
+
var connectionsTab = showConnections ? [{
|
|
644
567
|
value: CONNECTIONS_TAB,
|
|
645
568
|
label: t("connectionsTab", "Connections"),
|
|
646
569
|
content: /* @__PURE__ */_jsx(YStack, {
|
|
@@ -651,42 +574,42 @@ function DocFormScreen(param) {
|
|
|
651
574
|
meta
|
|
652
575
|
})
|
|
653
576
|
})
|
|
654
|
-
}] : []
|
|
655
|
-
var
|
|
656
|
-
return
|
|
657
|
-
|
|
577
|
+
}] : [];
|
|
578
|
+
var renderTab = function renderTab2(tab, content) {
|
|
579
|
+
return /* @__PURE__ */_jsx(YStack, {
|
|
580
|
+
...knobProps.gapLg,
|
|
581
|
+
paddingTop: "$3",
|
|
582
|
+
children: /* @__PURE__ */_jsx(FormErrorBoundary, {
|
|
583
|
+
errorTitle: t("formTabRenderError", "This form tab failed to render"),
|
|
584
|
+
testID: `form-tab-error-${tab.key}`,
|
|
585
|
+
children: content
|
|
586
|
+
})
|
|
587
|
+
});
|
|
588
|
+
};
|
|
658
589
|
var formBody =
|
|
659
|
-
// No flex here: formBody
|
|
660
|
-
//
|
|
661
|
-
//
|
|
590
|
+
// No flex here: formBody lives inside COLUMN containers (both branches
|
|
591
|
+
// below), where `flex={1}` means flex-basis:0 — the body would stop
|
|
592
|
+
// contributing height and the timeline/sidebar would paint over it.
|
|
662
593
|
/* @__PURE__ */
|
|
663
|
-
|
|
594
|
+
_jsx(YStack, {
|
|
664
595
|
minWidth: 0,
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
onChange: setActiveTab,
|
|
681
|
-
lazyMount: true
|
|
682
|
-
}) : (_ref1 = (_bodyTabs_1 = bodyTabs[0]) === null || _bodyTabs_1 === void 0 ? void 0 : _bodyTabs_1.content) !== null && _ref1 !== void 0 ? _ref1 : null, engine.errors.general && /* @__PURE__ */_jsx(Text, {
|
|
683
|
-
color: "$red10",
|
|
684
|
-
fontSize: "$3",
|
|
685
|
-
role: "alert",
|
|
686
|
-
children: engine.errors.general
|
|
687
|
-
})]
|
|
596
|
+
children: /* @__PURE__ */_jsx(FrappeForm, {
|
|
597
|
+
form,
|
|
598
|
+
doctype,
|
|
599
|
+
name: docName,
|
|
600
|
+
disabled: readOnly,
|
|
601
|
+
showToolbar: false,
|
|
602
|
+
showSidebar: false,
|
|
603
|
+
showTimeline: false,
|
|
604
|
+
showConnections: false,
|
|
605
|
+
showBanners: false,
|
|
606
|
+
sectionHeadingLevel: 2,
|
|
607
|
+
renderFieldWrapper: wrapFieldWithErrorBoundary,
|
|
608
|
+
renderTab,
|
|
609
|
+
extraTabs: connectionsTab
|
|
610
|
+
})
|
|
688
611
|
});
|
|
689
|
-
var timeline = capabilities.timeline.enabled && !isCreate && docName ?
|
|
612
|
+
var timeline = capabilities.timeline.enabled && !isCreate && docName && !metaRefused ?
|
|
690
613
|
// Composed mode: the screen's shared docinfo (and its refresh) feed
|
|
691
614
|
// the timeline. Self-fetch mode subscribed the timeline to its OWN
|
|
692
615
|
// cache entry, which the save path's invalidate+reload orphaned — the
|
|
@@ -698,16 +621,16 @@ function DocFormScreen(param) {
|
|
|
698
621
|
name: docName,
|
|
699
622
|
docInfo: docinfo,
|
|
700
623
|
refreshDocInfo: refreshDocinfo,
|
|
701
|
-
currentUser
|
|
624
|
+
currentUser,
|
|
702
625
|
connection
|
|
703
626
|
}) : null;
|
|
704
627
|
var sidebar = !isCreate && docName && meta ? /* @__PURE__ */_jsx(FormSidebarPanel, {
|
|
705
628
|
doctype,
|
|
706
629
|
name: docName,
|
|
707
630
|
meta,
|
|
708
|
-
doc:
|
|
631
|
+
doc: form.doc,
|
|
709
632
|
docinfo,
|
|
710
|
-
currentUser
|
|
633
|
+
currentUser,
|
|
711
634
|
onRefresh: refreshDocinfo,
|
|
712
635
|
stacked: sidebarStacked
|
|
713
636
|
}) : null;
|
|
@@ -717,12 +640,12 @@ function DocFormScreen(param) {
|
|
|
717
640
|
title,
|
|
718
641
|
indicator,
|
|
719
642
|
showIndicator: !!meta,
|
|
720
|
-
isSaving:
|
|
721
|
-
cluster: !isCreate && docName ? /* @__PURE__ */_jsx(FormHeaderCluster, {
|
|
643
|
+
isSaving: form.isSubmitting,
|
|
644
|
+
cluster: !isCreate && docName && !metaRefused ? /* @__PURE__ */_jsx(FormHeaderCluster, {
|
|
722
645
|
doctype,
|
|
723
646
|
name: docName,
|
|
724
647
|
docinfo,
|
|
725
|
-
currentUser
|
|
648
|
+
currentUser,
|
|
726
649
|
onRefresh: refreshDocinfo
|
|
727
650
|
}) : void 0,
|
|
728
651
|
canSave,
|
|
@@ -762,9 +685,9 @@ function DocFormScreen(param) {
|
|
|
762
685
|
name: docName
|
|
763
686
|
} : {}),
|
|
764
687
|
defaultContent: toolbar
|
|
765
|
-
}) : toolbar, (
|
|
688
|
+
}) : toolbar, (form.wasDeleted || validationSummary || form.conflict) && /* @__PURE__ */_jsxs(YStack, {
|
|
766
689
|
paddingHorizontal: "$3",
|
|
767
|
-
children: [
|
|
690
|
+
children: [form.wasDeleted && /* @__PURE__ */_jsx(XStack, {
|
|
768
691
|
role: "alert",
|
|
769
692
|
...knobProps.containerRadius,
|
|
770
693
|
...knobProps.panelPadding,
|
|
@@ -774,7 +697,7 @@ function DocFormScreen(param) {
|
|
|
774
697
|
fontSize: "$3",
|
|
775
698
|
children: t("deletedBanner", "This document was deleted on the server. Fields are read-only.")
|
|
776
699
|
})
|
|
777
|
-
}), validationSummary && !
|
|
700
|
+
}), validationSummary && !form.wasDeleted && /* @__PURE__ */_jsx(XStack, {
|
|
778
701
|
role: "alert",
|
|
779
702
|
...knobProps.containerRadius,
|
|
780
703
|
...knobProps.panelPadding,
|
|
@@ -785,7 +708,7 @@ function DocFormScreen(param) {
|
|
|
785
708
|
fontSize: "$3",
|
|
786
709
|
children: validationSummary
|
|
787
710
|
})
|
|
788
|
-
}),
|
|
711
|
+
}), form.conflict && !form.wasDeleted && /* @__PURE__ */_jsxs(XStack, {
|
|
789
712
|
role: "status",
|
|
790
713
|
alignItems: "center",
|
|
791
714
|
justifyContent: "space-between",
|
|
@@ -802,7 +725,7 @@ function DocFormScreen(param) {
|
|
|
802
725
|
size: "$2",
|
|
803
726
|
outlined: true,
|
|
804
727
|
"aria-label": t("reloadDoc", "Reload"),
|
|
805
|
-
onPress:
|
|
728
|
+
onPress: form.reset,
|
|
806
729
|
children: t("reloadDoc", "Reload")
|
|
807
730
|
})]
|
|
808
731
|
})]
|
|
@@ -845,7 +768,7 @@ function DocFormScreen(param) {
|
|
|
845
768
|
warning: true,
|
|
846
769
|
onConfirm: function onConfirm() {
|
|
847
770
|
setConfirmAction(void 0);
|
|
848
|
-
void
|
|
771
|
+
void form.submitDocument().then(function (ok) {
|
|
849
772
|
if (ok) {
|
|
850
773
|
notify({
|
|
851
774
|
severity: "success",
|
|
@@ -869,7 +792,7 @@ function DocFormScreen(param) {
|
|
|
869
792
|
destructive: true,
|
|
870
793
|
onConfirm: function onConfirm() {
|
|
871
794
|
setConfirmAction(void 0);
|
|
872
|
-
void
|
|
795
|
+
void form.cancelDocument().then(function (ok) {
|
|
873
796
|
if (ok) {
|
|
874
797
|
notify({
|
|
875
798
|
severity: "success",
|
|
@@ -894,7 +817,7 @@ function DocFormScreen(param) {
|
|
|
894
817
|
destructive: true,
|
|
895
818
|
onConfirm: function onConfirm() {
|
|
896
819
|
setConfirmAction(void 0);
|
|
897
|
-
void
|
|
820
|
+
void form.remove().then(function (ok) {
|
|
898
821
|
if (ok) {
|
|
899
822
|
invalidateDocinfo(doctype, name);
|
|
900
823
|
emitEvent({
|