@multiplatform.one/backoffice 7.28.1 → 7.29.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (269) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/desk/DeskSurface.native.js.map +1 -1
  3. package/dist/cjs/form/DocFormScreen.cjs +167 -224
  4. package/dist/cjs/form/DocFormScreen.native.js +182 -259
  5. package/dist/cjs/form/DocFormScreen.native.js.map +1 -1
  6. package/dist/cjs/i18n/en.cjs +1 -0
  7. package/dist/cjs/i18n/en.native.js +1 -0
  8. package/dist/cjs/i18n/en.native.js.map +1 -1
  9. package/dist/cjs/list/ListBulkActionsBar.cjs +30 -18
  10. package/dist/cjs/list/ListBulkActionsBar.native.js +43 -31
  11. package/dist/cjs/list/ListBulkActionsBar.native.js.map +1 -1
  12. package/dist/cjs/list/sidebar-section.cjs +15 -7
  13. package/dist/cjs/list/sidebar-section.native.js +16 -7
  14. package/dist/cjs/list/sidebar-section.native.js.map +1 -1
  15. package/dist/cjs/report/DoctypeReportView.cjs +20 -374
  16. package/dist/cjs/report/DoctypeReportView.native.js +23 -455
  17. package/dist/cjs/report/DoctypeReportView.native.js.map +1 -1
  18. package/dist/cjs/report/QueryReportScreen.cjs +33 -23
  19. package/dist/cjs/report/QueryReportScreen.native.js +33 -23
  20. package/dist/cjs/report/QueryReportScreen.native.js.map +1 -1
  21. package/dist/cjs/report/queryReportColumns.cjs +3 -105
  22. package/dist/cjs/report/queryReportColumns.native.js +2 -129
  23. package/dist/cjs/report/queryReportColumns.native.js.map +1 -1
  24. package/dist/cjs/report/queryReportFilterBar.cjs +3 -4
  25. package/dist/cjs/report/queryReportFilterBar.native.js +3 -4
  26. package/dist/cjs/report/queryReportFilterBar.native.js.map +1 -1
  27. package/dist/cjs/report/queryReportUrlState.cjs +2 -2
  28. package/dist/cjs/report/queryReportUrlState.native.js +2 -2
  29. package/dist/cjs/report/queryReportUrlState.native.js.map +1 -1
  30. package/dist/cjs/report/report-grid.cjs +2 -426
  31. package/dist/cjs/report/report-grid.native.js +1 -479
  32. package/dist/cjs/report/report-grid.native.js.map +1 -1
  33. package/dist/cjs/report/report-toolbar.cjs +2 -228
  34. package/dist/cjs/report/report-toolbar.native.js +1 -274
  35. package/dist/cjs/report/report-toolbar.native.js.map +1 -1
  36. package/dist/cjs/report/reportShapes.cjs +12 -383
  37. package/dist/cjs/report/reportShapes.native.js +12 -501
  38. package/dist/cjs/report/reportShapes.native.js.map +1 -1
  39. package/dist/cjs/report/reportViewModel.cjs +20 -360
  40. package/dist/cjs/report/reportViewModel.native.js +19 -627
  41. package/dist/cjs/report/reportViewModel.native.js.map +1 -1
  42. package/dist/cjs/report/savedReports.cjs +2 -106
  43. package/dist/cjs/report/savedReports.native.js +1 -132
  44. package/dist/cjs/report/savedReports.native.js.map +1 -1
  45. package/dist/cjs/report/useQueryReport.cjs +11 -219
  46. package/dist/cjs/report/useQueryReport.native.js +11 -244
  47. package/dist/cjs/report/useQueryReport.native.js.map +1 -1
  48. package/dist/cjs/shared/measures.cjs +3 -5
  49. package/dist/cjs/shared/measures.native.js +3 -5
  50. package/dist/cjs/shared/measures.native.js.map +1 -1
  51. package/dist/cjs/views/ReportView.cjs +3 -256
  52. package/dist/cjs/views/ReportView.native.js +3 -382
  53. package/dist/cjs/views/ReportView.native.js.map +1 -1
  54. package/dist/cjs/views/report-controls.cjs +6 -6
  55. package/dist/cjs/views/report-controls.native.js +6 -6
  56. package/dist/cjs/views/report-controls.native.js.map +1 -1
  57. package/dist/esm/desk/DeskSurface.mjs.map +1 -1
  58. package/dist/esm/desk/DeskSurface.native.js.map +1 -1
  59. package/dist/esm/form/DocFormScreen.mjs +169 -226
  60. package/dist/esm/form/DocFormScreen.mjs.map +1 -1
  61. package/dist/esm/form/DocFormScreen.native.js +184 -261
  62. package/dist/esm/form/DocFormScreen.native.js.map +1 -1
  63. package/dist/esm/i18n/en.mjs +1 -0
  64. package/dist/esm/i18n/en.mjs.map +1 -1
  65. package/dist/esm/i18n/en.native.js +1 -0
  66. package/dist/esm/i18n/en.native.js.map +1 -1
  67. package/dist/esm/list/ListBulkActionsBar.mjs +31 -19
  68. package/dist/esm/list/ListBulkActionsBar.mjs.map +1 -1
  69. package/dist/esm/list/ListBulkActionsBar.native.js +37 -25
  70. package/dist/esm/list/ListBulkActionsBar.native.js.map +1 -1
  71. package/dist/esm/list/sidebar-section.mjs +16 -8
  72. package/dist/esm/list/sidebar-section.mjs.map +1 -1
  73. package/dist/esm/list/sidebar-section.native.js +17 -8
  74. package/dist/esm/list/sidebar-section.native.js.map +1 -1
  75. package/dist/esm/report/DoctypeReportView.mjs +21 -375
  76. package/dist/esm/report/DoctypeReportView.mjs.map +1 -1
  77. package/dist/esm/report/DoctypeReportView.native.js +24 -456
  78. package/dist/esm/report/DoctypeReportView.native.js.map +1 -1
  79. package/dist/esm/report/QueryReportScreen.mjs +26 -16
  80. package/dist/esm/report/QueryReportScreen.mjs.map +1 -1
  81. package/dist/esm/report/QueryReportScreen.native.js +26 -16
  82. package/dist/esm/report/QueryReportScreen.native.js.map +1 -1
  83. package/dist/esm/report/queryReportColumns.mjs +1 -103
  84. package/dist/esm/report/queryReportColumns.mjs.map +1 -1
  85. package/dist/esm/report/queryReportColumns.native.js +1 -117
  86. package/dist/esm/report/queryReportColumns.native.js.map +1 -1
  87. package/dist/esm/report/queryReportFilterBar.mjs +1 -2
  88. package/dist/esm/report/queryReportFilterBar.mjs.map +1 -1
  89. package/dist/esm/report/queryReportFilterBar.native.js +1 -2
  90. package/dist/esm/report/queryReportFilterBar.native.js.map +1 -1
  91. package/dist/esm/report/queryReportUrlState.mjs +1 -1
  92. package/dist/esm/report/queryReportUrlState.native.js +1 -1
  93. package/dist/esm/report/report-grid.mjs +1 -425
  94. package/dist/esm/report/report-grid.mjs.map +1 -1
  95. package/dist/esm/report/report-grid.native.js +1 -468
  96. package/dist/esm/report/report-grid.native.js.map +1 -1
  97. package/dist/esm/report/report-toolbar.mjs +2 -228
  98. package/dist/esm/report/report-toolbar.mjs.map +1 -1
  99. package/dist/esm/report/report-toolbar.native.js +2 -264
  100. package/dist/esm/report/report-toolbar.native.js.map +1 -1
  101. package/dist/esm/report/reportShapes.mjs +2 -373
  102. package/dist/esm/report/reportShapes.mjs.map +1 -1
  103. package/dist/esm/report/reportShapes.native.js +2 -491
  104. package/dist/esm/report/reportShapes.native.js.map +1 -1
  105. package/dist/esm/report/reportViewModel.mjs +2 -342
  106. package/dist/esm/report/reportViewModel.mjs.map +1 -1
  107. package/dist/esm/report/reportViewModel.native.js +2 -610
  108. package/dist/esm/report/reportViewModel.native.js.map +1 -1
  109. package/dist/esm/report/savedReports.mjs +1 -105
  110. package/dist/esm/report/savedReports.mjs.map +1 -1
  111. package/dist/esm/report/savedReports.native.js +1 -132
  112. package/dist/esm/report/savedReports.native.js.map +1 -1
  113. package/dist/esm/report/useQueryReport.mjs +2 -210
  114. package/dist/esm/report/useQueryReport.mjs.map +1 -1
  115. package/dist/esm/report/useQueryReport.native.js +2 -235
  116. package/dist/esm/report/useQueryReport.native.js.map +1 -1
  117. package/dist/esm/shared/measures.mjs +1 -3
  118. package/dist/esm/shared/measures.mjs.map +1 -1
  119. package/dist/esm/shared/measures.native.js +1 -3
  120. package/dist/esm/shared/measures.native.js.map +1 -1
  121. package/dist/esm/views/ReportView.mjs +3 -256
  122. package/dist/esm/views/ReportView.mjs.map +1 -1
  123. package/dist/esm/views/ReportView.native.js +3 -382
  124. package/dist/esm/views/ReportView.native.js.map +1 -1
  125. package/dist/esm/views/report-controls.mjs +3 -3
  126. package/dist/esm/views/report-controls.mjs.map +1 -1
  127. package/dist/esm/views/report-controls.native.js +3 -3
  128. package/dist/esm/views/report-controls.native.js.map +1 -1
  129. package/dist/jsx/desk/DeskSurface.mjs.map +1 -1
  130. package/dist/jsx/desk/DeskSurface.native.js.map +1 -1
  131. package/dist/jsx/form/DocFormScreen.mjs +169 -226
  132. package/dist/jsx/form/DocFormScreen.mjs.map +1 -1
  133. package/dist/jsx/form/DocFormScreen.native.js +182 -259
  134. package/dist/jsx/form/DocFormScreen.native.js.map +1 -1
  135. package/dist/jsx/i18n/en.mjs +1 -0
  136. package/dist/jsx/i18n/en.mjs.map +1 -1
  137. package/dist/jsx/i18n/en.native.js +1 -0
  138. package/dist/jsx/i18n/en.native.js.map +1 -1
  139. package/dist/jsx/list/ListBulkActionsBar.mjs +31 -19
  140. package/dist/jsx/list/ListBulkActionsBar.mjs.map +1 -1
  141. package/dist/jsx/list/ListBulkActionsBar.native.js +43 -31
  142. package/dist/jsx/list/ListBulkActionsBar.native.js.map +1 -1
  143. package/dist/jsx/list/sidebar-section.mjs +16 -8
  144. package/dist/jsx/list/sidebar-section.mjs.map +1 -1
  145. package/dist/jsx/list/sidebar-section.native.js +16 -7
  146. package/dist/jsx/list/sidebar-section.native.js.map +1 -1
  147. package/dist/jsx/report/DoctypeReportView.mjs +21 -375
  148. package/dist/jsx/report/DoctypeReportView.mjs.map +1 -1
  149. package/dist/jsx/report/DoctypeReportView.native.js +23 -455
  150. package/dist/jsx/report/DoctypeReportView.native.js.map +1 -1
  151. package/dist/jsx/report/QueryReportScreen.mjs +26 -16
  152. package/dist/jsx/report/QueryReportScreen.mjs.map +1 -1
  153. package/dist/jsx/report/QueryReportScreen.native.js +33 -23
  154. package/dist/jsx/report/QueryReportScreen.native.js.map +1 -1
  155. package/dist/jsx/report/queryReportColumns.mjs +1 -103
  156. package/dist/jsx/report/queryReportColumns.mjs.map +1 -1
  157. package/dist/jsx/report/queryReportColumns.native.js +2 -129
  158. package/dist/jsx/report/queryReportColumns.native.js.map +1 -1
  159. package/dist/jsx/report/queryReportFilterBar.mjs +1 -2
  160. package/dist/jsx/report/queryReportFilterBar.mjs.map +1 -1
  161. package/dist/jsx/report/queryReportFilterBar.native.js +3 -4
  162. package/dist/jsx/report/queryReportFilterBar.native.js.map +1 -1
  163. package/dist/jsx/report/queryReportUrlState.mjs +1 -1
  164. package/dist/jsx/report/queryReportUrlState.native.js +2 -2
  165. package/dist/jsx/report/queryReportUrlState.native.js.map +1 -1
  166. package/dist/jsx/report/report-grid.mjs +1 -425
  167. package/dist/jsx/report/report-grid.mjs.map +1 -1
  168. package/dist/jsx/report/report-grid.native.js +1 -479
  169. package/dist/jsx/report/report-grid.native.js.map +1 -1
  170. package/dist/jsx/report/report-toolbar.mjs +2 -228
  171. package/dist/jsx/report/report-toolbar.mjs.map +1 -1
  172. package/dist/jsx/report/report-toolbar.native.js +1 -274
  173. package/dist/jsx/report/report-toolbar.native.js.map +1 -1
  174. package/dist/jsx/report/reportShapes.mjs +2 -373
  175. package/dist/jsx/report/reportShapes.mjs.map +1 -1
  176. package/dist/jsx/report/reportShapes.native.js +12 -501
  177. package/dist/jsx/report/reportShapes.native.js.map +1 -1
  178. package/dist/jsx/report/reportViewModel.mjs +2 -342
  179. package/dist/jsx/report/reportViewModel.mjs.map +1 -1
  180. package/dist/jsx/report/reportViewModel.native.js +19 -627
  181. package/dist/jsx/report/reportViewModel.native.js.map +1 -1
  182. package/dist/jsx/report/savedReports.mjs +1 -105
  183. package/dist/jsx/report/savedReports.mjs.map +1 -1
  184. package/dist/jsx/report/savedReports.native.js +1 -132
  185. package/dist/jsx/report/savedReports.native.js.map +1 -1
  186. package/dist/jsx/report/useQueryReport.mjs +2 -210
  187. package/dist/jsx/report/useQueryReport.mjs.map +1 -1
  188. package/dist/jsx/report/useQueryReport.native.js +11 -244
  189. package/dist/jsx/report/useQueryReport.native.js.map +1 -1
  190. package/dist/jsx/shared/measures.mjs +1 -3
  191. package/dist/jsx/shared/measures.mjs.map +1 -1
  192. package/dist/jsx/shared/measures.native.js +3 -5
  193. package/dist/jsx/shared/measures.native.js.map +1 -1
  194. package/dist/jsx/views/ReportView.mjs +3 -256
  195. package/dist/jsx/views/ReportView.mjs.map +1 -1
  196. package/dist/jsx/views/ReportView.native.js +3 -382
  197. package/dist/jsx/views/ReportView.native.js.map +1 -1
  198. package/dist/jsx/views/report-controls.mjs +3 -3
  199. package/dist/jsx/views/report-controls.mjs.map +1 -1
  200. package/dist/jsx/views/report-controls.native.js +6 -6
  201. package/dist/jsx/views/report-controls.native.js.map +1 -1
  202. package/package.json +12 -12
  203. package/src/backofficeScreens.designLaw.spec.ts +0 -5
  204. package/src/desk/DeskSurface.tsx +4 -7
  205. package/src/form/DocFormScreen.chrome.spec.ts +77 -0
  206. package/src/form/DocFormScreen.guest.screen.spec.tsx +175 -0
  207. package/src/form/DocFormScreen.rights.spec.tsx +7 -3
  208. package/src/form/DocFormScreen.tsx +214 -315
  209. package/src/i18n/en.ts +1 -0
  210. package/src/list/ListBulkActionsBar.rights.spec.tsx +134 -0
  211. package/src/list/ListBulkActionsBar.screen.spec.tsx +7 -1
  212. package/src/list/ListBulkActionsBar.tsx +76 -57
  213. package/src/list/ListFilterBar.screen.spec.tsx +14 -13
  214. package/src/list/sidebar-section.tsx +11 -3
  215. package/src/report/DoctypeReportView.tsx +28 -550
  216. package/src/report/QueryReportScreen.spec.tsx +75 -1
  217. package/src/report/QueryReportScreen.tsx +38 -22
  218. package/src/report/queryReportColumns.tsx +4 -123
  219. package/src/report/queryReportFilterBar.tsx +3 -5
  220. package/src/report/queryReportUrlState.ts +1 -1
  221. package/src/report/report-grid.tsx +4 -529
  222. package/src/report/report-toolbar.tsx +4 -308
  223. package/src/report/reportShapes.ts +25 -613
  224. package/src/report/reportShim.spec.ts +162 -0
  225. package/src/report/reportViewModel.ts +32 -605
  226. package/src/report/savedReports.ts +4 -161
  227. package/src/report/useQueryReport.ts +9 -347
  228. package/src/shared/measures.ts +3 -11
  229. package/src/views/ReportView.screen.spec.tsx +25 -20
  230. package/src/views/ReportView.tsx +7 -439
  231. package/src/views/report-controls.tsx +12 -20
  232. package/types/desk/DeskSurface.d.ts.map +1 -1
  233. package/types/form/DocFormScreen.d.ts +2 -2
  234. package/types/form/DocFormScreen.d.ts.map +1 -1
  235. package/types/i18n/en.d.ts +1 -0
  236. package/types/i18n/en.d.ts.map +1 -1
  237. package/types/list/ListBulkActionsBar.d.ts.map +1 -1
  238. package/types/list/sidebar-section.d.ts.map +1 -1
  239. package/types/report/DoctypeReportView.d.ts.map +1 -1
  240. package/types/report/QueryReportScreen.d.ts +1 -1
  241. package/types/report/QueryReportScreen.d.ts.map +1 -1
  242. package/types/report/queryReportColumns.d.ts +2 -11
  243. package/types/report/queryReportColumns.d.ts.map +1 -1
  244. package/types/report/queryReportFilterBar.d.ts +1 -1
  245. package/types/report/queryReportFilterBar.d.ts.map +1 -1
  246. package/types/report/queryReportUrlState.d.ts +1 -1
  247. package/types/report/queryReportUrlState.d.ts.map +1 -1
  248. package/types/report/report-grid.d.ts +2 -19
  249. package/types/report/report-grid.d.ts.map +1 -1
  250. package/types/report/report-toolbar.d.ts +2 -29
  251. package/types/report/report-toolbar.d.ts.map +1 -1
  252. package/types/report/reportShapes.d.ts +2 -115
  253. package/types/report/reportShapes.d.ts.map +1 -1
  254. package/types/report/reportViewModel.d.ts +2 -135
  255. package/types/report/reportViewModel.d.ts.map +1 -1
  256. package/types/report/savedReports.d.ts +2 -18
  257. package/types/report/savedReports.d.ts.map +1 -1
  258. package/types/report/useQueryReport.d.ts +2 -35
  259. package/types/report/useQueryReport.d.ts.map +1 -1
  260. package/types/shared/measures.d.ts +1 -2
  261. package/types/shared/measures.d.ts.map +1 -1
  262. package/types/views/ReportView.d.ts +3 -22
  263. package/types/views/ReportView.d.ts.map +1 -1
  264. package/types/views/report-controls.d.ts +2 -5
  265. package/types/views/report-controls.d.ts.map +1 -1
  266. package/src/report/report-grid.spec.tsx +0 -175
  267. package/src/report/report-toolbar.spec.tsx +0 -90
  268. package/src/report/reportShapes.spec.ts +0 -391
  269. package/src/report/reportViewModel.spec.ts +0 -393
