@gisce/react-ooui 2.0.0-alpha.62 → 2.0.0-alpha.64

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 (245) hide show
  1. package/dist/react-ooui.es.js +1 -1
  2. package/dist/react-ooui.es.js.map +1 -1
  3. package/package.json +7 -9
  4. package/src/ConnectionProvider.ts +0 -16
  5. package/src/__tests__/iconMapper.test.ts +0 -30
  6. package/src/__tests__/searchFilterHelper.spec.ts +0 -386
  7. package/src/actionbar/ActionButton.tsx +0 -40
  8. package/src/actionbar/AttachmentsButton.tsx +0 -132
  9. package/src/actionbar/AttachmentsButtonWrapper.tsx +0 -157
  10. package/src/actionbar/ButtonWithBadge.tsx +0 -44
  11. package/src/actionbar/ChangeViewButton.tsx +0 -137
  12. package/src/actionbar/DashboardActionBar.tsx +0 -63
  13. package/src/actionbar/DropdownButton.tsx +0 -124
  14. package/src/actionbar/FormActionBar.tsx +0 -491
  15. package/src/actionbar/GraphActionBar.tsx +0 -67
  16. package/src/actionbar/NewButton.tsx +0 -46
  17. package/src/actionbar/SearchBar.tsx +0 -73
  18. package/src/actionbar/TreeActionBar.tsx +0 -383
  19. package/src/common/ButtonWithTooltip.tsx +0 -18
  20. package/src/common/DatePicker.tsx +0 -98
  21. package/src/common/Field.tsx +0 -93
  22. package/src/common/SelectAllRecordsRow.tsx +0 -94
  23. package/src/common/TimePicker.tsx +0 -38
  24. package/src/context/ActionViewContext.tsx +0 -213
  25. package/src/context/ConfigContext.tsx +0 -28
  26. package/src/context/ContentRootContext.tsx +0 -461
  27. package/src/context/DashboardActionContext.tsx +0 -44
  28. package/src/context/FormContext.tsx +0 -79
  29. package/src/context/FormModalContext.tsx +0 -28
  30. package/src/context/LocaleContext.tsx +0 -50
  31. package/src/context/One2manyContext.tsx +0 -45
  32. package/src/context/TabManagerContext.tsx +0 -117
  33. package/src/helpers/containerHelper.ts +0 -145
  34. package/src/helpers/dayjs.ts +0 -21
  35. package/src/helpers/dynamicColumnsHelper.ts +0 -73
  36. package/src/helpers/errorHelper.ts +0 -27
  37. package/src/helpers/filesHelper.ts +0 -41
  38. package/src/helpers/formHelper.ts +0 -301
  39. package/src/helpers/iconMapper.ts +0 -164
  40. package/src/helpers/logInfoHelper.tsx +0 -30
  41. package/src/helpers/one2manyHelper.ts +0 -194
  42. package/src/helpers/searchHelper.ts +0 -196
  43. package/src/helpers/timeHelper.ts +0 -58
  44. package/src/helpers/treeHelper.tsx +0 -226
  45. package/src/helpers/viewHelper.ts +0 -23
  46. package/src/hooks/useEffectDebugger.ts +0 -43
  47. package/src/hooks/useExport.ts +0 -439
  48. package/src/hooks/useFetchViews.ts +0 -0
  49. package/src/hooks/useSearch.ts +0 -434
  50. package/src/hooks/useWindowDimensions.ts +0 -33
  51. package/src/index.ts +0 -168
  52. package/src/locales/ca_ES.tsx +0 -99
  53. package/src/locales/en_US.tsx +0 -96
  54. package/src/locales/es_ES.tsx +0 -101
  55. package/src/stories/Binary.stories.tsx +0 -23
  56. package/src/stories/Boolean.stories.tsx +0 -22
  57. package/src/stories/Button.stories.tsx +0 -130
  58. package/src/stories/Char.stories.tsx +0 -76
  59. package/src/stories/FiberGrid.stories.tsx +0 -109
  60. package/src/stories/Float.stories.tsx +0 -22
  61. package/src/stories/FloatTime.stories.tsx +0 -32
  62. package/src/stories/Image.stories.tsx +0 -25
  63. package/src/stories/Integer.stories.tsx +0 -22
  64. package/src/stories/Label.stories.tsx +0 -100
  65. package/src/stories/Many2one.stories.tsx +0 -31
  66. package/src/stories/One2many.stories.tsx +0 -288
  67. package/src/stories/ProgressBar.stories.tsx +0 -22
  68. package/src/stories/Reference.stories.tsx +0 -43
  69. package/src/stories/Selection.stories.tsx +0 -34
  70. package/src/stories/Separator.stories.tsx +0 -53
  71. package/src/stories/Text.stories.tsx +0 -35
  72. package/src/stories/Time.stories.tsx +0 -31
  73. package/src/stories/Utils.stories.tsx +0 -14
  74. package/src/stories/containers/Group.stories.tsx +0 -84
  75. package/src/stories/containers/NewLine.stories.tsx +0 -52
  76. package/src/stories/containers/Notebook.stories.tsx +0 -188
  77. package/src/stories/custom/Avatar.stories.tsx +0 -22
  78. package/src/stories/custom/ButtonGroup.stories.tsx +0 -74
  79. package/src/stories/custom/CodeEditor.stories.tsx +0 -25
  80. package/src/stories/custom/Comments.stories.tsx +0 -197
  81. package/src/stories/custom/Indicator.stories.tsx +0 -36
  82. package/src/stories/custom/Markdown.stories.tsx +0 -38
  83. package/src/stories/custom/MultiCheckbox.stories.tsx +0 -60
  84. package/src/stories/custom/Radio.stories.tsx +0 -68
  85. package/src/stories/custom/Steps.stories.tsx +0 -43
  86. package/src/stories/custom/Switch.stories.tsx +0 -23
  87. package/src/stories/custom/Tag.stories.tsx +0 -66
  88. package/src/stories/custom/Tags.stories.tsx +0 -74
  89. package/src/stories/dashboard/Dashboard.stories.tsx +0 -23
  90. package/src/stories/dashboard/DashboardGrid.stories.tsx +0 -43
  91. package/src/stories/forms/ActivacioContracteForm.stories.tsx +0 -25
  92. package/src/stories/forms/Attachment.stories.tsx +0 -24
  93. package/src/stories/forms/CUPSForm.stories.tsx +0 -25
  94. package/src/stories/forms/Company.stories.tsx +0 -25
  95. package/src/stories/forms/CrmCaseForm.stories.tsx +0 -25
  96. package/src/stories/forms/Documents.stories.tsx +0 -25
  97. package/src/stories/forms/FormWithGridFiber.stories.tsx +0 -25
  98. package/src/stories/forms/FormWithLinks.stories.tsx +0 -30
  99. package/src/stories/forms/Lead.stories.tsx +0 -25
  100. package/src/stories/forms/ModContractForm.stories.tsx +0 -26
  101. package/src/stories/forms/PartnersForm.stories.tsx +0 -25
  102. package/src/stories/forms/PolissaForm.stories.tsx +0 -25
  103. package/src/stories/forms/PreferencesForm.stories.tsx +0 -691
  104. package/src/stories/forms/Signatures.stories.tsx +0 -25
  105. package/src/stories/forms/Switching.stories.tsx +0 -25
  106. package/src/stories/graphs/GraphIndicator.stories.tsx +0 -20
  107. package/src/stories/graphs/PieGraph.stories.tsx +0 -78
  108. package/src/stories/mocks/index.ts +0 -46
  109. package/src/stories/mocks/mockProvider.ts +0 -189
  110. package/src/stories/mocks/models/activacioContracte.ts +0 -112
  111. package/src/stories/mocks/models/attachment.ts +0 -1326
  112. package/src/stories/mocks/models/butlleti.ts +0 -296
  113. package/src/stories/mocks/models/company.ts +0 -135
  114. package/src/stories/mocks/models/crm_case.ts +0 -595
  115. package/src/stories/mocks/models/cups.ts +0 -937
  116. package/src/stories/mocks/models/document.ts +0 -223
  117. package/src/stories/mocks/models/factura.ts +0 -2713
  118. package/src/stories/mocks/models/form_with_gridfiber.ts +0 -141
  119. package/src/stories/mocks/models/hist_autoconsum.ts +0 -146
  120. package/src/stories/mocks/models/lead.ts +0 -2101
  121. package/src/stories/mocks/models/modcontractual.ts +0 -952
  122. package/src/stories/mocks/models/partner.ts +0 -1340
  123. package/src/stories/mocks/models/polissa.ts +0 -3127
  124. package/src/stories/mocks/models/res_partner_category.ts +0 -15
  125. package/src/stories/mocks/models/signatura.ts +0 -558
  126. package/src/stories/mocks/models/switching.ts +0 -767
  127. package/src/stories/modals/FormModal.stories.tsx +0 -36
  128. package/src/stories/modals/SearchModal.stories.tsx +0 -37
  129. package/src/stories/trees/FacturesTree.stories.tsx +0 -16
  130. package/src/stories/ui/ActionBar.stories.tsx +0 -21
  131. package/src/stories/ui/FavouriteButton.stories.tsx +0 -16
  132. package/src/stories/ui/GoToResourceModal.stories.tsx +0 -25
  133. package/src/stories/views/ActionView.stories.tsx +0 -28
  134. package/src/stories/views/SearchTree.stories.tsx +0 -1064
  135. package/src/stories/views/Tab.stories.tsx +0 -93
  136. package/src/stories/views/TabsAndContent.stories.tsx +0 -88
  137. package/src/stories/views/Tree.stories.jsx +0 -178
  138. package/src/stories/views/searchFilter/DateRangePicker.stories.tsx +0 -22
  139. package/src/stories/views/searchFilter/DateTimeRangePicker.stories.tsx +0 -23
  140. package/src/stories/views/searchFilter/PairFields.stories.tsx +0 -23
  141. package/src/stories/views/searchFilter/SearchFilter.stories.tsx +0 -165
  142. package/src/stories/views/searchFilter/examples/PartnersSearchFilter.stories.tsx +0 -409
  143. package/src/types/index.ts +0 -392
  144. package/src/ui/ActionErrorDialog.tsx +0 -24
  145. package/src/ui/ConfirmDialog.tsx +0 -28
  146. package/src/ui/ErrorAlert.tsx +0 -37
  147. package/src/ui/FavouriteButton.tsx +0 -271
  148. package/src/ui/FormErrorsDialog.tsx +0 -17
  149. package/src/ui/GenericErrorDialog.tsx +0 -16
  150. package/src/ui/GoToResourceModal.tsx +0 -76
  151. package/src/ui/InfoDialog.tsx +0 -13
  152. package/src/ui/RefreshItemDialog.tsx +0 -29
  153. package/src/ui/RemoveItemDialog.tsx +0 -20
  154. package/src/ui/TitleHeader.tsx +0 -117
  155. package/src/ui/UnlinkItemDialog.tsx +0 -20
  156. package/src/ui/UnsavedChangesDialog.tsx +0 -29
  157. package/src/ui/WarningDialog.tsx +0 -17
  158. package/src/views/ActionView.tsx +0 -526
  159. package/src/views/CurrentTabContent.tsx +0 -21
  160. package/src/views/RootView.tsx +0 -509
  161. package/src/views/TabContent.tsx +0 -31
  162. package/src/views/TabSelector.tsx +0 -31
  163. package/src/views/Welcome.tsx +0 -18
  164. package/src/views/actionViews/DashboardActionView.tsx +0 -52
  165. package/src/views/actionViews/FormActionView.tsx +0 -70
  166. package/src/views/actionViews/GraphActionView.tsx +0 -152
  167. package/src/views/actionViews/TreeActionView.tsx +0 -87
  168. package/src/views/tabs/Tab.tsx +0 -82
  169. package/src/widgets/WidgetFactory.tsx +0 -142
  170. package/src/widgets/base/Binary.tsx +0 -145
  171. package/src/widgets/base/Boolean.tsx +0 -44
  172. package/src/widgets/base/Button.tsx +0 -77
  173. package/src/widgets/base/Char.tsx +0 -157
  174. package/src/widgets/base/Date.tsx +0 -12
  175. package/src/widgets/base/DateTime.tsx +0 -12
  176. package/src/widgets/base/Email.tsx +0 -27
  177. package/src/widgets/base/Float.tsx +0 -38
  178. package/src/widgets/base/FloatTime.tsx +0 -73
  179. package/src/widgets/base/Image.tsx +0 -120
  180. package/src/widgets/base/Integer.tsx +0 -55
  181. package/src/widgets/base/Label.tsx +0 -56
  182. package/src/widgets/base/LinkInput.tsx +0 -106
  183. package/src/widgets/base/MultiSelection.tsx +0 -90
  184. package/src/widgets/base/ProgressBar.tsx +0 -38
  185. package/src/widgets/base/Reference.tsx +0 -115
  186. package/src/widgets/base/ReferenceTree.tsx +0 -62
  187. package/src/widgets/base/Selection.tsx +0 -71
  188. package/src/widgets/base/Separator.tsx +0 -25
  189. package/src/widgets/base/Text.tsx +0 -162
  190. package/src/widgets/base/Time.tsx +0 -40
  191. package/src/widgets/base/Url.tsx +0 -26
  192. package/src/widgets/base/many2one/Many2one.tsx +0 -322
  193. package/src/widgets/base/many2one/Many2oneSuffix.tsx +0 -232
  194. package/src/widgets/base/many2one/Many2oneSuffixModal.tsx +0 -42
  195. package/src/widgets/base/many2one/Many2oneTree.tsx +0 -18
  196. package/src/widgets/base/one2many/One2many.tsx +0 -100
  197. package/src/widgets/base/one2many/One2manyInput.tsx +0 -724
  198. package/src/widgets/base/one2many/One2manyTopBar.tsx +0 -158
  199. package/src/widgets/containers/Container.tsx +0 -99
  200. package/src/widgets/containers/Group.tsx +0 -37
  201. package/src/widgets/containers/Notebook.tsx +0 -52
  202. package/src/widgets/custom/Avatar.tsx +0 -40
  203. package/src/widgets/custom/ButtonGroup.tsx +0 -169
  204. package/src/widgets/custom/CodeEditor.tsx +0 -32
  205. package/src/widgets/custom/Comments.tsx +0 -147
  206. package/src/widgets/custom/FiberGrid.tsx +0 -48
  207. package/src/widgets/custom/Indicator.tsx +0 -66
  208. package/src/widgets/custom/Markdown.tsx +0 -32
  209. package/src/widgets/custom/MultiCheckbox.tsx +0 -165
  210. package/src/widgets/custom/Radio.tsx +0 -47
  211. package/src/widgets/custom/Steps.tsx +0 -56
  212. package/src/widgets/custom/Switch.tsx +0 -26
  213. package/src/widgets/custom/Tag.tsx +0 -53
  214. package/src/widgets/custom/Tags.tsx +0 -164
  215. package/src/widgets/custom/Timeline.tsx +0 -196
  216. package/src/widgets/modals/ExportModal.tsx +0 -75
  217. package/src/widgets/modals/FormModal.tsx +0 -125
  218. package/src/widgets/modals/SearchModal.tsx +0 -130
  219. package/src/widgets/modals/TranslationModal.tsx +0 -202
  220. package/src/widgets/views/Dashboard/Dashboard.tsx +0 -381
  221. package/src/widgets/views/Dashboard/DashboardForm.tsx +0 -30
  222. package/src/widgets/views/Dashboard/DashboardTree.tsx +0 -238
  223. package/src/widgets/views/Dashboard/dashboardHelper.ts +0 -79
  224. package/src/widgets/views/DashboardGrid/DashboardGrid.tsx +0 -53
  225. package/src/widgets/views/DashboardGrid/DashboardGrid.types.ts +0 -4
  226. package/src/widgets/views/DashboardGrid/DashboardGridItem.tsx +0 -62
  227. package/src/widgets/views/DashboardGrid/DashboardGridItem.types.ts +0 -10
  228. package/src/widgets/views/DashboardGrid/index.ts +0 -4
  229. package/src/widgets/views/Form.tsx +0 -1152
  230. package/src/widgets/views/Graph/Graph.tsx +0 -145
  231. package/src/widgets/views/Graph/GraphChart.tsx +0 -113
  232. package/src/widgets/views/Graph/GraphDefaults.ts +0 -170
  233. package/src/widgets/views/Graph/GraphIndicator.tsx +0 -421
  234. package/src/widgets/views/Graph/useGraphData.tsx +0 -176
  235. package/src/widgets/views/SearchTree.tsx +0 -367
  236. package/src/widgets/views/Tree/Tree.tsx +0 -295
  237. package/src/widgets/views/Tree/index.ts +0 -1
  238. package/src/widgets/views/Tree/treeComponents.tsx +0 -283
  239. package/src/widgets/views/searchFilter/DateRangePicker.tsx +0 -16
  240. package/src/widgets/views/searchFilter/DateTimeRangePicker.tsx +0 -87
  241. package/src/widgets/views/searchFilter/PairFields.tsx +0 -56
  242. package/src/widgets/views/searchFilter/SearchBottomBar.tsx +0 -54
  243. package/src/widgets/views/searchFilter/SearchField.tsx +0 -63
  244. package/src/widgets/views/searchFilter/SearchFilter.tsx +0 -160
  245. package/src/widgets/views/searchFilter/SearchParams.tsx +0 -35
