@multiplatform.one/frappe-ui 7.10.0 → 7.15.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 +2 -2
- package/dist/cjs/FrappeDashboard.cjs +8 -10
- package/dist/cjs/FrappeDashboard.native.js +8 -14
- package/dist/cjs/FrappeDashboard.native.js.map +1 -1
- package/dist/cjs/FrappeForm.cjs +465 -175
- package/dist/cjs/FrappeForm.native.js +611 -207
- package/dist/cjs/FrappeForm.native.js.map +1 -1
- package/dist/cjs/FrappeFormConnections.cjs +125 -0
- package/dist/cjs/FrappeFormConnections.native.js +149 -0
- package/dist/cjs/FrappeFormConnections.native.js.map +1 -0
- package/dist/cjs/FrappeImageView.cjs +7 -9
- package/dist/cjs/FrappeImageView.native.js +7 -13
- package/dist/cjs/FrappeImageView.native.js.map +1 -1
- package/dist/cjs/FrappeList.cjs +29 -4
- package/dist/cjs/FrappeList.native.js +37 -5
- package/dist/cjs/FrappeList.native.js.map +1 -1
- package/dist/cjs/FrappeListView.cjs +102 -29
- package/dist/cjs/FrappeListView.native.js +109 -29
- package/dist/cjs/FrappeListView.native.js.map +1 -1
- package/dist/cjs/FrappeProvider.cjs +7 -2
- package/dist/cjs/FrappeProvider.native.js +7 -2
- package/dist/cjs/FrappeProvider.native.js.map +1 -1
- package/dist/cjs/FrappeReportBuilder.cjs +10 -11
- package/dist/cjs/FrappeReportBuilder.native.js +10 -16
- package/dist/cjs/FrappeReportBuilder.native.js.map +1 -1
- package/dist/cjs/FrappeRowsReader.cjs +49 -0
- package/dist/cjs/FrappeRowsReader.native.js +53 -0
- package/dist/cjs/FrappeRowsReader.native.js.map +1 -0
- package/dist/cjs/FrappeTable.cjs +18 -6
- package/dist/cjs/FrappeTable.native.js +24 -6
- package/dist/cjs/FrappeTable.native.js.map +1 -1
- package/dist/cjs/fieldRegistry.cjs +36 -11
- package/dist/cjs/fieldRegistry.native.js +59 -11
- package/dist/cjs/fieldRegistry.native.js.map +1 -1
- package/dist/cjs/fields/Date/index.native.js +5 -2
- package/dist/cjs/fields/Date/index.native.js.map +1 -1
- package/dist/cjs/fields/Date/sheetKeyboard.cjs +2 -2
- package/dist/cjs/fields/Date/sheetKeyboard.native.js +2 -2
- package/dist/cjs/fields/Date/sheetKeyboard.native.js.map +1 -1
- package/dist/cjs/fields/DateRange/index.cjs +2 -1
- package/dist/cjs/fields/DateRange/index.native.js +4 -1
- package/dist/cjs/fields/DateRange/index.native.js.map +1 -1
- package/dist/cjs/formEngine/index.cjs +4 -2
- package/dist/cjs/formEngine/index.native.js +3 -1
- package/dist/cjs/formEngine/index.native.js.map +1 -1
- package/dist/cjs/formEngine/useSessionRoles.cjs +77 -0
- package/dist/cjs/formEngine/useSessionRoles.native.js +84 -0
- package/dist/cjs/formEngine/useSessionRoles.native.js.map +1 -0
- package/dist/cjs/frappeConnections.cjs +41 -0
- package/dist/cjs/frappeConnections.native.js +50 -0
- package/dist/cjs/frappeConnections.native.js.map +1 -0
- package/dist/cjs/frappeNavigation.cjs +107 -0
- package/dist/cjs/frappeNavigation.native.js +112 -0
- package/dist/cjs/frappeNavigation.native.js.map +1 -0
- package/dist/cjs/index.cjs +18 -1
- package/dist/cjs/index.native.js +18 -1
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/schemaForm/index.cjs +4 -1
- package/dist/cjs/schemaForm/index.native.js +4 -1
- package/dist/cjs/schemaForm/index.native.js.map +1 -1
- package/dist/cjs/useConnectionFilters.cjs +146 -0
- package/dist/cjs/useConnectionFilters.native.js +213 -0
- package/dist/cjs/useConnectionFilters.native.js.map +1 -0
- package/dist/cjs/useFrappePagination.cjs +37 -18
- package/dist/cjs/useFrappePagination.native.js +59 -23
- package/dist/cjs/useFrappePagination.native.js.map +1 -1
- package/dist/cjs/useFrappeRows.native.js.map +1 -1
- package/dist/esm/FrappeDashboard.mjs +9 -11
- package/dist/esm/FrappeDashboard.mjs.map +1 -1
- package/dist/esm/FrappeDashboard.native.js +9 -15
- package/dist/esm/FrappeDashboard.native.js.map +1 -1
- package/dist/esm/FrappeForm.mjs +471 -181
- package/dist/esm/FrappeForm.mjs.map +1 -1
- package/dist/esm/FrappeForm.native.js +599 -195
- package/dist/esm/FrappeForm.native.js.map +1 -1
- package/dist/esm/FrappeFormConnections.mjs +99 -0
- package/dist/esm/FrappeFormConnections.mjs.map +1 -0
- package/dist/esm/FrappeFormConnections.native.js +120 -0
- package/dist/esm/FrappeFormConnections.native.js.map +1 -0
- package/dist/esm/FrappeImageView.mjs +8 -10
- package/dist/esm/FrappeImageView.mjs.map +1 -1
- package/dist/esm/FrappeImageView.native.js +8 -14
- package/dist/esm/FrappeImageView.native.js.map +1 -1
- package/dist/esm/FrappeList.mjs +31 -6
- package/dist/esm/FrappeList.mjs.map +1 -1
- package/dist/esm/FrappeList.native.js +39 -7
- package/dist/esm/FrappeList.native.js.map +1 -1
- package/dist/esm/FrappeListView.mjs +103 -30
- package/dist/esm/FrappeListView.mjs.map +1 -1
- package/dist/esm/FrappeListView.native.js +110 -30
- package/dist/esm/FrappeListView.native.js.map +1 -1
- package/dist/esm/FrappeProvider.mjs +7 -2
- package/dist/esm/FrappeProvider.mjs.map +1 -1
- package/dist/esm/FrappeProvider.native.js +7 -2
- package/dist/esm/FrappeProvider.native.js.map +1 -1
- package/dist/esm/FrappeReportBuilder.mjs +11 -12
- package/dist/esm/FrappeReportBuilder.mjs.map +1 -1
- package/dist/esm/FrappeReportBuilder.native.js +11 -17
- package/dist/esm/FrappeReportBuilder.native.js.map +1 -1
- package/dist/esm/FrappeRowsReader.mjs +24 -0
- package/dist/esm/FrappeRowsReader.mjs.map +1 -0
- package/dist/esm/FrappeRowsReader.native.js +25 -0
- package/dist/esm/FrappeRowsReader.native.js.map +1 -0
- package/dist/esm/FrappeTable.mjs +18 -6
- package/dist/esm/FrappeTable.mjs.map +1 -1
- package/dist/esm/FrappeTable.native.js +24 -6
- package/dist/esm/FrappeTable.native.js.map +1 -1
- package/dist/esm/fieldRegistry.mjs +35 -12
- package/dist/esm/fieldRegistry.mjs.map +1 -1
- package/dist/esm/fieldRegistry.native.js +58 -12
- package/dist/esm/fieldRegistry.native.js.map +1 -1
- package/dist/esm/fields/Date/index.native.js +6 -3
- package/dist/esm/fields/Date/index.native.js.map +1 -1
- package/dist/esm/fields/Date/sheetKeyboard.mjs +2 -2
- package/dist/esm/fields/Date/sheetKeyboard.mjs.map +1 -1
- package/dist/esm/fields/Date/sheetKeyboard.native.js +2 -2
- package/dist/esm/fields/Date/sheetKeyboard.native.js.map +1 -1
- package/dist/esm/fields/DateRange/index.mjs +2 -1
- package/dist/esm/fields/DateRange/index.mjs.map +1 -1
- package/dist/esm/fields/DateRange/index.native.js +4 -1
- package/dist/esm/fields/DateRange/index.native.js.map +1 -1
- package/dist/esm/formEngine/index.mjs +2 -1
- package/dist/esm/formEngine/index.mjs.map +1 -1
- package/dist/esm/formEngine/index.native.js +2 -1
- package/dist/esm/formEngine/index.native.js.map +1 -1
- package/dist/esm/formEngine/useSessionRoles.mjs +52 -0
- package/dist/esm/formEngine/useSessionRoles.mjs.map +1 -0
- package/dist/esm/formEngine/useSessionRoles.native.js +56 -0
- package/dist/esm/formEngine/useSessionRoles.native.js.map +1 -0
- package/dist/esm/frappeConnections.mjs +15 -0
- package/dist/esm/frappeConnections.mjs.map +1 -0
- package/dist/esm/frappeConnections.native.js +21 -0
- package/dist/esm/frappeConnections.native.js.map +1 -0
- package/dist/esm/frappeNavigation.mjs +78 -0
- package/dist/esm/frappeNavigation.mjs.map +1 -0
- package/dist/esm/frappeNavigation.native.js +80 -0
- package/dist/esm/frappeNavigation.native.js.map +1 -0
- package/dist/esm/index.mjs +7 -3
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/index.native.js +7 -3
- package/dist/esm/index.native.js.map +1 -1
- package/dist/esm/schemaForm/index.mjs +4 -1
- package/dist/esm/schemaForm/index.mjs.map +1 -1
- package/dist/esm/schemaForm/index.native.js +4 -1
- package/dist/esm/schemaForm/index.native.js.map +1 -1
- package/dist/esm/useConnectionFilters.mjs +121 -0
- package/dist/esm/useConnectionFilters.mjs.map +1 -0
- package/dist/esm/useConnectionFilters.native.js +185 -0
- package/dist/esm/useConnectionFilters.native.js.map +1 -0
- package/dist/esm/useFrappePagination.mjs +38 -19
- package/dist/esm/useFrappePagination.mjs.map +1 -1
- package/dist/esm/useFrappePagination.native.js +60 -24
- package/dist/esm/useFrappePagination.native.js.map +1 -1
- package/dist/esm/useFrappeRows.mjs.map +1 -1
- package/dist/esm/useFrappeRows.native.js.map +1 -1
- package/dist/jsx/FrappeDashboard.mjs +9 -11
- package/dist/jsx/FrappeDashboard.mjs.map +1 -1
- package/dist/jsx/FrappeDashboard.native.js +8 -14
- package/dist/jsx/FrappeDashboard.native.js.map +1 -1
- package/dist/jsx/FrappeForm.mjs +471 -181
- package/dist/jsx/FrappeForm.mjs.map +1 -1
- package/dist/jsx/FrappeForm.native.js +611 -207
- package/dist/jsx/FrappeForm.native.js.map +1 -1
- package/dist/jsx/FrappeFormConnections.mjs +99 -0
- package/dist/jsx/FrappeFormConnections.mjs.map +1 -0
- package/dist/jsx/FrappeFormConnections.native.js +149 -0
- package/dist/jsx/FrappeFormConnections.native.js.map +1 -0
- package/dist/jsx/FrappeImageView.mjs +8 -10
- package/dist/jsx/FrappeImageView.mjs.map +1 -1
- package/dist/jsx/FrappeImageView.native.js +7 -13
- package/dist/jsx/FrappeImageView.native.js.map +1 -1
- package/dist/jsx/FrappeList.mjs +31 -6
- package/dist/jsx/FrappeList.mjs.map +1 -1
- package/dist/jsx/FrappeList.native.js +37 -5
- package/dist/jsx/FrappeList.native.js.map +1 -1
- package/dist/jsx/FrappeListView.mjs +103 -30
- package/dist/jsx/FrappeListView.mjs.map +1 -1
- package/dist/jsx/FrappeListView.native.js +109 -29
- package/dist/jsx/FrappeListView.native.js.map +1 -1
- package/dist/jsx/FrappeProvider.mjs +7 -2
- package/dist/jsx/FrappeProvider.mjs.map +1 -1
- package/dist/jsx/FrappeProvider.native.js +7 -2
- package/dist/jsx/FrappeProvider.native.js.map +1 -1
- package/dist/jsx/FrappeReportBuilder.mjs +11 -12
- package/dist/jsx/FrappeReportBuilder.mjs.map +1 -1
- package/dist/jsx/FrappeReportBuilder.native.js +10 -16
- package/dist/jsx/FrappeReportBuilder.native.js.map +1 -1
- package/dist/jsx/FrappeRowsReader.mjs +24 -0
- package/dist/jsx/FrappeRowsReader.mjs.map +1 -0
- package/dist/jsx/FrappeRowsReader.native.js +53 -0
- package/dist/jsx/FrappeRowsReader.native.js.map +1 -0
- package/dist/jsx/FrappeTable.mjs +18 -6
- package/dist/jsx/FrappeTable.mjs.map +1 -1
- package/dist/jsx/FrappeTable.native.js +24 -6
- package/dist/jsx/FrappeTable.native.js.map +1 -1
- package/dist/jsx/fieldRegistry.mjs +35 -12
- package/dist/jsx/fieldRegistry.mjs.map +1 -1
- package/dist/jsx/fieldRegistry.native.js +59 -11
- package/dist/jsx/fieldRegistry.native.js.map +1 -1
- package/dist/jsx/fields/Date/index.native.js +5 -2
- package/dist/jsx/fields/Date/index.native.js.map +1 -1
- package/dist/jsx/fields/Date/sheetKeyboard.mjs +2 -2
- package/dist/jsx/fields/Date/sheetKeyboard.mjs.map +1 -1
- package/dist/jsx/fields/Date/sheetKeyboard.native.js +2 -2
- package/dist/jsx/fields/Date/sheetKeyboard.native.js.map +1 -1
- package/dist/jsx/fields/DateRange/index.mjs +2 -1
- package/dist/jsx/fields/DateRange/index.mjs.map +1 -1
- package/dist/jsx/fields/DateRange/index.native.js +4 -1
- package/dist/jsx/fields/DateRange/index.native.js.map +1 -1
- package/dist/jsx/formEngine/index.mjs +2 -1
- package/dist/jsx/formEngine/index.mjs.map +1 -1
- package/dist/jsx/formEngine/index.native.js +3 -1
- package/dist/jsx/formEngine/index.native.js.map +1 -1
- package/dist/jsx/formEngine/useSessionRoles.mjs +52 -0
- package/dist/jsx/formEngine/useSessionRoles.mjs.map +1 -0
- package/dist/jsx/formEngine/useSessionRoles.native.js +84 -0
- package/dist/jsx/formEngine/useSessionRoles.native.js.map +1 -0
- package/dist/jsx/frappeConnections.mjs +15 -0
- package/dist/jsx/frappeConnections.mjs.map +1 -0
- package/dist/jsx/frappeConnections.native.js +50 -0
- package/dist/jsx/frappeConnections.native.js.map +1 -0
- package/dist/jsx/frappeNavigation.mjs +78 -0
- package/dist/jsx/frappeNavigation.mjs.map +1 -0
- package/dist/jsx/frappeNavigation.native.js +112 -0
- package/dist/jsx/frappeNavigation.native.js.map +1 -0
- package/dist/jsx/index.js +7 -3
- package/dist/jsx/index.js.map +1 -1
- package/dist/jsx/index.mjs +7 -3
- package/dist/jsx/index.mjs.map +1 -1
- package/dist/jsx/index.native.js +18 -1
- package/dist/jsx/index.native.js.map +1 -1
- package/dist/jsx/schemaForm/index.mjs +4 -1
- package/dist/jsx/schemaForm/index.mjs.map +1 -1
- package/dist/jsx/schemaForm/index.native.js +4 -1
- package/dist/jsx/schemaForm/index.native.js.map +1 -1
- package/dist/jsx/useConnectionFilters.mjs +121 -0
- package/dist/jsx/useConnectionFilters.mjs.map +1 -0
- package/dist/jsx/useConnectionFilters.native.js +213 -0
- package/dist/jsx/useConnectionFilters.native.js.map +1 -0
- package/dist/jsx/useFrappePagination.mjs +38 -19
- package/dist/jsx/useFrappePagination.mjs.map +1 -1
- package/dist/jsx/useFrappePagination.native.js +59 -23
- package/dist/jsx/useFrappePagination.native.js.map +1 -1
- package/dist/jsx/useFrappeRows.mjs.map +1 -1
- package/dist/jsx/useFrappeRows.native.js.map +1 -1
- package/package.json +26 -22
- package/src/FileBrowser/AttachLibrary.stories.tsx +23 -0
- package/src/FrappeDashboard.tsx +11 -16
- package/src/FrappeForm.connections.spec.tsx +280 -0
- package/src/FrappeForm.connections.stories.tsx +93 -0
- package/src/FrappeForm.deskSemantics.spec.tsx +284 -0
- package/src/FrappeForm.tsx +560 -145
- package/src/FrappeFormConnections.tsx +148 -0
- package/src/FrappeGuestMeta.spec.tsx +143 -0
- package/src/FrappeImageView.tsx +8 -12
- package/src/FrappeList.tsx +71 -15
- package/src/FrappeListView.cards.spec.tsx +175 -0
- package/src/FrappeListView.cards.stories.tsx +131 -0
- package/src/FrappeListView.connections.spec.tsx +192 -0
- package/src/FrappeListView.connections.stories.tsx +99 -0
- package/src/FrappeListView.seed.spec.tsx +228 -0
- package/src/FrappeListView.tsx +177 -31
- package/src/FrappeProvider.catchUp.spec.tsx +502 -0
- package/src/FrappeProvider.tsx +15 -3
- package/src/FrappeReportBuilder.tsx +11 -19
- package/src/FrappeRowsReader.tsx +38 -0
- package/src/FrappeTable.optionalProps.spec.tsx +249 -0
- package/src/FrappeTable.spec.tsx +32 -42
- package/src/FrappeTable.stories.spec.tsx +55 -0
- package/src/FrappeTable.stories.tsx +28 -37
- package/src/FrappeTable.tsx +108 -45
- package/src/childTableDependsOn.spec.tsx +85 -0
- package/src/desk/DeskFormSidebar.spec.tsx +20 -0
- package/src/desk/DeskFormSidebar.stories.tsx +42 -0
- package/src/fieldRegistry.spec.tsx +27 -64
- package/src/fieldRegistry.ts +71 -14
- package/src/fields/Date/index.native.tsx +4 -2
- package/src/fields/Date/sheetKeyboard.spec.ts +14 -5
- package/src/fields/Date/sheetKeyboard.ts +12 -4
- package/src/fields/DateRange/DateRange.spec.tsx +67 -0
- package/src/fields/DateRange/index.tsx +5 -1
- package/src/fields/LinkTree.spec.tsx +8 -0
- package/src/fields/LinkTree.stories.tsx +28 -5
- package/src/fields/Select/Select.hydration.spec.tsx +177 -0
- package/src/formEngine/doctypeMeta.ts +15 -114
- package/src/formEngine/index.ts +2 -0
- package/src/formEngine/seam.spec.ts +23 -4
- package/src/formEngine/useSessionRoles.ts +73 -0
- package/src/frappeConnections.ts +50 -0
- package/src/frappeNavigation.tsx +112 -0
- package/src/frappeRoutes.spec.tsx +335 -0
- package/src/index.ts +28 -1
- package/src/schemaForm/index.tsx +1 -0
- package/src/useConnectionFilters.tsx +157 -0
- package/src/useFrappePagination.ts +70 -26
- package/src/useFrappeRows.sharedPath.spec.tsx +206 -0
- package/src/useFrappeRows.ts +5 -4
- package/types/FrappeDashboard.d.ts +3 -4
- package/types/FrappeDashboard.d.ts.map +1 -1
- package/types/FrappeForm.d.ts +57 -5
- package/types/FrappeForm.d.ts.map +1 -1
- package/types/FrappeFormConnections.d.ts +18 -0
- package/types/FrappeFormConnections.d.ts.map +1 -0
- package/types/FrappeImageView.d.ts +2 -3
- package/types/FrappeImageView.d.ts.map +1 -1
- package/types/FrappeList.d.ts +20 -2
- package/types/FrappeList.d.ts.map +1 -1
- package/types/FrappeListView.d.ts +53 -3
- package/types/FrappeListView.d.ts.map +1 -1
- package/types/FrappeProvider.d.ts +10 -3
- package/types/FrappeProvider.d.ts.map +1 -1
- package/types/FrappeReportBuilder.d.ts.map +1 -1
- package/types/FrappeRowsReader.d.ts +26 -0
- package/types/FrappeRowsReader.d.ts.map +1 -0
- package/types/FrappeTable.d.ts +39 -8
- package/types/FrappeTable.d.ts.map +1 -1
- package/types/fieldRegistry.d.ts +17 -3
- package/types/fieldRegistry.d.ts.map +1 -1
- package/types/fields/Date/index.native.d.ts.map +1 -1
- package/types/fields/Date/sheetKeyboard.d.ts +4 -3
- package/types/fields/Date/sheetKeyboard.d.ts.map +1 -1
- package/types/fields/DateRange/index.d.ts.map +1 -1
- package/types/formEngine/doctypeMeta.d.ts +10 -114
- package/types/formEngine/doctypeMeta.d.ts.map +1 -1
- package/types/formEngine/index.d.ts +1 -0
- package/types/formEngine/index.d.ts.map +1 -1
- package/types/formEngine/useSessionRoles.d.ts +19 -0
- package/types/formEngine/useSessionRoles.d.ts.map +1 -0
- package/types/frappeConnections.d.ts +33 -0
- package/types/frappeConnections.d.ts.map +1 -0
- package/types/frappeNavigation.d.ts +49 -0
- package/types/frappeNavigation.d.ts.map +1 -0
- package/types/index.d.ts +7 -3
- package/types/index.d.ts.map +1 -1
- package/types/schemaForm/index.d.ts.map +1 -1
- package/types/useConnectionFilters.d.ts +34 -0
- package/types/useConnectionFilters.d.ts.map +1 -0
- package/types/useFrappePagination.d.ts +18 -5
- package/types/useFrappePagination.d.ts.map +1 -1
- package/types/useFrappeRows.d.ts +5 -4
- package/types/useFrappeRows.d.ts.map +1 -1
- package/src/FileBrowser/AttachLibrary.spec.tsx +0 -74
|
@@ -31,13 +31,14 @@ __export(FrappeForm_exports, {
|
|
|
31
31
|
});
|
|
32
32
|
module.exports = __toCommonJS(FrappeForm_exports);
|
|
33
33
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
34
|
+
var import_react = require("react");
|
|
34
35
|
var import_frappe = require("@multiplatform.one/frappe");
|
|
35
36
|
var import_components = require("@multiplatform.one/components");
|
|
36
37
|
var import_schemaForm = require("./schemaForm/index.native.js");
|
|
37
38
|
var import_FormSidebar = require("./FormSidebar.native.js");
|
|
38
39
|
var import_db = require("@tanstack/db");
|
|
39
|
-
var
|
|
40
|
-
var
|
|
40
|
+
var import_react2 = require("@phosphor-icons/react");
|
|
41
|
+
var import_react3 = require("react");
|
|
41
42
|
var import_react_i18next = require("react-i18next");
|
|
42
43
|
var import_forms = require("@multiplatform.one/forms");
|
|
43
44
|
var import_tamagui = require("tamagui");
|
|
@@ -46,49 +47,73 @@ var import_FrappeProvider = require("./FrappeProvider.native.js");
|
|
|
46
47
|
var import_FrappeReconnectIndicator = require("./FrappeReconnectIndicator.native.js");
|
|
47
48
|
var import_timeline = require("./components/timeline.native.js");
|
|
48
49
|
var import_desktop = require("@multiplatform.one/desktop");
|
|
49
|
-
var
|
|
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_useSessionRoles = require("./formEngine/useSessionRoles.native.js");
|
|
55
|
+
var import_frappeConnections = require("./frappeConnections.native.js");
|
|
56
|
+
var import_FrappeFormConnections = require("./FrappeFormConnections.native.js");
|
|
57
|
+
var import_FrappeRowsReader = require("./FrappeRowsReader.native.js");
|
|
58
|
+
var import_frappeNavigation = require("./frappeNavigation.native.js");
|
|
59
|
+
function _instanceof(left, right) {
|
|
60
|
+
"@swc/helpers - instanceof";
|
|
61
|
+
|
|
62
|
+
if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
|
|
63
|
+
return !!right[Symbol.hasInstance](left);
|
|
64
|
+
} else {
|
|
65
|
+
return left instanceof right;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
50
68
|
function isEmptyFieldValue(value) {
|
|
51
69
|
if (value === void 0 || value === null) return true;
|
|
52
70
|
if (typeof value === "string" && value.trim() === "") return true;
|
|
53
71
|
if (Array.isArray(value) && value.length === 0) return true;
|
|
54
72
|
return false;
|
|
55
73
|
}
|
|
56
|
-
function
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
74
|
+
function sectionsToLayoutFields(sections) {
|
|
75
|
+
var fields = [];
|
|
76
|
+
sections.forEach(function (section, sectionIndex) {
|
|
77
|
+
fields.push({
|
|
78
|
+
fieldname: `__section_${sectionIndex}`,
|
|
79
|
+
fieldtype: section.tab ? "Tab Break" : "Section Break",
|
|
80
|
+
label: section.label,
|
|
81
|
+
collapsible: section.collapsible ? 1 : 0
|
|
82
|
+
});
|
|
83
|
+
section.columns.forEach(function (column, columnIndex) {
|
|
84
|
+
if (columnIndex > 0) {
|
|
85
|
+
fields.push({
|
|
86
|
+
fieldname: `__column_${sectionIndex}_${columnIndex}`,
|
|
87
|
+
fieldtype: "Column Break"
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
fields.push(...column.fields);
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
return fields;
|
|
73
94
|
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
95
|
+
var documentBookkeeping = /* @__PURE__ */new Set(["name", "owner", "creation", "modified", "modified_by", "docstatus", "idx", "doctype", "_user_tags", "_comments", "_assign", "_liked_by", "_seen"]);
|
|
96
|
+
function fieldsFromDocument(doc) {
|
|
97
|
+
return Object.entries(doc).filter(function (param) {
|
|
98
|
+
var [key, value] = param;
|
|
99
|
+
return !key.startsWith("$") && !documentBookkeeping.has(key) && (value === null || typeof value === "string" || typeof value === "number");
|
|
100
|
+
}).map(function (param) {
|
|
101
|
+
var [key, value] = param;
|
|
77
102
|
return {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
})
|
|
103
|
+
name: key,
|
|
104
|
+
label: key.replace(/_/g, " ").replace(/(^|\s)\S/g, function (c) {
|
|
105
|
+
return c.toUpperCase();
|
|
106
|
+
}),
|
|
107
|
+
type: typeof value === "number" ? Number.isInteger(value) ? "Int" : "Float" : "Data",
|
|
108
|
+
readOnly: true
|
|
85
109
|
};
|
|
86
110
|
});
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
111
|
+
}
|
|
112
|
+
function hasRestrictedPermLevel(meta) {
|
|
113
|
+
return !!(meta === null || meta === void 0 ? void 0 : meta.fields.some(function (field) {
|
|
114
|
+
var _field_permlevel;
|
|
115
|
+
return Number((_field_permlevel = field.permlevel) !== null && _field_permlevel !== void 0 ? _field_permlevel : 0) > 0;
|
|
116
|
+
}));
|
|
92
117
|
}
|
|
93
118
|
function resolveFileUrl(value, baseURL) {
|
|
94
119
|
if (!value || typeof value !== "string") return void 0;
|
|
@@ -163,7 +188,85 @@ function mapDocToSidebarMetadata(doc, t) {
|
|
|
163
188
|
}
|
|
164
189
|
return metadata;
|
|
165
190
|
}
|
|
166
|
-
function FrappeForm(
|
|
191
|
+
function FrappeForm(props) {
|
|
192
|
+
var {
|
|
193
|
+
route,
|
|
194
|
+
...formProps
|
|
195
|
+
} = props;
|
|
196
|
+
if (route === void 0) return /* @__PURE__ */(0, import_jsx_runtime.jsx)(FrappeFormBody, {
|
|
197
|
+
...formProps
|
|
198
|
+
});
|
|
199
|
+
return /* @__PURE__ */(0, import_jsx_runtime.jsx)(FrappeFormRoute, {
|
|
200
|
+
...formProps,
|
|
201
|
+
route
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
function FrappeFormRoute(param) {
|
|
205
|
+
var {
|
|
206
|
+
route,
|
|
207
|
+
name: nameProp,
|
|
208
|
+
onSave,
|
|
209
|
+
onCancel,
|
|
210
|
+
onDelete,
|
|
211
|
+
onEdit,
|
|
212
|
+
...props
|
|
213
|
+
} = param;
|
|
214
|
+
var router = (0, import_frappeNavigation.useFrappeRouter)();
|
|
215
|
+
var fromPath = router ? (0, import_frappeNavigation.frappeRouteTarget)(route, router.pathname) : void 0;
|
|
216
|
+
var target = nameProp ? {
|
|
217
|
+
mode: (fromPath === null || fromPath === void 0 ? void 0 : fromPath.mode) === "view" ? "view" : "edit",
|
|
218
|
+
name: nameProp
|
|
219
|
+
} : (fromPath === null || fromPath === void 0 ? void 0 : fromPath.mode) === "view" || (fromPath === null || fromPath === void 0 ? void 0 : fromPath.mode) === "edit" ? fromPath : {
|
|
220
|
+
mode: "create"
|
|
221
|
+
};
|
|
222
|
+
var go = function go2(next) {
|
|
223
|
+
return router === null || router === void 0 ? void 0 : router.navigate((0, import_frappeNavigation.frappeRouteHref)(route, next));
|
|
224
|
+
};
|
|
225
|
+
var name = target.mode === "view" || target.mode === "edit" ? target.name : void 0;
|
|
226
|
+
return /* @__PURE__ */(0, import_react.createElement)(FrappeFormBody, {
|
|
227
|
+
...props,
|
|
228
|
+
// A new target is a new page: no state carries over from the last one.
|
|
229
|
+
key: `${target.mode}:${name !== null && name !== void 0 ? name : ""}`,
|
|
230
|
+
name,
|
|
231
|
+
routePage: {
|
|
232
|
+
onBack: function onBack() {
|
|
233
|
+
return go({
|
|
234
|
+
mode: "list"
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
},
|
|
238
|
+
onEdit: target.mode === "view" ? onEdit !== null && onEdit !== void 0 ? onEdit : function () {
|
|
239
|
+
return go({
|
|
240
|
+
mode: "edit",
|
|
241
|
+
name: target.name
|
|
242
|
+
});
|
|
243
|
+
} : void 0,
|
|
244
|
+
onSave: onSave !== null && onSave !== void 0 ? onSave : function (doc) {
|
|
245
|
+
var _doc_name;
|
|
246
|
+
var saved = (_doc_name = doc.name) !== null && _doc_name !== void 0 ? _doc_name : name;
|
|
247
|
+
go(saved ? {
|
|
248
|
+
mode: "view",
|
|
249
|
+
name: saved
|
|
250
|
+
} : {
|
|
251
|
+
mode: "list"
|
|
252
|
+
});
|
|
253
|
+
},
|
|
254
|
+
onCancel: onCancel !== null && onCancel !== void 0 ? onCancel : function () {
|
|
255
|
+
return go(name ? {
|
|
256
|
+
mode: "view",
|
|
257
|
+
name
|
|
258
|
+
} : {
|
|
259
|
+
mode: "list"
|
|
260
|
+
});
|
|
261
|
+
},
|
|
262
|
+
onDelete: onDelete !== null && onDelete !== void 0 ? onDelete : function () {
|
|
263
|
+
return go({
|
|
264
|
+
mode: "list"
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
function FrappeFormBody(param) {
|
|
167
270
|
var {
|
|
168
271
|
baseURL,
|
|
169
272
|
auth,
|
|
@@ -177,15 +280,26 @@ function FrappeForm(param) {
|
|
|
177
280
|
readOnlyFields,
|
|
178
281
|
sections,
|
|
179
282
|
order,
|
|
283
|
+
roles,
|
|
180
284
|
onSave,
|
|
181
285
|
onCancel,
|
|
182
286
|
onDelete,
|
|
287
|
+
onEdit,
|
|
183
288
|
showToolbar = true,
|
|
184
289
|
showSidebar = true,
|
|
185
290
|
showTimeline = true,
|
|
186
291
|
disabled = false,
|
|
187
|
-
sectionHeadingLevel
|
|
292
|
+
sectionHeadingLevel,
|
|
293
|
+
connections,
|
|
294
|
+
showConnections = true,
|
|
295
|
+
initialDoc,
|
|
296
|
+
loadingFallback,
|
|
297
|
+
notFoundFallback,
|
|
298
|
+
errorFallback,
|
|
299
|
+
routePage
|
|
188
300
|
} = param;
|
|
301
|
+
var _ref, _ref1;
|
|
302
|
+
var _tabItems_, _tabItems_1;
|
|
189
303
|
var config = (0, import_FrappeProvider.useFrappeConfig)();
|
|
190
304
|
var {
|
|
191
305
|
knobProps
|
|
@@ -193,16 +307,25 @@ function FrappeForm(param) {
|
|
|
193
307
|
var {
|
|
194
308
|
t
|
|
195
309
|
} = (0, import_react_i18next.useTranslation)();
|
|
196
|
-
var
|
|
197
|
-
var
|
|
198
|
-
|
|
199
|
-
var [
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
var
|
|
203
|
-
|
|
310
|
+
var seedDoc = name && initialDoc && initialDoc.name === name ? initialDoc : void 0;
|
|
311
|
+
var seedRef = (0, import_react3.useRef)(seedDoc);
|
|
312
|
+
seedRef.current = seedDoc;
|
|
313
|
+
var [localDoc, setLocalDoc] = (0, import_react3.useState)(function () {
|
|
314
|
+
return seedDoc !== null && seedDoc !== void 0 ? seedDoc : {};
|
|
315
|
+
});
|
|
316
|
+
var [baselineDoc, setBaselineDoc] = (0, import_react3.useState)(function () {
|
|
317
|
+
return seedDoc;
|
|
318
|
+
});
|
|
319
|
+
var [docError, setDocError] = (0, import_react3.useState)(null);
|
|
320
|
+
var [conflictFields, setConflictFields] = (0, import_react3.useState)([]);
|
|
321
|
+
var [wasDeleted, setWasDeleted] = (0, import_react3.useState)(false);
|
|
322
|
+
var [isSubmitting, setIsSubmitting] = (0, import_react3.useState)(false);
|
|
323
|
+
var [errors, setErrors] = (0, import_react3.useState)({});
|
|
324
|
+
var [activeTab, setActiveTab] = (0, import_react3.useState)(void 0);
|
|
325
|
+
var everLoadedRef = (0, import_react3.useRef)(false);
|
|
326
|
+
var localDocRef = (0, import_react3.useRef)(localDoc);
|
|
204
327
|
localDocRef.current = localDoc;
|
|
205
|
-
var baselineRef = (0,
|
|
328
|
+
var baselineRef = (0, import_react3.useRef)(baselineDoc);
|
|
206
329
|
baselineRef.current = baselineDoc;
|
|
207
330
|
var finalBaseURL = baseURL !== null && baseURL !== void 0 ? baseURL : config === null || config === void 0 ? void 0 : config.baseURL;
|
|
208
331
|
var finalAuth = auth !== null && auth !== void 0 ? auth : config === null || config === void 0 ? void 0 : config.auth;
|
|
@@ -210,7 +333,7 @@ function FrappeForm(param) {
|
|
|
210
333
|
if (!finalBaseURL) {
|
|
211
334
|
throw new Error("FrappeForm requires baseURL prop or FrappeProvider with baseURL");
|
|
212
335
|
}
|
|
213
|
-
var frappeConfig = (0,
|
|
336
|
+
var frappeConfig = (0, import_react3.useMemo)(function () {
|
|
214
337
|
return {
|
|
215
338
|
baseURL: finalBaseURL,
|
|
216
339
|
socketPort: config === null || config === void 0 ? void 0 : config.socketPort,
|
|
@@ -227,18 +350,63 @@ function FrappeForm(param) {
|
|
|
227
350
|
isLoading: isMetaLoading,
|
|
228
351
|
error: metaError
|
|
229
352
|
} = (0, import_frappe.useDocTypeMeta)(frappeConfig, doctype);
|
|
230
|
-
var
|
|
353
|
+
var sessionRoles = (0, import_useSessionRoles.useSessionRoles)(!roles && hasRestrictedPermLevel(meta) ? frappeConfig : void 0);
|
|
354
|
+
var effectiveRoles = roles !== null && roles !== void 0 ? roles : sessionRoles;
|
|
355
|
+
var permLevels = (0, import_react3.useMemo)(function () {
|
|
356
|
+
return (0, import_fieldPermissions.buildPermLevelMatrix)(meta === null || meta === void 0 ? void 0 : meta.permissions, effectiveRoles);
|
|
357
|
+
}, [meta === null || meta === void 0 ? void 0 : meta.permissions, effectiveRoles]);
|
|
358
|
+
var isCreate = !name;
|
|
359
|
+
var docstatus = Number((_ref = baselineDoc === null || baselineDoc === void 0 ? void 0 : baselineDoc.docstatus) !== null && _ref !== void 0 ? _ref : 0);
|
|
360
|
+
var layoutFields = (0, import_react3.useMemo)(function () {
|
|
231
361
|
if (!meta) return void 0;
|
|
232
|
-
return
|
|
362
|
+
return sections ? sectionsToLayoutFields(sections) : meta.fields;
|
|
233
363
|
}, [meta, sections]);
|
|
234
|
-
var
|
|
235
|
-
|
|
236
|
-
|
|
364
|
+
var formTabs = (0, import_react3.useMemo)(function () {
|
|
365
|
+
if (!layoutFields) return void 0;
|
|
366
|
+
return (0, import_formLayout.buildFormTabs)({
|
|
367
|
+
fields: layoutFields,
|
|
368
|
+
doc: {
|
|
369
|
+
...localDoc,
|
|
370
|
+
__islocal: isCreate ? 1 : 0
|
|
371
|
+
},
|
|
372
|
+
docstatus,
|
|
373
|
+
formReadOnly: !!(meta === null || meta === void 0 ? void 0 : meta.read_only),
|
|
374
|
+
isCreate,
|
|
375
|
+
detailsLabel: t("Details"),
|
|
376
|
+
permLevels,
|
|
377
|
+
hiddenFields: hideFields
|
|
378
|
+
});
|
|
379
|
+
}, [layoutFields, localDoc, docstatus, meta === null || meta === void 0 ? void 0 : meta.read_only, isCreate, permLevels, hideFields, t]);
|
|
380
|
+
var readsWithoutMeta = !children && !meta && Boolean(metaError) && Boolean(name);
|
|
381
|
+
var recordTabs = (0, import_react3.useMemo)(function () {
|
|
382
|
+
if (!readsWithoutMeta || !baselineDoc) return void 0;
|
|
383
|
+
var recordFields = fieldsFromDocument(baselineDoc);
|
|
384
|
+
return [{
|
|
385
|
+
key: "__details",
|
|
386
|
+
label: t("Details"),
|
|
387
|
+
schema: {
|
|
388
|
+
sections: [{
|
|
389
|
+
columns: [{
|
|
390
|
+
fields: recordFields
|
|
391
|
+
}]
|
|
392
|
+
}],
|
|
393
|
+
fields: recordFields
|
|
394
|
+
}
|
|
395
|
+
}];
|
|
396
|
+
}, [readsWithoutMeta, baselineDoc, t]);
|
|
397
|
+
var promptNamed = isCreate && !!meta && (0, import_formLayout.isPromptNamed)(meta.autoname, meta.naming_rule);
|
|
398
|
+
var fetchMap = (0, import_react3.useMemo)(function () {
|
|
399
|
+
return meta ? (0, import_fetchFrom.buildFetchMap)(meta.fields) : void 0;
|
|
400
|
+
}, [meta]);
|
|
401
|
+
var handleDocSyncError = (0, import_react3.useCallback)(function (err) {
|
|
402
|
+
setDocError(_instanceof(err, Error) ? err : new Error(String(err)));
|
|
403
|
+
}, []);
|
|
237
404
|
var docCollection = (0, import_frappe.useFrappeCollection)(name ? frappeConfig : void 0, doctype, {
|
|
238
405
|
fields,
|
|
239
406
|
filters: name ? {
|
|
240
407
|
name
|
|
241
|
-
} : void 0
|
|
408
|
+
} : void 0,
|
|
409
|
+
onSyncError: handleDocSyncError
|
|
242
410
|
});
|
|
243
411
|
var {
|
|
244
412
|
data: rawDocData,
|
|
@@ -255,7 +423,7 @@ function FrappeForm(param) {
|
|
|
255
423
|
return (0, import_db.eq)(_doc.name, name);
|
|
256
424
|
});
|
|
257
425
|
}, [docCollection, name]);
|
|
258
|
-
var liveDoc = (0,
|
|
426
|
+
var liveDoc = (0, import_react3.useMemo)(function () {
|
|
259
427
|
var _arr_;
|
|
260
428
|
var arr = Array.isArray(rawDocData) ? rawDocData : rawDocData ? [rawDocData] : [];
|
|
261
429
|
var doc = (_arr_ = arr[0]) !== null && _arr_ !== void 0 ? _arr_ : null;
|
|
@@ -284,7 +452,7 @@ function FrappeForm(param) {
|
|
|
284
452
|
_share: shareCollection
|
|
285
453
|
}) : null;
|
|
286
454
|
}, [shareCollection]);
|
|
287
|
-
var shareRows = (0,
|
|
455
|
+
var shareRows = (0, import_react3.useMemo)(function () {
|
|
288
456
|
return shareCollection ? rawShareRows !== null && rawShareRows !== void 0 ? rawShareRows : [] : void 0;
|
|
289
457
|
}, [shareCollection, rawShareRows]);
|
|
290
458
|
var assignmentCollection = (0, import_frappe.useFrappeCollection)(showSidebar && name && !frappeConfig.fixtures ? frappeConfig : void 0, "ToDo", {
|
|
@@ -302,21 +470,91 @@ function FrappeForm(param) {
|
|
|
302
470
|
_assignment: assignmentCollection
|
|
303
471
|
}) : null;
|
|
304
472
|
}, [assignmentCollection]);
|
|
305
|
-
var assignmentRows = (0,
|
|
473
|
+
var assignmentRows = (0, import_react3.useMemo)(function () {
|
|
306
474
|
return assignmentCollection ? rawAssignmentRows !== null && rawAssignmentRows !== void 0 ? rawAssignmentRows : [] : void 0;
|
|
307
475
|
}, [assignmentCollection, rawAssignmentRows]);
|
|
308
|
-
(0,
|
|
476
|
+
(0, import_react3.useEffect)(function () {
|
|
309
477
|
everLoadedRef.current = false;
|
|
310
478
|
setWasDeleted(false);
|
|
311
479
|
setConflictFields([]);
|
|
312
|
-
|
|
480
|
+
setDocError(null);
|
|
481
|
+
var seed = seedRef.current;
|
|
482
|
+
setBaselineDoc(seed);
|
|
483
|
+
if (seed) setLocalDoc(seed);
|
|
313
484
|
}, [doctype, name]);
|
|
485
|
+
var effectiveConnections = (0, import_react3.useMemo)(function () {
|
|
486
|
+
return connections !== null && connections !== void 0 ? connections : (0, import_frappeConnections.connectionsFromMeta)(meta);
|
|
487
|
+
}, [connections, meta]);
|
|
488
|
+
var readsConnections = Boolean(children) && Boolean(name) && effectiveConnections.length > 0;
|
|
489
|
+
var [connectionSnapshots, setConnectionSnapshots] = (0, import_react3.useState)({});
|
|
490
|
+
(0, import_react3.useEffect)(function () {
|
|
491
|
+
setConnectionSnapshots({});
|
|
492
|
+
}, [doctype, name]);
|
|
493
|
+
var connectionReads = (0, import_react3.useMemo)(function () {
|
|
494
|
+
return readsConnections && name ? effectiveConnections.map(function (link) {
|
|
495
|
+
var _link_limit;
|
|
496
|
+
return {
|
|
497
|
+
link,
|
|
498
|
+
options: {
|
|
499
|
+
fields: (0, import_frappeConnections.connectionFields)(link),
|
|
500
|
+
filters: [[link.fieldname, "=", name]],
|
|
501
|
+
limit: (_link_limit = link.limit) !== null && _link_limit !== void 0 ? _link_limit : 0
|
|
502
|
+
},
|
|
503
|
+
onChange: function onChange(snapshot) {
|
|
504
|
+
return setConnectionSnapshots(function (prev) {
|
|
505
|
+
return {
|
|
506
|
+
...prev,
|
|
507
|
+
[link.doctype]: snapshot
|
|
508
|
+
};
|
|
509
|
+
});
|
|
510
|
+
}
|
|
511
|
+
};
|
|
512
|
+
}) : [];
|
|
513
|
+
}, [readsConnections, effectiveConnections, name]);
|
|
514
|
+
var connectionRows = (0, import_react3.useMemo)(function () {
|
|
515
|
+
var rows = {};
|
|
516
|
+
var _iteratorNormalCompletion = true,
|
|
517
|
+
_didIteratorError = false,
|
|
518
|
+
_iteratorError = void 0;
|
|
519
|
+
try {
|
|
520
|
+
for (var _iterator = connectionReads[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
521
|
+
var {
|
|
522
|
+
link
|
|
523
|
+
} = _step.value;
|
|
524
|
+
var _ref2;
|
|
525
|
+
var _connectionSnapshots_link_doctype;
|
|
526
|
+
rows[link.doctype] = (_ref2 = (_connectionSnapshots_link_doctype = connectionSnapshots[link.doctype]) === null || _connectionSnapshots_link_doctype === void 0 ? void 0 : _connectionSnapshots_link_doctype.rows) !== null && _ref2 !== void 0 ? _ref2 : [];
|
|
527
|
+
}
|
|
528
|
+
} catch (err) {
|
|
529
|
+
_didIteratorError = true;
|
|
530
|
+
_iteratorError = err;
|
|
531
|
+
} finally {
|
|
532
|
+
try {
|
|
533
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
534
|
+
_iterator.return();
|
|
535
|
+
}
|
|
536
|
+
} finally {
|
|
537
|
+
if (_didIteratorError) {
|
|
538
|
+
throw _iteratorError;
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
return rows;
|
|
543
|
+
}, [connectionReads, connectionSnapshots]);
|
|
544
|
+
var connectionsLoading = connectionReads.some(function (param2) {
|
|
545
|
+
var {
|
|
546
|
+
link
|
|
547
|
+
} = param2;
|
|
548
|
+
var _ref2;
|
|
549
|
+
var _connectionSnapshots_link_doctype;
|
|
550
|
+
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;
|
|
551
|
+
});
|
|
314
552
|
(0, import_frappe.useFrappeDoctypeEvents)(name ? frappeConfig : void 0, doctype, function (event) {
|
|
315
553
|
if (event.type !== "doc_deleted") return;
|
|
316
554
|
var payload = event.payload;
|
|
317
555
|
if ((payload === null || payload === void 0 ? void 0 : payload.name) === name) setWasDeleted(true);
|
|
318
556
|
}, Boolean(name));
|
|
319
|
-
(0,
|
|
557
|
+
(0, import_react3.useEffect)(function () {
|
|
320
558
|
var incoming = liveDoc === null || liveDoc === void 0 ? void 0 : liveDoc.data;
|
|
321
559
|
if (incoming) {
|
|
322
560
|
everLoadedRef.current = true;
|
|
@@ -373,7 +611,7 @@ function FrappeForm(param) {
|
|
|
373
611
|
});
|
|
374
612
|
}
|
|
375
613
|
}, [liveDoc === null || liveDoc === void 0 ? void 0 : liveDoc.data, liveDoc === null || liveDoc === void 0 ? void 0 : liveDoc.isLoading, doctype, name]);
|
|
376
|
-
var dirtyFieldNames = (0,
|
|
614
|
+
var dirtyFieldNames = (0, import_react3.useMemo)(function () {
|
|
377
615
|
var local = localDoc;
|
|
378
616
|
var base = baselineDoc;
|
|
379
617
|
var dirty = [];
|
|
@@ -403,6 +641,40 @@ function FrappeForm(param) {
|
|
|
403
641
|
return dirty;
|
|
404
642
|
}, [localDoc, baselineDoc]);
|
|
405
643
|
var hasUnsavedChanges = dirtyFieldNames.length > 0;
|
|
644
|
+
var runFetchFrom = function runFetchFrom2(field, value) {
|
|
645
|
+
var rules = fetchMap === null || fetchMap === void 0 ? void 0 : fetchMap.get(field);
|
|
646
|
+
if (!rules || rules.length === 0) return;
|
|
647
|
+
var applyPatch = function applyPatch2(fetched2) {
|
|
648
|
+
setLocalDoc(function (prev) {
|
|
649
|
+
var current = prev;
|
|
650
|
+
if (current[field] !== value) return prev;
|
|
651
|
+
var patch = (0, import_fetchFrom.applyFetchedValues)(rules, fetched2, current);
|
|
652
|
+
return Object.keys(patch).length > 0 ? {
|
|
653
|
+
...current,
|
|
654
|
+
...patch
|
|
655
|
+
} : prev;
|
|
656
|
+
});
|
|
657
|
+
};
|
|
658
|
+
if (isEmptyFieldValue(value)) {
|
|
659
|
+
applyPatch({});
|
|
660
|
+
return;
|
|
661
|
+
}
|
|
662
|
+
var linkField = meta === null || meta === void 0 ? void 0 : meta.fields.find(function (metaField) {
|
|
663
|
+
return metaField.fieldname === field;
|
|
664
|
+
});
|
|
665
|
+
var targetDoctype = typeof (linkField === null || linkField === void 0 ? void 0 : linkField.options) === "string" ? linkField.options : "";
|
|
666
|
+
if (!targetDoctype) return;
|
|
667
|
+
var sources = Array.from(new Set(rules.map(function (rule) {
|
|
668
|
+
return rule.source;
|
|
669
|
+
})));
|
|
670
|
+
var fixtures = frappeConfig.fixtures;
|
|
671
|
+
var fetched = fixtures ? fixtures.getDoc(targetDoctype, String(value), sources).then(function (doc) {
|
|
672
|
+
return doc !== null && doc !== void 0 ? doc : {};
|
|
673
|
+
}) : (0, import_formActions.validateLink)((0, import_formActions.createHttpClient)(frappeConfig), targetDoctype, String(value), sources);
|
|
674
|
+
fetched.then(applyPatch).catch(function () {
|
|
675
|
+
return void 0;
|
|
676
|
+
});
|
|
677
|
+
};
|
|
406
678
|
var setValue = function setValue2(field, value) {
|
|
407
679
|
setLocalDoc(function (prev) {
|
|
408
680
|
return {
|
|
@@ -417,24 +689,47 @@ function FrappeForm(param) {
|
|
|
417
689
|
delete newErrors[String(field)];
|
|
418
690
|
return newErrors;
|
|
419
691
|
});
|
|
692
|
+
runFetchFrom(String(field), value);
|
|
420
693
|
};
|
|
421
694
|
var validateRequiredFields = function validateRequiredFields2() {
|
|
422
|
-
if (!
|
|
695
|
+
if (!formTabs) return {};
|
|
423
696
|
var validationErrors = {};
|
|
424
697
|
var doc = localDoc;
|
|
698
|
+
if (promptNamed && isEmptyFieldValue(doc.name)) {
|
|
699
|
+
validationErrors.name = t("Name is required");
|
|
700
|
+
}
|
|
425
701
|
var _iteratorNormalCompletion = true,
|
|
426
702
|
_didIteratorError = false,
|
|
427
703
|
_iteratorError = void 0;
|
|
428
704
|
try {
|
|
429
|
-
for (var _iterator =
|
|
430
|
-
var
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
705
|
+
for (var _iterator = formTabs[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
706
|
+
var tab = _step.value;
|
|
707
|
+
var _iteratorNormalCompletion1 = true,
|
|
708
|
+
_didIteratorError1 = false,
|
|
709
|
+
_iteratorError1 = void 0;
|
|
710
|
+
try {
|
|
711
|
+
for (var _iterator1 = tab.schema.fields[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true) {
|
|
712
|
+
var field = _step1.value;
|
|
713
|
+
if (!field.required) continue;
|
|
714
|
+
if (isEmptyFieldValue(doc[field.name])) {
|
|
715
|
+
validationErrors[field.name] = t("{{label}} is required", {
|
|
716
|
+
label: field.label || field.name
|
|
717
|
+
});
|
|
718
|
+
}
|
|
719
|
+
}
|
|
720
|
+
} catch (err) {
|
|
721
|
+
_didIteratorError1 = true;
|
|
722
|
+
_iteratorError1 = err;
|
|
723
|
+
} finally {
|
|
724
|
+
try {
|
|
725
|
+
if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
|
|
726
|
+
_iterator1.return();
|
|
727
|
+
}
|
|
728
|
+
} finally {
|
|
729
|
+
if (_didIteratorError1) {
|
|
730
|
+
throw _iteratorError1;
|
|
731
|
+
}
|
|
732
|
+
}
|
|
438
733
|
}
|
|
439
734
|
}
|
|
440
735
|
} catch (err) {
|
|
@@ -496,15 +791,23 @@ function FrappeForm(param) {
|
|
|
496
791
|
}
|
|
497
792
|
setConflictFields([]);
|
|
498
793
|
} else {
|
|
499
|
-
var _localDoc_name;
|
|
794
|
+
var _localDoc_name, _ref2;
|
|
795
|
+
var _getFrappeSyncModule;
|
|
500
796
|
if (!collection) return;
|
|
797
|
+
var temporaryName = (_localDoc_name = localDoc.name) !== null && _localDoc_name !== void 0 ? _localDoc_name : `new-${Date.now()}`;
|
|
501
798
|
var docToInsert = {
|
|
502
799
|
...localDoc,
|
|
503
800
|
doctype,
|
|
504
|
-
name:
|
|
801
|
+
name: temporaryName
|
|
505
802
|
};
|
|
506
803
|
var tx1 = collection.insert(docToInsert);
|
|
507
804
|
await tx1.isPersisted.promise;
|
|
805
|
+
var createdName = (_ref2 = (_getFrappeSyncModule = (0, import_frappe.getFrappeSyncModule)(frappeConfig)) === null || _getFrappeSyncModule === void 0 ? void 0 : _getFrappeSyncModule.createdName(temporaryName)) !== null && _ref2 !== void 0 ? _ref2 : temporaryName;
|
|
806
|
+
onSave === null || onSave === void 0 ? void 0 : onSave({
|
|
807
|
+
...localDoc,
|
|
808
|
+
name: createdName
|
|
809
|
+
});
|
|
810
|
+
return;
|
|
508
811
|
}
|
|
509
812
|
onSave === null || onSave === void 0 ? void 0 : onSave(localDoc);
|
|
510
813
|
} catch (err1) {
|
|
@@ -586,17 +889,47 @@ function FrappeForm(param) {
|
|
|
586
889
|
setIsSubmitting(false);
|
|
587
890
|
}
|
|
588
891
|
};
|
|
892
|
+
var titleField = meta === null || meta === void 0 ? void 0 : meta.title_field;
|
|
893
|
+
var titleValue = titleField ? localDoc[titleField] : void 0;
|
|
894
|
+
var pageTitle = isCreate ? t("New {{doctype}}", {
|
|
895
|
+
doctype
|
|
896
|
+
}) : String(titleValue || name);
|
|
897
|
+
var frame = function frame2(content, aside) {
|
|
898
|
+
return routePage ?
|
|
899
|
+
// flexBasis auto: see DeskFormPage (react-native-web's min-height:0
|
|
900
|
+
// reset would cap the scroll page at viewport height).
|
|
901
|
+
/* @__PURE__ */
|
|
902
|
+
(0, import_jsx_runtime.jsx)(import_components.DetailPageLayout, {
|
|
903
|
+
flexBasis: "auto",
|
|
904
|
+
toolbarLeading: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_forms.Button, {
|
|
905
|
+
size: "$3",
|
|
906
|
+
chromeless: true,
|
|
907
|
+
icon: import_react2.ArrowLeftIcon,
|
|
908
|
+
onPress: routePage.onBack,
|
|
909
|
+
"aria-label": t("Back to {{doctype}} list", {
|
|
910
|
+
doctype
|
|
911
|
+
}),
|
|
912
|
+
children: doctype
|
|
913
|
+
}),
|
|
914
|
+
header: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.PageHeader, {
|
|
915
|
+
title: pageTitle,
|
|
916
|
+
divider: false
|
|
917
|
+
}),
|
|
918
|
+
aside,
|
|
919
|
+
children: content
|
|
920
|
+
}) : content;
|
|
921
|
+
};
|
|
589
922
|
if (!children && isMetaLoading && !meta) {
|
|
590
|
-
return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.YStack, {
|
|
923
|
+
return frame(/* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.YStack, {
|
|
591
924
|
...knobProps.panelPadding,
|
|
592
925
|
testID: "frappe-form-skeleton",
|
|
593
926
|
children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.AsyncSkeleton, {
|
|
594
927
|
layout: "generic"
|
|
595
928
|
})
|
|
596
|
-
});
|
|
929
|
+
}));
|
|
597
930
|
}
|
|
598
|
-
if (!children && metaError && !meta) {
|
|
599
|
-
return /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui.YStack, {
|
|
931
|
+
if (!children && metaError && !meta && !name) {
|
|
932
|
+
return frame(/* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui.YStack, {
|
|
600
933
|
...knobProps.panelPadding,
|
|
601
934
|
alignItems: "center",
|
|
602
935
|
...knobProps.gap,
|
|
@@ -611,19 +944,33 @@ function FrappeForm(param) {
|
|
|
611
944
|
...knobProps.body,
|
|
612
945
|
children: metaError.message
|
|
613
946
|
})]
|
|
614
|
-
});
|
|
947
|
+
}));
|
|
615
948
|
}
|
|
616
|
-
|
|
617
|
-
|
|
949
|
+
var isDocReading = Boolean(name) && (!docCollection || Boolean(liveDoc === null || liveDoc === void 0 ? void 0 : liveDoc.isLoading));
|
|
950
|
+
var showsSeed = Boolean(seedDoc) && isDocReading;
|
|
951
|
+
if (name && docError && !(liveDoc === null || liveDoc === void 0 ? void 0 : liveDoc.data) && !wasDeleted) {
|
|
952
|
+
if (errorFallback !== void 0) return frame(errorFallback);
|
|
953
|
+
return frame(/* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.AsyncBoundary, {
|
|
954
|
+
...knobProps.panelPadding,
|
|
955
|
+
error: docError,
|
|
956
|
+
errorTitle: t("Failed to load {{doctype}}", {
|
|
957
|
+
doctype
|
|
958
|
+
})
|
|
959
|
+
}));
|
|
960
|
+
}
|
|
961
|
+
if (name && isDocReading && !showsSeed && !wasDeleted) {
|
|
962
|
+
if (loadingFallback !== void 0) return frame(loadingFallback);
|
|
963
|
+
return frame(/* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.YStack, {
|
|
618
964
|
...knobProps.panelPadding,
|
|
619
965
|
testID: "frappe-form-skeleton",
|
|
620
966
|
children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.AsyncSkeleton, {
|
|
621
967
|
layout: "generic"
|
|
622
968
|
})
|
|
623
|
-
});
|
|
969
|
+
}));
|
|
624
970
|
}
|
|
625
|
-
if (name && !
|
|
626
|
-
|
|
971
|
+
if (name && !isDocReading && !(liveDoc === null || liveDoc === void 0 ? void 0 : liveDoc.data) && !wasDeleted) {
|
|
972
|
+
if (notFoundFallback !== void 0) return frame(notFoundFallback);
|
|
973
|
+
return frame(/* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui.YStack, {
|
|
627
974
|
...knobProps.panelPadding,
|
|
628
975
|
alignItems: "center",
|
|
629
976
|
...knobProps.gap,
|
|
@@ -640,9 +987,12 @@ function FrappeForm(param) {
|
|
|
640
987
|
name
|
|
641
988
|
})
|
|
642
989
|
})]
|
|
643
|
-
});
|
|
990
|
+
}));
|
|
644
991
|
}
|
|
645
992
|
var effectiveDisabled = disabled || wasDeleted;
|
|
993
|
+
var readOnlyView = Boolean(onEdit) || readsWithoutMeta;
|
|
994
|
+
var fieldsDisabled = effectiveDisabled || readOnlyView;
|
|
995
|
+
var shownTabs = formTabs !== null && formTabs !== void 0 ? formTabs : recordTabs;
|
|
646
996
|
var imageFieldName = meta === null || meta === void 0 ? void 0 : meta.image_field;
|
|
647
997
|
var sidebarImageUrl = imageFieldName ? resolveFileUrl(localDoc[imageFieldName], finalBaseURL) : void 0;
|
|
648
998
|
var conflictLabels = conflictFields.map(function (fieldname) {
|
|
@@ -651,138 +1001,192 @@ function FrappeForm(param) {
|
|
|
651
1001
|
});
|
|
652
1002
|
return (field === null || field === void 0 ? void 0 : field.label) || fieldname;
|
|
653
1003
|
}).join(", ");
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
1004
|
+
var formTabItems = (shownTabs !== null && shownTabs !== void 0 ? shownTabs : []).map(function (tab) {
|
|
1005
|
+
return {
|
|
1006
|
+
value: tab.key,
|
|
1007
|
+
label: tab.label,
|
|
1008
|
+
content: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_schemaForm.SchemaForm, {
|
|
1009
|
+
schema: tab.schema,
|
|
1010
|
+
doc: localDoc,
|
|
1011
|
+
setValue: function setValue1(field, value) {
|
|
1012
|
+
return setValue(field, value);
|
|
1013
|
+
},
|
|
1014
|
+
errors,
|
|
1015
|
+
disabled: fieldsDisabled,
|
|
1016
|
+
overrides,
|
|
1017
|
+
readOnlyFields,
|
|
1018
|
+
sectionHeadingLevel,
|
|
1019
|
+
order
|
|
1020
|
+
})
|
|
1021
|
+
};
|
|
1022
|
+
});
|
|
1023
|
+
var tabItems = showConnections && name && effectiveConnections.length > 0 ? [...formTabItems, {
|
|
1024
|
+
value: "__connections",
|
|
1025
|
+
label: t("Connections"),
|
|
1026
|
+
content: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_FrappeFormConnections.FrappeFormConnections, {
|
|
1027
|
+
connection: frappeConfig,
|
|
1028
|
+
connections: effectiveConnections,
|
|
1029
|
+
name
|
|
1030
|
+
})
|
|
1031
|
+
}] : formTabItems;
|
|
1032
|
+
var effectiveTab = activeTab && tabItems.some(function (tab) {
|
|
1033
|
+
return tab.value === activeTab;
|
|
1034
|
+
}) ? activeTab : (_tabItems_ = tabItems[0]) === null || _tabItems_ === void 0 ? void 0 : _tabItems_.value;
|
|
1035
|
+
var localName = localDoc.name;
|
|
1036
|
+
var sidebar = showSidebar && name && meta ? /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_FormSidebar.FormSidebar, {
|
|
1037
|
+
imageUrl: sidebarImageUrl,
|
|
1038
|
+
sections: buildSidebarSections(localDoc, shareRows, t, assignmentRows),
|
|
1039
|
+
metadata: mapDocToSidebarMetadata(localDoc, t)
|
|
1040
|
+
}) : void 0;
|
|
1041
|
+
return frame(
|
|
1042
|
+
// flexBasis auto (not the flex:1 shorthand's 0%): inside scroll-flow page
|
|
1043
|
+
// scaffolds (LC-29 templates) the parent is auto-height, and a 0% basis
|
|
1044
|
+
// collapses this stack to zero height on web — content then paints over
|
|
1045
|
+
// whatever follows. Bounded parents still fill (grow 1) exactly as before.
|
|
1046
|
+
/* @__PURE__ */
|
|
1047
|
+
(0, import_jsx_runtime.jsxs)(import_tamagui.YStack, {
|
|
1048
|
+
...knobProps.gapLg,
|
|
1049
|
+
flexGrow: 1,
|
|
1050
|
+
flexShrink: 1,
|
|
1051
|
+
flexBasis: "auto",
|
|
1052
|
+
children: [/* @__PURE__ */(0, import_jsx_runtime.jsx)(import_FrappeReconnectIndicator.FrappeReconnectIndicator, {
|
|
1053
|
+
config: frappeConfig
|
|
1054
|
+
}), connectionReads.map(function (read) {
|
|
1055
|
+
return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_FrappeRowsReader.FrappeRowsReader, {
|
|
1056
|
+
connection: frappeConfig,
|
|
1057
|
+
doctype: read.link.doctype,
|
|
1058
|
+
options: read.options,
|
|
1059
|
+
onChange: read.onChange
|
|
1060
|
+
}, read.link.doctype);
|
|
1061
|
+
}), wasDeleted && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.XStack, {
|
|
1062
|
+
role: "alert",
|
|
1063
|
+
alignItems: "center",
|
|
1064
|
+
...knobProps.containerRadius,
|
|
1065
|
+
...knobProps.panelPadding,
|
|
1066
|
+
backgroundColor: "$red3",
|
|
1067
|
+
testID: "frappe-form-deleted-banner",
|
|
1068
|
+
children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Text, {
|
|
1069
|
+
color: import_forms.formCommonColors.error,
|
|
1070
|
+
...knobProps.body,
|
|
1071
|
+
children: hasUnsavedChanges ? t("This {{doctype}} was deleted on the server. Fields are read-only and your unsaved edits can no longer be saved.", {
|
|
1072
|
+
doctype
|
|
1073
|
+
}) : t("This {{doctype}} was deleted on the server. Fields are read-only.", {
|
|
1074
|
+
doctype
|
|
1075
|
+
})
|
|
1076
|
+
})
|
|
1077
|
+
}), !wasDeleted && conflictFields.length > 0 && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.XStack, {
|
|
1078
|
+
role: "status",
|
|
1079
|
+
alignItems: "center",
|
|
1080
|
+
...knobProps.containerRadius,
|
|
1081
|
+
...knobProps.panelPadding,
|
|
1082
|
+
backgroundColor: "$orange3",
|
|
1083
|
+
testID: "frappe-form-conflict-banner",
|
|
1084
|
+
children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Text, {
|
|
1085
|
+
color: "$orange11",
|
|
1086
|
+
...knobProps.body,
|
|
1087
|
+
children: t("Changed elsewhere while you were editing: {{fields}}. Your edits are kept \u2014 saving will overwrite the newer server values.", {
|
|
1088
|
+
fields: conflictLabels
|
|
1089
|
+
})
|
|
1090
|
+
})
|
|
1091
|
+
}),
|
|
1092
|
+
/* flexBasis auto — see the root stack note (zero-height collapse in
|
|
1093
|
+
auto-height scroll flows would paint the Timeline over the form). */
|
|
659
1094
|
/* @__PURE__ */
|
|
660
|
-
(0, import_jsx_runtime.jsxs)(import_tamagui.
|
|
661
|
-
...knobProps.gapLg,
|
|
1095
|
+
(0, import_jsx_runtime.jsxs)(import_tamagui.XStack, {
|
|
662
1096
|
flexGrow: 1,
|
|
663
1097
|
flexShrink: 1,
|
|
664
1098
|
flexBasis: "auto",
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
backgroundColor: "$red3",
|
|
673
|
-
testID: "frappe-form-deleted-banner",
|
|
674
|
-
children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Text, {
|
|
675
|
-
color: import_forms.formCommonColors.error,
|
|
676
|
-
...knobProps.body,
|
|
677
|
-
children: hasUnsavedChanges ? t("This {{doctype}} was deleted on the server. Fields are read-only and your unsaved edits can no longer be saved.", {
|
|
678
|
-
doctype
|
|
679
|
-
}) : t("This {{doctype}} was deleted on the server. Fields are read-only.", {
|
|
680
|
-
doctype
|
|
681
|
-
})
|
|
682
|
-
})
|
|
683
|
-
}), !wasDeleted && conflictFields.length > 0 && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.XStack, {
|
|
684
|
-
role: "status",
|
|
685
|
-
alignItems: "center",
|
|
686
|
-
...knobProps.containerRadius,
|
|
687
|
-
...knobProps.panelPadding,
|
|
688
|
-
backgroundColor: "$orange3",
|
|
689
|
-
testID: "frappe-form-conflict-banner",
|
|
690
|
-
children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Text, {
|
|
691
|
-
color: "$orange11",
|
|
692
|
-
...knobProps.body,
|
|
693
|
-
children: t("Changed elsewhere while you were editing: {{fields}}. Your edits are kept \u2014 saving will overwrite the newer server values.", {
|
|
694
|
-
fields: conflictLabels
|
|
695
|
-
})
|
|
696
|
-
})
|
|
697
|
-
}),
|
|
698
|
-
/* flexBasis auto — see the root stack note (zero-height collapse in
|
|
699
|
-
auto-height scroll flows would paint the Timeline over the form). */
|
|
700
|
-
/* @__PURE__ */
|
|
701
|
-
(0, import_jsx_runtime.jsxs)(import_tamagui.XStack, {
|
|
702
|
-
flexGrow: 1,
|
|
703
|
-
flexShrink: 1,
|
|
704
|
-
flexBasis: "auto",
|
|
1099
|
+
...knobProps.gapLg,
|
|
1100
|
+
children: [
|
|
1101
|
+
/* Sidebar (edit mode only) — assignments/shares/image are live.
|
|
1102
|
+
A routed page carries it in the template's aside instead. */
|
|
1103
|
+
routePage ? null : sidebar, /* Form body */
|
|
1104
|
+
/* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui.YStack, {
|
|
1105
|
+
flex: 1,
|
|
705
1106
|
...knobProps.gapLg,
|
|
706
|
-
children: [
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
1107
|
+
children: [children ?
|
|
1108
|
+
// Render-prop mode
|
|
1109
|
+
children({
|
|
1110
|
+
doc: localDoc,
|
|
1111
|
+
setValue,
|
|
1112
|
+
isSubmitting,
|
|
1113
|
+
errors,
|
|
1114
|
+
meta,
|
|
1115
|
+
disabled: fieldsDisabled,
|
|
1116
|
+
connections: connectionRows,
|
|
1117
|
+
connectionsLoading
|
|
1118
|
+
}) : shownTabs ? /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui.YStack, {
|
|
714
1119
|
...knobProps.gapLg,
|
|
715
|
-
children: [
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
isSubmitting,
|
|
721
|
-
errors,
|
|
722
|
-
meta,
|
|
723
|
-
disabled: effectiveDisabled
|
|
724
|
-
}) : formSchema ?
|
|
725
|
-
// Schema-driven mode using generic SchemaForm from @multiplatform.one/forms
|
|
726
|
-
/* @__PURE__ */
|
|
727
|
-
(0, import_jsx_runtime.jsx)(import_schemaForm.SchemaForm, {
|
|
728
|
-
schema: formSchema,
|
|
729
|
-
doc: localDoc,
|
|
730
|
-
setValue: function setValue1(field, value) {
|
|
731
|
-
return setValue(field, value);
|
|
1120
|
+
children: [promptNamed && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_forms.Input, {
|
|
1121
|
+
label: t("Name"),
|
|
1122
|
+
value: typeof localName === "string" ? localName : "",
|
|
1123
|
+
onChangeText: function onChangeText(value) {
|
|
1124
|
+
return setValue("name", value);
|
|
732
1125
|
},
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
})
|
|
751
|
-
}), errors.general && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Text, {
|
|
752
|
-
color: import_forms.formCommonColors.error,
|
|
1126
|
+
placeholder: t("New document name"),
|
|
1127
|
+
error: errors.name,
|
|
1128
|
+
disabled: effectiveDisabled
|
|
1129
|
+
}), tabItems.length > 1 ? /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.Tabs, {
|
|
1130
|
+
items: tabItems,
|
|
1131
|
+
value: effectiveTab,
|
|
1132
|
+
onChange: setActiveTab,
|
|
1133
|
+
lazyMount: true
|
|
1134
|
+
}) : (_ref1 = (_tabItems_1 = tabItems[0]) === null || _tabItems_1 === void 0 ? void 0 : _tabItems_1.content) !== null && _ref1 !== void 0 ? _ref1 : null]
|
|
1135
|
+
}) :
|
|
1136
|
+
// Metadata unavailable (should be covered by metaError branch above)
|
|
1137
|
+
/* @__PURE__ */
|
|
1138
|
+
(0, import_jsx_runtime.jsx)(import_tamagui.YStack, {
|
|
1139
|
+
...knobProps.panelPadding,
|
|
1140
|
+
alignItems: "center",
|
|
1141
|
+
children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Text, {
|
|
1142
|
+
color: import_forms.formCommonColors.muted,
|
|
753
1143
|
...knobProps.body,
|
|
754
|
-
children:
|
|
755
|
-
})
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
1144
|
+
children: t("Form schema unavailable")
|
|
1145
|
+
})
|
|
1146
|
+
}), errors.general && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Text, {
|
|
1147
|
+
color: import_forms.formCommonColors.error,
|
|
1148
|
+
...knobProps.body,
|
|
1149
|
+
children: errors.general
|
|
1150
|
+
}), showToolbar && !readsWithoutMeta && /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui.XStack, {
|
|
1151
|
+
...knobProps.gap,
|
|
1152
|
+
justifyContent: "flex-end",
|
|
1153
|
+
alignItems: "center",
|
|
1154
|
+
paddingTop: "$3",
|
|
1155
|
+
children: [hasUnsavedChanges && !onEdit && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Text, {
|
|
1156
|
+
color: "$orange11",
|
|
1157
|
+
marginInlineEnd: "auto",
|
|
1158
|
+
...knobProps.body,
|
|
1159
|
+
children: t("Not Saved")
|
|
1160
|
+
}), name && onDelete && !wasDeleted && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_forms.Button, {
|
|
1161
|
+
outlined: true,
|
|
1162
|
+
error: true,
|
|
1163
|
+
icon: import_react2.TrashIcon,
|
|
1164
|
+
loading: isSubmitting,
|
|
1165
|
+
disabled: effectiveDisabled,
|
|
1166
|
+
disabledReason: t("Form is read-only"),
|
|
1167
|
+
disabledReasonPlacement: "inline",
|
|
1168
|
+
onPress: handleDelete,
|
|
1169
|
+
children: t("Delete")
|
|
1170
|
+
}), onEdit ? /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_forms.Button, {
|
|
1171
|
+
accent: true,
|
|
1172
|
+
icon: import_react2.PencilSimpleIcon,
|
|
1173
|
+
disabled: effectiveDisabled,
|
|
1174
|
+
disabledReason: t("Form is read-only"),
|
|
1175
|
+
disabledReasonPlacement: "inline",
|
|
1176
|
+
onPress: onEdit,
|
|
1177
|
+
children: t("Edit")
|
|
1178
|
+
}) : /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, {
|
|
1179
|
+
children: [onCancel && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_forms.Button, {
|
|
776
1180
|
outlined: true,
|
|
777
|
-
icon:
|
|
778
|
-
disabled
|
|
1181
|
+
icon: import_react2.XIcon,
|
|
1182
|
+
disabled,
|
|
779
1183
|
disabledReason: t("Form is read-only"),
|
|
780
1184
|
disabledReasonPlacement: "inline",
|
|
781
1185
|
onPress: handleCancel,
|
|
782
1186
|
children: t("Cancel")
|
|
783
1187
|
}), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_forms.Button, {
|
|
784
1188
|
accent: true,
|
|
785
|
-
icon:
|
|
1189
|
+
icon: import_react2.FloppyDiskIcon,
|
|
786
1190
|
loading: isSubmitting,
|
|
787
1191
|
disabled: effectiveDisabled,
|
|
788
1192
|
disabledReason: t("Form is read-only"),
|
|
@@ -792,13 +1196,13 @@ function FrappeForm(param) {
|
|
|
792
1196
|
})]
|
|
793
1197
|
})]
|
|
794
1198
|
})]
|
|
795
|
-
}), /* Timeline (edit mode only) — live Comment/Version via useFrappeCollection */
|
|
796
|
-
showTimeline && name && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_timeline.Timeline, {
|
|
797
|
-
doctype,
|
|
798
|
-
docname: name,
|
|
799
|
-
label: t("Activity")
|
|
800
1199
|
})]
|
|
801
|
-
})
|
|
802
|
-
|
|
1200
|
+
}), /* Timeline (edit mode only) — live Comment/Version via useFrappeCollection */
|
|
1201
|
+
showTimeline && name && !readsWithoutMeta && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_timeline.Timeline, {
|
|
1202
|
+
doctype,
|
|
1203
|
+
docname: name,
|
|
1204
|
+
label: t("Activity")
|
|
1205
|
+
})]
|
|
1206
|
+
}), routePage ? sidebar : void 0);
|
|
803
1207
|
}
|
|
804
1208
|
//# sourceMappingURL=FrappeForm.native.js.map
|