@multiplatform.one/frappe-ui 7.11.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 +24 -20
- 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.tsx +13 -1
- 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 +8 -1
- 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
|
@@ -45,10 +45,18 @@ function FrappeList(param) {
|
|
|
45
45
|
doctype,
|
|
46
46
|
fields,
|
|
47
47
|
filters,
|
|
48
|
+
limit,
|
|
49
|
+
orderBy,
|
|
50
|
+
initialRows,
|
|
48
51
|
pageSize,
|
|
49
52
|
renderItem,
|
|
53
|
+
layout = "list",
|
|
54
|
+
gridProps,
|
|
55
|
+
emptyState,
|
|
56
|
+
onRetry,
|
|
50
57
|
...listProps
|
|
51
58
|
} = param;
|
|
59
|
+
var _listProps_emptyMessage;
|
|
52
60
|
var config = (0, import_FrappeProvider.useFrappeConfig)();
|
|
53
61
|
var {
|
|
54
62
|
knobProps
|
|
@@ -83,12 +91,25 @@ function FrappeList(param) {
|
|
|
83
91
|
} = (0, import_useFrappePagination.useFrappePagination)(connectionConfig, doctype, {
|
|
84
92
|
fields,
|
|
85
93
|
filters,
|
|
86
|
-
pageSize
|
|
94
|
+
pageSize,
|
|
95
|
+
limit,
|
|
96
|
+
orderBy,
|
|
97
|
+
initialRows
|
|
87
98
|
});
|
|
99
|
+
var itemIndex = (0, import_react.useMemo)(function () {
|
|
100
|
+
return new Map(items.map(function (item, index) {
|
|
101
|
+
return [item, index];
|
|
102
|
+
}));
|
|
103
|
+
}, [items]);
|
|
104
|
+
var renderCard = (0, import_react.useCallback)(function (item) {
|
|
105
|
+
var _itemIndex_get;
|
|
106
|
+
return renderItem(item, (_itemIndex_get = itemIndex.get(item)) !== null && _itemIndex_get !== void 0 ? _itemIndex_get : 0);
|
|
107
|
+
}, [renderItem, itemIndex]);
|
|
88
108
|
if (error) {
|
|
89
109
|
return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.AsyncBoundary, {
|
|
90
|
-
layout: "list",
|
|
110
|
+
layout: layout === "grid" ? "generic" : "list",
|
|
91
111
|
error,
|
|
112
|
+
onRetry,
|
|
92
113
|
errorTitle: (0, import_liveErrors.isPermissionError)(error) ? t("You do not have permission to view {{doctype}}", {
|
|
93
114
|
doctype
|
|
94
115
|
}) : t("Error loading {{doctype}}", {
|
|
@@ -98,7 +119,7 @@ function FrappeList(param) {
|
|
|
98
119
|
}
|
|
99
120
|
return /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui.YStack, {
|
|
100
121
|
...knobProps.gap,
|
|
101
|
-
flex: 1,
|
|
122
|
+
flex: layout === "grid" ? void 0 : 1,
|
|
102
123
|
children: [/* @__PURE__ */(0, import_jsx_runtime.jsx)(import_FrappeReconnectIndicator.FrappeReconnectIndicator, {
|
|
103
124
|
config: connectionConfig
|
|
104
125
|
}),
|
|
@@ -109,8 +130,19 @@ function FrappeList(param) {
|
|
|
109
130
|
clip. Rows and the error/empty panels own their own chrome; the error
|
|
110
131
|
branch above renders a bare AsyncBoundary, so both paths now match.
|
|
111
132
|
*/
|
|
112
|
-
/* @__PURE__ */
|
|
113
|
-
|
|
133
|
+
!isLoading && items.length === 0 && emptyState ? emptyState : layout === "grid" ? /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.ImageGrid, {
|
|
134
|
+
items,
|
|
135
|
+
isLoading,
|
|
136
|
+
renderItem: renderCard,
|
|
137
|
+
onItemClick: listProps.onItemClick,
|
|
138
|
+
onLoadMore,
|
|
139
|
+
hasMore,
|
|
140
|
+
emptyMessage: (_listProps_emptyMessage = listProps.emptyMessage) !== null && _listProps_emptyMessage !== void 0 ? _listProps_emptyMessage : t("No {{doctype}} records found", {
|
|
141
|
+
doctype
|
|
142
|
+
}),
|
|
143
|
+
testID: listProps.testID,
|
|
144
|
+
...gridProps
|
|
145
|
+
}) : /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.List, {
|
|
114
146
|
items,
|
|
115
147
|
isLoading,
|
|
116
148
|
renderItem,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","FrappeList_exports","__export","FrappeList","module","exports","import_jsx_runtime","require","import_components","import_theme","import_react","import_react_i18next","import_tamagui","import_FrappeProvider","import_FrappeReconnectIndicator","import_liveErrors","import_useFrappePagination","param","baseURL","auth","syncOptions","doctype","fields","filters","pageSize","renderItem","listProps","config","useFrappeConfig","knobProps","useResolvedKnobs","t","useTranslation","finalBaseURL","finalAuth","finalSyncOptions","fixtures","Error","connectionConfig","useMemo","socketPort","siteName","socketBaseURL","realtime","items","isLoading","onLoadMore","hasMore","error","useFrappePagination","
|
|
1
|
+
{"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","FrappeList_exports","__export","FrappeList","module","exports","import_jsx_runtime","require","import_components","import_theme","import_react","import_react_i18next","import_tamagui","import_FrappeProvider","import_FrappeReconnectIndicator","import_liveErrors","import_useFrappePagination","param","baseURL","auth","syncOptions","doctype","fields","filters","limit","orderBy","initialRows","pageSize","renderItem","layout","gridProps","emptyState","onRetry","listProps","_listProps_emptyMessage","config","useFrappeConfig","knobProps","useResolvedKnobs","t","useTranslation","finalBaseURL","finalAuth","finalSyncOptions","fixtures","Error","connectionConfig","useMemo","socketPort","siteName","socketBaseURL","realtime","items","isLoading","onLoadMore","hasMore","error","useFrappePagination","itemIndex","Map","map","item","index","renderCard","useCallback","_itemIndex_get","get","jsx","AsyncBoundary","errorTitle","isPermissionError","jsxs","YStack","gap","flex","children","FrappeReconnectIndicator","length","ImageGrid","onItemClick","emptyMessage","testID","List"],"sources":["../../src/FrappeList.tsx"],"sourcesContent":[null],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,YAAA,GAAAC,GAAA,IAAAC,WAAA,CAAAC,SAAA;EAAAC,KAAA;AAAA,IAAAH,GAAA;AAAA,IAAAI,kBAAA;AAAAC,QAAA,CAAAD,kBAAA;EAAAE,UAAA,EAAAA,CAAA,KAAAA;AAAA;AAAAC,MAAA,CAAAC,OAAA,GAAAT,YAMO,CAAAK,kBAAA;AACP,IAAAK,kBAAiC,GAAAC,OAAA;AAEjC,IAAAC,iBAAqC,GAAAD,OAAA;AACrC,IAAAE,YAAA,GAAAF,OAAA,CAA+B;AAC/B,IAAAG,YAAA,GAAAH,OAAuB;AACvB,IAAAI,oBAAA,GAAAJ,OAAgC;AAChC,IAAAK,cAAA,GAAAL,OAAA,UAAyC;AACzC,IAAAM,qBAAkC,GAAAN,OAAA;AAClC,IAAAO,+BAAqE,GAAAP,OAAA;AAsH/D,IAAAQ,iBAAA,GAAAR,OAAA;AA5EC,IAAAS,0BAAoE,GAAAT,OAAA;AAAA,SACzEJ,WAAAc,KAAA;EACA;IAAAC,OAAA;IAAAC,IAAA;IAAAC,WAAA;IAAAC,OAAA;IAAAC,MAAA;IAAAC,OAAA;IAAAC,KAAA;IAAAC,OAAA;IAAAC,WAAA;IAAAC,QAAA;IAAAC,UAAA;IAAAC,MAAA;IAAAC,SAAA;IAAAC,UAAA;IAAAC,OAAA;IAAA,GAAAC;EAAA,IAAAhB,KAAA;EACA,IAAAiB,uBAAA;EACA,IAAAC,MAAA,OAAAtB,qBAAA,CAAAuB,eAAA;EACA;IAAAC;EAAA,QAAA5B,YAAA,CAAA6B,gBAAA;EACA;IAAAC;EAAA,QAAA5B,oBAAA,CAAA6B,cAAA;EACA,IAAAC,YAAA,GAAAvB,OAAA,aAAAA,OAAA,cAAAA,OAAA,GAAAiB,MAAA,aAAAA,MAAA,uBAAAA,MAAA,CAAAjB,OAAA;EACA,IAAAwB,SAAA,GAAAvB,IAAA,aAAAA,IAAA,cAAAA,IAAA,GAAAgB,MAAA,aAAAA,MAAA,uBAAAA,MAAA,CAAAhB,IAAA;EACA,IAAAwB,gBAAA,GAAAvB,WAAA,aAAAA,WAAA,cAAAA,WAAA,GAAAe,MAAA,aAAAA,MAAA,uBAAAA,MAAA,CAAAf,WAAA;EACA,KAAAqB,YAAA,MAAAN,MAAA,aAAAA,MAAA,uBAAAA,MAAA,CAAAS,QAAA;IACA,UAAAC,KAAA;EACA;EACA,IAAAC,gBAAA,OAAApC,YAAA,CAAAqC,OAAA;IACA;MACA7B,OAAA,EAAAuB,YAAA;MACGO,UAAA,EAAAb,MAAA,aAAAA,MAAA,uBAAAA,MAAA,CAAAa,UAAA;MACqBC,QAAA,EAAAd,MAAA,aAAAA,MAAA,uBAAAA,MAAA,CAAAc,QAAA;MACxBC,aAAM,EAASf,MAAA,aAAAA,MAAA,cAAgB,SAAAA,MAAA,CAAAe,aAAA;MAC/B/B,IAAQ,EAAAuB,SAAU;MAClBtB,WAAU,EAAAuB,gBAAI;MAEdQ,QAAM,EAAAhB,MAAA,KAAe,QAAWA,MAAA,KAAQ,kBAAAA,MAAA,CAAAgB,QAAA;MACxCP,QAAM,EAAAT,MAAY,SAAQ,IAAAA,MAAQ,uBAAAA,MAAA,CAAAS;IAClC;EAGA,IACEH,YAAU,EACZN,MAAA,aAAAA,MAAA,uBAAAA,MAAA,CAAAa,UAAA,EAEAb,MAAM,aAAAA,MAAA,KAAmB,kBAAAA,MAAA,CAAAc,QAAA,EACvBd,MAAA,KAAO,QAAAA,MAAA,uBAAAA,MAAA,CAAAe,aAAA,EAAAf,MACL,KAAS,QAAAA,MAAA,uBAAAA,MAAA,CAAAgB,QAAA,EAAAT,SACT,EAAoBC,gBACV,EAAQR,MAClB,aAAeA,MAAQ,uBAAAA,MAAA,CAAAS,QAAA;EACjB,IACN;IAAAQ,KAAA;IAAAC,SAAa;IAAAC,UAAA;IAAAC,OAAA;IAAAC;EAAA,QAAAxC,0BAAA,CAAAyC,mBAAA,EAAAX,gBAAA,EAAAzB,OAAA;IAAAC,MACb;IAAkBC,OAClB;IACFI,QAAA;IACAH,KAAA;IAAAC,OACE;IAAAC;EACQ;EACA,IACRgC,SAAQ,OAAAhD,YAAA,CAAAqC,OAAA;IAAA,OACR,IAAQY,GAAA,CAAAP,KAAA,CAAAQ,GAAA,WAAAC,IAAA,EAAAC,KAAA;MACR,QACAD,IAAA,EACAC,KAAA,CACF;IACF;EAKA,IACEV,KAAA,EACA;EAAA,IACEW,UAAQ,OAASrD,YAAU,CAAAsD,WAAO,EAAS,UAAAH,IAA4C;IAC3F,IAAAI,cAAA;IAEA,OAAMrC,UAAA,CAAAiC,IAAY,GAAAI,cAAA,GAAAP,SAAA,CAAAQ,GAAA,CAAAL,IAAA,eAAAI,cAAA,cAAAA,cAAA;EAAA,GAChB,CACArC,UAAM,EACR8B,SAAA,CACA;EAAmB,IAChBF,KAAA;IACD,OAAC,eAAqB,IAAAlD,kBAAA,CAAA6D,GAAA,EAAA3D,iBAAA,CAAA4D,aAAA;MACxBvC,MAAA,EAAAA,MAAA;MAII2B,KAAA;MACFxB,OACE;MAACqC,UAAA,MAAAtD,iBAAA,CAAAuD,iBAAA,EAAAd,KAAA,IAAAjB,CAAA;QAAAlB;MAAA,EACC,GAAAkB,CAAA,4BAA4B;QAC5BlB;MAAA;IACA;EAIgD;EAAA,OAElD,mBAAAf,kBAAA,CAAAiE,IAAA,EAAA3D,cAAA,CAAA4D,MAAA;IAEJ,GAAAnC,SAAA,CAAAoC,GAAA;IAEAC,IAAA,EACE7C,MAAA;IACE8C,QAAA,GAQE,eAAa,EAAM,EAAArE,kBAAgB,CAAA6D,GAAA,EAAArD,+BAEtB,CAAA8D,wBACb;MAACzC,MAAA,EAAAW;IAAA;IAAA;AACC;AACA;AACY;AACW;AACvB;AACA;IACqF,CAAAO,SAC7E,IAAAD,KAAA,CAAUyB,MAAA,UAAA9C,UAAA,GAAAA,UAAA,GAAAF,MAAA,iCAAAvB,kBAAA,CAAA6D,GAAA,EAAA3D,iBAAA,CAAAsE,SAAA;MACjB1B,KAAG;MAAAC,SAAA;MAGNzB,UAAA,EAAAmC,UAAA;MAACgB,WAAA,EAAA9C,SAAA,CAAA8C,WAAA;MAAAzB,UAAA;MACCC,OAAA;MACAyB,YAAA,GAAA9C,uBAAA,GAAAD,SAAA,CAAA+C,YAAA,cAAA9C,uBAAA,cAAAA,uBAAA,GAAAK,CAAA;QACAlB;MACA;MACA4D,MAAA,EAAAhD,SAAA,CAAAgD,MAAA;MACA,GAAAnD;IAA2D,EAC1D,GAAG,mBAAAxB,kBAAA,CAAA6D,GAAA,EAAA3D,iBAAA,CAAA0E,IAAA;MAAA9B,KAAA;MACNC,SAAA;MAEJzB,UAAA;MAEJ0B,UAAA","ignoreList":[]}
|
|
@@ -49,6 +49,10 @@ var import_store = require("@multiplatform.one/store");
|
|
|
49
49
|
var import_FrappeProvider = require("./FrappeProvider.cjs");
|
|
50
50
|
var import_FrappeList = require("./FrappeList.cjs");
|
|
51
51
|
var import_FrappeTable = require("./FrappeTable.cjs");
|
|
52
|
+
var import_frappeNavigation = require("./frappeNavigation.cjs");
|
|
53
|
+
var import_frappeConnections = require("./frappeConnections.cjs");
|
|
54
|
+
var import_liveErrors = require("./liveErrors.cjs");
|
|
55
|
+
var import_useConnectionFilters = require("./useConnectionFilters.cjs");
|
|
52
56
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
53
57
|
const storageKeyPrefix = "frappe-listview-";
|
|
54
58
|
const internalDocKeys = /* @__PURE__ */new Set(["name", "owner", "creation", "modified", "modified_by", "docstatus", "idx", "doctype", "_user_tags", "_comments", "_assign", "_liked_by", "_seen"]);
|
|
@@ -65,7 +69,7 @@ function resolveImageUrl(value, baseURL) {
|
|
|
65
69
|
async function getStoredViewMode(doctype) {
|
|
66
70
|
try {
|
|
67
71
|
const stored = await Promise.resolve(import_store.storage.getItem(`${storageKeyPrefix}${doctype}`));
|
|
68
|
-
if (stored === "list" || stored === "table") return stored;
|
|
72
|
+
if (stored === "list" || stored === "table" || stored === "grid") return stored;
|
|
69
73
|
} catch {}
|
|
70
74
|
return null;
|
|
71
75
|
}
|
|
@@ -77,12 +81,26 @@ async function setStoredViewMode(doctype, mode) {
|
|
|
77
81
|
function FrappeListView({
|
|
78
82
|
doctype,
|
|
79
83
|
fields,
|
|
84
|
+
connections,
|
|
80
85
|
filters,
|
|
81
86
|
defaultViewMode = "list",
|
|
82
|
-
|
|
83
|
-
|
|
87
|
+
viewMode: controlledViewMode,
|
|
88
|
+
onViewModeChange,
|
|
89
|
+
onItemClick: onItemClickProp,
|
|
90
|
+
onAdd: onAddProp,
|
|
91
|
+
route,
|
|
92
|
+
orderBy,
|
|
93
|
+
limit,
|
|
94
|
+
initialRows,
|
|
84
95
|
columns,
|
|
85
96
|
displayFields,
|
|
97
|
+
renderCard,
|
|
98
|
+
gridProps,
|
|
99
|
+
emptyState,
|
|
100
|
+
onRetry,
|
|
101
|
+
pageSize,
|
|
102
|
+
showSearch = true,
|
|
103
|
+
surface = true,
|
|
86
104
|
showToolbar = true,
|
|
87
105
|
showFilterSidebar = false,
|
|
88
106
|
// deprecated: switcher always renders; destructured so it stays out of stackProps
|
|
@@ -93,6 +111,7 @@ function FrappeListView({
|
|
|
93
111
|
...stackProps
|
|
94
112
|
}) {
|
|
95
113
|
const config = (0, import_FrappeProvider.useFrappeConfig)();
|
|
114
|
+
const navigate = (0, import_frappeNavigation.useFrappeRouter)()?.navigate;
|
|
96
115
|
const {
|
|
97
116
|
knobProps
|
|
98
117
|
} = (0, import_theme.useResolvedKnobs)();
|
|
@@ -116,7 +135,9 @@ function FrappeListView({
|
|
|
116
135
|
realtime: config?.realtime,
|
|
117
136
|
fixtures: config?.fixtures
|
|
118
137
|
};
|
|
119
|
-
const [
|
|
138
|
+
const [storedViewMode, setViewModeState] = (0, import_react2.useState)(defaultViewMode);
|
|
139
|
+
const requestedViewMode = controlledViewMode ?? storedViewMode;
|
|
140
|
+
const viewMode = requestedViewMode === "grid" && !renderCard ? "list" : requestedViewMode;
|
|
120
141
|
(0, import_react2.useEffect)(() => {
|
|
121
142
|
let cancelled = false;
|
|
122
143
|
setViewModeState(defaultViewMode);
|
|
@@ -131,14 +152,33 @@ function FrappeListView({
|
|
|
131
152
|
};
|
|
132
153
|
}, [doctype, defaultViewMode]);
|
|
133
154
|
const setViewMode = (0, import_react2.useCallback)(mode => {
|
|
155
|
+
onViewModeChange?.(mode);
|
|
156
|
+
if (controlledViewMode !== void 0) return;
|
|
134
157
|
setViewModeState(mode);
|
|
135
158
|
void setStoredViewMode(doctype, mode);
|
|
136
|
-
}, [doctype]);
|
|
159
|
+
}, [doctype, controlledViewMode, onViewModeChange]);
|
|
137
160
|
const {
|
|
138
161
|
meta,
|
|
139
162
|
isLoading: isMetaLoading,
|
|
140
163
|
error: metaError
|
|
141
164
|
} = (0, import_frappe.useDocTypeMeta)(connectionConfig, doctype);
|
|
165
|
+
const onItemClick = onItemClickProp ?? (route !== void 0 && navigate ? doc => {
|
|
166
|
+
if (doc.name) navigate((0, import_frappeNavigation.frappeRouteHref)(route, {
|
|
167
|
+
mode: "view",
|
|
168
|
+
name: doc.name
|
|
169
|
+
}));
|
|
170
|
+
} : void 0);
|
|
171
|
+
const onAdd = onAddProp ?? (route !== void 0 && navigate && meta ? () => navigate((0, import_frappeNavigation.frappeRouteHref)(route, {
|
|
172
|
+
mode: "create"
|
|
173
|
+
})) : void 0);
|
|
174
|
+
const asPage = view => route === void 0 ? view : /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.ListPageLayout, {
|
|
175
|
+
scroll: false,
|
|
176
|
+
header: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.PageHeader, {
|
|
177
|
+
title: doctype,
|
|
178
|
+
divider: false
|
|
179
|
+
}),
|
|
180
|
+
children: view
|
|
181
|
+
});
|
|
142
182
|
const [peekedFields, setPeekedFields] = (0, import_react2.useState)(null);
|
|
143
183
|
(0, import_react2.useEffect)(() => {
|
|
144
184
|
if (meta || isMetaLoading || !metaError || !finalBaseURL) return;
|
|
@@ -275,6 +315,9 @@ function FrappeListView({
|
|
|
275
315
|
(0, import_react2.useEffect)(() => {
|
|
276
316
|
setActiveFilters(filters);
|
|
277
317
|
}, [filters]);
|
|
318
|
+
const effectiveConnections = (0, import_react2.useMemo)(() => connections ?? (isMetaLoading ? void 0 : (0, import_frappeConnections.connectionsFromMeta)(meta)), [connections, isMetaLoading, meta]);
|
|
319
|
+
const linkFilters = (0, import_useConnectionFilters.useConnectionFilters)(connectionConfig, doctype, activeFilters, effectiveConnections);
|
|
320
|
+
const resolvedFilters = linkFilters.filters;
|
|
278
321
|
const [searchText, setSearchText] = (0, import_react2.useState)("");
|
|
279
322
|
const [debouncedSearch, setDebouncedSearch] = (0, import_react2.useState)("");
|
|
280
323
|
const searchField = (0, import_react2.useMemo)(() => {
|
|
@@ -285,12 +328,12 @@ function FrappeListView({
|
|
|
285
328
|
}, [meta, metaListFields, peekedFields]);
|
|
286
329
|
const listFilters = (0, import_react2.useMemo)(() => {
|
|
287
330
|
const query = debouncedSearch.trim();
|
|
288
|
-
if (!query) return
|
|
331
|
+
if (!query) return resolvedFilters;
|
|
289
332
|
const searchFilter = [searchField, "like", `%${query}%`];
|
|
290
|
-
if (!
|
|
291
|
-
if (Array.isArray(
|
|
292
|
-
return [...Object.entries(
|
|
293
|
-
}, [
|
|
333
|
+
if (!resolvedFilters) return [searchFilter];
|
|
334
|
+
if (Array.isArray(resolvedFilters)) return [...resolvedFilters, searchFilter];
|
|
335
|
+
return [...Object.entries(resolvedFilters).map(([key, value]) => [key, "=", value]), searchFilter];
|
|
336
|
+
}, [resolvedFilters, debouncedSearch, searchField]);
|
|
294
337
|
const hasProvidedFilters = (0, import_react2.useMemo)(() => {
|
|
295
338
|
if (!activeFilters) return false;
|
|
296
339
|
return Array.isArray(activeFilters) ? activeFilters.length > 0 : Object.keys(activeFilters).length > 0;
|
|
@@ -316,8 +359,8 @@ function FrappeListView({
|
|
|
316
359
|
const handleDeleteFilter = (0, import_react2.useCallback)(async name => {
|
|
317
360
|
await savedFiltersHook.deleteFilter(name);
|
|
318
361
|
}, [savedFiltersHook]);
|
|
319
|
-
if (isMetaLoading) {
|
|
320
|
-
return /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui.YStack, {
|
|
362
|
+
if (isMetaLoading && !fields) {
|
|
363
|
+
return asPage(/* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui.YStack, {
|
|
321
364
|
...knobProps.panelPadding,
|
|
322
365
|
alignItems: "center",
|
|
323
366
|
justifyContent: "center",
|
|
@@ -332,7 +375,7 @@ function FrappeListView({
|
|
|
332
375
|
doctype
|
|
333
376
|
})
|
|
334
377
|
})]
|
|
335
|
-
});
|
|
378
|
+
}));
|
|
336
379
|
}
|
|
337
380
|
const renderToolbar = () => {
|
|
338
381
|
if (!showToolbar) return null;
|
|
@@ -347,7 +390,10 @@ function FrappeListView({
|
|
|
347
390
|
alignItems: "center",
|
|
348
391
|
...knobProps.gap,
|
|
349
392
|
children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.ViewSwitcher, {
|
|
350
|
-
views: [{
|
|
393
|
+
views: [...(renderCard ? [{
|
|
394
|
+
type: "grid",
|
|
395
|
+
label: t("Cards")
|
|
396
|
+
}] : []), {
|
|
351
397
|
type: "list",
|
|
352
398
|
label: t("List")
|
|
353
399
|
}, {
|
|
@@ -452,28 +498,37 @@ function FrappeListView({
|
|
|
452
498
|
})
|
|
453
499
|
});
|
|
454
500
|
const renderContent = () => {
|
|
455
|
-
if (viewMode === "list") {
|
|
501
|
+
if (viewMode === "list" || viewMode === "grid") {
|
|
502
|
+
const isGrid = viewMode === "grid";
|
|
456
503
|
return /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui.YStack, {
|
|
457
|
-
flex: 1,
|
|
458
|
-
children: [renderListSearch(), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_FrappeList.FrappeList, {
|
|
504
|
+
flex: isGrid ? void 0 : 1,
|
|
505
|
+
children: [showSearch ? renderListSearch() : null, /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_FrappeList.FrappeList, {
|
|
506
|
+
layout: isGrid ? "grid" : "list",
|
|
507
|
+
gridProps,
|
|
508
|
+
emptyState,
|
|
509
|
+
pageSize,
|
|
510
|
+
onRetry: onRetry ?? handleRefresh,
|
|
459
511
|
doctype,
|
|
460
512
|
fields: effectiveFields,
|
|
461
513
|
filters: listFilters,
|
|
462
|
-
renderItem: renderListItem,
|
|
514
|
+
renderItem: isGrid && renderCard ? renderCard : renderListItem,
|
|
463
515
|
onItemClick,
|
|
464
516
|
baseURL: finalBaseURL,
|
|
465
517
|
auth: finalAuth,
|
|
466
518
|
syncOptions: finalSyncOptions,
|
|
519
|
+
orderBy,
|
|
520
|
+
limit,
|
|
521
|
+
initialRows,
|
|
467
522
|
...(noResultsMessage ? {
|
|
468
523
|
emptyMessage: noResultsMessage
|
|
469
524
|
} : {})
|
|
470
|
-
},
|
|
525
|
+
}, `${viewMode}-${refreshKey}`)]
|
|
471
526
|
});
|
|
472
527
|
}
|
|
473
528
|
return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_FrappeTable.FrappeTable, {
|
|
474
529
|
doctype,
|
|
475
530
|
fields: effectiveFields,
|
|
476
|
-
filters:
|
|
531
|
+
filters: resolvedFilters,
|
|
477
532
|
columns: effectiveColumns,
|
|
478
533
|
onRowClick: onItemClick,
|
|
479
534
|
baseURL: finalBaseURL,
|
|
@@ -481,19 +536,37 @@ function FrappeListView({
|
|
|
481
536
|
syncOptions: finalSyncOptions
|
|
482
537
|
}, `table-${refreshKey}`);
|
|
483
538
|
};
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
539
|
+
const renderResolvedContent = () => {
|
|
540
|
+
if (linkFilters.error) {
|
|
541
|
+
return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.AsyncBoundary, {
|
|
542
|
+
layout: "list",
|
|
543
|
+
error: linkFilters.error,
|
|
544
|
+
errorTitle: (0, import_liveErrors.isPermissionError)(linkFilters.error) ? t("You do not have permission to view {{doctype}}", {
|
|
545
|
+
doctype
|
|
546
|
+
}) : t("Error loading {{doctype}}", {
|
|
547
|
+
doctype
|
|
548
|
+
})
|
|
549
|
+
});
|
|
550
|
+
}
|
|
551
|
+
if (linkFilters.pending) return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.AsyncBoundary, {
|
|
552
|
+
layout: "list",
|
|
553
|
+
loading: true
|
|
554
|
+
});
|
|
555
|
+
return renderContent();
|
|
556
|
+
};
|
|
557
|
+
return asPage(/* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui.YStack, {
|
|
558
|
+
flex: viewMode === "grid" ? void 0 : 1,
|
|
559
|
+
...(surface ? knobProps.surface : {}),
|
|
560
|
+
...(surface ? knobProps.containerRadius : {}),
|
|
561
|
+
overflow: surface ? "hidden" : void 0,
|
|
489
562
|
testID: `${doctype.toLowerCase()}-list`,
|
|
490
563
|
...stackProps,
|
|
491
|
-
children: [renderToolbar(), showFilterSidebar ? /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui.XStack, {
|
|
564
|
+
children: [renderToolbar(), linkFilters.readers, showFilterSidebar ? /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui.XStack, {
|
|
492
565
|
flex: 1,
|
|
493
566
|
children: [renderFilterSidebar(), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.YStack, {
|
|
494
567
|
flex: 1,
|
|
495
|
-
children:
|
|
568
|
+
children: renderResolvedContent()
|
|
496
569
|
})]
|
|
497
|
-
}) :
|
|
498
|
-
});
|
|
570
|
+
}) : renderResolvedContent()]
|
|
571
|
+
}));
|
|
499
572
|
}
|
|
@@ -52,6 +52,10 @@ var import_store = require("@multiplatform.one/store");
|
|
|
52
52
|
var import_FrappeProvider = require("./FrappeProvider.native.js");
|
|
53
53
|
var import_FrappeList = require("./FrappeList.native.js");
|
|
54
54
|
var import_FrappeTable = require("./FrappeTable.native.js");
|
|
55
|
+
var import_frappeNavigation = require("./frappeNavigation.native.js");
|
|
56
|
+
var import_frappeConnections = require("./frappeConnections.native.js");
|
|
57
|
+
var import_liveErrors = require("./liveErrors.native.js");
|
|
58
|
+
var import_useConnectionFilters = require("./useConnectionFilters.native.js");
|
|
55
59
|
var storageKeyPrefix = "frappe-listview-";
|
|
56
60
|
var internalDocKeys = /* @__PURE__ */new Set(["name", "owner", "creation", "modified", "modified_by", "docstatus", "idx", "doctype", "_user_tags", "_comments", "_assign", "_liked_by", "_seen"]);
|
|
57
61
|
var layoutFieldtypes = /* @__PURE__ */new Set(["Column Break", "Section Break", "Tab Break", "HTML", "Heading", "Fold", "Button"]);
|
|
@@ -69,7 +73,7 @@ function resolveImageUrl(value, baseURL) {
|
|
|
69
73
|
async function getStoredViewMode(doctype) {
|
|
70
74
|
try {
|
|
71
75
|
var stored = await Promise.resolve(import_store.storage.getItem(`${storageKeyPrefix}${doctype}`));
|
|
72
|
-
if (stored === "list" || stored === "table") return stored;
|
|
76
|
+
if (stored === "list" || stored === "table" || stored === "grid") return stored;
|
|
73
77
|
} catch (unused) {}
|
|
74
78
|
return null;
|
|
75
79
|
}
|
|
@@ -82,12 +86,26 @@ function FrappeListView(param) {
|
|
|
82
86
|
var {
|
|
83
87
|
doctype,
|
|
84
88
|
fields,
|
|
89
|
+
connections,
|
|
85
90
|
filters,
|
|
86
91
|
defaultViewMode = "list",
|
|
87
|
-
|
|
88
|
-
|
|
92
|
+
viewMode: controlledViewMode,
|
|
93
|
+
onViewModeChange,
|
|
94
|
+
onItemClick: onItemClickProp,
|
|
95
|
+
onAdd: onAddProp,
|
|
96
|
+
route,
|
|
97
|
+
orderBy,
|
|
98
|
+
limit,
|
|
99
|
+
initialRows,
|
|
89
100
|
columns,
|
|
90
101
|
displayFields,
|
|
102
|
+
renderCard,
|
|
103
|
+
gridProps,
|
|
104
|
+
emptyState,
|
|
105
|
+
onRetry,
|
|
106
|
+
pageSize,
|
|
107
|
+
showSearch = true,
|
|
108
|
+
surface = true,
|
|
91
109
|
showToolbar = true,
|
|
92
110
|
showFilterSidebar = false,
|
|
93
111
|
// deprecated: switcher always renders; destructured so it stays out of stackProps
|
|
@@ -97,7 +115,9 @@ function FrappeListView(param) {
|
|
|
97
115
|
syncOptions,
|
|
98
116
|
...stackProps
|
|
99
117
|
} = param;
|
|
118
|
+
var _useFrappeRouter;
|
|
100
119
|
var config = (0, import_FrappeProvider.useFrappeConfig)();
|
|
120
|
+
var navigate = (_useFrappeRouter = (0, import_frappeNavigation.useFrappeRouter)()) === null || _useFrappeRouter === void 0 ? void 0 : _useFrappeRouter.navigate;
|
|
101
121
|
var {
|
|
102
122
|
knobProps
|
|
103
123
|
} = (0, import_theme.useResolvedKnobs)();
|
|
@@ -121,7 +141,9 @@ function FrappeListView(param) {
|
|
|
121
141
|
realtime: config === null || config === void 0 ? void 0 : config.realtime,
|
|
122
142
|
fixtures: config === null || config === void 0 ? void 0 : config.fixtures
|
|
123
143
|
};
|
|
124
|
-
var [
|
|
144
|
+
var [storedViewMode, setViewModeState] = (0, import_react2.useState)(defaultViewMode);
|
|
145
|
+
var requestedViewMode = controlledViewMode !== null && controlledViewMode !== void 0 ? controlledViewMode : storedViewMode;
|
|
146
|
+
var viewMode = requestedViewMode === "grid" && !renderCard ? "list" : requestedViewMode;
|
|
125
147
|
(0, import_react2.useEffect)(function () {
|
|
126
148
|
var cancelled = false;
|
|
127
149
|
setViewModeState(defaultViewMode);
|
|
@@ -136,14 +158,37 @@ function FrappeListView(param) {
|
|
|
136
158
|
};
|
|
137
159
|
}, [doctype, defaultViewMode]);
|
|
138
160
|
var setViewMode = (0, import_react2.useCallback)(function (mode) {
|
|
161
|
+
onViewModeChange === null || onViewModeChange === void 0 ? void 0 : onViewModeChange(mode);
|
|
162
|
+
if (controlledViewMode !== void 0) return;
|
|
139
163
|
setViewModeState(mode);
|
|
140
164
|
void setStoredViewMode(doctype, mode);
|
|
141
|
-
}, [doctype]);
|
|
165
|
+
}, [doctype, controlledViewMode, onViewModeChange]);
|
|
142
166
|
var {
|
|
143
167
|
meta,
|
|
144
168
|
isLoading: isMetaLoading,
|
|
145
169
|
error: metaError
|
|
146
170
|
} = (0, import_frappe.useDocTypeMeta)(connectionConfig, doctype);
|
|
171
|
+
var onItemClick = onItemClickProp !== null && onItemClickProp !== void 0 ? onItemClickProp : route !== void 0 && navigate ? function (doc) {
|
|
172
|
+
if (doc.name) navigate((0, import_frappeNavigation.frappeRouteHref)(route, {
|
|
173
|
+
mode: "view",
|
|
174
|
+
name: doc.name
|
|
175
|
+
}));
|
|
176
|
+
} : void 0;
|
|
177
|
+
var onAdd = onAddProp !== null && onAddProp !== void 0 ? onAddProp : route !== void 0 && navigate && meta ? function () {
|
|
178
|
+
return navigate((0, import_frappeNavigation.frappeRouteHref)(route, {
|
|
179
|
+
mode: "create"
|
|
180
|
+
}));
|
|
181
|
+
} : void 0;
|
|
182
|
+
var asPage = function asPage2(view) {
|
|
183
|
+
return route === void 0 ? view : /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.ListPageLayout, {
|
|
184
|
+
scroll: false,
|
|
185
|
+
header: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.PageHeader, {
|
|
186
|
+
title: doctype,
|
|
187
|
+
divider: false
|
|
188
|
+
}),
|
|
189
|
+
children: view
|
|
190
|
+
});
|
|
191
|
+
};
|
|
147
192
|
var [peekedFields, setPeekedFields] = (0, import_react2.useState)(null);
|
|
148
193
|
(0, import_react2.useEffect)(function () {
|
|
149
194
|
if (meta || isMetaLoading || !metaError || !finalBaseURL) return;
|
|
@@ -316,6 +361,11 @@ function FrappeListView(param) {
|
|
|
316
361
|
(0, import_react2.useEffect)(function () {
|
|
317
362
|
setActiveFilters(filters);
|
|
318
363
|
}, [filters]);
|
|
364
|
+
var effectiveConnections = (0, import_react2.useMemo)(function () {
|
|
365
|
+
return connections !== null && connections !== void 0 ? connections : isMetaLoading ? void 0 : (0, import_frappeConnections.connectionsFromMeta)(meta);
|
|
366
|
+
}, [connections, isMetaLoading, meta]);
|
|
367
|
+
var linkFilters = (0, import_useConnectionFilters.useConnectionFilters)(connectionConfig, doctype, activeFilters, effectiveConnections);
|
|
368
|
+
var resolvedFilters = linkFilters.filters;
|
|
319
369
|
var [searchText, setSearchText] = (0, import_react2.useState)("");
|
|
320
370
|
var [debouncedSearch, setDebouncedSearch] = (0, import_react2.useState)("");
|
|
321
371
|
var searchField = (0, import_react2.useMemo)(function () {
|
|
@@ -326,15 +376,15 @@ function FrappeListView(param) {
|
|
|
326
376
|
}, [meta, metaListFields, peekedFields]);
|
|
327
377
|
var listFilters = (0, import_react2.useMemo)(function () {
|
|
328
378
|
var query = debouncedSearch.trim();
|
|
329
|
-
if (!query) return
|
|
379
|
+
if (!query) return resolvedFilters;
|
|
330
380
|
var searchFilter = [searchField, "like", `%${query}%`];
|
|
331
|
-
if (!
|
|
332
|
-
if (Array.isArray(
|
|
333
|
-
return [...Object.entries(
|
|
381
|
+
if (!resolvedFilters) return [searchFilter];
|
|
382
|
+
if (Array.isArray(resolvedFilters)) return [...resolvedFilters, searchFilter];
|
|
383
|
+
return [...Object.entries(resolvedFilters).map(function (param2) {
|
|
334
384
|
var [key, value] = param2;
|
|
335
385
|
return [key, "=", value];
|
|
336
386
|
}), searchFilter];
|
|
337
|
-
}, [
|
|
387
|
+
}, [resolvedFilters, debouncedSearch, searchField]);
|
|
338
388
|
var hasProvidedFilters = (0, import_react2.useMemo)(function () {
|
|
339
389
|
if (!activeFilters) return false;
|
|
340
390
|
return Array.isArray(activeFilters) ? activeFilters.length > 0 : Object.keys(activeFilters).length > 0;
|
|
@@ -362,8 +412,8 @@ function FrappeListView(param) {
|
|
|
362
412
|
var handleDeleteFilter = (0, import_react2.useCallback)(async function (name) {
|
|
363
413
|
await savedFiltersHook.deleteFilter(name);
|
|
364
414
|
}, [savedFiltersHook]);
|
|
365
|
-
if (isMetaLoading) {
|
|
366
|
-
return /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui.YStack, {
|
|
415
|
+
if (isMetaLoading && !fields) {
|
|
416
|
+
return asPage(/* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui.YStack, {
|
|
367
417
|
...knobProps.panelPadding,
|
|
368
418
|
alignItems: "center",
|
|
369
419
|
justifyContent: "center",
|
|
@@ -378,7 +428,7 @@ function FrappeListView(param) {
|
|
|
378
428
|
doctype
|
|
379
429
|
})
|
|
380
430
|
})]
|
|
381
|
-
});
|
|
431
|
+
}));
|
|
382
432
|
}
|
|
383
433
|
var renderToolbar = function renderToolbar2() {
|
|
384
434
|
if (!showToolbar) return null;
|
|
@@ -395,7 +445,10 @@ function FrappeListView(param) {
|
|
|
395
445
|
alignItems: "center",
|
|
396
446
|
...knobProps.gap,
|
|
397
447
|
children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.ViewSwitcher, {
|
|
398
|
-
views: [{
|
|
448
|
+
views: [...(renderCard ? [{
|
|
449
|
+
type: "grid",
|
|
450
|
+
label: t("Cards")
|
|
451
|
+
}] : []), {
|
|
399
452
|
type: "list",
|
|
400
453
|
label: t("List")
|
|
401
454
|
}, {
|
|
@@ -518,30 +571,39 @@ function FrappeListView(param) {
|
|
|
518
571
|
});
|
|
519
572
|
};
|
|
520
573
|
var renderContent = function renderContent2() {
|
|
521
|
-
if (viewMode === "list") {
|
|
574
|
+
if (viewMode === "list" || viewMode === "grid") {
|
|
575
|
+
var isGrid = viewMode === "grid";
|
|
522
576
|
return /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui.YStack, {
|
|
523
|
-
flex: 1,
|
|
524
|
-
children: [renderListSearch(), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_FrappeList.FrappeList, {
|
|
577
|
+
flex: isGrid ? void 0 : 1,
|
|
578
|
+
children: [showSearch ? renderListSearch() : null, /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_FrappeList.FrappeList, {
|
|
579
|
+
layout: isGrid ? "grid" : "list",
|
|
580
|
+
gridProps,
|
|
581
|
+
emptyState,
|
|
582
|
+
pageSize,
|
|
583
|
+
onRetry: onRetry !== null && onRetry !== void 0 ? onRetry : handleRefresh,
|
|
525
584
|
doctype,
|
|
526
585
|
fields: effectiveFields,
|
|
527
586
|
filters: listFilters,
|
|
528
|
-
renderItem: renderListItem,
|
|
587
|
+
renderItem: isGrid && renderCard ? renderCard : renderListItem,
|
|
529
588
|
onItemClick,
|
|
530
589
|
baseURL: finalBaseURL,
|
|
531
590
|
auth: finalAuth,
|
|
532
591
|
syncOptions: finalSyncOptions,
|
|
592
|
+
orderBy,
|
|
593
|
+
limit,
|
|
594
|
+
initialRows,
|
|
533
595
|
// Only override when narrowing is active: FrappeList's own
|
|
534
596
|
// "No {doctype} records found" stays the true-empty message.
|
|
535
597
|
...(noResultsMessage ? {
|
|
536
598
|
emptyMessage: noResultsMessage
|
|
537
599
|
} : {})
|
|
538
|
-
},
|
|
600
|
+
}, `${viewMode}-${refreshKey}`)]
|
|
539
601
|
});
|
|
540
602
|
}
|
|
541
603
|
return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_FrappeTable.FrappeTable, {
|
|
542
604
|
doctype,
|
|
543
605
|
fields: effectiveFields,
|
|
544
|
-
filters:
|
|
606
|
+
filters: resolvedFilters,
|
|
545
607
|
columns: effectiveColumns,
|
|
546
608
|
onRowClick: onItemClick,
|
|
547
609
|
baseURL: finalBaseURL,
|
|
@@ -549,20 +611,38 @@ function FrappeListView(param) {
|
|
|
549
611
|
syncOptions: finalSyncOptions
|
|
550
612
|
}, `table-${refreshKey}`);
|
|
551
613
|
};
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
614
|
+
var renderResolvedContent = function renderResolvedContent2() {
|
|
615
|
+
if (linkFilters.error) {
|
|
616
|
+
return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.AsyncBoundary, {
|
|
617
|
+
layout: "list",
|
|
618
|
+
error: linkFilters.error,
|
|
619
|
+
errorTitle: (0, import_liveErrors.isPermissionError)(linkFilters.error) ? t("You do not have permission to view {{doctype}}", {
|
|
620
|
+
doctype
|
|
621
|
+
}) : t("Error loading {{doctype}}", {
|
|
622
|
+
doctype
|
|
623
|
+
})
|
|
624
|
+
});
|
|
625
|
+
}
|
|
626
|
+
if (linkFilters.pending) return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.AsyncBoundary, {
|
|
627
|
+
layout: "list",
|
|
628
|
+
loading: true
|
|
629
|
+
});
|
|
630
|
+
return renderContent();
|
|
631
|
+
};
|
|
632
|
+
return asPage(/* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui.YStack, {
|
|
633
|
+
flex: viewMode === "grid" ? void 0 : 1,
|
|
634
|
+
...(surface ? knobProps.surface : {}),
|
|
635
|
+
...(surface ? knobProps.containerRadius : {}),
|
|
636
|
+
overflow: surface ? "hidden" : void 0,
|
|
557
637
|
testID: `${doctype.toLowerCase()}-list`,
|
|
558
638
|
...stackProps,
|
|
559
|
-
children: [renderToolbar(), showFilterSidebar ? /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui.XStack, {
|
|
639
|
+
children: [renderToolbar(), linkFilters.readers, showFilterSidebar ? /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui.XStack, {
|
|
560
640
|
flex: 1,
|
|
561
641
|
children: [renderFilterSidebar(), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.YStack, {
|
|
562
642
|
flex: 1,
|
|
563
|
-
children:
|
|
643
|
+
children: renderResolvedContent()
|
|
564
644
|
})]
|
|
565
|
-
}) :
|
|
566
|
-
});
|
|
645
|
+
}) : renderResolvedContent()]
|
|
646
|
+
}));
|
|
567
647
|
}
|
|
568
648
|
//# sourceMappingURL=FrappeListView.native.js.map
|