@multiplatform.one/frappe-ui 7.28.1 → 7.29.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (325) hide show
  1. package/dist/cjs/FrappeCalendar.cjs +3 -2
  2. package/dist/cjs/FrappeCalendar.native.js +3 -2
  3. package/dist/cjs/FrappeCalendar.native.js.map +1 -1
  4. package/dist/cjs/FrappeForm.cjs +148 -464
  5. package/dist/cjs/FrappeForm.native.js +152 -633
  6. package/dist/cjs/FrappeForm.native.js.map +1 -1
  7. package/dist/cjs/FrappeListView.cjs +5 -27
  8. package/dist/cjs/FrappeListView.native.js +11 -32
  9. package/dist/cjs/FrappeListView.native.js.map +1 -1
  10. package/dist/cjs/FrappeReportBuilder.cjs +523 -309
  11. package/dist/cjs/FrappeReportBuilder.native.js +658 -353
  12. package/dist/cjs/FrappeReportBuilder.native.js.map +1 -1
  13. package/dist/cjs/FrappeReportView.cjs +35 -234
  14. package/dist/cjs/FrappeReportView.native.js +39 -283
  15. package/dist/cjs/FrappeReportView.native.js.map +1 -1
  16. package/dist/cjs/dependsOn.cjs +2 -2
  17. package/dist/cjs/dependsOn.native.js +1 -2
  18. package/dist/cjs/dependsOn.native.js.map +1 -1
  19. package/dist/cjs/fields/shared/EditorPreviewPanes.cjs +2 -2
  20. package/dist/cjs/fields/shared/EditorPreviewPanes.native.js +2 -2
  21. package/dist/cjs/fields/shared/EditorPreviewPanes.native.js.map +1 -1
  22. package/dist/cjs/formEngine/docPermissions.cjs +20 -0
  23. package/dist/cjs/formEngine/docPermissions.native.js +69 -0
  24. package/dist/cjs/formEngine/docPermissions.native.js.map +1 -1
  25. package/dist/cjs/formEngine/index.cjs +2 -0
  26. package/dist/cjs/formEngine/index.native.js +2 -0
  27. package/dist/cjs/formEngine/index.native.js.map +1 -1
  28. package/dist/cjs/index.cjs +67 -7
  29. package/dist/cjs/index.native.js +67 -7
  30. package/dist/cjs/index.native.js.map +1 -1
  31. package/dist/cjs/liveErrors.cjs +8 -2
  32. package/dist/cjs/liveErrors.native.js +8 -2
  33. package/dist/cjs/liveErrors.native.js.map +1 -1
  34. package/dist/cjs/measures.cjs +31 -0
  35. package/dist/cjs/measures.native.js +34 -0
  36. package/dist/cjs/measures.native.js.map +1 -0
  37. package/dist/cjs/recordShape.cjs +103 -0
  38. package/dist/cjs/recordShape.native.js +115 -0
  39. package/dist/cjs/recordShape.native.js.map +1 -0
  40. package/dist/cjs/report/ReportGrid.cjs +453 -0
  41. package/dist/cjs/report/ReportGrid.native.js +510 -0
  42. package/dist/cjs/report/ReportGrid.native.js.map +1 -0
  43. package/dist/cjs/report/ReportViewToolbar.cjs +253 -0
  44. package/dist/cjs/report/ReportViewToolbar.native.js +303 -0
  45. package/dist/cjs/report/ReportViewToolbar.native.js.map +1 -0
  46. package/dist/cjs/report/queryReport.cjs +444 -0
  47. package/dist/cjs/report/queryReport.native.js +588 -0
  48. package/dist/cjs/report/queryReport.native.js.map +1 -0
  49. package/dist/cjs/report/queryReportColumns.cjs +131 -0
  50. package/dist/cjs/report/queryReportColumns.native.js +159 -0
  51. package/dist/cjs/report/queryReportColumns.native.js.map +1 -0
  52. package/dist/cjs/report/reportViewModel.cjs +386 -0
  53. package/dist/cjs/report/reportViewModel.native.js +657 -0
  54. package/dist/cjs/report/reportViewModel.native.js.map +1 -0
  55. package/dist/cjs/report/savedReports.cjs +137 -0
  56. package/dist/cjs/report/savedReports.native.js +169 -0
  57. package/dist/cjs/report/savedReports.native.js.map +1 -0
  58. package/dist/cjs/report/useFrappeReport.cjs +184 -0
  59. package/dist/cjs/report/useFrappeReport.native.js +214 -0
  60. package/dist/cjs/report/useFrappeReport.native.js.map +1 -0
  61. package/dist/cjs/report/useQueryReport.cjs +201 -0
  62. package/dist/cjs/report/useQueryReport.native.js +233 -0
  63. package/dist/cjs/report/useQueryReport.native.js.map +1 -0
  64. package/dist/cjs/useFrappeForm.cjs +558 -0
  65. package/dist/cjs/useFrappeForm.native.js +714 -0
  66. package/dist/cjs/useFrappeForm.native.js.map +1 -0
  67. package/dist/esm/FrappeCalendar.mjs +4 -3
  68. package/dist/esm/FrappeCalendar.mjs.map +1 -1
  69. package/dist/esm/FrappeCalendar.native.js +4 -3
  70. package/dist/esm/FrappeCalendar.native.js.map +1 -1
  71. package/dist/esm/FrappeForm.mjs +151 -467
  72. package/dist/esm/FrappeForm.mjs.map +1 -1
  73. package/dist/esm/FrappeForm.native.js +155 -636
  74. package/dist/esm/FrappeForm.native.js.map +1 -1
  75. package/dist/esm/FrappeListView.mjs +6 -28
  76. package/dist/esm/FrappeListView.mjs.map +1 -1
  77. package/dist/esm/FrappeListView.native.js +12 -33
  78. package/dist/esm/FrappeListView.native.js.map +1 -1
  79. package/dist/esm/FrappeReportBuilder.mjs +526 -312
  80. package/dist/esm/FrappeReportBuilder.mjs.map +1 -1
  81. package/dist/esm/FrappeReportBuilder.native.js +661 -356
  82. package/dist/esm/FrappeReportBuilder.native.js.map +1 -1
  83. package/dist/esm/FrappeReportView.mjs +30 -229
  84. package/dist/esm/FrappeReportView.mjs.map +1 -1
  85. package/dist/esm/FrappeReportView.native.js +34 -278
  86. package/dist/esm/FrappeReportView.native.js.map +1 -1
  87. package/dist/esm/dependsOn.mjs +2 -2
  88. package/dist/esm/dependsOn.mjs.map +1 -1
  89. package/dist/esm/dependsOn.native.js +1 -2
  90. package/dist/esm/dependsOn.native.js.map +1 -1
  91. package/dist/esm/fields/shared/EditorPreviewPanes.mjs +2 -2
  92. package/dist/esm/fields/shared/EditorPreviewPanes.mjs.map +1 -1
  93. package/dist/esm/fields/shared/EditorPreviewPanes.native.js +2 -2
  94. package/dist/esm/fields/shared/EditorPreviewPanes.native.js.map +1 -1
  95. package/dist/esm/formEngine/docPermissions.mjs +19 -1
  96. package/dist/esm/formEngine/docPermissions.mjs.map +1 -1
  97. package/dist/esm/formEngine/docPermissions.native.js +68 -1
  98. package/dist/esm/formEngine/docPermissions.native.js.map +1 -1
  99. package/dist/esm/formEngine/index.mjs +2 -2
  100. package/dist/esm/formEngine/index.mjs.map +1 -1
  101. package/dist/esm/formEngine/index.native.js +2 -2
  102. package/dist/esm/formEngine/index.native.js.map +1 -1
  103. package/dist/esm/index.mjs +16 -4
  104. package/dist/esm/index.mjs.map +1 -1
  105. package/dist/esm/index.native.js +16 -4
  106. package/dist/esm/index.native.js.map +1 -1
  107. package/dist/esm/liveErrors.mjs +8 -3
  108. package/dist/esm/liveErrors.mjs.map +1 -1
  109. package/dist/esm/liveErrors.native.js +8 -3
  110. package/dist/esm/liveErrors.native.js.map +1 -1
  111. package/dist/esm/measures.mjs +5 -0
  112. package/dist/esm/measures.mjs.map +1 -0
  113. package/dist/esm/measures.native.js +5 -0
  114. package/dist/esm/measures.native.js.map +1 -0
  115. package/dist/esm/recordShape.mjs +74 -0
  116. package/dist/esm/recordShape.mjs.map +1 -0
  117. package/dist/esm/recordShape.native.js +83 -0
  118. package/dist/esm/recordShape.native.js.map +1 -0
  119. package/dist/esm/report/ReportGrid.mjs +428 -0
  120. package/dist/esm/report/ReportGrid.mjs.map +1 -0
  121. package/dist/esm/report/ReportGrid.native.js +471 -0
  122. package/dist/esm/report/ReportGrid.native.js.map +1 -0
  123. package/dist/esm/report/ReportViewToolbar.mjs +228 -0
  124. package/dist/esm/report/ReportViewToolbar.mjs.map +1 -0
  125. package/dist/esm/report/ReportViewToolbar.native.js +264 -0
  126. package/dist/esm/report/ReportViewToolbar.native.js.map +1 -0
  127. package/dist/esm/report/queryReport.mjs +404 -0
  128. package/dist/esm/report/queryReport.mjs.map +1 -0
  129. package/dist/esm/report/queryReport.native.js +545 -0
  130. package/dist/esm/report/queryReport.native.js.map +1 -0
  131. package/dist/esm/report/queryReportColumns.mjs +105 -0
  132. package/dist/esm/report/queryReportColumns.mjs.map +1 -0
  133. package/dist/esm/report/queryReportColumns.native.js +119 -0
  134. package/dist/esm/report/queryReportColumns.native.js.map +1 -0
  135. package/dist/esm/report/reportViewModel.mjs +343 -0
  136. package/dist/esm/report/reportViewModel.mjs.map +1 -0
  137. package/dist/esm/report/reportViewModel.native.js +611 -0
  138. package/dist/esm/report/reportViewModel.native.js.map +1 -0
  139. package/dist/esm/report/savedReports.mjs +112 -0
  140. package/dist/esm/report/savedReports.mjs.map +1 -0
  141. package/dist/esm/report/savedReports.native.js +141 -0
  142. package/dist/esm/report/savedReports.native.js.map +1 -0
  143. package/dist/esm/report/useFrappeReport.mjs +158 -0
  144. package/dist/esm/report/useFrappeReport.mjs.map +1 -0
  145. package/dist/esm/report/useFrappeReport.native.js +185 -0
  146. package/dist/esm/report/useFrappeReport.native.js.map +1 -0
  147. package/dist/esm/report/useQueryReport.mjs +176 -0
  148. package/dist/esm/report/useQueryReport.mjs.map +1 -0
  149. package/dist/esm/report/useQueryReport.native.js +205 -0
  150. package/dist/esm/report/useQueryReport.native.js.map +1 -0
  151. package/dist/esm/useFrappeForm.mjs +533 -0
  152. package/dist/esm/useFrappeForm.mjs.map +1 -0
  153. package/dist/esm/useFrappeForm.native.js +686 -0
  154. package/dist/esm/useFrappeForm.native.js.map +1 -0
  155. package/dist/jsx/FrappeCalendar.mjs +4 -3
  156. package/dist/jsx/FrappeCalendar.mjs.map +1 -1
  157. package/dist/jsx/FrappeCalendar.native.js +3 -2
  158. package/dist/jsx/FrappeCalendar.native.js.map +1 -1
  159. package/dist/jsx/FrappeForm.mjs +151 -467
  160. package/dist/jsx/FrappeForm.mjs.map +1 -1
  161. package/dist/jsx/FrappeForm.native.js +152 -633
  162. package/dist/jsx/FrappeForm.native.js.map +1 -1
  163. package/dist/jsx/FrappeListView.mjs +6 -28
  164. package/dist/jsx/FrappeListView.mjs.map +1 -1
  165. package/dist/jsx/FrappeListView.native.js +11 -32
  166. package/dist/jsx/FrappeListView.native.js.map +1 -1
  167. package/dist/jsx/FrappeReportBuilder.mjs +526 -312
  168. package/dist/jsx/FrappeReportBuilder.mjs.map +1 -1
  169. package/dist/jsx/FrappeReportBuilder.native.js +658 -353
  170. package/dist/jsx/FrappeReportBuilder.native.js.map +1 -1
  171. package/dist/jsx/FrappeReportView.mjs +30 -229
  172. package/dist/jsx/FrappeReportView.mjs.map +1 -1
  173. package/dist/jsx/FrappeReportView.native.js +39 -283
  174. package/dist/jsx/FrappeReportView.native.js.map +1 -1
  175. package/dist/jsx/dependsOn.mjs +2 -2
  176. package/dist/jsx/dependsOn.mjs.map +1 -1
  177. package/dist/jsx/dependsOn.native.js +1 -2
  178. package/dist/jsx/dependsOn.native.js.map +1 -1
  179. package/dist/jsx/fields/shared/EditorPreviewPanes.mjs +2 -2
  180. package/dist/jsx/fields/shared/EditorPreviewPanes.mjs.map +1 -1
  181. package/dist/jsx/fields/shared/EditorPreviewPanes.native.js +2 -2
  182. package/dist/jsx/fields/shared/EditorPreviewPanes.native.js.map +1 -1
  183. package/dist/jsx/formEngine/docPermissions.mjs +19 -1
  184. package/dist/jsx/formEngine/docPermissions.mjs.map +1 -1
  185. package/dist/jsx/formEngine/docPermissions.native.js +69 -0
  186. package/dist/jsx/formEngine/docPermissions.native.js.map +1 -1
  187. package/dist/jsx/formEngine/index.mjs +2 -2
  188. package/dist/jsx/formEngine/index.mjs.map +1 -1
  189. package/dist/jsx/formEngine/index.native.js +2 -0
  190. package/dist/jsx/formEngine/index.native.js.map +1 -1
  191. package/dist/jsx/index.js +16 -4
  192. package/dist/jsx/index.js.map +1 -1
  193. package/dist/jsx/index.mjs +16 -4
  194. package/dist/jsx/index.mjs.map +1 -1
  195. package/dist/jsx/index.native.js +67 -7
  196. package/dist/jsx/index.native.js.map +1 -1
  197. package/dist/jsx/liveErrors.mjs +8 -3
  198. package/dist/jsx/liveErrors.mjs.map +1 -1
  199. package/dist/jsx/liveErrors.native.js +8 -2
  200. package/dist/jsx/liveErrors.native.js.map +1 -1
  201. package/dist/jsx/measures.mjs +5 -0
  202. package/dist/jsx/measures.mjs.map +1 -0
  203. package/dist/jsx/measures.native.js +34 -0
  204. package/dist/jsx/measures.native.js.map +1 -0
  205. package/dist/jsx/recordShape.mjs +74 -0
  206. package/dist/jsx/recordShape.mjs.map +1 -0
  207. package/dist/jsx/recordShape.native.js +115 -0
  208. package/dist/jsx/recordShape.native.js.map +1 -0
  209. package/dist/jsx/report/ReportGrid.mjs +428 -0
  210. package/dist/jsx/report/ReportGrid.mjs.map +1 -0
  211. package/dist/jsx/report/ReportGrid.native.js +510 -0
  212. package/dist/jsx/report/ReportGrid.native.js.map +1 -0
  213. package/dist/jsx/report/ReportViewToolbar.mjs +228 -0
  214. package/dist/jsx/report/ReportViewToolbar.mjs.map +1 -0
  215. package/dist/jsx/report/ReportViewToolbar.native.js +303 -0
  216. package/dist/jsx/report/ReportViewToolbar.native.js.map +1 -0
  217. package/dist/jsx/report/queryReport.mjs +404 -0
  218. package/dist/jsx/report/queryReport.mjs.map +1 -0
  219. package/dist/jsx/report/queryReport.native.js +588 -0
  220. package/dist/jsx/report/queryReport.native.js.map +1 -0
  221. package/dist/jsx/report/queryReportColumns.mjs +105 -0
  222. package/dist/jsx/report/queryReportColumns.mjs.map +1 -0
  223. package/dist/jsx/report/queryReportColumns.native.js +159 -0
  224. package/dist/jsx/report/queryReportColumns.native.js.map +1 -0
  225. package/dist/jsx/report/reportViewModel.mjs +343 -0
  226. package/dist/jsx/report/reportViewModel.mjs.map +1 -0
  227. package/dist/jsx/report/reportViewModel.native.js +657 -0
  228. package/dist/jsx/report/reportViewModel.native.js.map +1 -0
  229. package/dist/jsx/report/savedReports.mjs +112 -0
  230. package/dist/jsx/report/savedReports.mjs.map +1 -0
  231. package/dist/jsx/report/savedReports.native.js +169 -0
  232. package/dist/jsx/report/savedReports.native.js.map +1 -0
  233. package/dist/jsx/report/useFrappeReport.mjs +158 -0
  234. package/dist/jsx/report/useFrappeReport.mjs.map +1 -0
  235. package/dist/jsx/report/useFrappeReport.native.js +214 -0
  236. package/dist/jsx/report/useFrappeReport.native.js.map +1 -0
  237. package/dist/jsx/report/useQueryReport.mjs +176 -0
  238. package/dist/jsx/report/useQueryReport.mjs.map +1 -0
  239. package/dist/jsx/report/useQueryReport.native.js +233 -0
  240. package/dist/jsx/report/useQueryReport.native.js.map +1 -0
  241. package/dist/jsx/useFrappeForm.mjs +533 -0
  242. package/dist/jsx/useFrappeForm.mjs.map +1 -0
  243. package/dist/jsx/useFrappeForm.native.js +714 -0
  244. package/dist/jsx/useFrappeForm.native.js.map +1 -0
  245. package/package.json +16 -16
  246. package/src/FrappeCalendar.tsx +8 -2
  247. package/src/FrappeForm.stories.tsx +52 -0
  248. package/src/FrappeForm.tsx +176 -565
  249. package/src/FrappeListView.cards.stories.tsx +3 -6
  250. package/src/FrappeListView.tsx +15 -55
  251. package/src/FrappeReportBuilder.stories.tsx +34 -7
  252. package/src/FrappeReportBuilder.tsx +790 -380
  253. package/src/FrappeReportView.spec.tsx +10 -6
  254. package/src/FrappeReportView.stories.tsx +20 -1
  255. package/src/FrappeReportView.tsx +89 -415
  256. package/src/dependsOn.ts +4 -1
  257. package/src/fields/shared/EditorPreviewPanes.tsx +2 -2
  258. package/src/formEngine/docPermissions.spec.ts +36 -1
  259. package/src/formEngine/docPermissions.ts +34 -0
  260. package/src/formEngine/index.ts +8 -1
  261. package/src/frappeRemainder.designLaw.spec.ts +9 -1
  262. package/src/frappeRoutes.spec.tsx +9 -0
  263. package/src/frappeViews.designLaw.spec.ts +15 -2
  264. package/src/guestFallback.spec.tsx +236 -0
  265. package/src/index.ts +117 -16
  266. package/src/liveErrors.spec.ts +10 -0
  267. package/src/liveErrors.ts +16 -3
  268. package/src/measures.ts +11 -0
  269. package/src/recordShape.spec.ts +100 -0
  270. package/src/recordShape.ts +133 -0
  271. package/src/report/ReportGrid.spec.tsx +175 -0
  272. package/src/report/ReportGrid.tsx +530 -0
  273. package/src/report/ReportViewToolbar.spec.tsx +90 -0
  274. package/src/report/ReportViewToolbar.tsx +314 -0
  275. package/src/report/queryReport.spec.ts +483 -0
  276. package/src/report/queryReport.ts +722 -0
  277. package/src/report/queryReportColumns.tsx +123 -0
  278. package/src/report/reportViewModel.spec.ts +393 -0
  279. package/src/report/reportViewModel.ts +617 -0
  280. package/src/report/savedReports.ts +172 -0
  281. package/src/report/seam.spec.ts +216 -0
  282. package/src/report/useFrappeReport.ts +241 -0
  283. package/src/report/useQueryReport.spec.tsx +131 -0
  284. package/src/report/useQueryReport.ts +309 -0
  285. package/src/useFrappeForm.spec.tsx +209 -0
  286. package/src/useFrappeForm.ts +778 -0
  287. package/types/FrappeCalendar.d.ts.map +1 -1
  288. package/types/FrappeForm.d.ts +21 -1
  289. package/types/FrappeForm.d.ts.map +1 -1
  290. package/types/FrappeListView.d.ts.map +1 -1
  291. package/types/FrappeReportBuilder.d.ts +66 -16
  292. package/types/FrappeReportBuilder.d.ts.map +1 -1
  293. package/types/FrappeReportView.d.ts +9 -127
  294. package/types/FrappeReportView.d.ts.map +1 -1
  295. package/types/dependsOn.d.ts.map +1 -1
  296. package/types/formEngine/docPermissions.d.ts +14 -0
  297. package/types/formEngine/docPermissions.d.ts.map +1 -1
  298. package/types/formEngine/index.d.ts +1 -1
  299. package/types/formEngine/index.d.ts.map +1 -1
  300. package/types/index.d.ts +15 -3
  301. package/types/index.d.ts.map +1 -1
  302. package/types/liveErrors.d.ts +9 -1
  303. package/types/liveErrors.d.ts.map +1 -1
  304. package/types/measures.d.ts +3 -0
  305. package/types/measures.d.ts.map +1 -0
  306. package/types/recordShape.d.ts +45 -0
  307. package/types/recordShape.d.ts.map +1 -0
  308. package/types/report/ReportGrid.d.ts +20 -0
  309. package/types/report/ReportGrid.d.ts.map +1 -0
  310. package/types/report/ReportViewToolbar.d.ts +31 -0
  311. package/types/report/ReportViewToolbar.d.ts.map +1 -0
  312. package/types/report/queryReport.d.ts +181 -0
  313. package/types/report/queryReport.d.ts.map +1 -0
  314. package/types/report/queryReportColumns.d.ts +12 -0
  315. package/types/report/queryReportColumns.d.ts.map +1 -0
  316. package/types/report/reportViewModel.d.ts +146 -0
  317. package/types/report/reportViewModel.d.ts.map +1 -0
  318. package/types/report/savedReports.d.ts +27 -0
  319. package/types/report/savedReports.d.ts.map +1 -0
  320. package/types/report/useFrappeReport.d.ts +60 -0
  321. package/types/report/useFrappeReport.d.ts.map +1 -0
  322. package/types/report/useQueryReport.d.ts +37 -0
  323. package/types/report/useQueryReport.d.ts.map +1 -0
  324. package/types/useFrappeForm.d.ts +142 -0
  325. package/types/useFrappeForm.d.ts.map +1 -0
