@gisce/react-ooui 0.1.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 (698) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +58 -0
  3. package/dist/Config.d.ts +6 -0
  4. package/dist/Config.d.ts.map +1 -0
  5. package/dist/Config.js +7 -0
  6. package/dist/Config.js.map +1 -0
  7. package/dist/ConnectionProvider.d.ts +7 -0
  8. package/dist/ConnectionProvider.d.ts.map +1 -0
  9. package/dist/ConnectionProvider.js +18 -0
  10. package/dist/ConnectionProvider.js.map +1 -0
  11. package/dist/actionbar/ActionButton.d.ts +13 -0
  12. package/dist/actionbar/ActionButton.d.ts.map +1 -0
  13. package/dist/actionbar/ActionButton.js +17 -0
  14. package/dist/actionbar/ActionButton.js.map +1 -0
  15. package/dist/actionbar/AttachmentsButton.d.ts +11 -0
  16. package/dist/actionbar/AttachmentsButton.d.ts.map +1 -0
  17. package/dist/actionbar/AttachmentsButton.js +170 -0
  18. package/dist/actionbar/AttachmentsButton.js.map +1 -0
  19. package/dist/actionbar/AttachmentsButtonWrapper.d.ts +18 -0
  20. package/dist/actionbar/AttachmentsButtonWrapper.d.ts.map +1 -0
  21. package/dist/actionbar/AttachmentsButtonWrapper.js +72 -0
  22. package/dist/actionbar/AttachmentsButtonWrapper.js.map +1 -0
  23. package/dist/actionbar/ButtonWithBadge.d.ts +8 -0
  24. package/dist/actionbar/ButtonWithBadge.d.ts.map +1 -0
  25. package/dist/actionbar/ButtonWithBadge.js +47 -0
  26. package/dist/actionbar/ButtonWithBadge.js.map +1 -0
  27. package/dist/actionbar/ChangeViewButton.d.ts +12 -0
  28. package/dist/actionbar/ChangeViewButton.d.ts.map +1 -0
  29. package/dist/actionbar/ChangeViewButton.js +97 -0
  30. package/dist/actionbar/ChangeViewButton.js.map +1 -0
  31. package/dist/actionbar/DashboardActionBar.d.ts +4 -0
  32. package/dist/actionbar/DashboardActionBar.d.ts.map +1 -0
  33. package/dist/actionbar/DashboardActionBar.js +50 -0
  34. package/dist/actionbar/DashboardActionBar.js.map +1 -0
  35. package/dist/actionbar/DropdownButton.d.ts +12 -0
  36. package/dist/actionbar/DropdownButton.d.ts.map +1 -0
  37. package/dist/actionbar/DropdownButton.js +38 -0
  38. package/dist/actionbar/DropdownButton.js.map +1 -0
  39. package/dist/actionbar/FormActionBar.d.ts +4 -0
  40. package/dist/actionbar/FormActionBar.d.ts.map +1 -0
  41. package/dist/actionbar/FormActionBar.js +346 -0
  42. package/dist/actionbar/FormActionBar.js.map +1 -0
  43. package/dist/actionbar/NewButton.d.ts +7 -0
  44. package/dist/actionbar/NewButton.d.ts.map +1 -0
  45. package/dist/actionbar/NewButton.js +50 -0
  46. package/dist/actionbar/NewButton.js.map +1 -0
  47. package/dist/actionbar/SearchBar.d.ts +9 -0
  48. package/dist/actionbar/SearchBar.d.ts.map +1 -0
  49. package/dist/actionbar/SearchBar.js +55 -0
  50. package/dist/actionbar/SearchBar.js.map +1 -0
  51. package/dist/actionbar/TreeActionBar.d.ts +7 -0
  52. package/dist/actionbar/TreeActionBar.d.ts.map +1 -0
  53. package/dist/actionbar/TreeActionBar.js +233 -0
  54. package/dist/actionbar/TreeActionBar.js.map +1 -0
  55. package/dist/common/ButtonWithTooltip.d.ts +8 -0
  56. package/dist/common/ButtonWithTooltip.d.ts.map +1 -0
  57. package/dist/common/ButtonWithTooltip.js +36 -0
  58. package/dist/common/ButtonWithTooltip.js.map +1 -0
  59. package/dist/common/DatePicker.d.ts +8 -0
  60. package/dist/common/DatePicker.d.ts.map +1 -0
  61. package/dist/common/DatePicker.js +66 -0
  62. package/dist/common/DatePicker.js.map +1 -0
  63. package/dist/common/Field.d.ts +14 -0
  64. package/dist/common/Field.d.ts.map +1 -0
  65. package/dist/common/Field.js +68 -0
  66. package/dist/common/Field.js.map +1 -0
  67. package/dist/context/ActionViewContext.d.ts +54 -0
  68. package/dist/context/ActionViewContext.d.ts.map +1 -0
  69. package/dist/context/ActionViewContext.js +93 -0
  70. package/dist/context/ActionViewContext.js.map +1 -0
  71. package/dist/context/ContentRootContext.d.ts +19 -0
  72. package/dist/context/ContentRootContext.d.ts.map +1 -0
  73. package/dist/context/ContentRootContext.js +419 -0
  74. package/dist/context/ContentRootContext.js.map +1 -0
  75. package/dist/context/DashboardActionContext.d.ts +19 -0
  76. package/dist/context/DashboardActionContext.d.ts.map +1 -0
  77. package/dist/context/DashboardActionContext.js +39 -0
  78. package/dist/context/DashboardActionContext.js.map +1 -0
  79. package/dist/context/FormContext.d.ts +30 -0
  80. package/dist/context/FormContext.d.ts.map +1 -0
  81. package/dist/context/FormContext.js +29 -0
  82. package/dist/context/FormContext.js.map +1 -0
  83. package/dist/context/FormModalContext.d.ts +11 -0
  84. package/dist/context/FormModalContext.d.ts.map +1 -0
  85. package/dist/context/FormModalContext.js +16 -0
  86. package/dist/context/FormModalContext.js.map +1 -0
  87. package/dist/context/LocaleContext.d.ts +14 -0
  88. package/dist/context/LocaleContext.d.ts.map +1 -0
  89. package/dist/context/LocaleContext.js +34 -0
  90. package/dist/context/LocaleContext.js.map +1 -0
  91. package/dist/context/One2manyContext.d.ts +17 -0
  92. package/dist/context/One2manyContext.d.ts.map +1 -0
  93. package/dist/context/One2manyContext.js +40 -0
  94. package/dist/context/One2manyContext.js.map +1 -0
  95. package/dist/context/TabManagerContext.d.ts +50 -0
  96. package/dist/context/TabManagerContext.d.ts.map +1 -0
  97. package/dist/context/TabManagerContext.js +45 -0
  98. package/dist/context/TabManagerContext.js.map +1 -0
  99. package/dist/helpers/containerHelper.d.ts +22 -0
  100. package/dist/helpers/containerHelper.d.ts.map +1 -0
  101. package/dist/helpers/containerHelper.js +108 -0
  102. package/dist/helpers/containerHelper.js.map +1 -0
  103. package/dist/helpers/dynamicColumnsHelper.d.ts +8 -0
  104. package/dist/helpers/dynamicColumnsHelper.d.ts.map +1 -0
  105. package/dist/helpers/dynamicColumnsHelper.js +67 -0
  106. package/dist/helpers/dynamicColumnsHelper.js.map +1 -0
  107. package/dist/helpers/filesHelper.d.ts +8 -0
  108. package/dist/helpers/filesHelper.d.ts.map +1 -0
  109. package/dist/helpers/filesHelper.js +91 -0
  110. package/dist/helpers/filesHelper.js.map +1 -0
  111. package/dist/helpers/formHelper.d.ts +31 -0
  112. package/dist/helpers/formHelper.d.ts.map +1 -0
  113. package/dist/helpers/formHelper.js +191 -0
  114. package/dist/helpers/formHelper.js.map +1 -0
  115. package/dist/helpers/iconMapper.d.ts +3 -0
  116. package/dist/helpers/iconMapper.d.ts.map +1 -0
  117. package/dist/helpers/iconMapper.js +125 -0
  118. package/dist/helpers/iconMapper.js.map +1 -0
  119. package/dist/helpers/logInfoHelper.d.ts +3 -0
  120. package/dist/helpers/logInfoHelper.d.ts.map +1 -0
  121. package/dist/helpers/logInfoHelper.js +78 -0
  122. package/dist/helpers/logInfoHelper.js.map +1 -0
  123. package/dist/helpers/one2manyHelper.d.ts +29 -0
  124. package/dist/helpers/one2manyHelper.d.ts.map +1 -0
  125. package/dist/helpers/one2manyHelper.js +159 -0
  126. package/dist/helpers/one2manyHelper.js.map +1 -0
  127. package/dist/helpers/searchFilterHelper.d.ts +5 -0
  128. package/dist/helpers/searchFilterHelper.d.ts.map +1 -0
  129. package/dist/helpers/searchFilterHelper.js +157 -0
  130. package/dist/helpers/searchFilterHelper.js.map +1 -0
  131. package/dist/helpers/timeHelper.d.ts +4 -0
  132. package/dist/helpers/timeHelper.d.ts.map +1 -0
  133. package/dist/helpers/timeHelper.js +53 -0
  134. package/dist/helpers/timeHelper.js.map +1 -0
  135. package/dist/helpers/treeHelper.d.ts +16 -0
  136. package/dist/helpers/treeHelper.d.ts.map +1 -0
  137. package/dist/helpers/treeHelper.js +128 -0
  138. package/dist/helpers/treeHelper.js.map +1 -0
  139. package/dist/hooks/useEffectDebugger.d.ts +3 -0
  140. package/dist/hooks/useEffectDebugger.d.ts.map +1 -0
  141. package/dist/hooks/useEffectDebugger.js +43 -0
  142. package/dist/hooks/useEffectDebugger.js.map +1 -0
  143. package/dist/hooks/useWindowDimensions.d.ts +7 -0
  144. package/dist/hooks/useWindowDimensions.d.ts.map +1 -0
  145. package/dist/hooks/useWindowDimensions.js +29 -0
  146. package/dist/hooks/useWindowDimensions.js.map +1 -0
  147. package/dist/index.d.ts +44 -0
  148. package/dist/index.d.ts.map +1 -0
  149. package/dist/index.js +2 -0
  150. package/dist/index.js.LICENSE.txt +76 -0
  151. package/dist/index.js.map +1 -0
  152. package/dist/locales/ca_ES.d.ts +81 -0
  153. package/dist/locales/ca_ES.d.ts.map +1 -0
  154. package/dist/locales/ca_ES.js +82 -0
  155. package/dist/locales/ca_ES.js.map +1 -0
  156. package/dist/locales/en_US.d.ts +81 -0
  157. package/dist/locales/en_US.d.ts.map +1 -0
  158. package/dist/locales/en_US.js +82 -0
  159. package/dist/locales/en_US.js.map +1 -0
  160. package/dist/locales/es_ES.d.ts +81 -0
  161. package/dist/locales/es_ES.d.ts.map +1 -0
  162. package/dist/locales/es_ES.js +82 -0
  163. package/dist/locales/es_ES.js.map +1 -0
  164. package/dist/main.css +180 -0
  165. package/dist/types/index.d.ts +205 -0
  166. package/dist/types/index.d.ts.map +1 -0
  167. package/dist/types/index.js +3 -0
  168. package/dist/types/index.js.map +1 -0
  169. package/dist/ui/ActionErrorDialog.d.ts +3 -0
  170. package/dist/ui/ActionErrorDialog.d.ts.map +1 -0
  171. package/dist/ui/ActionErrorDialog.js +38 -0
  172. package/dist/ui/ActionErrorDialog.js.map +1 -0
  173. package/dist/ui/ConfirmDialog.d.ts +7 -0
  174. package/dist/ui/ConfirmDialog.d.ts.map +1 -0
  175. package/dist/ui/ConfirmDialog.js +24 -0
  176. package/dist/ui/ConfirmDialog.js.map +1 -0
  177. package/dist/ui/FavouriteButton.d.ts +26 -0
  178. package/dist/ui/FavouriteButton.d.ts.map +1 -0
  179. package/dist/ui/FavouriteButton.js +238 -0
  180. package/dist/ui/FavouriteButton.js.map +1 -0
  181. package/dist/ui/Fieldset.d.ts +8 -0
  182. package/dist/ui/Fieldset.d.ts.map +1 -0
  183. package/dist/ui/Fieldset.js +22 -0
  184. package/dist/ui/Fieldset.js.map +1 -0
  185. package/dist/ui/FormErrorsDialog.d.ts +3 -0
  186. package/dist/ui/FormErrorsDialog.d.ts.map +1 -0
  187. package/dist/ui/FormErrorsDialog.js +20 -0
  188. package/dist/ui/FormErrorsDialog.js.map +1 -0
  189. package/dist/ui/GenericErrorDialog.d.ts +3 -0
  190. package/dist/ui/GenericErrorDialog.d.ts.map +1 -0
  191. package/dist/ui/GenericErrorDialog.js +19 -0
  192. package/dist/ui/GenericErrorDialog.js.map +1 -0
  193. package/dist/ui/GoToResourceModal.d.ts +10 -0
  194. package/dist/ui/GoToResourceModal.d.ts.map +1 -0
  195. package/dist/ui/GoToResourceModal.js +49 -0
  196. package/dist/ui/GoToResourceModal.js.map +1 -0
  197. package/dist/ui/InfoDialog.d.ts +3 -0
  198. package/dist/ui/InfoDialog.d.ts.map +1 -0
  199. package/dist/ui/InfoDialog.js +13 -0
  200. package/dist/ui/InfoDialog.js.map +1 -0
  201. package/dist/ui/RefreshItemDialog.d.ts +7 -0
  202. package/dist/ui/RefreshItemDialog.d.ts.map +1 -0
  203. package/dist/ui/RefreshItemDialog.js +25 -0
  204. package/dist/ui/RefreshItemDialog.js.map +1 -0
  205. package/dist/ui/RemoveItemDialog.d.ts +6 -0
  206. package/dist/ui/RemoveItemDialog.d.ts.map +1 -0
  207. package/dist/ui/RemoveItemDialog.js +24 -0
  208. package/dist/ui/RemoveItemDialog.js.map +1 -0
  209. package/dist/ui/TitleHeader.d.ts +7 -0
  210. package/dist/ui/TitleHeader.d.ts.map +1 -0
  211. package/dist/ui/TitleHeader.js +93 -0
  212. package/dist/ui/TitleHeader.js.map +1 -0
  213. package/dist/ui/UnlinkItemDialog.d.ts +6 -0
  214. package/dist/ui/UnlinkItemDialog.d.ts.map +1 -0
  215. package/dist/ui/UnlinkItemDialog.js +24 -0
  216. package/dist/ui/UnlinkItemDialog.js.map +1 -0
  217. package/dist/ui/UnsavedChangesDialog.d.ts +7 -0
  218. package/dist/ui/UnsavedChangesDialog.d.ts.map +1 -0
  219. package/dist/ui/UnsavedChangesDialog.js +25 -0
  220. package/dist/ui/UnsavedChangesDialog.js.map +1 -0
  221. package/dist/ui/WarningDialog.d.ts +3 -0
  222. package/dist/ui/WarningDialog.d.ts.map +1 -0
  223. package/dist/ui/WarningDialog.js +20 -0
  224. package/dist/ui/WarningDialog.js.map +1 -0
  225. package/dist/views/ActionView.d.ts +24 -0
  226. package/dist/views/ActionView.d.ts.map +1 -0
  227. package/dist/views/ActionView.js +376 -0
  228. package/dist/views/ActionView.js.map +1 -0
  229. package/dist/views/CurrentTabContent.d.ts +4 -0
  230. package/dist/views/CurrentTabContent.d.ts.map +1 -0
  231. package/dist/views/CurrentTabContent.js +35 -0
  232. package/dist/views/CurrentTabContent.js.map +1 -0
  233. package/dist/views/RootView.d.ts +14 -0
  234. package/dist/views/RootView.d.ts.map +1 -0
  235. package/dist/views/RootView.js +469 -0
  236. package/dist/views/RootView.js.map +1 -0
  237. package/dist/views/TabContent.d.ts +8 -0
  238. package/dist/views/TabContent.d.ts.map +1 -0
  239. package/dist/views/TabContent.js +34 -0
  240. package/dist/views/TabContent.js.map +1 -0
  241. package/dist/views/TabSelector.d.ts +4 -0
  242. package/dist/views/TabSelector.d.ts.map +1 -0
  243. package/dist/views/TabSelector.js +34 -0
  244. package/dist/views/TabSelector.js.map +1 -0
  245. package/dist/views/Welcome.d.ts +4 -0
  246. package/dist/views/Welcome.d.ts.map +1 -0
  247. package/dist/views/Welcome.js +33 -0
  248. package/dist/views/Welcome.js.map +1 -0
  249. package/dist/views/tabs/Tab.d.ts +11 -0
  250. package/dist/views/tabs/Tab.d.ts.map +1 -0
  251. package/dist/views/tabs/Tab.js +54 -0
  252. package/dist/views/tabs/Tab.js.map +1 -0
  253. package/dist/widgets/WidgetFactory.d.ts +4 -0
  254. package/dist/widgets/WidgetFactory.d.ts.map +1 -0
  255. package/dist/widgets/WidgetFactory.js +85 -0
  256. package/dist/widgets/WidgetFactory.js.map +1 -0
  257. package/dist/widgets/base/Binary.d.ts +14 -0
  258. package/dist/widgets/base/Binary.d.ts.map +1 -0
  259. package/dist/widgets/base/Binary.js +173 -0
  260. package/dist/widgets/base/Binary.js.map +1 -0
  261. package/dist/widgets/base/Boolean.d.ts +4 -0
  262. package/dist/widgets/base/Boolean.d.ts.map +1 -0
  263. package/dist/widgets/base/Boolean.js +53 -0
  264. package/dist/widgets/base/Boolean.js.map +1 -0
  265. package/dist/widgets/base/Button.d.ts +8 -0
  266. package/dist/widgets/base/Button.d.ts.map +1 -0
  267. package/dist/widgets/base/Button.js +118 -0
  268. package/dist/widgets/base/Button.js.map +1 -0
  269. package/dist/widgets/base/Char.d.ts +8 -0
  270. package/dist/widgets/base/Char.d.ts.map +1 -0
  271. package/dist/widgets/base/Char.js +145 -0
  272. package/dist/widgets/base/Char.js.map +1 -0
  273. package/dist/widgets/base/Date.d.ts +5 -0
  274. package/dist/widgets/base/Date.d.ts.map +1 -0
  275. package/dist/widgets/base/Date.js +13 -0
  276. package/dist/widgets/base/Date.js.map +1 -0
  277. package/dist/widgets/base/DateTime.d.ts +5 -0
  278. package/dist/widgets/base/DateTime.d.ts.map +1 -0
  279. package/dist/widgets/base/DateTime.js +13 -0
  280. package/dist/widgets/base/DateTime.js.map +1 -0
  281. package/dist/widgets/base/Email.d.ts +4 -0
  282. package/dist/widgets/base/Email.d.ts.map +1 -0
  283. package/dist/widgets/base/Email.js +34 -0
  284. package/dist/widgets/base/Email.js.map +1 -0
  285. package/dist/widgets/base/Float.d.ts +4 -0
  286. package/dist/widgets/base/Float.d.ts.map +1 -0
  287. package/dist/widgets/base/Float.js +54 -0
  288. package/dist/widgets/base/Float.js.map +1 -0
  289. package/dist/widgets/base/FloatTime.d.ts +12 -0
  290. package/dist/widgets/base/FloatTime.d.ts.map +1 -0
  291. package/dist/widgets/base/FloatTime.js +122 -0
  292. package/dist/widgets/base/FloatTime.js.map +1 -0
  293. package/dist/widgets/base/Image.d.ts +14 -0
  294. package/dist/widgets/base/Image.d.ts.map +1 -0
  295. package/dist/widgets/base/Image.js +153 -0
  296. package/dist/widgets/base/Image.js.map +1 -0
  297. package/dist/widgets/base/Integer.d.ts +8 -0
  298. package/dist/widgets/base/Integer.d.ts.map +1 -0
  299. package/dist/widgets/base/Integer.js +57 -0
  300. package/dist/widgets/base/Integer.js.map +1 -0
  301. package/dist/widgets/base/Label.d.ts +9 -0
  302. package/dist/widgets/base/Label.d.ts.map +1 -0
  303. package/dist/widgets/base/Label.js +27 -0
  304. package/dist/widgets/base/Label.js.map +1 -0
  305. package/dist/widgets/base/LinkInput.d.ts +12 -0
  306. package/dist/widgets/base/LinkInput.d.ts.map +1 -0
  307. package/dist/widgets/base/LinkInput.js +70 -0
  308. package/dist/widgets/base/LinkInput.js.map +1 -0
  309. package/dist/widgets/base/MultiSelection.d.ts +10 -0
  310. package/dist/widgets/base/MultiSelection.d.ts.map +1 -0
  311. package/dist/widgets/base/MultiSelection.js +69 -0
  312. package/dist/widgets/base/MultiSelection.js.map +1 -0
  313. package/dist/widgets/base/ProgressBar.d.ts +7 -0
  314. package/dist/widgets/base/ProgressBar.d.ts.map +1 -0
  315. package/dist/widgets/base/ProgressBar.js +45 -0
  316. package/dist/widgets/base/ProgressBar.js.map +1 -0
  317. package/dist/widgets/base/Reference.d.ts +16 -0
  318. package/dist/widgets/base/Reference.d.ts.map +1 -0
  319. package/dist/widgets/base/Reference.js +93 -0
  320. package/dist/widgets/base/Reference.js.map +1 -0
  321. package/dist/widgets/base/Selection.d.ts +10 -0
  322. package/dist/widgets/base/Selection.d.ts.map +1 -0
  323. package/dist/widgets/base/Selection.js +51 -0
  324. package/dist/widgets/base/Selection.js.map +1 -0
  325. package/dist/widgets/base/Separator.d.ts +8 -0
  326. package/dist/widgets/base/Separator.d.ts.map +1 -0
  327. package/dist/widgets/base/Separator.js +15 -0
  328. package/dist/widgets/base/Separator.js.map +1 -0
  329. package/dist/widgets/base/Text.d.ts +8 -0
  330. package/dist/widgets/base/Text.d.ts.map +1 -0
  331. package/dist/widgets/base/Text.js +142 -0
  332. package/dist/widgets/base/Text.js.map +1 -0
  333. package/dist/widgets/base/Url.d.ts +4 -0
  334. package/dist/widgets/base/Url.d.ts.map +1 -0
  335. package/dist/widgets/base/Url.js +34 -0
  336. package/dist/widgets/base/Url.js.map +1 -0
  337. package/dist/widgets/base/many2one/Many2one.d.ts +16 -0
  338. package/dist/widgets/base/many2one/Many2one.d.ts.map +1 -0
  339. package/dist/widgets/base/many2one/Many2one.js +353 -0
  340. package/dist/widgets/base/many2one/Many2one.js.map +1 -0
  341. package/dist/widgets/base/many2one/Many2oneSuffix.d.ts +9 -0
  342. package/dist/widgets/base/many2one/Many2oneSuffix.d.ts.map +1 -0
  343. package/dist/widgets/base/many2one/Many2oneSuffix.js +215 -0
  344. package/dist/widgets/base/many2one/Many2oneSuffix.js.map +1 -0
  345. package/dist/widgets/base/many2one/Many2oneSuffixModal.d.ts +10 -0
  346. package/dist/widgets/base/many2one/Many2oneSuffixModal.d.ts.map +1 -0
  347. package/dist/widgets/base/many2one/Many2oneSuffixModal.js +37 -0
  348. package/dist/widgets/base/many2one/Many2oneSuffixModal.js.map +1 -0
  349. package/dist/widgets/base/one2many/One2many.d.ts +9 -0
  350. package/dist/widgets/base/one2many/One2many.d.ts.map +1 -0
  351. package/dist/widgets/base/one2many/One2many.js +188 -0
  352. package/dist/widgets/base/one2many/One2many.js.map +1 -0
  353. package/dist/widgets/base/one2many/One2manyInput.d.ts +23 -0
  354. package/dist/widgets/base/one2many/One2manyInput.d.ts.map +1 -0
  355. package/dist/widgets/base/one2many/One2manyInput.js +602 -0
  356. package/dist/widgets/base/one2many/One2manyInput.js.map +1 -0
  357. package/dist/widgets/base/one2many/One2manyTopBar.d.ts +21 -0
  358. package/dist/widgets/base/one2many/One2manyTopBar.d.ts.map +1 -0
  359. package/dist/widgets/base/one2many/One2manyTopBar.js +59 -0
  360. package/dist/widgets/base/one2many/One2manyTopBar.js.map +1 -0
  361. package/dist/widgets/containers/Container.d.ts +9 -0
  362. package/dist/widgets/containers/Container.d.ts.map +1 -0
  363. package/dist/widgets/containers/Container.js +77 -0
  364. package/dist/widgets/containers/Container.js.map +1 -0
  365. package/dist/widgets/containers/Group.d.ts +10 -0
  366. package/dist/widgets/containers/Group.d.ts.map +1 -0
  367. package/dist/widgets/containers/Group.js +15 -0
  368. package/dist/widgets/containers/Group.js.map +1 -0
  369. package/dist/widgets/containers/Notebook.d.ts +9 -0
  370. package/dist/widgets/containers/Notebook.d.ts.map +1 -0
  371. package/dist/widgets/containers/Notebook.js +21 -0
  372. package/dist/widgets/containers/Notebook.js.map +1 -0
  373. package/dist/widgets/custom/FiberGrid.d.ts +10 -0
  374. package/dist/widgets/custom/FiberGrid.d.ts.map +1 -0
  375. package/dist/widgets/custom/FiberGrid.js +50 -0
  376. package/dist/widgets/custom/FiberGrid.js.map +1 -0
  377. package/dist/widgets/custom/Indicator.d.ts +10 -0
  378. package/dist/widgets/custom/Indicator.d.ts.map +1 -0
  379. package/dist/widgets/custom/Indicator.js +44 -0
  380. package/dist/widgets/custom/Indicator.js.map +1 -0
  381. package/dist/widgets/custom/Timeline.d.ts +16 -0
  382. package/dist/widgets/custom/Timeline.d.ts.map +1 -0
  383. package/dist/widgets/custom/Timeline.js +231 -0
  384. package/dist/widgets/custom/Timeline.js.map +1 -0
  385. package/dist/widgets/modals/FormModal.d.ts +12 -0
  386. package/dist/widgets/modals/FormModal.d.ts.map +1 -0
  387. package/dist/widgets/modals/FormModal.js +174 -0
  388. package/dist/widgets/modals/FormModal.js.map +1 -0
  389. package/dist/widgets/modals/SearchModal.d.ts +13 -0
  390. package/dist/widgets/modals/SearchModal.d.ts.map +1 -0
  391. package/dist/widgets/modals/SearchModal.js +129 -0
  392. package/dist/widgets/modals/SearchModal.js.map +1 -0
  393. package/dist/widgets/modals/TranslationModal.d.ts +12 -0
  394. package/dist/widgets/modals/TranslationModal.d.ts.map +1 -0
  395. package/dist/widgets/modals/TranslationModal.js +254 -0
  396. package/dist/widgets/modals/TranslationModal.js.map +1 -0
  397. package/dist/widgets/views/Dashboard/Dashboard.d.ts +7 -0
  398. package/dist/widgets/views/Dashboard/Dashboard.d.ts.map +1 -0
  399. package/dist/widgets/views/Dashboard/Dashboard.js +368 -0
  400. package/dist/widgets/views/Dashboard/Dashboard.js.map +1 -0
  401. package/dist/widgets/views/Dashboard/Dashboard.types.d.ts +8 -0
  402. package/dist/widgets/views/Dashboard/Dashboard.types.d.ts.map +1 -0
  403. package/dist/widgets/views/Dashboard/Dashboard.types.js +3 -0
  404. package/dist/widgets/views/Dashboard/Dashboard.types.js.map +1 -0
  405. package/dist/widgets/views/Dashboard/DashboardForm.d.ts +4 -0
  406. package/dist/widgets/views/Dashboard/DashboardForm.d.ts.map +1 -0
  407. package/dist/widgets/views/Dashboard/DashboardForm.js +106 -0
  408. package/dist/widgets/views/Dashboard/DashboardForm.js.map +1 -0
  409. package/dist/widgets/views/Dashboard/DashboardTree.d.ts +19 -0
  410. package/dist/widgets/views/Dashboard/DashboardTree.d.ts.map +1 -0
  411. package/dist/widgets/views/Dashboard/DashboardTree.js +318 -0
  412. package/dist/widgets/views/Dashboard/DashboardTree.js.map +1 -0
  413. package/dist/widgets/views/Dashboard/dashboardHelper.d.ts +6 -0
  414. package/dist/widgets/views/Dashboard/dashboardHelper.d.ts.map +1 -0
  415. package/dist/widgets/views/Dashboard/dashboardHelper.js +136 -0
  416. package/dist/widgets/views/Dashboard/dashboardHelper.js.map +1 -0
  417. package/dist/widgets/views/DashboardGrid/DashboardGrid.d.ts +6 -0
  418. package/dist/widgets/views/DashboardGrid/DashboardGrid.d.ts.map +1 -0
  419. package/dist/widgets/views/DashboardGrid/DashboardGrid.js +31 -0
  420. package/dist/widgets/views/DashboardGrid/DashboardGrid.js.map +1 -0
  421. package/dist/widgets/views/DashboardGrid/DashboardGrid.types.d.ts +6 -0
  422. package/dist/widgets/views/DashboardGrid/DashboardGrid.types.d.ts.map +1 -0
  423. package/dist/widgets/views/DashboardGrid/DashboardGrid.types.js +3 -0
  424. package/dist/widgets/views/DashboardGrid/DashboardGrid.types.js.map +1 -0
  425. package/dist/widgets/views/DashboardGrid/DashboardGridItem.d.ts +4 -0
  426. package/dist/widgets/views/DashboardGrid/DashboardGridItem.d.ts.map +1 -0
  427. package/dist/widgets/views/DashboardGrid/DashboardGridItem.js +38 -0
  428. package/dist/widgets/views/DashboardGrid/DashboardGridItem.js.map +1 -0
  429. package/dist/widgets/views/DashboardGrid/DashboardGridItem.types.d.ts +11 -0
  430. package/dist/widgets/views/DashboardGrid/DashboardGridItem.types.d.ts.map +1 -0
  431. package/dist/widgets/views/DashboardGrid/DashboardGridItem.types.js +3 -0
  432. package/dist/widgets/views/DashboardGrid/DashboardGridItem.types.js.map +1 -0
  433. package/dist/widgets/views/DashboardGrid/index.d.ts +5 -0
  434. package/dist/widgets/views/DashboardGrid/index.d.ts.map +1 -0
  435. package/dist/widgets/views/DashboardGrid/index.js +17 -0
  436. package/dist/widgets/views/DashboardGrid/index.js.map +1 -0
  437. package/dist/widgets/views/Form.d.ts +28 -0
  438. package/dist/widgets/views/Form.d.ts.map +1 -0
  439. package/dist/widgets/views/Form.js +933 -0
  440. package/dist/widgets/views/Form.js.map +1 -0
  441. package/dist/widgets/views/Graph/Graph.d.ts +10 -0
  442. package/dist/widgets/views/Graph/Graph.d.ts.map +1 -0
  443. package/dist/widgets/views/Graph/Graph.js +150 -0
  444. package/dist/widgets/views/Graph/Graph.js.map +1 -0
  445. package/dist/widgets/views/Graph/GraphChart.d.ts +10 -0
  446. package/dist/widgets/views/Graph/GraphChart.d.ts.map +1 -0
  447. package/dist/widgets/views/Graph/GraphChart.js +104 -0
  448. package/dist/widgets/views/Graph/GraphChart.js.map +1 -0
  449. package/dist/widgets/views/Graph/GraphDefaults.d.ts +47 -0
  450. package/dist/widgets/views/Graph/GraphDefaults.d.ts.map +1 -0
  451. package/dist/widgets/views/Graph/GraphDefaults.js +62 -0
  452. package/dist/widgets/views/Graph/GraphDefaults.js.map +1 -0
  453. package/dist/widgets/views/Graph/GraphIndicator.d.ts +16 -0
  454. package/dist/widgets/views/Graph/GraphIndicator.d.ts.map +1 -0
  455. package/dist/widgets/views/Graph/GraphIndicator.js +292 -0
  456. package/dist/widgets/views/Graph/GraphIndicator.js.map +1 -0
  457. package/dist/widgets/views/Graph/useGraphData.d.ts +18 -0
  458. package/dist/widgets/views/Graph/useGraphData.d.ts.map +1 -0
  459. package/dist/widgets/views/Graph/useGraphData.js +163 -0
  460. package/dist/widgets/views/Graph/useGraphData.js.map +1 -0
  461. package/dist/widgets/views/SearchTree.d.ts +25 -0
  462. package/dist/widgets/views/SearchTree.d.ts.map +1 -0
  463. package/dist/widgets/views/SearchTree.js +495 -0
  464. package/dist/widgets/views/SearchTree.js.map +1 -0
  465. package/dist/widgets/views/Tree.d.ts +23 -0
  466. package/dist/widgets/views/Tree.d.ts.map +1 -0
  467. package/dist/widgets/views/Tree.js +180 -0
  468. package/dist/widgets/views/Tree.js.map +1 -0
  469. package/dist/widgets/views/searchFilter/DateRangePicker.d.ts +4 -0
  470. package/dist/widgets/views/searchFilter/DateRangePicker.d.ts.map +1 -0
  471. package/dist/widgets/views/searchFilter/DateRangePicker.js +26 -0
  472. package/dist/widgets/views/searchFilter/DateRangePicker.js.map +1 -0
  473. package/dist/widgets/views/searchFilter/DateTimeRangePicker.d.ts +4 -0
  474. package/dist/widgets/views/searchFilter/DateTimeRangePicker.d.ts.map +1 -0
  475. package/dist/widgets/views/searchFilter/DateTimeRangePicker.js +53 -0
  476. package/dist/widgets/views/searchFilter/DateTimeRangePicker.js.map +1 -0
  477. package/dist/widgets/views/searchFilter/PairFields.d.ts +4 -0
  478. package/dist/widgets/views/searchFilter/PairFields.d.ts.map +1 -0
  479. package/dist/widgets/views/searchFilter/PairFields.js +45 -0
  480. package/dist/widgets/views/searchFilter/PairFields.js.map +1 -0
  481. package/dist/widgets/views/searchFilter/SearchBottomBar.d.ts +10 -0
  482. package/dist/widgets/views/searchFilter/SearchBottomBar.d.ts.map +1 -0
  483. package/dist/widgets/views/searchFilter/SearchBottomBar.js +40 -0
  484. package/dist/widgets/views/searchFilter/SearchBottomBar.js.map +1 -0
  485. package/dist/widgets/views/searchFilter/SearchField.d.ts +8 -0
  486. package/dist/widgets/views/searchFilter/SearchField.d.ts.map +1 -0
  487. package/dist/widgets/views/searchFilter/SearchField.js +84 -0
  488. package/dist/widgets/views/searchFilter/SearchField.js.map +1 -0
  489. package/dist/widgets/views/searchFilter/SearchFilter.d.ts +15 -0
  490. package/dist/widgets/views/searchFilter/SearchFilter.d.ts.map +1 -0
  491. package/dist/widgets/views/searchFilter/SearchFilter.js +78 -0
  492. package/dist/widgets/views/searchFilter/SearchFilter.js.map +1 -0
  493. package/dist/widgets/views/searchFilter/SearchParams.d.ts +7 -0
  494. package/dist/widgets/views/searchFilter/SearchParams.d.ts.map +1 -0
  495. package/dist/widgets/views/searchFilter/SearchParams.js +44 -0
  496. package/dist/widgets/views/searchFilter/SearchParams.js.map +1 -0
  497. package/package.json +89 -0
  498. package/src/.eslintcache +1 -0
  499. package/src/Config.ts +4 -0
  500. package/src/ConnectionProvider.ts +16 -0
  501. package/src/__tests__/iconMapper.test.ts +15 -0
  502. package/src/__tests__/searchFilterHelper.spec.ts +386 -0
  503. package/src/actionbar/ActionButton.tsx +40 -0
  504. package/src/actionbar/AttachmentsButton.tsx +128 -0
  505. package/src/actionbar/AttachmentsButtonWrapper.tsx +139 -0
  506. package/src/actionbar/ButtonWithBadge.tsx +39 -0
  507. package/src/actionbar/ChangeViewButton.tsx +136 -0
  508. package/src/actionbar/DashboardActionBar.tsx +67 -0
  509. package/src/actionbar/DropdownButton.tsx +61 -0
  510. package/src/actionbar/FormActionBar.tsx +412 -0
  511. package/src/actionbar/NewButton.tsx +46 -0
  512. package/src/actionbar/SearchBar.tsx +69 -0
  513. package/src/actionbar/TreeActionBar.tsx +265 -0
  514. package/src/common/ButtonWithTooltip.tsx +18 -0
  515. package/src/common/DatePicker.tsx +93 -0
  516. package/src/common/Field.tsx +92 -0
  517. package/src/context/ActionViewContext.tsx +161 -0
  518. package/src/context/ContentRootContext.tsx +422 -0
  519. package/src/context/DashboardActionContext.tsx +45 -0
  520. package/src/context/FormContext.tsx +79 -0
  521. package/src/context/FormModalContext.tsx +29 -0
  522. package/src/context/LocaleContext.tsx +50 -0
  523. package/src/context/One2manyContext.tsx +46 -0
  524. package/src/context/TabManagerContext.tsx +117 -0
  525. package/src/helpers/containerHelper.ts +145 -0
  526. package/src/helpers/dynamicColumnsHelper.ts +73 -0
  527. package/src/helpers/filesHelper.ts +41 -0
  528. package/src/helpers/formHelper.ts +225 -0
  529. package/src/helpers/iconMapper.ts +108 -0
  530. package/src/helpers/logInfoHelper.tsx +28 -0
  531. package/src/helpers/one2manyHelper.ts +139 -0
  532. package/src/helpers/searchFilterHelper.ts +167 -0
  533. package/src/helpers/timeHelper.ts +58 -0
  534. package/src/helpers/treeHelper.ts +127 -0
  535. package/src/hooks/useEffectDebugger.ts +43 -0
  536. package/src/hooks/useWindowDimensions.ts +33 -0
  537. package/src/index.ts +136 -0
  538. package/src/locales/ca_ES.tsx +85 -0
  539. package/src/locales/en_US.tsx +82 -0
  540. package/src/locales/es_ES.tsx +86 -0
  541. package/src/stories/Binary.stories.tsx +23 -0
  542. package/src/stories/Boolean.stories.tsx +22 -0
  543. package/src/stories/Button.stories.tsx +120 -0
  544. package/src/stories/Char.stories.tsx +49 -0
  545. package/src/stories/FiberGrid.stories.tsx +109 -0
  546. package/src/stories/Float.stories.tsx +22 -0
  547. package/src/stories/FloatTime.stories.tsx +32 -0
  548. package/src/stories/Image.stories.tsx +25 -0
  549. package/src/stories/Integer.stories.tsx +22 -0
  550. package/src/stories/Label.stories.tsx +22 -0
  551. package/src/stories/Many2one.stories.tsx +31 -0
  552. package/src/stories/One2many.stories.tsx +292 -0
  553. package/src/stories/ProgressBar.stories.tsx +22 -0
  554. package/src/stories/Reference.stories.tsx +43 -0
  555. package/src/stories/Selection.stories.tsx +34 -0
  556. package/src/stories/Separator.stories.tsx +21 -0
  557. package/src/stories/Text.stories.tsx +35 -0
  558. package/src/stories/containers/Group.stories.tsx +63 -0
  559. package/src/stories/containers/NewLine.stories.tsx +53 -0
  560. package/src/stories/containers/Notebook.stories.tsx +91 -0
  561. package/src/stories/custom/Indicator.stories.tsx +41 -0
  562. package/src/stories/dashboard/Dashboard.stories.tsx +23 -0
  563. package/src/stories/dashboard/DashboardGrid.stories.tsx +30 -0
  564. package/src/stories/forms/Attachment.stories.tsx +24 -0
  565. package/src/stories/forms/CUPSForm.stories.tsx +25 -0
  566. package/src/stories/forms/Company.stories.tsx +25 -0
  567. package/src/stories/forms/CrmCaseForm.stories.tsx +25 -0
  568. package/src/stories/forms/Documents.stories.tsx +25 -0
  569. package/src/stories/forms/FormWithGridFiber.stories.tsx +25 -0
  570. package/src/stories/forms/FormWithLinks.stories.tsx +31 -0
  571. package/src/stories/forms/Lead.stories.tsx +25 -0
  572. package/src/stories/forms/ModContractForm.stories.tsx +25 -0
  573. package/src/stories/forms/PartnersForm.stories.tsx +25 -0
  574. package/src/stories/forms/PolissaForm.stories.tsx +25 -0
  575. package/src/stories/forms/PreferencesForm.stories.tsx +693 -0
  576. package/src/stories/forms/Signatures.stories.tsx +25 -0
  577. package/src/stories/forms/Switching.stories.tsx +25 -0
  578. package/src/stories/graphs/GraphIndicator.stories.tsx +20 -0
  579. package/src/stories/graphs/PieGraph.stories.tsx +78 -0
  580. package/src/stories/mocks/index.ts +42 -0
  581. package/src/stories/mocks/mockProvider.ts +180 -0
  582. package/src/stories/mocks/models/attachment.ts +1327 -0
  583. package/src/stories/mocks/models/butlleti.ts +344 -0
  584. package/src/stories/mocks/models/company.ts +137 -0
  585. package/src/stories/mocks/models/crm_case.ts +598 -0
  586. package/src/stories/mocks/models/cups.ts +910 -0
  587. package/src/stories/mocks/models/document.ts +225 -0
  588. package/src/stories/mocks/models/factura.ts +2727 -0
  589. package/src/stories/mocks/models/form_with_gridfiber.ts +143 -0
  590. package/src/stories/mocks/models/hist_autoconsum.ts +148 -0
  591. package/src/stories/mocks/models/lead.ts +2109 -0
  592. package/src/stories/mocks/models/modcontractual.ts +806 -0
  593. package/src/stories/mocks/models/partner.ts +1360 -0
  594. package/src/stories/mocks/models/polissa.ts +3133 -0
  595. package/src/stories/mocks/models/signatura.ts +618 -0
  596. package/src/stories/mocks/models/switching.ts +769 -0
  597. package/src/stories/modals/FormModal.stories.tsx +36 -0
  598. package/src/stories/modals/SearchModal.stories.tsx +37 -0
  599. package/src/stories/trees/FacturesTree.stories.tsx +16 -0
  600. package/src/stories/ui/ActionBar.stories.tsx +23 -0
  601. package/src/stories/ui/FavouriteButton.stories.tsx +18 -0
  602. package/src/stories/ui/GoToResourceModal.stories.tsx +26 -0
  603. package/src/stories/views/ActionView.stories.tsx +28 -0
  604. package/src/stories/views/SearchTree.stories.tsx +946 -0
  605. package/src/stories/views/Tab.stories.tsx +94 -0
  606. package/src/stories/views/TabManager.stories.tsx +15 -0
  607. package/src/stories/views/TabsAndContent.stories.tsx +89 -0
  608. package/src/stories/views/Tree.stories.js +166 -0
  609. package/src/stories/views/searchFilter/DateRangePicker.stories.tsx +23 -0
  610. package/src/stories/views/searchFilter/DateTimeRangePicker.stories.tsx +23 -0
  611. package/src/stories/views/searchFilter/PairFields.stories.tsx +23 -0
  612. package/src/stories/views/searchFilter/SearchFilter.stories.tsx +166 -0
  613. package/src/stories/views/searchFilter/examples/PartnersSearchFilter.stories.tsx +425 -0
  614. package/src/tailwind.css +8 -0
  615. package/src/tailwind.generated.css +168533 -0
  616. package/src/types/index.ts +275 -0
  617. package/src/ui/ActionErrorDialog.tsx +41 -0
  618. package/src/ui/ConfirmDialog.tsx +28 -0
  619. package/src/ui/FavouriteButton.tsx +261 -0
  620. package/src/ui/Fieldset.tsx +31 -0
  621. package/src/ui/FormErrorsDialog.tsx +17 -0
  622. package/src/ui/GenericErrorDialog.tsx +16 -0
  623. package/src/ui/GoToResourceModal.tsx +71 -0
  624. package/src/ui/InfoDialog.tsx +13 -0
  625. package/src/ui/RefreshItemDialog.tsx +29 -0
  626. package/src/ui/RemoveItemDialog.tsx +20 -0
  627. package/src/ui/TitleHeader.tsx +95 -0
  628. package/src/ui/UnlinkItemDialog.tsx +20 -0
  629. package/src/ui/UnsavedChangesDialog.tsx +29 -0
  630. package/src/ui/WarningDialog.tsx +17 -0
  631. package/src/views/ActionView.tsx +455 -0
  632. package/src/views/CurrentTabContent.tsx +21 -0
  633. package/src/views/RootView.tsx +467 -0
  634. package/src/views/TabContent.tsx +31 -0
  635. package/src/views/TabSelector.tsx +31 -0
  636. package/src/views/Welcome.tsx +18 -0
  637. package/src/views/tabs/Tab.tsx +77 -0
  638. package/src/widgets/WidgetFactory.tsx +109 -0
  639. package/src/widgets/base/Binary.tsx +141 -0
  640. package/src/widgets/base/Boolean.tsx +44 -0
  641. package/src/widgets/base/Button.tsx +77 -0
  642. package/src/widgets/base/Char.tsx +155 -0
  643. package/src/widgets/base/Date.tsx +12 -0
  644. package/src/widgets/base/DateTime.tsx +12 -0
  645. package/src/widgets/base/Email.tsx +27 -0
  646. package/src/widgets/base/Float.tsx +33 -0
  647. package/src/widgets/base/FloatTime.tsx +69 -0
  648. package/src/widgets/base/Image.tsx +120 -0
  649. package/src/widgets/base/Integer.tsx +38 -0
  650. package/src/widgets/base/Label.tsx +40 -0
  651. package/src/widgets/base/LinkInput.tsx +96 -0
  652. package/src/widgets/base/MultiSelection.tsx +82 -0
  653. package/src/widgets/base/ProgressBar.tsx +38 -0
  654. package/src/widgets/base/Reference.tsx +105 -0
  655. package/src/widgets/base/Selection.tsx +61 -0
  656. package/src/widgets/base/Separator.tsx +18 -0
  657. package/src/widgets/base/Text.tsx +156 -0
  658. package/src/widgets/base/Url.tsx +26 -0
  659. package/src/widgets/base/many2one/Many2one.tsx +331 -0
  660. package/src/widgets/base/many2one/Many2oneSuffix.tsx +210 -0
  661. package/src/widgets/base/many2one/Many2oneSuffixModal.tsx +41 -0
  662. package/src/widgets/base/one2many/One2many.tsx +102 -0
  663. package/src/widgets/base/one2many/One2manyInput.tsx +635 -0
  664. package/src/widgets/base/one2many/One2manyTopBar.tsx +143 -0
  665. package/src/widgets/containers/Container.tsx +97 -0
  666. package/src/widgets/containers/Group.tsx +34 -0
  667. package/src/widgets/containers/Notebook.tsx +35 -0
  668. package/src/widgets/custom/FiberGrid.tsx +51 -0
  669. package/src/widgets/custom/Indicator.tsx +66 -0
  670. package/src/widgets/custom/Timeline.tsx +190 -0
  671. package/src/widgets/modals/FormModal.tsx +127 -0
  672. package/src/widgets/modals/SearchModal.tsx +131 -0
  673. package/src/widgets/modals/TranslationModal.tsx +201 -0
  674. package/src/widgets/views/Dashboard/Dashboard.tsx +371 -0
  675. package/src/widgets/views/Dashboard/Dashboard.types.ts +8 -0
  676. package/src/widgets/views/Dashboard/DashboardForm.tsx +30 -0
  677. package/src/widgets/views/Dashboard/DashboardTree.tsx +287 -0
  678. package/src/widgets/views/Dashboard/dashboardHelper.ts +71 -0
  679. package/src/widgets/views/DashboardGrid/DashboardGrid.tsx +53 -0
  680. package/src/widgets/views/DashboardGrid/DashboardGrid.types.ts +4 -0
  681. package/src/widgets/views/DashboardGrid/DashboardGridItem.tsx +58 -0
  682. package/src/widgets/views/DashboardGrid/DashboardGridItem.types.ts +10 -0
  683. package/src/widgets/views/DashboardGrid/index.ts +4 -0
  684. package/src/widgets/views/Form.tsx +991 -0
  685. package/src/widgets/views/Graph/Graph.tsx +108 -0
  686. package/src/widgets/views/Graph/GraphChart.tsx +102 -0
  687. package/src/widgets/views/Graph/GraphDefaults.ts +57 -0
  688. package/src/widgets/views/Graph/GraphIndicator.tsx +360 -0
  689. package/src/widgets/views/Graph/useGraphData.tsx +142 -0
  690. package/src/widgets/views/SearchTree.tsx +542 -0
  691. package/src/widgets/views/Tree.tsx +267 -0
  692. package/src/widgets/views/searchFilter/DateRangePicker.tsx +16 -0
  693. package/src/widgets/views/searchFilter/DateTimeRangePicker.tsx +63 -0
  694. package/src/widgets/views/searchFilter/PairFields.tsx +56 -0
  695. package/src/widgets/views/searchFilter/SearchBottomBar.tsx +58 -0
  696. package/src/widgets/views/searchFilter/SearchField.tsx +73 -0
  697. package/src/widgets/views/searchFilter/SearchFilter.tsx +113 -0
  698. package/src/widgets/views/searchFilter/SearchParams.tsx +32 -0
