@multiplatform.one/frappe-ui 7.28.1 → 7.29.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { createElement as _createElement } from "react";
|
|
3
|
-
import {
|
|
3
|
+
import { useFrappeCollection, useLiveQuery } from "@multiplatform.one/frappe";
|
|
4
4
|
import { AsyncBoundary, AsyncSkeleton, DetailPageLayout, EmptyState, PageHeader, Tabs } from "@multiplatform.one/components";
|
|
5
5
|
import { SchemaForm } from "./schemaForm/index.native.js";
|
|
6
6
|
import { FormSidebar } from "./FormSidebar.native.js";
|
|
7
|
-
import { eq } from "@tanstack/db";
|
|
8
7
|
import { ArrowLeftIcon } from "@phosphor-icons/react";
|
|
9
|
-
import {
|
|
8
|
+
import { useEffect, useMemo, useState } from "react";
|
|
10
9
|
import { useTranslation } from "react-i18next";
|
|
11
10
|
import { Button, Input, formCommonColors } from "@multiplatform.one/forms";
|
|
12
11
|
import { Text, XStack, YStack } from "tamagui";
|
|
@@ -15,70 +14,22 @@ import { useFrappeConfig } from "./FrappeProvider.native.js";
|
|
|
15
14
|
import { FrappeReconnectIndicator } from "./FrappeReconnectIndicator.native.js";
|
|
16
15
|
import { Timeline } from "./components/timeline.native.js";
|
|
17
16
|
import { dialog } from "@multiplatform.one/desktop";
|
|
18
|
-
import {
|
|
19
|
-
import { buildPermLevelMatrix } from "./formEngine/fieldPermissions.native.js";
|
|
20
|
-
import { createHttpClient, validateLink } from "./formEngine/formActions.native.js";
|
|
21
|
-
import { buildFormTabs, isPromptNamed } from "./formEngine/formLayout.native.js";
|
|
22
|
-
import { setCreatePrefill, takeCreatePrefill } from "./formEngine/createPrefill.native.js";
|
|
23
|
-
import { buildAmendValues, canDeleteDoc, canEditDoc, isAmendable, resolveDocAction, resolveDocIndicator } from "./formEngine/docLifecycle.native.js";
|
|
24
|
-
import { useAmendedAs } from "./formEngine/useAmendedAs.native.js";
|
|
25
|
-
import { useDocRights } from "./formEngine/useDocRights.native.js";
|
|
26
|
-
import { extractServerError } from "./formEngine/useFormEngine.native.js";
|
|
17
|
+
import { canDeleteDoc, canEditDoc, isAmendable, resolveDocAction, resolveDocIndicator } from "./formEngine/docLifecycle.native.js";
|
|
27
18
|
import { FrappeFormActions } from "./FrappeFormActions.native.js";
|
|
28
19
|
import { connectionFields, connectionsFromMeta } from "./frappeConnections.native.js";
|
|
29
20
|
import { FrappeFormConnections } from "./FrappeFormConnections.native.js";
|
|
30
21
|
import { FrappeNotConfigured } from "./FrappeNotConfigured.native.js";
|
|
31
22
|
import { FrappeRowsReader } from "./FrappeRowsReader.native.js";
|
|
23
|
+
import { isPermissionError } from "./liveErrors.native.js";
|
|
24
|
+
import { fieldsFromRecord } from "./recordShape.native.js";
|
|
32
25
|
import { frappeRouteHref, frappeRouteTarget, useFrappeRouter } from "./frappeNavigation.native.js";
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
|
|
37
|
-
return !!right[Symbol.hasInstance](left);
|
|
38
|
-
} else {
|
|
39
|
-
return left instanceof right;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
function isEmptyFieldValue(value) {
|
|
43
|
-
if (value === void 0 || value === null) return true;
|
|
44
|
-
if (typeof value === "string" && value.trim() === "") return true;
|
|
45
|
-
if (Array.isArray(value) && value.length === 0) return true;
|
|
46
|
-
return false;
|
|
47
|
-
}
|
|
48
|
-
function sectionsToLayoutFields(sections) {
|
|
49
|
-
var fields = [];
|
|
50
|
-
sections.forEach(function (section, sectionIndex) {
|
|
51
|
-
fields.push({
|
|
52
|
-
fieldname: `__section_${sectionIndex}`,
|
|
53
|
-
fieldtype: section.tab ? "Tab Break" : "Section Break",
|
|
54
|
-
label: section.label,
|
|
55
|
-
collapsible: section.collapsible ? 1 : 0
|
|
56
|
-
});
|
|
57
|
-
section.columns.forEach(function (column, columnIndex) {
|
|
58
|
-
if (columnIndex > 0) {
|
|
59
|
-
fields.push({
|
|
60
|
-
fieldname: `__column_${sectionIndex}_${columnIndex}`,
|
|
61
|
-
fieldtype: "Column Break"
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
fields.push(...column.fields);
|
|
65
|
-
});
|
|
66
|
-
});
|
|
67
|
-
return fields;
|
|
68
|
-
}
|
|
69
|
-
var documentBookkeeping = /* @__PURE__ */new Set(["name", "owner", "creation", "modified", "modified_by", "docstatus", "idx", "doctype", "_user_tags", "_comments", "_assign", "_liked_by", "_seen"]);
|
|
70
|
-
function fieldsFromDocument(doc) {
|
|
71
|
-
return Object.entries(doc).filter(function (param) {
|
|
72
|
-
var [key, value] = param;
|
|
73
|
-
return !key.startsWith("$") && !documentBookkeeping.has(key) && (value === null || typeof value === "string" || typeof value === "number");
|
|
74
|
-
}).map(function (param) {
|
|
75
|
-
var [key, value] = param;
|
|
26
|
+
import { useFrappeForm } from "./useFrappeForm.native.js";
|
|
27
|
+
function schemaFieldsFromRecord(doc) {
|
|
28
|
+
return fieldsFromRecord(doc).map(function (field) {
|
|
76
29
|
return {
|
|
77
|
-
name:
|
|
78
|
-
label:
|
|
79
|
-
|
|
80
|
-
}),
|
|
81
|
-
type: typeof value === "number" ? Number.isInteger(value) ? "Int" : "Float" : "Data",
|
|
30
|
+
name: field.fieldname,
|
|
31
|
+
label: field.label,
|
|
32
|
+
type: field.fieldtype,
|
|
82
33
|
readOnly: true
|
|
83
34
|
};
|
|
84
35
|
});
|
|
@@ -248,21 +199,50 @@ function FrappeFormRoute(param) {
|
|
|
248
199
|
}
|
|
249
200
|
});
|
|
250
201
|
}
|
|
251
|
-
function FrappeFormBody(
|
|
202
|
+
function FrappeFormBody(props) {
|
|
203
|
+
if (props.form) return /* @__PURE__ */_jsx(FrappeFormView, {
|
|
204
|
+
...props,
|
|
205
|
+
form: props.form
|
|
206
|
+
});
|
|
207
|
+
return /* @__PURE__ */_jsx(FrappeFormOwned, {
|
|
208
|
+
...props
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
function FrappeFormOwned(props) {
|
|
212
|
+
var _props_baseURL, _props_showSidebar;
|
|
213
|
+
var config = useFrappeConfig();
|
|
214
|
+
if (!((_props_baseURL = props.baseURL) !== null && _props_baseURL !== void 0 ? _props_baseURL : config === null || config === void 0 ? void 0 : config.baseURL)) {
|
|
215
|
+
throw new Error("FrappeForm requires baseURL prop or FrappeProvider with baseURL");
|
|
216
|
+
}
|
|
217
|
+
var form = useFrappeForm({
|
|
218
|
+
doctype: props.doctype,
|
|
219
|
+
name: props.name,
|
|
220
|
+
baseURL: props.baseURL,
|
|
221
|
+
auth: props.auth,
|
|
222
|
+
syncOptions: props.syncOptions,
|
|
223
|
+
fields: props.fields,
|
|
224
|
+
sections: props.sections,
|
|
225
|
+
hideFields: props.hideFields,
|
|
226
|
+
hideSections: props.hideSections,
|
|
227
|
+
roles: props.roles,
|
|
228
|
+
readShares: (_props_showSidebar = props.showSidebar) !== null && _props_showSidebar !== void 0 ? _props_showSidebar : true,
|
|
229
|
+
disabled: props.disabled,
|
|
230
|
+
initialDoc: props.initialDoc
|
|
231
|
+
});
|
|
232
|
+
return /* @__PURE__ */_jsx(FrappeFormView, {
|
|
233
|
+
...props,
|
|
234
|
+
form
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
function FrappeFormView(param) {
|
|
252
238
|
var {
|
|
253
|
-
|
|
254
|
-
auth,
|
|
255
|
-
syncOptions,
|
|
239
|
+
form,
|
|
256
240
|
doctype,
|
|
257
241
|
name,
|
|
258
|
-
fields,
|
|
259
242
|
children,
|
|
260
243
|
overrides,
|
|
261
|
-
hideFields,
|
|
262
244
|
readOnlyFields,
|
|
263
|
-
sections,
|
|
264
245
|
order,
|
|
265
|
-
roles,
|
|
266
246
|
onSave,
|
|
267
247
|
onCancel,
|
|
268
248
|
onDelete,
|
|
@@ -271,81 +251,57 @@ function FrappeFormBody(param) {
|
|
|
271
251
|
showToolbar = true,
|
|
272
252
|
showSidebar = true,
|
|
273
253
|
showTimeline = true,
|
|
254
|
+
showBanners = true,
|
|
274
255
|
disabled = false,
|
|
275
256
|
sectionHeadingLevel,
|
|
276
257
|
connections,
|
|
277
258
|
showConnections = true,
|
|
278
|
-
|
|
259
|
+
extraTabs,
|
|
260
|
+
renderFieldWrapper,
|
|
261
|
+
renderTab,
|
|
279
262
|
loadingFallback,
|
|
280
263
|
notFoundFallback,
|
|
281
264
|
errorFallback,
|
|
282
265
|
routePage
|
|
283
266
|
} = param;
|
|
284
|
-
var _ref
|
|
267
|
+
var _ref;
|
|
285
268
|
var _tabItems_, _tabItems_1;
|
|
286
|
-
var config = useFrappeConfig();
|
|
287
269
|
var {
|
|
288
270
|
knobProps
|
|
289
271
|
} = useResolvedKnobs();
|
|
290
272
|
var {
|
|
291
273
|
t
|
|
292
274
|
} = useTranslation();
|
|
293
|
-
var seedDoc = name && initialDoc && initialDoc.name === name ? initialDoc : void 0;
|
|
294
|
-
var seedRef = useRef(seedDoc);
|
|
295
|
-
seedRef.current = seedDoc;
|
|
296
|
-
var [localDoc, setLocalDoc] = useState(function () {
|
|
297
|
-
return seedDoc !== null && seedDoc !== void 0 ? seedDoc : {};
|
|
298
|
-
});
|
|
299
|
-
var [baselineDoc, setBaselineDoc] = useState(function () {
|
|
300
|
-
return seedDoc;
|
|
301
|
-
});
|
|
302
|
-
var [docError, setDocError] = useState(null);
|
|
303
|
-
var [conflictFields, setConflictFields] = useState([]);
|
|
304
|
-
var [wasDeleted, setWasDeleted] = useState(false);
|
|
305
|
-
var [isSubmitting, setIsSubmitting] = useState(false);
|
|
306
|
-
var [errors, setErrors] = useState({});
|
|
307
|
-
var [activeTab, setActiveTab] = useState(void 0);
|
|
308
|
-
var everLoadedRef = useRef(false);
|
|
309
|
-
var localDocRef = useRef(localDoc);
|
|
310
|
-
localDocRef.current = localDoc;
|
|
311
|
-
var baselineRef = useRef(baselineDoc);
|
|
312
|
-
baselineRef.current = baselineDoc;
|
|
313
|
-
var createDraftRef = useRef(void 0);
|
|
314
|
-
var finalBaseURL = baseURL !== null && baseURL !== void 0 ? baseURL : config === null || config === void 0 ? void 0 : config.baseURL;
|
|
315
|
-
var finalAuth = auth !== null && auth !== void 0 ? auth : config === null || config === void 0 ? void 0 : config.auth;
|
|
316
|
-
var finalSyncOptions = syncOptions !== null && syncOptions !== void 0 ? syncOptions : config === null || config === void 0 ? void 0 : config.syncOptions;
|
|
317
|
-
if (!finalBaseURL) {
|
|
318
|
-
throw new Error("FrappeForm requires baseURL prop or FrappeProvider with baseURL");
|
|
319
|
-
}
|
|
320
|
-
var frappeConfig = useMemo(function () {
|
|
321
|
-
return {
|
|
322
|
-
baseURL: finalBaseURL,
|
|
323
|
-
socketPort: config === null || config === void 0 ? void 0 : config.socketPort,
|
|
324
|
-
siteName: config === null || config === void 0 ? void 0 : config.siteName,
|
|
325
|
-
socketBaseURL: config === null || config === void 0 ? void 0 : config.socketBaseURL,
|
|
326
|
-
auth: finalAuth,
|
|
327
|
-
syncOptions: finalSyncOptions,
|
|
328
|
-
realtime: config === null || config === void 0 ? void 0 : config.realtime,
|
|
329
|
-
fixtures: config === null || config === void 0 ? void 0 : config.fixtures
|
|
330
|
-
};
|
|
331
|
-
}, [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]);
|
|
332
275
|
var {
|
|
333
276
|
meta,
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
277
|
+
metaLoading: isMetaLoading,
|
|
278
|
+
metaError,
|
|
279
|
+
doc: localDoc,
|
|
280
|
+
baseline: baselineDoc,
|
|
281
|
+
setValue,
|
|
282
|
+
errors,
|
|
283
|
+
isSubmitting,
|
|
284
|
+
docstatus,
|
|
285
|
+
isSubmittable,
|
|
286
|
+
rights,
|
|
287
|
+
rightsPending,
|
|
288
|
+
canWrite: canWriteRecord,
|
|
289
|
+
wasDeleted,
|
|
290
|
+
conflictFields,
|
|
291
|
+
docError,
|
|
292
|
+
tabs: formTabs,
|
|
293
|
+
promptNamed,
|
|
294
|
+
activeTab,
|
|
295
|
+
setActiveTab,
|
|
296
|
+
amendedAs
|
|
297
|
+
} = form;
|
|
298
|
+
var frappeConfig = form.connection;
|
|
338
299
|
var isCreate = !name;
|
|
339
|
-
var
|
|
340
|
-
var layoutFields = useMemo(function () {
|
|
341
|
-
if (!meta) return void 0;
|
|
342
|
-
return sections ? sectionsToLayoutFields(sections) : meta.fields;
|
|
343
|
-
}, [meta, sections]);
|
|
344
|
-
var amendedAs = useAmendedAs(isSubmittable && docstatus === 2 ? frappeConfig : void 0, doctype, name);
|
|
300
|
+
var hasUnsavedChanges = form.isDirty;
|
|
345
301
|
var readsWithoutMeta = !children && !meta && Boolean(metaError) && Boolean(name);
|
|
346
302
|
var recordTabs = useMemo(function () {
|
|
347
303
|
if (!readsWithoutMeta || !baselineDoc) return void 0;
|
|
348
|
-
var recordFields =
|
|
304
|
+
var recordFields = schemaFieldsFromRecord(baselineDoc);
|
|
349
305
|
return [{
|
|
350
306
|
key: "__details",
|
|
351
307
|
label: t("Details"),
|
|
@@ -359,97 +315,7 @@ function FrappeFormBody(param) {
|
|
|
359
315
|
}
|
|
360
316
|
}];
|
|
361
317
|
}, [readsWithoutMeta, baselineDoc, t]);
|
|
362
|
-
var
|
|
363
|
-
var fetchMap = useMemo(function () {
|
|
364
|
-
return meta ? buildFetchMap(meta.fields) : void 0;
|
|
365
|
-
}, [meta]);
|
|
366
|
-
var handleDocSyncError = useCallback(function (err) {
|
|
367
|
-
setDocError(_instanceof(err, Error) ? err : new Error(String(err)));
|
|
368
|
-
}, []);
|
|
369
|
-
var docCollection = useFrappeCollection(name ? frappeConfig : void 0, doctype, {
|
|
370
|
-
fields,
|
|
371
|
-
filters: name ? {
|
|
372
|
-
name
|
|
373
|
-
} : void 0,
|
|
374
|
-
onSyncError: handleDocSyncError
|
|
375
|
-
});
|
|
376
|
-
var {
|
|
377
|
-
data: rawDocData,
|
|
378
|
-
isLoading: isDocLoading
|
|
379
|
-
} = useLiveQuery(function (q) {
|
|
380
|
-
if (!docCollection || !name) return null;
|
|
381
|
-
return q.from({
|
|
382
|
-
_doc: docCollection
|
|
383
|
-
}).where(function (param2) {
|
|
384
|
-
var {
|
|
385
|
-
_doc
|
|
386
|
-
} = param2;
|
|
387
|
-
if (!_doc) return eq(name, name);
|
|
388
|
-
return eq(_doc.name, name);
|
|
389
|
-
});
|
|
390
|
-
}, [docCollection, name]);
|
|
391
|
-
var liveDoc = useMemo(function () {
|
|
392
|
-
var _arr_;
|
|
393
|
-
var arr = Array.isArray(rawDocData) ? rawDocData : rawDocData ? [rawDocData] : [];
|
|
394
|
-
var doc = (_arr_ = arr[0]) !== null && _arr_ !== void 0 ? _arr_ : null;
|
|
395
|
-
return doc ? {
|
|
396
|
-
data: doc,
|
|
397
|
-
isLoading: isDocLoading
|
|
398
|
-
} : name ? {
|
|
399
|
-
data: null,
|
|
400
|
-
isLoading: isDocLoading
|
|
401
|
-
} : null;
|
|
402
|
-
}, [rawDocData, isDocLoading, name]);
|
|
403
|
-
var collection = useFrappeCollection(name ? void 0 : frappeConfig, doctype, {
|
|
404
|
-
fields
|
|
405
|
-
});
|
|
406
|
-
var shareCollection = useFrappeCollection(showSidebar && name ? frappeConfig : void 0, "DocShare", {
|
|
407
|
-
fields: ["name", "user", "everyone", "read", "write", "share"],
|
|
408
|
-
filters: {
|
|
409
|
-
share_doctype: doctype,
|
|
410
|
-
share_name: name
|
|
411
|
-
}
|
|
412
|
-
});
|
|
413
|
-
var {
|
|
414
|
-
data: rawShareRows
|
|
415
|
-
} = useLiveQuery(function (q) {
|
|
416
|
-
return shareCollection ? q.from({
|
|
417
|
-
_share: shareCollection
|
|
418
|
-
}) : null;
|
|
419
|
-
}, [shareCollection]);
|
|
420
|
-
var shareRows = useMemo(function () {
|
|
421
|
-
return shareCollection ? rawShareRows !== null && rawShareRows !== void 0 ? rawShareRows : [] : void 0;
|
|
422
|
-
}, [shareCollection, rawShareRows]);
|
|
423
|
-
var owner = baselineDoc === null || baselineDoc === void 0 ? void 0 : baselineDoc.owner;
|
|
424
|
-
var {
|
|
425
|
-
rights,
|
|
426
|
-
pending: rightsPending,
|
|
427
|
-
roles: effectiveRoles
|
|
428
|
-
} = useDocRights(frappeConfig, meta, {
|
|
429
|
-
roles,
|
|
430
|
-
owner: typeof owner === "string" ? owner : void 0,
|
|
431
|
-
shares: shareRows
|
|
432
|
-
});
|
|
433
|
-
var permLevels = useMemo(function () {
|
|
434
|
-
return buildPermLevelMatrix(meta === null || meta === void 0 ? void 0 : meta.permissions, effectiveRoles);
|
|
435
|
-
}, [meta === null || meta === void 0 ? void 0 : meta.permissions, effectiveRoles]);
|
|
436
|
-
var formTabs = useMemo(function () {
|
|
437
|
-
if (!layoutFields) return void 0;
|
|
438
|
-
return buildFormTabs({
|
|
439
|
-
fields: layoutFields,
|
|
440
|
-
doc: {
|
|
441
|
-
...localDoc,
|
|
442
|
-
__islocal: isCreate ? 1 : 0
|
|
443
|
-
},
|
|
444
|
-
docstatus,
|
|
445
|
-
formReadOnly: !!(meta === null || meta === void 0 ? void 0 : meta.read_only),
|
|
446
|
-
isCreate,
|
|
447
|
-
detailsLabel: t("Details"),
|
|
448
|
-
permLevels,
|
|
449
|
-
hiddenFields: hideFields
|
|
450
|
-
});
|
|
451
|
-
}, [layoutFields, localDoc, docstatus, meta === null || meta === void 0 ? void 0 : meta.read_only, isCreate, permLevels, hideFields, t]);
|
|
452
|
-
var assignmentCollection = useFrappeCollection(showSidebar && name && !frappeConfig.fixtures ? frappeConfig : void 0, "ToDo", {
|
|
318
|
+
var assignmentCollection = useFrappeCollection(showSidebar && name && frappeConfig && !frappeConfig.fixtures ? frappeConfig : void 0, "ToDo", {
|
|
453
319
|
fields: ["name", "allocated_to", "status", "reference_type", "reference_name"],
|
|
454
320
|
filters: {
|
|
455
321
|
reference_type: doctype,
|
|
@@ -467,16 +333,6 @@ function FrappeFormBody(param) {
|
|
|
467
333
|
var assignmentRows = useMemo(function () {
|
|
468
334
|
return assignmentCollection ? rawAssignmentRows !== null && rawAssignmentRows !== void 0 ? rawAssignmentRows : [] : void 0;
|
|
469
335
|
}, [assignmentCollection, rawAssignmentRows]);
|
|
470
|
-
useEffect(function () {
|
|
471
|
-
everLoadedRef.current = false;
|
|
472
|
-
if (name) createDraftRef.current = void 0;
|
|
473
|
-
setWasDeleted(false);
|
|
474
|
-
setConflictFields([]);
|
|
475
|
-
setDocError(null);
|
|
476
|
-
var seed = seedRef.current;
|
|
477
|
-
setBaselineDoc(seed);
|
|
478
|
-
if (seed) setLocalDoc(seed);
|
|
479
|
-
}, [doctype, name]);
|
|
480
336
|
var effectiveConnections = useMemo(function () {
|
|
481
337
|
return connections !== null && connections !== void 0 ? connections : connectionsFromMeta(meta);
|
|
482
338
|
}, [connections, meta]);
|
|
@@ -544,395 +400,48 @@ function FrappeFormBody(param) {
|
|
|
544
400
|
var _connectionSnapshots_link_doctype;
|
|
545
401
|
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;
|
|
546
402
|
});
|
|
547
|
-
useFrappeDoctypeEvents(name ? frappeConfig : void 0, doctype, function (event) {
|
|
548
|
-
if (event.type !== "doc_deleted") return;
|
|
549
|
-
var payload = event.payload;
|
|
550
|
-
if ((payload === null || payload === void 0 ? void 0 : payload.name) === name) setWasDeleted(true);
|
|
551
|
-
}, Boolean(name));
|
|
552
|
-
useEffect(function () {
|
|
553
|
-
var incoming = liveDoc === null || liveDoc === void 0 ? void 0 : liveDoc.data;
|
|
554
|
-
if (incoming) {
|
|
555
|
-
everLoadedRef.current = true;
|
|
556
|
-
setWasDeleted(false);
|
|
557
|
-
var baseline = baselineRef.current;
|
|
558
|
-
if (!baseline) {
|
|
559
|
-
setBaselineDoc(incoming);
|
|
560
|
-
setLocalDoc(incoming);
|
|
561
|
-
return;
|
|
562
|
-
}
|
|
563
|
-
var local = localDocRef.current;
|
|
564
|
-
var merged = {
|
|
565
|
-
...incoming
|
|
566
|
-
};
|
|
567
|
-
var newConflicts = [];
|
|
568
|
-
var _iteratorNormalCompletion = true,
|
|
569
|
-
_didIteratorError = false,
|
|
570
|
-
_iteratorError = void 0;
|
|
571
|
-
try {
|
|
572
|
-
for (var _iterator = Object.keys(local)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
573
|
-
var key = _step.value;
|
|
574
|
-
var localValue = local[key];
|
|
575
|
-
if (localValue === baseline[key]) continue;
|
|
576
|
-
merged[key] = localValue;
|
|
577
|
-
var remote = incoming[key];
|
|
578
|
-
if (remote !== baseline[key] && remote !== localValue) newConflicts.push(key);
|
|
579
|
-
}
|
|
580
|
-
} catch (err) {
|
|
581
|
-
_didIteratorError = true;
|
|
582
|
-
_iteratorError = err;
|
|
583
|
-
} finally {
|
|
584
|
-
try {
|
|
585
|
-
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
586
|
-
_iterator.return();
|
|
587
|
-
}
|
|
588
|
-
} finally {
|
|
589
|
-
if (_didIteratorError) {
|
|
590
|
-
throw _iteratorError;
|
|
591
|
-
}
|
|
592
|
-
}
|
|
593
|
-
}
|
|
594
|
-
setBaselineDoc(incoming);
|
|
595
|
-
setLocalDoc(merged);
|
|
596
|
-
if (newConflicts.length > 0) {
|
|
597
|
-
setConflictFields(function (prev) {
|
|
598
|
-
return Array.from(/* @__PURE__ */new Set([...prev, ...newConflicts]));
|
|
599
|
-
});
|
|
600
|
-
}
|
|
601
|
-
} else if (name && everLoadedRef.current && !(liveDoc === null || liveDoc === void 0 ? void 0 : liveDoc.isLoading)) {
|
|
602
|
-
setWasDeleted(true);
|
|
603
|
-
} else if (!name) {
|
|
604
|
-
var _createDraftRef_current;
|
|
605
|
-
if (((_createDraftRef_current = createDraftRef.current) === null || _createDraftRef_current === void 0 ? void 0 : _createDraftRef_current.doctype) !== doctype) {
|
|
606
|
-
createDraftRef.current = {
|
|
607
|
-
doctype,
|
|
608
|
-
values: takeCreatePrefill(doctype)
|
|
609
|
-
};
|
|
610
|
-
}
|
|
611
|
-
setLocalDoc({
|
|
612
|
-
...createDraftRef.current.values,
|
|
613
|
-
doctype
|
|
614
|
-
});
|
|
615
|
-
}
|
|
616
|
-
}, [liveDoc === null || liveDoc === void 0 ? void 0 : liveDoc.data, liveDoc === null || liveDoc === void 0 ? void 0 : liveDoc.isLoading, doctype, name]);
|
|
617
|
-
var dirtyFieldNames = useMemo(function () {
|
|
618
|
-
var local = localDoc;
|
|
619
|
-
var base = baselineDoc;
|
|
620
|
-
var dirty = [];
|
|
621
|
-
var _iteratorNormalCompletion = true,
|
|
622
|
-
_didIteratorError = false,
|
|
623
|
-
_iteratorError = void 0;
|
|
624
|
-
try {
|
|
625
|
-
for (var _iterator = Object.keys(local)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
626
|
-
var key = _step.value;
|
|
627
|
-
if (key === "doctype" || key === "name") continue;
|
|
628
|
-
if (base ? local[key] !== base[key] : local[key] !== void 0) dirty.push(key);
|
|
629
|
-
}
|
|
630
|
-
} catch (err) {
|
|
631
|
-
_didIteratorError = true;
|
|
632
|
-
_iteratorError = err;
|
|
633
|
-
} finally {
|
|
634
|
-
try {
|
|
635
|
-
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
636
|
-
_iterator.return();
|
|
637
|
-
}
|
|
638
|
-
} finally {
|
|
639
|
-
if (_didIteratorError) {
|
|
640
|
-
throw _iteratorError;
|
|
641
|
-
}
|
|
642
|
-
}
|
|
643
|
-
}
|
|
644
|
-
return dirty;
|
|
645
|
-
}, [localDoc, baselineDoc]);
|
|
646
|
-
var hasUnsavedChanges = dirtyFieldNames.length > 0;
|
|
647
|
-
var runFetchFrom = function runFetchFrom2(field, value) {
|
|
648
|
-
var rules = fetchMap === null || fetchMap === void 0 ? void 0 : fetchMap.get(field);
|
|
649
|
-
if (!rules || rules.length === 0) return;
|
|
650
|
-
var applyPatch = function applyPatch2(fetched2) {
|
|
651
|
-
setLocalDoc(function (prev) {
|
|
652
|
-
var current = prev;
|
|
653
|
-
if (current[field] !== value) return prev;
|
|
654
|
-
var patch = applyFetchedValues(rules, fetched2, current);
|
|
655
|
-
return Object.keys(patch).length > 0 ? {
|
|
656
|
-
...current,
|
|
657
|
-
...patch
|
|
658
|
-
} : prev;
|
|
659
|
-
});
|
|
660
|
-
};
|
|
661
|
-
if (isEmptyFieldValue(value)) {
|
|
662
|
-
applyPatch({});
|
|
663
|
-
return;
|
|
664
|
-
}
|
|
665
|
-
var linkField = meta === null || meta === void 0 ? void 0 : meta.fields.find(function (metaField) {
|
|
666
|
-
return metaField.fieldname === field;
|
|
667
|
-
});
|
|
668
|
-
var targetDoctype = typeof (linkField === null || linkField === void 0 ? void 0 : linkField.options) === "string" ? linkField.options : "";
|
|
669
|
-
if (!targetDoctype) return;
|
|
670
|
-
var sources = Array.from(new Set(rules.map(function (rule) {
|
|
671
|
-
return rule.source;
|
|
672
|
-
})));
|
|
673
|
-
var fixtures = frappeConfig.fixtures;
|
|
674
|
-
var fetched = fixtures ? fixtures.getDoc(targetDoctype, String(value), sources).then(function (doc) {
|
|
675
|
-
return doc !== null && doc !== void 0 ? doc : {};
|
|
676
|
-
}) : validateLink(createHttpClient(frappeConfig), targetDoctype, String(value), sources);
|
|
677
|
-
fetched.then(applyPatch).catch(function () {
|
|
678
|
-
return void 0;
|
|
679
|
-
});
|
|
680
|
-
};
|
|
681
|
-
var setValue = function setValue2(field, value) {
|
|
682
|
-
setLocalDoc(function (prev) {
|
|
683
|
-
return {
|
|
684
|
-
...prev,
|
|
685
|
-
[field]: value
|
|
686
|
-
};
|
|
687
|
-
});
|
|
688
|
-
setErrors(function (prev) {
|
|
689
|
-
var newErrors = {
|
|
690
|
-
...prev
|
|
691
|
-
};
|
|
692
|
-
delete newErrors[String(field)];
|
|
693
|
-
return newErrors;
|
|
694
|
-
});
|
|
695
|
-
runFetchFrom(String(field), value);
|
|
696
|
-
};
|
|
697
|
-
var validateRequiredFields = function validateRequiredFields2() {
|
|
698
|
-
if (!formTabs) return {};
|
|
699
|
-
var validationErrors = {};
|
|
700
|
-
var doc = localDoc;
|
|
701
|
-
if (promptNamed && isEmptyFieldValue(doc.name)) {
|
|
702
|
-
validationErrors.name = t("Name is required");
|
|
703
|
-
}
|
|
704
|
-
var _iteratorNormalCompletion = true,
|
|
705
|
-
_didIteratorError = false,
|
|
706
|
-
_iteratorError = void 0;
|
|
707
|
-
try {
|
|
708
|
-
for (var _iterator = formTabs[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
709
|
-
var tab = _step.value;
|
|
710
|
-
var _iteratorNormalCompletion1 = true,
|
|
711
|
-
_didIteratorError1 = false,
|
|
712
|
-
_iteratorError1 = void 0;
|
|
713
|
-
try {
|
|
714
|
-
for (var _iterator1 = tab.schema.fields[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true) {
|
|
715
|
-
var field = _step1.value;
|
|
716
|
-
if (!field.required) continue;
|
|
717
|
-
if (isEmptyFieldValue(doc[field.name])) {
|
|
718
|
-
validationErrors[field.name] = t("{{label}} is required", {
|
|
719
|
-
label: field.label || field.name
|
|
720
|
-
});
|
|
721
|
-
}
|
|
722
|
-
}
|
|
723
|
-
} catch (err) {
|
|
724
|
-
_didIteratorError1 = true;
|
|
725
|
-
_iteratorError1 = err;
|
|
726
|
-
} finally {
|
|
727
|
-
try {
|
|
728
|
-
if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
|
|
729
|
-
_iterator1.return();
|
|
730
|
-
}
|
|
731
|
-
} finally {
|
|
732
|
-
if (_didIteratorError1) {
|
|
733
|
-
throw _iteratorError1;
|
|
734
|
-
}
|
|
735
|
-
}
|
|
736
|
-
}
|
|
737
|
-
}
|
|
738
|
-
} catch (err) {
|
|
739
|
-
_didIteratorError = true;
|
|
740
|
-
_iteratorError = err;
|
|
741
|
-
} finally {
|
|
742
|
-
try {
|
|
743
|
-
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
744
|
-
_iterator.return();
|
|
745
|
-
}
|
|
746
|
-
} finally {
|
|
747
|
-
if (_didIteratorError) {
|
|
748
|
-
throw _iteratorError;
|
|
749
|
-
}
|
|
750
|
-
}
|
|
751
|
-
}
|
|
752
|
-
return validationErrors;
|
|
753
|
-
};
|
|
754
|
-
var canWriteRecord = isCreate ? rights.create : rights.write;
|
|
755
403
|
var handleSave = async function handleSave2() {
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
}
|
|
762
|
-
setIsSubmitting(true);
|
|
763
|
-
setErrors({});
|
|
764
|
-
try {
|
|
765
|
-
if (name) {
|
|
766
|
-
if (!docCollection) return;
|
|
767
|
-
var changedFields = dirtyFieldNames;
|
|
768
|
-
if (changedFields.length > 0) {
|
|
769
|
-
var local = localDoc;
|
|
770
|
-
var tx = docCollection.update(name, function (draft) {
|
|
771
|
-
var _iteratorNormalCompletion2 = true,
|
|
772
|
-
_didIteratorError2 = false,
|
|
773
|
-
_iteratorError2 = void 0;
|
|
774
|
-
try {
|
|
775
|
-
for (var _iterator2 = changedFields[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
|
|
776
|
-
var key = _step2.value;
|
|
777
|
-
draft[key] = local[key];
|
|
778
|
-
}
|
|
779
|
-
} catch (err) {
|
|
780
|
-
_didIteratorError2 = true;
|
|
781
|
-
_iteratorError2 = err;
|
|
782
|
-
} finally {
|
|
783
|
-
try {
|
|
784
|
-
if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
|
|
785
|
-
_iterator2.return();
|
|
786
|
-
}
|
|
787
|
-
} finally {
|
|
788
|
-
if (_didIteratorError2) {
|
|
789
|
-
throw _iteratorError2;
|
|
790
|
-
}
|
|
791
|
-
}
|
|
792
|
-
}
|
|
793
|
-
});
|
|
794
|
-
await tx.isPersisted.promise;
|
|
795
|
-
}
|
|
796
|
-
setConflictFields([]);
|
|
797
|
-
} else {
|
|
798
|
-
var _localDoc_name, _ref2;
|
|
799
|
-
var _getFrappeSyncModule;
|
|
800
|
-
if (!collection) return;
|
|
801
|
-
var temporaryName = (_localDoc_name = localDoc.name) !== null && _localDoc_name !== void 0 ? _localDoc_name : `new-${Date.now()}`;
|
|
802
|
-
var docToInsert = {
|
|
803
|
-
...localDoc,
|
|
804
|
-
doctype,
|
|
805
|
-
name: temporaryName
|
|
806
|
-
};
|
|
807
|
-
var tx1 = collection.insert(docToInsert);
|
|
808
|
-
await tx1.isPersisted.promise;
|
|
809
|
-
var createdName = (_ref2 = (_getFrappeSyncModule = getFrappeSyncModule(frappeConfig)) === null || _getFrappeSyncModule === void 0 ? void 0 : _getFrappeSyncModule.createdName(temporaryName)) !== null && _ref2 !== void 0 ? _ref2 : temporaryName;
|
|
810
|
-
onSave === null || onSave === void 0 ? void 0 : onSave({
|
|
811
|
-
...localDoc,
|
|
812
|
-
name: createdName
|
|
813
|
-
});
|
|
814
|
-
return;
|
|
815
|
-
}
|
|
816
|
-
onSave === null || onSave === void 0 ? void 0 : onSave(localDoc);
|
|
817
|
-
} catch (err1) {
|
|
818
|
-
var e = err1;
|
|
819
|
-
if ((e === null || e === void 0 ? void 0 : e.exc_type) === "ValidationError") {
|
|
820
|
-
var validationErrors = {};
|
|
821
|
-
if (e._server_messages) {
|
|
822
|
-
try {
|
|
823
|
-
var messages = JSON.parse(e._server_messages);
|
|
824
|
-
var _iteratorNormalCompletion = true,
|
|
825
|
-
_didIteratorError = false,
|
|
826
|
-
_iteratorError = void 0;
|
|
827
|
-
try {
|
|
828
|
-
for (var _iterator = messages[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
829
|
-
var msg = _step.value;
|
|
830
|
-
var parsed = typeof msg === "string" ? JSON.parse(msg) : msg;
|
|
831
|
-
if (parsed.message) {
|
|
832
|
-
validationErrors.general = parsed.message;
|
|
833
|
-
}
|
|
834
|
-
}
|
|
835
|
-
} catch (err) {
|
|
836
|
-
_didIteratorError = true;
|
|
837
|
-
_iteratorError = err;
|
|
838
|
-
} finally {
|
|
839
|
-
try {
|
|
840
|
-
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
841
|
-
_iterator.return();
|
|
842
|
-
}
|
|
843
|
-
} finally {
|
|
844
|
-
if (_didIteratorError) {
|
|
845
|
-
throw _iteratorError;
|
|
846
|
-
}
|
|
847
|
-
}
|
|
848
|
-
}
|
|
849
|
-
} catch (unused) {
|
|
850
|
-
validationErrors.general = t("Validation error occurred");
|
|
851
|
-
}
|
|
852
|
-
}
|
|
853
|
-
setErrors(validationErrors);
|
|
854
|
-
} else {
|
|
855
|
-
setErrors({
|
|
856
|
-
general: (e === null || e === void 0 ? void 0 : e.message) || t("Failed to save document")
|
|
857
|
-
});
|
|
858
|
-
}
|
|
859
|
-
} finally {
|
|
860
|
-
setIsSubmitting(false);
|
|
861
|
-
}
|
|
404
|
+
var saved = await form.save();
|
|
405
|
+
if (!saved) return;
|
|
406
|
+
onSave === null || onSave === void 0 ? void 0 : onSave(isCreate ? {
|
|
407
|
+
...localDoc,
|
|
408
|
+
name: saved
|
|
409
|
+
} : localDoc);
|
|
862
410
|
};
|
|
863
411
|
var handleCancel = function handleCancel2() {
|
|
864
|
-
|
|
865
|
-
setLocalDoc(baselineDoc);
|
|
866
|
-
} else if (liveDoc === null || liveDoc === void 0 ? void 0 : liveDoc.data) {
|
|
867
|
-
setLocalDoc(liveDoc.data);
|
|
868
|
-
} else {
|
|
869
|
-
setLocalDoc({
|
|
870
|
-
doctype
|
|
871
|
-
});
|
|
872
|
-
}
|
|
873
|
-
setConflictFields([]);
|
|
874
|
-
setErrors({});
|
|
412
|
+
form.reset();
|
|
875
413
|
onCancel === null || onCancel === void 0 ? void 0 : onCancel();
|
|
876
414
|
};
|
|
877
415
|
var handleDelete = async function handleDelete2() {
|
|
878
|
-
if (!
|
|
416
|
+
if (!name || wasDeleted || !rights.delete) return;
|
|
879
417
|
if (!(await dialog.confirm(t("Delete this {{doctype}}?", {
|
|
880
418
|
doctype
|
|
881
419
|
})))) return;
|
|
882
|
-
|
|
883
|
-
setErrors({});
|
|
884
|
-
try {
|
|
885
|
-
var tx = docCollection.delete(name);
|
|
886
|
-
await tx.isPersisted.promise;
|
|
887
|
-
onDelete === null || onDelete === void 0 ? void 0 : onDelete(localDoc);
|
|
888
|
-
} catch (err) {
|
|
889
|
-
setErrors({
|
|
890
|
-
general: (err === null || err === void 0 ? void 0 : err.message) || t("Failed to delete")
|
|
891
|
-
});
|
|
892
|
-
} finally {
|
|
893
|
-
setIsSubmitting(false);
|
|
894
|
-
}
|
|
420
|
+
if (await form.remove()) onDelete === null || onDelete === void 0 ? void 0 : onDelete(localDoc);
|
|
895
421
|
};
|
|
896
|
-
var
|
|
897
|
-
if (!
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
return;
|
|
903
|
-
}
|
|
904
|
-
}
|
|
905
|
-
if (!(await dialog.confirm(question))) return;
|
|
906
|
-
setIsSubmitting(true);
|
|
907
|
-
setErrors({});
|
|
908
|
-
try {
|
|
909
|
-
var tx = docCollection.update(name, function (draft) {
|
|
910
|
-
draft.docstatus = to;
|
|
911
|
-
});
|
|
912
|
-
await tx.isPersisted.promise;
|
|
913
|
-
} catch (err) {
|
|
914
|
-
setErrors({
|
|
915
|
-
general: extractServerError(err, failure)
|
|
916
|
-
});
|
|
917
|
-
} finally {
|
|
918
|
-
setIsSubmitting(false);
|
|
422
|
+
var handleSubmitDocument = async function handleSubmitDocument2() {
|
|
423
|
+
if (!name || wasDeleted || !rights.submit) return;
|
|
424
|
+
var requiredErrors = form.validate();
|
|
425
|
+
if (Object.keys(requiredErrors).length > 0) {
|
|
426
|
+
form.setErrors(requiredErrors);
|
|
427
|
+
return;
|
|
919
428
|
}
|
|
920
|
-
|
|
921
|
-
var handleSubmitDocument = function handleSubmitDocument2() {
|
|
922
|
-
return transitionDocstatus(1, t("Permanently Submit {{name}}?", {
|
|
429
|
+
if (!(await dialog.confirm(t("Permanently Submit {{name}}?", {
|
|
923
430
|
name
|
|
924
|
-
})
|
|
431
|
+
})))) return;
|
|
432
|
+
await form.submitDocument();
|
|
925
433
|
};
|
|
926
|
-
var handleCancelDocument = function handleCancelDocument2() {
|
|
927
|
-
|
|
434
|
+
var handleCancelDocument = async function handleCancelDocument2() {
|
|
435
|
+
if (!name || wasDeleted || !rights.cancel) return;
|
|
436
|
+
if (!(await dialog.confirm(t("Permanently Cancel {{name}}?", {
|
|
928
437
|
name
|
|
929
|
-
})
|
|
438
|
+
})))) return;
|
|
439
|
+
await form.cancelDocument();
|
|
930
440
|
};
|
|
931
441
|
var handleAmend = function handleAmend2() {
|
|
932
|
-
if (!
|
|
933
|
-
var draft =
|
|
934
|
-
|
|
935
|
-
onAmend(draft);
|
|
442
|
+
if (!onAmend) return;
|
|
443
|
+
var draft = form.amend();
|
|
444
|
+
if (draft) onAmend(draft);
|
|
936
445
|
};
|
|
937
446
|
var titleField = meta === null || meta === void 0 ? void 0 : meta.title_field;
|
|
938
447
|
var titleValue = titleField ? localDoc[titleField] : void 0;
|
|
@@ -994,27 +503,34 @@ function FrappeFormBody(param) {
|
|
|
994
503
|
}));
|
|
995
504
|
}
|
|
996
505
|
if (!children && metaError && !meta && !name) {
|
|
997
|
-
return frame(/* @__PURE__ */
|
|
506
|
+
return frame(isPermissionError(metaError) ? /* @__PURE__ */_jsx(EmptyState, {
|
|
507
|
+
testID: "frappe-form-not-permitted",
|
|
508
|
+
title: t("You can't create {{doctype}}", {
|
|
509
|
+
doctype
|
|
510
|
+
}),
|
|
511
|
+
description: metaError.message
|
|
512
|
+
}) : /* @__PURE__ */_jsx(AsyncBoundary, {
|
|
998
513
|
...knobProps.panelPadding,
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
...knobProps.body,
|
|
1004
|
-
children: t("Failed to load {{doctype}} form", {
|
|
1005
|
-
doctype
|
|
1006
|
-
})
|
|
1007
|
-
}), /* @__PURE__ */_jsx(Text, {
|
|
1008
|
-
color: formCommonColors.muted,
|
|
1009
|
-
...knobProps.body,
|
|
1010
|
-
children: metaError.message
|
|
1011
|
-
})]
|
|
514
|
+
error: metaError,
|
|
515
|
+
errorTitle: t("Failed to load {{doctype}} form", {
|
|
516
|
+
doctype
|
|
517
|
+
})
|
|
1012
518
|
}));
|
|
1013
519
|
}
|
|
1014
|
-
|
|
1015
|
-
var showsSeed = Boolean(seedDoc) && isDocReading;
|
|
1016
|
-
if (name && docError && !(liveDoc === null || liveDoc === void 0 ? void 0 : liveDoc.data) && !wasDeleted) {
|
|
520
|
+
if (name && form.status === "error" && docError) {
|
|
1017
521
|
if (errorFallback !== void 0) return frame(errorFallback);
|
|
522
|
+
if (isPermissionError(docError)) {
|
|
523
|
+
return frame(/* @__PURE__ */_jsx(EmptyState, {
|
|
524
|
+
testID: "frappe-form-not-permitted",
|
|
525
|
+
title: t("You can't open {{doctype}} {{name}}", {
|
|
526
|
+
doctype,
|
|
527
|
+
name
|
|
528
|
+
}),
|
|
529
|
+
description: t("Your session can't read this {{doctype}}.", {
|
|
530
|
+
doctype
|
|
531
|
+
})
|
|
532
|
+
}));
|
|
533
|
+
}
|
|
1018
534
|
return frame(/* @__PURE__ */_jsx(AsyncBoundary, {
|
|
1019
535
|
...knobProps.panelPadding,
|
|
1020
536
|
error: docError,
|
|
@@ -1023,7 +539,7 @@ function FrappeFormBody(param) {
|
|
|
1023
539
|
})
|
|
1024
540
|
}));
|
|
1025
541
|
}
|
|
1026
|
-
if (name &&
|
|
542
|
+
if (name && form.status === "loading") {
|
|
1027
543
|
if (loadingFallback !== void 0) return frame(loadingFallback);
|
|
1028
544
|
return frame(/* @__PURE__ */_jsx(YStack, {
|
|
1029
545
|
...knobProps.panelPadding,
|
|
@@ -1033,7 +549,7 @@ function FrappeFormBody(param) {
|
|
|
1033
549
|
})
|
|
1034
550
|
}));
|
|
1035
551
|
}
|
|
1036
|
-
if (name &&
|
|
552
|
+
if (name && form.status === "notFound") {
|
|
1037
553
|
if (notFoundFallback !== void 0) return frame(notFoundFallback);
|
|
1038
554
|
return frame(/* @__PURE__ */_jsxs(YStack, {
|
|
1039
555
|
...knobProps.panelPadding,
|
|
@@ -1083,7 +599,7 @@ function FrappeFormBody(param) {
|
|
|
1083
599
|
var toolbarShown = showToolbar && !readsWithoutMeta && Boolean(indicator || docAction || showDelete || showEdit || showClose);
|
|
1084
600
|
var shownTabs = formTabs !== null && formTabs !== void 0 ? formTabs : recordTabs;
|
|
1085
601
|
var imageFieldName = meta === null || meta === void 0 ? void 0 : meta.image_field;
|
|
1086
|
-
var sidebarImageUrl = imageFieldName ? resolveFileUrl(localDoc[imageFieldName],
|
|
602
|
+
var sidebarImageUrl = imageFieldName ? resolveFileUrl(localDoc[imageFieldName], frappeConfig === null || frappeConfig === void 0 ? void 0 : frappeConfig.baseURL) : void 0;
|
|
1087
603
|
var conflictLabels = conflictFields.map(function (fieldname) {
|
|
1088
604
|
var field = meta === null || meta === void 0 ? void 0 : meta.fields.find(function (metaField) {
|
|
1089
605
|
return metaField.fieldname === fieldname;
|
|
@@ -1091,25 +607,27 @@ function FrappeFormBody(param) {
|
|
|
1091
607
|
return (field === null || field === void 0 ? void 0 : field.label) || fieldname;
|
|
1092
608
|
}).join(", ");
|
|
1093
609
|
var formTabItems = (shownTabs !== null && shownTabs !== void 0 ? shownTabs : []).map(function (tab) {
|
|
610
|
+
var content = /* @__PURE__ */_jsx(SchemaForm, {
|
|
611
|
+
schema: tab.schema,
|
|
612
|
+
doc: localDoc,
|
|
613
|
+
setValue: function setValue1(field, value) {
|
|
614
|
+
return setValue(field, value);
|
|
615
|
+
},
|
|
616
|
+
errors,
|
|
617
|
+
disabled: fieldsDisabled,
|
|
618
|
+
overrides,
|
|
619
|
+
readOnlyFields,
|
|
620
|
+
sectionHeadingLevel,
|
|
621
|
+
order,
|
|
622
|
+
renderFieldWrapper
|
|
623
|
+
});
|
|
1094
624
|
return {
|
|
1095
625
|
value: tab.key,
|
|
1096
626
|
label: tab.label,
|
|
1097
|
-
content:
|
|
1098
|
-
schema: tab.schema,
|
|
1099
|
-
doc: localDoc,
|
|
1100
|
-
setValue: function setValue1(field, value) {
|
|
1101
|
-
return setValue(field, value);
|
|
1102
|
-
},
|
|
1103
|
-
errors,
|
|
1104
|
-
disabled: fieldsDisabled,
|
|
1105
|
-
overrides,
|
|
1106
|
-
readOnlyFields,
|
|
1107
|
-
sectionHeadingLevel,
|
|
1108
|
-
order
|
|
1109
|
-
})
|
|
627
|
+
content: renderTab ? renderTab(tab, content) : content
|
|
1110
628
|
};
|
|
1111
629
|
});
|
|
1112
|
-
var tabItems = showConnections && name && effectiveConnections.length > 0 ? [
|
|
630
|
+
var tabItems = [...formTabItems, ...(showConnections && name && frappeConfig && effectiveConnections.length > 0 ? [{
|
|
1113
631
|
value: "__connections",
|
|
1114
632
|
label: t("Connections"),
|
|
1115
633
|
content: /* @__PURE__ */_jsx(FrappeFormConnections, {
|
|
@@ -1117,14 +635,14 @@ function FrappeFormBody(param) {
|
|
|
1117
635
|
connections: effectiveConnections,
|
|
1118
636
|
name
|
|
1119
637
|
})
|
|
1120
|
-
}] :
|
|
638
|
+
}] : []), ...(extraTabs !== null && extraTabs !== void 0 ? extraTabs : [])];
|
|
1121
639
|
var effectiveTab = activeTab && tabItems.some(function (tab) {
|
|
1122
640
|
return tab.value === activeTab;
|
|
1123
641
|
}) ? activeTab : (_tabItems_ = tabItems[0]) === null || _tabItems_ === void 0 ? void 0 : _tabItems_.value;
|
|
1124
642
|
var localName = localDoc.name;
|
|
1125
643
|
var sidebar = showSidebar && name && meta ? /* @__PURE__ */_jsx(FormSidebar, {
|
|
1126
644
|
imageUrl: sidebarImageUrl,
|
|
1127
|
-
sections: buildSidebarSections(localDoc, shareRows, t, assignmentRows),
|
|
645
|
+
sections: buildSidebarSections(localDoc, form.shareRows, t, assignmentRows),
|
|
1128
646
|
metadata: mapDocToSidebarMetadata(localDoc, t)
|
|
1129
647
|
}) : void 0;
|
|
1130
648
|
return frame(
|
|
@@ -1138,16 +656,16 @@ function FrappeFormBody(param) {
|
|
|
1138
656
|
flexGrow: 1,
|
|
1139
657
|
flexShrink: 1,
|
|
1140
658
|
flexBasis: "auto",
|
|
1141
|
-
children: [/* @__PURE__ */_jsx(FrappeReconnectIndicator, {
|
|
659
|
+
children: [frappeConfig ? /* @__PURE__ */_jsx(FrappeReconnectIndicator, {
|
|
1142
660
|
config: frappeConfig
|
|
1143
|
-
}), connectionReads.map(function (read) {
|
|
661
|
+
}) : null, frappeConfig ? connectionReads.map(function (read) {
|
|
1144
662
|
return /* @__PURE__ */_jsx(FrappeRowsReader, {
|
|
1145
663
|
connection: frappeConfig,
|
|
1146
664
|
doctype: read.link.doctype,
|
|
1147
665
|
options: read.options,
|
|
1148
666
|
onChange: read.onChange
|
|
1149
667
|
}, read.link.doctype);
|
|
1150
|
-
}), wasDeleted && /* @__PURE__ */_jsx(XStack, {
|
|
668
|
+
}) : null, showBanners && wasDeleted && /* @__PURE__ */_jsx(XStack, {
|
|
1151
669
|
role: "alert",
|
|
1152
670
|
alignItems: "center",
|
|
1153
671
|
...knobProps.containerRadius,
|
|
@@ -1163,7 +681,7 @@ function FrappeFormBody(param) {
|
|
|
1163
681
|
doctype
|
|
1164
682
|
})
|
|
1165
683
|
})
|
|
1166
|
-
}), !wasDeleted && conflictFields.length > 0 && /* @__PURE__ */_jsx(XStack, {
|
|
684
|
+
}), showBanners && !wasDeleted && conflictFields.length > 0 && /* @__PURE__ */_jsx(XStack, {
|
|
1167
685
|
role: "status",
|
|
1168
686
|
alignItems: "center",
|
|
1169
687
|
...knobProps.containerRadius,
|
|
@@ -1220,7 +738,7 @@ function FrappeFormBody(param) {
|
|
|
1220
738
|
value: effectiveTab,
|
|
1221
739
|
onChange: setActiveTab,
|
|
1222
740
|
lazyMount: true
|
|
1223
|
-
}) : (
|
|
741
|
+
}) : (_ref = (_tabItems_1 = tabItems[0]) === null || _tabItems_1 === void 0 ? void 0 : _tabItems_1.content) !== null && _ref !== void 0 ? _ref : null]
|
|
1224
742
|
}) :
|
|
1225
743
|
// Metadata unavailable (should be covered by metaError branch above)
|
|
1226
744
|
/* @__PURE__ */
|
|
@@ -1235,6 +753,7 @@ function FrappeFormBody(param) {
|
|
|
1235
753
|
}), errors.general && /* @__PURE__ */_jsx(Text, {
|
|
1236
754
|
color: formCommonColors.error,
|
|
1237
755
|
...knobProps.body,
|
|
756
|
+
role: "alert",
|
|
1238
757
|
children: errors.general
|
|
1239
758
|
}), toolbarShown && /* @__PURE__ */_jsx(FrappeFormActions, {
|
|
1240
759
|
indicator,
|