@@ -0,0 +1,558 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all) __defProp(target, name, {
7
+ get: all[name],
8
+ enumerable: true
9
+ });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
14
+ get: () => from[key],
15
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
16
+ });
17
+ }
18
+ return to;
19
+ };
20
+ var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
21
+ value: true
22
+ }), mod);
23
+ var useFrappeForm_exports = {};
24
+ __export(useFrappeForm_exports, {
25
+ useFrappeForm: () => useFrappeForm
26
+ });
27
+ module.exports = __toCommonJS(useFrappeForm_exports);
28
+ var import_frappe = require("@multiplatform.one/frappe");
29
+ var import_db = require("@tanstack/db");
30
+ var import_react = require("react");
31
+ var import_react_i18next = require("react-i18next");
32
+ var import_FrappeProvider = require("./FrappeProvider.cjs");
33
+ var import_createPrefill = require("./formEngine/createPrefill.cjs");
34
+ var import_dirtyTracking = require("./formEngine/dirtyTracking.cjs");
35
+ var import_docLifecycle = require("./formEngine/docLifecycle.cjs");
36
+ var import_fetchFrom = require("./formEngine/fetchFrom.cjs");
37
+ var import_fieldPermissions = require("./formEngine/fieldPermissions.cjs");
38
+ var import_formActions = require("./formEngine/formActions.cjs");
39
+ var import_formLayout = require("./formEngine/formLayout.cjs");
40
+ var import_useAmendedAs = require("./formEngine/useAmendedAs.cjs");
41
+ var import_useDocRights = require("./formEngine/useDocRights.cjs");
42
+ var import_useFormEngine = require("./formEngine/useFormEngine.cjs");
43
+ function sectionsToLayoutFields(sections) {
44
+ const fields = [];
45
+ sections.forEach((section, sectionIndex) => {
46
+ fields.push({
47
+ fieldname: `__section_${sectionIndex}`,
48
+ fieldtype: section.tab ? "Tab Break" : "Section Break",
49
+ label: section.label,
50
+ collapsible: section.collapsible ? 1 : 0
51
+ });
52
+ section.columns.forEach((column, columnIndex) => {
53
+ if (columnIndex > 0) {
54
+ fields.push({
55
+ fieldname: `__column_${sectionIndex}_${columnIndex}`,
56
+ fieldtype: "Column Break"
57
+ });
58
+ }
59
+ fields.push(...column.fields);
60
+ });
61
+ });
62
+ return fields;
63
+ }
64
+ function isConflictError(err) {
65
+ const e = err;
66
+ if (!e) return false;
67
+ if (e.status === 409) return true;
68
+ if (e.exc_type === "TimestampMismatchError") return true;
69
+ return /TimestampMismatch|has been modified/i.test(e.message ?? "");
70
+ }
71
+ function useFrappeForm(options) {
72
+ const {
73
+ doctype,
74
+ name,
75
+ baseURL,
76
+ auth,
77
+ syncOptions,
78
+ fields,
79
+ sections,
80
+ hideFields,
81
+ hideSections,
82
+ roles,
83
+ rights: rightsOverride,
84
+ shares: sharesOverride,
85
+ readShares = true,
86
+ disabled = false,
87
+ initialDoc,
88
+ meta: metaSource
89
+ } = options;
90
+ const config = (0, import_FrappeProvider.useFrappeConfig)();
91
+ const {
92
+ t
93
+ } = (0, import_react_i18next.useTranslation)();
94
+ const isCreate = !name;
95
+ const seedDoc = name && initialDoc && initialDoc.name === name ? initialDoc : void 0;
96
+ const seedRef = (0, import_react.useRef)(seedDoc);
97
+ seedRef.current = seedDoc;
98
+ const [localDoc, setLocalDoc] = (0, import_react.useState)(() => seedDoc ?? {});
99
+ const [baselineDoc, setBaselineDoc] = (0, import_react.useState)(() => seedDoc);
100
+ const [docError, setDocError] = (0, import_react.useState)(null);
101
+ const [conflictFields, setConflictFields] = (0, import_react.useState)([]);
102
+ const [saveConflict, setSaveConflict] = (0, import_react.useState)(false);
103
+ const [wasDeleted, setWasDeleted] = (0, import_react.useState)(false);
104
+ const [isSubmitting, setIsSubmitting] = (0, import_react.useState)(false);
105
+ const [errors, setErrors] = (0, import_react.useState)({});
106
+ const [activeTab, setActiveTab] = (0, import_react.useState)(void 0);
107
+ const everLoadedRef = (0, import_react.useRef)(false);
108
+ const localDocRef = (0, import_react.useRef)(localDoc);
109
+ localDocRef.current = localDoc;
110
+ const baselineRef = (0, import_react.useRef)(baselineDoc);
111
+ baselineRef.current = baselineDoc;
112
+ const createDraftRef = (0, import_react.useRef)(void 0);
113
+ const createSeededRef = (0, import_react.useRef)(void 0);
114
+ const finalBaseURL = baseURL ?? config?.baseURL;
115
+ const finalAuth = auth ?? config?.auth;
116
+ const finalSyncOptions = syncOptions ?? config?.syncOptions;
117
+ const frappeConfig = (0, import_react.useMemo)(() => finalBaseURL ? {
118
+ baseURL: finalBaseURL,
119
+ socketPort: config?.socketPort,
120
+ siteName: config?.siteName,
121
+ socketBaseURL: config?.socketBaseURL,
122
+ auth: finalAuth,
123
+ syncOptions: finalSyncOptions,
124
+ realtime: config?.realtime,
125
+ fixtures: config?.fixtures
126
+ } : void 0, [finalBaseURL, config?.socketPort, config?.siteName, config?.socketBaseURL, config?.realtime, finalAuth, finalSyncOptions, config?.fixtures]);
127
+ const ownMeta = (0, import_frappe.useDocTypeMeta)(metaSource ? void 0 : frappeConfig, doctype);
128
+ const meta = metaSource ? metaSource.meta : ownMeta.meta;
129
+ const isMetaLoading = metaSource ? metaSource.isLoading : ownMeta.isLoading;
130
+ const metaError = metaSource ? metaSource.error : ownMeta.error;
131
+ const isSubmittable = !!meta?.is_submittable;
132
+ const docstatus = Number(baselineDoc?.docstatus ?? 0);
133
+ const layoutFields = (0, import_react.useMemo)(() => {
134
+ if (!meta) return void 0;
135
+ return sections ? sectionsToLayoutFields(sections) : meta.fields;
136
+ }, [meta, sections]);
137
+ const amendedAs = (0, import_useAmendedAs.useAmendedAs)(isSubmittable && docstatus === 2 ? frappeConfig : void 0, doctype, name);
138
+ const promptNamed = isCreate && !!meta && (0, import_formLayout.isPromptNamed)(meta.autoname, meta.naming_rule);
139
+ const fetchMap = (0, import_react.useMemo)(() => meta ? (0, import_fetchFrom.buildFetchMap)(meta.fields) : void 0, [meta]);
140
+ const handleDocSyncError = (0, import_react.useCallback)(err => {
141
+ setDocError(err instanceof Error ? err : new Error(String(err)));
142
+ }, []);
143
+ const docCollection = (0, import_frappe.useFrappeCollection)(name ? frappeConfig : void 0, doctype, {
144
+ fields,
145
+ filters: name ? {
146
+ name
147
+ } : void 0,
148
+ onSyncError: handleDocSyncError
149
+ });
150
+ const {
151
+ data: rawDocData,
152
+ isLoading: isDocLoading
153
+ } = (0, import_frappe.useLiveQuery)(q => {
154
+ if (!docCollection || !name) return null;
155
+ return q.from({
156
+ _doc: docCollection
157
+ }).where(({
158
+ _doc
159
+ }) => {
160
+ if (!_doc) return (0, import_db.eq)(name, name);
161
+ return (0, import_db.eq)(_doc.name, name);
162
+ });
163
+ }, [docCollection, name]);
164
+ const liveDoc = (0, import_react.useMemo)(() => {
165
+ const arr = Array.isArray(rawDocData) ? rawDocData : rawDocData ? [rawDocData] : [];
166
+ const doc = arr[0] ?? null;
167
+ return doc ? {
168
+ data: doc,
169
+ isLoading: isDocLoading
170
+ } : name ? {
171
+ data: null,
172
+ isLoading: isDocLoading
173
+ } : null;
174
+ }, [rawDocData, isDocLoading, name]);
175
+ const collection = (0, import_frappe.useFrappeCollection)(name ? void 0 : frappeConfig, doctype, {
176
+ fields
177
+ });
178
+ const shareCollection = (0, import_frappe.useFrappeCollection)(readShares && !sharesOverride && name ? frappeConfig : void 0, "DocShare", {
179
+ fields: ["name", "user", "everyone", "read", "write", "share"],
180
+ filters: {
181
+ share_doctype: doctype,
182
+ share_name: name
183
+ }
184
+ });
185
+ const {
186
+ data: rawShareRows
187
+ } = (0, import_frappe.useLiveQuery)(q => shareCollection ? q.from({
188
+ _share: shareCollection
189
+ }) : null, [shareCollection]);
190
+ const shareRows = (0, import_react.useMemo)(() => sharesOverride ?? (shareCollection ? rawShareRows ?? [] : void 0), [sharesOverride, shareCollection, rawShareRows]);
191
+ const owner = baselineDoc?.owner;
192
+ const {
193
+ rights: sessionRights,
194
+ pending: sessionPending,
195
+ roles: effectiveRoles,
196
+ user
197
+ } = (0, import_useDocRights.useDocRights)(frappeConfig, meta, {
198
+ roles,
199
+ owner: typeof owner === "string" ? owner : void 0,
200
+ shares: shareRows
201
+ });
202
+ const rights = rightsOverride ?? sessionRights;
203
+ const rightsPending = rightsOverride ? false : sessionPending;
204
+ const permLevels = (0, import_react.useMemo)(() => (0, import_fieldPermissions.buildPermLevelMatrix)(meta?.permissions, effectiveRoles), [meta?.permissions, effectiveRoles]);
205
+ const tabs = (0, import_react.useMemo)(() => {
206
+ if (!layoutFields) return void 0;
207
+ return (0, import_formLayout.buildFormTabs)({
208
+ fields: layoutFields,
209
+ doc: {
210
+ ...localDoc,
211
+ __islocal: isCreate ? 1 : 0,
212
+ ...(user ? {
213
+ __session_user: user
214
+ } : {})
215
+ },
216
+ docstatus,
217
+ formReadOnly: !!meta?.read_only,
218
+ isCreate,
219
+ detailsLabel: t("Details"),
220
+ permLevels,
221
+ hiddenFields: hideFields,
222
+ hiddenSections: hideSections
223
+ });
224
+ }, [layoutFields, localDoc, isCreate, user, docstatus, meta?.read_only, permLevels, hideFields, hideSections, t]);
225
+ (0, import_react.useEffect)(() => {
226
+ everLoadedRef.current = false;
227
+ if (name) createDraftRef.current = void 0;
228
+ createSeededRef.current = void 0;
229
+ setWasDeleted(false);
230
+ setConflictFields([]);
231
+ setSaveConflict(false);
232
+ setDocError(null);
233
+ const seed = seedRef.current;
234
+ setBaselineDoc(seed);
235
+ if (seed) setLocalDoc(seed);
236
+ }, [doctype, name]);
237
+ (0, import_frappe.useFrappeDoctypeEvents)(name ? frappeConfig : void 0, doctype, event => {
238
+ if (event.type !== "doc_deleted") return;
239
+ const payload = event.payload;
240
+ if (payload?.name === name) setWasDeleted(true);
241
+ }, Boolean(name));
242
+ (0, import_react.useEffect)(() => {
243
+ const incoming = liveDoc?.data;
244
+ if (incoming) {
245
+ everLoadedRef.current = true;
246
+ setWasDeleted(false);
247
+ const baseline = baselineRef.current;
248
+ if (!baseline) {
249
+ setBaselineDoc(incoming);
250
+ setLocalDoc(incoming);
251
+ return;
252
+ }
253
+ const local = localDocRef.current;
254
+ const merged = {
255
+ ...incoming
256
+ };
257
+ const newConflicts = [];
258
+ for (const key of Object.keys(local)) {
259
+ const localValue = local[key];
260
+ if ((0, import_dirtyTracking.isSameValue)(localValue, baseline[key])) continue;
261
+ merged[key] = localValue;
262
+ const remote = incoming[key];
263
+ if (!(0, import_dirtyTracking.isSameValue)(remote, baseline[key]) && !(0, import_dirtyTracking.isSameValue)(remote, localValue)) {
264
+ newConflicts.push(key);
265
+ }
266
+ }
267
+ setBaselineDoc(incoming);
268
+ setLocalDoc(merged);
269
+ if (newConflicts.length > 0) {
270
+ setConflictFields(prev => Array.from(/* @__PURE__ */new Set([...prev, ...newConflicts])));
271
+ }
272
+ } else if (name && everLoadedRef.current && !liveDoc?.isLoading) {
273
+ setWasDeleted(true);
274
+ }
275
+ }, [liveDoc?.data, liveDoc?.isLoading, doctype, name]);
276
+ (0, import_react.useEffect)(() => {
277
+ if (name) return;
278
+ if (createDraftRef.current?.doctype !== doctype) {
279
+ createDraftRef.current = {
280
+ doctype,
281
+ values: (0, import_createPrefill.takeCreatePrefill)(doctype)
282
+ };
283
+ }
284
+ const draft = createDraftRef.current.values;
285
+ const defaults = meta ? (0, import_formLayout.buildCreateDefaults)(meta.fields, user) : {};
286
+ const fresh = createSeededRef.current !== doctype;
287
+ createSeededRef.current = doctype;
288
+ setLocalDoc(prev => ({
289
+ ...defaults,
290
+ ...draft,
291
+ ...(fresh ? {} : prev),
292
+ doctype
293
+ }));
294
+ }, [name, doctype, meta, user]);
295
+ const dirtyFields = (0, import_react.useMemo)(() => (0, import_dirtyTracking.computeDirtyFields)(localDoc, baselineDoc), [localDoc, baselineDoc]);
296
+ const isDirty = dirtyFields.length > 0;
297
+ const runFetchFrom = (field, value) => {
298
+ const rules = fetchMap?.get(field);
299
+ if (!rules || rules.length === 0 || !frappeConfig) return;
300
+ const applyPatch = fetched2 => {
301
+ setLocalDoc(prev => {
302
+ const current = prev;
303
+ if (current[field] !== value) return prev;
304
+ const patch = (0, import_fetchFrom.applyFetchedValues)(rules, fetched2, current);
305
+ return Object.keys(patch).length > 0 ? {
306
+ ...current,
307
+ ...patch
308
+ } : prev;
309
+ });
310
+ };
311
+ if ((0, import_dirtyTracking.isEmptyValue)(value)) {
312
+ applyPatch({});
313
+ return;
314
+ }
315
+ const linkField = meta?.fields.find(metaField => metaField.fieldname === field);
316
+ const targetDoctype = typeof linkField?.options === "string" ? linkField.options : "";
317
+ if (!targetDoctype) return;
318
+ const sources = Array.from(new Set(rules.map(rule => rule.source)));
319
+ const fixtures = frappeConfig.fixtures;
320
+ const fetched = fixtures ? fixtures.getDoc(targetDoctype, String(value), sources).then(doc => doc ?? {}) : (0, import_formActions.validateLink)((0, import_formActions.createHttpClient)(frappeConfig), targetDoctype, String(value), sources);
321
+ fetched.then(applyPatch).catch(() => void 0);
322
+ };
323
+ const setValue = (field, value) => {
324
+ setLocalDoc(prev => ({
325
+ ...prev,
326
+ [field]: value
327
+ }));
328
+ setErrors(prev => {
329
+ if (!(String(field) in prev)) return prev;
330
+ const next = {
331
+ ...prev
332
+ };
333
+ delete next[String(field)];
334
+ return next;
335
+ });
336
+ runFetchFrom(String(field), value);
337
+ };
338
+ const validate = () => {
339
+ if (!tabs) return {};
340
+ const validationErrors = {};
341
+ const doc = localDoc;
342
+ if (promptNamed && (0, import_dirtyTracking.isEmptyValue)(doc.name)) {
343
+ validationErrors.name = t("Name is required");
344
+ }
345
+ for (const tab of tabs) {
346
+ for (const field of tab.schema.fields) {
347
+ if (!field.required) continue;
348
+ if ((0, import_dirtyTracking.isEmptyValue)(doc[field.name])) {
349
+ validationErrors[field.name] = t("{{label}} is required", {
350
+ label: field.label || field.name
351
+ });
352
+ }
353
+ }
354
+ }
355
+ return validationErrors;
356
+ };
357
+ const canWrite = isCreate ? rights.create : rights.write;
358
+ const save = async () => {
359
+ if (wasDeleted || !canWrite || disabled) return void 0;
360
+ const requiredErrors = validate();
361
+ if (Object.keys(requiredErrors).length > 0) {
362
+ setErrors(requiredErrors);
363
+ return void 0;
364
+ }
365
+ setIsSubmitting(true);
366
+ setErrors({});
367
+ try {
368
+ if (name) {
369
+ if (!docCollection) return void 0;
370
+ if (dirtyFields.length > 0) {
371
+ const local = localDoc;
372
+ const tx2 = docCollection.update(name, draft => {
373
+ for (const key of dirtyFields) {
374
+ draft[key] = local[key];
375
+ }
376
+ });
377
+ await tx2.isPersisted.promise;
378
+ }
379
+ setConflictFields([]);
380
+ setSaveConflict(false);
381
+ return name;
382
+ }
383
+ if (!collection || !frappeConfig) return void 0;
384
+ const temporaryName = localDoc.name ?? `new-${Date.now()}`;
385
+ const docToInsert = {
386
+ ...localDoc,
387
+ doctype,
388
+ name: temporaryName
389
+ };
390
+ const tx = collection.insert(docToInsert);
391
+ await tx.isPersisted.promise;
392
+ return (0, import_frappe.getFrappeSyncModule)(frappeConfig)?.createdName(temporaryName) ?? temporaryName;
393
+ } catch (err) {
394
+ const e = err;
395
+ if (isConflictError(err)) setSaveConflict(true);
396
+ if (e?.exc_type === "ValidationError") {
397
+ const validationErrors = {};
398
+ if (e._server_messages) {
399
+ try {
400
+ const messages = JSON.parse(e._server_messages);
401
+ for (const msg of messages) {
402
+ const parsed = typeof msg === "string" ? JSON.parse(msg) : msg;
403
+ if (parsed.message) {
404
+ validationErrors.general = parsed.message;
405
+ }
406
+ }
407
+ } catch {
408
+ validationErrors.general = t("Validation error occurred");
409
+ }
410
+ }
411
+ setErrors(validationErrors);
412
+ } else {
413
+ setErrors({
414
+ general: e?.message || t("Failed to save document")
415
+ });
416
+ }
417
+ return void 0;
418
+ } finally {
419
+ setIsSubmitting(false);
420
+ }
421
+ };
422
+ const reset = () => {
423
+ if (baselineDoc) {
424
+ setLocalDoc(baselineDoc);
425
+ } else if (liveDoc?.data) {
426
+ setLocalDoc(liveDoc.data);
427
+ } else {
428
+ setLocalDoc({
429
+ doctype
430
+ });
431
+ }
432
+ setConflictFields([]);
433
+ setSaveConflict(false);
434
+ setErrors({});
435
+ };
436
+ const remove = async () => {
437
+ if (!docCollection || !name || wasDeleted || !rights.delete) return false;
438
+ setIsSubmitting(true);
439
+ setErrors({});
440
+ try {
441
+ const tx = docCollection.delete(name);
442
+ await tx.isPersisted.promise;
443
+ return true;
444
+ } catch (err) {
445
+ setErrors({
446
+ general: err?.message || t("Failed to delete")
447
+ });
448
+ return false;
449
+ } finally {
450
+ setIsSubmitting(false);
451
+ }
452
+ };
453
+ const transitionDocstatus = async (to, failure) => {
454
+ if (!docCollection || !name || wasDeleted || !rights[to === 1 ? "submit" : "cancel"]) {
455
+ return false;
456
+ }
457
+ if (to === 1) {
458
+ const requiredErrors = validate();
459
+ if (Object.keys(requiredErrors).length > 0) {
460
+ setErrors(requiredErrors);
461
+ return false;
462
+ }
463
+ }
464
+ setIsSubmitting(true);
465
+ setErrors({});
466
+ try {
467
+ const tx = docCollection.update(name, draft => {
468
+ draft.docstatus = to;
469
+ });
470
+ await tx.isPersisted.promise;
471
+ return true;
472
+ } catch (err) {
473
+ if (isConflictError(err)) setSaveConflict(true);
474
+ setErrors({
475
+ general: (0, import_useFormEngine.extractServerError)(err, failure)
476
+ });
477
+ return false;
478
+ } finally {
479
+ setIsSubmitting(false);
480
+ }
481
+ };
482
+ const submitDocument = () => transitionDocstatus(1, t("Failed to submit"));
483
+ const cancelDocument = () => transitionDocstatus(2, t("Failed to cancel"));
484
+ const amend = () => {
485
+ if (!meta || !name || !rights.amend) return void 0;
486
+ const draft = (0, import_docLifecycle.buildAmendValues)(meta.fields, localDoc, name);
487
+ (0, import_createPrefill.setCreatePrefill)(doctype, draft);
488
+ return draft;
489
+ };
490
+ const duplicate = () => {
491
+ if (!meta) return void 0;
492
+ const values = (0, import_formLayout.buildCopyValues)(meta.fields, localDoc);
493
+ (0, import_createPrefill.setCreatePrefill)(doctype, values);
494
+ return values;
495
+ };
496
+ const fieldTargets = (0, import_react.useMemo)(() => (tabs ?? []).flatMap(tab => tab.schema.fields.map(field => ({
497
+ name: field.name,
498
+ label: field.label || field.name,
499
+ tabKey: tab.key,
500
+ tabLabel: tab.label
501
+ }))), [tabs]);
502
+ const revealField = fieldName => {
503
+ const target = fieldTargets.find(field => field.name === fieldName);
504
+ if (!target) return false;
505
+ setActiveTab(target.tabKey);
506
+ return true;
507
+ };
508
+ const isDocReading = Boolean(name) && (!docCollection || Boolean(liveDoc?.isLoading));
509
+ const showsSeed = Boolean(seedDoc) && isDocReading;
510
+ const status = !name ? "ready" : docError && !liveDoc?.data && !wasDeleted ? "error" : isDocReading && !showsSeed && !wasDeleted ? "loading" : !isDocReading && !liveDoc?.data && !wasDeleted ? "notFound" : "ready";
511
+ return {
512
+ doctype,
513
+ name,
514
+ isCreate,
515
+ connection: frappeConfig,
516
+ meta,
517
+ metaLoading: isMetaLoading,
518
+ metaError,
519
+ doc: localDoc,
520
+ baseline: baselineDoc,
521
+ setValue,
522
+ errors,
523
+ setErrors,
524
+ dirtyFields,
525
+ isDirty,
526
+ isSubmitting,
527
+ docstatus,
528
+ isSubmittable,
529
+ rights,
530
+ rightsPending,
531
+ roles: effectiveRoles,
532
+ user,
533
+ shareRows,
534
+ canWrite,
535
+ readOnly: disabled || wasDeleted || !!meta?.read_only || !canWrite,
536
+ wasDeleted,
537
+ conflictFields,
538
+ conflict: saveConflict || conflictFields.length > 0,
539
+ status,
540
+ docError,
541
+ showsSeed,
542
+ tabs,
543
+ promptNamed,
544
+ fieldTargets,
545
+ activeTab,
546
+ setActiveTab,
547
+ revealField,
548
+ amendedAs,
549
+ validate,
550
+ save,
551
+ submitDocument,
552
+ cancelDocument,
553
+ remove,
554
+ reset,
555
+ amend,
556
+ duplicate
557
+ };
558
+ }