@multiplatform.one/frappe-ui 7.20.0 → 7.22.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.
Files changed (117) hide show
  1. package/dist/cjs/FrappeForm.cjs +80 -50
  2. package/dist/cjs/FrappeForm.native.js +82 -55
  3. package/dist/cjs/FrappeForm.native.js.map +1 -1
  4. package/dist/cjs/FrappeListView.cjs +6 -1
  5. package/dist/cjs/FrappeListView.native.js +6 -1
  6. package/dist/cjs/FrappeListView.native.js.map +1 -1
  7. package/dist/cjs/FrappeTable.cjs +10 -1
  8. package/dist/cjs/FrappeTable.native.js +10 -1
  9. package/dist/cjs/FrappeTable.native.js.map +1 -1
  10. package/dist/cjs/formEngine/docPermissions.cjs +83 -0
  11. package/dist/cjs/formEngine/docPermissions.native.js +155 -0
  12. package/dist/cjs/formEngine/docPermissions.native.js.map +1 -0
  13. package/dist/cjs/formEngine/index.cjs +9 -1
  14. package/dist/cjs/formEngine/index.native.js +8 -0
  15. package/dist/cjs/formEngine/index.native.js.map +1 -1
  16. package/dist/cjs/formEngine/useDocRights.cjs +54 -0
  17. package/dist/cjs/formEngine/useDocRights.native.js +60 -0
  18. package/dist/cjs/formEngine/useDocRights.native.js.map +1 -0
  19. package/dist/cjs/formEngine/useSessionRoles.cjs +47 -18
  20. package/dist/cjs/formEngine/useSessionRoles.native.js +53 -19
  21. package/dist/cjs/formEngine/useSessionRoles.native.js.map +1 -1
  22. package/dist/cjs/index.cjs +6 -0
  23. package/dist/cjs/index.native.js +6 -0
  24. package/dist/cjs/index.native.js.map +1 -1
  25. package/dist/esm/FrappeForm.mjs +82 -52
  26. package/dist/esm/FrappeForm.mjs.map +1 -1
  27. package/dist/esm/FrappeForm.native.js +84 -57
  28. package/dist/esm/FrappeForm.native.js.map +1 -1
  29. package/dist/esm/FrappeListView.mjs +6 -1
  30. package/dist/esm/FrappeListView.mjs.map +1 -1
  31. package/dist/esm/FrappeListView.native.js +6 -1
  32. package/dist/esm/FrappeListView.native.js.map +1 -1
  33. package/dist/esm/FrappeTable.mjs +10 -1
  34. package/dist/esm/FrappeTable.mjs.map +1 -1
  35. package/dist/esm/FrappeTable.native.js +10 -1
  36. package/dist/esm/FrappeTable.native.js.map +1 -1
  37. package/dist/esm/formEngine/docPermissions.mjs +55 -0
  38. package/dist/esm/formEngine/docPermissions.mjs.map +1 -0
  39. package/dist/esm/formEngine/docPermissions.native.js +124 -0
  40. package/dist/esm/formEngine/docPermissions.native.js.map +1 -0
  41. package/dist/esm/formEngine/index.mjs +4 -2
  42. package/dist/esm/formEngine/index.mjs.map +1 -1
  43. package/dist/esm/formEngine/index.native.js +4 -2
  44. package/dist/esm/formEngine/index.native.js.map +1 -1
  45. package/dist/esm/formEngine/useDocRights.mjs +29 -0
  46. package/dist/esm/formEngine/useDocRights.mjs.map +1 -0
  47. package/dist/esm/formEngine/useDocRights.native.js +32 -0
  48. package/dist/esm/formEngine/useDocRights.native.js.map +1 -0
  49. package/dist/esm/formEngine/useSessionRoles.mjs +47 -19
  50. package/dist/esm/formEngine/useSessionRoles.mjs.map +1 -1
  51. package/dist/esm/formEngine/useSessionRoles.native.js +53 -20
  52. package/dist/esm/formEngine/useSessionRoles.native.js.map +1 -1
  53. package/dist/esm/index.mjs +2 -2
  54. package/dist/esm/index.mjs.map +1 -1
  55. package/dist/esm/index.native.js +2 -2
  56. package/dist/esm/index.native.js.map +1 -1
  57. package/dist/jsx/FrappeForm.mjs +82 -52
  58. package/dist/jsx/FrappeForm.mjs.map +1 -1
  59. package/dist/jsx/FrappeForm.native.js +82 -55
  60. package/dist/jsx/FrappeForm.native.js.map +1 -1
  61. package/dist/jsx/FrappeListView.mjs +6 -1
  62. package/dist/jsx/FrappeListView.mjs.map +1 -1
  63. package/dist/jsx/FrappeListView.native.js +6 -1
  64. package/dist/jsx/FrappeListView.native.js.map +1 -1
  65. package/dist/jsx/FrappeTable.mjs +10 -1
  66. package/dist/jsx/FrappeTable.mjs.map +1 -1
  67. package/dist/jsx/FrappeTable.native.js +10 -1
  68. package/dist/jsx/FrappeTable.native.js.map +1 -1
  69. package/dist/jsx/formEngine/docPermissions.mjs +55 -0
  70. package/dist/jsx/formEngine/docPermissions.mjs.map +1 -0
  71. package/dist/jsx/formEngine/docPermissions.native.js +155 -0
  72. package/dist/jsx/formEngine/docPermissions.native.js.map +1 -0
  73. package/dist/jsx/formEngine/index.mjs +4 -2
  74. package/dist/jsx/formEngine/index.mjs.map +1 -1
  75. package/dist/jsx/formEngine/index.native.js +8 -0
  76. package/dist/jsx/formEngine/index.native.js.map +1 -1
  77. package/dist/jsx/formEngine/useDocRights.mjs +29 -0
  78. package/dist/jsx/formEngine/useDocRights.mjs.map +1 -0
  79. package/dist/jsx/formEngine/useDocRights.native.js +60 -0
  80. package/dist/jsx/formEngine/useDocRights.native.js.map +1 -0
  81. package/dist/jsx/formEngine/useSessionRoles.mjs +47 -19
  82. package/dist/jsx/formEngine/useSessionRoles.mjs.map +1 -1
  83. package/dist/jsx/formEngine/useSessionRoles.native.js +53 -19
  84. package/dist/jsx/formEngine/useSessionRoles.native.js.map +1 -1
  85. package/dist/jsx/index.js +2 -2
  86. package/dist/jsx/index.js.map +1 -1
  87. package/dist/jsx/index.mjs +2 -2
  88. package/dist/jsx/index.mjs.map +1 -1
  89. package/dist/jsx/index.native.js +6 -0
  90. package/dist/jsx/index.native.js.map +1 -1
  91. package/package.json +16 -16
  92. package/src/FrappeForm.tsx +94 -62
  93. package/src/FrappeListView.tsx +12 -7
  94. package/src/FrappeTable.rights.spec.tsx +154 -0
  95. package/src/FrappeTable.tsx +21 -2
  96. package/src/formEngine/docPermissions.spec.ts +145 -0
  97. package/src/formEngine/docPermissions.ts +128 -0
  98. package/src/formEngine/index.ts +14 -1
  99. package/src/formEngine/useDocRights.ts +41 -0
  100. package/src/formEngine/useSessionRoles.ts +55 -29
  101. package/src/frappeRoutes.spec.tsx +116 -4
  102. package/src/index.ts +14 -0
  103. package/types/FrappeForm.d.ts.map +1 -1
  104. package/types/FrappeListView.d.ts +3 -2
  105. package/types/FrappeListView.d.ts.map +1 -1
  106. package/types/FrappeTable.d.ts +11 -2
  107. package/types/FrappeTable.d.ts.map +1 -1
  108. package/types/formEngine/docPermissions.d.ts +54 -0
  109. package/types/formEngine/docPermissions.d.ts.map +1 -0
  110. package/types/formEngine/index.d.ts +6 -1
  111. package/types/formEngine/index.d.ts.map +1 -1
  112. package/types/formEngine/useDocRights.d.ts +24 -0
  113. package/types/formEngine/useDocRights.d.ts.map +1 -0
  114. package/types/formEngine/useSessionRoles.d.ts +12 -2
  115. package/types/formEngine/useSessionRoles.d.ts.map +1 -1
  116. package/types/index.d.ts +2 -2
  117. package/types/index.d.ts.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"names":["__create","Object","create","__defProp","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__getProtoOf","getPrototypeOf","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toESM","mod","isNodeMode","__esModule","value","__toCommonJS","index_exports","AttachLibrary","import_AttachLibrary","Awesomebar","import_awesomebar","Barcode","import_Barcode","ChartCard","import_ChartCard","Check","import_Check","CodeEditorField","import_CodeEditor","Color","import_Color","DEFAULT_FRAPPE_ROWS_LIMIT","import_useFrappeRows","Data","import_Data","Date","import_Date","DateRangeField","import_DateRange","DeskFormPage","import_DeskFormPage","DeskFormSidebar","import_DeskFormSidebar","DeskListPage","import_DeskListPage","DeskShell","import_DeskShell","DeskSidebar","import_DeskSidebar","Duration","import_Duration","DynamicLink","import_DynamicLink","FieldOverridesProvider","import_fieldOverrides","FileBrowser","import_FileBrowser","FileUpload","import_FileUpload","FileUploadField","import_FileUploadField","FormSidebar","import_FormSidebar","FrappeAssignment","import_FrappeAssignment","FrappeAttachments","import_attachments","Attachments","FrappeCalendar","import_FrappeCalendar","FrappeChartCard","import_FrappeChartCard","FrappeConnectionIndicator","import_FrappeConnectionIndicator","FrappeDashboard","import_FrappeDashboard","FrappeForm","import_FrappeForm","FrappeFormConnectionSection","import_FrappeFormConnections","FrappeFormConnections","FrappeGantt","import_FrappeGantt","FrappeImageView","import_FrappeImageView","FrappeKPICard","import_FrappeKPICard","FrappeKanban","import_FrappeKanban","FrappeLikedBy","import_FrappeLikedBy","FrappeList","import_FrappeList","FrappeListView","import_FrappeListView","FrappeNavigationProvider","import_frappeNavigation","FrappeProvider","import_FrappeProvider","FrappeReconnectIndicator","import_FrappeReconnectIndicator","FrappeReportBuilder","import_FrappeReportBuilder","FrappeReportView","import_FrappeReportView","FrappeStoryProvider","import_frappeStoryTarget","FrappeTable","import_FrappeTable","FrappeTags","import_tags","Tags","FrappeTimeline","import_timeline","Timeline","FrappeTreeView","import_FrappeTreeView","Geolocation","import_Geolocation","Heading","import_Heading","Html","import_HTML","Icon","import_Icon","KPICard","import_components","Link","import_Link","LongText","import_LongText","MULTI_CHECKBOX_MAX","import_resolveControl","MarkdownEditorField","import_MarkdownEditor","MentionInputField","import_MentionInput","NO_TAGS_LABEL","import_useFrappeFacets","Numeric","import_Numeric","OTPInputField","import_OTPInput","Password","import_Password","Phone","import_Phone","ProgressField","import_Progress","RadioGroupField","import_RadioGroup","Rating","import_Rating","ReadOnly","import_ReadOnly","SINGLE_RADIO_MAX","SINGLE_SELECT_MAX","SchemaForm","import_schemaForm","SchemaWizard","import_SchemaWizard","Select","import_Select","Signature","import_Signature","SliderField","import_Slider","SmallText","import_SmallText","SwitchField","import_Switch","SyncErrorNotice","import_SyncErrorNotice","TableMultiSelect","import_TableMultiSelect","TextEditor","TimePicker","import_TimePicker","ToggleGroupField","import_ToggleGroup","addToFavorites","addToRecent","aggregateData","applyFetchedValues","import_formEngine","applyFieldOrder","applyOrderToSchema","buildAssignmentTodo","buildCopyValues","buildCreateDefaults","buildFetchMap","buildFormTabs","buildPermLevelMatrix","calculatePercentageChange","calculateTrend","canReadLevel","canWriteLevel","childCellHidden","import_fieldRegistry","childFieldsToColumns","childFieldsToDetailColumns","compactFilterValues","compileDependsOn","import_dependsOn","computeDirtyFields","connectionFields","import_frappeConnections","connectionsFromMeta","deriveAssignments","docFieldsToFilterFields","import_filterFields","evaluateDependsOn","fieldtypeToTableField","filterValueToFrappeTuple","filtersExcludingField","frappeCodeLanguage","frappeEventColorNames","import_frappeEventColor","frappeRouteHref","frappeRouteTarget","frappeStoriesLive","frappeStoryBaseUrl","getFieldComponent","initDefaultRegistry","isEmptyValue","isFacetFilterActive","isFetchLocked","isPromptNamed","isSameValue","normalizeReportColumn","normalizeReportPayload","normalizeReportRows","parseChoiceOptions","parseLikedBy","registerField","removeFromFavorites","reportColumnToDataTableColumn","reportFieldtypeToTableField","reportRowLabel","resolveChoiceControl","resolveFrappeEventColor","schemaToWizardSteps","scrubFieldname","scrubUserFacetRows","setCreatePrefill","takeCreatePrefill","toggleFacetFilter","toggleLikedBy","useConnectionFilters","import_useConnectionFilters","useFieldResolver","useFormEngine","useFrappeAggregate","import_useFrappeAggregate","useFrappeCollection","import_frappe","useFrappeCommentActions","import_commentActions","useFrappeConfig","useFrappeConnection","useFrappeContext","useFrappeFacets","useFrappeNavigation","useFrappePagination","import_useFrappePagination","useFrappeReport","useFrappeRouter","useFrappeRows","useLiveQuery","useSessionRoles","module","exports","import_react","require"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["__create","Object","create","__defProp","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__getProtoOf","getPrototypeOf","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toESM","mod","isNodeMode","__esModule","value","__toCommonJS","index_exports","AttachLibrary","import_AttachLibrary","Awesomebar","import_awesomebar","Barcode","import_Barcode","ChartCard","import_ChartCard","Check","import_Check","CodeEditorField","import_CodeEditor","Color","import_Color","DEFAULT_FRAPPE_ROWS_LIMIT","import_useFrappeRows","Data","import_Data","Date","import_Date","DateRangeField","import_DateRange","DeskFormPage","import_DeskFormPage","DeskFormSidebar","import_DeskFormSidebar","DeskListPage","import_DeskListPage","DeskShell","import_DeskShell","DeskSidebar","import_DeskSidebar","Duration","import_Duration","DynamicLink","import_DynamicLink","FieldOverridesProvider","import_fieldOverrides","FileBrowser","import_FileBrowser","FileUpload","import_FileUpload","FileUploadField","import_FileUploadField","FormSidebar","import_FormSidebar","FrappeAssignment","import_FrappeAssignment","FrappeAttachments","import_attachments","Attachments","FrappeCalendar","import_FrappeCalendar","FrappeChartCard","import_FrappeChartCard","FrappeConnectionIndicator","import_FrappeConnectionIndicator","FrappeDashboard","import_FrappeDashboard","FrappeForm","import_FrappeForm","FrappeFormConnectionSection","import_FrappeFormConnections","FrappeFormConnections","FrappeGantt","import_FrappeGantt","FrappeImageView","import_FrappeImageView","FrappeKPICard","import_FrappeKPICard","FrappeKanban","import_FrappeKanban","FrappeLikedBy","import_FrappeLikedBy","FrappeList","import_FrappeList","FrappeListView","import_FrappeListView","FrappeNavigationProvider","import_frappeNavigation","FrappeProvider","import_FrappeProvider","FrappeReconnectIndicator","import_FrappeReconnectIndicator","FrappeReportBuilder","import_FrappeReportBuilder","FrappeReportView","import_FrappeReportView","FrappeStoryProvider","import_frappeStoryTarget","FrappeTable","import_FrappeTable","FrappeTags","import_tags","Tags","FrappeTimeline","import_timeline","Timeline","FrappeTreeView","import_FrappeTreeView","Geolocation","import_Geolocation","Heading","import_Heading","Html","import_HTML","Icon","import_Icon","KPICard","import_components","Link","import_Link","LongText","import_LongText","MULTI_CHECKBOX_MAX","import_resolveControl","MarkdownEditorField","import_MarkdownEditor","MentionInputField","import_MentionInput","NO_TAGS_LABEL","import_useFrappeFacets","Numeric","import_Numeric","OTPInputField","import_OTPInput","Password","import_Password","Phone","import_Phone","ProgressField","import_Progress","RadioGroupField","import_RadioGroup","Rating","import_Rating","ReadOnly","import_ReadOnly","SINGLE_RADIO_MAX","SINGLE_SELECT_MAX","SchemaForm","import_schemaForm","SchemaWizard","import_SchemaWizard","Select","import_Select","Signature","import_Signature","SliderField","import_Slider","SmallText","import_SmallText","SwitchField","import_Switch","SyncErrorNotice","import_SyncErrorNotice","TableMultiSelect","import_TableMultiSelect","TextEditor","TimePicker","import_TimePicker","ToggleGroupField","import_ToggleGroup","addToFavorites","addToRecent","aggregateData","allDocRights","import_formEngine","applyFetchedValues","applyFieldOrder","applyOrderToSchema","buildAssignmentTodo","buildCopyValues","buildCreateDefaults","buildFetchMap","buildFormTabs","buildPermLevelMatrix","calculatePercentageChange","calculateTrend","canReadLevel","canWriteLevel","childCellHidden","import_fieldRegistry","childFieldsToColumns","childFieldsToDetailColumns","compactFilterValues","compileDependsOn","import_dependsOn","computeDirtyFields","connectionFields","import_frappeConnections","connectionsFromMeta","deriveAssignments","docFieldsToFilterFields","import_filterFields","docRightNames","evaluateDependsOn","fieldtypeToTableField","filterValueToFrappeTuple","filtersExcludingField","frappeCodeLanguage","frappeEventColorNames","import_frappeEventColor","frappeRouteHref","frappeRouteTarget","frappeStoriesLive","frappeStoryBaseUrl","getFieldComponent","initDefaultRegistry","isEmptyValue","isFacetFilterActive","isFetchLocked","isPromptNamed","isSameValue","normalizeReportColumn","normalizeReportPayload","normalizeReportRows","parseChoiceOptions","parseLikedBy","registerField","removeFromFavorites","reportColumnToDataTableColumn","reportFieldtypeToTableField","reportRowLabel","resolveChoiceControl","resolveDocRights","resolveFrappeEventColor","schemaToWizardSteps","scrubFieldname","scrubUserFacetRows","sessionDocRights","setCreatePrefill","takeCreatePrefill","toggleFacetFilter","toggleLikedBy","useConnectionFilters","import_useConnectionFilters","useDocRights","useFieldResolver","useFormEngine","useFrappeAggregate","import_useFrappeAggregate","useFrappeCollection","import_frappe","useFrappeCommentActions","import_commentActions","useFrappeConfig","useFrappeConnection","useFrappeContext","useFrappeFacets","useFrappeNavigation","useFrappePagination","import_useFrappePagination","useFrappeReport","useFrappeRouter","useFrappeRows","useFrappeSession","useLiveQuery","useSessionRoles","module","exports","import_react","require"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@multiplatform.one/frappe-ui",
3
- "version": "7.20.0",
3
+ "version": "7.22.0",
4
4
  "description": "Pre-wired Tamagui components for Frappe doctypes with live data",
5
5
  "keywords": [
6
6
  "cross-platform",
@@ -72,18 +72,18 @@
72
72
  "access": "public"
73
73
  },
74
74
  "dependencies": {
75
- "@multiplatform.one/components": "7.20.0",
76
- "@multiplatform.one/desktop": "7.20.0",
77
- "@multiplatform.one/forms": "7.20.0",
78
- "@multiplatform.one/frappe": "7.20.0",
79
- "@multiplatform.one/i18n": "7.20.0",
80
- "@multiplatform.one/markdown": "7.20.0",
81
- "@multiplatform.one/platform": "7.20.0",
82
- "@multiplatform.one/rich-text": "7.20.0",
83
- "@multiplatform.one/router": "7.20.0",
84
- "@multiplatform.one/store": "7.20.0",
85
- "@multiplatform.one/table": "7.20.0",
86
- "@multiplatform.one/theme": "7.20.0",
75
+ "@multiplatform.one/components": "7.22.0",
76
+ "@multiplatform.one/desktop": "7.22.0",
77
+ "@multiplatform.one/forms": "7.22.0",
78
+ "@multiplatform.one/frappe": "7.22.0",
79
+ "@multiplatform.one/i18n": "7.22.0",
80
+ "@multiplatform.one/markdown": "7.22.0",
81
+ "@multiplatform.one/platform": "7.22.0",
82
+ "@multiplatform.one/rich-text": "7.22.0",
83
+ "@multiplatform.one/router": "7.22.0",
84
+ "@multiplatform.one/store": "7.22.0",
85
+ "@multiplatform.one/table": "7.22.0",
86
+ "@multiplatform.one/theme": "7.22.0",
87
87
  "@phosphor-icons/react": "^2.1.10",
88
88
  "@tamagui/colors": "2.7.6",
89
89
  "@tanstack/db": "0.8.0",
@@ -99,9 +99,9 @@
99
99
  "tamagui": "2.7.6"
100
100
  },
101
101
  "devDependencies": {
102
- "@multiplatform.one/config": "7.20.0",
103
- "@multiplatform.one/storybook": "7.20.0",
104
- "@multiplatform.one/test-utils": "7.20.0",
102
+ "@multiplatform.one/config": "7.22.0",
103
+ "@multiplatform.one/storybook": "7.22.0",
104
+ "@multiplatform.one/test-utils": "7.22.0",
105
105
  "@tamagui/build": "2.7.6",
106
106
  "@testing-library/jest-dom": "^6.9.1",
107
107
  "@testing-library/react": "^16.3.2",
@@ -12,6 +12,7 @@ import {
12
12
  AsyncBoundary,
13
13
  AsyncSkeleton,
14
14
  DetailPageLayout,
15
+ EmptyState,
15
16
  PageHeader,
16
17
  Tabs,
17
18
  type TabsItem,
@@ -42,7 +43,7 @@ import { applyFetchedValues, buildFetchMap } from "./formEngine/fetchFrom";
42
43
  import { buildPermLevelMatrix } from "./formEngine/fieldPermissions";
43
44
  import { createHttpClient, validateLink } from "./formEngine/formActions";
44
45
  import { buildFormTabs, isPromptNamed, type FormTab } from "./formEngine/formLayout";
45
- import { useSessionRoles } from "./formEngine/useSessionRoles";
46
+ import { useDocRights } from "./formEngine/useDocRights";
46
47
  import { connectionFields, connectionsFromMeta, type FrappeConnection } from "./frappeConnections";
47
48
  import { FrappeFormConnections } from "./FrappeFormConnections";
48
49
  import { FrappeRowsReader, type FrappeRowsSnapshot } from "./FrappeRowsReader";
@@ -225,10 +226,6 @@ function fieldsFromDocument(doc: Record<string, unknown>): FieldSchema[] {
225
226
  }));
226
227
  }
227
228
 
228
- function hasRestrictedPermLevel(meta: DocTypeMeta | undefined): boolean {
229
- return !!meta?.fields.some((field) => Number(field.permlevel ?? 0) > 0);
230
- }
231
-
232
229
  // ---------------------------------------------------------------------------
233
230
  // Sidebar Mappers
234
231
  // ---------------------------------------------------------------------------
@@ -519,34 +516,12 @@ function FrappeFormBody<TDoc extends { name: string; doctype: string }>({
519
516
  error: metaError,
520
517
  } = useDocTypeMeta(frappeConfig, doctype);
521
518
 
522
- const sessionRoles = useSessionRoles(
523
- !roles && hasRestrictedPermLevel(meta) ? frappeConfig : undefined,
524
- );
525
- const effectiveRoles = roles ?? sessionRoles;
526
- const permLevels = useMemo(
527
- () => buildPermLevelMatrix(meta?.permissions, effectiveRoles),
528
- [meta?.permissions, effectiveRoles],
529
- );
530
-
531
519
  const isCreate = !name;
532
520
  const docstatus = Number((baselineDoc as Record<string, unknown> | undefined)?.docstatus ?? 0);
533
521
  const layoutFields = useMemo(() => {
534
522
  if (!meta) return undefined;
535
523
  return sections ? sectionsToLayoutFields(sections) : meta.fields;
536
524
  }, [meta, sections]);
537
- const formTabs = useMemo(() => {
538
- if (!layoutFields) return undefined;
539
- return buildFormTabs({
540
- fields: layoutFields,
541
- doc: { ...(localDoc as Record<string, unknown>), __islocal: isCreate ? 1 : 0 },
542
- docstatus,
543
- formReadOnly: !!meta?.read_only,
544
- isCreate,
545
- detailsLabel: t("Details"),
546
- permLevels,
547
- hiddenFields: hideFields,
548
- });
549
- }, [layoutFields, localDoc, docstatus, meta?.read_only, isCreate, permLevels, hideFields, t]);
550
525
  // Meta is permission-gated (Guest gets 403) while the record may still be
551
526
  // readable: the form then lays the record's own fields out, read-only.
552
527
  const readsWithoutMeta = !children && !meta && Boolean(metaError) && Boolean(name);
@@ -617,6 +592,34 @@ function FrappeFormBody<TDoc extends { name: string; doctype: string }>({
617
592
  [shareCollection, rawShareRows],
618
593
  );
619
594
 
595
+ const owner = (baselineDoc as Record<string, unknown> | undefined)?.owner;
596
+ const {
597
+ rights,
598
+ pending: rightsPending,
599
+ roles: effectiveRoles,
600
+ } = useDocRights(frappeConfig, meta, {
601
+ roles,
602
+ owner: typeof owner === "string" ? owner : undefined,
603
+ shares: shareRows,
604
+ });
605
+ const permLevels = useMemo(
606
+ () => buildPermLevelMatrix(meta?.permissions, effectiveRoles),
607
+ [meta?.permissions, effectiveRoles],
608
+ );
609
+ const formTabs = useMemo(() => {
610
+ if (!layoutFields) return undefined;
611
+ return buildFormTabs({
612
+ fields: layoutFields,
613
+ doc: { ...(localDoc as Record<string, unknown>), __islocal: isCreate ? 1 : 0 },
614
+ docstatus,
615
+ formReadOnly: !!meta?.read_only,
616
+ isCreate,
617
+ detailsLabel: t("Details"),
618
+ permLevels,
619
+ hiddenFields: hideFields,
620
+ });
621
+ }, [layoutFields, localDoc, docstatus, meta?.read_only, isCreate, permLevels, hideFields, t]);
622
+
620
623
  // Live "Assigned To" rows: the open assignment ToDos referencing this doc.
621
624
  // The doc's own `_assign` mirror is written silently (update_modified=False,
622
625
  // no event) and can't update live; the assignment ToDos emit ordinary
@@ -828,8 +831,10 @@ function FrappeFormBody<TDoc extends { name: string; doctype: string }>({
828
831
  return validationErrors;
829
832
  };
830
833
 
834
+ const canWriteRecord = isCreate ? rights.create : rights.write;
835
+
831
836
  const handleSave = async () => {
832
- if (wasDeleted) return;
837
+ if (wasDeleted || !canWriteRecord) return;
833
838
 
834
839
  const requiredErrors = validateRequiredFields();
835
840
  if (Object.keys(requiredErrors).length > 0) {
@@ -910,7 +915,7 @@ function FrappeFormBody<TDoc extends { name: string; doctype: string }>({
910
915
  };
911
916
 
912
917
  const handleDelete = async () => {
913
- if (!docCollection || !name || wasDeleted) return;
918
+ if (!docCollection || !name || wasDeleted || !rights.delete) return;
914
919
  if (!(await dialog.confirm(t("Delete this {{doctype}}?", { doctype })))) return;
915
920
  setIsSubmitting(true);
916
921
  setErrors({});
@@ -963,6 +968,24 @@ function FrappeFormBody<TDoc extends { name: string; doctype: string }>({
963
968
  );
964
969
  }
965
970
 
971
+ if (!children && isCreate && meta && rightsPending) {
972
+ return frame(
973
+ <YStack {...knobProps.panelPadding} testID="frappe-form-skeleton">
974
+ <AsyncSkeleton layout="generic" />
975
+ </YStack>,
976
+ );
977
+ }
978
+
979
+ if (!children && isCreate && meta && !rights.create) {
980
+ return frame(
981
+ <EmptyState
982
+ testID="frappe-form-not-permitted"
983
+ title={t("You can't create {{doctype}}", { doctype })}
984
+ description={t("Your roles don't grant creating a {{doctype}}.", { doctype })}
985
+ />,
986
+ );
987
+ }
988
+
966
989
  if (!children && metaError && !meta && !name) {
967
990
  return frame(
968
991
  <YStack {...knobProps.panelPadding} alignItems="center" {...knobProps.gap}>
@@ -1019,7 +1042,16 @@ function FrappeFormBody<TDoc extends { name: string; doctype: string }>({
1019
1042
 
1020
1043
  const effectiveDisabled = disabled || wasDeleted;
1021
1044
  const readOnlyView = Boolean(onEdit) || readsWithoutMeta;
1022
- const fieldsDisabled = effectiveDisabled || readOnlyView;
1045
+ const fieldsDisabled = effectiveDisabled || readOnlyView || !canWriteRecord;
1046
+ const showDelete = Boolean(name && onDelete && !wasDeleted && rights.delete);
1047
+ const showEdit = Boolean(onEdit && rights.write);
1048
+ const showSave = !onEdit && canWriteRecord;
1049
+ const showCancel = !onEdit && Boolean(onCancel);
1050
+ const showNotSaved = hasUnsavedChanges && !onEdit;
1051
+ const toolbarShown =
1052
+ showToolbar &&
1053
+ !readsWithoutMeta &&
1054
+ (showDelete || showEdit || showSave || showCancel || showNotSaved);
1023
1055
  const shownTabs = formTabs ?? recordTabs;
1024
1056
  const imageFieldName = meta?.image_field;
1025
1057
  const sidebarImageUrl = imageFieldName
@@ -1170,7 +1202,7 @@ function FrappeFormBody<TDoc extends { name: string; doctype: string }>({
1170
1202
  onChangeText={(value) => setValue("name" as keyof TDoc, value)}
1171
1203
  placeholder={t("New document name")}
1172
1204
  error={errors.name}
1173
- disabled={effectiveDisabled}
1205
+ disabled={effectiveDisabled || !canWriteRecord}
1174
1206
  />
1175
1207
  )}
1176
1208
  {tabItems.length > 1 ? (
@@ -1194,20 +1226,20 @@ function FrappeFormBody<TDoc extends { name: string; doctype: string }>({
1194
1226
  </Text>
1195
1227
  )}
1196
1228
 
1197
- {showToolbar && !readsWithoutMeta && (
1229
+ {toolbarShown && (
1198
1230
  <XStack
1199
1231
  {...knobProps.gap}
1200
1232
  justifyContent="flex-end"
1201
1233
  alignItems="center"
1202
1234
  paddingTop="$3"
1203
1235
  >
1204
- {hasUnsavedChanges && !onEdit && (
1236
+ {showNotSaved && (
1205
1237
  <Text color="$orange11" marginInlineEnd="auto" {...knobProps.body}>
1206
1238
  {t("Not Saved")}
1207
1239
  </Text>
1208
1240
  )}
1209
1241
 
1210
- {name && onDelete && !wasDeleted && (
1242
+ {showDelete && (
1211
1243
  <Button
1212
1244
  outlined
1213
1245
  error
@@ -1222,7 +1254,7 @@ function FrappeFormBody<TDoc extends { name: string; doctype: string }>({
1222
1254
  </Button>
1223
1255
  )}
1224
1256
 
1225
- {onEdit ? (
1257
+ {showEdit && (
1226
1258
  <Button
1227
1259
  accent
1228
1260
  icon={PencilSimpleIcon}
@@ -1233,33 +1265,33 @@ function FrappeFormBody<TDoc extends { name: string; doctype: string }>({
1233
1265
  >
1234
1266
  {t("Edit")}
1235
1267
  </Button>
1236
- ) : (
1237
- <>
1238
- {onCancel && (
1239
- <Button
1240
- outlined
1241
- icon={XIcon}
1242
- disabled={disabled}
1243
- disabledReason={t("Form is read-only")}
1244
- disabledReasonPlacement="inline"
1245
- onPress={handleCancel}
1246
- >
1247
- {t("Cancel")}
1248
- </Button>
1249
- )}
1250
-
1251
- <Button
1252
- accent
1253
- icon={FloppyDiskIcon}
1254
- loading={isSubmitting}
1255
- disabled={effectiveDisabled}
1256
- disabledReason={t("Form is read-only")}
1257
- disabledReasonPlacement="inline"
1258
- onPress={handleSave}
1259
- >
1260
- {isSubmitting ? t("Saving...") : t("Save")}
1261
- </Button>
1262
- </>
1268
+ )}
1269
+
1270
+ {showCancel && (
1271
+ <Button
1272
+ outlined
1273
+ icon={XIcon}
1274
+ disabled={disabled}
1275
+ disabledReason={t("Form is read-only")}
1276
+ disabledReasonPlacement="inline"
1277
+ onPress={handleCancel}
1278
+ >
1279
+ {t("Cancel")}
1280
+ </Button>
1281
+ )}
1282
+
1283
+ {showSave && (
1284
+ <Button
1285
+ accent
1286
+ icon={FloppyDiskIcon}
1287
+ loading={isSubmitting}
1288
+ disabled={effectiveDisabled}
1289
+ disabledReason={t("Form is read-only")}
1290
+ disabledReasonPlacement="inline"
1291
+ onPress={handleSave}
1292
+ >
1293
+ {isSubmitting ? t("Saving...") : t("Save")}
1294
+ </Button>
1263
1295
  )}
1264
1296
  </XStack>
1265
1297
  )}
@@ -20,6 +20,7 @@ import { storage } from "@multiplatform.one/store";
20
20
  import { useFrappeConfig } from "./FrappeProvider";
21
21
  import { FrappeList, type FrappeListProps } from "./FrappeList";
22
22
  import { FrappeTable } from "./FrappeTable";
23
+ import { useDocRights } from "./formEngine/useDocRights";
23
24
  import { frappeRouteHref, useFrappeRouter } from "./frappeNavigation";
24
25
  import { connectionsFromMeta, type FrappeConnection } from "./frappeConnections";
25
26
  import { isPermissionError } from "./liveErrors";
@@ -56,8 +57,9 @@ export interface FrappeListViewProps<TDoc extends { name: string; doctype: strin
56
57
  * The path the doctype's pages live under (`/moves`). Given, the view is
57
58
  * the doctype's list page: it carries the list page template with the
58
59
  * doctype as its title, a row opens `route/<name>` and Add opens
59
- * `route/new` through the FrappeProvider's navigation. Add waits for the
60
- * doctype's meta, so a reader who cannot load it is not offered a form.
60
+ * `route/new` through the FrappeProvider's navigation. Add, routed or
61
+ * given, shows only when the session's roles grant create on the doctype,
62
+ * so a reader who cannot load its meta is not offered a form.
61
63
  */
62
64
  route?: string;
63
65
  /**
@@ -268,11 +270,13 @@ export function FrappeListView<TDoc extends { name: string; doctype: string }>({
268
270
  if (doc.name) navigate(frappeRouteHref(route, { mode: "view", name: doc.name }));
269
271
  }
270
272
  : undefined);
271
- const onAdd =
272
- onAddProp ??
273
- (route !== undefined && navigate && meta
274
- ? () => navigate(frappeRouteHref(route, { mode: "create" }))
275
- : undefined);
273
+ const { rights } = useDocRights(connectionConfig, meta);
274
+ const onAdd = !rights.create
275
+ ? undefined
276
+ : (onAddProp ??
277
+ (route !== undefined && navigate
278
+ ? () => navigate(frappeRouteHref(route, { mode: "create" }))
279
+ : undefined));
276
280
  const asPage = (view: React.ReactElement) =>
277
281
  route === undefined ? (
278
282
  view
@@ -740,6 +744,7 @@ export function FrappeListView<TDoc extends { name: string; doctype: string }>({
740
744
  filters={resolvedFilters as Parameters<typeof FrappeTable<TDoc>>[0]["filters"]}
741
745
  columns={effectiveColumns}
742
746
  onRowClick={onItemClick}
747
+ rights={rights}
743
748
  baseURL={finalBaseURL}
744
749
  auth={finalAuth}
745
750
  syncOptions={finalSyncOptions}
@@ -0,0 +1,154 @@
1
+ // FrappeTable offers editing, Add Row and row delete only as far as the
2
+ // session's roles grant write, create and delete on the doctype (MPO-390).
3
+ // Cells are fields by default, so without write they must render read-only
4
+ // instead of inputs whose edits the bench would refuse.
5
+ import type { DataTableColumn } from "@multiplatform.one/table";
6
+ import { renderWithProviders } from "@multiplatform.one/test-utils";
7
+ import { act, cleanup, screen, waitFor } from "@testing-library/react";
8
+ import i18next from "i18next";
9
+ import { initReactI18next } from "react-i18next";
10
+ import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
11
+ import { FrappeProvider } from "./FrappeProvider";
12
+ import { FrappeTable } from "./FrappeTable";
13
+
14
+ const doctype = "Poke Move";
15
+
16
+ const meta = {
17
+ name: doctype,
18
+ doctype: "DocType",
19
+ title_field: "move_name",
20
+ fields: [{ fieldname: "move_name", fieldtype: "Data", label: "Move Name" }],
21
+ permissions: [
22
+ { role: "Pokemon Editor", read: 1, write: 1, create: 1, delete: 1 },
23
+ { role: "Guest", read: 1 },
24
+ ],
25
+ };
26
+
27
+ interface Move {
28
+ name: string;
29
+ doctype: string;
30
+ move_name?: string;
31
+ }
32
+
33
+ const columns: DataTableColumn<Partial<Move>>[] = [
34
+ { id: "move_name", accessorKey: "move_name", header: "Move Name", field: "input" },
35
+ ];
36
+
37
+ let run = 0;
38
+ let bench = "";
39
+ let roles: string[] = [];
40
+ let sessionAnswered = false;
41
+ let requests: string[] = [];
42
+
43
+ function json(body: unknown, status = 200) {
44
+ return new Response(JSON.stringify(body), {
45
+ status,
46
+ headers: { "content-type": "application/json" },
47
+ });
48
+ }
49
+
50
+ beforeAll(async () => {
51
+ await i18next.use(initReactI18next).init({
52
+ lng: "en",
53
+ interpolation: { escapeValue: false },
54
+ resources: { en: { translation: {} } },
55
+ });
56
+ });
57
+
58
+ beforeEach(() => {
59
+ run += 1;
60
+ bench = `http://table-rights-${run}.spec.test`;
61
+ sessionAnswered = false;
62
+ requests = [];
63
+ vi.stubGlobal("fetch", async (input: string | URL | Request) => {
64
+ const url = new URL(String(input instanceof Request ? input.url : input));
65
+ const method = url.pathname.replace(/^\/api\/method\//, "");
66
+ requests.push(method);
67
+ if (method === "frappe.auth.get_logged_user") return json({ message: "someone@pokemon.test" });
68
+ if (method === "frappe.core.doctype.user.user.get_roles") {
69
+ sessionAnswered = true;
70
+ return json({ message: roles });
71
+ }
72
+ if (method === "frappe.desk.form.load.getdoctype") return json({ docs: [meta] });
73
+ if (url.pathname === `/api/resource/${encodeURIComponent(doctype)}`) {
74
+ return json({ data: [{ name: "a1b2c3", doctype, move_name: "tackle" }] });
75
+ }
76
+ return json({ data: [], message: [] });
77
+ });
78
+ });
79
+
80
+ afterEach(() => {
81
+ cleanup();
82
+ vi.restoreAllMocks();
83
+ vi.unstubAllGlobals();
84
+ });
85
+
86
+ function renderTable(props: Partial<Parameters<typeof FrappeTable<Move>>[0]> = {}) {
87
+ return renderWithProviders(
88
+ <FrappeProvider baseURL={bench} realtime={false}>
89
+ <FrappeTable<Move>
90
+ doctype={doctype}
91
+ columns={columns}
92
+ layout="table"
93
+ showAddRow
94
+ showDeleteRow
95
+ {...props}
96
+ />
97
+ </FrappeProvider>,
98
+ );
99
+ }
100
+
101
+ // A surface that never asks for the session is judged on what it shows.
102
+ async function settle() {
103
+ await waitFor(() => expect(sessionAnswered).toBe(true), { timeout: 1500 }).catch(() => undefined);
104
+ await act(async () => {
105
+ await new Promise((resolve) => setTimeout(resolve, 20));
106
+ });
107
+ }
108
+
109
+ function showsTackle(container: HTMLElement): boolean {
110
+ return Array.from(container.querySelectorAll('[role="row"]')).some(
111
+ (row) =>
112
+ row.textContent?.includes("tackle") ||
113
+ Array.from(row.querySelectorAll("input")).some((node) => node.value === "tackle"),
114
+ );
115
+ }
116
+
117
+ function cellInputs(container: HTMLElement): HTMLInputElement[] {
118
+ return Array.from(container.querySelectorAll('[role="row"] input')) as HTMLInputElement[];
119
+ }
120
+
121
+ describe("FrappeTable rights", () => {
122
+ it("gives an editor input cells, Add Row and row delete", async () => {
123
+ roles = ["Pokemon Editor", "Guest"];
124
+ const { container } = renderTable();
125
+ await waitFor(() =>
126
+ expect(cellInputs(container).map((node) => node.value)).toContain("tackle"),
127
+ );
128
+ expect(screen.getByLabelText("Add Row")).toBeTruthy();
129
+ expect(screen.getAllByLabelText(/^Delete row 1$/).length).toBeGreaterThan(0);
130
+ });
131
+
132
+ it("gives a reader read-only cells, no Add Row and no row delete", async () => {
133
+ roles = ["Guest"];
134
+ const { container } = renderTable();
135
+ await waitFor(() => expect(showsTackle(container)).toBe(true));
136
+ await settle();
137
+ expect(cellInputs(container)).toEqual([]);
138
+ expect(screen.queryByLabelText("Add Row")).toBeNull();
139
+ expect(screen.queryAllByLabelText(/^Delete row 1$/)).toEqual([]);
140
+ });
141
+
142
+ it("takes rights from the host without reading meta or the session", async () => {
143
+ roles = ["Pokemon Editor"];
144
+ const { container } = renderTable({
145
+ rights: { create: false, write: false, delete: false },
146
+ filterableFields: [{ id: "move_name", label: "Move Name", type: "text" }],
147
+ });
148
+ await waitFor(() => expect(showsTackle(container)).toBe(true));
149
+ expect(cellInputs(container)).toEqual([]);
150
+ expect(screen.queryByLabelText("Add Row")).toBeNull();
151
+ expect(requests).not.toContain("frappe.desk.form.load.getdoctype");
152
+ expect(requests).not.toContain("frappe.core.doctype.user.user.get_roles");
153
+ });
154
+ });