@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,131 @@
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 queryReportColumns_exports = {};
24
+ __export(queryReportColumns_exports, {
25
+ buildQueryReportColumns: () => buildQueryReportColumns,
26
+ buildQueryReportCsv: () => buildQueryReportCsv
27
+ });
28
+ module.exports = __toCommonJS(queryReportColumns_exports);
29
+ var import_components = require("@multiplatform.one/components");
30
+ var import_listFormat = require("../list/listFormat.cjs");
31
+ var import_queryReport = require("./queryReport.cjs");
32
+ var import_jsx_runtime = require("react/jsx-runtime");
33
+ const NUMERIC_FIELDTYPES = /* @__PURE__ */new Set(["Currency", "Float", "Int", "Percent", "Duration"]);
34
+ function queryReportCell(column, onOpenLink) {
35
+ return ({
36
+ getValue
37
+ }) => {
38
+ const raw = getValue();
39
+ if (raw === null || raw === void 0 || raw === "") {
40
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.Text, {
41
+ fontSize: "$3",
42
+ color: "$color8",
43
+ children: "\u2014"
44
+ });
45
+ }
46
+ if (column.fieldtype === "Check") {
47
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.Text, {
48
+ fontSize: "$3",
49
+ color: raw ? "$green11" : "$color8",
50
+ children: raw ? "\u2713" : "\u2014"
51
+ });
52
+ }
53
+ const value = String(raw);
54
+ if (NUMERIC_FIELDTYPES.has(column.fieldtype)) {
55
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.Text, {
56
+ fontSize: "$3",
57
+ color: "$color12",
58
+ textAlign: "right",
59
+ children: value
60
+ });
61
+ }
62
+ switch (column.fieldtype) {
63
+ case "Date":
64
+ case "Datetime":
65
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.Text, {
66
+ fontSize: "$3",
67
+ color: "$color11",
68
+ children: (0, import_listFormat.formatDateCell)(value)
69
+ });
70
+ case "Link":
71
+ {
72
+ const doctype = column.options;
73
+ if (doctype && onOpenLink) {
74
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.Text, {
75
+ fontSize: "$3",
76
+ color: "$color11",
77
+ textDecorationLine: "underline",
78
+ cursor: "pointer",
79
+ numberOfLines: 1,
80
+ role: "link",
81
+ onPress: event => {
82
+ event?.stopPropagation?.();
83
+ onOpenLink(doctype, value);
84
+ },
85
+ children: value
86
+ });
87
+ }
88
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.Text, {
89
+ fontSize: "$3",
90
+ color: "$color11",
91
+ numberOfLines: 1,
92
+ children: value
93
+ });
94
+ }
95
+ default:
96
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.Text, {
97
+ fontSize: "$3",
98
+ color: "$color11",
99
+ numberOfLines: 1,
100
+ children: (0, import_queryReport.stripHtml)(value)
101
+ });
102
+ }
103
+ };
104
+ }
105
+ function buildQueryReportColumns({
106
+ columns,
107
+ onOpenLink
108
+ }) {
109
+ return columns.map(column => ({
110
+ id: column.fieldname,
111
+ header: column.label,
112
+ // accessorFn (not accessorKey): report fieldnames may contain path-y
113
+ // characters like "assigned_to/owner" that key-based access mangles.
114
+ accessorFn: row => row[column.fieldname],
115
+ ...(NUMERIC_FIELDTYPES.has(column.fieldtype) ? {
116
+ align: "right"
117
+ } : {}),
118
+ ...(column.width ? {
119
+ width: column.width
120
+ } : {}),
121
+ cell: queryReportCell(column, onOpenLink)
122
+ }));
123
+ }
124
+ function escapeCsvCell(value) {
125
+ if (value === null || value === void 0) return "";
126
+ const text = (0, import_queryReport.stripHtml)(String(value));
127
+ return /[",\n]/.test(text) ? `"${text.replace(/"/g, '""')}"` : text;
128
+ }
129
+ function buildQueryReportCsv(columns, rows) {
130
+ return [columns.map(column => escapeCsvCell(column.label)).join(","), ...rows.map(row => columns.map(column => escapeCsvCell(row[column.fieldname])).join(","))].join("\n");
131
+ }
@@ -0,0 +1,159 @@
1
+ "use strict";
2
+
3
+ var __create = Object.create;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getProtoOf = Object.getPrototypeOf;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __export = (target, all) => {
10
+ for (var name in all) __defProp(target, name, {
11
+ get: all[name],
12
+ enumerable: true
13
+ });
14
+ };
15
+ var __copyProps = (to, from, except, desc) => {
16
+ if (from && typeof from === "object" || typeof from === "function") {
17
+ for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
18
+ get: () => from[key],
19
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
20
+ });
21
+ }
22
+ return to;
23
+ };
24
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
25
+ // If the importer is in node compatibility mode or this is not an ESM
26
+ // file that has been converted to a CommonJS file using a Babel-
27
+ // compatible transform (i.e. "__esModule" has not been set), then set
28
+ // "default" to the CommonJS "module.exports" for node compatibility.
29
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
30
+ value: mod,
31
+ enumerable: true
32
+ }) : target, mod));
33
+ var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
34
+ value: true
35
+ }), mod);
36
+ var queryReportColumns_exports = {};
37
+ __export(queryReportColumns_exports, {
38
+ buildQueryReportColumns: () => buildQueryReportColumns,
39
+ buildQueryReportCsv: () => buildQueryReportCsv
40
+ });
41
+ module.exports = __toCommonJS(queryReportColumns_exports);
42
+ var import_jsx_runtime = require("react/jsx-runtime");
43
+ var import_react = __toESM(require("react"));
44
+ var import_components = require("@multiplatform.one/components");
45
+ var import_listFormat = require("../list/listFormat.native.js");
46
+ var import_queryReport = require("./queryReport.native.js");
47
+ var NUMERIC_FIELDTYPES = /* @__PURE__ */new Set(["Currency", "Float", "Int", "Percent", "Duration"]);
48
+ function queryReportCell(column, onOpenLink) {
49
+ return function (param) {
50
+ var {
51
+ getValue
52
+ } = param;
53
+ var raw = getValue();
54
+ if (raw === null || raw === void 0 || raw === "") {
55
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.Text, {
56
+ fontSize: "$3",
57
+ color: "$color8",
58
+ children: "\u2014"
59
+ });
60
+ }
61
+ if (column.fieldtype === "Check") {
62
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.Text, {
63
+ fontSize: "$3",
64
+ color: raw ? "$green11" : "$color8",
65
+ children: raw ? "\u2713" : "\u2014"
66
+ });
67
+ }
68
+ var value = String(raw);
69
+ if (NUMERIC_FIELDTYPES.has(column.fieldtype)) {
70
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.Text, {
71
+ fontSize: "$3",
72
+ color: "$color12",
73
+ textAlign: "right",
74
+ children: value
75
+ });
76
+ }
77
+ switch (column.fieldtype) {
78
+ case "Date":
79
+ case "Datetime":
80
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.Text, {
81
+ fontSize: "$3",
82
+ color: "$color11",
83
+ children: (0, import_listFormat.formatDateCell)(value)
84
+ });
85
+ case "Link":
86
+ {
87
+ var doctype = column.options;
88
+ if (doctype && onOpenLink) {
89
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.Text, {
90
+ fontSize: "$3",
91
+ color: "$color11",
92
+ textDecorationLine: "underline",
93
+ cursor: "pointer",
94
+ numberOfLines: 1,
95
+ role: "link",
96
+ onPress: function onPress(event) {
97
+ var _event_stopPropagation;
98
+ event === null || event === void 0 ? void 0 : (_event_stopPropagation = event.stopPropagation) === null || _event_stopPropagation === void 0 ? void 0 : _event_stopPropagation.call(event);
99
+ onOpenLink(doctype, value);
100
+ },
101
+ children: value
102
+ });
103
+ }
104
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.Text, {
105
+ fontSize: "$3",
106
+ color: "$color11",
107
+ numberOfLines: 1,
108
+ children: value
109
+ });
110
+ }
111
+ default:
112
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.Text, {
113
+ fontSize: "$3",
114
+ color: "$color11",
115
+ numberOfLines: 1,
116
+ children: (0, import_queryReport.stripHtml)(value)
117
+ });
118
+ }
119
+ };
120
+ }
121
+ function buildQueryReportColumns(param) {
122
+ var {
123
+ columns,
124
+ onOpenLink
125
+ } = param;
126
+ return columns.map(function (column) {
127
+ return {
128
+ id: column.fieldname,
129
+ header: column.label,
130
+ // accessorFn (not accessorKey): report fieldnames may contain path-y
131
+ // characters like "assigned_to/owner" that key-based access mangles.
132
+ accessorFn: function accessorFn(row) {
133
+ return row[column.fieldname];
134
+ },
135
+ ...(NUMERIC_FIELDTYPES.has(column.fieldtype) ? {
136
+ align: "right"
137
+ } : {}),
138
+ ...(column.width ? {
139
+ width: column.width
140
+ } : {}),
141
+ cell: queryReportCell(column, onOpenLink)
142
+ };
143
+ });
144
+ }
145
+ function escapeCsvCell(value) {
146
+ if (value === null || value === void 0) return "";
147
+ var text = (0, import_queryReport.stripHtml)(String(value));
148
+ return /[",\n]/.test(text) ? `"${text.replace(/"/g, '""')}"` : text;
149
+ }
150
+ function buildQueryReportCsv(columns, rows) {
151
+ return [columns.map(function (column) {
152
+ return escapeCsvCell(column.label);
153
+ }).join(","), ...rows.map(function (row) {
154
+ return columns.map(function (column) {
155
+ return escapeCsvCell(row[column.fieldname]);
156
+ }).join(",");
157
+ })].join("\n");
158
+ }
159
+ //# sourceMappingURL=queryReportColumns.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["to","__toESM","mod","isNodeMode","target","__create","__getProtoOf","__copyProps","__esModule","__defProp","value","enumerable","__toCommonJS","queryReportColumns_exports","__export","buildQueryReportColumns","buildQueryReportCsv","module","exports","import_jsx_runtime","require","import_react","import_components","import_listFormat","import_queryReport","NUMERIC_FIELDTYPES","Set","queryReportCell","column","onOpenLink","param","getValue","raw","jsx","Text","fontSize","color","children","fieldtype","String","has","textAlign","formatDateCell","doctype","options","textDecorationLine","cursor","numberOfLines","role","onPress","event","_event_stopPropagation","stopPropagation","call"],"sources":["../../../src/report/queryReportColumns.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,386 @@
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 reportViewModel_exports = {};
24
+ __export(reportViewModel_exports, {
25
+ DEFAULT_REPORT_PAGE_SIZE: () => DEFAULT_REPORT_PAGE_SIZE,
26
+ REPORT_NUMERIC_FIELDTYPES: () => REPORT_NUMERIC_FIELDTYPES,
27
+ REPORT_PAGE_SIZES: () => REPORT_PAGE_SIZES,
28
+ buildGridRows: () => buildGridRows,
29
+ buildReportCsv: () => buildReportCsv,
30
+ columnAlign: () => columnAlign,
31
+ columnFilterTuple: () => columnFilterTuple,
32
+ columnFilterTuples: () => columnFilterTuples,
33
+ compareCellValues: () => compareCellValues,
34
+ computeTotals: () => computeTotals,
35
+ defaultColumnWidth: () => defaultColumnWidth,
36
+ defaultReportFieldnames: () => defaultReportFieldnames,
37
+ fromDeskReportSettings: () => fromDeskReportSettings,
38
+ orderReportRows: () => orderReportRows,
39
+ parseDeskOrderBy: () => parseDeskOrderBy,
40
+ parseReportFiltersParam: () => parseReportFiltersParam,
41
+ reportColumnsFromMeta: () => reportColumnsFromMeta,
42
+ resolveSelectedColumns: () => resolveSelectedColumns,
43
+ toDeskReportSettings: () => toDeskReportSettings
44
+ });
45
+ module.exports = __toCommonJS(reportViewModel_exports);
46
+ var import_filterFields = require("../filterFields.cjs");
47
+ const VALUELESS_FIELDTYPES = /* @__PURE__ */new Set(["Section Break", "Column Break", "Tab Break", "HTML", "Table", "Table MultiSelect", "Button", "Image", "Fold", "Heading"]);
48
+ const REPORT_NUMERIC_FIELDTYPES = /* @__PURE__ */new Set(["Int", "Float", "Currency", "Percent", "Rating", "Duration"]);
49
+ const WIDE_FIELDTYPES = /* @__PURE__ */new Set(["Small Text", "Text", "Long Text", "Text Editor", "Markdown Editor", "Code", "JSON"]);
50
+ const REPORT_PAGE_SIZES = [20, 100, 500];
51
+ const DEFAULT_REPORT_PAGE_SIZE = REPORT_PAGE_SIZES[0];
52
+ function defaultColumnWidth(fieldtype) {
53
+ if (fieldtype === "Check") return 90;
54
+ if (REPORT_NUMERIC_FIELDTYPES.has(fieldtype)) return 110;
55
+ if (fieldtype === "Date") return 120;
56
+ if (fieldtype === "Datetime") return 165;
57
+ if (WIDE_FIELDTYPES.has(fieldtype)) return 240;
58
+ return 160;
59
+ }
60
+ function columnAlign(fieldtype) {
61
+ if (fieldtype === "Check") return "center";
62
+ return REPORT_NUMERIC_FIELDTYPES.has(fieldtype) ? "right" : "left";
63
+ }
64
+ function toColumnDef(field) {
65
+ const fieldtype = String(field.fieldtype);
66
+ return {
67
+ fieldname: field.fieldname,
68
+ label: field.label || field.fieldname,
69
+ fieldtype,
70
+ kind: (0, import_filterFields.fieldKind)(fieldtype),
71
+ options: field.options,
72
+ width: defaultColumnWidth(fieldtype),
73
+ align: columnAlign(fieldtype)
74
+ };
75
+ }
76
+ function standardReportColumns() {
77
+ return [{
78
+ fieldname: "name",
79
+ label: "ID",
80
+ fieldtype: "Data",
81
+ kind: "text",
82
+ width: 160,
83
+ align: "left"
84
+ }, {
85
+ fieldname: "owner",
86
+ label: "Created By",
87
+ fieldtype: "Link",
88
+ kind: "link",
89
+ options: "User",
90
+ width: 160,
91
+ align: "left"
92
+ }, {
93
+ fieldname: "creation",
94
+ label: "Created On",
95
+ fieldtype: "Datetime",
96
+ kind: "date",
97
+ width: 165,
98
+ align: "left"
99
+ }, {
100
+ fieldname: "modified",
101
+ label: "Last Updated On",
102
+ fieldtype: "Datetime",
103
+ kind: "date",
104
+ width: 165,
105
+ align: "left"
106
+ }, {
107
+ fieldname: "modified_by",
108
+ label: "Last Updated By",
109
+ fieldtype: "Link",
110
+ kind: "link",
111
+ options: "User",
112
+ width: 160,
113
+ align: "left"
114
+ }];
115
+ }
116
+ function reportColumnsFromMeta(meta) {
117
+ const out = [];
118
+ const seen = /* @__PURE__ */new Set();
119
+ const push = column => {
120
+ if (!column.fieldname || seen.has(column.fieldname)) return;
121
+ seen.add(column.fieldname);
122
+ out.push(column);
123
+ };
124
+ push(standardReportColumns()[0]);
125
+ for (const field of meta?.fields ?? []) {
126
+ const fieldtype = String(field.fieldtype);
127
+ if (VALUELESS_FIELDTYPES.has(fieldtype) || fieldtype.startsWith("Table")) continue;
128
+ push(toColumnDef(field));
129
+ }
130
+ for (const standard of standardReportColumns()) push(standard);
131
+ return out;
132
+ }
133
+ function defaultReportFieldnames(meta) {
134
+ const out = [];
135
+ const seen = /* @__PURE__ */new Set();
136
+ const push = fieldname => {
137
+ if (!fieldname || seen.has(fieldname)) return;
138
+ seen.add(fieldname);
139
+ out.push(fieldname);
140
+ };
141
+ const pickable = field => {
142
+ const fieldtype = String(field.fieldtype);
143
+ return !VALUELESS_FIELDTYPES.has(fieldtype) && !fieldtype.startsWith("Table") && field.report_hide !== 1;
144
+ };
145
+ const fields = meta?.fields ?? [];
146
+ push("name");
147
+ const status = fields.find(field => field.fieldname === "status");
148
+ if (status && pickable(status)) push("status");
149
+ push(meta?.title_field);
150
+ push(meta?.image_field);
151
+ const flagged = fields.filter(field => pickable(field) && (field.in_list_view === 1 || field.in_standard_filter === 1));
152
+ for (const field of flagged) push(field.fieldname);
153
+ for (const field of flagged) {
154
+ if (String(field.fieldtype) !== "Currency" || !field.options) continue;
155
+ push(field.options.includes(":") ? field.options.split(":")[1] : field.options);
156
+ }
157
+ push("modified");
158
+ return out;
159
+ }
160
+ function resolveSelectedColumns(all, fieldnames) {
161
+ const byName = new Map(all.map(column => [column.fieldname, column]));
162
+ const out = [];
163
+ for (const fieldname of fieldnames) {
164
+ const column = byName.get(fieldname);
165
+ if (column) out.push(column);
166
+ }
167
+ return out;
168
+ }
169
+ const COMPARISON_PREFIXES = [">=", "<=", "!=", ">", "<", "="];
170
+ const CHECK_TRUE = /* @__PURE__ */new Set(["1", "true", "yes", "y", "\u2713"]);
171
+ const CHECK_FALSE = /* @__PURE__ */new Set(["0", "false", "no", "n"]);
172
+ function columnFilterTuple(column, raw) {
173
+ const text = raw.trim();
174
+ if (!text) return null;
175
+ switch (column.kind) {
176
+ case "check":
177
+ {
178
+ const lowered = text.toLowerCase();
179
+ if (CHECK_TRUE.has(lowered)) return [column.fieldname, "=", 1];
180
+ if (CHECK_FALSE.has(lowered)) return [column.fieldname, "=", 0];
181
+ return null;
182
+ }
183
+ case "select":
184
+ {
185
+ const match = (0, import_filterFields.selectOptionsFromField)(column.options).find(option => option.value.toLowerCase() === text.toLowerCase());
186
+ if (match) return [column.fieldname, "=", match.value];
187
+ return [column.fieldname, "like", text.includes("%") ? text : `%${text}%`];
188
+ }
189
+ case "number":
190
+ case "date":
191
+ {
192
+ for (const prefix of COMPARISON_PREFIXES) {
193
+ if (text.startsWith(prefix)) {
194
+ const value = text.slice(prefix.length).trim();
195
+ return value ? [column.fieldname, prefix, value] : null;
196
+ }
197
+ }
198
+ return [column.fieldname, "=", text];
199
+ }
200
+ default:
201
+ return [column.fieldname, "like", text.includes("%") ? text : `%${text}%`];
202
+ }
203
+ }
204
+ function columnFilterTuples(columns, filters) {
205
+ const out = [];
206
+ for (const column of columns) {
207
+ const raw = filters[column.fieldname];
208
+ if (raw === void 0) continue;
209
+ const tuple = columnFilterTuple(column, raw);
210
+ if (tuple) out.push(tuple);
211
+ }
212
+ return out;
213
+ }
214
+ function parseReportFiltersParam(raw) {
215
+ if (typeof raw !== "string" || !raw) return void 0;
216
+ const candidates = [raw];
217
+ try {
218
+ const decoded = decodeURIComponent(raw);
219
+ if (decoded !== raw) candidates.push(decoded);
220
+ } catch {}
221
+ for (const candidate of candidates) {
222
+ try {
223
+ const parsed = JSON.parse(candidate);
224
+ if (!Array.isArray(parsed)) continue;
225
+ const filters = [];
226
+ for (const tuple of parsed) {
227
+ if (Array.isArray(tuple) && tuple.length === 3 && typeof tuple[0] === "string" && typeof tuple[1] === "string") {
228
+ filters.push([tuple[0], tuple[1], tuple[2]]);
229
+ }
230
+ }
231
+ if (filters.length > 0) return filters;
232
+ } catch {}
233
+ }
234
+ return void 0;
235
+ }
236
+ const BACKTICK_FIELD_RE = /`tab([^`]+)`\.`([^`]+)`/;
237
+ function toDeskFieldExpr(doctype, fieldname) {
238
+ return `\`tab${doctype}\`.\`${fieldname}\``;
239
+ }
240
+ function parseDeskOrderBy(orderBy) {
241
+ if (typeof orderBy !== "string" || !orderBy.trim()) return void 0;
242
+ const [expr, direction] = orderBy.trim().split(/\s+/);
243
+ const backticked = expr.match(BACKTICK_FIELD_RE);
244
+ const field = backticked ? backticked[2] : expr.replace(/`/g, "");
245
+ if (!field) return void 0;
246
+ return {
247
+ field,
248
+ order: direction?.toLowerCase() === "asc" ? "asc" : "desc"
249
+ };
250
+ }
251
+ function toDeskReportSettings(doctype, config) {
252
+ const sort = config.sort ?? {
253
+ field: "modified",
254
+ order: "desc"
255
+ };
256
+ return {
257
+ fields: config.fieldnames.map(fieldname => [fieldname, doctype]),
258
+ filters: config.filters.map(([fieldname, operator, value]) => [doctype, fieldname, operator, value]),
259
+ order_by: `${toDeskFieldExpr(doctype, sort.field)} ${sort.order}`,
260
+ add_totals_row: config.addTotals ? 1 : 0,
261
+ page_length: config.pageSize ?? DEFAULT_REPORT_PAGE_SIZE,
262
+ column_widths: {},
263
+ group_by: config.groupBy ? {
264
+ group_by: toDeskFieldExpr(doctype, config.groupBy),
265
+ aggregate_function: "count",
266
+ aggregate_on: null
267
+ } : null
268
+ };
269
+ }
270
+ function fromDeskReportSettings(doctype, json) {
271
+ if (!json || typeof json !== "object") return void 0;
272
+ const raw = json;
273
+ const fieldnames = [];
274
+ if (Array.isArray(raw.fields)) {
275
+ for (const entry of raw.fields) {
276
+ if (typeof entry === "string") {
277
+ fieldnames.push(entry);
278
+ } else if (Array.isArray(entry) && typeof entry[0] === "string") {
279
+ const fieldDoctype = typeof entry[1] === "string" ? entry[1] : doctype;
280
+ if (fieldDoctype === doctype) fieldnames.push(entry[0]);
281
+ }
282
+ }
283
+ }
284
+ const filters = [];
285
+ if (Array.isArray(raw.filters)) {
286
+ for (const entry of raw.filters) {
287
+ if (!Array.isArray(entry)) continue;
288
+ if (entry.length === 4) {
289
+ const [filterDoctype, fieldname, operator, value] = entry;
290
+ if (filterDoctype === doctype && typeof fieldname === "string" && typeof operator === "string") {
291
+ filters.push([fieldname, operator, value]);
292
+ }
293
+ } else if (entry.length === 3 && typeof entry[0] === "string" && typeof entry[1] === "string") {
294
+ filters.push([entry[0], entry[1], entry[2]]);
295
+ }
296
+ }
297
+ }
298
+ const groupByRaw = raw.group_by;
299
+ const groupByExpr = typeof groupByRaw?.group_by === "string" ? groupByRaw.group_by : void 0;
300
+ const groupByMatch = groupByExpr?.match(BACKTICK_FIELD_RE);
301
+ return {
302
+ fieldnames,
303
+ filters,
304
+ sort: parseDeskOrderBy(raw.order_by),
305
+ pageSize: typeof raw.page_length === "number" && raw.page_length > 0 ? raw.page_length : void 0,
306
+ groupBy: groupByMatch ? groupByMatch[2] : null,
307
+ addTotals: raw.add_totals_row === 1
308
+ };
309
+ }
310
+ function isNullish(value) {
311
+ return value === null || value === void 0;
312
+ }
313
+ function compareCellValues(a, b) {
314
+ if (isNullish(a) && isNullish(b)) return 0;
315
+ if (isNullish(a)) return 1;
316
+ if (isNullish(b)) return -1;
317
+ if (typeof a === "number" && typeof b === "number") return a - b;
318
+ const left = String(a);
319
+ const right = String(b);
320
+ return left < right ? -1 : left > right ? 1 : 0;
321
+ }
322
+ function orderReportRows(rows, sort, groupBy) {
323
+ const direction = sort.order === "asc" ? 1 : -1;
324
+ const sorted = [...rows];
325
+ sorted.sort((a, b) => {
326
+ if (groupBy) {
327
+ const grouped = compareCellValues(a[groupBy], b[groupBy]);
328
+ if (grouped !== 0) return grouped;
329
+ }
330
+ const left = a[sort.field];
331
+ const right = b[sort.field];
332
+ const ordered = isNullish(left) || isNullish(right) ? compareCellValues(left, right) : direction * compareCellValues(left, right);
333
+ return ordered || compareCellValues(a.name, b.name);
334
+ });
335
+ return sorted;
336
+ }
337
+ function buildGridRows(orderedRows, pageStart, pageSize, groupBy) {
338
+ const page = orderedRows.slice(pageStart, pageStart + pageSize);
339
+ const out = [];
340
+ let previousGroup;
341
+ const counts = /* @__PURE__ */new Map();
342
+ if (groupBy) {
343
+ for (const row of orderedRows) {
344
+ const groupKey = String(row[groupBy] ?? "");
345
+ counts.set(groupKey, (counts.get(groupKey) ?? 0) + 1);
346
+ }
347
+ }
348
+ page.forEach((row, index) => {
349
+ if (groupBy) {
350
+ const groupKey = String(row[groupBy] ?? "");
351
+ if (previousGroup === void 0 || groupKey !== previousGroup) {
352
+ previousGroup = groupKey;
353
+ out.push({
354
+ kind: "group",
355
+ key: `group:${groupKey}:${pageStart + index}`,
356
+ value: row[groupBy],
357
+ count: counts.get(groupKey) ?? 0
358
+ });
359
+ }
360
+ }
361
+ out.push({
362
+ kind: "row",
363
+ key: row.name,
364
+ row,
365
+ index: pageStart + index + 1
366
+ });
367
+ });
368
+ return out;
369
+ }
370
+ function computeTotals(columns, rows) {
371
+ if (rows.length === 0) return [];
372
+ return columns.filter(column => REPORT_NUMERIC_FIELDTYPES.has(column.fieldtype)).map(column => ({
373
+ fieldname: column.fieldname,
374
+ fieldtype: column.fieldtype,
375
+ value: rows.reduce((sum, row) => sum + (Number(row[column.fieldname]) || 0), 0)
376
+ }));
377
+ }
378
+ function escapeCsvCell(value) {
379
+ if (value === null || value === void 0) return "";
380
+ const text = String(value);
381
+ return /[",\n]/.test(text) ? `"${text.replace(/"/g, '""')}"` : text;
382
+ }
383
+ function buildReportCsv(columns, rows) {
384
+ const lines = [columns.map(column => escapeCsvCell(column.label)).join(","), ...rows.map(row => columns.map(column => escapeCsvCell(row[column.fieldname])).join(","))];
385
+ return lines.join("\n");
386
+ }