@@ -1,509 +0,0 @@
1
- import React, {
2
- useState,
3
- forwardRef,
4
- useImperativeHandle,
5
- useRef,
6
- } from "react";
7
- import { ConnectionProvider, ContentRootProvider, FormView } from "..";
8
- import { v4 as uuidv4 } from "uuid";
9
- import Welcome from "./Welcome";
10
- import TabManagerProvider from "@/context/TabManagerContext";
11
- import ActionView from "./ActionView";
12
- import { parseContext } from "@gisce/ooui";
13
- import LocaleContextProvider, { tForLang } from "@/context/LocaleContext";
14
- import { ShortcutApi } from "@/ui/FavouriteButton";
15
- import showErrorDialog from "@/ui/ActionErrorDialog";
16
- import { InitialViewData, ViewType } from "@/types";
17
- import { transformPlainMany2Ones } from "@/helpers/formHelper";
18
-
19
- type RootViewProps = {
20
- children: React.ReactNode;
21
- globalValues?: any;
22
- rootContext?: any;
23
- lang: string;
24
- };
25
-
26
- export type ActionInfo = {
27
- id: number;
28
- type: string;
29
- };
30
-
31
- function RootView(props: RootViewProps, ref: any) {
32
- const { children, globalValues = {}, rootContext = {}, lang } = props;
33
- const [activeKey, setActiveKey] = useState<string>("welcome");
34
-
35
- const [tabs, setTabs] = useState<any>([
36
- {
37
- title: tForLang("welcome", lang),
38
- key: "welcome",
39
- closable: true,
40
- content: <Welcome />,
41
- },
42
- ]);
43
- const tabViewsCloseFunctions = useRef(new Map<string, any>());
44
- const contentRootProvider = useRef();
45
-
46
- useImperativeHandle(ref, () => ({
47
- retrieveAndOpenAction,
48
- openShortcut,
49
- }));
50
-
51
- function remove(key: string) {
52
- if (key === activeKey) {
53
- const currentIndex = tabs.findIndex((tab: any) => tab.key === key);
54
-
55
- if (tabs[currentIndex - 1]) {
56
- setActiveKey(tabs[currentIndex - 1].key);
57
- }
58
- if (tabs[currentIndex + 1]) {
59
- setActiveKey(tabs[currentIndex + 1].key);
60
- }
61
- }
62
-
63
- setTabs(tabs.filter((tab: any) => tab.key !== key));
64
- tabViewsCloseFunctions.current.delete(key);
65
- }
66
-
67
- function registerViewCloseFn({
68
- tabKey,
69
- canWeClose,
70
- }: {
71
- tabKey: string;
72
- canWeClose: any;
73
- }) {
74
- tabViewsCloseFunctions.current.set(tabKey, canWeClose);
75
- }
76
-
77
- async function retrieveAndOpenAction({
78
- action,
79
- values,
80
- forced_values,
81
- initialViewType,
82
- res_id,
83
- domain = [],
84
- }: {
85
- action: string;
86
- values?: any;
87
- forced_values?: any;
88
- initialViewType?: ViewType;
89
- res_id?: number;
90
- domain?: any;
91
- }) {
92
- const dataForAction = await ConnectionProvider.getHandler().getActionData({
93
- action,
94
- context: rootContext,
95
- });
96
-
97
- if (dataForAction.type === "ir.actions.wizard") {
98
- showErrorDialog("Action type not supported");
99
- return;
100
- }
101
-
102
- const [action_type, action_id_string] = action.split(",");
103
- const action_id = parseInt(action_id_string);
104
-
105
- const parsedContext = parseContext({
106
- context: dataForAction.context,
107
- values: globalValues,
108
- fields: {},
109
- });
110
-
111
- const parsedDomain = dataForAction.domain
112
- ? await ConnectionProvider.getHandler().evalDomain({
113
- domain: dataForAction.domain,
114
- values: globalValues,
115
- context: { ...rootContext, ...parsedContext },
116
- })
117
- : [];
118
-
119
- const {
120
- res_model: model,
121
- views,
122
- name: title,
123
- target,
124
- view_type,
125
- limit,
126
- } = dataForAction;
127
-
128
- const treeExpandable = view_type === "tree";
129
-
130
- const finalViews = [];
131
-
132
- for (const viewArray of views) {
133
- const [id, viewType] = viewArray;
134
-
135
- if (!id) {
136
- if (viewType === "dashboard") {
137
- finalViews.push([undefined, "dashboard"]);
138
- } else {
139
- const { view_id } = await ConnectionProvider.getHandler().getView({
140
- model,
141
- type: viewType,
142
- id,
143
- context: { ...rootContext, ...parsedContext },
144
- });
145
- finalViews.push([view_id, viewType]);
146
- }
147
- } else {
148
- finalViews.push(viewArray);
149
- }
150
- }
151
-
152
- let initialView;
153
-
154
- if (initialViewType) {
155
- const [id, type] = finalViews.find(
156
- ([_, type]) => type === initialViewType,
157
- );
158
- initialView = { id, type };
159
- } else {
160
- const [id, type] = finalViews[0];
161
- initialView = { id, type };
162
- }
163
-
164
- openAction({
165
- domain: [...parsedDomain, ...domain],
166
- context: { ...rootContext, ...parsedContext },
167
- model,
168
- views: finalViews,
169
- title,
170
- target,
171
- initialView,
172
- action_type,
173
- action_id,
174
- values,
175
- forced_values,
176
- res_id,
177
- treeExpandable,
178
- limit,
179
- });
180
- }
181
-
182
- function addNewTab({
183
- title,
184
- content,
185
- key,
186
- action,
187
- }: {
188
- title: string;
189
- content: any;
190
- key: string;
191
- action?: ActionInfo;
192
- }) {
193
- let newTabs = [...tabs];
194
-
195
- if (tabs.length === 1 && tabs[0].key === "welcome") {
196
- newTabs = [...tabs.filter((tab: any) => tab.key !== "welcome")];
197
- }
198
-
199
- setTabs([
200
- ...newTabs,
201
- {
202
- title,
203
- key,
204
- closable: true,
205
- content,
206
- action,
207
- },
208
- ]);
209
-
210
- setActiveKey(key);
211
- }
212
-
213
- async function openRelate({
214
- relateData,
215
- fields,
216
- values,
217
- action_id,
218
- action_type,
219
- }: {
220
- relateData: any;
221
- fields: any;
222
- values: any;
223
- action_id: number;
224
- action_type: string;
225
- }) {
226
- const {
227
- res_model: model,
228
- context,
229
- domain,
230
- views,
231
- target,
232
- string: title,
233
- limit,
234
- } = relateData;
235
-
236
- const [id, type] = views[0];
237
- const initialView = { id, type };
238
-
239
- const parsedContext = parseContext({
240
- context,
241
- values: { ...values, ...globalValues },
242
- fields,
243
- });
244
-
245
- const parsedDomain = domain
246
- ? await ConnectionProvider.getHandler().evalDomain({
247
- domain,
248
- values: transformPlainMany2Ones({
249
- fields,
250
- values: { ...values, ...globalValues },
251
- }),
252
- fields,
253
- context: { ...rootContext, ...parsedContext },
254
- })
255
- : [];
256
-
257
- openAction({
258
- model,
259
- target,
260
- views,
261
- context: { ...rootContext, ...parsedContext },
262
- domain: parsedDomain,
263
- title,
264
- initialView,
265
- action_id,
266
- action_type,
267
- limit,
268
- });
269
- }
270
-
271
- async function openShortcut(shortcut: ShortcutApi) {
272
- const { action_id, action_type, res_id, view_id } = shortcut;
273
- const action = `${action_type},${action_id}`;
274
-
275
- const dataForAction = await ConnectionProvider.getHandler().getActionData({
276
- action,
277
- context: rootContext,
278
- });
279
- const parsedContext = parseContext({
280
- context: dataForAction.context,
281
- values: globalValues,
282
- fields: {},
283
- });
284
-
285
- const parsedDomain = dataForAction.domain
286
- ? await ConnectionProvider.getHandler().evalDomain({
287
- domain: dataForAction.domain,
288
- values: globalValues,
289
- context: { ...rootContext, ...parsedContext },
290
- })
291
- : [];
292
-
293
- const {
294
- res_model: model,
295
- views,
296
- name: title,
297
- target,
298
- view_type,
299
- limit,
300
- } = dataForAction;
301
- const treeExpandable = view_type === "tree";
302
-
303
- const finalViews = [];
304
-
305
- for (const viewArray of views) {
306
- const [id, viewType] = viewArray;
307
-
308
- if (!id) {
309
- if (viewType === "dashboard") {
310
- finalViews.push([undefined, "dashboard"]);
311
- } else {
312
- const { view_id } = await ConnectionProvider.getHandler().getView({
313
- model,
314
- type: viewType,
315
- id,
316
- context: { ...rootContext, ...parsedContext },
317
- });
318
- finalViews.push([view_id, viewType]);
319
- }
320
- } else {
321
- finalViews.push(viewArray);
322
- }
323
- }
324
-
325
- let id, type;
326
- if (view_id === undefined || view_id === null) {
327
- const view = finalViews.find((view: any[]) => {
328
- return view[0] === undefined;
329
- });
330
- id = undefined;
331
- type = view[1];
332
- } else {
333
- [id, type] = finalViews.find((view: any[]) => {
334
- if (view[0] === undefined) {
335
- return false;
336
- }
337
- return view[0] === view_id;
338
- });
339
- }
340
-
341
- const initialView = { id, type };
342
-
343
- openAction({
344
- domain: parsedDomain,
345
- context: { ...rootContext, ...parsedContext },
346
- model,
347
- views: finalViews,
348
- title,
349
- target,
350
- initialView,
351
- action_id,
352
- action_type,
353
- res_id,
354
- treeExpandable,
355
- limit,
356
- });
357
- }
358
-
359
- async function openDefaultActionForModel({
360
- model,
361
- values,
362
- forced_values,
363
- initialViewType,
364
- res_id,
365
- domain,
366
- }: {
367
- model: string;
368
- values?: any;
369
- forced_values?: any;
370
- initialViewType?: ViewType;
371
- res_id?: number;
372
- domain?: any;
373
- }) {
374
- const actionString =
375
- await ConnectionProvider.getHandler().getActionStringForModel(model);
376
- await retrieveAndOpenAction({
377
- action: actionString,
378
- values,
379
- forced_values,
380
- initialViewType,
381
- res_id,
382
- domain,
383
- });
384
- }
385
-
386
- async function openAction({
387
- domain,
388
- context,
389
- model,
390
- views,
391
- title,
392
- target,
393
- initialView,
394
- action_id,
395
- action_type,
396
- res_id,
397
- values,
398
- forced_values,
399
- treeExpandable = false,
400
- limit,
401
- }: {
402
- domain: any;
403
- context: any;
404
- model: string;
405
- views: any[];
406
- title: string;
407
- target: string;
408
- initialView: InitialViewData;
409
- action_id: number;
410
- action_type: string;
411
- res_id?: number | boolean;
412
- values?: any;
413
- forced_values?: any;
414
- treeExpandable?: boolean;
415
- limit?: number;
416
- }) {
417
- const key = uuidv4();
418
-
419
- if (target !== "current") {
420
- const formView = (await ConnectionProvider.getHandler().getView({
421
- model,
422
- type: "form",
423
- id: initialView.type === "form" ? initialView.id : undefined,
424
- context: { ...rootContext, ...context },
425
- })) as FormView;
426
-
427
- (contentRootProvider.current as any).openActionModal({
428
- domain,
429
- model,
430
- formView,
431
- context: { ...rootContext, ...context },
432
- actionData: {
433
- action_id,
434
- action_type,
435
- res_id,
436
- view_id: formView.view_id,
437
- },
438
- });
439
- } else {
440
- const formattedInitialView =
441
- initialView && Array.isArray(initialView.id)
442
- ? { ...initialView, id: initialView.id[0] }
443
- : initialView;
444
-
445
- addNewTab({
446
- title,
447
- action: {
448
- id: action_id,
449
- type: action_type,
450
- },
451
- content: (
452
- <ActionView
453
- action_id={action_id}
454
- action_type={action_type}
455
- tabKey={key}
456
- title={title}
457
- views={views}
458
- model={model}
459
- context={{ ...rootContext, ...context }}
460
- domain={domain}
461
- setCanWeClose={registerViewCloseFn}
462
- initialView={formattedInitialView}
463
- res_id={res_id}
464
- formDefaultValues={values}
465
- formForcedValues={forced_values}
466
- treeExpandable={treeExpandable}
467
- limit={limit}
468
- />
469
- ),
470
- key,
471
- });
472
- }
473
- }
474
-
475
- return (
476
- <LocaleContextProvider lang={lang}>
477
- <TabManagerProvider
478
- openShortcut={openShortcut}
479
- openAction={openAction}
480
- openRelate={openRelate}
481
- openDefaultActionForModel={openDefaultActionForModel}
482
- tabs={tabs}
483
- activeKey={activeKey}
484
- onRemoveTab={async (key: string) => {
485
- const canWeCloseFn = tabViewsCloseFunctions.current.get(
486
- key as string,
487
- );
488
- const canWeClose = await canWeCloseFn?.();
489
-
490
- if (canWeClose || activeKey === "welcome") {
491
- remove(key as string);
492
- }
493
- }}
494
- onChangeTab={(key: string) => {
495
- setActiveKey(key);
496
- }}
497
- >
498
- <ContentRootProvider
499
- ref={contentRootProvider}
500
- globalValues={globalValues}
501
- >
502
- {children}
503
- </ContentRootProvider>
504
- </TabManagerProvider>
505
- </LocaleContextProvider>
506
- );
507
- }
508
-
509
- export default forwardRef(RootView);
@@ -1,31 +0,0 @@
1
- import React, { useContext } from "react";
2
-
3
- import {
4
- TabManagerContext,
5
- TabManagerContextType,
6
- } from "@/context/TabManagerContext";
7
-
8
- type Props = {
9
- tab: any;
10
- };
11
-
12
- function TabContent(props: Props) {
13
- const { tab } = props;
14
-
15
- const tabManagerContext = useContext(
16
- TabManagerContext,
17
- ) as TabManagerContextType;
18
- const { activeKey } = tabManagerContext || {};
19
-
20
- const hiddenStyle: any = {
21
- display: "none",
22
- };
23
-
24
- return (
25
- <div style={tab.key !== activeKey ? hiddenStyle : undefined}>
26
- {tab.content}
27
- </div>
28
- );
29
- }
30
-
31
- export default React.memo(TabContent, () => true);
@@ -1,31 +0,0 @@
1
- import React, { useContext, useState } from "react";
2
-
3
- import {
4
- TabManagerContext,
5
- TabManagerContextType,
6
- } from "@/context/TabManagerContext";
7
- import Tab from "./tabs/Tab";
8
-
9
- function TabSelector() {
10
- const tabManagerContext = useContext(
11
- TabManagerContext,
12
- ) as TabManagerContextType;
13
- const { activeKey, tabs, onRemoveTab, onChangeTab } = tabManagerContext || {};
14
-
15
- return (
16
- <>
17
- {tabs.map((tab: any) => (
18
- <Tab
19
- key={tab.key}
20
- tabKey={tab.key}
21
- label={tab.title}
22
- onClose={onRemoveTab}
23
- isActive={activeKey === tab.key}
24
- onSelected={onChangeTab}
25
- />
26
- ))}
27
- </>
28
- );
29
- }
30
-
31
- export default TabSelector;
@@ -1,18 +0,0 @@
1
- import React, { useContext } from "react";
2
- import { Layout, Typography } from "antd";
3
- import { LocaleContext, LocaleContextType } from "@/context/LocaleContext";
4
-
5
- const { Content } = Layout;
6
- const { Title } = Typography;
7
-
8
- function Welcome(): React.ReactElement {
9
- const { t } = useContext(LocaleContext) as LocaleContextType;
10
-
11
- return (
12
- <Content className="m-5 select-none">
13
- <Title level={5}>{t("welcome")}</Title>
14
- </Content>
15
- );
16
- }
17
-
18
- export default Welcome;
@@ -1,52 +0,0 @@
1
- import DashboardActionBar from "@/actionbar/DashboardActionBar";
2
- import DashboardActionProvider from "@/context/DashboardActionContext";
3
- import TitleHeader from "@/ui/TitleHeader";
4
- import Dashboard from "@/widgets/views/Dashboard/Dashboard";
5
- import React, { useContext, useRef } from "react";
6
- import {
7
- TabManagerContext,
8
- TabManagerContextType,
9
- } from "@/context/TabManagerContext";
10
- import { DashboardProps } from "@/types";
11
-
12
- export type DashboardActionViewProps = {
13
- dashboardData: DashboardProps;
14
- visible: boolean;
15
- };
16
-
17
- export const DashboardActionView = (props: DashboardActionViewProps) => {
18
- const { dashboardData, visible } = props;
19
- const dashboardRef = useRef();
20
- const tabManagerContext = useContext(
21
- TabManagerContext,
22
- ) as TabManagerContextType;
23
- const { openShortcut } = tabManagerContext || {};
24
-
25
- if (!dashboardData) {
26
- return null;
27
- }
28
-
29
- if (!visible) {
30
- return null;
31
- }
32
-
33
- return (
34
- <DashboardActionProvider
35
- dashboardRef={dashboardRef}
36
- openAction={(action) => {
37
- openShortcut(action!);
38
- }}
39
- >
40
- <TitleHeader>
41
- <DashboardActionBar />
42
- </TitleHeader>
43
- <Dashboard
44
- ref={dashboardRef}
45
- model={dashboardData!.model}
46
- id={dashboardData!.id}
47
- context={dashboardData?.context}
48
- configAction={dashboardData?.configAction}
49
- />
50
- </DashboardActionProvider>
51
- );
52
- };
@@ -1,70 +0,0 @@
1
- import FormActionBar from "@/actionbar/FormActionBar";
2
- import { FormView } from "@/types";
3
- import TitleHeader from "@/ui/TitleHeader";
4
- import Form from "@/widgets/views/Form";
5
- import React from "react";
6
-
7
- export type FormActionViewProps = {
8
- formView?: FormView;
9
- visible: boolean;
10
- formRef: any;
11
- model: string;
12
- currentId?: number;
13
- domain: any;
14
- context: any;
15
- defaultValues?: any;
16
- forcedValues?: any;
17
- results: any[];
18
- setResults: (value: any[]) => void;
19
- setCurrentItemIndex: (value?: number) => void;
20
- };
21
-
22
- export const FormActionView = (props: FormActionViewProps) => {
23
- const {
24
- visible,
25
- formRef,
26
- model,
27
- currentId,
28
- domain,
29
- formView,
30
- context,
31
- defaultValues,
32
- forcedValues,
33
- results,
34
- setResults,
35
- setCurrentItemIndex,
36
- } = props;
37
-
38
- if (!visible) {
39
- return null;
40
- }
41
-
42
- return (
43
- <>
44
- <TitleHeader>
45
- <FormActionBar toolbar={formView?.toolbar} />
46
- </TitleHeader>
47
- <Form
48
- rootForm={true}
49
- ref={formRef}
50
- model={model}
51
- defaultValues={defaultValues}
52
- forcedValues={forcedValues}
53
- formView={formView}
54
- actionDomain={domain}
55
- id={currentId}
56
- parentContext={context}
57
- onSubmitSucceed={(id, values) => {
58
- const itemIndex = results!.findIndex((item: any) => {
59
- return item.id === id;
60
- });
61
- if (itemIndex === -1) {
62
- results!.push(values);
63
- setResults(results);
64
- setCurrentItemIndex(results!.length - 1);
65
- }
66
- }}
67
- />
68
- </>
69
- );
70
- };