@multiplatform.one/frappe-ui 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/dist/cjs/FrappeCalendar.cjs +3 -2
- package/dist/cjs/FrappeCalendar.native.js +3 -2
- package/dist/cjs/FrappeCalendar.native.js.map +1 -1
- package/dist/cjs/FrappeForm.cjs +148 -464
- package/dist/cjs/FrappeForm.native.js +152 -633
- package/dist/cjs/FrappeForm.native.js.map +1 -1
- package/dist/cjs/FrappeListView.cjs +5 -27
- package/dist/cjs/FrappeListView.native.js +11 -32
- package/dist/cjs/FrappeListView.native.js.map +1 -1
- package/dist/cjs/FrappeReportBuilder.cjs +523 -309
- package/dist/cjs/FrappeReportBuilder.native.js +658 -353
- package/dist/cjs/FrappeReportBuilder.native.js.map +1 -1
- package/dist/cjs/FrappeReportView.cjs +35 -234
- package/dist/cjs/FrappeReportView.native.js +39 -283
- package/dist/cjs/FrappeReportView.native.js.map +1 -1
- package/dist/cjs/dependsOn.cjs +2 -2
- package/dist/cjs/dependsOn.native.js +1 -2
- package/dist/cjs/dependsOn.native.js.map +1 -1
- package/dist/cjs/fields/shared/EditorPreviewPanes.cjs +2 -2
- package/dist/cjs/fields/shared/EditorPreviewPanes.native.js +2 -2
- package/dist/cjs/fields/shared/EditorPreviewPanes.native.js.map +1 -1
- package/dist/cjs/formEngine/docPermissions.cjs +20 -0
- package/dist/cjs/formEngine/docPermissions.native.js +69 -0
- package/dist/cjs/formEngine/docPermissions.native.js.map +1 -1
- package/dist/cjs/formEngine/index.cjs +2 -0
- package/dist/cjs/formEngine/index.native.js +2 -0
- package/dist/cjs/formEngine/index.native.js.map +1 -1
- package/dist/cjs/index.cjs +67 -7
- package/dist/cjs/index.native.js +67 -7
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/liveErrors.cjs +8 -2
- package/dist/cjs/liveErrors.native.js +8 -2
- package/dist/cjs/liveErrors.native.js.map +1 -1
- package/dist/cjs/measures.cjs +31 -0
- package/dist/cjs/measures.native.js +34 -0
- package/dist/cjs/measures.native.js.map +1 -0
- package/dist/cjs/recordShape.cjs +103 -0
- package/dist/cjs/recordShape.native.js +115 -0
- package/dist/cjs/recordShape.native.js.map +1 -0
- package/dist/cjs/report/ReportGrid.cjs +453 -0
- package/dist/cjs/report/ReportGrid.native.js +510 -0
- package/dist/cjs/report/ReportGrid.native.js.map +1 -0
- package/dist/cjs/report/ReportViewToolbar.cjs +253 -0
- package/dist/cjs/report/ReportViewToolbar.native.js +303 -0
- package/dist/cjs/report/ReportViewToolbar.native.js.map +1 -0
- package/dist/cjs/report/queryReport.cjs +444 -0
- package/dist/cjs/report/queryReport.native.js +588 -0
- package/dist/cjs/report/queryReport.native.js.map +1 -0
- package/dist/cjs/report/queryReportColumns.cjs +131 -0
- package/dist/cjs/report/queryReportColumns.native.js +159 -0
- package/dist/cjs/report/queryReportColumns.native.js.map +1 -0
- package/dist/cjs/report/reportViewModel.cjs +386 -0
- package/dist/cjs/report/reportViewModel.native.js +657 -0
- package/dist/cjs/report/reportViewModel.native.js.map +1 -0
- package/dist/cjs/report/savedReports.cjs +137 -0
- package/dist/cjs/report/savedReports.native.js +169 -0
- package/dist/cjs/report/savedReports.native.js.map +1 -0
- package/dist/cjs/report/useFrappeReport.cjs +184 -0
- package/dist/cjs/report/useFrappeReport.native.js +214 -0
- package/dist/cjs/report/useFrappeReport.native.js.map +1 -0
- package/dist/cjs/report/useQueryReport.cjs +201 -0
- package/dist/cjs/report/useQueryReport.native.js +233 -0
- package/dist/cjs/report/useQueryReport.native.js.map +1 -0
- package/dist/cjs/useFrappeForm.cjs +558 -0
- package/dist/cjs/useFrappeForm.native.js +714 -0
- package/dist/cjs/useFrappeForm.native.js.map +1 -0
- package/dist/esm/FrappeCalendar.mjs +4 -3
- package/dist/esm/FrappeCalendar.mjs.map +1 -1
- package/dist/esm/FrappeCalendar.native.js +4 -3
- package/dist/esm/FrappeCalendar.native.js.map +1 -1
- package/dist/esm/FrappeForm.mjs +151 -467
- package/dist/esm/FrappeForm.mjs.map +1 -1
- package/dist/esm/FrappeForm.native.js +155 -636
- package/dist/esm/FrappeForm.native.js.map +1 -1
- package/dist/esm/FrappeListView.mjs +6 -28
- package/dist/esm/FrappeListView.mjs.map +1 -1
- package/dist/esm/FrappeListView.native.js +12 -33
- package/dist/esm/FrappeListView.native.js.map +1 -1
- package/dist/esm/FrappeReportBuilder.mjs +526 -312
- package/dist/esm/FrappeReportBuilder.mjs.map +1 -1
- package/dist/esm/FrappeReportBuilder.native.js +661 -356
- package/dist/esm/FrappeReportBuilder.native.js.map +1 -1
- package/dist/esm/FrappeReportView.mjs +30 -229
- package/dist/esm/FrappeReportView.mjs.map +1 -1
- package/dist/esm/FrappeReportView.native.js +34 -278
- package/dist/esm/FrappeReportView.native.js.map +1 -1
- package/dist/esm/dependsOn.mjs +2 -2
- package/dist/esm/dependsOn.mjs.map +1 -1
- package/dist/esm/dependsOn.native.js +1 -2
- package/dist/esm/dependsOn.native.js.map +1 -1
- package/dist/esm/fields/shared/EditorPreviewPanes.mjs +2 -2
- package/dist/esm/fields/shared/EditorPreviewPanes.mjs.map +1 -1
- package/dist/esm/fields/shared/EditorPreviewPanes.native.js +2 -2
- package/dist/esm/fields/shared/EditorPreviewPanes.native.js.map +1 -1
- package/dist/esm/formEngine/docPermissions.mjs +19 -1
- package/dist/esm/formEngine/docPermissions.mjs.map +1 -1
- package/dist/esm/formEngine/docPermissions.native.js +68 -1
- package/dist/esm/formEngine/docPermissions.native.js.map +1 -1
- package/dist/esm/formEngine/index.mjs +2 -2
- package/dist/esm/formEngine/index.mjs.map +1 -1
- package/dist/esm/formEngine/index.native.js +2 -2
- package/dist/esm/formEngine/index.native.js.map +1 -1
- package/dist/esm/index.mjs +16 -4
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/index.native.js +16 -4
- package/dist/esm/index.native.js.map +1 -1
- package/dist/esm/liveErrors.mjs +8 -3
- package/dist/esm/liveErrors.mjs.map +1 -1
- package/dist/esm/liveErrors.native.js +8 -3
- package/dist/esm/liveErrors.native.js.map +1 -1
- package/dist/esm/measures.mjs +5 -0
- package/dist/esm/measures.mjs.map +1 -0
- package/dist/esm/measures.native.js +5 -0
- package/dist/esm/measures.native.js.map +1 -0
- package/dist/esm/recordShape.mjs +74 -0
- package/dist/esm/recordShape.mjs.map +1 -0
- package/dist/esm/recordShape.native.js +83 -0
- package/dist/esm/recordShape.native.js.map +1 -0
- package/dist/esm/report/ReportGrid.mjs +428 -0
- package/dist/esm/report/ReportGrid.mjs.map +1 -0
- package/dist/esm/report/ReportGrid.native.js +471 -0
- package/dist/esm/report/ReportGrid.native.js.map +1 -0
- package/dist/esm/report/ReportViewToolbar.mjs +228 -0
- package/dist/esm/report/ReportViewToolbar.mjs.map +1 -0
- package/dist/esm/report/ReportViewToolbar.native.js +264 -0
- package/dist/esm/report/ReportViewToolbar.native.js.map +1 -0
- package/dist/esm/report/queryReport.mjs +404 -0
- package/dist/esm/report/queryReport.mjs.map +1 -0
- package/dist/esm/report/queryReport.native.js +545 -0
- package/dist/esm/report/queryReport.native.js.map +1 -0
- package/dist/esm/report/queryReportColumns.mjs +105 -0
- package/dist/esm/report/queryReportColumns.mjs.map +1 -0
- package/dist/esm/report/queryReportColumns.native.js +119 -0
- package/dist/esm/report/queryReportColumns.native.js.map +1 -0
- package/dist/esm/report/reportViewModel.mjs +343 -0
- package/dist/esm/report/reportViewModel.mjs.map +1 -0
- package/dist/esm/report/reportViewModel.native.js +611 -0
- package/dist/esm/report/reportViewModel.native.js.map +1 -0
- package/dist/esm/report/savedReports.mjs +112 -0
- package/dist/esm/report/savedReports.mjs.map +1 -0
- package/dist/esm/report/savedReports.native.js +141 -0
- package/dist/esm/report/savedReports.native.js.map +1 -0
- package/dist/esm/report/useFrappeReport.mjs +158 -0
- package/dist/esm/report/useFrappeReport.mjs.map +1 -0
- package/dist/esm/report/useFrappeReport.native.js +185 -0
- package/dist/esm/report/useFrappeReport.native.js.map +1 -0
- package/dist/esm/report/useQueryReport.mjs +176 -0
- package/dist/esm/report/useQueryReport.mjs.map +1 -0
- package/dist/esm/report/useQueryReport.native.js +205 -0
- package/dist/esm/report/useQueryReport.native.js.map +1 -0
- package/dist/esm/useFrappeForm.mjs +533 -0
- package/dist/esm/useFrappeForm.mjs.map +1 -0
- package/dist/esm/useFrappeForm.native.js +686 -0
- package/dist/esm/useFrappeForm.native.js.map +1 -0
- package/dist/jsx/FrappeCalendar.mjs +4 -3
- package/dist/jsx/FrappeCalendar.mjs.map +1 -1
- package/dist/jsx/FrappeCalendar.native.js +3 -2
- package/dist/jsx/FrappeCalendar.native.js.map +1 -1
- package/dist/jsx/FrappeForm.mjs +151 -467
- package/dist/jsx/FrappeForm.mjs.map +1 -1
- package/dist/jsx/FrappeForm.native.js +152 -633
- package/dist/jsx/FrappeForm.native.js.map +1 -1
- package/dist/jsx/FrappeListView.mjs +6 -28
- package/dist/jsx/FrappeListView.mjs.map +1 -1
- package/dist/jsx/FrappeListView.native.js +11 -32
- package/dist/jsx/FrappeListView.native.js.map +1 -1
- package/dist/jsx/FrappeReportBuilder.mjs +526 -312
- package/dist/jsx/FrappeReportBuilder.mjs.map +1 -1
- package/dist/jsx/FrappeReportBuilder.native.js +658 -353
- package/dist/jsx/FrappeReportBuilder.native.js.map +1 -1
- package/dist/jsx/FrappeReportView.mjs +30 -229
- package/dist/jsx/FrappeReportView.mjs.map +1 -1
- package/dist/jsx/FrappeReportView.native.js +39 -283
- package/dist/jsx/FrappeReportView.native.js.map +1 -1
- package/dist/jsx/dependsOn.mjs +2 -2
- package/dist/jsx/dependsOn.mjs.map +1 -1
- package/dist/jsx/dependsOn.native.js +1 -2
- package/dist/jsx/dependsOn.native.js.map +1 -1
- package/dist/jsx/fields/shared/EditorPreviewPanes.mjs +2 -2
- package/dist/jsx/fields/shared/EditorPreviewPanes.mjs.map +1 -1
- package/dist/jsx/fields/shared/EditorPreviewPanes.native.js +2 -2
- package/dist/jsx/fields/shared/EditorPreviewPanes.native.js.map +1 -1
- package/dist/jsx/formEngine/docPermissions.mjs +19 -1
- package/dist/jsx/formEngine/docPermissions.mjs.map +1 -1
- package/dist/jsx/formEngine/docPermissions.native.js +69 -0
- package/dist/jsx/formEngine/docPermissions.native.js.map +1 -1
- package/dist/jsx/formEngine/index.mjs +2 -2
- package/dist/jsx/formEngine/index.mjs.map +1 -1
- package/dist/jsx/formEngine/index.native.js +2 -0
- package/dist/jsx/formEngine/index.native.js.map +1 -1
- package/dist/jsx/index.js +16 -4
- package/dist/jsx/index.js.map +1 -1
- package/dist/jsx/index.mjs +16 -4
- package/dist/jsx/index.mjs.map +1 -1
- package/dist/jsx/index.native.js +67 -7
- package/dist/jsx/index.native.js.map +1 -1
- package/dist/jsx/liveErrors.mjs +8 -3
- package/dist/jsx/liveErrors.mjs.map +1 -1
- package/dist/jsx/liveErrors.native.js +8 -2
- package/dist/jsx/liveErrors.native.js.map +1 -1
- package/dist/jsx/measures.mjs +5 -0
- package/dist/jsx/measures.mjs.map +1 -0
- package/dist/jsx/measures.native.js +34 -0
- package/dist/jsx/measures.native.js.map +1 -0
- package/dist/jsx/recordShape.mjs +74 -0
- package/dist/jsx/recordShape.mjs.map +1 -0
- package/dist/jsx/recordShape.native.js +115 -0
- package/dist/jsx/recordShape.native.js.map +1 -0
- package/dist/jsx/report/ReportGrid.mjs +428 -0
- package/dist/jsx/report/ReportGrid.mjs.map +1 -0
- package/dist/jsx/report/ReportGrid.native.js +510 -0
- package/dist/jsx/report/ReportGrid.native.js.map +1 -0
- package/dist/jsx/report/ReportViewToolbar.mjs +228 -0
- package/dist/jsx/report/ReportViewToolbar.mjs.map +1 -0
- package/dist/jsx/report/ReportViewToolbar.native.js +303 -0
- package/dist/jsx/report/ReportViewToolbar.native.js.map +1 -0
- package/dist/jsx/report/queryReport.mjs +404 -0
- package/dist/jsx/report/queryReport.mjs.map +1 -0
- package/dist/jsx/report/queryReport.native.js +588 -0
- package/dist/jsx/report/queryReport.native.js.map +1 -0
- package/dist/jsx/report/queryReportColumns.mjs +105 -0
- package/dist/jsx/report/queryReportColumns.mjs.map +1 -0
- package/dist/jsx/report/queryReportColumns.native.js +159 -0
- package/dist/jsx/report/queryReportColumns.native.js.map +1 -0
- package/dist/jsx/report/reportViewModel.mjs +343 -0
- package/dist/jsx/report/reportViewModel.mjs.map +1 -0
- package/dist/jsx/report/reportViewModel.native.js +657 -0
- package/dist/jsx/report/reportViewModel.native.js.map +1 -0
- package/dist/jsx/report/savedReports.mjs +112 -0
- package/dist/jsx/report/savedReports.mjs.map +1 -0
- package/dist/jsx/report/savedReports.native.js +169 -0
- package/dist/jsx/report/savedReports.native.js.map +1 -0
- package/dist/jsx/report/useFrappeReport.mjs +158 -0
- package/dist/jsx/report/useFrappeReport.mjs.map +1 -0
- package/dist/jsx/report/useFrappeReport.native.js +214 -0
- package/dist/jsx/report/useFrappeReport.native.js.map +1 -0
- package/dist/jsx/report/useQueryReport.mjs +176 -0
- package/dist/jsx/report/useQueryReport.mjs.map +1 -0
- package/dist/jsx/report/useQueryReport.native.js +233 -0
- package/dist/jsx/report/useQueryReport.native.js.map +1 -0
- package/dist/jsx/useFrappeForm.mjs +533 -0
- package/dist/jsx/useFrappeForm.mjs.map +1 -0
- package/dist/jsx/useFrappeForm.native.js +714 -0
- package/dist/jsx/useFrappeForm.native.js.map +1 -0
- package/package.json +16 -16
- package/src/FrappeCalendar.tsx +8 -2
- package/src/FrappeForm.stories.tsx +52 -0
- package/src/FrappeForm.tsx +176 -565
- package/src/FrappeListView.cards.stories.tsx +3 -6
- package/src/FrappeListView.tsx +15 -55
- package/src/FrappeReportBuilder.stories.tsx +34 -7
- package/src/FrappeReportBuilder.tsx +790 -380
- package/src/FrappeReportView.spec.tsx +10 -6
- package/src/FrappeReportView.stories.tsx +20 -1
- package/src/FrappeReportView.tsx +89 -415
- package/src/dependsOn.ts +4 -1
- package/src/fields/shared/EditorPreviewPanes.tsx +2 -2
- package/src/formEngine/docPermissions.spec.ts +36 -1
- package/src/formEngine/docPermissions.ts +34 -0
- package/src/formEngine/index.ts +8 -1
- package/src/frappeRemainder.designLaw.spec.ts +9 -1
- package/src/frappeRoutes.spec.tsx +9 -0
- package/src/frappeViews.designLaw.spec.ts +15 -2
- package/src/guestFallback.spec.tsx +236 -0
- package/src/index.ts +117 -16
- package/src/liveErrors.spec.ts +10 -0
- package/src/liveErrors.ts +16 -3
- package/src/measures.ts +11 -0
- package/src/recordShape.spec.ts +100 -0
- package/src/recordShape.ts +133 -0
- package/src/report/ReportGrid.spec.tsx +175 -0
- package/src/report/ReportGrid.tsx +530 -0
- package/src/report/ReportViewToolbar.spec.tsx +90 -0
- package/src/report/ReportViewToolbar.tsx +314 -0
- package/src/report/queryReport.spec.ts +483 -0
- package/src/report/queryReport.ts +722 -0
- package/src/report/queryReportColumns.tsx +123 -0
- package/src/report/reportViewModel.spec.ts +393 -0
- package/src/report/reportViewModel.ts +617 -0
- package/src/report/savedReports.ts +172 -0
- package/src/report/seam.spec.ts +216 -0
- package/src/report/useFrappeReport.ts +241 -0
- package/src/report/useQueryReport.spec.tsx +131 -0
- package/src/report/useQueryReport.ts +309 -0
- package/src/useFrappeForm.spec.tsx +209 -0
- package/src/useFrappeForm.ts +778 -0
- package/types/FrappeCalendar.d.ts.map +1 -1
- package/types/FrappeForm.d.ts +21 -1
- package/types/FrappeForm.d.ts.map +1 -1
- package/types/FrappeListView.d.ts.map +1 -1
- package/types/FrappeReportBuilder.d.ts +66 -16
- package/types/FrappeReportBuilder.d.ts.map +1 -1
- package/types/FrappeReportView.d.ts +9 -127
- package/types/FrappeReportView.d.ts.map +1 -1
- package/types/dependsOn.d.ts.map +1 -1
- package/types/formEngine/docPermissions.d.ts +14 -0
- package/types/formEngine/docPermissions.d.ts.map +1 -1
- package/types/formEngine/index.d.ts +1 -1
- package/types/formEngine/index.d.ts.map +1 -1
- package/types/index.d.ts +15 -3
- package/types/index.d.ts.map +1 -1
- package/types/liveErrors.d.ts +9 -1
- package/types/liveErrors.d.ts.map +1 -1
- package/types/measures.d.ts +3 -0
- package/types/measures.d.ts.map +1 -0
- package/types/recordShape.d.ts +45 -0
- package/types/recordShape.d.ts.map +1 -0
- package/types/report/ReportGrid.d.ts +20 -0
- package/types/report/ReportGrid.d.ts.map +1 -0
- package/types/report/ReportViewToolbar.d.ts +31 -0
- package/types/report/ReportViewToolbar.d.ts.map +1 -0
- package/types/report/queryReport.d.ts +181 -0
- package/types/report/queryReport.d.ts.map +1 -0
- package/types/report/queryReportColumns.d.ts +12 -0
- package/types/report/queryReportColumns.d.ts.map +1 -0
- package/types/report/reportViewModel.d.ts +146 -0
- package/types/report/reportViewModel.d.ts.map +1 -0
- package/types/report/savedReports.d.ts +27 -0
- package/types/report/savedReports.d.ts.map +1 -0
- package/types/report/useFrappeReport.d.ts +60 -0
- package/types/report/useFrappeReport.d.ts.map +1 -0
- package/types/report/useQueryReport.d.ts +37 -0
- package/types/report/useQueryReport.d.ts.map +1 -0
- package/types/useFrappeForm.d.ts +142 -0
- package/types/useFrappeForm.d.ts.map +1 -0
|
@@ -36,7 +36,6 @@ var import_frappe = require("@multiplatform.one/frappe");
|
|
|
36
36
|
var import_components = require("@multiplatform.one/components");
|
|
37
37
|
var import_schemaForm = require("./schemaForm/index.native.js");
|
|
38
38
|
var import_FormSidebar = require("./FormSidebar.native.js");
|
|
39
|
-
var import_db = require("@tanstack/db");
|
|
40
39
|
var import_react2 = require("@phosphor-icons/react");
|
|
41
40
|
var import_react3 = require("react");
|
|
42
41
|
var import_react_i18next = require("react-i18next");
|
|
@@ -47,70 +46,22 @@ var import_FrappeProvider = require("./FrappeProvider.native.js");
|
|
|
47
46
|
var import_FrappeReconnectIndicator = require("./FrappeReconnectIndicator.native.js");
|
|
48
47
|
var import_timeline = require("./components/timeline.native.js");
|
|
49
48
|
var import_desktop = require("@multiplatform.one/desktop");
|
|
50
|
-
var import_fetchFrom = require("./formEngine/fetchFrom.native.js");
|
|
51
|
-
var import_fieldPermissions = require("./formEngine/fieldPermissions.native.js");
|
|
52
|
-
var import_formActions = require("./formEngine/formActions.native.js");
|
|
53
|
-
var import_formLayout = require("./formEngine/formLayout.native.js");
|
|
54
|
-
var import_createPrefill = require("./formEngine/createPrefill.native.js");
|
|
55
49
|
var import_docLifecycle = require("./formEngine/docLifecycle.native.js");
|
|
56
|
-
var import_useAmendedAs = require("./formEngine/useAmendedAs.native.js");
|
|
57
|
-
var import_useDocRights = require("./formEngine/useDocRights.native.js");
|
|
58
|
-
var import_useFormEngine = require("./formEngine/useFormEngine.native.js");
|
|
59
50
|
var import_FrappeFormActions = require("./FrappeFormActions.native.js");
|
|
60
51
|
var import_frappeConnections = require("./frappeConnections.native.js");
|
|
61
52
|
var import_FrappeFormConnections = require("./FrappeFormConnections.native.js");
|
|
62
53
|
var import_FrappeNotConfigured = require("./FrappeNotConfigured.native.js");
|
|
63
54
|
var import_FrappeRowsReader = require("./FrappeRowsReader.native.js");
|
|
55
|
+
var import_liveErrors = require("./liveErrors.native.js");
|
|
56
|
+
var import_recordShape = require("./recordShape.native.js");
|
|
64
57
|
var import_frappeNavigation = require("./frappeNavigation.native.js");
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
|
|
69
|
-
return !!right[Symbol.hasInstance](left);
|
|
70
|
-
} else {
|
|
71
|
-
return left instanceof right;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
function isEmptyFieldValue(value) {
|
|
75
|
-
if (value === void 0 || value === null) return true;
|
|
76
|
-
if (typeof value === "string" && value.trim() === "") return true;
|
|
77
|
-
if (Array.isArray(value) && value.length === 0) return true;
|
|
78
|
-
return false;
|
|
79
|
-
}
|
|
80
|
-
function sectionsToLayoutFields(sections) {
|
|
81
|
-
var fields = [];
|
|
82
|
-
sections.forEach(function (section, sectionIndex) {
|
|
83
|
-
fields.push({
|
|
84
|
-
fieldname: `__section_${sectionIndex}`,
|
|
85
|
-
fieldtype: section.tab ? "Tab Break" : "Section Break",
|
|
86
|
-
label: section.label,
|
|
87
|
-
collapsible: section.collapsible ? 1 : 0
|
|
88
|
-
});
|
|
89
|
-
section.columns.forEach(function (column, columnIndex) {
|
|
90
|
-
if (columnIndex > 0) {
|
|
91
|
-
fields.push({
|
|
92
|
-
fieldname: `__column_${sectionIndex}_${columnIndex}`,
|
|
93
|
-
fieldtype: "Column Break"
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
fields.push(...column.fields);
|
|
97
|
-
});
|
|
98
|
-
});
|
|
99
|
-
return fields;
|
|
100
|
-
}
|
|
101
|
-
var documentBookkeeping = /* @__PURE__ */new Set(["name", "owner", "creation", "modified", "modified_by", "docstatus", "idx", "doctype", "_user_tags", "_comments", "_assign", "_liked_by", "_seen"]);
|
|
102
|
-
function fieldsFromDocument(doc) {
|
|
103
|
-
return Object.entries(doc).filter(function (param) {
|
|
104
|
-
var [key, value] = param;
|
|
105
|
-
return !key.startsWith("$") && !documentBookkeeping.has(key) && (value === null || typeof value === "string" || typeof value === "number");
|
|
106
|
-
}).map(function (param) {
|
|
107
|
-
var [key, value] = param;
|
|
58
|
+
var import_useFrappeForm = require("./useFrappeForm.native.js");
|
|
59
|
+
function schemaFieldsFromRecord(doc) {
|
|
60
|
+
return (0, import_recordShape.fieldsFromRecord)(doc).map(function (field) {
|
|
108
61
|
return {
|
|
109
|
-
name:
|
|
110
|
-
label:
|
|
111
|
-
|
|
112
|
-
}),
|
|
113
|
-
type: typeof value === "number" ? Number.isInteger(value) ? "Int" : "Float" : "Data",
|
|
62
|
+
name: field.fieldname,
|
|
63
|
+
label: field.label,
|
|
64
|
+
type: field.fieldtype,
|
|
114
65
|
readOnly: true
|
|
115
66
|
};
|
|
116
67
|
});
|
|
@@ -280,21 +231,50 @@ function FrappeFormRoute(param) {
|
|
|
280
231
|
}
|
|
281
232
|
});
|
|
282
233
|
}
|
|
283
|
-
function FrappeFormBody(
|
|
234
|
+
function FrappeFormBody(props) {
|
|
235
|
+
if (props.form) return /* @__PURE__ */(0, import_jsx_runtime.jsx)(FrappeFormView, {
|
|
236
|
+
...props,
|
|
237
|
+
form: props.form
|
|
238
|
+
});
|
|
239
|
+
return /* @__PURE__ */(0, import_jsx_runtime.jsx)(FrappeFormOwned, {
|
|
240
|
+
...props
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
function FrappeFormOwned(props) {
|
|
244
|
+
var _props_baseURL, _props_showSidebar;
|
|
245
|
+
var config = (0, import_FrappeProvider.useFrappeConfig)();
|
|
246
|
+
if (!((_props_baseURL = props.baseURL) !== null && _props_baseURL !== void 0 ? _props_baseURL : config === null || config === void 0 ? void 0 : config.baseURL)) {
|
|
247
|
+
throw new Error("FrappeForm requires baseURL prop or FrappeProvider with baseURL");
|
|
248
|
+
}
|
|
249
|
+
var form = (0, import_useFrappeForm.useFrappeForm)({
|
|
250
|
+
doctype: props.doctype,
|
|
251
|
+
name: props.name,
|
|
252
|
+
baseURL: props.baseURL,
|
|
253
|
+
auth: props.auth,
|
|
254
|
+
syncOptions: props.syncOptions,
|
|
255
|
+
fields: props.fields,
|
|
256
|
+
sections: props.sections,
|
|
257
|
+
hideFields: props.hideFields,
|
|
258
|
+
hideSections: props.hideSections,
|
|
259
|
+
roles: props.roles,
|
|
260
|
+
readShares: (_props_showSidebar = props.showSidebar) !== null && _props_showSidebar !== void 0 ? _props_showSidebar : true,
|
|
261
|
+
disabled: props.disabled,
|
|
262
|
+
initialDoc: props.initialDoc
|
|
263
|
+
});
|
|
264
|
+
return /* @__PURE__ */(0, import_jsx_runtime.jsx)(FrappeFormView, {
|
|
265
|
+
...props,
|
|
266
|
+
form
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
function FrappeFormView(param) {
|
|
284
270
|
var {
|
|
285
|
-
|
|
286
|
-
auth,
|
|
287
|
-
syncOptions,
|
|
271
|
+
form,
|
|
288
272
|
doctype,
|
|
289
273
|
name,
|
|
290
|
-
fields,
|
|
291
274
|
children,
|
|
292
275
|
overrides,
|
|
293
|
-
hideFields,
|
|
294
276
|
readOnlyFields,
|
|
295
|
-
sections,
|
|
296
277
|
order,
|
|
297
|
-
roles,
|
|
298
278
|
onSave,
|
|
299
279
|
onCancel,
|
|
300
280
|
onDelete,
|
|
@@ -303,81 +283,57 @@ function FrappeFormBody(param) {
|
|
|
303
283
|
showToolbar = true,
|
|
304
284
|
showSidebar = true,
|
|
305
285
|
showTimeline = true,
|
|
286
|
+
showBanners = true,
|
|
306
287
|
disabled = false,
|
|
307
288
|
sectionHeadingLevel,
|
|
308
289
|
connections,
|
|
309
290
|
showConnections = true,
|
|
310
|
-
|
|
291
|
+
extraTabs,
|
|
292
|
+
renderFieldWrapper,
|
|
293
|
+
renderTab,
|
|
311
294
|
loadingFallback,
|
|
312
295
|
notFoundFallback,
|
|
313
296
|
errorFallback,
|
|
314
297
|
routePage
|
|
315
298
|
} = param;
|
|
316
|
-
var _ref
|
|
299
|
+
var _ref;
|
|
317
300
|
var _tabItems_, _tabItems_1;
|
|
318
|
-
var config = (0, import_FrappeProvider.useFrappeConfig)();
|
|
319
301
|
var {
|
|
320
302
|
knobProps
|
|
321
303
|
} = (0, import_theme.useResolvedKnobs)();
|
|
322
304
|
var {
|
|
323
305
|
t
|
|
324
306
|
} = (0, import_react_i18next.useTranslation)();
|
|
325
|
-
var seedDoc = name && initialDoc && initialDoc.name === name ? initialDoc : void 0;
|
|
326
|
-
var seedRef = (0, import_react3.useRef)(seedDoc);
|
|
327
|
-
seedRef.current = seedDoc;
|
|
328
|
-
var [localDoc, setLocalDoc] = (0, import_react3.useState)(function () {
|
|
329
|
-
return seedDoc !== null && seedDoc !== void 0 ? seedDoc : {};
|
|
330
|
-
});
|
|
331
|
-
var [baselineDoc, setBaselineDoc] = (0, import_react3.useState)(function () {
|
|
332
|
-
return seedDoc;
|
|
333
|
-
});
|
|
334
|
-
var [docError, setDocError] = (0, import_react3.useState)(null);
|
|
335
|
-
var [conflictFields, setConflictFields] = (0, import_react3.useState)([]);
|
|
336
|
-
var [wasDeleted, setWasDeleted] = (0, import_react3.useState)(false);
|
|
337
|
-
var [isSubmitting, setIsSubmitting] = (0, import_react3.useState)(false);
|
|
338
|
-
var [errors, setErrors] = (0, import_react3.useState)({});
|
|
339
|
-
var [activeTab, setActiveTab] = (0, import_react3.useState)(void 0);
|
|
340
|
-
var everLoadedRef = (0, import_react3.useRef)(false);
|
|
341
|
-
var localDocRef = (0, import_react3.useRef)(localDoc);
|
|
342
|
-
localDocRef.current = localDoc;
|
|
343
|
-
var baselineRef = (0, import_react3.useRef)(baselineDoc);
|
|
344
|
-
baselineRef.current = baselineDoc;
|
|
345
|
-
var createDraftRef = (0, import_react3.useRef)(void 0);
|
|
346
|
-
var finalBaseURL = baseURL !== null && baseURL !== void 0 ? baseURL : config === null || config === void 0 ? void 0 : config.baseURL;
|
|
347
|
-
var finalAuth = auth !== null && auth !== void 0 ? auth : config === null || config === void 0 ? void 0 : config.auth;
|
|
348
|
-
var finalSyncOptions = syncOptions !== null && syncOptions !== void 0 ? syncOptions : config === null || config === void 0 ? void 0 : config.syncOptions;
|
|
349
|
-
if (!finalBaseURL) {
|
|
350
|
-
throw new Error("FrappeForm requires baseURL prop or FrappeProvider with baseURL");
|
|
351
|
-
}
|
|
352
|
-
var frappeConfig = (0, import_react3.useMemo)(function () {
|
|
353
|
-
return {
|
|
354
|
-
baseURL: finalBaseURL,
|
|
355
|
-
socketPort: config === null || config === void 0 ? void 0 : config.socketPort,
|
|
356
|
-
siteName: config === null || config === void 0 ? void 0 : config.siteName,
|
|
357
|
-
socketBaseURL: config === null || config === void 0 ? void 0 : config.socketBaseURL,
|
|
358
|
-
auth: finalAuth,
|
|
359
|
-
syncOptions: finalSyncOptions,
|
|
360
|
-
realtime: config === null || config === void 0 ? void 0 : config.realtime,
|
|
361
|
-
fixtures: config === null || config === void 0 ? void 0 : config.fixtures
|
|
362
|
-
};
|
|
363
|
-
}, [finalBaseURL, config === null || config === void 0 ? void 0 : config.socketPort, config === null || config === void 0 ? void 0 : config.siteName, config === null || config === void 0 ? void 0 : config.socketBaseURL, config === null || config === void 0 ? void 0 : config.realtime, finalAuth, finalSyncOptions, config === null || config === void 0 ? void 0 : config.fixtures]);
|
|
364
307
|
var {
|
|
365
308
|
meta,
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
309
|
+
metaLoading: isMetaLoading,
|
|
310
|
+
metaError,
|
|
311
|
+
doc: localDoc,
|
|
312
|
+
baseline: baselineDoc,
|
|
313
|
+
setValue,
|
|
314
|
+
errors,
|
|
315
|
+
isSubmitting,
|
|
316
|
+
docstatus,
|
|
317
|
+
isSubmittable,
|
|
318
|
+
rights,
|
|
319
|
+
rightsPending,
|
|
320
|
+
canWrite: canWriteRecord,
|
|
321
|
+
wasDeleted,
|
|
322
|
+
conflictFields,
|
|
323
|
+
docError,
|
|
324
|
+
tabs: formTabs,
|
|
325
|
+
promptNamed,
|
|
326
|
+
activeTab,
|
|
327
|
+
setActiveTab,
|
|
328
|
+
amendedAs
|
|
329
|
+
} = form;
|
|
330
|
+
var frappeConfig = form.connection;
|
|
370
331
|
var isCreate = !name;
|
|
371
|
-
var
|
|
372
|
-
var layoutFields = (0, import_react3.useMemo)(function () {
|
|
373
|
-
if (!meta) return void 0;
|
|
374
|
-
return sections ? sectionsToLayoutFields(sections) : meta.fields;
|
|
375
|
-
}, [meta, sections]);
|
|
376
|
-
var amendedAs = (0, import_useAmendedAs.useAmendedAs)(isSubmittable && docstatus === 2 ? frappeConfig : void 0, doctype, name);
|
|
332
|
+
var hasUnsavedChanges = form.isDirty;
|
|
377
333
|
var readsWithoutMeta = !children && !meta && Boolean(metaError) && Boolean(name);
|
|
378
334
|
var recordTabs = (0, import_react3.useMemo)(function () {
|
|
379
335
|
if (!readsWithoutMeta || !baselineDoc) return void 0;
|
|
380
|
-
var recordFields =
|
|
336
|
+
var recordFields = schemaFieldsFromRecord(baselineDoc);
|
|
381
337
|
return [{
|
|
382
338
|
key: "__details",
|
|
383
339
|
label: t("Details"),
|
|
@@ -391,97 +347,7 @@ function FrappeFormBody(param) {
|
|
|
391
347
|
}
|
|
392
348
|
}];
|
|
393
349
|
}, [readsWithoutMeta, baselineDoc, t]);
|
|
394
|
-
var
|
|
395
|
-
var fetchMap = (0, import_react3.useMemo)(function () {
|
|
396
|
-
return meta ? (0, import_fetchFrom.buildFetchMap)(meta.fields) : void 0;
|
|
397
|
-
}, [meta]);
|
|
398
|
-
var handleDocSyncError = (0, import_react3.useCallback)(function (err) {
|
|
399
|
-
setDocError(_instanceof(err, Error) ? err : new Error(String(err)));
|
|
400
|
-
}, []);
|
|
401
|
-
var docCollection = (0, import_frappe.useFrappeCollection)(name ? frappeConfig : void 0, doctype, {
|
|
402
|
-
fields,
|
|
403
|
-
filters: name ? {
|
|
404
|
-
name
|
|
405
|
-
} : void 0,
|
|
406
|
-
onSyncError: handleDocSyncError
|
|
407
|
-
});
|
|
408
|
-
var {
|
|
409
|
-
data: rawDocData,
|
|
410
|
-
isLoading: isDocLoading
|
|
411
|
-
} = (0, import_frappe.useLiveQuery)(function (q) {
|
|
412
|
-
if (!docCollection || !name) return null;
|
|
413
|
-
return q.from({
|
|
414
|
-
_doc: docCollection
|
|
415
|
-
}).where(function (param2) {
|
|
416
|
-
var {
|
|
417
|
-
_doc
|
|
418
|
-
} = param2;
|
|
419
|
-
if (!_doc) return (0, import_db.eq)(name, name);
|
|
420
|
-
return (0, import_db.eq)(_doc.name, name);
|
|
421
|
-
});
|
|
422
|
-
}, [docCollection, name]);
|
|
423
|
-
var liveDoc = (0, import_react3.useMemo)(function () {
|
|
424
|
-
var _arr_;
|
|
425
|
-
var arr = Array.isArray(rawDocData) ? rawDocData : rawDocData ? [rawDocData] : [];
|
|
426
|
-
var doc = (_arr_ = arr[0]) !== null && _arr_ !== void 0 ? _arr_ : null;
|
|
427
|
-
return doc ? {
|
|
428
|
-
data: doc,
|
|
429
|
-
isLoading: isDocLoading
|
|
430
|
-
} : name ? {
|
|
431
|
-
data: null,
|
|
432
|
-
isLoading: isDocLoading
|
|
433
|
-
} : null;
|
|
434
|
-
}, [rawDocData, isDocLoading, name]);
|
|
435
|
-
var collection = (0, import_frappe.useFrappeCollection)(name ? void 0 : frappeConfig, doctype, {
|
|
436
|
-
fields
|
|
437
|
-
});
|
|
438
|
-
var shareCollection = (0, import_frappe.useFrappeCollection)(showSidebar && name ? frappeConfig : void 0, "DocShare", {
|
|
439
|
-
fields: ["name", "user", "everyone", "read", "write", "share"],
|
|
440
|
-
filters: {
|
|
441
|
-
share_doctype: doctype,
|
|
442
|
-
share_name: name
|
|
443
|
-
}
|
|
444
|
-
});
|
|
445
|
-
var {
|
|
446
|
-
data: rawShareRows
|
|
447
|
-
} = (0, import_frappe.useLiveQuery)(function (q) {
|
|
448
|
-
return shareCollection ? q.from({
|
|
449
|
-
_share: shareCollection
|
|
450
|
-
}) : null;
|
|
451
|
-
}, [shareCollection]);
|
|
452
|
-
var shareRows = (0, import_react3.useMemo)(function () {
|
|
453
|
-
return shareCollection ? rawShareRows !== null && rawShareRows !== void 0 ? rawShareRows : [] : void 0;
|
|
454
|
-
}, [shareCollection, rawShareRows]);
|
|
455
|
-
var owner = baselineDoc === null || baselineDoc === void 0 ? void 0 : baselineDoc.owner;
|
|
456
|
-
var {
|
|
457
|
-
rights,
|
|
458
|
-
pending: rightsPending,
|
|
459
|
-
roles: effectiveRoles
|
|
460
|
-
} = (0, import_useDocRights.useDocRights)(frappeConfig, meta, {
|
|
461
|
-
roles,
|
|
462
|
-
owner: typeof owner === "string" ? owner : void 0,
|
|
463
|
-
shares: shareRows
|
|
464
|
-
});
|
|
465
|
-
var permLevels = (0, import_react3.useMemo)(function () {
|
|
466
|
-
return (0, import_fieldPermissions.buildPermLevelMatrix)(meta === null || meta === void 0 ? void 0 : meta.permissions, effectiveRoles);
|
|
467
|
-
}, [meta === null || meta === void 0 ? void 0 : meta.permissions, effectiveRoles]);
|
|
468
|
-
var formTabs = (0, import_react3.useMemo)(function () {
|
|
469
|
-
if (!layoutFields) return void 0;
|
|
470
|
-
return (0, import_formLayout.buildFormTabs)({
|
|
471
|
-
fields: layoutFields,
|
|
472
|
-
doc: {
|
|
473
|
-
...localDoc,
|
|
474
|
-
__islocal: isCreate ? 1 : 0
|
|
475
|
-
},
|
|
476
|
-
docstatus,
|
|
477
|
-
formReadOnly: !!(meta === null || meta === void 0 ? void 0 : meta.read_only),
|
|
478
|
-
isCreate,
|
|
479
|
-
detailsLabel: t("Details"),
|
|
480
|
-
permLevels,
|
|
481
|
-
hiddenFields: hideFields
|
|
482
|
-
});
|
|
483
|
-
}, [layoutFields, localDoc, docstatus, meta === null || meta === void 0 ? void 0 : meta.read_only, isCreate, permLevels, hideFields, t]);
|
|
484
|
-
var assignmentCollection = (0, import_frappe.useFrappeCollection)(showSidebar && name && !frappeConfig.fixtures ? frappeConfig : void 0, "ToDo", {
|
|
350
|
+
var assignmentCollection = (0, import_frappe.useFrappeCollection)(showSidebar && name && frappeConfig && !frappeConfig.fixtures ? frappeConfig : void 0, "ToDo", {
|
|
485
351
|
fields: ["name", "allocated_to", "status", "reference_type", "reference_name"],
|
|
486
352
|
filters: {
|
|
487
353
|
reference_type: doctype,
|
|
@@ -499,16 +365,6 @@ function FrappeFormBody(param) {
|
|
|
499
365
|
var assignmentRows = (0, import_react3.useMemo)(function () {
|
|
500
366
|
return assignmentCollection ? rawAssignmentRows !== null && rawAssignmentRows !== void 0 ? rawAssignmentRows : [] : void 0;
|
|
501
367
|
}, [assignmentCollection, rawAssignmentRows]);
|
|
502
|
-
(0, import_react3.useEffect)(function () {
|
|
503
|
-
everLoadedRef.current = false;
|
|
504
|
-
if (name) createDraftRef.current = void 0;
|
|
505
|
-
setWasDeleted(false);
|
|
506
|
-
setConflictFields([]);
|
|
507
|
-
setDocError(null);
|
|
508
|
-
var seed = seedRef.current;
|
|
509
|
-
setBaselineDoc(seed);
|
|
510
|
-
if (seed) setLocalDoc(seed);
|
|
511
|
-
}, [doctype, name]);
|
|
512
368
|
var effectiveConnections = (0, import_react3.useMemo)(function () {
|
|
513
369
|
return connections !== null && connections !== void 0 ? connections : (0, import_frappeConnections.connectionsFromMeta)(meta);
|
|
514
370
|
}, [connections, meta]);
|
|
@@ -576,395 +432,48 @@ function FrappeFormBody(param) {
|
|
|
576
432
|
var _connectionSnapshots_link_doctype;
|
|
577
433
|
return (_ref2 = (_connectionSnapshots_link_doctype = connectionSnapshots[link.doctype]) === null || _connectionSnapshots_link_doctype === void 0 ? void 0 : _connectionSnapshots_link_doctype.isLoading) !== null && _ref2 !== void 0 ? _ref2 : true;
|
|
578
434
|
});
|
|
579
|
-
(0, import_frappe.useFrappeDoctypeEvents)(name ? frappeConfig : void 0, doctype, function (event) {
|
|
580
|
-
if (event.type !== "doc_deleted") return;
|
|
581
|
-
var payload = event.payload;
|
|
582
|
-
if ((payload === null || payload === void 0 ? void 0 : payload.name) === name) setWasDeleted(true);
|
|
583
|
-
}, Boolean(name));
|
|
584
|
-
(0, import_react3.useEffect)(function () {
|
|
585
|
-
var incoming = liveDoc === null || liveDoc === void 0 ? void 0 : liveDoc.data;
|
|
586
|
-
if (incoming) {
|
|
587
|
-
everLoadedRef.current = true;
|
|
588
|
-
setWasDeleted(false);
|
|
589
|
-
var baseline = baselineRef.current;
|
|
590
|
-
if (!baseline) {
|
|
591
|
-
setBaselineDoc(incoming);
|
|
592
|
-
setLocalDoc(incoming);
|
|
593
|
-
return;
|
|
594
|
-
}
|
|
595
|
-
var local = localDocRef.current;
|
|
596
|
-
var merged = {
|
|
597
|
-
...incoming
|
|
598
|
-
};
|
|
599
|
-
var newConflicts = [];
|
|
600
|
-
var _iteratorNormalCompletion = true,
|
|
601
|
-
_didIteratorError = false,
|
|
602
|
-
_iteratorError = void 0;
|
|
603
|
-
try {
|
|
604
|
-
for (var _iterator = Object.keys(local)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
605
|
-
var key = _step.value;
|
|
606
|
-
var localValue = local[key];
|
|
607
|
-
if (localValue === baseline[key]) continue;
|
|
608
|
-
merged[key] = localValue;
|
|
609
|
-
var remote = incoming[key];
|
|
610
|
-
if (remote !== baseline[key] && remote !== localValue) newConflicts.push(key);
|
|
611
|
-
}
|
|
612
|
-
} catch (err) {
|
|
613
|
-
_didIteratorError = true;
|
|
614
|
-
_iteratorError = err;
|
|
615
|
-
} finally {
|
|
616
|
-
try {
|
|
617
|
-
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
618
|
-
_iterator.return();
|
|
619
|
-
}
|
|
620
|
-
} finally {
|
|
621
|
-
if (_didIteratorError) {
|
|
622
|
-
throw _iteratorError;
|
|
623
|
-
}
|
|
624
|
-
}
|
|
625
|
-
}
|
|
626
|
-
setBaselineDoc(incoming);
|
|
627
|
-
setLocalDoc(merged);
|
|
628
|
-
if (newConflicts.length > 0) {
|
|
629
|
-
setConflictFields(function (prev) {
|
|
630
|
-
return Array.from(/* @__PURE__ */new Set([...prev, ...newConflicts]));
|
|
631
|
-
});
|
|
632
|
-
}
|
|
633
|
-
} else if (name && everLoadedRef.current && !(liveDoc === null || liveDoc === void 0 ? void 0 : liveDoc.isLoading)) {
|
|
634
|
-
setWasDeleted(true);
|
|
635
|
-
} else if (!name) {
|
|
636
|
-
var _createDraftRef_current;
|
|
637
|
-
if (((_createDraftRef_current = createDraftRef.current) === null || _createDraftRef_current === void 0 ? void 0 : _createDraftRef_current.doctype) !== doctype) {
|
|
638
|
-
createDraftRef.current = {
|
|
639
|
-
doctype,
|
|
640
|
-
values: (0, import_createPrefill.takeCreatePrefill)(doctype)
|
|
641
|
-
};
|
|
642
|
-
}
|
|
643
|
-
setLocalDoc({
|
|
644
|
-
...createDraftRef.current.values,
|
|
645
|
-
doctype
|
|
646
|
-
});
|
|
647
|
-
}
|
|
648
|
-
}, [liveDoc === null || liveDoc === void 0 ? void 0 : liveDoc.data, liveDoc === null || liveDoc === void 0 ? void 0 : liveDoc.isLoading, doctype, name]);
|
|
649
|
-
var dirtyFieldNames = (0, import_react3.useMemo)(function () {
|
|
650
|
-
var local = localDoc;
|
|
651
|
-
var base = baselineDoc;
|
|
652
|
-
var dirty = [];
|
|
653
|
-
var _iteratorNormalCompletion = true,
|
|
654
|
-
_didIteratorError = false,
|
|
655
|
-
_iteratorError = void 0;
|
|
656
|
-
try {
|
|
657
|
-
for (var _iterator = Object.keys(local)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
658
|
-
var key = _step.value;
|
|
659
|
-
if (key === "doctype" || key === "name") continue;
|
|
660
|
-
if (base ? local[key] !== base[key] : local[key] !== void 0) dirty.push(key);
|
|
661
|
-
}
|
|
662
|
-
} catch (err) {
|
|
663
|
-
_didIteratorError = true;
|
|
664
|
-
_iteratorError = err;
|
|
665
|
-
} finally {
|
|
666
|
-
try {
|
|
667
|
-
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
668
|
-
_iterator.return();
|
|
669
|
-
}
|
|
670
|
-
} finally {
|
|
671
|
-
if (_didIteratorError) {
|
|
672
|
-
throw _iteratorError;
|
|
673
|
-
}
|
|
674
|
-
}
|
|
675
|
-
}
|
|
676
|
-
return dirty;
|
|
677
|
-
}, [localDoc, baselineDoc]);
|
|
678
|
-
var hasUnsavedChanges = dirtyFieldNames.length > 0;
|
|
679
|
-
var runFetchFrom = function runFetchFrom2(field, value) {
|
|
680
|
-
var rules = fetchMap === null || fetchMap === void 0 ? void 0 : fetchMap.get(field);
|
|
681
|
-
if (!rules || rules.length === 0) return;
|
|
682
|
-
var applyPatch = function applyPatch2(fetched2) {
|
|
683
|
-
setLocalDoc(function (prev) {
|
|
684
|
-
var current = prev;
|
|
685
|
-
if (current[field] !== value) return prev;
|
|
686
|
-
var patch = (0, import_fetchFrom.applyFetchedValues)(rules, fetched2, current);
|
|
687
|
-
return Object.keys(patch).length > 0 ? {
|
|
688
|
-
...current,
|
|
689
|
-
...patch
|
|
690
|
-
} : prev;
|
|
691
|
-
});
|
|
692
|
-
};
|
|
693
|
-
if (isEmptyFieldValue(value)) {
|
|
694
|
-
applyPatch({});
|
|
695
|
-
return;
|
|
696
|
-
}
|
|
697
|
-
var linkField = meta === null || meta === void 0 ? void 0 : meta.fields.find(function (metaField) {
|
|
698
|
-
return metaField.fieldname === field;
|
|
699
|
-
});
|
|
700
|
-
var targetDoctype = typeof (linkField === null || linkField === void 0 ? void 0 : linkField.options) === "string" ? linkField.options : "";
|
|
701
|
-
if (!targetDoctype) return;
|
|
702
|
-
var sources = Array.from(new Set(rules.map(function (rule) {
|
|
703
|
-
return rule.source;
|
|
704
|
-
})));
|
|
705
|
-
var fixtures = frappeConfig.fixtures;
|
|
706
|
-
var fetched = fixtures ? fixtures.getDoc(targetDoctype, String(value), sources).then(function (doc) {
|
|
707
|
-
return doc !== null && doc !== void 0 ? doc : {};
|
|
708
|
-
}) : (0, import_formActions.validateLink)((0, import_formActions.createHttpClient)(frappeConfig), targetDoctype, String(value), sources);
|
|
709
|
-
fetched.then(applyPatch).catch(function () {
|
|
710
|
-
return void 0;
|
|
711
|
-
});
|
|
712
|
-
};
|
|
713
|
-
var setValue = function setValue2(field, value) {
|
|
714
|
-
setLocalDoc(function (prev) {
|
|
715
|
-
return {
|
|
716
|
-
...prev,
|
|
717
|
-
[field]: value
|
|
718
|
-
};
|
|
719
|
-
});
|
|
720
|
-
setErrors(function (prev) {
|
|
721
|
-
var newErrors = {
|
|
722
|
-
...prev
|
|
723
|
-
};
|
|
724
|
-
delete newErrors[String(field)];
|
|
725
|
-
return newErrors;
|
|
726
|
-
});
|
|
727
|
-
runFetchFrom(String(field), value);
|
|
728
|
-
};
|
|
729
|
-
var validateRequiredFields = function validateRequiredFields2() {
|
|
730
|
-
if (!formTabs) return {};
|
|
731
|
-
var validationErrors = {};
|
|
732
|
-
var doc = localDoc;
|
|
733
|
-
if (promptNamed && isEmptyFieldValue(doc.name)) {
|
|
734
|
-
validationErrors.name = t("Name is required");
|
|
735
|
-
}
|
|
736
|
-
var _iteratorNormalCompletion = true,
|
|
737
|
-
_didIteratorError = false,
|
|
738
|
-
_iteratorError = void 0;
|
|
739
|
-
try {
|
|
740
|
-
for (var _iterator = formTabs[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
741
|
-
var tab = _step.value;
|
|
742
|
-
var _iteratorNormalCompletion1 = true,
|
|
743
|
-
_didIteratorError1 = false,
|
|
744
|
-
_iteratorError1 = void 0;
|
|
745
|
-
try {
|
|
746
|
-
for (var _iterator1 = tab.schema.fields[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true) {
|
|
747
|
-
var field = _step1.value;
|
|
748
|
-
if (!field.required) continue;
|
|
749
|
-
if (isEmptyFieldValue(doc[field.name])) {
|
|
750
|
-
validationErrors[field.name] = t("{{label}} is required", {
|
|
751
|
-
label: field.label || field.name
|
|
752
|
-
});
|
|
753
|
-
}
|
|
754
|
-
}
|
|
755
|
-
} catch (err) {
|
|
756
|
-
_didIteratorError1 = true;
|
|
757
|
-
_iteratorError1 = err;
|
|
758
|
-
} finally {
|
|
759
|
-
try {
|
|
760
|
-
if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
|
|
761
|
-
_iterator1.return();
|
|
762
|
-
}
|
|
763
|
-
} finally {
|
|
764
|
-
if (_didIteratorError1) {
|
|
765
|
-
throw _iteratorError1;
|
|
766
|
-
}
|
|
767
|
-
}
|
|
768
|
-
}
|
|
769
|
-
}
|
|
770
|
-
} catch (err) {
|
|
771
|
-
_didIteratorError = true;
|
|
772
|
-
_iteratorError = err;
|
|
773
|
-
} finally {
|
|
774
|
-
try {
|
|
775
|
-
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
776
|
-
_iterator.return();
|
|
777
|
-
}
|
|
778
|
-
} finally {
|
|
779
|
-
if (_didIteratorError) {
|
|
780
|
-
throw _iteratorError;
|
|
781
|
-
}
|
|
782
|
-
}
|
|
783
|
-
}
|
|
784
|
-
return validationErrors;
|
|
785
|
-
};
|
|
786
|
-
var canWriteRecord = isCreate ? rights.create : rights.write;
|
|
787
435
|
var handleSave = async function handleSave2() {
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
}
|
|
794
|
-
setIsSubmitting(true);
|
|
795
|
-
setErrors({});
|
|
796
|
-
try {
|
|
797
|
-
if (name) {
|
|
798
|
-
if (!docCollection) return;
|
|
799
|
-
var changedFields = dirtyFieldNames;
|
|
800
|
-
if (changedFields.length > 0) {
|
|
801
|
-
var local = localDoc;
|
|
802
|
-
var tx = docCollection.update(name, function (draft) {
|
|
803
|
-
var _iteratorNormalCompletion2 = true,
|
|
804
|
-
_didIteratorError2 = false,
|
|
805
|
-
_iteratorError2 = void 0;
|
|
806
|
-
try {
|
|
807
|
-
for (var _iterator2 = changedFields[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
|
|
808
|
-
var key = _step2.value;
|
|
809
|
-
draft[key] = local[key];
|
|
810
|
-
}
|
|
811
|
-
} catch (err) {
|
|
812
|
-
_didIteratorError2 = true;
|
|
813
|
-
_iteratorError2 = err;
|
|
814
|
-
} finally {
|
|
815
|
-
try {
|
|
816
|
-
if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
|
|
817
|
-
_iterator2.return();
|
|
818
|
-
}
|
|
819
|
-
} finally {
|
|
820
|
-
if (_didIteratorError2) {
|
|
821
|
-
throw _iteratorError2;
|
|
822
|
-
}
|
|
823
|
-
}
|
|
824
|
-
}
|
|
825
|
-
});
|
|
826
|
-
await tx.isPersisted.promise;
|
|
827
|
-
}
|
|
828
|
-
setConflictFields([]);
|
|
829
|
-
} else {
|
|
830
|
-
var _localDoc_name, _ref2;
|
|
831
|
-
var _getFrappeSyncModule;
|
|
832
|
-
if (!collection) return;
|
|
833
|
-
var temporaryName = (_localDoc_name = localDoc.name) !== null && _localDoc_name !== void 0 ? _localDoc_name : `new-${Date.now()}`;
|
|
834
|
-
var docToInsert = {
|
|
835
|
-
...localDoc,
|
|
836
|
-
doctype,
|
|
837
|
-
name: temporaryName
|
|
838
|
-
};
|
|
839
|
-
var tx1 = collection.insert(docToInsert);
|
|
840
|
-
await tx1.isPersisted.promise;
|
|
841
|
-
var createdName = (_ref2 = (_getFrappeSyncModule = (0, import_frappe.getFrappeSyncModule)(frappeConfig)) === null || _getFrappeSyncModule === void 0 ? void 0 : _getFrappeSyncModule.createdName(temporaryName)) !== null && _ref2 !== void 0 ? _ref2 : temporaryName;
|
|
842
|
-
onSave === null || onSave === void 0 ? void 0 : onSave({
|
|
843
|
-
...localDoc,
|
|
844
|
-
name: createdName
|
|
845
|
-
});
|
|
846
|
-
return;
|
|
847
|
-
}
|
|
848
|
-
onSave === null || onSave === void 0 ? void 0 : onSave(localDoc);
|
|
849
|
-
} catch (err1) {
|
|
850
|
-
var e = err1;
|
|
851
|
-
if ((e === null || e === void 0 ? void 0 : e.exc_type) === "ValidationError") {
|
|
852
|
-
var validationErrors = {};
|
|
853
|
-
if (e._server_messages) {
|
|
854
|
-
try {
|
|
855
|
-
var messages = JSON.parse(e._server_messages);
|
|
856
|
-
var _iteratorNormalCompletion = true,
|
|
857
|
-
_didIteratorError = false,
|
|
858
|
-
_iteratorError = void 0;
|
|
859
|
-
try {
|
|
860
|
-
for (var _iterator = messages[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
861
|
-
var msg = _step.value;
|
|
862
|
-
var parsed = typeof msg === "string" ? JSON.parse(msg) : msg;
|
|
863
|
-
if (parsed.message) {
|
|
864
|
-
validationErrors.general = parsed.message;
|
|
865
|
-
}
|
|
866
|
-
}
|
|
867
|
-
} catch (err) {
|
|
868
|
-
_didIteratorError = true;
|
|
869
|
-
_iteratorError = err;
|
|
870
|
-
} finally {
|
|
871
|
-
try {
|
|
872
|
-
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
873
|
-
_iterator.return();
|
|
874
|
-
}
|
|
875
|
-
} finally {
|
|
876
|
-
if (_didIteratorError) {
|
|
877
|
-
throw _iteratorError;
|
|
878
|
-
}
|
|
879
|
-
}
|
|
880
|
-
}
|
|
881
|
-
} catch (unused) {
|
|
882
|
-
validationErrors.general = t("Validation error occurred");
|
|
883
|
-
}
|
|
884
|
-
}
|
|
885
|
-
setErrors(validationErrors);
|
|
886
|
-
} else {
|
|
887
|
-
setErrors({
|
|
888
|
-
general: (e === null || e === void 0 ? void 0 : e.message) || t("Failed to save document")
|
|
889
|
-
});
|
|
890
|
-
}
|
|
891
|
-
} finally {
|
|
892
|
-
setIsSubmitting(false);
|
|
893
|
-
}
|
|
436
|
+
var saved = await form.save();
|
|
437
|
+
if (!saved) return;
|
|
438
|
+
onSave === null || onSave === void 0 ? void 0 : onSave(isCreate ? {
|
|
439
|
+
...localDoc,
|
|
440
|
+
name: saved
|
|
441
|
+
} : localDoc);
|
|
894
442
|
};
|
|
895
443
|
var handleCancel = function handleCancel2() {
|
|
896
|
-
|
|
897
|
-
setLocalDoc(baselineDoc);
|
|
898
|
-
} else if (liveDoc === null || liveDoc === void 0 ? void 0 : liveDoc.data) {
|
|
899
|
-
setLocalDoc(liveDoc.data);
|
|
900
|
-
} else {
|
|
901
|
-
setLocalDoc({
|
|
902
|
-
doctype
|
|
903
|
-
});
|
|
904
|
-
}
|
|
905
|
-
setConflictFields([]);
|
|
906
|
-
setErrors({});
|
|
444
|
+
form.reset();
|
|
907
445
|
onCancel === null || onCancel === void 0 ? void 0 : onCancel();
|
|
908
446
|
};
|
|
909
447
|
var handleDelete = async function handleDelete2() {
|
|
910
|
-
if (!
|
|
448
|
+
if (!name || wasDeleted || !rights.delete) return;
|
|
911
449
|
if (!(await import_desktop.dialog.confirm(t("Delete this {{doctype}}?", {
|
|
912
450
|
doctype
|
|
913
451
|
})))) return;
|
|
914
|
-
|
|
915
|
-
setErrors({});
|
|
916
|
-
try {
|
|
917
|
-
var tx = docCollection.delete(name);
|
|
918
|
-
await tx.isPersisted.promise;
|
|
919
|
-
onDelete === null || onDelete === void 0 ? void 0 : onDelete(localDoc);
|
|
920
|
-
} catch (err) {
|
|
921
|
-
setErrors({
|
|
922
|
-
general: (err === null || err === void 0 ? void 0 : err.message) || t("Failed to delete")
|
|
923
|
-
});
|
|
924
|
-
} finally {
|
|
925
|
-
setIsSubmitting(false);
|
|
926
|
-
}
|
|
452
|
+
if (await form.remove()) onDelete === null || onDelete === void 0 ? void 0 : onDelete(localDoc);
|
|
927
453
|
};
|
|
928
|
-
var
|
|
929
|
-
if (!
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
return;
|
|
935
|
-
}
|
|
936
|
-
}
|
|
937
|
-
if (!(await import_desktop.dialog.confirm(question))) return;
|
|
938
|
-
setIsSubmitting(true);
|
|
939
|
-
setErrors({});
|
|
940
|
-
try {
|
|
941
|
-
var tx = docCollection.update(name, function (draft) {
|
|
942
|
-
draft.docstatus = to;
|
|
943
|
-
});
|
|
944
|
-
await tx.isPersisted.promise;
|
|
945
|
-
} catch (err) {
|
|
946
|
-
setErrors({
|
|
947
|
-
general: (0, import_useFormEngine.extractServerError)(err, failure)
|
|
948
|
-
});
|
|
949
|
-
} finally {
|
|
950
|
-
setIsSubmitting(false);
|
|
454
|
+
var handleSubmitDocument = async function handleSubmitDocument2() {
|
|
455
|
+
if (!name || wasDeleted || !rights.submit) return;
|
|
456
|
+
var requiredErrors = form.validate();
|
|
457
|
+
if (Object.keys(requiredErrors).length > 0) {
|
|
458
|
+
form.setErrors(requiredErrors);
|
|
459
|
+
return;
|
|
951
460
|
}
|
|
952
|
-
|
|
953
|
-
var handleSubmitDocument = function handleSubmitDocument2() {
|
|
954
|
-
return transitionDocstatus(1, t("Permanently Submit {{name}}?", {
|
|
461
|
+
if (!(await import_desktop.dialog.confirm(t("Permanently Submit {{name}}?", {
|
|
955
462
|
name
|
|
956
|
-
})
|
|
463
|
+
})))) return;
|
|
464
|
+
await form.submitDocument();
|
|
957
465
|
};
|
|
958
|
-
var handleCancelDocument = function handleCancelDocument2() {
|
|
959
|
-
|
|
466
|
+
var handleCancelDocument = async function handleCancelDocument2() {
|
|
467
|
+
if (!name || wasDeleted || !rights.cancel) return;
|
|
468
|
+
if (!(await import_desktop.dialog.confirm(t("Permanently Cancel {{name}}?", {
|
|
960
469
|
name
|
|
961
|
-
})
|
|
470
|
+
})))) return;
|
|
471
|
+
await form.cancelDocument();
|
|
962
472
|
};
|
|
963
473
|
var handleAmend = function handleAmend2() {
|
|
964
|
-
if (!
|
|
965
|
-
var draft =
|
|
966
|
-
(
|
|
967
|
-
onAmend(draft);
|
|
474
|
+
if (!onAmend) return;
|
|
475
|
+
var draft = form.amend();
|
|
476
|
+
if (draft) onAmend(draft);
|
|
968
477
|
};
|
|
969
478
|
var titleField = meta === null || meta === void 0 ? void 0 : meta.title_field;
|
|
970
479
|
var titleValue = titleField ? localDoc[titleField] : void 0;
|
|
@@ -1026,27 +535,34 @@ function FrappeFormBody(param) {
|
|
|
1026
535
|
}));
|
|
1027
536
|
}
|
|
1028
537
|
if (!children && metaError && !meta && !name) {
|
|
1029
|
-
return frame(/* @__PURE__ */(0, import_jsx_runtime.
|
|
538
|
+
return frame((0, import_liveErrors.isPermissionError)(metaError) ? /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.EmptyState, {
|
|
539
|
+
testID: "frappe-form-not-permitted",
|
|
540
|
+
title: t("You can't create {{doctype}}", {
|
|
541
|
+
doctype
|
|
542
|
+
}),
|
|
543
|
+
description: metaError.message
|
|
544
|
+
}) : /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.AsyncBoundary, {
|
|
1030
545
|
...knobProps.panelPadding,
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
...knobProps.body,
|
|
1036
|
-
children: t("Failed to load {{doctype}} form", {
|
|
1037
|
-
doctype
|
|
1038
|
-
})
|
|
1039
|
-
}), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Text, {
|
|
1040
|
-
color: import_forms.formCommonColors.muted,
|
|
1041
|
-
...knobProps.body,
|
|
1042
|
-
children: metaError.message
|
|
1043
|
-
})]
|
|
546
|
+
error: metaError,
|
|
547
|
+
errorTitle: t("Failed to load {{doctype}} form", {
|
|
548
|
+
doctype
|
|
549
|
+
})
|
|
1044
550
|
}));
|
|
1045
551
|
}
|
|
1046
|
-
|
|
1047
|
-
var showsSeed = Boolean(seedDoc) && isDocReading;
|
|
1048
|
-
if (name && docError && !(liveDoc === null || liveDoc === void 0 ? void 0 : liveDoc.data) && !wasDeleted) {
|
|
552
|
+
if (name && form.status === "error" && docError) {
|
|
1049
553
|
if (errorFallback !== void 0) return frame(errorFallback);
|
|
554
|
+
if ((0, import_liveErrors.isPermissionError)(docError)) {
|
|
555
|
+
return frame(/* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.EmptyState, {
|
|
556
|
+
testID: "frappe-form-not-permitted",
|
|
557
|
+
title: t("You can't open {{doctype}} {{name}}", {
|
|
558
|
+
doctype,
|
|
559
|
+
name
|
|
560
|
+
}),
|
|
561
|
+
description: t("Your session can't read this {{doctype}}.", {
|
|
562
|
+
doctype
|
|
563
|
+
})
|
|
564
|
+
}));
|
|
565
|
+
}
|
|
1050
566
|
return frame(/* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.AsyncBoundary, {
|
|
1051
567
|
...knobProps.panelPadding,
|
|
1052
568
|
error: docError,
|
|
@@ -1055,7 +571,7 @@ function FrappeFormBody(param) {
|
|
|
1055
571
|
})
|
|
1056
572
|
}));
|
|
1057
573
|
}
|
|
1058
|
-
if (name &&
|
|
574
|
+
if (name && form.status === "loading") {
|
|
1059
575
|
if (loadingFallback !== void 0) return frame(loadingFallback);
|
|
1060
576
|
return frame(/* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.YStack, {
|
|
1061
577
|
...knobProps.panelPadding,
|
|
@@ -1065,7 +581,7 @@ function FrappeFormBody(param) {
|
|
|
1065
581
|
})
|
|
1066
582
|
}));
|
|
1067
583
|
}
|
|
1068
|
-
if (name &&
|
|
584
|
+
if (name && form.status === "notFound") {
|
|
1069
585
|
if (notFoundFallback !== void 0) return frame(notFoundFallback);
|
|
1070
586
|
return frame(/* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui.YStack, {
|
|
1071
587
|
...knobProps.panelPadding,
|
|
@@ -1115,7 +631,7 @@ function FrappeFormBody(param) {
|
|
|
1115
631
|
var toolbarShown = showToolbar && !readsWithoutMeta && Boolean(indicator || docAction || showDelete || showEdit || showClose);
|
|
1116
632
|
var shownTabs = formTabs !== null && formTabs !== void 0 ? formTabs : recordTabs;
|
|
1117
633
|
var imageFieldName = meta === null || meta === void 0 ? void 0 : meta.image_field;
|
|
1118
|
-
var sidebarImageUrl = imageFieldName ? resolveFileUrl(localDoc[imageFieldName],
|
|
634
|
+
var sidebarImageUrl = imageFieldName ? resolveFileUrl(localDoc[imageFieldName], frappeConfig === null || frappeConfig === void 0 ? void 0 : frappeConfig.baseURL) : void 0;
|
|
1119
635
|
var conflictLabels = conflictFields.map(function (fieldname) {
|
|
1120
636
|
var field = meta === null || meta === void 0 ? void 0 : meta.fields.find(function (metaField) {
|
|
1121
637
|
return metaField.fieldname === fieldname;
|
|
@@ -1123,25 +639,27 @@ function FrappeFormBody(param) {
|
|
|
1123
639
|
return (field === null || field === void 0 ? void 0 : field.label) || fieldname;
|
|
1124
640
|
}).join(", ");
|
|
1125
641
|
var formTabItems = (shownTabs !== null && shownTabs !== void 0 ? shownTabs : []).map(function (tab) {
|
|
642
|
+
var content = /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_schemaForm.SchemaForm, {
|
|
643
|
+
schema: tab.schema,
|
|
644
|
+
doc: localDoc,
|
|
645
|
+
setValue: function setValue1(field, value) {
|
|
646
|
+
return setValue(field, value);
|
|
647
|
+
},
|
|
648
|
+
errors,
|
|
649
|
+
disabled: fieldsDisabled,
|
|
650
|
+
overrides,
|
|
651
|
+
readOnlyFields,
|
|
652
|
+
sectionHeadingLevel,
|
|
653
|
+
order,
|
|
654
|
+
renderFieldWrapper
|
|
655
|
+
});
|
|
1126
656
|
return {
|
|
1127
657
|
value: tab.key,
|
|
1128
658
|
label: tab.label,
|
|
1129
|
-
content:
|
|
1130
|
-
schema: tab.schema,
|
|
1131
|
-
doc: localDoc,
|
|
1132
|
-
setValue: function setValue1(field, value) {
|
|
1133
|
-
return setValue(field, value);
|
|
1134
|
-
},
|
|
1135
|
-
errors,
|
|
1136
|
-
disabled: fieldsDisabled,
|
|
1137
|
-
overrides,
|
|
1138
|
-
readOnlyFields,
|
|
1139
|
-
sectionHeadingLevel,
|
|
1140
|
-
order
|
|
1141
|
-
})
|
|
659
|
+
content: renderTab ? renderTab(tab, content) : content
|
|
1142
660
|
};
|
|
1143
661
|
});
|
|
1144
|
-
var tabItems = showConnections && name && effectiveConnections.length > 0 ? [
|
|
662
|
+
var tabItems = [...formTabItems, ...(showConnections && name && frappeConfig && effectiveConnections.length > 0 ? [{
|
|
1145
663
|
value: "__connections",
|
|
1146
664
|
label: t("Connections"),
|
|
1147
665
|
content: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_FrappeFormConnections.FrappeFormConnections, {
|
|
@@ -1149,14 +667,14 @@ function FrappeFormBody(param) {
|
|
|
1149
667
|
connections: effectiveConnections,
|
|
1150
668
|
name
|
|
1151
669
|
})
|
|
1152
|
-
}] :
|
|
670
|
+
}] : []), ...(extraTabs !== null && extraTabs !== void 0 ? extraTabs : [])];
|
|
1153
671
|
var effectiveTab = activeTab && tabItems.some(function (tab) {
|
|
1154
672
|
return tab.value === activeTab;
|
|
1155
673
|
}) ? activeTab : (_tabItems_ = tabItems[0]) === null || _tabItems_ === void 0 ? void 0 : _tabItems_.value;
|
|
1156
674
|
var localName = localDoc.name;
|
|
1157
675
|
var sidebar = showSidebar && name && meta ? /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_FormSidebar.FormSidebar, {
|
|
1158
676
|
imageUrl: sidebarImageUrl,
|
|
1159
|
-
sections: buildSidebarSections(localDoc, shareRows, t, assignmentRows),
|
|
677
|
+
sections: buildSidebarSections(localDoc, form.shareRows, t, assignmentRows),
|
|
1160
678
|
metadata: mapDocToSidebarMetadata(localDoc, t)
|
|
1161
679
|
}) : void 0;
|
|
1162
680
|
return frame(
|
|
@@ -1170,16 +688,16 @@ function FrappeFormBody(param) {
|
|
|
1170
688
|
flexGrow: 1,
|
|
1171
689
|
flexShrink: 1,
|
|
1172
690
|
flexBasis: "auto",
|
|
1173
|
-
children: [/* @__PURE__ */(0, import_jsx_runtime.jsx)(import_FrappeReconnectIndicator.FrappeReconnectIndicator, {
|
|
691
|
+
children: [frappeConfig ? /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_FrappeReconnectIndicator.FrappeReconnectIndicator, {
|
|
1174
692
|
config: frappeConfig
|
|
1175
|
-
}), connectionReads.map(function (read) {
|
|
693
|
+
}) : null, frappeConfig ? connectionReads.map(function (read) {
|
|
1176
694
|
return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_FrappeRowsReader.FrappeRowsReader, {
|
|
1177
695
|
connection: frappeConfig,
|
|
1178
696
|
doctype: read.link.doctype,
|
|
1179
697
|
options: read.options,
|
|
1180
698
|
onChange: read.onChange
|
|
1181
699
|
}, read.link.doctype);
|
|
1182
|
-
}), wasDeleted && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.XStack, {
|
|
700
|
+
}) : null, showBanners && wasDeleted && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.XStack, {
|
|
1183
701
|
role: "alert",
|
|
1184
702
|
alignItems: "center",
|
|
1185
703
|
...knobProps.containerRadius,
|
|
@@ -1195,7 +713,7 @@ function FrappeFormBody(param) {
|
|
|
1195
713
|
doctype
|
|
1196
714
|
})
|
|
1197
715
|
})
|
|
1198
|
-
}), !wasDeleted && conflictFields.length > 0 && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.XStack, {
|
|
716
|
+
}), showBanners && !wasDeleted && conflictFields.length > 0 && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.XStack, {
|
|
1199
717
|
role: "status",
|
|
1200
718
|
alignItems: "center",
|
|
1201
719
|
...knobProps.containerRadius,
|
|
@@ -1252,7 +770,7 @@ function FrappeFormBody(param) {
|
|
|
1252
770
|
value: effectiveTab,
|
|
1253
771
|
onChange: setActiveTab,
|
|
1254
772
|
lazyMount: true
|
|
1255
|
-
}) : (
|
|
773
|
+
}) : (_ref = (_tabItems_1 = tabItems[0]) === null || _tabItems_1 === void 0 ? void 0 : _tabItems_1.content) !== null && _ref !== void 0 ? _ref : null]
|
|
1256
774
|
}) :
|
|
1257
775
|
// Metadata unavailable (should be covered by metaError branch above)
|
|
1258
776
|
/* @__PURE__ */
|
|
@@ -1267,6 +785,7 @@ function FrappeFormBody(param) {
|
|
|
1267
785
|
}), errors.general && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Text, {
|
|
1268
786
|
color: import_forms.formCommonColors.error,
|
|
1269
787
|
...knobProps.body,
|
|
788
|
+
role: "alert",
|
|
1270
789
|
children: errors.general
|
|
1271
790
|
}), toolbarShown && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_FrappeFormActions.FrappeFormActions, {
|
|
1272
791
|
indicator,
|