@@ -1,308 +1,4 @@
1
- // The report view's ONE control row (audit: the old surface stacked three
2
- // toolbar bands with the column count shown twice). Left: column picker,
3
- // group-by, saved-report selector + save affordances. Right: filter chips
4
- // (?f= base filters + column-filter summary) and Export. Page size lives in
5
- // the footer pager (list-screen parity), not here.
6
- import {
7
- Chip,
8
- DropdownMenu,
9
- Popover,
10
- PopoverContent,
11
- XStack,
12
- YStack,
13
- } from "@multiplatform.one/components";
14
- import { Button, Input } from "@multiplatform.one/forms";
15
- import { useResolvedKnobs } from "@multiplatform.one/theme";
16
- import {
17
- ColumnsIcon,
18
- DownloadSimpleIcon,
19
- FloppyDiskIcon,
20
- RowsIcon,
21
- StackIcon,
22
- } from "@phosphor-icons/react";
23
- import React, { useState } from "react";
24
- import { useTranslation } from "react-i18next";
25
- import { BACKOFFICE_I18N_NAMESPACE } from "../i18n";
26
- import { filterTupleLabel } from "@multiplatform.one/frappe-ui";
27
- import type { FrappeFilters } from "../shared/types";
28
- import type { SavedReportSummary } from "./savedReports";
29
- import type { ReportColumnDef } from "./reportViewModel";
30
- import { dialogBodyMinWidth, overlayListMaxHeight } from "../shared/measures";
31
-
32
- export interface ReportToolbarProps {
33
- /** Every pickable column (reportColumnsFromMeta). */
34
- columns: readonly ReportColumnDef[];
35
- /** Selected (visible) fieldnames, in render order. */
36
- selected: readonly string[];
37
- onToggleColumn: (fieldname: string) => void;
38
- onResetColumns: () => void;
39
- groupBy: string | null;
40
- onGroupByChange: (fieldname: string | null) => void;
41
- /** Base filters (?f= deep link) — chips with a clear affordance. */
42
- baseFilters: FrappeFilters;
43
- onClearBaseFilters?: () => void;
44
- /** Count of active column-row filters (chip + clear-all). */
45
- columnFilterCount: number;
46
- onClearColumnFilters: () => void;
47
- savedReports: readonly SavedReportSummary[];
48
- /** Selected saved report name (null = unsaved/new). */
49
- currentReport: string | null;
50
- onSelectReport: (name: string | null) => void;
51
- /** Save under a (new or existing) name. */
52
- onSaveReport: (name: string) => void;
53
- onDeleteReport: (name: string) => void;
54
- onExport: () => void;
55
- exportDisabled?: boolean;
56
- }
57
-
58
- export function ReportToolbar({
59
- columns,
60
- selected,
61
- onToggleColumn,
62
- onResetColumns,
63
- groupBy,
64
- onGroupByChange,
65
- baseFilters,
66
- onClearBaseFilters,
67
- columnFilterCount,
68
- onClearColumnFilters,
69
- savedReports,
70
- currentReport,
71
- onSelectReport,
72
- onSaveReport,
73
- onDeleteReport,
74
- onExport,
75
- exportDisabled,
76
- }: ReportToolbarProps) {
77
- const { t } = useTranslation(BACKOFFICE_I18N_NAMESPACE);
78
- const { knobProps } = useResolvedKnobs();
79
- const [saveOpen, setSaveOpen] = useState(false);
80
- const [saveName, setSaveName] = useState("");
81
-
82
- const selectedSet = new Set(selected);
83
- const groupByColumn = groupBy
84
- ? columns.find((column) => column.fieldname === groupBy)
85
- : undefined;
86
- const currentSummary = currentReport
87
- ? savedReports.find((report) => report.name === currentReport)
88
- : undefined;
89
-
90
- const handleSaveAs = () => {
91
- const name = saveName.trim();
92
- if (!name) return;
93
- onSaveReport(name);
94
- setSaveOpen(false);
95
- setSaveName("");
96
- };
97
-
98
- return (
99
- <XStack
100
- alignItems="center"
101
- flexWrap="wrap"
102
- gap="$2"
103
- {...knobProps.panelPadding}
104
- paddingVertical="$2"
105
- >
106
- {/* Column add/remove picker (persisted per doctype) */}
107
- <DropdownMenu>
108
- <DropdownMenu.Trigger asChild>
109
- <Button size="$3" chromeless icon={ColumnsIcon}>
110
- {t("report.columns", {
111
- defaultValue: "Columns ({{enabled}}/{{total}})",
112
- enabled: selected.length,
113
- total: columns.length,
114
- })}
115
- </Button>
116
- </DropdownMenu.Trigger>
117
- <DropdownMenu.Content maxHeight={overlayListMaxHeight}>
118
- <DropdownMenu.Label>{t("report.pickColumns", "Report columns")}</DropdownMenu.Label>
119
- {columns.map((column) => {
120
- const isSelected = selectedSet.has(column.fieldname);
121
- const lastSelected = isSelected && selected.length === 1;
122
- return (
123
- <DropdownMenu.CheckboxItem
124
- key={column.fieldname}
125
- checked={isSelected}
126
- disabled={lastSelected}
127
- disabledReason={
128
- lastSelected
129
- ? t("report.lastColumn", "At least one column stays visible")
130
- : undefined
131
- }
132
- onCheckedChange={() => onToggleColumn(column.fieldname)}
133
- >
134
- {column.label}
135
- </DropdownMenu.CheckboxItem>
136
- );
137
- })}
138
- <DropdownMenu.Separator />
139
- <DropdownMenu.Item onSelect={onResetColumns}>
140
- {t("report.resetColumns", "Reset to default columns")}
141
- </DropdownMenu.Item>
142
- </DropdownMenu.Content>
143
- </DropdownMenu>
144
-
145
- {/* Group-by (rendered as in-grid group header rows) */}
146
- <DropdownMenu>
147
- <DropdownMenu.Trigger asChild>
148
- <Button size="$3" chromeless icon={RowsIcon}>
149
- {groupByColumn
150
- ? t("report.groupByActive", {
151
- defaultValue: "Group by: {{field}}",
152
- field: groupByColumn.label,
153
- })
154
- : t("report.groupBy", "Group by")}
155
- </Button>
156
- </DropdownMenu.Trigger>
157
- <DropdownMenu.Content maxHeight={overlayListMaxHeight}>
158
- <DropdownMenu.CheckboxItem
159
- checked={!groupBy}
160
- closeOnSelect
161
- onCheckedChange={() => onGroupByChange(null)}
162
- >
163
- {t("report.groupByNone", "No grouping")}
164
- </DropdownMenu.CheckboxItem>
165
- <DropdownMenu.Separator />
166
- {columns.map((column) => (
167
- <DropdownMenu.CheckboxItem
168
- key={column.fieldname}
169
- checked={groupBy === column.fieldname}
170
- closeOnSelect
171
- onCheckedChange={() => onGroupByChange(column.fieldname)}
172
- >
173
- {column.label}
174
- </DropdownMenu.CheckboxItem>
175
- ))}
176
- </DropdownMenu.Content>
177
- </DropdownMenu>
178
-
179
- {/* Saved-report selector (desk "Select Report": Report Builder docs) */}
180
- <DropdownMenu>
181
- <DropdownMenu.Trigger asChild>
182
- <Button size="$3" chromeless icon={StackIcon}>
183
- {currentSummary
184
- ? t("report.savedReportActive", {
185
- defaultValue: "Report: {{name}}",
186
- name: currentSummary.reportName,
187
- })
188
- : t("report.savedReport", "Select Report")}
189
- </Button>
190
- </DropdownMenu.Trigger>
191
- <DropdownMenu.Content maxHeight={overlayListMaxHeight}>
192
- <DropdownMenu.CheckboxItem
193
- checked={!currentReport}
194
- closeOnSelect
195
- onCheckedChange={() => onSelectReport(null)}
196
- >
197
- {t("report.savedReportNone", "New report (unsaved)")}
198
- </DropdownMenu.CheckboxItem>
199
- {savedReports.length > 0 && <DropdownMenu.Separator />}
200
- {savedReports.map((report) => (
201
- <DropdownMenu.CheckboxItem
202
- key={report.name}
203
- checked={currentReport === report.name}
204
- closeOnSelect
205
- onCheckedChange={() => onSelectReport(report.name)}
206
- >
207
- {report.reportName}
208
- </DropdownMenu.CheckboxItem>
209
- ))}
210
- {currentSummary && (
211
- <>
212
- <DropdownMenu.Separator />
213
- <DropdownMenu.Item destructive onSelect={() => onDeleteReport(currentSummary.name)}>
214
- {t("report.deleteReport", {
215
- defaultValue: "Delete “{{name}}”",
216
- name: currentSummary.reportName,
217
- })}
218
- </DropdownMenu.Item>
219
- </>
220
- )}
221
- </DropdownMenu.Content>
222
- </DropdownMenu>
223
-
224
- {/* Save (overwrite the selected report) + Save As (new Report doc) */}
225
- {currentSummary && (
226
- <Button size="$3" icon={FloppyDiskIcon} onPress={() => onSaveReport(currentSummary.name)}>
227
- {t("report.save", "Save")}
228
- </Button>
229
- )}
230
- <Popover placement="bottom-start" open={saveOpen} onOpenChange={setSaveOpen}>
231
- <Popover.Trigger asChild>
232
- <Button
233
- size="$3"
234
- chromeless={!!currentSummary}
235
- icon={currentSummary ? undefined : FloppyDiskIcon}
236
- >
237
- {t("report.saveAs", "Save As…")}
238
- </Button>
239
- </Popover.Trigger>
240
- {/* House overlay surface (elevatedSurface knob recipe) — raw
241
- Popover.Content has no `elevate` variant in tamagui 2.0, so the
242
- bare boolean leaked to the DOM (LC-46 class). */}
243
- <PopoverContent {...knobProps.panelPadding}>
244
- <Popover.Arrow borderWidth={1} borderColor="$borderColor" />
245
- <XStack gap="$2" alignItems="center" minWidth={dialogBodyMinWidth}>
246
- <YStack flex={1} minWidth={0}>
247
- <Input
248
- size="$3"
249
- compact
250
- value={saveName}
251
- onChangeText={setSaveName}
252
- placeholder={t("report.reportNamePlaceholder", "New report name")}
253
- inputProps={{
254
- "aria-label": t("report.reportNamePlaceholder", "New report name"),
255
- }}
256
- />
257
- </YStack>
258
- <Button
259
- size="$3"
260
- accent
261
- disabled={!saveName.trim()}
262
- disabledReason={t("report.saveNeedsName", "Name the report to save it")}
263
- disabledReasonPlacement="inline"
264
- onPress={handleSaveAs}
265
- >
266
- {t("report.save", "Save")}
267
- </Button>
268
- </XStack>
269
- </PopoverContent>
270
- </Popover>
271
-
272
- <XStack flex={1} />
273
-
274
- {/* Base filter chips (?f= deep link) */}
275
- {baseFilters.map((tuple, index) => (
276
- <Chip key={`${tuple[0]}-${index}`} size="$2" variant="subtle" color="gray">
277
- {filterTupleLabel([...columns], tuple)}
278
- </Chip>
279
- ))}
280
- {onClearBaseFilters && baseFilters.length > 0 && (
281
- <Button size="$3" chromeless onPress={onClearBaseFilters}>
282
- {t("report.clearFilters", "Clear filters")}
283
- </Button>
284
- )}
285
-
286
- {/* Column filter-row summary + clear-all */}
287
- {columnFilterCount > 0 && (
288
- <Button size="$3" chromeless onPress={onClearColumnFilters}>
289
- {t("report.clearColumnFilters", {
290
- defaultValue: "Clear column filters ({{count}})",
291
- count: columnFilterCount,
292
- })}
293
- </Button>
294
- )}
295
-
296
- <Button
297
- size="$3"
298
- icon={DownloadSimpleIcon}
299
- disabled={exportDisabled}
300
- disabledReason={exportDisabled ? t("report.exportEmpty", "No rows to export") : undefined}
301
- disabledReasonPlacement="inline"
302
- onPress={onExport}
303
- >
304
- {t("report.export", "Export CSV")}
305
- </Button>
306
- </XStack>
307
- );
308
- }
1
+ // The report view's toolbar lives in @multiplatform.one/frappe-ui as
2
+ // ReportViewToolbar (MPO-15, GL-28); this path keeps handing out its old name.
3
+ export { ReportViewToolbar as ReportToolbar } from "@multiplatform.one/frappe-ui";
4
+ export type { ReportViewToolbarProps as ReportToolbarProps } from "@multiplatform.one/frappe-ui";