@multiplatform.one/frappe-ui 7.28.1 → 7.29.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/FrappeCalendar.cjs +3 -2
- package/dist/cjs/FrappeCalendar.native.js +3 -2
- package/dist/cjs/FrappeCalendar.native.js.map +1 -1
- package/dist/cjs/FrappeForm.cjs +148 -464
- package/dist/cjs/FrappeForm.native.js +152 -633
- package/dist/cjs/FrappeForm.native.js.map +1 -1
- package/dist/cjs/FrappeListView.cjs +5 -27
- package/dist/cjs/FrappeListView.native.js +11 -32
- package/dist/cjs/FrappeListView.native.js.map +1 -1
- package/dist/cjs/FrappeReportBuilder.cjs +523 -309
- package/dist/cjs/FrappeReportBuilder.native.js +658 -353
- package/dist/cjs/FrappeReportBuilder.native.js.map +1 -1
- package/dist/cjs/FrappeReportView.cjs +35 -234
- package/dist/cjs/FrappeReportView.native.js +39 -283
- package/dist/cjs/FrappeReportView.native.js.map +1 -1
- package/dist/cjs/dependsOn.cjs +2 -2
- package/dist/cjs/dependsOn.native.js +1 -2
- package/dist/cjs/dependsOn.native.js.map +1 -1
- package/dist/cjs/fields/shared/EditorPreviewPanes.cjs +2 -2
- package/dist/cjs/fields/shared/EditorPreviewPanes.native.js +2 -2
- package/dist/cjs/fields/shared/EditorPreviewPanes.native.js.map +1 -1
- package/dist/cjs/formEngine/docPermissions.cjs +20 -0
- package/dist/cjs/formEngine/docPermissions.native.js +69 -0
- package/dist/cjs/formEngine/docPermissions.native.js.map +1 -1
- package/dist/cjs/formEngine/index.cjs +2 -0
- package/dist/cjs/formEngine/index.native.js +2 -0
- package/dist/cjs/formEngine/index.native.js.map +1 -1
- package/dist/cjs/index.cjs +67 -7
- package/dist/cjs/index.native.js +67 -7
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/liveErrors.cjs +8 -2
- package/dist/cjs/liveErrors.native.js +8 -2
- package/dist/cjs/liveErrors.native.js.map +1 -1
- package/dist/cjs/measures.cjs +31 -0
- package/dist/cjs/measures.native.js +34 -0
- package/dist/cjs/measures.native.js.map +1 -0
- package/dist/cjs/recordShape.cjs +103 -0
- package/dist/cjs/recordShape.native.js +115 -0
- package/dist/cjs/recordShape.native.js.map +1 -0
- package/dist/cjs/report/ReportGrid.cjs +453 -0
- package/dist/cjs/report/ReportGrid.native.js +510 -0
- package/dist/cjs/report/ReportGrid.native.js.map +1 -0
- package/dist/cjs/report/ReportViewToolbar.cjs +253 -0
- package/dist/cjs/report/ReportViewToolbar.native.js +303 -0
- package/dist/cjs/report/ReportViewToolbar.native.js.map +1 -0
- package/dist/cjs/report/queryReport.cjs +444 -0
- package/dist/cjs/report/queryReport.native.js +588 -0
- package/dist/cjs/report/queryReport.native.js.map +1 -0
- package/dist/cjs/report/queryReportColumns.cjs +131 -0
- package/dist/cjs/report/queryReportColumns.native.js +159 -0
- package/dist/cjs/report/queryReportColumns.native.js.map +1 -0
- package/dist/cjs/report/reportViewModel.cjs +386 -0
- package/dist/cjs/report/reportViewModel.native.js +657 -0
- package/dist/cjs/report/reportViewModel.native.js.map +1 -0
- package/dist/cjs/report/savedReports.cjs +137 -0
- package/dist/cjs/report/savedReports.native.js +169 -0
- package/dist/cjs/report/savedReports.native.js.map +1 -0
- package/dist/cjs/report/useFrappeReport.cjs +184 -0
- package/dist/cjs/report/useFrappeReport.native.js +214 -0
- package/dist/cjs/report/useFrappeReport.native.js.map +1 -0
- package/dist/cjs/report/useQueryReport.cjs +201 -0
- package/dist/cjs/report/useQueryReport.native.js +233 -0
- package/dist/cjs/report/useQueryReport.native.js.map +1 -0
- package/dist/cjs/useFrappeForm.cjs +558 -0
- package/dist/cjs/useFrappeForm.native.js +714 -0
- package/dist/cjs/useFrappeForm.native.js.map +1 -0
- package/dist/esm/FrappeCalendar.mjs +4 -3
- package/dist/esm/FrappeCalendar.mjs.map +1 -1
- package/dist/esm/FrappeCalendar.native.js +4 -3
- package/dist/esm/FrappeCalendar.native.js.map +1 -1
- package/dist/esm/FrappeForm.mjs +151 -467
- package/dist/esm/FrappeForm.mjs.map +1 -1
- package/dist/esm/FrappeForm.native.js +155 -636
- package/dist/esm/FrappeForm.native.js.map +1 -1
- package/dist/esm/FrappeListView.mjs +6 -28
- package/dist/esm/FrappeListView.mjs.map +1 -1
- package/dist/esm/FrappeListView.native.js +12 -33
- package/dist/esm/FrappeListView.native.js.map +1 -1
- package/dist/esm/FrappeReportBuilder.mjs +526 -312
- package/dist/esm/FrappeReportBuilder.mjs.map +1 -1
- package/dist/esm/FrappeReportBuilder.native.js +661 -356
- package/dist/esm/FrappeReportBuilder.native.js.map +1 -1
- package/dist/esm/FrappeReportView.mjs +30 -229
- package/dist/esm/FrappeReportView.mjs.map +1 -1
- package/dist/esm/FrappeReportView.native.js +34 -278
- package/dist/esm/FrappeReportView.native.js.map +1 -1
- package/dist/esm/dependsOn.mjs +2 -2
- package/dist/esm/dependsOn.mjs.map +1 -1
- package/dist/esm/dependsOn.native.js +1 -2
- package/dist/esm/dependsOn.native.js.map +1 -1
- package/dist/esm/fields/shared/EditorPreviewPanes.mjs +2 -2
- package/dist/esm/fields/shared/EditorPreviewPanes.mjs.map +1 -1
- package/dist/esm/fields/shared/EditorPreviewPanes.native.js +2 -2
- package/dist/esm/fields/shared/EditorPreviewPanes.native.js.map +1 -1
- package/dist/esm/formEngine/docPermissions.mjs +19 -1
- package/dist/esm/formEngine/docPermissions.mjs.map +1 -1
- package/dist/esm/formEngine/docPermissions.native.js +68 -1
- package/dist/esm/formEngine/docPermissions.native.js.map +1 -1
- package/dist/esm/formEngine/index.mjs +2 -2
- package/dist/esm/formEngine/index.mjs.map +1 -1
- package/dist/esm/formEngine/index.native.js +2 -2
- package/dist/esm/formEngine/index.native.js.map +1 -1
- package/dist/esm/index.mjs +16 -4
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/index.native.js +16 -4
- package/dist/esm/index.native.js.map +1 -1
- package/dist/esm/liveErrors.mjs +8 -3
- package/dist/esm/liveErrors.mjs.map +1 -1
- package/dist/esm/liveErrors.native.js +8 -3
- package/dist/esm/liveErrors.native.js.map +1 -1
- package/dist/esm/measures.mjs +5 -0
- package/dist/esm/measures.mjs.map +1 -0
- package/dist/esm/measures.native.js +5 -0
- package/dist/esm/measures.native.js.map +1 -0
- package/dist/esm/recordShape.mjs +74 -0
- package/dist/esm/recordShape.mjs.map +1 -0
- package/dist/esm/recordShape.native.js +83 -0
- package/dist/esm/recordShape.native.js.map +1 -0
- package/dist/esm/report/ReportGrid.mjs +428 -0
- package/dist/esm/report/ReportGrid.mjs.map +1 -0
- package/dist/esm/report/ReportGrid.native.js +471 -0
- package/dist/esm/report/ReportGrid.native.js.map +1 -0
- package/dist/esm/report/ReportViewToolbar.mjs +228 -0
- package/dist/esm/report/ReportViewToolbar.mjs.map +1 -0
- package/dist/esm/report/ReportViewToolbar.native.js +264 -0
- package/dist/esm/report/ReportViewToolbar.native.js.map +1 -0
- package/dist/esm/report/queryReport.mjs +404 -0
- package/dist/esm/report/queryReport.mjs.map +1 -0
- package/dist/esm/report/queryReport.native.js +545 -0
- package/dist/esm/report/queryReport.native.js.map +1 -0
- package/dist/esm/report/queryReportColumns.mjs +105 -0
- package/dist/esm/report/queryReportColumns.mjs.map +1 -0
- package/dist/esm/report/queryReportColumns.native.js +119 -0
- package/dist/esm/report/queryReportColumns.native.js.map +1 -0
- package/dist/esm/report/reportViewModel.mjs +343 -0
- package/dist/esm/report/reportViewModel.mjs.map +1 -0
- package/dist/esm/report/reportViewModel.native.js +611 -0
- package/dist/esm/report/reportViewModel.native.js.map +1 -0
- package/dist/esm/report/savedReports.mjs +112 -0
- package/dist/esm/report/savedReports.mjs.map +1 -0
- package/dist/esm/report/savedReports.native.js +141 -0
- package/dist/esm/report/savedReports.native.js.map +1 -0
- package/dist/esm/report/useFrappeReport.mjs +158 -0
- package/dist/esm/report/useFrappeReport.mjs.map +1 -0
- package/dist/esm/report/useFrappeReport.native.js +185 -0
- package/dist/esm/report/useFrappeReport.native.js.map +1 -0
- package/dist/esm/report/useQueryReport.mjs +176 -0
- package/dist/esm/report/useQueryReport.mjs.map +1 -0
- package/dist/esm/report/useQueryReport.native.js +205 -0
- package/dist/esm/report/useQueryReport.native.js.map +1 -0
- package/dist/esm/useFrappeForm.mjs +533 -0
- package/dist/esm/useFrappeForm.mjs.map +1 -0
- package/dist/esm/useFrappeForm.native.js +686 -0
- package/dist/esm/useFrappeForm.native.js.map +1 -0
- package/dist/jsx/FrappeCalendar.mjs +4 -3
- package/dist/jsx/FrappeCalendar.mjs.map +1 -1
- package/dist/jsx/FrappeCalendar.native.js +3 -2
- package/dist/jsx/FrappeCalendar.native.js.map +1 -1
- package/dist/jsx/FrappeForm.mjs +151 -467
- package/dist/jsx/FrappeForm.mjs.map +1 -1
- package/dist/jsx/FrappeForm.native.js +152 -633
- package/dist/jsx/FrappeForm.native.js.map +1 -1
- package/dist/jsx/FrappeListView.mjs +6 -28
- package/dist/jsx/FrappeListView.mjs.map +1 -1
- package/dist/jsx/FrappeListView.native.js +11 -32
- package/dist/jsx/FrappeListView.native.js.map +1 -1
- package/dist/jsx/FrappeReportBuilder.mjs +526 -312
- package/dist/jsx/FrappeReportBuilder.mjs.map +1 -1
- package/dist/jsx/FrappeReportBuilder.native.js +658 -353
- package/dist/jsx/FrappeReportBuilder.native.js.map +1 -1
- package/dist/jsx/FrappeReportView.mjs +30 -229
- package/dist/jsx/FrappeReportView.mjs.map +1 -1
- package/dist/jsx/FrappeReportView.native.js +39 -283
- package/dist/jsx/FrappeReportView.native.js.map +1 -1
- package/dist/jsx/dependsOn.mjs +2 -2
- package/dist/jsx/dependsOn.mjs.map +1 -1
- package/dist/jsx/dependsOn.native.js +1 -2
- package/dist/jsx/dependsOn.native.js.map +1 -1
- package/dist/jsx/fields/shared/EditorPreviewPanes.mjs +2 -2
- package/dist/jsx/fields/shared/EditorPreviewPanes.mjs.map +1 -1
- package/dist/jsx/fields/shared/EditorPreviewPanes.native.js +2 -2
- package/dist/jsx/fields/shared/EditorPreviewPanes.native.js.map +1 -1
- package/dist/jsx/formEngine/docPermissions.mjs +19 -1
- package/dist/jsx/formEngine/docPermissions.mjs.map +1 -1
- package/dist/jsx/formEngine/docPermissions.native.js +69 -0
- package/dist/jsx/formEngine/docPermissions.native.js.map +1 -1
- package/dist/jsx/formEngine/index.mjs +2 -2
- package/dist/jsx/formEngine/index.mjs.map +1 -1
- package/dist/jsx/formEngine/index.native.js +2 -0
- package/dist/jsx/formEngine/index.native.js.map +1 -1
- package/dist/jsx/index.js +16 -4
- package/dist/jsx/index.js.map +1 -1
- package/dist/jsx/index.mjs +16 -4
- package/dist/jsx/index.mjs.map +1 -1
- package/dist/jsx/index.native.js +67 -7
- package/dist/jsx/index.native.js.map +1 -1
- package/dist/jsx/liveErrors.mjs +8 -3
- package/dist/jsx/liveErrors.mjs.map +1 -1
- package/dist/jsx/liveErrors.native.js +8 -2
- package/dist/jsx/liveErrors.native.js.map +1 -1
- package/dist/jsx/measures.mjs +5 -0
- package/dist/jsx/measures.mjs.map +1 -0
- package/dist/jsx/measures.native.js +34 -0
- package/dist/jsx/measures.native.js.map +1 -0
- package/dist/jsx/recordShape.mjs +74 -0
- package/dist/jsx/recordShape.mjs.map +1 -0
- package/dist/jsx/recordShape.native.js +115 -0
- package/dist/jsx/recordShape.native.js.map +1 -0
- package/dist/jsx/report/ReportGrid.mjs +428 -0
- package/dist/jsx/report/ReportGrid.mjs.map +1 -0
- package/dist/jsx/report/ReportGrid.native.js +510 -0
- package/dist/jsx/report/ReportGrid.native.js.map +1 -0
- package/dist/jsx/report/ReportViewToolbar.mjs +228 -0
- package/dist/jsx/report/ReportViewToolbar.mjs.map +1 -0
- package/dist/jsx/report/ReportViewToolbar.native.js +303 -0
- package/dist/jsx/report/ReportViewToolbar.native.js.map +1 -0
- package/dist/jsx/report/queryReport.mjs +404 -0
- package/dist/jsx/report/queryReport.mjs.map +1 -0
- package/dist/jsx/report/queryReport.native.js +588 -0
- package/dist/jsx/report/queryReport.native.js.map +1 -0
- package/dist/jsx/report/queryReportColumns.mjs +105 -0
- package/dist/jsx/report/queryReportColumns.mjs.map +1 -0
- package/dist/jsx/report/queryReportColumns.native.js +159 -0
- package/dist/jsx/report/queryReportColumns.native.js.map +1 -0
- package/dist/jsx/report/reportViewModel.mjs +343 -0
- package/dist/jsx/report/reportViewModel.mjs.map +1 -0
- package/dist/jsx/report/reportViewModel.native.js +657 -0
- package/dist/jsx/report/reportViewModel.native.js.map +1 -0
- package/dist/jsx/report/savedReports.mjs +112 -0
- package/dist/jsx/report/savedReports.mjs.map +1 -0
- package/dist/jsx/report/savedReports.native.js +169 -0
- package/dist/jsx/report/savedReports.native.js.map +1 -0
- package/dist/jsx/report/useFrappeReport.mjs +158 -0
- package/dist/jsx/report/useFrappeReport.mjs.map +1 -0
- package/dist/jsx/report/useFrappeReport.native.js +214 -0
- package/dist/jsx/report/useFrappeReport.native.js.map +1 -0
- package/dist/jsx/report/useQueryReport.mjs +176 -0
- package/dist/jsx/report/useQueryReport.mjs.map +1 -0
- package/dist/jsx/report/useQueryReport.native.js +233 -0
- package/dist/jsx/report/useQueryReport.native.js.map +1 -0
- package/dist/jsx/useFrappeForm.mjs +533 -0
- package/dist/jsx/useFrappeForm.mjs.map +1 -0
- package/dist/jsx/useFrappeForm.native.js +714 -0
- package/dist/jsx/useFrappeForm.native.js.map +1 -0
- package/package.json +16 -16
- package/src/FrappeCalendar.tsx +8 -2
- package/src/FrappeForm.stories.tsx +52 -0
- package/src/FrappeForm.tsx +176 -565
- package/src/FrappeListView.cards.stories.tsx +3 -6
- package/src/FrappeListView.tsx +15 -55
- package/src/FrappeReportBuilder.stories.tsx +34 -7
- package/src/FrappeReportBuilder.tsx +790 -380
- package/src/FrappeReportView.spec.tsx +10 -6
- package/src/FrappeReportView.stories.tsx +20 -1
- package/src/FrappeReportView.tsx +89 -415
- package/src/dependsOn.ts +4 -1
- package/src/fields/shared/EditorPreviewPanes.tsx +2 -2
- package/src/formEngine/docPermissions.spec.ts +36 -1
- package/src/formEngine/docPermissions.ts +34 -0
- package/src/formEngine/index.ts +8 -1
- package/src/frappeRemainder.designLaw.spec.ts +9 -1
- package/src/frappeRoutes.spec.tsx +9 -0
- package/src/frappeViews.designLaw.spec.ts +15 -2
- package/src/guestFallback.spec.tsx +236 -0
- package/src/index.ts +117 -16
- package/src/liveErrors.spec.ts +10 -0
- package/src/liveErrors.ts +16 -3
- package/src/measures.ts +11 -0
- package/src/recordShape.spec.ts +100 -0
- package/src/recordShape.ts +133 -0
- package/src/report/ReportGrid.spec.tsx +175 -0
- package/src/report/ReportGrid.tsx +530 -0
- package/src/report/ReportViewToolbar.spec.tsx +90 -0
- package/src/report/ReportViewToolbar.tsx +314 -0
- package/src/report/queryReport.spec.ts +483 -0
- package/src/report/queryReport.ts +722 -0
- package/src/report/queryReportColumns.tsx +123 -0
- package/src/report/reportViewModel.spec.ts +393 -0
- package/src/report/reportViewModel.ts +617 -0
- package/src/report/savedReports.ts +172 -0
- package/src/report/seam.spec.ts +216 -0
- package/src/report/useFrappeReport.ts +241 -0
- package/src/report/useQueryReport.spec.tsx +131 -0
- package/src/report/useQueryReport.ts +309 -0
- package/src/useFrappeForm.spec.tsx +209 -0
- package/src/useFrappeForm.ts +778 -0
- package/types/FrappeCalendar.d.ts.map +1 -1
- package/types/FrappeForm.d.ts +21 -1
- package/types/FrappeForm.d.ts.map +1 -1
- package/types/FrappeListView.d.ts.map +1 -1
- package/types/FrappeReportBuilder.d.ts +66 -16
- package/types/FrappeReportBuilder.d.ts.map +1 -1
- package/types/FrappeReportView.d.ts +9 -127
- package/types/FrappeReportView.d.ts.map +1 -1
- package/types/dependsOn.d.ts.map +1 -1
- package/types/formEngine/docPermissions.d.ts +14 -0
- package/types/formEngine/docPermissions.d.ts.map +1 -1
- package/types/formEngine/index.d.ts +1 -1
- package/types/formEngine/index.d.ts.map +1 -1
- package/types/index.d.ts +15 -3
- package/types/index.d.ts.map +1 -1
- package/types/liveErrors.d.ts +9 -1
- package/types/liveErrors.d.ts.map +1 -1
- package/types/measures.d.ts +3 -0
- package/types/measures.d.ts.map +1 -0
- package/types/recordShape.d.ts +45 -0
- package/types/recordShape.d.ts.map +1 -0
- package/types/report/ReportGrid.d.ts +20 -0
- package/types/report/ReportGrid.d.ts.map +1 -0
- package/types/report/ReportViewToolbar.d.ts +31 -0
- package/types/report/ReportViewToolbar.d.ts.map +1 -0
- package/types/report/queryReport.d.ts +181 -0
- package/types/report/queryReport.d.ts.map +1 -0
- package/types/report/queryReportColumns.d.ts +12 -0
- package/types/report/queryReportColumns.d.ts.map +1 -0
- package/types/report/reportViewModel.d.ts +146 -0
- package/types/report/reportViewModel.d.ts.map +1 -0
- package/types/report/savedReports.d.ts +27 -0
- package/types/report/savedReports.d.ts.map +1 -0
- package/types/report/useFrappeReport.d.ts +60 -0
- package/types/report/useFrappeReport.d.ts.map +1 -0
- package/types/report/useQueryReport.d.ts +37 -0
- package/types/report/useQueryReport.d.ts.map +1 -0
- package/types/useFrappeForm.d.ts +142 -0
- package/types/useFrappeForm.d.ts.map +1 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Card } from "@multiplatform.one/components";
|
|
1
|
+
import { Card, Image } from "@multiplatform.one/components";
|
|
2
2
|
import { action } from "@multiplatform.one/storybook";
|
|
3
3
|
import { useResolvedKnobs } from "@multiplatform.one/theme";
|
|
4
|
-
import {
|
|
4
|
+
import { Text, YStack } from "tamagui";
|
|
5
5
|
import {
|
|
6
6
|
createRosterFixtures,
|
|
7
7
|
rosterPokemonFields,
|
|
@@ -54,10 +54,7 @@ function PokemonTile({ pokemon }: { pokemon: Partial<RosterPokemon> }) {
|
|
|
54
54
|
return (
|
|
55
55
|
<Card>
|
|
56
56
|
<YStack {...knobProps.panelPadding} {...knobProps.gap} alignItems="center">
|
|
57
|
-
<Image
|
|
58
|
-
source={{ uri: pokemon.sprite_front, width: 96, height: 96 }}
|
|
59
|
-
alt={pokemon.pokemon_name ?? ""}
|
|
60
|
-
/>
|
|
57
|
+
<Image src={pokemon.sprite_front} size="large" alt={pokemon.pokemon_name ?? ""} />
|
|
61
58
|
<Text {...knobProps.body} fontWeight="700" textTransform="capitalize">
|
|
62
59
|
{pokemon.pokemon_name}
|
|
63
60
|
</Text>
|
package/src/FrappeListView.tsx
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useDocTypeMeta } from "@multiplatform.one/frappe";
|
|
2
2
|
import type { DataTableColumn } from "@multiplatform.one/table";
|
|
3
3
|
import {
|
|
4
4
|
ArrowsClockwiseIcon,
|
|
@@ -56,6 +56,7 @@ import {
|
|
|
56
56
|
import { ListToastHost } from "./list/ListToastHost";
|
|
57
57
|
import { ShufflePanel } from "./list/ShufflePanel";
|
|
58
58
|
import { useListControls } from "./list/useListControls";
|
|
59
|
+
import { recordKeyLabel, useRecordShape } from "./recordShape";
|
|
59
60
|
import { useConnectionFilters, type FrappeDoctypeFilter } from "./useConnectionFilters";
|
|
60
61
|
|
|
61
62
|
interface ListFieldConfig {
|
|
@@ -210,23 +211,6 @@ const storageKeyPrefix = "frappe-listview-";
|
|
|
210
211
|
/** Cards whose images load eagerly; the rest wait until they near the viewport. */
|
|
211
212
|
const eagerCards = 6;
|
|
212
213
|
|
|
213
|
-
// Frappe document bookkeeping keys -- never useful as display columns.
|
|
214
|
-
const internalDocKeys = new Set([
|
|
215
|
-
"name",
|
|
216
|
-
"owner",
|
|
217
|
-
"creation",
|
|
218
|
-
"modified",
|
|
219
|
-
"modified_by",
|
|
220
|
-
"docstatus",
|
|
221
|
-
"idx",
|
|
222
|
-
"doctype",
|
|
223
|
-
"_user_tags",
|
|
224
|
-
"_comments",
|
|
225
|
-
"_assign",
|
|
226
|
-
"_liked_by",
|
|
227
|
-
"_seen",
|
|
228
|
-
]);
|
|
229
|
-
|
|
230
214
|
// Fieldtypes that structure a form but hold no listable value.
|
|
231
215
|
const layoutFieldtypes = new Set([
|
|
232
216
|
"Column Break",
|
|
@@ -238,11 +222,6 @@ const layoutFieldtypes = new Set([
|
|
|
238
222
|
"Button",
|
|
239
223
|
]);
|
|
240
224
|
|
|
241
|
-
/** "pokemon_name" -> "Pokemon Name" for fields we only know by key. */
|
|
242
|
-
function fieldKeyLabel(key: string): string {
|
|
243
|
-
return key.replace(/_/g, " ").replace(/(^|\s)\S/g, (c) => c.toUpperCase());
|
|
244
|
-
}
|
|
245
|
-
|
|
246
225
|
/**
|
|
247
226
|
* Resolves an image field value to a full URL.
|
|
248
227
|
*/
|
|
@@ -398,36 +377,17 @@ function FrappeListViewBody<TDoc extends { name: string; doctype: string }>({
|
|
|
398
377
|
(route !== undefined && navigate
|
|
399
378
|
? () => navigate(frappeRouteHref(route, { mode: "create" }))
|
|
400
379
|
: undefined));
|
|
401
|
-
// Guest
|
|
402
|
-
//
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
);
|
|
413
|
-
(async () => {
|
|
414
|
-
try {
|
|
415
|
-
const response = await http.get<{ data?: Record<string, unknown>[] }>(
|
|
416
|
-
`/api/resource/${encodeURIComponent(doctype)}`,
|
|
417
|
-
{ fields: ["*"], limit_page_length: 1 },
|
|
418
|
-
);
|
|
419
|
-
const sample = response.payload?.data?.[0];
|
|
420
|
-
if (!cancelled && sample) {
|
|
421
|
-
setPeekedFields(Object.keys(sample).filter((key) => !internalDocKeys.has(key)));
|
|
422
|
-
}
|
|
423
|
-
} catch {
|
|
424
|
-
// Doctype not readable at all -- the views' own empty states handle it.
|
|
425
|
-
}
|
|
426
|
-
})();
|
|
427
|
-
return () => {
|
|
428
|
-
cancelled = true;
|
|
429
|
-
};
|
|
430
|
-
}, [meta, isMetaLoading, metaError, doctype, finalBaseURL, finalAuth]);
|
|
380
|
+
// Meta refused (Guest gets 403) while the rows are readable: the views
|
|
381
|
+
// take their fields from one record instead of collapsing to Name (LC-96).
|
|
382
|
+
const recordShape = useRecordShape(
|
|
383
|
+
connectionConfig,
|
|
384
|
+
doctype,
|
|
385
|
+
!meta && !isMetaLoading && Boolean(metaError),
|
|
386
|
+
);
|
|
387
|
+
const peekedFields = useMemo(
|
|
388
|
+
() => recordShape.fields?.map((field) => field.fieldname) ?? null,
|
|
389
|
+
[recordShape.fields],
|
|
390
|
+
);
|
|
431
391
|
|
|
432
392
|
// List-view fields: prefer the doctype's in_list_view flags; when a doctype
|
|
433
393
|
// declares none, lead with its first data fields so the list/table still
|
|
@@ -472,7 +432,7 @@ function FrappeListViewBody<TDoc extends { name: string; doctype: string }>({
|
|
|
472
432
|
return peekedFields
|
|
473
433
|
.filter((key) => key !== imageFieldName)
|
|
474
434
|
.slice(0, 4)
|
|
475
|
-
.map((key) => ({ key, label:
|
|
435
|
+
.map((key) => ({ key, label: recordKeyLabel(key) }));
|
|
476
436
|
}
|
|
477
437
|
return [{ key: "name", label: t("Name") }];
|
|
478
438
|
}, [displayFields, meta, metaListFields, peekedFields, imageFieldName, t]);
|
|
@@ -546,7 +506,7 @@ function FrappeListViewBody<TDoc extends { name: string; doctype: string }>({
|
|
|
546
506
|
.slice(0, 4)
|
|
547
507
|
.map(
|
|
548
508
|
(key) =>
|
|
549
|
-
({ accessorKey: key, header:
|
|
509
|
+
({ accessorKey: key, header: recordKeyLabel(key) }) as DataTableColumn<Partial<TDoc>>,
|
|
550
510
|
);
|
|
551
511
|
}
|
|
552
512
|
return [{ accessorKey: "name" as string, header: t("Name") }] as DataTableColumn<
|
|
@@ -13,7 +13,7 @@ export default {
|
|
|
13
13
|
docs: {
|
|
14
14
|
description: {
|
|
15
15
|
component:
|
|
16
|
-
"
|
|
16
|
+
"A doctype's report view, the one the desk's view=report renders: desk default columns, a per-column filter row, group-by, totals, saved reports, CSV export and paging. Meta from an in-story fetch mock; rows from fixtures.",
|
|
17
17
|
},
|
|
18
18
|
},
|
|
19
19
|
},
|
|
@@ -24,6 +24,7 @@ export default {
|
|
|
24
24
|
|
|
25
25
|
const MOCK_HOST = "https://report.mock.test";
|
|
26
26
|
const ERR_HOST = "https://forbidden.report.mock.test";
|
|
27
|
+
const GUEST_HOST = "https://guest.report.mock.test";
|
|
27
28
|
|
|
28
29
|
function jsonResponse(body: unknown, status = 200): Response {
|
|
29
30
|
return new Response(JSON.stringify(body), {
|
|
@@ -71,6 +72,12 @@ function saleMeta(name: string) {
|
|
|
71
72
|
const urlStr =
|
|
72
73
|
typeof input === "string" ? input : input instanceof URL ? input.toString() : input.url;
|
|
73
74
|
if (urlStr.startsWith(ERR_HOST)) return jsonResponse({ message: "Not permitted" }, 403);
|
|
75
|
+
if (urlStr.startsWith(GUEST_HOST)) {
|
|
76
|
+
const url = new URL(urlStr);
|
|
77
|
+
return url.pathname === "/api/resource/QaSaleGuest"
|
|
78
|
+
? jsonResponse({ data: makeSales("QaSaleGuest", 1) })
|
|
79
|
+
: jsonResponse({ message: "Not permitted" }, 403);
|
|
80
|
+
}
|
|
74
81
|
if (urlStr.startsWith(MOCK_HOST)) {
|
|
75
82
|
const url = new URL(urlStr);
|
|
76
83
|
const metaMatch = url.pathname.match(/^\/api\/resource\/DocType\/(.+)$/);
|
|
@@ -126,8 +133,9 @@ export const EmptyData = () => (
|
|
|
126
133
|
);
|
|
127
134
|
|
|
128
135
|
/**
|
|
129
|
-
* Meta endpoint 403s
|
|
130
|
-
*
|
|
136
|
+
* Meta endpoint 403s with explicit initialColumns: a reader refused the
|
|
137
|
+
* schema still gets the rows, laid out from those columns, with nothing to
|
|
138
|
+
* save (LC-96).
|
|
131
139
|
*/
|
|
132
140
|
export const InitialColumnsNoMeta = () => (
|
|
133
141
|
<FrappeProvider baseURL={ERR_HOST} fixtures={fixturesFor("QaSaleNoMeta", 8)}>
|
|
@@ -143,12 +151,31 @@ export const InitialColumnsNoMeta = () => (
|
|
|
143
151
|
</FrappeProvider>
|
|
144
152
|
);
|
|
145
153
|
|
|
154
|
+
/**
|
|
155
|
+
* Meta refused, one record readable: the columns come from that record's own
|
|
156
|
+
* fields, labelled from their keys, and there is nothing to save (LC-96).
|
|
157
|
+
*/
|
|
158
|
+
export const GuestRecordShape = () => (
|
|
159
|
+
<FrappeProvider baseURL={GUEST_HOST} fixtures={fixturesFor("QaSaleGuest", 8)}>
|
|
160
|
+
<FrappeReportBuilder doctype="QaSaleGuest" height={480} />
|
|
161
|
+
</FrappeProvider>
|
|
162
|
+
);
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* Meta and records both refused: a permission state that says what the reader
|
|
166
|
+
* can't do, with no retry (LC-96).
|
|
167
|
+
*/
|
|
168
|
+
export const GuestRefused = () => (
|
|
169
|
+
<FrappeProvider baseURL={ERR_HOST} fixtures={fixturesFor("QaSaleRefused", 8)}>
|
|
170
|
+
<FrappeReportBuilder doctype="QaSaleRefused" height={480} />
|
|
171
|
+
</FrappeProvider>
|
|
172
|
+
);
|
|
173
|
+
|
|
146
174
|
// ---------------------------------------------------------------------------
|
|
147
175
|
// Live bench report: rows over the bench's ToDo doctype stream through the
|
|
148
|
-
// sync engine and refresh in place on realtime events
|
|
149
|
-
//
|
|
150
|
-
//
|
|
151
|
-
// unreachable (meta 404s there — initialColumns keep the builder rendering).
|
|
176
|
+
// sync engine and refresh in place on realtime events while the chosen
|
|
177
|
+
// columns and group-by survive untouched. Fixtures stand in when the bench is
|
|
178
|
+
// unreachable.
|
|
152
179
|
// ---------------------------------------------------------------------------
|
|
153
180
|
|
|
154
181
|
const liveTodoFixtures = new InMemoryFixtureProvider({
|