@@ -0,0 +1,991 @@
1
+ import React, {
2
+ useState,
3
+ forwardRef,
4
+ useImperativeHandle,
5
+ useEffect,
6
+ useRef,
7
+ useContext,
8
+ } from "react";
9
+ import { Form as FormOoui } from "@gisce/ooui";
10
+ import {
11
+ Form as AntForm,
12
+ Button,
13
+ Divider,
14
+ Space,
15
+ Row,
16
+ Alert,
17
+ Spin,
18
+ } from "antd";
19
+ import Measure from "react-measure";
20
+ import { CheckOutlined, CloseOutlined } from "@ant-design/icons";
21
+ import debounce from "lodash/debounce";
22
+
23
+ import Container from "@/widgets/containers/Container";
24
+ import {
25
+ processValues,
26
+ getTouchedValues,
27
+ checkFieldsType,
28
+ mergeFieldsDomain,
29
+ getValuesForDomain,
30
+ getOnChangePayload,
31
+ } from "@/helpers/formHelper";
32
+ import ConnectionProvider from "@/ConnectionProvider";
33
+ import showUnsavedChangesDialog from "@/ui/UnsavedChangesDialog";
34
+ import formErrorsDialog from "@/ui/FormErrorsDialog";
35
+ import showErrorDialog from "@/ui/ActionErrorDialog";
36
+ import showWarningDialog from "@/ui/WarningDialog";
37
+ import FormProvider, {
38
+ FormContext,
39
+ FormContextType,
40
+ } from "@/context/FormContext";
41
+ import { FormView } from "@/index";
42
+ import {
43
+ FormModalContext,
44
+ FormModalContextType,
45
+ } from "@/context/FormModalContext";
46
+
47
+ import {
48
+ ActionViewContext,
49
+ ActionViewContextType,
50
+ } from "@/context/ActionViewContext";
51
+
52
+ import {
53
+ ContentRootContext,
54
+ ContentRootContextType,
55
+ } from "@/context/ContentRootContext";
56
+ import { LocaleContext, LocaleContextType } from "@/context/LocaleContext";
57
+
58
+ export type FormProps = {
59
+ model: string;
60
+ readOnly?: boolean;
61
+ id?: number;
62
+ formView?: FormView;
63
+ values?: any;
64
+ showFooter?: boolean;
65
+ getDataFromAction?: boolean;
66
+ mustClearAfterSave?: boolean;
67
+ submitMode?: "api" | "values";
68
+ onSubmitSucceed?: (id?: number, values?: any, formValues?: any) => void;
69
+ onSubmitError?: (error: any) => void;
70
+ onCancel?: () => void;
71
+ onFieldsChange?: (values: any) => void;
72
+ postSaveAction?: (event: any) => Promise<void>;
73
+ insideButtonModal?: boolean;
74
+ parentContext?: any;
75
+ actionDomain?: any;
76
+ visible?: boolean;
77
+ rootForm?: boolean;
78
+ defaultValues?: any;
79
+ forcedValues?: any;
80
+ };
81
+
82
+ const WIDTH_BREAKPOINT = 800;
83
+
84
+ function Form(props: FormProps, ref: any) {
85
+ const {
86
+ model,
87
+ id,
88
+ onCancel: propsOnCancel,
89
+ onSubmitSucceed: propsOnSubmitSucceed,
90
+ showFooter = false,
91
+ getDataFromAction = false,
92
+ onFieldsChange,
93
+ onSubmitError: propsOnSubmitError,
94
+ readOnly = false,
95
+ mustClearAfterSave = false,
96
+ submitMode = "api",
97
+ values: valuesProps,
98
+ formView: formViewProps,
99
+ postSaveAction,
100
+ insideButtonModal = false,
101
+ parentContext = {},
102
+ actionDomain,
103
+ visible = true,
104
+ rootForm = false,
105
+ defaultValues,
106
+ forcedValues = {},
107
+ } = props;
108
+ const { lang } = useContext(LocaleContext) as LocaleContextType;
109
+
110
+ const [isSubmitting, setIsSubmitting] = useState<boolean>(false);
111
+ const [error, setError] = useState<string>();
112
+ const [formOoui, setFormOoui] = useState<FormOoui>();
113
+ const [antForm] = AntForm.useForm();
114
+ const [arch, setArch] = useState<string>();
115
+ const [fields, setFields] = useState<any>();
116
+ const formModalContext = useContext(FormModalContext) as FormModalContextType;
117
+ const [containerWidth, setContainerWidth] = useState<any>();
118
+
119
+ const createdId = useRef<number>();
120
+ const originalFormValues = useRef<any>({});
121
+ const lastAssignedValues = useRef<any>({});
122
+ const warningIsShown = useRef<boolean>(false);
123
+ const formSubmitting = useRef<boolean>(false);
124
+
125
+ const responsiveBehaviour = containerWidth < WIDTH_BREAKPOINT;
126
+
127
+ const formContext = useContext(FormContext) as FormContextType;
128
+ const { activeId: parentId } = formContext || {};
129
+
130
+ const actionViewContext = useContext(
131
+ ActionViewContext
132
+ ) as ActionViewContextType;
133
+ const {
134
+ setFormIsSaving = undefined,
135
+ setFormHasChanges = undefined,
136
+ setCurrentId = undefined,
137
+ setFormIsLoading = undefined,
138
+ setAttachments = undefined,
139
+ } = (rootForm ? actionViewContext : {}) || {};
140
+
141
+ const contentRootContext = useContext(
142
+ ContentRootContext
143
+ ) as ContentRootContextType;
144
+ const { processAction, globalValues } = contentRootContext || {};
145
+
146
+ useImperativeHandle(ref, () => ({
147
+ submitForm,
148
+ getFields,
149
+ getValues,
150
+ getContext,
151
+ fetchValues,
152
+ cancelUnsavedChanges,
153
+ clearAndReload: () => {
154
+ createdId.current = undefined;
155
+ setFormOoui(undefined);
156
+ fetchData();
157
+ },
158
+ }));
159
+
160
+ useEffect(() => {
161
+ setError(undefined);
162
+
163
+ if (!model && !formViewProps) {
164
+ return;
165
+ }
166
+
167
+ if (!visible) {
168
+ createdId.current = undefined;
169
+ setFormOoui(undefined);
170
+ return;
171
+ }
172
+
173
+ // In the case we set the id to undefined for creating a new item
174
+ if (
175
+ (id === undefined && fields) ||
176
+ (id !== undefined && fields && id < 0)
177
+ ) {
178
+ createdId.current = undefined;
179
+ setFormOoui(undefined);
180
+ }
181
+
182
+ fetchData();
183
+ }, [id, model, valuesProps, formViewProps, visible]);
184
+
185
+ const onSubmitSucceed = (id?: number, values?: any, formValues?: any) => {
186
+ setFormHasChanges?.(false);
187
+ setFormIsSaving?.(false);
188
+ propsOnSubmitSucceed?.(id, values, formValues);
189
+ setCurrentId?.(id);
190
+ };
191
+
192
+ const onCancel = () => {
193
+ setFormIsSaving?.(false);
194
+ propsOnCancel?.();
195
+ };
196
+
197
+ const onSubmitError = (error: any) => {
198
+ setFormIsSaving?.(false);
199
+ propsOnSubmitError?.(error);
200
+ };
201
+
202
+ function getCurrentId() {
203
+ return id || createdId.current;
204
+ }
205
+
206
+ function getFields() {
207
+ return fields;
208
+ }
209
+
210
+ function getValues() {
211
+ const values = {
212
+ ...getCurrentValues(fields),
213
+ ...getAdditionalValues(),
214
+ };
215
+
216
+ for (const key in values) {
217
+ if (values[key] === undefined) {
218
+ delete values[key];
219
+ }
220
+ }
221
+
222
+ return values;
223
+ }
224
+
225
+ function getFormValues() {
226
+ const values = {
227
+ ...getCurrentValues(fields),
228
+ };
229
+
230
+ for (const key in values) {
231
+ if (values[key] === undefined) {
232
+ delete values[key];
233
+ }
234
+ }
235
+
236
+ return values;
237
+ }
238
+
239
+ function getContext() {
240
+ return { ...parentContext, ...formOoui?.context };
241
+ }
242
+
243
+ function getAdditionalValues() {
244
+ return {
245
+ id: getCurrentId()!,
246
+ active_id: getCurrentId()!,
247
+ parent_id: parentId,
248
+ ...globalValues,
249
+ };
250
+ }
251
+
252
+ const getDefaultValues = async (fields: any) => {
253
+ const formContext = getCurrentId() ? formOoui?.context : {};
254
+ return await ConnectionProvider.getHandler().defaultGet({
255
+ model,
256
+ fields,
257
+ context: { ...parentContext, ...formContext },
258
+ extraValues: defaultValues,
259
+ });
260
+ };
261
+
262
+ const formHasChanges = () => {
263
+ return (
264
+ Object.keys(
265
+ getTouchedValues({
266
+ source: originalFormValues.current,
267
+ target: getCurrentValues(fields),
268
+ fields,
269
+ })
270
+ ).length !== 0
271
+ );
272
+ };
273
+
274
+ const getCurrentValues = (fields: any) => {
275
+ const currentValues = antForm.getFieldsValue(true);
276
+ return processValues(currentValues, fields);
277
+ };
278
+
279
+ const setFieldValue = (field: string, value?: string) => {
280
+ assignNewValuesToForm({
281
+ values: {
282
+ ...processValues(antForm.getFieldsValue(true), fields),
283
+ [field]: value,
284
+ },
285
+ fields,
286
+ reset: false,
287
+ });
288
+ };
289
+
290
+ const getFieldValue = (field: string) => {
291
+ const values = antForm.getFieldsValue(true);
292
+ return values[field];
293
+ };
294
+
295
+ async function checkIfFormHasErrors() {
296
+ try {
297
+ await antForm.validateFields();
298
+ return false;
299
+ } catch (verror) {
300
+ return true;
301
+ }
302
+ }
303
+ const fetchData = async () => {
304
+ setError(undefined);
305
+ setFormIsLoading?.(true);
306
+
307
+ let view;
308
+
309
+ try {
310
+ if (formViewProps) {
311
+ view = { arch: formViewProps.arch, fields: formViewProps.fields };
312
+ } else {
313
+ view = await getFormView();
314
+ }
315
+
316
+ const { fields, arch } = view;
317
+ setFields(fields);
318
+ setArch(arch);
319
+
320
+ await fetchValues({
321
+ fields,
322
+ arch,
323
+ });
324
+ } catch (err) {
325
+ setError(err?.message ? err.message + err.stack : err);
326
+ setFormIsLoading?.(false);
327
+ // setLoading(false);
328
+ }
329
+ };
330
+
331
+ type FetchValuesOptions = {
332
+ fields?: any;
333
+ arch?: string;
334
+ };
335
+
336
+ const fetchValues = async (options?: FetchValuesOptions) => {
337
+ let values;
338
+ let _fields;
339
+ let _arch;
340
+
341
+ setFormIsLoading?.(true);
342
+ setError(undefined);
343
+
344
+ if (options) {
345
+ _fields = options.fields;
346
+ _arch = options.arch;
347
+ } else {
348
+ _fields = fields;
349
+ _arch = arch;
350
+ }
351
+
352
+ if (valuesProps) {
353
+ values = valuesProps;
354
+ } else {
355
+ values = await fetchValuesFromApi({
356
+ fields: _fields,
357
+ arch: _arch!,
358
+ });
359
+ }
360
+
361
+ if (actionDomain) {
362
+ values = { ...getValuesForDomain(actionDomain), ...values };
363
+ }
364
+
365
+ originalFormValues.current = processValues(values, _fields);
366
+
367
+ parseForm({ fields: _fields, arch: _arch!, values });
368
+ assignNewValuesToForm({ values, fields: _fields, reset: true });
369
+ setFormIsLoading?.(false);
370
+ setFormHasChanges?.(false);
371
+ };
372
+
373
+ function setOriginalValue(field: string, value: any) {
374
+ originalFormValues.current[field] = value;
375
+ setFormHasChanges?.(formHasChanges());
376
+ }
377
+
378
+ const cancelUnsavedChanges = async () => {
379
+ return new Promise(async (resolve) => {
380
+ if (formHasChanges()) {
381
+ showUnsavedChangesDialog({
382
+ lang,
383
+ onOk: () => {
384
+ onCancel?.();
385
+ resolve(true);
386
+ },
387
+ onCancel: () => {
388
+ resolve(false);
389
+ },
390
+ });
391
+ } else {
392
+ onCancel?.();
393
+ resolve(true);
394
+ }
395
+ });
396
+ };
397
+
398
+ const getFormView = async (): Promise<FormView> => {
399
+ if (getDataFromAction) {
400
+ const action = await ConnectionProvider.getHandler().getActionStringForModel(
401
+ model
402
+ );
403
+ const viewsForAction = await ConnectionProvider.getHandler().getViewsForAction(
404
+ {
405
+ action,
406
+ context: parentContext,
407
+ }
408
+ );
409
+ return viewsForAction.views.get("form");
410
+ }
411
+
412
+ return (await ConnectionProvider.getHandler().getView({
413
+ model,
414
+ type: "form",
415
+ context: parentContext,
416
+ })) as FormView;
417
+ };
418
+
419
+ const assignNewValuesToForm = ({
420
+ values: newValues,
421
+ fields,
422
+ reset,
423
+ }: {
424
+ values: any;
425
+ fields: any;
426
+ reset: boolean;
427
+ }) => {
428
+ const currentValues = reset ? {} : antForm.getFieldsValue(true);
429
+ const mergedValues = { ...currentValues, ...newValues };
430
+ const valuesProcessed = processValues(mergedValues, fields);
431
+ const fieldsToUpdate = Object.keys(fields).map((fieldName) => {
432
+ const fieldValue =
433
+ valuesProcessed[fieldName] !== undefined
434
+ ? valuesProcessed[fieldName]
435
+ : undefined;
436
+ return {
437
+ name: fieldName,
438
+ touched: false,
439
+ value: fieldValue,
440
+ };
441
+ });
442
+
443
+ lastAssignedValues.current = valuesProcessed;
444
+ antForm.setFields(fieldsToUpdate);
445
+ };
446
+
447
+ const fetchValuesFromApi = async ({
448
+ fields,
449
+ arch,
450
+ }: {
451
+ fields: any;
452
+ arch: string;
453
+ }) => {
454
+ let values = {};
455
+ if (getCurrentId()!) {
456
+ values = (
457
+ await ConnectionProvider.getHandler().readObjects({
458
+ arch,
459
+ model,
460
+ ids: [getCurrentId()!],
461
+ fields,
462
+ context: parentContext,
463
+ })
464
+ )[0];
465
+
466
+ const results = await ConnectionProvider.getHandler().search({
467
+ params: [
468
+ ["res_model", "=", model],
469
+ ["res_id", "=", getCurrentId()!],
470
+ ],
471
+ fields: ["id", "name"],
472
+ context: getContext(),
473
+ model: "ir.attachment",
474
+ });
475
+ setAttachments?.(results);
476
+ } else {
477
+ setAttachments?.([]);
478
+ values = await getDefaultValues(fields);
479
+ }
480
+ return values;
481
+ };
482
+
483
+ const submitApi = async (options?: { callOnSubmitSucceed?: boolean }) => {
484
+ const { callOnSubmitSucceed = true } = options || {};
485
+
486
+ if (getCurrentId()) {
487
+ const touchedValues = getTouchedValues({
488
+ source: originalFormValues.current,
489
+ target: getCurrentValues(fields),
490
+ fields,
491
+ });
492
+
493
+ await ConnectionProvider.getHandler().update({
494
+ model,
495
+ id: getCurrentId()!,
496
+ values: { ...touchedValues, ...forcedValues },
497
+ fields,
498
+ context: {
499
+ ...parentContext,
500
+ ...formOoui?.context,
501
+ },
502
+ });
503
+ originalFormValues.current = getCurrentValues(fields);
504
+ } else {
505
+ const currentValues = getCurrentValues(fields);
506
+
507
+ const newId = await ConnectionProvider.getHandler().create({
508
+ model,
509
+ values: { ...currentValues, ...forcedValues },
510
+ fields,
511
+ context: {
512
+ ...parentContext,
513
+ ...formOoui?.context,
514
+ },
515
+ });
516
+ createdId.current = newId;
517
+ originalFormValues.current = currentValues;
518
+ }
519
+
520
+ if (postSaveAction) {
521
+ await postSaveAction([getCurrentId()]);
522
+ }
523
+
524
+ if (!insideButtonModal && callOnSubmitSucceed) {
525
+ onSubmitSucceed?.(getCurrentId(), getValues(), getFormValues());
526
+ }
527
+ };
528
+
529
+ const submitValues = async (options?: { callOnSubmitSucceed?: boolean }) => {
530
+ const { callOnSubmitSucceed = true } = options || {};
531
+
532
+ if (!insideButtonModal && callOnSubmitSucceed) {
533
+ onSubmitSucceed?.(getCurrentId(), getValues(), getFormValues());
534
+ }
535
+ };
536
+
537
+ const submitForm = async (options?: { callOnSubmitSucceed?: boolean }) => {
538
+ let submitSucceed = false;
539
+ const { callOnSubmitSucceed = true } = options || {};
540
+ formSubmitting.current = true;
541
+
542
+ setError(undefined);
543
+ if (!formHasChanges() && getCurrentId()! && callOnSubmitSucceed) {
544
+ formSubmitting.current = false;
545
+ setFormHasChanges?.(false);
546
+ onCancel?.();
547
+ return true;
548
+ }
549
+
550
+ if (await checkIfFormHasErrors()) {
551
+ formSubmitting.current = false;
552
+ formErrorsDialog(lang);
553
+ return false;
554
+ }
555
+
556
+ setIsSubmitting(true);
557
+ setFormIsSaving?.(true);
558
+
559
+ try {
560
+ if (submitMode === "api") {
561
+ await submitApi(options);
562
+ } else {
563
+ await submitValues(options);
564
+ }
565
+
566
+ if (mustClearAfterSave) {
567
+ createdId.current = undefined;
568
+ assignNewValuesToForm({ values: {}, fields, reset: true });
569
+ }
570
+
571
+ await fetchValues();
572
+ submitSucceed = true;
573
+ } catch (err) {
574
+ formSubmitting.current = false;
575
+ setIsSubmitting(false);
576
+ setFormIsSaving?.(false);
577
+ onSubmitError?.(err);
578
+ setError(err?.message ? err.message : err);
579
+ } finally {
580
+ formSubmitting.current = false;
581
+ setFormIsSaving?.(false);
582
+ setIsSubmitting(false);
583
+ }
584
+
585
+ return submitSucceed;
586
+ };
587
+
588
+ const parseForm = ({
589
+ fields,
590
+ arch,
591
+ values,
592
+ }: {
593
+ arch: string;
594
+ fields: any;
595
+ values: any;
596
+ }) => {
597
+ const ooui = new FormOoui(fields);
598
+ // TODO: Here we must inject `values` to the ooui parser in order to evaluate arch+values and get the new form container
599
+ ooui.parse(arch, {
600
+ readOnly,
601
+ values: {
602
+ ...values,
603
+ ...getAdditionalValues(),
604
+ },
605
+ });
606
+ setFormOoui(ooui);
607
+
608
+ if (formModalContext && ooui.string)
609
+ formModalContext.setTitle?.(ooui.string);
610
+ };
611
+
612
+ const checkFieldsChanges = async ({
613
+ elementHasLostFocus = false,
614
+ }: {
615
+ elementHasLostFocus?: boolean;
616
+ }) => {
617
+ if (formSubmitting.current) return;
618
+
619
+ const touchedValues = getTouchedValues({
620
+ source: lastAssignedValues.current,
621
+ target: getCurrentValues(fields),
622
+ fields,
623
+ });
624
+
625
+ const changedFields = Object.keys(touchedValues);
626
+
627
+ if (changedFields.length !== 0) {
628
+ // We check if there are any field of type text, email, url or char inside the changed values
629
+ // in order to ignore the call, because it will fire when element lost focus
630
+ if (
631
+ checkFieldsType({
632
+ changedFields,
633
+ fields,
634
+ types: [
635
+ "text",
636
+ "email",
637
+ "url",
638
+ "char",
639
+ "float",
640
+ "float_time",
641
+ "integer",
642
+ "many2one",
643
+ ],
644
+ }) &&
645
+ elementHasLostFocus !== true
646
+ ) {
647
+ return;
648
+ } else {
649
+ const values = processValues(antForm.getFieldsValue(true), fields);
650
+ lastAssignedValues.current = values;
651
+
652
+ onFieldsChange?.(values);
653
+ setFormHasChanges?.(true);
654
+
655
+ evaluateChanges(changedFields);
656
+ }
657
+ }
658
+ };
659
+
660
+ const debouncedCheckFieldsChanges = debounce(checkFieldsChanges, 100);
661
+
662
+ const evaluateChanges = async (changedFields: any) => {
663
+ try {
664
+ for (let i = 0; i < changedFields.length; i += 1) {
665
+ const changedField = changedFields[i];
666
+ await processFieldOnChange(changedField);
667
+ }
668
+ } catch (err) {
669
+ showErrorDialog(err);
670
+ }
671
+ };
672
+
673
+ const processFieldOnChange = async (fieldName: string) => {
674
+ const onChangeFieldAction = formOoui?.onChangeFields[fieldName];
675
+ const currentValues = processValues(antForm.getFieldsValue(true), fields);
676
+
677
+ if (!onChangeFieldAction) {
678
+ parseForm({
679
+ fields,
680
+ arch: arch!,
681
+ values: currentValues,
682
+ });
683
+ return;
684
+ }
685
+
686
+ const payload = getOnChangePayload({
687
+ values: {
688
+ ...currentValues,
689
+ context: {
690
+ ...parentContext,
691
+ ...formOoui?.context,
692
+ },
693
+ },
694
+ onChangeFieldActionArgs: onChangeFieldAction.args,
695
+ });
696
+
697
+ const response = await ConnectionProvider.getHandler().executeOnChange({
698
+ model,
699
+ action: onChangeFieldAction.method,
700
+ ids: getCurrentId()! ? [getCurrentId()!] : [],
701
+ payload,
702
+ fields,
703
+ });
704
+
705
+ if (response.value) {
706
+ const processedValues = { ...currentValues, ...response.value };
707
+ parseForm({ fields, arch: arch!, values: processedValues });
708
+ assignNewValuesToForm({
709
+ values: processedValues,
710
+ fields: fields,
711
+ reset: false,
712
+ });
713
+ }
714
+
715
+ if (
716
+ response.warning &&
717
+ response.warning.title &&
718
+ response.warning.message &&
719
+ !warningIsShown.current
720
+ ) {
721
+ const { title, message } = response.warning;
722
+ warningIsShown.current = true;
723
+ showWarningDialog(title, message, () => {
724
+ warningIsShown.current = false;
725
+ });
726
+ }
727
+
728
+ if (response.domain) {
729
+ const proccessedFields = mergeFieldsDomain({
730
+ fieldsDomain: response.domain,
731
+ fields,
732
+ });
733
+
734
+ parseForm({
735
+ fields: proccessedFields,
736
+ arch: arch!,
737
+ values: currentValues,
738
+ });
739
+ setFields(proccessedFields);
740
+ }
741
+ };
742
+
743
+ async function runObjectButton({
744
+ action,
745
+ context,
746
+ }: {
747
+ action: string;
748
+ context: any;
749
+ }) {
750
+ const response = await ConnectionProvider.getHandler().execute({
751
+ model,
752
+ action,
753
+ payload: [getCurrentId()!],
754
+ context: {
755
+ ...context,
756
+ ...formOoui?.context,
757
+ ...parentContext,
758
+ },
759
+ });
760
+
761
+ if (
762
+ typeof response === "object" &&
763
+ response !== null &&
764
+ Object.keys(response).length === 0 &&
765
+ insideButtonModal
766
+ ) {
767
+ onSubmitSucceed?.(getCurrentId(), getValues(), getFormValues());
768
+ } else if (
769
+ response.type &&
770
+ response.type === "ir.actions.act_window_close"
771
+ ) {
772
+ onSubmitSucceed?.(getCurrentId(), getValues(), getFormValues());
773
+ } else if (response.type) {
774
+ await runAction({ actionData: response, context });
775
+ } else {
776
+ await fetchValues();
777
+ }
778
+ }
779
+
780
+ async function runWorkflowButton({ action }: { action: string }) {
781
+ const response = await ConnectionProvider.getHandler().executeWorkflow({
782
+ model,
783
+ action,
784
+ payload: getCurrentId()!,
785
+ });
786
+
787
+ if (response.type && response.type === "ir.actions.act_window_close") {
788
+ onSubmitSucceed?.(getCurrentId(), getValues(), getFormValues());
789
+ } else {
790
+ await fetchValues();
791
+ }
792
+ }
793
+
794
+ async function runActionButton({
795
+ action,
796
+ context,
797
+ }: {
798
+ action: string;
799
+ context: any;
800
+ }) {
801
+ const actionData = (
802
+ await ConnectionProvider.getHandler().readObjects({
803
+ model: "ir.actions.actions",
804
+ ids: [parseInt(action)],
805
+ context: parentContext,
806
+ })
807
+ )[0];
808
+
809
+ await runAction({ actionData, context });
810
+ }
811
+
812
+ async function runAction({
813
+ actionData,
814
+ context,
815
+ }: {
816
+ actionData: any;
817
+ context: any;
818
+ }) {
819
+ const { closeParent } =
820
+ (await processAction?.({
821
+ actionData,
822
+ fields,
823
+ values: getValues(),
824
+ context: {
825
+ ...context,
826
+ ...parentContext,
827
+ ...formOoui?.context,
828
+ },
829
+ onRefreshParentValues: () => {
830
+ fetchValues();
831
+ },
832
+ })) || {};
833
+
834
+ if (!rootForm && closeParent) {
835
+ onSubmitSucceed?.(getCurrentId(), getValues(), getFormValues());
836
+ }
837
+ }
838
+
839
+ function elementHasLostFocus() {
840
+ checkFieldsChanges({ elementHasLostFocus: true });
841
+ }
842
+
843
+ async function executeButtonAction({
844
+ type,
845
+ action,
846
+ context,
847
+ }: {
848
+ type: string;
849
+ action: string;
850
+ context?: any;
851
+ }) {
852
+ // If the type of the button it's a cancel, we just close our form
853
+ if (type === "cancel") {
854
+ onCancel?.();
855
+ return;
856
+ }
857
+
858
+ // We check for required fields
859
+ if (await checkIfFormHasErrors()) {
860
+ formErrorsDialog(lang);
861
+ return;
862
+ }
863
+
864
+ try {
865
+ await submitForm({ callOnSubmitSucceed: false });
866
+
867
+ if (type === "object") {
868
+ await runObjectButton({ action, context });
869
+ } else if (type === "workflow") {
870
+ await runWorkflowButton({ action });
871
+ } else if (type === "action") {
872
+ await runActionButton({ action, context });
873
+ }
874
+ } catch (err) {
875
+ showErrorDialog(err);
876
+ }
877
+ }
878
+
879
+ const content = () => {
880
+ if (!formOoui && !error) {
881
+ return <Spin />;
882
+ }
883
+
884
+ if (!model && !formViewProps) {
885
+ return null;
886
+ }
887
+
888
+ if (!visible) {
889
+ return null;
890
+ }
891
+
892
+ return (
893
+ <>
894
+ <FormProvider
895
+ getValues={getValues}
896
+ getFields={getFields}
897
+ domain={actionDomain}
898
+ activeId={id}
899
+ activeModel={model}
900
+ setFieldValue={setFieldValue}
901
+ getFieldValue={getFieldValue}
902
+ executeButtonAction={executeButtonAction}
903
+ getContext={getContext}
904
+ setOriginalValue={setOriginalValue}
905
+ submitForm={submitForm}
906
+ fetchValues={fetchValues}
907
+ formHasChanges={formHasChanges}
908
+ elementHasLostFocus={elementHasLostFocus}
909
+ >
910
+ <AntForm
911
+ form={antForm}
912
+ onFieldsChange={() => {
913
+ debouncedCheckFieldsChanges({ elementHasLostFocus: false });
914
+ }}
915
+ component={false}
916
+ preserve={false}
917
+ >
918
+ {formOoui && (
919
+ <Container
920
+ container={formOoui.container}
921
+ responsiveBehaviour={responsiveBehaviour}
922
+ />
923
+ )}
924
+ </AntForm>
925
+ </FormProvider>
926
+ </>
927
+ );
928
+ };
929
+
930
+ const footer = () => {
931
+ return (
932
+ <>
933
+ <Divider />
934
+ <Row justify="end">
935
+ <Space>
936
+ <Button
937
+ icon={<CloseOutlined />}
938
+ disabled={isSubmitting}
939
+ onClick={async () => {
940
+ await cancelUnsavedChanges();
941
+ }}
942
+ >
943
+ Cancel
944
+ </Button>
945
+ <Button
946
+ disabled={isSubmitting || readOnly}
947
+ loading={isSubmitting}
948
+ icon={<CheckOutlined />}
949
+ onClick={async () => {
950
+ await submitForm();
951
+ }}
952
+ type="primary"
953
+ >
954
+ OK
955
+ </Button>
956
+ </Space>
957
+ </Row>
958
+ </>
959
+ );
960
+ };
961
+
962
+ if (!visible) {
963
+ return null;
964
+ }
965
+
966
+ return (
967
+ <Measure
968
+ bounds
969
+ onResize={(contentRect) => {
970
+ setContainerWidth(contentRect.bounds?.width!);
971
+ }}
972
+ >
973
+ {({ measureRef }) => (
974
+ <div className="pb-2" ref={measureRef}>
975
+ {error && (
976
+ <Alert
977
+ className="mt-10 mb-20"
978
+ message={JSON.stringify(error)}
979
+ type="error"
980
+ banner
981
+ />
982
+ )}
983
+ {content()}
984
+ {showFooter && footer()}
985
+ </div>
986
+ )}
987
+ </Measure>
988
+ );
989
+ }
990
+
991
+ export default forwardRef(Form);