@multiplatform.one/backoffice 7.28.1 → 7.29.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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
|
@@ -41,7 +41,6 @@ module.exports = __toCommonJS(DocFormScreen_exports);
|
|
|
41
41
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
42
42
|
var import_react = __toESM(require("react"));
|
|
43
43
|
var import_components = require("@multiplatform.one/components");
|
|
44
|
-
var import_forms = require("@multiplatform.one/forms");
|
|
45
44
|
var import_frappe_ui = require("@multiplatform.one/frappe-ui");
|
|
46
45
|
var import_theme = require("@multiplatform.one/theme");
|
|
47
46
|
var import_react2 = require("@phosphor-icons/react");
|
|
@@ -54,14 +53,11 @@ var import_listNavContext = require("../shared/listNavContext.native.js");
|
|
|
54
53
|
var import_useDocinfo = require("../shared/useDocinfo.native.js");
|
|
55
54
|
var import_useRecentVisit = require("../shared/useRecentVisit.native.js");
|
|
56
55
|
var import_useDoctypeMeta = require("../shared/useDoctypeMeta.native.js");
|
|
57
|
-
var
|
|
56
|
+
var import_connections_data = require("./connections-data.native.js");
|
|
58
57
|
var import_createPrefill = require("./createPrefill.native.js");
|
|
59
|
-
var import_docinfo = require("./docinfo.native.js");
|
|
60
|
-
var import_fieldPermissions = require("./fieldPermissions.native.js");
|
|
61
58
|
var import_formActions = require("./formActions.native.js");
|
|
62
59
|
var import_FormDialogs = require("./FormDialogs.native.js");
|
|
63
60
|
var import_FormErrorBoundary = require("./FormErrorBoundary.native.js");
|
|
64
|
-
var import_formLayout = require("./formLayout.native.js");
|
|
65
61
|
var import_FormConnections = require("./FormConnections.native.js");
|
|
66
62
|
var import_FormHeaderCluster = require("./FormHeaderCluster.native.js");
|
|
67
63
|
var import_FormSidebarPanel = require("./FormSidebarPanel.native.js");
|
|
@@ -69,7 +65,6 @@ var import_FormTimeline = require("./FormTimeline.native.js");
|
|
|
69
65
|
var import_FormToolbar = require("./FormToolbar.native.js");
|
|
70
66
|
var import_timeline_utils = require("./timeline-utils.native.js");
|
|
71
67
|
var import_platformHooks = require("./platformHooks.native.js");
|
|
72
|
-
var import_useFormEngine = require("./useFormEngine.native.js");
|
|
73
68
|
var CONNECTIONS_TAB = "__connections";
|
|
74
69
|
function DocFormScreen(param) {
|
|
75
70
|
var {
|
|
@@ -83,8 +78,8 @@ function DocFormScreen(param) {
|
|
|
83
78
|
onDeleted,
|
|
84
79
|
actionOverrides
|
|
85
80
|
} = param;
|
|
86
|
-
var
|
|
87
|
-
var
|
|
81
|
+
var _form_user;
|
|
82
|
+
var _form_baseline;
|
|
88
83
|
var {
|
|
89
84
|
t
|
|
90
85
|
} = (0, import_react_i18next.useTranslation)(import_i18n.BACKOFFICE_I18N_NAMESPACE);
|
|
@@ -120,31 +115,20 @@ function DocFormScreen(param) {
|
|
|
120
115
|
name
|
|
121
116
|
});
|
|
122
117
|
}, [isCreate, doctype, name, emitEvent]);
|
|
123
|
-
var connection = (0, import_react3.useMemo)(function () {
|
|
124
|
-
return (config === null || config === void 0 ? void 0 : config.baseURL) ? {
|
|
125
|
-
baseURL: config.baseURL,
|
|
126
|
-
socketPort: config.socketPort,
|
|
127
|
-
siteName: config.siteName,
|
|
128
|
-
socketBaseURL: config.socketBaseURL,
|
|
129
|
-
auth: config.auth,
|
|
130
|
-
syncOptions: config.syncOptions,
|
|
131
|
-
fixtures: config.fixtures
|
|
132
|
-
} : void 0;
|
|
133
|
-
}, [config]);
|
|
134
118
|
var {
|
|
135
119
|
meta,
|
|
136
120
|
loading: isMetaLoading,
|
|
137
121
|
error: metaError,
|
|
138
122
|
reload: refetchMeta
|
|
139
123
|
} = (0, import_useDoctypeMeta.useDoctypeMeta)(doctype);
|
|
140
|
-
var
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
error: metaError
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
124
|
+
var metaSource = (0, import_react3.useMemo)(function () {
|
|
125
|
+
return {
|
|
126
|
+
meta,
|
|
127
|
+
isLoading: isMetaLoading,
|
|
128
|
+
error: metaError
|
|
129
|
+
};
|
|
130
|
+
}, [meta, isMetaLoading, metaError]);
|
|
131
|
+
var metaRefused = !meta && metaError !== void 0 && (0, import_frappe_ui.isPermissionError)(metaError);
|
|
148
132
|
var {
|
|
149
133
|
docinfo,
|
|
150
134
|
reload: reloadDocinfo
|
|
@@ -153,7 +137,35 @@ function DocFormScreen(param) {
|
|
|
153
137
|
if (docName) (0, import_useDocinfo.invalidateDocinfo)(doctype, docName);
|
|
154
138
|
reloadDocinfo();
|
|
155
139
|
}, [doctype, docName, reloadDocinfo]);
|
|
156
|
-
var
|
|
140
|
+
var fixtureMode = Boolean(config === null || config === void 0 ? void 0 : config.fixtures);
|
|
141
|
+
var rights = (0, import_react3.useMemo)(function () {
|
|
142
|
+
var _docinfoRights;
|
|
143
|
+
return (_docinfoRights = (0, import_frappe_ui.docinfoRights)(docinfo === null || docinfo === void 0 ? void 0 : docinfo.permissions)) !== null && _docinfoRights !== void 0 ? _docinfoRights : fixtureMode ? (0, import_frappe_ui.fixtureDocRights)(meta) : void 0;
|
|
144
|
+
}, [docinfo === null || docinfo === void 0 ? void 0 : docinfo.permissions, fixtureMode, meta]);
|
|
145
|
+
var form = (0, import_frappe_ui.useFrappeForm)({
|
|
146
|
+
doctype,
|
|
147
|
+
name: docName,
|
|
148
|
+
meta: metaSource,
|
|
149
|
+
rights,
|
|
150
|
+
shares: docinfo === null || docinfo === void 0 ? void 0 : docinfo.shared,
|
|
151
|
+
readShares: false,
|
|
152
|
+
disabled: readOnly,
|
|
153
|
+
hideFields: hiddenFields,
|
|
154
|
+
hideSections: hiddenSections
|
|
155
|
+
});
|
|
156
|
+
var connection = form.connection;
|
|
157
|
+
var currentUser = (_form_user = form.user) !== null && _form_user !== void 0 ? _form_user : "";
|
|
158
|
+
var perms = form.rights;
|
|
159
|
+
(0, import_react3.useEffect)(function () {
|
|
160
|
+
if (metaError && !meta && !metaRefused) {
|
|
161
|
+
emitEvent({
|
|
162
|
+
type: "error",
|
|
163
|
+
error: metaError,
|
|
164
|
+
context: "form-meta"
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
}, [metaError, meta, metaRefused, emitEvent]);
|
|
168
|
+
var modifiedStamp = typeof ((_form_baseline = form.baseline) === null || _form_baseline === void 0 ? void 0 : _form_baseline.modified) === "string" ? form.baseline.modified : void 0;
|
|
157
169
|
var stampRef = (0, import_react3.useRef)(void 0);
|
|
158
170
|
(0, import_react3.useEffect)(function () {
|
|
159
171
|
stampRef.current = void 0;
|
|
@@ -168,118 +180,20 @@ function DocFormScreen(param) {
|
|
|
168
180
|
reloadDocinfo();
|
|
169
181
|
}
|
|
170
182
|
}, [modifiedStamp, docName, doctype, reloadDocinfo]);
|
|
171
|
-
var
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
var fixtureMode = Boolean(config === null || config === void 0 ? void 0 : config.fixtures);
|
|
176
|
-
var recordOwner = !isCreate && typeof ((_engine_baseline1 = engine.baseline) === null || _engine_baseline1 === void 0 ? void 0 : _engine_baseline1.owner) === "string" ? engine.baseline.owner : void 0;
|
|
177
|
-
var perms = (0, import_react3.useMemo)(function () {
|
|
178
|
-
var _ref2;
|
|
179
|
-
var docPerms = (0, import_docinfo.normalizeDocPermissions)(docinfo === null || docinfo === void 0 ? void 0 : docinfo.permissions);
|
|
180
|
-
if (docPerms) {
|
|
181
|
-
return {
|
|
182
|
-
write: !!docPerms.write,
|
|
183
|
-
create: !!docPerms.create,
|
|
184
|
-
delete: !!docPerms.delete,
|
|
185
|
-
submit: !!docPerms.submit,
|
|
186
|
-
cancel: !!docPerms.cancel,
|
|
187
|
-
amend: !!docPerms.amend,
|
|
188
|
-
email: !!docPerms.email,
|
|
189
|
-
print: !!docPerms.print
|
|
190
|
-
};
|
|
191
|
-
}
|
|
192
|
-
if (!fixtureMode) {
|
|
193
|
-
var rights = (0, import_frappe_ui.sessionDocRights)({
|
|
194
|
-
fixtures: false,
|
|
195
|
-
meta,
|
|
196
|
-
roles,
|
|
197
|
-
user: sessionUser,
|
|
198
|
-
owner: recordOwner,
|
|
199
|
-
shares: docinfo === null || docinfo === void 0 ? void 0 : docinfo.shared
|
|
200
|
-
});
|
|
201
|
-
return {
|
|
202
|
-
write: rights.write,
|
|
203
|
-
create: rights.create,
|
|
204
|
-
delete: rights.delete,
|
|
205
|
-
submit: rights.submit,
|
|
206
|
-
cancel: rights.cancel,
|
|
207
|
-
amend: rights.amend,
|
|
208
|
-
email: rights.email,
|
|
209
|
-
print: rights.print
|
|
210
|
-
};
|
|
211
|
-
}
|
|
212
|
-
var rules = (_ref2 = meta === null || meta === void 0 ? void 0 : meta.permissions) !== null && _ref2 !== void 0 ? _ref2 : [];
|
|
213
|
-
var anyRole = function anyRole2(key) {
|
|
214
|
-
return rules.some(function (rule) {
|
|
215
|
-
return !rule.permlevel && !!rule[key];
|
|
216
|
-
});
|
|
217
|
-
};
|
|
218
|
-
return {
|
|
219
|
-
write: rules.length === 0 || anyRole("write"),
|
|
220
|
-
create: rules.length === 0 || anyRole("create"),
|
|
221
|
-
delete: anyRole("delete"),
|
|
222
|
-
submit: anyRole("submit"),
|
|
223
|
-
cancel: anyRole("cancel"),
|
|
224
|
-
amend: anyRole("amend"),
|
|
225
|
-
email: rules.length === 0 || anyRole("email"),
|
|
226
|
-
print: rules.length === 0 || anyRole("print")
|
|
227
|
-
};
|
|
228
|
-
}, [docinfo === null || docinfo === void 0 ? void 0 : docinfo.permissions, docinfo === null || docinfo === void 0 ? void 0 : docinfo.shared, meta, fixtureMode, roles, sessionUser, recordOwner]);
|
|
229
|
-
var isSubmittable = !!(meta === null || meta === void 0 ? void 0 : meta.is_submittable);
|
|
230
|
-
var formReadOnly = !!readOnly || !!(meta === null || meta === void 0 ? void 0 : meta.read_only) || engine.wasDeleted || !isCreate && !perms.write || isCreate && !perms.create;
|
|
231
|
-
var permLevels = (0, import_react3.useMemo)(function () {
|
|
232
|
-
return (0, import_fieldPermissions.buildPermLevelMatrix)(meta === null || meta === void 0 ? void 0 : meta.permissions, roles);
|
|
233
|
-
}, [meta === null || meta === void 0 ? void 0 : meta.permissions, roles]);
|
|
234
|
-
var formTabs = (0, import_react3.useMemo)(function () {
|
|
235
|
-
if (!meta) return [];
|
|
236
|
-
return (0, import_formLayout.buildFormTabs)({
|
|
237
|
-
fields: meta.fields,
|
|
238
|
-
// depends_on evaluates against the doc plus desk's ambient context:
|
|
239
|
-
// __islocal (unsaved doc flag) and the session user behind
|
|
240
|
-
// `frappe.session.user` references.
|
|
241
|
-
doc: {
|
|
242
|
-
...engine.doc,
|
|
243
|
-
__islocal: isCreate ? 1 : 0,
|
|
244
|
-
...(engine.currentUser ? {
|
|
245
|
-
__session_user: engine.currentUser
|
|
246
|
-
} : {})
|
|
247
|
-
},
|
|
248
|
-
docstatus: engine.docstatus,
|
|
249
|
-
formReadOnly,
|
|
250
|
-
isCreate,
|
|
251
|
-
detailsLabel: t("detailsTab", "Details"),
|
|
252
|
-
permLevels,
|
|
253
|
-
hiddenFields,
|
|
254
|
-
hiddenSections
|
|
255
|
-
});
|
|
256
|
-
}, [meta, engine.doc, engine.currentUser, engine.docstatus, formReadOnly, isCreate, permLevels, hiddenFields, hiddenSections, t]);
|
|
257
|
-
var jumpTargets = (0, import_react3.useMemo)(function () {
|
|
258
|
-
return formTabs.flatMap(function (tab) {
|
|
259
|
-
return tab.schema.fields.map(function (field) {
|
|
260
|
-
return {
|
|
261
|
-
name: field.name,
|
|
262
|
-
label: field.label || field.name,
|
|
263
|
-
tabKey: tab.key,
|
|
264
|
-
tabLabel: tab.label
|
|
265
|
-
};
|
|
266
|
-
});
|
|
267
|
-
});
|
|
268
|
-
}, [formTabs]);
|
|
269
|
-
var [activeTab, setActiveTab] = (0, import_react3.useState)(void 0);
|
|
270
|
-
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) {
|
|
271
|
-
return !link.hidden;
|
|
272
|
-
})) !== null && _ref !== void 0 ? _ref : false);
|
|
183
|
+
var isSubmittable = form.isSubmittable;
|
|
184
|
+
var formReadOnly = form.readOnly;
|
|
185
|
+
var jumpTargets = form.fieldTargets;
|
|
186
|
+
var showConnections = !isCreate && !!connection && (0, import_connections_data.groupConnectionLinks)(meta).length > 0;
|
|
273
187
|
var [pendingNav, setPendingNav] = (0, import_react3.useState)(void 0);
|
|
274
188
|
var navigate = (0, import_react3.useCallback)(function (href) {
|
|
275
|
-
if (
|
|
189
|
+
if (form.isDirty) {
|
|
276
190
|
setPendingNav(href);
|
|
277
191
|
return;
|
|
278
192
|
}
|
|
279
193
|
navigator.navigate(href);
|
|
280
|
-
}, [
|
|
281
|
-
(0, import_platformHooks.useBeforeUnloadGuard)(
|
|
282
|
-
var backGuard = (0, import_platformHooks.useNavigationDirtyGuard)(
|
|
194
|
+
}, [form.isDirty, navigator]);
|
|
195
|
+
(0, import_platformHooks.useBeforeUnloadGuard)(form.isDirty);
|
|
196
|
+
var backGuard = (0, import_platformHooks.useNavigationDirtyGuard)(form.isDirty);
|
|
283
197
|
var [confirmAction, setConfirmAction] = (0, import_react3.useState)(void 0);
|
|
284
198
|
var [renameOpen, setRenameOpen] = (0, import_react3.useState)(false);
|
|
285
199
|
var [emailOpen, setEmailOpen] = (0, import_react3.useState)(false);
|
|
@@ -287,15 +201,12 @@ function DocFormScreen(param) {
|
|
|
287
201
|
var [pendingJump, setPendingJump] = (0, import_react3.useState)(void 0);
|
|
288
202
|
var [validationSummary, setValidationSummary] = (0, import_react3.useState)(void 0);
|
|
289
203
|
var handleSave = (0, import_react3.useCallback)(async function () {
|
|
290
|
-
var validationErrors =
|
|
204
|
+
var validationErrors = form.validate();
|
|
291
205
|
var errorFields = Object.keys(validationErrors);
|
|
292
206
|
if (errorFields.length > 0) {
|
|
293
|
-
|
|
294
|
-
return
|
|
295
|
-
return errorFields.includes(field.name);
|
|
296
|
-
});
|
|
207
|
+
errorFields.some(function (field) {
|
|
208
|
+
return form.revealField(field);
|
|
297
209
|
});
|
|
298
|
-
if (owner) setActiveTab(owner.key);
|
|
299
210
|
setValidationSummary(t("validationSummary", {
|
|
300
211
|
count: errorFields.length,
|
|
301
212
|
defaultValue_one: "Cannot save \u2014 {{count}} required field is missing.",
|
|
@@ -304,7 +215,7 @@ function DocFormScreen(param) {
|
|
|
304
215
|
} else {
|
|
305
216
|
setValidationSummary(void 0);
|
|
306
217
|
}
|
|
307
|
-
var savedName = await
|
|
218
|
+
var savedName = await form.save();
|
|
308
219
|
if (!savedName) return;
|
|
309
220
|
setValidationSummary(void 0);
|
|
310
221
|
(0, import_components.notify)({
|
|
@@ -320,7 +231,7 @@ function DocFormScreen(param) {
|
|
|
320
231
|
isNew: isCreate
|
|
321
232
|
});
|
|
322
233
|
onSaved === null || onSaved === void 0 ? void 0 : onSaved({
|
|
323
|
-
...
|
|
234
|
+
...form.doc,
|
|
324
235
|
name: savedName
|
|
325
236
|
});
|
|
326
237
|
if (isCreate) {
|
|
@@ -328,26 +239,19 @@ function DocFormScreen(param) {
|
|
|
328
239
|
} else {
|
|
329
240
|
reloadDocinfo();
|
|
330
241
|
}
|
|
331
|
-
}, [
|
|
242
|
+
}, [form, isCreate, navigator, paths, doctype, reloadDocinfo, t, emitEvent, onSaved]);
|
|
332
243
|
(0, import_platformHooks.useSaveShortcut)(!formReadOnly, function () {
|
|
333
|
-
if (
|
|
244
|
+
if (form.isDirty || isCreate) void handleSave();
|
|
334
245
|
});
|
|
335
246
|
(0, import_platformHooks.useJumpToFieldShortcut)(jumpTargets.length > 0 && !jumpOpen, function () {
|
|
336
247
|
return setJumpOpen(true);
|
|
337
248
|
});
|
|
338
249
|
var handleAmend = (0, import_react3.useCallback)(function () {
|
|
339
|
-
if (
|
|
340
|
-
|
|
341
|
-
...(0, import_formLayout.buildCopyValues)(meta.fields, engine.doc),
|
|
342
|
-
amended_from: docName
|
|
343
|
-
});
|
|
344
|
-
navigator.navigate(paths.newDoc(doctype));
|
|
345
|
-
}, [meta, docName, doctype, engine.doc, navigator, paths]);
|
|
250
|
+
if (form.amend()) navigator.navigate(paths.newDoc(doctype));
|
|
251
|
+
}, [form, doctype, navigator, paths]);
|
|
346
252
|
var handleDuplicate = (0, import_react3.useCallback)(function () {
|
|
347
|
-
if (
|
|
348
|
-
|
|
349
|
-
navigator.navigate(paths.newDoc(doctype));
|
|
350
|
-
}, [meta, doctype, engine.doc, navigator, paths]);
|
|
253
|
+
if (form.duplicate()) navigator.navigate(paths.newDoc(doctype));
|
|
254
|
+
}, [form, doctype, navigator, paths]);
|
|
351
255
|
var handleRename = (0, import_react3.useCallback)(async function (newName) {
|
|
352
256
|
if (!connection || !docName) return;
|
|
353
257
|
try {
|
|
@@ -370,11 +274,11 @@ function DocFormScreen(param) {
|
|
|
370
274
|
}, function () {
|
|
371
275
|
return openNeighborDoc(docPager.next);
|
|
372
276
|
});
|
|
373
|
-
var titleFieldValue = (meta === null || meta === void 0 ? void 0 : meta.title_field) && typeof
|
|
277
|
+
var titleFieldValue = (meta === null || meta === void 0 ? void 0 : meta.title_field) && typeof form.doc[meta.title_field] === "string" ?
|
|
374
278
|
// Title fields can hold rich text (e.g. ToDo.description = "<p>…</p>");
|
|
375
279
|
// strip to plain text so the breadcrumb + toolbar heading don't show
|
|
376
280
|
// literal HTML tags.
|
|
377
|
-
(0, import_timeline_utils.htmlToText)(
|
|
281
|
+
(0, import_timeline_utils.htmlToText)(form.doc[meta.title_field]) : void 0;
|
|
378
282
|
var title = isCreate ? t("newDocTitle", "New {{doctype}}", {
|
|
379
283
|
doctype
|
|
380
284
|
}) : titleFieldValue || name;
|
|
@@ -385,18 +289,21 @@ function DocFormScreen(param) {
|
|
|
385
289
|
label: t("menuReload", "Reload"),
|
|
386
290
|
icon: "reload",
|
|
387
291
|
onSelect: function onSelect() {
|
|
388
|
-
|
|
292
|
+
form.reset();
|
|
389
293
|
setValidationSummary(void 0);
|
|
390
294
|
refetchMeta();
|
|
391
295
|
(0, import_useDocinfo.invalidateDocinfo)(doctype, name);
|
|
392
296
|
reloadDocinfo();
|
|
393
297
|
}
|
|
394
|
-
}, {
|
|
395
|
-
key: "duplicate",
|
|
396
|
-
label: t("menuDuplicate", "Duplicate"),
|
|
397
|
-
icon: "duplicate",
|
|
398
|
-
onSelect: handleDuplicate
|
|
399
298
|
}];
|
|
299
|
+
if (!metaRefused) {
|
|
300
|
+
items.push({
|
|
301
|
+
key: "duplicate",
|
|
302
|
+
label: t("menuDuplicate", "Duplicate"),
|
|
303
|
+
icon: "duplicate",
|
|
304
|
+
onSelect: handleDuplicate
|
|
305
|
+
});
|
|
306
|
+
}
|
|
400
307
|
if ((meta === null || meta === void 0 ? void 0 : meta.allow_rename) && perms.write) {
|
|
401
308
|
items.push({
|
|
402
309
|
key: "rename",
|
|
@@ -434,7 +341,7 @@ function DocFormScreen(param) {
|
|
|
434
341
|
label: t("menuLinks", "Links"),
|
|
435
342
|
icon: "links",
|
|
436
343
|
onSelect: function onSelect() {
|
|
437
|
-
return setActiveTab(CONNECTIONS_TAB);
|
|
344
|
+
return form.setActiveTab(CONNECTIONS_TAB);
|
|
438
345
|
}
|
|
439
346
|
});
|
|
440
347
|
}
|
|
@@ -492,12 +399,12 @@ function DocFormScreen(param) {
|
|
|
492
399
|
});
|
|
493
400
|
}
|
|
494
401
|
return items;
|
|
495
|
-
}, [isCreate, t,
|
|
402
|
+
}, [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]);
|
|
496
403
|
var effectiveMenuItems = (0, import_react3.useMemo)(function () {
|
|
497
|
-
var
|
|
498
|
-
var
|
|
404
|
+
var _ref;
|
|
405
|
+
var hiddenKeys = new Set((_ref = actionOverrides === null || actionOverrides === void 0 ? void 0 : actionOverrides.hide) !== null && _ref !== void 0 ? _ref : []);
|
|
499
406
|
var items = menuItems.filter(function (item) {
|
|
500
|
-
return !
|
|
407
|
+
return !hiddenKeys.has(item.key);
|
|
501
408
|
});
|
|
502
409
|
var injected = [...(0, import_BackofficeProvider.actionsForDoctype)(actions.form, doctype), ...(0, import_BackofficeProvider.actionsForDoctype)(actionOverrides === null || actionOverrides === void 0 ? void 0 : actionOverrides.extra, doctype)];
|
|
503
410
|
var _iteratorNormalCompletion = true,
|
|
@@ -538,9 +445,9 @@ function DocFormScreen(param) {
|
|
|
538
445
|
}, [menuItems, actions.form, actionOverrides, doctype, docName]);
|
|
539
446
|
var handleJumpToField = (0, import_react3.useCallback)(function (field) {
|
|
540
447
|
setJumpOpen(false);
|
|
541
|
-
setActiveTab(field.tabKey);
|
|
448
|
+
form.setActiveTab(field.tabKey);
|
|
542
449
|
setPendingJump(field.name);
|
|
543
|
-
}, []);
|
|
450
|
+
}, [form]);
|
|
544
451
|
(0, import_react3.useEffect)(function () {
|
|
545
452
|
if (!pendingJump) return;
|
|
546
453
|
if (typeof document === "undefined") {
|
|
@@ -587,18 +494,63 @@ function DocFormScreen(param) {
|
|
|
587
494
|
})
|
|
588
495
|
});
|
|
589
496
|
}
|
|
590
|
-
if (metaError && !meta) {
|
|
497
|
+
if (metaError && !meta && !metaRefused) {
|
|
591
498
|
return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.YStack, {
|
|
592
499
|
flex: 1,
|
|
593
|
-
children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.
|
|
594
|
-
|
|
500
|
+
children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.AsyncBoundary, {
|
|
501
|
+
error: metaError,
|
|
502
|
+
errorTitle: t("metaError", "Could not load {{doctype}}", {
|
|
595
503
|
doctype
|
|
596
504
|
}),
|
|
597
|
-
|
|
505
|
+
onRetry: refetchMeta
|
|
506
|
+
})
|
|
507
|
+
});
|
|
508
|
+
}
|
|
509
|
+
if (!isCreate && form.status === "error" && form.docError && (0, import_frappe_ui.isPermissionError)(form.docError)) {
|
|
510
|
+
return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.YStack, {
|
|
511
|
+
flex: 1,
|
|
512
|
+
children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.EmptyState, {
|
|
513
|
+
testID: "frappe-form-not-permitted",
|
|
514
|
+
title: t("docNotPermitted", "You can't open {{doctype}} {{name}}", {
|
|
515
|
+
doctype,
|
|
516
|
+
name
|
|
517
|
+
}),
|
|
518
|
+
description: (0, import_frappe_ui.refusalReason)(form.docError),
|
|
519
|
+
action: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.Button, {
|
|
520
|
+
icon: import_react2.ListBulletsIcon,
|
|
521
|
+
onPress: function onPress() {
|
|
522
|
+
return navigator.navigate(paths.list(doctype));
|
|
523
|
+
},
|
|
524
|
+
children: t("backToList", "Back to {{doctype}} list", {
|
|
525
|
+
doctype
|
|
526
|
+
})
|
|
527
|
+
})
|
|
598
528
|
})
|
|
599
529
|
});
|
|
600
530
|
}
|
|
601
|
-
if (!isCreate &&
|
|
531
|
+
if (!isCreate && form.status === "error" && form.docError) {
|
|
532
|
+
return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.YStack, {
|
|
533
|
+
flex: 1,
|
|
534
|
+
children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.EmptyState, {
|
|
535
|
+
intent: "error",
|
|
536
|
+
title: t("docLoadError", "Could not load {{doctype}} {{name}}", {
|
|
537
|
+
doctype,
|
|
538
|
+
name
|
|
539
|
+
}),
|
|
540
|
+
description: form.docError.message,
|
|
541
|
+
action: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.Button, {
|
|
542
|
+
icon: import_react2.ListBulletsIcon,
|
|
543
|
+
onPress: function onPress() {
|
|
544
|
+
return navigator.navigate(paths.list(doctype));
|
|
545
|
+
},
|
|
546
|
+
children: t("backToList", "Back to {{doctype}} list", {
|
|
547
|
+
doctype
|
|
548
|
+
})
|
|
549
|
+
})
|
|
550
|
+
})
|
|
551
|
+
});
|
|
552
|
+
}
|
|
553
|
+
if (!isCreate && form.status === "notFound") {
|
|
602
554
|
return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.YStack, {
|
|
603
555
|
flex: 1,
|
|
604
556
|
children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.EmptyState, {
|
|
@@ -619,7 +571,7 @@ function DocFormScreen(param) {
|
|
|
619
571
|
})
|
|
620
572
|
});
|
|
621
573
|
}
|
|
622
|
-
if (!isCreate &&
|
|
574
|
+
if (!isCreate && form.status === "loading") {
|
|
623
575
|
return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.YStack, {
|
|
624
576
|
flex: 1,
|
|
625
577
|
...knobProps.panelPadding,
|
|
@@ -631,16 +583,16 @@ function DocFormScreen(param) {
|
|
|
631
583
|
}
|
|
632
584
|
var indicator = (0, import_FormToolbar.resolveIndicator)({
|
|
633
585
|
isCreate,
|
|
634
|
-
isDirty:
|
|
635
|
-
docstatus:
|
|
586
|
+
isDirty: form.isDirty,
|
|
587
|
+
docstatus: form.docstatus,
|
|
636
588
|
isSubmittable,
|
|
637
|
-
statusValue: typeof
|
|
589
|
+
statusValue: typeof form.doc.status === "string" ? form.doc.status : void 0,
|
|
638
590
|
states: meta === null || meta === void 0 ? void 0 : meta.states
|
|
639
591
|
});
|
|
640
|
-
var canSave = !formReadOnly && (isCreate ? perms.create : perms.write &&
|
|
641
|
-
var canSubmit = !isCreate && isSubmittable &&
|
|
642
|
-
var canCancel = !isCreate && isSubmittable &&
|
|
643
|
-
var canAmend = !isCreate && isSubmittable &&
|
|
592
|
+
var canSave = !formReadOnly && (isCreate ? perms.create : perms.write && form.docstatus === 0);
|
|
593
|
+
var canSubmit = !isCreate && isSubmittable && form.docstatus === 0 && !form.isDirty && perms.submit && !form.wasDeleted;
|
|
594
|
+
var canCancel = !isCreate && isSubmittable && form.docstatus === 1 && perms.cancel && !form.wasDeleted;
|
|
595
|
+
var canAmend = !isCreate && isSubmittable && form.docstatus === 2 && perms.amend && !form.wasDeleted;
|
|
644
596
|
var breadcrumbs = [{
|
|
645
597
|
label: t("home", "Home"),
|
|
646
598
|
href: paths.home()
|
|
@@ -650,37 +602,8 @@ function DocFormScreen(param) {
|
|
|
650
602
|
}, {
|
|
651
603
|
label: isCreate ? t("newCrumb", "New") : title
|
|
652
604
|
}];
|
|
653
|
-
var promptNamed = isCreate && (0, import_formLayout.isPromptNamed)(meta === null || meta === void 0 ? void 0 : meta.autoname, meta === null || meta === void 0 ? void 0 : meta.naming_rule);
|
|
654
605
|
var sidebarStacked = sizeClass === "compact";
|
|
655
|
-
var
|
|
656
|
-
return {
|
|
657
|
-
value: tab.key,
|
|
658
|
-
label: tab.label,
|
|
659
|
-
content: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.YStack, {
|
|
660
|
-
...knobProps.gapLg,
|
|
661
|
-
paddingTop: "$3",
|
|
662
|
-
children: (
|
|
663
|
-
/* Containment at two granularities: each field renders behind its
|
|
664
|
-
own boundary (a broken field degrades to an inline error slot;
|
|
665
|
-
siblings stay editable), and the whole tab body behind another
|
|
666
|
-
(a SchemaForm-level crash costs one tab, not the route). */
|
|
667
|
-
/* @__PURE__ */
|
|
668
|
-
(0, import_jsx_runtime.jsx)(import_FormErrorBoundary.FormErrorBoundary, {
|
|
669
|
-
errorTitle: t("formTabRenderError", "This form tab failed to render"),
|
|
670
|
-
testID: `form-tab-error-${tab.key}`,
|
|
671
|
-
children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_frappe_ui.SchemaForm, {
|
|
672
|
-
schema: tab.schema,
|
|
673
|
-
doc: engine.doc,
|
|
674
|
-
setValue: engine.setValue,
|
|
675
|
-
errors: engine.errors,
|
|
676
|
-
disabled: formReadOnly || engine.isSaving,
|
|
677
|
-
sectionHeadingLevel: 2,
|
|
678
|
-
renderFieldWrapper: import_FormErrorBoundary.wrapFieldWithErrorBoundary
|
|
679
|
-
})
|
|
680
|
-
}))
|
|
681
|
-
})
|
|
682
|
-
};
|
|
683
|
-
}), ...(showConnections ? [{
|
|
606
|
+
var connectionsTab = showConnections ? [{
|
|
684
607
|
value: CONNECTIONS_TAB,
|
|
685
608
|
label: t("connectionsTab", "Connections"),
|
|
686
609
|
content: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.YStack, {
|
|
@@ -691,42 +614,42 @@ function DocFormScreen(param) {
|
|
|
691
614
|
meta
|
|
692
615
|
})
|
|
693
616
|
})
|
|
694
|
-
}] : []
|
|
695
|
-
var
|
|
696
|
-
return
|
|
697
|
-
|
|
617
|
+
}] : [];
|
|
618
|
+
var renderTab = function renderTab2(tab, content) {
|
|
619
|
+
return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.YStack, {
|
|
620
|
+
...knobProps.gapLg,
|
|
621
|
+
paddingTop: "$3",
|
|
622
|
+
children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_FormErrorBoundary.FormErrorBoundary, {
|
|
623
|
+
errorTitle: t("formTabRenderError", "This form tab failed to render"),
|
|
624
|
+
testID: `form-tab-error-${tab.key}`,
|
|
625
|
+
children: content
|
|
626
|
+
})
|
|
627
|
+
});
|
|
628
|
+
};
|
|
698
629
|
var formBody =
|
|
699
|
-
// No flex here: formBody
|
|
700
|
-
//
|
|
701
|
-
//
|
|
630
|
+
// No flex here: formBody lives inside COLUMN containers (both branches
|
|
631
|
+
// below), where `flex={1}` means flex-basis:0 — the body would stop
|
|
632
|
+
// contributing height and the timeline/sidebar would paint over it.
|
|
702
633
|
/* @__PURE__ */
|
|
703
|
-
(0, import_jsx_runtime.
|
|
634
|
+
(0, import_jsx_runtime.jsx)(import_components.YStack, {
|
|
704
635
|
minWidth: 0,
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
onChange: setActiveTab,
|
|
721
|
-
lazyMount: true
|
|
722
|
-
}) : (_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__ */(0, import_jsx_runtime.jsx)(import_components.Text, {
|
|
723
|
-
color: "$red10",
|
|
724
|
-
fontSize: "$3",
|
|
725
|
-
role: "alert",
|
|
726
|
-
children: engine.errors.general
|
|
727
|
-
})]
|
|
636
|
+
children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_frappe_ui.FrappeForm, {
|
|
637
|
+
form,
|
|
638
|
+
doctype,
|
|
639
|
+
name: docName,
|
|
640
|
+
disabled: readOnly,
|
|
641
|
+
showToolbar: false,
|
|
642
|
+
showSidebar: false,
|
|
643
|
+
showTimeline: false,
|
|
644
|
+
showConnections: false,
|
|
645
|
+
showBanners: false,
|
|
646
|
+
sectionHeadingLevel: 2,
|
|
647
|
+
renderFieldWrapper: import_FormErrorBoundary.wrapFieldWithErrorBoundary,
|
|
648
|
+
renderTab,
|
|
649
|
+
extraTabs: connectionsTab
|
|
650
|
+
})
|
|
728
651
|
});
|
|
729
|
-
var timeline = capabilities.timeline.enabled && !isCreate && docName ?
|
|
652
|
+
var timeline = capabilities.timeline.enabled && !isCreate && docName && !metaRefused ?
|
|
730
653
|
// Composed mode: the screen's shared docinfo (and its refresh) feed
|
|
731
654
|
// the timeline. Self-fetch mode subscribed the timeline to its OWN
|
|
732
655
|
// cache entry, which the save path's invalidate+reload orphaned — the
|
|
@@ -738,16 +661,16 @@ function DocFormScreen(param) {
|
|
|
738
661
|
name: docName,
|
|
739
662
|
docInfo: docinfo,
|
|
740
663
|
refreshDocInfo: refreshDocinfo,
|
|
741
|
-
currentUser
|
|
664
|
+
currentUser,
|
|
742
665
|
connection
|
|
743
666
|
}) : null;
|
|
744
667
|
var sidebar = !isCreate && docName && meta ? /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_FormSidebarPanel.FormSidebarPanel, {
|
|
745
668
|
doctype,
|
|
746
669
|
name: docName,
|
|
747
670
|
meta,
|
|
748
|
-
doc:
|
|
671
|
+
doc: form.doc,
|
|
749
672
|
docinfo,
|
|
750
|
-
currentUser
|
|
673
|
+
currentUser,
|
|
751
674
|
onRefresh: refreshDocinfo,
|
|
752
675
|
stacked: sidebarStacked
|
|
753
676
|
}) : null;
|
|
@@ -757,12 +680,12 @@ function DocFormScreen(param) {
|
|
|
757
680
|
title,
|
|
758
681
|
indicator,
|
|
759
682
|
showIndicator: !!meta,
|
|
760
|
-
isSaving:
|
|
761
|
-
cluster: !isCreate && docName ? /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_FormHeaderCluster.FormHeaderCluster, {
|
|
683
|
+
isSaving: form.isSubmitting,
|
|
684
|
+
cluster: !isCreate && docName && !metaRefused ? /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_FormHeaderCluster.FormHeaderCluster, {
|
|
762
685
|
doctype,
|
|
763
686
|
name: docName,
|
|
764
687
|
docinfo,
|
|
765
|
-
currentUser
|
|
688
|
+
currentUser,
|
|
766
689
|
onRefresh: refreshDocinfo
|
|
767
690
|
}) : void 0,
|
|
768
691
|
canSave,
|
|
@@ -802,9 +725,9 @@ function DocFormScreen(param) {
|
|
|
802
725
|
name: docName
|
|
803
726
|
} : {}),
|
|
804
727
|
defaultContent: toolbar
|
|
805
|
-
}) : toolbar, (
|
|
728
|
+
}) : toolbar, (form.wasDeleted || validationSummary || form.conflict) && /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_components.YStack, {
|
|
806
729
|
paddingHorizontal: "$3",
|
|
807
|
-
children: [
|
|
730
|
+
children: [form.wasDeleted && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.XStack, {
|
|
808
731
|
role: "alert",
|
|
809
732
|
...knobProps.containerRadius,
|
|
810
733
|
...knobProps.panelPadding,
|
|
@@ -814,7 +737,7 @@ function DocFormScreen(param) {
|
|
|
814
737
|
fontSize: "$3",
|
|
815
738
|
children: t("deletedBanner", "This document was deleted on the server. Fields are read-only.")
|
|
816
739
|
})
|
|
817
|
-
}), validationSummary && !
|
|
740
|
+
}), validationSummary && !form.wasDeleted && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.XStack, {
|
|
818
741
|
role: "alert",
|
|
819
742
|
...knobProps.containerRadius,
|
|
820
743
|
...knobProps.panelPadding,
|
|
@@ -825,7 +748,7 @@ function DocFormScreen(param) {
|
|
|
825
748
|
fontSize: "$3",
|
|
826
749
|
children: validationSummary
|
|
827
750
|
})
|
|
828
|
-
}),
|
|
751
|
+
}), form.conflict && !form.wasDeleted && /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_components.XStack, {
|
|
829
752
|
role: "status",
|
|
830
753
|
alignItems: "center",
|
|
831
754
|
justifyContent: "space-between",
|
|
@@ -842,7 +765,7 @@ function DocFormScreen(param) {
|
|
|
842
765
|
size: "$2",
|
|
843
766
|
outlined: true,
|
|
844
767
|
"aria-label": t("reloadDoc", "Reload"),
|
|
845
|
-
onPress:
|
|
768
|
+
onPress: form.reset,
|
|
846
769
|
children: t("reloadDoc", "Reload")
|
|
847
770
|
})]
|
|
848
771
|
})]
|
|
@@ -885,7 +808,7 @@ function DocFormScreen(param) {
|
|
|
885
808
|
warning: true,
|
|
886
809
|
onConfirm: function onConfirm() {
|
|
887
810
|
setConfirmAction(void 0);
|
|
888
|
-
void
|
|
811
|
+
void form.submitDocument().then(function (ok) {
|
|
889
812
|
if (ok) {
|
|
890
813
|
(0, import_components.notify)({
|
|
891
814
|
severity: "success",
|
|
@@ -909,7 +832,7 @@ function DocFormScreen(param) {
|
|
|
909
832
|
destructive: true,
|
|
910
833
|
onConfirm: function onConfirm() {
|
|
911
834
|
setConfirmAction(void 0);
|
|
912
|
-
void
|
|
835
|
+
void form.cancelDocument().then(function (ok) {
|
|
913
836
|
if (ok) {
|
|
914
837
|
(0, import_components.notify)({
|
|
915
838
|
severity: "success",
|
|
@@ -934,7 +857,7 @@ function DocFormScreen(param) {
|
|
|
934
857
|
destructive: true,
|
|
935
858
|
onConfirm: function onConfirm() {
|
|
936
859
|
setConfirmAction(void 0);
|
|
937
|
-
void
|
|
860
|
+
void form.remove().then(function (ok) {
|
|
938
861
|
if (ok) {
|
|
939
862
|
(0, import_useDocinfo.invalidateDocinfo)(doctype, name);
|
|
940
863
|
emitEvent({
|