@gisce/react-ooui 2.0.0-rc.8 → 2.0.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.
- package/dist/ConnectionProvider.d.ts +1 -1
- package/dist/ConnectionProvider.d.ts.map +1 -1
- package/dist/actionbar/ActionButton.d.ts +2 -3
- package/dist/actionbar/ActionButton.d.ts.map +1 -1
- package/dist/actionbar/AttachmentsButton.d.ts +2 -3
- package/dist/actionbar/AttachmentsButton.d.ts.map +1 -1
- package/dist/actionbar/AttachmentsButtonWrapper.d.ts +3 -4
- package/dist/actionbar/AttachmentsButtonWrapper.d.ts.map +1 -1
- package/dist/actionbar/ButtonWithBadge.d.ts +3 -4
- package/dist/actionbar/ButtonWithBadge.d.ts.map +1 -1
- package/dist/actionbar/ChangeViewButton.d.ts +3 -4
- package/dist/actionbar/ChangeViewButton.d.ts.map +1 -1
- package/dist/actionbar/DashboardActionBar.d.ts +1 -2
- package/dist/actionbar/DashboardActionBar.d.ts.map +1 -1
- package/dist/actionbar/DropdownButton.d.ts +4 -3
- package/dist/actionbar/DropdownButton.d.ts.map +1 -1
- package/dist/actionbar/FormActionBar.d.ts +1 -2
- package/dist/actionbar/FormActionBar.d.ts.map +1 -1
- package/dist/actionbar/GraphActionBar.d.ts +1 -2
- package/dist/actionbar/GraphActionBar.d.ts.map +1 -1
- package/dist/actionbar/NewButton.d.ts +2 -3
- package/dist/actionbar/NewButton.d.ts.map +1 -1
- package/dist/actionbar/SearchBar.d.ts +2 -3
- package/dist/actionbar/SearchBar.d.ts.map +1 -1
- package/dist/actionbar/TreeActionBar.d.ts +2 -3
- package/dist/actionbar/TreeActionBar.d.ts.map +1 -1
- package/dist/common/ButtonWithTooltip.d.ts +2 -3
- package/dist/common/ButtonWithTooltip.d.ts.map +1 -1
- package/dist/common/DatePicker.d.ts +3 -4
- package/dist/common/DatePicker.d.ts.map +1 -1
- package/dist/common/Field.d.ts +1 -1
- package/dist/common/Field.d.ts.map +1 -1
- package/dist/common/SelectAllRecordsRow.d.ts +9 -0
- package/dist/common/SelectAllRecordsRow.d.ts.map +1 -0
- package/dist/common/TimePicker.d.ts +10 -0
- package/dist/common/TimePicker.d.ts.map +1 -0
- package/dist/context/ActionViewContext.d.ts +4 -4
- package/dist/context/ActionViewContext.d.ts.map +1 -1
- package/dist/context/ConfigContext.d.ts +9 -1
- package/dist/context/ConfigContext.d.ts.map +1 -1
- package/dist/context/ContentRootContext.d.ts +2 -2
- package/dist/context/ContentRootContext.d.ts.map +1 -1
- package/dist/context/DashboardActionContext.d.ts +3 -3
- package/dist/context/DashboardActionContext.d.ts.map +1 -1
- package/dist/context/FormContext.d.ts +2 -2
- package/dist/context/FormContext.d.ts.map +1 -1
- package/dist/context/FormModalContext.d.ts +2 -2
- package/dist/context/FormModalContext.d.ts.map +1 -1
- package/dist/context/LocaleContext.d.ts +2 -2
- package/dist/context/LocaleContext.d.ts.map +1 -1
- package/dist/context/One2manyContext.d.ts +2 -2
- package/dist/context/One2manyContext.d.ts.map +1 -1
- package/dist/context/TabManagerContext.d.ts +5 -5
- package/dist/context/TabManagerContext.d.ts.map +1 -1
- package/dist/helpers/containerHelper.d.ts.map +1 -1
- package/dist/helpers/dayjs.d.ts +3 -0
- package/dist/helpers/dayjs.d.ts.map +1 -0
- package/dist/helpers/dynamicColumnsHelper.d.ts.map +1 -1
- package/dist/helpers/errorHelper.d.ts.map +1 -1
- package/dist/helpers/filesHelper.d.ts +1 -1
- package/dist/helpers/filesHelper.d.ts.map +1 -1
- package/dist/helpers/formHelper.d.ts.map +1 -1
- package/dist/helpers/iconMapper.d.ts +2 -2
- package/dist/helpers/iconMapper.d.ts.map +1 -1
- package/dist/helpers/logInfoHelper.d.ts.map +1 -1
- package/dist/helpers/one2manyHelper.d.ts +5 -5
- package/dist/helpers/one2manyHelper.d.ts.map +1 -1
- package/dist/helpers/searchHelper.d.ts.map +1 -1
- package/dist/helpers/timeHelper.d.ts.map +1 -1
- package/dist/helpers/treeHelper.d.ts +3 -3
- package/dist/helpers/treeHelper.d.ts.map +1 -1
- package/dist/helpers/viewHelper.d.ts +3 -3
- package/dist/helpers/viewHelper.d.ts.map +1 -1
- package/dist/hooks/useEffectDebugger.d.ts +3 -0
- package/dist/hooks/useEffectDebugger.d.ts.map +1 -0
- package/dist/hooks/useExport.d.ts.map +1 -1
- package/dist/hooks/useFetchViews.d.ts +1 -0
- package/dist/hooks/useFetchViews.d.ts.map +1 -0
- package/dist/hooks/useSearch.d.ts +3 -3
- package/dist/hooks/useSearch.d.ts.map +1 -1
- package/dist/hooks/useWindowDimensions.d.ts.map +1 -1
- package/dist/index.d.ts +47 -47
- package/dist/index.d.ts.map +1 -1
- package/dist/locales/ca_ES.d.ts +1 -0
- package/dist/locales/ca_ES.d.ts.map +1 -1
- package/dist/locales/en_US.d.ts +1 -0
- package/dist/locales/en_US.d.ts.map +1 -1
- package/dist/locales/es_ES.d.ts +1 -0
- package/dist/locales/es_ES.d.ts.map +1 -1
- package/dist/react-ooui.es.js +7247 -8856
- package/dist/react-ooui.es.js.map +1 -1
- package/dist/style.css +1 -1
- package/dist/types/index.d.ts +47 -46
- package/dist/types/index.d.ts.map +1 -1
- package/dist/ui/ActionErrorDialog.d.ts.map +1 -1
- package/dist/ui/ConfirmDialog.d.ts +1 -1
- package/dist/ui/ConfirmDialog.d.ts.map +1 -1
- package/dist/ui/ErrorAlert.d.ts +1 -2
- package/dist/ui/ErrorAlert.d.ts.map +1 -1
- package/dist/ui/FavouriteButton.d.ts +4 -5
- package/dist/ui/FavouriteButton.d.ts.map +1 -1
- package/dist/ui/FormErrorsDialog.d.ts.map +1 -1
- package/dist/ui/GenericErrorDialog.d.ts.map +1 -1
- package/dist/ui/GoToResourceModal.d.ts +3 -4
- package/dist/ui/GoToResourceModal.d.ts.map +1 -1
- package/dist/ui/InfoDialog.d.ts.map +1 -1
- package/dist/ui/RefreshItemDialog.d.ts.map +1 -1
- package/dist/ui/RemoveItemDialog.d.ts.map +1 -1
- package/dist/ui/TitleHeader.d.ts +2 -3
- package/dist/ui/TitleHeader.d.ts.map +1 -1
- package/dist/ui/UnlinkItemDialog.d.ts.map +1 -1
- package/dist/ui/UnsavedChangesDialog.d.ts.map +1 -1
- package/dist/ui/WarningDialog.d.ts +1 -1
- package/dist/ui/WarningDialog.d.ts.map +1 -1
- package/dist/views/ActionView.d.ts +2 -2
- package/dist/views/ActionView.d.ts.map +1 -1
- package/dist/views/CurrentTabContent.d.ts +1 -2
- package/dist/views/CurrentTabContent.d.ts.map +1 -1
- package/dist/views/RootView.d.ts +2 -2
- package/dist/views/RootView.d.ts.map +1 -1
- package/dist/views/TabContent.d.ts +2 -2
- package/dist/views/TabContent.d.ts.map +1 -1
- package/dist/views/TabSelector.d.ts +1 -2
- package/dist/views/TabSelector.d.ts.map +1 -1
- package/dist/views/Welcome.d.ts.map +1 -1
- package/dist/views/actionViews/DashboardActionView.d.ts +4 -4
- package/dist/views/actionViews/DashboardActionView.d.ts.map +1 -1
- package/dist/views/actionViews/FormActionView.d.ts +3 -4
- package/dist/views/actionViews/FormActionView.d.ts.map +1 -1
- package/dist/views/actionViews/GraphActionView.d.ts +3 -4
- package/dist/views/actionViews/GraphActionView.d.ts.map +1 -1
- package/dist/views/actionViews/TreeActionView.d.ts +3 -4
- package/dist/views/actionViews/TreeActionView.d.ts.map +1 -1
- package/dist/views/tabs/Tab.d.ts +2 -3
- package/dist/views/tabs/Tab.d.ts.map +1 -1
- package/dist/widgets/WidgetFactory.d.ts.map +1 -1
- package/dist/widgets/base/Binary.d.ts +3 -4
- package/dist/widgets/base/Binary.d.ts.map +1 -1
- package/dist/widgets/base/Boolean.d.ts +2 -3
- package/dist/widgets/base/Boolean.d.ts.map +1 -1
- package/dist/widgets/base/Button.d.ts +2 -3
- package/dist/widgets/base/Button.d.ts.map +1 -1
- package/dist/widgets/base/Char.d.ts +3 -4
- package/dist/widgets/base/Char.d.ts.map +1 -1
- package/dist/widgets/base/Date.d.ts +2 -3
- package/dist/widgets/base/Date.d.ts.map +1 -1
- package/dist/widgets/base/DateTime.d.ts +2 -3
- package/dist/widgets/base/DateTime.d.ts.map +1 -1
- package/dist/widgets/base/Email.d.ts +2 -3
- package/dist/widgets/base/Email.d.ts.map +1 -1
- package/dist/widgets/base/Float.d.ts +2 -3
- package/dist/widgets/base/Float.d.ts.map +1 -1
- package/dist/widgets/base/FloatTime.d.ts +2 -2
- package/dist/widgets/base/FloatTime.d.ts.map +1 -1
- package/dist/widgets/base/Image.d.ts +3 -4
- package/dist/widgets/base/Image.d.ts.map +1 -1
- package/dist/widgets/base/Integer.d.ts +3 -4
- package/dist/widgets/base/Integer.d.ts.map +1 -1
- package/dist/widgets/base/Label.d.ts +3 -4
- package/dist/widgets/base/Label.d.ts.map +1 -1
- package/dist/widgets/base/LinkInput.d.ts +1 -2
- package/dist/widgets/base/LinkInput.d.ts.map +1 -1
- package/dist/widgets/base/MultiSelection.d.ts +4 -5
- package/dist/widgets/base/MultiSelection.d.ts.map +1 -1
- package/dist/widgets/base/ProgressBar.d.ts +3 -4
- package/dist/widgets/base/ProgressBar.d.ts.map +1 -1
- package/dist/widgets/base/Reference.d.ts +2 -2
- package/dist/widgets/base/Reference.d.ts.map +1 -1
- package/dist/widgets/base/ReferenceTree.d.ts +1 -1
- package/dist/widgets/base/ReferenceTree.d.ts.map +1 -1
- package/dist/widgets/base/Selection.d.ts +4 -5
- package/dist/widgets/base/Selection.d.ts.map +1 -1
- package/dist/widgets/base/Separator.d.ts +2 -3
- package/dist/widgets/base/Separator.d.ts.map +1 -1
- package/dist/widgets/base/Text.d.ts +2 -3
- package/dist/widgets/base/Text.d.ts.map +1 -1
- package/dist/widgets/base/Time.d.ts +4 -5
- package/dist/widgets/base/Time.d.ts.map +1 -1
- package/dist/widgets/base/Url.d.ts +2 -3
- package/dist/widgets/base/Url.d.ts.map +1 -1
- package/dist/widgets/base/many2one/Many2one.d.ts +2 -2
- package/dist/widgets/base/many2one/Many2one.d.ts.map +1 -1
- package/dist/widgets/base/many2one/Many2oneSuffix.d.ts +2 -3
- package/dist/widgets/base/many2one/Many2oneSuffix.d.ts.map +1 -1
- package/dist/widgets/base/many2one/Many2oneSuffixModal.d.ts +2 -3
- package/dist/widgets/base/many2one/Many2oneSuffixModal.d.ts.map +1 -1
- package/dist/widgets/base/many2one/Many2oneTree.d.ts +1 -1
- package/dist/widgets/base/many2one/Many2oneTree.d.ts.map +1 -1
- package/dist/widgets/base/one2many/One2many.d.ts +2 -3
- package/dist/widgets/base/one2many/One2many.d.ts.map +1 -1
- package/dist/widgets/base/one2many/One2manyInput.d.ts +4 -4
- package/dist/widgets/base/one2many/One2manyInput.d.ts.map +1 -1
- package/dist/widgets/base/one2many/One2manyTopBar.d.ts +3 -4
- package/dist/widgets/base/one2many/One2manyTopBar.d.ts.map +1 -1
- package/dist/widgets/containers/Container.d.ts +1 -1
- package/dist/widgets/containers/Container.d.ts.map +1 -1
- package/dist/widgets/containers/Group.d.ts +1 -1
- package/dist/widgets/containers/Group.d.ts.map +1 -1
- package/dist/widgets/containers/Notebook.d.ts +1 -1
- package/dist/widgets/containers/Notebook.d.ts.map +1 -1
- package/dist/widgets/custom/Avatar.d.ts +2 -2
- package/dist/widgets/custom/Avatar.d.ts.map +1 -1
- package/dist/widgets/custom/ButtonGroup.d.ts +2 -3
- package/dist/widgets/custom/ButtonGroup.d.ts.map +1 -1
- package/dist/widgets/custom/CodeEditor.d.ts +3 -4
- package/dist/widgets/custom/CodeEditor.d.ts.map +1 -1
- package/dist/widgets/custom/Comments.d.ts +11 -12
- package/dist/widgets/custom/Comments.d.ts.map +1 -1
- package/dist/widgets/custom/FiberGrid.d.ts +3 -4
- package/dist/widgets/custom/FiberGrid.d.ts.map +1 -1
- package/dist/widgets/custom/Indicator.d.ts +3 -4
- package/dist/widgets/custom/Indicator.d.ts.map +1 -1
- package/dist/widgets/custom/Markdown.d.ts +3 -4
- package/dist/widgets/custom/Markdown.d.ts.map +1 -1
- package/dist/widgets/custom/MultiCheckbox.d.ts +4 -5
- package/dist/widgets/custom/MultiCheckbox.d.ts.map +1 -1
- package/dist/widgets/custom/Radio.d.ts +4 -5
- package/dist/widgets/custom/Radio.d.ts.map +1 -1
- package/dist/widgets/custom/Steps.d.ts +4 -5
- package/dist/widgets/custom/Steps.d.ts.map +1 -1
- package/dist/widgets/custom/Switch.d.ts +2 -3
- package/dist/widgets/custom/Switch.d.ts.map +1 -1
- package/dist/widgets/custom/Tag.d.ts +5 -6
- package/dist/widgets/custom/Tag.d.ts.map +1 -1
- package/dist/widgets/custom/Tags.d.ts +5 -6
- package/dist/widgets/custom/Tags.d.ts.map +1 -1
- package/dist/widgets/custom/Timeline.d.ts +5 -6
- package/dist/widgets/custom/Timeline.d.ts.map +1 -1
- package/dist/widgets/modals/ExportModal.d.ts +2 -3
- package/dist/widgets/modals/ExportModal.d.ts.map +1 -1
- package/dist/widgets/modals/FormModal.d.ts +3 -4
- package/dist/widgets/modals/FormModal.d.ts.map +1 -1
- package/dist/widgets/modals/SearchModal.d.ts +2 -3
- package/dist/widgets/modals/SearchModal.d.ts.map +1 -1
- package/dist/widgets/modals/TranslationModal.d.ts +2 -3
- package/dist/widgets/modals/TranslationModal.d.ts.map +1 -1
- package/dist/widgets/views/Dashboard/Dashboard.d.ts +1 -1
- package/dist/widgets/views/Dashboard/Dashboard.d.ts.map +1 -1
- package/dist/widgets/views/Dashboard/DashboardForm.d.ts +1 -2
- package/dist/widgets/views/Dashboard/DashboardForm.d.ts.map +1 -1
- package/dist/widgets/views/Dashboard/DashboardTree.d.ts +4 -5
- package/dist/widgets/views/Dashboard/DashboardTree.d.ts.map +1 -1
- package/dist/widgets/views/Dashboard/dashboardHelper.d.ts.map +1 -1
- package/dist/widgets/views/DashboardGrid/DashboardGrid.d.ts +1 -2
- package/dist/widgets/views/DashboardGrid/DashboardGrid.d.ts.map +1 -1
- package/dist/widgets/views/DashboardGrid/DashboardGrid.types.d.ts +2 -2
- package/dist/widgets/views/DashboardGrid/DashboardGrid.types.d.ts.map +1 -1
- package/dist/widgets/views/DashboardGrid/DashboardGridItem.d.ts +1 -2
- package/dist/widgets/views/DashboardGrid/DashboardGridItem.d.ts.map +1 -1
- package/dist/widgets/views/DashboardGrid/DashboardGridItem.types.d.ts +2 -2
- package/dist/widgets/views/DashboardGrid/DashboardGridItem.types.d.ts.map +1 -1
- package/dist/widgets/views/DashboardGrid/index.d.ts.map +1 -1
- package/dist/widgets/views/Form.d.ts +2 -2
- package/dist/widgets/views/Form.d.ts.map +1 -1
- package/dist/widgets/views/Graph/Graph.d.ts +1 -1
- package/dist/widgets/views/Graph/Graph.d.ts.map +1 -1
- package/dist/widgets/views/Graph/GraphChart.d.ts +2 -3
- package/dist/widgets/views/Graph/GraphChart.d.ts.map +1 -1
- package/dist/widgets/views/Graph/GraphDefaults.d.ts.map +1 -1
- package/dist/widgets/views/Graph/GraphIndicator.d.ts +2 -3
- package/dist/widgets/views/Graph/GraphIndicator.d.ts.map +1 -1
- package/dist/widgets/views/Graph/useGraphData.d.ts +2 -2
- package/dist/widgets/views/Graph/useGraphData.d.ts.map +1 -1
- package/dist/widgets/views/SearchTree.d.ts +5 -5
- package/dist/widgets/views/SearchTree.d.ts.map +1 -1
- package/dist/widgets/views/{Tree.d.ts → Tree/Tree.d.ts} +8 -7
- package/dist/widgets/views/Tree/Tree.d.ts.map +1 -0
- package/dist/widgets/views/Tree/index.d.ts +2 -0
- package/dist/widgets/views/Tree/index.d.ts.map +1 -0
- package/dist/widgets/views/Tree/treeComponents.d.ts +131 -0
- package/dist/widgets/views/Tree/treeComponents.d.ts.map +1 -0
- package/dist/widgets/views/searchFilter/DateRangePicker.d.ts +2 -3
- package/dist/widgets/views/searchFilter/DateRangePicker.d.ts.map +1 -1
- package/dist/widgets/views/searchFilter/DateTimeRangePicker.d.ts +2 -3
- package/dist/widgets/views/searchFilter/DateTimeRangePicker.d.ts.map +1 -1
- package/dist/widgets/views/searchFilter/PairFields.d.ts +1 -1
- package/dist/widgets/views/searchFilter/PairFields.d.ts.map +1 -1
- package/dist/widgets/views/searchFilter/SearchBottomBar.d.ts +3 -3
- package/dist/widgets/views/searchFilter/SearchBottomBar.d.ts.map +1 -1
- package/dist/widgets/views/searchFilter/SearchField.d.ts +2 -3
- package/dist/widgets/views/searchFilter/SearchField.d.ts.map +1 -1
- package/dist/widgets/views/searchFilter/SearchFilter.d.ts +3 -4
- package/dist/widgets/views/searchFilter/SearchFilter.d.ts.map +1 -1
- package/dist/widgets/views/searchFilter/SearchParams.d.ts +1 -1
- package/dist/widgets/views/searchFilter/SearchParams.d.ts.map +1 -1
- package/package.json +108 -56
- package/dist/react-ooui.umd.js +0 -38
- package/dist/react-ooui.umd.js.map +0 -1
- package/dist/widgets/views/Tree.d.ts.map +0 -1
- package/src/ConnectionProvider.ts +0 -16
- package/src/__tests__/iconMapper.test.ts +0 -30
- package/src/__tests__/searchFilterHelper.spec.ts +0 -386
- package/src/actionbar/ActionButton.tsx +0 -40
- package/src/actionbar/AttachmentsButton.tsx +0 -130
- package/src/actionbar/AttachmentsButtonWrapper.tsx +0 -157
- package/src/actionbar/ButtonWithBadge.tsx +0 -42
- package/src/actionbar/ChangeViewButton.tsx +0 -137
- package/src/actionbar/DashboardActionBar.tsx +0 -67
- package/src/actionbar/DropdownButton.tsx +0 -61
- package/src/actionbar/FormActionBar.tsx +0 -485
- package/src/actionbar/GraphActionBar.tsx +0 -67
- package/src/actionbar/NewButton.tsx +0 -46
- package/src/actionbar/SearchBar.tsx +0 -73
- package/src/actionbar/TreeActionBar.tsx +0 -376
- package/src/common/ButtonWithTooltip.tsx +0 -18
- package/src/common/DatePicker.tsx +0 -99
- package/src/common/Field.tsx +0 -92
- package/src/context/ActionViewContext.tsx +0 -209
- package/src/context/ConfigContext.tsx +0 -9
- package/src/context/ContentRootContext.tsx +0 -454
- package/src/context/DashboardActionContext.tsx +0 -45
- package/src/context/FormContext.tsx +0 -79
- package/src/context/FormModalContext.tsx +0 -29
- package/src/context/LocaleContext.tsx +0 -50
- package/src/context/One2manyContext.tsx +0 -46
- package/src/context/TabManagerContext.tsx +0 -118
- package/src/helpers/containerHelper.ts +0 -145
- package/src/helpers/dynamicColumnsHelper.ts +0 -73
- package/src/helpers/errorHelper.ts +0 -27
- package/src/helpers/filesHelper.ts +0 -41
- package/src/helpers/formHelper.ts +0 -302
- package/src/helpers/iconMapper.ts +0 -164
- package/src/helpers/logInfoHelper.tsx +0 -28
- package/src/helpers/one2manyHelper.ts +0 -194
- package/src/helpers/searchHelper.ts +0 -193
- package/src/helpers/timeHelper.ts +0 -58
- package/src/helpers/treeHelper.ts +0 -204
- package/src/helpers/viewHelper.ts +0 -23
- package/src/hooks/useEffectDebugger.ts +0 -43
- package/src/hooks/useExport.ts +0 -438
- package/src/hooks/useFetchViews.ts +0 -0
- package/src/hooks/useSearch.ts +0 -434
- package/src/hooks/useWindowDimensions.ts +0 -33
- package/src/index.ts +0 -168
- package/src/locales/ca_ES.tsx +0 -98
- package/src/locales/en_US.tsx +0 -95
- package/src/locales/es_ES.tsx +0 -99
- package/src/stories/Binary.stories.tsx +0 -26
- package/src/stories/Boolean.stories.tsx +0 -25
- package/src/stories/Button.stories.tsx +0 -136
- package/src/stories/Char.stories.tsx +0 -52
- package/src/stories/FiberGrid.stories.tsx +0 -112
- package/src/stories/Float.stories.tsx +0 -25
- package/src/stories/FloatTime.stories.tsx +0 -35
- package/src/stories/Image.stories.tsx +0 -28
- package/src/stories/Integer.stories.tsx +0 -25
- package/src/stories/Label.stories.tsx +0 -103
- package/src/stories/Many2one.stories.tsx +0 -34
- package/src/stories/One2many.stories.tsx +0 -295
- package/src/stories/ProgressBar.stories.tsx +0 -25
- package/src/stories/Reference.stories.tsx +0 -46
- package/src/stories/Selection.stories.tsx +0 -37
- package/src/stories/Separator.stories.tsx +0 -57
- package/src/stories/Text.stories.tsx +0 -38
- package/src/stories/Time.stories.tsx +0 -32
- package/src/stories/Utils.stories.tsx +0 -16
- package/src/stories/containers/Group.stories.tsx +0 -90
- package/src/stories/containers/NewLine.stories.tsx +0 -56
- package/src/stories/containers/Notebook.stories.tsx +0 -199
- package/src/stories/custom/Avatar.stories.tsx +0 -27
- package/src/stories/custom/ButtonGroup.stories.tsx +0 -61
- package/src/stories/custom/CodeEditor.stories.tsx +0 -28
- package/src/stories/custom/Comments.stories.tsx +0 -190
- package/src/stories/custom/Indicator.stories.tsx +0 -44
- package/src/stories/custom/Markdown.stories.tsx +0 -42
- package/src/stories/custom/MultiCheckbox.stories.tsx +0 -55
- package/src/stories/custom/Radio.stories.tsx +0 -71
- package/src/stories/custom/Steps.stories.tsx +0 -41
- package/src/stories/custom/Switch.stories.tsx +0 -26
- package/src/stories/custom/Tag.stories.tsx +0 -60
- package/src/stories/custom/Tags.stories.tsx +0 -70
- package/src/stories/dashboard/Dashboard.stories.tsx +0 -23
- package/src/stories/dashboard/DashboardGrid.stories.tsx +0 -43
- package/src/stories/forms/ActivacioContracteForm.stories.tsx +0 -25
- package/src/stories/forms/Attachment.stories.tsx +0 -24
- package/src/stories/forms/CUPSForm.stories.tsx +0 -25
- package/src/stories/forms/Company.stories.tsx +0 -25
- package/src/stories/forms/CrmCaseForm.stories.tsx +0 -25
- package/src/stories/forms/Documents.stories.tsx +0 -25
- package/src/stories/forms/FormWithGridFiber.stories.tsx +0 -25
- package/src/stories/forms/FormWithLinks.stories.tsx +0 -31
- package/src/stories/forms/Lead.stories.tsx +0 -25
- package/src/stories/forms/ModContractForm.stories.tsx +0 -25
- package/src/stories/forms/PartnersForm.stories.tsx +0 -25
- package/src/stories/forms/PolissaForm.stories.tsx +0 -25
- package/src/stories/forms/PreferencesForm.stories.tsx +0 -696
- package/src/stories/forms/Signatures.stories.tsx +0 -25
- package/src/stories/forms/Switching.stories.tsx +0 -25
- package/src/stories/graphs/GraphIndicator.stories.tsx +0 -20
- package/src/stories/graphs/PieGraph.stories.tsx +0 -78
- package/src/stories/mocks/index.ts +0 -46
- package/src/stories/mocks/mockProvider.ts +0 -186
- package/src/stories/mocks/models/activacioContracte.ts +0 -112
- package/src/stories/mocks/models/attachment.ts +0 -1327
- package/src/stories/mocks/models/butlleti.ts +0 -344
- package/src/stories/mocks/models/company.ts +0 -137
- package/src/stories/mocks/models/crm_case.ts +0 -595
- package/src/stories/mocks/models/cups.ts +0 -920
- package/src/stories/mocks/models/document.ts +0 -225
- package/src/stories/mocks/models/factura.ts +0 -2727
- package/src/stories/mocks/models/form_with_gridfiber.ts +0 -143
- package/src/stories/mocks/models/hist_autoconsum.ts +0 -148
- package/src/stories/mocks/models/lead.ts +0 -2109
- package/src/stories/mocks/models/modcontractual.ts +0 -806
- package/src/stories/mocks/models/partner.ts +0 -1360
- package/src/stories/mocks/models/polissa.ts +0 -3133
- package/src/stories/mocks/models/res_partner_category.ts +0 -15
- package/src/stories/mocks/models/signatura.ts +0 -618
- package/src/stories/mocks/models/switching.ts +0 -769
- package/src/stories/modals/FormModal.stories.tsx +0 -36
- package/src/stories/modals/SearchModal.stories.tsx +0 -37
- package/src/stories/trees/FacturesTree.stories.tsx +0 -16
- package/src/stories/ui/ActionBar.stories.tsx +0 -24
- package/src/stories/ui/FavouriteButton.stories.tsx +0 -19
- package/src/stories/ui/GoToResourceModal.stories.tsx +0 -27
- package/src/stories/views/ActionView.stories.tsx +0 -28
- package/src/stories/views/SearchTree.stories.tsx +0 -1110
- package/src/stories/views/Tab.stories.tsx +0 -96
- package/src/stories/views/TabsAndContent.stories.tsx +0 -91
- package/src/stories/views/Tree.stories.jsx +0 -184
- package/src/stories/views/searchFilter/DateRangePicker.stories.tsx +0 -25
- package/src/stories/views/searchFilter/DateTimeRangePicker.stories.tsx +0 -26
- package/src/stories/views/searchFilter/PairFields.stories.tsx +0 -26
- package/src/stories/views/searchFilter/SearchFilter.stories.tsx +0 -169
- package/src/stories/views/searchFilter/examples/PartnersSearchFilter.stories.tsx +0 -428
- package/src/tailwind.css +0 -8
- package/src/tailwind.generated.css +0 -168533
- package/src/types/index.ts +0 -391
- package/src/ui/ActionErrorDialog.tsx +0 -24
- package/src/ui/ConfirmDialog.tsx +0 -28
- package/src/ui/ErrorAlert.tsx +0 -37
- package/src/ui/FavouriteButton.tsx +0 -272
- package/src/ui/FormErrorsDialog.tsx +0 -17
- package/src/ui/GenericErrorDialog.tsx +0 -16
- package/src/ui/GoToResourceModal.tsx +0 -75
- package/src/ui/InfoDialog.tsx +0 -13
- package/src/ui/RefreshItemDialog.tsx +0 -29
- package/src/ui/RemoveItemDialog.tsx +0 -20
- package/src/ui/TitleHeader.tsx +0 -110
- package/src/ui/UnlinkItemDialog.tsx +0 -20
- package/src/ui/UnsavedChangesDialog.tsx +0 -29
- package/src/ui/WarningDialog.tsx +0 -17
- package/src/views/ActionView.tsx +0 -514
- package/src/views/CurrentTabContent.tsx +0 -21
- package/src/views/RootView.tsx +0 -510
- package/src/views/TabContent.tsx +0 -31
- package/src/views/TabSelector.tsx +0 -31
- package/src/views/Welcome.tsx +0 -18
- package/src/views/actionViews/DashboardActionView.tsx +0 -47
- package/src/views/actionViews/FormActionView.tsx +0 -70
- package/src/views/actionViews/GraphActionView.tsx +0 -152
- package/src/views/actionViews/TreeActionView.tsx +0 -87
- package/src/views/tabs/Tab.tsx +0 -82
- package/src/widgets/WidgetFactory.tsx +0 -142
- package/src/widgets/base/Binary.tsx +0 -145
- package/src/widgets/base/Boolean.tsx +0 -45
- package/src/widgets/base/Button.tsx +0 -77
- package/src/widgets/base/Char.tsx +0 -157
- package/src/widgets/base/Date.tsx +0 -12
- package/src/widgets/base/DateTime.tsx +0 -12
- package/src/widgets/base/Email.tsx +0 -27
- package/src/widgets/base/Float.tsx +0 -39
- package/src/widgets/base/FloatTime.tsx +0 -73
- package/src/widgets/base/Image.tsx +0 -120
- package/src/widgets/base/Integer.tsx +0 -56
- package/src/widgets/base/Label.tsx +0 -56
- package/src/widgets/base/LinkInput.tsx +0 -101
- package/src/widgets/base/MultiSelection.tsx +0 -91
- package/src/widgets/base/ProgressBar.tsx +0 -38
- package/src/widgets/base/Reference.tsx +0 -115
- package/src/widgets/base/ReferenceTree.tsx +0 -62
- package/src/widgets/base/Selection.tsx +0 -65
- package/src/widgets/base/Separator.tsx +0 -26
- package/src/widgets/base/Text.tsx +0 -162
- package/src/widgets/base/Time.tsx +0 -41
- package/src/widgets/base/Url.tsx +0 -26
- package/src/widgets/base/many2one/Many2one.tsx +0 -323
- package/src/widgets/base/many2one/Many2oneSuffix.tsx +0 -221
- package/src/widgets/base/many2one/Many2oneSuffixModal.tsx +0 -42
- package/src/widgets/base/many2one/Many2oneTree.tsx +0 -18
- package/src/widgets/base/one2many/One2many.tsx +0 -100
- package/src/widgets/base/one2many/One2manyInput.tsx +0 -724
- package/src/widgets/base/one2many/One2manyTopBar.tsx +0 -158
- package/src/widgets/containers/Container.tsx +0 -99
- package/src/widgets/containers/Group.tsx +0 -37
- package/src/widgets/containers/Notebook.tsx +0 -45
- package/src/widgets/custom/Avatar.tsx +0 -32
- package/src/widgets/custom/ButtonGroup.tsx +0 -166
- package/src/widgets/custom/CodeEditor.tsx +0 -28
- package/src/widgets/custom/Comments.tsx +0 -144
- package/src/widgets/custom/FiberGrid.tsx +0 -48
- package/src/widgets/custom/Indicator.tsx +0 -67
- package/src/widgets/custom/Markdown.tsx +0 -22
- package/src/widgets/custom/MultiCheckbox.tsx +0 -165
- package/src/widgets/custom/Radio.tsx +0 -49
- package/src/widgets/custom/Steps.tsx +0 -55
- package/src/widgets/custom/Switch.tsx +0 -30
- package/src/widgets/custom/Tag.tsx +0 -49
- package/src/widgets/custom/Tags.tsx +0 -164
- package/src/widgets/custom/Timeline.tsx +0 -196
- package/src/widgets/modals/ExportModal.tsx +0 -75
- package/src/widgets/modals/FormModal.tsx +0 -122
- package/src/widgets/modals/SearchModal.tsx +0 -130
- package/src/widgets/modals/TranslationModal.tsx +0 -202
- package/src/widgets/views/Dashboard/Dashboard.tsx +0 -381
- package/src/widgets/views/Dashboard/DashboardForm.tsx +0 -30
- package/src/widgets/views/Dashboard/DashboardTree.tsx +0 -236
- package/src/widgets/views/Dashboard/dashboardHelper.ts +0 -79
- package/src/widgets/views/DashboardGrid/DashboardGrid.tsx +0 -53
- package/src/widgets/views/DashboardGrid/DashboardGrid.types.ts +0 -4
- package/src/widgets/views/DashboardGrid/DashboardGridItem.tsx +0 -62
- package/src/widgets/views/DashboardGrid/DashboardGridItem.types.ts +0 -10
- package/src/widgets/views/DashboardGrid/index.ts +0 -4
- package/src/widgets/views/Form.tsx +0 -1153
- package/src/widgets/views/Graph/Graph.tsx +0 -145
- package/src/widgets/views/Graph/GraphChart.tsx +0 -113
- package/src/widgets/views/Graph/GraphDefaults.ts +0 -170
- package/src/widgets/views/Graph/GraphIndicator.tsx +0 -421
- package/src/widgets/views/Graph/useGraphData.tsx +0 -176
- package/src/widgets/views/SearchTree.tsx +0 -357
- package/src/widgets/views/Tree.tsx +0 -400
- package/src/widgets/views/searchFilter/DateRangePicker.tsx +0 -16
- package/src/widgets/views/searchFilter/DateTimeRangePicker.tsx +0 -63
- package/src/widgets/views/searchFilter/PairFields.tsx +0 -56
- package/src/widgets/views/searchFilter/SearchBottomBar.tsx +0 -58
- package/src/widgets/views/searchFilter/SearchField.tsx +0 -59
- package/src/widgets/views/searchFilter/SearchFilter.tsx +0 -159
- package/src/widgets/views/searchFilter/SearchParams.tsx +0 -32
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react-ooui.es.js","sources":["../src/widgets/base/Label.tsx","../src/locales/ca_ES.tsx","../src/locales/en_US.tsx","../src/locales/es_ES.tsx","../src/context/LocaleContext.tsx","../src/common/Field.tsx","../src/ui/ConfirmDialog.tsx","../src/context/FormContext.tsx","../src/helpers/iconMapper.ts","../src/widgets/base/Button.tsx","../src/widgets/custom/ButtonGroup.tsx","../src/hooks/useWindowDimensions.ts","../src/ConnectionProvider.ts","../src/helpers/errorHelper.ts","../src/ui/ActionErrorDialog.tsx","../src/widgets/modals/TranslationModal.tsx","../src/common/ButtonWithTooltip.tsx","../src/ui/InfoDialog.tsx","../src/widgets/base/Char.tsx","../src/widgets/base/Selection.tsx","../src/widgets/base/Boolean.tsx","../node_modules/lodash/isObject.js","../node_modules/lodash/_freeGlobal.js","../node_modules/lodash/_root.js","../node_modules/lodash/now.js","../node_modules/lodash/_trimmedEndIndex.js","../node_modules/lodash/_baseTrim.js","../node_modules/lodash/_Symbol.js","../node_modules/lodash/_getRawTag.js","../node_modules/lodash/_objectToString.js","../node_modules/lodash/_baseGetTag.js","../node_modules/lodash/isObjectLike.js","../node_modules/lodash/isSymbol.js","../node_modules/lodash/toNumber.js","../node_modules/lodash/debounce.js","../src/helpers/filesHelper.ts","../src/widgets/base/Image.tsx","../src/widgets/custom/FiberGrid.tsx","../src/helpers/treeHelper.ts","../src/helpers/one2manyHelper.ts","../src/widgets/custom/Timeline.tsx","../src/widgets/custom/Indicator.tsx","../src/helpers/formHelper.ts","../src/widgets/custom/Tag.tsx","../src/widgets/custom/Tags.tsx","../src/widgets/WidgetFactory.tsx","../src/helpers/containerHelper.ts","../src/widgets/containers/Container.tsx","../src/ui/UnsavedChangesDialog.tsx","../src/ui/FormErrorsDialog.tsx","../src/ui/WarningDialog.tsx","../src/context/FormModalContext.tsx","../src/helpers/searchHelper.ts","../src/hooks/useSearch.ts","../src/context/ActionViewContext.tsx","../src/context/TabManagerContext.tsx","../src/context/ContentRootContext.tsx","../src/ui/ErrorAlert.tsx","../src/widgets/views/Form.tsx","../src/widgets/modals/FormModal.tsx","../src/widgets/views/searchFilter/DateRangePicker.tsx","../src/widgets/views/searchFilter/DateTimeRangePicker.tsx","../src/widgets/base/Float.tsx","../src/widgets/base/Integer.tsx","../src/widgets/views/searchFilter/PairFields.tsx","../src/widgets/base/MultiSelection.tsx","../src/widgets/views/searchFilter/SearchField.tsx","../src/widgets/views/searchFilter/SearchBottomBar.tsx","../src/widgets/views/searchFilter/SearchParams.tsx","../src/widgets/views/searchFilter/SearchFilter.tsx","../src/helpers/dynamicColumnsHelper.ts","../src/helpers/timeHelper.ts","../src/widgets/base/ProgressBar.tsx","../src/widgets/base/many2one/Many2oneSuffixModal.tsx","../src/widgets/base/many2one/Many2oneSuffix.tsx","../src/widgets/base/many2one/Many2oneTree.tsx","../src/widgets/base/ReferenceTree.tsx","../node_modules/dayjs/dayjs.min.js","../src/widgets/custom/Avatar.tsx","../node_modules/dayjs/plugin/weekday.js","../node_modules/dayjs/plugin/localeData.js","../src/common/DatePicker.tsx","../src/widgets/views/Tree.tsx","../src/widgets/views/SearchTree.tsx","../src/widgets/modals/SearchModal.tsx","../src/ui/GenericErrorDialog.tsx","../src/widgets/base/many2one/Many2one.tsx","../src/context/One2manyContext.tsx","../src/widgets/views/Graph/GraphIndicator.tsx","../src/widgets/views/Graph/GraphDefaults.ts","../src/widgets/views/Graph/useGraphData.tsx","../src/widgets/views/Graph/GraphChart.tsx","../src/widgets/views/Graph/Graph.tsx","../src/ui/RemoveItemDialog.tsx","../src/ui/UnlinkItemDialog.tsx","../src/widgets/base/one2many/One2manyTopBar.tsx","../src/widgets/base/one2many/One2manyInput.tsx","../src/widgets/base/one2many/One2many.tsx","../src/widgets/base/FloatTime.tsx","../src/widgets/containers/Group.tsx","../src/widgets/containers/Notebook.tsx","../src/widgets/base/Text.tsx","../src/widgets/base/Separator.tsx","../src/hooks/useExport.ts","../src/widgets/modals/ExportModal.tsx","../src/widgets/base/Date.tsx","../src/widgets/base/DateTime.tsx","../node_modules/dayjs/plugin/customParseFormat.js","../src/widgets/base/Time.tsx","../src/widgets/base/Reference.tsx","../src/widgets/base/Binary.tsx","../src/actionbar/ChangeViewButton.tsx","../src/actionbar/DropdownButton.tsx","../src/actionbar/ActionButton.tsx","../src/actionbar/NewButton.tsx","../src/ui/RefreshItemDialog.tsx","../src/helpers/logInfoHelper.tsx","../src/actionbar/AttachmentsButtonWrapper.tsx","../src/actionbar/AttachmentsButton.tsx","../src/actionbar/FormActionBar.tsx","../src/widgets/base/LinkInput.tsx","../src/widgets/base/Url.tsx","../src/widgets/base/Email.tsx","../src/ui/GoToResourceModal.tsx","../src/actionbar/ButtonWithBadge.tsx","../src/actionbar/GraphActionBar.tsx","../src/ui/TitleHeader.tsx","../src/views/actionViews/GraphActionView.tsx","../src/views/actionViews/FormActionView.tsx","../src/actionbar/SearchBar.tsx","../src/context/ConfigContext.tsx","../src/actionbar/TreeActionBar.tsx","../src/views/actionViews/TreeActionView.tsx","../src/context/DashboardActionContext.tsx","../src/actionbar/DashboardActionBar.tsx","../src/views/actionViews/DashboardActionView.tsx","../src/helpers/viewHelper.ts","../src/views/ActionView.tsx","../src/widgets/views/Dashboard/dashboardHelper.ts","../src/widgets/views/DashboardGrid/DashboardGrid.tsx","../src/widgets/views/DashboardGrid/DashboardGridItem.tsx","../src/widgets/views/Dashboard/DashboardTree.tsx","../src/widgets/views/Dashboard/DashboardForm.tsx","../src/widgets/views/Dashboard/Dashboard.tsx","../src/widgets/custom/MultiCheckbox.tsx","../src/widgets/custom/Markdown.tsx","../src/widgets/custom/Radio.tsx","../src/widgets/custom/Switch.tsx","../src/widgets/custom/Steps.tsx","../src/widgets/custom/CodeEditor.tsx","../node_modules/dayjs/plugin/relativeTime.js","../src/widgets/custom/Comments.tsx","../src/views/Welcome.tsx","../src/views/RootView.tsx","../src/views/tabs/Tab.tsx","../src/views/TabSelector.tsx","../src/views/TabContent.tsx","../src/views/CurrentTabContent.tsx","../src/ui/FavouriteButton.tsx"],"sourcesContent":["import React from \"react\";\nimport { Tooltip, Typography, theme } from \"antd\";\nimport { WidgetProps } from \"@/types\";\nimport { QuestionCircleOutlined } from \"@ant-design/icons\";\nimport { Label as LabelOoui } from \"@gisce/ooui\";\nimport { Interweave } from \"interweave\";\nconst { Text, Title } = Typography;\nconst { useToken } = theme;\n\ntype Props = WidgetProps & {\n align?: \"left\" | \"center\" | \"right\";\n responsiveBehaviour?: boolean;\n};\n\nconst alignClass = {\n left: \"justify-start\",\n center: \"justify-center\",\n right: \"justify-end\",\n};\n\nconst Label = (props: Props) => {\n const { ooui, align, responsiveBehaviour } = props;\n const { label, tooltip, fieldForLabel, labelSize, labelType } =\n ooui as LabelOoui;\n const addColon = fieldForLabel !== null ? true : false;\n const labelText = addColon && label.length > 1 ? label + \" :\" : label;\n const responsiveAlign = responsiveBehaviour ? \"left\" : \"right\";\n const labelAlgin = align ? align : fieldForLabel ? responsiveAlign : \"left\";\n const { token } = useToken();\n\n const TextType = labelSize === undefined ? Text : Title;\n\n return (\n <div\n className={`flex flex-row items-center pb-1 pt-1 ${alignClass[labelAlgin]}`}\n >\n {tooltip && (\n <Tooltip title={tooltip}>\n <QuestionCircleOutlined className=\"pr-1 text-xs\" style={{\n color: token.colorPrimary\n }} />\n </Tooltip>\n )}\n <span className=\"pr-2\">\n <TextType\n level={labelSize}\n type={labelType as any}\n >\n <Interweave content={labelText} />\n </TextType>\n </span>\n </div>\n );\n};\n\nexport default Label;\n","export default {\n true: \"Sí\",\n false: \"No\",\n simple_search: \"Búsqueda simple\",\n advanced_search: \"Búsqueda avançada\",\n search: \"Buscar\",\n parameters: \"Paràmetres\",\n limit: \"Limit\",\n first: \"Primer\",\n no_results: \"No hi ha resultats\",\n summary:\n \"Mostrant resultats des de {from} fins {to} d'un total de {total} registres\",\n welcome: \"Benvingut\",\n attachments: \"Adjunts\",\n addNewAttachment: \"Afegir nou adjunt\",\n listAllAttachments: \"Veure tots els adjunts\",\n viewAs: \"Veure com\",\n confirmRemoveItem: \"Estàs segur de volguer eliminar aquest item?\",\n save: \"Desar\",\n delete: \"Eliminar\",\n refresh: \"Refrescar\",\n previous: \"Anterior\",\n next: \"Següent\",\n actions: \"Accions\",\n reports: \"Informes\",\n related: \"Relacionat\",\n new: \"Nou\",\n fillRequiredField: \"Siusplau, omple aquest camp obligatori\",\n fillRequiredFields: \"Siusplau, omple tots els camps obligatoris\",\n generatingReport: \"Generant informe...\",\n confirmation: \"Confirmació\",\n ok: \"D'acord\",\n cancel: \"Cancel·lar\",\n formHasErrors: \"El formulari té errors\",\n unsavedChanges: \"Hi ha canvis sense guardar\",\n confirmRefreshWithoutSave:\n \"Estàs segur de volguer refrescar la pàgina sense guardar els canvis?\",\n discardAndRefresh: \"Descarta els canvis i refresca\",\n removeItems: \"Elimina el registre/s\",\n confirmRemove: \"Estàs segur de volguer eliminar els registre/s seleccionats?\",\n yesConfirmRemove: \"Sí, elimina\",\n unlinkItems: \"Desenllaça registre/s\",\n confirmUnlink:\n \"Estàs segur de volguer desenllaçar els registre/s seleccionats?\",\n yesConfirmUnlink: \"Sí, desenllaça\",\n confirmCloseWithoutSave:\n \"Estàs segur de volguer tancar aquesta finestra sense guardar?\",\n closeWithoutSaving: \"Tancar sense guardar\",\n action: \"Acció\",\n report: \"Informe\",\n selectAction: \"Selecciona una acció\",\n download: \"Descarrega\",\n clear: \"Neteja\",\n open: \"Obre\",\n uploadNewImage: \"Puja una nova imatge\",\n noCurrentEntries: \"No hi ha registres\",\n duplicate: \"Duplicar\",\n downloadingAttachment: \"Descarregant adjunt...\",\n tree: \"llista\",\n form: \"formulari\",\n favorites: \"Els meus favorits\",\n edit_favorites: \"Edita els favorits\",\n no_favorites: \"No tens favorits guardats\",\n register: \"Registre\",\n of: \"de\",\n editingDocument: \"Editant document\",\n showLogs: \"Veure logs\",\n createdBy: \"Creat per l'usuari\",\n creationDate: \"Data creació\",\n lastUpdatedBy: \"Última modificació per\",\n lastUpdatedDate: \"Data última modificació\",\n goToResourceId: \"Vés al recurs amb ID\",\n searchId: \"ID de cerca:\",\n idNotFound: \"No es troba aquesta id de recurs per l'objecte\",\n selectedRegisters: \"registres seleccionats\",\n translate: \"Traduïr\",\n enterTextBeforeTranslate:\n \"Introdueix algun text al camp abans d'afegir traduccions\",\n saveBeforeTranslate:\n \"Heu de desar el registre abans d'afegir les traduccions\",\n configDashboard: \"Configurar panell\",\n moveDashboard: \"Moure items del panell\",\n openAttachment: \"Veure detall de l'adjunt\",\n openAttachmentLink: \"Obrir enllaç de l'adjunt\",\n uninformed: \"Sense informar\",\n totalRegisters: \"Registres totals:\",\n export: \"Exportar\",\n selectAtLeastOneField: \"Selecciona almenys un camp per a l'exportació\",\n printScreen: \"Imprimir pantalla\",\n advancedExport: \"Exportació avançada\",\n savedRegisters: \"Registre guardat correctament\",\n errorWhileSavingForm: \"Error en guardar el formulari\",\n autor: \"Autor\",\n recordsSelected:\n \"Hi ha {numberOfSelectedRows} registres seleccionats en aquesta pàgina.\",\n selectAllRecords: \"Seleccionar tots els {totalRecords} registres.\",\n allRecordsSelected: \"Hi ha {totalRecords} registres seleccionats.\",\n};\n","export default {\n true: \"Yes\",\n false: \"No\",\n simple_search: \"Simple search\",\n advanced_search: \"Advanced search\",\n search: \"Search\",\n parameters: \"Parameters\",\n limit: \"Limit\",\n first: \"First\",\n no_results: \"No results\",\n summary: \"Showing registers from {from} to {to} of {total} registers\",\n welcome: \"Welcome\",\n attachments: \"Attachments\",\n addNewAttachment: \"Add new attachment\",\n listAllAttachments: \"View all the attachments\",\n viewAs: \"View as\",\n confirmRemoveItem: \"Are you sure to remove this item?\",\n save: \"Save\",\n delete: \"Delete\",\n refresh: \"Refresh\",\n previous: \"Previous\",\n next: \"Next\",\n actions: \"Actions\",\n reports: \"Reports\",\n related: \"Related\",\n new: \"New\",\n fillRequiredField: \"Please fill this required field\",\n fillRequiredFields: \"Please fill all the required fields\",\n generatingReport: \"Generating report...\",\n confirmation: \"Confirmation\",\n ok: \"OK\",\n cancel: \"Cancel\",\n formHasErrors: \"Form has errors\",\n unsavedChanges: \"There are unsaved changes\",\n confirmRefreshWithoutSave:\n \"Do you really want to refresh this window without saving?\",\n discardAndRefresh: \"Discard changes and refresh\",\n removeItems: \"Remove item/s\",\n confirmRemove: \"Are you sure you want to remove the selected item/s?\",\n yesConfirmRemove: \"Yes, remove\",\n unlinkItems: \"Unlink item/s\",\n confirmUnlink: \"Are you sure you want to unlink the selected item/s?\",\n yesConfirmUnlink: \"Yes, unlink\",\n confirmCloseWithoutSave:\n \"Do you really want to close this window without saving?\",\n closeWithoutSaving: \"Close without saving\",\n action: \"Action\",\n report: \"Report\",\n selectAction: \"Select an action\",\n download: \"Download\",\n clear: \"Clear\",\n open: \"Open\",\n uploadNewImage: \"Upload new image\",\n noCurrentEntries: \"No current entries\",\n duplicate: \"Duplicate\",\n downloadingAttachment: \"Downloading attachment...\",\n tree: \"list\",\n form: \"form\",\n favorites: \"My shortcuts\",\n edit_favorites: \"Edit shortcuts\",\n no_favorites: \"You don't have any shortcuts saved yet\",\n register: \"Register\",\n of: \"of\",\n editingDocument: \"Editing document\",\n showLogs: \"Show logs\",\n createdBy: \"Created by user\",\n creationDate: \"Creation date\",\n lastUpdatedBy: \"Last modified by\",\n lastUpdatedDate: \"Date of last modification\",\n goToResourceId: \"Go to resource ID\",\n searchId: \"Search ID:\",\n idNotFound: \"Resource ID does not exist for this object!\",\n selectedRegisters: \"selected registers\",\n translate: \"Translate\",\n enterTextBeforeTranslate:\n \"Enter some text to the related field before adding translations\",\n saveBeforeTranslate: \"You must save the record before adding translations\",\n configDashboard: \"Setup dashboard\",\n moveDashboard: \"Move dashboard items\",\n openAttachment: \"Open attachment detail\",\n openAttachmentLink: \"Open attachment link\",\n uninformed: \"Uninformed\",\n totalRegisters: \"Total registers:\",\n export: \"Export\",\n selectAtLeastOneField: \"Select at least one field for the export\",\n printScreen: \"Print screen\",\n advancedExport: \"Advanced export\",\n savedRegisters: \"Record successfully saved\",\n errorWhileSavingForm: \"Error while saving form\",\n author: \"Author\",\n recordsSelected:\n \"Hi ha {numberOfSelectedRows} registres seleccionats en aquesta pàgina.\",\n selectAllRecords: \"Seleccionar tots els {totalRecords} registres.\",\n allRecordsSelected: \"Hi ha {totalRecords} registres seleccionats.\",\n};\n","export default {\n true: \"Sí\",\n false: \"No\",\n simple_search: \"Búsqueda simple\",\n advanced_search: \"Búsqueda avanzada\",\n search: \"Buscar\",\n parameters: \"Parametros\",\n limit: \"Límite\",\n first: \"Primero\",\n no_results: \"No hay resultados\",\n summary:\n \"Mostrando resultado desde {from} hasta {to} de un total de {total} registros\",\n welcome: \"Bienvenido\",\n attachments: \"Adjuntos\",\n addNewAttachment: \"Añadir nuevo adjunto\",\n listAllAttachments: \"Ver todos los adjuntos\",\n viewAs: \"Ver cómo\",\n confirmRemoveItem: \"Estás seguro de querer eliminar éste registro?\",\n save: \"Guardar\",\n delete: \"Eliminar\",\n refresh: \"Refrescar\",\n previous: \"Anterior\",\n next: \"Siguiente\",\n actions: \"Acciones\",\n reports: \"Informes\",\n related: \"Relacionado\",\n new: \"Nuevo\",\n fillRequiredField: \"Por favor, rellena éste campo obligatorio\",\n fillRequiredFields: \"Por favor, rellena todos los campos obligatorios\",\n generatingReport: \"Generando informe...\",\n confirmation: \"Confirmacióm\",\n ok: \"De acuerdo\",\n cancel: \"Cancelar\",\n formHasErrors: \"El formulario tiene errores\",\n unsavedChanges: \"Hay cambios sin guardar\",\n confirmRefreshWithoutSave:\n \"Estás seguro de querer refrescar la página sin guardar los cambios?\",\n discardAndRefresh: \"Descarta los cambios y refresca\",\n removeItems: \"Eliminar el registro/s\",\n confirmRemove:\n \"Estás seguro de querer eliminar los registro/s seleccionados?\",\n yesConfirmRemove: \"Sí, elimina\",\n unlinkItems: \"Desenlaza registro/s\",\n confirmUnlink:\n \"Estás seguro de querer desenlazar los registro/s seleccionados?\",\n yesConfirmUnlink: \"Sí, desenlaza\",\n confirmCloseWithoutSave:\n \"Estás seguro de querer cerrar ésta ventana sin cerrar?\",\n closeWithoutSaving: \"Cerrar sin guardar\",\n action: \"Acción\",\n report: \"Informe\",\n selectAction: \"Selecciona una acción\",\n download: \"Descarga\",\n clear: \"Limpiar\",\n open: \"Abrir\",\n uploadNewImage: \"Subir una nueva imágen\",\n noCurrentEntries: \"No hay registros\",\n duplicate: \"Duplicar\",\n downloadingAttachment: \"Descargando adjunto...\",\n tree: \"lista\",\n form: \"formulario\",\n favorites: \"Mis favoritos\",\n edit_favorites: \"Edita los favoritos\",\n no_favorites: \"No tienes favoritos guardados\",\n register: \"Registro\",\n of: \"de\",\n editingDocument: \"Editando documento\",\n showLogs: \"Ver logs\",\n createdBy: \"Creado por el usuario\",\n creationDate: \"Fecha creación\",\n lastUpdatedBy: \"Última modificación por\",\n lastUpdatedDate: \"Fecha última modificación\",\n goToResourceId: \"Ir al recurso con ID\",\n searchId: \"ID de búsqueda:\",\n idNotFound: \"No se encuentra ésta ID de recursos para el objeto\",\n selectedRegisters: \"registros seleccionados\",\n translate: \"Traducir\",\n enterTextBeforeTranslate:\n \"Introduce algun texto en el campo antes de añadir traducciones\",\n saveBeforeTranslate:\n \"Tienes que guardar el registro antes de añadir las traducciones\",\n configDashboard: \"Configurar panel\",\n moveDashboard: \"Mover items del panel\",\n openAttachment: \"Ver detalle del adjunto\",\n openAttachmentLink: \"Abrir enlace del adjunto\",\n uninformed: \"Sin informar\",\n totalRegisters: \"Registros totales:\",\n export: \"Exportar\",\n selectAtLeastOneField: \"Selecciona al menos un campo para la exportación\",\n printScreen: \"Imprimir pantalla\",\n advancedExport: \"Exportación avanzada\",\n savedRegisters: \"Registro guardado correctamente\",\n errorWhileSavingForm: \"Error al guardar el formulario\",\n author: \"Autor\",\n recordsSelected:\n \"Hay {numberOfSelectedRows} registros seleccionados en ésta página.\",\n selectAllRecords: \"Seleccionar todos los {totalRecords} registros.\",\n allRecordsSelected: \"Hay {totalRecords} registros seleccionados.\",\n};\n","import React from \"react\";\nimport ca_ES from \"@/locales/ca_ES\";\nimport en_US from \"@/locales/en_US\";\nimport es_ES from \"@/locales/es_ES\";\n\nconst localeStrings: any = {\n ca_ES,\n en_US,\n es_ES,\n};\n\nexport type LocaleContextType = {\n lang: string;\n t: (key: string) => string;\n};\n\nexport const LocaleContext = React.createContext<LocaleContextType | null>(\n null\n);\n\ntype LocaleContextProps = {\n children: React.ReactNode;\n lang: string;\n};\n\nconst LocaleContextProvider = (props: LocaleContextProps): any => {\n const { children, lang } = props;\n\n function t(key: string): string {\n return tForLang(key, lang);\n }\n\n return (\n <LocaleContext.Provider\n value={{\n lang,\n t,\n }}\n >\n {children}\n </LocaleContext.Provider>\n );\n};\n\nexport const tForLang = (key: string, lang: string) => {\n const translated = localeStrings[lang]?.[key];\n return translated || key;\n};\n\nexport default LocaleContextProvider;\n","import React, { useContext } from \"react\";\nimport { Form, Row, Col } from \"antd\";\nimport { Field as FieldOoui, Label as LabelOoui } from \"@gisce/ooui\";\nimport Label from \"@/widgets/base/Label\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\nexport default function Field({\n ooui,\n children,\n layout = \"horizontal\",\n valuePropName,\n showLabel = false,\n alignLabel = \"left\",\n required = false,\n type,\n validator,\n}: {\n ooui: FieldOoui;\n children?: React.ReactNode;\n layout?: \"horizontal\" | \"vertical\";\n valuePropName?: string;\n showLabel?: boolean;\n alignLabel?: \"left\" | \"center\" | \"right\";\n required?: boolean;\n type?: any;\n validator?: any;\n}) {\n const { id, label, tooltip } = ooui;\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n const rules = required\n ? [\n {\n required: true,\n message: t(\"fillRequiredField\"),\n type,\n validator,\n },\n ]\n : undefined;\n\n const formItem = () => (\n <Form.Item\n className=\"mb-0\"\n name={id}\n valuePropName={valuePropName}\n rules={rules}\n >\n {children}\n </Form.Item>\n );\n\n if (!showLabel) {\n return formItem();\n }\n\n const labelWidget = (\n <Label\n ooui={\n new LabelOoui({\n name: id + \"_label\",\n string: label,\n help: tooltip,\n fieldForLabel: id,\n })\n }\n align={alignLabel}\n />\n );\n\n const horizontalMode = () => {\n return (\n <Row align=\"middle\" className=\"pb-1 pt-1\">\n <Col className=\"ml-2\" flex=\"7rem\">\n <div className=\"flex flex-col items-end\">{labelWidget}</div>\n </Col>\n <Col flex=\"auto\">{formItem()}</Col>\n </Row>\n );\n };\n\n const verticalMode = () => {\n return (\n <>\n {labelWidget}\n {formItem()}\n </>\n );\n };\n\n return layout === \"horizontal\" ? horizontalMode() : verticalMode();\n}\n","import React from \"react\";\nimport { Modal } from \"antd\";\nimport { ExclamationCircleOutlined } from \"@ant-design/icons\";\nimport { tForLang } from \"@/context/LocaleContext\";\n\nconst { confirm } = Modal;\n\nconst showDialog = ({\n onOk,\n confirmMessage,\n lang\n}: {\n onOk: () => void;\n confirmMessage: string;\n lang: string;\n}) => {\n confirm({\n title: tForLang(\"confirmation\", lang),\n icon: <ExclamationCircleOutlined />,\n centered: true,\n content: confirmMessage,\n okText: tForLang(\"ok\", lang),\n cancelText: tForLang(\"cancel\", lang),\n onOk,\n });\n};\n\nexport default showDialog;\n","import React, { useRef, useState } from \"react\";\n\nexport type FormContextType = {\n activeId?: number;\n activeModel: string;\n setFieldValue: (field: string, value?: string) => void;\n getFieldValue: (field: string) => string;\n executeButtonAction: ({\n type,\n action,\n context,\n }: {\n type: string;\n action: string;\n context?: any;\n }) => Promise<void>;\n getContext: () => Promise<any>;\n getValues: () => Promise<any>;\n getPlainValues: () => { [key: string]: any };\n getFields: () => Promise<any>;\n domain: any[];\n submitForm?: (options?: {\n callOnSubmitSucceed?: boolean;\n }) => Promise<{ succeed: boolean; id: number }>;\n fetchValues?: () => void;\n formHasChanges?: () => boolean;\n elementHasLostFocus?: () => void;\n};\n\nexport const FormContext = React.createContext<FormContextType | null>(null);\n\ntype FormProviderProps = FormContextType & {\n children: React.ReactNode;\n};\n\nconst FormProvider = (props: FormProviderProps): any => {\n const {\n children,\n activeId,\n activeModel,\n setFieldValue,\n getFieldValue,\n executeButtonAction,\n getContext,\n getValues,\n getPlainValues,\n domain,\n submitForm,\n fetchValues,\n formHasChanges,\n elementHasLostFocus,\n getFields,\n } = props;\n\n return (\n <FormContext.Provider\n value={{\n domain,\n getValues,\n getPlainValues,\n getFields,\n activeId,\n activeModel,\n setFieldValue,\n getFieldValue,\n executeButtonAction,\n getContext,\n submitForm,\n fetchValues,\n formHasChanges,\n elementHasLostFocus,\n }}\n >\n {children}\n </FormContext.Provider>\n );\n};\n\nexport default FormProvider;\n","import React, { CSSProperties } from \"react\";\nimport * as AntIcons from \"@ant-design/icons\";\nimport * as TablerIcons from \"@tabler/icons-react\";\nimport Icon from \"@ant-design/icons\";\n\ntype TablerKey = keyof typeof TablerIcons;\ntype AntKey = keyof typeof AntIcons;\n\nconst iconMapping: { [key: string]: string } = {\n \"terp-purchase\": \"ShoppingCart\",\n \"terp-graph\": \"PieChart\",\n \"terp-crm\": \"Contacts\",\n \"terp-hr\": \"Friends\",\n \"terp-account\": \"BuildingBank\",\n \"terp-project\": \"Checklist\",\n \"terp-administration\": \"Adjustments\",\n \"terp-partner\": \"Team\",\n \"terp-mrp\": \"Build\",\n \"terp-product\": \"Shopping\",\n STOCK_JUSTIFY_FILL: \"UnorderedList\",\n STOCK_INDENT: \"IndentIncrease\",\n STOCK_HELP: \"Question\",\n STOCK_GO_UP: \"ArrowUp\",\n STOCK_SORT_DESCENDING: \"SortDescending\",\n STOCK_ADD: \"Plus\",\n STOCK_GOTO_LAST: \"FastForward\",\n STOCK_FIND: \"Search\",\n STOCK_PROPERTIES: \"Control\",\n STOCK_DIALOG_INFO: \"Info\",\n STOCK_FLOPPY: \"Usb\",\n STOCK_JUSTIFY_CENTER: \"AlignCenter\",\n STOCK_GO_BACK: \"ArrowLeft\",\n STOCK_UNDERLINE: \"Underline\",\n STOCK_BOLD: \"Bold\",\n STOCK_APPLY: \"Check\",\n STOCK_ZOOM_OUT: \"ZoomOut\",\n STOCK_STRIKETHROUGH: \"Strikethrough\",\n STOCK_MEDIA_REWIND: \"Backward\",\n STOCK_PRINT: \"Printer\",\n STOCK_NO: \"Close\",\n STOCK_GOTO_FIRST: \"FastBackward\",\n STOCK_CLOSE: \"Close\",\n STOCK_REMOVE: \"Minus\",\n STOCK_CUT: \"Scissor\",\n STOCK_DIALOG_AUTHENTICATION: \"Safety\",\n STOCK_ZOOM_FIT: \"Expand\",\n STOCK_JUMP_TO: \"Select\",\n STOCK_HARDDISK: \"Hdd\",\n STOCK_SAVE_AS: \"Save\",\n STOCK_UNDO: \"Undo\",\n STOCK_JUSTIFY_RIGHT: \"AlignRight\",\n STOCK_DIALOG_ERROR: \"CloseCircle\",\n STOCK_INDEX: \"Profile\",\n STOCK_GOTO_BOTTOM: \"VerticalAlignBottom\",\n STOCK_MEDIA_NEXT: \"StepForward\",\n STOCK_REDO: \"Redo\",\n STOCK_COPY: \"Copy\",\n STOCK_MEDIA_PAUSE: \"Pause\",\n STOCK_GO_FORWARD: \"ArrowRight\",\n STOCK_UNDELETE: \"Undo\",\n STOCK_EXECUTE: \"Setting\",\n STOCK_SAVE: \"Save\",\n STOCK_DIALOG_QUESTION: \"QuestionCircle\",\n STOCK_SORT_ASCENDING: \"SortAscending\",\n STOCK_REFRESH: \"Reload\",\n STOCK_MEDIA_FORWARD: \"Forward\",\n STOCK_STOP: \"Border\",\n STOCK_PRINT_PREVIEW: \"Printer\",\n STOCK_HOME: \"Home\",\n STOCK_PASTE: \"CarryOut\",\n STOCK_ZOOM_100: \"ZoomIn\",\n STOCK_FIND_AND_REPLACE: \"FileSearch\",\n STOCK_DIALOG_WARNING: \"Warning\",\n STOCK_ZOOM_IN: \"ZoomIn\",\n STOCK_CONVERT: \"Export\",\n STOCK_ITALIC: \"Italic\",\n STOCK_YES: \"Check\",\n STOCK_MEDIA_PLAY: \"PlayCircle\",\n STOCK_MEDIA_RECORD: \"VideoCamera\",\n STOCK_MEDIA_PREVIOUS: \"StepBackward\",\n STOCK_NEW: \"FileAdd\",\n STOCK_CANCEL: \"Close\",\n STOCK_DISCONNECT: \"Api\",\n STOCK_JUSTIFY_LEFT: \"AlignLeft\",\n STOCK_FILE: \"File\",\n STOCK_QUIT: \"Logout\",\n STOCK_EDIT: \"Edit\",\n STOCK_CONNECT: \"Api\",\n STOCK_GO_DOWN: \"CaretDown\",\n STOCK_NETWORK: \"Apartment\",\n STOCK_OK: \"Check\",\n STOCK_GOTO_TOP: \"VerticalAlignTop\",\n STOCK_ABOUT: \"Star\",\n STOCK_COLOR_PICKER: \"Aim\",\n STOCK_SELECT_FONT: \"FontSize\",\n STOCK_DELETE: \"Delete\",\n STOCK_DND: \"FileText\",\n STOCK_CLEAR: \"CloseSquare\",\n STOCK_UNINDENT: \"AlignLeft\",\n STOCK_PREFERENCES: \"Setting\",\n};\n\nexport default (\n key: string,\n props?: { className?: any; style: CSSProperties }\n) => {\n if (key.indexOf(\"gtk-\") !== -1) {\n const rootIcon = key.replace(\"gtk-\", \"\").replace(/\\-/g, \"_\");\n key = `STOCK_${rootIcon.toUpperCase()}`;\n }\n\n if (iconMapping.hasOwnProperty(key)) {\n return getIconForKey(iconMapping[key], props);\n }\n\n return getIconForKey(key, props);\n};\n\nfunction toCamelCase(key: string): string {\n return `${key\n .split(\"-\")\n .map((word) =>\n word.replace(\n /\\w\\S*/g,\n (w) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase()\n )\n )\n .join(\"\")}`;\n}\n\nfunction getIconForKey(\n key: string,\n props?: { className?: any; style: CSSProperties }\n) {\n let IconCamelCase = key.charAt(0).toUpperCase() + key.slice(1); // Capitalize first letter\n if (IconCamelCase.indexOf(\"-\") !== -1) {\n IconCamelCase = toCamelCase(IconCamelCase);\n }\n\n const antKey: AntKey = `${IconCamelCase}Outlined` as any;\n if (AntIcons[antKey]) {\n return () =>\n React.createElement(AntIcons[antKey] as any, {\n ...props,\n });\n }\n\n const tablerKey: TablerKey = `Icon${IconCamelCase}` as any;\n if (TablerIcons[tablerKey]) {\n const TablerIcon = () =>\n React.createElement(TablerIcons[tablerKey] as any, {\n fill: \"transparent\",\n size: props?.style?.fontSize || 17\n });\n const CustomIcon = () =>\n React.createElement(Icon, {\n component: TablerIcon,\n ...props,\n });\n return CustomIcon;\n }\n\n return undefined;\n}\n","import React, { useContext, useState } from \"react\";\nimport Field from \"@/common/Field\";\nimport { Button as AntButton } from \"antd\";\nimport { Button as ButtonOoui } from \"@gisce/ooui\";\nimport showConfirmDialog from \"@/ui/ConfirmDialog\";\nimport { FormContext, FormContextType } from \"@/context/FormContext\";\nimport { LoadingOutlined } from \"@ant-design/icons\";\nimport iconMapper from \"@/helpers/iconMapper\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\ntype Props = {\n ooui: ButtonOoui;\n};\n\nexport const Button = (props: Props) => {\n const { ooui } = props;\n const {\n id,\n label,\n activated,\n buttonType,\n confirmMessage,\n icon,\n context,\n readOnly,\n } = ooui;\n const formContext = useContext(FormContext) as FormContextType;\n const { executeButtonAction } = formContext || {};\n const [isRunning, setIsRunning] = useState<boolean>(false);\n const { lang } = useContext(LocaleContext) as LocaleContextType;\n\n async function onClick_confirm() {\n setIsRunning(true);\n await executeButtonAction({ type: buttonType, action: id, context });\n setIsRunning(false);\n }\n\n function onClick() {\n if (confirmMessage) {\n showConfirmDialog({\n confirmMessage,\n lang,\n onOk: () => {\n onClick_confirm();\n },\n });\n return;\n }\n\n onClick_confirm();\n }\n\n function getButtonIcon() {\n if (isRunning) return <LoadingOutlined />;\n if (icon) {\n const Icon: React.ElementType = iconMapper(icon) as any;\n return Icon && <Icon />;\n }\n return undefined;\n }\n\n return (\n <Field ooui={ooui}>\n <AntButton\n block\n disabled={!activated || readOnly}\n onClick={onClick}\n icon={getButtonIcon()}\n type={ooui.primary ? \"primary\" : \"default\"}\n danger={ooui.danger}\n style={{ whiteSpace: \"normal\", height: \"auto\" }}\n >\n {label}\n </AntButton>\n </Field>\n );\n};\n","import React, { useContext, useState } from \"react\";\nimport Field from \"@/common/Field\";\nimport { DownOutlined } from \"@ant-design/icons\";\nimport { Dropdown, Menu } from \"antd\";\nimport { Button } from \"@/widgets/base/Button\";\nimport {\n ButtonGroup as ButtonGroupOoui,\n Button as ButtonOoui,\n Field as FieldOoui,\n} from \"@gisce/ooui\";\nimport showConfirmDialog from \"@/ui/ConfirmDialog\";\nimport { FormContext, FormContextType } from \"@/context/FormContext\";\nimport { LoadingOutlined } from \"@ant-design/icons\";\nimport iconMapper from \"@/helpers/iconMapper\";\nimport { WidgetProps } from \"@/types\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\ntype ButtonGroupProps = {\n ooui: ButtonGroupOoui;\n};\n\ntype ItemsProps = {\n ooui: ButtonOoui[];\n executeButtonAction: any,\n lang: string\n};\n\nexport const ButtonGroup = (props: ButtonGroupProps) => {\n const { ooui } = props;\n const { defaultButton, secondaryButtons } = ooui;\n const {\n id,\n caption,\n activated,\n buttonType,\n confirmMessage,\n icon,\n primary,\n danger,\n context,\n readOnly,\n } = defaultButton || {};\n const formContext = useContext(FormContext) as FormContextType;\n const { executeButtonAction } = formContext || {};\n const [isRunning, setIsRunning] = useState<boolean>(false);\n const { lang } = useContext(LocaleContext) as LocaleContextType;\n\n function getButtonIcon() {\n if (isRunning) return <LoadingOutlined />;\n if (icon) {\n const Icon: React.ElementType = iconMapper(icon) as any;\n return Icon && <Icon />;\n }\n return undefined;\n }\n\n async function onClick_confirm() {\n if (buttonType && id) {\n setIsRunning(true);\n await executeButtonAction({ type: buttonType, action: id, context });\n setIsRunning(false);\n }\n }\n\n function onClick() {\n if (confirmMessage) {\n showConfirmDialog({\n confirmMessage,\n lang,\n onOk: () => {\n onClick_confirm();\n },\n });\n return;\n }\n\n onClick_confirm();\n }\n if (ooui.buttons.length === 0) {\n return null;\n } else if (ooui.buttons.length > 1) {\n return (\n <Field ooui={new FieldOoui({ ...{ ooui } })}>\n <Dropdown.Button\n disabled={!activated || readOnly}\n onClick={onClick}\n icon={<DownOutlined />}\n type={primary ? \"primary\" : undefined}\n //danger={danger ? true : undefined} This works but typescript\n // doesn't accept\n overlay={<Items ooui={secondaryButtons} executeButtonAction={executeButtonAction} lang={lang} /> }\n >\n {getButtonIcon()}\n {caption}\n </Dropdown.Button>\n </Field>\n );\n } else if (defaultButton) {\n return (\n <Button ooui={defaultButton} />\n )\n }\n};\n\nconst Items = (props: ItemsProps) => {\n const { ooui, executeButtonAction, lang } = props;\n if (!ooui) {\n return null;\n }\n const items = ooui.map((button) => {\n const {\n id,\n caption,\n activated,\n buttonType,\n confirmMessage,\n icon,\n context,\n readOnly,\n danger,\n } = button;\n const [isRunning, setIsRunning] = useState<boolean>(false);\n\n async function onClick_confirm() {\n setIsRunning(true);\n await executeButtonAction({ type: buttonType, action: id, context });\n setIsRunning(false);\n }\n\n function onClick() {\n if (confirmMessage) {\n showConfirmDialog({\n confirmMessage,\n lang,\n onOk: () => {\n onClick_confirm();\n },\n });\n return;\n }\n\n onClick_confirm();\n }\n\n function getButtonIcon() {\n if (isRunning) return <LoadingOutlined />;\n if (icon) {\n const Icon: React.ElementType = iconMapper(icon) as any;\n return Icon && <Icon />;\n }\n return undefined;\n }\n\n return (\n <Menu.Item\n disabled={!activated || readOnly}\n onClick={onClick}\n icon={getButtonIcon()}\n danger={danger}\n >\n {caption}\n </Menu.Item>\n );\n });\n return <Menu>{items}</Menu>;\n};\n","import { useState, useEffect } from \"react\";\n\nconst MODAL_WIDTH_CONSTANT = 0.7;\n\nfunction getWindowDimensions() {\n const { innerWidth: width, innerHeight: height } = window;\n return {\n width,\n height,\n };\n}\n\nexport default function useWindowDimensions() {\n const [windowDimensions, setWindowDimensions] = useState(\n getWindowDimensions()\n );\n\n useEffect(() => {\n function handleResize() {\n setWindowDimensions(getWindowDimensions());\n }\n\n window.addEventListener(\"resize\", handleResize);\n return () => window.removeEventListener(\"resize\", handleResize);\n }, []);\n\n return {\n modalWidth: windowDimensions.width * MODAL_WIDTH_CONSTANT,\n modalHeight: windowDimensions.height,\n width: windowDimensions.width,\n height: windowDimensions.height,\n };\n}\n","import { ConnectionProviderType } from \"@/types\";\n\nexport default class ConnectionProvider {\n private static handler: ConnectionProviderType;\n\n public static init(handler: ConnectionProviderType): void {\n ConnectionProvider.handler = handler;\n }\n\n public static getHandler(): ConnectionProviderType {\n if (!ConnectionProvider.handler) {\n throw 'Must call init() first with a valid ConnectionProvider instance';\n }\n return ConnectionProvider.handler;\n }\n}\n","export const parseError = (errorResponse: string) => {\n let message;\n let type;\n let title;\n\n if (\n typeof errorResponse === \"string\" &&\n errorResponse.indexOf(\" -- \") !== -1 &&\n errorResponse.indexOf(\"\\n\\n\") !== -1\n ) {\n const splitted = errorResponse.split(\"\\n\\n\");\n message = splitted[1].replace(/\\n/g, \"<br />\");\n const args = splitted[0].split(\" -- \");\n type = args[0];\n title = args[1];\n } else {\n message = errorResponse;\n type = \"error\";\n title = \"Error\";\n }\n\n return {\n type,\n message,\n title,\n };\n};\n","import React from \"react\";\nimport { Modal } from \"antd\";\nimport { ExclamationCircleOutlined, WarningOutlined } from \"@ant-design/icons\";\nimport { parseError } from \"@/helpers/errorHelper\";\n\nconst { error, warning } = Modal;\n\nconst showDialog = (err: string) => {\n const { message, type, title } = parseError(err);\n\n const iconComponent =\n type === \"error\" ? <ExclamationCircleOutlined /> : <WarningOutlined />;\n\n const modalType = type === \"error\" ? error : warning;\n\n modalType({\n title,\n icon: iconComponent,\n centered: true,\n content: message,\n });\n};\n\nexport default showDialog;\n","import React, { useContext, useEffect, useRef, useState } from \"react\";\nimport { Modal, Button, Divider, Row, Space, Spin, Col } from \"antd\";\nimport {\n CheckOutlined,\n CloseOutlined,\n LoadingOutlined,\n} from \"@ant-design/icons\";\nimport useWindowDimensions from \"@/hooks/useWindowDimensions\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport TextArea from \"antd/lib/input/TextArea\";\nimport showErrorDialog from \"@/ui/ActionErrorDialog\";\n\ntype TranslationModalProps = {\n visible: boolean;\n model: string;\n id: number;\n field: string;\n onCloseModal: () => void;\n onSubmitSucceed: () => void;\n};\n\ntype Lang = {\n code: string;\n name: string;\n};\n\ntype ValuesForLangs = {\n [key: string]: string;\n};\n\nexport const TranslationModal = (props: TranslationModalProps) => {\n const { visible, onCloseModal, model, id, field, onSubmitSucceed } = props;\n\n const { modalWidth } = useWindowDimensions();\n const { t } = useContext(LocaleContext) as LocaleContextType;\n const [langs, setLangs] = useState<Lang[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [submitLoading, setSubmitLoading] = useState(false);\n const [valuesForLangs, setValuesForLangs] = useState<ValuesForLangs>({});\n\n const originalValuesForLangs = useRef<ValuesForLangs>();\n\n useEffect(() => {\n if (visible) {\n fetchData();\n } else {\n setValuesForLangs({});\n }\n }, [visible]);\n\n async function fetchData() {\n setIsLoading(true);\n\n try {\n const langs = await getLangs();\n await getValuesForLangs(langs);\n } catch (err) {\n showErrorDialog(err as any);\n }\n\n setIsLoading(false);\n }\n\n async function getLangs() {\n const results: any[] = (await ConnectionProvider.getHandler().search({\n params: [[\"translatable\", \"=\", \"1\"]],\n fields: [\"code\", \"name\"],\n model: \"res.lang\",\n })) as any;\n\n const langs = results.map((item: any) => {\n return {\n code: item.code,\n name: item.name,\n };\n });\n\n setLangs?.(langs);\n return langs;\n }\n\n async function getValuesForLangs(langs: Lang[]) {\n const retrievedValuesForLang: ValuesForLangs = {};\n\n for (const lang of langs) {\n const retrievedValue = (\n await ConnectionProvider.getHandler().readObjects({\n model,\n ids: [id],\n fieldsToRetrieve: [field],\n context: { lang: lang.code },\n })\n )[0];\n retrievedValuesForLang[lang.code] = retrievedValue[field] || \"\";\n }\n\n originalValuesForLangs.current = retrievedValuesForLang;\n setValuesForLangs(retrievedValuesForLang);\n }\n\n function getInputsForLangs() {\n return langs.map((lang: Lang, i: number) => {\n return (\n <Row key={i} style={{ paddingBottom: 20 }}>\n <Col flex=\"8rem\" style={{ paddingRight: 10 }}>\n {lang.name}\n </Col>\n <Col flex=\"auto\">\n <TextArea\n rows={4}\n value={valuesForLangs[lang.code] || \"\"}\n onChange={(event: any) => {\n setValuesForLangs({\n ...valuesForLangs,\n [lang.code]: event.target.value,\n });\n }}\n disabled={submitLoading}\n />\n </Col>\n </Row>\n );\n });\n }\n\n async function onSubmit() {\n setSubmitLoading(true);\n\n try {\n for (const langCode of Object.keys(valuesForLangs)) {\n if (\n valuesForLangs[langCode] !== originalValuesForLangs.current![langCode]\n ) {\n await ConnectionProvider.getHandler().update({\n model,\n id,\n values: { [field]: valuesForLangs[langCode] },\n context: {\n lang: langCode,\n },\n fields: {},\n });\n }\n }\n } catch (err) {\n showErrorDialog(err as any);\n }\n\n setSubmitLoading(false);\n onSubmitSucceed();\n }\n\n function content() {\n if (isLoading) {\n return <Spin />;\n }\n\n return (\n <>\n {getInputsForLangs()}\n <Divider />\n <Row justify=\"end\">\n <Space>\n <Button\n icon={<CloseOutlined />}\n onClick={onCloseModal}\n disabled={submitLoading}\n >\n {t(\"cancel\")}\n </Button>\n <Button\n icon={submitLoading ? <LoadingOutlined /> : <CheckOutlined />}\n disabled={submitLoading}\n onClick={onSubmit}\n style={{ marginLeft: 15 }}\n type=\"primary\"\n >\n {t(\"ok\")}\n </Button>\n </Space>\n </Row>\n </>\n );\n }\n\n return (\n (<Modal\n title={t(\"translate\")}\n centered\n width={modalWidth}\n open={visible}\n closable={true}\n onCancel={onCloseModal}\n footer={null}\n destroyOnClose\n maskClosable={false}\n >\n {content()}\n </Modal>)\n );\n};\n","import React from \"react\";\nimport { Button, Tooltip, ButtonProps } from \"antd\";\n\nexport type Props = ButtonProps & {\n tooltip: string;\n};\n\nfunction ButtonWithTooltip(props: Props) {\n const { tooltip, ...restProps } = props;\n\n return (\n <Tooltip title={tooltip}>\n <Button {...restProps} />\n </Tooltip>\n );\n}\n\nexport default ButtonWithTooltip;\n","import { Modal } from \"antd\";\n\nconst { info } = Modal;\n\nconst showDialog = (content: any) => {\n info({\n title: \"\",\n centered: true,\n content,\n });\n};\n\nexport default showDialog;\n","import React, { CSSProperties, useContext, useState } from \"react\";\nimport { Col, Input, Row, theme } from \"antd\";\nimport Field from \"@/common/Field\";\nimport { Char as CharOoui } from \"@gisce/ooui\";\nimport { WidgetProps } from \"@/types\";\nimport { TranslationModal } from \"../modals/TranslationModal\";\nimport { FormContext, FormContextType } from \"@/context/FormContext\";\nimport ButtonWithTooltip from \"@/common/ButtonWithTooltip\";\nimport { TranslationOutlined } from \"@ant-design/icons\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport showInfo from \"@/ui/InfoDialog\";\nconst { useToken } = theme;\n\ntype CharProps = WidgetProps & {\n isSearchField?: boolean;\n};\n\nexport const Char = (props: CharProps) => {\n const { ooui, isSearchField = false } = props;\n const { id, readOnly, isPassword, required, translatable } = ooui as CharOoui;\n const { token } = useToken();\n const requiredStyle =\n required && !readOnly\n ? { backgroundColor: token.colorPrimaryBg }\n : undefined;\n const formContext = useContext(FormContext) as FormContextType;\n const { elementHasLostFocus } = formContext || {};\n\n let input = (\n <Input\n disabled={readOnly || (translatable && !isSearchField)}\n id={id}\n style={requiredStyle}\n maxLength={(ooui as CharOoui).size}\n onBlur={elementHasLostFocus}\n />\n );\n\n if (isPassword) {\n input = (\n <Input.Password\n disabled={readOnly}\n id={id}\n onBlur={elementHasLostFocus}\n />\n );\n }\n\n if (translatable && !readOnly && !isSearchField) {\n input = <TranslatableChar field={id} requiredStyle={requiredStyle} />;\n }\n\n return (\n <Field required={required} {...props}>\n {input}\n </Field>\n );\n};\n\nconst TranslatableChar = ({\n value,\n field,\n requiredStyle,\n onChange,\n}: {\n value?: string;\n field: string;\n requiredStyle: CSSProperties | undefined;\n onChange?: (value: string) => void;\n}) => {\n const formContext = useContext(FormContext) as FormContextType;\n const {\n activeId,\n activeModel,\n fetchValues,\n formHasChanges,\n elementHasLostFocus,\n } = formContext || {};\n const [translationModalVisible, setTranslationModalVisible] = useState(false);\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n if (!activeId) {\n return (\n <>\n <Row gutter={8} wrap={false}>\n <Col flex=\"auto\">\n <Input\n value={value}\n id={field}\n style={requiredStyle}\n onChange={(event: any) => {\n onChange?.(event.target.value);\n }}\n onBlur={elementHasLostFocus}\n />\n </Col>\n <Col flex=\"32px\">\n <ButtonWithTooltip\n tooltip={t(\"translate\")}\n icon={<TranslationOutlined />}\n onClick={async () => {\n if (formHasChanges?.()) {\n showInfo(t(\"saveBeforeTranslate\"));\n } else {\n showInfo(t(\"enterTextBeforeTranslate\"));\n }\n }}\n >\n {t(\"translate\")}\n </ButtonWithTooltip>\n </Col>\n </Row>\n </>\n );\n }\n\n return (\n <>\n <div\n onClick={() => {\n if (formHasChanges?.()) {\n showInfo(t(\"saveBeforeTranslate\"));\n return;\n }\n\n if (!translationModalVisible) {\n setTranslationModalVisible(true);\n }\n }}\n >\n <Input\n value={value}\n disabled={true}\n id={field}\n onChange={(event: any) => {\n onChange?.(event.target.value);\n }}\n onBlur={elementHasLostFocus}\n style={{ cursor: \"pointer\", pointerEvents: \"none\", ...requiredStyle }}\n />\n </div>\n <TranslationModal\n id={activeId!}\n model={activeModel}\n field={field}\n visible={translationModalVisible}\n onCloseModal={() => {\n setTranslationModalVisible(false);\n }}\n onSubmitSucceed={() => {\n setTranslationModalVisible(false);\n fetchValues?.();\n }}\n />\n </>\n );\n};\n","import React from \"react\";\nimport { Select } from \"antd\";\nimport styled from \"styled-components\";\n\nimport Field from \"@/common/Field\";\nimport { Selection as SelectionOoui } from \"@gisce/ooui\";\nimport { WidgetProps } from \"@/types\";\nimport { theme } from \"antd\";\n\nconst { defaultAlgorithm, defaultSeed } = theme;\n\nconst mapToken = defaultAlgorithm(defaultSeed);\n\nconst { Option } = Select;\n\nexport const Selection = (props: WidgetProps) => {\n const { ooui } = props;\n const { required } = ooui;\n\n return (\n <Field required={required} type={\"any\"} {...props}>\n <SelectionInput {...props} />\n </Field>\n );\n};\n\ntype SelectionInputProps = WidgetProps & {\n onChange?: (value: any) => void;\n value?: string;\n};\n\nexport const SelectionInput = (props: SelectionInputProps) => {\n const { ooui, onChange, value } = props;\n const { selectionValues, readOnly, required } = ooui as SelectionOoui;\n\n const values = Array.from(selectionValues.entries());\n\n const options =\n values &&\n values.length &&\n values.map((entry: string[]) => {\n const [key, value] = entry;\n return (\n <Option key={key} value={key}>\n {value}\n </Option>\n );\n });\n\n const CustomSelect: any = required && !readOnly ? RequiredSelect : Select;\n\n return (\n <CustomSelect disabled={readOnly} onChange={onChange} value={value} optionFilterProp=\"children\" filterOption={\n (input: string, option: any) => option.children.toLowerCase().indexOf(input.toLowerCase()) >= 0\n } showSearch>\n {options}\n </CustomSelect>\n );\n};\n\nconst RequiredSelect = styled(Select)`\n &.ant-select:not(.ant-select-customize-input) .ant-select-selector {\n background-color: ${mapToken.colorPrimaryBg};\n }\n`;\n","import React from \"react\";\nimport { Checkbox as AntCheckbox } from \"antd\";\nimport styled from \"styled-components\";\n\nimport Field from \"@/common/Field\";\nimport { WidgetProps } from \"@/types\";\nimport { theme } from \"antd\";\n\nconst { defaultAlgorithm, defaultSeed } = theme;\n\nconst mapToken = defaultAlgorithm(defaultSeed);\n\nexport const Boolean = (props: WidgetProps) => {\n const { ooui } = props;\n const { id, readOnly, required } = ooui;\n\n return (\n <Field {...props} valuePropName=\"checked\">\n <BooleanInput id={id} readOnly={readOnly} required={required} />\n </Field>\n );\n};\n\nconst BooleanInput = (props: any) => {\n const { required, readOnly, ...restProps } = props;\n\n const CustomCheckbox: any =\n required && !readOnly ? RequiredCheckbox : AntCheckbox;\n\n return (\n <div className=\"flex flex-row\">\n <CustomCheckbox disabled={readOnly} {...restProps} />\n </div>\n );\n};\n\nconst RequiredCheckbox = styled(AntCheckbox)`\n .ant-checkbox-inner {\n background-color: ${mapToken.colorPrimaryBg};\n }\n\n .ant-checkbox-checked .ant-checkbox-inner {\n background-color: ${mapToken.colorPrimary};\n }\n`;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","import { fileTypeFromBuffer } from \"file-type-buffer-browser\";\n\nexport function getFilesize(base64string: string) {\n const buffer = Buffer.from(base64string, \"base64\");\n const inKbs = buffer.length / 1e3;\n return `${Math.round((inKbs + Number.EPSILON) * 100) / 100} KB`;\n}\n\nexport async function getMimeType(base64string: string) {\n const mimeInfo = await fileTypeFromBuffer(\n Buffer.from(base64string, \"base64\")\n );\n if (!mimeInfo) {\n return {\n mime: \"text/plain\",\n ext: \"txt\",\n };\n }\n\n return mimeInfo;\n}\n\nexport const toBase64 = (file: File): Promise<string> =>\n new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = (e: any) => resolve(e.target.result.split(\",\")[1]);\n reader.onerror = (error) => reject(error);\n });\n\nexport function openBase64InNewTab(data: string, mimeType: string) {\n var byteCharacters = atob(data);\n var byteNumbers = new Array(byteCharacters.length);\n for (var i = 0; i < byteCharacters.length; i++) {\n byteNumbers[i] = byteCharacters.charCodeAt(i);\n }\n var byteArray = new Uint8Array(byteNumbers);\n var file = new Blob([byteArray], { type: mimeType + \";base64\" });\n var fileURL = URL.createObjectURL(file);\n window.open(fileURL);\n}\n","import React, { useContext, useRef } from \"react\";\nimport { Row, Space } from \"antd\";\nimport Field from \"@/common/Field\";\nimport { Image as ImageOoui } from \"@gisce/ooui\";\nimport ButtonWithTooltip from \"@/common/ButtonWithTooltip\";\nimport {\n FolderOpenOutlined,\n DownloadOutlined,\n ClearOutlined,\n} from \"@ant-design/icons\";\n\nimport { toBase64, getMimeType } from \"@/helpers/filesHelper\";\nimport iconMapper from \"@/helpers/iconMapper\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\ntype Props = {\n ooui: ImageOoui;\n};\n\nexport const Image = (props: Props) => {\n const { ooui } = props;\n const { required, id } = ooui;\n\n const Icon: React.ElementType = iconMapper(id) as any;\n\n if (Icon) {\n return <Icon />;\n }\n\n return (\n <Field required={required} {...props}>\n <ImageInput ooui={ooui} />\n </Field>\n );\n};\n\ninterface ImageInputProps {\n ooui: ImageOoui;\n value?: string;\n onChange?: (value: string | undefined) => void;\n}\n\nexport const ImageInput = (props: ImageInputProps) => {\n const { ooui, value, onChange } = props;\n const { readOnly } = ooui as ImageOoui;\n const inputFile = useRef(null);\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n const triggerChange = (changedValue?: string) => {\n onChange?.(changedValue);\n };\n\n async function downloadFile() {\n const fileType = await getMimeType(value!);\n const linkSource = `data:${fileType?.mime};base64,${value}`;\n const downloadLink = document.createElement(\"a\");\n\n downloadLink.href = linkSource;\n downloadLink.download = `image.${fileType?.ext}`;\n downloadLink.click();\n }\n\n async function onChangeFile(event: any) {\n event.stopPropagation();\n event.preventDefault();\n const file = event.target.files[0];\n const b64: string = await toBase64(file);\n triggerChange(b64);\n }\n\n function clearFile() {\n triggerChange(undefined);\n }\n\n return (\n <>\n <Row gutter={8} wrap={false} justify=\"center\">\n {value && (\n <img\n src={`data:image/*;base64,${value}`}\n style={{ maxWidth: \"100px\" }}\n />\n )}\n <input\n type=\"file\"\n id=\"file\"\n ref={inputFile}\n accept=\"image/*\"\n style={{ display: \"none\" }}\n onChange={onChangeFile}\n />\n </Row>\n <Row gutter={8} wrap={false} justify=\"center\" className=\"pt-5\">\n <Space>\n <ButtonWithTooltip\n tooltip={t(\"uploadNewImage\")}\n icon={<FolderOpenOutlined />}\n disabled={readOnly}\n onClick={() => {\n const fileUploadField = inputFile.current as any;\n fileUploadField.click();\n }}\n />\n <ButtonWithTooltip\n tooltip={t(\"download\")}\n disabled={!value}\n onClick={downloadFile}\n icon={<DownloadOutlined />}\n />\n <ButtonWithTooltip\n tooltip={t(\"clear\")}\n disabled={readOnly || !value}\n onClick={clearFile}\n icon={<ClearOutlined />}\n />\n </Space>\n </Row>\n </>\n );\n};\n","import React from \"react\";\nimport Field from \"@/common/Field\";\nimport { Char as CharOoui } from \"@gisce/ooui\";\nimport { WidgetProps } from \"@/types\";\nimport { GridUi } from \"@gisce/fiber-diagram\";\n\nexport const FiberGrid = (props: WidgetProps) => {\n const { ooui } = props;\n const { required } = ooui as CharOoui;\n\n return (\n <Field required={required} {...props}>\n <FiberGridInput />\n </Field>\n );\n};\n\ninterface FiberGridInputProps {\n value?: string;\n onChange?: (value: string) => void;\n}\n\nexport const FiberGridInput = (props: FiberGridInputProps) => {\n const { value, onChange } = props;\n\n if (!value) {\n return null;\n }\n\n // Validate string json\n try {\n JSON.parse(value);\n } catch (e) {\n console.log(e);\n return null;\n }\n\n return (\n <GridUi\n inputJson={value}\n onChange={(newValue) => {\n if (onChange) {\n onChange(newValue);\n }\n }}\n />\n );\n};\n","import {\n Tree as TreeOoui,\n Selection,\n Many2one,\n Boolean,\n Reference,\n} from \"@gisce/ooui\";\nimport { TreeView, Column } from \"@/types\";\n\nconst getTree = (treeView: TreeView): TreeOoui => {\n const xml = treeView.arch;\n const fields = treeView.fields;\n const tree = new TreeOoui(fields);\n tree.parse(xml);\n return tree;\n};\n\nconst getTableColumns = (\n tree: TreeOoui,\n components: any,\n context: any\n): Array<Column> => {\n const tableColumns = tree.columns.map((column) => {\n const type = column.type;\n const key = column.id;\n const component = components?.[type];\n let render;\n\n if (component) {\n render = (item: any) => {\n return component(item, key, column, context);\n };\n }\n\n return {\n key,\n dataIndex: key,\n title: column.label,\n render,\n sorter: (a: any, b: any) => {\n let aItem = a[key] || \"\",\n bItem = b[key] || \"\";\n\n if (type === \"many2one\") {\n aItem = a[key]?.value || \"\";\n bItem = b[key]?.value || \"\";\n }\n\n if (aItem < bItem) return -1;\n if (aItem > bItem) return 1;\n return 0;\n },\n };\n });\n return tableColumns;\n};\n\nconst getTableItems = (treeOoui: TreeOoui, results: Array<any>): Array<any> => {\n const tableItems = results.map((item: any) => {\n const parsedItem: any = {};\n Object.keys(item).map((key) => {\n if (key === \"id\") {\n parsedItem[key] = item[key];\n } else {\n const widget = treeOoui.findById(key);\n\n if (widget instanceof Reference) {\n parsedItem[key] = item[key];\n } else if (widget instanceof Selection) {\n const selection = widget;\n parsedItem[key] = item[key];\n } else if (widget instanceof Many2one) {\n parsedItem[key] = item[key] &&\n Array.isArray(item[key]) &&\n item[key].length === 2 && {\n model: widget.relation,\n id: item[key][0],\n value: item[key][1],\n };\n } else if (widget instanceof Boolean) {\n parsedItem[key] = item[key];\n } else if (widget) {\n parsedItem[key] = item[key] === false ? \"\" : item[key];\n } else {\n parsedItem[key] = item[key];\n }\n }\n });\n return parsedItem;\n });\n\n return tableItems;\n};\n\nfunction itemHasBooleans({ values, fields }: { values: any; fields: any }) {\n if (!fields) {\n return false;\n }\n return Object.keys(values).some((key) => {\n return fields[key] !== undefined && fields[key].type === \"boolean\";\n });\n}\n\nfunction convertBooleansToNumeric({\n values,\n fields,\n}: {\n values: any;\n fields: any;\n}) {\n if (!fields) {\n return values;\n }\n const filteredValues: any = {};\n Object.keys(values).forEach((key) => {\n if (fields[key] !== undefined && fields[key].type === \"boolean\") {\n filteredValues[key] = values[key] === true ? 1 : 0;\n }\n });\n return { ...values, ...filteredValues };\n}\n\nfunction getColorMap(colorsValue: any) {\n return getItemsAttributes(colorsValue, \"colors\");\n}\n\nfunction getStatusMap(values: any) {\n return getItemsAttributes(values, \"status\");\n}\n\nfunction getItemsAttributes(attributes: object[], attribute: string) {\n if (!attributes) {\n return undefined;\n }\n const map: any = {};\n attributes.forEach((entry: any) => {\n map[entry.id] = entry[attribute];\n });\n return map;\n}\n\nfunction sortResults({\n resultsToSort,\n sorter,\n fields,\n}: {\n resultsToSort: any[];\n sorter: any;\n fields: any;\n}) {\n if (!sorter) {\n return resultsToSort;\n }\n\n const { id: field, desc } = sorter;\n const order = desc === false ? \"ascend\" : \"descend\";\n\n const type = fields[field].type;\n\n const sortFn = (a: any, b: any) => {\n let aItem = a[field] || \"\",\n bItem = b[field] || \"\";\n\n if (type === \"many2one\") {\n aItem = a[field]?.[1] || \"\";\n bItem = b[field]?.[1] || \"\";\n }\n\n if (aItem === bItem) {\n return 0;\n }\n\n if (order === \"ascend\") {\n return aItem > bItem ? 1 : -1;\n }\n\n return aItem < bItem ? 1 : -1;\n };\n\n return resultsToSort.sort(sortFn);\n}\n\nfunction hasActualValues(obj: Record<string, any>): boolean {\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n if (obj[key] !== undefined) {\n return true;\n }\n }\n }\n return false;\n}\n\nexport {\n getTableColumns,\n getTableItems,\n getTree,\n convertBooleansToNumeric,\n itemHasBooleans,\n getColorMap,\n getStatusMap,\n sortResults,\n hasActualValues,\n};\n","import { One2manyItem } from \"@/widgets/base/one2many/One2manyInput\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport { TreeView, View, ViewType } from \"@/types\";\nimport { getColorMap, getTree } from \"./treeHelper\";\n\ntype ReadObjectValuesOptions = {\n items: One2manyItem[];\n model: string;\n context?: any;\n currentView: ViewType;\n formView: {\n fields: any;\n };\n treeView: {\n arch?: string;\n fields: any;\n };\n};\n\nconst readObjectValues = async (\n options: ReadObjectValuesOptions\n): Promise<[One2manyItem[], any]> => {\n const {\n items,\n model,\n formView,\n treeView,\n context,\n currentView = {},\n } = options;\n\n const temporalItems: One2manyItem = items.filter(\n (item) => item.operation !== \"original\"\n );\n\n // We get a number array of id's\n const idsToFetch = items\n .filter((item) => item.operation === \"original\")\n .map((item) => item.id) as number[];\n\n const fieldsToRetrieve: { [key: string]: any } = {\n form: formView.fields,\n tree: treeView.fields,\n };\n\n let values = [],\n evaluatedColorsForTree;\n\n if (currentView === \"tree\" && treeView?.arch) {\n const colors = getTree(treeView as TreeView)?.colors;\n const results = await ConnectionProvider.getHandler().readEvalUiObjects({\n model,\n ids: idsToFetch,\n arch: treeView?.arch!,\n fields: treeView!.fields,\n context,\n attrs: colors && {\n colors,\n },\n });\n values = results[0];\n evaluatedColorsForTree = getColorMap(results[1]);\n } else {\n values = await ConnectionProvider.getHandler().readObjects({\n model,\n ids: idsToFetch,\n fields: fieldsToRetrieve[currentView as string],\n context,\n });\n }\n\n const filteredValues = values.map((result: any) => {\n const resultFormValues: any = {};\n Object.keys(result).forEach((key) => {\n if (\n fieldsToRetrieve[currentView as string].hasOwnProperty(key) ||\n key === \"id\"\n ) {\n resultFormValues[key] = result[key];\n }\n });\n return resultFormValues;\n });\n\n // We fill the values property of the One2manyItem with the retrieved values from the API\n const originalItemsWithFetchedValues: One2manyItem[] = items.map((item) => {\n const fetchedItemValues = filteredValues.find(\n (itemValues: any) => itemValues.id === item.id\n );\n\n const itemWithFetchedValues = {\n ...item,\n };\n\n if (currentView === \"form\") {\n itemWithFetchedValues[\"values\"] = fetchedItemValues;\n } else if (currentView === \"tree\") {\n itemWithFetchedValues[\"treeValues\"] = fetchedItemValues;\n }\n return itemWithFetchedValues;\n });\n\n return [\n originalItemsWithFetchedValues.concat(temporalItems),\n evaluatedColorsForTree,\n ];\n};\n\ntype RemoveItemOptions = {\n model: string;\n activeId: number;\n fieldName: string;\n idsToRemove: number[];\n fields: any;\n isMany2many: boolean;\n};\n\nconst removeItems = async (options: RemoveItemOptions) => {\n const { model, activeId, fieldName, idsToRemove, fields, isMany2many } =\n options;\n\n const values: any = {};\n values[fieldName] = [];\n\n for (const idToRemove of idsToRemove) {\n values[fieldName].push([isMany2many ? 3 : 2, idToRemove]);\n }\n\n await ConnectionProvider.getHandler().update({\n model,\n id: activeId,\n values,\n fields,\n });\n};\n\ntype LinkItemOptions = {\n model: string;\n activeId: number;\n fieldName: string;\n id: number;\n fields: any;\n};\n\nconst linkItem = async (options: LinkItemOptions) => {\n const { model, activeId, fieldName, id, fields } = options;\n\n const values: any = {};\n values[fieldName] = [[4, id]];\n\n await ConnectionProvider.getHandler().update({\n model,\n id: activeId,\n values,\n fields,\n });\n};\n\nconst getNextPendingId = (items: One2manyItem[]) => {\n const negativeIds: number[] = items\n .filter((item) => item.id && item.id < 0)\n .map((item) => item.id!);\n if (negativeIds.length === 0) {\n return -1;\n } else {\n return Math.min(...negativeIds) - 1;\n }\n};\n\nconst convertToPlain2ManyValues = (values: any, fields: any) => {\n const result: any = {};\n Object.keys(values).forEach((key) => {\n if (\n fields.hasOwnProperty(key) &&\n (fields[key].type === \"one2many\" || fields[key].type === \"many2many\") &&\n values[key] &&\n values[key]?.items\n ) {\n result[key] = values[key].items.filter(\n (item: One2manyItem) => item.operation !== \"pendingRemove\"\n );\n } else {\n result[key] = values[key];\n }\n });\n return result;\n};\nexport {\n readObjectValues,\n removeItems,\n linkItem,\n getNextPendingId,\n convertToPlain2ManyValues,\n};\n","import React, { useContext, useState } from \"react\";\nimport { Timeline as TimelineOoui } from \"@gisce/ooui\";\nimport Field from \"@/common/Field\";\nimport { One2manyItem, One2manyValue } from \"../base/one2many/One2manyInput\";\nimport useDeepCompareEffect from \"use-deep-compare-effect\";\nimport { Views, ViewType } from \"@/types\";\nimport { FormContext, FormContextType } from \"@/context/FormContext\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport { Spin, Alert, Timeline as AntTimeline } from \"antd\";\nimport { readObjectValues } from \"@/helpers/one2manyHelper\";\nimport { FormModal } from \"../modals/FormModal\";\n\ntype TimelineProps = {\n ooui: TimelineOoui;\n};\n\ntype TimelineInputProps = TimelineProps & {\n value?: One2manyValue;\n onChange?: (value: One2manyValue) => void;\n views: Views;\n};\n\nexport const Timeline = (props: TimelineProps) => {\n const { ooui } = props;\n const { relation, context, views: oouiViews } = ooui;\n const [isLoading, setIsLoading] = useState<boolean>(true);\n const [error, setError] = useState<string>();\n const [views, setViews] = useState<Views>(new Map<string, any>());\n const formContext = useContext(FormContext) as FormContextType;\n const { getContext } = formContext || {};\n\n useDeepCompareEffect(() => {\n fetchData();\n }, [ooui]);\n\n const getViewData = async (type: ViewType) => {\n if (oouiViews && oouiViews[type]) {\n return oouiViews[type];\n }\n return await ConnectionProvider.getHandler().getView({\n model: relation,\n type,\n context: { ...getContext?.(), ...context },\n });\n };\n\n const fetchData = async () => {\n setIsLoading(true);\n setError(undefined);\n\n try {\n const formView = await getViewData(\"form\");\n const treeView = await getViewData(\"tree\");\n views.set(\"form\", formView);\n views.set(\"tree\", treeView);\n setViews(views);\n } catch (err) {\n setError(err as any);\n } finally {\n setIsLoading(false);\n }\n };\n\n if (isLoading) {\n return <Spin />;\n }\n\n if (error) {\n return <Alert className=\"mt-10\" message={error} type=\"error\" banner />;\n }\n\n return (\n <Field type={\"array\"} {...props}>\n <TimelineInput ooui={ooui} views={views} />\n </Field>\n );\n};\n\nexport const TimelineInput = (props: TimelineInputProps) => {\n const { value, views, ooui, onChange } = props;\n const { items = [] } = value || {};\n\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [error, setError] = useState<string>();\n const [showFormModal, setShowFormModal] = useState<boolean>(false);\n const [modalItem, setModalItem] = useState<One2manyItem>();\n const { relation, context, readOnly, summaryField, titleField } = ooui;\n const itemsToShow = items.filter((item) => item.values);\n\n const formContext = useContext(FormContext) as FormContextType;\n const { getContext } = formContext || {};\n\n useDeepCompareEffect(() => {\n fetchData();\n }, [items]);\n\n const triggerChange = (changedValue: Array<One2manyItem>) => {\n onChange?.({\n items: changedValue,\n });\n };\n\n async function fetchData() {\n setIsLoading(true);\n setError(undefined);\n\n try {\n const [itemsWithValues] = await readObjectValues({\n treeView: {\n fields: views.get(\"tree\").fields,\n arch: views.get(\"tree\").arch\n },\n formView: {\n fields: views.get(\"form\").fields,\n },\n model: relation,\n items,\n context: { ...getContext?.(), ...context },\n currentView: \"form\",\n });\n\n triggerChange(itemsWithValues);\n } catch (err) {\n setError(err as any);\n } finally {\n setIsLoading(false);\n }\n }\n\n if (error) {\n return <Alert className=\"mt-10\" message={error} type=\"error\" banner />;\n }\n\n if (isLoading) {\n return <Spin />;\n }\n\n return (\n <>\n <AntTimeline style={{ padding: \"1rem\" }}>\n {itemsToShow.map((item, index) => {\n return (\n <div key={index}>\n <AntTimeline.Item key={index}>\n <div\n style={{ display: \"inline-block\", cursor: \"pointer\" }}\n onClick={() => {\n setModalItem(\n itemsToShow.find(\n (searchItem) => item.id === searchItem.id\n )\n );\n setShowFormModal(true);\n }}\n >\n <strong>{item.values?.[titleField]}</strong>\n </div>\n <br />\n <div\n style={{ display: \"inline-block\", cursor: \"pointer\" }}\n onClick={() => {\n setModalItem(\n itemsToShow.find(\n (searchItem) => item.id === searchItem.id\n )\n );\n setShowFormModal(true);\n }}\n >\n {item.values?.[summaryField]}\n </div>\n </AntTimeline.Item>\n </div>\n );\n })}\n </AntTimeline>\n <FormModal\n formView={views.get(\"form\")}\n model={relation}\n id={modalItem?.id}\n values={modalItem?.values}\n defaultValues={modalItem?.defaultValues}\n visible={showFormModal}\n onSubmitSucceed={() => {\n setShowFormModal(false);\n }}\n parentContext={{ ...getContext?.(), ...context }}\n onCancel={() => {\n setShowFormModal(false);\n }}\n readOnly={readOnly}\n postSaveAction={fetchData}\n />\n </>\n );\n};\n","import React from \"react\";\nimport { Tooltip, theme } from \"antd\";\nimport { Statistic, Card } from \"antd\";\nimport { Indicator as IndicatorOoui } from \"@gisce/ooui\";\nimport { WidgetProps } from \"@/types\";\nimport Field from \"@/common/Field\";\nimport { QuestionCircleOutlined } from \"@ant-design/icons\";\nimport iconMapper from \"@/helpers/iconMapper\";\nconst { useToken } = theme;\n\ntype IndicatorProps = WidgetProps & {\n ooui: IndicatorOoui;\n value?: number;\n};\n\nexport const Indicator = (props: IndicatorProps) => {\n const { ooui } = props;\n\n return (\n <Field ooui={ooui}>\n <IndicatorInput ooui={ooui} />\n </Field>\n );\n};\n\ntype IndicatorInputProps = {\n ooui: IndicatorOoui;\n value?: any;\n};\n\nconst IndicatorInput = (props: IndicatorInputProps) => {\n const { token } = useToken();\n const { ooui, value } = props;\n const title = (\n <>\n <span>{ooui.label} </span>\n {ooui.tooltip && (\n <Tooltip title={ooui.tooltip}>\n <QuestionCircleOutlined\n className=\"pr-1 text-xs\"\n style={{ color: token.colorPrimaryBg }}\n />\n </Tooltip>\n )}\n </>\n );\n const Icon: React.ElementType = iconMapper(ooui.icon) as any;\n let formattedValue = value;\n if (ooui.selectionValues.size) {\n formattedValue = ooui.selectionValues.get(value);\n } else if (Array.isArray(value)) {\n formattedValue = value[1];\n }\n const field = (\n <Statistic\n title={title}\n prefix={Icon && <Icon />}\n suffix={ooui.suffix}\n value={formattedValue}\n />\n );\n if (ooui.card) {\n return <Card>{field}</Card>;\n } else {\n return field;\n }\n};\n","import { One2manyItem } from \"@/widgets/base/one2many/One2manyInput\";\nimport { Form as FormOoui } from \"@gisce/ooui\";\n\nconst filteredValues = (values: any, fields: any) => {\n if (!fields) {\n return values;\n }\n const filteredValues: any = {};\n Object.keys(values).forEach((key) => {\n if (fields[key] === undefined) {\n // console.log(`${key} is not in fields`);\n filteredValues[key] = values[key];\n } else if (values[key] === false && fields[key].type !== \"boolean\") {\n // Do nothing - filter the field.\n } else if (fields[key].type === \"boolean\") {\n const boolValue = values[key];\n if (boolValue === 0) {\n filteredValues[key] = false;\n } else if (boolValue === 1) {\n filteredValues[key] = true;\n } else {\n filteredValues[key] = values[key];\n }\n } else {\n filteredValues[key] = values[key];\n }\n });\n return filteredValues;\n};\n\nexport const processValues = (values: any, fields: any) => {\n const filterBooleans = filteredValues(values, fields);\n return filterBooleans;\n};\n\nexport const getTouchedValues = ({\n source,\n target,\n fields,\n}: {\n source: any;\n target: any;\n fields: any;\n}) => {\n const differences: any = {};\n Object.keys(target).forEach((key) => {\n const is2Many = fields[key]\n ? fields[key].type === \"one2many\" || fields[key].type === \"many2many\"\n : false;\n\n if (is2Many) {\n const sourceValue = JSON.stringify(source[key]);\n const targetValue = JSON.stringify(target[key]);\n if (sourceValue === targetValue) {\n return;\n }\n\n const nonOriginalItems =\n target[key]?.items?.filter(\n (item: One2manyItem) => item.operation !== \"original\"\n ) || [];\n\n if (nonOriginalItems.length > 0) {\n differences[key] = target[key];\n }\n } else if (Array.isArray(target[key])) {\n if (source[key] === undefined) {\n differences[key] = target[key];\n } else if (fields[key].type === \"many2one\") {\n if (!Array.isArray(source[key])) {\n // This will mean the source many2one value is a numeric id\n const numericId = source[key];\n const [targetNumericId] = target[key];\n if (numericId !== targetNumericId) {\n differences[key] = target[key];\n }\n } else {\n const sourceValue = JSON.stringify(source[key]);\n const targetValue = JSON.stringify(target[key]);\n if (sourceValue !== targetValue) {\n differences[key] = target[key];\n }\n }\n } else {\n const sourceValue = JSON.stringify(source[key]);\n const targetValue = JSON.stringify(target[key]);\n if (sourceValue !== targetValue) {\n differences[key] = target[key];\n }\n }\n } else if (source[key] !== target[key]) {\n if (target[key] === undefined) {\n differences[key] = null;\n } else {\n differences[key] = target[key];\n }\n }\n });\n return differences;\n};\n\nexport const checkFieldsType = ({\n changedFields,\n formOoui,\n types,\n}: {\n changedFields: string[];\n formOoui: FormOoui;\n types: string[];\n}) => {\n const valuesChecked = changedFields.map((key) => {\n const fieldType = formOoui?.findById(key)?.type!;\n return types.includes(fieldType);\n });\n return valuesChecked.some((i) => i === true);\n};\n\nexport const mergeFieldsDomain = ({\n fieldsDomain,\n fields,\n}: {\n fieldsDomain: any;\n fields: any;\n}) => {\n const output: any = {};\n\n Object.keys(fields).forEach((key) => {\n output[key] = fields[key];\n\n if (fieldsDomain[key]) {\n output[key].domain = fieldsDomain[key];\n }\n });\n\n return output;\n};\n\nexport const getValuesForDomain = (domain: any[]) => {\n const values: any = {};\n\n if (!domain || !Array.isArray(domain) || domain?.length === 0) {\n return {};\n }\n\n domain.forEach((entry) => {\n if (entry?.[1] === \"=\") {\n values[entry[0]] = entry[2];\n }\n });\n\n return values;\n};\n\nexport const getOnChangePayload = ({\n onChangeFieldActionArgs,\n values,\n parentValues = {},\n}: {\n onChangeFieldActionArgs: any[];\n values: any;\n parentValues?: any;\n}) => {\n const payload: any = {};\n onChangeFieldActionArgs.forEach((arg: string) => {\n const splittedArg = arg.split(\"\");\n\n if (arg === \"True\") {\n payload[arg] = true;\n } else if (arg === \"False\") {\n payload[arg] = false;\n } else if (values[arg]) {\n payload[arg] = values[arg];\n } else if (\n splittedArg[0] === \"'\" &&\n splittedArg[splittedArg.length - 1] === \"'\" &&\n splittedArg.filter((i: string) => i === \"'\").length === 2\n ) {\n payload[arg] = arg.replace(/'/g, \"\");\n } else if (splittedArg.includes(\"'\")) {\n // This is a string with a variable in it.\n // TODO: pending implement.\n payload[arg] = arg;\n } else if (arg.indexOf(\"parent.\") !== -1) {\n const parentKey = arg.replace(\"parent.\", \"\");\n payload[arg] = parentValues[parentKey] || false;\n } else {\n payload[arg] = false;\n }\n });\n return payload;\n};\n\nexport const mergeSearchFields = (searchFields: any[]) => {\n const mergedSearchFields = {\n primary: [],\n secondary: [],\n };\n\n searchFields.forEach((sf) => {\n if (!sf) {\n return;\n }\n\n mergedSearchFields.primary = mergedSearchFields.primary.concat(sf.primary);\n mergedSearchFields.secondary = mergedSearchFields.secondary.concat(\n sf.secondary\n );\n });\n\n return {\n primary: mergedSearchFields.primary.filter(onlyUnique),\n secondary: mergedSearchFields.secondary.filter(onlyUnique),\n };\n};\n\nfunction onlyUnique(value: any, index: number, self: any) {\n return self.indexOf(value) === index;\n}\n\nexport const transformPlainMany2Ones = ({\n values,\n fields,\n}: {\n values: any;\n fields: any;\n}) => {\n let reformattedValues: { [key: string]: any } = {};\n\n Object.keys(values).forEach((key) => {\n const value = values[key];\n\n if (\n fields[key] &&\n fields[key].type === \"many2one\" &&\n value &&\n Array.isArray(value) &&\n value.length === 2\n ) {\n reformattedValues[key] = value[0];\n } else {\n reformattedValues[key] = value;\n }\n });\n\n return reformattedValues;\n};\n\n\nexport const colorFromString = (text: string) => {\n let hash = 0;\n text = text.toString().padEnd(10, '0');\n for (let i = 0; i < text.length; i++) {\n hash = text.charCodeAt(i) + ((hash << 5) - hash);\n }\n let hexColour = '#';\n for (let i = 0; i < 3; i++) {\n var value = (hash >> (i * 8)) & 0xFF;\n hexColour += ('00' + value.toString(16)).slice(-2);\n }\n return hexColour;\n}\n\nexport const colorTextFromBackground = (color: string) => {\n function getRGB(c: string): number {\n return parseInt(c, 16) || parseInt(c)\n }\n\n function getsRGB(c: string ) {\n return getRGB(c) / 255 <= 0.03928\n ? getRGB(c) / 255 / 12.92\n : Math.pow((getRGB(c) / 255 + 0.055) / 1.055, 2.4)\n }\n\n function getLuminance(hexColor: string) {\n return (\n 0.2126 * getsRGB(hexColor.substr(1, 2)) +\n 0.7152 * getsRGB(hexColor.substr(3, 2)) +\n 0.0722 * getsRGB(hexColor.substr(-2))\n )\n }\n\n function getContrast(f: string, b: string) {\n const L1 = getLuminance(f)\n const L2 = getLuminance(b)\n return (Math.max(L1, L2) + 0.05) / (Math.min(L1, L2) + 0.05)\n }\n\n function getTextColor(bgColor: string) {\n const whiteContrast = getContrast(bgColor, '#ffffff')\n const blackContrast = getContrast(bgColor, '#000000')\n\n return whiteContrast > blackContrast ? '#ffffff' : '#000000'\n }\n\n return getTextColor(color);\n\n}\n\n\nexport const stringFormat = (text: string, values: any): string => {\n return text.replace(/\\{([^}]+)\\}/g, (match, key) => values[key] !== undefined ? values[key] : match);\n}\n","import React from \"react\";\nimport Field from \"@/common/Field\";\nimport { WidgetProps } from \"@/types\";\nimport { Tag as AntdTag, TagProps } from 'antd';\nimport { isPresetStatusColor, isPresetColor } from 'antd/lib/_util/colors'\nimport { colorFromString } from \"@/helpers/formHelper\";\n\nexport const Tag = (props: WidgetProps) => {\n return (\n <Field {...props}>\n <TagInput {...props}/>\n </Field>\n );\n};\n\nexport const TagInput = (props: any) => {\n const {ooui, value} = props;\n let formattedValue = value;\n let colorValue = value;\n if (ooui.selectionValues.size) {\n formattedValue = ooui.selectionValues.get(value);\n } else if (Array.isArray(value)) {\n colorValue = value[0];\n formattedValue = value[1];\n }\n if (!value) {\n return null\n }\n const color = ooui.colors === \"auto\" ? colorFromString(colorValue) : ooui.colors[colorValue] || colorFromString(colorValue);\n return (\n <CustomTag color={color}>{formattedValue}</CustomTag>\n );\n}\n\n\nexport const CustomTag = (props: TagProps) => {\n let { color } = props;\n let style = {}\n if (!isPresetStatusColor(props.color) && !isPresetColor(props.color)) {\n style = {\n color: color,\n borderColor: color,\n borderStyle: \"solid\",\n borderWidth: \"1px\",\n }\n color = `${color}20`;\n }\n return <AntdTag {...props} style={style} color={color}>{props.children}</AntdTag>\n}\n","import React, { useContext, useState } from \"react\";\nimport { Tags as TagsOoui } from \"@gisce/ooui\";\nimport Field from \"@/common/Field\";\nimport { WidgetProps } from \"@/types\";\nimport { One2manyItem, One2manyValue } from \"../base/one2many/One2manyInput\";\nimport useDeepCompareEffect from \"use-deep-compare-effect\";\nimport { FormContext, FormContextType } from \"@/context/FormContext\";\nimport { Alert, Select } from \"antd\";\nimport { colorFromString, transformPlainMany2Ones } from \"@/helpers/formHelper\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport { CustomTag } from \"@/widgets/custom/Tag\";\n\ntype TagsProps = WidgetProps & {\n ooui: TagsOoui;\n};\n\ntype TagsInputProps = TagsProps & {\n value?: One2manyValue;\n onChange?: (value: One2manyValue) => void;\n};\n\nexport const Tags = (props: TagsProps) => {\n const { ooui } = props;\n\n return (\n <Field type={\"array\"} {...props}>\n <TagsInput ooui={ooui} />\n </Field>\n );\n};\n\nexport const TagsInput = (props: TagsInputProps) => {\n const { value, ooui, onChange } = props;\n const { items = [] } = value || {};\n const itemsToShow = items\n .filter((item) => item.operation !== \"pendingRemove\")\n .map((item) => item.id) as number[];\n\n const [options, setOptions] = useState<any[]>([]);\n const [error, setError] = useState<string>();\n const [isLoadingOptions, setIsLoadingOptions] = useState<boolean>(false);\n const { relation, context, readOnly, field } = ooui;\n\n const formContext = useContext(FormContext) as FormContextType;\n const { getContext } = formContext || {};\n\n useDeepCompareEffect(() => {\n fetchOptions();\n }, [items]);\n\n const triggerChange = (changedValue: Array<One2manyItem>) => {\n onChange?.({\n items: changedValue,\n });\n };\n\n async function fetchOptions() {\n setIsLoadingOptions(true);\n let params: any[] = [];\n try {\n if (readOnly) {\n params = [[\"id\", \"in\", itemsToShow]];\n }\n if (ooui.domain) {\n const evaluatedDomain =\n await ConnectionProvider.getHandler().evalDomain({\n domain: ooui.domain,\n values: transformPlainMany2Ones({\n fields: formContext?.getFields(),\n values: formContext.getPlainValues(),\n }),\n fields: formContext?.getFields(),\n context: formContext.getContext(),\n });\n params = [...params, ...evaluatedDomain];\n }\n\n const optionsRead = await ConnectionProvider.getHandler().search({\n model: relation,\n params: params,\n fields: [field],\n context: { ...getContext?.(), ...context },\n });\n const options = optionsRead.map((item: any) => {\n const value = item[field];\n let formattedValue = value;\n if (Array.isArray(value)) {\n formattedValue = value[1];\n }\n return { label: formattedValue, value: item.id };\n });\n setOptions(options);\n } catch (err) {\n setError(err as any);\n } finally {\n setIsLoadingOptions(false);\n }\n }\n\n const onChangeSelected = (ids: number[]) => {\n const newItems: One2manyItem[] = items.map((item) => {\n if (ids.includes(item.id as number)) {\n if (item.operation == \"pendingRemove\") {\n return {\n ...item,\n operation: \"pendingLink\",\n };\n } else {\n return item;\n }\n } else {\n return { id: item.id, operation: \"pendingRemove\" };\n }\n });\n const currentIds = newItems.map((item) => item.id);\n ids\n .filter((id) => !currentIds.includes(id))\n .map((id) => {\n newItems.push({ id, operation: \"pendingLink\" });\n });\n triggerChange(newItems);\n };\n\n const tagRender = (props: any) => {\n const { label, closable, onClose } = props;\n const onPreventMouseDown = (event: React.MouseEvent<HTMLSpanElement>) => {\n event.preventDefault();\n event.stopPropagation();\n };\n const color = colorFromString(label);\n return (\n <CustomTag\n color={color}\n onMouseDown={onPreventMouseDown}\n closable={closable}\n onClose={onClose}\n closeIcon={<span style={{color}}>X</span>}\n >\n {label}\n </CustomTag>\n );\n };\n\n if (error) {\n return <Alert className=\"mt-10\" message={error} type=\"error\" banner />;\n }\n\n return (\n <>\n <div className=\"flex flex-row\">\n <Select\n mode=\"multiple\"\n value={options.length ? itemsToShow : []}\n tagRender={tagRender}\n bordered={!readOnly}\n disabled={readOnly}\n options={options}\n onChange={onChangeSelected}\n loading={isLoadingOptions}\n ></Select>\n </div>\n </>\n );\n};\n","import React from \"react\";\n\nimport {\n Notebook,\n Group,\n Label,\n Char,\n Text,\n Button,\n ButtonGroup,\n Selection,\n Many2one,\n Boolean,\n Integer,\n Float,\n Date,\n DateTime,\n Time,\n One2many,\n Separator,\n Form,\n Tree,\n Reference,\n Binary,\n Url,\n Email,\n FloatTime,\n ProgressBar,\n MultiCheckbox,\n Markdown,\n Radio,\n Switch,\n Steps,\n Tag,\n CodeEditor,\n CommentsTimelineField,\n} from \"@/index\";\nimport { Image } from \"./base/Image\";\nimport { FiberGrid } from \"./custom/FiberGrid\";\nimport { Timeline } from \"./custom/Timeline\";\nimport { Indicator} from \"./custom/Indicator\";\nimport { Tags } from \"./custom/Tags\";\n\nconst getWidgetType = (type: string) => {\n switch (type) {\n case \"form\":\n return Form;\n case \"tree\":\n return Tree;\n case \"notebook\":\n return Notebook;\n case \"group\":\n return Group;\n case \"label\":\n return Label;\n case \"char\":\n return Char;\n case \"text\":\n return Text;\n case \"button\":\n return Button;\n case \"buttonGroup\":\n return ButtonGroup;\n case \"selection\":\n return Selection;\n case \"many2one\":\n return Many2one;\n case \"boolean\":\n return Boolean;\n case \"integer\":\n return Integer;\n case \"float\":\n return Float;\n case \"progressbar\":\n return ProgressBar;\n case \"date\":\n return Date;\n case \"datetime\":\n return DateTime;\n case \"time\":\n return Time;\n case \"one2many\":\n case \"one2many_list\":\n case \"many2many\":\n return One2many;\n case \"separator\":\n return Separator;\n case \"reference\":\n return Reference;\n case \"binary\":\n return Binary;\n case \"image\":\n return Image;\n case \"url\":\n return Url;\n case \"email\":\n return Email;\n case \"float_time\":\n return FloatTime;\n case \"fiber_grid\":\n return FiberGrid;\n case \"timeline\":\n return Timeline;\n case \"indicator\":\n return Indicator;\n case \"tags\":\n return Tags;\n case \"tag\":\n return Tag;\n case \"multicheckbox\":\n return MultiCheckbox;\n case \"markdown\":\n return Markdown;\n case \"radio\":\n return Radio;\n case \"switch\":\n return Switch;\n case \"steps\":\n return Steps;\n case \"codeeditor\":\n return CodeEditor;\n case \"comments_timeline\":\n return CommentsTimelineField;\n default:\n return undefined;\n }\n};\n\nconst createReactWidget = (props: any) => {\n const { ooui } = props;\n const { type }: { type: string } = ooui;\n\n const widgetClass: any = getWidgetType(type);\n\n if (!widgetClass) {\n return null;\n }\n\n return React.createElement(widgetClass, props);\n};\n\nexport { createReactWidget };\n","import { Widget, Label, Field, Container } from \"@gisce/ooui\";\n\nconst getSpanStyleForItem = ({\n item,\n responsiveBehaviour,\n}: {\n item: Widget;\n responsiveBehaviour: boolean;\n}) => {\n return {\n gridColumnStart: \"span \" + (responsiveBehaviour ? 1 : item.colspan),\n };\n};\n\nconst fillRowWithEmptiesToFit = ({\n row,\n mustFillWithEmpties,\n numberOfColumns,\n}: {\n row: any;\n mustFillWithEmpties: boolean;\n numberOfColumns: number;\n}) => {\n const rowWithEmptiesToFit: any = [];\n let totalColSpan = 0;\n\n const isLastItemAndMustFit = (columnIndex: number) => {\n return (\n columnIndex + 1 === row.length &&\n totalColSpan < numberOfColumns &&\n !mustFillWithEmpties\n );\n };\n\n row.map((item: Widget, columnIndex: number) => {\n totalColSpan += item.colspan;\n\n if (isLastItemAndMustFit(columnIndex)) {\n const gapsToAdjust = numberOfColumns - totalColSpan;\n item.colspan = item.colspan + gapsToAdjust;\n totalColSpan += gapsToAdjust;\n }\n\n rowWithEmptiesToFit.push(item);\n\n if (isLastItemAndMustFit(columnIndex)) {\n const gapsToFill = numberOfColumns - totalColSpan;\n for (let i = 0; i < gapsToFill; i += 1) {\n rowWithEmptiesToFit.push(new Label({ string: \"\" }));\n }\n }\n });\n\n return rowWithEmptiesToFit;\n};\n\nconst expandWidgetsIfNeeded = ({\n row,\n numberOfColumns,\n}: {\n row: any;\n numberOfColumns: number;\n}) => {\n return row.map((item: Widget) => {\n if ((item as any)._mustExpand) {\n (item as any).colspan = numberOfColumns;\n return item;\n }\n return item;\n });\n};\n\nconst getSingleRowTemplateColumns = (\n row: Widget[],\n numberOfColumns: number\n) => {\n const gridOptions = row.map((item: Widget) => {\n if (item instanceof Label && (item as Label).fieldForLabel) {\n return \"auto\";\n }\n if (item instanceof Container) {\n return \"auto\";\n }\n return \"1fr\";\n });\n\n if (gridOptions.length < numberOfColumns) {\n const columnsToAdd = numberOfColumns - gridOptions.length;\n for (let i = 0; i < columnsToAdd; i++) {\n gridOptions.push(\"1fr\");\n }\n }\n return gridOptions.join(\" \");\n};\n\nconst getTemplateColumns = (columns: number, fieldInRows: boolean) => {\n // We check if we have any label+field inside (fieldInRows) the container.\n // In this scenario, we must format the grid accordingly\n // Otherwise, the grid will divide uniformly (auto)\n const odd = fieldInRows ? \"1fr\" : \"auto\";\n const even = \"auto\";\n let templateColumns = \"\";\n for (let i = 0; i < columns; i++) {\n templateColumns += i % 2 ? odd : even;\n if (i + 1 < columns) {\n templateColumns += \" \";\n }\n }\n return templateColumns;\n};\n\nconst getMaxColspanForRows = (rows: Widget[][]) => {\n const maxColspan = rows.map((row: Widget[]) => {\n return row.reduce((prev, current) => {\n return prev + current.colspan;\n }, 0);\n });\n return maxColspan.reduce((a, b) => {\n return Math.max(a, b);\n });\n};\n\nconst rowsHaveAnyField = (rows: Widget[][]) => {\n let found = false;\n\n rows.map((row: Widget[]) => {\n row.map((item: Widget) => {\n if (item instanceof Field) {\n found = true;\n }\n });\n });\n\n return found;\n};\n\nexport {\n fillRowWithEmptiesToFit,\n getSpanStyleForItem,\n expandWidgetsIfNeeded,\n getMaxColspanForRows,\n rowsHaveAnyField,\n getSingleRowTemplateColumns,\n getTemplateColumns,\n};\n","import React from \"react\";\nimport { Container as ContainerOoui, Widget, Label } from \"@gisce/ooui\";\nimport { createReactWidget } from \"@/widgets/WidgetFactory\";\n\nimport {\n getTemplateColumns,\n fillRowWithEmptiesToFit,\n getSpanStyleForItem,\n expandWidgetsIfNeeded,\n getMaxColspanForRows,\n getSingleRowTemplateColumns,\n} from \"@/helpers/containerHelper\";\n\ntype Props = {\n container: ContainerOoui;\n responsiveBehaviour: boolean;\n};\n\nconst Container = (props: Props): React.ReactElement => {\n const { container, responsiveBehaviour } = props;\n const { rows } = container;\n let { columns } = container;\n\n // We check for the largest colspan for each row\n // And if the value is smaller than the columns value\n // We adjust the columns value\n const maxColspanForRows = getMaxColspanForRows(rows);\n if (maxColspanForRows < columns) {\n columns = maxColspanForRows;\n }\n\n let fieldInRows = false;\n let firstRow: Widget[] = [];\n\n const content = rows.map((row: Widget[], i) => {\n const rowWithoutInvisibleFields = row.filter((widget) => {\n return !widget.invisible;\n });\n\n const rowWithExpandedItems = expandWidgetsIfNeeded({\n row: rowWithoutInvisibleFields,\n numberOfColumns: columns,\n });\n\n let rowWithEmptiesToFit = rowWithExpandedItems;\n if (\n i === 0 ||\n !(row.length === 1 && row.some((widget) => widget.type === \"group\"))\n ) {\n rowWithEmptiesToFit = fillRowWithEmptiesToFit({\n row: rowWithExpandedItems,\n numberOfColumns: columns,\n mustFillWithEmpties: responsiveBehaviour,\n });\n\n firstRow = firstRow.concat(rowWithEmptiesToFit);\n }\n\n return rowWithEmptiesToFit.map((item: Widget) => {\n // We check if we have any label+field inside the container.\n // In this scenario, we must format the grid accordingly\n // Otherwise, the grid will divide uniformly\n if (item instanceof Label && (item as Label).fieldForLabel) {\n fieldInRows = true;\n }\n\n return (\n <div\n key={item.key}\n style={{\n ...getSpanStyleForItem({ item, responsiveBehaviour }),\n minWidth: 0,\n }}\n >\n {createReactWidget({\n ooui: item,\n responsiveBehaviour,\n })}\n </div>\n );\n });\n });\n\n const templateColumns =\n rows.length === 1\n ? getSingleRowTemplateColumns(firstRow, columns)\n : getTemplateColumns(columns, fieldInRows);\n const gridStyle = {\n display: \"grid\",\n gridTemplateColumns: responsiveBehaviour ? \"auto\" : templateColumns,\n gap: \"1rem\",\n minHeight: 0,\n minWidth: 0,\n };\n\n return <div style={gridStyle}>{content}</div>;\n};\n\nexport default Container;\n","import React from \"react\";\nimport { Modal } from \"antd\";\nimport { ExclamationCircleOutlined } from \"@ant-design/icons\";\nimport { tForLang } from \"@/context/LocaleContext\";\n\nconst { confirm } = Modal;\n\nconst showDialog = ({\n onOk,\n onCancel,\n lang,\n}: {\n onOk: () => void;\n onCancel?: () => void;\n lang: string;\n}) => {\n confirm({\n title: tForLang(\"unsavedChanges\", lang),\n icon: <ExclamationCircleOutlined />,\n centered: true,\n content: tForLang(\"confirmCloseWithoutSave\", lang),\n okText: tForLang(\"closeWithoutSaving\", lang),\n onOk,\n onCancel,\n cancelText: tForLang(\"cancel\", lang),\n });\n};\n\nexport default showDialog;\n","import React from \"react\";\nimport { Modal } from \"antd\";\nimport { ExclamationCircleOutlined } from \"@ant-design/icons\";\nimport { tForLang } from \"@/context/LocaleContext\";\n\nconst { error } = Modal;\n\nconst showDialog = (lang: string) => {\n error({\n title: tForLang(\"formHasErrors\", lang),\n icon: <ExclamationCircleOutlined />,\n centered: true,\n content: tForLang(\"fillRequiredFields\", lang),\n });\n};\n\nexport default showDialog;\n","import React from \"react\";\nimport { Modal } from \"antd\";\nimport { WarningOutlined } from \"@ant-design/icons\";\n\nconst { warning } = Modal;\n\nconst showDialog = (title: string, message: string, onOk?: () => void) => {\n warning({\n title,\n icon: <WarningOutlined />,\n centered: true,\n content: message,\n onOk,\n });\n};\n\nexport default showDialog;\n","import React from \"react\";\n\nexport type FormModalContextType = {\n setTitle?: (title: string) => void;\n};\n\nexport const FormModalContext = React.createContext<FormModalContextType | null>(\n null\n);\n\ntype FormModalProviderProps = FormModalContextType & {\n children: React.ReactNode;\n};\n\nconst FormModalProvider = (props: FormModalProviderProps): any => {\n const { children, setTitle } = props;\n\n return (\n <FormModalContext.Provider\n value={{\n setTitle,\n }}\n >\n {children}\n </FormModalContext.Provider>\n );\n};\n\nexport default FormModalProvider;\n","const convertBooleanParamIfNeeded = (value: any) => {\n if ((typeof value === \"string\" && value === \"true\") || value === \"false\") {\n return value === \"true\";\n }\n return value;\n};\n\nexport const getParamsForFields = (values: any, widgetContainer: any) => {\n const filteredValues = removeUndefinedFields(values);\n const groupedDateTime = groupDateTimeValuesIfNeeded(filteredValues);\n const groupedValues = ungroupDateValuesIfNeeded(groupedDateTime, widgetContainer);\n\n const params = [\n ...Object.keys(groupedValues).map((key) => {\n return getParamForField(key, groupedValues[key], widgetContainer);\n }),\n ];\n\n // This is needed because in case of datetime we receive an array of arrays\n const paramsForFields = params.reduce((acc, curVal) => {\n if (Array.isArray(curVal[0])) {\n return acc.concat(curVal);\n }\n return [...acc, curVal];\n }, []);\n\n return paramsForFields;\n};\n\nconst getParamForField = (key: string, value: any, widgetContainer: any) => {\n const filteredKey = key.split(\"#\")[0];\n const type = widgetContainer.findById(filteredKey)?.type;\n\n if (\n type === \"char\" ||\n type === \"text\" ||\n type === \"many2one\" ||\n type === \"many2many\" ||\n type === \"one2many\"\n ) {\n return [key, \"ilike\", value];\n } else if (\n type === \"float\" ||\n type === \"integer\" ||\n type === \"float_time\" ||\n type === \"progressbar\"\n ) {\n const operator = key.indexOf(\"#from\") !== -1 ? \">=\" : \"<=\";\n return [filteredKey, operator, value];\n } else if (type === \"date\") {\n const operator = key.indexOf(\"#from\") !== -1 ? \">=\" : \"<=\";\n return [filteredKey, operator, value.format(\"YYYY-MM-DD\")];\n } else if (type === \"datetime\") {\n const filteredValues = [];\n if (value[0]) {\n filteredValues.push([filteredKey, \">=\", value[0]]);\n }\n if (value[1]) {\n filteredValues.push([filteredKey, \"<=\", value[1]]);\n }\n return filteredValues;\n } else if (type === \"selection\") {\n return [\n key,\n \"in\",\n value.map((valueEntry: string) =>\n convertBooleanParamIfNeeded(valueEntry)\n ),\n ];\n } else {\n return [key, \"=\", convertBooleanParamIfNeeded(value)];\n }\n};\n\nconst getDatetimeDateFields = (values: any) => {\n return Object.keys(values).filter((key) => {\n return key.indexOf(\"#date\") !== -1;\n });\n};\n\nconst removeDateTimeSingleFields = (values: any) => {\n const newValues = { ...values };\n Object.keys(newValues).forEach(\n (key) =>\n (key.indexOf(\"#time\") !== -1 || key.indexOf(\"#date\") !== -1) &&\n delete newValues[key]\n );\n return newValues;\n};\n\nexport const groupDateTimeValuesIfNeeded = (values: any) => {\n const newValues: any = { ...removeDateTimeSingleFields(values) };\n\n const datetimeDateFields = getDatetimeDateFields(values);\n\n datetimeDateFields.forEach((field) => {\n const datePair = values[field];\n const baseKey = field.split(\"#\")[0];\n const timeKey = baseKey + \"#time\";\n const timePair = values[timeKey];\n\n let from, to;\n\n if (datePair[0] !== null) {\n const dateValueFrom = datePair[0].format(\"YYYY-MM-DD\");\n from = dateValueFrom;\n\n if (timePair && timePair[0] !== null) {\n const timeValueFrom = timePair[0].format(\"HH:mm:ss\");\n from = from + \" \" + timeValueFrom;\n }\n }\n\n if (datePair[1] !== null) {\n const dateValueTo = datePair[1].format(\"YYYY-MM-DD\");\n to = dateValueTo;\n\n if (timePair && timePair[1] !== null) {\n const timeValueTo = timePair[1].format(\"HH:mm:ss\");\n to = to + \" \" + timeValueTo;\n }\n }\n\n newValues[baseKey + \"#datetime\"] = [from, to];\n });\n\n return newValues;\n};\n\nconst ungroupDateValuesIfNeeded = (values: any, widgetContainer: any) => {\n const dateFields = Object.keys(values).filter((key) => {\n const widget = widgetContainer.findById(key);\n return widget && widget.type === \"date\";\n });\n\n let newValues: any = { ...values };\n\n dateFields.forEach((key) => {\n delete newValues[key];\n if (values[key][0] !== null) {\n newValues[key + \"#from\"] = values[key][0];\n }\n\n if (values[key][1] !== null) {\n newValues[key + \"#to\"] = values[key][1];\n }\n });\n\n return newValues;\n};\n\nexport const removeUndefinedFields = (values: any) => {\n const newValues = { ...values };\n Object.keys(newValues).forEach(\n (key) =>\n (newValues[key] === undefined ||\n newValues[key] === null ||\n newValues[key] === \"\") &&\n delete newValues[key]\n );\n return newValues;\n};\n\nexport const getUniqueFieldsForParams = (params: any[]) => {\n const uniqueFields: any = {};\n\n params.forEach((param) => {\n if (Array.isArray(param) && param[0]) {\n uniqueFields[param[0]] = true;\n } else {\n uniqueFields[param] = true;\n }\n });\n\n return Object.keys(uniqueFields);\n};\n\nexport const mergeParams = (searchParams: any[], domainParams: any[]) => {\n const finalParams = [...searchParams];\n const uniqueParams = getUniqueFieldsForParams(searchParams);\n\n domainParams.forEach((element) => {\n if (Array.isArray(element) && element[0]) {\n if (!uniqueParams.includes(element[0])) {\n finalParams.push(element);\n }\n } else if (!uniqueParams.includes(element)) {\n finalParams.push(element);\n }\n });\n\n return finalParams;\n};\n","import { mergeParams } from \"@/helpers/searchHelper\";\nimport {\n getColorMap,\n getStatusMap,\n getTableItems,\n getTree,\n sortResults,\n} from \"@/helpers/treeHelper\";\nimport { useState, useCallback, useRef } from \"react\";\nimport { ConnectionProvider, FormView, TreeView } from \"..\";\n\ntype UseSearchOpts = {\n model: string;\n setSearchTreeNameSearch?: (searchString?: string) => void;\n setSelectedRowItems?: (value: any[]) => void;\n searchParams?: any[];\n setSearchParams?: (value: any[]) => void;\n setSearchVisible?: (value: boolean) => void;\n setTreeIsLoading?: (value: boolean) => void;\n nameSearch?: string;\n searchNameGetDoneRef?: any;\n context?: any;\n setActionViewTotalItems?: (totalItems: number) => void;\n formView: FormView;\n treeView: TreeView;\n sorter: any;\n setSorter?: (sorter: any) => void;\n setCurrentItemIndex?: (value?: number) => void;\n setResultsActionView?: (value: any[]) => void;\n resultsActionView?: any[];\n domain: any;\n currentId?: number;\n limit?: number;\n setLimit?: (value: number) => void;\n setSearchValues?: (value: any) => void;\n};\n\nexport const DEFAULT_SEARCH_LIMIT = 80;\n\nexport const useSearch = (opts: UseSearchOpts) => {\n const {\n model,\n setSearchTreeNameSearch,\n setSelectedRowItems,\n setSearchParams,\n setSearchVisible,\n setTreeIsLoading,\n nameSearch,\n searchNameGetDoneRef,\n context,\n setActionViewTotalItems,\n treeView,\n formView,\n sorter,\n setSorter,\n setCurrentItemIndex,\n setResultsActionView,\n resultsActionView,\n domain,\n currentId,\n limit,\n setLimit,\n searchParams = [],\n setSearchValues,\n } = opts;\n\n const [tableRefreshing, setTableRefreshing] = useState<boolean>(false);\n const [searchFilterLoading, setSearchFilterLoading] =\n useState<boolean>(false);\n const [searchError, setSearchError] = useState<string>();\n const [page, setPage] = useState<number>(1);\n const [offset, setOffset] = useState<number>(0);\n const [totalItems, setTotalItems] = useState<number>();\n const [resultsInternal, setResultsInternal] = useState<any>([]);\n const [colorsForResults, setColorsForResults] = useState<any>(undefined);\n const [statusForResults, setStatusForResults] = useState<any>(undefined);\n const internalLimit = useRef(limit || DEFAULT_SEARCH_LIMIT);\n\n const originalResults = useRef<any[]>([]);\n\n const setResults = useCallback((results: any) => {\n setResultsActionView?.([...results]);\n setResultsInternal([...results]);\n }, []);\n\n const getResults = useCallback(() => {\n if (!resultsActionView) {\n return resultsInternal;\n }\n return resultsActionView;\n }, [resultsActionView, resultsInternal]);\n\n const searchByNameSearch = useCallback(async () => {\n const searchResults = await ConnectionProvider.getHandler().nameSearch({\n model,\n payload: nameSearch,\n limit: internalLimit.current,\n attrs: domain,\n context,\n });\n\n setTotalItems(searchResults.length);\n setActionViewTotalItems?.(searchResults.length);\n\n if (searchResults.length > 0) {\n const resultsIds = searchResults.map((item: any) => {\n return item?.[0];\n });\n\n const { colors, status } = getTree(treeView!);\n const attrs: any = {};\n if (colors) {\n attrs.colors = colors;\n }\n if (status) {\n attrs.status = status;\n }\n\n const resultsWithData =\n await ConnectionProvider.getHandler().readEvalUiObjects({\n model,\n ids: resultsIds,\n arch: treeView?.arch!,\n fields: treeView!.field_parent\n ? { ...treeView!.fields, [treeView!.field_parent]: {} }\n : treeView!.fields,\n context,\n attrs,\n });\n const resultsData = resultsWithData[0];\n\n originalResults.current = [...resultsData];\n\n setColorsForResults(getColorMap(resultsWithData[1]));\n setStatusForResults(getStatusMap(resultsWithData[1]));\n\n const newResultIds = resultsData.map((item: any) => item.id);\n\n const resultsSorted =\n sorter !== undefined\n ? sortResults({\n resultsToSort: resultsData,\n sorter,\n fields: { ...treeView!.fields, ...formView!.fields },\n })\n : [...originalResults.current];\n\n setResults(resultsSorted);\n\n if (newResultIds.length > 0) {\n setCurrentItemIndex?.(0);\n } else {\n setCurrentItemIndex?.(undefined);\n }\n } else {\n setResults([]);\n setCurrentItemIndex?.(undefined);\n }\n setTableRefreshing(false);\n searchNameGetDoneRef.current = true;\n }, [\n setResults,\n searchNameGetDoneRef,\n nameSearch,\n model,\n context,\n domain,\n treeView,\n formView,\n sorter,\n setCurrentItemIndex,\n setActionViewTotalItems,\n ]);\n\n const searchResults = useCallback(\n async (opts?: { params: any; newOffset?: number }) => {\n const { params, newOffset } = opts || {};\n\n const mergedParams = mergeParams(params || searchParams, domain);\n const { colors, status } = getTree(treeView!);\n const attrs: any = {};\n if (colors) {\n attrs.colors = colors;\n }\n if (status) {\n attrs.status = status;\n }\n\n const { totalItems, results, attrsEvaluated } =\n await ConnectionProvider.getHandler().searchForTree({\n params: mergedParams,\n limit: internalLimit.current,\n offset: newOffset || offset,\n model,\n fields: treeView!.field_parent\n ? { ...treeView!.fields, [treeView!.field_parent]: {} }\n : treeView!.fields,\n context,\n attrs,\n });\n setColorsForResults(getColorMap(attrsEvaluated));\n setStatusForResults(getStatusMap(attrsEvaluated));\n\n originalResults.current = [...results];\n\n const resultsSorted =\n sorter !== undefined\n ? sortResults({\n resultsToSort: results,\n sorter: sorter,\n fields: { ...treeView!.fields, ...formView!.fields },\n })\n : [...originalResults.current];\n\n setResults(resultsSorted);\n\n if (resultsActionView && resultsSorted.length > 0) {\n const newCurrentItemIndex = resultsSorted.findIndex(\n (item) => currentId === item.id\n );\n\n if (newCurrentItemIndex === -1) {\n setCurrentItemIndex?.(0);\n } else {\n setCurrentItemIndex?.(newCurrentItemIndex);\n }\n } else {\n setCurrentItemIndex?.(undefined);\n }\n setTableRefreshing(false);\n\n const totalItemsValue = await totalItems;\n\n setTotalItems(totalItemsValue);\n setActionViewTotalItems?.(totalItemsValue);\n },\n [\n setCurrentItemIndex,\n resultsActionView,\n setResults,\n currentId,\n model,\n context,\n domain,\n treeView,\n formView,\n sorter,\n setActionViewTotalItems,\n limit,\n offset,\n searchParams,\n ]\n );\n\n const fetchResults = useCallback(\n async (opts?: { params: any; newOffset?: number }) => {\n try {\n setTableRefreshing(true);\n setTreeIsLoading?.(true);\n if (nameSearch && !searchNameGetDoneRef.current) {\n await searchByNameSearch();\n } else {\n await searchResults(opts);\n }\n } catch (error) {\n setSearchError(error.message);\n } finally {\n setSelectedRowItems?.([]);\n setSearchFilterLoading(false);\n setTreeIsLoading?.(false);\n }\n },\n [\n context,\n currentId,\n domain,\n formView,\n limit,\n model,\n nameSearch,\n offset,\n resultsActionView,\n searchNameGetDoneRef,\n setActionViewTotalItems,\n setCurrentItemIndex,\n setResults,\n setSearchError,\n setSearchFilterLoading,\n setTableRefreshing,\n setTreeIsLoading,\n sorter,\n treeView,\n ]\n );\n\n const changeSort = useCallback(\n (newSorter: any) => {\n if (JSON.stringify(newSorter) === JSON.stringify(sorter)) return;\n setSorter?.(newSorter);\n const sortedResults =\n newSorter !== undefined\n ? sortResults({\n resultsToSort: getResults(),\n sorter: newSorter,\n fields: { ...treeView.fields, ...formView.fields },\n })\n : [...originalResults.current];\n setResults(sortedResults);\n },\n [setSorter, getResults, treeView, formView, setResults]\n );\n\n const submit = useCallback(\n (opts: {\n params: any;\n limit: number;\n offset: number;\n searchValues: any;\n }) => {\n const { params, searchValues, limit: newLimit, offset: newOffset } = opts;\n\n if (tableRefreshing) return;\n setSearchTreeNameSearch?.(undefined);\n setSelectedRowItems?.([]);\n setSearchValues?.(searchValues);\n setSearchParams?.(params);\n setSearchVisible?.(false);\n setSearchFilterLoading(true);\n setSearchError(undefined);\n setPage(1);\n\n if (newLimit) {\n internalLimit.current = newLimit;\n setLimit?.(newLimit);\n }\n if (newOffset) setOffset(newOffset);\n fetchResults({\n params,\n newOffset,\n });\n },\n [\n tableRefreshing,\n setSearchTreeNameSearch,\n setSelectedRowItems,\n setSearchParams,\n setSearchVisible,\n setSearchFilterLoading,\n setSearchError,\n setPage,\n setLimit,\n setOffset,\n fetchResults,\n ]\n );\n\n const requestPageChange = useCallback(\n (page: number) => {\n setTableRefreshing(true);\n setPage(page);\n setOffset((page - 1) * limit!);\n },\n [setTableRefreshing, limit, setOffset, setPage]\n );\n\n const clear = useCallback(() => {\n if (tableRefreshing) return;\n setSearchTreeNameSearch?.(undefined);\n setSearchParams?.([]);\n setSearchValues?.({});\n setSearchError(undefined);\n setOffset(0);\n setPage(1);\n setLimit?.(limit || DEFAULT_SEARCH_LIMIT);\n }, [\n tableRefreshing,\n setSearchTreeNameSearch,\n setSearchParams,\n setSearchError,\n setOffset,\n setPage,\n setLimit,\n limit,\n ]);\n\n const fetchChildrenForRecord = useCallback(\n async (record: any) => {\n const child_id = record[treeView?.field_parent || \"child_id\"];\n\n const children = await ConnectionProvider.getHandler().readObjects({\n model,\n ids: child_id,\n fields: treeView!.field_parent\n ? { ...treeView!.fields, [treeView!.field_parent]: {} }\n : treeView!.fields,\n context,\n });\n\n setResults([...getResults(), ...children]);\n\n return getTableItems(getTree(treeView!), children);\n },\n [treeView, model, context, getResults, setResults]\n );\n\n const getAllIds = useCallback(async () => {\n return await ConnectionProvider.getHandler().searchAllIds({\n params: mergeParams(searchParams, domain),\n model,\n context,\n totalItems,\n });\n }, [model, context, totalItems, searchParams, domain]);\n\n return {\n submit,\n clear,\n fetchResults,\n tableRefreshing,\n searchFilterLoading,\n searchError,\n page,\n offset,\n limit,\n getResults,\n requestPageChange,\n changeSort,\n fetchChildrenForRecord,\n colorsForResults,\n statusForResults,\n totalItems,\n getAllIds,\n };\n};\n","import { DEFAULT_SEARCH_LIMIT } from \"@/hooks/useSearch\";\nimport { View } from \"@/types\";\nimport React, { useEffect, useRef, useState } from \"react\";\n\nexport type ActionViewContextType = {\n title: string;\n availableViews: View[];\n currentView: View;\n setCurrentView: (view: View) => void;\n formIsSaving?: boolean;\n setFormIsSaving?: (value: boolean) => void;\n formHasChanges?: boolean;\n setFormHasChanges?: (value: boolean) => void;\n onFormSave?: () => Promise<{ succeed: boolean; id: number }>;\n formRef?: any;\n searchTreeRef?: any;\n onNewClicked: () => void;\n currentId?: number;\n setCurrentId?: (id?: number) => void;\n currentItemIndex?: number;\n setCurrentItemIndex?: (value?: number) => void;\n results?: any[];\n setResults?: (value: any[]) => void;\n currentModel?: string;\n removingItem?: boolean;\n setRemovingItem?: (value: boolean) => void;\n formIsLoading?: boolean;\n setFormIsLoading?: (value: boolean) => void;\n treeIsLoading?: boolean;\n setTreeIsLoading?: (value: boolean) => void;\n graphIsLoading?: boolean;\n setGraphIsLoading?: (value: boolean) => void;\n attachments?: any;\n setAttachments?: (value: any) => void;\n selectedRowItems?: any[];\n setSelectedRowItems?: (value: any[]) => void;\n duplicatingItem?: boolean;\n setDuplicatingItem?: (value: boolean) => void;\n searchParams?: any[];\n setSearchParams?: (value: any[]) => void;\n searchVisible?: boolean;\n setSearchVisible?: (value: boolean) => void;\n sorter: any;\n setSorter: (sorter: any) => void;\n totalItems: number;\n setTotalItems: (totalItems: number) => void;\n searchTreeNameSearch?: string;\n setSearchTreeNameSearch?: (searchString?: string) => void;\n previousView?: View;\n setPreviousView?: (view: View) => void;\n goToResourceId?: (id: number) => Promise<void>;\n searchValues?: any;\n setSearchValues?: (value: any) => void;\n limit?: number;\n setLimit?: (value: number) => void;\n setTitle?: (value: string) => void;\n};\n\nexport const ActionViewContext =\n React.createContext<ActionViewContextType | null>(null);\n\ntype ActionViewProviderProps = ActionViewContextType & {\n children: React.ReactNode;\n};\n\nconst ActionViewProvider = (props: ActionViewProviderProps): any => {\n const {\n children,\n currentView,\n title: titleProps,\n setCurrentView,\n availableViews,\n formRef,\n searchTreeRef,\n onNewClicked,\n currentId,\n setCurrentId,\n setResults,\n results,\n currentItemIndex,\n setCurrentItemIndex,\n currentModel,\n sorter,\n setSorter,\n totalItems,\n setTotalItems,\n setSelectedRowItems,\n selectedRowItems,\n searchTreeNameSearch,\n setSearchTreeNameSearch,\n goToResourceId,\n limit: limitProps,\n } = props;\n\n const [formIsSaving, setFormIsSaving] = useState<boolean>(false);\n const [formHasChanges, setFormHasChanges] = useState<boolean>(false);\n const [removingItem, setRemovingItem] = useState<boolean>(false);\n const [formIsLoading, setFormIsLoading] = useState<boolean>(true);\n const [treeIsLoading, setTreeIsLoading] = useState<boolean>(true);\n const [attachments, setAttachments] = useState<any>([]);\n const [duplicatingItem, setDuplicatingItem] = useState<boolean>(false);\n const [searchParams, setSearchParams] = useState<any[]>([]);\n const [searchVisible, setSearchVisible] = useState<boolean>(false);\n const [graphIsLoading, setGraphIsLoading] = useState<boolean>(true);\n const [previousView, setPreviousView] = useState<View>();\n const [searchValues, setSearchValues] = useState<any>({});\n const [limit, setLimit] = useState<number>(\n limitProps !== undefined ? limitProps : DEFAULT_SEARCH_LIMIT\n );\n const [title, setTitle] = useState<string>(titleProps);\n\n useEffect(() => {\n if (results && results.length > 0 && !currentItemIndex) {\n setCurrentItemIndex?.(0);\n setCurrentId?.(results[0].id);\n }\n }, [results]);\n\n useEffect(() => {\n setLimit(limitProps !== undefined ? limitProps : DEFAULT_SEARCH_LIMIT);\n }, [limitProps]);\n\n useEffect(() => {\n if (availableViews.length === 1) {\n setPreviousView(availableViews[0]);\n } else if (availableViews.length > 1) {\n setPreviousView(\n availableViews.filter((view) => view.view_id !== currentView.view_id)[0]\n );\n }\n }, [availableViews]);\n\n useEffect(() => {\n if (\n previousView?.view_id === currentView.view_id &&\n availableViews.length > 1\n ) {\n setPreviousView(\n availableViews.filter((view) => view.view_id !== currentView.view_id)[0]\n );\n }\n }, [currentView]);\n\n const callOnFormSave = async () => {\n return await (formRef.current as any)?.submitForm();\n };\n\n return (\n <ActionViewContext.Provider\n value={{\n title,\n currentView,\n setCurrentView,\n availableViews,\n formIsSaving,\n setFormIsSaving,\n formHasChanges,\n setFormHasChanges,\n formRef,\n searchTreeRef,\n onFormSave: callOnFormSave,\n onNewClicked,\n currentId,\n setCurrentId,\n currentItemIndex,\n setCurrentItemIndex,\n results,\n setResults,\n currentModel,\n removingItem,\n setRemovingItem,\n formIsLoading,\n setFormIsLoading,\n treeIsLoading,\n setTreeIsLoading,\n attachments,\n setAttachments,\n selectedRowItems,\n setSelectedRowItems,\n duplicatingItem,\n setDuplicatingItem,\n setSearchParams,\n searchParams,\n searchVisible,\n setSearchVisible,\n sorter,\n setSorter,\n totalItems,\n setTotalItems,\n searchTreeNameSearch,\n setSearchTreeNameSearch,\n setGraphIsLoading,\n graphIsLoading,\n previousView,\n setPreviousView,\n goToResourceId,\n searchValues,\n setSearchValues,\n limit,\n setLimit,\n setTitle,\n }}\n >\n {children}\n </ActionViewContext.Provider>\n );\n};\n\nexport default ActionViewProvider;\n","import { InitialViewData, View, ViewType } from \"@/types\";\nimport { ShortcutApi } from \"@/ui/FavouriteButton\";\nimport React, { useState } from \"react\";\n\nexport type TabManagerContextType = {\n openAction: ({\n domain,\n context,\n model,\n views,\n title,\n target,\n initialView,\n action_id,\n action_type,\n res_id,\n values,\n forced_values,\n }: {\n domain: any;\n context: any;\n model: string;\n views: Array<any>;\n title: string;\n target: string;\n initialView: InitialViewData;\n action_id: number;\n action_type: string;\n res_id?: number | boolean;\n values?: any;\n forced_values?: any;\n }) => void;\n openRelate: ({\n relateData,\n fields,\n values,\n action_id,\n action_type,\n }: {\n relateData: any;\n fields: any;\n values: any;\n action_id: number;\n action_type: string;\n }) => void;\n openDefaultActionForModel: ({\n model,\n values,\n forced_values,\n initialViewType,\n res_id,\n domain,\n }: {\n model: string;\n values?: any;\n forced_values?: any;\n initialViewType?: ViewType;\n res_id?: number;\n domain?: any;\n }) => void;\n activeKey: string;\n onChangeTab: (key: string) => void;\n onRemoveTab: (key: string) => void;\n openShortcut: (shortcut: ShortcutApi) => void;\n tabs: any[];\n currentView?: View;\n setCurrentView?: (view?: View) => void;\n currentId?: number;\n setCurrentId?: (id?: number) => void;\n};\n\nexport const TabManagerContext = React.createContext<TabManagerContextType | null>(\n null\n);\n\ntype TabManagerProviderProps = TabManagerContextType & {\n children: React.ReactNode;\n};\n\nconst TabManagerProvider = (props: TabManagerProviderProps): any => {\n const {\n children,\n openAction,\n openRelate,\n openDefaultActionForModel,\n openShortcut,\n activeKey,\n onChangeTab,\n onRemoveTab,\n tabs,\n } = props;\n\n const [currentView, setCurrentView] = useState<View>();\n const [currentId, setCurrentId] = useState<number>();\n\n return (\n <TabManagerContext.Provider\n value={{\n openAction,\n openRelate,\n openDefaultActionForModel,\n activeKey,\n openShortcut,\n onChangeTab,\n onRemoveTab,\n tabs,\n currentId,\n currentView,\n setCurrentId,\n setCurrentView,\n }}\n >\n {children}\n </TabManagerContext.Provider>\n );\n};\n\nexport default TabManagerProvider;\n","import { FormView, GenerateReportOptions, ViewType } from \"@/types\";\nimport React, {\n useContext,\n useRef,\n useState,\n forwardRef,\n useImperativeHandle,\n} from \"react\";\nimport showErrorDialog from \"@/ui/ActionErrorDialog\";\nimport { openBase64InNewTab, getMimeType } from \"@/helpers/filesHelper\";\nimport { parseContext } from \"@gisce/ooui\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport { Modal, Spin } from \"antd\";\nimport {\n TabManagerContext,\n TabManagerContextType,\n} from \"@/context/TabManagerContext\";\nimport { FormModal } from \"@/widgets/modals/FormModal\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport { transformPlainMany2Ones, stringFormat } from \"@/helpers/formHelper\";\n\nexport type ContentRootContextType = {\n processAction: ({\n actionData,\n fields,\n values,\n context,\n }: {\n actionData: any;\n fields: any;\n values: any;\n context?: any;\n onRefreshParentValues?: () => void;\n }) => Promise<any>;\n globalValues?: any;\n};\n\ntype ActionModalOpts = {\n model?: string;\n domain?: any;\n context: any;\n formView?: FormView;\n actionData?: any;\n};\n\nexport const ContentRootContext =\n React.createContext<ContentRootContextType | null>(null);\n\ntype ContentRootProviderProps = {\n children: React.ReactNode;\n globalValues?: any;\n};\n\nconst callRefreshValues = async (fns: any[]) => {\n for (let i = 0; i < fns.length; i++) {\n await fns?.[i]?.();\n }\n};\n\nconst ContentRootProvider = (\n props: ContentRootProviderProps,\n ref: any\n): any => {\n const { children, globalValues = {} } = props;\n const reportInProgressInterval = useRef<any>();\n const waitingForReport = useRef<boolean>();\n const [reportGenerating, setReportGenerating] = useState<boolean>(false);\n const tabManagerContext = useContext(\n TabManagerContext\n ) as TabManagerContextType;\n const { openAction } = tabManagerContext || {};\n const onRefreshParentValues = useRef<any>([]);\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n useImperativeHandle(ref, () => ({\n openActionModal,\n }));\n\n // Action modal state\n const [actionModalVisible, setActionModalVisible] = useState<boolean>(false);\n\n const [actionModalOptions, setActionModalOptions] = useState<ActionModalOpts>(\n {\n context: {},\n }\n );\n\n async function generateReport(options: GenerateReportOptions) {\n const { reportData, fields, values, context = {} } = options;\n\n const {\n context: reportContext,\n model,\n datas = {},\n report_name,\n type,\n } = reportData;\n\n if (type !== \"ir.actions.report.xml\") {\n showErrorDialog(`${type} action not supported`);\n return;\n }\n\n const { ids } = datas || {};\n\n let idsToExecute = ids || [];\n\n const reportContextParsed =\n typeof reportContext === \"string\"\n ? parseContext({\n context: reportContext,\n fields,\n values,\n })\n : reportContext;\n\n try {\n const newReportId = await ConnectionProvider.getHandler().createReport({\n model,\n name: report_name,\n datas,\n ids: idsToExecute,\n context: { ...context, ...reportContextParsed },\n });\n\n setReportGenerating(true);\n\n waitingForReport.current = true;\n reportInProgressInterval.current = setInterval(() => {\n evaluateReportStatus(newReportId);\n }, 1000);\n } catch (err) {\n waitingForReport.current = false;\n clearInterval(reportInProgressInterval.current);\n showErrorDialog(err);\n setReportGenerating(false);\n }\n }\n\n async function evaluateReportStatus(id: any) {\n let reportState;\n try {\n reportState = await ConnectionProvider.getHandler().getReport({\n id,\n });\n if (reportState.state && waitingForReport.current === true) {\n waitingForReport.current = false;\n clearInterval(reportInProgressInterval.current);\n setReportGenerating(false);\n const fileType: any = await getMimeType(reportState.result);\n openBase64InNewTab(reportState.result, fileType.mime);\n }\n } catch (error) {\n waitingForReport.current = false;\n clearInterval(reportInProgressInterval.current);\n setReportGenerating(false);\n showErrorDialog(error.exception || error);\n }\n }\n\n async function processAction({\n actionData,\n fields,\n values,\n context,\n onRefreshParentValues: onRefreshParentValuesFn,\n }: {\n actionData: any;\n fields: any;\n values: any;\n context?: any;\n onRefreshParentValues?: any;\n }) {\n const { type } = actionData;\n onRefreshParentValues.current.push(onRefreshParentValuesFn);\n\n if (type === \"ir.actions.report.xml\") {\n return await generateReport({\n reportData: actionData,\n fields,\n values,\n context,\n });\n } else if (type === \"ir.actions.act_window\") {\n return await runAction({actionData, fields, values, context});\n } else if (type === \"ir.actions.act_url\") {\n window.open(stringFormat(actionData.url, {...values, context}), \"_blank\");\n } else {\n showErrorDialog(`${type} action not supported`);\n return {};\n }\n }\n\n async function runAction({\n actionData: _actionData,\n fields = {},\n values = {},\n context = {},\n }: {\n actionData: any;\n fields?: any;\n values?: any;\n context?: any;\n }) {\n let actionData = _actionData;\n\n if (!_actionData.res_model) {\n actionData = (\n await ConnectionProvider.getHandler().readObjects({\n model: \"ir.actions.act_window\",\n ids: [parseInt(_actionData.id)],\n context,\n })\n )[0];\n }\n\n const responseContext =\n typeof actionData?.context === \"string\"\n ? parseContext({\n context: actionData.context,\n fields,\n values: { ...values, ...globalValues },\n })\n : actionData.context;\n\n const mergedContext = {\n ...context,\n ...responseContext,\n };\n\n let parsedDomain = [];\n\n if (actionData.domain) {\n parsedDomain = await ConnectionProvider.getHandler().evalDomain({\n domain: actionData.domain,\n values: transformPlainMany2Ones({\n fields,\n values: { ...values, ...globalValues },\n }),\n fields,\n context: mergedContext,\n });\n }\n\n // -- Possible values for target property --\n // * new ==> modal\n // * current ==> new tab\n // * undefined ==> new tab\n if (actionData.target === \"new\") {\n const formView = (await ConnectionProvider.getHandler().getView({\n model: actionData.res_model,\n type: \"form\",\n id: actionData?.view_id?.[0] || undefined,\n context: mergedContext,\n })) as FormView;\n\n openActionModal({\n domain: parsedDomain,\n model: actionData.res_model,\n formView,\n context: mergedContext,\n });\n\n return {};\n } else {\n const { initialView, views } = await getViewsAndInitialView({\n model: actionData.res_model,\n context: mergedContext,\n view_mode: actionData.view_mode,\n views: actionData.views,\n });\n\n openAction?.({\n target: \"current\",\n context: mergedContext,\n domain: parsedDomain,\n model: actionData.res_model,\n views: views,\n title: actionData.name,\n initialView,\n action_id: actionData.id,\n action_type: actionData.type,\n });\n\n return { closeParent: true };\n }\n }\n\n function openActionModal({\n domain,\n model,\n formView,\n context,\n actionData,\n }: {\n domain: any;\n model: string;\n formView: FormView;\n context: any;\n actionData?: any;\n }) {\n if (actionModalVisible) {\n openNewActionModal({ domain, model, formView, context, actionData });\n } else {\n setActionModalOptions({ domain, model, context, formView, actionData });\n setActionModalVisible(true);\n }\n }\n\n async function openNewActionModal({\n domain,\n model,\n formView,\n context,\n actionData,\n }: {\n domain: any;\n model: string;\n formView: FormView;\n context: any;\n actionData?: any;\n }) {\n setActionModalOptions({\n domain: undefined,\n model: undefined,\n context: {},\n formView: undefined,\n actionData: undefined,\n });\n setActionModalVisible(false);\n await new Promise((resolve) => setTimeout(resolve, 300));\n setActionModalOptions({ domain, model, context, formView, actionData });\n setActionModalVisible(true);\n }\n\n async function onFormModalSucceed() {\n callRefreshValues(onRefreshParentValues.current);\n onRefreshParentValues.current = [];\n setActionModalVisible(false);\n setActionModalOptions({\n domain: undefined,\n model: undefined,\n context: {},\n formView: undefined,\n actionData: undefined,\n });\n }\n\n return (<>\n <ContentRootContext.Provider\n value={{\n processAction,\n globalValues,\n }}\n >\n <>\n {children}\n <Modal\n title={t(\"generatingReport\")}\n open={reportGenerating}\n footer={null}\n closable={false}\n centered\n maskClosable={false}\n >\n <Spin />\n </Modal>\n <FormModal\n buttonModal\n parentContext={actionModalOptions.context}\n model={actionModalOptions.model!}\n formView={actionModalOptions.formView}\n visible={actionModalVisible}\n onSubmitSucceed={onFormModalSucceed}\n onCancel={() => {\n callRefreshValues(onRefreshParentValues.current);\n onRefreshParentValues.current = [];\n setActionModalVisible(false);\n setActionModalOptions({\n domain: undefined,\n model: undefined,\n context: {},\n formView: undefined,\n actionData: undefined,\n });\n }}\n showFooter={false}\n actionDomain={actionModalOptions.domain}\n isMenuAction={actionModalOptions?.actionData !== undefined}\n actionData={actionModalOptions?.actionData}\n />\n </>\n </ContentRootContext.Provider>\n </>);\n};\n\nasync function getViewsAndInitialView({\n views,\n view_mode,\n model,\n context,\n view_id,\n}: {\n views: any[];\n view_mode: string;\n model: string;\n context: any;\n view_id?: number;\n}) {\n const retriedViewData = [];\n let initialView;\n\n if (views) {\n for (const view of views) {\n const viewData = await ConnectionProvider.getHandler().getView({\n model,\n type: view[1],\n id: view[0],\n context,\n });\n retriedViewData.push([viewData.view_id, view[1]]);\n }\n } else {\n const viewTypes = view_mode.split(\",\");\n for (const viewType of viewTypes) {\n const viewData = await ConnectionProvider.getHandler().getView({\n model,\n type: viewType as ViewType,\n context,\n });\n retriedViewData.push([viewData.view_id, viewType]);\n }\n }\n if (views && views.length > 0) {\n const [id, type] = views[0];\n initialView = {\n id,\n type,\n };\n } else if (!view_id) {\n const type = view_mode.split(\",\")[0];\n const [retrievedViewId] = retriedViewData.find(([_, viewType]) => viewType === type)!;\n initialView = { id: retrievedViewId, type };\n } else {\n initialView = {\n id: view_id,\n type: view_mode.split(\",\")[0],\n };\n }\n\n return { views: retriedViewData, initialView };\n}\n\nexport default forwardRef(ContentRootProvider);\n","import { parseError } from \"@/helpers/errorHelper\";\nimport { Alert } from \"antd\";\nimport React from \"react\";\nimport { Interweave } from \"interweave\";\n\nexport const ErrorAlert = ({\n error,\n className,\n}: {\n error: any;\n className: string;\n}) => {\n let messageContent;\n let messageType = \"error\";\n\n if (\n typeof error === \"string\" &&\n error.indexOf(\" -- \") !== -1 &&\n error.indexOf(\"\\n\\n\") !== -1\n ) {\n const { message, type, title } = parseError(error);\n messageContent = <Interweave content={`${title}<br />${message}`} />;\n messageType = type;\n } else {\n messageContent = error.message\n ? JSON.stringify(error.message)\n : JSON.stringify(error);\n }\n return (\n <Alert\n className={className}\n message={messageContent}\n type={messageType as any}\n banner\n />\n );\n};\n","import React, {\n useState,\n forwardRef,\n useImperativeHandle,\n useEffect,\n useRef,\n useContext,\n} from \"react\";\nimport { Form as FormOoui, parseContext } from \"@gisce/ooui\";\nimport {\n Form as AntForm,\n Button,\n Divider,\n Space,\n Row,\n Alert,\n Spin,\n message,\n} from \"antd\";\nimport Measure from \"react-measure\";\nimport { CheckOutlined, CloseOutlined } from \"@ant-design/icons\";\nimport debounce from \"lodash/debounce\";\n\nimport Container from \"@/widgets/containers/Container\";\nimport {\n processValues,\n getTouchedValues,\n checkFieldsType,\n mergeFieldsDomain,\n getValuesForDomain,\n getOnChangePayload,\n} from \"@/helpers/formHelper\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport showUnsavedChangesDialog from \"@/ui/UnsavedChangesDialog\";\nimport formErrorsDialog from \"@/ui/FormErrorsDialog\";\nimport showErrorDialog from \"@/ui/ActionErrorDialog\";\nimport showWarningDialog from \"@/ui/WarningDialog\";\nimport FormProvider, {\n FormContext,\n FormContextType,\n} from \"@/context/FormContext\";\nimport { FormView, One2manyItem } from \"@/index\";\nimport {\n FormModalContext,\n FormModalContextType,\n} from \"@/context/FormModalContext\";\n\nimport {\n ActionViewContext,\n ActionViewContextType,\n} from \"@/context/ActionViewContext\";\n\nimport {\n ContentRootContext,\n ContentRootContextType,\n} from \"@/context/ContentRootContext\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport { convertToPlain2ManyValues } from \"@/helpers/one2manyHelper\";\nimport { ErrorAlert } from \"@/ui/ErrorAlert\";\n\nexport type FormProps = {\n model: string;\n readOnly?: boolean;\n id?: number;\n formView?: FormView;\n values?: any;\n showFooter?: boolean;\n getDataFromAction?: boolean;\n mustClearAfterSave?: boolean;\n submitMode?: \"api\" | \"values\" | \"2many\";\n onSubmitSucceed?: (\n id?: number,\n values?: any,\n formValues?: any,\n x2manyPendingLink?: boolean\n ) => void;\n onSubmitError?: (error: any) => void;\n onCancel?: () => void;\n onFieldsChange?: (values: any) => void;\n postSaveAction?: (event: any) => Promise<void>;\n insideButtonModal?: boolean;\n parentContext?: any;\n actionDomain?: any;\n visible?: boolean;\n rootForm?: boolean;\n defaultValues?: any;\n forcedValues?: any;\n parentWidth?: number;\n};\n\nconst WIDTH_BREAKPOINT = 800;\n\nfunction Form(props: FormProps, ref: any) {\n const {\n model,\n id,\n onCancel: propsOnCancel,\n onSubmitSucceed: propsOnSubmitSucceed,\n showFooter = false,\n getDataFromAction = false,\n onFieldsChange,\n onSubmitError: propsOnSubmitError,\n readOnly = false,\n mustClearAfterSave = false,\n submitMode = \"api\",\n values: valuesProps,\n formView: formViewProps,\n postSaveAction,\n insideButtonModal = false,\n parentContext = {},\n actionDomain,\n visible = true,\n rootForm = false,\n defaultValues,\n forcedValues = {},\n parentWidth,\n } = props;\n const { t, lang } = useContext(LocaleContext) as LocaleContextType;\n\n const [isSubmitting, setIsSubmitting] = useState<boolean>(false);\n const [error, setError] = useState<string>();\n const [formOoui, setFormOoui] = useState<FormOoui>();\n const [antForm] = AntForm.useForm();\n const [arch, setArch] = useState<string>();\n const [fields, setFields] = useState<any>();\n const formModalContext = useContext(FormModalContext) as FormModalContextType;\n const [containerWidth, setContainerWidth] = useState<any>();\n const [defaultGetCalled, setDefaultGetCalled] = useState<boolean>(false);\n\n const createdId = useRef<number>();\n const originalFormValues = useRef<any>({});\n const lastAssignedValues = useRef<any>({});\n const warningIsShown = useRef<boolean>(false);\n const formSubmitting = useRef<boolean>(false);\n const x2manyPendingLink = useRef<boolean>(false);\n\n const widthToEvaluate =\n parentWidth !== undefined ? parentWidth : containerWidth;\n const responsiveBehaviour = widthToEvaluate < WIDTH_BREAKPOINT;\n\n const formContext = useContext(FormContext) as FormContextType;\n const { activeId: parentId, getPlainValues: getParentPlainValues } =\n formContext || {};\n\n const actionViewContext = useContext(\n ActionViewContext\n ) as ActionViewContextType;\n const {\n setFormIsSaving = undefined,\n setFormHasChanges = undefined,\n setCurrentId = undefined,\n setFormIsLoading = undefined,\n setAttachments = undefined,\n title = undefined,\n setTitle = undefined,\n } = (rootForm ? actionViewContext : {}) || {};\n\n const contentRootContext = useContext(\n ContentRootContext\n ) as ContentRootContextType;\n const { processAction, globalValues } = contentRootContext || {};\n\n useImperativeHandle(ref, () => ({\n submitForm,\n getFields,\n getValues,\n getPlainValues,\n getContext,\n fetchValues,\n cancelUnsavedChanges,\n clearAndReload: () => {\n createdId.current = undefined;\n setFormOoui(undefined);\n fetchData();\n },\n }));\n\n useEffect(() => {\n setError(undefined);\n\n if (!model && !formViewProps) {\n return;\n }\n\n if (!visible) {\n createdId.current = undefined;\n setFormOoui(undefined);\n return;\n }\n\n // In the case we set the id to undefined for creating a new item\n if (\n (id === undefined && fields) ||\n (id !== undefined && fields && id < 0)\n ) {\n createdId.current = undefined;\n setFormOoui(undefined);\n }\n\n fetchData();\n }, [id, model, valuesProps, formViewProps, visible]);\n\n useEffect(() => {\n if (defaultGetCalled) {\n checkFieldsChanges({\n elementHasLostFocus: true,\n });\n setDefaultGetCalled(false);\n }\n }, [defaultGetCalled]);\n\n const onSubmitSucceed = (\n id?: number,\n values?: any,\n formValues?: any,\n x2manyPendingLink?: boolean\n ) => {\n setFormHasChanges?.(false);\n setFormIsSaving?.(false);\n propsOnSubmitSucceed?.(id, values, formValues, x2manyPendingLink);\n setCurrentId?.(id);\n };\n\n const onCancel = () => {\n setFormIsSaving?.(false);\n propsOnCancel?.();\n };\n\n const onSubmitError = (error: any) => {\n setFormIsSaving?.(false);\n propsOnSubmitError?.(error);\n };\n\n function getCurrentId() {\n return id || createdId.current;\n }\n\n function getFields() {\n return fields;\n }\n\n function getValues() {\n const values = {\n ...getCurrentValues(fields),\n ...getAdditionalValues(),\n };\n\n for (const key in values) {\n if (values[key] === undefined) {\n delete values[key];\n }\n }\n\n return values;\n }\n\n function getPlainValues() {\n const values: any = getValues();\n const fields: any = getFields();\n let reformattedValues: { [key: string]: any } = {};\n\n Object.keys(values).forEach((key) => {\n const value = values[key];\n\n if (\n fields[key] &&\n fields[key].type === \"many2one\" &&\n value &&\n Array.isArray(value) &&\n value.length === 2\n ) {\n reformattedValues[key] = value[0];\n } else if (\n fields[key] &&\n (fields[key].type === \"one2many\" || fields[key].type === \"many2many\") &&\n value &&\n value.items\n ) {\n reformattedValues[key] = value.items\n .filter((item: One2manyItem) => item.operation !== \"pendingRemove\")\n .map((val: any) => val.id);\n } else {\n reformattedValues[key] = value;\n }\n });\n\n return reformattedValues;\n }\n\n function getFormValues() {\n const values = {\n ...getCurrentValues(fields),\n };\n\n for (const key in values) {\n if (values[key] === undefined) {\n delete values[key];\n }\n }\n\n return values;\n }\n\n function getContext() {\n return { ...parentContext, ...formOoui?.context };\n }\n\n function getActiveIdsContext() {\n const currentId = getCurrentId()!;\n\n if (!currentId) {\n return {};\n }\n return { active_id: getCurrentId()!, active_ids: [getCurrentId()!] };\n }\n\n function getAdditionalValues() {\n return {\n id: getCurrentId()!,\n active_id: getCurrentId()!,\n active_ids: [getCurrentId()!],\n parent_id: parentId,\n ...globalValues,\n };\n }\n\n const getDefaultValues = async (fields: any) => {\n const formContext = getCurrentId() ? formOoui?.context : {};\n return await ConnectionProvider.getHandler().defaultGet({\n model,\n fields,\n context: { ...parentContext, ...formContext },\n extraValues: defaultValues,\n });\n };\n\n const formHasChanges = () => {\n return (\n Object.keys(\n getTouchedValues({\n source: originalFormValues.current,\n target: getCurrentValues(fields),\n fields,\n })\n ).length !== 0\n );\n };\n\n const getCurrentValues = (fields: any) => {\n const currentValues = antForm.getFieldsValue(true);\n return processValues(currentValues, fields);\n };\n\n const setFieldValue = (field: string, value?: string) => {\n assignNewValuesToForm({\n values: {\n ...processValues(antForm.getFieldsValue(true), fields),\n [field]: value,\n },\n fields,\n reset: false,\n });\n };\n\n const getFieldValue = (field: string) => {\n const values = antForm.getFieldsValue(true);\n return values[field];\n };\n\n async function checkIfFormHasErrors() {\n try {\n await antForm.validateFields();\n return false;\n } catch (verror) {\n message.error(t(\"fillRequiredFields\"));\n return true;\n }\n }\n const fetchData = async () => {\n setError(undefined);\n setFormIsLoading?.(true);\n\n let view;\n\n try {\n if (formViewProps) {\n view = { arch: formViewProps.arch, fields: formViewProps.fields };\n } else {\n view = await getFormView();\n }\n\n const { fields, arch } = view;\n setFields(fields);\n setArch(arch);\n\n await fetchValues({\n fields,\n arch,\n });\n } catch (err) {\n setError(err?.message ? err.message + err.stack : err);\n setFormIsLoading?.(false);\n // setLoading(false);\n }\n };\n\n type FetchValuesOptions = {\n fields?: any;\n arch?: string;\n forceRefresh?: boolean;\n };\n\n const fetchValues = async (options?: FetchValuesOptions) => {\n let values;\n let _fields;\n let _arch;\n let hasDefaultGetCalled;\n\n setFormIsLoading?.(true);\n setError(undefined);\n\n if (options?.fields) {\n _fields = options.fields;\n _arch = options.arch;\n } else {\n _fields = fields;\n _arch = arch;\n }\n\n if (valuesProps && options?.forceRefresh !== true) {\n values = valuesProps;\n } else {\n ({ values, defaultGetCalled: hasDefaultGetCalled } =\n await fetchValuesFromApi({\n fields: _fields,\n arch: _arch!,\n }));\n }\n\n if (actionDomain) {\n values = { ...getValuesForDomain(actionDomain), ...values };\n }\n\n originalFormValues.current = processValues(values, _fields);\n\n assignNewValuesToForm({\n values,\n fields: _fields,\n reset: true,\n isDefaultGet: hasDefaultGetCalled,\n });\n parseForm({ fields: _fields, arch: _arch!, values });\n setFormIsLoading?.(false);\n setFormHasChanges?.(false);\n\n if (hasDefaultGetCalled) {\n setDefaultGetCalled(true);\n }\n };\n\n const cancelUnsavedChanges = async () => {\n return new Promise(async (resolve) => {\n if (formHasChanges()) {\n showUnsavedChangesDialog({\n lang,\n onOk: () => {\n onCancel?.();\n resolve(true);\n },\n onCancel: () => {\n resolve(false);\n },\n });\n } else {\n onCancel?.();\n resolve(true);\n }\n });\n };\n\n const getFormView = async (): Promise<FormView> => {\n if (getDataFromAction) {\n const action =\n await ConnectionProvider.getHandler().getActionStringForModel(model);\n const viewsForAction =\n await ConnectionProvider.getHandler().getViewsForAction({\n action,\n context: parentContext,\n });\n return viewsForAction.views.get(\"form\");\n }\n\n return (await ConnectionProvider.getHandler().getView({\n model,\n type: \"form\",\n context: parentContext,\n })) as FormView;\n };\n\n const assignNewValuesToForm = ({\n values: newValues,\n fields,\n reset,\n isDefaultGet = false,\n }: {\n values: any;\n fields: any;\n reset: boolean;\n isDefaultGet?: boolean;\n }) => {\n const currentValues = reset ? {} : antForm.getFieldsValue(true);\n const mergedValues = { ...currentValues, ...newValues };\n const valuesProcessed = processValues(mergedValues, fields);\n const fieldsToUpdate = Object.keys(fields).map((fieldName) => {\n const fieldValue =\n valuesProcessed[fieldName] !== undefined\n ? valuesProcessed[fieldName]\n : undefined;\n return {\n name: fieldName,\n touched: false,\n value: fieldValue,\n };\n });\n\n if (!isDefaultGet) {\n lastAssignedValues.current = valuesProcessed;\n }\n\n antForm.setFields(fieldsToUpdate);\n };\n\n const fetchValuesFromApi = async ({\n fields,\n arch,\n }: {\n fields: any;\n arch: string;\n }) => {\n let values = {};\n let defaultGetCalled = false;\n\n if (getCurrentId()!) {\n values = (\n await ConnectionProvider.getHandler().readObjects({\n model,\n ids: [getCurrentId()!],\n fields,\n context: parentContext,\n })\n )[0];\n\n const results = await ConnectionProvider.getHandler().search({\n params: [\n [\"res_model\", \"=\", model],\n [\"res_id\", \"=\", getCurrentId()!],\n ],\n fields: [\"id\", \"name\"],\n context: getContext(),\n model: \"ir.attachment\",\n });\n setAttachments?.(results);\n } else {\n setAttachments?.([]);\n values = await getDefaultValues(fields);\n defaultGetCalled = true;\n }\n return { values, defaultGetCalled };\n };\n\n const submitApi = async (options?: { callOnSubmitSucceed?: boolean }) => {\n const { callOnSubmitSucceed = true } = options || {};\n\n if (getCurrentId()) {\n const touchedValues = getTouchedValues({\n source: originalFormValues.current,\n target: getCurrentValues(fields),\n fields,\n });\n\n await ConnectionProvider.getHandler().update({\n model,\n id: getCurrentId()!,\n values: { ...touchedValues, ...forcedValues },\n fields,\n context: {\n ...parentContext,\n ...formOoui?.context,\n },\n });\n originalFormValues.current = getCurrentValues(fields);\n } else {\n const currentValues = getCurrentValues(fields);\n\n const newId = await ConnectionProvider.getHandler().create({\n model,\n values: { ...currentValues, ...forcedValues },\n fields,\n context: {\n ...parentContext,\n ...formOoui?.context,\n },\n });\n createdId.current = newId;\n originalFormValues.current = currentValues;\n }\n\n if (postSaveAction) {\n await postSaveAction([getCurrentId()]);\n }\n\n if (!insideButtonModal && callOnSubmitSucceed) {\n onSubmitSucceed?.(getCurrentId(), getValues(), getFormValues());\n }\n };\n\n const submitValues = async (options?: { callOnSubmitSucceed?: boolean }) => {\n const { callOnSubmitSucceed = true } = options || {};\n\n if (!insideButtonModal && callOnSubmitSucceed) {\n onSubmitSucceed?.(getCurrentId(), getValues(), getFormValues());\n }\n };\n\n const submitForm = async (options?: { callOnSubmitSucceed?: boolean }) => {\n let submitSucceed = false;\n const { callOnSubmitSucceed = true } = options || {};\n formSubmitting.current = true;\n\n setError(undefined);\n\n if (\n x2manyPendingLink.current &&\n !formHasChanges() &&\n getCurrentId()! &&\n callOnSubmitSucceed\n ) {\n formSubmitting.current = false;\n setFormHasChanges?.(false);\n onSubmitSucceed?.(\n getCurrentId(),\n getValues(),\n getFormValues(),\n x2manyPendingLink.current\n );\n x2manyPendingLink.current = false;\n const currentId = getCurrentId()!;\n\n if (mustClearAfterSave) {\n createdId.current = undefined;\n assignNewValuesToForm({ values: {}, fields, reset: true });\n }\n\n return { succeed: true, id: currentId };\n }\n\n if (!formHasChanges() && getCurrentId()! && callOnSubmitSucceed) {\n formSubmitting.current = false;\n setFormHasChanges?.(false);\n onCancel?.();\n return { succeed: true, id: getCurrentId()! };\n }\n\n if (await checkIfFormHasErrors()) {\n formSubmitting.current = false;\n formErrorsDialog(lang);\n return { succeed: false, id: getCurrentId()! };\n }\n\n setIsSubmitting(true);\n setFormIsSaving?.(true);\n\n try {\n if (submitMode === \"api\") {\n await submitApi(options);\n } else {\n await submitValues(options);\n }\n\n if (mustClearAfterSave) {\n createdId.current = undefined;\n assignNewValuesToForm({ values: {}, fields, reset: true });\n }\n\n await fetchValues({ forceRefresh: true });\n submitSucceed = true;\n message.success(t(\"savedRegisters\"));\n } catch (err) {\n formSubmitting.current = false;\n setIsSubmitting(false);\n setFormIsSaving?.(false);\n onSubmitError?.(err);\n message.error(t(\"errorWhileSavingForm\"));\n setError(err?.message ? err.message : err);\n } finally {\n formSubmitting.current = false;\n setFormIsSaving?.(false);\n setIsSubmitting(false);\n }\n\n return { succeed: submitSucceed, id: getCurrentId()! };\n };\n\n const parseForm = ({\n fields,\n arch,\n values,\n operationInProgress = false,\n }: {\n arch: string;\n fields: any;\n values: any;\n operationInProgress?: boolean;\n }) => {\n const ooui = new FormOoui(fields);\n // TODO: Here we must inject `values` to the ooui parser in order to evaluate arch+values and get the new form container\n ooui.parse(arch, {\n readOnly: readOnly || operationInProgress,\n values: convertToPlain2ManyValues(\n {\n ...values,\n ...getAdditionalValues(),\n },\n fields\n ),\n });\n setFormOoui(ooui);\n\n if (ooui.string && ooui.string !== title) {\n setTitle?.(ooui.string);\n }\n\n if (formModalContext && ooui.string)\n formModalContext.setTitle?.(ooui.string);\n };\n\n const checkFieldsChanges = async ({\n elementHasLostFocus = false,\n }: {\n elementHasLostFocus?: boolean;\n }) => {\n if (formSubmitting.current) return;\n\n const touchedValues = getTouchedValues({\n source: lastAssignedValues.current,\n target: getCurrentValues(fields),\n fields,\n });\n\n const changedFields = Object.keys(touchedValues);\n\n if (changedFields.length !== 0) {\n // We check if there are any field of type text, email, url or char inside the changed values\n // in order to ignore the call, because it will fire when element lost focus\n if (\n checkFieldsType({\n changedFields,\n formOoui: formOoui!,\n types: [\n \"text\",\n \"codeeditor\",\n \"email\",\n \"url\",\n \"char\",\n \"float\",\n \"float_time\",\n \"integer\",\n \"many2one\",\n ],\n }) &&\n elementHasLostFocus !== true\n ) {\n return;\n } else {\n const values = processValues(antForm.getFieldsValue(true), fields);\n lastAssignedValues.current = values;\n\n onFieldsChange?.(values);\n setFormHasChanges?.(true);\n\n evaluateChanges(changedFields);\n }\n }\n };\n\n const debouncedCheckFieldsChanges = debounce(checkFieldsChanges, 100);\n\n const evaluateChanges = async (changedFields: any) => {\n try {\n for (let i = 0; i < changedFields.length; i += 1) {\n const changedField = changedFields[i];\n await processFieldOnChange(changedField);\n }\n } catch (err) {\n showErrorDialog(err);\n }\n };\n\n const processFieldOnChange = async (fieldName: string) => {\n const onChangeFieldAction = formOoui?.onChangeFields[fieldName];\n\n if (!onChangeFieldAction) {\n parseForm({\n fields,\n arch: arch!,\n values: getCurrentValues(fields),\n });\n return;\n }\n\n const payload = getOnChangePayload({\n values: {\n ...getCurrentValues(fields),\n context: {\n ...parentContext,\n ...formOoui?.context,\n },\n },\n parentValues: getParentPlainValues?.(),\n onChangeFieldActionArgs: onChangeFieldAction.args,\n });\n\n const response = await ConnectionProvider.getHandler().executeOnChange({\n model,\n action: onChangeFieldAction.method,\n ids: getCurrentId()! ? [getCurrentId()!] : [],\n payload,\n fields,\n });\n\n if (response.value) {\n const processedValues = {\n ...getCurrentValues(fields),\n ...response.value,\n };\n parseForm({ fields, arch: arch!, values: processedValues });\n assignNewValuesToForm({\n values: processedValues,\n fields: fields,\n reset: false,\n });\n }\n\n if (\n response.warning &&\n response.warning.title &&\n response.warning.message &&\n !warningIsShown.current\n ) {\n const { title, message } = response.warning;\n warningIsShown.current = true;\n showWarningDialog(title, message, () => {\n warningIsShown.current = false;\n });\n }\n\n if (response.domain && Object.keys(response.domain).length > 0) {\n const proccessedFields = mergeFieldsDomain({\n fieldsDomain: response.domain,\n fields,\n });\n\n parseForm({\n fields: proccessedFields,\n arch: arch!,\n values: getCurrentValues(proccessedFields),\n });\n setFields(proccessedFields);\n }\n };\n\n async function runObjectButton({\n action,\n context,\n }: {\n action: string;\n context: any;\n }) {\n const response = await ConnectionProvider.getHandler().execute({\n model,\n action,\n payload: [getCurrentId()!],\n context: {\n ...formOoui?.context,\n ...parentContext,\n ...context,\n },\n });\n\n if (\n typeof response === \"object\" &&\n response !== null &&\n Object.keys(response).length === 0 &&\n insideButtonModal\n ) {\n onSubmitSucceed?.(getCurrentId(), getValues(), getFormValues());\n } else if (\n response.type &&\n response.type === \"ir.actions.act_window_close\"\n ) {\n onSubmitSucceed?.(getCurrentId(), getValues(), getFormValues());\n } else if (response.type) {\n let responseContext = {};\n\n if (response.context) {\n responseContext = parseContext({\n context: response.context,\n fields,\n values: getValues(),\n });\n }\n\n await runAction({\n actionData: response,\n context: { ...context, ...responseContext },\n });\n } else {\n await fetchValues({ forceRefresh: true });\n }\n }\n\n async function runWorkflowButton({ action }: { action: string }) {\n const response = await ConnectionProvider.getHandler().executeWorkflow({\n model,\n action,\n payload: getCurrentId()!,\n });\n\n if (response.type && response.type === \"ir.actions.act_window_close\") {\n onSubmitSucceed?.(getCurrentId(), getValues(), getFormValues());\n } else {\n await fetchValues({ forceRefresh: true });\n }\n }\n\n async function runActionButton({\n action,\n context,\n }: {\n action: string;\n context: any;\n }) {\n const actionData = (\n await ConnectionProvider.getHandler().readObjects({\n model: \"ir.actions.actions\",\n ids: [parseInt(action)],\n context: parentContext,\n })\n )[0];\n\n await runAction({ actionData, context });\n }\n\n async function runAction({\n actionData,\n context,\n }: {\n actionData: any;\n context: any;\n }) {\n const { closeParent } =\n (await processAction?.({\n actionData,\n fields,\n values: getValues(),\n context: {\n ...parentContext,\n ...formOoui?.context,\n ...context,\n },\n onRefreshParentValues: () => {\n fetchValues({ forceRefresh: true });\n },\n })) || {};\n\n if (!rootForm && closeParent) {\n onSubmitSucceed?.(getCurrentId(), getValues(), getFormValues());\n }\n }\n\n function elementHasLostFocus() {\n checkFieldsChanges({ elementHasLostFocus: true });\n }\n\n function updateOperationInProgress(value: boolean) {\n parseForm({\n fields,\n arch: arch!,\n values: getCurrentValues(fields),\n operationInProgress: value,\n });\n }\n\n async function executeButtonAction({\n type,\n action,\n context,\n }: {\n type: string;\n action: string;\n context?: any;\n }) {\n // If the type of the button it's a cancel, we just close our form\n if (type === \"cancel\") {\n onCancel?.();\n return;\n }\n\n // We check for required fields\n if (await checkIfFormHasErrors()) {\n formErrorsDialog(lang);\n return;\n }\n\n let mustBlockButtons = false;\n\n try {\n if (formHasChanges() || getCurrentId() === undefined) {\n mustBlockButtons = true;\n updateOperationInProgress(true);\n if (submitMode === \"2many\") {\n await submitApi({ callOnSubmitSucceed: false });\n x2manyPendingLink.current = true;\n } else {\n await submitForm({ callOnSubmitSucceed: false });\n }\n }\n\n const additionalContext = x2manyPendingLink.current\n ? getActiveIdsContext()\n : {};\n\n const updatedContext = { ...context, ...additionalContext };\n\n if (type === \"object\") {\n await runObjectButton({ action, context: updatedContext });\n } else if (type === \"workflow\") {\n await runWorkflowButton({ action });\n } else if (type === \"action\") {\n await runActionButton({ action, context: updatedContext });\n }\n mustBlockButtons && updateOperationInProgress(false);\n } catch (err) {\n mustBlockButtons && updateOperationInProgress(false);\n showErrorDialog(err);\n }\n }\n\n const content = () => {\n if (!formOoui && !error) {\n return <Spin />;\n }\n\n if (!model && !formViewProps) {\n return null;\n }\n\n if (!visible) {\n return null;\n }\n\n return (\n <>\n <FormProvider\n getValues={getValues}\n getPlainValues={getPlainValues}\n getFields={getFields}\n domain={actionDomain}\n activeId={id}\n activeModel={model}\n setFieldValue={setFieldValue}\n getFieldValue={getFieldValue}\n executeButtonAction={executeButtonAction}\n getContext={getContext}\n submitForm={submitForm}\n fetchValues={fetchValues}\n formHasChanges={formHasChanges}\n elementHasLostFocus={elementHasLostFocus}\n >\n <AntForm\n form={antForm}\n onFieldsChange={() => {\n debouncedCheckFieldsChanges({ elementHasLostFocus: false });\n }}\n component={false}\n >\n {formOoui && (\n <Container\n container={formOoui.container}\n responsiveBehaviour={responsiveBehaviour}\n />\n )}\n </AntForm>\n </FormProvider>\n </>\n );\n };\n\n const footer = () => {\n return (\n <>\n <Divider />\n <Row justify=\"end\">\n <Space>\n <Button\n icon={<CloseOutlined />}\n disabled={isSubmitting}\n onClick={async () => {\n await cancelUnsavedChanges();\n }}\n >\n Cancel\n </Button>\n <Button\n disabled={isSubmitting || readOnly}\n loading={isSubmitting}\n icon={<CheckOutlined />}\n onClick={async () => {\n await submitForm();\n }}\n type=\"primary\"\n >\n OK\n </Button>\n </Space>\n </Row>\n </>\n );\n };\n\n if (!visible) {\n return null;\n }\n\n return (\n <Measure\n bounds\n onResize={(contentRect) => {\n setContainerWidth(contentRect.bounds?.width!);\n }}\n >\n {({ measureRef }) => (\n <div className=\"pb-2\" ref={measureRef}>\n {error && <ErrorAlert className=\"mt-5 mb-10\" error={error} />}\n {content()}\n {showFooter && footer()}\n </div>\n )}\n </Measure>\n );\n}\n\nexport default forwardRef(Form);\n","import React, { useEffect, useState } from \"react\";\nimport { Button, Col, Modal, Row, Tooltip } from \"antd\";\nimport Form, { FormProps } from \"@/widgets/views/Form\";\nimport useWindowDimensions from \"@/hooks/useWindowDimensions\";\nimport FormModalProvider from \"@/context/FormModalContext\";\nimport { StarOutlined, StarFilled } from \"@ant-design/icons\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\n\ntype FormModalProps = FormProps & {\n visible: boolean;\n title?: string;\n buttonModal?: boolean;\n isMenuAction?: boolean;\n actionData?: any;\n};\n\nexport const FormModal = (props: FormModalProps) => {\n const {\n visible,\n id,\n title,\n buttonModal = false,\n onCancel,\n isMenuAction = false,\n actionData,\n ...rest\n } = props;\n\n const { modalWidth } = useWindowDimensions();\n const [formTitle, setFormTitle] = useState<string>(title!);\n const [isFavourite, setIsFavourite] = useState(false);\n const [currentShortcutId, setCurrentShortcutId] = useState<number>();\n\n useEffect(() => {\n if (isMenuAction) {\n checkFavourite();\n }\n }, [actionData, isMenuAction]);\n\n async function checkFavourite() {\n const { action_id, res_id, action_type, view_id } = actionData;\n\n const result = await ConnectionProvider.getHandler().isShortcutFavorite({\n action_id,\n action_type,\n view_id,\n res_id: res_id || false,\n });\n\n setIsFavourite(result !== false);\n\n if (result !== false) {\n setCurrentShortcutId(result as number);\n }\n }\n\n async function toggleFavourite() {\n if (isFavourite && currentShortcutId) {\n await ConnectionProvider.getHandler().removeFavourite({\n shortcut_id: currentShortcutId,\n });\n } else {\n const { action_id, res_id, action_type, view_id } = actionData;\n\n await ConnectionProvider.getHandler().addFavourite({\n action_id,\n action_type,\n view_id,\n res_id: res_id || false,\n });\n }\n\n setIsFavourite(!isFavourite);\n }\n\n function header() {\n return (\n <Row align=\"middle\">\n <Col>\n <Button\n type={isFavourite ? \"primary\" : \"default\"}\n icon={\n isFavourite ? (\n <StarFilled style={{ color: \"white\" }} />\n ) : (\n <StarOutlined />\n )\n }\n style={{ width: 30 }}\n onClick={toggleFavourite}\n ></Button>\n </Col>\n <Col style={{ paddingLeft: 10 }}>{formTitle}</Col>\n </Row>\n );\n }\n\n const contentWidth = modalWidth * 0.95;\n return (\n <FormModalProvider setTitle={setFormTitle}>\n <Modal\n title={isMenuAction ? header() : formTitle}\n centered\n width={modalWidth}\n open={visible}\n footer={null}\n destroyOnClose\n onCancel={onCancel}\n maskClosable={false}\n >\n <Form\n id={id}\n showFooter={true}\n insideButtonModal={buttonModal}\n onCancel={onCancel}\n parentWidth={contentWidth}\n {...rest}\n />\n </Modal>\n </FormModalProvider>\n );\n};\n","import { DatePicker } from \"antd\";\n\nimport React from \"react\";\nimport Field from \"@/common/Field\";\nimport { WidgetProps } from \"@/types\";\n\nexport const DateRangePicker = (props: WidgetProps) => {\n return (\n <Field {...props} layout={\"vertical\"}>\n <DatePicker.RangePicker\n allowEmpty={[true, true]}\n format={\"DD/MM/YYYY\"}\n ></DatePicker.RangePicker>\n </Field>\n );\n};\n","import { DatePicker, TimePicker } from \"antd\";\n\nimport React from \"react\";\nimport Field from \"@/common/Field\";\nimport { Field as FieldOoui, Label as LabelOoui } from \"@gisce/ooui\";\nimport { WidgetProps } from \"@/types\";\nimport Label from \"@/widgets/base/Label\";\n\nimport { Row, Col } from \"antd\";\n\nexport const DateTimeRangePicker = (props: WidgetProps) => {\n const { ooui, showLabel = false } = props;\n const { label, id } = ooui;\n\n const fields = [\n new FieldOoui({\n name: id + \"#date\",\n label: \"\",\n }),\n new FieldOoui({\n name: id + \"#time\",\n label: \"\",\n }),\n ];\n\n return (\n <>\n {showLabel && (\n <Label\n ooui={\n new LabelOoui({\n name: id + \"_label\",\n string: label,\n help: ooui.tooltip,\n fieldForLabel: id,\n })\n }\n align={\"left\"}\n />\n )}\n <Row align={\"bottom\"} className=\"p-0\">\n <Col className=\"mr-2\">\n <Field {...props} ooui={fields[0]} showLabel={false}>\n <DatePicker.RangePicker\n className=\"w-60\"\n allowEmpty={[true, true]}\n format={\"DD/MM/YYYY\"}\n ></DatePicker.RangePicker>\n </Field>\n </Col>\n <Col>\n <Field {...props} ooui={fields[1]} showLabel={false}>\n <TimePicker.RangePicker\n className=\"w-60\"\n allowEmpty={[true, true]}\n format={\"HH:mm\"}\n ></TimePicker.RangePicker>\n </Field>\n </Col>\n </Row>\n </>\n );\n};\n","import React, { useContext } from \"react\";\nimport { InputNumber, theme } from \"antd\";\nimport Field from \"@/common/Field\";\nimport { Float as FloatOoui } from \"@gisce/ooui\";\nimport { WidgetProps } from \"@/types\";\nconst { useToken } = theme;\n\nimport { FormContext, FormContextType } from \"@/context/FormContext\";\n\nexport const Float = (props: WidgetProps) => {\n const { ooui } = props;\n const { id, decimalDigits, readOnly, required } = ooui as FloatOoui;\n const { token } = useToken();\n\n const requiredStyle =\n required && !readOnly\n ? { backgroundColor: token.colorPrimaryBg }\n : undefined;\n const formContext = useContext(FormContext) as FormContextType;\n const { elementHasLostFocus } = formContext || {};\n\n return (\n <Field required={required} type={\"number\"} {...props}>\n <InputNumber\n disabled={readOnly}\n className={\"w-full\"}\n style={requiredStyle}\n id={id}\n precision={decimalDigits}\n formatter={(value) => {\n return `${value}`.replace(/[^0-9\\.\\-]+/g, \"\");\n }}\n defaultValue={0}\n decimalSeparator={\".\"}\n onBlur={elementHasLostFocus}\n />\n </Field>\n );\n};\n","import React, { useContext } from \"react\";\nimport { InputNumber, theme } from \"antd\";\nimport Field from \"@/common/Field\";\nimport { WidgetProps } from \"@/types\";\nimport { FormContext, FormContextType } from \"@/context/FormContext\";\nconst { useToken } = theme;\n\ntype IntegerProps = WidgetProps & {\n onChange?: (newValue: number) => void;\n};\n\nexport const Integer = (props: IntegerProps) => {\n const { ooui, onChange } = props;\n const { id, readOnly, required } = ooui;\n const { token } = useToken();\n const requiredStyle =\n required && !readOnly\n ? { backgroundColor: token.colorPrimaryBg }\n : undefined;\n const formContext = useContext(FormContext) as FormContextType;\n const { elementHasLostFocus } = formContext || {};\n\n return (\n <Field required={required} type={\"number\"} {...props}>\n <InputNumber\n id={id}\n className={\"w-full \"}\n disabled={readOnly}\n formatter={(value) => {\n // Check if value is not undefined and is a valid number\n if (value === undefined) {\n return \"\";\n }\n\n if (typeof value === \"string\" && !isNaN(parseFloat(value))) {\n let truncatedValue = Math.trunc(parseFloat(value));\n return `${truncatedValue}`.replace(/[^0-9\\-]+/g, \"\");\n } else if (typeof value === \"number\") {\n let truncatedValue = Math.trunc(value);\n return `${truncatedValue}`.replace(/[^0-9\\-]+/g, \"\");\n }\n\n return \"\";\n }}\n onChange={(newValue: any) => {\n const newNumber = newValue as number;\n onChange?.(newNumber);\n }}\n defaultValue={0}\n onBlur={elementHasLostFocus}\n precision={0}\n style={requiredStyle}\n />\n </Field>\n );\n};\n","import React from \"react\";\nimport { Row, Col } from \"antd\";\nimport { Float } from \"@/widgets/base/Float\";\nimport { Integer } from \"@/widgets/base/Integer\";\nimport { Integer as IntegerOoui, Label as LabelOoui } from \"@gisce/ooui\";\nimport Label from \"@/widgets/base/Label\";\nimport { WidgetProps } from \"@/types\";\n\ntype Props = {\n ooui: any;\n};\n\nexport function PairFields(props: WidgetProps): React.ReactElement {\n const { ooui, showLabel } = props;\n const { id, label, tooltip } = ooui;\n const Widget = ooui instanceof IntegerOoui ? Integer : Float;\n\n const getWidget = (suffix: string) => {\n return (\n <Widget\n ooui={{\n ...(ooui as any),\n id: id + suffix,\n label: \"\",\n tooltip: undefined,\n }}\n layout=\"vertical\"\n />\n );\n };\n\n return (\n <>\n {showLabel && (\n <Label\n ooui={\n new LabelOoui({\n name: id + \"_label\",\n string: label,\n help: tooltip,\n fieldForLabel: id,\n })\n }\n align={\"left\"}\n />\n )}\n <Row align={\"bottom\"} className=\"mt-0\" wrap={false}>\n <Col>{getWidget(\"#from\")}</Col>\n <Col className=\"pb-1\">\n <span className=\"pl-2 pr-2 h-full\"> - </span>\n </Col>\n <Col>{getWidget(\"#to\")}</Col>\n </Row>\n </>\n );\n}\n","import React from \"react\";\nimport { Select } from \"antd\";\nimport styled from \"styled-components\";\n\nimport Field from \"@/common/Field\";\nimport { Selection as SelectionOoui } from \"@gisce/ooui\";\nimport { WidgetProps } from \"@/types\";\nimport { theme } from \"antd\";\n\nconst { defaultAlgorithm, defaultSeed } = theme;\n\nconst mapToken = defaultAlgorithm(defaultSeed);\n\nconst { Option } = Select;\n\nexport const MultiSelection = (props: WidgetProps) => {\n const { ooui } = props;\n const { required } = ooui;\n\n return (\n <Field required={required} type={\"any\"} {...props}>\n <MultiSelectionInput {...props} />\n </Field>\n );\n};\n\ntype SelectionInputProps = WidgetProps & {\n onChange?: (value: any) => void;\n value?: string[];\n};\n\nexport const MultiSelectionInput = (props: SelectionInputProps) => {\n const { ooui, onChange, value } = props;\n const { selectionValues, readOnly, required } = ooui as SelectionOoui;\n\n const values = Array.from(selectionValues.entries());\n\n const options =\n values &&\n values.length &&\n values\n .filter((optionValueKeyPair) => {\n const [optionKey] = optionValueKeyPair;\n if (!value) {\n return true;\n }\n return !value.includes(optionKey);\n })\n .map((entry: string[]) => {\n const [key, value] = entry;\n return (\n <Option key={key} value={value}>\n {value}\n </Option>\n );\n });\n\n const CustomSelect: any = required && !readOnly ? RequiredSelect : Select;\n\n function handleChange(changedValues: string[]) {\n const keysForChangedValues = changedValues.map((changedValue) => {\n const entry = values.find(([key, value]) => changedValue === value);\n return entry && entry[0];\n });\n\n if (keysForChangedValues.length === 0) {\n onChange?.(undefined);\n return;\n }\n\n onChange?.(keysForChangedValues);\n }\n\n return (\n <CustomSelect\n disabled={readOnly}\n onChange={handleChange}\n value={value?.map((key) => selectionValues.get(key))}\n mode=\"multiple\"\n showArrow={true}\n >\n {options}\n </CustomSelect>\n );\n};\n\nconst RequiredSelect = styled(Select)`\n &.ant-select:not(.ant-select-customize-input) .ant-select-selector {\n background-color: ${mapToken.colorPrimaryBg};\n }\n`;\n","import React, { useContext } from \"react\";\n\nimport { Char } from \"@/widgets/base/Char\";\nimport { Selection } from \"@/widgets/base/Selection\";\nimport { DateRangePicker } from \"./DateRangePicker\";\nimport { DateTimeRangePicker } from \"./DateTimeRangePicker\";\nimport { PairFields } from \"./PairFields\";\n\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\nimport { Field, SearchFieldTypes, Selection as SelectionOoui } from \"@gisce/ooui\";\nimport { MultiSelection } from \"@/widgets/base/MultiSelection\";\n\ntype Props = {\n field: Field;\n};\n\nexport function SearchField(props: Props) {\n const { field } = props;\n field.readOnly = false;\n field.required = false;\n\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n const widgetType = field.type;\n\n switch (widgetType) {\n case SearchFieldTypes.boolean: {\n const ooui = new SelectionOoui({\n name: field._id,\n string: field.label,\n selection: [\n [\"true\", t(\"true\")],\n [\"false\", t(\"false\")],\n ],\n });\n\n return <Selection layout=\"vertical\" ooui={ooui} showLabel />;\n }\n case SearchFieldTypes.float:\n case SearchFieldTypes.progressbar:\n case SearchFieldTypes.float_time:\n case SearchFieldTypes.integer: {\n return <PairFields ooui={field} showLabel />;\n }\n case SearchFieldTypes.date: {\n return <DateRangePicker ooui={field} layout=\"vertical\" showLabel />;\n }\n case SearchFieldTypes.datetime: {\n return <DateTimeRangePicker ooui={field} layout=\"vertical\" showLabel />;\n }\n case SearchFieldTypes.selection: {\n return <MultiSelection layout=\"vertical\" ooui={field} showLabel />;\n }\n default: {\n return <Char ooui={field} layout=\"vertical\" showLabel isSearchField />;\n }\n }\n}\n","import React, { useContext } from \"react\";\n\nimport { Row, Col, Button } from \"antd\";\nimport {\n DownOutlined,\n UpOutlined,\n SearchOutlined,\n ClearOutlined,\n} from \"@ant-design/icons\";\n\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\ntype Props = {\n advancedFilter: boolean;\n isSearching: boolean;\n onAdvancedFilterToggle: () => void;\n onClear: () => void;\n};\n\nexport function SearchBottomBar(props: Props): React.ReactElement {\n const {\n onAdvancedFilterToggle,\n advancedFilter,\n onClear,\n isSearching,\n } = props;\n\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n return (\n <Row>\n <Col span={12} className=\"text-left pt-4 pb-2 pl-2\">\n <a className=\"text-xs\" onClick={onAdvancedFilterToggle}>\n {advancedFilter ? (\n <UpOutlined className=\"pr-1\" />\n ) : (\n <DownOutlined className=\"pr-1\" />\n )}\n {advancedFilter ? t(\"simple_search\") : t(\"advanced_search\")}\n </a>\n </Col>\n <Col span={12} className=\"text-right pb-2\">\n <Button className=\"mr-5\" icon={<ClearOutlined />} onClick={onClear}>\n {t(\"clear\")}\n </Button>\n <Button\n icon={<SearchOutlined />}\n loading={isSearching}\n className=\"mr-2\"\n type=\"primary\"\n htmlType=\"submit\"\n >\n {t(\"search\")}\n </Button>\n </Col>\n </Row>\n );\n}\n","import React, { useContext } from \"react\";\n\nimport { Integer } from \"@/widgets/base/Integer\";\nimport { Row, Space } from \"antd\";\nimport { Integer as IntegerOoui } from \"@gisce/ooui\";\n\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\ntype SearchParamsProps = {\n onLimitChange?: (limit: number) => void;\n}\n\nexport function SearchParams(props: SearchParamsProps): React.ReactElement {\n const { onLimitChange } = props;\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n const limitOoui = new IntegerOoui({ name: \"limit\" });\n const offsetOoui = new IntegerOoui({ name: \"offset\" });\n return (\n <div className=\"pl-2 pt-2\">\n <Row key={\"count_params\"}>{t(\"parameters\")}</Row>\n <Space align=\"center\">\n {t(\"limit\") + \" :\"}\n <Integer ooui={limitOoui} onChange={(newValue: number) => {\n onLimitChange?.(newValue);\n }}/>\n {t(\"first\") + \" :\"}\n <Integer ooui={offsetOoui} />\n </Space>\n </div>\n );\n}\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { Form, Row, Col, Alert, theme } from \"antd\";\nimport useDeepCompareEffect from \"use-deep-compare-effect\";\n\nimport {\n SearchFilter as SearchFilterOoui,\n Container,\n Field,\n} from \"@gisce/ooui\";\n\nimport { SearchField } from \"./SearchField\";\nimport { SearchBottomBar } from \"./SearchBottomBar\";\nimport { SearchFields } from \"@/types\";\nimport { SearchParams } from \"./SearchParams\";\n\nimport { getParamsForFields } from \"@/helpers/searchHelper\";\nimport Measure from \"react-measure\";\nconst { useToken } = theme;\n\ntype Props = {\n fields: any;\n searchFields: SearchFields;\n onClear: () => void;\n onSubmit: (values: any) => void;\n isSearching: boolean;\n limit: number;\n offset: number;\n onLimitChange?: (limit: number) => void;\n searchVisible?: boolean;\n setSearchFilterHeight?: (height: number) => void;\n searchError?: string;\n searchValues?: any;\n showLimitOptions?: boolean;\n};\n\nfunction SearchFilter(props: Props) {\n const {\n fields,\n searchFields = { primary: [], secondary: [] },\n onClear,\n onSubmit,\n isSearching,\n offset,\n limit,\n onLimitChange,\n searchVisible,\n setSearchFilterHeight,\n searchError,\n searchValues,\n showLimitOptions = true,\n } = props;\n\n const [simpleSearchFields, setSimpleSearchFields] = useState<Container>();\n const [advancedSearchFields, setAdvancedSearchFields] = useState<Container>();\n const [advancedFilter, setAdvancedFilter] = useState(false);\n const sfo = useRef<SearchFilterOoui>();\n const { token } = useToken();\n\n const [form] = Form.useForm();\n\n useEffect(() => {\n form.setFieldsValue(searchValues);\n }, [searchValues]);\n\n const getRowsAndCols = () => {\n if (!advancedSearchFields) {\n return;\n }\n\n const fields = advancedFilter ? advancedSearchFields : simpleSearchFields;\n const rows = fields?.rows;\n\n return rows?.map((row, i) => {\n return (\n <Row key={i}>\n {row.map((item, j) => {\n return (\n <Col xs={24} className=\"p-2\" xl={6} key={j}>\n <SearchField field={item as Field} />\n </Col>\n );\n })}\n </Row>\n );\n });\n };\n\n useDeepCompareEffect(() => {\n setAdvancedFilter(false);\n sfo.current = new SearchFilterOoui(searchFields, fields);\n sfo.current.parse();\n setSimpleSearchFields(sfo.current._simpleSearchContainer);\n setAdvancedSearchFields(sfo.current._advancedSearchContainer);\n }, [fields, searchFields]);\n\n const rows = getRowsAndCols();\n\n const onFinish = (values: any) => {\n const { limit, offset } = values;\n delete values.offset;\n delete values.limit;\n const newParams = getParamsForFields(\n values,\n sfo.current?._advancedSearchContainer\n );\n\n onSubmit({ params: newParams, offset, limit, searchValues: values });\n };\n\n return (\n <Measure\n bounds\n onResize={(contentRect) => {\n setSearchFilterHeight?.(contentRect.bounds?.height!);\n }}\n >\n {({ measureRef }) => (\n <div ref={measureRef}>\n <div style={{ display: searchVisible ? \"block\" : \"none\" }}>\n <Form\n className=\"p-3 shadow-md\"\n style={{ borderRadius: token.borderRadius }}\n form={form}\n onFinish={onFinish}\n initialValues={{ offset, limit }}\n >\n {rows}\n {advancedFilter && showLimitOptions && (\n <SearchParams onLimitChange={onLimitChange} />\n )}\n <SearchBottomBar\n advancedFilter={advancedFilter}\n onAdvancedFilterToggle={() => {\n setAdvancedFilter(!advancedFilter);\n }}\n onClear={() => {\n form.resetFields();\n onClear();\n }}\n isSearching={isSearching}\n />\n </Form>\n {searchError && (\n <Alert\n className=\"mt-10\"\n message={searchError}\n type=\"error\"\n banner\n />\n )}\n <div className=\"pb-5\" />\n </div>\n </div>\n )}\n </Measure>\n );\n}\n\nexport default SearchFilter;\n","/**\n * This function calculate the width of a string based on its length\n * @param {String} text\n * @param {String} font\n */\nconst getTextWidth = (text: string, font = \"14px -apple-system\") => {\n const canvas = document.createElement(\"canvas\");\n const context = canvas.getContext(\"2d\");\n context!.font = font;\n const metrics = context!.measureText(text);\n return Math.round((metrics.width + 80) * 1.5);\n};\n\n/**\n * This function calculates the width of each column based in all CELL VALUES\n * @param {Array} columns\n * @param {Array} source\n * @param {Number} maxWidthPerCell\n */\nexport const calculateColumnsWidth = (\n columns: any,\n source: any,\n maxWidthPerCell = 500\n) => {\n if (columns.length === 0) {\n return { columns };\n }\n\n // First we calculate the width for each column\n // The column width is based on its string length\n\n const columnsWithWidth = columns.map((column: any) =>\n Object.assign(column, {\n width: getTextWidth(column.title),\n })\n );\n\n // Since we have a minimum width (column's width already calculated),\n // now we are going to verify if the cell value is bigger\n // than the column width which is already set\n\n source.map((entry: any) => {\n columnsWithWidth.map((column: any, indexColumn: number) => {\n const columnWidth = column.width;\n const cellValue = (entry[column.key] as string) || \"\";\n\n // Get the string width based on chars length\n let cellWidth = getTextWidth(cellValue);\n\n // Verify if the cell value is smaller than column's width\n if (cellWidth < columnWidth) cellWidth = columnWidth;\n\n // Verify if the cell value width is bigger than our max width flag\n if (cellWidth > maxWidthPerCell) cellWidth = maxWidthPerCell;\n\n // Update the column width\n columnsWithWidth[indexColumn].width = cellWidth;\n });\n });\n\n // Sum of all columns width to determine the table max width\n const tableWidth = columnsWithWidth\n .map((column: any) => column.width)\n .reduce((a: any, b: any) => {\n return a + b;\n });\n\n return {\n columns: columnsWithWidth,\n source,\n tableWidth,\n };\n};\n","function parseStringToFloat(text?: string) {\n if (!text) {\n return undefined;\n }\n\n try {\n if (text.includes(\":\")) {\n const splitted = text.trim().split(\":\");\n return (\n Math.round(\n (parseInt(splitted[0]) + parseInt(splitted[1]) / 60.0) * 10000\n ) / 10000\n );\n } else {\n return parseFloat(text.trim());\n }\n } catch (err) {\n return 0;\n }\n}\n\nfunction parseFloatToString(num?: number) {\n if (num === undefined) {\n return undefined;\n }\n\n let finalString;\n let hours = Math.floor(Math.abs(num));\n let mins = Math.round((Math.abs(num) % 1) * 100) / 100;\n\n if (mins >= 1) {\n hours = hours + 1;\n mins = 0.0;\n } else {\n mins = mins * 60;\n }\n\n const hoursString = hours.toLocaleString(\"en-US\", {\n minimumIntegerDigits: 2,\n maximumFractionDigits: 0,\n useGrouping: false,\n });\n const minsStrings = mins.toLocaleString(\"en-US\", {\n minimumIntegerDigits: 2,\n maximumFractionDigits: 0,\n useGrouping: false,\n });\n\n finalString = `${hoursString}:${minsStrings}`;\n\n if (num < 0) {\n finalString = \"-\" + finalString;\n }\n\n return finalString;\n}\n\nexport { parseStringToFloat, parseFloatToString };","import React from \"react\";\nimport { Progress } from \"antd\";\nimport Field from \"@/common/Field\";\nimport { WidgetProps } from \"@/types\";\nimport styled from \"styled-components\";\n\nexport const ProgressBar = (props: WidgetProps) => {\n return (\n <Field {...props}>\n <ProgressBarInput />\n </Field>\n );\n};\n\nexport const ProgressBarInput = ({ value }: { value?: number }) => {\n const textValue = `${(value || 0).toLocaleString(\"en-US\", {\n minimumIntegerDigits: 1,\n maximumFractionDigits: 4,\n useGrouping: false,\n })}%`;\n\n return (\n <div style={{ flex: 1, display: \"flex\", alignItems: \"center\" }}>\n <StyledProgress percent={value} />\n <div style={{ flexGrow: 1, paddingLeft: 10 }}>{textValue}</div>\n </div>\n );\n};\n\nconst StyledProgress = styled(Progress)`\n .ant-progress-outer {\n margin-right: 0px;\n padding-right: 0px;\n }\n .ant-progress-text {\n display: none;\n }\n`;\n","import React, { useContext } from \"react\";\nimport { Modal, Button, Space } from \"antd\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\ntype Props = {\n visible: boolean;\n items: any[];\n onItemClicked: (item: any) => void;\n onCancel: () => void;\n};\n\nexport const Many2oneSuffixModal = (props: Props) => {\n const { visible, onCancel, items = [], onItemClicked } = props;\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n return (\n (<Modal\n title={t(\"selectAction\")}\n centered\n open={visible}\n footer={null}\n destroyOnClose\n onCancel={onCancel}\n maskClosable={false}\n >\n <Space direction=\"vertical\" className=\"w-full\">\n {items.map((item) => {\n return (\n <Button\n className=\"w-full\"\n onClick={() => {\n onItemClicked(item);\n }}\n >\n {item.name}\n </Button>\n );\n })}\n </Space>\n </Modal>)\n );\n};\n","import React, { useContext, useState, useEffect } from \"react\";\nimport {\n RightCircleOutlined,\n PrinterOutlined,\n ThunderboltOutlined,\n EnterOutlined,\n} from \"@ant-design/icons\";\nimport { Menu, Dropdown, Spin } from \"antd\";\nimport {\n TabManagerContext,\n TabManagerContextType,\n} from \"@/context/TabManagerContext\";\nimport { FormView } from \"@/types\";\nimport { Many2oneSuffixModal } from \"./Many2oneSuffixModal\";\nimport {\n ContentRootContext,\n ContentRootContextType,\n} from \"@/context/ContentRootContext\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport { processValues } from \"@/helpers/formHelper\";\nimport showErrorDialog from \"@/ui/ActionErrorDialog\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport { parseContextFields, parseDomainFields } from \"@gisce/ooui\";\n\ntype Props = {\n id: number;\n model: string;\n context?: any;\n};\n\nexport const Many2oneSuffix = (props: Props) => {\n const { id, model, context = {} } = props;\n const [actionModalVisible, setActionModalVisible] = useState<boolean>(false);\n const [printModalVisible, setPrintModalVisible] = useState<boolean>(false);\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [formView, setFormView] = useState<FormView>();\n const [targetValues, setTargetValues] = useState<any>();\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n const tabManagerContext = useContext(\n TabManagerContext\n ) as TabManagerContextType;\n const { openRelate } = tabManagerContext || {};\n\n const contentRootContext = useContext(\n ContentRootContext\n ) as ContentRootContextType;\n const { processAction } = contentRootContext || {};\n\n if (!id) {\n return null;\n }\n\n async function fetchData() {\n setIsLoading(true);\n\n try {\n const formView = await ConnectionProvider.getHandler().getView({\n model,\n type: \"form\",\n context,\n }) as FormView;\n setFormView(formView);\n let fields: string[] = [];\n const { toolbar } = formView;\n toolbar.action?.filter((item: any) => item.hasOwnProperty('context')).map((item: any) => fields.push(...parseContextFields(item.context)));\n toolbar.action?.filter((item: any) => item.hasOwnProperty('domain')).map((item: any) => fields.push(...parseDomainFields(item.domain)));\n toolbar.relate?.filter((item: any) => item.hasOwnProperty('context')).map((item: any) => fields.push(...parseContextFields(item.context)));\n toolbar.relate?.filter((item: any) => item.hasOwnProperty('domain')).map((item: any) => fields.push(...parseDomainFields(item.domain)));\n toolbar.print?.filter((item: any) => item.hasOwnProperty('context')).map((item: any) => fields.push(...parseContextFields(item.context)));\n fields = fields.filter((i) => Object.keys(formView.fields).indexOf(i) > -1)\n\n let values = {}\n\n if (fields.length > 0) {\n values = (\n await ConnectionProvider.getHandler().readObjects({\n model,\n ids: [id],\n fieldsToRetrieve: fields,\n context,\n })\n )[0];\n }\n values = { ...processValues(values, fields), active_id: id };\n setTargetValues(values);\n\n setIsLoading(false);\n } catch (err) {\n setIsLoading(false);\n showErrorDialog(err);\n return;\n }\n }\n\n function menu() {\n if (isLoading) {\n return (\n <Menu>\n <div style={{ padding: 15 }}>\n <Spin />\n </div>\n </Menu>\n );\n }\n\n if (!formView || !formView.toolbar) {\n return <Menu />;\n }\n\n const relateItems = formView?.toolbar?.relate.map((item: any) => {\n return <Menu.Item key={item.id}>{item.name}</Menu.Item>;\n });\n\n return (\n <Menu onClick={handleMenuClick}>\n {[\n <Menu.Item\n key=\"action\"\n disabled={\n !formView!.toolbar.action || formView!.toolbar.action.length === 0\n }\n icon={<ThunderboltOutlined />}\n >\n {t(\"action\")}\n </Menu.Item>,\n <Menu.Item\n key=\"print\"\n disabled={\n !formView!.toolbar.print || formView!.toolbar.print.length === 0\n }\n icon={<PrinterOutlined />}\n >\n {t(\"report\")}\n </Menu.Item>,\n <Menu.Divider />,\n <Menu.ItemGroup\n title={\n <>\n <EnterOutlined /> <span> {t(\"related\")}</span>\n </>\n }\n >\n {relateItems}\n </Menu.ItemGroup>,\n ]}\n </Menu>\n );\n }\n\n function handleMenuClick(event: any) {\n if (event.key === \"action\") {\n setActionModalVisible(true);\n } else if (event.key === \"print\") {\n setPrintModalVisible(true);\n } else {\n const relateItemClicked = formView!.toolbar.relate.find((item: any) => {\n return item.id === parseInt(event.key);\n });\n if (!relateItemClicked) {\n return;\n }\n\n openRelate({\n relateData: relateItemClicked,\n values: targetValues,\n fields: formView!.fields,\n action_id: relateItemClicked.id,\n action_type: relateItemClicked.type,\n });\n }\n }\n\n function onActionItemClicked(actionData: any) {\n setActionModalVisible(false);\n processAction?.({\n actionData,\n values: targetValues,\n fields: formView!.fields,\n context: { active_id: id, active_ids: [id] },\n });\n }\n\n function onPrintItemClicked(reportData: any) {\n setPrintModalVisible(false);\n processAction?.({\n actionData: {\n ...reportData,\n datas: { ...(reportData.datas || {}), ids: [id] },\n },\n values: targetValues,\n fields: formView!.fields,\n });\n }\n\n return (\n <>\n <Dropdown overlay={menu()} trigger={[\"click\"]}>\n <RightCircleOutlined\n style={{ color: \"rgba(0,0,0,.45)\" }}\n onClick={(e) => {\n e.preventDefault();\n fetchData();\n }}\n />\n </Dropdown>\n <Many2oneSuffixModal\n visible={actionModalVisible}\n items={formView?.toolbar?.action}\n onItemClicked={onActionItemClicked}\n onCancel={() => setActionModalVisible(false)}\n />\n <Many2oneSuffixModal\n visible={printModalVisible}\n items={formView?.toolbar?.print}\n onItemClicked={onPrintItemClicked}\n onCancel={() => setPrintModalVisible(false)}\n />\n </>\n );\n};\n","import { Space } from \"antd\";\nimport React from \"react\";\nimport { Many2oneSuffix } from \"./Many2oneSuffix\";\n\nexport type Many2oneTreeProps = { m2oField: any };\n\nexport const Many2oneTree = (props: Many2oneTreeProps): React.ReactElement => {\n const { m2oField } = props;\n if (!m2oField) {\n return <></>;\n }\n return (\n <Space>\n <>{m2oField.value}</>\n <Many2oneSuffix id={m2oField.id} model={m2oField.model} />\n </Space>\n );\n};\n","import ConnectionProvider from \"@/ConnectionProvider\";\nimport { Space } from \"antd\";\nimport React, { useCallback, useEffect, useState } from \"react\";\nimport { Many2oneSuffix } from \"./many2one/Many2oneSuffix\";\nimport { LoadingOutlined } from \"@ant-design/icons\";\n\nexport type ReferenceTreeProps = {\n value: string;\n context?: any;\n selectionValues?: any;\n};\n\nexport const ReferenceTree = (\n props: ReferenceTreeProps\n): React.ReactElement => {\n const { value, context, selectionValues } = props;\n const [name, setName] = useState();\n const [loading, setLoading] = useState(false);\n\n const [model, id] = value ? value.split(\",\") : [];\n const intId = parseInt(id);\n\n const fetchName = useCallback(async () => {\n if (!value) {\n return;\n }\n if (value && name) {\n return;\n }\n setLoading(true);\n const nameResponse = await ConnectionProvider.getHandler().execute({\n action: \"name_get\",\n payload: [intId],\n model,\n context,\n });\n setName(nameResponse[0][1]);\n setLoading(false);\n }, [value, name]);\n\n useEffect(() => {\n fetchName();\n }, [value]);\n\n if (!value && !loading) {\n return <></>;\n }\n\n if (loading) {\n return <LoadingOutlined />;\n }\n\n const selectionDescription = selectionValues.get(model);\n\n return (\n <Space>\n <>{`${selectionDescription}:`}</>\n <>{name}</>\n <Many2oneSuffix id={intId} model={model} />\n </Space>\n );\n};\n","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",f=\"month\",h=\"quarter\",c=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,f),s=n-i<0,u=e.clone().add(r+(s?-1:1),f);return+(-(r+(n-i)/(s?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:f,y:c,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:h}[t]||String(t||\"\").toLowerCase().replace(/s$/,\"\")},u:function(t){return void 0===t}},g=\"en\",D={};D[g]=M;var p=function(t){return t instanceof _},S=function t(e,n,r){var i;if(!e)return g;if(\"string\"==typeof e){var s=e.toLowerCase();D[s]&&(i=s),n&&(D[s]=n,i=s);var u=e.split(\"-\");if(!i&&u.length>1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},w=function(t,e){if(p(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},O=v;O.l=S,O.i=p,O.w=function(t,e){return w(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=S(t.locale,null,!0),this.parse(t)}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(O.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.$x=t.x||{},this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return O},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=w(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return w(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<w(t)},m.$g=function(t,e,n){return O.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!O.u(e)||e,h=O.p(t),l=function(t,e){var i=O.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(a)},$=function(t,e){return O.w(n.toDate()[t].apply(n.toDate(\"s\"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},y=this.$W,M=this.$M,m=this.$D,v=\"set\"+(this.$u?\"UTC\":\"\");switch(h){case c:return r?l(1,0):l(31,11);case f:return r?l(1,M):l(0,M+1);case o:var g=this.$locale().weekStart||0,D=(y<g?y+7:y)-g;return l(r?m-D:m+(6-D),M);case a:case d:return $(v+\"Hours\",0);case u:return $(v+\"Minutes\",1);case s:return $(v+\"Seconds\",2);case i:return $(v+\"Milliseconds\",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,o=O.p(t),h=\"set\"+(this.$u?\"UTC\":\"\"),l=(n={},n[a]=h+\"Date\",n[d]=h+\"Date\",n[f]=h+\"Month\",n[c]=h+\"FullYear\",n[u]=h+\"Hours\",n[s]=h+\"Minutes\",n[i]=h+\"Seconds\",n[r]=h+\"Milliseconds\",n)[o],$=o===a?this.$D+(e-this.$W):e;if(o===f||o===c){var y=this.clone().set(d,1);y.$d[l]($),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d}else l&&this.$d[l]($);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[O.p(t)]()},m.add=function(r,h){var d,l=this;r=Number(r);var $=O.p(h),y=function(t){var e=w(l);return O.w(e.date(e.date()+Math.round(t*r)),l)};if($===f)return this.set(f,this.$M+r);if($===c)return this.set(c,this.$y+r);if($===a)return y(1);if($===o)return y(7);var M=(d={},d[s]=e,d[u]=n,d[i]=t,d)[$]||1,m=this.$d.getTime()+r*M;return O.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||l;var r=t||\"YYYY-MM-DDTHH:mm:ssZ\",i=O.z(this),s=this.$H,u=this.$m,a=this.$M,o=n.weekdays,f=n.months,h=function(t,n,i,s){return t&&(t[n]||t(e,r))||i[n].slice(0,s)},c=function(t){return O.s(s%12||12,t,\"0\")},d=n.meridiem||function(t,e,n){var r=t<12?\"AM\":\"PM\";return n?r.toLowerCase():r},$={YY:String(this.$y).slice(-2),YYYY:O.s(this.$y,4,\"0\"),M:a+1,MM:O.s(a+1,2,\"0\"),MMM:h(n.monthsShort,a,f,3),MMMM:h(f,a),D:this.$D,DD:O.s(this.$D,2,\"0\"),d:String(this.$W),dd:h(n.weekdaysMin,this.$W,o,2),ddd:h(n.weekdaysShort,this.$W,o,3),dddd:o[this.$W],H:String(s),HH:O.s(s,2,\"0\"),h:c(1),hh:c(2),a:d(s,u,!0),A:d(s,u,!1),m:String(u),mm:O.s(u,2,\"0\"),s:String(this.$s),ss:O.s(this.$s,2,\"0\"),SSS:O.s(this.$ms,3,\"0\"),Z:i};return r.replace(y,(function(t,e){return e||$[t]||i.replace(\":\",\"\")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,l){var $,y=O.p(d),M=w(r),m=(M.utcOffset()-this.utcOffset())*e,v=this-M,g=O.m(this,M);return g=($={},$[c]=g/12,$[f]=g,$[h]=g/3,$[o]=(v-m)/6048e5,$[a]=(v-m)/864e5,$[u]=v/n,$[s]=v/e,$[i]=v/t,$)[y]||v,l?g:O.a(g)},m.daysInMonth=function(){return this.endOf(f).$D},m.$locale=function(){return D[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=S(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return O.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},M}(),T=_.prototype;return w.prototype=T,[[\"$ms\",r],[\"$s\",i],[\"$m\",s],[\"$H\",u],[\"$W\",a],[\"$M\",f],[\"$y\",c],[\"$D\",d]].forEach((function(t){T[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),w.extend=function(t,e){return t.$i||(t(e,_,w),t.$i=!0),w},w.locale=S,w.isDayjs=p,w.unix=function(t){return w(1e3*t)},w.en=D[g],w.Ls=D,w.p={},w}));","import React from \"react\";\nimport {WidgetProps} from \"@/types\";\nimport { Avatar as AntdAvatar, Tooltip } from \"antd\";\nimport { Avatar as AvatarOoui} from \"@gisce/ooui\";\nimport { colorFromString } from \"@/helpers/formHelper\";\n\ntype AvatarProps = WidgetProps & {\n ooui: AvatarOoui\n value?: any;\n};\n\nconst Avatar = (props: AvatarProps): React.ReactElement | null => {\n const {ooui, value} = props;\n if (!value) {\n return null;\n }\n let formattedValue = value;\n if (ooui.selectionValues.size) {\n formattedValue = ooui.selectionValues.get(value);\n } else if (Array.isArray(value)) {\n formattedValue = value[1];\n }\n const text = formattedValue.toString().split(\" \").filter((word:string) => word.length > 1).slice(0, 3).map((word:string) => word[0].toUpperCase()).join(\"\");\n const backgroundColor = colorFromString(formattedValue);\n return (\n <Tooltip title={formattedValue}>\n <AntdAvatar alt={formattedValue} style={{backgroundColor}}>{text}</AntdAvatar>\n </Tooltip>\n );\n}\n\nexport default Avatar;\n","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_weekday=t()}(this,(function(){\"use strict\";return function(e,t){t.prototype.weekday=function(e){var t=this.$locale().weekStart||0,i=this.$W,n=(i<t?i+7:i)-t;return this.$utils().u(e)?n:this.subtract(n,\"day\").add(e,\"day\")}}}));","!function(n,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(n=\"undefined\"!=typeof globalThis?globalThis:n||self).dayjs_plugin_localeData=e()}(this,(function(){\"use strict\";return function(n,e,t){var r=e.prototype,o=function(n){return n&&(n.indexOf?n:n.s)},u=function(n,e,t,r,u){var i=n.name?n:n.$locale(),a=o(i[e]),s=o(i[t]),f=a||s.map((function(n){return n.slice(0,r)}));if(!u)return f;var d=i.weekStart;return f.map((function(n,e){return f[(e+(d||0))%7]}))},i=function(){return t.Ls[t.locale()]},a=function(n,e){return n.formats[e]||function(n){return n.replace(/(\\[[^\\]]+])|(MMMM|MM|DD|dddd)/g,(function(n,e,t){return e||t.slice(1)}))}(n.formats[e.toUpperCase()])},s=function(){var n=this;return{months:function(e){return e?e.format(\"MMMM\"):u(n,\"months\")},monthsShort:function(e){return e?e.format(\"MMM\"):u(n,\"monthsShort\",\"months\",3)},firstDayOfWeek:function(){return n.$locale().weekStart||0},weekdays:function(e){return e?e.format(\"dddd\"):u(n,\"weekdays\")},weekdaysMin:function(e){return e?e.format(\"dd\"):u(n,\"weekdaysMin\",\"weekdays\",2)},weekdaysShort:function(e){return e?e.format(\"ddd\"):u(n,\"weekdaysShort\",\"weekdays\",3)},longDateFormat:function(e){return a(n.$locale(),e)},meridiem:this.$locale().meridiem,ordinal:this.$locale().ordinal}};r.localeData=function(){return s.bind(this)()},t.localeData=function(){var n=i();return{firstDayOfWeek:function(){return n.weekStart||0},weekdays:function(){return t.weekdays()},weekdaysShort:function(){return t.weekdaysShort()},weekdaysMin:function(){return t.weekdaysMin()},months:function(){return t.months()},monthsShort:function(){return t.monthsShort()},longDateFormat:function(e){return a(n,e)},meridiem:n.meridiem,ordinal:n.ordinal}},t.months=function(){return u(i(),\"months\")},t.monthsShort=function(){return u(i(),\"monthsShort\",\"months\",3)},t.weekdays=function(n){return u(i(),\"weekdays\",null,null,n)},t.weekdaysShort=function(n){return u(i(),\"weekdaysShort\",\"weekdays\",3,n)},t.weekdaysMin=function(n){return u(i(),\"weekdaysMin\",\"weekdays\",2,n)}}}));","import { DatePicker as AntDatePicker, theme } from \"antd\";\n\nimport React from \"react\";\nimport Field from \"@/common/Field\";\nimport { WidgetProps } from \"@/types\";\nimport { Date as DateOoui } from \"@gisce/ooui\";\nimport dayjs from \"dayjs\";\nconst { useToken } = theme;\nimport weekday from \"dayjs/plugin/weekday\";\nimport localeData from \"dayjs/plugin/localeData\";\ndayjs.extend(weekday);\ndayjs.extend(localeData);\n\ntype DatePickerProps = WidgetProps & {\n showTime?: boolean;\n};\n\nexport const DatePickerConfig = {\n date: {\n placeholder: \"__/__/____\",\n dateDisplayFormat: \"DD/MM/YYYY\",\n dateInternalFormat: \"YYYY-MM-DD\",\n },\n time: {\n placeholder: \"__/__/____ __:__:__\",\n dateDisplayFormat: \"DD/MM/YYYY HH:mm:ss\",\n dateInternalFormat: \"YYYY-MM-DD HH:mm:ss\",\n },\n};\n\nconst DatePicker = (props: DatePickerProps) => {\n const { ooui, showTime = false } = props;\n const { required } = ooui;\n\n return (\n <Field required={required} {...props}>\n <DatePickerInput ooui={ooui} showTime={showTime} />\n </Field>\n );\n};\n\ninterface DatePickerInputProps {\n ooui: DateOoui;\n value?: undefined | string;\n onChange?: (value: undefined | string) => void;\n showTime?: boolean;\n}\n\nconst DatePickerInput: React.FC<DatePickerInputProps> = (\n props: DatePickerInputProps\n) => {\n const { value, onChange, ooui, showTime } = props;\n const { id, readOnly, required } = ooui as DateOoui;\n const { token } = useToken();\n\n const requiredStyle =\n required && !readOnly\n ? { backgroundColor: token.colorPrimaryBg }\n : undefined;\n\n const mode = showTime ? \"time\" : \"date\";\n\n const triggerChange = (changedValue: undefined | string) => {\n onChange?.(changedValue);\n };\n\n const onValueStringChange = (momentDate: any) => {\n if (momentDate === null) {\n triggerChange(undefined);\n return;\n }\n\n triggerChange(momentDate.format(DatePickerConfig[mode].dateInternalFormat));\n };\n\n const dateValue = value\n ? dayjs(value, DatePickerConfig[mode].dateInternalFormat)\n : undefined;\n\n return (\n <AntDatePicker\n style={{ width: \"100%\", ...requiredStyle }}\n placeholder={\n showTime\n ? DatePickerConfig.time.placeholder\n : DatePickerConfig.date.placeholder\n }\n disabled={readOnly}\n id={id}\n picker={\"date\"}\n showTime={showTime}\n format={DatePickerConfig[mode].dateDisplayFormat}\n value={dateValue}\n onChange={onValueStringChange}\n />\n );\n};\n\nexport default DatePicker;\n","import React, { useContext, useEffect, useRef, useState } from \"react\";\nimport { Pagination, Checkbox, Space, Row, Col, Spin, Tag, Badge } from \"antd\";\nimport {\n getTree,\n getTableColumns,\n getTableItems,\n hasActualValues,\n} from \"@/helpers/treeHelper\";\nimport { Tree as TreeOoui } from \"@gisce/ooui\";\n\nimport { TreeView, Column } from \"@/types\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport { calculateColumnsWidth } from \"@/helpers/dynamicColumnsHelper\";\nimport { parseFloatToString } from \"@/helpers/timeHelper\";\nimport { ProgressBarInput } from \"../base/ProgressBar\";\nimport { Table as GisceTable } from \"@gisce/react-formiga-table\";\nimport {\n PlusSquareOutlined,\n MinusSquareOutlined,\n LoadingOutlined,\n} from \"@ant-design/icons\";\nimport { One2manyValue } from \"../base/one2many/One2manyInput\";\nimport { Interweave } from \"interweave\";\nimport {\n ActionViewContext,\n ActionViewContextType,\n} from \"@/context/ActionViewContext\";\nimport { Many2oneTree } from \"../base/many2one/Many2oneTree\";\nimport { ReferenceTree } from \"../base/ReferenceTree\";\nimport dayjs from \"dayjs\";\nimport Avatar from \"../custom/Avatar\";\nimport { TagInput } from \"../custom/Tag\";\nimport { DatePickerConfig } from \"@/common/DatePicker\";\n\ntype Props = {\n total?: number;\n limit: number;\n page?: number;\n loading: boolean;\n treeView: TreeView;\n results: Array<any>;\n showPagination?: boolean;\n onRequestPageChange?: (page: number, pageSize?: number) => void;\n onRowClicked?: (record: any) => void;\n rowSelection?: any;\n scrollY?: number;\n colorsForResults?: { [key: number]: string };\n statusForResults?: { [key: number]: string };\n onChangeSort?: (results: any) => void;\n sorter?: any;\n onFetchChildrenForRecord?: (item: any) => Promise<any[]>;\n childField?: string;\n rootTree?: boolean;\n context?: any;\n readonly?: boolean;\n onSelectAllRecords?: () => Promise<void>;\n};\n\nconst booleanComponentFn = (value: boolean): React.ReactElement => {\n return (\n <div\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n alignContent: \"center\",\n }}\n >\n <Checkbox checked={value} disabled />\n </div>\n );\n};\n\nconst many2OneComponentFn = (m2oField: any): React.ReactElement => {\n return <Many2oneTree m2oField={m2oField} />;\n};\n\nconst textComponentFn = (value: any): React.ReactElement => {\n return (\n <Interweave\n content={value?.toString().replace(/(?:\\r\\n|\\r|\\n)/g, \"<br>\")}\n />\n );\n};\n\nconst dateComponentFn = (value: any): React.ReactElement => {\n if (!value || (value && value.length === 0)) return <></>;\n\n const formattedValue = dayjs(\n value,\n DatePickerConfig.date.dateInternalFormat\n ).format(DatePickerConfig.date.dateDisplayFormat);\n return <>{formattedValue}</>;\n};\n\nconst dateTimeComponentFn = (value: any): React.ReactElement => {\n if (!value || (value && value.length === 0)) return <></>;\n const formattedValue = dayjs(\n value,\n DatePickerConfig.time.dateInternalFormat\n ).format(DatePickerConfig.time.dateDisplayFormat);\n return <>{formattedValue}</>;\n};\n\nconst one2ManyComponentFn = (value: One2manyValue): React.ReactElement => {\n const length = Array.isArray(value?.items) ? value?.items.length : 0;\n return <>{`( ${length} )`}</>;\n};\n\nconst progressBarComponentFn = (value: any): React.ReactElement => {\n return <ProgressBarInput value={value} />;\n};\n\nconst floatTimeComponent = (value: number): React.ReactElement => {\n return <>{parseFloatToString(value)}</>;\n};\n\nconst numberComponent = (value: number): React.ReactElement => {\n return <div style={{ textAlign: \"right\" }}>{value}</div>;\n};\n\nconst imageComponent = (value: string): React.ReactElement => {\n return (\n <img\n src={`data:image/*;base64,${value}`}\n style={{ maxWidth: \"50px\", padding: \"5px\" }}\n />\n );\n};\n\nconst TagComponent = (\n value: any,\n key: string,\n ooui: any,\n context: any\n): React.ReactElement => {\n return <TagInput ooui={ooui} value={value} />;\n};\n\nconst SelectionComponent = (\n value: any,\n key: string,\n ooui: any,\n context: any\n): React.ReactElement => {\n return <>{ooui.selectionValues.get(value)}</>;\n};\n\nconst referenceComponent = (\n value: any,\n key: string,\n ooui: any,\n context: any\n): React.ReactElement => {\n return (\n <>\n <ReferenceTree\n value={value}\n selectionValues={ooui.selectionValues}\n context={context}\n />\n </>\n );\n};\n\nconst AvatarFn = (\n value: any,\n key: string,\n ooui: any,\n context: any\n): React.ReactElement => <Avatar ooui={ooui} value={value} />;\n\nfunction Tree(props: Props): React.ReactElement {\n const {\n page = 1,\n limit,\n total,\n treeView,\n results,\n onRequestPageChange,\n loading,\n onRowClicked,\n showPagination = true,\n rowSelection,\n scrollY,\n colorsForResults = {},\n statusForResults = {},\n onChangeSort,\n sorter,\n onFetchChildrenForRecord,\n childField,\n rootTree = false,\n context,\n readonly,\n onSelectAllRecords,\n } = props;\n\n const [items, setItems] = useState<Array<any>>([]);\n const [columns, setColumns] = useState<Array<Column>>([]);\n\n const errorInParseColors = useRef<boolean>(false);\n\n const treeOoui = useRef<any>(null);\n\n const { t } = useContext(LocaleContext) as LocaleContextType;\n const internalLimit = useRef(limit);\n\n const actionViewContext = useContext(\n ActionViewContext\n ) as ActionViewContextType;\n const { title = undefined, setTitle = undefined } =\n (rootTree ? actionViewContext : {}) || {};\n\n useEffect(() => {\n treeOoui.current = getTree(treeView);\n\n const columns = getTableColumns(\n treeOoui.current,\n {\n boolean: booleanComponentFn,\n many2one: many2OneComponentFn,\n text: textComponentFn,\n one2many: one2ManyComponentFn,\n many2many: one2ManyComponentFn,\n progressbar: progressBarComponentFn,\n float_time: floatTimeComponent,\n image: imageComponent,\n integer: numberComponent,\n float: numberComponent,\n reference: referenceComponent,\n tag: TagComponent,\n selection: SelectionComponent,\n date: dateComponentFn,\n datetime: dateTimeComponentFn,\n avatar: AvatarFn,\n },\n context\n );\n\n setColumns(columns);\n\n if (treeOoui.current.string && title !== treeOoui.current.string) {\n setTitle?.(treeOoui.current.string);\n }\n }, [treeView]);\n\n useEffect(() => {\n errorInParseColors.current = false;\n const items = getTableItems(treeOoui.current, results);\n setItems(items);\n internalLimit.current = limit;\n }, [results]);\n\n const from = (page - 1) * internalLimit.current + 1;\n const to = from - 1 + items.length;\n const summary =\n total === undefined\n ? null\n : total === 0\n ? t(\"no_results\")\n : t(\"summary\")\n .replace(\"{from}\", from?.toString())\n .replace(\"{to}\", to?.toString())\n .replace(\"{total}\", total?.toString());\n\n const pagination = () => {\n if (!showPagination || treeView.isExpandable) {\n return null;\n }\n\n return loading ? null : total === undefined ? (\n <Spin className=\"pb-4\" />\n ) : (\n <Row align=\"bottom\" className=\"pb-4\">\n <Col span={12}>\n <Pagination\n total={total}\n pageSize={\n internalLimit.current === 0 ? total : internalLimit.current\n }\n current={page}\n showSizeChanger={false}\n onChange={onRequestPageChange}\n />\n </Col>\n <Col span={12} className=\"text-right\">\n {summary}\n </Col>\n </Row>\n );\n };\n\n function getSums() {\n const tree = treeOoui.current as TreeOoui;\n\n const sumFields = tree.columns\n .filter((it) => it.sum !== undefined)\n .map((it) => {\n return { label: it.sum, field: it.id };\n });\n\n if (!sumFields || sumFields.length === 0) {\n return null;\n }\n\n let summary: string[] = [];\n let sumItems =\n rowSelection?.selectedRowKeys?.length > 0\n ? items.filter((result: any) => {\n return rowSelection?.selectedRowKeys.includes(result.id);\n })\n : items;\n\n sumFields.forEach((sumField) => {\n const total = sumItems.reduce((prev, current) => {\n if (current[sumField.field] && !isNaN(current[sumField.field]))\n return prev + current[sumField.field];\n else return prev;\n }, 0);\n\n summary.push(`${sumField.label}: ${Math.round(total * 100) / 100}`);\n });\n\n return <div className=\"p-1 pb-0 pl-2 mt-2 \">{summary.join(\", \")}</div>;\n }\n\n let dataTable;\n let adjustedHeight = scrollY;\n\n // This helper function helps to calculate the width for each column\n // based on all table cells - column cell and source cell\n if (treeOoui.current !== null) {\n const maxWidthPerCell = 600;\n dataTable = calculateColumnsWidth(columns, items, maxWidthPerCell);\n const tree = treeOoui.current as TreeOoui;\n\n if (scrollY && tree.columns.some((it) => it.sum !== undefined)) {\n adjustedHeight = scrollY - 30;\n }\n }\n\n return treeOoui.current === null ||\n !dataTable ||\n dataTable.columns?.length === 0 ? (\n <Spin style={{ padding: \"2rem\" }} />\n ) : (\n <div>\n {pagination()}\n <GisceTable\n height={adjustedHeight!}\n columns={dataTable.columns}\n dataSource={items}\n loading={loading}\n loadingComponent={<Spin />}\n onRowStyle={(record: any) => {\n if (colorsForResults![record.id]) {\n return { color: colorsForResults![record.id] };\n }\n return undefined;\n }}\n onRowStatus={\n hasActualValues(statusForResults)\n ? (record: any) => {\n if (statusForResults![record.id]) {\n return <Badge color={statusForResults[record.id]} />;\n }\n return undefined;\n }\n : undefined\n }\n onRowDoubleClick={onRowClicked}\n selectionRowKeys={rowSelection?.selectedRowKeys}\n onRowSelectionChange={rowSelection?.onChange}\n onChangeSort={onChangeSort}\n sorter={sorter}\n readonly={readonly}\n expandableOpts={\n onFetchChildrenForRecord\n ? {\n expandIcon: PlusSquareOutlined,\n collapseIcon: MinusSquareOutlined,\n loadingIcon: LoadingOutlined,\n onFetchChildrenForRecord,\n childField: childField!,\n }\n : undefined\n }\n onSelectAllRecords={onSelectAllRecords}\n totalItems={total || 0}\n translations={{\n recordsSelected: t(\"recordsSelected\"),\n selectAllRecords: t(\"selectAllRecords\"),\n allRecordsSelected: t(\"allRecordsSelected\"),\n }}\n />\n {getSums()}\n </div>\n );\n}\n\nexport default Tree;\n","import React, {\n useEffect,\n useState,\n useRef,\n useContext,\n forwardRef,\n useImperativeHandle,\n} from \"react\";\nimport { Alert, Spin } from \"antd\";\n\nimport SearchFilter from \"@/widgets/views/searchFilter/SearchFilter\";\nimport Tree from \"@/widgets/views/Tree\";\nimport { FormView, TreeView } from \"@/types/index\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\n\nimport {\n ActionViewContext,\n ActionViewContextType,\n} from \"@/context/ActionViewContext\";\nimport useWindowDimensions from \"@/hooks/useWindowDimensions\";\nimport { mergeSearchFields } from \"@/helpers/formHelper\";\nimport {\n ContentRootContext,\n ContentRootContextType,\n} from \"@/context/ContentRootContext\";\nimport showErrorDialog from \"@/ui/ActionErrorDialog\";\nimport { DEFAULT_SEARCH_LIMIT, useSearch } from \"@/hooks/useSearch\";\n\ntype OnRowClickedData = {\n id: number;\n model: string;\n formView: FormView;\n treeView: TreeView;\n};\n\ntype Props = {\n model?: string;\n formView?: FormView;\n treeView?: TreeView;\n onRowClicked: (data: OnRowClickedData) => void;\n nameSearch?: string;\n treeScrollY?: number;\n domain?: any;\n visible?: boolean;\n rootTree?: boolean;\n parentContext?: any;\n onChangeSelectedRowKeys?: (selectedRowKeys: any) => void;\n};\n\nfunction SearchTree(props: Props, ref: any) {\n const {\n model,\n formView: formViewProps,\n treeView: treeViewProps,\n onRowClicked,\n nameSearch,\n treeScrollY,\n domain = [],\n visible = true,\n rootTree = false,\n parentContext = {},\n onChangeSelectedRowKeys,\n } = props;\n\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [initialFetchDone, setInitialFetchDone] = useState<boolean>(false);\n\n const searchNameGetDoneRef = useRef(false);\n\n const [currentModel, setCurrentModel] = useState<string>();\n const [treeView, setTreeView] = useState<TreeView>();\n const [formView, setFormView] = useState<FormView>();\n\n const [initialError, setInitialError] = useState<string>();\n\n const [searchFilterHeight, setSearchFilterHeight] = useState<number>(200);\n\n const expandableClickActionData = useRef<any>();\n\n const { height } = useWindowDimensions();\n\n const contentRootContext = useContext(\n ContentRootContext\n ) as ContentRootContextType;\n const { processAction } = contentRootContext || {};\n\n const actionViewContext = useContext(\n ActionViewContext\n ) as ActionViewContextType;\n const {\n setResults: setResultsActionView = undefined,\n setCurrentItemIndex = undefined,\n currentId = undefined,\n results: resultsActionView = undefined,\n selectedRowItems = undefined,\n setSelectedRowItems = undefined,\n searchParams = [],\n setSearchParams = undefined,\n searchVisible = true,\n setSearchVisible = undefined,\n sorter = undefined,\n setSorter = undefined,\n setTotalItems: setActionViewTotalItems = undefined,\n setSearchTreeNameSearch = undefined,\n setTreeIsLoading = undefined,\n searchValues = {},\n setSearchValues = undefined,\n limit = DEFAULT_SEARCH_LIMIT,\n setLimit = undefined,\n } = (rootTree ? actionViewContext : {}) || {};\n\n const {\n submit,\n clear,\n fetchResults,\n tableRefreshing,\n searchFilterLoading,\n searchError,\n page,\n offset,\n getResults,\n requestPageChange,\n changeSort,\n fetchChildrenForRecord,\n colorsForResults,\n statusForResults,\n totalItems,\n getAllIds,\n } = useSearch({\n model: currentModel!,\n setSearchTreeNameSearch,\n setSelectedRowItems: changeSelectedRowKeys,\n setSearchParams,\n setSearchValues,\n searchParams,\n setSearchVisible,\n setTreeIsLoading,\n nameSearch,\n searchNameGetDoneRef,\n context: parentContext,\n formView: formView!,\n treeView: treeView!,\n sorter,\n setSorter,\n setCurrentItemIndex,\n setResultsActionView,\n resultsActionView,\n domain,\n currentId,\n setActionViewTotalItems,\n limit,\n setLimit,\n });\n\n useImperativeHandle(ref, () => ({\n refreshResults: () => {\n searchNameGetDoneRef.current = false;\n fetchResults();\n },\n getFields: () => treeView?.fields,\n getDomain: () => domain,\n }));\n\n useEffect(() => {\n if (!initialFetchDone) {\n return;\n }\n\n if (visible) {\n searchNameGetDoneRef.current = false;\n fetchResults();\n }\n }, [page, offset, initialFetchDone, visible, nameSearch]);\n\n const fetchData = async () => {\n setInitialFetchDone(false);\n setIsLoading(true);\n setInitialError(undefined);\n setTreeIsLoading?.(true);\n\n try {\n await fetchModelData();\n setInitialFetchDone(true);\n } catch (error) {\n setInitialError(error);\n setTreeIsLoading?.(false);\n } finally {\n setIsLoading(false);\n }\n };\n\n const fetchModelData = async () => {\n setCurrentModel(model);\n\n let _formView = formViewProps;\n\n if (!formViewProps) {\n _formView = (await ConnectionProvider.getHandler().getView({\n model: model!,\n type: \"form\",\n context: parentContext,\n })) as FormView;\n }\n\n let _treeView = treeViewProps;\n\n if (!treeViewProps) {\n _treeView = (await ConnectionProvider.getHandler().getView({\n model: model!,\n type: \"tree\",\n context: parentContext,\n })) as TreeView;\n }\n\n setFormView(_formView as FormView);\n setTreeView(_treeView as TreeView);\n };\n\n useEffect(() => {\n fetchData();\n }, [model]);\n\n const onSearchTreeLimitChange = (newLimit: number) => {\n setLimit?.(newLimit);\n };\n\n const treeButOpen = async (record: any) => {\n const { id } = record;\n\n if (!expandableClickActionData.current) {\n expandableClickActionData.current =\n await ConnectionProvider.getHandler().treeButOpen({\n id: treeView!.view_id,\n model: currentModel!,\n context: parentContext,\n });\n }\n\n const actionData: any = expandableClickActionData.current[0][2];\n\n await processAction?.({\n actionData,\n fields: treeView!.fields,\n values: {\n active_id: id,\n ...record,\n },\n context: parentContext,\n });\n };\n\n const onRowClickedHandler = async (record: any) => {\n const { id } = record;\n\n if (treeView?.isExpandable) {\n try {\n await treeButOpen(record);\n } catch (err) {\n showErrorDialog(err);\n }\n return;\n }\n\n onRowClicked({\n id,\n model: currentModel!,\n formView: formView!,\n treeView: treeView!,\n });\n };\n\n function changeSelectedRowKeys(selectedRowKeys: any[]) {\n setSelectedRowItems?.(selectedRowKeys.map((id: number) => ({ id })));\n onChangeSelectedRowKeys?.(selectedRowKeys);\n }\n\n async function selectAllRecords() {\n const allIds = await getAllIds();\n setSelectedRowItems?.(allIds.map((id: number) => ({ id })));\n onChangeSelectedRowKeys?.(allIds);\n }\n\n function calculateTableHeight() {\n if (treeView?.isExpandable) {\n return height - 160;\n }\n return height - (searchFilterHeight + 210);\n }\n\n const content = () => {\n if (!treeView || !formView) {\n return null;\n }\n\n return (\n <>\n <SearchFilter\n fields={{ ...formView.fields, ...treeView.fields }}\n searchFields={mergeSearchFields([\n formView.search_fields,\n treeView.search_fields,\n ])}\n onClear={clear}\n limit={limit}\n offset={offset}\n isSearching={searchFilterLoading}\n onSubmit={submit}\n onLimitChange={onSearchTreeLimitChange}\n setSearchFilterHeight={setSearchFilterHeight}\n searchError={searchError}\n searchVisible={searchVisible}\n searchValues={searchValues}\n />\n <Tree\n context={parentContext}\n total={totalItems}\n limit={limit}\n page={page}\n treeView={treeView}\n results={getResults()}\n onRequestPageChange={requestPageChange}\n loading={tableRefreshing}\n onRowClicked={onRowClickedHandler}\n scrollY={treeScrollY || calculateTableHeight()}\n colorsForResults={colorsForResults}\n statusForResults={statusForResults}\n rowSelection={{\n selectedRowKeys: selectedRowItems?.map((item) => item.id),\n onChange: changeSelectedRowKeys,\n }}\n sorter={sorter}\n onChangeSort={changeSort}\n onFetchChildrenForRecord={\n treeView.isExpandable ? fetchChildrenForRecord : undefined\n }\n childField={treeView.field_parent}\n rootTree={rootTree}\n onSelectAllRecords={selectAllRecords}\n />\n </>\n );\n };\n\n const error = initialError || searchError;\n\n if (error) {\n return <Alert className=\"mt-10\" message={error} type=\"error\" banner />;\n }\n\n return (\n <div style={!visible ? { display: \"none\" } : {}}>\n {isLoading ? <Spin /> : content()}\n </div>\n );\n}\n\nexport default forwardRef(SearchTree);\n","import React, { useState, useContext, useRef, useEffect } from \"react\";\nimport { Modal, Button, Divider, Row, Space } from \"antd\";\nimport { FormModal } from \"./FormModal\";\nimport SearchTree from \"@/widgets/views/SearchTree\";\nimport {\n FileAddOutlined,\n CloseOutlined,\n CheckOutlined,\n} from \"@ant-design/icons\";\nimport useWindowDimensions from \"@/hooks/useWindowDimensions\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\ntype SearchSelectionProps = {\n visible: boolean;\n model: string;\n nameSearch?: string;\n onSelectValues: (values: number[]) => void;\n onCloseModal: () => void;\n domain?: any;\n context?: any;\n};\n\nexport const SearchModal = (props: SearchSelectionProps) => {\n const {\n visible,\n onCloseModal: onCloseModalProps,\n onSelectValues,\n model,\n nameSearch,\n domain,\n context = {},\n } = props;\n const [showCreateModal, setShowCreateModal] = useState<boolean>(false);\n\n const { modalWidth, modalHeight } = useWindowDimensions();\n const { t } = useContext(LocaleContext) as LocaleContextType;\n const [selectedRowKeys, setSelectedRowKeys] = useState<any[]>([]);\n\n const onCloseModal = async () => {\n await new Promise((resolve) => setTimeout(resolve, 5));\n onCloseModalProps();\n };\n\n const onRowClicked = async (event: any) => {\n const { id } = event;\n onSelectValues([id]);\n };\n\n function submit() {\n if (selectedRowKeys.length === 0) {\n onCloseModal();\n return;\n }\n\n onSelectValues(selectedRowKeys);\n }\n\n const content = () => {\n return (\n <>\n <SearchTree\n model={model}\n nameSearch={nameSearch}\n onRowClicked={onRowClicked}\n treeScrollY={modalHeight * 0.3}\n domain={domain}\n parentContext={context}\n onChangeSelectedRowKeys={(selectedRowKeys: any) => {\n setSelectedRowKeys(selectedRowKeys);\n }}\n />\n <Divider />\n <Row justify=\"end\">\n <Space>\n <Button\n icon={<FileAddOutlined />}\n onClick={() => {\n setShowCreateModal(true);\n }}\n >\n {t(\"new\")}\n </Button>\n <Button\n icon={<CheckOutlined />}\n onClick={() => {\n submit();\n }}\n type=\"primary\"\n >\n {t(\"ok\")}\n </Button>\n <Button icon={<CloseOutlined />} onClick={onCloseModal}>\n {t(\"cancel\")}\n </Button>\n </Space>\n </Row>\n </>\n );\n };\n\n return (<>\n <Modal\n title={t(\"search\")}\n centered\n width={modalWidth}\n open={visible && !showCreateModal}\n closable={true}\n onCancel={onCloseModal}\n footer={null}\n destroyOnClose\n maskClosable={false}\n >\n {content()}\n </Modal>\n <FormModal\n model={model}\n visible={showCreateModal}\n parentContext={context}\n onSubmitSucceed={(id?: number) => {\n setShowCreateModal(false);\n onCloseModal();\n onSelectValues([id!]);\n }}\n onCancel={() => {\n setShowCreateModal(false);\n onCloseModal();\n }}\n />\n </>);\n};\n","import React from \"react\";\nimport { Modal } from \"antd\";\nimport { ExclamationCircleOutlined } from \"@ant-design/icons\";\n\nconst { error } = Modal;\n\nconst showDialog = (message: string) => {\n error({\n title: \"Error\",\n icon: <ExclamationCircleOutlined />,\n centered: true,\n content: message,\n });\n};\n\nexport default showDialog;\n","import React, { useState, useRef, useEffect, useContext } from \"react\";\nimport { Input, Button, Row, Col } from \"antd\";\nimport {\n SearchOutlined,\n FolderOpenOutlined,\n LoadingOutlined,\n} from \"@ant-design/icons\";\nimport styled from \"styled-components\";\nimport { theme } from \"antd\";\n\nconst { defaultAlgorithm, defaultSeed } = theme;\n\nconst mapToken = defaultAlgorithm(defaultSeed);\n\nimport {\n Many2one as Many2oneOoui,\n transformDomainForChildWidget,\n} from \"@gisce/ooui\";\nimport Field from \"@/common/Field\";\nimport { SearchModal } from \"@/widgets/modals/SearchModal\";\nimport { FormModal } from \"@/widgets/modals/FormModal\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport { Many2oneSuffix } from \"./Many2oneSuffix\";\nimport showErrorDialog from \"@/ui/GenericErrorDialog\";\nimport { FormContext, FormContextType } from \"@/context/FormContext\";\nimport { transformPlainMany2Ones } from \"@/helpers/formHelper\";\n\ntype Props = {\n ooui: Many2oneOoui;\n onOpenDetailClick?:\n | ((event: React.MouseEvent<HTMLElement, MouseEvent>) => void)\n | undefined;\n onSearchClick?:\n | ((event: React.MouseEvent<HTMLElement, MouseEvent>) => void)\n | undefined;\n};\n\nexport const Many2one = (props: Props) => {\n const { ooui } = props;\n const { required } = ooui;\n const validator = async (_: any, value: any) => {\n if (!value) throw new Error();\n if (!Array.isArray(value)) throw new Error();\n if (Array.isArray(value) && !value[0]) throw new Error();\n };\n\n return (\n <Field required={required} type={\"array\"} validator={validator} {...props}>\n <Many2oneInput ooui={ooui} />\n </Field>\n );\n};\n\ninterface Many2oneInputProps {\n ooui: Many2oneOoui;\n value?: any[];\n onChange?: (value: any[]) => void;\n}\n\nexport const Many2oneInput: React.FC<Many2oneInputProps> = (\n props: Many2oneInputProps\n) => {\n const { value, onChange, ooui } = props;\n const {\n required,\n relation,\n readOnly,\n context,\n id: fieldName,\n domain: widgetDomain,\n } = ooui;\n const requiredStyle =\n required && !readOnly\n ? { backgroundColor: mapToken.colorPrimaryBg }\n : undefined;\n const [showSearchModal, setShowSearchModal] = useState<boolean>(false);\n const [showFormModal, setShowFormModal] = useState<boolean>(false);\n const [searching, setSearching] = useState<boolean>(false);\n const [searchText, setSearchText] = useState<string>();\n const searchButtonTappedRef = useRef<boolean>(false);\n const [inputText, setInputText] = useState<string>(\"\");\n const inputTextRef = useRef<string>();\n const formContext = useContext(FormContext) as FormContextType;\n const { domain, getValues, getFields, getContext, elementHasLostFocus } =\n formContext || {};\n const transformedDomain = useRef<any[]>([]);\n const [searchDomain, setSearchDomain] = useState<any>([]);\n\n const id = (value && value[0]) || undefined;\n const text = (value && value[1]) || \"\";\n\n useEffect(() => {\n if (!Array.isArray(value) && value) {\n fetchNameAndUpdate(value as any);\n }\n }, [value]);\n\n useEffect(() => {\n if (id && text.length === 0) {\n fetchNameAndUpdate(id);\n } else if (id && text.length > 0) {\n setInputText(text);\n } else if (!id && !text) {\n setInputText(inputTextRef.current || \"\");\n }\n }, [value]);\n\n const triggerChange = (changedValue: any[]) => {\n onChange?.(changedValue);\n elementHasLostFocus?.();\n };\n\n const onValueStringChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n inputTextRef.current = e.target.value;\n triggerChange([undefined, \"\"]);\n };\n\n const onElementLostFocus = async () => {\n if (!searching && inputText !== text) {\n // Debounce this event to give time to the search button onClick to set the flag\n await new Promise((resolve) => setTimeout(resolve, 100));\n\n // If the focus is lost because the user tapped the search button, we don't need to do nothing here\n if (searchButtonTappedRef.current) {\n triggerChange([undefined, \"\"]);\n return;\n }\n\n setSearching(true);\n\n try {\n if (transformedDomain.current && transformedDomain.current.length > 0) {\n tryFetchFirstResultOrShowSearch(inputTextRef.current as string);\n } else {\n const results: any[] =\n await ConnectionProvider.getHandler().nameSearch({\n model: relation,\n payload: inputTextRef.current as string,\n context: { ...getContext?.(), ...context },\n });\n\n if (results.length === 1) {\n inputTextRef.current = undefined;\n triggerChange(results[0]);\n } else {\n tryFetchFirstResultOrShowSearch(inputTextRef.current as string);\n }\n }\n } catch (err) {\n showErrorDialog(err);\n } finally {\n setSearching(false);\n }\n }\n };\n\n const tryFetchFirstResultOrShowSearch = async (text: string) => {\n await parseDomain();\n\n if (transformedDomain.current && transformedDomain.current.length > 0) {\n const resultIds = await ConnectionProvider.getHandler().searchAllIds({\n params: transformedDomain.current,\n model: relation,\n context: { ...getContext?.(), ...context },\n totalItems: 2,\n });\n\n if (resultIds.length === 1) {\n fetchNameAndUpdate(resultIds[0]);\n } else {\n setSearchText(text);\n setShowSearchModal(true);\n }\n return;\n }\n\n setSearchText(text);\n setShowSearchModal(true);\n };\n\n const fetchNameAndUpdate = async (id: number) => {\n setSearching(true);\n\n try {\n const value = await ConnectionProvider.getHandler().execute({\n action: \"name_get\",\n payload: [id],\n model: relation,\n context: { ...getContext?.(), ...context },\n });\n\n triggerChange([id, value[0][1]]);\n } catch (err) {\n showErrorDialog(err);\n } finally {\n setSearching(false);\n }\n };\n\n async function parseDomain() {\n if (widgetDomain) {\n transformedDomain.current =\n await ConnectionProvider.getHandler().evalDomain({\n domain: widgetDomain,\n values: transformPlainMany2Ones({\n fields: getFields(),\n values: getValues(),\n }),\n fields: getFields(),\n context: getContext(),\n });\n }\n\n if (domain && domain.length > 0) {\n transformedDomain.current = transformedDomain.current.concat(\n transformDomainForChildWidget({\n domain,\n widgetFieldName: fieldName,\n })\n );\n }\n\n setSearchDomain(transformedDomain.current);\n }\n\n async function onKeyDown(event: any) {\n if (event.keyCode === 13) {\n event.preventDefault();\n event.stopPropagation();\n await onElementLostFocus();\n } else if (event.code === \"Backspace\" && id !== undefined) {\n event.preventDefault();\n event.stopPropagation();\n triggerChange([undefined, \"\"]);\n }\n }\n\n const CustomInput: any = required && !readOnly ? RequiredInput : Input;\n\n return (\n <Row gutter={8} wrap={false}>\n <Col flex=\"auto\">\n <CustomInput\n type=\"text\"\n value={inputText}\n disabled={readOnly}\n onChange={onValueStringChange}\n style={requiredStyle}\n onBlur={onElementLostFocus}\n onKeyDown={onKeyDown}\n suffix={\n <Many2oneSuffix\n id={id}\n model={relation}\n context={{ ...getContext?.(), ...context }}\n />\n }\n />\n </Col>\n <Col flex=\"32px\" style={{ paddingRight: 0 }}>\n <Button\n icon={<FolderOpenOutlined />}\n disabled={id === undefined || text === \"\" || inputText === undefined}\n onClick={() => {\n setShowFormModal(true);\n }}\n style={{ borderTopRightRadius: 0, borderBottomRightRadius: 0 }}\n tabIndex={-1}\n />\n </Col>\n <Col flex=\"32px\" style={{ paddingLeft: 0 }}>\n <Button\n icon={searching ? <LoadingOutlined /> : <SearchOutlined />}\n disabled={readOnly || searching}\n onClick={() => {\n searchButtonTappedRef.current = true;\n tryFetchFirstResultOrShowSearch(text);\n }}\n style={{ borderTopLeftRadius: 0, borderBottomLeftRadius: 0 }}\n tabIndex={-1}\n />\n </Col>\n <SearchModal\n model={relation}\n domain={searchDomain}\n context={{ ...getContext?.(), ...context }}\n visible={showSearchModal}\n nameSearch={!id ? searchText : undefined}\n onSelectValues={(ids: number[]) => {\n setShowSearchModal(false);\n fetchNameAndUpdate(ids[0]);\n searchButtonTappedRef.current = false;\n inputTextRef.current = undefined;\n }}\n onCloseModal={() => {\n setShowSearchModal(false);\n searchButtonTappedRef.current = false;\n }}\n />\n <FormModal\n model={relation}\n parentContext={{ ...getContext?.(), ...context }}\n id={value && value[0]}\n visible={showFormModal}\n onSubmitSucceed={(id?: number) => {\n setShowFormModal(false);\n fetchNameAndUpdate(id!);\n }}\n onCancel={() => {\n setShowFormModal(false);\n }}\n mustClearAfterSave={true}\n readOnly={readOnly}\n />\n </Row>\n );\n};\n\nconst RequiredInput = styled(Input)`\n .ant-input {\n background-color: ${mapToken.colorPrimaryBg};\n }\n`;\n","import { ViewType } from \"@/types\";\nimport React, { useState } from \"react\";\n\nexport type One2manyContextType = {\n currentView: ViewType;\n setCurrentView: (view: ViewType) => void;\n itemIndex: number;\n setItemIndex: (value: number) => void;\n manualTriggerChange: boolean;\n setManualTriggerChange: (value: boolean) => void;\n};\n\nexport const One2manyContext = React.createContext<One2manyContextType | null>(\n null\n);\n\nconst One2manyProvider = ({\n children,\n initialView,\n}: {\n children: React.ReactNode;\n initialView: ViewType;\n}): any => {\n const [currentView, setCurrentView] = useState<ViewType>(initialView);\n const [itemIndex, setItemIndex] = useState<number>(0);\n const [manualTriggerChange, setManualTriggerChange] = useState<boolean>(\n false\n );\n\n return (\n <One2manyContext.Provider\n value={{\n currentView,\n setCurrentView,\n itemIndex,\n setItemIndex,\n manualTriggerChange,\n setManualTriggerChange,\n }}\n >\n {children}\n </One2manyContext.Provider>\n );\n};\n\nexport default One2manyProvider;\n","import React, { useState, useEffect } from \"react\";\nimport { LoadingOutlined } from \"@ant-design/icons\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport Title from \"antd/lib/typography/Title\";\nimport Measure from \"react-measure\";\nimport iconMapper from \"@/helpers/iconMapper\";\nimport { Alert, Col, Row } from \"antd\";\nimport { Operator } from \"@gisce/ooui\";\n\nimport { graphProcessor } from \"@gisce/ooui\";\nconst { getValueForOperator } = graphProcessor;\n\nconst fontGrowFactor = 0.7;\nconst minFontSize = 30;\n\nexport type GraphInidicatorProps = {\n model: string;\n domain: any;\n context: any;\n colorCondition?: string | null;\n totalDomain?: string;\n showPercent?: boolean;\n icon?: string;\n suffix?: string;\n field?: string;\n operator?: Operator;\n manualIds?: number[];\n};\n\nexport const GraphIndicator = (props: GraphInidicatorProps) => {\n const {\n model,\n domain,\n context,\n colorCondition,\n totalDomain,\n showPercent = false,\n icon: iconProps,\n suffix,\n field,\n operator,\n manualIds,\n } = props;\n const [loading, setLoading] = useState(false);\n const [value, setValue] = useState<number>();\n const [percent, setPercent] = useState<number>();\n const [totalValue, setTotalValue] = useState<number>();\n const [height, setHeight] = useState<number>(0);\n const [width, setWidth] = useState<number>(0);\n const [color, setColor] = useState<string>();\n const [icon, setIcon] = useState<string>();\n const [error, setError] = useState<string>();\n\n useEffect(() => {\n fetchData();\n }, [model, colorCondition]);\n\n async function fetchValue({\n domain,\n isTotal,\n }: {\n domain: any;\n isTotal: boolean;\n }) {\n if (isTotal) {\n return await fetchTotalValue({ domain });\n }\n\n if (field && operator) {\n const resultIds =\n manualIds ||\n (await ConnectionProvider.getHandler().searchAllIds({\n params: domain,\n model,\n context,\n }));\n\n const results = await ConnectionProvider.getHandler().readObjects({\n model,\n ids: resultIds,\n fieldsToRetrieve: [field],\n context,\n });\n\n return getValueForOperator({\n values: results.map((r: any) => r[field]),\n operator,\n });\n } else {\n return manualIds\n ? manualIds.length\n : await ConnectionProvider.getHandler().searchCount({\n model,\n params: domain,\n context,\n });\n }\n }\n\n async function fetchTotalValue({ domain }: { domain: any }) {\n if (field && operator) {\n const resultIds = await ConnectionProvider.getHandler().searchAllIds({\n params: domain,\n model,\n context,\n });\n\n const results = await ConnectionProvider.getHandler().readObjects({\n model,\n ids: resultIds,\n fieldsToRetrieve: [field],\n context,\n });\n\n return getValueForOperator({\n values: results.map((r: any) => r[field]),\n operator,\n });\n } else {\n return await ConnectionProvider.getHandler().searchCount({\n model,\n params: domain,\n context,\n });\n }\n }\n async function fetchData() {\n setLoading(true);\n let totalRetrievedValue;\n let percent;\n\n try {\n const retrievedValue = await fetchValue({ domain, isTotal: false });\n\n setValue(retrievedValue);\n\n if (totalDomain) {\n const parsedDomain = await ConnectionProvider.getHandler().evalDomain({\n domain: totalDomain,\n values: {},\n context,\n });\n totalRetrievedValue = await fetchValue({\n domain: parsedDomain,\n isTotal: true,\n });\n\n setTotalValue(totalRetrievedValue);\n }\n\n if (totalRetrievedValue) {\n percent =\n Math.round((retrievedValue / totalRetrievedValue) * 100 * 100) / 100;\n setPercent(percent);\n } else {\n setPercent(0);\n }\n\n if (colorCondition) {\n const conditionEval =\n await ConnectionProvider.getHandler().parseCondition({\n condition: colorCondition,\n values: { value: retrievedValue, percent },\n context,\n });\n setColor(conditionEval);\n }\n\n if (iconProps) {\n if (iconProps.indexOf(\":\") !== -1) {\n const iconEval = await ConnectionProvider.getHandler().parseCondition(\n {\n condition: iconProps,\n values: { value: retrievedValue, percent },\n context,\n }\n );\n setIcon(iconEval);\n } else {\n setIcon(iconProps);\n }\n }\n } catch (err) {\n setError(JSON.stringify(err));\n }\n\n setLoading(false);\n }\n\n if (error) {\n return <Alert className=\"mt-10\" message={error} type=\"error\" banner />;\n }\n\n if (loading) {\n return (\n <div style={{ padding: \"1rem\" }}>\n <LoadingOutlined style={{ height: \"12px\" }} />\n </div>\n );\n }\n\n return (\n <Measure\n bounds\n onResize={(contentRect) => {\n setHeight(contentRect.bounds?.height!);\n setWidth(contentRect.bounds?.width!);\n }}\n >\n {({ measureRef }) => {\n if (showPercent) {\n return (\n <PercentageIndicator\n value={value!}\n total={totalValue!}\n percent={percent!}\n measureRef={measureRef}\n height={height}\n width={width}\n color={color}\n icon={icon}\n suffix={suffix}\n />\n );\n } else {\n return (\n <CommonIndicator\n value={value!}\n total={totalValue}\n measureRef={measureRef}\n height={height}\n width={width}\n color={color}\n icon={icon}\n suffix={suffix}\n />\n );\n }\n }}\n </Measure>\n );\n};\n\nfunction getTextWidth(text: string, font: string) {\n const canvas = document.createElement(\"canvas\");\n const context = canvas.getContext(\"2d\");\n\n context!.font = font || getComputedStyle(document.body).font;\n return context!.measureText(text).width;\n}\n\nfunction CommonIndicator({\n measureRef,\n width,\n height,\n total,\n value,\n color,\n icon,\n suffix,\n}: {\n measureRef: any;\n width: number;\n height: number;\n total: number | undefined;\n value: number;\n color: string | undefined;\n icon?: string;\n suffix?: string;\n}) {\n let fontSize =\n height * fontGrowFactor < minFontSize\n ? minFontSize\n : height * fontGrowFactor;\n\n const localeValue = value?.toLocaleString(\"es-ES\", {\n useGrouping: true,\n });\n\n let finalValue = total ? `${localeValue}/${total}` : `${localeValue}`;\n\n if (suffix) {\n finalValue += \" \" + suffix;\n }\n\n let tw = getTextWidth(\n finalValue,\n `bold ${Math.floor(fontSize * 1.03)}px sans-serif`\n );\n\n if (icon) {\n tw = tw * 2;\n }\n\n if (tw >= width * 0.85) {\n const maxFontSize = ((width * 0.85) / tw) * fontSize;\n fontSize = maxFontSize;\n }\n\n const IconElement: any = icon && iconMapper(icon, {style: {fontSize: fontSize * 0.7}});\n\n return (\n <div\n ref={measureRef}\n style={{\n width: \"100%\",\n height: \"100%\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n overflow: \"hidden\",\n }}\n >\n <Title style={{ fontSize, margin: 0, color }}>\n {IconElement && <IconElement style={{ fontSize: fontSize * 0.7 }} />}\n {IconElement ? ` ${finalValue}` : finalValue}\n </Title>\n </div>\n );\n}\n\nfunction PercentageIndicator({\n measureRef,\n height,\n width,\n percent,\n total,\n value,\n color,\n icon,\n suffix,\n}: {\n measureRef: any;\n height: number;\n width: number;\n percent: number;\n total: number;\n value: number;\n color: string | undefined;\n icon?: string;\n suffix?: string;\n}) {\n const twoLinesHeight = height * 0.65;\n let fontSize =\n twoLinesHeight * fontGrowFactor < minFontSize\n ? minFontSize\n : twoLinesHeight * fontGrowFactor;\n\n const localeValue = value?.toLocaleString(\"es-ES\", {\n useGrouping: true,\n });\n\n let finalValue = total\n ? `${localeValue}/${total?.toLocaleString(\"es-ES\", {\n useGrouping: true,\n })}`\n : `${localeValue}`;\n\n if (suffix) {\n finalValue += \" \" + suffix;\n }\n\n const percentValue = `${percent?.toLocaleString(\"es-ES\", {\n useGrouping: true,\n })}%`;\n\n let tw = getTextWidth(\n percentValue,\n `bold ${Math.floor(fontSize * 1.03)}px sans-serif`\n );\n\n if (icon) {\n tw = tw * 1.5;\n }\n\n if (tw >= width * 0.85 || fontSize * 2 < twoLinesHeight) {\n const maxFontSize = ((width * 0.85) / tw) * fontSize;\n fontSize = maxFontSize;\n }\n\n const IconElement: any = icon && iconMapper(icon, {style: {fontSize}});\n\n return (\n <div\n ref={measureRef}\n style={{\n width: \"100%\",\n height: \"100%\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n overflow: \"hidden\",\n flexDirection: \"column\",\n padding: \"0.2rem\",\n }}\n >\n <Row align={\"middle\"}>\n {IconElement && (\n <Col style={{ fontSize: fontSize * 1, color, paddingRight: \"10px\" }}>\n <IconElement />\n </Col>\n )}\n <Col>\n <Title style={{ fontSize: fontSize * 0.8, margin: 0, color }}>\n {IconElement ? ` ${percent}%` : `${percent}%`}\n </Title>\n <Title\n style={{\n fontSize: fontSize * 0.4,\n margin: 0,\n color,\n textAlign: \"center\",\n }}\n >\n {finalValue}\n </Title>\n </Col>\n </Row>\n </div>\n );\n}\n","import dayjs from \"dayjs\";\n\nconst formatter = (graphType: \"pie\" | \"default\" | \"barGrouped\") => {\n return (object: any) => {\n const formattedValue = object.value.toLocaleString(\"es-ES\", {\n useGrouping: true,\n });\n const name = graphType === \"pie\" ? object.x : object.type;\n return { name, value: formattedValue };\n };\n};\n\nconst axisFormatter = (value: any) => {\n if (typeof value === \"string\" && stringIsValidNumeric(value)) {\n return parseFloat(value).toLocaleString(\"es-ES\", {\n useGrouping: true,\n });\n } else if (isNumber(value)) {\n return value.toLocaleString(\"es-ES\", {\n useGrouping: true,\n });\n } else if (isValidDateString(value)) {\n const dateType = getDateType(value);\n if (dateType === null) {\n return value;\n }\n return dayjs(value, (dateFormats.input as any)[dateType]).format(\n (dateFormats.output as any)[dateType]\n );\n } else {\n return value;\n }\n};\n\nconst stringIsValidNumeric = (value: string) => {\n const regex = /^[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?$/;\n return regex.test(value);\n};\n\nconst isNumber = (value: any) => {\n return typeof value === \"number\" && !isNaN(value);\n};\n\nconst DefaultGraphOptions = {\n default: {\n padding: \"auto\",\n xAxis: {\n tickCount: 5,\n label: {\n formatter: axisFormatter,\n },\n },\n yAxis: {\n label: {\n formatter: axisFormatter,\n },\n },\n legend: {\n maxWidthRatio: 0.5,\n maxItemWidth: 1000,\n },\n tooltip: {\n formatter: formatter(\"default\"),\n },\n },\n pie: {\n appendPadding: 10,\n radius: 0.9,\n label: {\n type: \"inner\",\n offset: \"-30%\",\n content: ({ percent }: any) => `${(percent * 100).toFixed(0)}%`,\n style: {\n fontSize: 14,\n textAlign: \"center\",\n },\n },\n legend: {\n maxWidthRatio: 0.5,\n maxItemWidth: 1000,\n },\n tooltip: {\n formatter: formatter(\"pie\"),\n },\n interactions: [\n {\n type: \"element-active\",\n },\n ],\n },\n barGrouped: {\n isGroup: true,\n legend: {\n maxWidthRatio: 0.5,\n maxItemWidth: 1000,\n },\n tooltip: {\n formatter: formatter(\"barGrouped\"),\n },\n xAxis: {\n label: {\n formatter: axisFormatter,\n },\n },\n yAxis: {\n label: {\n formatter: axisFormatter,\n },\n },\n label: {\n position: \"middle\",\n layout: [\n {\n type: \"interval-adjust-position\",\n },\n {\n type: \"interval-hide-overlap\",\n },\n {\n type: \"adjust-color\",\n },\n ],\n },\n },\n};\n\nfunction isValidDateString(variable: any): boolean {\n // Check if the variable is defined and is a string\n if (typeof variable !== \"string\" || variable === undefined) {\n return false;\n }\n\n // Check if the string is a valid date\n const date = new Date(variable);\n return date.toString() !== \"Invalid Date\";\n}\n\nconst dateFormats = {\n input: {\n hours: \"YYYY-MM-DD HH:mm\",\n days: \"YYYY-MM-DD\",\n weeks: \"YYYY-[W]WW\",\n months: \"YYYY-MM\",\n years: \"YYYY\",\n },\n output: {\n hours: \"DD/MM/YYYY HH:mm\",\n days: \"DD/MM/YYYY\",\n weeks: \"[W]WW/YYYY\",\n months: \"MM/YYYY\",\n years: \"YYYY\",\n },\n};\n\nfunction getDateType(dateString: string): string | null {\n for (const format in dateFormats.input) {\n const isValidFormat = dayjs(\n dateString,\n (dateFormats.input as any)[format],\n true\n ).isValid();\n if (isValidFormat) {\n return format;\n }\n }\n\n return null;\n}\n\nexport default DefaultGraphOptions;\n","import { useState } from \"react\";\nimport {\n parseGraph,\n GraphChart as GraphChartOoui,\n graphProcessor,\n graphFieldUtils,\n GraphType,\n} from \"@gisce/ooui\";\nimport useDeepCompareEffect from \"use-deep-compare-effect\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\n\nconst { processGraphData } = graphProcessor;\nconst { getFieldsToRetrieve } = graphFieldUtils;\n\nexport type GraphDataQueryOpts = {\n model: string;\n domain?: any;\n context?: any;\n limit?: number;\n manualIds?: number[];\n};\n\nexport type GraphDataOpts = GraphDataQueryOpts & {\n xml: string;\n uninformedString: string;\n};\n\nexport const useGraphData = (opts: GraphDataOpts) => {\n const {\n model,\n domain = [],\n context = {},\n xml,\n limit,\n uninformedString,\n manualIds,\n } = opts;\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<any>();\n const [processedValues, setProcessedValues] = useState<any>();\n const [evaluatedEntries, setEvaluatedEntries] = useState<any[]>();\n const [type, setType] = useState<GraphType>(\"line\");\n\n useDeepCompareEffect(() => {\n (async () => {\n setLoading(true);\n setError(undefined);\n\n // // First we parse the xml with ooui library\n const ooui = parseGraph(xml) as GraphChartOoui;\n setType(ooui.type || \"line\");\n\n // // Then we fetch the data\n const fieldsToRetrieve = getFieldsToRetrieve({ ooui });\n let values, fields;\n\n try {\n // Use connection provider or whatever service you need to use\n ({ values, fields } = await retrieveData({\n model,\n domain,\n context,\n limit,\n order: ooui.timerange ? ooui.x.name : null,\n fields: fieldsToRetrieve,\n manualIds,\n }));\n } catch (e) {\n setError(\"Error fetching graph data values: \" + JSON.stringify(e));\n setLoading(false);\n return;\n }\n\n try {\n if (!values || !fields) {\n setError(\"No values or fields returned\");\n setLoading(false);\n return;\n }\n\n setEvaluatedEntries(values);\n const _processedValues = processGraphData({\n ooui,\n values,\n fields,\n options: {\n uninformedString,\n },\n });\n setProcessedValues(_processedValues);\n } catch (e) {\n setError(\"Error processing graph data: \" + e);\n setLoading(false);\n return;\n }\n\n setLoading(false);\n })();\n }, [xml, model, limit, context, domain]);\n\n return {\n loading,\n error,\n type,\n values: processedValues,\n evaluatedEntries,\n };\n};\n\nasync function getFieldsForModel({\n model,\n context,\n fields,\n}: {\n model: string;\n context: any;\n fields: string[];\n}) {\n const viewData = await ConnectionProvider.getHandler().getFields({\n model,\n context,\n fields,\n });\n return viewData;\n}\n\nasync function retrieveData({\n fields,\n model,\n domain,\n context,\n order,\n limit,\n manualIds,\n}: {\n fields: string[];\n model: string;\n domain: any;\n context: any;\n order: string | null;\n limit?: number;\n manualIds?: number[];\n}) {\n const fieldsDefinition = await getFieldsForModel({ model, context, fields });\n\n if (manualIds) {\n let values: any[] = (await ConnectionProvider.getHandler().readObjects({\n model,\n ids: manualIds,\n fieldsToRetrieve: fields,\n context,\n })) as any;\n\n if (order) {\n values = [...values].sort((a, b) => a[order] - b[order]);\n }\n\n return {\n values,\n fields: fieldsDefinition,\n };\n }\n\n const values: any[] = (await ConnectionProvider.getHandler().search({\n model,\n params: domain,\n fields,\n context,\n limit,\n order,\n })) as any;\n return {\n values,\n fields: fieldsDefinition,\n };\n}\n","import React, { useContext } from \"react\";\nimport { Line, Column, Pie } from \"@ant-design/plots\";\nimport GraphDefaults from \"./GraphDefaults\";\nimport { useGraphData } from \"./useGraphData\";\nimport { Alert, Spin } from \"antd\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\nconst types = {\n line: Line,\n bar: Column,\n pie: Pie,\n};\n\nexport type GraphChartProps = {\n model: string;\n domain: any;\n context: any;\n xml: string;\n limit?: number;\n manualIds?: number[];\n};\n\nexport const GraphChart = (props: GraphChartProps) => {\n const { model, domain, context, xml, limit, manualIds } = props;\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n const { error, loading, values, type, evaluatedEntries } = useGraphData({\n model,\n xml,\n limit,\n domain,\n context,\n uninformedString: t(\"uninformed\"),\n manualIds,\n });\n\n if (error) {\n return <Alert message={error} type=\"error\" banner />;\n }\n\n if (loading) {\n return <Spin />;\n }\n\n if (!values) {\n return <Alert message=\"No data to display\" type=\"info\" />;\n }\n\n const { data, isGroup, isStack } = values;\n\n const Chart = (types as any)[type!];\n\n if (!Chart) {\n return <>{`Unknown graph type: ${type}`}</>;\n }\n\n return (\n <div style={{ padding: \"1rem\" }}>\n <p style={{ textAlign: \"right\" }}>\n {`${t(\"totalRegisters\")} ${evaluatedEntries?.length?.toLocaleString(\n \"es-ES\",\n {\n useGrouping: true,\n }\n )}`}\n </p>\n <Chart\n {...getGraphProps({\n type,\n data,\n isGroup,\n isStack,\n })}\n />\n </div>\n );\n};\n\ntype GetGraphPropsType = {\n type: string;\n isStack: boolean;\n isGroup: boolean;\n data: any[];\n};\n\nfunction getGraphProps(props: GetGraphPropsType) {\n const { type, data, isGroup, isStack } = props;\n let graphProps = (GraphDefaults as any)[type];\n\n if (!graphProps) {\n graphProps = (GraphDefaults as any)[\"default\"];\n }\n\n graphProps.data = data;\n\n if (type === \"pie\") {\n graphProps.colorField = \"x\";\n graphProps.angleField = \"value\";\n } else {\n graphProps.xField = \"x\";\n graphProps.yField = \"value\";\n graphProps.seriesField = \"type\";\n\n graphProps.isGroup = isGroup;\n\n if (isStack) {\n graphProps.isStack = true;\n graphProps.groupField = \"stacked\";\n }\n }\n\n return graphProps;\n}\n","import React, {\n useState,\n useEffect,\n useContext,\n forwardRef,\n useImperativeHandle,\n} from \"react\";\nimport {\n Graph as GraphOoui,\n parseGraph,\n GraphIndicator as GraphIndicatorOoui,\n GraphIndicatorField,\n} from \"@gisce/ooui\";\nimport { LoadingOutlined } from \"@ant-design/icons\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport { GraphIndicator } from \"./GraphIndicator\";\nimport { GraphChart } from \"./GraphChart\";\nimport { GraphView } from \"@/types\";\nimport {\n ActionViewContext,\n ActionViewContextType,\n} from \"@/context/ActionViewContext\";\n\nexport type GraphProps = {\n view_id: number;\n model: string;\n domain: any;\n context: any;\n limit?: number;\n manualIds?: number[];\n};\n\nconst GraphComp = (props: GraphProps, ref: any) => {\n const { view_id, model, context, domain, limit, manualIds } = props;\n const [loading, setLoading] = useState(false);\n const [graphOoui, setGraphOoui] = useState<GraphOoui>();\n const [graphXml, setGraphXml] = useState<string>();\n const actionViewContext = useContext(\n ActionViewContext\n ) as ActionViewContextType;\n const { setGraphIsLoading = undefined } = actionViewContext || {};\n\n useImperativeHandle(ref, () => ({\n refresh: () => {\n fetchData();\n },\n }));\n\n useEffect(() => {\n fetchData();\n }, [view_id]);\n\n async function fetchData() {\n setLoading(true);\n setGraphIsLoading?.(true);\n\n try {\n const viewData = (await ConnectionProvider.getHandler().getView({\n model,\n id: view_id,\n type: \"graph\",\n context,\n })) as GraphView;\n\n setGraphXml(viewData.arch);\n const graph = parseGraph(viewData.arch);\n setGraphOoui(graph);\n } catch (err) {\n console.error(err);\n return <>{JSON.stringify(err)}</>;\n }\n\n setLoading(false);\n setGraphIsLoading?.(false);\n }\n\n if (loading) {\n return (\n <div\n style={{\n width: \"100%\",\n display: \"flex\",\n height: \"20%\",\n justifyContent: \"center\",\n alignContent: \"center\",\n padding: \"1rem\",\n }}\n >\n <LoadingOutlined style={{ height: \"12px\" }} />\n </div>\n );\n }\n\n if (!graphOoui) {\n return null;\n }\n\n switch (graphOoui.type) {\n case \"indicatorField\":\n case \"indicator\": {\n const indicator = graphOoui as GraphIndicatorOoui;\n const indicatorFieldopts =\n indicator.type === \"indicatorField\"\n ? {\n field: (indicator as GraphIndicatorField).field,\n operator: (indicator as GraphIndicatorField).operator,\n }\n : {};\n\n return (\n <GraphIndicator\n showPercent={indicator.showPercent}\n totalDomain={indicator.totalDomain!}\n colorCondition={indicator.color}\n model={model}\n context={context}\n domain={domain}\n icon={indicator.icon!}\n suffix={indicator.suffix!}\n manualIds={manualIds}\n {...indicatorFieldopts}\n />\n );\n }\n case \"line\":\n case \"bar\":\n case \"pie\": {\n return (\n <GraphChart\n model={model}\n context={context}\n domain={domain}\n xml={graphXml!}\n limit={limit}\n manualIds={manualIds}\n />\n );\n }\n default: {\n return <>{`Graph ${graphOoui.type} not implemented`}</>;\n }\n }\n};\n\nexport const Graph = forwardRef(GraphComp);\n","import React from \"react\";\nimport { Modal } from \"antd\";\nimport { ExclamationCircleOutlined } from \"@ant-design/icons\";\nimport { tForLang } from \"@/context/LocaleContext\";\n\nconst { confirm } = Modal;\n\nconst showDialog = ({ onOk, lang }: { onOk: () => void; lang: string }) => {\n confirm({\n title: tForLang(\"removeItems\", lang),\n icon: <ExclamationCircleOutlined />,\n centered: true,\n content: tForLang(\"confirmRemove\", lang),\n okText: tForLang(\"yesConfirmRemove\", lang),\n onOk,\n cancelText: tForLang(\"cancel\", lang),\n });\n};\n\nexport default showDialog;\n","import React from \"react\";\nimport { Modal } from \"antd\";\nimport { ExclamationCircleOutlined } from \"@ant-design/icons\";\nimport { tForLang } from \"@/context/LocaleContext\";\n\nconst { confirm } = Modal;\n\nconst showDialog = ({ onOk, lang }: { onOk: () => void; lang: string }) => {\n confirm({\n title: tForLang(\"unlinkItems\", lang),\n icon: <ExclamationCircleOutlined />,\n centered: true,\n content: tForLang(\"confirmUnlink\", lang),\n okText: tForLang(\"yesConfirmUnlink\", lang),\n onOk,\n cancelText: tForLang(\"cancel\", lang),\n });\n};\n\nexport default showDialog;\n","import React from \"react\";\nimport ButtonWithTooltip from \"@/common/ButtonWithTooltip\";\n\nimport {\n FileAddOutlined,\n DeleteOutlined,\n LeftOutlined,\n RightOutlined,\n AlignLeftOutlined,\n SearchOutlined,\n ApiOutlined,\n} from \"@ant-design/icons\";\nimport { ViewType } from \"@/types\";\nimport { theme } from \"antd\";\nconst { useToken } = theme;\n\ntype One2manyTopBarProps = {\n title: string;\n mode: ViewType;\n isMany2Many: boolean;\n readOnly: boolean;\n formHasChanges: boolean;\n onToggleViewMode: () => void;\n onCreateItem: () => void;\n onDelete: () => void;\n totalItems: number;\n currentItemIndex: number;\n onPreviousItem: () => void;\n onNextItem: () => void;\n onSearchItem: () => void;\n selectedRowKeys: string[];\n showToggleButton: boolean;\n showCreateButton: boolean;\n};\n\nexport const One2manyTopBar = (props: One2manyTopBarProps) => {\n const {\n title: titleString,\n readOnly,\n onCreateItem,\n onToggleViewMode,\n mode,\n onDelete,\n totalItems,\n currentItemIndex,\n onPreviousItem,\n onNextItem,\n isMany2Many,\n onSearchItem,\n selectedRowKeys,\n showCreateButton,\n showToggleButton,\n } = props;\n const { token } = useToken();\n\n function separator() {\n return <div className=\"inline-block w-3\" />;\n }\n\n function title() {\n return (\n <div\n className=\"flex flex-grow h-8 text-white\"\n style={{\n borderRadius: token.borderRadius,\n backgroundColor: token.colorPrimaryActive,\n }}\n >\n <div className=\"flex flex-col items-center justify-center h-full\">\n <span className=\"pl-2 font-bold\">{titleString}</span>\n </div>\n </div>\n );\n }\n\n function deleteButton() {\n return (\n <ButtonWithTooltip\n tooltip={isMany2Many ? \"Unlink\" : \"Delete\"}\n icon={isMany2Many ? <ApiOutlined /> : <DeleteOutlined />}\n onClick={onDelete}\n disabled={\n totalItems === 0 ||\n readOnly ||\n (mode !== \"form\" && selectedRowKeys.length === 0)\n }\n />\n );\n }\n\n function index() {\n let itemToShow = \"_\";\n if (totalItems === 0) {\n itemToShow = \"_\";\n } else {\n itemToShow = (currentItemIndex + 1).toString();\n }\n return (\n <span className=\"pl-1 pr-1\">\n ({itemToShow}/{totalItems})\n </span>\n );\n }\n\n function itemBrowser() {\n return (\n <>\n {separator()}\n <ButtonWithTooltip\n tooltip={\"Previous item\"}\n icon={<LeftOutlined />}\n onClick={onPreviousItem}\n />\n {index()}\n <ButtonWithTooltip\n tooltip={\"Next item\"}\n icon={<RightOutlined />}\n onClick={onNextItem}\n />\n </>\n );\n }\n\n return (\n <div className=\"flex mb-2\">\n {title()}\n <div className=\"flex-none h-8 pl-2\">\n {mode !== \"graph\" && showCreateButton && (\n <ButtonWithTooltip\n tooltip={\"Create new item\"}\n icon={<FileAddOutlined />}\n disabled={readOnly}\n onClick={onCreateItem}\n />\n )}\n {isMany2Many && showCreateButton && (\n <ButtonWithTooltip\n tooltip={\"Search existing item\"}\n icon={<SearchOutlined />}\n disabled={readOnly}\n onClick={onSearchItem}\n />\n )}\n {mode !== \"graph\" && separator()}\n {mode !== \"graph\" && deleteButton()}\n {mode === \"form\" && itemBrowser()}\n {separator()}\n {showToggleButton && (\n <ButtonWithTooltip\n tooltip={\"Toggle view mode\"}\n icon={<AlignLeftOutlined />}\n onClick={onToggleViewMode}\n />\n )}\n </div>\n </div>\n );\n};\n","import React, {\n useState,\n useRef,\n useContext,\n useEffect,\n useCallback,\n} from \"react\";\nimport { One2many as One2manyOoui } from \"@gisce/ooui\";\nimport { Alert, Spin } from \"antd\";\nimport { Form } from \"@/index\";\nimport { Tree } from \"@/index\";\nimport { Graph } from \"@/widgets/views/Graph/Graph\";\nimport {\n Form as FormOoui,\n Tree as TreeOoui,\n parseGraph,\n transformDomainForChildWidget,\n} from \"@gisce/ooui\";\nimport { Views, ViewType } from \"@/types\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport { FormModal } from \"@/widgets/modals/FormModal\";\nimport showUnsavedChangesDialog from \"@/ui/UnsavedChangesDialog\";\nimport showRemoveItemDialog from \"@/ui/RemoveItemDialog\";\nimport showUnlinkItemDialog from \"@/ui/UnlinkItemDialog\";\nimport {\n One2manyContext,\n One2manyContextType,\n} from \"@/context/One2manyContext\";\nimport { FormContext, FormContextType } from \"@/context/FormContext\";\nimport { One2manyTopBar } from \"@/widgets/base/one2many/One2manyTopBar\";\nimport { readObjectValues, getNextPendingId } from \"@/helpers/one2manyHelper\";\nimport { SearchModal } from \"@/widgets/modals/SearchModal\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport { getColorMap, getTree, sortResults } from \"@/helpers/treeHelper\";\nimport { transformPlainMany2Ones } from \"@/helpers/formHelper\";\n\ntype One2manyValue = {\n fields?: any;\n items: Array<One2manyItem>;\n};\n\nconst ViewObjects = {\n form: FormOoui,\n tree: TreeOoui,\n graph: Graph,\n};\n\ntype One2manyItem = {\n operation?:\n | \"original\"\n | \"pendingRemove\"\n | \"pendingUpdate\"\n | \"pendingCreate\"\n | \"pendingLink\";\n id?: number;\n values?: any;\n treeValues?: any;\n defaultValues?: any;\n};\n\ninterface One2manyInputProps {\n ooui: One2manyOoui;\n value?: One2manyValue;\n onChange?: (value: One2manyValue) => void;\n views: Views;\n}\n\nfunction filterDuplicateItems(items: any) {\n const ids = items.map((o: any) => o.id);\n const filtered = items.filter((item: any, index: number) => {\n const { id } = item;\n return !ids.includes(id, index + 1);\n });\n return filtered;\n}\n\nconst One2manyInput: React.FC<One2manyInputProps> = (\n props: One2manyInputProps\n) => {\n const { value, onChange, ooui, views } = props;\n const { items = [] } = value || {};\n\n const { currentView, setCurrentView, itemIndex, setItemIndex } = useContext(\n One2manyContext\n ) as One2manyContextType;\n\n const formContext = useContext(FormContext) as FormContextType;\n const { activeId, getFields, getValues, getContext, domain } =\n formContext || {};\n const { lang, t } = useContext(LocaleContext) as LocaleContextType;\n\n const [formHasChanges, setFormHasChanges] = useState<boolean>(false);\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [error, setError] = useState<string>();\n const [showFormModal, setShowFormModal] = useState<boolean>(false);\n const [showSearchModal, setShowSearchModal] = useState<boolean>(false);\n const [modalItem, setModalItem] = useState<One2manyItem>();\n const [selectedRowKeys, setSelectedRowKeys] = useState<any[]>([]);\n const [continuousEntryMode, setContinuousEntryMode] =\n useState<boolean>(false);\n const transformedDomain = useRef<any[]>([]);\n const [sorter, setSorter] = useState<any>();\n const originalSortItemIds = useRef<number[]>();\n const [colorsForResults, setColorsForResults] = useState<any>(undefined);\n\n const {\n readOnly,\n relation,\n context,\n domain: widgetDomain,\n } = ooui as One2manyOoui;\n const isMany2many = ooui.type === \"many2many\";\n const { id: fieldName } = ooui;\n const itemsToShow = items.filter(\n (item) =>\n (item.values || item.treeValues) && item.operation !== \"pendingRemove\"\n );\n const previousCurrentView = useRef<ViewType>();\n\n useEffect(() => {\n if (previousCurrentView.current !== currentView) {\n previousCurrentView.current = currentView;\n fetchDataIfNeeded();\n return;\n }\n\n fetchDataIfNeeded();\n }, [items, currentView]);\n\n const fetchDataIfNeeded = useCallback(() => {\n if (currentView === \"form\" && items.some((item) => !item.values)) {\n fetchData();\n } else if (\n currentView === \"tree\" &&\n items.some((item) => !item.treeValues)\n ) {\n fetchData();\n }\n }, [items, currentView]);\n\n useEffect(() => {\n parseDomain();\n }, [domain]);\n\n const triggerChange = (changedValue: Array<One2manyItem>) => {\n onChange?.({\n fields: views.get(\"form\")?.fields || views.get(\"tree\")?.fields,\n items: filterDuplicateItems(changedValue),\n });\n };\n\n const fetchData = async () => {\n await fetchOriginalItemsFromApi();\n if (itemIndex > itemsToShow.length - 1 && itemIndex !== 0) {\n setItemIndex(0);\n }\n };\n\n const fetchOriginalItemsFromApi = async (mode?: ViewType) => {\n setIsLoading(true);\n setFormHasChanges(false);\n setError(undefined);\n\n try {\n const [itemsWithValues, evaluatedColorsForTree] = await readObjectValues({\n treeView: {\n arch: views.get(\"tree\")?.arch,\n fields: views.get(\"tree\")?.fields,\n },\n formView: {\n fields: views.get(\"form\")?.fields || {},\n },\n model: relation,\n items,\n context: { ...getContext?.(), ...context },\n currentView: mode || currentView,\n });\n\n if (!originalSortItemIds.current) {\n originalSortItemIds.current = itemsWithValues.map((item) => item.id!);\n }\n\n if ((currentView || mode) === \"tree\" && evaluatedColorsForTree) {\n setColorsForResults(evaluatedColorsForTree);\n }\n\n triggerChange(itemsWithValues);\n return itemsWithValues;\n } catch (err) {\n setError(err as any);\n } finally {\n setIsLoading(false);\n }\n };\n\n async function parseDomain() {\n if (widgetDomain) {\n transformedDomain.current =\n await ConnectionProvider.getHandler().evalDomain({\n domain: widgetDomain,\n values: transformPlainMany2Ones({\n fields: getFields(),\n values: getValues(),\n }),\n fields: getFields(),\n context: getContext(),\n });\n }\n\n if (domain && domain.length > 0) {\n transformedDomain.current = transformedDomain.current.concat(\n transformDomainForChildWidget({\n domain,\n widgetFieldName: fieldName,\n })\n );\n }\n }\n\n const toggleViewMode = () => {\n const keys = Array.from(views.keys());\n const nextView = keys[\n (keys.indexOf(currentView) + 1) % keys.length\n ] as ViewType;\n if (currentView === \"form\") {\n showFormChangesDialogIfNeeded(() => {\n setCurrentView(nextView);\n });\n } else {\n setCurrentView(nextView);\n }\n };\n\n const previousItem = () => {\n if (itemIndex > 0) {\n if (currentView === \"form\") {\n showFormChangesDialogIfNeeded(() => {\n setItemIndex(itemIndex - 1);\n });\n } else {\n setItemIndex(itemIndex - 1);\n }\n }\n };\n\n const nextItem = () => {\n const totalItems = itemsToShow.length;\n if (itemIndex < totalItems - 1) {\n if (currentView === \"form\") {\n showFormChangesDialogIfNeeded(() => {\n setItemIndex(itemIndex + 1);\n });\n } else {\n setItemIndex(itemIndex + 1);\n }\n }\n };\n\n const reloadOriginalValuesForFormItem = async () => {\n const currentId = itemsToShow[itemIndex].id!;\n\n const updatedFormObject = (\n await ConnectionProvider.getHandler().readObjects({\n model: relation,\n ids: [currentId],\n fields: views.get(\"form\").fields,\n context: { ...getContext?.(), ...context },\n })\n )[0];\n const updatedTreeObject = (\n await ConnectionProvider.getHandler().readObjects({\n model: relation,\n ids: [currentId],\n fields: views.get(\"tree\").fields,\n context: { ...getContext?.(), ...context },\n })\n )[0];\n\n const updatedItems: One2manyItem[] = items.map((item) => {\n if (item.id === currentId) {\n return {\n ...item,\n operation: \"original\",\n values: updatedFormObject,\n treeValues: updatedTreeObject,\n };\n }\n return item;\n });\n\n triggerChange(updatedItems);\n };\n\n const showFormChangesDialogIfNeeded = (callback: () => void) => {\n if (formHasChanges) {\n showUnsavedChangesDialog({\n lang,\n onOk: () => {\n reloadOriginalValuesForFormItem();\n callback();\n setFormHasChanges(false);\n },\n });\n } else {\n callback();\n }\n };\n\n const showRemoveConfirm = () => {\n if (isMany2many) {\n showUnlinkItemDialog({\n lang,\n onOk: () => {\n if (currentView === \"form\") {\n removeCurrentItem();\n } else {\n removeSelectedItems();\n }\n },\n });\n return;\n }\n\n showRemoveItemDialog({\n lang,\n onOk: () => {\n if (currentView === \"form\") {\n removeCurrentItem();\n } else {\n removeSelectedItems();\n }\n },\n });\n };\n\n const createItem = async () => {\n const { inv_field } = ooui;\n let defaultValues: any;\n\n if (inv_field && activeId) {\n defaultValues = { [inv_field]: activeId };\n }\n\n if (currentView === \"form\") {\n showFormChangesDialogIfNeeded(() => {\n setContinuousEntryMode(true);\n setModalItem({ defaultValues });\n setShowFormModal(true);\n });\n } else {\n setContinuousEntryMode(true);\n setModalItem({ defaultValues });\n setShowFormModal(true);\n }\n };\n\n const searchItem = async () => {\n if (currentView === \"form\") {\n showFormChangesDialogIfNeeded(() => {\n setShowSearchModal(true);\n });\n } else {\n setShowSearchModal(true);\n }\n };\n\n const removeCurrentItem = async () => {\n setIsLoading(true);\n setFormHasChanges(false);\n setError(undefined);\n\n try {\n if (itemsToShow[itemIndex].id! > 0) {\n const updatedItems = items.map((item) => {\n if (item.id === itemsToShow[itemIndex].id!) {\n return {\n ...item,\n operation: \"pendingRemove\",\n } as One2manyItem;\n } else {\n return item;\n }\n });\n triggerChange(updatedItems);\n } else {\n triggerChange(\n items.filter((item) => item.id !== itemsToShow[itemIndex].id!)\n );\n }\n } catch (err) {\n setError(err as any);\n }\n\n setItemIndex(0);\n setIsLoading(false);\n };\n\n const removeSelectedItems = async () => {\n const itemsToRemove = itemsToShow.filter((item) => {\n return selectedRowKeys.includes(item.id);\n });\n\n setIsLoading(true);\n setFormHasChanges(false);\n setError(undefined);\n\n try {\n const idsToRemove: number[] = itemsToRemove.map((item) => item.id!);\n\n const updatedItems = items\n .filter((item) => {\n if (idsToRemove.includes(item.id!) && item.id! < 0) {\n return false;\n }\n return true;\n })\n .map((item) => {\n if (idsToRemove.includes(item.id!)) {\n return {\n ...item,\n operation: \"pendingRemove\",\n } as One2manyItem;\n } else {\n return item;\n }\n });\n triggerChange(updatedItems);\n } catch (err) {\n setError(err as any);\n }\n\n setItemIndex(0);\n setIsLoading(false);\n };\n\n // This is the callback called when a modal is done creating/updating the object\n const onFormModalSubmitSucceed = (\n id: number | undefined,\n _: any,\n values: any,\n x2manyPendingLink: boolean = false\n ) => {\n let updatedItems: One2manyItem[];\n\n if (x2manyPendingLink) {\n updatedItems = items.concat({\n id,\n operation: \"pendingLink\",\n values: { ...values, id },\n treeValues: { ...values, id },\n });\n } else if (id) {\n updatedItems = items.map((item: One2manyItem) => {\n if (item.id === id) {\n return {\n id,\n operation: id > 0 ? \"pendingUpdate\" : \"pendingCreate\",\n values: { ...values, id },\n treeValues: { ...values, id },\n };\n }\n return item;\n });\n } else {\n const nextId = getNextPendingId(items);\n updatedItems = items.concat({\n id: nextId,\n operation: \"pendingCreate\",\n values: { ...values, id: nextId },\n treeValues: { ...values, id: nextId },\n });\n }\n\n triggerChange(updatedItems);\n\n if (!continuousEntryMode) {\n setShowFormModal(false);\n }\n };\n\n const onTreeRowClicked = async (record: any) => {\n const { id: itemId } = record;\n\n let itemsToLoadFrom: One2manyItem[] | undefined = items;\n\n // We should fetch the form data if needed in order to get the form values\n const modalItem = items.find((item) => item.id === itemId);\n if (modalItem?.values === undefined) {\n itemsToLoadFrom = await fetchOriginalItemsFromApi(\"form\");\n }\n\n // We show the detail for the clicked item in a Form modal\n setModalItem(itemsToLoadFrom!.find((item) => item.id === itemId));\n setContinuousEntryMode(false);\n setShowFormModal(true);\n };\n\n const onSearchModalSelectValue = async (ids: number[]) => {\n setIsLoading(true);\n\n let updatedItems = items;\n const filteredIds = ids.filter((id) => {\n return !items.find((item) => item.id === id);\n });\n\n try {\n for (const id of filteredIds) {\n const updatedFormObject = (\n await ConnectionProvider.getHandler().readObjects({\n model: relation,\n ids: [id],\n fields: views.get(\"form\").fields,\n context: { ...getContext?.(), ...context },\n })\n )[0];\n const updatedTreeObject = (\n await ConnectionProvider.getHandler().readObjects({\n model: relation,\n ids: [id],\n fields: views.get(\"tree\").fields,\n context: { ...getContext?.(), ...context },\n })\n )[0];\n updatedItems.push({\n id,\n operation: \"pendingLink\",\n values: updatedFormObject,\n treeValues: updatedTreeObject,\n });\n }\n\n triggerChange(updatedItems);\n } catch (e) {\n setError(e as any);\n } finally {\n setIsLoading(false);\n }\n };\n\n // TODO: improve this. Do we really have to parse the entire object just to get the title?\n function getTitle() {\n const ViewType: any = (ViewObjects as any)[currentView];\n if (currentView === \"graph\") {\n const parsedGraph = parseGraph(views.get(\"graph\").arch);\n return parsedGraph.string!;\n } else {\n const ooui = new ViewType(views.get(currentView).fields);\n ooui.parse(views.get(currentView).arch);\n return ooui.string!;\n }\n }\n\n const content = () => {\n if (currentView === \"form\") {\n if (itemsToShow.length === 0) {\n return t(\"noCurrentEntries\");\n }\n\n if (\n currentView !== previousCurrentView.current &&\n items.some((item) => !item.values)\n ) {\n return <Spin />;\n }\n\n return (\n <Form\n formView={views.get(\"form\")}\n values={itemsToShow[itemIndex]?.values}\n parentContext={{ ...getContext?.(), ...context }}\n model={relation}\n id={itemsToShow[itemIndex]?.id}\n submitMode={\"values\"}\n onFieldsChange={(values: any) => {\n const currentItemId = itemsToShow[itemIndex]?.id;\n\n const updatedItems = items.map((item) => {\n if (item.id === currentItemId) {\n return {\n ...item,\n operation:\n item.operation === \"original\"\n ? \"pendingUpdate\"\n : item.operation,\n values: { ...values, id: currentItemId },\n treeValues: { ...values, id: currentItemId },\n };\n }\n return item;\n });\n\n triggerChange(updatedItems);\n\n setFormHasChanges(true);\n }}\n readOnly={readOnly}\n />\n );\n }\n\n let resultsToShow = [];\n\n if (itemsToShow.some((item) => item.treeValues)) {\n resultsToShow = sorter\n ? sortResults({\n resultsToSort: itemsToShow.map((item) => item.treeValues),\n sorter,\n fields: {\n ...views.get(\"tree\").fields,\n ...(views.get(\"form\")?.fields || {}),\n },\n })\n : itemsToShow.map((item) => item.treeValues);\n }\n\n if (currentView === \"tree\") {\n return (\n <Tree\n total={itemsToShow.length}\n limit={itemsToShow.length}\n treeView={views.get(\"tree\")}\n results={resultsToShow}\n loading={isLoading}\n onRowClicked={\n views.get(\"form\")?.fields !== undefined\n ? onTreeRowClicked\n : undefined\n }\n showPagination={false}\n rowSelection={{\n selectedRowKeys,\n onChange: setSelectedRowKeys,\n }}\n sorter={sorter}\n onChangeSort={setSorter}\n context={{ ...getContext?.(), ...context }}\n colorsForResults={colorsForResults}\n readonly={readOnly}\n />\n );\n }\n if (currentView === \"graph\") {\n const domain = [[`${ooui.inv_field}`, \"=\", activeId]];\n return (\n <Graph\n view_id={views.get(\"graph\").view_id}\n model={ooui.relation}\n domain={domain}\n context={{ ...getContext?.(), ...context }}\n limit={0}\n />\n );\n }\n };\n\n if (error) {\n return <Alert className=\"mt-10\" message={error} type=\"error\" banner />;\n }\n\n // If we are in create mode we have to show the modal in continuous mode.\n // This means the modal won't close after clicking OK, the modal will add the new item\n // and will reset to defaults to let the user add a new item.\n const mustClearAfterSave = continuousEntryMode;\n\n if (isLoading) {\n return <Spin />;\n }\n\n return (\n <>\n <One2manyTopBar\n mode={currentView}\n title={getTitle()}\n readOnly={readOnly}\n isMany2Many={isMany2many}\n formHasChanges={formHasChanges}\n totalItems={itemsToShow.length}\n currentItemIndex={itemIndex}\n onDelete={showRemoveConfirm}\n onCreateItem={createItem}\n onToggleViewMode={toggleViewMode}\n onPreviousItem={previousItem}\n onNextItem={nextItem}\n onSearchItem={searchItem}\n selectedRowKeys={selectedRowKeys}\n showCreateButton={views.get(\"form\")?.fields !== undefined}\n showToggleButton={views.size > 1}\n />\n {content()}\n <FormModal\n formView={views.get(\"form\")}\n model={relation}\n id={modalItem?.id}\n submitMode={\"2many\"}\n values={modalItem?.values}\n defaultValues={modalItem?.defaultValues}\n visible={showFormModal}\n onSubmitSucceed={onFormModalSubmitSucceed}\n parentContext={{ ...getContext?.(), ...context }}\n onCancel={() => {\n setContinuousEntryMode(false);\n setShowFormModal(false);\n }}\n readOnly={readOnly}\n mustClearAfterSave={mustClearAfterSave}\n />\n <SearchModal\n domain={transformedDomain.current}\n model={relation}\n context={{ ...getContext?.(), ...context }}\n visible={showSearchModal}\n onSelectValues={async (ids: number[]) => {\n setShowSearchModal(false);\n onSearchModalSelectValue(ids);\n }}\n onCloseModal={() => {\n setShowSearchModal(false);\n }}\n />\n </>\n );\n};\n\nexport { One2manyInput, One2manyItem, One2manyValue };\n","import React, { useContext, useState } from \"react\";\nimport { One2many as One2manyOoui } from \"@gisce/ooui\";\nimport Field from \"@/common/Field\";\nimport { Spin, Alert } from \"antd\";\nimport { Views, ViewType } from \"@/types\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport One2manyProvider from \"@/context/One2manyContext\";\nimport { One2manyInput } from \"@/widgets/base/one2many/One2manyInput\";\nimport useDeepCompareEffect from \"use-deep-compare-effect\";\nimport { FormContext, FormContextType } from \"@/context/FormContext\";\n\ntype Props = {\n ooui: One2manyOoui;\n};\n\nexport const One2many = (props: Props) => {\n const { ooui } = props;\n const { mode, relation, views: oouiViews, required, context } = ooui;\n\n let initialView: ViewType;\n const [isLoading, setIsLoading] = useState<boolean>(true);\n const [error, setError] = useState<string>();\n const [views, setViews] = useState<Views>(new Map<string, any>());\n const formContext = useContext(FormContext) as FormContextType;\n const { getContext } = formContext || {};\n\n useDeepCompareEffect(() => {\n fetchData();\n }, [ooui]);\n\n const getViewData = async (type: ViewType) => {\n if (oouiViews && oouiViews[type]) {\n return oouiViews[type];\n }\n return await ConnectionProvider.getHandler().getView({\n model: relation,\n type,\n context: { ...getContext?.(), ...context },\n });\n };\n\n const fetchData = async () => {\n setIsLoading(true);\n setError(undefined);\n\n try {\n if (mode && mode.length > 0) {\n for (const m of mode as ViewType[]) {\n const v = await getViewData(m);\n views.set(m, v)\n }\n setViews(views)\n } else {\n const formView = await getViewData(\"form\");\n const treeView = await getViewData(\"tree\");\n views.set(\"form\", formView);\n views.set(\"tree\", treeView);\n setViews(views);\n }\n } catch (err) {\n setError(JSON.stringify(err));\n } finally {\n setIsLoading(false);\n }\n };\n\n if (mode && mode.length > 0) {\n initialView = mode[0] as ViewType;\n } else {\n initialView = \"tree\";\n }\n\n if (isLoading) {\n return <Spin />;\n }\n\n if (error) {\n return <Alert className=\"mt-10\" message={error} type=\"error\" banner />;\n }\n\n const validator = async (_: any, value: any) => {\n if (!value) throw new Error();\n if (!value.items) throw new Error();\n if (!Array.isArray(value.items)) throw new Error();\n if (value.items.length === 0) throw new Error();\n };\n\n return (\n <One2manyProvider initialView={initialView}>\n <Field\n required={required}\n type={\"array\"}\n validator={validator}\n {...props}\n >\n <One2manyInput ooui={ooui} views={views} />\n </Field>\n </One2manyProvider>\n );\n};\n","import React, { useContext, useEffect, useRef, useState } from \"react\";\nimport { Input, theme } from \"antd\";\nimport Field from \"@/common/Field\";\nimport { Float as FloatOoui } from \"@gisce/ooui\";\nimport { WidgetProps } from \"@/types\";\nimport { parseFloatToString, parseStringToFloat } from \"@/helpers/timeHelper\";\nimport { FormContext, FormContextType } from \"@/context/FormContext\";\nconst { useToken } = theme;\n\nexport const FloatTime = (props: WidgetProps) => {\n const { ooui } = props;\n const { required } = ooui as FloatOoui;\n\n return (\n <Field required={required} type={\"number\"} {...props}>\n <FloatTimeInput ooui={ooui as FloatOoui} />\n </Field>\n );\n};\n\ninterface FloatTimeInputProps {\n ooui: FloatOoui;\n value?: number;\n onChange?: (value?: number) => void;\n}\n\nexport const FloatTimeInput: React.FC<FloatTimeInputProps> = (\n props: FloatTimeInputProps\n) => {\n const { ooui, value, onChange } = props;\n const { id, readOnly, required } = ooui as FloatOoui;\n const { token } = useToken();\n const requiredStyle =\n required && !readOnly\n ? { backgroundColor: token.colorPrimaryBg }\n : undefined;\n const inputTextRef = useRef<string>();\n const [inputText, setInputText] = useState<string>();\n const formContext = useContext(FormContext) as FormContextType;\n const { elementHasLostFocus } = formContext || {};\n\n useEffect(() => {\n setInputText(parseFloatToString(value!));\n }, [value]);\n\n const triggerChange = (changedValue?: number) => {\n onChange?.(changedValue);\n };\n\n function onValueStringChange(e: React.ChangeEvent<HTMLInputElement>) {\n inputTextRef.current = e.target.value;\n setInputText(e.target.value);\n }\n\n async function onElementLostFocus() {\n triggerChange(parseStringToFloat(inputText));\n await new Promise((resolve) => setTimeout(resolve, 300));\n elementHasLostFocus?.();\n }\n\n return (\n <Input\n value={inputText}\n disabled={readOnly}\n className={\"w-full\"}\n style={requiredStyle}\n id={id}\n placeholder={\"00:00\"}\n onChange={onValueStringChange}\n onBlur={onElementLostFocus}\n />\n );\n};\n","import React from \"react\";\nimport { Group as GroupOoui } from \"@gisce/ooui\";\nimport Container from \"./Container\";\nimport { FieldSet } from \"@gisce/react-formiga-components\";\nimport { Space } from \"antd\";\nimport iconMapper from \"@/helpers/iconMapper\";\n\ntype Props = {\n ooui: GroupOoui;\n showLabel?: boolean;\n responsiveBehaviour: boolean;\n};\n\nfunction Group(props: Props): React.ReactElement {\n const { ooui, showLabel = true, responsiveBehaviour } = props;\n const icon: React.ElementType | undefined = iconMapper(ooui.icon || \"\");\n\n return (\n <>\n {(ooui.label || icon) && showLabel ? (\n <FieldSet label={ooui.label} icon={icon}>\n <Container\n container={ooui!.container}\n responsiveBehaviour={responsiveBehaviour}\n />\n </FieldSet>\n ) : (\n <Container\n container={ooui!.container}\n responsiveBehaviour={responsiveBehaviour}\n />\n )}\n </>\n );\n}\n\nexport default Group;\n","import React from \"react\";\nimport { Tabs } from \"antd\";\nimport iconMapper from \"@/helpers/iconMapper\";\nconst { TabPane } = Tabs;\n\nimport { Notebook as NotebookOoui, Group as GroupOoui } from \"@gisce/ooui\";\nimport { Group } from \"@/index\";\n\ntype Props = {\n ooui: NotebookOoui;\n responsiveBehaviour: boolean;\n};\n\nfunction Notebook(props: Props): React.ReactElement {\n const { ooui, responsiveBehaviour } = props;\n const tabs = ooui.pages;\n\n function getPageIcon(icon: string) {\n if (icon) {\n const Icon: React.ElementType = iconMapper(icon) as any;\n return Icon && <Icon />;\n }\n return undefined;\n }\n\n return (\n <Tabs defaultActiveKey=\"1\" tabPosition={ooui.tabPosition}>\n {tabs\n .filter((page: any) => !page.invisible)\n .map((page: any) => {\n return (\n <TabPane tab={<>{getPageIcon(page.icon)} {page.label}</>} key={page.label}>\n <Group\n ooui={page as GroupOoui}\n showLabel={false}\n responsiveBehaviour={responsiveBehaviour}\n />\n </TabPane>\n );\n })}\n </Tabs>\n );\n}\n\nexport default Notebook;\n","import React, { CSSProperties, useContext, useState } from \"react\";\nimport { Input, Row, theme } from \"antd\";\nimport Field from \"@/common/Field\";\nimport { Text as TextOoui } from \"@gisce/ooui\";\nimport { TranslationModal } from \"../modals/TranslationModal\";\nimport { FormContext, FormContextType } from \"@/context/FormContext\";\nimport ButtonWithTooltip from \"@/common/ButtonWithTooltip\";\nimport { TranslationOutlined } from \"@ant-design/icons\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport showInfo from \"@/ui/InfoDialog\";\nconst { useToken } = theme;\n\nconst { TextArea } = Input;\n\ntype Props = {\n ooui: TextOoui;\n};\n\nconst Text = (props: Props) => {\n const { ooui } = props;\n const { id, readOnly, required, height, translatable } = ooui;\n const { token } = useToken();\n const requiredStyle =\n required && !readOnly\n ? { backgroundColor: token.colorPrimaryBg }\n : undefined;\n const formContext = useContext(FormContext) as FormContextType;\n const { elementHasLostFocus } = formContext || {};\n\n return (\n <Field required={required} {...props}>\n {translatable ? (\n <TranslatableText\n field={id}\n height={height}\n requiredStyle={requiredStyle}\n />\n ) : (\n <TextArea\n disabled={readOnly || translatable}\n style={{\n minHeight: height ? height + \"px\" : \"100%\",\n ...requiredStyle,\n }}\n rows={4}\n onBlur={elementHasLostFocus}\n />\n )}\n </Field>\n );\n};\n\nconst TranslatableText = ({\n value,\n field,\n requiredStyle,\n onChange,\n height,\n}: {\n value?: string;\n field: string;\n requiredStyle: CSSProperties | undefined;\n height: number | undefined;\n onChange?: (value: string) => void;\n}) => {\n const formContext = useContext(FormContext) as FormContextType;\n const {\n activeId,\n activeModel,\n fetchValues,\n formHasChanges,\n elementHasLostFocus,\n } = formContext || {};\n const [translationModalVisible, setTranslationModalVisible] = useState(false);\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n if (!activeId) {\n return (\n <>\n <Row gutter={8} wrap={false}>\n <TextArea\n value={value}\n onChange={(event: any) => {\n onChange?.(event.target.value);\n }}\n style={{\n height: height ? height + \"px\" : \"100%\",\n ...requiredStyle,\n }}\n id={field}\n rows={4}\n onBlur={elementHasLostFocus}\n />\n </Row>\n <Row justify=\"end\" style={{ paddingTop: 5 }}>\n <ButtonWithTooltip\n tooltip={t(\"translate\")}\n icon={<TranslationOutlined />}\n onClick={async () => {\n if (formHasChanges?.()) {\n showInfo(t(\"saveBeforeTranslate\"));\n } else {\n showInfo(t(\"enterTextBeforeTranslate\"));\n }\n }}\n >\n {t(\"translate\")}\n </ButtonWithTooltip>\n </Row>\n </>\n );\n }\n\n return (\n <>\n <div\n onClick={() => {\n if (formHasChanges?.()) {\n showInfo(t(\"saveBeforeTranslate\"));\n return;\n }\n\n if (!translationModalVisible) {\n setTranslationModalVisible(true);\n }\n }}\n >\n <TextArea\n value={value}\n onChange={(event: any) => {\n onChange?.(event.target.value);\n }}\n style={{\n height: height ? height + \"px\" : \"100%\",\n cursor: \"pointer\",\n pointerEvents: \"none\",\n ...requiredStyle,\n }}\n id={field}\n disabled={true}\n rows={4}\n onBlur={elementHasLostFocus}\n />\n </div>\n <TranslationModal\n id={activeId!}\n model={activeModel}\n field={field}\n visible={translationModalVisible}\n onCloseModal={() => {\n setTranslationModalVisible(false);\n }}\n onSubmitSucceed={() => {\n setTranslationModalVisible(false);\n fetchValues?.();\n }}\n />\n </>\n );\n};\n\nexport default Text;\n","import React from \"react\";\nimport { Divider, Space } from \"antd\";\nimport { Separator as SeparatorOoui } from \"@gisce/ooui\";\nimport iconMapper from \"@/helpers/iconMapper\";\n\ntype Props = {\n ooui: SeparatorOoui;\n};\n\nexport const Separator = (props: Props) => {\n const { ooui } = props;\n const { label, icon } = ooui;\n const Icon : React.ElementType | undefined = iconMapper(icon || \"\");\n\n\n return (\n <Divider orientation=\"left\" className=\"text-sm\">\n { (Icon || label) &&\n <Space>\n {Icon ? <Icon /> : null}\n {label}\n </Space>\n }\n </Divider>\n );\n};\n","import {\n ExportField,\n ExportOptions,\n PredefinedExport,\n PredefinedExportField,\n} from \"@gisce/react-formiga-components\";\nimport { useCallback, useRef } from \"react\";\nimport { ConnectionProvider } from \"..\";\nimport showInfo from \"@/ui/InfoDialog\";\nimport { tForLang } from \"@/context/LocaleContext\";\nimport { getMimeType, openBase64InNewTab } from \"@/helpers/filesHelper\";\n\nexport const useExport = ({\n model,\n context,\n locale,\n selectedRegistersToExport,\n domain,\n limit,\n onClose,\n}: {\n model: string;\n context: any;\n locale: string;\n selectedRegistersToExport?: any[];\n domain: any[];\n limit?: number;\n onClose: () => void;\n}) => {\n const fields = useRef<any>({});\n const exportModelFields = useRef<Map<string, any>>(new Map<string, any>());\n\n const onExport = useCallback(\n async (options: ExportOptions) => {\n if (\n options.selectedKeys === undefined ||\n options.selectedKeys.length === 0\n ) {\n showInfo(tForLang(\"selectAtLeastOneField\", locale));\n return;\n }\n\n let exportDomain = domain;\n\n if (\n options.registersAmount === \"selected\" &&\n selectedRegistersToExport?.length !== 0\n ) {\n exportDomain = [\n [\"id\", \"in\", selectedRegistersToExport?.map((r) => r.id)],\n ];\n }\n\n const { datas } = await ConnectionProvider.getHandler().exportData({\n model,\n fields: addIdToRelationFields({\n keys: options.selectedKeys,\n fields: fields.current,\n }),\n domain: exportDomain,\n limit: options.registersAmount === \"all\" ? 0 : limit,\n context,\n format: options.exportType,\n });\n\n onClose();\n\n await new Promise((resolve) => setTimeout(resolve, 200));\n\n const fileType: any = await getMimeType(datas);\n openBase64InNewTab(datas, fileType.mime);\n },\n [locale, model, domain, limit, context, onClose]\n );\n\n const onGetFields = useCallback(async () => {\n const viewData = await ConnectionProvider.getHandler().getFields({\n model,\n context,\n fields: [],\n });\n fields.current[\"/\"] = viewData;\n return convertToExportFields({ fields: viewData });\n }, [model, context, fields]);\n\n const onGetFieldChilds = useCallback(\n async (key: string) => {\n const fieldDefinition = getFieldDefinition(key, fields.current);\n const optsForField = fieldDefinition[getChildKey(key)];\n const relation = optsForField.relation;\n const viewData = await ConnectionProvider.getHandler().getFields({\n model: relation,\n context,\n fields: [],\n });\n\n // We must iterate over each key of viewData in order to replace the string value\n for (const [key, value] of Object.entries(viewData)) {\n viewData[key].string = getTitle({\n parentTitle: optsForField.string,\n title: (value as any).string,\n });\n }\n\n fields.current[key] = viewData;\n\n return convertToExportFields({\n fields: viewData,\n parentKey: key,\n });\n },\n [fields.current, model, context]\n );\n\n const onGetPredefinedExports = useCallback(async () => {\n const predefinedExports = await listPredefinedExports({ model, context });\n\n const keysWithChilds = await retrieveKeyFieldsForPredefinedExports({\n predefinedExports,\n fields: fields.current,\n onGetFieldChilds,\n });\n\n // Then we reformat predefined exports to get the title\n const predefinedExportsAdjusted = predefinedExports.map((pExport) => {\n return {\n ...pExport,\n fields: pExport.fields.map((field: PredefinedExportField) => {\n const childKey = getChildKey(field.key);\n const fieldDefinition = getFieldDefinition(field.key, fields.current);\n const optsForField = fieldDefinition[childKey];\n return {\n key: field.key,\n title: optsForField.string,\n };\n }),\n };\n });\n\n return {\n predefinedExports: predefinedExportsAdjusted,\n keysWithChilds,\n };\n }, [fields.current]);\n\n const onSavePredefinedExport = useCallback(\n async (pExport: PredefinedExport) => {\n const fieldsForExport = await getModelFields(\"ir.exports\");\n const fieldsForExportLine = await getModelFields(\"ir.exports.line\");\n\n // First we must create the parent object\n const exportId = await ConnectionProvider.getHandler().create({\n model: \"ir.exports\",\n values: {\n name: pExport.name,\n resource: model,\n },\n fields: fieldsForExport,\n context,\n });\n\n // We create the lines\n await Promise.all(\n pExport.fields.map(async (field: any) => {\n return await ConnectionProvider.getHandler().create({\n model: \"ir.exports.line\",\n values: {\n name: field.key,\n export_id: exportId,\n },\n fields: fieldsForExportLine,\n context,\n });\n })\n );\n\n return { ...pExport, id: exportId };\n },\n []\n );\n\n const onRemovePredefinedExport = useCallback(\n async (pExport: PredefinedExport) => {\n await ConnectionProvider.getHandler().deleteObjects({\n model: \"ir.exports\",\n ids: [pExport.id!],\n });\n },\n []\n );\n\n const getModelFields = useCallback(\n async (model: string) => {\n if (exportModelFields.current.has(model)) {\n return exportModelFields.current.get(model);\n }\n\n const fieldsForModel = ConnectionProvider.getHandler().getFields({\n model,\n context,\n fields: [],\n });\n\n exportModelFields.current.set(model, fieldsForModel);\n },\n [exportModelFields, context]\n );\n\n return {\n onGetFields,\n onGetFieldChilds,\n onExport,\n onGetPredefinedExports,\n onSavePredefinedExport,\n onRemovePredefinedExport,\n };\n};\n\nconst convertToExportFields = ({\n fields,\n parentKey,\n}: {\n fields: any;\n parentKey?: string;\n}) => {\n const exportFields = [];\n\n for (const key of Object.keys(fields)) {\n const valuesForField = fields[key];\n\n if (valuesForField.relation && valuesForField.is_function === true) {\n continue;\n }\n\n const relationField = isRelationField(valuesForField);\n\n exportFields.push({\n key: compoundId({ key, parentKey }),\n title: valuesForField.string,\n tooltip: valuesForField.help,\n required: valuesForField.required,\n isLeaf: !relationField,\n });\n }\n return exportFields;\n};\n\nconst isRelationField = (fieldDefinition: any) => {\n return (\n fieldDefinition.type === \"many2one\" ||\n fieldDefinition.type === \"one2many\" ||\n fieldDefinition.type === \"many2many\"\n );\n};\n\nconst compoundId = ({\n parentKey,\n key,\n}: {\n parentKey?: string;\n key: string;\n}) => {\n return `${parentKey ? parentKey + \"/\" : \"\"}${key}`;\n};\n\nconst getParentKey = (key: string) => {\n if (key.indexOf(\"/\") === -1) {\n return key;\n }\n const items = key.split(\"/\");\n return items.slice(0, -1).join(\"/\");\n};\n\nconst getChildKey = (key: string) => {\n if (key.indexOf(\"/\") === -1) {\n return key;\n }\n const items = key.split(\"/\");\n return items[items.length - 1];\n};\n\nconst getFieldDefinition = (key: string, fields: any) => {\n if (key.indexOf(\"/\") === -1) {\n return fields[\"/\"];\n } else {\n return fields[getParentKey(key)];\n }\n};\n\nconst getTitle = ({\n title,\n parentTitle,\n}: {\n title: string;\n parentTitle?: string;\n}) => {\n return `${parentTitle ? parentTitle + \" → \" : \"\"}${title}`;\n};\n\nconst listPredefinedExports = async ({\n model,\n context,\n}: {\n model: string;\n context: any;\n}) => {\n const pExports = await ConnectionProvider.getHandler().search({\n model: \"ir.exports\",\n params: [[\"resource\", \"=\", model]],\n context,\n });\n\n const exportLinesIds = pExports.flatMap((exp: any) => exp.export_fields);\n\n // Now we must read each id of the export lines\n const exportLinesObjects = await ConnectionProvider.getHandler().readObjects({\n model: \"ir.exports.line\",\n ids: exportLinesIds,\n context,\n });\n\n return pExports.map((pExport) => ({\n id: pExport.id,\n name: pExport.name,\n fields: pExport.export_fields.map((id: number) => {\n const exportLine = exportLinesObjects.find((e: any) => e.id === id);\n return {\n key: exportLine.name,\n };\n }),\n }));\n};\n\nconst getKeysWithoutChildsInFields = ({\n fields,\n keys,\n}: {\n fields: any;\n keys: string[];\n}) => {\n return splitAndSortKeys([\n ...new Set(\n keys\n .filter((key) => {\n if (key.indexOf(\"/\") === -1) {\n return !fields[\"/\"]?.[key];\n } else {\n const parentKey = getParentKey(key);\n console.log({ key, parentKey, fields });\n const exists = fields?.[getParentKey(key)]?.[key];\n console.log({ exists });\n return !fields?.[getParentKey(key)]?.[key];\n }\n })\n .map((key) => getParentKey(key))\n ),\n ]);\n};\n\nconst retrieveKeyFieldsForPredefinedExports = async ({\n predefinedExports,\n fields,\n onGetFieldChilds,\n}: {\n predefinedExports: PredefinedExport[];\n fields: any;\n onGetFieldChilds: (key: string) => Promise<ExportField[]>;\n}) => {\n const allPredefinedExportKeys = predefinedExports.flatMap(\n (exp: PredefinedExport) => exp.fields.map((field: any) => field.key)\n );\n\n const keysWithoutChildsInFields = getKeysWithoutChildsInFields({\n fields,\n keys: allPredefinedExportKeys,\n });\n\n const keysWithChilds = [];\n\n // We must load the fields info for each key if not loaded yet in fields and store them in an array to pass them to the formiga component\n for (const key of keysWithoutChildsInFields) {\n keysWithChilds.push({ key, childs: await onGetFieldChilds(key) });\n }\n\n return keysWithChilds;\n};\n\nconst addIdToRelationFields = ({\n keys,\n fields,\n}: {\n keys: string[];\n fields: any;\n}) =>\n keys.map((key) => {\n const childKey = getChildKey(key);\n const fieldDefinition = getFieldDefinition(key, fields);\n const optsForField = fieldDefinition[childKey];\n const relationField = isRelationField(optsForField);\n return relationField ? `${key}/id` : key;\n });\n\nconst splitAndSortKeys = (keys: string[]): string[] => {\n // We must split the keys that have more than one level (character / ocurrences in the string > 1)\n // Into an array of keys with only one level\n // For example: \"partner_id/country_id/name\" => [\"partner_id\", \"partner_id/country_id\", \"partner_id/country_id/name\"]\n // We must do this because we must load the fields info for each key if not loaded yet in fields\n // And we must load the fields info for the parent key first\n //\n // We must also sort the keys by the number of levels they have\n // For example: [\"partner_id\", \"partner_id/country_id\", \"partner_id/country_id/name\"]\n\n const keysMap: Map<string, boolean> = new Map();\n const result: string[] = [];\n\n // Split keys with more than one level\n for (const key of keys) {\n const subKeys = key.split(\"/\");\n let parentKey = \"\";\n for (const subKey of subKeys) {\n const currentKey = parentKey ? `${parentKey}/${subKey}` : subKey;\n if (!keysMap.has(currentKey)) {\n result.push(currentKey);\n keysMap.set(currentKey, true);\n }\n parentKey = currentKey;\n }\n }\n\n // Sort keys by number of levels\n result.sort((a, b) => {\n const aLevels = a.split(\"/\").length;\n const bLevels = b.split(\"/\").length;\n return aLevels - bLevels;\n });\n\n return result;\n};\n","import ConnectionProvider from \"@/ConnectionProvider\";\nimport {\n ExportModal as ExportModalFmg,\n Locale,\n} from \"@gisce/react-formiga-components\";\nimport React from \"react\";\nimport { useExport } from \"@/hooks/useExport\";\n\nexport type ExportModalProps = {\n visible: boolean;\n locale: string;\n onClose: () => void;\n selectedRegistersToExport?: any[];\n totalRegisters: number;\n model: string;\n domain: any[];\n limit?: number;\n context?: any;\n visibleRegisters: number;\n};\n\nexport const ExportModal = (props: ExportModalProps) => {\n const {\n visible,\n locale,\n onClose,\n model,\n context,\n selectedRegistersToExport,\n totalRegisters,\n domain,\n limit,\n visibleRegisters,\n } = props;\n\n const {\n onExport,\n onGetFieldChilds,\n onGetFields,\n onGetPredefinedExports,\n onSavePredefinedExport,\n onRemovePredefinedExport,\n } = useExport({\n model,\n context,\n domain,\n limit,\n selectedRegistersToExport,\n onClose,\n locale,\n });\n\n return (\n <ExportModalFmg\n visible={visible}\n locale={locale as Locale}\n onSucceed={onExport}\n onCancel={onClose}\n selectedRegistersToExport={\n selectedRegistersToExport &&\n selectedRegistersToExport.length &&\n selectedRegistersToExport.length > 0\n ? selectedRegistersToExport.length\n : undefined\n }\n totalRegisters={totalRegisters}\n onGetFieldChilds={onGetFieldChilds}\n onGetFields={onGetFields}\n visibleRegisters={visibleRegisters}\n onGetPredefinedExports={onGetPredefinedExports}\n onSavePredefinedExport={onSavePredefinedExport}\n onRemovePredefinedExport={onRemovePredefinedExport}\n />\n );\n};\n","import DatePicker from \"@/common/DatePicker\";\n\nimport React from \"react\";\nimport { WidgetProps } from \"@/types\";\n\nconst Date = (props: WidgetProps) => {\n const { ooui } = props;\n\n return <DatePicker ooui={ooui} />;\n};\n\nexport default Date;\n","import DatePicker from \"@/common/DatePicker\";\n\nimport React from \"react\";\nimport { WidgetProps } from \"@/types\";\n\nconst DateTime = (props: WidgetProps) => {\n const { ooui } = props;\n\n return <DatePicker ooui={ooui} showTime />;\n};\n\nexport default DateTime;\n","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_customParseFormat=t()}(this,(function(){\"use strict\";var e={LTS:\"h:mm:ss A\",LT:\"h:mm A\",L:\"MM/DD/YYYY\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY h:mm A\",LLLL:\"dddd, MMMM D, YYYY h:mm A\"},t=/(\\[[^[]*\\])|([-_:/.,()\\s]+)|(A|a|YYYY|YY?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,n=/\\d\\d/,r=/\\d\\d?/,i=/\\d*[^-_:/,()\\s\\d]+/,o={},s=function(e){return(e=+e)+(e>68?1900:2e3)};var a=function(e){return function(t){this[e]=+t}},f=[/[+-]\\d\\d:?(\\d\\d)?|Z/,function(e){(this.zone||(this.zone={})).offset=function(e){if(!e)return 0;if(\"Z\"===e)return 0;var t=e.match(/([+-]|\\d\\d)/g),n=60*t[1]+(+t[2]||0);return 0===n?0:\"+\"===t[0]?-n:n}(e)}],h=function(e){var t=o[e];return t&&(t.indexOf?t:t.s.concat(t.f))},u=function(e,t){var n,r=o.meridiem;if(r){for(var i=1;i<=24;i+=1)if(e.indexOf(r(i,0,t))>-1){n=i>12;break}}else n=e===(t?\"pm\":\"PM\");return n},d={A:[i,function(e){this.afternoon=u(e,!1)}],a:[i,function(e){this.afternoon=u(e,!0)}],S:[/\\d/,function(e){this.milliseconds=100*+e}],SS:[n,function(e){this.milliseconds=10*+e}],SSS:[/\\d{3}/,function(e){this.milliseconds=+e}],s:[r,a(\"seconds\")],ss:[r,a(\"seconds\")],m:[r,a(\"minutes\")],mm:[r,a(\"minutes\")],H:[r,a(\"hours\")],h:[r,a(\"hours\")],HH:[r,a(\"hours\")],hh:[r,a(\"hours\")],D:[r,a(\"day\")],DD:[n,a(\"day\")],Do:[i,function(e){var t=o.ordinal,n=e.match(/\\d+/);if(this.day=n[0],t)for(var r=1;r<=31;r+=1)t(r).replace(/\\[|\\]/g,\"\")===e&&(this.day=r)}],M:[r,a(\"month\")],MM:[n,a(\"month\")],MMM:[i,function(e){var t=h(\"months\"),n=(h(\"monthsShort\")||t.map((function(e){return e.slice(0,3)}))).indexOf(e)+1;if(n<1)throw new Error;this.month=n%12||n}],MMMM:[i,function(e){var t=h(\"months\").indexOf(e)+1;if(t<1)throw new Error;this.month=t%12||t}],Y:[/[+-]?\\d+/,a(\"year\")],YY:[n,function(e){this.year=s(e)}],YYYY:[/\\d{4}/,a(\"year\")],Z:f,ZZ:f};function c(n){var r,i;r=n,i=o&&o.formats;for(var s=(n=r.replace(/(\\[[^\\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(t,n,r){var o=r&&r.toUpperCase();return n||i[r]||e[r]||i[o].replace(/(\\[[^\\]]+])|(MMMM|MM|DD|dddd)/g,(function(e,t,n){return t||n.slice(1)}))}))).match(t),a=s.length,f=0;f<a;f+=1){var h=s[f],u=d[h],c=u&&u[0],l=u&&u[1];s[f]=l?{regex:c,parser:l}:h.replace(/^\\[|\\]$/g,\"\")}return function(e){for(var t={},n=0,r=0;n<a;n+=1){var i=s[n];if(\"string\"==typeof i)r+=i.length;else{var o=i.regex,f=i.parser,h=e.slice(r),u=o.exec(h)[0];f.call(t,u),e=e.replace(u,\"\")}}return function(e){var t=e.afternoon;if(void 0!==t){var n=e.hours;t?n<12&&(e.hours+=12):12===n&&(e.hours=0),delete e.afternoon}}(t),t}}return function(e,t,n){n.p.customParseFormat=!0,e&&e.parseTwoDigitYear&&(s=e.parseTwoDigitYear);var r=t.prototype,i=r.parse;r.parse=function(e){var t=e.date,r=e.utc,s=e.args;this.$u=r;var a=s[1];if(\"string\"==typeof a){var f=!0===s[2],h=!0===s[3],u=f||h,d=s[2];h&&(d=s[2]),o=this.$locale(),!f&&d&&(o=n.Ls[d]),this.$d=function(e,t,n){try{if([\"x\",\"X\"].indexOf(t)>-1)return new Date((\"X\"===t?1e3:1)*e);var r=c(t)(e),i=r.year,o=r.month,s=r.day,a=r.hours,f=r.minutes,h=r.seconds,u=r.milliseconds,d=r.zone,l=new Date,m=s||(i||o?1:l.getDate()),M=i||l.getFullYear(),Y=0;i&&!o||(Y=o>0?o-1:l.getMonth());var p=a||0,v=f||0,D=h||0,g=u||0;return d?new Date(Date.UTC(M,Y,m,p,v,D,g+60*d.offset*1e3)):n?new Date(Date.UTC(M,Y,m,p,v,D,g)):new Date(M,Y,m,p,v,D,g)}catch(e){return new Date(\"\")}}(t,a,r),this.init(),d&&!0!==d&&(this.$L=this.locale(d).$L),u&&t!=this.format(a)&&(this.$d=new Date(\"\")),o={}}else if(a instanceof Array)for(var l=a.length,m=1;m<=l;m+=1){s[1]=a[m-1];var M=n.apply(this,s);if(M.isValid()){this.$d=M.$d,this.$L=M.$L,this.init();break}m===l&&(this.$d=new Date(\"\"))}else i.call(this,e)}}}));","import React, { useContext, useEffect, useRef, useState } from \"react\";\nimport { TimePicker, theme } from \"antd\";\nimport Field from \"@/common/Field\";\nimport { Time as TimeOoui } from \"@gisce/ooui\";\nimport { WidgetProps } from \"@/types\";\nimport dayjs from \"dayjs\";\nimport { Dayjs } from 'dayjs';\nimport customParseFormat from 'dayjs/plugin/customParseFormat'\n\n\ndayjs.extend(customParseFormat)\n\nconst Time = (props: WidgetProps) => {\n const { ooui } = props;\n\n return (\n <Field {...props}>\n <TimeInput ooui={ooui as TimeOoui} />\n </Field>\n );\n};\n\ntype TimeInputProps = {\n ooui: TimeOoui;\n value?: string;\n onChange?: (value?: string) => void;\n}\n\nexport const TimeInput = (props: TimeInputProps) => {\n\n const onChange = (time: Dayjs | null, timestring: string) => {\n if (props.onChange) {\n props.onChange(timestring)\n }\n }\n\n return <TimePicker onChange={onChange} value={props.value ? dayjs(props.value, 'HH:mm:ss') : undefined} />\n\n}\n\nexport default Time;\n","import React, { useEffect, useState } from \"react\";\nimport { Row, Col } from \"antd\";\nimport {\n Reference as ReferenceOoui,\n Selection as SelectionOoui,\n Many2one as Many2oneOoui,\n} from \"@gisce/ooui\";\nimport Field from \"@/common/Field\";\nimport { Many2oneInput } from \"./many2one/Many2one\";\nimport { SelectionInput } from \"./Selection\";\n\ntype Props = {\n ooui: ReferenceOoui;\n onOpenDetailClick?:\n | ((event: React.MouseEvent<HTMLElement, MouseEvent>) => void)\n | undefined;\n onSearchClick?:\n | ((event: React.MouseEvent<HTMLElement, MouseEvent>) => void)\n | undefined;\n};\n\nexport const Reference = (props: Props) => {\n const { ooui } = props;\n const { required } = ooui;\n\n return (\n <Field required={required} {...props}>\n <ReferenceInput ooui={ooui} />\n </Field>\n );\n};\n\ninterface ReferenceInputProps {\n ooui: ReferenceOoui;\n value?: string;\n onChange?: (value: string | undefined) => void;\n}\n\nexport const ReferenceInput: React.FC<ReferenceInputProps> = (\n props: ReferenceInputProps\n) => {\n const { value, onChange, ooui } = props;\n const { required, selectionValues, readOnly } = ooui;\n\n const splittedValue = value?.split(\",\");\n\n const [many2oneValue, setMany2oneValue] = useState<any[]>([]);\n const [selectionValue, setSelectionValue] = useState<string>();\n\n useEffect(() => {\n if (!value) {\n setSelectionValue(undefined);\n setMany2oneValue([]);\n return;\n }\n\n const model = value && splittedValue && splittedValue[0];\n const id =\n value && splittedValue && splittedValue[1] && parseInt(splittedValue[1]);\n setMany2oneValue([id, undefined]);\n setSelectionValue(model!);\n }, [value]);\n\n return (\n <Row gutter={8} wrap={false}>\n <Col flex=\"1\">\n <SelectionInput\n ooui={\n new SelectionOoui({\n name: \"model_selection\",\n selection: selectionValues,\n readonly: readOnly,\n required,\n })\n }\n onChange={(changedValue: string) => {\n setSelectionValue(changedValue);\n let m2oValue = many2oneValue[0] || 0;\n if (changedValue !== selectionValue) {\n setMany2oneValue([]);\n m2oValue = 0;\n }\n const referenceValue = `${changedValue},${m2oValue}`;\n if (referenceValue === value) {\n return;\n }\n onChange?.(referenceValue);\n }}\n value={selectionValue}\n />\n </Col>\n <Col flex=\"3\">\n <Many2oneInput\n ooui={\n new Many2oneOoui({\n name: \"object_value\",\n relation: selectionValue,\n readonly: readOnly,\n required,\n })\n }\n value={many2oneValue}\n onChange={(changedValue: any[]) => {\n setMany2oneValue(changedValue);\n const referenceValue = `${selectionValue},${changedValue[0] || 0}`;\n if (referenceValue === value) {\n return;\n }\n onChange?.(referenceValue);\n }}\n />\n </Col>\n </Row>\n );\n};\n","import React, { useRef, useContext } from \"react\";\nimport { Row, Col, Button, Input, Space, theme } from \"antd\";\nimport Field from \"@/common/Field\";\nimport { Binary as BinaryOoui } from \"@gisce/ooui\";\nconst { useToken } = theme;\nimport ButtonWithTooltip from \"@/common/ButtonWithTooltip\";\nimport {\n FolderOpenOutlined,\n DownloadOutlined,\n ClearOutlined,\n EyeOutlined,\n} from \"@ant-design/icons\";\nimport { FormContext, FormContextType } from \"@/context/FormContext\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\nimport {\n getFilesize,\n getMimeType,\n openBase64InNewTab,\n toBase64,\n} from \"@/helpers/filesHelper\";\n\ntype Props = {\n ooui: BinaryOoui;\n};\n\nexport const Binary = (props: Props) => {\n const { ooui } = props;\n const { required } = ooui;\n\n return (\n <Field required={required} {...props}>\n <BinaryInput ooui={ooui} />\n </Field>\n );\n};\n\ninterface BinaryInputProps {\n ooui: BinaryOoui;\n value?: string;\n onChange?: (value: string | undefined) => void;\n}\n\nexport const BinaryInput = (props: BinaryInputProps) => {\n const { ooui, value, onChange } = props;\n const { readOnly, required, filenameField } = ooui as BinaryOoui;\n const { token } = useToken();\n const requiredStyle =\n required && !readOnly\n ? { backgroundColor: token.colorPrimaryBg }\n : undefined;\n const inputFile = useRef(null);\n const { setFieldValue, getFieldValue } =\n (useContext(FormContext) as FormContextType) || {};\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n const filesize = value ? getFilesize(value) : \"\";\n\n const triggerChange = (changedValue?: string) => {\n onChange?.(changedValue);\n };\n\n async function downloadFile() {\n const fileType = await getMimeType(value!);\n const linkSource = `data:${fileType?.mime};base64,${value}`;\n const downloadLink = document.createElement(\"a\");\n const fileName = getFieldValue(filenameField);\n const name = getFieldValue(\"name\");\n\n downloadLink.href = linkSource;\n downloadLink.download = fileName || name;\n downloadLink.click();\n }\n\n async function openFile() {\n const fileType: any = await getMimeType(value!);\n openBase64InNewTab(value!, fileType.mime);\n }\n\n async function onChangeFile(event: any) {\n event.stopPropagation();\n event.preventDefault();\n const file = event.target.files[0];\n const b64: string = await toBase64(file);\n triggerChange(b64);\n\n if (filenameField) {\n setFieldValue(filenameField, file.name);\n }\n }\n\n function clearFile() {\n setFieldValue(filenameField, undefined);\n triggerChange(undefined);\n }\n\n return (\n <Row gutter={8}>\n <Col style={{ paddingBottom: 5 }}>\n <input\n type=\"file\"\n id=\"file\"\n ref={inputFile}\n style={{ display: \"none\" }}\n onChange={onChangeFile}\n />\n <Input\n type=\"text\"\n disabled={true}\n style={requiredStyle}\n value={filesize}\n />\n </Col>\n <Col>\n <Space>\n <Button\n icon={<FolderOpenOutlined />}\n disabled={readOnly}\n onClick={() => {\n const fileUploadField = inputFile.current as any;\n fileUploadField.click();\n }}\n >\n Select\n </Button>\n <Button icon={<EyeOutlined />} disabled={!value} onClick={openFile}>\n {t(\"open\")}\n </Button>\n <ButtonWithTooltip\n tooltip={t(\"download\")}\n disabled={!value}\n onClick={downloadFile}\n icon={<DownloadOutlined />}\n />\n <ButtonWithTooltip\n tooltip={t(\"clear\")}\n disabled={readOnly || !value}\n onClick={clearFile}\n icon={<ClearOutlined />}\n />\n </Space>\n </Col>\n </Row>\n );\n};\n","import React, { useContext } from \"react\";\nimport { Menu, Dropdown, Row, Col, Button } from \"antd\";\nimport {\n DownOutlined,\n TableOutlined,\n FormOutlined,\n CheckOutlined,\n AreaChartOutlined,\n CalendarOutlined,\n} from \"@ant-design/icons\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport showUnsavedChangesDialog from \"@/ui/UnsavedChangesDialog\";\nimport ButtonWithTooltip from \"@/common/ButtonWithTooltip\";\nimport { GraphView, View } from \"@/types\";\n\ntype Props = {\n onChangeView: (view: View) => void;\n currentView: View;\n availableViews: View[];\n disabled?: boolean;\n formHasChanges?: boolean;\n previousView?: View;\n};\n\nconst iconsForViewTypes = {\n tree: <TableOutlined />,\n form: <FormOutlined />,\n graph: <AreaChartOutlined />,\n calendar: <CalendarOutlined />,\n};\n\nfunction getIconForView(view?: View) {\n if (!view) {\n return <FormOutlined />;\n }\n\n return (iconsForViewTypes as any)?.[view.type] || <FormOutlined />;\n}\n\nfunction ChangeViewButton(props: Props) {\n const {\n currentView,\n availableViews,\n onChangeView,\n disabled = false,\n formHasChanges = false,\n previousView,\n } = props;\n const { t, lang } = useContext(LocaleContext) as LocaleContextType;\n\n function getMenu() {\n const menuItems = availableViews.map((view, idx) => {\n return (\n <Menu.Item key={view.view_id || idx}>\n <Row wrap={false}>\n <Col flex=\"none\" style={{ paddingRight: 20 }}>\n {getIconForView(view)}\n </Col>\n <Col flex=\"auto\" style={{ paddingRight: 20 }}>\n {view.type.charAt(0).toUpperCase() + view.type.slice(1)}\n </Col>\n <Col flex=\"none\">\n <CheckOutlined\n style={{\n opacity: currentView.view_id === view.view_id ? 1 : 0,\n }}\n />\n </Col>\n </Row>\n </Menu.Item>\n );\n });\n\n return (\n <Menu onClick={handleMenuClick}>\n <Menu.ItemGroup title={t(\"viewAs\")}>{menuItems}</Menu.ItemGroup>\n </Menu>\n );\n }\n\n function tryNavigate(callback: any) {\n if (formHasChanges) {\n showUnsavedChangesDialog({\n lang,\n onOk: () => {\n callback();\n },\n });\n return;\n }\n\n callback();\n }\n\n function handleMenuClick(event: any) {\n tryNavigate(() => {\n const selectedView = availableViews.find(\n (view) => view.view_id === parseInt(event.key)\n );\n onChangeView(selectedView!);\n });\n }\n\n return (\n <div style={{ display: \"flex\" }}>\n <ButtonWithTooltip\n tooltip={previousView ? t(\"viewAs\") + \" \" + t(previousView.type) : \"\"}\n icon={getIconForView(previousView)}\n style={{\n width: 50,\n borderTopRightRadius: 0,\n borderBottomRightRadius: 0,\n }}\n onClick={() => {\n handleMenuClick({ key: previousView?.view_id });\n }}\n disabled={disabled || availableViews.length === 1}\n />\n <Dropdown\n overlay={getMenu()}\n disabled={disabled || availableViews.length === 1}\n >\n <Button\n style={{\n width: 25,\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0,\n }}\n icon={<DownOutlined style={{ fontSize: \"0.5em\" }} />}\n onClick={(e) => e.preventDefault()}\n ></Button>\n </Dropdown>\n </div>\n );\n}\n\nexport default ChangeViewButton;\n","import React from \"react\";\nimport { Menu, Dropdown, Button } from \"antd\";\nimport { DownOutlined } from \"@ant-design/icons\";\n\ntype Props = {\n onItemClick: (event: any) => void;\n items: any[];\n tooltip: string;\n icon: any;\n label?: string;\n disabled?: boolean;\n};\n\nfunction DropdownButton(props: Props) {\n const {\n icon,\n tooltip,\n items = [],\n onItemClick,\n label,\n disabled = false,\n } = props;\n\n function getMenu() {\n const menuItems = items?.map((item, idx) => {\n if (item.name === \"divider\") {\n return <Menu.Divider key={\"divider\" + idx} />;\n }\n return <Menu.Item key={item.id}>{item.name}</Menu.Item>;\n });\n\n return (\n <Menu onClick={handleMenuClick}>\n <Menu.ItemGroup title={tooltip}>{menuItems}</Menu.ItemGroup>\n </Menu>\n );\n }\n\n function handleMenuClick(event: any) {\n const itemClicked = items.find((item: any) => {\n return !isNaN(event.key)\n ? item.id === parseInt(event.key)\n : item.id === event.key;\n });\n\n onItemClick(itemClicked);\n }\n\n return (\n <Dropdown\n overlay={getMenu()}\n disabled={disabled || !items || items.length === 0}\n >\n <Button>\n {icon} {label} <DownOutlined />\n </Button>\n </Dropdown>\n );\n}\n\nexport default DropdownButton;\n","import React from \"react\";\nimport ButtonWithTooltip from \"@/common/ButtonWithTooltip\";\nimport { LoadingOutlined } from \"@ant-design/icons\";\n\ntype Props = {\n tooltip: string;\n onClick: any;\n icon: any;\n disabled?: boolean;\n label?: string;\n loading?: boolean;\n type?: string;\n};\n\nfunction ActionButton(props: Props) {\n const {\n onClick,\n disabled = false,\n loading = false,\n tooltip,\n icon,\n label,\n type = \"default\",\n } = props;\n const finalIcon = loading ? <LoadingOutlined /> : icon;\n\n return (\n <ButtonWithTooltip\n type={type as any}\n tooltip={tooltip}\n onClick={onClick}\n disabled={disabled}\n >\n {finalIcon}\n {label}\n </ButtonWithTooltip>\n );\n}\n\nexport default ActionButton;\n","import React, { useContext } from \"react\";\nimport { FileAddOutlined } from \"@ant-design/icons\";\nimport ActionButton from \"./ActionButton\";\nimport {\n ActionViewContext,\n ActionViewContextType,\n} from \"@/context/ActionViewContext\";\nimport showUnsavedChangesDialog from \"@/ui/UnsavedChangesDialog\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\ntype Props = {\n disabled?: boolean;\n};\n\nfunction NewButton(props: Props) {\n const { disabled = false } = props;\n\n const { formHasChanges, onNewClicked: onNewClickedProps } = useContext(\n ActionViewContext\n ) as ActionViewContextType;\n const { t, lang } = useContext(LocaleContext) as LocaleContextType;\n\n const onNewClicked = () => {\n if (formHasChanges) {\n showUnsavedChangesDialog({\n lang,\n onOk: () => {\n onNewClickedProps();\n },\n });\n return;\n }\n\n onNewClickedProps();\n };\n\n return (\n <ActionButton\n icon={<FileAddOutlined />}\n tooltip={t(\"new\")}\n onClick={onNewClicked}\n disabled={disabled}\n />\n );\n}\nexport default NewButton;\n","import React from \"react\";\nimport { Modal } from \"antd\";\nimport { ExclamationCircleOutlined } from \"@ant-design/icons\";\nimport { tForLang } from \"@/context/LocaleContext\";\n\nconst { confirm } = Modal;\n\nconst showDialog = ({\n onOk,\n onCancel,\n lang,\n}: {\n onOk: () => void;\n onCancel?: () => void;\n lang: string;\n}) => {\n confirm({\n title: tForLang(\"unsavedChanges\", lang),\n icon: <ExclamationCircleOutlined />,\n centered: true,\n content: tForLang(\"confirmRefreshWithoutSave\", lang),\n okText: tForLang(\"discardAndRefresh\", lang),\n cancelText: tForLang(\"cancel\", lang),\n onOk,\n onCancel,\n });\n};\n\nexport default showDialog;\n","import ConnectionProvider from \"@/ConnectionProvider\";\nimport React from \"react\";\nimport showInfo from \"@/ui/InfoDialog\";\n\nasync function showLogInfo(\n model: string,\n currentId: number,\n translateFn: Function\n) {\n const logInfo = ((await ConnectionProvider.getHandler().getLogInfo({\n model,\n ids: [currentId],\n })) as any)[0];\n\n const { create_date, create_uid, id, write_date, write_uid } = logInfo;\n\n showInfo(\n <div>\n {\"ID: \" + id} <br />\n {translateFn(\"createdBy\") + \": \" + create_uid[1]} <br />\n {translateFn(\"creationDate\") + \": \" + create_date} <br />\n {translateFn(\"lastUpdatedBy\") + \": \" + write_uid[1]} <br />\n {translateFn(\"lastUpdatedDate\") + \": \" + write_date}\n </div>\n );\n}\n\nexport { showLogInfo };\n","import React, { useContext, useState } from \"react\";\nimport {\n DownOutlined,\n FormOutlined,\n DownloadOutlined,\n LinkOutlined,\n FileAddOutlined,\n TableOutlined,\n} from \"@ant-design/icons\";\nimport { Popover, Button, Row, Col, Tooltip, Spin } from \"antd\";\nimport {\n LocaleContext,\n LocaleContextType,\n tForLang,\n} from \"@/context/LocaleContext\";\n\nexport type Attachment = {\n id: number;\n name: string;\n datas: string;\n link: string;\n};\n\nexport type AttachmentsButtonWrapperProps = {\n attachments: Attachment[] | undefined;\n numberOfAttachments: number;\n disabled: boolean;\n loading: boolean;\n onAddNewAttachment: () => void;\n onListAllAttachments: () => void;\n onopenAttachmentLink: (attachment: Attachment) => void;\n onOpenAttachmentDetail: (attachment: Attachment) => void;\n};\n\nexport const AttachmentsButtonWrapper = (\n props: AttachmentsButtonWrapperProps\n) => {\n const { numberOfAttachments, disabled } = props;\n const { t, lang } = useContext(LocaleContext) as LocaleContextType;\n const [popoverVisible, setPopoverVisible] = useState<boolean>(false);\n\n const button = (\n <Button disabled={disabled}>\n <LinkOutlined />\n {`(${numberOfAttachments})`}\n <DownOutlined style={{ fontSize: 12 }} />\n </Button>\n );\n\n if (disabled) {\n return button;\n }\n\n return (\n <Popover\n onVisibleChange={(visible: boolean) => setPopoverVisible(visible)}\n visible={popoverVisible}\n placement=\"bottom\"\n content={Content(props, setPopoverVisible, lang)}\n title={t(\"attachments\")}\n arrowContent={null}\n >\n {button}\n </Popover>\n );\n};\n\nconst Content = (\n props: AttachmentsButtonWrapperProps,\n setPopoverVisible: (visible: boolean) => void,\n locale: string\n) => {\n const {\n attachments = [],\n loading,\n onAddNewAttachment,\n onopenAttachmentLink,\n onOpenAttachmentDetail,\n onListAllAttachments,\n } = props;\n if (loading) {\n return <Spin style={{ padding: 20 }} />;\n }\n\n return (\n <>\n <a\n style={{ display: \"block\", paddingBottom: 5 }}\n href=\"#\"\n onClick={() => {\n setPopoverVisible(false);\n onListAllAttachments();\n }}\n >\n <TableOutlined /> {tForLang(\"listAllAttachments\", locale)}\n </a>\n <a\n style={{ display: \"block\" }}\n href=\"#\"\n onClick={() => {\n setPopoverVisible(false);\n onAddNewAttachment();\n }}\n >\n <FileAddOutlined /> {tForLang(\"addNewAttachment\", locale)}\n </a>\n {attachments.length > 0 && (\n <>\n <li className=\"ant-dropdown-menu-item-divider\"></li>\n {attachments.map((attachment: any) => {\n const Icon = attachment.link ? LinkOutlined : DownloadOutlined;\n return (\n <Row\n style={{ paddingTop: 4, paddingBottom: 4 }}\n wrap={false}\n align=\"middle\"\n key={attachment.id}\n >\n <Col flex=\"auto\">{attachment.name}</Col>\n <Col flex=\"25px\" style={{ textAlign: \"center\" }}>\n {(attachment.datas_fname || attachment.link) && (\n <Tooltip\n title={\n attachment.link\n ? tForLang(\"openAttachmentLink\", locale)\n : tForLang(\"download\", locale)\n }\n >\n <Icon\n style={{ cursor: \"pointer\" }}\n onClick={() => {\n setPopoverVisible(false);\n onopenAttachmentLink(attachment);\n }}\n />\n </Tooltip>\n )}\n </Col>\n <Col flex=\"25px\" style={{ textAlign: \"center\" }}>\n <Tooltip title={tForLang(\"openAttachment\", locale)}>\n <FormOutlined\n style={{ cursor: \"pointer\" }}\n onClick={() => {\n setPopoverVisible(false);\n onOpenAttachmentDetail(attachment);\n }}\n />\n </Tooltip>\n </Col>\n </Row>\n );\n })}\n </>\n )}\n </>\n );\n};\n","import React, { useCallback, useContext, useEffect, useState } from \"react\";\nimport { getMimeType, openBase64InNewTab } from \"@/helpers/filesHelper\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport {\n ActionViewContext,\n ActionViewContextType,\n} from \"@/context/ActionViewContext\";\nimport showErrorDialog from \"@/ui/ActionErrorDialog\";\nimport {\n Attachment,\n AttachmentsButtonWrapper,\n} from \"./AttachmentsButtonWrapper\";\nimport { Modal, Spin } from \"antd\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\nexport type AttachmentsButtonProps = {\n attachments?: any;\n disabled?: boolean;\n onAddNewAttachment: () => void;\n onListAllAttachments: () => void;\n onViewAttachmentDetails: (attachment: Attachment) => void;\n};\n\nfunction AttachmentsButton(props: AttachmentsButtonProps) {\n const {\n attachments,\n disabled = false,\n onAddNewAttachment,\n onListAllAttachments,\n onViewAttachmentDetails,\n } = props;\n const { formRef } = useContext(ActionViewContext) as ActionViewContextType;\n const [preloading, setPreloading] = useState(false);\n const [preloadedAttachments, setPreloadedAttachments] = useState<\n Attachment[]\n >([]);\n const [downloading, setDownloading] = useState(false);\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n const preloadAttachments = useCallback(async () => {\n setPreloading(true);\n try {\n const results = await ConnectionProvider.getHandler().readObjects({\n model: \"ir.attachment\",\n ids: attachments.map((a: any) => a.id),\n fieldsToRetrieve: [\"name\", \"datas_fname\", \"link\"],\n context: (formRef.current as any).getContext(),\n });\n setPreloadedAttachments(\n results.map((r: any) => ({\n id: r.id,\n name: r.name,\n datas_fname: r.datas_fname,\n link: r.link,\n }))\n );\n } catch (error) {\n showErrorDialog(error as any);\n }\n setPreloading(false);\n }, attachments);\n\n const openAttachmentLink = useCallback(async (attachment: any) => {\n if (attachment.link) {\n window.open(attachment.link);\n return;\n }\n\n setDownloading(true);\n\n let retrievedAttachment;\n\n try {\n const results = await ConnectionProvider.getHandler().readObjects({\n model: \"ir.attachment\",\n ids: [attachment.id],\n context: (formRef.current as any).getContext(),\n });\n retrievedAttachment = results[0];\n } catch (error) {\n showErrorDialog(error as any);\n }\n\n setDownloading(false);\n\n if (!retrievedAttachment) {\n return;\n }\n\n if (retrievedAttachment.datas) {\n const fileType: any = await getMimeType(retrievedAttachment.datas);\n openBase64InNewTab(retrievedAttachment.datas, fileType.mime);\n } else {\n onViewAttachmentDetails(retrievedAttachment);\n }\n }, []);\n\n const openAttachmentDetail = useCallback(async (attachment: any) => {\n onViewAttachmentDetails(attachment);\n }, []);\n\n useEffect(() => {\n preloadAttachments();\n }, [preloadAttachments]);\n\n return (<>\n <AttachmentsButtonWrapper\n numberOfAttachments={attachments.length}\n attachments={preloadedAttachments}\n disabled={disabled}\n loading={preloading}\n onAddNewAttachment={onAddNewAttachment}\n onListAllAttachments={onListAllAttachments}\n onopenAttachmentLink={openAttachmentLink}\n onOpenAttachmentDetail={openAttachmentDetail}\n />\n <Modal\n title={t(\"downloadingAttachment\")}\n open={downloading}\n footer={null}\n closable={false}\n centered\n maskClosable={false}\n >\n <Spin />\n </Modal>\n </>);\n}\n\nexport default AttachmentsButton;\n","import React, { useContext, useEffect, useRef } from \"react\";\nimport { Space, Spin, message } from \"antd\";\nimport {\n SaveOutlined,\n RightOutlined,\n LeftOutlined,\n DeleteOutlined,\n ThunderboltOutlined,\n PrinterOutlined,\n EnterOutlined,\n ReloadOutlined,\n CopyOutlined,\n InfoCircleOutlined,\n} from \"@ant-design/icons\";\nimport ChangeViewButton from \"./ChangeViewButton\";\nimport DropdownButton from \"./DropdownButton\";\nimport ActionButton from \"./ActionButton\";\nimport {\n ActionViewContext,\n ActionViewContextType,\n} from \"@/context/ActionViewContext\";\nimport NewButton from \"./NewButton\";\nimport showUnsavedChangesDialog from \"@/ui/UnsavedChangesDialog\";\nimport showConfirmDialog from \"@/ui/ConfirmDialog\";\nimport showErrorDialog from \"@/ui/GenericErrorDialog\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport refreshChangesDialog from \"@/ui/RefreshItemDialog\";\nimport { showLogInfo } from \"@/helpers/logInfoHelper\";\n\nimport {\n TabManagerContext,\n TabManagerContextType,\n} from \"@/context/TabManagerContext\";\n\nimport {\n ContentRootContext,\n ContentRootContextType,\n} from \"@/context/ContentRootContext\";\nimport AttachmentsButton from \"./AttachmentsButton\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport { Attachment } from \"./AttachmentsButtonWrapper\";\n\nfunction FormActionBar({ toolbar }: { toolbar: any }) {\n const {\n availableViews,\n currentView,\n setCurrentView,\n onFormSave,\n formHasChanges,\n formIsSaving,\n currentId,\n results,\n setCurrentItemIndex,\n currentItemIndex,\n setCurrentId,\n currentModel,\n setRemovingItem,\n removingItem,\n duplicatingItem,\n setDuplicatingItem,\n setResults,\n formIsLoading,\n attachments,\n formRef,\n setFormHasChanges,\n previousView,\n setPreviousView,\n goToResourceId,\n } = useContext(ActionViewContext) as ActionViewContextType;\n const { t, lang } = useContext(LocaleContext) as LocaleContextType;\n\n const contentRootContext = useContext(\n ContentRootContext\n ) as ContentRootContextType;\n const { processAction } = contentRootContext || {};\n\n const tabManagerContext = useContext(\n TabManagerContext\n ) as TabManagerContextType;\n const { openRelate, openDefaultActionForModel } = tabManagerContext || {};\n\n function tryRefresh(callback: any) {\n if (formHasChanges) {\n refreshChangesDialog({\n lang,\n onOk: () => {\n callback();\n },\n });\n return;\n }\n\n callback();\n }\n\n function tryNavigate(callback: any) {\n if (formHasChanges) {\n showUnsavedChangesDialog({\n lang,\n onOk: () => {\n callback();\n },\n });\n return;\n }\n\n callback();\n }\n\n function onNextClick() {\n if (results && results.length > currentItemIndex! + 1) {\n setCurrentItemIndex?.(currentItemIndex! + 1);\n setCurrentId?.(results[currentItemIndex! + 1].id);\n } else if (results && currentItemIndex! + 1 === results.length) {\n setCurrentItemIndex?.(0);\n setCurrentId?.(results[0].id);\n }\n }\n\n function onPreviousClick() {\n if (results && currentItemIndex! > 0) {\n setCurrentItemIndex?.(currentItemIndex! - 1);\n setCurrentId?.(results[currentItemIndex! - 1].id);\n } else if (results && currentItemIndex === 0) {\n setCurrentItemIndex?.(results.length - 1);\n setCurrentId?.(results[results.length - 1].id);\n }\n }\n\n function tryDelete() {\n showConfirmDialog({\n confirmMessage: t(\"confirmRemoveItem\"),\n lang,\n onOk: () => {\n remove();\n },\n });\n }\n\n async function remove() {\n try {\n setRemovingItem?.(true);\n\n await ConnectionProvider.getHandler().deleteObjects({\n model: currentModel!,\n ids: [currentId!],\n });\n\n const filteredResults = results?.filter((item: any) => {\n return item.id !== currentId;\n });\n setResults?.(filteredResults!);\n\n let newIndex = 0;\n\n if (currentItemIndex! > 0 && currentItemIndex! <= results!.length - 1) {\n newIndex = currentItemIndex! - 1;\n }\n\n if (!filteredResults?.[newIndex]) {\n setCurrentId?.(undefined);\n setCurrentItemIndex?.(undefined);\n } else {\n setCurrentId?.(filteredResults?.[newIndex].id);\n setCurrentItemIndex?.(newIndex);\n }\n } catch (e) {\n showErrorDialog(JSON.stringify(e));\n } finally {\n setRemovingItem?.(false);\n }\n }\n\n async function duplicate() {\n try {\n setDuplicatingItem?.(true);\n\n const newId = await ConnectionProvider.getHandler().duplicate({\n id: currentId!,\n model: currentModel!,\n context: (formRef.current as any).getContext(),\n });\n\n if (newId) {\n await goToResourceId?.(newId);\n }\n } catch (e) {\n showErrorDialog(JSON.stringify(e));\n } finally {\n setDuplicatingItem?.(false);\n }\n }\n\n const mustDisableButtons =\n formIsSaving || removingItem || formIsLoading || duplicatingItem;\n\n function runAction(actionData: any) {\n processAction?.({\n actionData,\n values: (formRef.current as any).getValues(),\n fields: (formRef.current as any).getFields(),\n context: (formRef.current as any).getContext(),\n onRefreshParentValues: () => {\n (formRef.current as any).fetchValues();\n },\n });\n }\n\n if (!currentView) {\n return null;\n }\n\n return (\n <Space wrap={true}>\n {formIsLoading && (\n <>\n <Spin />\n {separator()}\n {separator()}\n </>\n )}\n <NewButton\n disabled={\n formIsSaving || formIsLoading || removingItem || duplicatingItem\n }\n />\n <ActionButton\n icon={<SaveOutlined />}\n tooltip={t(\"save\")}\n disabled={!formHasChanges || mustDisableButtons}\n loading={formIsSaving}\n onClick={onFormSave}\n />\n <ActionButton\n icon={<CopyOutlined />}\n tooltip={t(\"duplicate\")}\n disabled={\n formHasChanges ||\n formIsSaving ||\n currentId === undefined ||\n duplicatingItem ||\n formIsLoading\n }\n loading={duplicatingItem}\n onClick={duplicate}\n />\n <ActionButton\n icon={<DeleteOutlined />}\n tooltip={t(\"delete\")}\n disabled={\n formIsSaving ||\n currentId === undefined ||\n removingItem ||\n duplicatingItem ||\n formIsLoading\n }\n loading={removingItem}\n onClick={tryDelete}\n />\n {separator()}\n <ActionButton\n icon={<InfoCircleOutlined />}\n tooltip={t(\"showLogs\")}\n disabled={\n formIsSaving ||\n currentId === undefined ||\n removingItem ||\n duplicatingItem ||\n formIsLoading\n }\n loading={false}\n onClick={() => {\n showLogInfo(currentModel!, currentId!, t);\n }}\n />\n <ActionButton\n icon={<ReloadOutlined />}\n tooltip={t(\"refresh\")}\n disabled={\n formIsSaving ||\n currentId === undefined ||\n removingItem ||\n duplicatingItem ||\n formIsLoading\n }\n loading={false}\n onClick={() => {\n tryRefresh(() => {\n (formRef.current as any).fetchValues();\n });\n }}\n />\n {separator()}\n <ChangeViewButton\n currentView={currentView}\n previousView={previousView}\n availableViews={availableViews}\n onChangeView={(view: any) => {\n setPreviousView?.(currentView);\n setFormHasChanges?.(false);\n setCurrentView?.(view);\n }}\n disabled={mustDisableButtons}\n formHasChanges={formHasChanges}\n />\n {separator()}\n <Space>\n <ActionButton\n icon={<LeftOutlined />}\n tooltip={t(\"previous\")}\n disabled={mustDisableButtons}\n loading={false}\n onClick={() => {\n tryNavigate(onPreviousClick);\n }}\n />\n <ActionButton\n icon={<RightOutlined />}\n tooltip={t(\"next\")}\n disabled={mustDisableButtons}\n loading={false}\n onClick={() => {\n tryNavigate(onNextClick);\n }}\n />\n </Space>\n {separator()}\n <DropdownButton\n icon={<ThunderboltOutlined />}\n disabled={mustDisableButtons}\n tooltip={t(\"actions\")}\n items={toolbar?.action}\n onItemClick={async (action: any) => {\n if (!action) {\n return;\n }\n\n const result = await saveDocument({\n onFormSave,\n });\n\n if (!result.succeed) {\n return;\n }\n\n runAction(action);\n }}\n />\n <DropdownButton\n icon={<PrinterOutlined />}\n disabled={mustDisableButtons}\n tooltip={t(\"reports\")}\n items={toolbar?.print}\n onItemClick={async (report: any) => {\n if (!report) {\n return;\n }\n const result = await saveDocument({\n onFormSave,\n });\n\n if (!result.succeed) {\n return;\n }\n\n runAction({\n ...report,\n datas: {\n ...(report.datas || {}),\n ids: [result.currentId as number],\n },\n });\n }}\n />\n <DropdownButton\n icon={<EnterOutlined />}\n disabled={mustDisableButtons}\n tooltip={t(\"related\")}\n items={toolbar?.relate}\n onItemClick={async (relate: any) => {\n if (!relate) {\n return;\n }\n\n const result = await saveDocument({\n onFormSave,\n });\n\n if (!result.succeed) {\n return;\n }\n\n openRelate({\n relateData: relate,\n values: (formRef.current as any).getValues(),\n fields: (formRef.current as any).getFields(),\n action_id: relate.id,\n action_type: relate.type,\n });\n }}\n />\n <AttachmentsButton\n disabled={mustDisableButtons}\n attachments={attachments}\n onAddNewAttachment={async () => {\n const result = await saveDocument({\n onFormSave,\n });\n\n if (!result.succeed) {\n return;\n }\n\n const res_id = result.currentId as number;\n const res_model = currentModel as string;\n openDefaultActionForModel({\n model: \"ir.attachment\",\n values: {\n selection_associated_object: `${res_model},${res_id}`,\n },\n forced_values: {\n res_model,\n res_id,\n },\n initialViewType: \"form\",\n });\n }}\n onListAllAttachments={async () => {\n const result = await saveDocument({\n onFormSave,\n });\n\n if (!result.succeed) {\n return;\n }\n\n const res_id = result.currentId as number;\n const res_model = currentModel as string;\n openDefaultActionForModel({\n model: \"ir.attachment\",\n domain: [\n [\"res_model\", \"=\", `${res_model}`],\n [\"res_id\", \"=\", `${res_id}`],\n ],\n initialViewType: \"tree\",\n });\n }}\n onViewAttachmentDetails={async (attachment: Attachment) => {\n const result = await saveDocument({\n onFormSave,\n });\n\n if (!result.succeed) {\n return;\n }\n\n openDefaultActionForModel({\n model: \"ir.attachment\",\n res_id: attachment.id,\n initialViewType: \"form\",\n });\n }}\n />\n </Space>\n );\n}\n\nfunction separator() {\n return <div className=\"inline-block w-2\" />;\n}\n\nasync function saveDocument({\n onFormSave,\n}: {\n onFormSave?: () => Promise<{ succeed: boolean; id: number }>;\n}): Promise<{ succeed: boolean; currentId?: number }> {\n const result = await onFormSave?.();\n if (result?.succeed) {\n return { succeed: true, currentId: result.id };\n } else {\n return { succeed: false, currentId: undefined };\n }\n}\n\nexport default FormActionBar;\n","import React, { useContext, useEffect, useState } from \"react\";\nimport { Input, Button, Row, Col, theme } from \"antd\";\nimport { Char as CharOoui } from \"@gisce/ooui\";\nimport { EditOutlined, CheckOutlined } from \"@ant-design/icons\";\nimport { FormContext, FormContextType } from \"@/context/FormContext\";\nconst { useToken } = theme;\n\ninterface LinkInputProps {\n ooui: CharOoui;\n value?: string;\n onChange?: (value: string) => void;\n valueValidator: (value?: string) => boolean;\n linkPrefix?: string;\n}\n\nexport const LinkInput = (props: LinkInputProps) => {\n const { ooui, value, onChange, valueValidator, linkPrefix = \"\" } = props;\n const { id, readOnly, required } = ooui as CharOoui;\n const { token } = useToken();\n const requiredStyle =\n required && !readOnly\n ? { backgroundColor: token.colorPrimaryBg }\n : undefined;\n const formContext = useContext(FormContext) as FormContextType;\n const { elementHasLostFocus } = formContext || {};\n\n const [editMode, setEditMode] = useState(false);\n const [showInput, setShowInput] = useState(false);\n\n useEffect(() => {\n if (readOnly && !editMode) {\n setShowInput(false);\n }\n\n if (!value && !readOnly) {\n setEditMode(true);\n setShowInput(true);\n }\n }, [editMode, readOnly]);\n\n const onValueStringChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(e.target.value);\n };\n\n return (\n <Row gutter={8} wrap={false} align=\"middle\">\n {!readOnly ? (\n <Col flex=\"32px\">\n {editMode ? (\n <Button\n icon={<CheckOutlined />}\n onClick={() => {\n if (valueValidator(value)) {\n setEditMode(false);\n setShowInput(false);\n }\n }}\n style={{ borderTopRightRadius: 0, borderBottomRightRadius: 0 }}\n tabIndex={-1}\n />\n ) : (\n <Button\n icon={<EditOutlined />}\n onClick={() => {\n setEditMode(true);\n setShowInput(true);\n }}\n style={{ borderTopRightRadius: 0, borderBottomRightRadius: 0 }}\n tabIndex={-1}\n />\n )}\n </Col>\n ) : null}\n <Col flex=\"auto\">\n {showInput ? (\n <Input\n style={{ borderTopLeftRadius: 0, borderBottomLeftRadius: 0, ...requiredStyle }}\n id={id}\n onChange={onValueStringChange}\n value={value}\n onBlur={() => {\n if (valueValidator(value)) {\n setEditMode(false);\n setShowInput(false);\n elementHasLostFocus?.();\n }\n }}\n />\n ) : (\n <a\n href={`${linkPrefix}${value}`}\n style={{ color: token.colorPrimary, paddingRight: 15 }}\n target=\"_blank\"\n >\n {value}\n </a>\n )}\n </Col>\n </Row>\n );\n};\n","import React from \"react\";\nimport isURL from \"validator/lib/isURL\";\nimport Field from \"@/common/Field\";\n\nimport { WidgetProps } from \"@/types\";\nimport { LinkInput } from \"./LinkInput\";\nimport { Char as CharOoui } from \"@gisce/ooui\";\n\nexport const Url = (props: WidgetProps) => {\n const { ooui } = props;\n const { required } = ooui as CharOoui;\n\n return (\n <Field required={required} {...props}>\n <LinkInput\n ooui={ooui as CharOoui}\n valueValidator={(value) => {\n if (!value) {\n return false;\n }\n return isURL(value);\n }}\n />\n </Field>\n );\n};\n","import React from \"react\";\nimport isEmail from \"validator/lib/isEmail\";\nimport Field from \"@/common/Field\";\n\nimport { WidgetProps } from \"@/types\";\nimport { LinkInput } from \"./LinkInput\";\nimport { Char as CharOoui } from \"@gisce/ooui\";\n\nexport const Email = (props: WidgetProps) => {\n const { ooui } = props;\n const { required } = ooui as CharOoui;\n\n return (\n <Field required={required} {...props}>\n <LinkInput\n ooui={ooui as CharOoui}\n linkPrefix={\"mailto:\"}\n valueValidator={(value) => {\n if (!value) {\n return false;\n }\n return isEmail(value);\n }}\n />\n </Field>\n );\n};\n","import React, { useContext, useRef } from \"react\";\nimport { Button, Col, Form, InputNumber, Modal, Row, Space } from \"antd\";\nimport { CheckOutlined, CloseOutlined } from \"@ant-design/icons\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\ntype Props = {\n visible: boolean;\n onIdSubmitted: (id: number) => void;\n onCancel: () => void;\n isSearching: boolean;\n};\n\nexport const GoToResourceModal = (props: Props) => {\n const { visible, onIdSubmitted, onCancel, isSearching } = props;\n\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n const inputRef = useRef<null | HTMLElement>();\n\n function handleSubmit(values: any) {\n onIdSubmitted(values.id);\n }\n\n return (\n (<Modal\n title={t(\"goToResourceId\")}\n centered\n open={visible}\n footer={null}\n destroyOnClose\n onCancel={onCancel}\n maskClosable={false}\n afterOpenChange={(open) => open && inputRef.current?.focus()}\n >\n <Form layout=\"vertical\" onFinish={handleSubmit} autoComplete=\"off\">\n <Form.Item\n name={\"id\"}\n label={t(\"searchId\")}\n rules={[\n {\n required: true,\n type: \"number\",\n },\n ]}\n >\n <InputNumber style={{ width: \"100%\" }} autoFocus ref={inputRef as any}/>\n </Form.Item>\n <Row align=\"middle\" justify=\"end\">\n <Col>\n <Space>\n <Button\n icon={<CloseOutlined />}\n htmlType=\"button\"\n onClick={onCancel}\n disabled={isSearching}\n >\n {t(\"cancel\")}\n </Button>\n <Button\n loading={isSearching}\n style={{ marginLeft: 15 }}\n icon={<CheckOutlined />}\n htmlType=\"submit\"\n type=\"primary\"\n disabled={isSearching}\n >\n {t(\"ok\")}\n </Button>\n </Space>\n </Col>\n </Row>\n </Form>\n </Modal>)\n );\n};\n","import React from \"react\";\nimport ButtonWithTooltip, {Props as ButtonWithTooltipProps } from \"@/common/ButtonWithTooltip\";\nimport { theme } from 'antd';\nconst { useToken } = theme;\n\ntype Props = ButtonWithTooltipProps & {\n badgeNumber?: number;\n};\n\nfunction ButtonWithBadge(props: Props) {\n const { badgeNumber = 0, ...restProps } = props;\n const { token } = useToken();\n\n return (\n <div style={{ position: \"relative\" }}>\n {badgeNumber > 0 && (\n <div style={{ position: \"absolute\", left: -10, top: -10, zIndex: 2 }}>\n <span\n style={{\n display: \"inline-block\",\n minWidth: \"22px\",\n padding: \"2px\",\n borderRadius: \"50%\",\n fontSize: \"12px\",\n textAlign: \"center\",\n background: token.colorPrimaryHover,\n color: token.colorPrimaryBg,\n }}\n >\n {badgeNumber}\n </span>\n </div>\n )}\n <ButtonWithTooltip\n {...restProps}\n style={{ width: 46, zIndex: 0 }}\n ></ButtonWithTooltip>\n </div>\n );\n}\n\nexport default ButtonWithBadge;\n","import React, { useContext } from \"react\";\nimport { Space } from \"antd\";\nimport ChangeViewButton from \"./ChangeViewButton\";\nimport {\n ActionViewContext,\n ActionViewContextType,\n} from \"@/context/ActionViewContext\";\nimport ActionButton from \"./ActionButton\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport ButtonWithBadge from \"./ButtonWithBadge\";\nimport { ReloadOutlined, FilterOutlined } from \"@ant-design/icons\";\nimport { View } from \"@/types\";\n\nfunction GraphActionBar({ refreshGraph }: { refreshGraph: () => void }) {\n const { t } = useContext(LocaleContext) as LocaleContextType;\n const {\n availableViews,\n currentView,\n setCurrentView,\n searchParams,\n searchVisible,\n setSearchVisible,\n graphIsLoading,\n previousView,\n setPreviousView,\n } = useContext(ActionViewContext) as ActionViewContextType;\n\n return (\n <Space wrap={true}>\n <ButtonWithBadge\n icon={\n <FilterOutlined\n style={{ color: searchVisible ? \"white\" : undefined }}\n />\n }\n tooltip={t(\"advanced_search\")}\n type={searchVisible ? \"primary\" : \"default\"}\n onClick={() => {\n setSearchVisible?.(!searchVisible);\n }}\n disabled={graphIsLoading}\n badgeNumber={searchParams?.length}\n />\n <ActionButton\n icon={<ReloadOutlined />}\n tooltip={t(\"refresh\")}\n disabled={graphIsLoading}\n loading={false}\n onClick={() => {\n refreshGraph();\n }}\n />\n <ChangeViewButton\n currentView={currentView}\n availableViews={availableViews}\n onChangeView={(newView: View) => {\n setPreviousView?.(currentView);\n setCurrentView?.(newView);\n }}\n disabled={false}\n previousView={previousView}\n />\n </Space>\n );\n}\n\nexport default GraphActionBar;\n","import React, { useContext } from \"react\";\nimport { Row, Col, Typography, theme } from \"antd\";\nimport {\n ActionViewContext,\n ActionViewContextType,\n} from \"@/context/ActionViewContext\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport { CopyOutlined } from \"@ant-design/icons\";\n\nconst { useToken } = theme;\n\nconst { Title, Text } = Typography;\n\ntype Props = {\n title?: string;\n children?: any;\n};\n\nfunction TitleHeader(props: Props) {\n const { title: titleProps, children } = props;\n const {\n title,\n currentView,\n currentId,\n currentItemIndex,\n results,\n totalItems,\n selectedRowItems,\n } = useContext(ActionViewContext) as ActionViewContextType;\n const { t } = useContext(LocaleContext) as LocaleContextType;\n const { token } = useToken();\n\n function getSummary() {\n if (currentView?.type === \"form\") {\n if (!currentId) {\n return \"\";\n }\n\n if (totalItems === 0) {\n return (\n <>\n {t(\"editingDocument\")} (id:{\" \"}\n <Text\n copyable={{ icon: <CopyOutlined style={{ color: \"red\" }} /> }}\n >\n {currentId}\n </Text>\n )\n </>\n );\n }\n\n return (\n <>\n {t(\"register\")}{\" \"}\n {currentItemIndex === undefined ? 1 : currentItemIndex + 1} /{\" \"}\n {results!.length} {t(\"of\")} {totalItems} - {t(\"editingDocument\")} (id:{\" \"}\n <Text copyable>{currentId}</Text>)\n </>\n );\n } else if (currentView?.type === \"tree\" && selectedRowItems) {\n if (selectedRowItems.length === 1) {\n return (\n <>\n 1 {t(\"selectedRegisters\")} - (id:{\" \"}\n <Text copyable>{selectedRowItems[0].id}</Text>)\n </>\n );\n } else if (selectedRowItems.length > 1) {\n return (\n <>\n {selectedRowItems.length} {t(\"selectedRegisters\")}\n <Text\n copyable={{\n text: selectedRowItems.map((reg) => reg.id).join(\", \"),\n }}\n ></Text>\n </>\n );\n }\n }\n return null;\n }\n return (\n <div style={{ position: \"sticky\", top: 80, zIndex: 3 }}>\n <Row\n className=\"shadow-md\"\n style={{\n padding: \"1em\",\n borderRadius: token.borderRadius,\n backgroundColor: token.colorPrimaryBg,\n }}\n align=\"middle\"\n >\n <Col flex={2}>\n <Title level={3} style={{ marginBottom: 0 }}>\n {titleProps || title}\n </Title>\n {getSummary()}\n </Col>\n <Col flex={3}>\n <Row justify=\"end\">{children}</Row>\n </Col>\n </Row>\n <div className=\"pb-5\" />\n </div>\n );\n}\n\nexport default TitleHeader;\n","import GraphActionBar from \"@/actionbar/GraphActionBar\";\nimport TitleHeader from \"@/ui/TitleHeader\";\nimport { Graph } from \"@/widgets/views/Graph/Graph\";\nimport React, { useContext, useEffect, useRef, useState } from \"react\";\nimport {\n ActionViewContext,\n ActionViewContextType,\n} from \"@/context/ActionViewContext\";\nimport { FormView, TreeView } from \"@/types\";\nimport { mergeSearchFields } from \"@/helpers/formHelper\";\nimport { useSearch } from \"@/hooks/useSearch\";\nimport SearchFilter from \"@/widgets/views/searchFilter/SearchFilter\";\nimport { Spin } from \"antd\";\nimport { mergeParams } from \"@/helpers/searchHelper\";\n\nexport type GraphActionViewProps = {\n viewData: any;\n visible: boolean;\n model: string;\n context: any;\n domain: any;\n formView: FormView;\n treeView: TreeView;\n};\n\nexport const GraphActionView = (props: GraphActionViewProps) => {\n const { viewData, visible, model, context, domain, formView, treeView } =\n props;\n const graphRef = useRef();\n\n const actionViewContext = useContext(\n ActionViewContext\n ) as ActionViewContextType;\n const {\n setResults: setResultsActionView = undefined,\n setCurrentItemIndex = undefined,\n currentId = undefined,\n results: resultsActionView = undefined,\n setSelectedRowItems = undefined,\n setSearchParams = undefined,\n searchVisible = true,\n setSearchVisible = undefined,\n sorter = undefined,\n setSorter = undefined,\n setTotalItems: setActionViewTotalItems = undefined,\n setSearchTreeNameSearch = undefined,\n setTreeIsLoading = undefined,\n limit,\n setLimit,\n searchParams,\n searchValues,\n setSearchValues,\n currentView,\n } = actionViewContext || {};\n\n const [applyLimit, setApplyLimit] = useState(true);\n\n useEffect(() => {\n (graphRef.current as any)?.refresh();\n }, [searchParams]);\n\n useEffect(() => {\n if (viewData.view_id !== currentView.view_id) {\n setApplyLimit(true);\n }\n }, [currentView]);\n\n const { clear, searchFilterLoading, searchError, offset, tableRefreshing } =\n useSearch({\n model,\n setSearchTreeNameSearch,\n setSelectedRowItems,\n searchParams,\n setSearchValues,\n setSearchParams,\n setSearchVisible,\n setTreeIsLoading,\n context,\n formView: formView!,\n treeView: treeView!,\n sorter,\n setSorter,\n setCurrentItemIndex,\n setResultsActionView,\n resultsActionView,\n domain,\n currentId,\n setActionViewTotalItems,\n limit,\n setLimit,\n });\n\n if (!visible) {\n return null;\n }\n\n if (!viewData) {\n return null;\n }\n\n return (\n <>\n <TitleHeader title={viewData.name}>\n <GraphActionBar\n refreshGraph={() => {\n (graphRef.current as any).refresh();\n }}\n />\n </TitleHeader>\n <SearchFilter\n fields={{ ...treeView.fields, ...formView.fields }}\n searchFields={mergeSearchFields([\n formView.search_fields,\n treeView.search_fields,\n ])}\n limit={limit!}\n onClear={clear}\n offset={offset}\n isSearching={searchFilterLoading}\n onSubmit={(opts: {\n params: any;\n limit: number;\n offset: number;\n searchValues: any;\n }) => {\n setApplyLimit(false);\n setSearchParams?.(opts.params);\n setSearchVisible?.(false);\n }}\n searchError={searchError}\n searchVisible={searchVisible}\n searchValues={searchValues}\n showLimitOptions={false}\n />\n {tableRefreshing ? (\n <Spin />\n ) : (\n <Graph\n ref={graphRef}\n view_id={viewData.view_id}\n model={model}\n context={context}\n domain={mergeParams(searchParams || [], domain)}\n limit={applyLimit ? limit : undefined}\n manualIds={\n applyLimit ? resultsActionView?.map((r) => r.id) : undefined\n }\n />\n )}\n </>\n );\n};\n","import FormActionBar from \"@/actionbar/FormActionBar\";\nimport { FormView } from \"@/types\";\nimport TitleHeader from \"@/ui/TitleHeader\";\nimport Form from \"@/widgets/views/Form\";\nimport React from \"react\";\n\nexport type FormActionViewProps = {\n formView?: FormView;\n visible: boolean;\n formRef: any;\n model: string;\n currentId?: number;\n domain: any;\n context: any;\n defaultValues?: any;\n forcedValues?: any;\n results: any[];\n setResults: (value: any[]) => void;\n setCurrentItemIndex: (value?: number) => void;\n};\n\nexport const FormActionView = (props: FormActionViewProps) => {\n const {\n visible,\n formRef,\n model,\n currentId,\n domain,\n formView,\n context,\n defaultValues,\n forcedValues,\n results,\n setResults,\n setCurrentItemIndex,\n } = props;\n\n if (!visible) {\n return null;\n }\n\n return (\n <>\n <TitleHeader>\n <FormActionBar toolbar={formView?.toolbar} />\n </TitleHeader>\n <Form\n rootForm={true}\n ref={formRef}\n model={model}\n defaultValues={defaultValues}\n forcedValues={forcedValues}\n formView={formView}\n actionDomain={domain}\n id={currentId}\n parentContext={context}\n onSubmitSucceed={(id, values) => {\n const itemIndex = results!.findIndex((item: any) => {\n return item.id === id;\n });\n if (itemIndex === -1) {\n results!.push(values);\n setResults(results);\n setCurrentItemIndex(results!.length - 1);\n }\n }}\n />\n </>\n );\n};\n","import React, { useContext, useEffect, useState } from \"react\";\nimport { Button, Col, Form, Input, Row, Tooltip } from \"antd\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport { CloseCircleFilled } from \"@ant-design/icons\";\n\ntype Props = {\n onSearch: (searchValue?: string) => void;\n searchText?: string;\n disabled?: boolean;\n};\n\nfunction SearchBar(props: Props) {\n const { onSearch, disabled = false, searchText } = props;\n const { t } = useContext(LocaleContext) as LocaleContextType;\n const [form] = Form.useForm();\n const [mustShowClearSuffix, setMustShowClearSuffix] =\n useState<boolean>(false);\n\n function handleSubmit(values: any) {\n onSearch(values.search);\n }\n\n useEffect(() => {\n form.setFieldsValue({ search: searchText });\n }, [searchText]);\n\n function clear() {\n setMustShowClearSuffix(false);\n form.setFieldsValue({ search: undefined });\n onSearch(undefined);\n }\n\n return (\n <Form form={form} onFinish={handleSubmit} autoComplete=\"off\">\n <Row align=\"middle\" justify=\"end\">\n <Col>\n <Form.Item name={\"search\"} noStyle>\n <Input\n autoFocus\n disabled={disabled}\n onChange={(e) => {\n setMustShowClearSuffix(e.target.value.length > 0);\n }}\n style={{ borderTopRightRadius: 0, borderBottomRightRadius: 0 }}\n suffix={\n (mustShowClearSuffix ||\n (searchText && searchText.length > 0)) && (\n <Tooltip title={t(\"clear\")}>\n <CloseCircleFilled\n style={{ color: \"rgba(0,0,0,.45)\" }}\n onClick={clear}\n />\n </Tooltip>\n )\n }\n />\n </Form.Item>\n </Col>\n <Col>\n <Button\n htmlType=\"submit\"\n disabled={disabled}\n style={{ borderTopLeftRadius: 0, borderBottomLeftRadius: 0 }}\n >\n {t(\"search\")}\n </Button>\n </Col>\n </Row>\n </Form>\n );\n}\n\nexport default SearchBar;\n","import React from \"react\";\n\ninterface ConfigContextProps {\n previewFeatures: boolean;\n}\n\nexport const ConfigContext = React.createContext<ConfigContextProps>({\n previewFeatures: false,\n});\n","import React, { useContext, useState } from \"react\";\nimport { Space, Spin } from \"antd\";\nimport ChangeViewButton from \"./ChangeViewButton\";\nimport {\n ActionViewContext,\n ActionViewContextType,\n} from \"@/context/ActionViewContext\";\nimport NewButton from \"./NewButton\";\nimport ActionButton from \"./ActionButton\";\nimport Icon, {\n DeleteOutlined,\n PrinterOutlined,\n ThunderboltOutlined,\n CopyOutlined,\n ReloadOutlined,\n InfoCircleOutlined,\n FilterOutlined,\n} from \"@ant-design/icons\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport showConfirmDialog from \"@/ui/ConfirmDialog\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport showErrorDialog from \"@/ui/ActionErrorDialog\";\nimport DropdownButton from \"./DropdownButton\";\nimport {\n ContentRootContext,\n ContentRootContextType,\n} from \"@/context/ContentRootContext\";\nimport ButtonWithBadge from \"./ButtonWithBadge\";\nimport { showLogInfo } from \"@/helpers/logInfoHelper\";\nimport SearchBar from \"./SearchBar\";\nimport { ExportModal } from \"..\";\nimport { mergeParams } from \"@/helpers/searchHelper\";\nimport { ConfigContext } from \"@/context/ConfigContext\";\n\ntype Props = {\n parentContext?: any;\n treeExpandable: boolean;\n toolbar: any;\n};\n\nfunction TreeActionBar(props: Props) {\n const {\n availableViews,\n currentView,\n setCurrentView,\n selectedRowItems,\n setRemovingItem,\n removingItem,\n duplicatingItem,\n setDuplicatingItem,\n currentModel,\n searchTreeRef,\n setCurrentId,\n setCurrentItemIndex,\n searchParams,\n searchVisible,\n setSearchVisible,\n setSearchTreeNameSearch,\n searchTreeNameSearch,\n treeIsLoading,\n setPreviousView,\n previousView,\n results,\n limit,\n totalItems,\n } = useContext(ActionViewContext) as ActionViewContextType;\n\n const { parentContext = {}, treeExpandable, toolbar } = props;\n const { previewFeatures } = useContext(ConfigContext);\n const { t, lang } = useContext(LocaleContext) as LocaleContextType;\n const contentRootContext = useContext(\n ContentRootContext\n ) as ContentRootContextType;\n const { processAction } = contentRootContext || {};\n const [exportModalVisible, setExportModalVisible] = useState(false);\n\n const hasNameSearch: boolean =\n searchTreeNameSearch !== undefined &&\n searchTreeNameSearch.trim().length > 0;\n\n function tryDelete() {\n showConfirmDialog({\n confirmMessage: t(\"confirmRemove\"),\n lang,\n onOk: () => {\n remove();\n },\n });\n }\n\n async function remove() {\n try {\n setRemovingItem?.(true);\n\n await ConnectionProvider.getHandler().deleteObjects({\n model: currentModel!,\n ids: selectedRowItems!.map((item) => item.id),\n });\n\n setCurrentId?.(undefined);\n setCurrentItemIndex?.(undefined);\n\n searchTreeRef?.current?.refreshResults();\n } catch (e) {\n showErrorDialog(e);\n } finally {\n setRemovingItem?.(false);\n }\n }\n\n async function duplicate() {\n try {\n setDuplicatingItem?.(true);\n\n const currentId = selectedRowItems![0].id;\n\n const newId = await ConnectionProvider.getHandler().duplicate({\n id: currentId,\n model: currentModel!,\n context: { ...parentContext },\n });\n\n if (newId) {\n searchTreeRef?.current?.refreshResults();\n }\n } catch (e) {\n showErrorDialog(e);\n } finally {\n setDuplicatingItem?.(false);\n }\n }\n\n function runAction(actionData: any) {\n processAction?.({\n actionData,\n values: {\n active_id: selectedRowItems?.map((item) => item.id)[0],\n active_ids: selectedRowItems?.map((item) => item.id),\n },\n fields: {},\n context: {\n ...parentContext,\n active_id: selectedRowItems?.map((item) => item.id)[0],\n active_ids: selectedRowItems?.map((item) => item.id),\n },\n onRefreshParentValues: () => {\n searchTreeRef?.current?.refreshResults();\n },\n });\n }\n\n return (\n <Space wrap={true}>\n {treeIsLoading && (\n <>\n <Spin />\n {separator()}\n {separator()}\n </>\n )}\n {treeExpandable ? null : (\n <>\n <SearchBar\n disabled={duplicatingItem || removingItem || treeIsLoading}\n searchText={searchTreeNameSearch}\n onSearch={(searchString?: string) => {\n if (searchString && searchString.trim().length > 0) {\n setSearchTreeNameSearch?.(searchString);\n } else {\n setSearchTreeNameSearch?.(undefined);\n }\n }}\n />\n {!treeExpandable && (\n <ButtonWithBadge\n icon={\n <FilterOutlined\n style={{ color: searchVisible ? \"white\" : undefined }}\n />\n }\n tooltip={t(\"advanced_search\")}\n type={searchVisible ? \"primary\" : \"default\"}\n onClick={() => {\n setSearchVisible?.(!searchVisible);\n }}\n disabled={duplicatingItem || removingItem || treeIsLoading}\n badgeNumber={searchParams?.length}\n />\n )}\n {separator()}\n <NewButton disabled={treeIsLoading} />\n <ActionButton\n icon={<CopyOutlined />}\n tooltip={t(\"duplicate\")}\n disabled={\n !selectedRowItems ||\n selectedRowItems?.length !== 1 ||\n duplicatingItem ||\n treeIsLoading\n }\n loading={duplicatingItem}\n onClick={duplicate}\n />\n <ActionButton\n icon={<DeleteOutlined />}\n tooltip={t(\"delete\")}\n disabled={\n !(selectedRowItems && selectedRowItems?.length > 0) ||\n treeIsLoading\n }\n loading={removingItem}\n onClick={tryDelete}\n />\n {separator()}\n </>\n )}\n <ActionButton\n icon={<InfoCircleOutlined />}\n tooltip={t(\"showLogs\")}\n disabled={\n !(selectedRowItems && selectedRowItems?.length > 0) || treeIsLoading\n }\n loading={false}\n onClick={() => {\n showLogInfo(currentModel!, selectedRowItems![0].id, t);\n }}\n />\n <ActionButton\n icon={<ReloadOutlined />}\n tooltip={t(\"refresh\")}\n disabled={duplicatingItem || removingItem || treeIsLoading}\n loading={false}\n onClick={() => {\n searchTreeRef?.current?.refreshResults();\n }}\n />\n {!treeExpandable && (\n <>\n {separator()}\n <ChangeViewButton\n currentView={currentView}\n availableViews={availableViews}\n onChangeView={(newView) => {\n setPreviousView?.(currentView);\n setCurrentView?.(newView);\n }}\n previousView={previousView}\n disabled={treeIsLoading}\n />\n </>\n )}\n {separator()}\n <DropdownButton\n icon={<ThunderboltOutlined />}\n disabled={\n !(selectedRowItems && selectedRowItems?.length > 0) || treeIsLoading\n }\n tooltip={t(\"actions\")}\n items={toolbar?.action}\n onItemClick={(action: any) => {\n if (!action) {\n return;\n }\n\n runAction(action);\n }}\n />\n <DropdownButton\n icon={<PrinterOutlined />}\n disabled={\n !(selectedRowItems && selectedRowItems?.length > 0) || treeIsLoading\n }\n tooltip={t(\"reports\")}\n items={toolbar?.print}\n onItemClick={(report: any) => {\n if (!report) {\n return;\n }\n\n runAction({\n ...report,\n datas: {\n ...(report.datas || {}),\n ids: selectedRowItems!.map((item) => item.id),\n },\n });\n }}\n />\n\n {separator()}\n <DropdownButton\n icon={\n <Icon\n component={() => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"icon icon-tabler icon-tabler-database-export\"\n width=\"1em\"\n height=\"1em\"\n viewBox=\"0 0 24 24\"\n strokeWidth=\"1.5\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\n <ellipse cx=\"12\" cy=\"6\" rx=\"8\" ry=\"3\" />\n <path d=\"M4 6v6c0 1.657 3.582 3 8 3a19.84 19.84 0 0 0 3.302 -.267m4.698 -2.733v-6\" />\n <path d=\"M4 12v6c0 1.599 3.335 2.905 7.538 2.995m8.462 -6.995v-2m-6 7h7m-3 -3l3 3l-3 3\" />\n </svg>\n )}\n />\n }\n tooltip={t(\"export\")}\n items={[\n {\n id: \"print_screen\",\n name: t(\"printScreen\"),\n },\n {\n id: \"export\",\n name: t(\"advancedExport\"),\n },\n ]}\n onItemClick={(itemClicked: any) => {\n if (itemClicked.id === \"print_screen\") {\n let idsToExport = selectedRowItems?.map((item) => item.id) || [];\n\n if (idsToExport.length === 0) {\n idsToExport = results?.map((item) => item.id) || [];\n }\n\n runAction({\n id: -1,\n model: currentModel,\n report_name: \"printscreen.list\",\n type: \"ir.actions.report.xml\",\n datas: {\n model: currentModel,\n ids: idsToExport,\n },\n });\n return;\n }\n\n setExportModalVisible(true);\n }}\n disabled={\n duplicatingItem || removingItem || treeIsLoading || hasNameSearch\n }\n />\n <ExportModal\n visible={exportModalVisible}\n locale={lang}\n onClose={() => setExportModalVisible(false)}\n model={currentModel!}\n domain={mergeParams(\n searchTreeRef?.current?.getDomain() || [],\n searchParams || []\n )}\n limit={limit}\n totalRegisters={totalItems || 0}\n selectedRegistersToExport={selectedRowItems}\n visibleRegisters={results?.length || 0}\n context={parentContext}\n />\n </Space>\n );\n}\n\nfunction separator() {\n return <div className=\"inline-block w-2\" />;\n}\n\nexport default TreeActionBar;\n","import TreeActionBar from \"@/actionbar/TreeActionBar\";\nimport { FormView, TreeView, View } from \"@/types\";\nimport TitleHeader from \"@/ui/TitleHeader\";\nimport SearchTree from \"@/widgets/views/SearchTree\";\nimport React, { useContext } from \"react\";\nimport {\n ActionViewContext,\n ActionViewContextType,\n} from \"@/context/ActionViewContext\";\n\nexport type TreeActionViewProps = {\n formView?: FormView;\n treeView?: TreeView;\n visible: boolean;\n searchTreeRef: any;\n model: string;\n domain: any;\n context: any;\n results: any[];\n setCurrentItemIndex: (value?: number) => void;\n setCurrentId: (id?: number) => void;\n setCurrentView: (view: View) => void;\n availableViews: View[];\n searchTreeNameSearch?: string;\n limit?: number;\n};\n\nexport const TreeActionView = (props: TreeActionViewProps) => {\n const {\n visible,\n searchTreeRef,\n model,\n context,\n formView,\n treeView,\n domain,\n setCurrentItemIndex,\n results,\n setCurrentId,\n setCurrentView,\n availableViews,\n searchTreeNameSearch,\n } = props;\n\n const { currentView, setPreviousView } = useContext(\n ActionViewContext\n ) as ActionViewContextType;\n\n if (!visible) {\n return null;\n }\n\n return (\n <>\n <TitleHeader>\n <TreeActionBar\n toolbar={treeView?.toolbar}\n parentContext={context}\n treeExpandable={treeView?.isExpandable || false}\n />\n </TitleHeader>\n <SearchTree\n ref={searchTreeRef}\n rootTree={true}\n model={model}\n parentContext={context}\n nameSearch={searchTreeNameSearch}\n formView={formView}\n treeView={treeView}\n domain={domain}\n onRowClicked={(event: any) => {\n const { id } = event;\n setCurrentId(id);\n const itemIndex = results.findIndex((item: any) => {\n return item.id === id;\n });\n setPreviousView?.(currentView);\n setCurrentItemIndex(itemIndex);\n const formView = availableViews.find(\n (v) => v.type === \"form\"\n ) as FormView;\n setCurrentView(formView);\n }}\n />\n </>\n );\n};\n","import { ShortcutApi } from \"@/ui/FavouriteButton\";\nimport React, { useState } from \"react\";\n\nexport type DashboardActionContextType = {\n isLoading: boolean;\n setIsLoading: (value: boolean) => void;\n dashboardRef: any;\n openAction: (action?: ShortcutApi) => void;\n moveItemsEnabled: boolean;\n setMoveItemsEnabled: (value: boolean) => void;\n};\n\nexport const DashboardActionContext = React.createContext<DashboardActionContextType | null>(\n null\n);\n\ntype DashboardActionProviderProps = {\n children: React.ReactNode;\n dashboardRef: any;\n openAction: (action?: ShortcutApi) => void;\n};\n\nconst DashboardActionProvider = (props: DashboardActionProviderProps): any => {\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [moveItemsEnabled, setMoveItemsEnabled] = useState<boolean>(false);\n\n const { children, dashboardRef, openAction } = props;\n\n return (\n <DashboardActionContext.Provider\n value={{\n isLoading,\n setIsLoading,\n dashboardRef,\n openAction,\n moveItemsEnabled,\n setMoveItemsEnabled,\n }}\n >\n {children}\n </DashboardActionContext.Provider>\n );\n};\n\nexport default DashboardActionProvider;\n","import React, { useContext } from \"react\";\nimport {\n DashboardActionContext,\n DashboardActionContextType,\n} from \"@/context/DashboardActionContext\";\nimport { Space } from \"antd\";\nimport ActionButton from \"./ActionButton\";\nimport {\n ReloadOutlined,\n SettingOutlined,\n BorderOuterOutlined,\n} from \"@ant-design/icons\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\nfunction DashboardActionBar() {\n const {\n isLoading,\n dashboardRef,\n moveItemsEnabled,\n setMoveItemsEnabled,\n } = useContext(DashboardActionContext) as DashboardActionContextType;\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n return (\n <Space wrap={true}>\n <ActionButton\n icon={\n <BorderOuterOutlined\n style={{ color: moveItemsEnabled ? \"white\" : undefined }}\n />\n }\n type={moveItemsEnabled ? \"primary\" : \"default\"}\n tooltip={t(\"moveDashboard\")}\n disabled={isLoading}\n loading={false}\n onClick={() => {\n setMoveItemsEnabled(!moveItemsEnabled);\n }}\n />\n {separator()}\n <ActionButton\n icon={<SettingOutlined />}\n tooltip={t(\"configDashboard\")}\n disabled={isLoading}\n loading={false}\n onClick={() => {\n dashboardRef?.current.configDashboard();\n }}\n />\n <ActionButton\n icon={<ReloadOutlined />}\n tooltip={t(\"refresh\")}\n disabled={isLoading}\n loading={false}\n onClick={() => {\n dashboardRef?.current.refresh();\n }}\n />\n </Space>\n );\n}\n\nfunction separator() {\n return <div className=\"inline-block w-2\" />;\n}\n\nexport default DashboardActionBar;\n","import DashboardActionBar from \"@/actionbar/DashboardActionBar\";\nimport DashboardActionProvider from \"@/context/DashboardActionContext\";\nimport TitleHeader from \"@/ui/TitleHeader\";\nimport Dashboard from \"@/widgets/views/Dashboard/Dashboard\";\nimport React, { useContext, useRef } from \"react\";\nimport {\n TabManagerContext,\n TabManagerContextType,\n} from \"@/context/TabManagerContext\";\nimport { DashboardProps } from \"@/types\";\n\nexport type DashboardActionViewProps = {\n dashboardData: DashboardProps;\n};\n\nexport const DashboardActionView = (props: DashboardActionViewProps) => {\n const { dashboardData } = props;\n const dashboardRef = useRef();\n const tabManagerContext = useContext(\n TabManagerContext\n ) as TabManagerContextType;\n const { openShortcut } = tabManagerContext || {};\n\n if (!dashboardData) {\n return null;\n }\n\n return (\n <DashboardActionProvider\n dashboardRef={dashboardRef}\n openAction={(action) => {\n openShortcut(action!);\n }}\n >\n <TitleHeader>\n <DashboardActionBar />\n </TitleHeader>\n <Dashboard\n ref={dashboardRef}\n model={dashboardData!.model}\n id={dashboardData!.id}\n context={dashboardData?.context}\n configAction={dashboardData?.configAction}\n />\n </DashboardActionProvider>\n );\n};\n","import { ViewTuple, ViewType } from \"@/types\";\n\nexport async function resolveViewInfoPromises(\n viewsToRetrieve: { viewTuple: ViewTuple; promise?: Promise<any> }[]\n) {\n const results = await Promise.all(\n viewsToRetrieve.map(async (item) => {\n try {\n return await item.promise;\n } catch (error) {\n console.error(`Error for ${item.viewTuple}:`, error);\n return null;\n }\n })\n );\n\n const updatedViews = viewsToRetrieve.map((item, index) => ({\n ...item,\n info: results[index],\n }));\n\n return updatedViews.filter((item) => item.info !== null);\n}\n","import React, {\n useEffect,\n useState,\n useRef,\n forwardRef,\n useImperativeHandle,\n useContext,\n} from \"react\";\n\nimport { Spin } from \"antd\";\n\nimport {\n DashboardView,\n FormView,\n GraphView,\n InitialViewData,\n TreeView,\n View,\n ViewType,\n} from \"@/types/index\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\n\nimport ActionViewProvider from \"@/context/ActionViewContext\";\nimport {\n TabManagerContext,\n TabManagerContextType,\n} from \"@/context/TabManagerContext\";\nimport { useHotkeys } from \"react-hotkeys-hook\";\nimport { GoToResourceModal } from \"@/ui/GoToResourceModal\";\nimport showInfo from \"@/ui/InfoDialog\";\nimport showErrorDialog from \"@/ui/ActionErrorDialog\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport { GraphActionView } from \"@/views/actionViews/GraphActionView\";\nimport { FormActionView } from \"./actionViews/FormActionView\";\nimport { TreeActionView } from \"./actionViews/TreeActionView\";\nimport { DashboardActionView } from \"./actionViews/DashboardActionView\";\nimport { info } from \"console\";\nimport { resolveViewInfoPromises } from \"@/helpers/viewHelper\";\n\ntype Props = {\n domain: any;\n context: any;\n model: string;\n views: Array<[number, ViewType]>;\n title: string;\n tabKey: string;\n setCanWeClose: (f: any) => void;\n initialView: InitialViewData;\n formDefaultValues?: any;\n formForcedValues?: any;\n res_id?: number | boolean;\n action_id: number;\n action_type: string;\n treeExpandable?: boolean;\n limit?: number;\n};\n\nfunction ActionView(props: Props, ref: any) {\n const {\n domain,\n model,\n context,\n views,\n title,\n setCanWeClose,\n tabKey,\n initialView,\n formDefaultValues,\n formForcedValues = {},\n res_id = false,\n action_id,\n action_type,\n treeExpandable = false,\n limit,\n } = props;\n const [currentView, setCurrentViewInternal] = useState<View>();\n\n const [availableViews, setAvailableViews] = useState<View[]>([]);\n\n const [isLoading, setIsLoading] = useState<boolean>(true);\n const res_id_parsed: number | undefined = res_id\n ? (res_id as number)\n : undefined;\n\n const [currentId, setCurrentIdInternal] =\n useState<number | undefined>(res_id_parsed);\n const [selectedRowItems, setSelectedRowItems] = useState<any[]>([]);\n const [currentItemIndex, setCurrentItemIndex] = useState<number>();\n const [results, setResults] = useState<any>([]);\n const [sorter, setSorter] = useState<any>();\n const [totalItems, setTotalItems] = useState<number>(0);\n const [gtResourceModalVisible, setGtResourceModalVisible] =\n useState<boolean>(false);\n const [searchingForResourceId, setSearchingForResourceId] =\n useState<boolean>(false);\n const [searchTreeNameSearch, setSearchTreeNameSearch] = useState<string>();\n\n const { t } = (useContext(LocaleContext) as LocaleContextType) || {};\n\n const formRef = useRef();\n const searchTreeRef = useRef();\n\n const tabManagerContext = useContext(\n TabManagerContext\n ) as TabManagerContextType;\n const {\n setCurrentView: setCurrentViewTabContext,\n setCurrentId: setCurrentIdTabContext,\n tabs,\n activeKey,\n openAction,\n onRemoveTab,\n } = tabManagerContext || {};\n\n useHotkeys(\n \"ctrl+g,command+g\",\n (event) => {\n event.preventDefault();\n handleGoToRecordShortcut();\n },\n [activeKey, tabs, currentView, currentItemIndex, results]\n );\n\n function setCurrentId(id?: number) {\n setCurrentIdInternal(id);\n setCurrentIdTabContext?.(id);\n }\n\n function setCurrentView(view?: View) {\n setCurrentViewInternal(view);\n setCurrentViewTabContext?.(view);\n }\n\n useImperativeHandle(ref, () => ({\n canWeClose,\n }));\n\n const fetchData = async () => {\n setIsLoading(true);\n\n const viewDataRetrieved: View[] = [];\n\n const getViewsPromises = [];\n\n for (const viewArray of views) {\n const [id, viewType] = viewArray;\n if (viewType !== \"dashboard\") {\n getViewsPromises.push({\n viewTuple: viewArray,\n promise: ConnectionProvider.getHandler().getView({\n model,\n type: viewType,\n id,\n context,\n }),\n });\n } else {\n getViewsPromises.push({\n viewTuple: viewArray,\n });\n }\n }\n\n const viewsRetrieved = await resolveViewInfoPromises(getViewsPromises);\n\n for (const view of viewsRetrieved) {\n if (!view) {\n continue;\n }\n\n const [, viewType] = view.viewTuple;\n\n let viewInfo = view.info;\n\n switch (viewType) {\n case \"dashboard\": {\n const formView = views.find((view: any[]) => {\n const [, type] = view;\n return type === \"form\";\n });\n\n let configAction;\n\n if (formView) {\n configAction = {\n action_id,\n action_type,\n name: title,\n res_id: context[\"active_id\"],\n res_model: model,\n view_id: formView[0],\n view_type: formView[1],\n };\n }\n\n viewDataRetrieved.push({\n type: \"dashboard\",\n id: context[\"active_id\"],\n model,\n context,\n configAction,\n });\n break;\n }\n case \"form\": {\n viewDataRetrieved.push({\n ...(viewInfo as FormView),\n type: viewType,\n });\n break;\n }\n case \"tree\": {\n viewDataRetrieved.push({\n ...(viewInfo as TreeView),\n isExpandable: treeExpandable,\n type: viewType,\n });\n break;\n }\n case \"graph\": {\n viewDataRetrieved.push({\n ...(viewInfo as GraphView),\n type: viewType,\n });\n break;\n }\n default:\n break;\n }\n }\n let currentViewToAssign = undefined;\n\n if (!initialView && viewDataRetrieved.find((v) => v.type === \"tree\")) {\n const treeView: TreeView = viewDataRetrieved.find(\n (v) => v.type === \"tree\"\n ) as TreeView;\n currentViewToAssign = treeView;\n } else if (!initialView) {\n const formView: TreeView = viewDataRetrieved.find(\n (v) => v.type === \"form\"\n ) as TreeView;\n currentViewToAssign = formView;\n } else {\n const view = viewDataRetrieved.find((v) => {\n if (!initialView.id) {\n return v.type === initialView.type;\n } else {\n return v.type === initialView.type && v.view_id === initialView.id;\n }\n });\n currentViewToAssign = view;\n }\n\n if (!currentViewToAssign) {\n showErrorDialog(\n `Error determining the first view to show for model ${model}.\\nPlease, make sure the view ids on the fields_view_get responses are the same as the ones defined in the action`\n );\n onRemoveTab?.(tabKey);\n }\n\n setCurrentView(currentViewToAssign);\n setAvailableViews(viewDataRetrieved);\n setIsLoading(false);\n };\n\n setCanWeClose({ tabKey, canWeClose });\n\n useEffect(() => {\n const treeView = availableViews.find((v) => v.type === \"tree\") as TreeView;\n const initialViewWithData: View = availableViews.find((v) => {\n if (!initialView.id) {\n return v.type === initialView.type;\n } else {\n return v.type === initialView.type && v.view_id === initialView.id;\n }\n }) as View;\n\n setCurrentView(initialViewWithData || treeView);\n if (!res_id) {\n setCurrentId(undefined);\n setCurrentItemIndex(undefined);\n } else {\n setCurrentIdTabContext?.(res_id_parsed);\n }\n fetchData();\n }, [model, views, res_id]);\n\n useEffect(() => {\n if (activeKey === tabKey) {\n setCurrentIdTabContext?.(currentId);\n setCurrentViewTabContext?.(currentView);\n }\n }, [tabs, activeKey]);\n\n async function canWeClose() {\n if (!currentView) {\n return true;\n } else if (currentView!.type === \"form\") {\n return await (formRef.current as any).cancelUnsavedChanges();\n } else {\n return true;\n }\n }\n\n async function handleGoToRecordShortcut() {\n if (activeKey !== tabKey) {\n return;\n }\n\n if (currentView!.type === \"form\") {\n const canWeClose = await (formRef.current as any).cancelUnsavedChanges();\n\n if (!canWeClose) {\n return;\n }\n }\n\n setGtResourceModalVisible(true);\n }\n\n async function goToResourceId(id: number) {\n setSearchingForResourceId(true);\n\n const itemIndex = results!.findIndex((item: any) => {\n return item.id === id;\n });\n\n let resource;\n\n if (itemIndex === -1) {\n try {\n resource = (\n await ConnectionProvider.getHandler().readObjects({\n model,\n ids: [id],\n context,\n })\n )?.[0];\n } catch (err) {}\n\n if (!resource) {\n setSearchingForResourceId(false);\n setGtResourceModalVisible(false);\n showInfo(t(\"idNotFound\"));\n return;\n }\n } else {\n resource = results[itemIndex];\n }\n\n setSearchingForResourceId(false);\n setGtResourceModalVisible(false);\n\n const viewForm = views.find((v) => v[1] === \"form\");\n\n openAction({\n domain: [],\n context,\n model,\n views,\n title,\n target: \"current\",\n initialView: { id: viewForm?.[0]!, type: \"form\" },\n action_id,\n action_type,\n res_id: id,\n });\n }\n\n function content() {\n return availableViews.map((view) => {\n switch (view.type) {\n case \"form\": {\n return (\n <FormActionView\n key={`${view.type}-${view.view_id}`}\n formRef={formRef}\n currentId={currentId}\n visible={\n currentView!.type === view.type &&\n currentView!.view_id === view.view_id\n }\n formView={view as FormView}\n model={model}\n context={context}\n domain={domain}\n defaultValues={formDefaultValues}\n forcedValues={formForcedValues}\n results={results}\n setResults={setResults}\n setCurrentItemIndex={setCurrentItemIndex}\n />\n );\n }\n case \"tree\": {\n return (\n <TreeActionView\n key={`${view.type}-${view.view_id}`}\n visible={\n currentView!.type === view.type &&\n currentView!.view_id === view.view_id\n }\n limit={limit}\n model={model}\n context={context}\n domain={domain}\n formView={\n availableViews.find((v) => v.type === \"form\") as FormView\n }\n treeView={view as TreeView}\n searchTreeRef={searchTreeRef}\n searchTreeNameSearch={searchTreeNameSearch}\n availableViews={availableViews}\n results={results}\n setCurrentItemIndex={setCurrentItemIndex}\n setCurrentId={setCurrentId}\n setCurrentView={setCurrentView}\n />\n );\n }\n case \"graph\": {\n return (\n <GraphActionView\n key={`${view.type}-${view.view_id}`}\n visible={\n currentView!.type === view.type &&\n currentView!.view_id === view.view_id\n }\n viewData={view as GraphView}\n model={model}\n context={context}\n domain={domain}\n treeView={\n availableViews.find((v) => v.type === \"tree\") as TreeView\n }\n formView={\n availableViews.find((v) => v.type === \"form\") as FormView\n }\n />\n );\n }\n case \"dashboard\": {\n return (\n <DashboardActionView\n key={`${view.type}-${view.view_id}`}\n dashboardData={view as DashboardView}\n />\n );\n }\n }\n });\n }\n\n function onNewClicked() {\n if (currentId === undefined && currentView!.type === \"form\") {\n (formRef.current as any).clearAndReload();\n } else {\n setCurrentId(undefined);\n const formView: FormView = availableViews.find(\n (v) => v.type === \"form\"\n ) as FormView;\n setCurrentView(formView);\n }\n }\n\n if (isLoading) {\n return <Spin />;\n }\n\n if (!currentView) {\n return null;\n }\n\n return (\n <ActionViewProvider\n title={title}\n currentView={currentView}\n setCurrentView={setCurrentView}\n availableViews={availableViews}\n formRef={formRef}\n searchTreeRef={searchTreeRef}\n onNewClicked={onNewClicked}\n currentId={currentId}\n setCurrentId={setCurrentId}\n setCurrentItemIndex={setCurrentItemIndex}\n currentItemIndex={currentItemIndex}\n results={results}\n setResults={setResults}\n currentModel={model}\n sorter={sorter}\n setSorter={setSorter}\n totalItems={totalItems}\n setTotalItems={setTotalItems}\n selectedRowItems={selectedRowItems}\n setSelectedRowItems={setSelectedRowItems}\n setSearchTreeNameSearch={setSearchTreeNameSearch}\n searchTreeNameSearch={searchTreeNameSearch}\n goToResourceId={goToResourceId}\n limit={limit}\n >\n {content()}\n <GoToResourceModal\n visible={gtResourceModalVisible}\n onIdSubmitted={goToResourceId}\n isSearching={searchingForResourceId}\n onCancel={() => {\n setGtResourceModalVisible(false);\n }}\n />\n </ActionViewProvider>\n );\n}\n\nexport default forwardRef(ActionView);\n","import ConnectionProvider from \"@/ConnectionProvider\";\nimport { DashboardItem as DashboardItemOoui, parseContext } from \"@gisce/ooui\";\nimport { v4 as uuidv4 } from \"uuid\";\n\nexport async function fetchAction({\n actionId,\n rootContext = {},\n globalValues = {},\n}: {\n actionId: number;\n rootContext?: any;\n globalValues?: any;\n}): Promise<any> {\n const actionType = \"ir.actions.act_window\";\n const action = `${actionType},${actionId}`;\n\n const dataForAction = await ConnectionProvider.getHandler().getActionData({\n action,\n context: rootContext,\n });\n\n const parsedContext = parseContext({\n context: dataForAction.context,\n values: globalValues,\n fields: {},\n });\n\n const parsedDomain = dataForAction.domain\n ? await ConnectionProvider.getHandler().evalDomain({\n domain: dataForAction.domain,\n values: globalValues,\n context: { ...rootContext, ...parsedContext },\n })\n : [];\n\n const {\n res_model: model,\n views,\n name: title,\n limit,\n view_type,\n } = dataForAction;\n const treeExpandable = view_type === \"tree\";\n\n const finalViews = [];\n\n for (const viewArray of views) {\n const [id, viewType] = viewArray;\n\n if (!id) {\n const { view_id } = await ConnectionProvider.getHandler().getView({\n model,\n type: viewType,\n id,\n context: { ...rootContext, ...parsedContext },\n });\n finalViews.push([view_id, viewType]);\n } else {\n finalViews.push(viewArray);\n }\n }\n\n const [id, type] = finalViews[0];\n const initialView = { id, type };\n\n return {\n title,\n actionId,\n actionType,\n key: uuidv4(),\n views,\n model,\n context: { ...rootContext, ...parsedContext },\n domain: parsedDomain,\n initialView,\n limit,\n treeExpandable,\n };\n}\n","import React from \"react\";\nimport { DashboardGridProps } from \"./DashboardGrid.types\";\nimport { WidthProvider, Responsive } from \"react-grid-layout\";\nimport \"react-resizable/css/styles.css\";\nimport \"react-grid-layout/css/styles.css\";\n\nconst ResponsiveReactGridLayout = WidthProvider(Responsive);\n\nexport const DashboardGrid = (props: DashboardGridProps) => {\n const { children = [], onPositionItemsChanged } = props;\n\n const items = React.Children.map(\n children,\n (\n child:\n | boolean\n | React.ReactChild\n | React.ReactFragment\n | React.ReactPortal\n ) => {\n const { parms, id } = (child as any).props;\n return (\n <div key={id} data-grid={parms}>\n {child}\n </div>\n );\n }\n );\n\n return (\n <ResponsiveReactGridLayout\n className=\"layout\"\n cols={{ lg: 12, md: 10, sm: 6, xs: 4, xxs: 2 }}\n draggableHandle={\".draggable-head\"}\n rowHeight={30}\n onLayoutChange={(layout) => {\n onPositionItemsChanged?.(\n layout.map((item) => {\n return {\n id: parseInt(item.i.replace(\".$\", \"\"), 10),\n x: item.x,\n y: item.y,\n w: item.w,\n h: item.h,\n };\n })\n );\n }}\n >\n {items}\n </ResponsiveReactGridLayout>\n );\n};\n","import React from \"react\";\nimport { DashboardGridItemProps } from \"./DashboardGridItem.types\";\nimport { ExportOutlined } from \"@ant-design/icons\";\nimport { Row, Col, Typography, theme } from \"antd\";\nconst { useToken } = theme;\n\nconst { Text } = Typography;\n\nexport const DashboardGridItem = (props: DashboardGridItemProps) => {\n const { title, children, action, openAction } = props;\n const { token } = useToken();\n\n return (\n <div\n className={\"shadow-md\"}\n style={{\n height: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n overflow: \"hidden\",\n border: \"1px solid #eee\",\n backgroundColor: \"white\",\n borderRadius: token.borderRadius,\n }}\n >\n <Row\n align=\"middle\"\n style={{\n borderBottom: \"1px solid #ddd\",\n backgroundColor: token.colorPrimaryBg,\n }}\n wrap={false}\n >\n <Col\n flex=\"auto\"\n className=\"draggable-head\"\n style={{\n fontWeight: \"bold\",\n padding: \"0.5rem\",\n cursor: \"grab\",\n overflow: \"hidden\",\n }}\n >\n <Text ellipsis={true}>{title}</Text>\n </Col>\n {action && (\n <Col flex=\"25px\" style={{ padding: \"0.5rem\" }}>\n <Row justify=\"end\" align=\"middle\">\n <ExportOutlined\n style={{ cursor: \"pointer\" }}\n onClick={() => {\n openAction?.(action);\n }}\n />\n </Row>\n </Col>\n )}\n </Row>\n {children}\n </div>\n );\n};\n","import React, { useEffect, useState, useRef } from \"react\";\nimport { Alert, Spin } from \"antd\";\n\nimport Tree from \"@/widgets/views/Tree\";\nimport { FormView, TreeView } from \"@/types/index\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\n\nimport { getColorMap, getTree, sortResults } from \"@/helpers/treeHelper\";\nimport { mergeParams } from \"@/helpers/searchHelper\";\n\nconst DEFAULT_SEARCH_LIMIT = 80;\n\ntype OnRowClickedData = {\n id: number;\n model: string;\n treeView: TreeView;\n};\n\ntype Props = {\n action?: string;\n model?: string;\n view_id?: number;\n onRowClicked: (data: OnRowClickedData) => void;\n domain?: any;\n visible?: boolean;\n parentContext?: any;\n};\n\nfunction DashboardTree(props: Props) {\n const {\n action,\n model,\n view_id,\n onRowClicked,\n domain = [],\n visible = true,\n parentContext = {},\n } = props;\n\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [initialFetchDone, setInitialFetchDone] = useState<boolean>(false);\n\n const [currentModel, setCurrentModel] = useState<string>();\n const [treeView, setTreeView] = useState<TreeView>();\n const [formView, setFormView] = useState<FormView>();\n\n const [page, setPage] = useState<number>(1);\n const [offset, setOffset] = useState<number>(0);\n const limitRef = useRef<number>(DEFAULT_SEARCH_LIMIT);\n\n const paramsRef = useRef<Array<any>>([]);\n\n const [totalItems, setTotalItems] = useState<number>(0);\n const [results, setResults] = useState<any>([]);\n const [colorsForResults, setColorsForResults] = useState<any>(undefined);\n const [sorter, setSorter] = useState<any>();\n\n const [searchError, setSearchError] = useState<string>();\n const [initialError, setInitialError] = useState<string>();\n\n const [tableRefreshing, setTableRefreshing] = useState<boolean>(false);\n\n const actionDomain = useRef<any>([]);\n\n const onRequestPageChange = (page: number) => {\n setTableRefreshing(true);\n setPage(page);\n setOffset((page - 1) * limitRef.current!);\n };\n\n const searchResults = async () => {\n const domainParams =\n actionDomain.current.length > 0 ? actionDomain.current : domain;\n\n const searchParams = mergeParams(paramsRef.current, domainParams);\n const { colors } = getTree(treeView!);\n\n const { totalItems, results, attrsEvaluated } =\n await ConnectionProvider.getHandler().searchForTree({\n params: searchParams,\n limit: limitRef.current,\n offset,\n model: currentModel!,\n fields: treeView!.fields,\n context: parentContext,\n attrs: colors && { colors },\n });\n setColorsForResults(getColorMap(attrsEvaluated));\n\n const resultsSorted = sortResults({\n resultsToSort: results,\n sorter: sorter,\n fields: { ...treeView!.fields, ...formView!.fields },\n });\n setTableRefreshing(false);\n\n setResults(resultsSorted);\n const totalItemsResult = await totalItems;\n setTotalItems(totalItemsResult);\n };\n\n const fetchResults = async () => {\n try {\n setTableRefreshing(true);\n await searchResults();\n } catch (error) {\n setSearchError(JSON.stringify(error));\n }\n };\n\n useEffect(() => {\n if (!initialFetchDone) {\n return;\n }\n\n if (visible) {\n fetchResults();\n }\n }, [page, offset, initialFetchDone, visible]);\n\n const fetchData = async (type: \"action\" | \"model\") => {\n setInitialFetchDone(false);\n setIsLoading(true);\n setInitialError(undefined);\n\n try {\n if (type === \"action\") {\n await fetchActionData();\n } else {\n await fetchModelData();\n }\n setInitialFetchDone(true);\n } catch (error) {\n setInitialError(error);\n } finally {\n setIsLoading(false);\n }\n };\n\n const fetchActionData = async () => {\n const dataForAction =\n await ConnectionProvider.getHandler().getViewsForAction({\n action: action!,\n context: parentContext,\n });\n actionDomain.current = dataForAction.domain;\n setFormView(dataForAction.views.get(\"form\"));\n setTreeView(dataForAction.views.get(\"tree\"));\n setCurrentModel(dataForAction.model);\n limitRef.current = dataForAction.limit;\n };\n\n const fetchModelData = async () => {\n setCurrentModel(model);\n\n const _formView = (await ConnectionProvider.getHandler().getView({\n model: model!,\n type: \"form\",\n context: parentContext,\n })) as FormView;\n setFormView(_formView as FormView);\n\n const _treeView = (await ConnectionProvider.getHandler().getView({\n model: model!,\n type: \"tree\",\n id: view_id,\n context: parentContext,\n })) as TreeView;\n\n setTreeView(_treeView as TreeView);\n };\n\n useEffect(() => {\n if (action) {\n fetchData(\"action\");\n } else if (model) {\n fetchData(\"model\");\n }\n }, [action, model]);\n\n const onRowClickedHandler = (record: any) => {\n const { id } = record;\n onRowClicked({\n id,\n model: currentModel!,\n treeView: treeView!,\n });\n };\n\n const content = () => {\n if (!treeView || !formView) {\n return null;\n }\n\n return (\n <div style={{ overflowY: \"scroll\" }}>\n {searchError && (\n <Alert className=\"mt-10\" message={searchError} type=\"error\" banner />\n )}\n <Tree\n showPagination={false}\n total={totalItems}\n limit={limitRef.current}\n page={page}\n treeView={treeView}\n results={results}\n onRequestPageChange={onRequestPageChange}\n loading={tableRefreshing}\n onRowClicked={onRowClickedHandler}\n colorsForResults={colorsForResults}\n sorter={sorter}\n onChangeSort={(newSorter) => {\n setSorter?.(newSorter);\n const sortedResults = sortResults({\n resultsToSort: results,\n sorter: newSorter,\n fields: { ...treeView.fields, ...formView.fields },\n });\n setResults(sortedResults);\n }}\n context={parentContext}\n />\n </div>\n );\n };\n\n if (initialError) {\n return (\n <Alert className=\"mt-10\" message={initialError} type=\"error\" banner />\n );\n }\n\n return isLoading ? <Spin style={{ padding: \"2rem\" }} /> : content();\n}\n\nexport default DashboardTree;\n","import ConnectionProvider from \"@/ConnectionProvider\";\nimport React, { useEffect, useState } from \"react\";\nimport Form, { FormProps } from \"../Form\";\n\nexport const DashboardForm = (props: FormProps) => {\n const { model } = props;\n const [firstId, setFirstId] = useState<number>();\n\n useEffect(() => {\n fetchData();\n }, [model]);\n\n async function fetchData() {\n const results: any[] = (await ConnectionProvider.getHandler().search({\n params: [],\n model,\n limit: 1,\n })) as any;\n\n if (results.length > 0) {\n setFirstId(results[0].id);\n }\n }\n\n return (\n <div style={{ padding: \"0.5rem\", overflowY: \"scroll\" }}>\n <Form {...props} model={model} id={firstId} readOnly />\n </div>\n );\n};\n","import React, {\n forwardRef,\n useContext,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from \"react\";\nimport ActionView from \"@/views/ActionView\";\nimport { fetchAction } from \"./dashboardHelper\";\nimport \"react-resizable/css/styles.css\";\nimport \"react-grid-layout/css/styles.css\";\nimport { Graph } from \"../Graph/Graph\";\nimport { DashboardGrid, DashboardGridItem } from \"../DashboardGrid\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport { DashboardProps, FormView } from \"@/types\";\nimport { One2manyItem } from \"@/index\";\nimport { readObjectValues } from \"@/helpers/one2manyHelper\";\nimport { LoadingOutlined } from \"@ant-design/icons\";\nimport { Alert } from \"antd\";\nimport {\n DashboardActionContext,\n DashboardActionContextType,\n} from \"@/context/DashboardActionContext\";\nimport { ShortcutApi } from \"@/ui/FavouriteButton\";\nimport DashboardTree from \"./DashboardTree\";\nimport { DashboardForm } from \"./DashboardForm\";\n\nconst itemsField = \"line_ids\";\n\nfunction Dashboard(props: DashboardProps, ref: any) {\n const { model, context = {}, id, configAction } = props;\n const [dashboardItems, setDashboardItems] = useState<any[]>([]);\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [error, setError] = useState<string>();\n const {\n setIsLoading: setActionBarLoading,\n openAction,\n moveItemsEnabled,\n } = useContext(DashboardActionContext) as DashboardActionContextType;\n\n const itemsFields = useRef<any>();\n const boardFields = useRef<any>();\n\n useEffect(() => {\n fetchData();\n }, [model, id, context]);\n\n useImperativeHandle(ref, () => ({\n refresh: () => {\n fetchData();\n },\n configDashboard: openConfigDashboard,\n }));\n\n async function fetchData() {\n setIsLoading(true);\n setActionBarLoading(true);\n setError(undefined);\n\n try {\n const view: FormView = (await fetchView()) as FormView;\n const values = await fetchValues(view);\n const model = view.fields[itemsField].relation;\n const items: One2manyItem[] = values[itemsField].items;\n boardFields.current = view.fields;\n\n const originalItems: One2manyItem[] = await fetchDashboardItems({\n items,\n model,\n context,\n });\n\n const itemsWithActions = await getItemsWithActions(originalItems);\n setDashboardItems(itemsWithActions);\n setIsLoading(false);\n setActionBarLoading(false);\n } catch (err) {\n setError(JSON.stringify(err));\n }\n }\n\n async function fetchView() {\n return await ConnectionProvider.getHandler().getView({\n model,\n type: \"form\",\n context,\n });\n }\n\n async function fetchDashboardItems({\n items,\n model,\n context,\n }: {\n items: One2manyItem[];\n model: string;\n context: any;\n }) {\n itemsFields.current = (\n (await ConnectionProvider.getHandler().getView({\n model,\n type: \"form\",\n context,\n })) as FormView\n ).fields;\n\n const [results] = await readObjectValues({\n treeView: {\n fields: itemsFields.current,\n },\n formView: {\n fields: itemsFields.current,\n },\n model,\n items,\n context,\n currentView: \"form\",\n });\n return results;\n }\n\n async function fetchValues(view: FormView) {\n return (\n await ConnectionProvider.getHandler().readObjects({\n model,\n ids: [id],\n fields: view.fields,\n context,\n })\n )[0];\n }\n\n async function getItemsWithActions(items: One2manyItem[]) {\n const itemsWithActions = [];\n\n for (const dashboardItem of items) {\n const { values } = dashboardItem;\n if (values.action_id && values.action_id.length > 0) {\n const actionId = parseInt(values.action_id[0], 10);\n const actionData = await fetchAction({\n actionId,\n rootContext: context,\n });\n itemsWithActions.push({ ...dashboardItem, actionData });\n }\n }\n\n return itemsWithActions;\n }\n\n async function onPositionItemsChanged(itemPositions: any[]) {\n if (!moveItemsEnabled) {\n return;\n }\n\n const differences = itemPositions.filter((itemPosition) => {\n const dashboardItem = dashboardItems.find(\n (dashboardItem) => dashboardItem.id === itemPosition.id\n );\n if (!dashboardItem) {\n return false;\n }\n\n if (!dashboardItem.position) {\n return true;\n }\n\n const remotePosition = {\n ...JSON.parse(dashboardItem.position.replace(/'/g, '\"')),\n id: dashboardItem.id,\n };\n\n return JSON.stringify(itemPosition) !== JSON.stringify(remotePosition);\n });\n\n if (differences.length === 0) {\n return;\n }\n\n const itemsToUpdate = dashboardItems.filter((dashboardItem) => {\n return differences.map((diff) => diff.id).includes(dashboardItem.id);\n });\n\n const itemsToUpdateWithUpdatedPos = itemsToUpdate.map((dashboardItem) => {\n const diffItem = {\n ...differences.find((diffItem) => diffItem.id === dashboardItem.id),\n };\n delete diffItem.id;\n\n const item = { ...dashboardItem };\n delete item.actionData;\n\n return {\n ...dashboardItem,\n operation: \"pendingUpdate\",\n values: {\n ...dashboardItem.values,\n position: JSON.stringify(diffItem).replace(/\"/g, \"'\"),\n },\n };\n });\n\n const valueToUpdate = {\n fields: itemsFields.current,\n items: itemsToUpdateWithUpdatedPos,\n };\n\n await ConnectionProvider.getHandler().update({\n model,\n id,\n values: { [itemsField]: valueToUpdate },\n fields: boardFields.current,\n context,\n });\n }\n\n async function openConfigDashboard() {\n openAction(configAction);\n }\n\n if (error) {\n console.log(error);\n return (\n <Alert className=\"mt-10 mb-20\" message={error} type=\"error\" banner />\n );\n }\n\n if (isLoading) {\n return <LoadingOutlined />;\n }\n\n return (\n <DashboardGrid onPositionItemsChanged={onPositionItemsChanged}>\n {dashboardItems.map((item, idx) => {\n const { actionData, values } = item;\n const { position, id } = values;\n\n const {\n actionId,\n actionType,\n key,\n title,\n views,\n model,\n context,\n domain,\n initialView,\n limit,\n } = actionData as any;\n\n let parmsParsed = {};\n\n try {\n parmsParsed = JSON.parse(position.replace(/'/g, '\"'));\n } catch (err) {\n // console.error(`Error parsing parms: ${action.position}`);\n parmsParsed = { x: idx * 2, y: 0, w: 2, h: 3 };\n }\n\n let childContent = null;\n\n if (initialView?.type === \"graph\") {\n childContent = (\n <Graph\n view_id={\n views.filter(\n (view: [number, string]) => view[1] === \"graph\"\n )[0][0]\n }\n model={model}\n context={context}\n domain={domain}\n limit={limit}\n />\n );\n } else if (initialView?.type === \"form\") {\n childContent = <DashboardForm model={model} actionDomain={domain} />;\n } else if (initialView?.type === \"tree\") {\n childContent = (\n <DashboardTree\n model={model}\n domain={domain}\n view_id={\n views.filter(\n (view: [number, string]) => view[1] === \"tree\"\n )[0][0]\n }\n onRowClicked={(record) => {\n const formView = views.find((view: any[]) => {\n const [, type] = view;\n return type === \"form\";\n });\n if (formView) {\n const [id, type] = formView;\n const {\n actionId: action_id,\n actionType: action_type,\n title: name,\n model: res_model,\n } = actionData;\n\n const action: ShortcutApi = {\n action_id,\n action_type,\n name,\n res_id: record.id,\n res_model,\n view_id: id,\n view_type: type,\n };\n openAction(action);\n }\n }}\n />\n );\n } else if (initialView !== undefined) {\n const formattedInitialView =\n initialView && Array.isArray(initialView.id)\n ? { ...initialView, id: initialView.id[0] }\n : initialView;\n childContent = (\n <ActionView\n action_id={actionId}\n action_type={actionType}\n tabKey={key}\n title={title}\n views={views}\n model={model}\n context={context}\n domain={domain}\n setCanWeClose={() => {}}\n initialView={formattedInitialView}\n limit={limit}\n />\n );\n }\n\n let action: ShortcutApi;\n const treeView = views.find((view: any[]) => {\n const [, type] = view;\n return type === \"tree\";\n });\n if (treeView) {\n const [id, type] = treeView;\n const {\n actionId: action_id,\n actionType: action_type,\n title: name,\n model: res_model,\n } = actionData;\n\n action = {\n action_id,\n action_type,\n name,\n res_id: false,\n res_model,\n view_id: id,\n view_type: type,\n };\n }\n\n return (\n <DashboardGridItem\n key={id}\n id={id}\n title={title}\n parms={parmsParsed}\n action={action!}\n openAction={openAction}\n >\n {childContent}\n </DashboardGridItem>\n );\n })}\n </DashboardGrid>\n );\n}\n\nexport default forwardRef(Dashboard);\n","import React, { useContext, useState } from \"react\";\nimport { MultiCheckbox as MultiCheckboxOoui } from \"@gisce/ooui\";\nimport Field from \"@/common/Field\";\nimport { One2manyItem, One2manyValue } from \"../base/one2many/One2manyInput\";\nimport useDeepCompareEffect from \"use-deep-compare-effect\";\nimport { FormContext, FormContextType } from \"@/context/FormContext\";\nimport { Alert, Checkbox, Spin, Col, Row, Button, Space } from \"antd\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport { transformPlainMany2Ones } from \"@/helpers/formHelper\";\n\ntype MultiCheckboxProps = {\n ooui: MultiCheckboxOoui;\n};\n\ntype MultiCheckboxInputProps = MultiCheckboxProps & {\n value?: One2manyValue;\n onChange?: (value: One2manyValue) => void;\n};\n\nexport const MultiCheckbox = (props: MultiCheckboxProps) => {\n const { ooui } = props;\n\n return (\n <Field type={\"array\"} {...props}>\n <MultiCheckboxInput ooui={ooui} />\n </Field>\n );\n};\n\nexport const MultiCheckboxInput = (props: MultiCheckboxInputProps) => {\n const { value, ooui, onChange } = props;\n const { items = [] } = value || {};\n const itemsToShow = items\n .filter((item) => item.operation !== \"pendingRemove\")\n .map((item) => item.id) as number[];\n\n const [options, setOptions] = useState<any[]>([]);\n const [error, setError] = useState<string>();\n const [isLoadingOptions, setIsLoadingOptions] = useState<boolean>(false);\n const { relation, context, readOnly, field, columns } = ooui;\n\n const formContext = useContext(FormContext) as FormContextType;\n const { getContext } = formContext || {};\n\n useDeepCompareEffect(() => {\n fetchOptions();\n }, [items]);\n\n const triggerChange = (changedValue: Array<One2manyItem>) => {\n onChange?.({\n items: changedValue,\n });\n };\n\n async function fetchOptions() {\n setIsLoadingOptions(true);\n let params: any = [];\n if (ooui.domain) {\n const evaluatedDomain = await ConnectionProvider.getHandler().evalDomain({\n domain: ooui.domain,\n values: transformPlainMany2Ones({\n fields: formContext?.getFields(),\n values: formContext.getPlainValues(),\n }),\n fields: formContext?.getFields(),\n context: formContext.getContext(),\n });\n params = [...params, ...evaluatedDomain];\n }\n try {\n const optionsRead = await ConnectionProvider.getHandler().search({\n model: relation,\n params: params,\n fields: [field],\n context: { ...getContext?.(), ...context },\n });\n const options = optionsRead.map((item: any) => {\n const value = item[field];\n let formattedValue = value;\n if (Array.isArray(value)) {\n formattedValue = value[1];\n }\n return { label: formattedValue, value: item.id };\n });\n setOptions(options);\n } catch (err) {\n setError(err as any);\n } finally {\n setIsLoadingOptions(false);\n }\n if (error) {\n return <Alert className=\"mt-10\" message={error} type=\"error\" banner />;\n }\n }\n\n const checkAll = () => {\n onChangeSelected(options.map((option) => option.value));\n };\n\n const uncheckAll = () => {\n onChangeSelected([]);\n };\n\n const onChangeSelected = (ids: any[]) => {\n const newItems: One2manyItem[] = items.map((item) => {\n if (ids.includes(item.id as number)) {\n if (item.operation == \"pendingRemove\") {\n return {\n ...item,\n operation: \"original\",\n };\n } else {\n return item;\n }\n } else {\n return { id: item.id, operation: \"pendingRemove\" };\n }\n });\n const currentIds = newItems.map((item) => item.id);\n ids\n .filter((id) => !currentIds.includes(id))\n .map((id) => {\n newItems.push({ id, operation: \"pendingLink\" });\n });\n triggerChange(newItems);\n };\n\n if (isLoadingOptions && options.length === 0) {\n return <Spin />;\n }\n\n return (\n <>\n <div className=\"flex flex-row\">\n <Checkbox.Group\n value={options.length ? itemsToShow : []}\n disabled={readOnly}\n onChange={onChangeSelected}\n style={{ width: \"100%\" }}\n >\n <Row>\n {options.map((option) => (\n <Col span={Math.floor(24 / columns)}>\n <Checkbox value={option.value}>{option.label}</Checkbox>\n </Col>\n ))}\n </Row>\n </Checkbox.Group>\n {!readOnly && (\n <Space>\n <Button\n onClick={checkAll}\n disabled={itemsToShow.length == options.length}\n >\n Check all\n </Button>\n <Button onClick={uncheckAll} disabled={itemsToShow.length === 0}>\n Uncheck all\n </Button>\n </Space>\n )}\n </div>\n </>\n );\n};\n","import Field from \"@/common/Field\";\nimport ReactMarkdown from \"react-markdown\";\nimport React from \"react\";\nimport {WidgetProps} from \"@/types\";\n\nexport const Markdown = (props: WidgetProps) => {\n return (\n <Field {...props}>\n <MarkdownInput {...props} />\n </Field>\n );\n};\n\nexport const MarkdownInput = (props: any) => {\n const {value, ooui} = props;\n return (\n <div style={{height: ooui.height ? ooui.height + 'px' : '100%', overflow: 'auto'}}>\n <ReactMarkdown children={value} className=\"ant-typography\"/>\n </div>\n\n )\n}\n","import React from \"react\";\nimport { Radio as RadioAnt, Space } from \"antd\";\n\nimport Field from \"@/common/Field\";\nimport { Radio as RadioOoui } from \"@gisce/ooui\";\nimport { WidgetProps } from \"@/types\";\n\nexport const Radio = (props: WidgetProps) => {\n const { ooui } = props;\n const { required } = ooui;\n\n return (\n <Field required={required} type={\"any\"} {...props}>\n <SelectionInput {...props} />\n </Field>\n );\n};\n\ntype RadioInputProps = WidgetProps & {\n onChange?: (value: any) => void;\n value?: string;\n};\n\nexport const SelectionInput = (props: RadioInputProps) => {\n const { ooui, onChange, value } = props;\n const { selectionValues, readOnly, direction } = ooui as RadioOoui;\n\n const values = Array.from(selectionValues.entries());\n\n const options =\n values &&\n values.length &&\n values.map((entry: string[]) => {\n const [key, value] = entry;\n return (\n <RadioAnt key={key} value={key}>\n {value}\n </RadioAnt>\n );\n });\n\n return (\n <RadioAnt.Group disabled={readOnly} onChange={onChange} value={value}>\n <Space direction={direction}>\n {options}\n </Space>\n </RadioAnt.Group>\n );\n};","import React from \"react\";\nimport { Switch as AntdSwitch } from \"antd\";\n\nimport Field from \"@/common/Field\";\nimport { WidgetProps } from \"@/types\";\n\nexport const Switch = (props: WidgetProps) => {\n const { ooui } = props;\n const { id, readOnly, required } = ooui;\n\n return (\n <Field\n {...props}\n valuePropName=\"checked\"\n >\n <SwitchInput id={id} readOnly={readOnly} required={required} />\n </Field>\n );\n};\n\nconst SwitchInput = (props: any) => {\n const { required, readOnly, ...restProps } = props;\n\n\n return (\n <div className=\"flex flex-row\">\n <AntdSwitch disabled={readOnly} {...restProps} />\n </div>\n );\n};\n","import React, { useContext } from \"react\";\nimport { Steps as AntdSteps } from \"antd\";\nimport { FormContext, FormContextType } from \"@/context/FormContext\";\nimport Field from \"@/common/Field\";\nimport { Steps as StepsOoui } from \"@gisce/ooui\";\n\ntype StepsProps = {\n ooui: StepsOoui;\n value: any,\n}\n\ntype StatusType = 'wait' | 'process' | 'finish' | 'error';\n\n\nexport const Steps = (props: StepsProps) => {\n const { ooui } = props;\n const { required } = ooui;\n\n return (\n <Field required={required} type={\"any\"} {...props}>\n <StepsInput {...props} />\n </Field>\n );\n};\n\ntype StepsInputProps = StepsProps & {\n value?: any;\n};\n\nexport const StepsInput = (props: StepsInputProps) => {\n const { ooui, value } = props;\n const { selectionValues, errorField } = ooui as StepsOoui;\n const formContext = useContext(FormContext) as FormContextType;\n\n const values = Array.from(selectionValues.entries());\n const current = values.map(val => val[0]).indexOf(value);\n let status: StatusType = \"process\";\n let error = \"\";\n \n if (errorField) {\n error = formContext.getFieldValue(errorField);\n if (error) {\n status = \"error\";\n }\n }\n\n\n return (\n <AntdSteps current={current} status={status}>\n {values.map((val, idx) => (\n <AntdSteps.Step title={val[1]} description={idx === current && status === \"error\" ? error : null}/>\n ))}\n </AntdSteps>\n );\n};","import React, { useContext } from \"react\";\nimport Editor from \"@monaco-editor/react\";\nimport { FormContext, FormContextType } from \"@/context/FormContext\";\nimport { CodeEditor as CodeEditorOoui } from \"@gisce/ooui\";\n\nimport Field from \"@/common/Field\";\nimport { WidgetProps } from \"@/types\";\n\ntype CodeEditorProps = WidgetProps & {\n ooui: CodeEditorOoui;\n};\n\nexport const CodeEditor = (props: CodeEditorProps) => {\n const { ooui } = props;\n const { lang, height } = ooui;\n const formContext = useContext(FormContext) as FormContextType;\n const { elementHasLostFocus } = formContext || {};\n\n const onMount = (editor: any) => {\n editor.onDidBlurEditorWidget(elementHasLostFocus)\n }\n\n return (\n <Field {...props}>\n <Editor defaultLanguage={lang ? lang : ''} height={height ? height : 300} onMount={onMount}/>\n </Field>\n );\n};\n","!function(r,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(r=\"undefined\"!=typeof globalThis?globalThis:r||self).dayjs_plugin_relativeTime=e()}(this,(function(){\"use strict\";return function(r,e,t){r=r||{};var n=e.prototype,o={future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"};function i(r,e,t,o){return n.fromToBase(r,e,t,o)}t.en.relativeTime=o,n.fromToBase=function(e,n,i,d,u){for(var f,a,s,l=i.$locale().relativeTime||o,h=r.thresholds||[{l:\"s\",r:44,d:\"second\"},{l:\"m\",r:89},{l:\"mm\",r:44,d:\"minute\"},{l:\"h\",r:89},{l:\"hh\",r:21,d:\"hour\"},{l:\"d\",r:35},{l:\"dd\",r:25,d:\"day\"},{l:\"M\",r:45},{l:\"MM\",r:10,d:\"month\"},{l:\"y\",r:17},{l:\"yy\",d:\"year\"}],m=h.length,c=0;c<m;c+=1){var y=h[c];y.d&&(f=d?t(e).diff(i,y.d,!0):i.diff(e,y.d,!0));var p=(r.rounding||Math.round)(Math.abs(f));if(s=f>0,p<=y.r||!y.r){p<=1&&c>0&&(y=h[c-1]);var v=l[y.l];u&&(p=u(\"\"+p)),a=\"string\"==typeof v?v.replace(\"%d\",p):v(p,n,y.l,s);break}}if(n)return a;var M=s?l.future:l.past;return\"function\"==typeof M?M(a):M.replace(\"%s\",a)},n.to=function(r,e){return i(r,e,this,!0)},n.from=function(r,e){return i(r,e,this)};var d=function(r){return r.$u?t.utc():t()};n.toNow=function(r){return this.to(d(this),r)},n.fromNow=function(r){return this.from(d(this),r)}}}));","import React, {useContext} from \"react\";\nimport Field from \"@/common/Field\";\nimport { WidgetProps } from \"@/types\";\nimport {Card, Space, Typography, Avatar, Tag, Timeline, TimelineItemProps} from \"antd\"\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\nconst { Meta } = Card;\nconst { Text} = Typography;\n\nimport dayjs from \"dayjs\";\nimport relativeTime from \"dayjs/plugin/relativeTime\";\nimport md5 from \"md5\";\n\n\ndayjs.extend(relativeTime);\n\ntype GravatarProps = {\n email: string,\n size?: number,\n theme: string,\n}\n\ntype CommentDataType = {\n id: number,\n isSender: boolean,\n isAuthor: boolean,\n text: string,\n email: string,\n date: string,\n author: string,\n}\n\ntype CommentProps = {\n data: CommentDataType,\n style?: any,\n}\n\ntype CommentsTypeProps = {\n data: CommentDataType[],\n}\n\ntype CommentsTimelineProps = {\n value?: EventsType[],\n}\n\n\ntype EventActionType = {\n date: string,\n action: string,\n}\n\nexport type EventsType = {\n type: \"action\" | \"comment\",\n event: EventActionType | CommentDataType\n\n}\n\nconst Gravatar = ({ email, size = 40, theme = '' } : GravatarProps) => {\n // Genera el enlace de Gravatar utilizando el email\n const gravatarUrl = `https://www.gravatar.com/avatar/${md5(email)}?s=${size}&d=${theme}`;\n\n return (\n <Avatar src={gravatarUrl} size={size} />\n );\n};\n\n\nfunction TextWithNewlines({ text }:{text: string}) {\n const textParts = text.split('\\n');\n\n return (\n <div>\n {textParts.map((part, index) => (\n <React.Fragment key={index}>\n {part}\n {index !== textParts.length - 1 && <br />}\n </React.Fragment>\n ))}\n </div>\n );\n}\n\nexport const Comment = (props: CommentProps) => {\n const {data, style} = props;\n const { t } = useContext(LocaleContext) as LocaleContextType;\n return (\n <Card key={data.id} style={{...style, ...{textAlign: 'start'}}}>\n <Meta avatar={<Gravatar email={data.email} theme='mp'/>}\n title={data.author}\n description={(\n <Space direction=\"horizontal\">\n <span title={data.date}>{dayjs(data.date).fromNow()}</span>\n {data.isAuthor && <Tag color=\"blue\">{t('author')}</Tag>}\n </Space>\n )} style={{marginBottom: '5px'}}/>\n <Text>\n <TextWithNewlines text={data.text} />\n </Text>\n </Card>\n )\n}\n\nexport const Comments = (props: CommentsTypeProps) => {\n const { data = [] } = props;\n const comments = data.map((c) => {\n const style = {float: c.isSender ? 'right' : 'left', width: '60%'};\n return <Comment data={c} style={style}/>\n });\n return (\n <div>\n <Space direction=\"vertical\" size=\"middle\" style={{ display: 'flex' }}>\n {comments}\n </Space>\n </div>\n )\n}\n\n\nexport const CommentsTimeline = (props: CommentsTimelineProps) => {\n const { value } = props;\n const items = (value || []).map(i => {\n if (i.type === 'action') {\n return {\n children: `${i.event.date} - ${(i.event as EventActionType).action}`\n }\n } else if (i.type === \"comment\") {\n return {\n color: 'gray',\n position: (i.event as CommentDataType).isSender ? 'left' : 'right',\n label: i.event.date,\n children: <Comment data={i.event as CommentDataType} />,\n }\n }\n })\n return <Timeline mode=\"alternate\" items={items as TimelineItemProps[]} />\n}\n\nexport const CommentsTimelineField = (props: WidgetProps) => {\n return (\n <Field {...props}>\n <CommentsTimeline />\n </Field>\n );\n}","import React, { useContext } from \"react\";\nimport { Layout, Typography } from \"antd\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\nconst { Content } = Layout;\nconst { Title } = Typography;\n\nfunction Welcome(): React.ReactElement {\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n return (\n <Content className=\"m-5 select-none\">\n <Title level={5}>{t(\"welcome\")}</Title>\n </Content>\n );\n}\n\nexport default Welcome;\n","import React, {\n useState,\n forwardRef,\n useImperativeHandle,\n useRef,\n} from \"react\";\nimport { ConnectionProvider, ContentRootProvider, FormView } from \"..\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport Welcome from \"./Welcome\";\nimport TabManagerProvider from \"@/context/TabManagerContext\";\nimport ActionView from \"./ActionView\";\nimport { parseContext } from \"@gisce/ooui\";\nimport LocaleContextProvider from \"@/context/LocaleContext\";\nimport { tForLang } from \"@/context/LocaleContext\";\nimport { ShortcutApi } from \"@/ui/FavouriteButton\";\nimport showErrorDialog from \"@/ui/ActionErrorDialog\";\nimport { InitialViewData, ViewType } from \"@/types\";\nimport { transformPlainMany2Ones } from \"@/helpers/formHelper\";\n\ntype RootViewProps = {\n children: React.ReactNode;\n globalValues?: any;\n rootContext?: any;\n lang: string;\n};\n\nexport type ActionInfo = {\n id: number;\n type: string;\n};\n\nfunction RootView(props: RootViewProps, ref: any) {\n const { children, globalValues = {}, rootContext = {}, lang } = props;\n const [activeKey, setActiveKey] = useState<string>(\"welcome\");\n\n const [tabs, setTabs] = useState<any>([\n {\n title: tForLang(\"welcome\", lang),\n key: \"welcome\",\n closable: true,\n content: <Welcome />,\n },\n ]);\n const tabViewsCloseFunctions = useRef(new Map<string, any>());\n const contentRootProvider = useRef();\n\n useImperativeHandle(ref, () => ({\n retrieveAndOpenAction,\n openShortcut,\n }));\n\n function remove(key: string) {\n if (key === activeKey) {\n const currentIndex = tabs.findIndex((tab: any) => tab.key === key);\n\n if (tabs[currentIndex - 1]) {\n setActiveKey(tabs[currentIndex - 1].key);\n }\n if (tabs[currentIndex + 1]) {\n setActiveKey(tabs[currentIndex + 1].key);\n }\n }\n\n setTabs(tabs.filter((tab: any) => tab.key !== key));\n tabViewsCloseFunctions.current.delete(key);\n }\n\n function registerViewCloseFn({\n tabKey,\n canWeClose,\n }: {\n tabKey: string;\n canWeClose: any;\n }) {\n tabViewsCloseFunctions.current.set(tabKey, canWeClose);\n }\n\n async function retrieveAndOpenAction({\n action,\n values,\n forced_values,\n initialViewType,\n res_id,\n domain = [],\n }: {\n action: string;\n values?: any;\n forced_values?: any;\n initialViewType?: ViewType;\n res_id?: number;\n domain?: any;\n }) {\n const dataForAction = await ConnectionProvider.getHandler().getActionData({\n action,\n context: rootContext,\n });\n\n if (dataForAction.type === \"ir.actions.wizard\") {\n showErrorDialog(\"Action type not supported\");\n return;\n }\n\n const [action_type, action_id_string] = action.split(\",\");\n const action_id = parseInt(action_id_string);\n\n const parsedContext = parseContext({\n context: dataForAction.context,\n values: globalValues,\n fields: {},\n });\n\n const parsedDomain = dataForAction.domain\n ? await ConnectionProvider.getHandler().evalDomain({\n domain: dataForAction.domain,\n values: globalValues,\n context: { ...rootContext, ...parsedContext },\n })\n : [];\n\n const {\n res_model: model,\n views,\n name: title,\n target,\n view_type,\n limit,\n } = dataForAction;\n\n const treeExpandable = view_type === \"tree\";\n\n const finalViews = [];\n\n for (const viewArray of views) {\n const [id, viewType] = viewArray;\n\n if (!id) {\n if (viewType === \"dashboard\") {\n finalViews.push([undefined, \"dashboard\"]);\n } else {\n const { view_id } = await ConnectionProvider.getHandler().getView({\n model,\n type: viewType,\n id,\n context: { ...rootContext, ...parsedContext },\n });\n finalViews.push([view_id, viewType]);\n }\n } else {\n finalViews.push(viewArray);\n }\n }\n\n let initialView;\n\n if (initialViewType) {\n const [id, type] = finalViews.find(\n ([_, type]) => type === initialViewType\n );\n initialView = { id, type };\n } else {\n const [id, type] = finalViews[0];\n initialView = { id, type };\n }\n\n openAction({\n domain: [...parsedDomain, ...domain],\n context: { ...rootContext, ...parsedContext },\n model,\n views: finalViews,\n title,\n target,\n initialView,\n action_type,\n action_id,\n values,\n forced_values,\n res_id,\n treeExpandable,\n limit,\n });\n }\n\n function addNewTab({\n title,\n content,\n key,\n action,\n }: {\n title: string;\n content: any;\n key: string;\n action?: ActionInfo;\n }) {\n let newTabs = [...tabs];\n\n if (tabs.length === 1 && tabs[0].key === \"welcome\") {\n newTabs = [...tabs.filter((tab: any) => tab.key !== \"welcome\")];\n }\n\n setTabs([\n ...newTabs,\n {\n title,\n key,\n closable: true,\n content,\n action,\n },\n ]);\n\n setActiveKey(key);\n }\n\n async function openRelate({\n relateData,\n fields,\n values,\n action_id,\n action_type,\n }: {\n relateData: any;\n fields: any;\n values: any;\n action_id: number;\n action_type: string;\n }) {\n const {\n res_model: model,\n context,\n domain,\n views,\n target,\n string: title,\n limit,\n } = relateData;\n\n const [id, type] = views[0];\n const initialView = { id, type };\n\n const parsedContext = parseContext({\n context,\n values: { ...values, ...globalValues },\n fields,\n });\n\n const parsedDomain = domain\n ? await ConnectionProvider.getHandler().evalDomain({\n domain: domain,\n values: transformPlainMany2Ones({\n fields,\n values: { ...values, ...globalValues },\n }),\n fields,\n context: { ...rootContext, ...parsedContext },\n })\n : [];\n\n openAction({\n model,\n target,\n views,\n context: { ...rootContext, ...parsedContext },\n domain: parsedDomain,\n title,\n initialView,\n action_id,\n action_type,\n limit,\n });\n }\n\n async function openShortcut(shortcut: ShortcutApi) {\n const { action_id, action_type, res_id, view_id } = shortcut;\n const action = `${action_type},${action_id}`;\n\n const dataForAction = await ConnectionProvider.getHandler().getActionData({\n action,\n context: rootContext,\n });\n const parsedContext = parseContext({\n context: dataForAction.context,\n values: globalValues,\n fields: {},\n });\n\n const parsedDomain = dataForAction.domain\n ? await ConnectionProvider.getHandler().evalDomain({\n domain: dataForAction.domain,\n values: globalValues,\n context: { ...rootContext, ...parsedContext },\n })\n : [];\n\n const {\n res_model: model,\n views,\n name: title,\n target,\n view_type,\n limit,\n } = dataForAction;\n const treeExpandable = view_type === \"tree\";\n\n const finalViews = [];\n\n for (const viewArray of views) {\n const [id, viewType] = viewArray;\n\n if (!id) {\n if (viewType === \"dashboard\") {\n finalViews.push([undefined, \"dashboard\"]);\n } else {\n const { view_id } = await ConnectionProvider.getHandler().getView({\n model,\n type: viewType,\n id,\n context: { ...rootContext, ...parsedContext },\n });\n finalViews.push([view_id, viewType]);\n }\n } else {\n finalViews.push(viewArray);\n }\n }\n\n let id, type;\n if (view_id === undefined || view_id === null) {\n const view = finalViews.find((view: any[]) => {\n return view[0] === undefined;\n });\n id = undefined;\n type = view[1];\n } else {\n [id, type] = finalViews.find((view: any[]) => {\n if (view[0] === undefined) {\n return false;\n }\n return view[0] === view_id;\n });\n }\n\n const initialView = { id, type };\n\n openAction({\n domain: parsedDomain,\n context: { ...rootContext, ...parsedContext },\n model,\n views: finalViews,\n title,\n target,\n initialView,\n action_id,\n action_type,\n res_id,\n treeExpandable,\n limit,\n });\n }\n\n async function openDefaultActionForModel({\n model,\n values,\n forced_values,\n initialViewType,\n res_id,\n domain,\n }: {\n model: string;\n values?: any;\n forced_values?: any;\n initialViewType?: ViewType;\n res_id?: number;\n domain?: any;\n }) {\n const actionString =\n await ConnectionProvider.getHandler().getActionStringForModel(model);\n await retrieveAndOpenAction({\n action: actionString,\n values,\n forced_values,\n initialViewType,\n res_id,\n domain,\n });\n }\n\n async function openAction({\n domain,\n context,\n model,\n views,\n title,\n target,\n initialView,\n action_id,\n action_type,\n res_id,\n values,\n forced_values,\n treeExpandable = false,\n limit,\n }: {\n domain: any;\n context: any;\n model: string;\n views: Array<any>;\n title: string;\n target: string;\n initialView: InitialViewData;\n action_id: number;\n action_type: string;\n res_id?: number | boolean;\n values?: any;\n forced_values?: any;\n treeExpandable?: boolean;\n limit?: number;\n }) {\n const key = uuidv4();\n\n if (target !== \"current\") {\n const formView = (await ConnectionProvider.getHandler().getView({\n model,\n type: \"form\",\n id: initialView.type === \"form\" ? initialView.id : undefined,\n context: { ...rootContext, ...context },\n })) as FormView;\n\n (contentRootProvider.current as any).openActionModal({\n domain,\n model,\n formView,\n context: { ...rootContext, ...context },\n actionData: {\n action_id,\n action_type,\n res_id,\n view_id: formView.view_id,\n },\n });\n } else {\n const formattedInitialView =\n initialView && Array.isArray(initialView.id)\n ? { ...initialView, id: initialView.id[0] }\n : initialView;\n\n addNewTab({\n title,\n action: {\n id: action_id,\n type: action_type,\n },\n content: (\n <ActionView\n action_id={action_id}\n action_type={action_type}\n tabKey={key}\n title={title}\n views={views}\n model={model}\n context={{ ...rootContext, ...context }}\n domain={domain}\n setCanWeClose={registerViewCloseFn}\n initialView={formattedInitialView}\n res_id={res_id}\n formDefaultValues={values}\n formForcedValues={forced_values}\n treeExpandable={treeExpandable}\n limit={limit}\n />\n ),\n key,\n });\n }\n }\n\n return (\n <LocaleContextProvider lang={lang}>\n <TabManagerProvider\n openShortcut={openShortcut}\n openAction={openAction}\n openRelate={openRelate}\n openDefaultActionForModel={openDefaultActionForModel}\n tabs={tabs}\n activeKey={activeKey}\n onRemoveTab={async (key: string) => {\n const canWeCloseFn = tabViewsCloseFunctions.current.get(\n key as string\n );\n const canWeClose = await canWeCloseFn?.();\n\n if (canWeClose || activeKey === \"welcome\") {\n remove(key as string);\n }\n }}\n onChangeTab={(key: string) => {\n setActiveKey(key);\n }}\n >\n <ContentRootProvider\n ref={contentRootProvider}\n globalValues={globalValues}\n >\n {children}\n </ContentRootProvider>\n </TabManagerProvider>\n </LocaleContextProvider>\n );\n}\n\nexport default forwardRef(RootView);\n","import React from \"react\";\nimport { CloseOutlined } from \"@ant-design/icons\";\nimport { theme } from \"antd\";\nconst { useToken } = theme;\n\ntype TabProps = {\n tabKey: string;\n label: string;\n onClose: (key: string) => void;\n isActive: boolean;\n onSelected: (key: string) => void;\n};\n\nfunction Tab(props: TabProps) {\n const { label, onClose, tabKey, isActive, onSelected } = props;\n const { token } = useToken();\n const bgColor = isActive ? token.colorBgContainer : token.colorPrimaryBg;\n\n return (\n <div\n onClick={() => {\n !isActive && onSelected(tabKey);\n }}\n style={{\n cursor: \"pointer\",\n height: 40,\n paddingTop: 7,\n paddingBottom: 5,\n paddingLeft: 10,\n paddingRight: 10,\n backgroundColor: bgColor,\n display: \"inline-flex\",\n flex: 1,\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"center\",\n borderTopLeftRadius: token.borderRadius,\n borderTopRightRadius: token.borderRadius,\n marginLeft: 2,\n }}\n >\n <div\n style={{\n color: token.colorPrimaryActive,\n userSelect: \"none\",\n height: 40,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n paddingLeft: 5,\n paddingRight: 5,\n marginBottom: 2,\n fontWeight: isActive ? 500 : \"normal\",\n }}\n >\n {label}\n </div>\n <div\n style={{\n paddingLeft: 5,\n height: 40,\n\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n }}\n >\n <CloseOutlined\n style={{\n color: token.colorPrimaryActive,\n }}\n onClick={(e) => {\n e.stopPropagation();\n onClose(tabKey);\n }}\n />\n </div>\n </div>\n );\n}\n\nexport default Tab;\n","import React, { useContext, useState } from \"react\";\n\nimport {\n TabManagerContext,\n TabManagerContextType,\n} from \"@/context/TabManagerContext\";\nimport Tab from \"./tabs/Tab\";\n\nfunction TabSelector() {\n const tabManagerContext = useContext(\n TabManagerContext\n ) as TabManagerContextType;\n const { activeKey, tabs, onRemoveTab, onChangeTab } = tabManagerContext || {};\n\n return (\n <>\n {tabs.map((tab: any) => (\n <Tab\n key={tab.key}\n tabKey={tab.key}\n label={tab.title}\n onClose={onRemoveTab}\n isActive={activeKey === tab.key}\n onSelected={onChangeTab}\n />\n ))}\n </>\n );\n}\n\nexport default TabSelector;\n","import React, { useContext } from \"react\";\n\nimport {\n TabManagerContext,\n TabManagerContextType,\n} from \"@/context/TabManagerContext\";\n\ntype Props = {\n tab: any;\n};\n\nfunction TabContent(props: Props) {\n const { tab } = props;\n\n const tabManagerContext = useContext(\n TabManagerContext\n ) as TabManagerContextType;\n const { activeKey } = tabManagerContext || {};\n\n const hiddenStyle: any = {\n display: \"none\",\n };\n\n return (\n <div style={tab.key !== activeKey ? hiddenStyle : undefined}>\n {tab.content}\n </div>\n );\n}\n\nexport default React.memo(TabContent, () => true);\n","import React, { useContext } from \"react\";\n\nimport {\n TabManagerContext,\n TabManagerContextType,\n} from \"@/context/TabManagerContext\";\nimport TabContent from \"./TabContent\";\n\nfunction CurrentTabContent() {\n const tabManagerContext = useContext(\n TabManagerContext\n ) as TabManagerContextType;\n const { tabs } = tabManagerContext || {};\n\n const tabsToRender =\n tabs?.map((tab) => <TabContent key={tab.key} tab={tab} />) || null;\n\n return <>{tabsToRender}</>;\n}\n\nexport default CurrentTabContent;\n","import React, { useContext, useEffect, useState } from \"react\";\nimport {\n StarOutlined,\n StarFilled,\n DownOutlined,\n TableOutlined,\n FormOutlined,\n EditOutlined,\n} from \"@ant-design/icons\";\nimport { Button, Col, Row, Spin, Tooltip, theme } from \"antd\";\nimport { Menu, Dropdown } from \"antd\";\nimport showErrorDialog from \"@/ui/ActionErrorDialog\";\nimport {\n TabManagerContext,\n TabManagerContextType,\n} from \"@/context/TabManagerContext\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport { ViewType } from \"@/types\";\nconst { useToken } = theme;\n\nexport type ShortcutApi = {\n action_id: number;\n action_type: string;\n id?: number;\n name: string;\n res_id: number | boolean;\n res_model: string;\n view_id: number;\n view_type: string;\n};\n\nexport type FavouriteOptions = {\n action_id: number;\n action_type: string;\n res_id: number | boolean;\n view_id: number;\n};\n\ntype Props = {\n onRetrieveShortcuts: () => Promise<ShortcutApi[]>;\n onCheckIsFavourite: (options: FavouriteOptions) => Promise<number | boolean>;\n onAddFavourite: (options: FavouriteOptions) => Promise<number>;\n onRemoveFavourite: (shortcut_id: number) => Promise<void>;\n};\n\nconst FavouriteButton = (props: Props) => {\n const {\n onRetrieveShortcuts,\n onCheckIsFavourite,\n onAddFavourite,\n onRemoveFavourite,\n } = props;\n\n const [isFavourite, setIsFavourite] = useState(false);\n const [dropdownVisible, setDropdownVisible] = useState(false);\n const [shortcuts, setShortcuts] = useState<ShortcutApi[]>([]);\n const [loading, setLoading] = useState(true);\n const [currentShortcutId, setCurrentShortcutId] = useState<number>();\n const { t } = (useContext(LocaleContext) as LocaleContextType) || {};\n\n const { token } = useToken();\n\n const tabManagerContext = useContext(\n TabManagerContext\n ) as TabManagerContextType;\n const {\n openShortcut,\n tabs,\n activeKey,\n currentView,\n currentId,\n openDefaultActionForModel,\n } = tabManagerContext || {};\n\n useEffect(() => {\n getShortcuts();\n }, []);\n\n useEffect(() => {\n checkFavourite();\n }, [tabs, activeKey, currentView, currentId]);\n\n async function getShortcuts() {\n try {\n setLoading(true);\n const shortcuts = await onRetrieveShortcuts();\n setShortcuts(shortcuts);\n } catch (e) {\n showErrorDialog(e);\n } finally {\n setLoading(false);\n }\n }\n\n function handleMenuClick(event: any) {\n const { key } = event;\n const shortcut = shortcuts.find((s) => s.id === Number(key));\n if (shortcut?.action_type === \"ir.actions.wizard\") {\n return;\n }\n if (shortcut) {\n openShortcut(shortcut);\n }\n setDropdownVisible(false);\n }\n\n function handleVisibleChange(flag: boolean) {\n if (flag) {\n getShortcuts();\n }\n setDropdownVisible(flag);\n }\n\n async function checkFavourite() {\n if (!currentView) {\n return;\n }\n\n const currentTab = tabs.find((t) => t.key === activeKey);\n const { id: action_id, type: action_type } = currentTab?.action || {};\n\n if (!action_id || !action_type) {\n setIsFavourite(false);\n return;\n }\n\n const view_id = currentView.view_id!;\n let res_id: boolean | number = false;\n\n if (currentView.type === \"form\") {\n res_id = currentId ? (currentId as number) : false;\n }\n const result = await onCheckIsFavourite({\n action_id,\n action_type,\n view_id,\n res_id,\n });\n\n if (result !== false) {\n setCurrentShortcutId(result as number);\n }\n\n setIsFavourite(result !== false);\n }\n\n async function editFavourites() {\n setDropdownVisible(false);\n openDefaultActionForModel?.({ model: \"ir.ui.view_sc\" });\n }\n\n const menu = (\n <Menu onClick={handleMenuClick}>\n <div style={{ width: 300, padding: 5, display: \"flex\" }}>\n <div style={{ paddingLeft: 15, color: \"#ccc\" }}>\n {t?.(\"favorites\").toUpperCase()}\n </div>\n <div style={{ flexGrow: 1, paddingLeft: 10 }}>\n <Tooltip title={t?.(\"edit_favorites\")}>\n <EditOutlined\n style={{ color: token.colorPrimary, cursor: \"pointer\" }}\n onClick={editFavourites}\n />\n </Tooltip>\n </div>\n </div>\n <Menu.Divider />\n {loading ? (\n <Spin style={{ padding: \"1rem\" }} />\n ) : shortcuts.length > 0 ? (\n <>\n {shortcuts.map((shortcut) => (\n <Menu.Item key={shortcut.id}>\n <FavouriteItem\n title={shortcut.name}\n type={shortcut.view_type as ViewType}\n />\n </Menu.Item>\n ))}\n </>\n ) : (\n <div style={{ width: 300, padding: 5, paddingLeft: 15 }}>\n {t?.(\"no_favorites\")}\n </div>\n )}\n </Menu>\n );\n\n function FavouriteItem({ title, type }: { title: string; type: ViewType }) {\n const icon = type === \"tree\" ? <TableOutlined /> : <FormOutlined />;\n return (\n <Row wrap={false}>\n <Col flex=\"none\" style={{ paddingRight: 20 }}>\n {icon}\n </Col>\n <Col flex=\"auto\">{title}</Col>\n </Row>\n );\n }\n\n async function toggleFavourite() {\n if (isFavourite && currentShortcutId) {\n await onRemoveFavourite(currentShortcutId);\n } else {\n if (!currentView) {\n return;\n }\n\n const currentTab = tabs.find((t) => t.key === activeKey);\n const { id: action_id, type: action_type } = currentTab?.action || {};\n const view_id = currentView.view_id!;\n let res_id: boolean | number = false;\n\n if (!action_id || !action_type) {\n setIsFavourite(false);\n return;\n }\n\n if (currentView.type === \"form\") {\n res_id = currentId ? (currentId as number) : false;\n }\n\n await onAddFavourite({\n action_id,\n action_type,\n view_id,\n res_id,\n });\n }\n\n await getShortcuts();\n setIsFavourite(!isFavourite);\n }\n\n return (\n <>\n <Button\n type={isFavourite ? \"primary\" : \"default\"}\n icon={\n isFavourite ? (\n <StarFilled style={{ color: \"white\" }} />\n ) : (\n <StarOutlined />\n )\n }\n style={{\n width: 50,\n borderTopRightRadius: 0,\n borderBottomRightRadius: 0,\n }}\n onClick={toggleFavourite}\n ></Button>\n <Dropdown\n overlay={menu}\n onVisibleChange={handleVisibleChange}\n open={dropdownVisible}\n >\n <Button\n style={{\n width: 25,\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0,\n }}\n icon={<DownOutlined style={{ fontSize: \"0.5em\" }} />}\n onClick={(e) => e.preventDefault()}\n ></Button>\n </Dropdown>\n </>\n );\n};\n\nexport default FavouriteButton;\n"],"names":["Text","Title","Typography","useToken","theme","alignClass","left","center","right","Label","props","ooui","align","responsiveBehaviour","label","tooltip","fieldForLabel","labelSize","labelType","labelText","length","labelAlgin","token","TextType","undefined","_jsx","Tooltip","QuestionCircleOutlined","color","colorPrimary","Interweave","ca_ES","true","false","simple_search","advanced_search","search","parameters","limit","first","no_results","summary","welcome","attachments","addNewAttachment","listAllAttachments","viewAs","confirmRemoveItem","save","delete","refresh","previous","next","actions","reports","related","new","fillRequiredField","fillRequiredFields","generatingReport","confirmation","ok","cancel","formHasErrors","unsavedChanges","confirmRefreshWithoutSave","discardAndRefresh","removeItems","confirmRemove","yesConfirmRemove","unlinkItems","confirmUnlink","yesConfirmUnlink","confirmCloseWithoutSave","closeWithoutSaving","action","report","selectAction","download","clear","open","uploadNewImage","noCurrentEntries","duplicate","downloadingAttachment","tree","form","favorites","edit_favorites","no_favorites","register","of","editingDocument","showLogs","createdBy","creationDate","lastUpdatedBy","lastUpdatedDate","goToResourceId","searchId","idNotFound","selectedRegisters","translate","enterTextBeforeTranslate","saveBeforeTranslate","configDashboard","moveDashboard","openAttachment","openAttachmentLink","uninformed","totalRegisters","export","selectAtLeastOneField","printScreen","advancedExport","savedRegisters","errorWhileSavingForm","autor","recordsSelected","selectAllRecords","allRecordsSelected","en_US","author","es_ES","localeStrings","LocaleContext","React","createContext","LocaleContextProvider","children","lang","t","key","tForLang","Field","layout","valuePropName","showLabel","alignLabel","required","type","validator","id","useContext","rules","message","formItem","Form","labelWidget","LabelOoui","name","string","help","Row","Col","_Fragment","confirm","Modal","showDialog","onOk","confirmMessage","title","icon","ExclamationCircleOutlined","centered","content","okText","cancelText","FormContext","FormProvider","activeId","activeModel","setFieldValue","getFieldValue","executeButtonAction","getContext","getValues","getPlainValues","domain","submitForm","fetchValues","formHasChanges","elementHasLostFocus","getFields","iconMapping","iconMapper","getIconForKey","toCamelCase","word","w","IconCamelCase","antKey","AntIcons","tablerKey","TablerIcons","TablerIcon","_a","Icon","Button","activated","buttonType","context","readOnly","formContext","isRunning","setIsRunning","useState","onClick_confirm","onClick","showConfirmDialog","getButtonIcon","LoadingOutlined","AntButton","primary","danger","whiteSpace","height","ButtonGroup","defaultButton","secondaryButtons","caption","buttons","FieldOoui","_jsxs","Dropdown","DownOutlined","Items","items","map","button","Menu","MODAL_WIDTH_CONSTANT","getWindowDimensions","width","useWindowDimensions","windowDimensions","setWindowDimensions","useEffect","handleResize","ConnectionProvider","handler","parseError","errorResponse","splitted","args","error","warning","err","WarningOutlined","TranslationModal","visible","onCloseModal","model","field","onSubmitSucceed","modalWidth","langs","setLangs","isLoading","setIsLoading","submitLoading","setSubmitLoading","valuesForLangs","setValuesForLangs","originalValuesForLangs","useRef","fetchData","getLangs","getValuesForLangs","showErrorDialog","getHandler","params","fields","item","code","retrievedValuesForLang","retrievedValue","readObjects","ids","fieldsToRetrieve","current","getInputsForLangs","i","paddingBottom","paddingRight","TextArea","event","target","value","onSubmit","langCode","Object","keys","update","values","Spin","Divider","Space","CloseOutlined","CheckOutlined","marginLeft","ButtonWithTooltip","restProps","info","Char","isSearchField","isPassword","translatable","requiredStyle","backgroundColor","colorPrimaryBg","input","Input","size","TranslatableChar","onChange","translationModalVisible","setTranslationModalVisible","cursor","pointerEvents","TranslationOutlined","defaultAlgorithm","defaultSeed","mapToken","Option","Select","Selection","SelectionInput","selectionValues","Array","from","entries","options","entry","RequiredSelect","option","toLowerCase","indexOf","styled","Boolean","BooleanInput","RequiredCheckbox","AntCheckbox","isObject","isObject_1","freeGlobal","global","_freeGlobal","require$$0","freeSelf","root","_root","now","now_1","reWhitespace","trimmedEndIndex","index","_trimmedEndIndex","reTrimStart","baseTrim","_baseTrim","Symbol","_Symbol","objectProto","hasOwnProperty","nativeObjectToString","symToStringTag","getRawTag","isOwn","tag","unmasked","result","_getRawTag","objectToString","_objectToString","require$$1","require$$2","nullTag","undefinedTag","baseGetTag","_baseGetTag","isObjectLike","isObjectLike_1","symbolTag","isSymbol","isSymbol_1","NAN","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","toNumber","other","isBinary","toNumber_1","FUNC_ERROR_TEXT","nativeMax","nativeMin","debounce","func","wait","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","invokeFunc","time","thisArg","leadingEdge","timerExpired","remainingWait","timeSinceLastCall","timeSinceLastInvoke","timeWaiting","shouldInvoke","trailingEdge","flush","debounced","isInvoking","debounce_1","getFilesize","base64string","inKbs","getMimeType","mimeInfo","fileTypeFromBuffer","toBase64","file","resolve","reject","reader","e","openBase64InNewTab","data","mimeType","byteCharacters","byteNumbers","byteArray","fileURL","Image","ImageInput","inputFile","triggerChange","changedValue","downloadFile","fileType","linkSource","mime","downloadLink","document","createElement","href","ext","click","onChangeFile","stopPropagation","preventDefault","files","b64","clearFile","maxWidth","display","FolderOpenOutlined","fileUploadField","DownloadOutlined","ClearOutlined","FiberGrid","FiberGridInput","JSON","parse","console","log","GridUi","newValue","getTree","treeView","xml","TreeOoui","getTableColumns","components","column","component","render","a","b","aItem","bItem","_b","getTableItems","treeOoui","results","parsedItem","widget","Reference","Many2one","getColorMap","colorsValue","getItemsAttributes","getStatusMap","attributes","attribute","sortResults","resultsToSort","sorter","desc","order","sortFn","hasActualValues","obj","readObjectValues","formView","currentView","temporalItems","idsToFetch","evaluatedColorsForTree","colors","filteredValues","resultFormValues","fetchedItemValues","itemValues","itemWithFetchedValues","getNextPendingId","negativeIds","convertToPlain2ManyValues","Timeline","relation","views","oouiViews","setError","setViews","Map","useDeepCompareEffect","getViewData","getView","set","Alert","TimelineInput","showFormModal","setShowFormModal","modalItem","setModalItem","summaryField","titleField","itemsToShow","filter","itemsWithValues","get","arch","AntTimeline","padding","find","searchItem","FormModal","defaultValues","Indicator","IndicatorInput","formattedValue","isArray","Statistic","suffix","card","Card","boolValue","processValues","getTouchedValues","source","differences","sourceValue","targetValue","numericId","targetNumericId","checkFieldsType","changedFields","formOoui","types","fieldType","mergeFieldsDomain","fieldsDomain","output","getValuesForDomain","getOnChangePayload","onChangeFieldActionArgs","parentValues","payload","arg","splittedArg","parentKey","mergeSearchFields","searchFields","mergedSearchFields","sf","onlyUnique","self","transformPlainMany2Ones","reformattedValues","colorFromString","text","hash","hexColour","stringFormat","match","Tag","TagInput","colorValue","CustomTag","style","isPresetStatusColor","isPresetColor","borderColor","borderStyle","borderWidth","AntdTag","Tags","TagsInput","operation","setOptions","isLoadingOptions","setIsLoadingOptions","fetchOptions","evaluatedDomain","evalDomain","onChangeSelected","newItems","includes","currentIds","push","tagRender","closable","onClose","onPreventMouseDown","getWidgetType","Tree","Notebook","Group","Integer","Float","ProgressBar","Date","DateTime","Time","One2many","Separator","Binary","Url","Email","FloatTime","MultiCheckbox","Markdown","Radio","Switch","Steps","CodeEditor","CommentsTimelineField","createReactWidget","widgetClass","getSpanStyleForItem","fillRowWithEmptiesToFit","row","mustFillWithEmpties","numberOfColumns","rowWithEmptiesToFit","totalColSpan","isLastItemAndMustFit","columnIndex","gapsToAdjust","gapsToFill","expandWidgetsIfNeeded","getSingleRowTemplateColumns","gridOptions","Container","columnsToAdd","getTemplateColumns","columns","fieldInRows","odd","even","templateColumns","getMaxColspanForRows","rows","prev","container","maxColspanForRows","firstRow","rowWithoutInvisibleFields","invisible","rowWithExpandedItems","some","concat","minWidth","gridTemplateColumns","gap","minHeight","onCancel","FormModalContext","FormModalProvider","setTitle","convertBooleanParamIfNeeded","getParamsForFields","widgetContainer","removeUndefinedFields","groupedDateTime","groupDateTimeValuesIfNeeded","groupedValues","ungroupDateValuesIfNeeded","getParamForField","acc","curVal","filteredKey","operator","valueEntry","getDatetimeDateFields","removeDateTimeSingleFields","newValues","datePair","baseKey","timeKey","timePair","to","timeValueFrom","timeValueTo","dateFields","getUniqueFieldsForParams","uniqueFields","param","mergeParams","searchParams","domainParams","finalParams","uniqueParams","element","DEFAULT_SEARCH_LIMIT","useSearch","opts","setSearchTreeNameSearch","setSelectedRowItems","setSearchParams","setSearchVisible","setTreeIsLoading","nameSearch","searchNameGetDoneRef","setActionViewTotalItems","setSorter","setCurrentItemIndex","setResultsActionView","resultsActionView","currentId","setLimit","setSearchValues","tableRefreshing","setTableRefreshing","searchFilterLoading","setSearchFilterLoading","searchError","setSearchError","page","setPage","offset","setOffset","totalItems","setTotalItems","resultsInternal","setResultsInternal","colorsForResults","setColorsForResults","statusForResults","setStatusForResults","internalLimit","originalResults","setResults","useCallback","getResults","searchByNameSearch","searchResults","resultsIds","status","attrs","resultsWithData","resultsData","newResultIds","resultsSorted","newOffset","mergedParams","attrsEvaluated","newCurrentItemIndex","totalItemsValue","fetchResults","changeSort","newSorter","sortedResults","submit","searchValues","newLimit","requestPageChange","fetchChildrenForRecord","record","child_id","getAllIds","ActionViewContext","ActionViewProvider","titleProps","setCurrentView","availableViews","formRef","searchTreeRef","onNewClicked","setCurrentId","currentItemIndex","currentModel","selectedRowItems","searchTreeNameSearch","limitProps","formIsSaving","setFormIsSaving","setFormHasChanges","removingItem","setRemovingItem","formIsLoading","setFormIsLoading","treeIsLoading","setAttachments","duplicatingItem","setDuplicatingItem","searchVisible","graphIsLoading","setGraphIsLoading","previousView","setPreviousView","view","view_id","callOnFormSave","onFormSave","TabManagerContext","TabManagerProvider","openAction","openRelate","openDefaultActionForModel","openShortcut","activeKey","onChangeTab","onRemoveTab","tabs","ContentRootContext","callRefreshValues","fns","ContentRootProvider","ref","globalValues","reportInProgressInterval","waitingForReport","reportGenerating","setReportGenerating","tabManagerContext","onRefreshParentValues","useImperativeHandle","openActionModal","actionModalVisible","setActionModalVisible","actionModalOptions","setActionModalOptions","generateReport","reportData","reportContext","datas","report_name","idsToExecute","reportContextParsed","parseContext","newReportId","createReport","setInterval","evaluateReportStatus","clearInterval","reportState","getReport","state","exception","processAction","actionData","onRefreshParentValuesFn","runAction","url","_actionData","res_model","parseInt","responseContext","mergedContext","parsedDomain","initialView","getViewsAndInitialView","view_mode","action_id","action_type","closeParent","openNewActionModal","Promise","setTimeout","onFormModalSucceed","retriedViewData","viewData","viewTypes","split","viewType","retrievedViewId","_","forwardRef","ErrorAlert","className","messageContent","messageType","stringify","WIDTH_BREAKPOINT","propsOnCancel","propsOnSubmitSucceed","showFooter","getDataFromAction","onFieldsChange","onSubmitError","propsOnSubmitError","mustClearAfterSave","submitMode","valuesProps","formViewProps","postSaveAction","insideButtonModal","parentContext","actionDomain","rootForm","forcedValues","parentWidth","isSubmitting","setIsSubmitting","setFormOoui","antForm","AntForm","useForm","setArch","setFields","formModalContext","containerWidth","setContainerWidth","defaultGetCalled","setDefaultGetCalled","createdId","originalFormValues","lastAssignedValues","warningIsShown","formSubmitting","x2manyPendingLink","parentId","getParentPlainValues","actionViewContext","contentRootContext","cancelUnsavedChanges","clearAndReload","checkFieldsChanges","formValues","getCurrentId","getCurrentValues","getAdditionalValues","forEach","val","getFormValues","getActiveIdsContext","active_id","active_ids","parent_id","getDefaultValues","defaultGet","extraValues","currentValues","getFieldsValue","assignNewValuesToForm","reset","checkIfFormHasErrors","validateFields","getFormView","stack","_fields","_arch","hasDefaultGetCalled","forceRefresh","fetchValuesFromApi","isDefaultGet","parseForm","showUnsavedChangesDialog","getActionStringForModel","viewsForAction","getViewsForAction","mergedValues","valuesProcessed","fieldsToUpdate","fieldName","fieldValue","touched","submitApi","callOnSubmitSucceed","touchedValues","newId","create","submitValues","submitSucceed","succeed","formErrorsDialog","success","operationInProgress","FormOoui","evaluateChanges","debouncedCheckFieldsChanges","changedField","processFieldOnChange","onChangeFieldAction","onChangeFields","response","executeOnChange","method","processedValues","proccessedFields","runObjectButton","execute","runWorkflowButton","executeWorkflow","runActionButton","updateOperationInProgress","mustBlockButtons","additionalContext","updatedContext","footer","Measure","contentRect","bounds","measureRef","buttonModal","isMenuAction","rest","formTitle","setFormTitle","isFavourite","setIsFavourite","currentShortcutId","setCurrentShortcutId","checkFavourite","res_id","isShortcutFavorite","toggleFavourite","removeFavourite","shortcut_id","addFavourite","header","StarFilled","StarOutlined","paddingLeft","contentWidth","DateRangePicker","DatePicker","DateTimeRangePicker","TimePicker","decimalDigits","InputNumber","replace","isNaN","parseFloat","Math","trunc","newNumber","PairFields","Widget","IntegerOoui","getWidget","MultiSelection","MultiSelectionInput","optionValueKeyPair","optionKey","CustomSelect","handleChange","changedValues","keysForChangedValues","SearchField","widgetType","SearchFieldTypes","boolean","SelectionOoui","_id","selection","float","progressbar","float_time","integer","date","datetime","SearchBottomBar","onAdvancedFilterToggle","advancedFilter","onClear","isSearching","UpOutlined","SearchOutlined","SearchParams","onLimitChange","limitOoui","offsetOoui","SearchFilter","secondary","setSearchFilterHeight","showLimitOptions","simpleSearchFields","setSimpleSearchFields","advancedSearchFields","setAdvancedSearchFields","setAdvancedFilter","sfo","setFieldsValue","getRowsAndCols","j","SearchFilterOoui","_simpleSearchContainer","_advancedSearchContainer","onFinish","newParams","borderRadius","resetFields","getTextWidth","font","metrics","calculateColumnsWidth","maxWidthPerCell","columnsWithWidth","indexColumn","columnWidth","cellValue","cellWidth","tableWidth","parseStringToFloat","parseFloatToString","num","finalString","hours","mins","hoursString","minsStrings","ProgressBarInput","textValue","toLocaleString","minimumIntegerDigits","maximumFractionDigits","useGrouping","flex","alignItems","StyledProgress","flexGrow","Progress","Many2oneSuffixModal","onItemClicked","Many2oneSuffix","printModalVisible","setPrintModalVisible","setFormView","targetValues","setTargetValues","toolbar","parseContextFields","parseDomainFields","relate","print","menu","relateItems","handleMenuClick","ThunderboltOutlined","PrinterOutlined","EnterOutlined","relateItemClicked","relateData","onActionItemClicked","onPrintItemClicked","RightCircleOutlined","Many2oneTree","m2oField","ReferenceTree","setName","loading","setLoading","intId","fetchName","nameResponse","selectionDescription","module","this","n","r","s","u","o","f","h","c","d","l","$","y","M","m","v","g","D","p","S","O","T","Avatar","toString","slice","toUpperCase","join","AntdAvatar","dayjs","extend","weekday","localeData","DatePickerConfig","placeholder","dateDisplayFormat","dateInternalFormat","showTime","DatePickerInput","mode","onValueStringChange","momentDate","format","dateValue","AntDatePicker","booleanComponentFn","justifyContent","alignContent","Checkbox","many2OneComponentFn","textComponentFn","dateComponentFn","dateTimeComponentFn","one2ManyComponentFn","progressBarComponentFn","floatTimeComponent","numberComponent","textAlign","imageComponent","TagComponent","SelectionComponent","referenceComponent","AvatarFn","total","onRequestPageChange","onRowClicked","showPagination","rowSelection","scrollY","onChangeSort","onFetchChildrenForRecord","childField","rootTree","readonly","onSelectAllRecords","setItems","setColumns","errorInParseColors","many2one","one2many","many2many","image","reference","avatar","pagination","isExpandable","Pagination","getSums","sumFields","it","sum","sumItems","selectedRowKeys","sumField","reduce","round","dataTable","adjustedHeight","GisceTable","Badge","expandIcon","PlusSquareOutlined","collapseIcon","MinusSquareOutlined","loadingIcon","SearchTree","treeViewProps","treeScrollY","onChangeSelectedRowKeys","initialFetchDone","setInitialFetchDone","setCurrentModel","setTreeView","initialError","setInitialError","searchFilterHeight","expandableClickActionData","changeSelectedRowKeys","refreshResults","getDomain","fetchModelData","_formView","_treeView","onSearchTreeLimitChange","treeButOpen","onRowClickedHandler","allIds","calculateTableHeight","search_fields","field_parent","SearchModal","onCloseModalProps","onSelectValues","showCreateModal","setShowCreateModal","modalHeight","setSelectedRowKeys","FileAddOutlined","Error","Many2oneInput","widgetDomain","showSearchModal","setShowSearchModal","searching","setSearching","searchText","setSearchText","searchButtonTappedRef","inputText","setInputText","inputTextRef","transformedDomain","searchDomain","setSearchDomain","fetchNameAndUpdate","onElementLostFocus","tryFetchFirstResultOrShowSearch","parseDomain","resultIds","searchAllIds","transformDomainForChildWidget","widgetFieldName","onKeyDown","keyCode","RequiredInput","borderTopRightRadius","borderBottomRightRadius","borderTopLeftRadius","borderBottomLeftRadius","One2manyContext","One2manyProvider","itemIndex","setItemIndex","manualTriggerChange","setManualTriggerChange","getValueForOperator","graphProcessor","fontGrowFactor","minFontSize","GraphIndicator","colorCondition","totalDomain","showPercent","iconProps","manualIds","setValue","percent","setPercent","totalValue","setTotalValue","setHeight","setWidth","setColor","setIcon","fetchValue","isTotal","fetchTotalValue","searchCount","totalRetrievedValue","conditionEval","parseCondition","condition","iconEval","PercentageIndicator","CommonIndicator","getComputedStyle","body","measureText","fontSize","localeValue","finalValue","tw","floor","maxFontSize","IconElement","overflow","margin","twoLinesHeight","percentValue","flexDirection","formatter","graphType","object","axisFormatter","stringIsValidNumeric","isNumber","isValidDateString","dateType","getDateType","dateFormats","DefaultGraphOptions","variable","dateString","processGraphData","getFieldsToRetrieve","graphFieldUtils","useGraphData","uninformedString","setProcessedValues","evaluatedEntries","setEvaluatedEntries","setType","parseGraph","retrieveData","timerange","x","_processedValues","getFieldsForModel","fieldsDefinition","sort","line","Line","bar","Column","pie","Pie","GraphChart","isGroup","isStack","Chart","getGraphProps","graphProps","GraphDefaults","colorField","angleField","xField","yField","seriesField","groupField","GraphComp","graphOoui","setGraphOoui","graphXml","setGraphXml","graph","indicator","indicatorFieldopts","Graph","One2manyTopBar","titleString","onCreateItem","onToggleViewMode","onDelete","onPreviousItem","onNextItem","isMany2Many","onSearchItem","showCreateButton","showToggleButton","separator","colorPrimaryActive","deleteButton","ApiOutlined","DeleteOutlined","itemToShow","itemBrowser","LeftOutlined","RightOutlined","AlignLeftOutlined","ViewObjects","filterDuplicateItems","filtered","One2manyInput","continuousEntryMode","setContinuousEntryMode","originalSortItemIds","isMany2many","treeValues","previousCurrentView","fetchDataIfNeeded","fetchOriginalItemsFromApi","toggleViewMode","nextView","showFormChangesDialogIfNeeded","previousItem","nextItem","reloadOriginalValuesForFormItem","updatedFormObject","updatedTreeObject","updatedItems","callback","showRemoveConfirm","showUnlinkItemDialog","removeCurrentItem","removeSelectedItems","showRemoveItemDialog","createItem","inv_field","itemsToRemove","idsToRemove","onFormModalSubmitSucceed","nextId","onTreeRowClicked","itemId","itemsToLoadFrom","onSearchModalSelectValue","filteredIds","getTitle","ViewType","currentItemId","resultsToShow","FloatTimeInput","FieldSet","TabPane","Tabs","pages","getPageIcon","tabPosition","TranslatableText","paddingTop","useExport","locale","selectedRegistersToExport","exportModelFields","onExport","showInfo","exportDomain","addIdToRelationFields","onGetFields","convertToExportFields","onGetFieldChilds","optsForField","getFieldDefinition","getChildKey","onGetPredefinedExports","predefinedExports","listPredefinedExports","keysWithChilds","retrieveKeyFieldsForPredefinedExports","pExport","childKey","onSavePredefinedExport","fieldsForExport","getModelFields","fieldsForExportLine","exportId","onRemovePredefinedExport","fieldsForModel","exportFields","valuesForField","relationField","isRelationField","compoundId","fieldDefinition","getParentKey","parentTitle","pExports","exportLinesIds","exp","exportLinesObjects","getKeysWithoutChildsInFields","splitAndSortKeys","exists","_c","allPredefinedExportKeys","keysWithoutChildsInFields","keysMap","subKeys","subKey","currentKey","aLevels","bLevels","ExportModal","visibleRegisters","ExportModalFmg","Y","customParseFormat","TimeInput","timestring","ReferenceInput","splittedValue","many2oneValue","setMany2oneValue","selectionValue","setSelectionValue","m2oValue","referenceValue","Many2oneOoui","BinaryInput","filenameField","filesize","fileName","openFile","EyeOutlined","iconsForViewTypes","TableOutlined","FormOutlined","AreaChartOutlined","calendar","CalendarOutlined","getIconForView","ChangeViewButton","onChangeView","disabled","getMenu","menuItems","idx","charAt","opacity","tryNavigate","selectedView","DropdownButton","onItemClick","itemClicked","ActionButton","finalIcon","NewButton","onNewClickedProps","showLogInfo","translateFn","logInfo","getLogInfo","create_date","create_uid","write_date","write_uid","AttachmentsButtonWrapper","numberOfAttachments","popoverVisible","setPopoverVisible","LinkOutlined","Popover","Content","onAddNewAttachment","onopenAttachmentLink","onOpenAttachmentDetail","onListAllAttachments","attachment","link","datas_fname","AttachmentsButton","onViewAttachmentDetails","preloading","setPreloading","preloadedAttachments","setPreloadedAttachments","downloading","setDownloading","preloadAttachments","retrievedAttachment","openAttachmentDetail","FormActionBar","tryRefresh","refreshChangesDialog","onNextClick","onPreviousClick","tryDelete","remove","deleteObjects","filteredResults","newIndex","mustDisableButtons","SaveOutlined","CopyOutlined","InfoCircleOutlined","ReloadOutlined","saveDocument","selection_associated_object","forced_values","initialViewType","LinkInput","valueValidator","linkPrefix","editMode","setEditMode","showInput","setShowInput","EditOutlined","isURL","isEmail","GoToResourceModal","onIdSubmitted","inputRef","handleSubmit","focus","ButtonWithBadge","badgeNumber","position","top","zIndex","background","colorPrimaryHover","GraphActionBar","refreshGraph","FilterOutlined","newView","TitleHeader","getSummary","reg","marginBottom","GraphActionView","graphRef","applyLimit","setApplyLimit","FormActionView","findIndex","SearchBar","onSearch","mustShowClearSuffix","setMustShowClearSuffix","CloseCircleFilled","ConfigContext","previewFeatures","TreeActionBar","treeExpandable","exportModalVisible","setExportModalVisible","hasNameSearch","trim","searchString","idsToExport","TreeActionView","DashboardActionContext","DashboardActionProvider","moveItemsEnabled","setMoveItemsEnabled","dashboardRef","DashboardActionBar","BorderOuterOutlined","SettingOutlined","DashboardActionView","dashboardData","Dashboard","configAction","resolveViewInfoPromises","viewsToRetrieve","ActionView","setCanWeClose","tabKey","formDefaultValues","formForcedValues","setCurrentViewInternal","setAvailableViews","res_id_parsed","setCurrentIdInternal","gtResourceModalVisible","setGtResourceModalVisible","searchingForResourceId","setSearchingForResourceId","setCurrentViewTabContext","setCurrentIdTabContext","useHotkeys","handleGoToRecordShortcut","canWeClose","viewDataRetrieved","getViewsPromises","viewArray","viewTuple","promise","viewsRetrieved","viewInfo","view_type","currentViewToAssign","initialViewWithData","resource","viewForm","fetchAction","actionId","rootContext","actionType","dataForAction","parsedContext","finalViews","uuidv4","ResponsiveReactGridLayout","WidthProvider","Responsive","DashboardGrid","onPositionItemsChanged","Children","child","parms","lg","md","sm","xs","xxs","DashboardGridItem","border","borderBottom","fontWeight","ExportOutlined","DashboardTree","limitRef","paramsRef","searchForTree","totalItemsResult","fetchActionData","overflowY","DashboardForm","firstId","setFirstId","itemsField","dashboardItems","setDashboardItems","setActionBarLoading","itemsFields","boardFields","openConfigDashboard","fetchView","originalItems","fetchDashboardItems","itemsWithActions","getItemsWithActions","dashboardItem","itemPositions","itemPosition","remotePosition","itemsToUpdateWithUpdatedPos","diff","diffItem","valueToUpdate","parmsParsed","childContent","formattedInitialView","MultiCheckboxInput","checkAll","uncheckAll","MarkdownInput","ReactMarkdown","direction","RadioAnt","SwitchInput","AntdSwitch","StepsInput","errorField","AntdSteps","Editor","editor","onDidBlurEditorWidget","Meta","relativeTime","Gravatar","email","gravatarUrl","md5","TextWithNewlines","textParts","part","Comment","fromNow","isAuthor","CommentsTimeline","isSender","Layout","Welcome","RootView","setActiveKey","setTabs","tabViewsCloseFunctions","contentRootProvider","retrieveAndOpenAction","currentIndex","tab","registerViewCloseFn","getActionData","action_id_string","addNewTab","newTabs","shortcut","actionString","canWeCloseFn","Tab","isActive","onSelected","bgColor","colorBgContainer","userSelect","TabSelector","TabContent","hiddenStyle","memo","CurrentTabContent","tabsToRender","FavouriteButton","onRetrieveShortcuts","onCheckIsFavourite","onAddFavourite","onRemoveFavourite","dropdownVisible","setDropdownVisible","shortcuts","setShortcuts","getShortcuts","Number","handleVisibleChange","flag","currentTab","editFavourites","FavouriteItem"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"react-ooui.es.js","sources":["../src/widgets/base/Label.tsx","../src/locales/ca_ES.tsx","../src/locales/en_US.tsx","../src/locales/es_ES.tsx","../src/context/LocaleContext.tsx","../src/common/Field.tsx","../src/ui/ConfirmDialog.tsx","../src/context/FormContext.tsx","../src/helpers/iconMapper.ts","../src/widgets/base/Button.tsx","../src/widgets/custom/ButtonGroup.tsx","../src/hooks/useWindowDimensions.ts","../src/ConnectionProvider.ts","../src/helpers/errorHelper.ts","../src/ui/ActionErrorDialog.tsx","../src/widgets/modals/TranslationModal.tsx","../src/common/ButtonWithTooltip.tsx","../src/ui/InfoDialog.tsx","../src/widgets/base/Char.tsx","../src/widgets/base/Selection.tsx","../src/widgets/base/Boolean.tsx","../src/helpers/filesHelper.ts","../src/widgets/base/Image.tsx","../src/widgets/custom/FiberGrid.tsx","../src/helpers/treeHelper.tsx","../src/helpers/one2manyHelper.ts","../src/widgets/custom/Timeline.tsx","../src/widgets/custom/Indicator.tsx","../src/helpers/formHelper.ts","../src/widgets/custom/Tag.tsx","../src/widgets/custom/Tags.tsx","../src/widgets/WidgetFactory.tsx","../src/helpers/containerHelper.ts","../src/widgets/containers/Container.tsx","../src/ui/UnsavedChangesDialog.tsx","../src/ui/FormErrorsDialog.tsx","../src/ui/WarningDialog.tsx","../src/context/FormModalContext.tsx","../src/helpers/searchHelper.ts","../src/hooks/useSearch.ts","../src/context/ActionViewContext.tsx","../src/context/TabManagerContext.tsx","../src/context/ContentRootContext.tsx","../src/ui/ErrorAlert.tsx","../src/widgets/views/Form.tsx","../src/widgets/modals/FormModal.tsx","../src/widgets/views/searchFilter/DateRangePicker.tsx","../src/common/TimePicker.tsx","../src/widgets/views/searchFilter/DateTimeRangePicker.tsx","../src/widgets/base/Float.tsx","../src/widgets/base/Integer.tsx","../src/widgets/views/searchFilter/PairFields.tsx","../src/widgets/base/MultiSelection.tsx","../src/widgets/views/searchFilter/SearchField.tsx","../src/widgets/views/searchFilter/SearchBottomBar.tsx","../src/widgets/views/searchFilter/SearchParams.tsx","../src/widgets/views/searchFilter/SearchFilter.tsx","../src/helpers/dynamicColumnsHelper.ts","../src/common/SelectAllRecordsRow.tsx","../src/helpers/timeHelper.ts","../src/widgets/base/ProgressBar.tsx","../src/widgets/base/many2one/Many2oneSuffixModal.tsx","../src/widgets/base/many2one/Many2oneSuffix.tsx","../src/widgets/base/many2one/Many2oneTree.tsx","../src/widgets/base/ReferenceTree.tsx","../src/helpers/dayjs.ts","../src/widgets/custom/Avatar.tsx","../src/common/DatePicker.tsx","../src/widgets/views/Tree/treeComponents.tsx","../src/widgets/views/Tree/Tree.tsx","../src/widgets/views/SearchTree.tsx","../src/widgets/modals/SearchModal.tsx","../src/ui/GenericErrorDialog.tsx","../src/widgets/base/many2one/Many2one.tsx","../src/context/One2manyContext.tsx","../src/widgets/views/Graph/GraphIndicator.tsx","../src/widgets/views/Graph/GraphDefaults.ts","../src/widgets/views/Graph/useGraphData.tsx","../src/widgets/views/Graph/GraphChart.tsx","../src/widgets/views/Graph/Graph.tsx","../src/ui/RemoveItemDialog.tsx","../src/ui/UnlinkItemDialog.tsx","../src/widgets/base/one2many/One2manyTopBar.tsx","../src/widgets/base/one2many/One2manyInput.tsx","../src/widgets/base/one2many/One2many.tsx","../src/widgets/base/FloatTime.tsx","../src/widgets/containers/Group.tsx","../src/widgets/containers/Notebook.tsx","../src/widgets/base/Text.tsx","../src/widgets/base/Separator.tsx","../src/hooks/useExport.ts","../src/widgets/modals/ExportModal.tsx","../src/widgets/base/Date.tsx","../src/widgets/base/DateTime.tsx","../src/widgets/base/Time.tsx","../src/widgets/base/Reference.tsx","../src/widgets/base/Binary.tsx","../src/actionbar/ChangeViewButton.tsx","../src/actionbar/DropdownButton.tsx","../src/actionbar/ActionButton.tsx","../src/actionbar/NewButton.tsx","../src/ui/RefreshItemDialog.tsx","../src/helpers/logInfoHelper.tsx","../src/actionbar/AttachmentsButtonWrapper.tsx","../src/actionbar/AttachmentsButton.tsx","../src/actionbar/FormActionBar.tsx","../src/widgets/base/LinkInput.tsx","../src/widgets/base/Url.tsx","../src/widgets/base/Email.tsx","../src/ui/GoToResourceModal.tsx","../src/actionbar/ButtonWithBadge.tsx","../src/actionbar/GraphActionBar.tsx","../src/ui/TitleHeader.tsx","../src/views/actionViews/GraphActionView.tsx","../src/views/actionViews/FormActionView.tsx","../src/actionbar/SearchBar.tsx","../src/context/ConfigContext.tsx","../src/actionbar/TreeActionBar.tsx","../src/views/actionViews/TreeActionView.tsx","../src/context/DashboardActionContext.tsx","../src/actionbar/DashboardActionBar.tsx","../src/views/actionViews/DashboardActionView.tsx","../src/helpers/viewHelper.ts","../src/views/ActionView.tsx","../src/widgets/views/Dashboard/dashboardHelper.ts","../src/widgets/views/DashboardGrid/DashboardGrid.tsx","../src/widgets/views/DashboardGrid/DashboardGridItem.tsx","../src/widgets/views/Dashboard/DashboardTree.tsx","../src/widgets/views/Dashboard/DashboardForm.tsx","../src/widgets/views/Dashboard/Dashboard.tsx","../src/widgets/custom/MultiCheckbox.tsx","../src/widgets/custom/Markdown.tsx","../src/widgets/custom/Radio.tsx","../src/widgets/custom/Switch.tsx","../src/widgets/custom/Steps.tsx","../src/widgets/custom/CodeEditor.tsx","../src/widgets/custom/Comments.tsx","../src/views/Welcome.tsx","../src/views/RootView.tsx","../src/views/tabs/Tab.tsx","../src/views/TabSelector.tsx","../src/views/TabContent.tsx","../src/views/CurrentTabContent.tsx","../src/ui/FavouriteButton.tsx"],"sourcesContent":["import React from \"react\";\nimport { Tooltip, Typography, theme } from \"antd\";\nimport { WidgetProps } from \"@/types\";\nimport { QuestionCircleOutlined } from \"@ant-design/icons\";\nimport { Label as LabelOoui } from \"@gisce/ooui\";\nimport { Interweave } from \"interweave\";\nconst { Text, Title } = Typography;\nconst { useToken } = theme;\n\ntype Props = WidgetProps & {\n align?: \"left\" | \"center\" | \"right\";\n responsiveBehaviour?: boolean;\n};\n\nconst alignClass = {\n left: \"justify-start\",\n center: \"justify-center\",\n right: \"justify-end\",\n};\n\nconst Label = (props: Props) => {\n const { ooui, align, responsiveBehaviour } = props;\n const { label, tooltip, fieldForLabel, labelSize, labelType } =\n ooui as LabelOoui;\n const addColon = fieldForLabel !== null;\n const labelText = addColon && label.length > 1 ? label + \" :\" : label;\n const responsiveAlign = responsiveBehaviour ? \"left\" : \"right\";\n const labelAlgin = align || (fieldForLabel ? responsiveAlign : \"left\");\n const { token } = useToken();\n\n const TextType = labelSize === undefined ? Text : Title;\n\n return (\n <div\n className={`flex flex-row items-center pb-1 pt-1 ${alignClass[labelAlgin]}`}\n >\n {tooltip && (\n <Tooltip title={tooltip}>\n <QuestionCircleOutlined\n className=\"pr-1 text-xs\"\n style={{\n color: token.colorPrimary,\n }}\n />\n </Tooltip>\n )}\n <span className=\"pr-2\">\n <TextType level={labelSize} type={labelType as any}>\n <Interweave content={labelText} />\n </TextType>\n </span>\n </div>\n );\n};\n\nexport default Label;\n","export default {\n true: \"Sí\",\n false: \"No\",\n simple_search: \"Búsqueda simple\",\n advanced_search: \"Búsqueda avançada\",\n search: \"Buscar\",\n parameters: \"Paràmetres\",\n limit: \"Limit\",\n first: \"Primer\",\n no_results: \"No hi ha resultats\",\n summary:\n \"Mostrant resultats des de {from} fins {to} d'un total de {total} registres\",\n welcome: \"Benvingut\",\n attachments: \"Adjunts\",\n addNewAttachment: \"Afegir nou adjunt\",\n listAllAttachments: \"Veure tots els adjunts\",\n viewAs: \"Veure com\",\n confirmRemoveItem: \"Estàs segur de volguer eliminar aquest item?\",\n save: \"Desar\",\n delete: \"Eliminar\",\n refresh: \"Refrescar\",\n previous: \"Anterior\",\n next: \"Següent\",\n actions: \"Accions\",\n reports: \"Informes\",\n related: \"Relacionat\",\n new: \"Nou\",\n fillRequiredField: \"Siusplau, omple aquest camp obligatori\",\n fillRequiredFields: \"Siusplau, omple tots els camps obligatoris\",\n generatingReport: \"Generant informe...\",\n confirmation: \"Confirmació\",\n ok: \"D'acord\",\n cancel: \"Cancel·lar\",\n formHasErrors: \"El formulari té errors\",\n unsavedChanges: \"Hi ha canvis sense guardar\",\n confirmRefreshWithoutSave:\n \"Estàs segur de volguer refrescar la pàgina sense guardar els canvis?\",\n discardAndRefresh: \"Descarta els canvis i refresca\",\n removeItems: \"Elimina el registre/s\",\n confirmRemove: \"Estàs segur de volguer eliminar els registre/s seleccionats?\",\n yesConfirmRemove: \"Sí, elimina\",\n unlinkItems: \"Desenllaça registre/s\",\n confirmUnlink:\n \"Estàs segur de volguer desenllaçar els registre/s seleccionats?\",\n yesConfirmUnlink: \"Sí, desenllaça\",\n confirmCloseWithoutSave:\n \"Estàs segur de volguer tancar aquesta finestra sense guardar?\",\n closeWithoutSaving: \"Tancar sense guardar\",\n action: \"Acció\",\n report: \"Informe\",\n selectAction: \"Selecciona una acció\",\n download: \"Descarrega\",\n clear: \"Neteja\",\n open: \"Obre\",\n uploadNewImage: \"Puja una nova imatge\",\n noCurrentEntries: \"No hi ha registres\",\n duplicate: \"Duplicar\",\n downloadingAttachment: \"Descarregant adjunt...\",\n tree: \"llista\",\n form: \"formulari\",\n favorites: \"Els meus favorits\",\n edit_favorites: \"Edita els favorits\",\n no_favorites: \"No tens favorits guardats\",\n register: \"Registre\",\n of: \"de\",\n editingDocument: \"Editant document\",\n showLogs: \"Veure logs\",\n createdBy: \"Creat per l'usuari\",\n creationDate: \"Data creació\",\n lastUpdatedBy: \"Última modificació per\",\n lastUpdatedDate: \"Data última modificació\",\n goToResourceId: \"Vés al recurs amb ID\",\n searchId: \"ID de cerca:\",\n searchIdHelp: \"Es pot utiltizar un ID o una llista d'IDs separats per comes\",\n idNotFound: \"No es troba aquesta id de recurs per l'objecte\",\n selectedRegisters: \"registres seleccionats\",\n translate: \"Traduïr\",\n enterTextBeforeTranslate:\n \"Introdueix algun text al camp abans d'afegir traduccions\",\n saveBeforeTranslate:\n \"Heu de desar el registre abans d'afegir les traduccions\",\n configDashboard: \"Configurar panell\",\n moveDashboard: \"Moure items del panell\",\n openAttachment: \"Veure detall de l'adjunt\",\n openAttachmentLink: \"Obrir enllaç de l'adjunt\",\n uninformed: \"Sense informar\",\n totalRegisters: \"Registres totals:\",\n export: \"Exportar\",\n selectAtLeastOneField: \"Selecciona almenys un camp per a l'exportació\",\n printScreen: \"Imprimir pantalla\",\n advancedExport: \"Exportació avançada\",\n savedRegisters: \"Registre guardat correctament\",\n errorWhileSavingForm: \"Error en guardar el formulari\",\n autor: \"Autor\",\n recordsSelected:\n \"Hi ha {numberOfSelectedRows} registres seleccionats en aquesta pàgina.\",\n selectAllRecords: \"Seleccionar tots els {totalRecords} registres.\",\n allRecordsSelected: \"Hi ha {totalRecords} registres seleccionats.\",\n};\n","export default {\n true: \"Yes\",\n false: \"No\",\n simple_search: \"Simple search\",\n advanced_search: \"Advanced search\",\n search: \"Search\",\n parameters: \"Parameters\",\n limit: \"Limit\",\n first: \"First\",\n no_results: \"No results\",\n summary: \"Showing registers from {from} to {to} of {total} registers\",\n welcome: \"Welcome\",\n attachments: \"Attachments\",\n addNewAttachment: \"Add new attachment\",\n listAllAttachments: \"View all the attachments\",\n viewAs: \"View as\",\n confirmRemoveItem: \"Are you sure to remove this item?\",\n save: \"Save\",\n delete: \"Delete\",\n refresh: \"Refresh\",\n previous: \"Previous\",\n next: \"Next\",\n actions: \"Actions\",\n reports: \"Reports\",\n related: \"Related\",\n new: \"New\",\n fillRequiredField: \"Please fill this required field\",\n fillRequiredFields: \"Please fill all the required fields\",\n generatingReport: \"Generating report...\",\n confirmation: \"Confirmation\",\n ok: \"OK\",\n cancel: \"Cancel\",\n formHasErrors: \"Form has errors\",\n unsavedChanges: \"There are unsaved changes\",\n confirmRefreshWithoutSave:\n \"Do you really want to refresh this window without saving?\",\n discardAndRefresh: \"Discard changes and refresh\",\n removeItems: \"Remove item/s\",\n confirmRemove: \"Are you sure you want to remove the selected item/s?\",\n yesConfirmRemove: \"Yes, remove\",\n unlinkItems: \"Unlink item/s\",\n confirmUnlink: \"Are you sure you want to unlink the selected item/s?\",\n yesConfirmUnlink: \"Yes, unlink\",\n confirmCloseWithoutSave:\n \"Do you really want to close this window without saving?\",\n closeWithoutSaving: \"Close without saving\",\n action: \"Action\",\n report: \"Report\",\n selectAction: \"Select an action\",\n download: \"Download\",\n clear: \"Clear\",\n open: \"Open\",\n uploadNewImage: \"Upload new image\",\n noCurrentEntries: \"No current entries\",\n duplicate: \"Duplicate\",\n downloadingAttachment: \"Downloading attachment...\",\n tree: \"list\",\n form: \"form\",\n favorites: \"My shortcuts\",\n edit_favorites: \"Edit shortcuts\",\n no_favorites: \"You don't have any shortcuts saved yet\",\n register: \"Register\",\n of: \"of\",\n editingDocument: \"Editing document\",\n showLogs: \"Show logs\",\n createdBy: \"Created by user\",\n creationDate: \"Creation date\",\n lastUpdatedBy: \"Last modified by\",\n lastUpdatedDate: \"Date of last modification\",\n goToResourceId: \"Go to resource ID\",\n searchId: \"Search ID:\",\n searchIdHelp: \"You can use an ID or a list of IDs separated by commas.\",\n idNotFound: \"Resource ID does not exist for this object!\",\n selectedRegisters: \"selected registers\",\n translate: \"Translate\",\n enterTextBeforeTranslate:\n \"Enter some text to the related field before adding translations\",\n saveBeforeTranslate: \"You must save the record before adding translations\",\n configDashboard: \"Setup dashboard\",\n moveDashboard: \"Move dashboard items\",\n openAttachment: \"Open attachment detail\",\n openAttachmentLink: \"Open attachment link\",\n uninformed: \"Uninformed\",\n totalRegisters: \"Total registers:\",\n export: \"Export\",\n selectAtLeastOneField: \"Select at least one field for the export\",\n printScreen: \"Print screen\",\n advancedExport: \"Advanced export\",\n savedRegisters: \"Record successfully saved\",\n errorWhileSavingForm: \"Error while saving form\",\n author: \"Author\",\n recordsSelected:\n \"Hi ha {numberOfSelectedRows} registres seleccionats en aquesta pàgina.\",\n selectAllRecords: \"Seleccionar tots els {totalRecords} registres.\",\n allRecordsSelected: \"Hi ha {totalRecords} registres seleccionats.\",\n};\n","export default {\n true: \"Sí\",\n false: \"No\",\n simple_search: \"Búsqueda simple\",\n advanced_search: \"Búsqueda avanzada\",\n search: \"Buscar\",\n parameters: \"Parametros\",\n limit: \"Límite\",\n first: \"Primero\",\n no_results: \"No hay resultados\",\n summary:\n \"Mostrando resultado desde {from} hasta {to} de un total de {total} registros\",\n welcome: \"Bienvenido\",\n attachments: \"Adjuntos\",\n addNewAttachment: \"Añadir nuevo adjunto\",\n listAllAttachments: \"Ver todos los adjuntos\",\n viewAs: \"Ver cómo\",\n confirmRemoveItem: \"Estás seguro de querer eliminar éste registro?\",\n save: \"Guardar\",\n delete: \"Eliminar\",\n refresh: \"Refrescar\",\n previous: \"Anterior\",\n next: \"Siguiente\",\n actions: \"Acciones\",\n reports: \"Informes\",\n related: \"Relacionado\",\n new: \"Nuevo\",\n fillRequiredField: \"Por favor, rellena éste campo obligatorio\",\n fillRequiredFields: \"Por favor, rellena todos los campos obligatorios\",\n generatingReport: \"Generando informe...\",\n confirmation: \"Confirmacióm\",\n ok: \"De acuerdo\",\n cancel: \"Cancelar\",\n formHasErrors: \"El formulario tiene errores\",\n unsavedChanges: \"Hay cambios sin guardar\",\n confirmRefreshWithoutSave:\n \"Estás seguro de querer refrescar la página sin guardar los cambios?\",\n discardAndRefresh: \"Descarta los cambios y refresca\",\n removeItems: \"Eliminar el registro/s\",\n confirmRemove:\n \"Estás seguro de querer eliminar los registro/s seleccionados?\",\n yesConfirmRemove: \"Sí, elimina\",\n unlinkItems: \"Desenlaza registro/s\",\n confirmUnlink:\n \"Estás seguro de querer desenlazar los registro/s seleccionados?\",\n yesConfirmUnlink: \"Sí, desenlaza\",\n confirmCloseWithoutSave:\n \"Estás seguro de querer cerrar ésta ventana sin cerrar?\",\n closeWithoutSaving: \"Cerrar sin guardar\",\n action: \"Acción\",\n report: \"Informe\",\n selectAction: \"Selecciona una acción\",\n download: \"Descarga\",\n clear: \"Limpiar\",\n open: \"Abrir\",\n uploadNewImage: \"Subir una nueva imágen\",\n noCurrentEntries: \"No hay registros\",\n duplicate: \"Duplicar\",\n downloadingAttachment: \"Descargando adjunto...\",\n tree: \"lista\",\n form: \"formulario\",\n favorites: \"Mis favoritos\",\n edit_favorites: \"Edita los favoritos\",\n no_favorites: \"No tienes favoritos guardados\",\n register: \"Registro\",\n of: \"de\",\n editingDocument: \"Editando documento\",\n showLogs: \"Ver logs\",\n createdBy: \"Creado por el usuario\",\n creationDate: \"Fecha creación\",\n lastUpdatedBy: \"Última modificación por\",\n lastUpdatedDate: \"Fecha última modificación\",\n goToResourceId: \"Ir al recurso con ID\",\n searchId: \"ID de búsqueda:\",\n searchIdHelp:\n \"Se puede utilizar un ID o una lista de IDs separados por comas\",\n idNotFound: \"No se encuentra ésta ID de recursos para el objeto\",\n selectedRegisters: \"registros seleccionados\",\n translate: \"Traducir\",\n enterTextBeforeTranslate:\n \"Introduce algun texto en el campo antes de añadir traducciones\",\n saveBeforeTranslate:\n \"Tienes que guardar el registro antes de añadir las traducciones\",\n configDashboard: \"Configurar panel\",\n moveDashboard: \"Mover items del panel\",\n openAttachment: \"Ver detalle del adjunto\",\n openAttachmentLink: \"Abrir enlace del adjunto\",\n uninformed: \"Sin informar\",\n totalRegisters: \"Registros totales:\",\n export: \"Exportar\",\n selectAtLeastOneField: \"Selecciona al menos un campo para la exportación\",\n printScreen: \"Imprimir pantalla\",\n advancedExport: \"Exportación avanzada\",\n savedRegisters: \"Registro guardado correctamente\",\n errorWhileSavingForm: \"Error al guardar el formulario\",\n author: \"Autor\",\n recordsSelected:\n \"Hay {numberOfSelectedRows} registros seleccionados en ésta página.\",\n selectAllRecords: \"Seleccionar todos los {totalRecords} registros.\",\n allRecordsSelected: \"Hay {totalRecords} registros seleccionados.\",\n};\n","import React from \"react\";\nimport ca_ES from \"@/locales/ca_ES\";\nimport en_US from \"@/locales/en_US\";\nimport es_ES from \"@/locales/es_ES\";\n\nconst localeStrings: any = {\n ca_ES,\n en_US,\n es_ES,\n};\n\nexport type LocaleContextType = {\n lang: string;\n t: (key: string) => string;\n};\n\nexport const LocaleContext = React.createContext<LocaleContextType | null>(\n null,\n);\n\ntype LocaleContextProps = {\n children: React.ReactNode;\n lang: string;\n};\n\nconst LocaleContextProvider = (props: LocaleContextProps): any => {\n const { children, lang } = props;\n\n function t(key: string): string {\n return tForLang(key, lang);\n }\n\n return (\n <LocaleContext.Provider\n value={{\n lang,\n t,\n }}\n >\n {children}\n </LocaleContext.Provider>\n );\n};\n\nexport const tForLang = (key: string, lang: string) => {\n const translated = localeStrings[lang]?.[key];\n return translated || key;\n};\n\nexport default LocaleContextProvider;\n","import React, { useContext } from \"react\";\nimport { Form, Row, Col } from \"antd\";\nimport { Field as FieldOoui, Label as LabelOoui } from \"@gisce/ooui\";\nimport Label from \"@/widgets/base/Label\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\nexport default function Field({\n ooui,\n children,\n layout = \"horizontal\",\n valuePropName,\n showLabel = false,\n alignLabel = \"left\",\n required = false,\n type,\n validator,\n}: {\n ooui: FieldOoui;\n children?: React.ReactNode;\n layout?: \"horizontal\" | \"vertical\";\n valuePropName?: string;\n showLabel?: boolean;\n alignLabel?: \"left\" | \"center\" | \"right\";\n required?: boolean;\n type?: any;\n validator?: any;\n}) {\n const { id, label, tooltip } = ooui;\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n const rules = required\n ? [\n {\n required: true,\n message: t(\"fillRequiredField\"),\n type,\n validator,\n },\n ]\n : undefined;\n\n const formItem = () => (\n <Form.Item\n className=\"mb-0\"\n name={id}\n valuePropName={valuePropName}\n rules={rules}\n help={ooui.tooltipInline ? ooui.tooltip : null}\n >\n {children}\n </Form.Item>\n );\n\n if (!showLabel) {\n return formItem();\n }\n\n const labelWidget = (\n <Label\n ooui={\n new LabelOoui({\n name: id + \"_label\",\n string: label,\n help: ooui.tooltipInline ? false : tooltip,\n fieldForLabel: id,\n })\n }\n align={alignLabel}\n />\n );\n\n const horizontalMode = () => {\n return (\n <Row align=\"middle\" className=\"pb-1 pt-1\">\n <Col className=\"ml-2\" flex=\"7rem\">\n <div className=\"flex flex-col items-end\">{labelWidget}</div>\n </Col>\n <Col flex=\"auto\">{formItem()}</Col>\n </Row>\n );\n };\n\n const verticalMode = () => {\n return (\n <>\n {labelWidget}\n {formItem()}\n </>\n );\n };\n\n return layout === \"horizontal\" ? horizontalMode() : verticalMode();\n}\n","import React from \"react\";\nimport { Modal } from \"antd\";\nimport { ExclamationCircleOutlined } from \"@ant-design/icons\";\nimport { tForLang } from \"@/context/LocaleContext\";\n\nconst { confirm } = Modal;\n\nconst showDialog = ({\n onOk,\n confirmMessage,\n lang,\n}: {\n onOk: () => void;\n confirmMessage: string;\n lang: string;\n}) => {\n confirm({\n title: tForLang(\"confirmation\", lang),\n icon: <ExclamationCircleOutlined />,\n centered: true,\n content: confirmMessage,\n okText: tForLang(\"ok\", lang),\n cancelText: tForLang(\"cancel\", lang),\n onOk,\n });\n};\n\nexport default showDialog;\n","import React, { useRef, useState } from \"react\";\n\nexport type FormContextType = {\n activeId?: number;\n activeModel: string;\n setFieldValue: (field: string, value?: string) => void;\n getFieldValue: (field: string) => string;\n executeButtonAction: ({\n type,\n action,\n context,\n }: {\n type: string;\n action: string;\n context?: any;\n }) => Promise<void>;\n getContext: () => Promise<any>;\n getValues: () => Promise<any>;\n getPlainValues: () => { [key: string]: any };\n getFields: () => Promise<any>;\n domain: any[];\n submitForm?: (options?: {\n callOnSubmitSucceed?: boolean;\n }) => Promise<{ succeed: boolean; id: number }>;\n fetchValues?: () => void;\n formHasChanges?: () => boolean;\n elementHasLostFocus?: () => void;\n};\n\nexport const FormContext = React.createContext<FormContextType | null>(null);\n\ntype FormProviderProps = FormContextType & {\n children: React.ReactNode;\n};\n\nconst FormProvider = (props: FormProviderProps): any => {\n const {\n children,\n activeId,\n activeModel,\n setFieldValue,\n getFieldValue,\n executeButtonAction,\n getContext,\n getValues,\n getPlainValues,\n domain,\n submitForm,\n fetchValues,\n formHasChanges,\n elementHasLostFocus,\n getFields,\n } = props;\n\n return (\n <FormContext.Provider\n value={{\n domain,\n getValues,\n getPlainValues,\n getFields,\n activeId,\n activeModel,\n setFieldValue,\n getFieldValue,\n executeButtonAction,\n getContext,\n submitForm,\n fetchValues,\n formHasChanges,\n elementHasLostFocus,\n }}\n >\n {children}\n </FormContext.Provider>\n );\n};\n\nexport default FormProvider;\n","import React, { CSSProperties } from \"react\";\nimport * as AntIcons from \"@ant-design/icons\";\nimport * as TablerIcons from \"@tabler/icons-react\";\nimport Icon from \"@ant-design/icons\";\n\ntype TablerKey = keyof typeof TablerIcons;\ntype AntKey = keyof typeof AntIcons;\n\nconst iconMapping: { [key: string]: string } = {\n \"terp-purchase\": \"ShoppingCart\",\n \"terp-graph\": \"PieChart\",\n \"terp-crm\": \"Contacts\",\n \"terp-hr\": \"Friends\",\n \"terp-account\": \"BuildingBank\",\n \"terp-project\": \"Checklist\",\n \"terp-administration\": \"Adjustments\",\n \"terp-partner\": \"Team\",\n \"terp-mrp\": \"Build\",\n \"terp-product\": \"Shopping\",\n STOCK_JUSTIFY_FILL: \"UnorderedList\",\n STOCK_INDENT: \"IndentIncrease\",\n STOCK_HELP: \"Question\",\n STOCK_GO_UP: \"ArrowUp\",\n STOCK_SORT_DESCENDING: \"SortDescending\",\n STOCK_ADD: \"Plus\",\n STOCK_GOTO_LAST: \"FastForward\",\n STOCK_FIND: \"Search\",\n STOCK_PROPERTIES: \"Control\",\n STOCK_DIALOG_INFO: \"Info\",\n STOCK_FLOPPY: \"Usb\",\n STOCK_JUSTIFY_CENTER: \"AlignCenter\",\n STOCK_GO_BACK: \"ArrowLeft\",\n STOCK_UNDERLINE: \"Underline\",\n STOCK_BOLD: \"Bold\",\n STOCK_APPLY: \"Check\",\n STOCK_ZOOM_OUT: \"ZoomOut\",\n STOCK_STRIKETHROUGH: \"Strikethrough\",\n STOCK_MEDIA_REWIND: \"Backward\",\n STOCK_PRINT: \"Printer\",\n STOCK_NO: \"Close\",\n STOCK_GOTO_FIRST: \"FastBackward\",\n STOCK_CLOSE: \"Close\",\n STOCK_REMOVE: \"Minus\",\n STOCK_CUT: \"Scissor\",\n STOCK_DIALOG_AUTHENTICATION: \"Safety\",\n STOCK_ZOOM_FIT: \"Expand\",\n STOCK_JUMP_TO: \"Select\",\n STOCK_HARDDISK: \"Hdd\",\n STOCK_SAVE_AS: \"Save\",\n STOCK_UNDO: \"Undo\",\n STOCK_JUSTIFY_RIGHT: \"AlignRight\",\n STOCK_DIALOG_ERROR: \"CloseCircle\",\n STOCK_INDEX: \"Profile\",\n STOCK_GOTO_BOTTOM: \"VerticalAlignBottom\",\n STOCK_MEDIA_NEXT: \"StepForward\",\n STOCK_REDO: \"Redo\",\n STOCK_COPY: \"Copy\",\n STOCK_MEDIA_PAUSE: \"Pause\",\n STOCK_GO_FORWARD: \"ArrowRight\",\n STOCK_UNDELETE: \"Undo\",\n STOCK_EXECUTE: \"Setting\",\n STOCK_SAVE: \"Save\",\n STOCK_DIALOG_QUESTION: \"QuestionCircle\",\n STOCK_SORT_ASCENDING: \"SortAscending\",\n STOCK_REFRESH: \"Reload\",\n STOCK_MEDIA_FORWARD: \"Forward\",\n STOCK_STOP: \"Border\",\n STOCK_PRINT_PREVIEW: \"Printer\",\n STOCK_HOME: \"Home\",\n STOCK_PASTE: \"CarryOut\",\n STOCK_ZOOM_100: \"ZoomIn\",\n STOCK_FIND_AND_REPLACE: \"FileSearch\",\n STOCK_DIALOG_WARNING: \"Warning\",\n STOCK_ZOOM_IN: \"ZoomIn\",\n STOCK_CONVERT: \"Export\",\n STOCK_ITALIC: \"Italic\",\n STOCK_YES: \"Check\",\n STOCK_MEDIA_PLAY: \"PlayCircle\",\n STOCK_MEDIA_RECORD: \"VideoCamera\",\n STOCK_MEDIA_PREVIOUS: \"StepBackward\",\n STOCK_NEW: \"FileAdd\",\n STOCK_CANCEL: \"Close\",\n STOCK_DISCONNECT: \"Api\",\n STOCK_JUSTIFY_LEFT: \"AlignLeft\",\n STOCK_FILE: \"File\",\n STOCK_QUIT: \"Logout\",\n STOCK_EDIT: \"Edit\",\n STOCK_CONNECT: \"Api\",\n STOCK_GO_DOWN: \"CaretDown\",\n STOCK_NETWORK: \"Apartment\",\n STOCK_OK: \"Check\",\n STOCK_GOTO_TOP: \"VerticalAlignTop\",\n STOCK_ABOUT: \"Star\",\n STOCK_COLOR_PICKER: \"Aim\",\n STOCK_SELECT_FONT: \"FontSize\",\n STOCK_DELETE: \"Delete\",\n STOCK_DND: \"FileText\",\n STOCK_CLEAR: \"CloseSquare\",\n STOCK_UNINDENT: \"AlignLeft\",\n STOCK_PREFERENCES: \"Setting\",\n};\n\nexport default (\n key: string,\n props?: { className?: any; style: CSSProperties },\n) => {\n if (key.indexOf(\"gtk-\") !== -1) {\n const rootIcon = key.replace(\"gtk-\", \"\").replace(/\\-/g, \"_\");\n key = `STOCK_${rootIcon.toUpperCase()}`;\n }\n\n if (iconMapping.hasOwnProperty(key)) {\n return getIconForKey(iconMapping[key], props);\n }\n\n return getIconForKey(key, props);\n};\n\nfunction toCamelCase(key: string): string {\n return `${key\n .split(\"-\")\n .map((word) =>\n word.replace(\n /\\w\\S*/g,\n (w) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase(),\n ),\n )\n .join(\"\")}`;\n}\n\nfunction getIconForKey(\n key: string,\n props?: { className?: any; style: CSSProperties },\n) {\n let IconCamelCase = key.charAt(0).toUpperCase() + key.slice(1); // Capitalize first letter\n if (IconCamelCase.indexOf(\"-\") !== -1) {\n IconCamelCase = toCamelCase(IconCamelCase);\n }\n\n const antKey: AntKey = `${IconCamelCase}Outlined` as any;\n if (AntIcons[antKey]) {\n return () =>\n React.createElement(AntIcons[antKey] as any, {\n ...props,\n });\n }\n\n const tablerKey: TablerKey = `Icon${IconCamelCase}` as any;\n if (TablerIcons[tablerKey]) {\n const TablerIcon = () =>\n React.createElement(TablerIcons[tablerKey] as any, {\n fill: \"transparent\",\n size: props?.style?.fontSize || 17,\n });\n const CustomIcon = () =>\n React.createElement(Icon, {\n component: TablerIcon,\n ...props,\n });\n return CustomIcon;\n }\n\n return undefined;\n}\n","import React, { useContext, useState } from \"react\";\nimport Field from \"@/common/Field\";\nimport { Button as AntButton } from \"antd\";\nimport { Button as ButtonOoui } from \"@gisce/ooui\";\nimport showConfirmDialog from \"@/ui/ConfirmDialog\";\nimport { FormContext, FormContextType } from \"@/context/FormContext\";\nimport { LoadingOutlined } from \"@ant-design/icons\";\nimport iconMapper from \"@/helpers/iconMapper\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\ntype Props = {\n ooui: ButtonOoui;\n};\n\nexport const Button = (props: Props) => {\n const { ooui } = props;\n const {\n id,\n label,\n activated,\n buttonType,\n confirmMessage,\n icon,\n context,\n readOnly,\n } = ooui;\n const formContext = useContext(FormContext) as FormContextType;\n const { executeButtonAction } = formContext || {};\n const [isRunning, setIsRunning] = useState<boolean>(false);\n const { lang } = useContext(LocaleContext) as LocaleContextType;\n\n async function onClick_confirm() {\n setIsRunning(true);\n await executeButtonAction({ type: buttonType, action: id, context });\n setIsRunning(false);\n }\n\n function onClick() {\n if (confirmMessage) {\n showConfirmDialog({\n confirmMessage,\n lang,\n onOk: () => {\n onClick_confirm();\n },\n });\n return;\n }\n\n onClick_confirm();\n }\n\n function getButtonIcon() {\n if (isRunning) return <LoadingOutlined />;\n if (icon) {\n const Icon: React.ElementType = iconMapper(icon) as any;\n return Icon && <Icon />;\n }\n return undefined;\n }\n\n return (\n <Field ooui={ooui}>\n <AntButton\n block\n disabled={!activated || readOnly || isRunning}\n onClick={onClick}\n icon={getButtonIcon()}\n type={ooui.primary ? \"primary\" : \"default\"}\n danger={ooui.danger}\n style={{ whiteSpace: \"normal\", height: \"auto\" }}\n >\n {label}\n </AntButton>\n </Field>\n );\n};\n","import React, { useContext, useState } from \"react\";\nimport Field from \"@/common/Field\";\nimport { DownOutlined, LoadingOutlined } from \"@ant-design/icons\";\nimport { Dropdown, Menu } from \"antd\";\nimport { Button } from \"@/widgets/base/Button\";\nimport {\n ButtonGroup as ButtonGroupOoui,\n Button as ButtonOoui,\n Field as FieldOoui,\n} from \"@gisce/ooui\";\nimport showConfirmDialog from \"@/ui/ConfirmDialog\";\nimport { FormContext, FormContextType } from \"@/context/FormContext\";\nimport iconMapper from \"@/helpers/iconMapper\";\nimport { WidgetProps } from \"@/types\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\ntype ButtonGroupProps = {\n ooui: ButtonGroupOoui;\n};\n\ntype ItemsProps = {\n ooui: ButtonOoui[];\n executeButtonAction: any;\n lang: string;\n};\n\nexport const ButtonGroup = (props: ButtonGroupProps) => {\n const { ooui } = props;\n const { defaultButton, secondaryButtons } = ooui;\n const {\n id,\n caption,\n activated,\n buttonType,\n confirmMessage,\n icon,\n primary,\n danger,\n context,\n readOnly,\n } = defaultButton || {};\n const formContext = useContext(FormContext) as FormContextType;\n const { executeButtonAction } = formContext || {};\n const [isRunning, setIsRunning] = useState<boolean>(false);\n const { lang } = useContext(LocaleContext) as LocaleContextType;\n\n function getButtonIcon() {\n if (isRunning) return <LoadingOutlined />;\n if (icon) {\n const Icon: React.ElementType = iconMapper(icon) as any;\n return Icon && <Icon />;\n }\n return undefined;\n }\n\n async function onClick_confirm() {\n if (buttonType && id) {\n setIsRunning(true);\n await executeButtonAction({ type: buttonType, action: id, context });\n setIsRunning(false);\n }\n }\n\n function onClick() {\n if (confirmMessage) {\n showConfirmDialog({\n confirmMessage,\n lang,\n onOk: () => {\n onClick_confirm();\n },\n });\n return;\n }\n\n onClick_confirm();\n }\n if (ooui.buttons.length === 0) {\n return null;\n } else if (ooui.buttons.length > 1) {\n return (\n <Field ooui={new FieldOoui({ ...{ ooui } })}>\n <Dropdown.Button\n disabled={!activated || readOnly}\n onClick={onClick}\n icon={<DownOutlined />}\n type={primary ? \"primary\" : undefined}\n // danger={danger ? true : undefined} This works but typescript\n // doesn't accept\n overlay={\n <Items\n ooui={secondaryButtons}\n executeButtonAction={executeButtonAction}\n lang={lang}\n />\n }\n >\n {getButtonIcon()}\n {caption}\n </Dropdown.Button>\n </Field>\n );\n } else if (defaultButton) {\n return <Button ooui={defaultButton} />;\n }\n};\n\nconst Items = (props: ItemsProps) => {\n const { ooui, executeButtonAction, lang } = props;\n if (!ooui) {\n return null;\n }\n const items = ooui.map((button) => {\n const {\n id,\n caption,\n activated,\n buttonType,\n confirmMessage,\n icon,\n context,\n readOnly,\n danger,\n } = button;\n const [isRunning, setIsRunning] = useState<boolean>(false);\n\n async function onClick_confirm() {\n setIsRunning(true);\n await executeButtonAction({ type: buttonType, action: id, context });\n setIsRunning(false);\n }\n\n function onClick() {\n if (confirmMessage) {\n showConfirmDialog({\n confirmMessage,\n lang,\n onOk: () => {\n onClick_confirm();\n },\n });\n return;\n }\n\n onClick_confirm();\n }\n\n function getButtonIcon() {\n if (isRunning) return <LoadingOutlined />;\n if (icon) {\n const Icon: React.ElementType = iconMapper(icon) as any;\n return Icon && <Icon />;\n }\n return undefined;\n }\n\n return (\n <Menu.Item\n disabled={!activated || readOnly}\n onClick={onClick}\n icon={getButtonIcon()}\n danger={danger}\n >\n {caption}\n </Menu.Item>\n );\n });\n return <Menu>{items}</Menu>;\n};\n","import { useState, useEffect } from \"react\";\n\nconst MODAL_WIDTH_CONSTANT = 0.7;\n\nfunction getWindowDimensions() {\n const { innerWidth: width, innerHeight: height } = window;\n return {\n width,\n height,\n };\n}\n\nexport default function useWindowDimensions() {\n const [windowDimensions, setWindowDimensions] = useState(\n getWindowDimensions(),\n );\n\n useEffect(() => {\n function handleResize() {\n setWindowDimensions(getWindowDimensions());\n }\n\n window.addEventListener(\"resize\", handleResize);\n return () => window.removeEventListener(\"resize\", handleResize);\n }, []);\n\n return {\n modalWidth: windowDimensions.width * MODAL_WIDTH_CONSTANT,\n modalHeight: windowDimensions.height,\n width: windowDimensions.width,\n height: windowDimensions.height,\n };\n}\n","import { ConnectionProviderType } from \"@/types\";\n\nexport default class ConnectionProvider {\n private static handler: ConnectionProviderType;\n\n public static init(handler: ConnectionProviderType): void {\n ConnectionProvider.handler = handler;\n }\n\n public static getHandler(): ConnectionProviderType {\n if (!ConnectionProvider.handler) {\n throw \"Must call init() first with a valid ConnectionProvider instance\";\n }\n return ConnectionProvider.handler;\n }\n}\n","export const parseError = (errorResponse: string) => {\n let message;\n let type;\n let title;\n\n if (\n typeof errorResponse === \"string\" &&\n errorResponse.indexOf(\" -- \") !== -1 &&\n errorResponse.indexOf(\"\\n\\n\") !== -1\n ) {\n const splitted = errorResponse.split(\"\\n\\n\");\n message = splitted[1].replace(/\\n/g, \"<br />\");\n const args = splitted[0].split(\" -- \");\n type = args[0];\n title = args[1];\n } else {\n message = errorResponse;\n type = \"error\";\n title = \"Error\";\n }\n\n return {\n type,\n message,\n title,\n };\n};\n","import React from \"react\";\nimport { Modal } from \"antd\";\nimport { ExclamationCircleOutlined, WarningOutlined } from \"@ant-design/icons\";\nimport { parseError } from \"@/helpers/errorHelper\";\n\nconst { error, warning } = Modal;\n\nconst showDialog = (err: string) => {\n const { message, type, title } = parseError(err);\n\n const iconComponent =\n type === \"error\" ? <ExclamationCircleOutlined /> : <WarningOutlined />;\n\n const modalType = type === \"error\" ? error : warning;\n\n modalType({\n title,\n icon: iconComponent,\n centered: true,\n content: message,\n });\n};\n\nexport default showDialog;\n","import React, { useContext, useEffect, useRef, useState } from \"react\";\nimport { Modal, Button, Divider, Row, Space, Spin, Col } from \"antd\";\nimport {\n CheckOutlined,\n CloseOutlined,\n LoadingOutlined,\n} from \"@ant-design/icons\";\nimport useWindowDimensions from \"@/hooks/useWindowDimensions\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport TextArea from \"antd/lib/input/TextArea\";\nimport showErrorDialog from \"@/ui/ActionErrorDialog\";\n\ntype TranslationModalProps = {\n visible: boolean;\n model: string;\n id: number;\n field: string;\n onCloseModal: () => void;\n onSubmitSucceed: () => void;\n};\n\ntype Lang = {\n code: string;\n name: string;\n};\n\ntype ValuesForLangs = {\n [key: string]: string;\n};\n\nexport const TranslationModal = (props: TranslationModalProps) => {\n const { visible, onCloseModal, model, id, field, onSubmitSucceed } = props;\n\n const { modalWidth } = useWindowDimensions();\n const { t } = useContext(LocaleContext) as LocaleContextType;\n const [langs, setLangs] = useState<Lang[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [submitLoading, setSubmitLoading] = useState(false);\n const [valuesForLangs, setValuesForLangs] = useState<ValuesForLangs>({});\n\n const originalValuesForLangs = useRef<ValuesForLangs>();\n\n useEffect(() => {\n if (visible) {\n fetchData();\n } else {\n setValuesForLangs({});\n }\n }, [visible]);\n\n async function fetchData() {\n setIsLoading(true);\n\n try {\n const langs = await getLangs();\n await getValuesForLangs(langs);\n } catch (err) {\n showErrorDialog(err as any);\n }\n\n setIsLoading(false);\n }\n\n async function getLangs() {\n const results: any[] = (await ConnectionProvider.getHandler().search({\n params: [[\"translatable\", \"=\", \"1\"]],\n fieldsToRetrieve: [\"code\", \"name\"],\n model: \"res.lang\",\n })) as any;\n\n const langs = results.map((item: any) => {\n return {\n code: item.code,\n name: item.name,\n };\n });\n\n setLangs?.(langs);\n return langs;\n }\n\n async function getValuesForLangs(langs: Lang[]) {\n const retrievedValuesForLang: ValuesForLangs = {};\n\n for (const lang of langs) {\n const retrievedValue = (\n await ConnectionProvider.getHandler().readObjects({\n model,\n ids: [id],\n fieldsToRetrieve: [field],\n context: { lang: lang.code },\n })\n )[0];\n retrievedValuesForLang[lang.code] = retrievedValue[field] || \"\";\n }\n\n originalValuesForLangs.current = retrievedValuesForLang;\n setValuesForLangs(retrievedValuesForLang);\n }\n\n function getInputsForLangs() {\n return langs.map((lang: Lang, i: number) => {\n return (\n <Row key={i} style={{ paddingBottom: 20 }}>\n <Col flex=\"8rem\" style={{ paddingRight: 10 }}>\n {lang.name}\n </Col>\n <Col flex=\"auto\">\n <TextArea\n rows={4}\n value={valuesForLangs[lang.code] || \"\"}\n onChange={(event: any) => {\n setValuesForLangs({\n ...valuesForLangs,\n [lang.code]: event.target.value,\n });\n }}\n disabled={submitLoading}\n />\n </Col>\n </Row>\n );\n });\n }\n\n async function onSubmit() {\n setSubmitLoading(true);\n\n try {\n for (const langCode of Object.keys(valuesForLangs)) {\n if (\n valuesForLangs[langCode] !== originalValuesForLangs.current![langCode]\n ) {\n await ConnectionProvider.getHandler().update({\n model,\n id,\n values: { [field]: valuesForLangs[langCode] },\n context: {\n lang: langCode,\n },\n fields: {},\n });\n }\n }\n } catch (err) {\n showErrorDialog(err as any);\n }\n\n setSubmitLoading(false);\n onSubmitSucceed();\n }\n\n function content() {\n if (isLoading) {\n return <Spin />;\n }\n\n return (\n <>\n {getInputsForLangs()}\n <Divider />\n <Row justify=\"end\">\n <Space>\n <Button\n icon={<CloseOutlined />}\n onClick={onCloseModal}\n disabled={submitLoading}\n >\n {t(\"cancel\")}\n </Button>\n <Button\n icon={submitLoading ? <LoadingOutlined /> : <CheckOutlined />}\n disabled={submitLoading}\n onClick={onSubmit}\n style={{ marginLeft: 15 }}\n type=\"primary\"\n >\n {t(\"ok\")}\n </Button>\n </Space>\n </Row>\n </>\n );\n }\n\n return (\n <Modal\n title={t(\"translate\")}\n centered\n width={modalWidth}\n open={visible}\n closable={true}\n onCancel={onCloseModal}\n footer={null}\n destroyOnClose\n maskClosable={false}\n >\n {content()}\n </Modal>\n );\n};\n","import React from \"react\";\nimport { Button, Tooltip, ButtonProps } from \"antd\";\n\nexport type Props = ButtonProps & {\n tooltip: string;\n};\n\nfunction ButtonWithTooltip(props: Props) {\n const { tooltip, ...restProps } = props;\n\n return (\n <Tooltip title={tooltip}>\n <Button {...restProps} />\n </Tooltip>\n );\n}\n\nexport default ButtonWithTooltip;\n","import { Modal } from \"antd\";\n\nconst { info } = Modal;\n\nconst showDialog = (content: any) => {\n info({\n title: \"\",\n centered: true,\n content,\n });\n};\n\nexport default showDialog;\n","import React, { CSSProperties, useContext, useState } from \"react\";\nimport { Col, Input, Row, theme } from \"antd\";\nimport Field from \"@/common/Field\";\nimport { Char as CharOoui } from \"@gisce/ooui\";\nimport { WidgetProps } from \"@/types\";\nimport { TranslationModal } from \"../modals/TranslationModal\";\nimport { FormContext, FormContextType } from \"@/context/FormContext\";\nimport ButtonWithTooltip from \"@/common/ButtonWithTooltip\";\nimport { TranslationOutlined } from \"@ant-design/icons\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport showInfo from \"@/ui/InfoDialog\";\nconst { useToken } = theme;\n\ntype CharProps = WidgetProps & {\n isSearchField?: boolean;\n};\n\nexport const Char = (props: CharProps) => {\n const { ooui, isSearchField = false } = props;\n const { id, readOnly, isPassword, required, translatable } = ooui as CharOoui;\n const { token } = useToken();\n const requiredStyle =\n required && !readOnly\n ? { backgroundColor: token.colorPrimaryBg }\n : undefined;\n const formContext = useContext(FormContext) as FormContextType;\n const { elementHasLostFocus } = formContext || {};\n\n let input = (\n <Input\n disabled={readOnly || (translatable && !isSearchField)}\n id={id}\n style={requiredStyle}\n maxLength={(ooui as CharOoui).size}\n onBlur={elementHasLostFocus}\n />\n );\n\n if (isPassword) {\n input = (\n <Input.Password\n disabled={readOnly}\n id={id}\n onBlur={elementHasLostFocus}\n />\n );\n }\n\n if (translatable && !readOnly && !isSearchField) {\n input = <TranslatableChar field={id} requiredStyle={requiredStyle} />;\n }\n\n return (\n <Field required={required} {...props}>\n {input}\n </Field>\n );\n};\n\nconst TranslatableChar = ({\n value,\n field,\n requiredStyle,\n onChange,\n}: {\n value?: string;\n field: string;\n requiredStyle: CSSProperties | undefined;\n onChange?: (value: string) => void;\n}) => {\n const formContext = useContext(FormContext) as FormContextType;\n const {\n activeId,\n activeModel,\n fetchValues,\n formHasChanges,\n elementHasLostFocus,\n } = formContext || {};\n const [translationModalVisible, setTranslationModalVisible] = useState(false);\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n if (!activeId) {\n return (\n <>\n <Row gutter={8} wrap={false}>\n <Col flex=\"auto\">\n <Input\n value={value}\n id={field}\n style={requiredStyle}\n onChange={(event: any) => {\n onChange?.(event.target.value);\n }}\n onBlur={elementHasLostFocus}\n />\n </Col>\n <Col flex=\"32px\">\n <ButtonWithTooltip\n tooltip={t(\"translate\")}\n icon={<TranslationOutlined />}\n onClick={async () => {\n if (formHasChanges?.()) {\n showInfo(t(\"saveBeforeTranslate\"));\n } else {\n showInfo(t(\"enterTextBeforeTranslate\"));\n }\n }}\n >\n {t(\"translate\")}\n </ButtonWithTooltip>\n </Col>\n </Row>\n </>\n );\n }\n\n return (\n <>\n <div\n onClick={() => {\n if (formHasChanges?.()) {\n showInfo(t(\"saveBeforeTranslate\"));\n return;\n }\n\n if (!translationModalVisible) {\n setTranslationModalVisible(true);\n }\n }}\n >\n <Input\n value={value}\n disabled={true}\n id={field}\n onChange={(event: any) => {\n onChange?.(event.target.value);\n }}\n onBlur={elementHasLostFocus}\n style={{ cursor: \"pointer\", pointerEvents: \"none\", ...requiredStyle }}\n />\n </div>\n <TranslationModal\n id={activeId!}\n model={activeModel}\n field={field}\n visible={translationModalVisible}\n onCloseModal={() => {\n setTranslationModalVisible(false);\n }}\n onSubmitSucceed={() => {\n setTranslationModalVisible(false);\n fetchValues?.();\n }}\n />\n </>\n );\n};\n","import React from \"react\";\nimport { Select, theme } from \"antd\";\nimport styled from \"styled-components\";\n\nimport Field from \"@/common/Field\";\nimport { Selection as SelectionOoui } from \"@gisce/ooui\";\nimport { WidgetProps } from \"@/types\";\n\nconst { defaultAlgorithm, defaultSeed } = theme;\n\nconst mapToken = defaultAlgorithm(defaultSeed);\n\nconst { Option } = Select;\n\nexport const Selection = (props: WidgetProps) => {\n const { ooui } = props;\n const { required } = ooui;\n\n return (\n <Field required={required} type={\"any\"} {...props}>\n <SelectionInput {...props} />\n </Field>\n );\n};\n\ntype SelectionInputProps = WidgetProps & {\n onChange?: (value: any) => void;\n value?: string;\n};\n\nexport const SelectionInput = (props: SelectionInputProps) => {\n const { ooui, onChange, value } = props;\n const { selectionValues, readOnly, required } = ooui as SelectionOoui;\n\n const values = Array.from(selectionValues.entries());\n\n const options =\n values &&\n values.length &&\n values.map((entry: string[]) => {\n const [key, value] = entry;\n return (\n <Option key={key} value={key}>\n {value}\n </Option>\n );\n });\n\n const CustomSelect: any = required && !readOnly ? RequiredSelect : Select;\n\n return (\n <CustomSelect\n disabled={readOnly}\n onChange={onChange}\n value={value}\n optionFilterProp=\"children\"\n filterOption={(input: string, option: any) =>\n option.children.toLowerCase().indexOf(input.toLowerCase()) >= 0\n }\n showSearch\n >\n {options}\n </CustomSelect>\n );\n};\n\nconst RequiredSelect = styled(Select)`\n &.ant-select:not(.ant-select-customize-input) .ant-select-selector {\n background-color: ${mapToken.colorPrimaryBg};\n }\n`;\n","import React from \"react\";\nimport { Checkbox as AntCheckbox, theme } from \"antd\";\nimport styled from \"styled-components\";\n\nimport Field from \"@/common/Field\";\nimport { WidgetProps } from \"@/types\";\n\nconst { defaultAlgorithm, defaultSeed } = theme;\n\nconst mapToken = defaultAlgorithm(defaultSeed);\n\nexport const Boolean = (props: WidgetProps) => {\n const { ooui } = props;\n const { id, readOnly, required } = ooui;\n\n return (\n <Field {...props} valuePropName=\"checked\">\n <BooleanInput id={id} readOnly={readOnly} required={required} />\n </Field>\n );\n};\n\nconst BooleanInput = (props: any) => {\n const { required, readOnly, ...restProps } = props;\n\n const CustomCheckbox: any =\n required && !readOnly ? RequiredCheckbox : AntCheckbox;\n\n return (\n <div className=\"flex flex-row\">\n <CustomCheckbox disabled={readOnly} {...restProps} />\n </div>\n );\n};\n\nconst RequiredCheckbox = styled(AntCheckbox)`\n .ant-checkbox-inner {\n background-color: ${mapToken.colorPrimaryBg};\n }\n\n .ant-checkbox-checked .ant-checkbox-inner {\n background-color: ${mapToken.colorPrimary};\n }\n`;\n","import { fileTypeFromBuffer } from \"file-type-buffer-browser\";\n\nexport function getFilesize(base64string: string) {\n const buffer = Buffer.from(base64string, \"base64\");\n const inKbs = buffer.length / 1e3;\n return `${Math.round((inKbs + Number.EPSILON) * 100) / 100} KB`;\n}\n\nexport async function getMimeType(base64string: string) {\n const mimeInfo = await fileTypeFromBuffer(\n Buffer.from(base64string, \"base64\"),\n );\n if (!mimeInfo) {\n return {\n mime: \"text/plain\",\n ext: \"txt\",\n };\n }\n\n return mimeInfo;\n}\n\nexport const toBase64 = (file: File): Promise<string> =>\n new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = (e: any) => resolve(e.target.result.split(\",\")[1]);\n reader.onerror = (error) => reject(error);\n });\n\nexport function openBase64InNewTab(data: string, mimeType: string) {\n const byteCharacters = atob(data);\n const byteNumbers = new Array(byteCharacters.length);\n for (let i = 0; i < byteCharacters.length; i++) {\n byteNumbers[i] = byteCharacters.charCodeAt(i);\n }\n const byteArray = new Uint8Array(byteNumbers);\n const file = new Blob([byteArray], { type: mimeType + \";base64\" });\n const fileURL = URL.createObjectURL(file);\n window.open(fileURL);\n}\n","import React, { useContext, useRef } from \"react\";\nimport { Row, Space } from \"antd\";\nimport Field from \"@/common/Field\";\nimport { Image as ImageOoui } from \"@gisce/ooui\";\nimport ButtonWithTooltip from \"@/common/ButtonWithTooltip\";\nimport {\n FolderOpenOutlined,\n DownloadOutlined,\n ClearOutlined,\n} from \"@ant-design/icons\";\n\nimport { toBase64, getMimeType } from \"@/helpers/filesHelper\";\nimport iconMapper from \"@/helpers/iconMapper\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\ntype Props = {\n ooui: ImageOoui;\n};\n\nexport const Image = (props: Props) => {\n const { ooui } = props;\n const { required, id } = ooui;\n\n const Icon: React.ElementType = iconMapper(id) as any;\n\n if (Icon) {\n return <Icon />;\n }\n\n return (\n <Field required={required} {...props}>\n <ImageInput ooui={ooui} />\n </Field>\n );\n};\n\ninterface ImageInputProps {\n ooui: ImageOoui;\n value?: string;\n onChange?: (value: string | undefined) => void;\n}\n\nexport const ImageInput = (props: ImageInputProps) => {\n const { ooui, value, onChange } = props;\n const { readOnly } = ooui as ImageOoui;\n const inputFile = useRef(null);\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n const triggerChange = (changedValue?: string) => {\n onChange?.(changedValue);\n };\n\n async function downloadFile() {\n const fileType = await getMimeType(value!);\n const linkSource = `data:${fileType?.mime};base64,${value}`;\n const downloadLink = document.createElement(\"a\");\n\n downloadLink.href = linkSource;\n downloadLink.download = `image.${fileType?.ext}`;\n downloadLink.click();\n }\n\n async function onChangeFile(event: any) {\n event.stopPropagation();\n event.preventDefault();\n const file = event.target.files[0];\n const b64: string = await toBase64(file);\n triggerChange(b64);\n }\n\n function clearFile() {\n triggerChange(undefined);\n }\n\n return (\n <>\n <Row gutter={8} wrap={false} justify=\"center\">\n {value && (\n <img\n src={`data:image/*;base64,${value}`}\n style={{ maxWidth: \"100px\" }}\n />\n )}\n <input\n type=\"file\"\n id=\"file\"\n ref={inputFile}\n accept=\"image/*\"\n style={{ display: \"none\" }}\n onChange={onChangeFile}\n />\n </Row>\n <Row gutter={8} wrap={false} justify=\"center\" className=\"pt-5\">\n <Space>\n <ButtonWithTooltip\n tooltip={t(\"uploadNewImage\")}\n icon={<FolderOpenOutlined />}\n disabled={readOnly}\n onClick={() => {\n const fileUploadField = inputFile.current as any;\n fileUploadField.click();\n }}\n />\n <ButtonWithTooltip\n tooltip={t(\"download\")}\n disabled={!value}\n onClick={downloadFile}\n icon={<DownloadOutlined />}\n />\n <ButtonWithTooltip\n tooltip={t(\"clear\")}\n disabled={readOnly || !value}\n onClick={clearFile}\n icon={<ClearOutlined />}\n />\n </Space>\n </Row>\n </>\n );\n};\n","import React from \"react\";\nimport Field from \"@/common/Field\";\nimport { Char as CharOoui } from \"@gisce/ooui\";\nimport { WidgetProps } from \"@/types\";\nimport { GridUi } from \"@gisce/fiber-diagram\";\n\nexport const FiberGrid = (props: WidgetProps) => {\n const { ooui } = props;\n const { required } = ooui as CharOoui;\n\n return (\n <Field required={required} {...props}>\n <FiberGridInput />\n </Field>\n );\n};\n\ninterface FiberGridInputProps {\n value?: string;\n onChange?: (value: string) => void;\n}\n\nexport const FiberGridInput = (props: FiberGridInputProps) => {\n const { value, onChange } = props;\n\n if (!value) {\n return null;\n }\n\n // Validate string json\n try {\n JSON.parse(value);\n } catch (e) {\n console.log(e);\n return null;\n }\n\n return (\n <GridUi\n inputJson={value}\n onChange={(newValue) => {\n if (onChange) {\n onChange(newValue);\n }\n }}\n />\n );\n};\n","import {\n Tree as TreeOoui,\n Selection,\n Many2one,\n Boolean,\n Reference,\n} from \"@gisce/ooui\";\nimport { TreeView, Column } from \"@/types\";\n\nconst getTree = (treeView: TreeView): TreeOoui => {\n const xml = treeView.arch;\n const fields = treeView.fields;\n const tree = new TreeOoui(fields);\n tree.parse(xml);\n return tree;\n};\n\nfunction canRenderValue(value: any): boolean {\n return (\n typeof value === \"number\" ||\n typeof value === \"string\" ||\n typeof value === \"boolean\" ||\n value === null ||\n value === undefined\n );\n}\n\nconst getTableColumns = (\n tree: TreeOoui,\n components: any,\n context: any,\n): Column[] => {\n const tableColumns = tree.columns.map((column) => {\n const type = column.type;\n const key = column.id;\n const component = components?.[type];\n let render;\n\n if (component) {\n render = (value: any) => {\n return component({ value, key, ooui: column, context });\n };\n } else {\n render = (value: any) => {\n return canRenderValue(value) ? (\n value\n ) : (\n <p style={{ color: \"red\" }}>\n Unsupported widget type for a Tree cell:\n <pre>\n <strong>{type}:</strong>\n </pre>\n </p>\n );\n };\n }\n\n return {\n key,\n dataIndex: key,\n title: column.label,\n render,\n sorter: (a: any, b: any) => {\n let aItem = a[key] || \"\";\n let bItem = b[key] || \"\";\n\n if (type === \"many2one\") {\n aItem = a[key]?.value || \"\";\n bItem = b[key]?.value || \"\";\n }\n\n if (aItem < bItem) return -1;\n if (aItem > bItem) return 1;\n return 0;\n },\n };\n });\n return tableColumns;\n};\n\nconst getTableItems = (treeOoui: TreeOoui, results: any[]): any[] => {\n const tableItems = results.map((item: any) => {\n const parsedItem: any = {};\n Object.keys(item).forEach((key) => {\n if (key === \"id\") {\n parsedItem[key] = item[key];\n } else {\n const widget = treeOoui.findById(key);\n\n if (widget instanceof Reference) {\n parsedItem[key] = item[key];\n } else if (widget instanceof Selection) {\n parsedItem[key] = item[key];\n } else if (widget instanceof Many2one) {\n parsedItem[key] = item[key] &&\n Array.isArray(item[key]) &&\n item[key].length === 2 && {\n model: widget.relation,\n id: item[key][0],\n value: item[key][1],\n };\n } else if (widget instanceof Boolean) {\n parsedItem[key] = item[key];\n } else if (widget) {\n parsedItem[key] = item[key] === false ? \"\" : item[key];\n } else {\n parsedItem[key] = item[key];\n }\n }\n });\n return parsedItem;\n });\n\n return tableItems;\n};\n\nfunction itemHasBooleans({ values, fields }: { values: any; fields: any }) {\n if (!fields) {\n return false;\n }\n return Object.keys(values).some((key) => {\n return fields[key] !== undefined && fields[key].type === \"boolean\";\n });\n}\n\nfunction convertBooleansToNumeric({\n values,\n fields,\n}: {\n values: any;\n fields: any;\n}) {\n if (!fields) {\n return values;\n }\n const filteredValues: any = {};\n Object.keys(values).forEach((key) => {\n if (fields[key] !== undefined && fields[key].type === \"boolean\") {\n filteredValues[key] = values[key] === true ? 1 : 0;\n }\n });\n return { ...values, ...filteredValues };\n}\n\nfunction getColorMap(colorsValue: any) {\n return getItemsAttributes(colorsValue, \"colors\");\n}\n\nfunction getStatusMap(values: any) {\n return getItemsAttributes(values, \"status\");\n}\n\nfunction getItemsAttributes(attributes: object[], attribute: string) {\n if (!attributes) {\n return undefined;\n }\n const map: any = {};\n attributes.forEach((entry: any) => {\n map[entry.id] = entry[attribute];\n });\n return map;\n}\n\nfunction sortResults({\n resultsToSort,\n sorter,\n fields,\n}: {\n resultsToSort: any[];\n sorter: any;\n fields: any;\n}) {\n if (!sorter) {\n return resultsToSort;\n }\n\n const { id: field, desc } = sorter;\n const order = desc === false ? \"ascend\" : \"descend\";\n\n const type = fields[field].type;\n\n const sortFn = (a: any, b: any) => {\n let aItem = a[field] || \"\";\n let bItem = b[field] || \"\";\n\n if (type === \"many2one\") {\n aItem = a[field]?.[1] || \"\";\n bItem = b[field]?.[1] || \"\";\n }\n\n if (aItem === bItem) {\n return 0;\n }\n\n if (order === \"ascend\") {\n return aItem > bItem ? 1 : -1;\n }\n\n return aItem < bItem ? 1 : -1;\n };\n\n return resultsToSort.sort(sortFn);\n}\n\nfunction hasActualValues(obj: Record<string, any>): boolean {\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n if (obj[key] !== undefined) {\n return true;\n }\n }\n }\n return false;\n}\n\nexport {\n getTableColumns,\n getTableItems,\n getTree,\n convertBooleansToNumeric,\n itemHasBooleans,\n getColorMap,\n getStatusMap,\n sortResults,\n hasActualValues,\n};\n","import { One2manyItem } from \"@/widgets/base/one2many/One2manyInput\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport { TreeView, View, ViewType } from \"@/types\";\nimport { getColorMap, getTree } from \"./treeHelper\";\n\ntype ReadObjectValuesOptions = {\n items: One2manyItem[];\n model: string;\n context?: any;\n currentView: ViewType;\n formView: {\n fields: any;\n };\n treeView: {\n arch?: string;\n fields: any;\n };\n};\n\nconst readObjectValues = async (\n options: ReadObjectValuesOptions,\n): Promise<[One2manyItem[], any]> => {\n const {\n items,\n model,\n formView,\n treeView,\n context,\n currentView = {},\n } = options;\n\n const temporalItems: One2manyItem = items.filter(\n (item) => item.operation !== \"original\",\n );\n\n // We get a number array of id's\n const idsToFetch = items\n .filter((item) => item.operation === \"original\")\n .map((item) => item.id) as number[];\n\n const fieldsToRetrieve: { [key: string]: any } = {\n form: formView.fields,\n tree: treeView.fields,\n };\n\n let values = [];\n let evaluatedColorsForTree;\n\n if (currentView === \"tree\" && treeView?.arch) {\n const colors = getTree(treeView as TreeView)?.colors;\n const results = await ConnectionProvider.getHandler().readEvalUiObjects({\n model,\n ids: idsToFetch,\n arch: treeView?.arch!,\n fields: treeView!.fields,\n context,\n attrs: colors && {\n colors,\n },\n });\n values = results[0];\n evaluatedColorsForTree = getColorMap(results[1]);\n } else {\n values = await ConnectionProvider.getHandler().readObjects({\n model,\n ids: idsToFetch,\n fields: fieldsToRetrieve[currentView as string],\n context,\n });\n }\n\n const filteredValues = values.map((result: any) => {\n const resultFormValues: any = {};\n Object.keys(result).forEach((key) => {\n if (\n fieldsToRetrieve[currentView as string].hasOwnProperty(key) ||\n key === \"id\"\n ) {\n resultFormValues[key] = result[key];\n }\n });\n return resultFormValues;\n });\n\n // We fill the values property of the One2manyItem with the retrieved values from the API\n const originalItemsWithFetchedValues: One2manyItem[] = items.map((item) => {\n const fetchedItemValues = filteredValues.find(\n (itemValues: any) => itemValues.id === item.id,\n );\n\n const itemWithFetchedValues = {\n ...item,\n };\n\n if (currentView === \"form\") {\n itemWithFetchedValues[\"values\"] = fetchedItemValues;\n } else if (currentView === \"tree\") {\n itemWithFetchedValues[\"treeValues\"] = fetchedItemValues;\n }\n return itemWithFetchedValues;\n });\n\n return [\n originalItemsWithFetchedValues.concat(temporalItems),\n evaluatedColorsForTree,\n ];\n};\n\ntype RemoveItemOptions = {\n model: string;\n activeId: number;\n fieldName: string;\n idsToRemove: number[];\n fields: any;\n isMany2many: boolean;\n};\n\nconst removeItems = async (options: RemoveItemOptions) => {\n const { model, activeId, fieldName, idsToRemove, fields, isMany2many } =\n options;\n\n const values: any = {};\n values[fieldName] = [];\n\n for (const idToRemove of idsToRemove) {\n values[fieldName].push([isMany2many ? 3 : 2, idToRemove]);\n }\n\n await ConnectionProvider.getHandler().update({\n model,\n id: activeId,\n values,\n fields,\n });\n};\n\ntype LinkItemOptions = {\n model: string;\n activeId: number;\n fieldName: string;\n id: number;\n fields: any;\n};\n\nconst linkItem = async (options: LinkItemOptions) => {\n const { model, activeId, fieldName, id, fields } = options;\n\n const values: any = {};\n values[fieldName] = [[4, id]];\n\n await ConnectionProvider.getHandler().update({\n model,\n id: activeId,\n values,\n fields,\n });\n};\n\nconst getNextPendingId = (items: One2manyItem[]) => {\n const negativeIds: number[] = items\n .filter((item) => item.id && item.id < 0)\n .map((item) => item.id!);\n if (negativeIds.length === 0) {\n return -1;\n } else {\n return Math.min(...negativeIds) - 1;\n }\n};\n\nconst convertToPlain2ManyValues = (values: any, fields: any) => {\n const result: any = {};\n Object.keys(values).forEach((key) => {\n if (\n fields.hasOwnProperty(key) &&\n (fields[key].type === \"one2many\" || fields[key].type === \"many2many\") &&\n values[key] &&\n values[key]?.items\n ) {\n result[key] = values[key].items.filter(\n (item: One2manyItem) => item.operation !== \"pendingRemove\",\n );\n } else {\n result[key] = values[key];\n }\n });\n return result;\n};\nexport {\n readObjectValues,\n removeItems,\n linkItem,\n getNextPendingId,\n convertToPlain2ManyValues,\n};\n","import React, { useContext, useState } from \"react\";\nimport { Timeline as TimelineOoui } from \"@gisce/ooui\";\nimport Field from \"@/common/Field\";\nimport { One2manyItem, One2manyValue } from \"../base/one2many/One2manyInput\";\nimport useDeepCompareEffect from \"use-deep-compare-effect\";\nimport { Views, ViewType } from \"@/types\";\nimport { FormContext, FormContextType } from \"@/context/FormContext\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport { Spin, Alert, Timeline as AntTimeline } from \"antd\";\nimport { readObjectValues } from \"@/helpers/one2manyHelper\";\nimport { FormModal } from \"../modals/FormModal\";\n\ntype TimelineProps = {\n ooui: TimelineOoui;\n};\n\ntype TimelineInputProps = TimelineProps & {\n value?: One2manyValue;\n onChange?: (value: One2manyValue) => void;\n views: Views;\n};\n\nexport const Timeline = (props: TimelineProps) => {\n const { ooui } = props;\n const { relation, context, views: oouiViews } = ooui;\n const [isLoading, setIsLoading] = useState<boolean>(true);\n const [error, setError] = useState<string>();\n const [views, setViews] = useState<Views>(new Map<string, any>());\n const formContext = useContext(FormContext) as FormContextType;\n const { getContext } = formContext || {};\n\n useDeepCompareEffect(() => {\n fetchData();\n }, [ooui]);\n\n const getViewData = async (type: ViewType) => {\n if (oouiViews && oouiViews[type]) {\n return oouiViews[type];\n }\n return await ConnectionProvider.getHandler().getView({\n model: relation,\n type,\n context: { ...getContext?.(), ...context },\n });\n };\n\n const fetchData = async () => {\n setIsLoading(true);\n setError(undefined);\n\n try {\n const formView = await getViewData(\"form\");\n const treeView = await getViewData(\"tree\");\n views.set(\"form\", formView);\n views.set(\"tree\", treeView);\n setViews(views);\n } catch (err) {\n setError(err as any);\n } finally {\n setIsLoading(false);\n }\n };\n\n if (isLoading) {\n return <Spin />;\n }\n\n if (error) {\n return <Alert className=\"mt-10\" message={error} type=\"error\" banner />;\n }\n\n return (\n <Field type={\"array\"} {...props}>\n <TimelineInput ooui={ooui} views={views} />\n </Field>\n );\n};\n\nexport const TimelineInput = (props: TimelineInputProps) => {\n const { value, views, ooui, onChange } = props;\n const { items = [] } = value || {};\n\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [error, setError] = useState<string>();\n const [showFormModal, setShowFormModal] = useState<boolean>(false);\n const [modalItem, setModalItem] = useState<One2manyItem>();\n const { relation, context, readOnly, summaryField, titleField } = ooui;\n const itemsToShow = items.filter((item) => item.values);\n\n const formContext = useContext(FormContext) as FormContextType;\n const { getContext } = formContext || {};\n\n useDeepCompareEffect(() => {\n fetchData();\n }, [items]);\n\n const triggerChange = (changedValue: One2manyItem[]) => {\n onChange?.({\n items: changedValue,\n });\n };\n\n async function fetchData() {\n setIsLoading(true);\n setError(undefined);\n\n try {\n const [itemsWithValues] = await readObjectValues({\n treeView: {\n fields: views.get(\"tree\").fields,\n arch: views.get(\"tree\").arch,\n },\n formView: {\n fields: views.get(\"form\").fields,\n },\n model: relation,\n items,\n context: { ...getContext?.(), ...context },\n currentView: \"form\",\n });\n\n triggerChange(itemsWithValues);\n } catch (err) {\n setError(err as any);\n } finally {\n setIsLoading(false);\n }\n }\n\n if (error) {\n return <Alert className=\"mt-10\" message={error} type=\"error\" banner />;\n }\n\n if (isLoading) {\n return <Spin />;\n }\n\n return (\n <>\n <AntTimeline style={{ padding: \"1rem\" }}>\n {itemsToShow.map((item, index) => {\n return (\n <div key={index}>\n <AntTimeline.Item key={index}>\n <div\n style={{ display: \"inline-block\", cursor: \"pointer\" }}\n onClick={() => {\n setModalItem(\n itemsToShow.find(\n (searchItem) => item.id === searchItem.id,\n ),\n );\n setShowFormModal(true);\n }}\n >\n <strong>{item.values?.[titleField]}</strong>\n </div>\n <br />\n <div\n style={{ display: \"inline-block\", cursor: \"pointer\" }}\n onClick={() => {\n setModalItem(\n itemsToShow.find(\n (searchItem) => item.id === searchItem.id,\n ),\n );\n setShowFormModal(true);\n }}\n >\n {item.values?.[summaryField]}\n </div>\n </AntTimeline.Item>\n </div>\n );\n })}\n </AntTimeline>\n <FormModal\n formView={views.get(\"form\")}\n model={relation}\n id={modalItem?.id}\n values={modalItem?.values}\n defaultValues={modalItem?.defaultValues}\n visible={showFormModal}\n onSubmitSucceed={() => {\n setShowFormModal(false);\n }}\n parentContext={{ ...getContext?.(), ...context }}\n onCancel={() => {\n setShowFormModal(false);\n }}\n readOnly={readOnly}\n postSaveAction={fetchData}\n />\n </>\n );\n};\n","import React from \"react\";\nimport { Tooltip, theme, Statistic, Card } from \"antd\";\nimport { Indicator as IndicatorOoui } from \"@gisce/ooui\";\nimport { WidgetProps } from \"@/types\";\nimport Field from \"@/common/Field\";\nimport { QuestionCircleOutlined } from \"@ant-design/icons\";\nimport iconMapper from \"@/helpers/iconMapper\";\nconst { useToken } = theme;\n\ntype IndicatorProps = WidgetProps & {\n ooui: IndicatorOoui;\n value?: number;\n};\n\nexport const Indicator = (props: IndicatorProps) => {\n const { ooui } = props;\n\n return (\n <Field ooui={ooui}>\n <IndicatorInput ooui={ooui} />\n </Field>\n );\n};\n\ntype IndicatorInputProps = {\n ooui: IndicatorOoui;\n value?: any;\n};\n\nconst IndicatorInput = (props: IndicatorInputProps) => {\n const { token } = useToken();\n const { ooui, value } = props;\n const title = (\n <>\n <span>{ooui.label} </span>\n {ooui.tooltip && (\n <Tooltip title={ooui.tooltip}>\n <QuestionCircleOutlined\n className=\"pr-1 text-xs\"\n style={{ color: token.colorPrimaryBg }}\n />\n </Tooltip>\n )}\n </>\n );\n const Icon: React.ElementType = iconMapper(ooui.icon) as any;\n let formattedValue = value;\n if (ooui.selectionValues.size) {\n formattedValue = ooui.selectionValues.get(value);\n } else if (Array.isArray(value)) {\n formattedValue = value[1];\n }\n const field = (\n <Statistic\n title={title}\n prefix={Icon && <Icon />}\n suffix={ooui.suffix}\n value={formattedValue}\n />\n );\n if (ooui.card) {\n return <Card>{field}</Card>;\n } else {\n return field;\n }\n};\n","import { One2manyItem } from \"@/widgets/base/one2many/One2manyInput\";\nimport { Form as FormOoui } from \"@gisce/ooui\";\n\nconst filteredValues = (values: any, fields: any) => {\n if (!fields) {\n return values;\n }\n const filteredValues: any = {};\n Object.keys(values).forEach((key) => {\n if (fields[key] === undefined) {\n // console.log(`${key} is not in fields`);\n filteredValues[key] = values[key];\n } else if (values[key] === false && fields[key].type !== \"boolean\") {\n // Do nothing - filter the field.\n } else if (fields[key].type === \"boolean\") {\n const boolValue = values[key];\n if (boolValue === 0) {\n filteredValues[key] = false;\n } else if (boolValue === 1) {\n filteredValues[key] = true;\n } else {\n filteredValues[key] = values[key];\n }\n } else {\n filteredValues[key] = values[key];\n }\n });\n return filteredValues;\n};\n\nexport const processValues = (values: any, fields: any) => {\n const filterBooleans = filteredValues(values, fields);\n return filterBooleans;\n};\n\nexport const getTouchedValues = ({\n source,\n target,\n fields,\n}: {\n source: any;\n target: any;\n fields: any;\n}) => {\n const differences: any = {};\n Object.keys(target).forEach((key) => {\n const is2Many = fields[key]\n ? fields[key].type === \"one2many\" || fields[key].type === \"many2many\"\n : false;\n\n if (is2Many) {\n const sourceValue = JSON.stringify(source[key]);\n const targetValue = JSON.stringify(target[key]);\n if (sourceValue === targetValue) {\n return;\n }\n\n const nonOriginalItems =\n target[key]?.items?.filter(\n (item: One2manyItem) => item.operation !== \"original\",\n ) || [];\n\n if (nonOriginalItems.length > 0) {\n differences[key] = target[key];\n }\n } else if (Array.isArray(target[key])) {\n if (source[key] === undefined) {\n differences[key] = target[key];\n } else if (fields[key].type === \"many2one\") {\n if (!Array.isArray(source[key])) {\n // This will mean the source many2one value is a numeric id\n const numericId = source[key];\n const [targetNumericId] = target[key];\n if (numericId !== targetNumericId) {\n differences[key] = target[key];\n }\n } else {\n const sourceValue = JSON.stringify(source[key]);\n const targetValue = JSON.stringify(target[key]);\n if (sourceValue !== targetValue) {\n differences[key] = target[key];\n }\n }\n } else {\n const sourceValue = JSON.stringify(source[key]);\n const targetValue = JSON.stringify(target[key]);\n if (sourceValue !== targetValue) {\n differences[key] = target[key];\n }\n }\n } else if (source[key] !== target[key]) {\n if (target[key] === undefined) {\n differences[key] = null;\n } else {\n differences[key] = target[key];\n }\n }\n });\n return differences;\n};\n\nexport const checkFieldsType = ({\n changedFields,\n formOoui,\n types,\n}: {\n changedFields: string[];\n formOoui: FormOoui;\n types: string[];\n}) => {\n const valuesChecked = changedFields.map((key) => {\n const fieldType = formOoui?.findById(key)?.type!;\n return types.includes(fieldType);\n });\n return valuesChecked.some((i) => i === true);\n};\n\nexport const mergeFieldsDomain = ({\n fieldsDomain,\n fields,\n}: {\n fieldsDomain: any;\n fields: any;\n}) => {\n const output: any = {};\n\n Object.keys(fields).forEach((key) => {\n output[key] = fields[key];\n\n if (fieldsDomain[key]) {\n output[key].domain = fieldsDomain[key];\n }\n });\n\n return output;\n};\n\nexport const getValuesForDomain = (domain: any[]) => {\n const values: any = {};\n\n if (!domain || !Array.isArray(domain) || domain?.length === 0) {\n return {};\n }\n\n domain.forEach((entry) => {\n if (entry?.[1] === \"=\") {\n values[entry[0]] = entry[2];\n }\n });\n\n return values;\n};\n\nexport const getOnChangePayload = ({\n onChangeFieldActionArgs,\n values,\n parentValues = {},\n}: {\n onChangeFieldActionArgs: any[];\n values: any;\n parentValues?: any;\n}) => {\n const payload: any = {};\n onChangeFieldActionArgs.forEach((arg: string) => {\n const splittedArg = arg.split(\"\");\n\n if (arg === \"True\") {\n payload[arg] = true;\n } else if (arg === \"False\") {\n payload[arg] = false;\n } else if (values[arg]) {\n payload[arg] = values[arg];\n } else if (\n splittedArg[0] === \"'\" &&\n splittedArg[splittedArg.length - 1] === \"'\" &&\n splittedArg.filter((i: string) => i === \"'\").length === 2\n ) {\n payload[arg] = arg.replace(/'/g, \"\");\n } else if (splittedArg.includes(\"'\")) {\n // This is a string with a variable in it.\n // TODO: pending implement.\n payload[arg] = arg;\n } else if (arg.indexOf(\"parent.\") !== -1) {\n const parentKey = arg.replace(\"parent.\", \"\");\n payload[arg] = parentValues[parentKey] || false;\n } else {\n payload[arg] = false;\n }\n });\n return payload;\n};\n\nexport const mergeSearchFields = (searchFields: any[]) => {\n const mergedSearchFields = {\n primary: [],\n secondary: [],\n };\n\n searchFields.forEach((sf) => {\n if (!sf) {\n return;\n }\n\n mergedSearchFields.primary = mergedSearchFields.primary.concat(sf.primary);\n mergedSearchFields.secondary = mergedSearchFields.secondary.concat(\n sf.secondary,\n );\n });\n\n return {\n primary: mergedSearchFields.primary.filter(onlyUnique),\n secondary: mergedSearchFields.secondary.filter(onlyUnique),\n };\n};\n\nfunction onlyUnique(value: any, index: number, self: any) {\n return self.indexOf(value) === index;\n}\n\nexport const transformPlainMany2Ones = ({\n values,\n fields,\n}: {\n values: any;\n fields: any;\n}) => {\n const reformattedValues: { [key: string]: any } = {};\n\n Object.keys(values).forEach((key) => {\n const value = values[key];\n\n if (\n fields[key] &&\n fields[key].type === \"many2one\" &&\n value &&\n Array.isArray(value) &&\n value.length === 2\n ) {\n reformattedValues[key] = value[0];\n } else {\n reformattedValues[key] = value;\n }\n });\n\n return reformattedValues;\n};\n\nexport const colorFromString = (text: string) => {\n let hash = 0;\n text = text.toString().padEnd(10, \"0\");\n for (let i = 0; i < text.length; i++) {\n hash = text.charCodeAt(i) + ((hash << 5) - hash);\n }\n let hexColour = \"#\";\n for (let i = 0; i < 3; i++) {\n const value = (hash >> (i * 8)) & 0xff;\n hexColour += (\"00\" + value.toString(16)).slice(-2);\n }\n return hexColour;\n};\n\nexport const colorTextFromBackground = (color: string) => {\n function getRGB(c: string): number {\n return parseInt(c, 16) || parseInt(c);\n }\n\n function getsRGB(c: string) {\n return getRGB(c) / 255 <= 0.03928\n ? getRGB(c) / 255 / 12.92\n : Math.pow((getRGB(c) / 255 + 0.055) / 1.055, 2.4);\n }\n\n function getLuminance(hexColor: string) {\n return (\n 0.2126 * getsRGB(hexColor.substr(1, 2)) +\n 0.7152 * getsRGB(hexColor.substr(3, 2)) +\n 0.0722 * getsRGB(hexColor.substr(-2))\n );\n }\n\n function getContrast(f: string, b: string) {\n const L1 = getLuminance(f);\n const L2 = getLuminance(b);\n return (Math.max(L1, L2) + 0.05) / (Math.min(L1, L2) + 0.05);\n }\n\n function getTextColor(bgColor: string) {\n const whiteContrast = getContrast(bgColor, \"#ffffff\");\n const blackContrast = getContrast(bgColor, \"#000000\");\n\n return whiteContrast > blackContrast ? \"#ffffff\" : \"#000000\";\n }\n\n return getTextColor(color);\n};\n\nexport const stringFormat = (text: string, values: any): string => {\n return text.replace(/\\{([^}]+)\\}/g, (match, key) =>\n values[key] !== undefined ? values[key] : match,\n );\n};\n","import React from \"react\";\nimport Field from \"@/common/Field\";\nimport { WidgetProps } from \"@/types\";\nimport { Tag as AntdTag, TagProps } from \"antd\";\nimport { isPresetStatusColor, isPresetColor } from \"antd/lib/_util/colors\";\nimport { colorFromString } from \"@/helpers/formHelper\";\n\nexport const Tag = (props: WidgetProps) => {\n return (\n <Field {...props}>\n <TagInput {...props} />\n </Field>\n );\n};\n\nexport const TagInput = (props: any) => {\n const { ooui, value } = props;\n let formattedValue = value;\n let colorValue = value;\n if (ooui.selectionValues.size) {\n formattedValue = ooui.selectionValues.get(value);\n } else if (Array.isArray(value)) {\n colorValue = value[0];\n formattedValue = value[1];\n }\n if (!value) {\n return null;\n }\n const color =\n ooui.colors === \"auto\"\n ? colorFromString(colorValue)\n : ooui.colors[colorValue] || colorFromString(colorValue);\n return <CustomTag color={color}>{formattedValue}</CustomTag>;\n};\n\nexport const CustomTag = (props: TagProps) => {\n let { color } = props;\n let style = {};\n if (!isPresetStatusColor(props.color) && !isPresetColor(props.color)) {\n style = {\n color,\n borderColor: color,\n borderStyle: \"solid\",\n borderWidth: \"1px\",\n };\n color = `${color}20`;\n }\n return (\n <AntdTag {...props} style={style} color={color}>\n {props.children}\n </AntdTag>\n );\n};\n","import React, { useContext, useState } from \"react\";\nimport { Tags as TagsOoui } from \"@gisce/ooui\";\nimport Field from \"@/common/Field\";\nimport { WidgetProps } from \"@/types\";\nimport { One2manyItem, One2manyValue } from \"../base/one2many/One2manyInput\";\nimport useDeepCompareEffect from \"use-deep-compare-effect\";\nimport { FormContext, FormContextType } from \"@/context/FormContext\";\nimport { Alert, Select } from \"antd\";\nimport { colorFromString, transformPlainMany2Ones } from \"@/helpers/formHelper\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport { CustomTag } from \"@/widgets/custom/Tag\";\n\ntype TagsProps = WidgetProps & {\n ooui: TagsOoui;\n};\n\ntype TagsInputProps = TagsProps & {\n value?: One2manyValue;\n onChange?: (value: One2manyValue) => void;\n};\n\nexport const Tags = (props: TagsProps) => {\n const { ooui } = props;\n\n return (\n <Field type={\"array\"} {...props}>\n <TagsInput ooui={ooui} />\n </Field>\n );\n};\n\nexport const TagsInput = (props: TagsInputProps) => {\n const { value, ooui, onChange } = props;\n const { items = [] } = value || {};\n const itemsToShow = items\n .filter((item) => item.operation !== \"pendingRemove\")\n .map((item) => item.id) as number[];\n\n const [options, setOptions] = useState<any[]>([]);\n const [error, setError] = useState<string>();\n const [isLoadingOptions, setIsLoadingOptions] = useState<boolean>(false);\n const { relation, context, readOnly, field } = ooui;\n\n const formContext = useContext(FormContext) as FormContextType;\n const { getContext } = formContext || {};\n\n useDeepCompareEffect(() => {\n fetchOptions();\n }, [items]);\n\n const triggerChange = (changedValue: One2manyItem[]) => {\n onChange?.({\n items: changedValue,\n });\n };\n\n async function fetchOptions() {\n setIsLoadingOptions(true);\n let params: any[] = [];\n try {\n if (readOnly) {\n params = [[\"id\", \"in\", itemsToShow]];\n }\n if (ooui.domain) {\n const evaluatedDomain =\n await ConnectionProvider.getHandler().evalDomain({\n domain: ooui.domain,\n values: transformPlainMany2Ones({\n fields: formContext?.getFields(),\n values: formContext.getPlainValues(),\n }),\n fields: formContext?.getFields(),\n context: formContext.getContext(),\n });\n params = [...params, ...evaluatedDomain];\n }\n\n const optionsRead = await ConnectionProvider.getHandler().search({\n model: relation,\n params,\n fieldsToRetrieve: [field],\n context: { ...getContext?.(), ...context },\n });\n const options = optionsRead.map((item: any) => {\n const value = item[field];\n let formattedValue = value;\n if (Array.isArray(value)) {\n formattedValue = value[1];\n }\n return { label: formattedValue, value: item.id };\n });\n setOptions(options);\n } catch (err) {\n setError(err as any);\n } finally {\n setIsLoadingOptions(false);\n }\n }\n\n const onChangeSelected = (ids: number[]) => {\n const newItems: One2manyItem[] = items.map((item) => {\n if (ids.includes(item.id as number)) {\n if (item.operation == \"pendingRemove\") {\n return {\n ...item,\n operation: \"pendingLink\",\n };\n } else {\n return item;\n }\n } else {\n return { id: item.id, operation: \"pendingRemove\" };\n }\n });\n const currentIds = newItems.map((item) => item.id);\n ids\n .filter((id) => !currentIds.includes(id))\n .map((id) => {\n newItems.push({ id, operation: \"pendingLink\" });\n });\n triggerChange(newItems);\n };\n\n const tagRender = (props: any) => {\n const { label, closable, onClose } = props;\n const onPreventMouseDown = (event: React.MouseEvent<HTMLSpanElement>) => {\n event.preventDefault();\n event.stopPropagation();\n };\n const color = colorFromString(label);\n return (\n <CustomTag\n color={color}\n onMouseDown={onPreventMouseDown}\n closable={closable}\n onClose={onClose}\n closeIcon={<span style={{ color }}>X</span>}\n >\n {label}\n </CustomTag>\n );\n };\n\n if (error) {\n return <Alert className=\"mt-10\" message={error} type=\"error\" banner />;\n }\n\n return (\n <>\n <div className=\"flex flex-row\">\n <Select\n mode=\"multiple\"\n value={options.length ? itemsToShow : []}\n tagRender={tagRender}\n bordered={!readOnly}\n disabled={readOnly}\n options={options}\n onChange={onChangeSelected}\n loading={isLoadingOptions}\n ></Select>\n </div>\n </>\n );\n};\n","import React from \"react\";\n\nimport {\n Notebook,\n Group,\n Label,\n Char,\n Text,\n Button,\n ButtonGroup,\n Selection,\n Many2one,\n Boolean,\n Integer,\n Float,\n Date,\n DateTime,\n Time,\n One2many,\n Separator,\n Form,\n Tree,\n Reference,\n Binary,\n Url,\n Email,\n FloatTime,\n ProgressBar,\n MultiCheckbox,\n Markdown,\n Radio,\n Switch,\n Steps,\n Tag,\n CodeEditor,\n CommentsTimelineField,\n} from \"@/index\";\nimport { Image } from \"./base/Image\";\nimport { FiberGrid } from \"./custom/FiberGrid\";\nimport { Timeline } from \"./custom/Timeline\";\nimport { Indicator } from \"./custom/Indicator\";\nimport { Tags } from \"./custom/Tags\";\n\nconst getWidgetType = (type: string) => {\n switch (type) {\n case \"form\":\n return Form;\n case \"tree\":\n return Tree;\n case \"notebook\":\n return Notebook;\n case \"group\":\n return Group;\n case \"label\":\n return Label;\n case \"char\":\n return Char;\n case \"text\":\n return Text;\n case \"button\":\n return Button;\n case \"buttonGroup\":\n return ButtonGroup;\n case \"selection\":\n return Selection;\n case \"many2one\":\n return Many2one;\n case \"boolean\":\n return Boolean;\n case \"integer\":\n return Integer;\n case \"float\":\n return Float;\n case \"progressbar\":\n return ProgressBar;\n case \"date\":\n return Date;\n case \"datetime\":\n return DateTime;\n case \"time\":\n return Time;\n case \"one2many\":\n case \"one2many_list\":\n case \"many2many\":\n return One2many;\n case \"separator\":\n return Separator;\n case \"reference\":\n return Reference;\n case \"binary\":\n return Binary;\n case \"image\":\n return Image;\n case \"url\":\n return Url;\n case \"email\":\n return Email;\n case \"float_time\":\n return FloatTime;\n case \"fiber_grid\":\n return FiberGrid;\n case \"timeline\":\n return Timeline;\n case \"indicator\":\n return Indicator;\n case \"tags\":\n return Tags;\n case \"tag\":\n return Tag;\n case \"multicheckbox\":\n return MultiCheckbox;\n case \"markdown\":\n return Markdown;\n case \"radio\":\n return Radio;\n case \"switch\":\n return Switch;\n case \"steps\":\n return Steps;\n case \"codeeditor\":\n return CodeEditor;\n case \"comments_timeline\":\n return CommentsTimelineField;\n default:\n return undefined;\n }\n};\n\nconst createReactWidget = (props: any) => {\n const { ooui } = props;\n const { type }: { type: string } = ooui;\n\n const widgetClass: any = getWidgetType(type);\n\n if (!widgetClass) {\n return null;\n }\n\n return React.createElement(widgetClass, props);\n};\n\nexport { createReactWidget };\n","import { Widget, Label, Field, Container } from \"@gisce/ooui\";\n\nconst getSpanStyleForItem = ({\n item,\n responsiveBehaviour,\n}: {\n item: Widget;\n responsiveBehaviour: boolean;\n}) => {\n return {\n gridColumnStart: \"span \" + (responsiveBehaviour ? 1 : item.colspan),\n };\n};\n\nconst fillRowWithEmptiesToFit = ({\n row,\n mustFillWithEmpties,\n numberOfColumns,\n}: {\n row: any;\n mustFillWithEmpties: boolean;\n numberOfColumns: number;\n}) => {\n const rowWithEmptiesToFit: any = [];\n let totalColSpan = 0;\n\n const isLastItemAndMustFit = (columnIndex: number) => {\n return (\n columnIndex + 1 === row.length &&\n totalColSpan < numberOfColumns &&\n !mustFillWithEmpties\n );\n };\n\n row.map((item: Widget, columnIndex: number) => {\n totalColSpan += item.colspan;\n\n if (isLastItemAndMustFit(columnIndex)) {\n const gapsToAdjust = numberOfColumns - totalColSpan;\n item.colspan = item.colspan + gapsToAdjust;\n totalColSpan += gapsToAdjust;\n }\n\n rowWithEmptiesToFit.push(item);\n\n if (isLastItemAndMustFit(columnIndex)) {\n const gapsToFill = numberOfColumns - totalColSpan;\n for (let i = 0; i < gapsToFill; i += 1) {\n rowWithEmptiesToFit.push(new Label({ string: \"\" }));\n }\n }\n });\n\n return rowWithEmptiesToFit;\n};\n\nconst expandWidgetsIfNeeded = ({\n row,\n numberOfColumns,\n}: {\n row: any;\n numberOfColumns: number;\n}) => {\n return row.map((item: Widget) => {\n if ((item as any)._mustExpand) {\n (item as any).colspan = numberOfColumns;\n return item;\n }\n return item;\n });\n};\n\nconst getSingleRowTemplateColumns = (\n row: Widget[],\n numberOfColumns: number,\n) => {\n const gridOptions = row.map((item: Widget) => {\n if (item instanceof Label && (item as Label).fieldForLabel) {\n return \"auto\";\n }\n if (item instanceof Container) {\n return \"auto\";\n }\n return \"1fr\";\n });\n\n if (gridOptions.length < numberOfColumns) {\n const columnsToAdd = numberOfColumns - gridOptions.length;\n for (let i = 0; i < columnsToAdd; i++) {\n gridOptions.push(\"1fr\");\n }\n }\n return gridOptions.join(\" \");\n};\n\nconst getTemplateColumns = (columns: number, fieldInRows: boolean) => {\n // We check if we have any label+field inside (fieldInRows) the container.\n // In this scenario, we must format the grid accordingly\n // Otherwise, the grid will divide uniformly (auto)\n const odd = fieldInRows ? \"1fr\" : \"auto\";\n const even = \"auto\";\n let templateColumns = \"\";\n for (let i = 0; i < columns; i++) {\n templateColumns += i % 2 ? odd : even;\n if (i + 1 < columns) {\n templateColumns += \" \";\n }\n }\n return templateColumns;\n};\n\nconst getMaxColspanForRows = (rows: Widget[][]) => {\n const maxColspan = rows.map((row: Widget[]) => {\n return row.reduce((prev, current) => {\n return prev + current.colspan;\n }, 0);\n });\n return maxColspan.reduce((a, b) => {\n return Math.max(a, b);\n });\n};\n\nconst rowsHaveAnyField = (rows: Widget[][]) => {\n let found = false;\n\n rows.map((row: Widget[]) => {\n row.map((item: Widget) => {\n if (item instanceof Field) {\n found = true;\n }\n });\n });\n\n return found;\n};\n\nexport {\n fillRowWithEmptiesToFit,\n getSpanStyleForItem,\n expandWidgetsIfNeeded,\n getMaxColspanForRows,\n rowsHaveAnyField,\n getSingleRowTemplateColumns,\n getTemplateColumns,\n};\n","import React from \"react\";\nimport { Container as ContainerOoui, Widget, Label } from \"@gisce/ooui\";\nimport { createReactWidget } from \"@/widgets/WidgetFactory\";\n\nimport {\n getTemplateColumns,\n fillRowWithEmptiesToFit,\n getSpanStyleForItem,\n expandWidgetsIfNeeded,\n getMaxColspanForRows,\n getSingleRowTemplateColumns,\n} from \"@/helpers/containerHelper\";\n\ntype Props = {\n container: ContainerOoui;\n responsiveBehaviour: boolean;\n};\n\nconst Container = (props: Props): React.ReactElement => {\n const { container, responsiveBehaviour } = props;\n const { rows } = container;\n let { columns } = container;\n\n // We check for the largest colspan for each row\n // And if the value is smaller than the columns value\n // We adjust the columns value\n const maxColspanForRows = getMaxColspanForRows(rows);\n if (maxColspanForRows < columns) {\n columns = maxColspanForRows;\n }\n\n let fieldInRows = false;\n let firstRow: Widget[] = [];\n\n const content = rows.map((row: Widget[], i) => {\n const rowWithoutInvisibleFields = row.filter((widget) => {\n return !widget.invisible;\n });\n\n const rowWithExpandedItems = expandWidgetsIfNeeded({\n row: rowWithoutInvisibleFields,\n numberOfColumns: columns,\n });\n\n let rowWithEmptiesToFit = rowWithExpandedItems;\n if (\n i === 0 ||\n !(row.length === 1 && row.some((widget) => widget.type === \"group\"))\n ) {\n rowWithEmptiesToFit = fillRowWithEmptiesToFit({\n row: rowWithExpandedItems,\n numberOfColumns: columns,\n mustFillWithEmpties: responsiveBehaviour,\n });\n\n firstRow = firstRow.concat(rowWithEmptiesToFit);\n }\n\n return rowWithEmptiesToFit.map((item: Widget) => {\n // We check if we have any label+field inside the container.\n // In this scenario, we must format the grid accordingly\n // Otherwise, the grid will divide uniformly\n if (item instanceof Label && (item as Label).fieldForLabel) {\n fieldInRows = true;\n }\n\n return (\n <div\n key={item.key}\n style={{\n ...getSpanStyleForItem({ item, responsiveBehaviour }),\n minWidth: 0,\n }}\n >\n {createReactWidget({\n ooui: item,\n responsiveBehaviour,\n })}\n </div>\n );\n });\n });\n\n const templateColumns =\n rows.length === 1\n ? getSingleRowTemplateColumns(firstRow, columns)\n : getTemplateColumns(columns, fieldInRows);\n const gridStyle = {\n display: \"grid\",\n gridTemplateColumns: responsiveBehaviour ? \"auto\" : templateColumns,\n gap: \"1rem\",\n minHeight: 0,\n minWidth: 0,\n };\n\n return <div style={gridStyle}>{content}</div>;\n};\n\nexport default Container;\n","import React from \"react\";\nimport { Modal } from \"antd\";\nimport { ExclamationCircleOutlined } from \"@ant-design/icons\";\nimport { tForLang } from \"@/context/LocaleContext\";\n\nconst { confirm } = Modal;\n\nconst showDialog = ({\n onOk,\n onCancel,\n lang,\n}: {\n onOk: () => void;\n onCancel?: () => void;\n lang: string;\n}) => {\n confirm({\n title: tForLang(\"unsavedChanges\", lang),\n icon: <ExclamationCircleOutlined />,\n centered: true,\n content: tForLang(\"confirmCloseWithoutSave\", lang),\n okText: tForLang(\"closeWithoutSaving\", lang),\n onOk,\n onCancel,\n cancelText: tForLang(\"cancel\", lang),\n });\n};\n\nexport default showDialog;\n","import React from \"react\";\nimport { Modal } from \"antd\";\nimport { ExclamationCircleOutlined } from \"@ant-design/icons\";\nimport { tForLang } from \"@/context/LocaleContext\";\n\nconst { error } = Modal;\n\nconst showDialog = (lang: string) => {\n error({\n title: tForLang(\"formHasErrors\", lang),\n icon: <ExclamationCircleOutlined />,\n centered: true,\n content: tForLang(\"fillRequiredFields\", lang),\n });\n};\n\nexport default showDialog;\n","import React from \"react\";\nimport { Modal } from \"antd\";\nimport { WarningOutlined } from \"@ant-design/icons\";\n\nconst { warning } = Modal;\n\nconst showDialog = (title: string, message: string, onOk?: () => void) => {\n warning({\n title,\n icon: <WarningOutlined />,\n centered: true,\n content: message,\n onOk,\n });\n};\n\nexport default showDialog;\n","import React from \"react\";\n\nexport type FormModalContextType = {\n setTitle?: (title: string) => void;\n};\n\nexport const FormModalContext =\n React.createContext<FormModalContextType | null>(null);\n\ntype FormModalProviderProps = FormModalContextType & {\n children: React.ReactNode;\n};\n\nconst FormModalProvider = (props: FormModalProviderProps): any => {\n const { children, setTitle } = props;\n\n return (\n <FormModalContext.Provider\n value={{\n setTitle,\n }}\n >\n {children}\n </FormModalContext.Provider>\n );\n};\n\nexport default FormModalProvider;\n","const convertBooleanParamIfNeeded = (value: any) => {\n if ((typeof value === \"string\" && value === \"true\") || value === \"false\") {\n return value === \"true\";\n }\n return value;\n};\n\nexport const getParamsForFields = (values: any, widgetContainer: any) => {\n const filteredValues = removeUndefinedFields(values);\n const groupedDateTime = groupDateTimeValuesIfNeeded(filteredValues);\n const groupedValues = ungroupDateValuesIfNeeded(\n groupedDateTime,\n widgetContainer,\n );\n\n const params = [\n ...Object.keys(groupedValues).map((key) => {\n return getParamForField(key, groupedValues[key], widgetContainer);\n }),\n ];\n\n // This is needed because in case of datetime we receive an array of arrays\n const paramsForFields = params.reduce((acc, curVal) => {\n if (Array.isArray(curVal[0])) {\n return acc.concat(curVal);\n }\n return [...acc, curVal];\n }, []);\n\n return paramsForFields;\n};\n\nconst getParamForField = (key: string, value: any, widgetContainer: any) => {\n const filteredKey = key.split(\"#\")[0];\n const type = widgetContainer.findById(filteredKey)?.type;\n\n if (\n type === \"char\" ||\n type === \"text\" ||\n type === \"many2one\" ||\n type === \"many2many\" ||\n type === \"one2many\"\n ) {\n return [key, \"ilike\", value];\n } else if (\n type === \"float\" ||\n type === \"integer\" ||\n type === \"float_time\" ||\n type === \"progressbar\"\n ) {\n const operator = key.indexOf(\"#from\") !== -1 ? \">=\" : \"<=\";\n return [filteredKey, operator, value];\n } else if (type === \"date\") {\n const operator = key.indexOf(\"#from\") !== -1 ? \">=\" : \"<=\";\n return [filteredKey, operator, value.format(\"YYYY-MM-DD\")];\n } else if (type === \"datetime\") {\n const filteredValues = [];\n if (value[0]) {\n filteredValues.push([filteredKey, \">=\", value[0]]);\n }\n if (value[1]) {\n filteredValues.push([filteredKey, \"<=\", value[1]]);\n }\n return filteredValues;\n } else if (type === \"selection\") {\n return [\n key,\n \"in\",\n value.map((valueEntry: string) =>\n convertBooleanParamIfNeeded(valueEntry),\n ),\n ];\n } else {\n return [key, \"=\", convertBooleanParamIfNeeded(value)];\n }\n};\n\nconst getDatetimeDateFields = (values: any) => {\n return Object.keys(values).filter((key) => {\n return key.indexOf(\"#date\") !== -1;\n });\n};\n\nconst removeDateTimeSingleFields = (values: any) => {\n const newValues = { ...values };\n Object.keys(newValues).forEach(\n (key) =>\n (key.indexOf(\"#time\") !== -1 || key.indexOf(\"#date\") !== -1) &&\n delete newValues[key],\n );\n return newValues;\n};\n\nexport const groupDateTimeValuesIfNeeded = (values: any) => {\n const newValues: any = { ...removeDateTimeSingleFields(values) };\n\n const datetimeDateFields = getDatetimeDateFields(values);\n\n datetimeDateFields.forEach((field) => {\n const datePair = values[field];\n const baseKey = field.split(\"#\")[0];\n const timeKey = baseKey + \"#time\";\n const timePair = values[timeKey];\n\n let from, to;\n\n if (datePair[0] !== null) {\n const dateValueFrom = datePair[0].format(\"YYYY-MM-DD\");\n from = dateValueFrom;\n\n if (timePair && timePair[0] !== null) {\n const timeValueFrom = timePair[0].format(\"HH:mm:ss\");\n from = from + \" \" + timeValueFrom;\n }\n }\n\n if (datePair[1] !== null) {\n const dateValueTo = datePair[1].format(\"YYYY-MM-DD\");\n to = dateValueTo;\n\n if (timePair && timePair[1] !== null) {\n const timeValueTo = timePair[1].format(\"HH:mm:ss\");\n to = to + \" \" + timeValueTo;\n }\n }\n\n newValues[baseKey + \"#datetime\"] = [from, to];\n });\n\n return newValues;\n};\n\nconst ungroupDateValuesIfNeeded = (values: any, widgetContainer: any) => {\n const dateFields = Object.keys(values).filter((key) => {\n const widget = widgetContainer.findById(key);\n return widget && widget.type === \"date\";\n });\n\n const newValues: any = { ...values };\n\n dateFields.forEach((key) => {\n delete newValues[key];\n if (values[key][0] !== null) {\n newValues[key + \"#from\"] = values[key][0];\n }\n\n if (values[key][1] !== null) {\n newValues[key + \"#to\"] = values[key][1];\n }\n });\n\n return newValues;\n};\n\nexport const removeUndefinedFields = (values: any) => {\n const newValues = { ...values };\n Object.keys(newValues).forEach(\n (key) =>\n (newValues[key] === undefined ||\n newValues[key] === null ||\n newValues[key] === \"\") &&\n delete newValues[key],\n );\n return newValues;\n};\n\nexport const getUniqueFieldsForParams = (params: any[]) => {\n const uniqueFields: any = {};\n\n params.forEach((param) => {\n if (Array.isArray(param) && param[0]) {\n uniqueFields[param[0]] = true;\n } else {\n uniqueFields[param] = true;\n }\n });\n\n return Object.keys(uniqueFields);\n};\n\nexport const mergeParams = (searchParams: any[], domainParams: any[]) => {\n const finalParams = [...searchParams];\n const uniqueParams = getUniqueFieldsForParams(searchParams);\n\n domainParams.forEach((element) => {\n if (Array.isArray(element) && element[0]) {\n if (!uniqueParams.includes(element[0])) {\n finalParams.push(element);\n }\n } else if (!uniqueParams.includes(element)) {\n finalParams.push(element);\n }\n });\n\n return finalParams;\n};\n","import { mergeParams } from \"@/helpers/searchHelper\";\nimport {\n getColorMap,\n getStatusMap,\n getTableItems,\n getTree,\n sortResults,\n} from \"@/helpers/treeHelper\";\nimport { useState, useCallback, useRef } from \"react\";\nimport { ConnectionProvider, FormView, TreeView } from \"..\";\n\ntype UseSearchOpts = {\n model: string;\n setSearchTreeNameSearch?: (searchString?: string) => void;\n setSelectedRowItems?: (value: any[]) => void;\n searchParams?: any[];\n setSearchParams?: (value: any[]) => void;\n setSearchVisible?: (value: boolean) => void;\n setTreeIsLoading?: (value: boolean) => void;\n nameSearch?: string;\n searchNameGetDoneRef?: any;\n context?: any;\n setActionViewTotalItems?: (totalItems: number) => void;\n formView: FormView;\n treeView: TreeView;\n sorter: any;\n setSorter?: (sorter: any) => void;\n setCurrentItemIndex?: (value?: number) => void;\n setResultsActionView?: (value: any[]) => void;\n resultsActionView?: any[];\n domain: any;\n currentId?: number;\n limit?: number;\n setLimit?: (value: number) => void;\n setSearchValues?: (value: any) => void;\n};\n\nexport const DEFAULT_SEARCH_LIMIT = 80;\n\nexport const useSearch = (opts: UseSearchOpts) => {\n const {\n model,\n setSearchTreeNameSearch,\n setSelectedRowItems,\n setSearchParams,\n setSearchVisible,\n setTreeIsLoading,\n nameSearch,\n searchNameGetDoneRef,\n context,\n setActionViewTotalItems,\n treeView,\n formView,\n sorter,\n setSorter,\n setCurrentItemIndex,\n setResultsActionView,\n resultsActionView,\n domain,\n currentId,\n limit,\n setLimit,\n searchParams = [],\n setSearchValues,\n } = opts;\n\n const [tableRefreshing, setTableRefreshing] = useState<boolean>(false);\n const [searchFilterLoading, setSearchFilterLoading] =\n useState<boolean>(false);\n const [searchError, setSearchError] = useState<string>();\n const [page, setPage] = useState<number>(1);\n const [offset, setOffset] = useState<number>(0);\n const [totalItems, setTotalItems] = useState<number>();\n const [resultsInternal, setResultsInternal] = useState<any>([]);\n const [colorsForResults, setColorsForResults] = useState<any>(undefined);\n const [statusForResults, setStatusForResults] = useState<any>(undefined);\n const internalLimit = useRef(limit || DEFAULT_SEARCH_LIMIT);\n\n const originalResults = useRef<any[]>([]);\n\n const setResults = useCallback(\n (results: any) => {\n setResultsActionView?.([...results]);\n setResultsInternal([...results]);\n },\n [setResultsActionView],\n );\n\n const getResults = useCallback(() => {\n if (!resultsActionView) {\n return resultsInternal;\n }\n return resultsActionView;\n }, [resultsActionView, resultsInternal]);\n\n const searchByNameSearch = useCallback(async () => {\n const searchResults = await ConnectionProvider.getHandler().nameSearch({\n model,\n payload: nameSearch,\n limit: internalLimit.current,\n attrs: domain,\n context,\n });\n\n setTotalItems(searchResults.length);\n setActionViewTotalItems?.(searchResults.length);\n\n if (searchResults.length > 0) {\n const resultsIds = searchResults.map((item: any) => {\n return item?.[0];\n });\n\n const { colors, status } = getTree(treeView!);\n const attrs: any = {};\n if (colors) {\n attrs.colors = colors;\n }\n if (status) {\n attrs.status = status;\n }\n\n const resultsWithData =\n await ConnectionProvider.getHandler().readEvalUiObjects({\n model,\n ids: resultsIds,\n arch: treeView?.arch!,\n fields: treeView!.field_parent\n ? { ...treeView!.fields, [treeView!.field_parent]: {} }\n : treeView!.fields,\n context,\n attrs,\n });\n const resultsData = resultsWithData[0];\n\n originalResults.current = [...resultsData];\n\n setColorsForResults(getColorMap(resultsWithData[1]));\n setStatusForResults(getStatusMap(resultsWithData[1]));\n\n const newResultIds = resultsData.map((item: any) => item.id);\n\n const resultsSorted =\n sorter !== undefined\n ? sortResults({\n resultsToSort: resultsData,\n sorter,\n fields: { ...treeView!.fields, ...formView!.fields },\n })\n : [...originalResults.current];\n\n setResults(resultsSorted);\n\n if (newResultIds.length > 0) {\n setCurrentItemIndex?.(0);\n } else {\n setCurrentItemIndex?.(undefined);\n }\n } else {\n setResults([]);\n setCurrentItemIndex?.(undefined);\n }\n setTableRefreshing(false);\n searchNameGetDoneRef.current = true;\n }, [\n setResults,\n searchNameGetDoneRef,\n nameSearch,\n model,\n context,\n domain,\n treeView,\n formView,\n sorter,\n setCurrentItemIndex,\n setActionViewTotalItems,\n ]);\n\n const searchResults = useCallback(\n async (opts?: { params: any; newOffset?: number }) => {\n const { params, newOffset } = opts || {};\n\n const mergedParams = mergeParams(params || searchParams, domain);\n const { colors, status } = getTree(treeView!);\n const attrs: any = {};\n if (colors) {\n attrs.colors = colors;\n }\n if (status) {\n attrs.status = status;\n }\n\n const { totalItems, results, attrsEvaluated } =\n await ConnectionProvider.getHandler().searchForTree({\n params: mergedParams,\n limit: internalLimit.current,\n offset: newOffset || offset,\n model,\n fields: treeView!.field_parent\n ? { ...treeView!.fields, [treeView!.field_parent]: {} }\n : treeView!.fields,\n context,\n attrs,\n });\n setColorsForResults(getColorMap(attrsEvaluated));\n setStatusForResults(getStatusMap(attrsEvaluated));\n\n originalResults.current = [...results];\n\n const resultsSorted =\n sorter !== undefined\n ? sortResults({\n resultsToSort: results,\n sorter,\n fields: { ...treeView!.fields, ...formView!.fields },\n })\n : [...originalResults.current];\n\n setResults(resultsSorted);\n\n if (resultsActionView && resultsSorted.length > 0) {\n const newCurrentItemIndex = resultsSorted.findIndex(\n (item) => currentId === item.id,\n );\n\n if (newCurrentItemIndex === -1) {\n setCurrentItemIndex?.(0);\n } else {\n setCurrentItemIndex?.(newCurrentItemIndex);\n }\n } else {\n setCurrentItemIndex?.(undefined);\n }\n setTableRefreshing(false);\n\n const totalItemsValue = await totalItems;\n\n setTotalItems(totalItemsValue);\n setActionViewTotalItems?.(totalItemsValue);\n },\n [\n setCurrentItemIndex,\n resultsActionView,\n setResults,\n currentId,\n model,\n context,\n domain,\n treeView,\n formView,\n sorter,\n setActionViewTotalItems,\n offset,\n searchParams,\n ],\n );\n\n const fetchResults = useCallback(\n async (opts?: { params: any; newOffset?: number }) => {\n try {\n setTableRefreshing(true);\n setTreeIsLoading?.(true);\n if (nameSearch && !searchNameGetDoneRef.current) {\n await searchByNameSearch();\n } else {\n await searchResults(opts);\n }\n } catch (error) {\n setSearchError(typeof error === \"string\" ? error : error.message);\n setTableRefreshing(false);\n } finally {\n setSelectedRowItems?.([]);\n setSearchFilterLoading(false);\n setTreeIsLoading?.(false);\n }\n },\n [\n nameSearch,\n searchByNameSearch,\n searchNameGetDoneRef,\n searchResults,\n setSelectedRowItems,\n setTreeIsLoading,\n ],\n );\n\n const changeSort = useCallback(\n (newSorter: any) => {\n if (JSON.stringify(newSorter) === JSON.stringify(sorter)) return;\n setSorter?.(newSorter);\n const sortedResults =\n newSorter !== undefined\n ? sortResults({\n resultsToSort: getResults(),\n sorter: newSorter,\n fields: { ...treeView.fields, ...formView.fields },\n })\n : [...originalResults.current];\n setResults(sortedResults);\n },\n [\n sorter,\n setSorter,\n getResults,\n treeView?.fields,\n formView?.fields,\n setResults,\n ],\n );\n\n const submit = useCallback(\n (opts: {\n params: any;\n limit: number;\n offset: number;\n searchValues: any;\n }) => {\n const { params, searchValues, limit: newLimit, offset: newOffset } = opts;\n\n if (tableRefreshing) return;\n setSearchTreeNameSearch?.(undefined);\n setSelectedRowItems?.([]);\n setSearchValues?.(searchValues);\n setSearchParams?.(params);\n setSearchVisible?.(false);\n setSearchFilterLoading(true);\n setSearchError(undefined);\n setPage(1);\n\n if (newLimit) {\n internalLimit.current = newLimit;\n setLimit?.(newLimit);\n }\n if (newOffset) setOffset(newOffset);\n fetchResults({\n params,\n newOffset,\n });\n },\n [\n tableRefreshing,\n setSearchTreeNameSearch,\n setSelectedRowItems,\n setSearchValues,\n setSearchParams,\n setSearchVisible,\n fetchResults,\n setLimit,\n ],\n );\n\n const requestPageChange = useCallback(\n (page: number) => {\n setTableRefreshing(true);\n setPage(page);\n setOffset((page - 1) * limit!);\n },\n [setTableRefreshing, limit, setOffset, setPage],\n );\n\n const clear = useCallback(() => {\n if (tableRefreshing) return;\n setSearchTreeNameSearch?.(undefined);\n setSearchParams?.([]);\n setSearchValues?.({});\n setSearchError(undefined);\n setOffset(0);\n setPage(1);\n setLimit?.(limit || DEFAULT_SEARCH_LIMIT);\n }, [\n tableRefreshing,\n setSearchTreeNameSearch,\n setSearchParams,\n setSearchValues,\n setLimit,\n limit,\n ]);\n\n const fetchChildrenForRecord = useCallback(\n async (record: any) => {\n const child_id = record[treeView?.field_parent || \"child_id\"];\n\n const children = await ConnectionProvider.getHandler().readObjects({\n model,\n ids: child_id,\n fields: treeView!.field_parent\n ? { ...treeView!.fields, [treeView!.field_parent]: {} }\n : treeView!.fields,\n context,\n });\n\n setResults([...getResults(), ...children]);\n\n return getTableItems(getTree(treeView!), children);\n },\n [treeView, model, context, getResults, setResults],\n );\n\n const getAllIds = useCallback(async () => {\n return await ConnectionProvider.getHandler().searchAllIds({\n params: mergeParams(searchParams, domain),\n model,\n context,\n totalItems,\n });\n }, [model, context, totalItems, searchParams, domain]);\n\n return {\n submit,\n clear,\n fetchResults,\n tableRefreshing,\n searchFilterLoading,\n searchError,\n page,\n offset,\n limit,\n getResults,\n requestPageChange,\n changeSort,\n fetchChildrenForRecord,\n colorsForResults,\n statusForResults,\n totalItems,\n getAllIds,\n };\n};\n","import { DEFAULT_SEARCH_LIMIT } from \"@/hooks/useSearch\";\nimport { View } from \"@/types\";\nimport React, { useEffect, useRef, useState } from \"react\";\n\nexport type ActionViewContextType = {\n title: string;\n availableViews: View[];\n currentView: View;\n setCurrentView: (view: View) => void;\n formIsSaving?: boolean;\n setFormIsSaving?: (value: boolean) => void;\n formHasChanges?: boolean;\n setFormHasChanges?: (value: boolean) => void;\n onFormSave?: () => Promise<{ succeed: boolean; id: number }>;\n formRef?: any;\n searchTreeRef?: any;\n onNewClicked: () => void;\n currentId?: number;\n setCurrentId?: (id?: number) => void;\n currentItemIndex?: number;\n setCurrentItemIndex?: (value?: number) => void;\n results?: any[];\n setResults?: (value: any[]) => void;\n currentModel?: string;\n removingItem?: boolean;\n setRemovingItem?: (value: boolean) => void;\n formIsLoading?: boolean;\n setFormIsLoading?: (value: boolean) => void;\n treeIsLoading?: boolean;\n setTreeIsLoading?: (value: boolean) => void;\n graphIsLoading?: boolean;\n setGraphIsLoading?: (value: boolean) => void;\n attachments?: any;\n setAttachments?: (value: any) => void;\n selectedRowItems?: any[];\n setSelectedRowItems?: (value: any[]) => void;\n duplicatingItem?: boolean;\n setDuplicatingItem?: (value: boolean) => void;\n searchParams?: any[];\n setSearchParams?: (value: any[]) => void;\n searchVisible?: boolean;\n setSearchVisible?: (value: boolean) => void;\n sorter: any;\n setSorter: (sorter: any) => void;\n totalItems: number;\n setTotalItems: (totalItems: number) => void;\n searchTreeNameSearch?: string;\n setSearchTreeNameSearch?: (searchString?: string) => void;\n previousView?: View;\n setPreviousView?: (view: View) => void;\n goToResourceId?: (ids: number[]) => Promise<void>;\n searchValues?: any;\n setSearchValues?: (value: any) => void;\n limit?: number;\n setLimit?: (value: number) => void;\n setTitle?: (value: string) => void;\n};\n\nexport const ActionViewContext =\n React.createContext<ActionViewContextType | null>(null);\n\ntype ActionViewProviderProps = ActionViewContextType & {\n children: React.ReactNode;\n};\n\nconst ActionViewProvider = (props: ActionViewProviderProps): any => {\n const {\n children,\n currentView,\n title: titleProps,\n setCurrentView,\n availableViews,\n formRef,\n searchTreeRef,\n onNewClicked,\n currentId,\n setCurrentId,\n setResults,\n results,\n currentItemIndex,\n setCurrentItemIndex,\n currentModel,\n sorter,\n setSorter,\n totalItems,\n setTotalItems,\n setSelectedRowItems,\n selectedRowItems,\n searchTreeNameSearch,\n setSearchTreeNameSearch,\n goToResourceId,\n limit: limitProps,\n } = props;\n\n const [formIsSaving, setFormIsSaving] = useState<boolean>(false);\n const [formHasChanges, setFormHasChanges] = useState<boolean>(false);\n const [removingItem, setRemovingItem] = useState<boolean>(false);\n const [formIsLoading, setFormIsLoading] = useState<boolean>(true);\n const [treeIsLoading, setTreeIsLoading] = useState<boolean>(true);\n const [attachments, setAttachments] = useState<any>([]);\n const [duplicatingItem, setDuplicatingItem] = useState<boolean>(false);\n const [searchParams, setSearchParams] = useState<any[]>([]);\n const [searchVisible, setSearchVisible] = useState<boolean>(false);\n const [graphIsLoading, setGraphIsLoading] = useState<boolean>(true);\n const [previousView, setPreviousView] = useState<View>();\n const [searchValues, setSearchValues] = useState<any>({});\n const [limit, setLimit] = useState<number>(\n limitProps !== undefined ? limitProps : DEFAULT_SEARCH_LIMIT,\n );\n const [title, setTitle] = useState<string>(titleProps);\n\n useEffect(() => {\n if (results && results.length > 0 && !currentItemIndex) {\n setCurrentItemIndex?.(0);\n setCurrentId?.(results[0].id);\n }\n }, [results]);\n\n useEffect(() => {\n setLimit(limitProps !== undefined ? limitProps : DEFAULT_SEARCH_LIMIT);\n }, [limitProps]);\n\n useEffect(() => {\n if (availableViews.length === 1) {\n setPreviousView(availableViews[0]);\n } else if (availableViews.length > 1) {\n setPreviousView(\n availableViews.filter(\n (view) => view.view_id !== currentView.view_id,\n )[0],\n );\n }\n }, [availableViews]);\n\n useEffect(() => {\n if (\n previousView?.view_id === currentView.view_id &&\n availableViews.length > 1\n ) {\n setPreviousView(\n availableViews.filter(\n (view) => view.view_id !== currentView.view_id,\n )[0],\n );\n }\n }, [currentView]);\n\n const callOnFormSave = async () => {\n return await (formRef.current as any)?.submitForm();\n };\n\n return (\n <ActionViewContext.Provider\n value={{\n title,\n currentView,\n setCurrentView,\n availableViews,\n formIsSaving,\n setFormIsSaving,\n formHasChanges,\n setFormHasChanges,\n formRef,\n searchTreeRef,\n onFormSave: callOnFormSave,\n onNewClicked,\n currentId,\n setCurrentId,\n currentItemIndex,\n setCurrentItemIndex,\n results,\n setResults,\n currentModel,\n removingItem,\n setRemovingItem,\n formIsLoading,\n setFormIsLoading,\n treeIsLoading,\n setTreeIsLoading,\n attachments,\n setAttachments,\n selectedRowItems,\n setSelectedRowItems,\n duplicatingItem,\n setDuplicatingItem,\n setSearchParams,\n searchParams,\n searchVisible,\n setSearchVisible,\n sorter,\n setSorter,\n totalItems,\n setTotalItems,\n searchTreeNameSearch,\n setSearchTreeNameSearch,\n setGraphIsLoading,\n graphIsLoading,\n previousView,\n setPreviousView,\n goToResourceId,\n searchValues,\n setSearchValues,\n limit,\n setLimit,\n setTitle,\n }}\n >\n {children}\n </ActionViewContext.Provider>\n );\n};\n\nexport default ActionViewProvider;\n","import { InitialViewData, View, ViewType } from \"@/types\";\nimport { ShortcutApi } from \"@/ui/FavouriteButton\";\nimport React, { useState } from \"react\";\n\nexport type TabManagerContextType = {\n openAction: ({\n domain,\n context,\n model,\n views,\n title,\n target,\n initialView,\n action_id,\n action_type,\n res_id,\n values,\n forced_values,\n }: {\n domain: any;\n context: any;\n model: string;\n views: any[];\n title: string;\n target: string;\n initialView: InitialViewData;\n action_id: number;\n action_type: string;\n res_id?: number | boolean;\n values?: any;\n forced_values?: any;\n }) => void;\n openRelate: ({\n relateData,\n fields,\n values,\n action_id,\n action_type,\n }: {\n relateData: any;\n fields: any;\n values: any;\n action_id: number;\n action_type: string;\n }) => void;\n openDefaultActionForModel: ({\n model,\n values,\n forced_values,\n initialViewType,\n res_id,\n domain,\n }: {\n model: string;\n values?: any;\n forced_values?: any;\n initialViewType?: ViewType;\n res_id?: number;\n domain?: any;\n }) => void;\n activeKey: string;\n onChangeTab: (key: string) => void;\n onRemoveTab: (key: string) => void;\n openShortcut: (shortcut: ShortcutApi) => void;\n tabs: any[];\n currentView?: View;\n setCurrentView?: (view?: View) => void;\n currentId?: number;\n setCurrentId?: (id?: number) => void;\n};\n\nexport const TabManagerContext =\n React.createContext<TabManagerContextType | null>(null);\n\ntype TabManagerProviderProps = TabManagerContextType & {\n children: React.ReactNode;\n};\n\nconst TabManagerProvider = (props: TabManagerProviderProps): any => {\n const {\n children,\n openAction,\n openRelate,\n openDefaultActionForModel,\n openShortcut,\n activeKey,\n onChangeTab,\n onRemoveTab,\n tabs,\n } = props;\n\n const [currentView, setCurrentView] = useState<View>();\n const [currentId, setCurrentId] = useState<number>();\n\n return (\n <TabManagerContext.Provider\n value={{\n openAction,\n openRelate,\n openDefaultActionForModel,\n activeKey,\n openShortcut,\n onChangeTab,\n onRemoveTab,\n tabs,\n currentId,\n currentView,\n setCurrentId,\n setCurrentView,\n }}\n >\n {children}\n </TabManagerContext.Provider>\n );\n};\n\nexport default TabManagerProvider;\n","import { FormView, GenerateReportOptions, ViewType } from \"@/types\";\nimport React, {\n useContext,\n useRef,\n useState,\n forwardRef,\n useImperativeHandle,\n} from \"react\";\nimport showErrorDialog from \"@/ui/ActionErrorDialog\";\nimport { openBase64InNewTab, getMimeType } from \"@/helpers/filesHelper\";\nimport { parseContext } from \"@gisce/ooui\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport { Modal, Spin } from \"antd\";\nimport {\n TabManagerContext,\n TabManagerContextType,\n} from \"@/context/TabManagerContext\";\nimport { FormModal } from \"@/widgets/modals/FormModal\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport { transformPlainMany2Ones, stringFormat } from \"@/helpers/formHelper\";\n\nexport type ContentRootContextType = {\n processAction: ({\n actionData,\n fields,\n values,\n context,\n }: {\n actionData: any;\n fields: any;\n values: any;\n context?: any;\n onRefreshParentValues?: () => void;\n }) => Promise<any>;\n globalValues?: any;\n};\n\ntype ActionModalOpts = {\n model?: string;\n domain?: any;\n context: any;\n formView?: FormView;\n actionData?: any;\n};\n\nexport const ContentRootContext =\n React.createContext<ContentRootContextType | null>(null);\n\ntype ContentRootProviderProps = {\n children: React.ReactNode;\n globalValues?: any;\n};\n\nconst callRefreshValues = async (fns: any[]) => {\n for (let i = 0; i < fns.length; i++) {\n await fns?.[i]?.();\n }\n};\n\nconst ContentRootProvider = (\n props: ContentRootProviderProps,\n ref: any,\n): any => {\n const { children, globalValues = {} } = props;\n const reportInProgressInterval = useRef<any>();\n const waitingForReport = useRef<boolean>();\n const [reportGenerating, setReportGenerating] = useState<boolean>(false);\n const tabManagerContext = useContext(\n TabManagerContext,\n ) as TabManagerContextType;\n const { openAction } = tabManagerContext || {};\n const onRefreshParentValues = useRef<any>([]);\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n useImperativeHandle(ref, () => ({\n openActionModal,\n }));\n\n // Action modal state\n const [actionModalVisible, setActionModalVisible] = useState<boolean>(false);\n\n const [actionModalOptions, setActionModalOptions] = useState<ActionModalOpts>(\n {\n context: {},\n },\n );\n\n async function generateReport(options: GenerateReportOptions) {\n const { reportData, fields, values, context = {} } = options;\n\n const {\n context: reportContext,\n model,\n datas = {},\n report_name,\n type,\n } = reportData;\n\n if (type !== \"ir.actions.report.xml\") {\n showErrorDialog(`${type} action not supported`);\n return;\n }\n\n const { ids } = datas || {};\n\n const idsToExecute = ids || [];\n\n const reportContextParsed =\n typeof reportContext === \"string\"\n ? parseContext({\n context: reportContext,\n fields,\n values,\n })\n : reportContext;\n\n try {\n const newReportId = await ConnectionProvider.getHandler().createReport({\n model,\n name: report_name,\n datas,\n ids: idsToExecute,\n context: { ...context, ...reportContextParsed },\n });\n\n setReportGenerating(true);\n\n waitingForReport.current = true;\n reportInProgressInterval.current = setInterval(() => {\n evaluateReportStatus(newReportId);\n }, 1000);\n } catch (err) {\n waitingForReport.current = false;\n clearInterval(reportInProgressInterval.current);\n showErrorDialog(err);\n setReportGenerating(false);\n }\n }\n\n async function evaluateReportStatus(id: any) {\n let reportState;\n try {\n reportState = await ConnectionProvider.getHandler().getReport({\n id,\n });\n if (reportState.state && waitingForReport.current === true) {\n waitingForReport.current = false;\n clearInterval(reportInProgressInterval.current);\n setReportGenerating(false);\n const fileType: any = await getMimeType(reportState.result);\n openBase64InNewTab(reportState.result, fileType.mime);\n }\n } catch (error) {\n waitingForReport.current = false;\n clearInterval(reportInProgressInterval.current);\n setReportGenerating(false);\n showErrorDialog(error.exception || error);\n }\n }\n\n async function processAction({\n actionData,\n fields,\n values,\n context,\n onRefreshParentValues: onRefreshParentValuesFn,\n }: {\n actionData: any;\n fields: any;\n values: any;\n context?: any;\n onRefreshParentValues?: any;\n }) {\n const { type } = actionData;\n onRefreshParentValues.current.push(onRefreshParentValuesFn);\n\n if (type === \"ir.actions.report.xml\") {\n return await generateReport({\n reportData: actionData,\n fields,\n values,\n context,\n });\n } else if (type === \"ir.actions.act_window\") {\n return await runAction({ actionData, fields, values, context });\n } else if (type === \"ir.actions.act_url\") {\n window.open(\n stringFormat(actionData.url, { ...values, context }),\n \"_blank\",\n );\n } else {\n showErrorDialog(`${type} action not supported`);\n return {};\n }\n }\n\n async function runAction({\n actionData: _actionData,\n fields = {},\n values = {},\n context = {},\n }: {\n actionData: any;\n fields?: any;\n values?: any;\n context?: any;\n }) {\n let actionData = _actionData;\n\n if (!_actionData.res_model) {\n actionData = (\n await ConnectionProvider.getHandler().readObjects({\n model: \"ir.actions.act_window\",\n ids: [parseInt(_actionData.id)],\n context,\n })\n )[0];\n }\n\n const responseContext =\n typeof actionData?.context === \"string\"\n ? parseContext({\n context: actionData.context,\n fields,\n values: { ...values, ...globalValues },\n })\n : actionData.context;\n\n const mergedContext = {\n ...context,\n ...responseContext,\n };\n\n let parsedDomain = [];\n\n if (actionData.domain) {\n parsedDomain = await ConnectionProvider.getHandler().evalDomain({\n domain: actionData.domain,\n values: transformPlainMany2Ones({\n fields,\n values: { ...values, ...globalValues },\n }),\n fields,\n context: mergedContext,\n });\n }\n\n // -- Possible values for target property --\n // * new ==> modal\n // * current ==> new tab\n // * undefined ==> new tab\n if (actionData.target === \"new\") {\n const formView = (await ConnectionProvider.getHandler().getView({\n model: actionData.res_model,\n type: \"form\",\n id: actionData?.view_id?.[0] || undefined,\n context: mergedContext,\n })) as FormView;\n\n openActionModal({\n domain: parsedDomain,\n model: actionData.res_model,\n formView,\n context: mergedContext,\n });\n\n return {};\n } else {\n const { initialView, views } = await getViewsAndInitialView({\n model: actionData.res_model,\n context: mergedContext,\n view_mode: actionData.view_mode,\n views: actionData.views,\n });\n\n openAction?.({\n target: \"current\",\n context: mergedContext,\n domain: parsedDomain,\n model: actionData.res_model,\n views,\n title: actionData.name,\n initialView,\n action_id: actionData.id,\n action_type: actionData.type,\n });\n\n return { closeParent: true };\n }\n }\n\n function openActionModal({\n domain,\n model,\n formView,\n context,\n actionData,\n }: {\n domain: any;\n model: string;\n formView: FormView;\n context: any;\n actionData?: any;\n }) {\n if (actionModalVisible) {\n openNewActionModal({ domain, model, formView, context, actionData });\n } else {\n setActionModalOptions({ domain, model, context, formView, actionData });\n setActionModalVisible(true);\n }\n }\n\n async function openNewActionModal({\n domain,\n model,\n formView,\n context,\n actionData,\n }: {\n domain: any;\n model: string;\n formView: FormView;\n context: any;\n actionData?: any;\n }) {\n setActionModalOptions({\n domain: undefined,\n model: undefined,\n context: {},\n formView: undefined,\n actionData: undefined,\n });\n setActionModalVisible(false);\n await new Promise((resolve) => setTimeout(resolve, 300));\n setActionModalOptions({ domain, model, context, formView, actionData });\n setActionModalVisible(true);\n }\n\n async function onFormModalSucceed() {\n callRefreshValues(onRefreshParentValues.current);\n onRefreshParentValues.current = [];\n setActionModalVisible(false);\n setActionModalOptions({\n domain: undefined,\n model: undefined,\n context: {},\n formView: undefined,\n actionData: undefined,\n });\n }\n\n return (\n <>\n <ContentRootContext.Provider\n value={{\n processAction,\n globalValues,\n }}\n >\n <>\n {children}\n <Modal\n title={t(\"generatingReport\")}\n open={reportGenerating}\n footer={null}\n closable={false}\n centered\n maskClosable={false}\n >\n <Spin />\n </Modal>\n <FormModal\n buttonModal\n parentContext={actionModalOptions.context}\n model={actionModalOptions.model!}\n formView={actionModalOptions.formView}\n visible={actionModalVisible}\n onSubmitSucceed={onFormModalSucceed}\n onCancel={() => {\n callRefreshValues(onRefreshParentValues.current);\n onRefreshParentValues.current = [];\n setActionModalVisible(false);\n setActionModalOptions({\n domain: undefined,\n model: undefined,\n context: {},\n formView: undefined,\n actionData: undefined,\n });\n }}\n showFooter={false}\n actionDomain={actionModalOptions.domain}\n isMenuAction={actionModalOptions?.actionData !== undefined}\n actionData={actionModalOptions?.actionData}\n />\n </>\n </ContentRootContext.Provider>\n </>\n );\n};\n\nasync function getViewsAndInitialView({\n views,\n view_mode,\n model,\n context,\n view_id,\n}: {\n views: any[];\n view_mode: string;\n model: string;\n context: any;\n view_id?: number;\n}) {\n const retriedViewData = [];\n let initialView;\n\n if (views) {\n for (const view of views) {\n const viewData = await ConnectionProvider.getHandler().getView({\n model,\n type: view[1],\n id: view[0],\n context,\n });\n retriedViewData.push([viewData.view_id, view[1]]);\n }\n } else {\n const viewTypes = view_mode.split(\",\");\n for (const viewType of viewTypes) {\n const viewData = await ConnectionProvider.getHandler().getView({\n model,\n type: viewType as ViewType,\n context,\n });\n retriedViewData.push([viewData.view_id, viewType]);\n }\n }\n if (views && views.length > 0) {\n const [id, type] = views[0];\n initialView = {\n id,\n type,\n };\n } else if (!view_id) {\n const type = view_mode.split(\",\")[0];\n const [retrievedViewId] = retriedViewData.find(\n ([_, viewType]) => viewType === type,\n )!;\n initialView = { id: retrievedViewId, type };\n } else {\n initialView = {\n id: view_id,\n type: view_mode.split(\",\")[0],\n };\n }\n\n return { views: retriedViewData, initialView };\n}\n\nexport default forwardRef(ContentRootProvider);\n","import { parseError } from \"@/helpers/errorHelper\";\nimport { Alert } from \"antd\";\nimport React from \"react\";\nimport { Interweave } from \"interweave\";\n\nexport const ErrorAlert = ({\n error,\n className,\n}: {\n error: any;\n className: string;\n}) => {\n let messageContent;\n let messageType = \"error\";\n\n if (\n typeof error === \"string\" &&\n error.indexOf(\" -- \") !== -1 &&\n error.indexOf(\"\\n\\n\") !== -1\n ) {\n const { message, type, title } = parseError(error);\n messageContent = <Interweave content={`${title}<br />${message}`} />;\n messageType = type;\n } else {\n messageContent = error.message\n ? JSON.stringify(error.message)\n : JSON.stringify(error);\n }\n return (\n <Alert\n className={className}\n message={messageContent}\n type={messageType as any}\n banner\n />\n );\n};\n","import React, {\n useState,\n forwardRef,\n useImperativeHandle,\n useEffect,\n useRef,\n useContext,\n} from \"react\";\nimport { Form as FormOoui, parseContext } from \"@gisce/ooui\";\nimport {\n Form as AntForm,\n Button,\n Divider,\n Space,\n Row,\n Alert,\n Spin,\n message,\n} from \"antd\";\nimport Measure from \"react-measure\";\nimport { CheckOutlined, CloseOutlined } from \"@ant-design/icons\";\nimport debounce from \"lodash/debounce\";\n\nimport Container from \"@/widgets/containers/Container\";\nimport {\n processValues,\n getTouchedValues,\n checkFieldsType,\n mergeFieldsDomain,\n getValuesForDomain,\n getOnChangePayload,\n} from \"@/helpers/formHelper\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport showUnsavedChangesDialog from \"@/ui/UnsavedChangesDialog\";\nimport formErrorsDialog from \"@/ui/FormErrorsDialog\";\nimport showErrorDialog from \"@/ui/ActionErrorDialog\";\nimport showWarningDialog from \"@/ui/WarningDialog\";\nimport FormProvider, {\n FormContext,\n FormContextType,\n} from \"@/context/FormContext\";\nimport { FormView, One2manyItem } from \"@/index\";\nimport {\n FormModalContext,\n FormModalContextType,\n} from \"@/context/FormModalContext\";\n\nimport {\n ActionViewContext,\n ActionViewContextType,\n} from \"@/context/ActionViewContext\";\n\nimport {\n ContentRootContext,\n ContentRootContextType,\n} from \"@/context/ContentRootContext\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport { convertToPlain2ManyValues } from \"@/helpers/one2manyHelper\";\nimport { ErrorAlert } from \"@/ui/ErrorAlert\";\n\nexport type FormProps = {\n model: string;\n readOnly?: boolean;\n id?: number;\n formView?: FormView;\n values?: any;\n showFooter?: boolean;\n getDataFromAction?: boolean;\n mustClearAfterSave?: boolean;\n submitMode?: \"api\" | \"values\" | \"2many\";\n onSubmitSucceed?: (\n id?: number,\n values?: any,\n formValues?: any,\n x2manyPendingLink?: boolean,\n ) => void;\n onSubmitError?: (error: any) => void;\n onCancel?: () => void;\n onFieldsChange?: (values: any) => void;\n postSaveAction?: (event: any) => Promise<void>;\n insideButtonModal?: boolean;\n parentContext?: any;\n actionDomain?: any;\n visible?: boolean;\n rootForm?: boolean;\n defaultValues?: any;\n forcedValues?: any;\n parentWidth?: number;\n};\n\nconst WIDTH_BREAKPOINT = 800;\n\nfunction Form(props: FormProps, ref: any) {\n const {\n model,\n id,\n onCancel: propsOnCancel,\n onSubmitSucceed: propsOnSubmitSucceed,\n showFooter = false,\n getDataFromAction = false,\n onFieldsChange,\n onSubmitError: propsOnSubmitError,\n readOnly = false,\n mustClearAfterSave = false,\n submitMode = \"api\",\n values: valuesProps,\n formView: formViewProps,\n postSaveAction,\n insideButtonModal = false,\n parentContext = {},\n actionDomain,\n visible = true,\n rootForm = false,\n defaultValues,\n forcedValues = {},\n parentWidth,\n } = props;\n const { t, lang } = useContext(LocaleContext) as LocaleContextType;\n\n const [isSubmitting, setIsSubmitting] = useState<boolean>(false);\n const [error, setError] = useState<string>();\n const [formOoui, setFormOoui] = useState<FormOoui>();\n const [antForm] = AntForm.useForm();\n const [arch, setArch] = useState<string>();\n const [fields, setFields] = useState<any>();\n const formModalContext = useContext(FormModalContext) as FormModalContextType;\n const [containerWidth, setContainerWidth] = useState<any>();\n const [defaultGetCalled, setDefaultGetCalled] = useState<boolean>(false);\n\n const createdId = useRef<number>();\n const originalFormValues = useRef<any>({});\n const lastAssignedValues = useRef<any>({});\n const warningIsShown = useRef<boolean>(false);\n const formSubmitting = useRef<boolean>(false);\n const x2manyPendingLink = useRef<boolean>(false);\n\n const widthToEvaluate =\n parentWidth !== undefined ? parentWidth : containerWidth;\n const responsiveBehaviour = widthToEvaluate < WIDTH_BREAKPOINT;\n\n const formContext = useContext(FormContext) as FormContextType;\n const { activeId: parentId, getPlainValues: getParentPlainValues } =\n formContext || {};\n\n const actionViewContext = useContext(\n ActionViewContext,\n ) as ActionViewContextType;\n const {\n setFormIsSaving = undefined,\n setFormHasChanges = undefined,\n setCurrentId = undefined,\n setFormIsLoading = undefined,\n setAttachments = undefined,\n title = undefined,\n setTitle = undefined,\n } = (rootForm ? actionViewContext : {}) || {};\n\n const contentRootContext = useContext(\n ContentRootContext,\n ) as ContentRootContextType;\n const { processAction, globalValues } = contentRootContext || {};\n\n useImperativeHandle(ref, () => ({\n submitForm,\n getFields,\n getValues,\n getPlainValues,\n getContext,\n fetchValues,\n cancelUnsavedChanges,\n clearAndReload: () => {\n createdId.current = undefined;\n setFormOoui(undefined);\n fetchData();\n },\n }));\n\n useEffect(() => {\n setError(undefined);\n\n if (!model && !formViewProps) {\n return;\n }\n\n if (!visible) {\n createdId.current = undefined;\n setFormOoui(undefined);\n return;\n }\n\n // In the case we set the id to undefined for creating a new item\n if (\n (id === undefined && fields) ||\n (id !== undefined && fields && id < 0)\n ) {\n createdId.current = undefined;\n setFormOoui(undefined);\n }\n\n fetchData();\n }, [id, model, valuesProps, formViewProps, visible]);\n\n useEffect(() => {\n if (defaultGetCalled) {\n checkFieldsChanges({\n elementHasLostFocus: true,\n });\n setDefaultGetCalled(false);\n }\n }, [defaultGetCalled]);\n\n const onSubmitSucceed = (\n id?: number,\n values?: any,\n formValues?: any,\n x2manyPendingLink?: boolean,\n ) => {\n setFormHasChanges?.(false);\n setFormIsSaving?.(false);\n propsOnSubmitSucceed?.(id, values, formValues, x2manyPendingLink);\n setCurrentId?.(id);\n };\n\n const onCancel = () => {\n setFormIsSaving?.(false);\n propsOnCancel?.();\n };\n\n const onSubmitError = (error: any) => {\n setFormIsSaving?.(false);\n propsOnSubmitError?.(error);\n };\n\n function getCurrentId() {\n return id || createdId.current;\n }\n\n function getFields() {\n return fields;\n }\n\n function getValues() {\n const values = {\n ...getCurrentValues(fields),\n ...getAdditionalValues(),\n };\n\n for (const key in values) {\n if (values[key] === undefined) {\n delete values[key];\n }\n }\n\n return values;\n }\n\n function getPlainValues() {\n const values: any = getValues();\n const fields: any = getFields();\n const reformattedValues: { [key: string]: any } = {};\n\n Object.keys(values).forEach((key) => {\n const value = values[key];\n\n if (\n fields[key] &&\n fields[key].type === \"many2one\" &&\n value &&\n Array.isArray(value) &&\n value.length === 2\n ) {\n reformattedValues[key] = value[0];\n } else if (\n fields[key] &&\n (fields[key].type === \"one2many\" || fields[key].type === \"many2many\") &&\n value &&\n value.items\n ) {\n reformattedValues[key] = value.items\n .filter((item: One2manyItem) => item.operation !== \"pendingRemove\")\n .map((val: any) => val.id);\n } else {\n reformattedValues[key] = value;\n }\n });\n\n return reformattedValues;\n }\n\n function getFormValues() {\n const values = {\n ...getCurrentValues(fields),\n };\n\n for (const key in values) {\n if (values[key] === undefined) {\n delete values[key];\n }\n }\n\n return values;\n }\n\n function getContext() {\n return { ...parentContext, ...formOoui?.context };\n }\n\n function getActiveIdsContext() {\n const currentId = getCurrentId()!;\n\n if (!currentId) {\n return {};\n }\n return { active_id: getCurrentId()!, active_ids: [getCurrentId()!] };\n }\n\n function getAdditionalValues() {\n return {\n id: getCurrentId()!,\n active_id: getCurrentId()!,\n active_ids: [getCurrentId()!],\n parent_id: parentId,\n ...globalValues,\n };\n }\n\n const getDefaultValues = async (fields: any) => {\n const formContext = getCurrentId() ? formOoui?.context : {};\n return await ConnectionProvider.getHandler().defaultGet({\n model,\n fields,\n context: { ...parentContext, ...formContext },\n extraValues: defaultValues,\n });\n };\n\n const formHasChanges = () => {\n return (\n Object.keys(\n getTouchedValues({\n source: originalFormValues.current,\n target: getCurrentValues(fields),\n fields,\n }),\n ).length !== 0\n );\n };\n\n const getCurrentValues = (fields: any) => {\n const currentValues = antForm.getFieldsValue(true);\n return processValues(currentValues, fields);\n };\n\n const setFieldValue = (field: string, value?: string) => {\n assignNewValuesToForm({\n values: {\n ...processValues(antForm.getFieldsValue(true), fields),\n [field]: value,\n },\n fields,\n reset: false,\n });\n };\n\n const getFieldValue = (field: string) => {\n const values = antForm.getFieldsValue(true);\n return values[field];\n };\n\n async function checkIfFormHasErrors() {\n try {\n await antForm.validateFields();\n return false;\n } catch (verror) {\n message.error(t(\"fillRequiredFields\"));\n return true;\n }\n }\n const fetchData = async () => {\n setError(undefined);\n setFormIsLoading?.(true);\n\n let view;\n\n try {\n if (formViewProps) {\n view = { arch: formViewProps.arch, fields: formViewProps.fields };\n } else {\n view = await getFormView();\n }\n\n const { fields, arch } = view;\n setFields(fields);\n setArch(arch);\n\n await fetchValues({\n fields,\n arch,\n });\n } catch (err) {\n setError(err?.message ? err.message + err.stack : err);\n setFormIsLoading?.(false);\n // setLoading(false);\n }\n };\n\n type FetchValuesOptions = {\n fields?: any;\n arch?: string;\n forceRefresh?: boolean;\n };\n\n const fetchValues = async (options?: FetchValuesOptions) => {\n let values;\n let _fields;\n let _arch;\n let hasDefaultGetCalled;\n\n setFormIsLoading?.(true);\n setError(undefined);\n\n if (options?.fields) {\n _fields = options.fields;\n _arch = options.arch;\n } else {\n _fields = fields;\n _arch = arch;\n }\n\n if (valuesProps && options?.forceRefresh !== true) {\n values = valuesProps;\n } else {\n ({ values, defaultGetCalled: hasDefaultGetCalled } =\n await fetchValuesFromApi({\n fields: _fields,\n arch: _arch!,\n }));\n }\n\n if (actionDomain) {\n values = { ...getValuesForDomain(actionDomain), ...values };\n }\n\n originalFormValues.current = processValues(values, _fields);\n\n assignNewValuesToForm({\n values,\n fields: _fields,\n reset: true,\n isDefaultGet: hasDefaultGetCalled,\n });\n parseForm({ fields: _fields, arch: _arch!, values });\n setFormIsLoading?.(false);\n setFormHasChanges?.(false);\n\n if (hasDefaultGetCalled) {\n setDefaultGetCalled(true);\n }\n };\n\n const cancelUnsavedChanges = async () => {\n return new Promise(async (resolve) => {\n if (formHasChanges()) {\n showUnsavedChangesDialog({\n lang,\n onOk: () => {\n onCancel?.();\n resolve(true);\n },\n onCancel: () => {\n resolve(false);\n },\n });\n } else {\n onCancel?.();\n resolve(true);\n }\n });\n };\n\n const getFormView = async (): Promise<FormView> => {\n if (getDataFromAction) {\n const action =\n await ConnectionProvider.getHandler().getActionStringForModel(model);\n const viewsForAction =\n await ConnectionProvider.getHandler().getViewsForAction({\n action,\n context: parentContext,\n });\n return viewsForAction.views.get(\"form\");\n }\n\n return (await ConnectionProvider.getHandler().getView({\n model,\n type: \"form\",\n context: parentContext,\n })) as FormView;\n };\n\n const assignNewValuesToForm = ({\n values: newValues,\n fields,\n reset,\n isDefaultGet = false,\n }: {\n values: any;\n fields: any;\n reset: boolean;\n isDefaultGet?: boolean;\n }) => {\n const currentValues = reset ? {} : antForm.getFieldsValue(true);\n const mergedValues = { ...currentValues, ...newValues };\n const valuesProcessed = processValues(mergedValues, fields);\n const fieldsToUpdate = Object.keys(fields).map((fieldName) => {\n const fieldValue =\n valuesProcessed[fieldName] !== undefined\n ? valuesProcessed[fieldName]\n : undefined;\n return {\n name: fieldName,\n touched: false,\n value: fieldValue,\n };\n });\n\n if (!isDefaultGet) {\n lastAssignedValues.current = valuesProcessed;\n }\n\n antForm.setFields(fieldsToUpdate);\n };\n\n const fetchValuesFromApi = async ({\n fields,\n arch,\n }: {\n fields: any;\n arch: string;\n }) => {\n let values = {};\n let defaultGetCalled = false;\n\n if (getCurrentId()!) {\n values = (\n await ConnectionProvider.getHandler().readObjects({\n model,\n ids: [getCurrentId()!],\n fields,\n context: parentContext,\n })\n )[0];\n\n const results = await ConnectionProvider.getHandler().search({\n params: [\n [\"res_model\", \"=\", model],\n [\"res_id\", \"=\", getCurrentId()!],\n ],\n fieldsToRetrieve: [\"id\", \"name\"],\n context: getContext(),\n model: \"ir.attachment\",\n });\n setAttachments?.(results);\n } else {\n setAttachments?.([]);\n values = await getDefaultValues(fields);\n defaultGetCalled = true;\n }\n return { values, defaultGetCalled };\n };\n\n const submitApi = async (options?: { callOnSubmitSucceed?: boolean }) => {\n const { callOnSubmitSucceed = true } = options || {};\n\n if (getCurrentId()) {\n const touchedValues = getTouchedValues({\n source: originalFormValues.current,\n target: getCurrentValues(fields),\n fields,\n });\n\n await ConnectionProvider.getHandler().update({\n model,\n id: getCurrentId()!,\n values: { ...touchedValues, ...forcedValues },\n fields,\n context: {\n ...parentContext,\n ...formOoui?.context,\n },\n });\n originalFormValues.current = getCurrentValues(fields);\n } else {\n const currentValues = getCurrentValues(fields);\n\n const newId = await ConnectionProvider.getHandler().create({\n model,\n values: { ...currentValues, ...forcedValues },\n fields,\n context: {\n ...parentContext,\n ...formOoui?.context,\n },\n });\n createdId.current = newId;\n originalFormValues.current = currentValues;\n }\n\n if (postSaveAction) {\n await postSaveAction([getCurrentId()]);\n }\n\n if (!insideButtonModal && callOnSubmitSucceed) {\n onSubmitSucceed?.(getCurrentId(), getValues(), getFormValues());\n }\n };\n\n const submitValues = async (options?: { callOnSubmitSucceed?: boolean }) => {\n const { callOnSubmitSucceed = true } = options || {};\n\n if (!insideButtonModal && callOnSubmitSucceed) {\n onSubmitSucceed?.(getCurrentId(), getValues(), getFormValues());\n }\n };\n\n const submitForm = async (options?: { callOnSubmitSucceed?: boolean }) => {\n let submitSucceed = false;\n const { callOnSubmitSucceed = true } = options || {};\n formSubmitting.current = true;\n\n setError(undefined);\n\n if (\n x2manyPendingLink.current &&\n !formHasChanges() &&\n getCurrentId()! &&\n callOnSubmitSucceed\n ) {\n formSubmitting.current = false;\n setFormHasChanges?.(false);\n onSubmitSucceed?.(\n getCurrentId(),\n getValues(),\n getFormValues(),\n x2manyPendingLink.current,\n );\n x2manyPendingLink.current = false;\n const currentId = getCurrentId()!;\n\n if (mustClearAfterSave) {\n createdId.current = undefined;\n assignNewValuesToForm({ values: {}, fields, reset: true });\n }\n\n return { succeed: true, id: currentId };\n }\n\n if (!formHasChanges() && getCurrentId()! && callOnSubmitSucceed) {\n formSubmitting.current = false;\n setFormHasChanges?.(false);\n onCancel?.();\n return { succeed: true, id: getCurrentId()! };\n }\n\n if (await checkIfFormHasErrors()) {\n formSubmitting.current = false;\n formErrorsDialog(lang);\n return { succeed: false, id: getCurrentId()! };\n }\n\n setIsSubmitting(true);\n setFormIsSaving?.(true);\n\n try {\n if (submitMode === \"api\") {\n await submitApi(options);\n } else {\n await submitValues(options);\n }\n\n if (mustClearAfterSave) {\n createdId.current = undefined;\n assignNewValuesToForm({ values: {}, fields, reset: true });\n }\n\n await fetchValues({ forceRefresh: true });\n submitSucceed = true;\n message.success(t(\"savedRegisters\"));\n } catch (err) {\n formSubmitting.current = false;\n setIsSubmitting(false);\n setFormIsSaving?.(false);\n onSubmitError?.(err);\n message.error(t(\"errorWhileSavingForm\"));\n setError(err?.message ? err.message : err);\n } finally {\n formSubmitting.current = false;\n setFormIsSaving?.(false);\n setIsSubmitting(false);\n }\n\n return { succeed: submitSucceed, id: getCurrentId()! };\n };\n\n const parseForm = ({\n fields,\n arch,\n values,\n operationInProgress = false,\n }: {\n arch: string;\n fields: any;\n values: any;\n operationInProgress?: boolean;\n }) => {\n const ooui = new FormOoui(fields);\n // TODO: Here we must inject `values` to the ooui parser in order to evaluate arch+values and get the new form container\n ooui.parse(arch, {\n readOnly: readOnly || operationInProgress,\n values: convertToPlain2ManyValues(\n {\n ...values,\n ...getAdditionalValues(),\n },\n fields,\n ),\n });\n setFormOoui(ooui);\n\n if (ooui.string && ooui.string !== title) {\n setTitle?.(ooui.string);\n }\n\n if (formModalContext && ooui.string)\n formModalContext.setTitle?.(ooui.string);\n };\n\n const checkFieldsChanges = async ({\n elementHasLostFocus = false,\n }: {\n elementHasLostFocus?: boolean;\n }) => {\n if (formSubmitting.current) return;\n\n const touchedValues = getTouchedValues({\n source: lastAssignedValues.current,\n target: getCurrentValues(fields),\n fields,\n });\n\n const changedFields = Object.keys(touchedValues);\n\n if (changedFields.length !== 0) {\n // We check if there are any field of type text, email, url or char inside the changed values\n // in order to ignore the call, because it will fire when element lost focus\n if (\n checkFieldsType({\n changedFields,\n formOoui: formOoui!,\n types: [\n \"text\",\n \"codeeditor\",\n \"email\",\n \"url\",\n \"char\",\n \"float\",\n \"float_time\",\n \"integer\",\n \"many2one\",\n ],\n }) &&\n elementHasLostFocus !== true\n ) {\n } else {\n const values = processValues(antForm.getFieldsValue(true), fields);\n lastAssignedValues.current = values;\n\n onFieldsChange?.(values);\n setFormHasChanges?.(true);\n\n evaluateChanges(changedFields);\n }\n }\n };\n\n const debouncedCheckFieldsChanges = debounce(checkFieldsChanges, 100);\n\n const evaluateChanges = async (changedFields: any) => {\n try {\n for (let i = 0; i < changedFields.length; i += 1) {\n const changedField = changedFields[i];\n await processFieldOnChange(changedField);\n }\n } catch (err) {\n showErrorDialog(err);\n }\n };\n\n const processFieldOnChange = async (fieldName: string) => {\n const onChangeFieldAction = formOoui?.onChangeFields[fieldName];\n\n if (!onChangeFieldAction) {\n parseForm({\n fields,\n arch: arch!,\n values: getCurrentValues(fields),\n });\n return;\n }\n\n const payload = getOnChangePayload({\n values: {\n ...getCurrentValues(fields),\n context: {\n ...parentContext,\n ...formOoui?.context,\n },\n },\n parentValues: getParentPlainValues?.(),\n onChangeFieldActionArgs: onChangeFieldAction.args,\n });\n\n const response = await ConnectionProvider.getHandler().executeOnChange({\n model,\n action: onChangeFieldAction.method,\n ids: getCurrentId()! ? [getCurrentId()!] : [],\n payload,\n fields,\n });\n\n if (response.value) {\n const processedValues = {\n ...getCurrentValues(fields),\n ...response.value,\n };\n parseForm({ fields, arch: arch!, values: processedValues });\n assignNewValuesToForm({\n values: processedValues,\n fields,\n reset: false,\n });\n }\n\n if (\n response.warning &&\n response.warning.title &&\n response.warning.message &&\n !warningIsShown.current\n ) {\n const { title, message } = response.warning;\n warningIsShown.current = true;\n showWarningDialog(title, message, () => {\n warningIsShown.current = false;\n });\n }\n\n if (response.domain && Object.keys(response.domain).length > 0) {\n const proccessedFields = mergeFieldsDomain({\n fieldsDomain: response.domain,\n fields,\n });\n\n parseForm({\n fields: proccessedFields,\n arch: arch!,\n values: getCurrentValues(proccessedFields),\n });\n setFields(proccessedFields);\n }\n };\n\n async function runObjectButton({\n action,\n context,\n }: {\n action: string;\n context: any;\n }) {\n const response = await ConnectionProvider.getHandler().execute({\n model,\n action,\n payload: [getCurrentId()!],\n context: {\n ...formOoui?.context,\n ...parentContext,\n ...context,\n },\n });\n\n if (\n typeof response === \"object\" &&\n response !== null &&\n Object.keys(response).length === 0 &&\n insideButtonModal\n ) {\n onSubmitSucceed?.(getCurrentId(), getValues(), getFormValues());\n } else if (\n response.type &&\n response.type === \"ir.actions.act_window_close\"\n ) {\n onSubmitSucceed?.(getCurrentId(), getValues(), getFormValues());\n } else if (response.type) {\n let responseContext = {};\n\n if (response.context) {\n responseContext = parseContext({\n context: response.context,\n fields,\n values: getValues(),\n });\n }\n\n await runAction({\n actionData: response,\n context: { ...context, ...responseContext },\n });\n } else {\n await fetchValues({ forceRefresh: true });\n }\n }\n\n async function runWorkflowButton({ action }: { action: string }) {\n const response = await ConnectionProvider.getHandler().executeWorkflow({\n model,\n action,\n payload: getCurrentId()!,\n });\n\n if (response.type && response.type === \"ir.actions.act_window_close\") {\n onSubmitSucceed?.(getCurrentId(), getValues(), getFormValues());\n } else {\n await fetchValues({ forceRefresh: true });\n }\n }\n\n async function runActionButton({\n action,\n context,\n }: {\n action: string;\n context: any;\n }) {\n const actionData = (\n await ConnectionProvider.getHandler().readObjects({\n model: \"ir.actions.actions\",\n ids: [parseInt(action)],\n context: parentContext,\n })\n )[0];\n\n await runAction({ actionData, context });\n }\n\n async function runAction({\n actionData,\n context,\n }: {\n actionData: any;\n context: any;\n }) {\n const { closeParent } =\n (await processAction?.({\n actionData,\n fields,\n values: getValues(),\n context: {\n ...parentContext,\n ...formOoui?.context,\n ...context,\n },\n onRefreshParentValues: () => {\n fetchValues({ forceRefresh: true });\n },\n })) || {};\n\n if (!rootForm && closeParent) {\n onSubmitSucceed?.(getCurrentId(), getValues(), getFormValues());\n }\n }\n\n function elementHasLostFocus() {\n checkFieldsChanges({ elementHasLostFocus: true });\n }\n\n function updateOperationInProgress(value: boolean) {\n parseForm({\n fields,\n arch: arch!,\n values: getCurrentValues(fields),\n operationInProgress: value,\n });\n }\n\n async function executeButtonAction({\n type,\n action,\n context,\n }: {\n type: string;\n action: string;\n context?: any;\n }) {\n // If the type of the button it's a cancel, we just close our form\n if (type === \"cancel\") {\n onCancel?.();\n return;\n }\n\n // We check for required fields\n if (await checkIfFormHasErrors()) {\n formErrorsDialog(lang);\n return;\n }\n\n let mustBlockButtons = false;\n\n try {\n if (!readOnly && (formHasChanges() || getCurrentId() === undefined)) {\n mustBlockButtons = true;\n updateOperationInProgress(true);\n if (submitMode === \"2many\") {\n await submitApi({ callOnSubmitSucceed: false });\n x2manyPendingLink.current = true;\n } else {\n await submitForm({ callOnSubmitSucceed: false });\n }\n }\n\n const additionalContext = x2manyPendingLink.current\n ? getActiveIdsContext()\n : {};\n\n const updatedContext = { ...context, ...additionalContext };\n\n if (type === \"object\") {\n await runObjectButton({ action, context: updatedContext });\n } else if (type === \"workflow\") {\n await runWorkflowButton({ action });\n } else if (type === \"action\") {\n await runActionButton({ action, context: updatedContext });\n }\n mustBlockButtons && updateOperationInProgress(false);\n } catch (err) {\n mustBlockButtons && updateOperationInProgress(false);\n showErrorDialog(err);\n }\n }\n\n const content = () => {\n if (!formOoui && !error) {\n return <Spin />;\n }\n\n if (!model && !formViewProps) {\n return null;\n }\n\n if (!visible) {\n return null;\n }\n\n return (\n <>\n <FormProvider\n getValues={getValues}\n getPlainValues={getPlainValues}\n getFields={getFields}\n domain={actionDomain}\n activeId={id}\n activeModel={model}\n setFieldValue={setFieldValue}\n getFieldValue={getFieldValue}\n executeButtonAction={executeButtonAction}\n getContext={getContext}\n submitForm={submitForm}\n fetchValues={fetchValues}\n formHasChanges={formHasChanges}\n elementHasLostFocus={elementHasLostFocus}\n >\n <AntForm\n form={antForm}\n onFieldsChange={() => {\n debouncedCheckFieldsChanges({ elementHasLostFocus: false });\n }}\n component={false}\n >\n {formOoui && (\n <Container\n container={formOoui.container}\n responsiveBehaviour={responsiveBehaviour}\n />\n )}\n </AntForm>\n </FormProvider>\n </>\n );\n };\n\n const footer = () => {\n return (\n <>\n <Divider />\n <Row justify=\"end\">\n <Space>\n <Button\n icon={<CloseOutlined />}\n disabled={isSubmitting}\n onClick={async () => {\n await cancelUnsavedChanges();\n }}\n >\n Cancel\n </Button>\n <Button\n disabled={isSubmitting || readOnly}\n loading={isSubmitting}\n icon={<CheckOutlined />}\n onClick={async () => {\n await submitForm();\n }}\n type=\"primary\"\n >\n OK\n </Button>\n </Space>\n </Row>\n </>\n );\n };\n\n if (!visible) {\n return null;\n }\n\n return (\n <Measure\n bounds\n onResize={(contentRect) => {\n setContainerWidth(contentRect.bounds?.width!);\n }}\n >\n {({ measureRef }) => (\n <div className=\"pb-2\" ref={measureRef}>\n {error && <ErrorAlert className=\"mt-5 mb-10\" error={error} />}\n {content()}\n {showFooter && footer()}\n </div>\n )}\n </Measure>\n );\n}\n\nexport default forwardRef(Form);\n","import React, { useEffect, useState } from \"react\";\nimport { Button, Col, Modal, Row, Tooltip } from \"antd\";\nimport Form, { FormProps } from \"@/widgets/views/Form\";\nimport useWindowDimensions from \"@/hooks/useWindowDimensions\";\nimport FormModalProvider from \"@/context/FormModalContext\";\nimport { StarOutlined, StarFilled } from \"@ant-design/icons\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\n\ntype FormModalProps = FormProps & {\n visible: boolean;\n title?: string;\n buttonModal?: boolean;\n isMenuAction?: boolean;\n actionData?: any;\n};\n\nexport const FormModal = (props: FormModalProps) => {\n const {\n visible,\n id,\n title,\n buttonModal = false,\n onCancel,\n isMenuAction = false,\n actionData,\n ...rest\n } = props;\n\n const { model } = rest;\n\n const { modalWidth } = useWindowDimensions();\n const [formTitle, setFormTitle] = useState<string>(title!);\n const [isFavourite, setIsFavourite] = useState(false);\n const [currentShortcutId, setCurrentShortcutId] = useState<number>();\n const { action_id, res_id, action_type, view_id } = actionData || {};\n\n useEffect(() => {\n if (isMenuAction) {\n checkFavourite();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [actionData, isMenuAction]);\n\n async function checkFavourite() {\n const result = await ConnectionProvider.getHandler().isShortcutFavorite({\n action_id,\n action_type,\n view_id,\n res_id: res_id || false,\n });\n\n setIsFavourite(result !== false);\n\n if (result !== false) {\n setCurrentShortcutId(result as number);\n }\n }\n\n async function toggleFavourite() {\n if (isFavourite && currentShortcutId) {\n await ConnectionProvider.getHandler().removeFavourite({\n shortcut_id: currentShortcutId,\n });\n } else {\n const { action_id, res_id, action_type, view_id } = actionData;\n\n await ConnectionProvider.getHandler().addFavourite({\n action_id,\n action_type,\n view_id,\n res_id: res_id || false,\n });\n }\n\n setIsFavourite(!isFavourite);\n }\n\n function header() {\n return (\n <Row align=\"middle\">\n <Col>\n <Button\n type={isFavourite ? \"primary\" : \"default\"}\n icon={\n isFavourite ? (\n <StarFilled style={{ color: \"white\" }} />\n ) : (\n <StarOutlined />\n )\n }\n style={{ width: 30 }}\n onClick={toggleFavourite}\n ></Button>\n </Col>\n <Col style={{ paddingLeft: 10 }}>{formTitle}</Col>\n </Row>\n );\n }\n\n const contentWidth = modalWidth * 0.95;\n return (\n <FormModalProvider setTitle={setFormTitle}>\n <Modal\n title={isMenuAction ? header() : formTitle}\n centered\n width={modalWidth}\n open={visible}\n footer={null}\n destroyOnClose\n onCancel={onCancel}\n maskClosable={false}\n >\n <Form\n key={`${model}-${id}-${action_id}-${res_id}-${action_type}-${view_id}-${title}`}\n id={id}\n showFooter={true}\n insideButtonModal={buttonModal}\n onCancel={onCancel}\n parentWidth={contentWidth}\n {...rest}\n />\n </Modal>\n </FormModalProvider>\n );\n};\n","import { DatePicker } from \"antd\";\n\nimport React from \"react\";\nimport Field from \"@/common/Field\";\nimport { WidgetProps } from \"@/types\";\n\nexport const DateRangePicker = (props: WidgetProps) => {\n return (\n <Field {...props} layout={\"vertical\"}>\n <DatePicker.RangePicker\n allowEmpty={[true, true]}\n format={\"DD/MM/YYYY\"}\n ></DatePicker.RangePicker>\n </Field>\n );\n};\n","import { TimePicker as AntTimePicker } from \"antd\";\nimport { useRef } from \"react\";\nimport { Dayjs } from \"dayjs\";\n\ninterface TimePickerProps {\n value?: Dayjs | null;\n onChange: (newValue: Dayjs | null, timestring?: string) => void;\n numberOfSelectsToHide?: number;\n [key: string]: any; // Accept any additional props\n}\n\nexport const TimePicker = ({\n value,\n onChange,\n numberOfSelectsToHide = 2,\n ...rest\n}: TimePickerProps) => {\n const picker = useRef<any>();\n const pickerSelectedTimes = useRef(0);\n return (\n <AntTimePicker\n {...rest}\n ref={picker}\n value={value}\n onChange={onChange}\n showNow={false}\n changeOnBlur={true}\n onSelect={(newValue) => {\n onChange?.(newValue);\n pickerSelectedTimes.current += 1;\n if (pickerSelectedTimes.current === numberOfSelectsToHide) {\n picker.current?.blur();\n pickerSelectedTimes.current = 0;\n }\n }}\n />\n );\n};\n","import { DatePicker, Row, Col } from \"antd\";\nimport Field from \"@/common/Field\";\nimport { Field as FieldOoui, Label as LabelOoui } from \"@gisce/ooui\";\nimport { WidgetProps } from \"@/types\";\nimport Label from \"@/widgets/base/Label\";\nimport { TimePicker } from \"../../../common/TimePicker\";\n\nexport const DateTimeRangePicker = (props: WidgetProps) => {\n const { ooui, showLabel = false } = props;\n const { label, id } = ooui;\n\n const fields = [\n new FieldOoui({\n name: id + \"#date\",\n label: \"\",\n }),\n new FieldOoui({\n name: id + \"#time\",\n label: \"\",\n }),\n ];\n\n return (\n <>\n {showLabel && (\n <Label\n ooui={\n new LabelOoui({\n name: id + \"_label\",\n string: label,\n help: ooui.tooltip,\n fieldForLabel: id,\n })\n }\n align={\"left\"}\n />\n )}\n <Row align={\"bottom\"} className=\"p-0\">\n <Col className=\"mr-2\">\n <Field {...props} ooui={fields[0]} showLabel={false}>\n <DatePicker.RangePicker\n className=\"w-60\"\n allowEmpty={[true, true]}\n format={\"DD/MM/YYYY\"}\n ></DatePicker.RangePicker>\n </Field>\n </Col>\n <Col>\n <Field {...props} ooui={fields[1]} showLabel={false}>\n <TimeRangePicker />\n </Field>\n </Col>\n </Row>\n </>\n );\n};\n\nconst TimeRangePicker = ({\n value,\n onChange,\n}: {\n value?: any;\n onChange?: (newValue: any) => void;\n}) => {\n return (\n <div style={{ marginTop: 5 }}>\n <TimePicker\n placeholder=\"Start time\"\n format={\"HH:mm\"}\n style={{ width: 115, marginRight: 10 }}\n value={value?.[0]}\n onChange={(newValue) => {\n onChange?.([newValue, value?.[1]]);\n }}\n />\n <TimePicker\n placeholder=\"End time\"\n style={{ width: 115 }}\n format={\"HH:mm\"}\n value={value?.[1]}\n onChange={(newValue) => {\n onChange?.([value?.[0], newValue]);\n }}\n />\n </div>\n );\n};\n","import React, { useContext } from \"react\";\nimport { InputNumber, theme } from \"antd\";\nimport Field from \"@/common/Field\";\nimport { Float as FloatOoui } from \"@gisce/ooui\";\nimport { WidgetProps } from \"@/types\";\n\nimport { FormContext, FormContextType } from \"@/context/FormContext\";\nconst { useToken } = theme;\n\nexport const Float = (props: WidgetProps) => {\n const { ooui } = props;\n const { id, decimalDigits, readOnly, required } = ooui as FloatOoui;\n const { token } = useToken();\n\n const requiredStyle =\n required && !readOnly\n ? { backgroundColor: token.colorPrimaryBg }\n : undefined;\n const formContext = useContext(FormContext) as FormContextType;\n const { elementHasLostFocus } = formContext || {};\n\n return (\n <Field required={required} type={\"number\"} {...props}>\n <InputNumber\n disabled={readOnly}\n className={\"w-full\"}\n style={requiredStyle}\n id={id}\n precision={decimalDigits}\n formatter={(value) => {\n return `${value}`.replace(/[^0-9\\.\\-]+/g, \"\");\n }}\n decimalSeparator={\".\"}\n onBlur={elementHasLostFocus}\n />\n </Field>\n );\n};\n","import React, { useContext } from \"react\";\nimport { InputNumber, theme } from \"antd\";\nimport Field from \"@/common/Field\";\nimport { WidgetProps } from \"@/types\";\nimport { FormContext, FormContextType } from \"@/context/FormContext\";\nconst { useToken } = theme;\n\ntype IntegerProps = WidgetProps & {\n onChange?: (newValue: number) => void;\n};\n\nexport const Integer = (props: IntegerProps) => {\n const { ooui, onChange } = props;\n const { id, readOnly, required } = ooui;\n const { token } = useToken();\n const requiredStyle =\n required && !readOnly\n ? { backgroundColor: token.colorPrimaryBg }\n : undefined;\n const formContext = useContext(FormContext) as FormContextType;\n const { elementHasLostFocus } = formContext || {};\n\n return (\n <Field required={required} type={\"number\"} {...props}>\n <InputNumber\n id={id}\n className={\"w-full \"}\n disabled={readOnly}\n formatter={(value) => {\n // Check if value is not undefined and is a valid number\n if (value === undefined) {\n return \"\";\n }\n\n if (typeof value === \"string\" && !isNaN(parseFloat(value))) {\n const truncatedValue = Math.trunc(parseFloat(value));\n return `${truncatedValue}`.replace(/[^0-9\\-]+/g, \"\");\n } else if (typeof value === \"number\") {\n const truncatedValue = Math.trunc(value);\n return `${truncatedValue}`.replace(/[^0-9\\-]+/g, \"\");\n }\n\n return \"\";\n }}\n onChange={(newValue: any) => {\n const newNumber = newValue as number;\n onChange?.(newNumber);\n }}\n onBlur={elementHasLostFocus}\n precision={0}\n style={requiredStyle}\n />\n </Field>\n );\n};\n","import React from \"react\";\nimport { Row, Col } from \"antd\";\nimport { Float } from \"@/widgets/base/Float\";\nimport { Integer } from \"@/widgets/base/Integer\";\nimport { Integer as IntegerOoui, Label as LabelOoui } from \"@gisce/ooui\";\nimport Label from \"@/widgets/base/Label\";\nimport { WidgetProps } from \"@/types\";\n\ntype Props = {\n ooui: any;\n};\n\nexport function PairFields(props: WidgetProps): React.ReactElement {\n const { ooui, showLabel } = props;\n const { id, label, tooltip } = ooui;\n const Widget = ooui instanceof IntegerOoui ? Integer : Float;\n\n const getWidget = (suffix: string) => {\n return (\n <Widget\n ooui={{\n ...(ooui as any),\n id: id + suffix,\n label: \"\",\n tooltip: undefined,\n }}\n layout=\"vertical\"\n />\n );\n };\n\n return (\n <>\n {showLabel && (\n <Label\n ooui={\n new LabelOoui({\n name: id + \"_label\",\n string: label,\n help: tooltip,\n fieldForLabel: id,\n })\n }\n align={\"left\"}\n />\n )}\n <Row align={\"bottom\"} className=\"mt-0\" wrap={false}>\n <Col>{getWidget(\"#from\")}</Col>\n <Col className=\"pb-1\">\n <span className=\"pl-2 pr-2 h-full\"> - </span>\n </Col>\n <Col>{getWidget(\"#to\")}</Col>\n </Row>\n </>\n );\n}\n","import React from \"react\";\nimport { Select, theme } from \"antd\";\nimport styled from \"styled-components\";\n\nimport Field from \"@/common/Field\";\nimport { Selection as SelectionOoui } from \"@gisce/ooui\";\nimport { WidgetProps } from \"@/types\";\n\nconst { defaultAlgorithm, defaultSeed } = theme;\n\nconst mapToken = defaultAlgorithm(defaultSeed);\n\nconst { Option } = Select;\n\nexport const MultiSelection = (props: WidgetProps) => {\n const { ooui } = props;\n const { required } = ooui;\n\n return (\n <Field required={required} type={\"any\"} {...props}>\n <MultiSelectionInput {...props} />\n </Field>\n );\n};\n\ntype SelectionInputProps = WidgetProps & {\n onChange?: (value: any) => void;\n value?: string[];\n};\n\nexport const MultiSelectionInput = (props: SelectionInputProps) => {\n const { ooui, onChange, value } = props;\n const { selectionValues, readOnly, required } = ooui as SelectionOoui;\n\n const values = Array.from(selectionValues.entries());\n\n const options =\n values &&\n values.length &&\n values\n .filter((optionValueKeyPair) => {\n const [optionKey] = optionValueKeyPair;\n if (!value) {\n return true;\n }\n return !value.includes(optionKey);\n })\n .map((entry: string[]) => {\n const [key, value] = entry;\n return (\n <Option key={key} value={value}>\n {value}\n </Option>\n );\n });\n\n const CustomSelect: any = required && !readOnly ? RequiredSelect : Select;\n\n function handleChange(changedValues: string[]) {\n const keysForChangedValues = changedValues.map((changedValue) => {\n const entry = values.find(([key, value]) => changedValue === value);\n return entry && entry[0];\n });\n\n if (keysForChangedValues.length === 0) {\n onChange?.(undefined);\n return;\n }\n\n onChange?.(keysForChangedValues);\n }\n\n return (\n <CustomSelect\n disabled={readOnly}\n onChange={handleChange}\n value={value?.map((key) => selectionValues.get(key))}\n mode=\"multiple\"\n showArrow={true}\n >\n {options}\n </CustomSelect>\n );\n};\n\nconst RequiredSelect = styled(Select)`\n &.ant-select:not(.ant-select-customize-input) .ant-select-selector {\n background-color: ${mapToken.colorPrimaryBg};\n }\n`;\n","import React, { useContext } from \"react\";\n\nimport { Char } from \"@/widgets/base/Char\";\nimport { Selection } from \"@/widgets/base/Selection\";\nimport { DateRangePicker } from \"./DateRangePicker\";\nimport { DateTimeRangePicker } from \"./DateTimeRangePicker\";\nimport { PairFields } from \"./PairFields\";\n\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\nimport {\n Field,\n SearchFieldTypes,\n Selection as SelectionOoui,\n} from \"@gisce/ooui\";\nimport { MultiSelection } from \"@/widgets/base/MultiSelection\";\n\ntype Props = {\n field: Field;\n};\n\nexport function SearchField(props: Props) {\n const { field } = props;\n field.readOnly = false;\n field.required = false;\n\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n const widgetType = field.type;\n\n switch (widgetType) {\n case SearchFieldTypes.boolean: {\n const ooui = new SelectionOoui({\n name: field._id,\n string: field.label,\n selection: [\n [\"true\", t(\"true\")],\n [\"false\", t(\"false\")],\n ],\n });\n\n return <Selection layout=\"vertical\" ooui={ooui} showLabel />;\n }\n case SearchFieldTypes.float:\n case SearchFieldTypes.progressbar:\n case SearchFieldTypes.float_time:\n case SearchFieldTypes.integer: {\n return <PairFields ooui={field} showLabel />;\n }\n case SearchFieldTypes.date: {\n return <DateRangePicker ooui={field} layout=\"vertical\" showLabel />;\n }\n case SearchFieldTypes.datetime: {\n return <DateTimeRangePicker ooui={field} layout=\"vertical\" showLabel />;\n }\n case SearchFieldTypes.selection: {\n return <MultiSelection layout=\"vertical\" ooui={field} showLabel />;\n }\n default: {\n return <Char ooui={field} layout=\"vertical\" showLabel isSearchField />;\n }\n }\n}\n","import { ReactElement, useContext } from \"react\";\n\nimport { Row, Col, Button } from \"antd\";\nimport {\n DownOutlined,\n UpOutlined,\n SearchOutlined,\n ClearOutlined,\n} from \"@ant-design/icons\";\n\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\ntype Props = {\n advancedFilter: boolean;\n isSearching: boolean;\n onAdvancedFilterToggle: () => void;\n onClear: () => void;\n};\n\nexport function SearchBottomBar(props: Props): ReactElement {\n const { onAdvancedFilterToggle, advancedFilter, onClear, isSearching } =\n props;\n\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n return (\n <Row>\n <Col span={12} className=\"text-left pt-4 pb-2 pl-2\">\n <a className=\"text-xs\" onClick={onAdvancedFilterToggle}>\n {advancedFilter ? (\n <UpOutlined className=\"pr-1\" />\n ) : (\n <DownOutlined className=\"pr-1\" />\n )}\n {advancedFilter ? t(\"simple_search\") : t(\"advanced_search\")}\n </a>\n </Col>\n <Col span={12} className=\"text-right pb-2\">\n <Button className=\"mr-5\" icon={<ClearOutlined />} onClick={onClear}>\n {t(\"clear\")}\n </Button>\n <Button\n icon={<SearchOutlined />}\n loading={isSearching}\n className=\"mr-2\"\n type=\"primary\"\n htmlType=\"submit\"\n >\n {t(\"search\")}\n </Button>\n </Col>\n </Row>\n );\n}\n","import React, { useContext } from \"react\";\n\nimport { Integer } from \"@/widgets/base/Integer\";\nimport { Row, Space } from \"antd\";\nimport { Integer as IntegerOoui } from \"@gisce/ooui\";\n\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\ntype SearchParamsProps = {\n onLimitChange?: (limit: number) => void;\n};\n\nexport function SearchParams(props: SearchParamsProps): React.ReactElement {\n const { onLimitChange } = props;\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n const limitOoui = new IntegerOoui({ name: \"limit\" });\n const offsetOoui = new IntegerOoui({ name: \"offset\" });\n return (\n <div className=\"pl-2 pt-2\">\n <Row key={\"count_params\"}>{t(\"parameters\")}</Row>\n <Space align=\"center\">\n {t(\"limit\") + \" :\"}\n <Integer\n ooui={limitOoui}\n onChange={(newValue: number) => {\n onLimitChange?.(newValue);\n }}\n />\n {t(\"first\") + \" :\"}\n <Integer ooui={offsetOoui} />\n </Space>\n </div>\n );\n}\n","import { useEffect, useRef, useState } from \"react\";\nimport { Form, Row, Col, Alert, theme } from \"antd\";\nimport useDeepCompareEffect from \"use-deep-compare-effect\";\n\nimport {\n SearchFilter as SearchFilterOoui,\n Container,\n Field,\n} from \"@gisce/ooui\";\n\nimport { SearchField } from \"./SearchField\";\nimport { SearchBottomBar } from \"./SearchBottomBar\";\nimport { SearchFields } from \"@/types\";\nimport { SearchParams } from \"./SearchParams\";\n\nimport { getParamsForFields } from \"@/helpers/searchHelper\";\nimport Measure from \"react-measure\";\nconst { useToken } = theme;\n\ntype Props = {\n fields: any;\n searchFields: SearchFields;\n onClear: () => void;\n onSubmit: (values: any) => void;\n isSearching: boolean;\n limit: number;\n offset: number;\n onLimitChange?: (limit: number) => void;\n searchVisible?: boolean;\n setSearchFilterHeight?: (height: number) => void;\n searchError?: string;\n searchValues?: any;\n showLimitOptions?: boolean;\n};\n\nfunction SearchFilter(props: Props) {\n const {\n fields,\n searchFields = { primary: [], secondary: [] },\n onClear,\n onSubmit,\n isSearching,\n offset,\n limit,\n onLimitChange,\n searchVisible,\n setSearchFilterHeight,\n searchError,\n searchValues,\n showLimitOptions = true,\n } = props;\n\n const [simpleSearchFields, setSimpleSearchFields] = useState<Container>();\n const [advancedSearchFields, setAdvancedSearchFields] = useState<Container>();\n const [advancedFilter, setAdvancedFilter] = useState(false);\n const sfo = useRef<SearchFilterOoui>();\n const { token } = useToken();\n\n const [form] = Form.useForm();\n\n useEffect(() => {\n form.setFieldsValue(searchValues);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [searchValues]);\n\n const getRowsAndCols = () => {\n if (!advancedSearchFields) {\n return;\n }\n\n const fields = advancedFilter ? advancedSearchFields : simpleSearchFields;\n const rows = fields?.rows;\n\n return rows?.map((row, i) => {\n return (\n <Row key={i}>\n {row.map((item, j) => {\n return (\n <Col xs={24} className=\"p-2\" xl={6} key={j}>\n <SearchField field={item as Field} />\n </Col>\n );\n })}\n </Row>\n );\n });\n };\n\n useDeepCompareEffect(() => {\n setAdvancedFilter(false);\n sfo.current = new SearchFilterOoui(searchFields, fields);\n sfo.current.parse();\n setSimpleSearchFields(sfo.current._simpleSearchContainer);\n setAdvancedSearchFields(sfo.current._advancedSearchContainer);\n }, [fields, searchFields]);\n\n const rows = getRowsAndCols();\n\n const onFinish = (values: any) => {\n const { limit, offset } = values;\n delete values.offset;\n delete values.limit;\n const newParams = getParamsForFields(\n values,\n sfo.current?._advancedSearchContainer,\n );\n\n onSubmit({ params: newParams, offset, limit, searchValues: values });\n };\n\n return (\n <Measure\n bounds\n onResize={(contentRect) => {\n setSearchFilterHeight?.(contentRect.bounds?.height!);\n }}\n >\n {({ measureRef }) => (\n <div ref={measureRef}>\n <div style={{ display: searchVisible ? \"block\" : \"none\" }}>\n <Form\n className=\"p-3 shadow-md\"\n style={{ borderRadius: token.borderRadius }}\n form={form}\n onFinish={onFinish}\n initialValues={{ offset, limit }}\n >\n {rows}\n {advancedFilter && showLimitOptions && (\n <SearchParams onLimitChange={onLimitChange} />\n )}\n <SearchBottomBar\n advancedFilter={advancedFilter}\n onAdvancedFilterToggle={() => {\n setAdvancedFilter(!advancedFilter);\n }}\n onClear={() => {\n form.resetFields();\n onClear();\n }}\n isSearching={isSearching}\n />\n </Form>\n {searchError && (\n <Alert\n className=\"mt-10\"\n message={searchError}\n type=\"error\"\n banner\n />\n )}\n <div className=\"pb-5\" />\n </div>\n </div>\n )}\n </Measure>\n );\n}\n\nexport default SearchFilter;\n","/**\n * This function calculate the width of a string based on its length\n * @param {String} text\n * @param {String} font\n */\nconst getTextWidth = (text: string, font = \"14px -apple-system\") => {\n const canvas = document.createElement(\"canvas\");\n const context = canvas.getContext(\"2d\");\n context!.font = font;\n const metrics = context!.measureText(text);\n return Math.round((metrics.width + 80) * 1.5);\n};\n\n/**\n * This function calculates the width of each column based in all CELL VALUES\n * @param {Array} columns\n * @param {Array} source\n * @param {Number} maxWidthPerCell\n */\nexport const calculateColumnsWidth = (\n columns: any,\n source: any,\n maxWidthPerCell = 500,\n) => {\n if (columns.length === 0) {\n return { columns };\n }\n\n // First we calculate the width for each column\n // The column width is based on its string length\n\n const columnsWithWidth = columns.map((column: any) =>\n Object.assign(column, {\n width: getTextWidth(column.title),\n }),\n );\n\n // Since we have a minimum width (column's width already calculated),\n // now we are going to verify if the cell value is bigger\n // than the column width which is already set\n\n source.map((entry: any) => {\n columnsWithWidth.map((column: any, indexColumn: number) => {\n const columnWidth = column.width;\n const cellValue = (entry[column.key] as string) || \"\";\n\n // Get the string width based on chars length\n let cellWidth = getTextWidth(cellValue);\n\n // Verify if the cell value is smaller than column's width\n if (cellWidth < columnWidth) cellWidth = columnWidth;\n\n // Verify if the cell value width is bigger than our max width flag\n if (cellWidth > maxWidthPerCell) cellWidth = maxWidthPerCell;\n\n // Update the column width\n columnsWithWidth[indexColumn].width = cellWidth;\n });\n });\n\n // Sum of all columns width to determine the table max width\n const tableWidth = columnsWithWidth\n .map((column: any) => column.width)\n .reduce((a: any, b: any) => {\n return a + b;\n });\n\n return {\n columns: columnsWithWidth,\n source,\n tableWidth,\n };\n};\n","import styled from \"styled-components\";\nimport React, { useContext, useState } from \"react\";\nimport { Spin } from \"antd\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport Link from \"antd/es/typography/Link\";\n\nexport const Container = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n`;\n\nexport const SelectAllRecordsRow = ({\n numberOfVisibleSelectedRows,\n totalRecords,\n numberOfTotalRows,\n onSelectAllRecords,\n numberOfRealSelectedRows,\n}: {\n numberOfVisibleSelectedRows: number;\n totalRecords: number;\n numberOfTotalRows: number;\n numberOfRealSelectedRows: number;\n onSelectAllRecords: () => Promise<void>;\n}) => {\n const [loading, setLoading] = useState(false);\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n const translations = {\n recordsSelected: t(\"recordsSelected\"),\n selectAllRecords: t(\"selectAllRecords\"),\n allRecordsSelected: t(\"allRecordsSelected\"),\n };\n\n if (numberOfTotalRows === 0) {\n return null;\n }\n\n if (\n numberOfVisibleSelectedRows < numberOfTotalRows &&\n numberOfRealSelectedRows <= numberOfTotalRows\n ) {\n return null;\n }\n\n if (totalRecords === numberOfVisibleSelectedRows) {\n return null;\n }\n\n const handleClick = async (event: any) => {\n event.preventDefault(); // prevent the default action (navigation) from happening\n event.stopPropagation();\n setLoading(true);\n await onSelectAllRecords();\n setLoading(false);\n };\n\n const selectRowsComponent = (\n <span>\n {translations.recordsSelected.replace(\n \"{numberOfSelectedRows}\",\n numberOfVisibleSelectedRows.toString(),\n ) + \" \"}\n\n {loading ? (\n <Spin />\n ) : (\n <Link onClick={handleClick} style={{ fontWeight: 600 }}>\n {translations.selectAllRecords.replace(\n \"{totalRecords}\",\n totalRecords.toString(),\n )}\n </Link>\n )}\n </span>\n );\n\n const allRowsAreSelected = (\n <span style={{ fontWeight: 600 }}>\n {translations.allRecordsSelected.replace(\n \"{totalRecords}\",\n numberOfRealSelectedRows.toString(),\n ) + \" \"}\n </span>\n );\n\n return (\n <Container>\n {numberOfRealSelectedRows > numberOfTotalRows\n ? allRowsAreSelected\n : selectRowsComponent}\n </Container>\n );\n};\n","function parseStringToFloat(text?: string) {\n if (!text) {\n return undefined;\n }\n\n try {\n if (text.includes(\":\")) {\n const splitted = text.trim().split(\":\");\n return (\n Math.round(\n (parseInt(splitted[0]) + parseInt(splitted[1]) / 60.0) * 10000,\n ) / 10000\n );\n } else {\n return parseFloat(text.trim());\n }\n } catch (err) {\n return 0;\n }\n}\n\nfunction parseFloatToString(num?: number) {\n if (num === undefined) {\n return undefined;\n }\n\n let finalString;\n let hours = Math.floor(Math.abs(num));\n let mins = Math.round((Math.abs(num) % 1) * 100) / 100;\n\n if (mins >= 1) {\n hours = hours + 1;\n mins = 0.0;\n } else {\n mins = mins * 60;\n }\n\n const hoursString = hours.toLocaleString(\"en-US\", {\n minimumIntegerDigits: 2,\n maximumFractionDigits: 0,\n useGrouping: false,\n });\n const minsStrings = mins.toLocaleString(\"en-US\", {\n minimumIntegerDigits: 2,\n maximumFractionDigits: 0,\n useGrouping: false,\n });\n\n finalString = `${hoursString}:${minsStrings}`;\n\n if (num < 0) {\n finalString = \"-\" + finalString;\n }\n\n return finalString;\n}\n\nexport { parseStringToFloat, parseFloatToString };\n","import React from \"react\";\nimport { Progress } from \"antd\";\nimport Field from \"@/common/Field\";\nimport { WidgetProps } from \"@/types\";\nimport styled from \"styled-components\";\n\nexport const ProgressBar = (props: WidgetProps) => {\n return (\n <Field {...props}>\n <ProgressBarInput />\n </Field>\n );\n};\n\nexport const ProgressBarInput = ({ value }: { value?: number }) => {\n const textValue = `${(value || 0).toLocaleString(\"en-US\", {\n minimumIntegerDigits: 1,\n maximumFractionDigits: 4,\n useGrouping: false,\n })}%`;\n\n return (\n <div style={{ flex: 1, display: \"flex\", alignItems: \"center\" }}>\n <StyledProgress percent={value} />\n <div style={{ flexGrow: 1, paddingLeft: 10 }}>{textValue}</div>\n </div>\n );\n};\n\nconst StyledProgress = styled(Progress)`\n .ant-progress-outer {\n margin-right: 0px;\n padding-right: 0px;\n }\n .ant-progress-text {\n display: none;\n }\n`;\n","import React, { useContext } from \"react\";\nimport { Modal, Button, Space } from \"antd\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\ntype Props = {\n visible: boolean;\n items: any[];\n onItemClicked: (item: any) => void;\n onCancel: () => void;\n};\n\nexport const Many2oneSuffixModal = (props: Props) => {\n const { visible, onCancel, items = [], onItemClicked } = props;\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n return (\n <Modal\n title={t(\"selectAction\")}\n centered\n open={visible}\n footer={null}\n destroyOnClose\n onCancel={onCancel}\n maskClosable={false}\n >\n <Space direction=\"vertical\" className=\"w-full\">\n {items.map((item) => {\n return (\n <Button\n className=\"w-full\"\n onClick={() => {\n onItemClicked(item);\n }}\n >\n {item.name}\n </Button>\n );\n })}\n </Space>\n </Modal>\n );\n};\n","import React, { useContext, useState, useEffect } from \"react\";\nimport {\n RightCircleOutlined,\n PrinterOutlined,\n ThunderboltOutlined,\n EnterOutlined,\n} from \"@ant-design/icons\";\nimport { Menu, Dropdown, Spin } from \"antd\";\nimport {\n TabManagerContext,\n TabManagerContextType,\n} from \"@/context/TabManagerContext\";\nimport { FormView } from \"@/types\";\nimport { Many2oneSuffixModal } from \"./Many2oneSuffixModal\";\nimport {\n ContentRootContext,\n ContentRootContextType,\n} from \"@/context/ContentRootContext\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport { processValues } from \"@/helpers/formHelper\";\nimport showErrorDialog from \"@/ui/ActionErrorDialog\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport { parseContextFields, parseDomainFields } from \"@gisce/ooui\";\n\ntype Props = {\n id: number;\n model: string;\n context?: any;\n};\n\nexport const Many2oneSuffix = (props: Props) => {\n const { id, model, context = {} } = props;\n const [actionModalVisible, setActionModalVisible] = useState<boolean>(false);\n const [printModalVisible, setPrintModalVisible] = useState<boolean>(false);\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [formView, setFormView] = useState<FormView>();\n const [targetValues, setTargetValues] = useState<any>();\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n const tabManagerContext = useContext(\n TabManagerContext,\n ) as TabManagerContextType;\n const { openRelate } = tabManagerContext || {};\n\n const contentRootContext = useContext(\n ContentRootContext,\n ) as ContentRootContextType;\n const { processAction } = contentRootContext || {};\n\n if (!id) {\n return null;\n }\n\n async function fetchData() {\n setIsLoading(true);\n\n try {\n const formView = (await ConnectionProvider.getHandler().getView({\n model,\n type: \"form\",\n context,\n })) as FormView;\n setFormView(formView);\n let fields: string[] = [];\n const { toolbar } = formView;\n toolbar.action\n ?.filter((item: any) => item.hasOwnProperty(\"context\"))\n .map((item: any) => fields.push(...parseContextFields(item.context)));\n toolbar.action\n ?.filter((item: any) => item.hasOwnProperty(\"domain\"))\n .map((item: any) => fields.push(...parseDomainFields(item.domain)));\n toolbar.relate\n ?.filter((item: any) => item.hasOwnProperty(\"context\"))\n .map((item: any) => fields.push(...parseContextFields(item.context)));\n toolbar.relate\n ?.filter((item: any) => item.hasOwnProperty(\"domain\"))\n .map((item: any) => fields.push(...parseDomainFields(item.domain)));\n toolbar.print\n ?.filter((item: any) => item.hasOwnProperty(\"context\"))\n .map((item: any) => fields.push(...parseContextFields(item.context)));\n fields = fields.filter(\n (i) => Object.keys(formView.fields).indexOf(i) > -1,\n );\n\n let values = {};\n\n // Remove duplicates in fields string[] array\n fields = [...new Set(fields)];\n\n if (fields.length > 0) {\n values = (\n await ConnectionProvider.getHandler().readObjects({\n model,\n ids: [id],\n fieldsToRetrieve: fields,\n context,\n })\n )[0];\n }\n values = { ...processValues(values, fields), active_id: id };\n setTargetValues(values);\n\n setIsLoading(false);\n } catch (err) {\n setIsLoading(false);\n showErrorDialog(err);\n }\n }\n\n function menu() {\n if (isLoading) {\n return (\n <Menu>\n <div style={{ padding: 15 }}>\n <Spin />\n </div>\n </Menu>\n );\n }\n\n if (!formView || !formView.toolbar) {\n return <Menu />;\n }\n\n const relateItems = formView?.toolbar?.relate.map((item: any) => {\n return <Menu.Item key={item.id}>{item.name}</Menu.Item>;\n });\n\n return (\n <Menu onClick={handleMenuClick}>\n {[\n <Menu.Item\n key=\"action\"\n disabled={\n !formView!.toolbar.action || formView!.toolbar.action.length === 0\n }\n icon={<ThunderboltOutlined />}\n >\n {t(\"action\")}\n </Menu.Item>,\n <Menu.Item\n key=\"print\"\n disabled={\n !formView!.toolbar.print || formView!.toolbar.print.length === 0\n }\n icon={<PrinterOutlined />}\n >\n {t(\"report\")}\n </Menu.Item>,\n <Menu.Divider />,\n <Menu.ItemGroup\n title={\n <>\n <EnterOutlined /> <span> {t(\"related\")}</span>\n </>\n }\n >\n {relateItems}\n </Menu.ItemGroup>,\n ]}\n </Menu>\n );\n }\n\n function handleMenuClick(event: any) {\n if (event.key === \"action\") {\n setActionModalVisible(true);\n } else if (event.key === \"print\") {\n setPrintModalVisible(true);\n } else {\n const relateItemClicked = formView!.toolbar.relate.find((item: any) => {\n return item.id === parseInt(event.key);\n });\n if (!relateItemClicked) {\n return;\n }\n\n openRelate({\n relateData: relateItemClicked,\n values: targetValues,\n fields: formView!.fields,\n action_id: relateItemClicked.id,\n action_type: relateItemClicked.type,\n });\n }\n }\n\n function onActionItemClicked(actionData: any) {\n setActionModalVisible(false);\n processAction?.({\n actionData,\n values: targetValues,\n fields: formView!.fields,\n context: { active_id: id, active_ids: [id] },\n });\n }\n\n function onPrintItemClicked(reportData: any) {\n setPrintModalVisible(false);\n processAction?.({\n actionData: {\n ...reportData,\n datas: { ...(reportData.datas || {}), ids: [id] },\n },\n values: targetValues,\n fields: formView!.fields,\n });\n }\n\n return (\n <>\n <Dropdown overlay={menu()} trigger={[\"click\"]}>\n <RightCircleOutlined\n style={{ color: \"rgba(0,0,0,.45)\" }}\n onClick={(e) => {\n e.preventDefault();\n fetchData();\n }}\n />\n </Dropdown>\n <Many2oneSuffixModal\n visible={actionModalVisible}\n items={formView?.toolbar?.action}\n onItemClicked={onActionItemClicked}\n onCancel={() => setActionModalVisible(false)}\n />\n <Many2oneSuffixModal\n visible={printModalVisible}\n items={formView?.toolbar?.print}\n onItemClicked={onPrintItemClicked}\n onCancel={() => setPrintModalVisible(false)}\n />\n </>\n );\n};\n","import { Space } from \"antd\";\nimport React from \"react\";\nimport { Many2oneSuffix } from \"./Many2oneSuffix\";\n\nexport type Many2oneTreeProps = { m2oField: any };\n\nexport const Many2oneTree = (props: Many2oneTreeProps): React.ReactElement => {\n const { m2oField } = props;\n if (!m2oField) {\n return <></>;\n }\n return (\n <Space>\n <>{m2oField.value}</>\n <Many2oneSuffix id={m2oField.id} model={m2oField.model} />\n </Space>\n );\n};\n","import ConnectionProvider from \"@/ConnectionProvider\";\nimport { Space } from \"antd\";\nimport React, { useCallback, useEffect, useState } from \"react\";\nimport { Many2oneSuffix } from \"./many2one/Many2oneSuffix\";\nimport { LoadingOutlined } from \"@ant-design/icons\";\n\nexport type ReferenceTreeProps = {\n value: string;\n context?: any;\n selectionValues?: any;\n};\n\nexport const ReferenceTree = (\n props: ReferenceTreeProps,\n): React.ReactElement => {\n const { value, context, selectionValues } = props;\n const [name, setName] = useState();\n const [loading, setLoading] = useState(false);\n\n const [model, id] = value ? value.split(\",\") : [];\n const intId = parseInt(id);\n\n const fetchName = useCallback(async () => {\n if (!value) {\n return;\n }\n if (value && name) {\n return;\n }\n setLoading(true);\n const nameResponse = await ConnectionProvider.getHandler().execute({\n action: \"name_get\",\n payload: [intId],\n model,\n context,\n });\n setName(nameResponse[0][1]);\n setLoading(false);\n }, [value, name]);\n\n useEffect(() => {\n fetchName();\n }, [value]);\n\n if (!value && !loading) {\n return <></>;\n }\n\n if (loading) {\n return <LoadingOutlined />;\n }\n\n const selectionDescription = selectionValues.get(model);\n\n return (\n <Space>\n <>{`${selectionDescription}:`}</>\n <>{name}</>\n <Many2oneSuffix id={intId} model={model} />\n </Space>\n );\n};\n","import dayjs from \"dayjs\";\n\nimport advancedFormat from \"dayjs/plugin/advancedFormat\";\nimport customParseFormat from \"dayjs/plugin/customParseFormat\";\nimport isoWeek from \"dayjs/plugin/isoWeek\";\nimport timezone from \"dayjs/plugin/timezone\";\nimport duration from \"dayjs/plugin/duration\";\nimport relativeTime from \"dayjs/plugin/relativeTime\";\nimport weekday from \"dayjs/plugin/weekday\";\nimport localeData from \"dayjs/plugin/localeData\";\n\ndayjs.extend(advancedFormat);\ndayjs.extend(customParseFormat);\ndayjs.extend(isoWeek);\ndayjs.extend(timezone);\ndayjs.extend(duration);\ndayjs.extend(relativeTime);\ndayjs.extend(weekday);\ndayjs.extend(localeData);\n\nexport default dayjs;\n","import React from \"react\";\nimport { WidgetProps } from \"@/types\";\nimport { Avatar as AntdAvatar, Tooltip } from \"antd\";\nimport { Avatar as AvatarOoui } from \"@gisce/ooui\";\nimport { colorFromString } from \"@/helpers/formHelper\";\n\ntype AvatarProps = WidgetProps & {\n ooui: AvatarOoui;\n value?: any;\n};\n\nconst Avatar = (props: AvatarProps): React.ReactElement | null => {\n const { ooui, value } = props;\n if (!value) {\n return null;\n }\n let formattedValue = value;\n if (ooui.selectionValues.size) {\n formattedValue = ooui.selectionValues.get(value);\n } else if (Array.isArray(value)) {\n formattedValue = value[1];\n }\n const text = formattedValue\n .toString()\n .split(\" \")\n .filter((word: string) => word.length > 1)\n .slice(0, 3)\n .map((word: string) => word[0].toUpperCase())\n .join(\"\");\n const backgroundColor = colorFromString(formattedValue);\n return (\n <Tooltip title={formattedValue}>\n <AntdAvatar alt={formattedValue} style={{ backgroundColor }}>\n {text}\n </AntdAvatar>\n </Tooltip>\n );\n};\n\nexport default Avatar;\n","import { DatePicker as AntDatePicker, theme } from \"antd\";\n\nimport React from \"react\";\nimport Field from \"@/common/Field\";\nimport { WidgetProps } from \"@/types\";\nimport { Date as DateOoui } from \"@gisce/ooui\";\nimport dayjs from \"@/helpers/dayjs\";\nconst { useToken } = theme;\n\ntype DatePickerProps = WidgetProps & {\n showTime?: boolean;\n};\n\nexport const DatePickerConfig = {\n date: {\n placeholder: \"__/__/____\",\n dateDisplayFormat: \"DD/MM/YYYY\",\n dateInternalFormat: \"YYYY-MM-DD\",\n },\n time: {\n placeholder: \"__/__/____ __:__:__\",\n dateDisplayFormat: \"DD/MM/YYYY HH:mm:ss\",\n dateInternalFormat: \"YYYY-MM-DD HH:mm:ss\",\n },\n};\n\nconst DatePicker = (props: DatePickerProps) => {\n const { ooui, showTime = false } = props;\n const { required } = ooui;\n\n return (\n <Field required={required} {...props}>\n <DatePickerInput ooui={ooui} showTime={showTime} />\n </Field>\n );\n};\n\ninterface DatePickerInputProps {\n ooui: DateOoui;\n value?: undefined | string;\n onChange?: (value: undefined | string) => void;\n showTime?: boolean;\n}\n\nconst DatePickerInput: React.FC<DatePickerInputProps> = (\n props: DatePickerInputProps,\n) => {\n const { value, onChange, ooui, showTime } = props;\n const { id, readOnly, required } = ooui as DateOoui;\n const { token } = useToken();\n\n const requiredStyle =\n required && !readOnly\n ? { backgroundColor: token.colorPrimaryBg }\n : undefined;\n\n const mode = showTime ? \"time\" : \"date\";\n\n const triggerChange = (changedValue: undefined | string) => {\n onChange?.(changedValue);\n };\n\n const onValueStringChange = (momentDate: any) => {\n if (momentDate === null) {\n triggerChange(undefined);\n return;\n }\n\n triggerChange(momentDate.format(DatePickerConfig[mode].dateInternalFormat));\n };\n\n const dateValue = value\n ? dayjs(value, DatePickerConfig[mode].dateInternalFormat)\n : undefined;\n\n return (\n <AntDatePicker\n style={{ width: \"100%\", ...requiredStyle }}\n placeholder={\n showTime\n ? DatePickerConfig.time.placeholder\n : DatePickerConfig.date.placeholder\n }\n disabled={readOnly}\n id={id}\n picker={\"date\"}\n showTime={showTime}\n format={DatePickerConfig[mode].dateDisplayFormat}\n value={dateValue}\n onChange={onValueStringChange}\n showNow={false}\n showToday={false}\n changeOnBlur={true}\n />\n );\n};\n\nexport default DatePicker;\n","import { ReactElement, useCallback, useEffect, useMemo, useState } from \"react\";\nimport { Checkbox, Spin } from \"antd\";\nimport { parseFloatToString } from \"@/helpers/timeHelper\";\nimport { ProgressBarInput } from \"../../base/ProgressBar\";\nimport { One2manyValue } from \"../../base/one2many/One2manyInput\";\nimport { Interweave } from \"interweave\";\nimport { Many2oneTree } from \"../../base/many2one/Many2oneTree\";\nimport { ReferenceTree } from \"../../base/ReferenceTree\";\nimport dayjs from \"@/helpers/dayjs\";\nimport Avatar from \"../../custom/Avatar\";\nimport { CustomTag, TagInput } from \"../../custom/Tag\";\nimport { DatePickerConfig } from \"@/common/DatePicker\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport { colorFromString } from \"@/helpers/formHelper\";\n\nexport const BooleanComponent = ({\n value,\n}: {\n value: boolean;\n}): ReactElement => {\n return useMemo(\n () => (\n <div\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n alignContent: \"center\",\n }}\n >\n <Checkbox checked={value} disabled />\n </div>\n ),\n [value],\n );\n};\n\nexport const Many2OneComponent = ({ value }: { value: any }): ReactElement => {\n return useMemo(() => <Many2oneTree m2oField={value} />, [value]);\n};\n\nexport const TextComponent = ({ value }: { value: any }): ReactElement => {\n return useMemo(\n () => (\n <Interweave\n content={value?.toString().replace(/(?:\\r\\n|\\r|\\n)/g, \"<br>\")}\n />\n ),\n [value],\n );\n};\n\nexport const DateComponent = ({ value }: { value: any }): ReactElement => {\n return useMemo(() => {\n if (!value || (value && value.length === 0)) return <></>;\n\n const formattedValue = dayjs(\n value,\n DatePickerConfig.date.dateInternalFormat,\n ).format(DatePickerConfig.date.dateDisplayFormat);\n return <>{formattedValue}</>;\n }, [value]);\n};\n\nexport const DateTimeComponent = ({ value }: { value: any }): ReactElement => {\n return useMemo(() => {\n if (!value || (value && value.length === 0)) return <></>;\n const formattedValue = dayjs(\n value,\n DatePickerConfig.time.dateInternalFormat,\n ).format(DatePickerConfig.time.dateDisplayFormat);\n return <>{formattedValue}</>;\n }, [value]);\n};\n\nexport const One2ManyComponent = ({\n value,\n}: {\n value: One2manyValue;\n}): ReactElement => {\n return useMemo(() => {\n const length = Array.isArray(value?.items) ? value?.items.length : 0;\n return <>{`( ${length} )`}</>;\n }, [value]);\n};\n\nexport const ProgressBarComponent = ({\n value,\n}: {\n value: any;\n}): ReactElement => {\n return useMemo(() => <ProgressBarInput value={value} />, [value]);\n};\n\nexport const FloatTimeComponent = ({ value }: { value: any }): ReactElement => {\n return useMemo(() => <>{parseFloatToString(value)}</>, [value]);\n};\n\nexport const NumberComponent = ({ value }: { value: number }): ReactElement => {\n return useMemo(\n () => <div style={{ textAlign: \"right\" }}>{value}</div>,\n [value],\n );\n};\n\nexport const ImageComponent = ({ value }: { value: string }): ReactElement => {\n return useMemo(\n () => (\n <img\n src={`data:image/*;base64,${value}`}\n style={{ maxWidth: \"50px\", padding: \"5px\" }}\n />\n ),\n [value],\n );\n};\n\nexport const TagComponent = ({\n value,\n key,\n ooui,\n context,\n}: {\n value: any;\n key: string;\n ooui: any;\n context: any;\n}): ReactElement => {\n return useMemo(() => <TagInput ooui={ooui} value={value} />, [ooui, value]);\n};\n\nexport const SelectionComponent = ({\n value,\n key,\n ooui,\n context,\n}: {\n value: any;\n key: string;\n ooui: any;\n context: any;\n}): ReactElement => {\n return useMemo(() => {\n let selectionKey = value;\n\n if (Array.isArray(value) && value.length === 2) {\n selectionKey = value[0];\n }\n return <>{ooui.selectionValues.get(selectionKey)}</>;\n }, [ooui, value]);\n};\n\nexport const ReferenceComponent = ({\n value,\n key,\n ooui,\n context,\n}: {\n value: any;\n key: string;\n ooui: any;\n context: any;\n}): ReactElement => {\n return useMemo(\n () => (\n <ReferenceTree\n value={value}\n selectionValues={ooui.selectionValues}\n context={context}\n />\n ),\n [context, ooui.selectionValues, value],\n );\n};\n\nexport const AvatarComponent = ({\n value,\n key,\n ooui,\n context,\n}: {\n value: any;\n key: string;\n ooui: any;\n context: any;\n}): ReactElement => {\n return useMemo(() => <Avatar ooui={ooui} value={value} />, [ooui, value]);\n};\n\nexport const TagsComponent = ({\n value,\n key,\n ooui,\n context,\n}: {\n value: any;\n key: string;\n ooui: any;\n context: any;\n}): ReactElement => {\n const [values, setValues] = useState<Array<{ id: number; name: string }>>([]);\n const [loading, setLoading] = useState<boolean>(false);\n const { relation, field } = ooui;\n\n const loadValues = useCallback(async () => {\n try {\n setLoading(true);\n const optionsRead = await ConnectionProvider.getHandler().search({\n model: relation,\n params: [[\"id\", \"in\", value.items.map((v: any) => v.id)]],\n fields: [field],\n context,\n });\n setValues(\n optionsRead.map((i: any) => {\n const { id, name } = i;\n return { id, name };\n }),\n );\n } catch (error) {\n console.error(\"Error loading data\", error);\n } finally {\n setLoading(false);\n }\n }, [context, field, relation, value.items]);\n\n useEffect(() => {\n if (value?.items && value?.items.length > 0) {\n loadValues();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value?.items]);\n\n const tags = useMemo(\n () =>\n values.map((entry) => {\n const { id, name } = entry;\n const color = colorFromString(name);\n return (\n <CustomTag key={`${id}`} color={color}>\n {name}\n </CustomTag>\n );\n }),\n [values],\n );\n\n return useMemo(() => {\n if (loading) {\n return <Spin />;\n }\n return (\n <div\n style={{\n maxWidth: \"300px\",\n whiteSpace: \"break-spaces\",\n lineHeight: \"30px\",\n }}\n >\n {tags}\n </div>\n );\n }, [tags, loading]);\n};\n\nexport const COLUMN_COMPONENTS = {\n boolean: BooleanComponent,\n many2one: Many2OneComponent,\n text: TextComponent,\n one2many: One2ManyComponent,\n many2many: One2ManyComponent,\n progressbar: ProgressBarComponent,\n float_time: FloatTimeComponent,\n image: ImageComponent,\n integer: NumberComponent,\n float: NumberComponent,\n reference: ReferenceComponent,\n tag: TagComponent,\n selection: SelectionComponent,\n date: DateComponent,\n datetime: DateTimeComponent,\n avatar: AvatarComponent,\n tags: TagsComponent,\n};\n","import { memo, useContext, useEffect, useMemo, useRef, useState } from \"react\";\nimport { Pagination as AntPagination, Row, Col, Spin, Badge } from \"antd\";\nimport {\n getTree,\n getTableColumns,\n getTableItems,\n hasActualValues,\n} from \"@/helpers/treeHelper\";\nimport { Tree as TreeOoui } from \"@gisce/ooui\";\nimport { TreeView } from \"@/types\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport { calculateColumnsWidth } from \"@/helpers/dynamicColumnsHelper\";\nimport { Table as GisceTable } from \"@gisce/react-formiga-table\";\nimport {\n PlusSquareOutlined,\n MinusSquareOutlined,\n LoadingOutlined,\n} from \"@ant-design/icons\";\nimport {\n ActionViewContext,\n ActionViewContextType,\n} from \"@/context/ActionViewContext\";\nimport { SelectAllRecordsRow } from \"@/common/SelectAllRecordsRow\";\nimport { COLUMN_COMPONENTS } from \"./treeComponents\";\nimport ErrorBoundary from \"antd/es/alert/ErrorBoundary\";\n\ntype Props = {\n total?: number;\n limit: number;\n page?: number;\n loading: boolean;\n treeView: TreeView;\n results: any[];\n showPagination?: boolean;\n onRequestPageChange?: (page: number, pageSize?: number) => void;\n onRowClicked?: (record: any) => void;\n onRowSelectionChange?: (selectedRowKeys: any[]) => void;\n selectedRowKeys?: number[];\n scrollY?: number;\n colorsForResults?: { [key: number]: string };\n statusForResults?: { [key: number]: string };\n onChangeSort?: (results: any) => void;\n sorter?: any;\n onFetchChildrenForRecord?: (item: any) => Promise<any[]>;\n childField?: string;\n rootTree?: boolean;\n context?: any;\n readonly?: boolean;\n onSelectAllRecords?: () => Promise<void>;\n};\nexport const Tree = memo((props: Props) => {\n const {\n page = 1,\n limit,\n total,\n treeView,\n results,\n onRequestPageChange,\n loading,\n onRowClicked,\n showPagination = true,\n selectedRowKeys = [],\n onRowSelectionChange,\n scrollY,\n colorsForResults = {},\n statusForResults = {},\n onChangeSort,\n sorter,\n onFetchChildrenForRecord,\n childField,\n rootTree = false,\n context,\n readonly,\n onSelectAllRecords,\n } = props;\n\n const [items, setItems] = useState<any[]>([]);\n\n const errorInParseColors = useRef<boolean>(false);\n\n const [treeOoui, setTreeOoui] = useState<TreeOoui>();\n\n const { t } = useContext(LocaleContext) as LocaleContextType;\n const internalLimit = useRef(limit);\n\n const actionViewContext = useContext(\n ActionViewContext,\n ) as ActionViewContextType;\n const { title = undefined, setTitle = undefined } =\n (rootTree ? actionViewContext : {}) || {};\n\n const columns = useMemo(() => {\n if (!treeOoui) {\n return undefined;\n }\n\n return getTableColumns(\n treeOoui,\n {\n ...COLUMN_COMPONENTS,\n },\n context,\n );\n }, [context, treeOoui]);\n\n useEffect(() => {\n const treeOoui = getTree(treeView);\n setTreeOoui(treeOoui);\n if (treeOoui.string && title !== treeOoui.string) {\n setTitle?.(treeOoui.string);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [treeView, title]);\n\n useEffect(() => {\n if (!treeOoui) {\n return;\n }\n errorInParseColors.current = false;\n const items = getTableItems(treeOoui, results);\n setItems(items);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [results]);\n\n useEffect(() => {\n internalLimit.current = limit;\n }, [limit]);\n\n const from = (page - 1) * internalLimit.current + 1;\n const to = from - 1 + items.length;\n const summary =\n total === undefined\n ? null\n : total === 0\n ? t(\"no_results\")\n : t(\"summary\")\n .replace(\"{from}\", from?.toString())\n .replace(\"{to}\", to?.toString())\n .replace(\"{total}\", total?.toString());\n\n const pagination = useMemo(() => {\n if (!showPagination || treeView.isExpandable) {\n return null;\n }\n\n const numberOfVisibleSelectedRows = items?.filter(\n (entry) => selectedRowKeys && selectedRowKeys.includes(entry.id),\n ).length;\n\n return loading ? null : total === undefined ? (\n <Spin className=\"pb-4\" />\n ) : (\n <Row align=\"bottom\" className=\"pb-4\">\n <Col span={onSelectAllRecords ? 8 : 12}>\n <AntPagination\n total={total}\n pageSize={\n internalLimit.current === 0 ? total : internalLimit.current\n }\n current={page}\n showSizeChanger={false}\n onChange={onRequestPageChange}\n />\n </Col>\n {onSelectAllRecords && (\n <Col span={8} className=\"text-center\">\n <SelectAllRecordsRow\n numberOfVisibleSelectedRows={numberOfVisibleSelectedRows}\n numberOfRealSelectedRows={selectedRowKeys?.length || 0}\n numberOfTotalRows={items.length}\n totalRecords={total || 0}\n onSelectAllRecords={onSelectAllRecords}\n />\n </Col>\n )}\n <Col span={onSelectAllRecords ? 8 : 12} className=\"text-right\">\n {summary}\n </Col>\n </Row>\n );\n }, [\n items,\n loading,\n onRequestPageChange,\n onSelectAllRecords,\n page,\n selectedRowKeys,\n showPagination,\n summary,\n total,\n treeView.isExpandable,\n ]);\n\n const sums = useMemo(() => {\n if (!treeOoui) {\n return null;\n }\n const sumFields = treeOoui.columns\n .filter((it) => it.sum !== undefined)\n .map((it) => {\n return { label: it.sum, field: it.id };\n });\n\n if (!sumFields || sumFields.length === 0) {\n return null;\n }\n\n const summary: string[] = [];\n const sumItems =\n selectedRowKeys?.length > 0\n ? items.filter((result: any) => {\n return selectedRowKeys.includes(result.id);\n })\n : items;\n\n sumFields.forEach((sumField) => {\n const total = sumItems.reduce((prev, current) => {\n if (current[sumField.field] && !isNaN(current[sumField.field]))\n return prev + current[sumField.field];\n else return prev;\n }, 0);\n\n summary.push(`${sumField.label}: ${Math.round(total * 100) / 100}`);\n });\n\n return <div className=\"p-1 pb-0 pl-2 mt-2 \">{summary.join(\", \")}</div>;\n }, [items, selectedRowKeys, treeOoui]);\n\n const dataTable = useMemo(() => {\n if (treeOoui !== null && columns && columns.length > 0) {\n const maxWidthPerCell = 600;\n return calculateColumnsWidth(columns, items, maxWidthPerCell);\n }\n return undefined;\n }, [columns, items, treeOoui]);\n\n const adjustedHeight = useMemo(() => {\n if (scrollY && treeOoui?.columns.some((it: any) => it.sum !== undefined)) {\n return scrollY - 30;\n }\n return scrollY;\n }, [scrollY, treeOoui?.columns]);\n\n if (treeOoui === null || !dataTable || dataTable?.columns?.length === 0) {\n return <Spin style={{ padding: \"2rem\" }} />;\n }\n\n return (\n <ErrorBoundary>\n {pagination}\n <GisceTable\n height={adjustedHeight!}\n columns={dataTable.columns}\n dataSource={items}\n loading={loading}\n loadingComponent={<Spin />}\n onRowStyle={(record: any) => {\n if (colorsForResults![record.id]) {\n return { color: colorsForResults![record.id] };\n }\n return undefined;\n }}\n onRowStatus={\n hasActualValues(statusForResults)\n ? (record: any) => {\n if (statusForResults![record.id]) {\n return <Badge color={statusForResults[record.id]} />;\n }\n return undefined;\n }\n : undefined\n }\n onRowDoubleClick={onRowClicked}\n onRowSelectionChange={onRowSelectionChange}\n onChangeSort={onChangeSort}\n sorter={sorter}\n readonly={readonly}\n expandableOpts={\n onFetchChildrenForRecord\n ? {\n expandIcon: PlusSquareOutlined,\n collapseIcon: MinusSquareOutlined,\n loadingIcon: LoadingOutlined,\n onFetchChildrenForRecord,\n childField: childField!,\n }\n : undefined\n }\n />\n {sums}\n </ErrorBoundary>\n );\n});\n\nTree.displayName = \"Tree\";\n","import {\n useEffect,\n useState,\n useRef,\n useContext,\n forwardRef,\n useImperativeHandle,\n useMemo,\n useCallback,\n} from \"react\";\nimport { Alert, Spin } from \"antd\";\n\nimport SearchFilter from \"@/widgets/views/searchFilter/SearchFilter\";\nimport { Tree } from \"@/widgets/views/Tree\";\nimport { FormView, TreeView } from \"@/types/index\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\n\nimport {\n ActionViewContext,\n ActionViewContextType,\n} from \"@/context/ActionViewContext\";\nimport useWindowDimensions from \"@/hooks/useWindowDimensions\";\nimport { mergeSearchFields } from \"@/helpers/formHelper\";\nimport {\n ContentRootContext,\n ContentRootContextType,\n} from \"@/context/ContentRootContext\";\nimport showErrorDialog from \"@/ui/ActionErrorDialog\";\nimport { DEFAULT_SEARCH_LIMIT, useSearch } from \"@/hooks/useSearch\";\n\ntype OnRowClickedData = {\n id: number;\n model: string;\n formView: FormView;\n treeView: TreeView;\n};\n\ntype Props = {\n model?: string;\n formView?: FormView;\n treeView?: TreeView;\n onRowClicked: (data: OnRowClickedData) => void;\n nameSearch?: string;\n treeScrollY?: number;\n domain?: any;\n visible?: boolean;\n rootTree?: boolean;\n parentContext?: any;\n onChangeSelectedRowKeys?: (selectedRowKeys: any) => void;\n};\n\nfunction SearchTree(props: Props, ref: any) {\n const {\n model,\n formView: formViewProps,\n treeView: treeViewProps,\n onRowClicked,\n nameSearch,\n treeScrollY,\n domain = [],\n visible = true,\n rootTree = false,\n parentContext = {},\n onChangeSelectedRowKeys,\n } = props;\n\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [initialFetchDone, setInitialFetchDone] = useState<boolean>(false);\n\n const searchNameGetDoneRef = useRef(false);\n\n const [currentModel, setCurrentModel] = useState<string>();\n const [treeView, setTreeView] = useState<TreeView>();\n const [formView, setFormView] = useState<FormView>();\n\n const [initialError, setInitialError] = useState<string>();\n\n const [searchFilterHeight, setSearchFilterHeight] = useState<number>(200);\n\n const expandableClickActionData = useRef<any>();\n\n const { height } = useWindowDimensions();\n\n const contentRootContext = useContext(\n ContentRootContext,\n ) as ContentRootContextType;\n const { processAction } = contentRootContext || {};\n\n const actionViewContext = useContext(\n ActionViewContext,\n ) as ActionViewContextType;\n const {\n setResults: setResultsActionView = undefined,\n setCurrentItemIndex = undefined,\n currentId = undefined,\n results: resultsActionView = undefined,\n selectedRowItems = undefined,\n setSelectedRowItems = undefined,\n searchParams = [],\n setSearchParams = undefined,\n searchVisible = true,\n setSearchVisible = undefined,\n sorter = undefined,\n setSorter = undefined,\n setTotalItems: setActionViewTotalItems = undefined,\n setSearchTreeNameSearch = undefined,\n setTreeIsLoading = undefined,\n searchValues = {},\n setSearchValues = undefined,\n limit = DEFAULT_SEARCH_LIMIT,\n setLimit = undefined,\n } = (rootTree ? actionViewContext : {}) || {};\n\n const changeSelectedRowKeys = useCallback(\n (newSelectedRowKeys: any[]) => {\n setSelectedRowItems?.(newSelectedRowKeys.map((id: number) => ({ id })));\n onChangeSelectedRowKeys?.(newSelectedRowKeys);\n },\n [onChangeSelectedRowKeys, setSelectedRowItems],\n );\n\n const {\n submit,\n clear,\n fetchResults,\n tableRefreshing,\n searchFilterLoading,\n searchError,\n page,\n offset,\n getResults,\n requestPageChange,\n changeSort,\n fetchChildrenForRecord,\n colorsForResults,\n statusForResults,\n totalItems,\n getAllIds,\n } = useSearch({\n model: currentModel!,\n setSearchTreeNameSearch,\n setSelectedRowItems: changeSelectedRowKeys,\n setSearchParams,\n setSearchValues,\n searchParams,\n setSearchVisible,\n setTreeIsLoading,\n nameSearch,\n searchNameGetDoneRef,\n context: parentContext,\n formView: formView!,\n treeView: treeView!,\n sorter,\n setSorter,\n setCurrentItemIndex,\n setResultsActionView,\n resultsActionView,\n domain,\n currentId,\n setActionViewTotalItems,\n limit,\n setLimit,\n });\n\n useImperativeHandle(ref, () => ({\n refreshResults: () => {\n searchNameGetDoneRef.current = false;\n fetchResults();\n },\n getFields: () => treeView?.fields,\n getDomain: () => domain,\n }));\n\n useEffect(() => {\n if (!initialFetchDone) {\n return;\n }\n\n if (visible && treeView) {\n searchNameGetDoneRef.current = false;\n fetchResults();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [page, offset, initialFetchDone, visible, nameSearch, treeView]);\n\n const fetchData = async () => {\n setInitialFetchDone(false);\n setIsLoading(true);\n setInitialError(undefined);\n setTreeIsLoading?.(true);\n\n try {\n await fetchModelData();\n setInitialFetchDone(true);\n } catch (error) {\n setInitialError(error);\n setTreeIsLoading?.(false);\n } finally {\n setIsLoading(false);\n }\n };\n\n const fetchModelData = async () => {\n setCurrentModel(model);\n\n let _formView = formViewProps;\n\n if (!formViewProps) {\n _formView = (await ConnectionProvider.getHandler().getView({\n model: model!,\n type: \"form\",\n context: parentContext,\n })) as FormView;\n }\n\n let _treeView = treeViewProps;\n\n if (!treeViewProps) {\n _treeView = (await ConnectionProvider.getHandler().getView({\n model: model!,\n type: \"tree\",\n context: parentContext,\n })) as TreeView;\n }\n\n setFormView(_formView as FormView);\n setTreeView(_treeView as TreeView);\n };\n\n useEffect(() => {\n fetchData();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [model]);\n\n const onSearchTreeLimitChange = useCallback(\n (newLimit: number) => {\n setLimit?.(newLimit);\n },\n [setLimit],\n );\n\n const treeButOpen = useCallback(\n async (record: any) => {\n const { id } = record;\n\n if (!expandableClickActionData.current) {\n expandableClickActionData.current =\n await ConnectionProvider.getHandler().treeButOpen({\n id: treeView!.view_id,\n model: currentModel!,\n context: parentContext,\n });\n }\n\n const actionData: any = expandableClickActionData.current[0][2];\n\n await processAction?.({\n actionData,\n fields: treeView!.fields,\n values: {\n active_id: id,\n ...record,\n },\n context: parentContext,\n });\n },\n [currentModel, parentContext, processAction, treeView],\n );\n\n const onRowClickedHandler = useCallback(\n async (record: any) => {\n const { id } = record;\n\n if (treeView?.isExpandable) {\n try {\n await treeButOpen(record);\n } catch (err) {\n showErrorDialog(err);\n }\n return;\n }\n\n onRowClicked({\n id,\n model: currentModel!,\n formView: formView!,\n treeView: treeView!,\n });\n },\n [currentModel, formView, onRowClicked, treeButOpen, treeView],\n );\n\n const selectAllRecords = useCallback(async () => {\n const allIds = await getAllIds();\n setSelectedRowItems?.(allIds.map((id: number) => ({ id })));\n onChangeSelectedRowKeys?.(allIds);\n }, [getAllIds, onChangeSelectedRowKeys, setSelectedRowItems]);\n\n const calculatedTableHeight = useMemo(() => {\n if (treeView?.isExpandable) {\n return height - 160;\n }\n return height - (searchFilterHeight + 240);\n }, [height, searchFilterHeight, treeView?.isExpandable]);\n\n const selectedRowKeys = useMemo(\n () => selectedRowItems?.map((item) => item.id),\n [selectedRowItems],\n );\n\n const content = useCallback(() => {\n if (!treeView || !formView) {\n return null;\n }\n\n return (\n <>\n <SearchFilter\n fields={{ ...formView.fields, ...treeView.fields }}\n searchFields={mergeSearchFields([\n formView.search_fields,\n treeView.search_fields,\n ])}\n onClear={clear}\n limit={limit}\n offset={offset}\n isSearching={searchFilterLoading}\n onSubmit={submit}\n onLimitChange={onSearchTreeLimitChange}\n setSearchFilterHeight={setSearchFilterHeight}\n searchError={searchError}\n searchVisible={searchVisible}\n searchValues={searchValues}\n />\n <Tree\n context={parentContext}\n total={totalItems}\n limit={limit}\n page={page}\n treeView={treeView}\n results={getResults()}\n onRequestPageChange={requestPageChange}\n loading={tableRefreshing}\n onRowClicked={onRowClickedHandler}\n scrollY={treeScrollY || calculatedTableHeight}\n colorsForResults={colorsForResults}\n statusForResults={statusForResults}\n selectedRowKeys={selectedRowKeys}\n onRowSelectionChange={changeSelectedRowKeys}\n sorter={sorter}\n onChangeSort={changeSort}\n onFetchChildrenForRecord={\n treeView.isExpandable ? fetchChildrenForRecord : undefined\n }\n childField={treeView.field_parent}\n rootTree={rootTree}\n onSelectAllRecords={selectAllRecords}\n />\n </>\n );\n }, [\n calculatedTableHeight,\n changeSelectedRowKeys,\n changeSort,\n clear,\n colorsForResults,\n fetchChildrenForRecord,\n formView,\n getResults,\n limit,\n offset,\n onRowClickedHandler,\n onSearchTreeLimitChange,\n page,\n parentContext,\n requestPageChange,\n rootTree,\n searchError,\n searchFilterLoading,\n searchValues,\n searchVisible,\n selectAllRecords,\n selectedRowKeys,\n sorter,\n statusForResults,\n submit,\n tableRefreshing,\n totalItems,\n treeScrollY,\n treeView,\n ]);\n\n const error = initialError || searchError;\n\n if (error) {\n return <Alert className=\"mt-10\" message={error} type=\"error\" banner />;\n }\n\n return (\n <div style={!visible ? { display: \"none\" } : {}}>\n {isLoading ? <Spin /> : content()}\n </div>\n );\n}\n\nexport default forwardRef(SearchTree);\n","import { useState, useContext } from \"react\";\nimport { Modal, Button, Divider, Row, Space } from \"antd\";\nimport { FormModal } from \"./FormModal\";\nimport SearchTree from \"@/widgets/views/SearchTree\";\nimport {\n FileAddOutlined,\n CloseOutlined,\n CheckOutlined,\n} from \"@ant-design/icons\";\nimport useWindowDimensions from \"@/hooks/useWindowDimensions\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\ntype SearchSelectionProps = {\n visible: boolean;\n model: string;\n nameSearch?: string;\n onSelectValues: (values: number[]) => void;\n onCloseModal: () => void;\n domain?: any;\n context?: any;\n};\n\nexport const SearchModal = (props: SearchSelectionProps) => {\n const {\n visible,\n onCloseModal: onCloseModalProps,\n onSelectValues,\n model,\n nameSearch,\n domain,\n context = {},\n } = props;\n const [showCreateModal, setShowCreateModal] = useState<boolean>(false);\n\n const { modalWidth, modalHeight } = useWindowDimensions();\n const { t } = useContext(LocaleContext) as LocaleContextType;\n const [selectedRowKeys, setSelectedRowKeys] = useState<any[]>([]);\n\n const onCloseModal = async () => {\n await new Promise((resolve) => setTimeout(resolve, 5));\n onCloseModalProps();\n };\n\n const onRowClicked = async (event: any) => {\n const { id } = event;\n onSelectValues([id]);\n };\n\n function submit() {\n if (selectedRowKeys.length === 0) {\n onCloseModal();\n return;\n }\n\n onSelectValues(selectedRowKeys);\n }\n\n const content = () => {\n return (\n <>\n <SearchTree\n model={model}\n nameSearch={nameSearch}\n onRowClicked={onRowClicked}\n treeScrollY={modalHeight * 0.3}\n domain={domain}\n parentContext={context}\n onChangeSelectedRowKeys={setSelectedRowKeys}\n />\n <Divider />\n <Row justify=\"end\">\n <Space>\n <Button\n icon={<FileAddOutlined />}\n onClick={() => {\n setShowCreateModal(true);\n }}\n >\n {t(\"new\")}\n </Button>\n <Button\n icon={<CheckOutlined />}\n onClick={() => {\n submit();\n }}\n type=\"primary\"\n >\n {t(\"ok\")}\n </Button>\n <Button icon={<CloseOutlined />} onClick={onCloseModal}>\n {t(\"cancel\")}\n </Button>\n </Space>\n </Row>\n </>\n );\n };\n\n return (\n <>\n <Modal\n title={t(\"search\")}\n centered\n width={modalWidth}\n open={visible && !showCreateModal}\n closable={true}\n onCancel={onCloseModal}\n footer={null}\n destroyOnClose\n maskClosable={false}\n >\n {content()}\n </Modal>\n <FormModal\n model={model}\n visible={showCreateModal}\n parentContext={context}\n onSubmitSucceed={(id?: number) => {\n setShowCreateModal(false);\n onCloseModal();\n onSelectValues([id!]);\n }}\n onCancel={() => {\n setShowCreateModal(false);\n onCloseModal();\n }}\n />\n </>\n );\n};\n","import React from \"react\";\nimport { Modal } from \"antd\";\nimport { ExclamationCircleOutlined } from \"@ant-design/icons\";\n\nconst { error } = Modal;\n\nconst showDialog = (message: string) => {\n error({\n title: \"Error\",\n icon: <ExclamationCircleOutlined />,\n centered: true,\n content: message,\n });\n};\n\nexport default showDialog;\n","import React, { useState, useRef, useEffect, useContext } from \"react\";\nimport { Input, Button, Row, Col, theme } from \"antd\";\nimport {\n SearchOutlined,\n FolderOpenOutlined,\n LoadingOutlined,\n} from \"@ant-design/icons\";\nimport styled from \"styled-components\";\n\nimport {\n Many2one as Many2oneOoui,\n transformDomainForChildWidget,\n} from \"@gisce/ooui\";\nimport Field from \"@/common/Field\";\nimport { SearchModal } from \"@/widgets/modals/SearchModal\";\nimport { FormModal } from \"@/widgets/modals/FormModal\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport { Many2oneSuffix } from \"./Many2oneSuffix\";\nimport showErrorDialog from \"@/ui/GenericErrorDialog\";\nimport { FormContext, FormContextType } from \"@/context/FormContext\";\nimport { transformPlainMany2Ones } from \"@/helpers/formHelper\";\n\nconst { defaultAlgorithm, defaultSeed } = theme;\n\nconst mapToken = defaultAlgorithm(defaultSeed);\n\ntype Props = {\n ooui: Many2oneOoui;\n onOpenDetailClick?:\n | ((event: React.MouseEvent<HTMLElement, MouseEvent>) => void)\n | undefined;\n onSearchClick?:\n | ((event: React.MouseEvent<HTMLElement, MouseEvent>) => void)\n | undefined;\n};\n\nexport const Many2one = (props: Props) => {\n const { ooui } = props;\n const { required } = ooui;\n const validator = async (_: any, value: any) => {\n if (!value) throw new Error();\n if (!Array.isArray(value)) throw new Error();\n if (Array.isArray(value) && !value[0]) throw new Error();\n };\n\n return (\n <Field required={required} type={\"array\"} validator={validator} {...props}>\n <Many2oneInput ooui={ooui} />\n </Field>\n );\n};\n\ninterface Many2oneInputProps {\n ooui: Many2oneOoui;\n value?: any[];\n onChange?: (value: any[]) => void;\n}\n\nexport const Many2oneInput: React.FC<Many2oneInputProps> = (\n props: Many2oneInputProps,\n) => {\n const { value, onChange, ooui } = props;\n const {\n required,\n relation,\n readOnly,\n context,\n id: fieldName,\n domain: widgetDomain,\n } = ooui;\n const requiredStyle =\n required && !readOnly\n ? { backgroundColor: mapToken.colorPrimaryBg }\n : undefined;\n const [showSearchModal, setShowSearchModal] = useState<boolean>(false);\n const [showFormModal, setShowFormModal] = useState<boolean>(false);\n const [searching, setSearching] = useState<boolean>(false);\n const [searchText, setSearchText] = useState<string>();\n const searchButtonTappedRef = useRef<boolean>(false);\n const [inputText, setInputText] = useState<string>(\"\");\n const inputTextRef = useRef<string>();\n const formContext = useContext(FormContext) as FormContextType;\n const { domain, getValues, getFields, getContext, elementHasLostFocus } =\n formContext || {};\n const transformedDomain = useRef<any[]>([]);\n const [searchDomain, setSearchDomain] = useState<any>([]);\n\n const id = (value && value[0]) || undefined;\n const text = (value && value[1]) || \"\";\n\n useEffect(() => {\n if (!Array.isArray(value) && value) {\n fetchNameAndUpdate(value as any);\n }\n }, [value]);\n\n useEffect(() => {\n if (id && text.length === 0) {\n fetchNameAndUpdate(id);\n } else if (id && text.length > 0) {\n setInputText(text);\n } else if (!id && !text) {\n setInputText(inputTextRef.current || \"\");\n }\n }, [value]);\n\n const triggerChange = (changedValue: any[]) => {\n onChange?.(changedValue);\n elementHasLostFocus?.();\n };\n\n const onValueStringChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n inputTextRef.current = e.target.value;\n triggerChange([undefined, \"\"]);\n };\n\n const onElementLostFocus = async () => {\n if (!searching && inputText !== text) {\n // Debounce this event to give time to the search button onClick to set the flag\n await new Promise((resolve) => setTimeout(resolve, 100));\n\n // If the focus is lost because the user tapped the search button, we don't need to do nothing here\n if (searchButtonTappedRef.current) {\n triggerChange([undefined, \"\"]);\n return;\n }\n\n setSearching(true);\n\n try {\n if (transformedDomain.current && transformedDomain.current.length > 0) {\n tryFetchFirstResultOrShowSearch(inputTextRef.current as string);\n } else {\n const results: any[] =\n await ConnectionProvider.getHandler().nameSearch({\n model: relation,\n payload: inputTextRef.current as string,\n context: { ...getContext?.(), ...context },\n });\n\n if (results.length === 1) {\n inputTextRef.current = undefined;\n triggerChange(results[0]);\n } else {\n tryFetchFirstResultOrShowSearch(inputTextRef.current as string);\n }\n }\n } catch (err) {\n showErrorDialog(err);\n } finally {\n setSearching(false);\n }\n }\n };\n\n const tryFetchFirstResultOrShowSearch = async (text: string) => {\n await parseDomain();\n\n if (transformedDomain.current && transformedDomain.current.length > 0) {\n const resultIds = await ConnectionProvider.getHandler().searchAllIds({\n params: transformedDomain.current,\n model: relation,\n context: { ...getContext?.(), ...context },\n totalItems: 2,\n });\n\n if (resultIds.length === 1) {\n fetchNameAndUpdate(resultIds[0]);\n } else {\n setSearchText(text);\n setShowSearchModal(true);\n }\n return;\n }\n\n setSearchText(text);\n setShowSearchModal(true);\n };\n\n const fetchNameAndUpdate = async (id: number) => {\n setSearching(true);\n\n try {\n const value = await ConnectionProvider.getHandler().execute({\n action: \"name_get\",\n payload: [id],\n model: relation,\n context: { ...getContext?.(), ...context },\n });\n\n triggerChange([id, value[0][1]]);\n } catch (err) {\n showErrorDialog(err);\n } finally {\n setSearching(false);\n }\n };\n\n async function parseDomain() {\n if (widgetDomain) {\n transformedDomain.current =\n await ConnectionProvider.getHandler().evalDomain({\n domain: widgetDomain,\n values: transformPlainMany2Ones({\n fields: getFields(),\n values: getValues(),\n }),\n fields: getFields(),\n context: getContext(),\n });\n }\n\n if (domain && domain.length > 0) {\n transformedDomain.current = transformedDomain.current.concat(\n transformDomainForChildWidget({\n domain,\n widgetFieldName: fieldName,\n }),\n );\n }\n\n setSearchDomain(transformedDomain.current);\n }\n\n async function onKeyDown(event: any) {\n if (event.keyCode === 13) {\n event.preventDefault();\n event.stopPropagation();\n await onElementLostFocus();\n } else if (event.code === \"Backspace\" && id !== undefined) {\n event.preventDefault();\n event.stopPropagation();\n triggerChange([undefined, \"\"]);\n }\n }\n\n const CustomInput: any = required && !readOnly ? RequiredInput : Input;\n\n return (\n <Row gutter={8} wrap={false}>\n <Col flex=\"auto\">\n <CustomInput\n type=\"text\"\n value={inputText}\n disabled={readOnly}\n onChange={onValueStringChange}\n style={requiredStyle}\n onBlur={onElementLostFocus}\n onKeyDown={onKeyDown}\n suffix={\n <Many2oneSuffix\n id={id}\n model={relation}\n context={{ ...getContext?.(), ...context }}\n />\n }\n />\n </Col>\n <Col flex=\"32px\" style={{ paddingRight: 0 }}>\n <Button\n icon={<FolderOpenOutlined />}\n disabled={id === undefined || text === \"\" || inputText === undefined}\n onClick={() => {\n setShowFormModal(true);\n }}\n style={{ borderTopRightRadius: 0, borderBottomRightRadius: 0 }}\n tabIndex={-1}\n />\n </Col>\n <Col flex=\"32px\" style={{ paddingLeft: 0 }}>\n <Button\n icon={searching ? <LoadingOutlined /> : <SearchOutlined />}\n disabled={readOnly || searching}\n onClick={() => {\n searchButtonTappedRef.current = true;\n tryFetchFirstResultOrShowSearch(text);\n }}\n style={{ borderTopLeftRadius: 0, borderBottomLeftRadius: 0 }}\n tabIndex={-1}\n />\n </Col>\n <SearchModal\n model={relation}\n domain={searchDomain}\n context={{ ...getContext?.(), ...context }}\n visible={showSearchModal}\n nameSearch={!id ? searchText : undefined}\n onSelectValues={(ids: number[]) => {\n setShowSearchModal(false);\n fetchNameAndUpdate(ids[0]);\n searchButtonTappedRef.current = false;\n inputTextRef.current = undefined;\n }}\n onCloseModal={() => {\n setShowSearchModal(false);\n searchButtonTappedRef.current = false;\n }}\n />\n <FormModal\n model={relation}\n parentContext={{ ...getContext?.(), ...context }}\n id={value && value[0]}\n visible={showFormModal}\n onSubmitSucceed={(id?: number) => {\n setShowFormModal(false);\n fetchNameAndUpdate(id!);\n }}\n onCancel={() => {\n setShowFormModal(false);\n }}\n mustClearAfterSave={true}\n readOnly={readOnly}\n />\n </Row>\n );\n};\n\nconst RequiredInput = styled(Input)`\n .ant-input {\n background-color: ${mapToken.colorPrimaryBg};\n }\n`;\n","import { ViewType } from \"@/types\";\nimport React, { useState } from \"react\";\n\nexport type One2manyContextType = {\n currentView: ViewType;\n setCurrentView: (view: ViewType) => void;\n itemIndex: number;\n setItemIndex: (value: number) => void;\n manualTriggerChange: boolean;\n setManualTriggerChange: (value: boolean) => void;\n};\n\nexport const One2manyContext = React.createContext<One2manyContextType | null>(\n null,\n);\n\nconst One2manyProvider = ({\n children,\n initialView,\n}: {\n children: React.ReactNode;\n initialView: ViewType;\n}): any => {\n const [currentView, setCurrentView] = useState<ViewType>(initialView);\n const [itemIndex, setItemIndex] = useState<number>(0);\n const [manualTriggerChange, setManualTriggerChange] =\n useState<boolean>(false);\n\n return (\n <One2manyContext.Provider\n value={{\n currentView,\n setCurrentView,\n itemIndex,\n setItemIndex,\n manualTriggerChange,\n setManualTriggerChange,\n }}\n >\n {children}\n </One2manyContext.Provider>\n );\n};\n\nexport default One2manyProvider;\n","import React, { useState, useEffect } from \"react\";\nimport { LoadingOutlined } from \"@ant-design/icons\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport Title from \"antd/lib/typography/Title\";\nimport Measure from \"react-measure\";\nimport iconMapper from \"@/helpers/iconMapper\";\nimport { Alert, Col, Row } from \"antd\";\nimport { Operator, graphProcessor } from \"@gisce/ooui\";\n\nconst { getValueForOperator } = graphProcessor;\n\nconst fontGrowFactor = 0.7;\nconst minFontSize = 30;\n\nexport type GraphInidicatorProps = {\n model: string;\n domain: any;\n context: any;\n colorCondition?: string | null;\n totalDomain?: string;\n showPercent?: boolean;\n icon?: string;\n suffix?: string;\n field?: string;\n operator?: Operator;\n manualIds?: number[];\n};\n\nexport const GraphIndicator = (props: GraphInidicatorProps) => {\n const {\n model,\n domain,\n context,\n colorCondition,\n totalDomain,\n showPercent = false,\n icon: iconProps,\n suffix,\n field,\n operator,\n manualIds,\n } = props;\n const [loading, setLoading] = useState(false);\n const [value, setValue] = useState<number>();\n const [percent, setPercent] = useState<number>();\n const [totalValue, setTotalValue] = useState<number>();\n const [height, setHeight] = useState<number>(0);\n const [width, setWidth] = useState<number>(0);\n const [color, setColor] = useState<string>();\n const [icon, setIcon] = useState<string>();\n const [error, setError] = useState<string>();\n\n useEffect(() => {\n fetchData();\n }, [model, colorCondition]);\n\n async function fetchValue({\n domain,\n isTotal,\n }: {\n domain: any;\n isTotal: boolean;\n }) {\n if (isTotal) {\n return await fetchTotalValue({ domain });\n }\n\n if (field && operator) {\n const resultIds =\n manualIds ||\n (await ConnectionProvider.getHandler().searchAllIds({\n params: domain,\n model,\n context,\n }));\n\n const results = await ConnectionProvider.getHandler().readObjects({\n model,\n ids: resultIds,\n fieldsToRetrieve: [field],\n context,\n });\n\n return getValueForOperator({\n values: results.map((r: any) => r[field]),\n operator,\n });\n } else {\n return manualIds\n ? manualIds.length\n : await ConnectionProvider.getHandler().searchCount({\n model,\n params: domain,\n context,\n });\n }\n }\n\n async function fetchTotalValue({ domain }: { domain: any }) {\n if (field && operator) {\n const resultIds = await ConnectionProvider.getHandler().searchAllIds({\n params: domain,\n model,\n context,\n });\n\n const results = await ConnectionProvider.getHandler().readObjects({\n model,\n ids: resultIds,\n fieldsToRetrieve: [field],\n context,\n });\n\n return getValueForOperator({\n values: results.map((r: any) => r[field]),\n operator,\n });\n } else {\n return await ConnectionProvider.getHandler().searchCount({\n model,\n params: domain,\n context,\n });\n }\n }\n async function fetchData() {\n setLoading(true);\n let totalRetrievedValue;\n let percent;\n\n try {\n const retrievedValue = await fetchValue({ domain, isTotal: false });\n\n setValue(retrievedValue);\n\n if (totalDomain) {\n const parsedDomain = await ConnectionProvider.getHandler().evalDomain({\n domain: totalDomain,\n values: {},\n context,\n });\n totalRetrievedValue = await fetchValue({\n domain: parsedDomain,\n isTotal: true,\n });\n\n setTotalValue(totalRetrievedValue);\n }\n\n if (totalRetrievedValue) {\n percent =\n Math.round((retrievedValue / totalRetrievedValue) * 100 * 100) / 100;\n setPercent(percent);\n } else {\n setPercent(0);\n }\n\n if (colorCondition) {\n const conditionEval =\n await ConnectionProvider.getHandler().parseCondition({\n condition: colorCondition,\n values: { value: retrievedValue, percent },\n context,\n });\n setColor(conditionEval);\n }\n\n if (iconProps) {\n if (iconProps.indexOf(\":\") !== -1) {\n const iconEval = await ConnectionProvider.getHandler().parseCondition(\n {\n condition: iconProps,\n values: { value: retrievedValue, percent },\n context,\n },\n );\n setIcon(iconEval);\n } else {\n setIcon(iconProps);\n }\n }\n } catch (err) {\n setError(JSON.stringify(err));\n }\n\n setLoading(false);\n }\n\n if (error) {\n return <Alert className=\"mt-10\" message={error} type=\"error\" banner />;\n }\n\n if (loading) {\n return (\n <div style={{ padding: \"1rem\" }}>\n <LoadingOutlined style={{ height: \"12px\" }} />\n </div>\n );\n }\n\n return (\n <Measure\n bounds\n onResize={(contentRect) => {\n setHeight(contentRect.bounds?.height!);\n setWidth(contentRect.bounds?.width!);\n }}\n >\n {({ measureRef }) => {\n if (showPercent) {\n return (\n <PercentageIndicator\n value={value!}\n total={totalValue!}\n percent={percent!}\n measureRef={measureRef}\n height={height}\n width={width}\n color={color}\n icon={icon}\n suffix={suffix}\n />\n );\n } else {\n return (\n <CommonIndicator\n value={value!}\n total={totalValue}\n measureRef={measureRef}\n height={height}\n width={width}\n color={color}\n icon={icon}\n suffix={suffix}\n />\n );\n }\n }}\n </Measure>\n );\n};\n\nfunction getTextWidth(text: string, font: string) {\n const canvas = document.createElement(\"canvas\");\n const context = canvas.getContext(\"2d\");\n\n context!.font = font || getComputedStyle(document.body).font;\n return context!.measureText(text).width;\n}\n\nfunction CommonIndicator({\n measureRef,\n width,\n height,\n total,\n value,\n color,\n icon,\n suffix,\n}: {\n measureRef: any;\n width: number;\n height: number;\n total: number | undefined;\n value: number;\n color: string | undefined;\n icon?: string;\n suffix?: string;\n}) {\n let fontSize =\n height * fontGrowFactor < minFontSize\n ? minFontSize\n : height * fontGrowFactor;\n\n const localeValue = value?.toLocaleString(\"es-ES\", {\n useGrouping: true,\n });\n\n let finalValue = total ? `${localeValue}/${total}` : `${localeValue}`;\n\n if (suffix) {\n finalValue += \" \" + suffix;\n }\n\n let tw = getTextWidth(\n finalValue,\n `bold ${Math.floor(fontSize * 1.03)}px sans-serif`,\n );\n\n if (icon) {\n tw = tw * 2;\n }\n\n if (tw >= width * 0.85) {\n const maxFontSize = ((width * 0.85) / tw) * fontSize;\n fontSize = maxFontSize;\n }\n\n const IconElement: any =\n icon && iconMapper(icon, { style: { fontSize: fontSize * 0.7 } });\n\n return (\n <div\n ref={measureRef}\n style={{\n width: \"100%\",\n height: \"100%\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n overflow: \"hidden\",\n }}\n >\n <Title style={{ fontSize, margin: 0, color }}>\n {IconElement && <IconElement style={{ fontSize: fontSize * 0.7 }} />}\n {IconElement ? ` ${finalValue}` : finalValue}\n </Title>\n </div>\n );\n}\n\nfunction PercentageIndicator({\n measureRef,\n height,\n width,\n percent,\n total,\n value,\n color,\n icon,\n suffix,\n}: {\n measureRef: any;\n height: number;\n width: number;\n percent: number;\n total: number;\n value: number;\n color: string | undefined;\n icon?: string;\n suffix?: string;\n}) {\n const twoLinesHeight = height * 0.65;\n let fontSize =\n twoLinesHeight * fontGrowFactor < minFontSize\n ? minFontSize\n : twoLinesHeight * fontGrowFactor;\n\n const localeValue = value?.toLocaleString(\"es-ES\", {\n useGrouping: true,\n });\n\n let finalValue = total\n ? `${localeValue}/${total?.toLocaleString(\"es-ES\", {\n useGrouping: true,\n })}`\n : `${localeValue}`;\n\n if (suffix) {\n finalValue += \" \" + suffix;\n }\n\n const percentValue = `${percent?.toLocaleString(\"es-ES\", {\n useGrouping: true,\n })}%`;\n\n let tw = getTextWidth(\n percentValue,\n `bold ${Math.floor(fontSize * 1.03)}px sans-serif`,\n );\n\n if (icon) {\n tw = tw * 1.5;\n }\n\n if (tw >= width * 0.85 || fontSize * 2 < twoLinesHeight) {\n const maxFontSize = ((width * 0.85) / tw) * fontSize;\n fontSize = maxFontSize;\n }\n\n const IconElement: any = icon && iconMapper(icon, { style: { fontSize } });\n\n return (\n <div\n ref={measureRef}\n style={{\n width: \"100%\",\n height: \"100%\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n overflow: \"hidden\",\n flexDirection: \"column\",\n padding: \"0.2rem\",\n }}\n >\n <Row align={\"middle\"}>\n {IconElement && (\n <Col style={{ fontSize: fontSize * 1, color, paddingRight: \"10px\" }}>\n <IconElement />\n </Col>\n )}\n <Col>\n <Title style={{ fontSize: fontSize * 0.8, margin: 0, color }}>\n {IconElement ? ` ${percent}%` : `${percent}%`}\n </Title>\n <Title\n style={{\n fontSize: fontSize * 0.4,\n margin: 0,\n color,\n textAlign: \"center\",\n }}\n >\n {finalValue}\n </Title>\n </Col>\n </Row>\n </div>\n );\n}\n","import dayjs from \"@/helpers/dayjs\";\n\nconst formatter = (graphType: \"pie\" | \"default\" | \"barGrouped\") => {\n return (object: any) => {\n const formattedValue = object.value.toLocaleString(\"es-ES\", {\n useGrouping: true,\n });\n const name = graphType === \"pie\" ? object.x : object.type;\n return { name, value: formattedValue };\n };\n};\n\nconst axisFormatter = (value: any) => {\n if (typeof value === \"string\" && stringIsValidNumeric(value)) {\n return parseFloat(value).toLocaleString(\"es-ES\", {\n useGrouping: true,\n });\n } else if (isNumber(value)) {\n return value.toLocaleString(\"es-ES\", {\n useGrouping: true,\n });\n } else if (isValidDateString(value)) {\n const dateType = getDateType(value);\n if (dateType === null) {\n return value;\n }\n return dayjs(value, (dateFormats.input as any)[dateType]).format(\n (dateFormats.output as any)[dateType],\n );\n } else {\n return value;\n }\n};\n\nconst stringIsValidNumeric = (value: string) => {\n const regex = /^[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?$/;\n return regex.test(value);\n};\n\nconst isNumber = (value: any) => {\n return typeof value === \"number\" && !isNaN(value);\n};\n\nconst DefaultGraphOptions = {\n default: {\n padding: \"auto\",\n xAxis: {\n tickCount: 5,\n label: {\n formatter: axisFormatter,\n },\n },\n yAxis: {\n label: {\n formatter: axisFormatter,\n },\n },\n legend: {\n maxWidthRatio: 0.5,\n maxItemWidth: 1000,\n },\n tooltip: {\n formatter: formatter(\"default\"),\n },\n },\n pie: {\n appendPadding: 10,\n radius: 0.9,\n label: {\n type: \"inner\",\n offset: \"-30%\",\n content: ({ percent }: any) => `${(percent * 100).toFixed(0)}%`,\n style: {\n fontSize: 14,\n textAlign: \"center\",\n },\n },\n legend: {\n maxWidthRatio: 0.5,\n maxItemWidth: 1000,\n },\n tooltip: {\n formatter: formatter(\"pie\"),\n },\n interactions: [\n {\n type: \"element-active\",\n },\n ],\n },\n barGrouped: {\n isGroup: true,\n legend: {\n maxWidthRatio: 0.5,\n maxItemWidth: 1000,\n },\n tooltip: {\n formatter: formatter(\"barGrouped\"),\n },\n xAxis: {\n label: {\n formatter: axisFormatter,\n },\n },\n yAxis: {\n label: {\n formatter: axisFormatter,\n },\n },\n label: {\n position: \"middle\",\n layout: [\n {\n type: \"interval-adjust-position\",\n },\n {\n type: \"interval-hide-overlap\",\n },\n {\n type: \"adjust-color\",\n },\n ],\n },\n },\n};\n\nfunction isValidDateString(variable: any): boolean {\n // Check if the variable is defined and is a string\n if (typeof variable !== \"string\" || variable === undefined) {\n return false;\n }\n\n // Check if the string is a valid date\n const date = new Date(variable);\n return date.toString() !== \"Invalid Date\";\n}\n\nconst dateFormats = {\n input: {\n hours: \"YYYY-MM-DD HH:mm\",\n days: \"YYYY-MM-DD\",\n weeks: \"YYYY-[W]WW\",\n months: \"YYYY-MM\",\n years: \"YYYY\",\n },\n output: {\n hours: \"DD/MM/YYYY HH:mm\",\n days: \"DD/MM/YYYY\",\n weeks: \"[W]WW/YYYY\",\n months: \"MM/YYYY\",\n years: \"YYYY\",\n },\n};\n\nfunction getDateType(dateString: string): string | null {\n for (const format in dateFormats.input) {\n const isValidFormat = dayjs(\n dateString,\n (dateFormats.input as any)[format],\n true,\n ).isValid();\n if (isValidFormat) {\n return format;\n }\n }\n\n return null;\n}\n\nexport default DefaultGraphOptions;\n","import { useState } from \"react\";\nimport {\n parseGraph,\n GraphChart as GraphChartOoui,\n graphProcessor,\n graphFieldUtils,\n GraphType,\n} from \"@gisce/ooui\";\nimport useDeepCompareEffect from \"use-deep-compare-effect\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\n\nconst { processGraphData } = graphProcessor;\nconst { getFieldsToRetrieve } = graphFieldUtils;\n\nexport type GraphDataQueryOpts = {\n model: string;\n domain?: any;\n context?: any;\n limit?: number;\n manualIds?: number[];\n};\n\nexport type GraphDataOpts = GraphDataQueryOpts & {\n xml: string;\n uninformedString: string;\n};\n\nexport const useGraphData = (opts: GraphDataOpts) => {\n const {\n model,\n domain = [],\n context = {},\n xml,\n limit,\n uninformedString,\n manualIds,\n } = opts;\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<any>();\n const [processedValues, setProcessedValues] = useState<any>();\n const [evaluatedEntries, setEvaluatedEntries] = useState<any[]>();\n const [type, setType] = useState<GraphType>(\"line\");\n\n useDeepCompareEffect(() => {\n (async () => {\n setLoading(true);\n setError(undefined);\n\n // // First we parse the xml with ooui library\n const ooui = parseGraph(xml) as GraphChartOoui;\n setType(ooui.type || \"line\");\n\n // // Then we fetch the data\n const fieldsToRetrieve = getFieldsToRetrieve({ ooui });\n let values, fields;\n\n try {\n // Use connection provider or whatever service you need to use\n ({ values, fields } = await retrieveData({\n model,\n domain,\n context,\n limit,\n order: ooui.timerange ? ooui.x.name : null,\n fields: fieldsToRetrieve,\n manualIds,\n }));\n } catch (e) {\n setError(\"Error fetching graph data values: \" + JSON.stringify(e));\n setLoading(false);\n return;\n }\n\n try {\n if (!values || !fields) {\n setError(\"No values or fields returned\");\n setLoading(false);\n return;\n }\n\n setEvaluatedEntries(values);\n const _processedValues = processGraphData({\n ooui,\n values,\n fields,\n options: {\n uninformedString,\n },\n });\n setProcessedValues(_processedValues);\n } catch (e) {\n setError(\"Error processing graph data: \" + e);\n setLoading(false);\n return;\n }\n\n setLoading(false);\n })();\n }, [xml, model, limit, context, domain]);\n\n return {\n loading,\n error,\n type,\n values: processedValues,\n evaluatedEntries,\n };\n};\n\nasync function getFieldsForModel({\n model,\n context,\n fields,\n}: {\n model: string;\n context: any;\n fields: string[];\n}) {\n const viewData = await ConnectionProvider.getHandler().getFields({\n model,\n context,\n fields,\n });\n return viewData;\n}\n\nasync function retrieveData({\n fields,\n model,\n domain,\n context,\n order,\n limit,\n manualIds,\n}: {\n fields: string[];\n model: string;\n domain: any;\n context: any;\n order: string | null;\n limit?: number;\n manualIds?: number[];\n}) {\n const fieldsDefinition = await getFieldsForModel({ model, context, fields });\n\n if (manualIds) {\n let values: any[] = (await ConnectionProvider.getHandler().readObjects({\n model,\n ids: manualIds,\n fieldsToRetrieve: fields,\n context,\n })) as any;\n\n if (order) {\n values = [...values].sort((a, b) => a[order] - b[order]);\n }\n\n return {\n values,\n fields: fieldsDefinition,\n };\n }\n\n const values: any[] = (await ConnectionProvider.getHandler().search({\n model,\n params: domain,\n fieldsToRetrieve: fields,\n context,\n limit,\n order,\n })) as any;\n return {\n values,\n fields: fieldsDefinition,\n };\n}\n","import { useContext } from \"react\";\nimport { Line, Column, Pie } from \"@ant-design/plots\";\nimport GraphDefaults from \"./GraphDefaults\";\nimport { useGraphData } from \"./useGraphData\";\nimport { Alert, Spin } from \"antd\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\nconst types = {\n line: Line,\n bar: Column,\n pie: Pie,\n};\n\nexport type GraphChartProps = {\n model: string;\n domain: any;\n context: any;\n xml: string;\n limit?: number;\n manualIds?: number[];\n};\n\nexport const GraphChart = (props: GraphChartProps) => {\n const { model, domain, context, xml, limit, manualIds } = props;\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n const { error, loading, values, type, evaluatedEntries } = useGraphData({\n model,\n xml,\n limit,\n domain,\n context,\n uninformedString: t(\"uninformed\"),\n manualIds,\n });\n\n if (error) {\n return <Alert message={error} type=\"error\" banner />;\n }\n\n if (loading) {\n return <Spin />;\n }\n\n if (!values) {\n return <Alert message=\"No data to display\" type=\"info\" />;\n }\n\n const { data, isGroup, isStack } = values;\n\n const Chart = (types as any)[type!];\n\n if (!Chart) {\n return <>{`Unknown graph type: ${type}`}</>;\n }\n\n return (\n <div style={{ padding: \"1rem\" }}>\n <p style={{ textAlign: \"right\" }}>\n {`${t(\"totalRegisters\")} ${evaluatedEntries?.length?.toLocaleString(\n \"es-ES\",\n {\n useGrouping: true,\n },\n )}`}\n </p>\n <Chart\n {...getGraphProps({\n type,\n data,\n isGroup,\n isStack,\n })}\n />\n </div>\n );\n};\n\ntype GetGraphPropsType = {\n type: string;\n isStack: boolean;\n isGroup: boolean;\n data: any[];\n};\n\nfunction getGraphProps(props: GetGraphPropsType) {\n const { type, data, isGroup, isStack } = props;\n let graphProps = { ...(GraphDefaults as any)[type] };\n\n if (!graphProps) {\n graphProps = { ...(GraphDefaults as any)[\"default\"] };\n }\n\n graphProps.data = data;\n\n if (type === \"pie\") {\n graphProps.colorField = \"x\";\n graphProps.angleField = \"value\";\n } else {\n graphProps.xField = \"x\";\n graphProps.yField = \"value\";\n graphProps.seriesField = \"type\";\n\n graphProps.isGroup = isGroup;\n\n if (isStack) {\n graphProps.isStack = true;\n graphProps.groupField = \"stacked\";\n }\n }\n\n return graphProps;\n}\n","import React, {\n useState,\n useEffect,\n useContext,\n forwardRef,\n useImperativeHandle,\n} from \"react\";\nimport {\n Graph as GraphOoui,\n parseGraph,\n GraphIndicator as GraphIndicatorOoui,\n GraphIndicatorField,\n} from \"@gisce/ooui\";\nimport { LoadingOutlined } from \"@ant-design/icons\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport { GraphIndicator } from \"./GraphIndicator\";\nimport { GraphChart } from \"./GraphChart\";\nimport { GraphView } from \"@/types\";\nimport {\n ActionViewContext,\n ActionViewContextType,\n} from \"@/context/ActionViewContext\";\n\nexport type GraphProps = {\n view_id: number;\n model: string;\n domain: any;\n context: any;\n limit?: number;\n manualIds?: number[];\n};\n\nconst GraphComp = (props: GraphProps, ref: any) => {\n const { view_id, model, context, domain, limit, manualIds } = props;\n const [loading, setLoading] = useState(false);\n const [graphOoui, setGraphOoui] = useState<GraphOoui>();\n const [graphXml, setGraphXml] = useState<string>();\n const actionViewContext = useContext(\n ActionViewContext,\n ) as ActionViewContextType;\n const { setGraphIsLoading = undefined } = actionViewContext || {};\n\n useImperativeHandle(ref, () => ({\n refresh: () => {\n fetchData();\n },\n }));\n\n useEffect(() => {\n fetchData();\n }, [view_id]);\n\n async function fetchData() {\n setLoading(true);\n setGraphIsLoading?.(true);\n\n try {\n const viewData = (await ConnectionProvider.getHandler().getView({\n model,\n id: view_id,\n type: \"graph\",\n context,\n })) as GraphView;\n\n setGraphXml(viewData.arch);\n const graph = parseGraph(viewData.arch);\n setGraphOoui(graph);\n } catch (err) {\n console.error(err);\n return <>{JSON.stringify(err)}</>;\n }\n\n setLoading(false);\n setGraphIsLoading?.(false);\n }\n\n if (loading) {\n return (\n <div\n style={{\n width: \"100%\",\n display: \"flex\",\n height: \"20%\",\n justifyContent: \"center\",\n alignContent: \"center\",\n padding: \"1rem\",\n }}\n >\n <LoadingOutlined style={{ height: \"12px\" }} />\n </div>\n );\n }\n\n if (!graphOoui) {\n return null;\n }\n\n switch (graphOoui.type) {\n case \"indicatorField\":\n case \"indicator\": {\n const indicator = graphOoui as GraphIndicatorOoui;\n const indicatorFieldopts =\n indicator.type === \"indicatorField\"\n ? {\n field: (indicator as GraphIndicatorField).field,\n operator: (indicator as GraphIndicatorField).operator,\n }\n : {};\n\n return (\n <GraphIndicator\n showPercent={indicator.showPercent}\n totalDomain={indicator.totalDomain!}\n colorCondition={indicator.color}\n model={model}\n context={context}\n domain={domain}\n icon={indicator.icon!}\n suffix={indicator.suffix!}\n manualIds={manualIds}\n {...indicatorFieldopts}\n />\n );\n }\n case \"line\":\n case \"bar\":\n case \"pie\": {\n return (\n <GraphChart\n model={model}\n context={context}\n domain={domain}\n xml={graphXml!}\n limit={limit}\n manualIds={manualIds}\n />\n );\n }\n default: {\n return <>{`Graph ${graphOoui.type} not implemented`}</>;\n }\n }\n};\n\nexport const Graph = forwardRef(GraphComp);\n","import React from \"react\";\nimport { Modal } from \"antd\";\nimport { ExclamationCircleOutlined } from \"@ant-design/icons\";\nimport { tForLang } from \"@/context/LocaleContext\";\n\nconst { confirm } = Modal;\n\nconst showDialog = ({ onOk, lang }: { onOk: () => void; lang: string }) => {\n confirm({\n title: tForLang(\"removeItems\", lang),\n icon: <ExclamationCircleOutlined />,\n centered: true,\n content: tForLang(\"confirmRemove\", lang),\n okText: tForLang(\"yesConfirmRemove\", lang),\n onOk,\n cancelText: tForLang(\"cancel\", lang),\n });\n};\n\nexport default showDialog;\n","import React from \"react\";\nimport { Modal } from \"antd\";\nimport { ExclamationCircleOutlined } from \"@ant-design/icons\";\nimport { tForLang } from \"@/context/LocaleContext\";\n\nconst { confirm } = Modal;\n\nconst showDialog = ({ onOk, lang }: { onOk: () => void; lang: string }) => {\n confirm({\n title: tForLang(\"unlinkItems\", lang),\n icon: <ExclamationCircleOutlined />,\n centered: true,\n content: tForLang(\"confirmUnlink\", lang),\n okText: tForLang(\"yesConfirmUnlink\", lang),\n onOk,\n cancelText: tForLang(\"cancel\", lang),\n });\n};\n\nexport default showDialog;\n","import React from \"react\";\nimport ButtonWithTooltip from \"@/common/ButtonWithTooltip\";\n\nimport {\n FileAddOutlined,\n DeleteOutlined,\n LeftOutlined,\n RightOutlined,\n AlignLeftOutlined,\n SearchOutlined,\n ApiOutlined,\n} from \"@ant-design/icons\";\nimport { ViewType } from \"@/types\";\nimport { theme } from \"antd\";\nconst { useToken } = theme;\n\ntype One2manyTopBarProps = {\n title: string;\n mode: ViewType;\n isMany2Many: boolean;\n readOnly: boolean;\n formHasChanges: boolean;\n onToggleViewMode: () => void;\n onCreateItem: () => void;\n onDelete: () => void;\n totalItems: number;\n currentItemIndex: number;\n onPreviousItem: () => void;\n onNextItem: () => void;\n onSearchItem: () => void;\n selectedRowKeys: string[];\n showToggleButton: boolean;\n showCreateButton: boolean;\n};\n\nexport const One2manyTopBar = (props: One2manyTopBarProps) => {\n const {\n title: titleString,\n readOnly,\n onCreateItem,\n onToggleViewMode,\n mode,\n onDelete,\n totalItems,\n currentItemIndex,\n onPreviousItem,\n onNextItem,\n isMany2Many,\n onSearchItem,\n selectedRowKeys,\n showCreateButton,\n showToggleButton,\n } = props;\n const { token } = useToken();\n\n function separator() {\n return <div className=\"inline-block w-3\" />;\n }\n\n function title() {\n return (\n <div\n className=\"flex flex-grow h-8 text-white\"\n style={{\n borderRadius: token.borderRadius,\n backgroundColor: token.colorPrimaryActive,\n }}\n >\n <div className=\"flex flex-col items-center justify-center h-full\">\n <span className=\"pl-2 font-bold\">{titleString}</span>\n </div>\n </div>\n );\n }\n\n function deleteButton() {\n return (\n <ButtonWithTooltip\n tooltip={isMany2Many ? \"Unlink\" : \"Delete\"}\n icon={isMany2Many ? <ApiOutlined /> : <DeleteOutlined />}\n onClick={onDelete}\n disabled={\n totalItems === 0 ||\n readOnly ||\n (mode !== \"form\" && selectedRowKeys.length === 0)\n }\n />\n );\n }\n\n function index() {\n let itemToShow = \"_\";\n if (totalItems === 0) {\n itemToShow = \"_\";\n } else {\n itemToShow = (currentItemIndex + 1).toString();\n }\n return (\n <span className=\"pl-1 pr-1\">\n ({itemToShow}/{totalItems})\n </span>\n );\n }\n\n function itemBrowser() {\n return (\n <>\n {separator()}\n <ButtonWithTooltip\n tooltip={\"Previous item\"}\n icon={<LeftOutlined />}\n onClick={onPreviousItem}\n />\n {index()}\n <ButtonWithTooltip\n tooltip={\"Next item\"}\n icon={<RightOutlined />}\n onClick={onNextItem}\n />\n </>\n );\n }\n\n return (\n <div className=\"flex mb-2\">\n {title()}\n <div className=\"flex-none h-8 pl-2\">\n {mode !== \"graph\" && showCreateButton && (\n <ButtonWithTooltip\n tooltip={\"Create new item\"}\n icon={<FileAddOutlined />}\n disabled={readOnly}\n onClick={onCreateItem}\n />\n )}\n {isMany2Many && showCreateButton && (\n <ButtonWithTooltip\n tooltip={\"Search existing item\"}\n icon={<SearchOutlined />}\n disabled={readOnly}\n onClick={onSearchItem}\n />\n )}\n {mode !== \"graph\" && separator()}\n {mode !== \"graph\" && deleteButton()}\n {mode === \"form\" && itemBrowser()}\n {separator()}\n {showToggleButton && (\n <ButtonWithTooltip\n tooltip={\"Toggle view mode\"}\n icon={<AlignLeftOutlined />}\n onClick={onToggleViewMode}\n />\n )}\n </div>\n </div>\n );\n};\n","import React, {\n useState,\n useRef,\n useContext,\n useEffect,\n useCallback,\n} from \"react\";\nimport {\n One2many as One2manyOoui,\n Form as FormOoui,\n Tree as TreeOoui,\n parseGraph,\n transformDomainForChildWidget,\n} from \"@gisce/ooui\";\nimport { Alert, Spin } from \"antd\";\nimport { Form, Tree } from \"@/index\";\nimport { Graph } from \"@/widgets/views/Graph/Graph\";\nimport { Views, ViewType } from \"@/types\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport { FormModal } from \"@/widgets/modals/FormModal\";\nimport showUnsavedChangesDialog from \"@/ui/UnsavedChangesDialog\";\nimport showRemoveItemDialog from \"@/ui/RemoveItemDialog\";\nimport showUnlinkItemDialog from \"@/ui/UnlinkItemDialog\";\nimport {\n One2manyContext,\n One2manyContextType,\n} from \"@/context/One2manyContext\";\nimport { FormContext, FormContextType } from \"@/context/FormContext\";\nimport { One2manyTopBar } from \"@/widgets/base/one2many/One2manyTopBar\";\nimport { readObjectValues, getNextPendingId } from \"@/helpers/one2manyHelper\";\nimport { SearchModal } from \"@/widgets/modals/SearchModal\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport { getColorMap, getTree, sortResults } from \"@/helpers/treeHelper\";\nimport { transformPlainMany2Ones } from \"@/helpers/formHelper\";\n\ntype One2manyValue = {\n fields?: any;\n items: One2manyItem[];\n};\n\nconst ViewObjects = {\n form: FormOoui,\n tree: TreeOoui,\n graph: Graph,\n};\n\ntype One2manyItem = {\n operation?:\n | \"original\"\n | \"pendingRemove\"\n | \"pendingUpdate\"\n | \"pendingCreate\"\n | \"pendingLink\";\n id?: number;\n values?: any;\n treeValues?: any;\n defaultValues?: any;\n};\n\ninterface One2manyInputProps {\n ooui: One2manyOoui;\n value?: One2manyValue;\n onChange?: (value: One2manyValue) => void;\n views: Views;\n}\n\nfunction filterDuplicateItems(items: any) {\n const ids = items.map((o: any) => o.id);\n const filtered = items.filter((item: any, index: number) => {\n const { id } = item;\n return !ids.includes(id, index + 1);\n });\n return filtered;\n}\n\nconst One2manyInput: React.FC<One2manyInputProps> = (\n props: One2manyInputProps,\n) => {\n const { value, onChange, ooui, views } = props;\n const { items = [] } = value || {};\n\n const { currentView, setCurrentView, itemIndex, setItemIndex } = useContext(\n One2manyContext,\n ) as One2manyContextType;\n\n const formContext = useContext(FormContext) as FormContextType;\n const { activeId, getFields, getValues, getContext, domain } =\n formContext || {};\n const { lang, t } = useContext(LocaleContext) as LocaleContextType;\n\n const [formHasChanges, setFormHasChanges] = useState<boolean>(false);\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [error, setError] = useState<string>();\n const [showFormModal, setShowFormModal] = useState<boolean>(false);\n const [showSearchModal, setShowSearchModal] = useState<boolean>(false);\n const [modalItem, setModalItem] = useState<One2manyItem>();\n const [selectedRowKeys, setSelectedRowKeys] = useState<any[]>([]);\n const [continuousEntryMode, setContinuousEntryMode] =\n useState<boolean>(false);\n const transformedDomain = useRef<any[]>([]);\n const [sorter, setSorter] = useState<any>();\n const originalSortItemIds = useRef<number[]>();\n const [colorsForResults, setColorsForResults] = useState<any>(undefined);\n\n const {\n readOnly,\n relation,\n context,\n domain: widgetDomain,\n } = ooui as One2manyOoui;\n const isMany2many = ooui.type === \"many2many\";\n const { id: fieldName } = ooui;\n const itemsToShow = items.filter(\n (item) =>\n (item.values || item.treeValues) && item.operation !== \"pendingRemove\",\n );\n const previousCurrentView = useRef<ViewType>();\n\n useEffect(() => {\n if (previousCurrentView.current !== currentView) {\n previousCurrentView.current = currentView;\n fetchDataIfNeeded();\n return;\n }\n\n fetchDataIfNeeded();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [items, currentView]);\n\n const fetchDataIfNeeded = useCallback(() => {\n if (currentView === \"form\" && items.some((item) => !item.values)) {\n fetchData();\n } else if (\n currentView === \"tree\" &&\n items.some((item) => !item.treeValues)\n ) {\n fetchData();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [items, currentView]);\n\n useEffect(() => {\n parseDomain();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [domain]);\n\n const triggerChange = (changedValue: One2manyItem[]) => {\n onChange?.({\n fields: views.get(\"form\")?.fields || views.get(\"tree\")?.fields,\n items: filterDuplicateItems(changedValue),\n });\n };\n\n const fetchData = async () => {\n await fetchOriginalItemsFromApi();\n if (itemIndex > itemsToShow.length - 1 && itemIndex !== 0) {\n setItemIndex(0);\n }\n };\n\n const fetchOriginalItemsFromApi = async (mode?: ViewType) => {\n setIsLoading(true);\n setFormHasChanges(false);\n setError(undefined);\n\n try {\n const [itemsWithValues, evaluatedColorsForTree] = await readObjectValues({\n treeView: {\n arch: views.get(\"tree\")?.arch,\n fields: views.get(\"tree\")?.fields,\n },\n formView: {\n fields: views.get(\"form\")?.fields || {},\n },\n model: relation,\n items,\n context: { ...getContext?.(), ...context },\n currentView: mode || currentView,\n });\n\n if (!originalSortItemIds.current) {\n originalSortItemIds.current = itemsWithValues.map((item) => item.id!);\n }\n\n if ((currentView || mode) === \"tree\" && evaluatedColorsForTree) {\n setColorsForResults(evaluatedColorsForTree);\n }\n\n triggerChange(itemsWithValues);\n return itemsWithValues;\n } catch (err) {\n setError(err as any);\n } finally {\n setIsLoading(false);\n }\n };\n\n async function parseDomain() {\n if (widgetDomain) {\n transformedDomain.current =\n await ConnectionProvider.getHandler().evalDomain({\n domain: widgetDomain,\n values: transformPlainMany2Ones({\n fields: getFields(),\n values: getValues(),\n }),\n fields: getFields(),\n context: getContext(),\n });\n }\n\n if (domain && domain.length > 0) {\n transformedDomain.current = transformedDomain.current.concat(\n transformDomainForChildWidget({\n domain,\n widgetFieldName: fieldName,\n }),\n );\n }\n }\n\n const toggleViewMode = () => {\n const keys = Array.from(views.keys());\n const nextView = keys[\n (keys.indexOf(currentView) + 1) % keys.length\n ] as ViewType;\n if (currentView === \"form\") {\n showFormChangesDialogIfNeeded(() => {\n setCurrentView(nextView);\n });\n } else {\n setCurrentView(nextView);\n }\n };\n\n const previousItem = () => {\n if (itemIndex > 0) {\n if (currentView === \"form\") {\n showFormChangesDialogIfNeeded(() => {\n setItemIndex(itemIndex - 1);\n });\n } else {\n setItemIndex(itemIndex - 1);\n }\n }\n };\n\n const nextItem = () => {\n const totalItems = itemsToShow.length;\n if (itemIndex < totalItems - 1) {\n if (currentView === \"form\") {\n showFormChangesDialogIfNeeded(() => {\n setItemIndex(itemIndex + 1);\n });\n } else {\n setItemIndex(itemIndex + 1);\n }\n }\n };\n\n const reloadOriginalValuesForFormItem = async () => {\n const currentId = itemsToShow[itemIndex].id!;\n\n const updatedFormObject = (\n await ConnectionProvider.getHandler().readObjects({\n model: relation,\n ids: [currentId],\n fields: views.get(\"form\").fields,\n context: { ...getContext?.(), ...context },\n })\n )[0];\n const updatedTreeObject = (\n await ConnectionProvider.getHandler().readObjects({\n model: relation,\n ids: [currentId],\n fields: views.get(\"tree\").fields,\n context: { ...getContext?.(), ...context },\n })\n )[0];\n\n const updatedItems: One2manyItem[] = items.map((item) => {\n if (item.id === currentId) {\n return {\n ...item,\n operation: \"original\",\n values: updatedFormObject,\n treeValues: updatedTreeObject,\n };\n }\n return item;\n });\n\n triggerChange(updatedItems);\n };\n\n const showFormChangesDialogIfNeeded = (callback: () => void) => {\n if (formHasChanges) {\n showUnsavedChangesDialog({\n lang,\n onOk: () => {\n reloadOriginalValuesForFormItem();\n callback();\n setFormHasChanges(false);\n },\n });\n } else {\n callback();\n }\n };\n\n const showRemoveConfirm = () => {\n if (isMany2many) {\n showUnlinkItemDialog({\n lang,\n onOk: () => {\n if (currentView === \"form\") {\n removeCurrentItem();\n } else {\n removeSelectedItems();\n }\n },\n });\n return;\n }\n\n showRemoveItemDialog({\n lang,\n onOk: () => {\n if (currentView === \"form\") {\n removeCurrentItem();\n } else {\n removeSelectedItems();\n }\n },\n });\n };\n\n const createItem = async () => {\n const { inv_field } = ooui;\n let defaultValues: any;\n\n if (inv_field && activeId) {\n defaultValues = { [inv_field]: activeId };\n }\n\n if (currentView === \"form\") {\n showFormChangesDialogIfNeeded(() => {\n setContinuousEntryMode(true);\n setModalItem({ defaultValues });\n setShowFormModal(true);\n });\n } else {\n setContinuousEntryMode(true);\n setModalItem({ defaultValues });\n setShowFormModal(true);\n }\n };\n\n const searchItem = async () => {\n if (currentView === \"form\") {\n showFormChangesDialogIfNeeded(() => {\n setShowSearchModal(true);\n });\n } else {\n setShowSearchModal(true);\n }\n };\n\n const removeCurrentItem = async () => {\n setIsLoading(true);\n setFormHasChanges(false);\n setError(undefined);\n\n try {\n if (itemsToShow[itemIndex].id! > 0) {\n const updatedItems = items.map((item) => {\n if (item.id === itemsToShow[itemIndex].id!) {\n return {\n ...item,\n operation: \"pendingRemove\",\n } as One2manyItem;\n } else {\n return item;\n }\n });\n triggerChange(updatedItems);\n } else {\n triggerChange(\n items.filter((item) => item.id !== itemsToShow[itemIndex].id!),\n );\n }\n } catch (err) {\n setError(err as any);\n }\n\n setItemIndex(0);\n setIsLoading(false);\n };\n\n const removeSelectedItems = async () => {\n const itemsToRemove = itemsToShow.filter((item) => {\n return selectedRowKeys.includes(item.id);\n });\n\n setIsLoading(true);\n setFormHasChanges(false);\n setError(undefined);\n\n try {\n const idsToRemove: number[] = itemsToRemove.map((item) => item.id!);\n\n const updatedItems = items\n .filter((item) => {\n if (idsToRemove.includes(item.id!) && item.id! < 0) {\n return false;\n }\n return true;\n })\n .map((item) => {\n if (idsToRemove.includes(item.id!)) {\n return {\n ...item,\n operation: \"pendingRemove\",\n } as One2manyItem;\n } else {\n return item;\n }\n });\n triggerChange(updatedItems);\n } catch (err) {\n setError(err as any);\n }\n\n setItemIndex(0);\n setIsLoading(false);\n };\n\n // This is the callback called when a modal is done creating/updating the object\n const onFormModalSubmitSucceed = (\n id: number | undefined,\n _: any,\n values: any,\n x2manyPendingLink: boolean = false,\n ) => {\n let updatedItems: One2manyItem[];\n\n if (x2manyPendingLink) {\n updatedItems = items.concat({\n id,\n operation: \"pendingLink\",\n values: { ...values, id },\n treeValues: { ...values, id },\n });\n } else if (id) {\n updatedItems = items.map((item: One2manyItem) => {\n if (item.id === id) {\n return {\n id,\n operation: id > 0 ? \"pendingUpdate\" : \"pendingCreate\",\n values: { ...values, id },\n treeValues: { ...values, id },\n };\n }\n return item;\n });\n } else {\n const nextId = getNextPendingId(items);\n updatedItems = items.concat({\n id: nextId,\n operation: \"pendingCreate\",\n values: { ...values, id: nextId },\n treeValues: { ...values, id: nextId },\n });\n }\n\n triggerChange(updatedItems);\n\n if (!continuousEntryMode) {\n setShowFormModal(false);\n }\n };\n\n const onTreeRowClicked = async (record: any) => {\n const { id: itemId } = record;\n\n let itemsToLoadFrom: One2manyItem[] | undefined = items;\n\n // We should fetch the form data if needed in order to get the form values\n const modalItem = items.find((item) => item.id === itemId);\n if (modalItem?.values === undefined) {\n itemsToLoadFrom = await fetchOriginalItemsFromApi(\"form\");\n }\n\n // We show the detail for the clicked item in a Form modal\n setModalItem(itemsToLoadFrom!.find((item) => item.id === itemId));\n setContinuousEntryMode(false);\n setShowFormModal(true);\n };\n\n const onSearchModalSelectValue = async (ids: number[]) => {\n setIsLoading(true);\n\n const updatedItems = items;\n const filteredIds = ids.filter((id) => {\n return !items.find((item) => item.id === id);\n });\n\n try {\n for (const id of filteredIds) {\n const updatedFormObject = (\n await ConnectionProvider.getHandler().readObjects({\n model: relation,\n ids: [id],\n fields: views.get(\"form\").fields,\n context: { ...getContext?.(), ...context },\n })\n )[0];\n const updatedTreeObject = (\n await ConnectionProvider.getHandler().readObjects({\n model: relation,\n ids: [id],\n fields: views.get(\"tree\").fields,\n context: { ...getContext?.(), ...context },\n })\n )[0];\n updatedItems.push({\n id,\n operation: \"pendingLink\",\n values: updatedFormObject,\n treeValues: updatedTreeObject,\n });\n }\n\n triggerChange(updatedItems);\n } catch (e) {\n setError(e as any);\n } finally {\n setIsLoading(false);\n }\n };\n\n // TODO: improve this. Do we really have to parse the entire object just to get the title?\n function getTitle() {\n const ViewType: any = (ViewObjects as any)[currentView];\n if (currentView === \"graph\") {\n const parsedGraph = parseGraph(views.get(\"graph\").arch);\n return parsedGraph.string!;\n } else {\n const ooui = new ViewType(views.get(currentView).fields);\n ooui.parse(views.get(currentView).arch);\n return ooui.string!;\n }\n }\n\n const content = () => {\n if (currentView === \"form\") {\n if (itemsToShow.length === 0) {\n return t(\"noCurrentEntries\");\n }\n\n if (\n currentView !== previousCurrentView.current &&\n items.some((item) => !item.values)\n ) {\n return <Spin />;\n }\n\n return (\n <Form\n formView={views.get(\"form\")}\n values={itemsToShow[itemIndex]?.values}\n parentContext={{ ...getContext?.(), ...context }}\n model={relation}\n id={itemsToShow[itemIndex]?.id}\n submitMode={\"values\"}\n onFieldsChange={(values: any) => {\n const currentItemId = itemsToShow[itemIndex]?.id;\n\n const updatedItems = items.map((item) => {\n if (item.id === currentItemId) {\n return {\n ...item,\n operation:\n item.operation === \"original\"\n ? \"pendingUpdate\"\n : item.operation,\n values: { ...values, id: currentItemId },\n treeValues: { ...values, id: currentItemId },\n };\n }\n return item;\n });\n\n triggerChange(updatedItems);\n\n setFormHasChanges(true);\n }}\n readOnly={readOnly}\n />\n );\n }\n\n let resultsToShow = [];\n\n if (itemsToShow.some((item) => item.treeValues)) {\n resultsToShow = sorter\n ? sortResults({\n resultsToSort: itemsToShow.map((item) => item.treeValues),\n sorter,\n fields: {\n ...views.get(\"tree\").fields,\n ...(views.get(\"form\")?.fields || {}),\n },\n })\n : itemsToShow.map((item) => item.treeValues);\n }\n\n if (currentView === \"tree\") {\n return (\n <Tree\n total={itemsToShow.length}\n limit={itemsToShow.length}\n treeView={views.get(\"tree\")}\n results={resultsToShow}\n loading={isLoading}\n onRowClicked={\n views.get(\"form\")?.fields !== undefined\n ? onTreeRowClicked\n : undefined\n }\n showPagination={false}\n selectedRowKeys={selectedRowKeys}\n onRowSelectionChange={setSelectedRowKeys}\n sorter={sorter}\n onChangeSort={setSorter}\n context={{ ...getContext?.(), ...context }}\n colorsForResults={colorsForResults}\n readonly={readOnly}\n />\n );\n }\n if (currentView === \"graph\") {\n const domain = [[`${ooui.inv_field}`, \"=\", activeId]];\n return (\n <Graph\n view_id={views.get(\"graph\").view_id}\n model={ooui.relation}\n domain={domain}\n context={{ ...getContext?.(), ...context }}\n limit={0}\n />\n );\n }\n };\n\n if (error) {\n return <Alert className=\"mt-10\" message={error} type=\"error\" banner />;\n }\n\n // If we are in create mode we have to show the modal in continuous mode.\n // This means the modal won't close after clicking OK, the modal will add the new item\n // and will reset to defaults to let the user add a new item.\n const mustClearAfterSave = continuousEntryMode;\n\n if (isLoading) {\n return <Spin />;\n }\n\n return (\n <>\n <One2manyTopBar\n mode={currentView}\n title={getTitle()}\n readOnly={readOnly || false}\n isMany2Many={isMany2many}\n formHasChanges={formHasChanges}\n totalItems={itemsToShow.length}\n currentItemIndex={itemIndex}\n onDelete={showRemoveConfirm}\n onCreateItem={createItem}\n onToggleViewMode={toggleViewMode}\n onPreviousItem={previousItem}\n onNextItem={nextItem}\n onSearchItem={searchItem}\n selectedRowKeys={selectedRowKeys}\n showCreateButton={views.get(\"form\")?.fields !== undefined}\n showToggleButton={views.size > 1}\n />\n {content()}\n <FormModal\n formView={views.get(\"form\")}\n model={relation}\n id={modalItem?.id}\n submitMode={\"2many\"}\n values={modalItem?.values}\n defaultValues={modalItem?.defaultValues}\n visible={showFormModal}\n onSubmitSucceed={onFormModalSubmitSucceed}\n parentContext={{ ...getContext?.(), ...context }}\n onCancel={() => {\n setContinuousEntryMode(false);\n setShowFormModal(false);\n }}\n readOnly={readOnly}\n mustClearAfterSave={mustClearAfterSave}\n />\n <SearchModal\n domain={transformedDomain.current}\n model={relation}\n context={{ ...getContext?.(), ...context }}\n visible={showSearchModal}\n onSelectValues={async (ids: number[]) => {\n setShowSearchModal(false);\n onSearchModalSelectValue(ids);\n }}\n onCloseModal={() => {\n setShowSearchModal(false);\n }}\n />\n </>\n );\n};\n\nexport { One2manyInput, One2manyItem, One2manyValue };\n","import React, { useContext, useState } from \"react\";\nimport { One2many as One2manyOoui } from \"@gisce/ooui\";\nimport Field from \"@/common/Field\";\nimport { Spin, Alert } from \"antd\";\nimport { Views, ViewType } from \"@/types\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport One2manyProvider from \"@/context/One2manyContext\";\nimport { One2manyInput } from \"@/widgets/base/one2many/One2manyInput\";\nimport useDeepCompareEffect from \"use-deep-compare-effect\";\nimport { FormContext, FormContextType } from \"@/context/FormContext\";\n\ntype Props = {\n ooui: One2manyOoui;\n};\n\nexport const One2many = (props: Props) => {\n const { ooui } = props;\n const { mode, relation, views: oouiViews, required, context } = ooui;\n\n let initialView: ViewType;\n const [isLoading, setIsLoading] = useState<boolean>(true);\n const [error, setError] = useState<string>();\n const [views, setViews] = useState<Views>(new Map<string, any>());\n const formContext = useContext(FormContext) as FormContextType;\n const { getContext } = formContext || {};\n\n useDeepCompareEffect(() => {\n fetchData();\n }, [ooui]);\n\n const getViewData = async (type: ViewType) => {\n if (oouiViews && oouiViews[type]) {\n return oouiViews[type];\n }\n return await ConnectionProvider.getHandler().getView({\n model: relation,\n type,\n context: { ...getContext?.(), ...context },\n });\n };\n\n const fetchData = async () => {\n setIsLoading(true);\n setError(undefined);\n\n try {\n if (mode && mode.length > 0) {\n for (const m of mode as ViewType[]) {\n const v = await getViewData(m);\n views.set(m, v);\n }\n setViews(views);\n } else {\n const formView = await getViewData(\"form\");\n const treeView = await getViewData(\"tree\");\n views.set(\"form\", formView);\n views.set(\"tree\", treeView);\n setViews(views);\n }\n } catch (err) {\n setError(JSON.stringify(err));\n } finally {\n setIsLoading(false);\n }\n };\n\n if (mode && mode.length > 0) {\n initialView = mode[0] as ViewType;\n } else {\n initialView = \"tree\";\n }\n\n if (isLoading) {\n return <Spin />;\n }\n\n if (error) {\n return <Alert className=\"mt-10\" message={error} type=\"error\" banner />;\n }\n\n const validator = async (_: any, value: any) => {\n if (!value) throw new Error();\n if (!value.items) throw new Error();\n if (!Array.isArray(value.items)) throw new Error();\n if (value.items.length === 0) throw new Error();\n };\n\n return (\n <One2manyProvider initialView={initialView}>\n <Field\n required={required}\n type={\"array\"}\n validator={validator}\n {...props}\n >\n <One2manyInput ooui={ooui} views={views} />\n </Field>\n </One2manyProvider>\n );\n};\n","import React, { useContext, useEffect, useRef, useState } from \"react\";\nimport { Input, theme } from \"antd\";\nimport Field from \"@/common/Field\";\nimport { Float as FloatOoui } from \"@gisce/ooui\";\nimport { WidgetProps } from \"@/types\";\nimport { parseFloatToString, parseStringToFloat } from \"@/helpers/timeHelper\";\nimport { FormContext, FormContextType } from \"@/context/FormContext\";\nconst { useToken } = theme;\n\nexport const FloatTime = (props: WidgetProps) => {\n const { ooui } = props;\n const { required } = ooui as FloatOoui;\n\n return (\n <Field required={required} type={\"number\"} {...props}>\n <FloatTimeInput ooui={ooui as FloatOoui} />\n </Field>\n );\n};\n\ninterface FloatTimeInputProps {\n ooui: FloatOoui;\n value?: number;\n onChange?: (value?: number) => void;\n}\n\nexport const FloatTimeInput: React.FC<FloatTimeInputProps> = (\n props: FloatTimeInputProps,\n) => {\n const { ooui, value, onChange } = props;\n const { id, readOnly, required } = ooui as FloatOoui;\n const { token } = useToken();\n const requiredStyle =\n required && !readOnly\n ? { backgroundColor: token.colorPrimaryBg }\n : undefined;\n const inputTextRef = useRef<string>();\n const [inputText, setInputText] = useState<string>();\n const formContext = useContext(FormContext) as FormContextType;\n const { elementHasLostFocus } = formContext || {};\n\n useEffect(() => {\n setInputText(parseFloatToString(value!));\n }, [value]);\n\n const triggerChange = (changedValue?: number) => {\n onChange?.(changedValue);\n };\n\n function onValueStringChange(e: React.ChangeEvent<HTMLInputElement>) {\n inputTextRef.current = e.target.value;\n setInputText(e.target.value);\n }\n\n async function onElementLostFocus() {\n triggerChange(parseStringToFloat(inputText));\n await new Promise((resolve) => setTimeout(resolve, 300));\n elementHasLostFocus?.();\n }\n\n return (\n <Input\n value={inputText}\n disabled={readOnly}\n className={\"w-full\"}\n style={requiredStyle}\n id={id}\n placeholder={\"00:00\"}\n onChange={onValueStringChange}\n onBlur={onElementLostFocus}\n />\n );\n};\n","import React from \"react\";\nimport { Group as GroupOoui } from \"@gisce/ooui\";\nimport Container from \"./Container\";\nimport { FieldSet } from \"@gisce/react-formiga-components\";\nimport { Space } from \"antd\";\nimport iconMapper from \"@/helpers/iconMapper\";\n\ntype Props = {\n ooui: GroupOoui;\n showLabel?: boolean;\n responsiveBehaviour: boolean;\n};\n\nfunction Group(props: Props): React.ReactElement {\n const { ooui, showLabel = true, responsiveBehaviour } = props;\n const icon: React.ElementType | undefined = iconMapper(ooui.icon || \"\");\n\n return (\n <>\n {(ooui.label || icon) && showLabel ? (\n <FieldSet label={ooui.label} icon={icon}>\n <Container\n container={ooui!.container}\n responsiveBehaviour={responsiveBehaviour}\n />\n </FieldSet>\n ) : (\n <Container\n container={ooui!.container}\n responsiveBehaviour={responsiveBehaviour}\n />\n )}\n </>\n );\n}\n\nexport default Group;\n","import React from \"react\";\nimport { Tabs } from \"antd\";\nimport iconMapper from \"@/helpers/iconMapper\";\n\nimport { Notebook as NotebookOoui, Group as GroupOoui } from \"@gisce/ooui\";\nimport { Group } from \"@/index\";\nconst { TabPane } = Tabs;\n\ntype Props = {\n ooui: NotebookOoui;\n responsiveBehaviour: boolean;\n};\n\nfunction Notebook(props: Props): React.ReactElement {\n const { ooui, responsiveBehaviour } = props;\n const tabs = ooui.pages;\n\n function getPageIcon(icon: string) {\n if (icon) {\n const Icon: React.ElementType = iconMapper(icon) as any;\n return Icon && <Icon />;\n }\n return undefined;\n }\n\n return (\n <Tabs defaultActiveKey=\"1\" tabPosition={ooui.tabPosition}>\n {tabs\n .filter((page: any) => !page.invisible)\n .map((page: any) => {\n return (\n <TabPane\n tab={\n <>\n {getPageIcon(page.icon)} {page.label}\n </>\n }\n key={page.label}\n >\n <Group\n ooui={page as GroupOoui}\n showLabel={false}\n responsiveBehaviour={responsiveBehaviour}\n />\n </TabPane>\n );\n })}\n </Tabs>\n );\n}\n\nexport default Notebook;\n","import React, { CSSProperties, useContext, useState } from \"react\";\nimport { Input, Row, theme } from \"antd\";\nimport Field from \"@/common/Field\";\nimport { Text as TextOoui } from \"@gisce/ooui\";\nimport { TranslationModal } from \"../modals/TranslationModal\";\nimport { FormContext, FormContextType } from \"@/context/FormContext\";\nimport ButtonWithTooltip from \"@/common/ButtonWithTooltip\";\nimport { TranslationOutlined } from \"@ant-design/icons\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport showInfo from \"@/ui/InfoDialog\";\nconst { useToken } = theme;\n\nconst { TextArea } = Input;\n\ntype Props = {\n ooui: TextOoui;\n};\n\nconst Text = (props: Props) => {\n const { ooui } = props;\n const { id, readOnly, required, height, translatable } = ooui;\n const { token } = useToken();\n const requiredStyle =\n required && !readOnly\n ? { backgroundColor: token.colorPrimaryBg }\n : undefined;\n const formContext = useContext(FormContext) as FormContextType;\n const { elementHasLostFocus } = formContext || {};\n\n return (\n <Field required={required} {...props}>\n {translatable ? (\n <TranslatableText\n field={id}\n height={height}\n requiredStyle={requiredStyle}\n />\n ) : (\n <TextArea\n disabled={readOnly || translatable}\n style={{\n minHeight: height ? height + \"px\" : \"100%\",\n ...requiredStyle,\n }}\n rows={4}\n onBlur={elementHasLostFocus}\n />\n )}\n </Field>\n );\n};\n\nconst TranslatableText = ({\n value,\n field,\n requiredStyle,\n onChange,\n height,\n}: {\n value?: string;\n field: string;\n requiredStyle: CSSProperties | undefined;\n height: number | undefined;\n onChange?: (value: string) => void;\n}) => {\n const formContext = useContext(FormContext) as FormContextType;\n const {\n activeId,\n activeModel,\n fetchValues,\n formHasChanges,\n elementHasLostFocus,\n } = formContext || {};\n const [translationModalVisible, setTranslationModalVisible] = useState(false);\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n if (!activeId) {\n return (\n <>\n <Row gutter={8} wrap={false}>\n <TextArea\n value={value}\n onChange={(event: any) => {\n onChange?.(event.target.value);\n }}\n style={{\n height: height ? height + \"px\" : \"100%\",\n ...requiredStyle,\n }}\n id={field}\n rows={4}\n onBlur={elementHasLostFocus}\n />\n </Row>\n <Row justify=\"end\" style={{ paddingTop: 5 }}>\n <ButtonWithTooltip\n tooltip={t(\"translate\")}\n icon={<TranslationOutlined />}\n onClick={async () => {\n if (formHasChanges?.()) {\n showInfo(t(\"saveBeforeTranslate\"));\n } else {\n showInfo(t(\"enterTextBeforeTranslate\"));\n }\n }}\n >\n {t(\"translate\")}\n </ButtonWithTooltip>\n </Row>\n </>\n );\n }\n\n return (\n <>\n <div\n onClick={() => {\n if (formHasChanges?.()) {\n showInfo(t(\"saveBeforeTranslate\"));\n return;\n }\n\n if (!translationModalVisible) {\n setTranslationModalVisible(true);\n }\n }}\n >\n <TextArea\n value={value}\n onChange={(event: any) => {\n onChange?.(event.target.value);\n }}\n style={{\n height: height ? height + \"px\" : \"100%\",\n cursor: \"pointer\",\n pointerEvents: \"none\",\n ...requiredStyle,\n }}\n id={field}\n disabled={true}\n rows={4}\n onBlur={elementHasLostFocus}\n />\n </div>\n <TranslationModal\n id={activeId!}\n model={activeModel}\n field={field}\n visible={translationModalVisible}\n onCloseModal={() => {\n setTranslationModalVisible(false);\n }}\n onSubmitSucceed={() => {\n setTranslationModalVisible(false);\n fetchValues?.();\n }}\n />\n </>\n );\n};\n\nexport default Text;\n","import React from \"react\";\nimport { Divider, Space } from \"antd\";\nimport { Separator as SeparatorOoui } from \"@gisce/ooui\";\nimport iconMapper from \"@/helpers/iconMapper\";\n\ntype Props = {\n ooui: SeparatorOoui;\n};\n\nexport const Separator = (props: Props) => {\n const { ooui } = props;\n const { label, icon } = ooui;\n const Icon: React.ElementType | undefined = iconMapper(icon || \"\");\n\n return (\n <Divider orientation=\"left\" className=\"text-sm\">\n {(Icon || label) && (\n <Space>\n {Icon ? <Icon /> : null}\n {label}\n </Space>\n )}\n </Divider>\n );\n};\n","import {\n ExportField,\n ExportOptions,\n PredefinedExport,\n PredefinedExportField,\n} from \"@gisce/react-formiga-components\";\nimport { useCallback, useRef } from \"react\";\nimport { ConnectionProvider } from \"..\";\nimport showInfo from \"@/ui/InfoDialog\";\nimport { tForLang } from \"@/context/LocaleContext\";\nimport { getMimeType, openBase64InNewTab } from \"@/helpers/filesHelper\";\n\nexport const useExport = ({\n model,\n context,\n locale,\n selectedRegistersToExport,\n domain,\n limit,\n onClose,\n}: {\n model: string;\n context: any;\n locale: string;\n selectedRegistersToExport?: any[];\n domain: any[];\n limit?: number;\n onClose: () => void;\n}) => {\n const fields = useRef<any>({});\n const exportModelFields = useRef<Map<string, any>>(new Map<string, any>());\n\n const onExport = useCallback(\n async (options: ExportOptions) => {\n if (\n options.selectedKeys === undefined ||\n options.selectedKeys.length === 0\n ) {\n showInfo(tForLang(\"selectAtLeastOneField\", locale));\n return;\n }\n\n let exportDomain = domain;\n\n if (\n options.registersAmount === \"selected\" &&\n selectedRegistersToExport?.length !== 0\n ) {\n exportDomain = [\n [\"id\", \"in\", selectedRegistersToExport?.map((r) => r.id)],\n ];\n }\n\n const { datas } = await ConnectionProvider.getHandler().exportData({\n model,\n fields: addIdToRelationFields({\n keys: options.selectedKeys,\n fields: fields.current,\n }),\n domain: exportDomain,\n limit: options.registersAmount === \"all\" ? 0 : limit,\n context,\n format: options.exportType,\n });\n\n onClose();\n\n await new Promise((resolve) => setTimeout(resolve, 200));\n\n const fileType: any = await getMimeType(datas);\n openBase64InNewTab(datas, fileType.mime);\n },\n [locale, model, domain, limit, context, onClose],\n );\n\n const onGetFields = useCallback(async () => {\n const viewData = await ConnectionProvider.getHandler().getFields({\n model,\n context,\n fields: [],\n });\n fields.current[\"/\"] = viewData;\n return convertToExportFields({ fields: viewData });\n }, [model, context, fields]);\n\n const onGetFieldChilds = useCallback(\n async (key: string) => {\n const fieldDefinition = getFieldDefinition(key, fields.current);\n const optsForField = fieldDefinition[getChildKey(key)];\n const relation = optsForField.relation;\n const viewData = await ConnectionProvider.getHandler().getFields({\n model: relation,\n context,\n fields: [],\n });\n\n // We must iterate over each key of viewData in order to replace the string value\n for (const [key, value] of Object.entries(viewData)) {\n viewData[key].string = getTitle({\n parentTitle: optsForField.string,\n title: (value as any).string,\n });\n }\n\n fields.current[key] = viewData;\n\n return convertToExportFields({\n fields: viewData,\n parentKey: key,\n });\n },\n [fields.current, model, context],\n );\n\n const onGetPredefinedExports = useCallback(async () => {\n const predefinedExports = await listPredefinedExports({ model, context });\n\n const keysWithChilds = await retrieveKeyFieldsForPredefinedExports({\n predefinedExports,\n fields: fields.current,\n onGetFieldChilds,\n });\n\n // Then we reformat predefined exports to get the title\n const predefinedExportsAdjusted = predefinedExports.map((pExport) => {\n return {\n ...pExport,\n fields: pExport.fields.map((field: PredefinedExportField) => {\n const childKey = getChildKey(field.key);\n const fieldDefinition = getFieldDefinition(field.key, fields.current);\n const optsForField = fieldDefinition[childKey];\n return {\n key: field.key,\n title: optsForField.string,\n };\n }),\n };\n });\n\n return {\n predefinedExports: predefinedExportsAdjusted,\n keysWithChilds,\n };\n }, [fields.current]);\n\n const onSavePredefinedExport = useCallback(\n async (pExport: PredefinedExport) => {\n const fieldsForExport = await getModelFields(\"ir.exports\");\n const fieldsForExportLine = await getModelFields(\"ir.exports.line\");\n\n // First we must create the parent object\n const exportId = await ConnectionProvider.getHandler().create({\n model: \"ir.exports\",\n values: {\n name: pExport.name,\n resource: model,\n },\n fields: fieldsForExport,\n context,\n });\n\n // We create the lines\n await Promise.all(\n pExport.fields.map(async (field: any) => {\n return await ConnectionProvider.getHandler().create({\n model: \"ir.exports.line\",\n values: {\n name: field.key,\n export_id: exportId,\n },\n fields: fieldsForExportLine,\n context,\n });\n }),\n );\n\n return { ...pExport, id: exportId };\n },\n [],\n );\n\n const onRemovePredefinedExport = useCallback(\n async (pExport: PredefinedExport) => {\n await ConnectionProvider.getHandler().deleteObjects({\n model: \"ir.exports\",\n ids: [pExport.id!],\n context,\n });\n },\n [],\n );\n\n const getModelFields = useCallback(\n async (model: string) => {\n if (exportModelFields.current.has(model)) {\n return exportModelFields.current.get(model);\n }\n\n const fieldsForModel = ConnectionProvider.getHandler().getFields({\n model,\n context,\n fields: [],\n });\n\n exportModelFields.current.set(model, fieldsForModel);\n },\n [exportModelFields, context],\n );\n\n return {\n onGetFields,\n onGetFieldChilds,\n onExport,\n onGetPredefinedExports,\n onSavePredefinedExport,\n onRemovePredefinedExport,\n };\n};\n\nconst convertToExportFields = ({\n fields,\n parentKey,\n}: {\n fields: any;\n parentKey?: string;\n}) => {\n const exportFields = [];\n\n for (const key of Object.keys(fields)) {\n const valuesForField = fields[key];\n\n if (valuesForField.relation && valuesForField.is_function === true) {\n continue;\n }\n\n const relationField = isRelationField(valuesForField);\n\n exportFields.push({\n key: compoundId({ key, parentKey }),\n title: valuesForField.string,\n tooltip: valuesForField.help,\n required: valuesForField.required,\n isLeaf: !relationField,\n });\n }\n return exportFields;\n};\n\nconst isRelationField = (fieldDefinition: any) => {\n return (\n fieldDefinition.type === \"many2one\" ||\n fieldDefinition.type === \"one2many\" ||\n fieldDefinition.type === \"many2many\"\n );\n};\n\nconst compoundId = ({\n parentKey,\n key,\n}: {\n parentKey?: string;\n key: string;\n}) => {\n return `${parentKey ? parentKey + \"/\" : \"\"}${key}`;\n};\n\nconst getParentKey = (key: string) => {\n if (key.indexOf(\"/\") === -1) {\n return key;\n }\n const items = key.split(\"/\");\n return items.slice(0, -1).join(\"/\");\n};\n\nconst getChildKey = (key: string) => {\n if (key.indexOf(\"/\") === -1) {\n return key;\n }\n const items = key.split(\"/\");\n return items[items.length - 1];\n};\n\nconst getFieldDefinition = (key: string, fields: any) => {\n if (key.indexOf(\"/\") === -1) {\n return fields[\"/\"];\n } else {\n return fields[getParentKey(key)];\n }\n};\n\nconst getTitle = ({\n title,\n parentTitle,\n}: {\n title: string;\n parentTitle?: string;\n}) => {\n return `${parentTitle ? parentTitle + \" → \" : \"\"}${title}`;\n};\n\nconst listPredefinedExports = async ({\n model,\n context,\n}: {\n model: string;\n context: any;\n}) => {\n const pExports = await ConnectionProvider.getHandler().search({\n model: \"ir.exports\",\n params: [[\"resource\", \"=\", model]],\n context,\n });\n\n const exportLinesIds = pExports.flatMap((exp: any) => exp.export_fields);\n\n // Now we must read each id of the export lines\n const exportLinesObjects = await ConnectionProvider.getHandler().readObjects({\n model: \"ir.exports.line\",\n ids: exportLinesIds,\n context,\n });\n\n return pExports.map((pExport) => ({\n id: pExport.id,\n name: pExport.name,\n fields: pExport.export_fields.map((id: number) => {\n const exportLine = exportLinesObjects.find((e: any) => e.id === id);\n return {\n key: exportLine.name,\n };\n }),\n }));\n};\n\nconst getKeysWithoutChildsInFields = ({\n fields,\n keys,\n}: {\n fields: any;\n keys: string[];\n}) => {\n return splitAndSortKeys([\n ...new Set(\n keys\n .filter((key) => {\n if (key.indexOf(\"/\") === -1) {\n return !fields[\"/\"]?.[key];\n } else {\n const parentKey = getParentKey(key);\n console.log({ key, parentKey, fields });\n const exists = fields?.[getParentKey(key)]?.[key];\n console.log({ exists });\n return !fields?.[getParentKey(key)]?.[key];\n }\n })\n .map((key) => getParentKey(key)),\n ),\n ]);\n};\n\nconst retrieveKeyFieldsForPredefinedExports = async ({\n predefinedExports,\n fields,\n onGetFieldChilds,\n}: {\n predefinedExports: PredefinedExport[];\n fields: any;\n onGetFieldChilds: (key: string) => Promise<ExportField[]>;\n}) => {\n const allPredefinedExportKeys = predefinedExports.flatMap(\n (exp: PredefinedExport) => exp.fields.map((field: any) => field.key),\n );\n\n const keysWithoutChildsInFields = getKeysWithoutChildsInFields({\n fields,\n keys: allPredefinedExportKeys,\n });\n\n const keysWithChilds = [];\n\n // We must load the fields info for each key if not loaded yet in fields and store them in an array to pass them to the formiga component\n for (const key of keysWithoutChildsInFields) {\n keysWithChilds.push({ key, childs: await onGetFieldChilds(key) });\n }\n\n return keysWithChilds;\n};\n\nconst addIdToRelationFields = ({\n keys,\n fields,\n}: {\n keys: string[];\n fields: any;\n}) =>\n keys.map((key) => {\n const childKey = getChildKey(key);\n const fieldDefinition = getFieldDefinition(key, fields);\n const optsForField = fieldDefinition[childKey];\n const relationField = isRelationField(optsForField);\n return relationField ? `${key}/id` : key;\n });\n\nconst splitAndSortKeys = (keys: string[]): string[] => {\n // We must split the keys that have more than one level (character / ocurrences in the string > 1)\n // Into an array of keys with only one level\n // For example: \"partner_id/country_id/name\" => [\"partner_id\", \"partner_id/country_id\", \"partner_id/country_id/name\"]\n // We must do this because we must load the fields info for each key if not loaded yet in fields\n // And we must load the fields info for the parent key first\n //\n // We must also sort the keys by the number of levels they have\n // For example: [\"partner_id\", \"partner_id/country_id\", \"partner_id/country_id/name\"]\n\n const keysMap: Map<string, boolean> = new Map();\n const result: string[] = [];\n\n // Split keys with more than one level\n for (const key of keys) {\n const subKeys = key.split(\"/\");\n let parentKey = \"\";\n for (const subKey of subKeys) {\n const currentKey = parentKey ? `${parentKey}/${subKey}` : subKey;\n if (!keysMap.has(currentKey)) {\n result.push(currentKey);\n keysMap.set(currentKey, true);\n }\n parentKey = currentKey;\n }\n }\n\n // Sort keys by number of levels\n result.sort((a, b) => {\n const aLevels = a.split(\"/\").length;\n const bLevels = b.split(\"/\").length;\n return aLevels - bLevels;\n });\n\n return result;\n};\n","import ConnectionProvider from \"@/ConnectionProvider\";\nimport {\n ExportModal as ExportModalFmg,\n Locale,\n} from \"@gisce/react-formiga-components\";\nimport React from \"react\";\nimport { useExport } from \"@/hooks/useExport\";\n\nexport type ExportModalProps = {\n visible: boolean;\n locale: string;\n onClose: () => void;\n selectedRegistersToExport?: any[];\n totalRegisters: number;\n model: string;\n domain: any[];\n limit?: number;\n context?: any;\n visibleRegisters: number;\n};\n\nexport const ExportModal = (props: ExportModalProps) => {\n const {\n visible,\n locale,\n onClose,\n model,\n context,\n selectedRegistersToExport,\n totalRegisters,\n domain,\n limit,\n visibleRegisters,\n } = props;\n\n const {\n onExport,\n onGetFieldChilds,\n onGetFields,\n onGetPredefinedExports,\n onSavePredefinedExport,\n onRemovePredefinedExport,\n } = useExport({\n model,\n context,\n domain,\n limit,\n selectedRegistersToExport,\n onClose,\n locale,\n });\n\n return (\n <ExportModalFmg\n visible={visible}\n locale={locale as Locale}\n onSucceed={onExport}\n onCancel={onClose}\n selectedRegistersToExport={\n selectedRegistersToExport &&\n selectedRegistersToExport.length &&\n selectedRegistersToExport.length > 0\n ? selectedRegistersToExport.length\n : undefined\n }\n totalRegisters={totalRegisters}\n onGetFieldChilds={onGetFieldChilds}\n onGetFields={onGetFields}\n visibleRegisters={visibleRegisters}\n onGetPredefinedExports={onGetPredefinedExports}\n onSavePredefinedExport={onSavePredefinedExport}\n onRemovePredefinedExport={onRemovePredefinedExport}\n />\n );\n};\n","import DatePicker from \"@/common/DatePicker\";\n\nimport React from \"react\";\nimport { WidgetProps } from \"@/types\";\n\nconst Date = (props: WidgetProps) => {\n const { ooui } = props;\n\n return <DatePicker ooui={ooui} />;\n};\n\nexport default Date;\n","import DatePicker from \"@/common/DatePicker\";\n\nimport React from \"react\";\nimport { WidgetProps } from \"@/types\";\n\nconst DateTime = (props: WidgetProps) => {\n const { ooui } = props;\n\n return <DatePicker ooui={ooui} showTime />;\n};\n\nexport default DateTime;\n","import Field from \"@/common/Field\";\nimport { Time as TimeOoui } from \"@gisce/ooui\";\nimport { WidgetProps } from \"@/types\";\nimport dayjs from \"@/helpers/dayjs\";\nimport { Dayjs } from \"dayjs\";\nimport { TimePicker } from \"../../common/TimePicker\";\n\nconst Time = (props: WidgetProps) => {\n const { ooui } = props;\n\n return (\n <Field {...props}>\n <TimeInput ooui={ooui as TimeOoui} />\n </Field>\n );\n};\n\ntype TimeInputProps = {\n ooui: TimeOoui;\n value?: string;\n onChange?: (value?: string) => void;\n};\n\nexport const TimeInput = (props: TimeInputProps) => {\n const onChange = (time: Dayjs | null, timestring?: string) => {\n if (props.onChange) {\n props.onChange(timestring);\n }\n };\n\n return (\n <TimePicker\n onChange={onChange}\n numberOfSelectsToHide={3} // Since it has hours, minutes, and seconds\n value={props.value ? dayjs(props.value, \"HH:mm:ss\") : undefined}\n />\n );\n};\n\nexport default Time;\n","import React, { useEffect, useState } from \"react\";\nimport { Row, Col } from \"antd\";\nimport {\n Reference as ReferenceOoui,\n Selection as SelectionOoui,\n Many2one as Many2oneOoui,\n} from \"@gisce/ooui\";\nimport Field from \"@/common/Field\";\nimport { Many2oneInput } from \"./many2one/Many2one\";\nimport { SelectionInput } from \"./Selection\";\n\ntype Props = {\n ooui: ReferenceOoui;\n onOpenDetailClick?:\n | ((event: React.MouseEvent<HTMLElement, MouseEvent>) => void)\n | undefined;\n onSearchClick?:\n | ((event: React.MouseEvent<HTMLElement, MouseEvent>) => void)\n | undefined;\n};\n\nexport const Reference = (props: Props) => {\n const { ooui } = props;\n const { required } = ooui;\n\n return (\n <Field required={required} {...props}>\n <ReferenceInput ooui={ooui} />\n </Field>\n );\n};\n\ninterface ReferenceInputProps {\n ooui: ReferenceOoui;\n value?: string;\n onChange?: (value: string | undefined) => void;\n}\n\nexport const ReferenceInput: React.FC<ReferenceInputProps> = (\n props: ReferenceInputProps,\n) => {\n const { value, onChange, ooui } = props;\n const { required, selectionValues, readOnly } = ooui;\n\n const splittedValue = value?.split(\",\");\n\n const [many2oneValue, setMany2oneValue] = useState<any[]>([]);\n const [selectionValue, setSelectionValue] = useState<string>();\n\n useEffect(() => {\n if (!value) {\n setSelectionValue(undefined);\n setMany2oneValue([]);\n return;\n }\n\n const model = value && splittedValue && splittedValue[0];\n const id =\n value && splittedValue && splittedValue[1] && parseInt(splittedValue[1]);\n setMany2oneValue([id, undefined]);\n setSelectionValue(model!);\n }, [value]);\n\n return (\n <Row gutter={8} wrap={false}>\n <Col flex=\"1\">\n <SelectionInput\n ooui={\n new SelectionOoui({\n name: \"model_selection\",\n selection: selectionValues,\n readonly: readOnly,\n required,\n })\n }\n onChange={(changedValue: string) => {\n setSelectionValue(changedValue);\n let m2oValue = many2oneValue[0] || 0;\n if (changedValue !== selectionValue) {\n setMany2oneValue([]);\n m2oValue = 0;\n }\n const referenceValue = `${changedValue},${m2oValue}`;\n if (referenceValue === value) {\n return;\n }\n onChange?.(referenceValue);\n }}\n value={selectionValue}\n />\n </Col>\n <Col flex=\"3\">\n <Many2oneInput\n ooui={\n new Many2oneOoui({\n name: \"object_value\",\n relation: selectionValue,\n readonly: readOnly,\n required,\n })\n }\n value={many2oneValue}\n onChange={(changedValue: any[]) => {\n setMany2oneValue(changedValue);\n const referenceValue = `${selectionValue},${changedValue[0] || 0}`;\n if (referenceValue === value) {\n return;\n }\n onChange?.(referenceValue);\n }}\n />\n </Col>\n </Row>\n );\n};\n","import React, { useRef, useContext } from \"react\";\nimport { Row, Col, Button, Input, Space, theme } from \"antd\";\nimport Field from \"@/common/Field\";\nimport { Binary as BinaryOoui } from \"@gisce/ooui\";\nimport ButtonWithTooltip from \"@/common/ButtonWithTooltip\";\nimport {\n FolderOpenOutlined,\n DownloadOutlined,\n ClearOutlined,\n EyeOutlined,\n} from \"@ant-design/icons\";\nimport { FormContext, FormContextType } from \"@/context/FormContext\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\nimport {\n getFilesize,\n getMimeType,\n openBase64InNewTab,\n toBase64,\n} from \"@/helpers/filesHelper\";\nconst { useToken } = theme;\n\ntype Props = {\n ooui: BinaryOoui;\n};\n\nexport const Binary = (props: Props) => {\n const { ooui } = props;\n const { required } = ooui;\n\n return (\n <Field required={required} {...props}>\n <BinaryInput ooui={ooui} />\n </Field>\n );\n};\n\ninterface BinaryInputProps {\n ooui: BinaryOoui;\n value?: string;\n onChange?: (value: string | undefined) => void;\n}\n\nexport const BinaryInput = (props: BinaryInputProps) => {\n const { ooui, value, onChange } = props;\n const { readOnly, required, filenameField } = ooui as BinaryOoui;\n const { token } = useToken();\n const requiredStyle =\n required && !readOnly\n ? { backgroundColor: token.colorPrimaryBg }\n : undefined;\n const inputFile = useRef(null);\n const { setFieldValue, getFieldValue } =\n (useContext(FormContext) as FormContextType) || {};\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n const filesize = value ? getFilesize(value) : \"\";\n\n const triggerChange = (changedValue?: string) => {\n onChange?.(changedValue);\n };\n\n async function downloadFile() {\n const fileType = await getMimeType(value!);\n const linkSource = `data:${fileType?.mime};base64,${value}`;\n const downloadLink = document.createElement(\"a\");\n const fileName = getFieldValue(filenameField);\n const name = getFieldValue(\"name\");\n\n downloadLink.href = linkSource;\n downloadLink.download = fileName || name;\n downloadLink.click();\n }\n\n async function openFile() {\n const fileType: any = await getMimeType(value!);\n openBase64InNewTab(value!, fileType.mime);\n }\n\n async function onChangeFile(event: any) {\n event.stopPropagation();\n event.preventDefault();\n const file = event.target.files[0];\n const b64: string = await toBase64(file);\n triggerChange(b64);\n\n if (filenameField) {\n setFieldValue(filenameField, file.name);\n }\n }\n\n function clearFile() {\n setFieldValue(filenameField, undefined);\n triggerChange(undefined);\n }\n\n return (\n <Row gutter={8}>\n <Col style={{ paddingBottom: 5 }}>\n <input\n type=\"file\"\n id=\"file\"\n ref={inputFile}\n style={{ display: \"none\" }}\n onChange={onChangeFile}\n />\n <Input\n type=\"text\"\n disabled={true}\n style={requiredStyle}\n value={filesize}\n />\n </Col>\n <Col>\n <Space>\n <Button\n icon={<FolderOpenOutlined />}\n disabled={readOnly}\n onClick={() => {\n const fileUploadField = inputFile.current as any;\n fileUploadField.click();\n }}\n >\n Select\n </Button>\n <Button icon={<EyeOutlined />} disabled={!value} onClick={openFile}>\n {t(\"open\")}\n </Button>\n <ButtonWithTooltip\n tooltip={t(\"download\")}\n disabled={!value}\n onClick={downloadFile}\n icon={<DownloadOutlined />}\n />\n <ButtonWithTooltip\n tooltip={t(\"clear\")}\n disabled={readOnly || !value}\n onClick={clearFile}\n icon={<ClearOutlined />}\n />\n </Space>\n </Col>\n </Row>\n );\n};\n","import React, { useContext } from \"react\";\nimport { Menu, Dropdown, Row, Col, Button } from \"antd\";\nimport {\n DownOutlined,\n TableOutlined,\n FormOutlined,\n CheckOutlined,\n AreaChartOutlined,\n CalendarOutlined,\n} from \"@ant-design/icons\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport showUnsavedChangesDialog from \"@/ui/UnsavedChangesDialog\";\nimport ButtonWithTooltip from \"@/common/ButtonWithTooltip\";\nimport { GraphView, View } from \"@/types\";\n\ntype Props = {\n onChangeView: (view: View) => void;\n currentView: View;\n availableViews: View[];\n disabled?: boolean;\n formHasChanges?: boolean;\n previousView?: View;\n};\n\nconst iconsForViewTypes = {\n tree: <TableOutlined />,\n form: <FormOutlined />,\n graph: <AreaChartOutlined />,\n calendar: <CalendarOutlined />,\n};\n\nfunction getIconForView(view?: View) {\n if (!view) {\n return <FormOutlined />;\n }\n\n return (iconsForViewTypes as any)?.[view.type] || <FormOutlined />;\n}\n\nfunction ChangeViewButton(props: Props) {\n const {\n currentView,\n availableViews,\n onChangeView,\n disabled = false,\n formHasChanges = false,\n previousView,\n } = props;\n const { t, lang } = useContext(LocaleContext) as LocaleContextType;\n\n function getMenu() {\n const menuItems = availableViews.map((view, idx) => {\n return (\n <Menu.Item key={view.view_id || idx}>\n <Row wrap={false}>\n <Col flex=\"none\" style={{ paddingRight: 20 }}>\n {getIconForView(view)}\n </Col>\n <Col flex=\"auto\" style={{ paddingRight: 20 }}>\n {view.type.charAt(0).toUpperCase() + view.type.slice(1)}\n </Col>\n <Col flex=\"none\">\n <CheckOutlined\n style={{\n opacity: currentView.view_id === view.view_id ? 1 : 0,\n }}\n />\n </Col>\n </Row>\n </Menu.Item>\n );\n });\n\n return (\n <Menu onClick={handleMenuClick}>\n <Menu.ItemGroup title={t(\"viewAs\")}>{menuItems}</Menu.ItemGroup>\n </Menu>\n );\n }\n\n function tryNavigate(callback: any) {\n if (formHasChanges) {\n showUnsavedChangesDialog({\n lang,\n onOk: () => {\n callback();\n },\n });\n return;\n }\n\n callback();\n }\n\n function handleMenuClick(event: any) {\n tryNavigate(() => {\n const selectedView = availableViews.find(\n (view) => view.view_id === parseInt(event.key),\n );\n onChangeView(selectedView!);\n });\n }\n\n return (\n <div style={{ display: \"flex\" }}>\n <ButtonWithTooltip\n tooltip={previousView ? t(\"viewAs\") + \" \" + t(previousView.type) : \"\"}\n icon={getIconForView(previousView)}\n style={{\n width: 50,\n borderTopRightRadius: 0,\n borderBottomRightRadius: 0,\n }}\n onClick={() => {\n handleMenuClick({ key: previousView?.view_id });\n }}\n disabled={disabled || availableViews.length === 1}\n />\n <Dropdown\n overlay={getMenu()}\n disabled={disabled || availableViews.length === 1}\n >\n <Button\n style={{\n width: 25,\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0,\n }}\n icon={<DownOutlined style={{ fontSize: \"0.5em\" }} />}\n onClick={(e) => e.preventDefault()}\n ></Button>\n </Dropdown>\n </div>\n );\n}\n\nexport default ChangeViewButton;\n","import { memo, useState, useMemo, useCallback } from \"react\";\nimport { Menu, Dropdown, Button, Input } from \"antd\";\nimport { DownOutlined } from \"@ant-design/icons\";\n\nconst { Search } = Input;\n\ntype Props = {\n onItemClick: (event: any) => void;\n items: any[];\n tooltip: string;\n icon: any;\n label?: string;\n disabled?: boolean;\n searchable?: true | false | \"auto\";\n};\n\nconst DropdownButton: React.FC<Props> = memo(\n ({\n icon,\n tooltip,\n items = [],\n onItemClick,\n label,\n disabled = false,\n searchable = \"auto\",\n }: Props) => {\n const [searchValue, setSearchValue] = useState<string>();\n\n const mustShowSearch =\n searchable === true || (searchable === \"auto\" && items.length > 3);\n\n const onSearch = useCallback((value?: string) => {\n const sanitizedValue = value?.trim();\n if (sanitizedValue && sanitizedValue.length > 0) {\n setSearchValue(sanitizedValue);\n return;\n }\n setSearchValue(undefined);\n }, []);\n\n const filteredItems = useMemo(() => {\n if (searchValue) {\n return items\n .map((item) => {\n if (item.name.toLowerCase().includes(searchValue.toLowerCase())) {\n return { ...item };\n }\n return { ...item, name: \"no_match\" };\n })\n .sort((a, b) => {\n // all the items with name \"no_match\" have to be in the end of the array\n if (a.name === \"no_match\") return 1;\n if (b.name === \"no_match\") return -1;\n return 0;\n });\n }\n return items;\n }, [items, searchValue]);\n\n const handleMenuClick = useCallback(\n (event: any) => {\n const itemClicked = filteredItems.find(\n (item: any) => item.id.toString() === event.key,\n );\n if (itemClicked && itemClicked.name !== \"no_match\")\n onItemClick(itemClicked);\n },\n [onItemClick, filteredItems],\n );\n\n const getMenu = useMemo(() => {\n const menuItems = filteredItems.map((item, idx) => {\n if (item.name === \"divider\")\n return <Menu.Divider key={\"divider\" + idx} />;\n if (item.name === \"no_match\")\n return (\n <Menu.Item\n key={\"no_match\" + idx}\n style={{ cursor: \"auto\", pointerEvents: \"none\", opacity: 0 }}\n >\n {item.name}\n </Menu.Item>\n );\n return <Menu.Item key={item.id}>{item.name}</Menu.Item>;\n });\n\n return (\n <Menu onClick={handleMenuClick}>\n {mustShowSearch && (\n <div style={{ padding: 5 }}>\n <Search\n onChange={(e) => onSearch(e.target.value)}\n onSearch={onSearch}\n allowClear\n />\n </div>\n )}\n <div\n style={{\n width: 300,\n maxHeight: 300,\n overflowY: \"auto\",\n }}\n >\n <Menu.ItemGroup title={tooltip}>{menuItems}</Menu.ItemGroup>\n </div>\n </Menu>\n );\n }, [filteredItems, handleMenuClick, mustShowSearch, onSearch, tooltip]);\n\n return (\n <>\n <Dropdown overlay={getMenu} disabled={disabled || items.length === 0}>\n <Button>\n {icon} {label} <DownOutlined />\n </Button>\n </Dropdown>\n </>\n );\n },\n);\nDropdownButton.displayName = \"DropdownButton\";\n\nexport default DropdownButton;\n","import React from \"react\";\nimport ButtonWithTooltip from \"@/common/ButtonWithTooltip\";\nimport { LoadingOutlined } from \"@ant-design/icons\";\n\ntype Props = {\n tooltip: string;\n onClick: any;\n icon: any;\n disabled?: boolean;\n label?: string;\n loading?: boolean;\n type?: string;\n};\n\nfunction ActionButton(props: Props) {\n const {\n onClick,\n disabled = false,\n loading = false,\n tooltip,\n icon,\n label,\n type = \"default\",\n } = props;\n const finalIcon = loading ? <LoadingOutlined /> : icon;\n\n return (\n <ButtonWithTooltip\n type={type as any}\n tooltip={tooltip}\n onClick={onClick}\n disabled={disabled}\n >\n {finalIcon}\n {label}\n </ButtonWithTooltip>\n );\n}\n\nexport default ActionButton;\n","import React, { useContext } from \"react\";\nimport { FileAddOutlined } from \"@ant-design/icons\";\nimport ActionButton from \"./ActionButton\";\nimport {\n ActionViewContext,\n ActionViewContextType,\n} from \"@/context/ActionViewContext\";\nimport showUnsavedChangesDialog from \"@/ui/UnsavedChangesDialog\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\ntype Props = {\n disabled?: boolean;\n};\n\nfunction NewButton(props: Props) {\n const { disabled = false } = props;\n\n const { formHasChanges, onNewClicked: onNewClickedProps } = useContext(\n ActionViewContext,\n ) as ActionViewContextType;\n const { t, lang } = useContext(LocaleContext) as LocaleContextType;\n\n const onNewClicked = () => {\n if (formHasChanges) {\n showUnsavedChangesDialog({\n lang,\n onOk: () => {\n onNewClickedProps();\n },\n });\n return;\n }\n\n onNewClickedProps();\n };\n\n return (\n <ActionButton\n icon={<FileAddOutlined />}\n tooltip={t(\"new\")}\n onClick={onNewClicked}\n disabled={disabled}\n />\n );\n}\nexport default NewButton;\n","import React from \"react\";\nimport { Modal } from \"antd\";\nimport { ExclamationCircleOutlined } from \"@ant-design/icons\";\nimport { tForLang } from \"@/context/LocaleContext\";\n\nconst { confirm } = Modal;\n\nconst showDialog = ({\n onOk,\n onCancel,\n lang,\n}: {\n onOk: () => void;\n onCancel?: () => void;\n lang: string;\n}) => {\n confirm({\n title: tForLang(\"unsavedChanges\", lang),\n icon: <ExclamationCircleOutlined />,\n centered: true,\n content: tForLang(\"confirmRefreshWithoutSave\", lang),\n okText: tForLang(\"discardAndRefresh\", lang),\n cancelText: tForLang(\"cancel\", lang),\n onOk,\n onCancel,\n });\n};\n\nexport default showDialog;\n","import ConnectionProvider from \"@/ConnectionProvider\";\nimport React from \"react\";\nimport showInfo from \"@/ui/InfoDialog\";\n\nasync function showLogInfo(\n model: string,\n currentId: number,\n translateFn: Function,\n) {\n const logInfo = (\n (await ConnectionProvider.getHandler().getLogInfo({\n model,\n ids: [currentId],\n })) as any\n )[0];\n\n const { create_date, create_uid, id, write_date, write_uid } = logInfo;\n\n showInfo(\n <div>\n {\"ID: \" + id} <br />\n {translateFn(\"createdBy\") + \": \" + create_uid[1]} <br />\n {translateFn(\"creationDate\") + \": \" + create_date} <br />\n {translateFn(\"lastUpdatedBy\") + \": \" + write_uid[1]} <br />\n {translateFn(\"lastUpdatedDate\") + \": \" + write_date}\n </div>,\n );\n}\n\nexport { showLogInfo };\n","import React, { useContext, useState } from \"react\";\nimport {\n DownOutlined,\n FormOutlined,\n DownloadOutlined,\n LinkOutlined,\n FileAddOutlined,\n TableOutlined,\n} from \"@ant-design/icons\";\nimport { Popover, Button, Row, Col, Tooltip, Spin } from \"antd\";\nimport {\n LocaleContext,\n LocaleContextType,\n tForLang,\n} from \"@/context/LocaleContext\";\n\nexport type Attachment = {\n id: number;\n name: string;\n datas: string;\n link: string;\n};\n\nexport type AttachmentsButtonWrapperProps = {\n attachments: Attachment[] | undefined;\n numberOfAttachments: number;\n disabled: boolean;\n loading: boolean;\n onAddNewAttachment: () => void;\n onListAllAttachments: () => void;\n onopenAttachmentLink: (attachment: Attachment) => void;\n onOpenAttachmentDetail: (attachment: Attachment) => void;\n};\n\nexport const AttachmentsButtonWrapper = (\n props: AttachmentsButtonWrapperProps,\n) => {\n const { numberOfAttachments, disabled } = props;\n const { t, lang } = useContext(LocaleContext) as LocaleContextType;\n const [popoverVisible, setPopoverVisible] = useState<boolean>(false);\n\n const button = (\n <Button disabled={disabled}>\n <LinkOutlined />\n {`(${numberOfAttachments})`}\n <DownOutlined style={{ fontSize: 12 }} />\n </Button>\n );\n\n if (disabled) {\n return button;\n }\n\n return (\n <Popover\n onVisibleChange={(visible: boolean) => setPopoverVisible(visible)}\n visible={popoverVisible}\n placement=\"bottom\"\n content={Content(props, setPopoverVisible, lang)}\n title={t(\"attachments\")}\n arrowContent={null}\n >\n {button}\n </Popover>\n );\n};\n\nconst Content = (\n props: AttachmentsButtonWrapperProps,\n setPopoverVisible: (visible: boolean) => void,\n locale: string,\n) => {\n const {\n attachments = [],\n loading,\n onAddNewAttachment,\n onopenAttachmentLink,\n onOpenAttachmentDetail,\n onListAllAttachments,\n } = props;\n if (loading) {\n return <Spin style={{ padding: 20 }} />;\n }\n\n return (\n <>\n <a\n style={{ display: \"block\", paddingBottom: 5 }}\n href=\"#\"\n onClick={() => {\n setPopoverVisible(false);\n onListAllAttachments();\n }}\n >\n <TableOutlined /> {tForLang(\"listAllAttachments\", locale)}\n </a>\n <a\n style={{ display: \"block\" }}\n href=\"#\"\n onClick={() => {\n setPopoverVisible(false);\n onAddNewAttachment();\n }}\n >\n <FileAddOutlined /> {tForLang(\"addNewAttachment\", locale)}\n </a>\n {attachments.length > 0 && (\n <>\n <li className=\"ant-dropdown-menu-item-divider\"></li>\n {attachments.map((attachment: any) => {\n const Icon = attachment.link ? LinkOutlined : DownloadOutlined;\n return (\n <Row\n style={{ paddingTop: 4, paddingBottom: 4 }}\n wrap={false}\n align=\"middle\"\n key={attachment.id}\n >\n <Col flex=\"auto\">{attachment.name}</Col>\n <Col flex=\"25px\" style={{ textAlign: \"center\" }}>\n {(attachment.datas_fname || attachment.link) && (\n <Tooltip\n title={\n attachment.link\n ? tForLang(\"openAttachmentLink\", locale)\n : tForLang(\"download\", locale)\n }\n >\n <Icon\n style={{ cursor: \"pointer\" }}\n onClick={() => {\n setPopoverVisible(false);\n onopenAttachmentLink(attachment);\n }}\n />\n </Tooltip>\n )}\n </Col>\n <Col flex=\"25px\" style={{ textAlign: \"center\" }}>\n <Tooltip title={tForLang(\"openAttachment\", locale)}>\n <FormOutlined\n style={{ cursor: \"pointer\" }}\n onClick={() => {\n setPopoverVisible(false);\n onOpenAttachmentDetail(attachment);\n }}\n />\n </Tooltip>\n </Col>\n </Row>\n );\n })}\n </>\n )}\n </>\n );\n};\n","import React, { useCallback, useContext, useEffect, useState } from \"react\";\nimport { getMimeType, openBase64InNewTab } from \"@/helpers/filesHelper\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport {\n ActionViewContext,\n ActionViewContextType,\n} from \"@/context/ActionViewContext\";\nimport showErrorDialog from \"@/ui/ActionErrorDialog\";\nimport {\n Attachment,\n AttachmentsButtonWrapper,\n} from \"./AttachmentsButtonWrapper\";\nimport { Modal, Spin } from \"antd\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\nexport type AttachmentsButtonProps = {\n attachments?: any;\n disabled?: boolean;\n onAddNewAttachment: () => void;\n onListAllAttachments: () => void;\n onViewAttachmentDetails: (attachment: Attachment) => void;\n};\n\nfunction AttachmentsButton(props: AttachmentsButtonProps) {\n const {\n attachments,\n disabled = false,\n onAddNewAttachment,\n onListAllAttachments,\n onViewAttachmentDetails,\n } = props;\n const { formRef } = useContext(ActionViewContext) as ActionViewContextType;\n const [preloading, setPreloading] = useState(false);\n const [preloadedAttachments, setPreloadedAttachments] = useState<\n Attachment[]\n >([]);\n const [downloading, setDownloading] = useState(false);\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n const preloadAttachments = useCallback(async () => {\n setPreloading(true);\n try {\n const results = await ConnectionProvider.getHandler().readObjects({\n model: \"ir.attachment\",\n ids: attachments.map((a: any) => a.id),\n fieldsToRetrieve: [\"name\", \"datas_fname\", \"link\"],\n context: (formRef.current as any).getContext(),\n });\n setPreloadedAttachments(\n results.map((r: any) => ({\n id: r.id,\n name: r.name,\n datas_fname: r.datas_fname,\n link: r.link,\n })),\n );\n } catch (error) {\n showErrorDialog(error as any);\n }\n setPreloading(false);\n }, attachments);\n\n const openAttachmentLink = useCallback(async (attachment: any) => {\n if (attachment.link) {\n window.open(attachment.link);\n return;\n }\n\n setDownloading(true);\n\n let retrievedAttachment;\n\n try {\n const results = await ConnectionProvider.getHandler().readObjects({\n model: \"ir.attachment\",\n ids: [attachment.id],\n context: (formRef.current as any).getContext(),\n });\n retrievedAttachment = results[0];\n } catch (error) {\n showErrorDialog(error as any);\n }\n\n setDownloading(false);\n\n if (!retrievedAttachment) {\n return;\n }\n\n if (retrievedAttachment.datas) {\n const fileType: any = await getMimeType(retrievedAttachment.datas);\n openBase64InNewTab(retrievedAttachment.datas, fileType.mime);\n } else {\n onViewAttachmentDetails(retrievedAttachment);\n }\n }, []);\n\n const openAttachmentDetail = useCallback(async (attachment: any) => {\n onViewAttachmentDetails(attachment);\n }, []);\n\n useEffect(() => {\n preloadAttachments();\n }, [preloadAttachments]);\n\n return (\n <>\n <AttachmentsButtonWrapper\n numberOfAttachments={attachments.length}\n attachments={preloadedAttachments}\n disabled={disabled}\n loading={preloading}\n onAddNewAttachment={onAddNewAttachment}\n onListAllAttachments={onListAllAttachments}\n onopenAttachmentLink={openAttachmentLink}\n onOpenAttachmentDetail={openAttachmentDetail}\n />\n <Modal\n title={t(\"downloadingAttachment\")}\n open={downloading}\n footer={null}\n closable={false}\n centered\n maskClosable={false}\n >\n <Spin />\n </Modal>\n </>\n );\n}\n\nexport default AttachmentsButton;\n","import React, { useContext, useEffect, useRef } from \"react\";\nimport { Space, Spin, message } from \"antd\";\nimport {\n SaveOutlined,\n RightOutlined,\n LeftOutlined,\n DeleteOutlined,\n ThunderboltOutlined,\n PrinterOutlined,\n EnterOutlined,\n ReloadOutlined,\n CopyOutlined,\n InfoCircleOutlined,\n} from \"@ant-design/icons\";\nimport ChangeViewButton from \"./ChangeViewButton\";\nimport DropdownButton from \"./DropdownButton\";\nimport ActionButton from \"./ActionButton\";\nimport {\n ActionViewContext,\n ActionViewContextType,\n} from \"@/context/ActionViewContext\";\nimport NewButton from \"./NewButton\";\nimport showUnsavedChangesDialog from \"@/ui/UnsavedChangesDialog\";\nimport showConfirmDialog from \"@/ui/ConfirmDialog\";\nimport showErrorDialog from \"@/ui/GenericErrorDialog\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport refreshChangesDialog from \"@/ui/RefreshItemDialog\";\nimport { showLogInfo } from \"@/helpers/logInfoHelper\";\n\nimport {\n TabManagerContext,\n TabManagerContextType,\n} from \"@/context/TabManagerContext\";\n\nimport {\n ContentRootContext,\n ContentRootContextType,\n} from \"@/context/ContentRootContext\";\nimport AttachmentsButton from \"./AttachmentsButton\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport { Attachment } from \"./AttachmentsButtonWrapper\";\n\nfunction FormActionBar({ toolbar }: { toolbar: any }) {\n const {\n availableViews,\n currentView,\n setCurrentView,\n onFormSave,\n formHasChanges,\n formIsSaving,\n currentId,\n results,\n setCurrentItemIndex,\n currentItemIndex,\n setCurrentId,\n currentModel,\n setRemovingItem,\n removingItem,\n duplicatingItem,\n setDuplicatingItem,\n setResults,\n formIsLoading,\n attachments,\n formRef,\n setFormHasChanges,\n previousView,\n setPreviousView,\n goToResourceId,\n } = useContext(ActionViewContext) as ActionViewContextType;\n const { t, lang } = useContext(LocaleContext) as LocaleContextType;\n\n const contentRootContext = useContext(\n ContentRootContext,\n ) as ContentRootContextType;\n const { processAction } = contentRootContext || {};\n\n const tabManagerContext = useContext(\n TabManagerContext,\n ) as TabManagerContextType;\n const { openRelate, openDefaultActionForModel } = tabManagerContext || {};\n\n function tryRefresh(callback: any) {\n if (formHasChanges) {\n refreshChangesDialog({\n lang,\n onOk: () => {\n callback();\n },\n });\n return;\n }\n\n callback();\n }\n\n function tryNavigate(callback: any) {\n if (formHasChanges) {\n showUnsavedChangesDialog({\n lang,\n onOk: () => {\n callback();\n },\n });\n return;\n }\n\n callback();\n }\n\n function onNextClick() {\n if (results && results.length > currentItemIndex! + 1) {\n setCurrentItemIndex?.(currentItemIndex! + 1);\n setCurrentId?.(results[currentItemIndex! + 1].id);\n } else if (results && currentItemIndex! + 1 === results.length) {\n setCurrentItemIndex?.(0);\n setCurrentId?.(results[0].id);\n }\n }\n\n function onPreviousClick() {\n if (results && currentItemIndex! > 0) {\n setCurrentItemIndex?.(currentItemIndex! - 1);\n setCurrentId?.(results[currentItemIndex! - 1].id);\n } else if (results && currentItemIndex === 0) {\n setCurrentItemIndex?.(results.length - 1);\n setCurrentId?.(results[results.length - 1].id);\n }\n }\n\n function tryDelete() {\n showConfirmDialog({\n confirmMessage: t(\"confirmRemoveItem\"),\n lang,\n onOk: () => {\n remove();\n },\n });\n }\n\n async function remove() {\n try {\n setRemovingItem?.(true);\n\n await ConnectionProvider.getHandler().deleteObjects({\n model: currentModel!,\n ids: [currentId!],\n context: (formRef.current as any).getContext(),\n });\n\n const filteredResults = results?.filter((item: any) => {\n return item.id !== currentId;\n });\n setResults?.(filteredResults!);\n\n let newIndex = 0;\n\n if (currentItemIndex! > 0 && currentItemIndex! <= results!.length - 1) {\n newIndex = currentItemIndex! - 1;\n }\n\n if (!filteredResults?.[newIndex]) {\n setCurrentId?.(undefined);\n setCurrentItemIndex?.(undefined);\n } else {\n setCurrentId?.(filteredResults?.[newIndex].id);\n setCurrentItemIndex?.(newIndex);\n }\n } catch (e) {\n showErrorDialog(JSON.stringify(e));\n } finally {\n setRemovingItem?.(false);\n }\n }\n\n async function duplicate() {\n try {\n setDuplicatingItem?.(true);\n\n const newId = await ConnectionProvider.getHandler().duplicate({\n id: currentId!,\n model: currentModel!,\n context: (formRef.current as any).getContext(),\n });\n\n if (newId) {\n await goToResourceId?.([newId]);\n }\n } catch (e) {\n showErrorDialog(JSON.stringify(e));\n } finally {\n setDuplicatingItem?.(false);\n }\n }\n\n const mustDisableButtons =\n formIsSaving || removingItem || formIsLoading || duplicatingItem;\n\n function runAction(actionData: any) {\n processAction?.({\n actionData,\n values: (formRef.current as any).getValues(),\n fields: (formRef.current as any).getFields(),\n context: (formRef.current as any).getContext(),\n onRefreshParentValues: () => {\n (formRef.current as any).fetchValues();\n },\n });\n }\n\n if (!currentView) {\n return null;\n }\n\n return (\n <Space wrap={true}>\n {formIsLoading && (\n <>\n <Spin />\n {separator()}\n {separator()}\n </>\n )}\n <NewButton\n disabled={\n formIsSaving || formIsLoading || removingItem || duplicatingItem\n }\n />\n <ActionButton\n icon={<SaveOutlined />}\n tooltip={t(\"save\")}\n disabled={!formHasChanges || mustDisableButtons}\n loading={formIsSaving}\n onClick={onFormSave}\n />\n <ActionButton\n icon={<CopyOutlined />}\n tooltip={t(\"duplicate\")}\n disabled={\n formHasChanges ||\n formIsSaving ||\n currentId === undefined ||\n duplicatingItem ||\n formIsLoading\n }\n loading={duplicatingItem}\n onClick={duplicate}\n />\n <ActionButton\n icon={<DeleteOutlined />}\n tooltip={t(\"delete\")}\n disabled={\n formIsSaving ||\n currentId === undefined ||\n removingItem ||\n duplicatingItem ||\n formIsLoading\n }\n loading={removingItem}\n onClick={tryDelete}\n />\n {separator()}\n <ActionButton\n icon={<InfoCircleOutlined />}\n tooltip={t(\"showLogs\")}\n disabled={\n formIsSaving ||\n currentId === undefined ||\n removingItem ||\n duplicatingItem ||\n formIsLoading\n }\n loading={false}\n onClick={() => {\n showLogInfo(currentModel!, currentId!, t);\n }}\n />\n <ActionButton\n icon={<ReloadOutlined />}\n tooltip={t(\"refresh\")}\n disabled={\n formIsSaving ||\n currentId === undefined ||\n removingItem ||\n duplicatingItem ||\n formIsLoading\n }\n loading={false}\n onClick={() => {\n tryRefresh(() => {\n (formRef.current as any).fetchValues();\n });\n }}\n />\n {separator()}\n <ChangeViewButton\n currentView={currentView}\n previousView={previousView}\n availableViews={availableViews}\n onChangeView={(view: any) => {\n setPreviousView?.(currentView);\n setFormHasChanges?.(false);\n setCurrentView?.(view);\n }}\n disabled={mustDisableButtons}\n formHasChanges={formHasChanges}\n />\n {separator()}\n <Space>\n <ActionButton\n icon={<LeftOutlined />}\n tooltip={t(\"previous\")}\n disabled={mustDisableButtons}\n loading={false}\n onClick={() => {\n tryNavigate(onPreviousClick);\n }}\n />\n <ActionButton\n icon={<RightOutlined />}\n tooltip={t(\"next\")}\n disabled={mustDisableButtons}\n loading={false}\n onClick={() => {\n tryNavigate(onNextClick);\n }}\n />\n </Space>\n {separator()}\n <DropdownButton\n icon={<ThunderboltOutlined />}\n disabled={mustDisableButtons}\n tooltip={t(\"actions\")}\n items={toolbar?.action}\n onItemClick={async (action: any) => {\n if (!action) {\n return;\n }\n\n const result = await saveDocument({\n onFormSave,\n });\n\n if (!result.succeed) {\n return;\n }\n\n runAction(action);\n }}\n />\n <DropdownButton\n icon={<PrinterOutlined />}\n disabled={mustDisableButtons}\n tooltip={t(\"reports\")}\n items={toolbar?.print}\n onItemClick={async (report: any) => {\n if (!report) {\n return;\n }\n const result = await saveDocument({\n onFormSave,\n });\n\n if (!result.succeed) {\n return;\n }\n\n runAction({\n ...report,\n datas: {\n ...(report.datas || {}),\n ids: [result.currentId as number],\n },\n });\n }}\n />\n <DropdownButton\n icon={<EnterOutlined />}\n disabled={mustDisableButtons}\n tooltip={t(\"related\")}\n items={toolbar?.relate}\n onItemClick={async (relate: any) => {\n if (!relate) {\n return;\n }\n\n const result = await saveDocument({\n onFormSave,\n });\n\n if (!result.succeed) {\n return;\n }\n\n openRelate({\n relateData: relate,\n values: (formRef.current as any).getValues(),\n fields: (formRef.current as any).getFields(),\n action_id: relate.id,\n action_type: relate.type,\n });\n }}\n />\n <AttachmentsButton\n disabled={mustDisableButtons}\n attachments={attachments}\n onAddNewAttachment={async () => {\n const result = await saveDocument({\n onFormSave,\n });\n\n if (!result.succeed) {\n return;\n }\n\n const res_id = result.currentId as number;\n const res_model = currentModel as string;\n openDefaultActionForModel({\n ...getAttachmentActionPayload(res_model, res_id),\n initialViewType: \"form\",\n });\n }}\n onListAllAttachments={async () => {\n const result = await saveDocument({\n onFormSave,\n });\n\n if (!result.succeed) {\n return;\n }\n\n const res_id = result.currentId as number;\n const res_model = currentModel as string;\n openDefaultActionForModel({\n ...getAttachmentActionPayload(res_model, res_id),\n initialViewType: \"tree\",\n });\n }}\n onViewAttachmentDetails={async (attachment: Attachment) => {\n const result = await saveDocument({\n onFormSave,\n });\n\n if (!result.succeed) {\n return;\n }\n\n openDefaultActionForModel({\n model: \"ir.attachment\",\n res_id: attachment.id,\n initialViewType: \"form\",\n });\n }}\n />\n </Space>\n );\n}\n\nfunction separator() {\n return <div className=\"inline-block w-2\" />;\n}\n\nasync function saveDocument({\n onFormSave,\n}: {\n onFormSave?: () => Promise<{ succeed: boolean; id: number }>;\n}): Promise<{ succeed: boolean; currentId?: number }> {\n const result = await onFormSave?.();\n if (result?.succeed) {\n return { succeed: true, currentId: result.id };\n } else {\n return { succeed: false, currentId: undefined };\n }\n}\n\nfunction getAttachmentActionPayload(res_model: string, res_id: number) {\n return {\n model: \"ir.attachment\",\n domain: [\n [\"res_model\", \"=\", `${res_model}`],\n [\"res_id\", \"=\", `${res_id}`],\n ],\n values: {\n selection_associated_object: `${res_model},${res_id}`,\n },\n forced_values: {\n res_model,\n res_id,\n },\n };\n}\nexport default FormActionBar;\n","import React, { useContext, useEffect, useState } from \"react\";\nimport { Input, Button, Row, Col, theme } from \"antd\";\nimport { Char as CharOoui } from \"@gisce/ooui\";\nimport { EditOutlined, CheckOutlined } from \"@ant-design/icons\";\nimport { FormContext, FormContextType } from \"@/context/FormContext\";\nconst { useToken } = theme;\n\ninterface LinkInputProps {\n ooui: CharOoui;\n value?: string;\n onChange?: (value: string) => void;\n valueValidator: (value?: string) => boolean;\n linkPrefix?: string;\n}\n\nexport const LinkInput = (props: LinkInputProps) => {\n const { ooui, value, onChange, valueValidator, linkPrefix = \"\" } = props;\n const { id, readOnly, required } = ooui as CharOoui;\n const { token } = useToken();\n const requiredStyle =\n required && !readOnly\n ? { backgroundColor: token.colorPrimaryBg }\n : undefined;\n const formContext = useContext(FormContext) as FormContextType;\n const { elementHasLostFocus } = formContext || {};\n\n const [editMode, setEditMode] = useState(false);\n const [showInput, setShowInput] = useState(false);\n\n useEffect(() => {\n if (readOnly && !editMode) {\n setShowInput(false);\n }\n\n if (!value && !readOnly) {\n setEditMode(true);\n setShowInput(true);\n }\n }, [editMode, readOnly]);\n\n const onValueStringChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(e.target.value);\n };\n\n return (\n <Row gutter={8} wrap={false} align=\"middle\">\n {!readOnly ? (\n <Col flex=\"32px\">\n {editMode ? (\n <Button\n icon={<CheckOutlined />}\n onClick={() => {\n if (valueValidator(value)) {\n setEditMode(false);\n setShowInput(false);\n }\n }}\n style={{ borderTopRightRadius: 0, borderBottomRightRadius: 0 }}\n tabIndex={-1}\n />\n ) : (\n <Button\n icon={<EditOutlined />}\n onClick={() => {\n setEditMode(true);\n setShowInput(true);\n }}\n style={{ borderTopRightRadius: 0, borderBottomRightRadius: 0 }}\n tabIndex={-1}\n />\n )}\n </Col>\n ) : null}\n <Col flex=\"auto\">\n {showInput ? (\n <Input\n style={{\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0,\n ...requiredStyle,\n }}\n id={id}\n onChange={onValueStringChange}\n value={value}\n onBlur={() => {\n if (valueValidator(value)) {\n setEditMode(false);\n setShowInput(false);\n elementHasLostFocus?.();\n }\n }}\n />\n ) : (\n <a\n href={`${linkPrefix}${value}`}\n style={{ color: token.colorPrimary, paddingRight: 15 }}\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {value}\n </a>\n )}\n </Col>\n </Row>\n );\n};\n","import React from \"react\";\nimport isURL from \"validator/lib/isURL\";\nimport Field from \"@/common/Field\";\n\nimport { WidgetProps } from \"@/types\";\nimport { LinkInput } from \"./LinkInput\";\nimport { Char as CharOoui } from \"@gisce/ooui\";\n\nexport const Url = (props: WidgetProps) => {\n const { ooui } = props;\n const { required } = ooui as CharOoui;\n\n return (\n <Field required={required} {...props}>\n <LinkInput\n ooui={ooui as CharOoui}\n valueValidator={(value) => {\n if (!value) {\n return false;\n }\n return isURL(value);\n }}\n />\n </Field>\n );\n};\n","import React from \"react\";\nimport isEmail from \"validator/lib/isEmail\";\nimport Field from \"@/common/Field\";\n\nimport { WidgetProps } from \"@/types\";\nimport { LinkInput } from \"./LinkInput\";\nimport { Char as CharOoui } from \"@gisce/ooui\";\n\nexport const Email = (props: WidgetProps) => {\n const { ooui } = props;\n const { required } = ooui as CharOoui;\n\n return (\n <Field required={required} {...props}>\n <LinkInput\n ooui={ooui as CharOoui}\n linkPrefix={\"mailto:\"}\n valueValidator={(value) => {\n if (!value) {\n return false;\n }\n return isEmail(value);\n }}\n />\n </Field>\n );\n};\n","import React, { useContext, useRef } from \"react\";\nimport { Button, Col, Form, Input, Modal, Row, Space } from \"antd\";\nimport { CheckOutlined, CloseOutlined } from \"@ant-design/icons\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\ntype Props = {\n visible: boolean;\n onIdSubmitted: (ids: number[]) => void;\n onCancel: () => void;\n isSearching: boolean;\n};\n\nexport const GoToResourceModal = (props: Props) => {\n const { visible, onIdSubmitted, onCancel, isSearching } = props;\n\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n const inputRef = useRef<null | HTMLElement>();\n\n function handleSubmit(values: any) {\n const ids = values.id.split(\",\").map((id: string) => parseInt(id.trim()));\n onIdSubmitted(ids);\n }\n\n return (\n <Modal\n title={t(\"goToResourceId\")}\n centered\n open={visible}\n footer={null}\n destroyOnClose\n onCancel={onCancel}\n maskClosable={false}\n afterOpenChange={(open) => open && inputRef.current?.focus()}\n >\n <Form layout=\"vertical\" onFinish={handleSubmit} autoComplete=\"off\">\n <Form.Item\n name={\"id\"}\n label={t(\"searchId\")}\n rules={[\n {\n required: true,\n },\n ]}\n help={t(\"searchIdHelp\")}\n >\n <Input style={{ width: \"100%\" }} autoFocus ref={inputRef as any} />\n </Form.Item>\n <Row align=\"middle\" justify=\"end\">\n <Col>\n <Space>\n <Button\n icon={<CloseOutlined />}\n htmlType=\"button\"\n onClick={onCancel}\n disabled={isSearching}\n >\n {t(\"cancel\")}\n </Button>\n <Button\n loading={isSearching}\n style={{ marginLeft: 15 }}\n icon={<CheckOutlined />}\n htmlType=\"submit\"\n type=\"primary\"\n disabled={isSearching}\n >\n {t(\"ok\")}\n </Button>\n </Space>\n </Col>\n </Row>\n </Form>\n </Modal>\n );\n};\n","import React from \"react\";\nimport ButtonWithTooltip, {\n Props as ButtonWithTooltipProps,\n} from \"@/common/ButtonWithTooltip\";\nimport { theme } from \"antd\";\nconst { useToken } = theme;\n\ntype Props = ButtonWithTooltipProps & {\n badgeNumber?: number;\n};\n\nfunction ButtonWithBadge(props: Props) {\n const { badgeNumber = 0, ...restProps } = props;\n const { token } = useToken();\n\n return (\n <div style={{ position: \"relative\" }}>\n {badgeNumber > 0 && (\n <div style={{ position: \"absolute\", left: -10, top: -10, zIndex: 2 }}>\n <span\n style={{\n display: \"inline-block\",\n minWidth: \"22px\",\n padding: \"2px\",\n borderRadius: \"50%\",\n fontSize: \"12px\",\n textAlign: \"center\",\n background: token.colorPrimaryHover,\n color: token.colorPrimaryBg,\n }}\n >\n {badgeNumber}\n </span>\n </div>\n )}\n <ButtonWithTooltip\n {...restProps}\n style={{ width: 46, zIndex: 0 }}\n ></ButtonWithTooltip>\n </div>\n );\n}\n\nexport default ButtonWithBadge;\n","import React, { useContext } from \"react\";\nimport { Space } from \"antd\";\nimport ChangeViewButton from \"./ChangeViewButton\";\nimport {\n ActionViewContext,\n ActionViewContextType,\n} from \"@/context/ActionViewContext\";\nimport ActionButton from \"./ActionButton\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport ButtonWithBadge from \"./ButtonWithBadge\";\nimport { ReloadOutlined, FilterOutlined } from \"@ant-design/icons\";\nimport { View } from \"@/types\";\n\nfunction GraphActionBar({ refreshGraph }: { refreshGraph: () => void }) {\n const { t } = useContext(LocaleContext) as LocaleContextType;\n const {\n availableViews,\n currentView,\n setCurrentView,\n searchParams,\n searchVisible,\n setSearchVisible,\n graphIsLoading,\n previousView,\n setPreviousView,\n } = useContext(ActionViewContext) as ActionViewContextType;\n\n return (\n <Space wrap={true}>\n <ButtonWithBadge\n icon={\n <FilterOutlined\n style={{ color: searchVisible ? \"white\" : undefined }}\n />\n }\n tooltip={t(\"advanced_search\")}\n type={searchVisible ? \"primary\" : \"default\"}\n onClick={() => {\n setSearchVisible?.(!searchVisible);\n }}\n disabled={graphIsLoading}\n badgeNumber={searchParams?.length}\n />\n <ActionButton\n icon={<ReloadOutlined />}\n tooltip={t(\"refresh\")}\n disabled={graphIsLoading}\n loading={false}\n onClick={() => {\n refreshGraph();\n }}\n />\n <ChangeViewButton\n currentView={currentView}\n availableViews={availableViews}\n onChangeView={(newView: View) => {\n setPreviousView?.(currentView);\n setCurrentView?.(newView);\n }}\n disabled={false}\n previousView={previousView}\n />\n </Space>\n );\n}\n\nexport default GraphActionBar;\n","import React, { useContext } from \"react\";\nimport { Row, Col, Typography, theme } from \"antd\";\nimport {\n ActionViewContext,\n ActionViewContextType,\n} from \"@/context/ActionViewContext\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport { CopyOutlined } from \"@ant-design/icons\";\n\nconst { useToken } = theme;\n\nconst { Title, Text } = Typography;\n\ntype Props = {\n title?: string;\n children?: any;\n};\n\nfunction TitleHeader(props: Props) {\n const { title: titleProps, children } = props;\n const {\n title,\n currentView,\n currentId,\n currentItemIndex,\n results,\n totalItems,\n selectedRowItems,\n } = useContext(ActionViewContext) as ActionViewContextType;\n const { t } = useContext(LocaleContext) as LocaleContextType;\n const { token } = useToken();\n\n function getSummary() {\n if (currentView?.type === \"form\") {\n if (!currentId) {\n return \"\";\n }\n\n if (totalItems === 0) {\n return (\n <>\n {t(\"editingDocument\")} (id:{\" \"}\n <Text\n copyable={{ icon: <CopyOutlined style={{ color: \"red\" }} /> }}\n >\n {currentId}\n </Text>\n )\n </>\n );\n }\n\n return (\n <>\n {t(\"register\")}{\" \"}\n {currentItemIndex === undefined ? 1 : currentItemIndex + 1} /{\" \"}\n {results!.length} {t(\"of\")} {totalItems} - {t(\"editingDocument\")} (id:{\" \"}\n <Text copyable>{currentId}</Text>)\n </>\n );\n } else if (currentView?.type === \"tree\" && selectedRowItems) {\n if (selectedRowItems.length === 1) {\n return (\n <>\n 1 {t(\"selectedRegisters\")} - (id:{\" \"}\n <Text copyable>{selectedRowItems[0].id}</Text>)\n </>\n );\n } else if (selectedRowItems.length > 1) {\n return (\n <>\n {selectedRowItems.length} {t(\"selectedRegisters\")}\n <Text\n copyable={{\n text: selectedRowItems.map((reg) => reg.id).join(\", \"),\n }}\n ></Text>\n </>\n );\n }\n }\n return null;\n }\n return (\n <div\n style={{\n position: \"sticky\",\n top: 80,\n zIndex: 3,\n }}\n >\n <Row\n className=\"shadow-md\"\n style={{\n padding: \"1em\",\n borderRadius: token.borderRadius,\n backgroundColor: token.colorPrimaryBg,\n minHeight: \"82px\",\n }}\n align=\"middle\"\n >\n <Col flex={2}>\n <Title level={3} style={{ marginBottom: 0 }}>\n {titleProps || title}\n </Title>\n {getSummary()}\n </Col>\n <Col flex={3}>\n <Row justify=\"end\">{children}</Row>\n </Col>\n </Row>\n <div className=\"pb-5\" />\n </div>\n );\n}\n\nexport default TitleHeader;\n","import GraphActionBar from \"@/actionbar/GraphActionBar\";\nimport TitleHeader from \"@/ui/TitleHeader\";\nimport { Graph } from \"@/widgets/views/Graph/Graph\";\nimport React, { useContext, useEffect, useRef, useState } from \"react\";\nimport {\n ActionViewContext,\n ActionViewContextType,\n} from \"@/context/ActionViewContext\";\nimport { FormView, TreeView } from \"@/types\";\nimport { mergeSearchFields } from \"@/helpers/formHelper\";\nimport { useSearch } from \"@/hooks/useSearch\";\nimport SearchFilter from \"@/widgets/views/searchFilter/SearchFilter\";\nimport { Spin } from \"antd\";\nimport { mergeParams } from \"@/helpers/searchHelper\";\n\nexport type GraphActionViewProps = {\n viewData: any;\n visible: boolean;\n model: string;\n context: any;\n domain: any;\n formView: FormView;\n treeView: TreeView;\n};\n\nexport const GraphActionView = (props: GraphActionViewProps) => {\n const { viewData, visible, model, context, domain, formView, treeView } =\n props;\n const graphRef = useRef();\n\n const actionViewContext = useContext(\n ActionViewContext,\n ) as ActionViewContextType;\n const {\n setResults: setResultsActionView = undefined,\n setCurrentItemIndex = undefined,\n currentId = undefined,\n results: resultsActionView = undefined,\n setSelectedRowItems = undefined,\n setSearchParams = undefined,\n searchVisible = true,\n setSearchVisible = undefined,\n sorter = undefined,\n setSorter = undefined,\n setTotalItems: setActionViewTotalItems = undefined,\n setSearchTreeNameSearch = undefined,\n setTreeIsLoading = undefined,\n limit,\n setLimit,\n searchParams,\n searchValues,\n setSearchValues,\n currentView,\n } = actionViewContext || {};\n\n const [applyLimit, setApplyLimit] = useState(true);\n\n useEffect(() => {\n (graphRef.current as any)?.refresh();\n }, [searchParams]);\n\n useEffect(() => {\n if (viewData.view_id !== currentView.view_id) {\n setApplyLimit(true);\n }\n }, [currentView]);\n\n const { clear, searchFilterLoading, searchError, offset, tableRefreshing } =\n useSearch({\n model,\n setSearchTreeNameSearch,\n setSelectedRowItems,\n searchParams,\n setSearchValues,\n setSearchParams,\n setSearchVisible,\n setTreeIsLoading,\n context,\n formView: formView!,\n treeView: treeView!,\n sorter,\n setSorter,\n setCurrentItemIndex,\n setResultsActionView,\n resultsActionView,\n domain,\n currentId,\n setActionViewTotalItems,\n limit,\n setLimit,\n });\n\n if (!visible) {\n return null;\n }\n\n if (!viewData) {\n return null;\n }\n\n return (\n <>\n <TitleHeader title={viewData.name}>\n <GraphActionBar\n refreshGraph={() => {\n (graphRef.current as any).refresh();\n }}\n />\n </TitleHeader>\n <SearchFilter\n fields={{ ...treeView.fields, ...formView.fields }}\n searchFields={mergeSearchFields([\n formView.search_fields,\n treeView.search_fields,\n ])}\n limit={limit!}\n onClear={clear}\n offset={offset}\n isSearching={searchFilterLoading}\n onSubmit={(opts: {\n params: any;\n limit: number;\n offset: number;\n searchValues: any;\n }) => {\n setApplyLimit(false);\n setSearchParams?.(opts.params);\n setSearchVisible?.(false);\n }}\n searchError={searchError}\n searchVisible={searchVisible}\n searchValues={searchValues}\n showLimitOptions={false}\n />\n {tableRefreshing ? (\n <Spin />\n ) : (\n <Graph\n ref={graphRef}\n view_id={viewData.view_id}\n model={model}\n context={context}\n domain={mergeParams(searchParams || [], domain)}\n limit={applyLimit ? limit : undefined}\n manualIds={\n applyLimit ? resultsActionView?.map((r) => r.id) : undefined\n }\n />\n )}\n </>\n );\n};\n","import FormActionBar from \"@/actionbar/FormActionBar\";\nimport { FormView } from \"@/types\";\nimport TitleHeader from \"@/ui/TitleHeader\";\nimport Form from \"@/widgets/views/Form\";\nimport React from \"react\";\n\nexport type FormActionViewProps = {\n formView?: FormView;\n visible: boolean;\n formRef: any;\n model: string;\n currentId?: number;\n domain: any;\n context: any;\n defaultValues?: any;\n forcedValues?: any;\n results: any[];\n setResults: (value: any[]) => void;\n setCurrentItemIndex: (value?: number) => void;\n};\n\nexport const FormActionView = (props: FormActionViewProps) => {\n const {\n visible,\n formRef,\n model,\n currentId,\n domain,\n formView,\n context,\n defaultValues,\n forcedValues,\n results,\n setResults,\n setCurrentItemIndex,\n } = props;\n\n if (!visible) {\n return null;\n }\n\n return (\n <>\n <TitleHeader>\n <FormActionBar toolbar={formView?.toolbar} />\n </TitleHeader>\n <Form\n rootForm={true}\n ref={formRef}\n model={model}\n defaultValues={defaultValues}\n forcedValues={forcedValues}\n formView={formView}\n actionDomain={domain}\n id={currentId}\n parentContext={context}\n onSubmitSucceed={(id, values) => {\n const itemIndex = results!.findIndex((item: any) => {\n return item.id === id;\n });\n if (itemIndex === -1) {\n results!.push(values);\n setResults(results);\n setCurrentItemIndex(results!.length - 1);\n }\n }}\n />\n </>\n );\n};\n","import React, { useContext, useEffect, useState } from \"react\";\nimport { Button, Col, Form, Input, Row, Tooltip } from \"antd\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport { CloseCircleFilled } from \"@ant-design/icons\";\n\ntype Props = {\n onSearch: (searchValue?: string) => void;\n searchText?: string;\n disabled?: boolean;\n};\n\nfunction SearchBar(props: Props) {\n const { onSearch, disabled = false, searchText } = props;\n const { t } = useContext(LocaleContext) as LocaleContextType;\n const [form] = Form.useForm();\n const [mustShowClearSuffix, setMustShowClearSuffix] =\n useState<boolean>(false);\n\n function handleSubmit(values: any) {\n onSearch(values.search);\n }\n\n useEffect(() => {\n form.setFieldsValue({ search: searchText });\n }, [searchText]);\n\n function clear() {\n setMustShowClearSuffix(false);\n form.setFieldsValue({ search: undefined });\n onSearch(undefined);\n }\n\n return (\n <Form form={form} onFinish={handleSubmit} autoComplete=\"off\">\n <Row align=\"middle\" justify=\"end\">\n <Col>\n <Form.Item name={\"search\"} noStyle>\n <Input\n autoFocus\n disabled={disabled}\n onChange={(e) => {\n setMustShowClearSuffix(e.target.value.length > 0);\n }}\n style={{ borderTopRightRadius: 0, borderBottomRightRadius: 0 }}\n suffix={\n (mustShowClearSuffix ||\n (searchText && searchText.length > 0)) && (\n <Tooltip title={t(\"clear\")}>\n <CloseCircleFilled\n style={{ color: \"rgba(0,0,0,.45)\" }}\n onClick={clear}\n />\n </Tooltip>\n )\n }\n />\n </Form.Item>\n </Col>\n <Col>\n <Button\n htmlType=\"submit\"\n disabled={disabled}\n style={{ borderTopLeftRadius: 0, borderBottomLeftRadius: 0 }}\n >\n {t(\"search\")}\n </Button>\n </Col>\n </Row>\n </Form>\n );\n}\n\nexport default SearchBar;\n","import React, { useContext } from \"react\";\n\ninterface ConfigContextProps {\n erpFeatures: ErpFeaturesMap;\n}\n\nexport const ConfigContext = React.createContext<ConfigContextProps>({\n erpFeatures: {},\n});\n\n// TODO: this should be defined in a third package, because we are duplicating it both in webclient and here\nexport enum ErpFeatureKeys {\n FEATURE_ADVANCED_EXPORT = \"export_data2\",\n // ... add more features here\n}\n// TODO: this should be defined in a third package, because we are duplicating it both in webclient and here\nexport type ErpFeaturesMap = {\n [key in ErpFeatureKeys]?: boolean;\n};\n\nexport const useConfigContext = () => {\n return useContext(ConfigContext);\n};\n\nexport const useFeatureIsEnabled = (featureKey: ErpFeatureKeys): boolean => {\n const { erpFeatures } = useConfigContext();\n return !!erpFeatures[featureKey];\n};\n","import React, { useContext, useState } from \"react\";\nimport { Space, Spin } from \"antd\";\nimport ChangeViewButton from \"./ChangeViewButton\";\nimport {\n ActionViewContext,\n ActionViewContextType,\n} from \"@/context/ActionViewContext\";\nimport NewButton from \"./NewButton\";\nimport ActionButton from \"./ActionButton\";\nimport Icon, {\n DeleteOutlined,\n PrinterOutlined,\n ThunderboltOutlined,\n CopyOutlined,\n ReloadOutlined,\n InfoCircleOutlined,\n FilterOutlined,\n} from \"@ant-design/icons\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport showConfirmDialog from \"@/ui/ConfirmDialog\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport showErrorDialog from \"@/ui/ActionErrorDialog\";\nimport DropdownButton from \"./DropdownButton\";\nimport {\n ContentRootContext,\n ContentRootContextType,\n} from \"@/context/ContentRootContext\";\nimport ButtonWithBadge from \"./ButtonWithBadge\";\nimport { showLogInfo } from \"@/helpers/logInfoHelper\";\nimport SearchBar from \"./SearchBar\";\nimport { ExportModal } from \"..\";\nimport { mergeParams } from \"@/helpers/searchHelper\";\nimport { ErpFeatureKeys, useFeatureIsEnabled } from \"@/context/ConfigContext\";\n\ntype Props = {\n parentContext?: any;\n treeExpandable: boolean;\n toolbar: any;\n};\n\nfunction TreeActionBar(props: Props) {\n const {\n availableViews,\n currentView,\n setCurrentView,\n selectedRowItems,\n setRemovingItem,\n removingItem,\n duplicatingItem,\n setDuplicatingItem,\n currentModel,\n searchTreeRef,\n setCurrentId,\n setCurrentItemIndex,\n searchParams,\n searchVisible,\n setSearchVisible,\n setSearchTreeNameSearch,\n searchTreeNameSearch,\n treeIsLoading,\n setPreviousView,\n previousView,\n results,\n limit,\n totalItems,\n } = useContext(ActionViewContext) as ActionViewContextType;\n\n const { parentContext = {}, treeExpandable, toolbar } = props;\n const advancedExportEnabled = useFeatureIsEnabled(\n ErpFeatureKeys.FEATURE_ADVANCED_EXPORT,\n );\n const { t, lang } = useContext(LocaleContext) as LocaleContextType;\n const contentRootContext = useContext(\n ContentRootContext,\n ) as ContentRootContextType;\n const { processAction } = contentRootContext || {};\n const [exportModalVisible, setExportModalVisible] = useState(false);\n\n const hasNameSearch: boolean =\n searchTreeNameSearch !== undefined &&\n searchTreeNameSearch.trim().length > 0;\n\n function tryDelete() {\n showConfirmDialog({\n confirmMessage: t(\"confirmRemove\"),\n lang,\n onOk: () => {\n remove();\n },\n });\n }\n\n async function remove() {\n try {\n setRemovingItem?.(true);\n\n await ConnectionProvider.getHandler().deleteObjects({\n model: currentModel!,\n ids: selectedRowItems!.map((item) => item.id),\n context: { ...parentContext },\n });\n\n setCurrentId?.(undefined);\n setCurrentItemIndex?.(undefined);\n\n searchTreeRef?.current?.refreshResults();\n } catch (e) {\n showErrorDialog(e);\n } finally {\n setRemovingItem?.(false);\n }\n }\n\n async function duplicate() {\n try {\n setDuplicatingItem?.(true);\n\n const currentId = selectedRowItems![0].id;\n\n const newId = await ConnectionProvider.getHandler().duplicate({\n id: currentId,\n model: currentModel!,\n context: { ...parentContext },\n });\n\n if (newId) {\n searchTreeRef?.current?.refreshResults();\n }\n } catch (e) {\n showErrorDialog(e);\n } finally {\n setDuplicatingItem?.(false);\n }\n }\n\n function runAction(actionData: any) {\n processAction?.({\n actionData,\n values: {\n active_id: selectedRowItems?.map((item) => item.id)[0],\n active_ids: selectedRowItems?.map((item) => item.id),\n },\n fields: {},\n context: {\n ...parentContext,\n active_id: selectedRowItems?.map((item) => item.id)[0],\n active_ids: selectedRowItems?.map((item) => item.id),\n },\n onRefreshParentValues: () => {\n searchTreeRef?.current?.refreshResults();\n },\n });\n }\n\n return (\n <Space wrap={true}>\n {treeIsLoading && (\n <>\n <Spin />\n {separator()}\n {separator()}\n </>\n )}\n {treeExpandable ? null : (\n <>\n <SearchBar\n disabled={duplicatingItem || removingItem || treeIsLoading}\n searchText={searchTreeNameSearch}\n onSearch={(searchString?: string) => {\n if (searchString && searchString.trim().length > 0) {\n setSearchTreeNameSearch?.(searchString);\n } else {\n setSearchTreeNameSearch?.(undefined);\n }\n }}\n />\n {!treeExpandable && (\n <ButtonWithBadge\n icon={\n <FilterOutlined\n style={{ color: searchVisible ? \"white\" : undefined }}\n />\n }\n tooltip={t(\"advanced_search\")}\n type={searchVisible ? \"primary\" : \"default\"}\n onClick={() => {\n setSearchVisible?.(!searchVisible);\n }}\n disabled={duplicatingItem || removingItem || treeIsLoading}\n badgeNumber={searchParams?.length}\n />\n )}\n {separator()}\n <NewButton disabled={treeIsLoading} />\n <ActionButton\n icon={<CopyOutlined />}\n tooltip={t(\"duplicate\")}\n disabled={\n !selectedRowItems ||\n selectedRowItems?.length !== 1 ||\n duplicatingItem ||\n treeIsLoading\n }\n loading={duplicatingItem}\n onClick={duplicate}\n />\n <ActionButton\n icon={<DeleteOutlined />}\n tooltip={t(\"delete\")}\n disabled={\n !(selectedRowItems && selectedRowItems?.length > 0) ||\n treeIsLoading\n }\n loading={removingItem}\n onClick={tryDelete}\n />\n {separator()}\n </>\n )}\n <ActionButton\n icon={<InfoCircleOutlined />}\n tooltip={t(\"showLogs\")}\n disabled={\n !(selectedRowItems && selectedRowItems?.length > 0) || treeIsLoading\n }\n loading={false}\n onClick={() => {\n showLogInfo(currentModel!, selectedRowItems![0].id, t);\n }}\n />\n <ActionButton\n icon={<ReloadOutlined />}\n tooltip={t(\"refresh\")}\n disabled={duplicatingItem || removingItem || treeIsLoading}\n loading={false}\n onClick={() => {\n searchTreeRef?.current?.refreshResults();\n }}\n />\n {!treeExpandable && (\n <>\n {separator()}\n <ChangeViewButton\n currentView={currentView}\n availableViews={availableViews}\n onChangeView={(newView) => {\n setPreviousView?.(currentView);\n setCurrentView?.(newView);\n }}\n previousView={previousView}\n disabled={treeIsLoading}\n />\n </>\n )}\n {separator()}\n <DropdownButton\n icon={<ThunderboltOutlined />}\n disabled={\n !(selectedRowItems && selectedRowItems?.length > 0) || treeIsLoading\n }\n tooltip={t(\"actions\")}\n items={toolbar?.action}\n onItemClick={(action: any) => {\n if (!action) {\n return;\n }\n\n runAction(action);\n }}\n />\n <DropdownButton\n icon={<PrinterOutlined />}\n disabled={\n !(selectedRowItems && selectedRowItems?.length > 0) || treeIsLoading\n }\n tooltip={t(\"reports\")}\n items={toolbar?.print}\n onItemClick={(report: any) => {\n if (!report) {\n return;\n }\n\n runAction({\n ...report,\n datas: {\n ...(report.datas || {}),\n ids: selectedRowItems!.map((item) => item.id),\n },\n });\n }}\n />\n {advancedExportEnabled && (\n <>\n {separator()}\n <DropdownButton\n icon={\n <Icon\n component={() => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"icon icon-tabler icon-tabler-database-export\"\n width=\"1em\"\n height=\"1em\"\n viewBox=\"0 0 24 24\"\n strokeWidth=\"1.5\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\n <ellipse cx=\"12\" cy=\"6\" rx=\"8\" ry=\"3\" />\n <path d=\"M4 6v6c0 1.657 3.582 3 8 3a19.84 19.84 0 0 0 3.302 -.267m4.698 -2.733v-6\" />\n <path d=\"M4 12v6c0 1.599 3.335 2.905 7.538 2.995m8.462 -6.995v-2m-6 7h7m-3 -3l3 3l-3 3\" />\n </svg>\n )}\n />\n }\n tooltip={t(\"export\")}\n items={[\n {\n id: \"print_screen\",\n name: t(\"printScreen\"),\n },\n {\n id: \"export\",\n name: t(\"advancedExport\"),\n },\n ]}\n onItemClick={(itemClicked: any) => {\n if (itemClicked.id === \"print_screen\") {\n let idsToExport =\n selectedRowItems?.map((item) => item.id) || [];\n\n if (idsToExport.length === 0) {\n idsToExport = results?.map((item) => item.id) || [];\n }\n\n runAction({\n id: -1,\n model: currentModel,\n report_name: \"printscreen.list\",\n type: \"ir.actions.report.xml\",\n datas: {\n model: currentModel,\n ids: idsToExport,\n },\n });\n return;\n }\n\n setExportModalVisible(true);\n }}\n disabled={\n duplicatingItem || removingItem || treeIsLoading || hasNameSearch\n }\n />\n <ExportModal\n visible={exportModalVisible}\n locale={lang}\n onClose={() => setExportModalVisible(false)}\n model={currentModel!}\n domain={mergeParams(\n searchTreeRef?.current?.getDomain() || [],\n searchParams || [],\n )}\n limit={limit}\n totalRegisters={totalItems || 0}\n selectedRegistersToExport={selectedRowItems}\n visibleRegisters={results?.length || 0}\n context={parentContext}\n />\n </>\n )}\n </Space>\n );\n}\n\nfunction separator() {\n return <div className=\"inline-block w-2\" />;\n}\n\nexport default TreeActionBar;\n","import TreeActionBar from \"@/actionbar/TreeActionBar\";\nimport { FormView, TreeView, View } from \"@/types\";\nimport TitleHeader from \"@/ui/TitleHeader\";\nimport SearchTree from \"@/widgets/views/SearchTree\";\nimport React, { useContext } from \"react\";\nimport {\n ActionViewContext,\n ActionViewContextType,\n} from \"@/context/ActionViewContext\";\n\nexport type TreeActionViewProps = {\n formView?: FormView;\n treeView?: TreeView;\n visible: boolean;\n searchTreeRef: any;\n model: string;\n domain: any;\n context: any;\n results: any[];\n setCurrentItemIndex: (value?: number) => void;\n setCurrentId: (id?: number) => void;\n setCurrentView: (view: View) => void;\n availableViews: View[];\n searchTreeNameSearch?: string;\n limit?: number;\n};\n\nexport const TreeActionView = (props: TreeActionViewProps) => {\n const {\n visible,\n searchTreeRef,\n model,\n context,\n formView,\n treeView,\n domain,\n setCurrentItemIndex,\n results,\n setCurrentId,\n setCurrentView,\n availableViews,\n searchTreeNameSearch,\n } = props;\n\n const { currentView, setPreviousView } = useContext(\n ActionViewContext,\n ) as ActionViewContextType;\n\n if (!visible) {\n return null;\n }\n\n return (\n <>\n <TitleHeader>\n <TreeActionBar\n toolbar={treeView?.toolbar}\n parentContext={context}\n treeExpandable={treeView?.isExpandable || false}\n />\n </TitleHeader>\n <SearchTree\n ref={searchTreeRef}\n rootTree={true}\n model={model}\n parentContext={context}\n nameSearch={searchTreeNameSearch}\n formView={formView}\n treeView={treeView}\n domain={domain}\n onRowClicked={(event: any) => {\n const { id } = event;\n setCurrentId(id);\n const itemIndex = results.findIndex((item: any) => {\n return item.id === id;\n });\n setPreviousView?.(currentView);\n setCurrentItemIndex(itemIndex);\n const formView = availableViews.find(\n (v) => v.type === \"form\",\n ) as FormView;\n setCurrentView(formView);\n }}\n />\n </>\n );\n};\n","import { ShortcutApi } from \"@/ui/FavouriteButton\";\nimport React, { useState } from \"react\";\n\nexport type DashboardActionContextType = {\n isLoading: boolean;\n setIsLoading: (value: boolean) => void;\n dashboardRef: any;\n openAction: (action?: ShortcutApi) => void;\n moveItemsEnabled: boolean;\n setMoveItemsEnabled: (value: boolean) => void;\n};\n\nexport const DashboardActionContext =\n React.createContext<DashboardActionContextType | null>(null);\n\ntype DashboardActionProviderProps = {\n children: React.ReactNode;\n dashboardRef: any;\n openAction: (action?: ShortcutApi) => void;\n};\n\nconst DashboardActionProvider = (props: DashboardActionProviderProps): any => {\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [moveItemsEnabled, setMoveItemsEnabled] = useState<boolean>(false);\n\n const { children, dashboardRef, openAction } = props;\n\n return (\n <DashboardActionContext.Provider\n value={{\n isLoading,\n setIsLoading,\n dashboardRef,\n openAction,\n moveItemsEnabled,\n setMoveItemsEnabled,\n }}\n >\n {children}\n </DashboardActionContext.Provider>\n );\n};\n\nexport default DashboardActionProvider;\n","import React, { useContext } from \"react\";\nimport {\n DashboardActionContext,\n DashboardActionContextType,\n} from \"@/context/DashboardActionContext\";\nimport { Space } from \"antd\";\nimport ActionButton from \"./ActionButton\";\nimport {\n ReloadOutlined,\n SettingOutlined,\n BorderOuterOutlined,\n} from \"@ant-design/icons\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\nfunction DashboardActionBar() {\n const { isLoading, dashboardRef, moveItemsEnabled, setMoveItemsEnabled } =\n useContext(DashboardActionContext) as DashboardActionContextType;\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n return (\n <Space wrap={true}>\n <ActionButton\n icon={\n <BorderOuterOutlined\n style={{ color: moveItemsEnabled ? \"white\" : undefined }}\n />\n }\n type={moveItemsEnabled ? \"primary\" : \"default\"}\n tooltip={t(\"moveDashboard\")}\n disabled={isLoading}\n loading={false}\n onClick={() => {\n setMoveItemsEnabled(!moveItemsEnabled);\n }}\n />\n {separator()}\n <ActionButton\n icon={<SettingOutlined />}\n tooltip={t(\"configDashboard\")}\n disabled={isLoading}\n loading={false}\n onClick={() => {\n dashboardRef?.current.configDashboard();\n }}\n />\n <ActionButton\n icon={<ReloadOutlined />}\n tooltip={t(\"refresh\")}\n disabled={isLoading}\n loading={false}\n onClick={() => {\n dashboardRef?.current.refresh();\n }}\n />\n </Space>\n );\n}\n\nfunction separator() {\n return <div className=\"inline-block w-2\" />;\n}\n\nexport default DashboardActionBar;\n","import DashboardActionBar from \"@/actionbar/DashboardActionBar\";\nimport DashboardActionProvider from \"@/context/DashboardActionContext\";\nimport TitleHeader from \"@/ui/TitleHeader\";\nimport Dashboard from \"@/widgets/views/Dashboard/Dashboard\";\nimport React, { useContext, useRef } from \"react\";\nimport {\n TabManagerContext,\n TabManagerContextType,\n} from \"@/context/TabManagerContext\";\nimport { DashboardProps } from \"@/types\";\n\nexport type DashboardActionViewProps = {\n dashboardData: DashboardProps;\n visible: boolean;\n};\n\nexport const DashboardActionView = (props: DashboardActionViewProps) => {\n const { dashboardData, visible } = props;\n const dashboardRef = useRef();\n const tabManagerContext = useContext(\n TabManagerContext,\n ) as TabManagerContextType;\n const { openShortcut } = tabManagerContext || {};\n\n if (!dashboardData) {\n return null;\n }\n\n if (!visible) {\n return null;\n }\n\n return (\n <DashboardActionProvider\n dashboardRef={dashboardRef}\n openAction={(action) => {\n openShortcut(action!);\n }}\n >\n <TitleHeader>\n <DashboardActionBar />\n </TitleHeader>\n <Dashboard\n ref={dashboardRef}\n model={dashboardData!.model}\n id={dashboardData!.id}\n context={dashboardData?.context}\n configAction={dashboardData?.configAction}\n />\n </DashboardActionProvider>\n );\n};\n","import { ViewTuple, ViewType } from \"@/types\";\n\nexport async function resolveViewInfoPromises(\n viewsToRetrieve: Array<{ viewTuple: ViewTuple; promise?: Promise<any> }>,\n) {\n const results = await Promise.all(\n viewsToRetrieve.map(async (item) => {\n try {\n return await item.promise;\n } catch (error) {\n console.error(`Error for ${item.viewTuple}:`, error);\n return null;\n }\n }),\n );\n\n const updatedViews = viewsToRetrieve.map((item, index) => ({\n ...item,\n info: results[index],\n }));\n\n return updatedViews.filter((item) => item.info !== null);\n}\n","import React, {\n useEffect,\n useState,\n useRef,\n forwardRef,\n useImperativeHandle,\n useContext,\n} from \"react\";\n\nimport { Spin } from \"antd\";\n\nimport {\n DashboardView,\n FormView,\n GraphView,\n InitialViewData,\n TreeView,\n View,\n ViewType,\n} from \"@/types/index\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\n\nimport ActionViewProvider from \"@/context/ActionViewContext\";\nimport {\n TabManagerContext,\n TabManagerContextType,\n} from \"@/context/TabManagerContext\";\nimport { useHotkeys } from \"react-hotkeys-hook\";\nimport { GoToResourceModal } from \"@/ui/GoToResourceModal\";\nimport showInfo from \"@/ui/InfoDialog\";\nimport showErrorDialog from \"@/ui/ActionErrorDialog\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport { GraphActionView } from \"@/views/actionViews/GraphActionView\";\nimport { FormActionView } from \"./actionViews/FormActionView\";\nimport { TreeActionView } from \"./actionViews/TreeActionView\";\nimport { DashboardActionView } from \"./actionViews/DashboardActionView\";\nimport { info } from \"console\";\nimport { resolveViewInfoPromises } from \"@/helpers/viewHelper\";\n\ntype Props = {\n domain: any;\n context: any;\n model: string;\n views: Array<[number, ViewType]>;\n title: string;\n tabKey: string;\n setCanWeClose: (f: any) => void;\n initialView: InitialViewData;\n formDefaultValues?: any;\n formForcedValues?: any;\n res_id?: number | boolean;\n action_id: number;\n action_type: string;\n treeExpandable?: boolean;\n limit?: number;\n};\n\nfunction ActionView(props: Props, ref: any) {\n const {\n domain,\n model,\n context,\n views,\n title,\n setCanWeClose,\n tabKey,\n initialView,\n formDefaultValues,\n formForcedValues = {},\n res_id = false,\n action_id,\n action_type,\n treeExpandable = false,\n limit,\n } = props;\n const [currentView, setCurrentViewInternal] = useState<View>();\n\n const [availableViews, setAvailableViews] = useState<View[]>([]);\n\n const [isLoading, setIsLoading] = useState<boolean>(true);\n const res_id_parsed: number | undefined = res_id\n ? (res_id as number)\n : undefined;\n\n const [currentId, setCurrentIdInternal] = useState<number | undefined>(\n res_id_parsed,\n );\n const [selectedRowItems, setSelectedRowItems] = useState<any[]>([]);\n const [currentItemIndex, setCurrentItemIndex] = useState<number>();\n const [results, setResults] = useState<any>([]);\n const [sorter, setSorter] = useState<any>();\n const [totalItems, setTotalItems] = useState<number>(0);\n const [gtResourceModalVisible, setGtResourceModalVisible] =\n useState<boolean>(false);\n const [searchingForResourceId, setSearchingForResourceId] =\n useState<boolean>(false);\n const [searchTreeNameSearch, setSearchTreeNameSearch] = useState<string>();\n\n const { t } = (useContext(LocaleContext) as LocaleContextType) || {};\n\n const formRef = useRef();\n const searchTreeRef = useRef();\n\n const tabManagerContext = useContext(\n TabManagerContext,\n ) as TabManagerContextType;\n const {\n setCurrentView: setCurrentViewTabContext,\n setCurrentId: setCurrentIdTabContext,\n tabs,\n activeKey,\n openAction,\n onRemoveTab,\n } = tabManagerContext || {};\n\n useHotkeys(\n \"ctrl+g,command+g\",\n (event) => {\n event.preventDefault();\n handleGoToRecordShortcut();\n },\n [activeKey, tabs, currentView, currentItemIndex, results],\n );\n\n function setCurrentId(id?: number) {\n setCurrentIdInternal(id);\n setCurrentIdTabContext?.(id);\n }\n\n function setCurrentView(view?: View) {\n setCurrentViewInternal(view);\n setCurrentViewTabContext?.(view);\n }\n\n useImperativeHandle(ref, () => ({\n canWeClose,\n }));\n\n const fetchData = async () => {\n setIsLoading(true);\n\n const viewDataRetrieved: View[] = [];\n\n const getViewsPromises = [];\n\n for (const viewArray of views) {\n const [id, viewType] = viewArray;\n if (viewType !== \"dashboard\") {\n getViewsPromises.push({\n viewTuple: viewArray,\n promise: ConnectionProvider.getHandler().getView({\n model,\n type: viewType,\n id,\n context,\n }),\n });\n } else {\n getViewsPromises.push({\n viewTuple: viewArray,\n });\n }\n }\n\n const viewsRetrieved = await resolveViewInfoPromises(getViewsPromises);\n\n for (const view of viewsRetrieved) {\n if (!view) {\n continue;\n }\n\n const [, viewType] = view.viewTuple;\n\n const viewInfo = view.info;\n\n switch (viewType) {\n case \"dashboard\": {\n const formView = views.find((view: any[]) => {\n const [, type] = view;\n return type === \"form\";\n });\n\n let configAction;\n\n if (formView) {\n configAction = {\n action_id,\n action_type,\n name: title,\n res_id: context[\"active_id\"],\n res_model: model,\n view_id: formView[0],\n view_type: formView[1],\n };\n }\n\n viewDataRetrieved.push({\n type: \"dashboard\",\n id: context[\"active_id\"],\n model,\n context,\n configAction,\n });\n break;\n }\n case \"form\": {\n viewDataRetrieved.push({\n ...(viewInfo as FormView),\n type: viewType,\n });\n break;\n }\n case \"tree\": {\n viewDataRetrieved.push({\n ...(viewInfo as TreeView),\n isExpandable: treeExpandable,\n type: viewType,\n });\n break;\n }\n case \"graph\": {\n viewDataRetrieved.push({\n ...(viewInfo as GraphView),\n type: viewType,\n });\n break;\n }\n default:\n break;\n }\n }\n let currentViewToAssign;\n\n if (!initialView && viewDataRetrieved.find((v) => v.type === \"tree\")) {\n const treeView: TreeView = viewDataRetrieved.find(\n (v) => v.type === \"tree\",\n ) as TreeView;\n currentViewToAssign = treeView;\n } else if (!initialView) {\n const formView: TreeView = viewDataRetrieved.find(\n (v) => v.type === \"form\",\n ) as TreeView;\n currentViewToAssign = formView;\n } else {\n const view = viewDataRetrieved.find((v) => {\n if (!initialView.id) {\n return v.type === initialView.type;\n } else {\n return v.type === initialView.type && v.view_id === initialView.id;\n }\n });\n currentViewToAssign = view;\n }\n\n if (!currentViewToAssign) {\n showErrorDialog(\n `Error determining the first view to show for model ${model}.\\nPlease, make sure the view ids on the fields_view_get responses are the same as the ones defined in the action`,\n );\n onRemoveTab?.(tabKey);\n }\n\n setCurrentView(currentViewToAssign);\n setAvailableViews(viewDataRetrieved);\n setIsLoading(false);\n };\n\n setCanWeClose({ tabKey, canWeClose });\n\n useEffect(() => {\n const treeView = availableViews.find((v) => v.type === \"tree\") as TreeView;\n const initialViewWithData: View = availableViews.find((v) => {\n if (!initialView.id) {\n return v.type === initialView.type;\n } else {\n return v.type === initialView.type && v.view_id === initialView.id;\n }\n }) as View;\n\n setCurrentView(initialViewWithData || treeView);\n if (!res_id) {\n setCurrentId(undefined);\n setCurrentItemIndex(undefined);\n } else {\n setCurrentIdTabContext?.(res_id_parsed);\n }\n fetchData();\n }, [model, views, res_id]);\n\n useEffect(() => {\n if (activeKey === tabKey) {\n setCurrentIdTabContext?.(currentId);\n setCurrentViewTabContext?.(currentView);\n }\n }, [tabs, activeKey]);\n\n async function canWeClose() {\n if (!currentView) {\n return true;\n } else if (currentView!.type === \"form\") {\n return await (formRef.current as any).cancelUnsavedChanges();\n } else {\n return true;\n }\n }\n\n async function handleGoToRecordShortcut() {\n if (activeKey !== tabKey) {\n return;\n }\n\n if (currentView!.type === \"form\") {\n const canWeClose = await (formRef.current as any).cancelUnsavedChanges();\n\n if (!canWeClose) {\n return;\n }\n }\n\n setGtResourceModalVisible(true);\n }\n\n async function goToResourceId(ids: number[]) {\n setSearchingForResourceId(true);\n\n let mode: ViewType;\n let domain: any[];\n if (ids.length === 1) {\n mode = \"form\";\n domain = [];\n const id = ids[0];\n const itemIndex = results!.findIndex((item: any) => {\n return item.id === id;\n });\n let resource;\n\n if (itemIndex === -1) {\n try {\n resource = (\n await ConnectionProvider.getHandler().readObjects({\n model,\n ids: [id],\n context,\n })\n )?.[0];\n } catch (err) {}\n\n if (!resource) {\n setSearchingForResourceId(false);\n setGtResourceModalVisible(false);\n showInfo(t(\"idNotFound\"));\n return;\n }\n } else {\n resource = results[itemIndex];\n }\n } else {\n mode = \"tree\";\n domain = [[\"id\", \"in\", ids]];\n }\n\n setSearchingForResourceId(false);\n setGtResourceModalVisible(false);\n const viewForm = views.find((v) => v[1] === mode);\n openAction({\n domain,\n context,\n model,\n views,\n title,\n target: \"current\",\n initialView: { id: viewForm?.[0]!, type: mode },\n action_id,\n action_type,\n res_id: ids[0],\n });\n }\n\n function content() {\n return availableViews.map((view) => {\n switch (view.type) {\n case \"form\": {\n return (\n <FormActionView\n key={`${view.type}-${view.view_id}`}\n formRef={formRef}\n currentId={currentId}\n visible={\n currentView!.type === view.type &&\n currentView!.view_id === view.view_id\n }\n formView={view as FormView}\n model={model}\n context={context}\n domain={domain}\n defaultValues={formDefaultValues}\n forcedValues={formForcedValues}\n results={results}\n setResults={setResults}\n setCurrentItemIndex={setCurrentItemIndex}\n />\n );\n }\n case \"tree\": {\n return (\n <TreeActionView\n key={`${view.type}-${view.view_id}`}\n visible={\n currentView!.type === view.type &&\n currentView!.view_id === view.view_id\n }\n limit={limit}\n model={model}\n context={context}\n domain={domain}\n formView={\n availableViews.find((v) => v.type === \"form\") as FormView\n }\n treeView={view as TreeView}\n searchTreeRef={searchTreeRef}\n searchTreeNameSearch={searchTreeNameSearch}\n availableViews={availableViews}\n results={results}\n setCurrentItemIndex={setCurrentItemIndex}\n setCurrentId={setCurrentId}\n setCurrentView={setCurrentView}\n />\n );\n }\n case \"graph\": {\n return (\n <GraphActionView\n key={`${view.type}-${view.view_id}`}\n visible={\n currentView!.type === view.type &&\n currentView!.view_id === view.view_id\n }\n viewData={view as GraphView}\n model={model}\n context={context}\n domain={domain}\n treeView={\n availableViews.find((v) => v.type === \"tree\") as TreeView\n }\n formView={\n availableViews.find((v) => v.type === \"form\") as FormView\n }\n />\n );\n }\n case \"dashboard\": {\n return (\n <DashboardActionView\n key={`${view.type}-${view.view_id}`}\n dashboardData={view as DashboardView}\n visible={\n currentView!.type === view.type &&\n currentView!.view_id === view.view_id\n }\n />\n );\n }\n }\n });\n }\n\n function onNewClicked() {\n if (currentId === undefined && currentView!.type === \"form\") {\n (formRef.current as any).clearAndReload();\n } else {\n setCurrentId(undefined);\n const formView: FormView = availableViews.find(\n (v) => v.type === \"form\",\n ) as FormView;\n setCurrentView(formView);\n }\n }\n\n if (isLoading) {\n return <Spin />;\n }\n\n if (!currentView) {\n return null;\n }\n\n return (\n <ActionViewProvider\n title={title}\n currentView={currentView}\n setCurrentView={setCurrentView}\n availableViews={availableViews}\n formRef={formRef}\n searchTreeRef={searchTreeRef}\n onNewClicked={onNewClicked}\n currentId={currentId}\n setCurrentId={setCurrentId}\n setCurrentItemIndex={setCurrentItemIndex}\n currentItemIndex={currentItemIndex}\n results={results}\n setResults={setResults}\n currentModel={model}\n sorter={sorter}\n setSorter={setSorter}\n totalItems={totalItems}\n setTotalItems={setTotalItems}\n selectedRowItems={selectedRowItems}\n setSelectedRowItems={setSelectedRowItems}\n setSearchTreeNameSearch={setSearchTreeNameSearch}\n searchTreeNameSearch={searchTreeNameSearch}\n goToResourceId={goToResourceId}\n limit={limit}\n >\n {content()}\n <GoToResourceModal\n visible={gtResourceModalVisible}\n onIdSubmitted={goToResourceId}\n isSearching={searchingForResourceId}\n onCancel={() => {\n setGtResourceModalVisible(false);\n }}\n />\n </ActionViewProvider>\n );\n}\n\nexport default forwardRef(ActionView);\n","import ConnectionProvider from \"@/ConnectionProvider\";\nimport { parseContext } from \"@gisce/ooui\";\nimport { nanoid } from \"nanoid\";\n\nexport async function fetchAction({\n actionId,\n rootContext = {},\n globalValues = {},\n}: {\n actionId: number;\n rootContext?: any;\n globalValues?: any;\n}): Promise<any> {\n const actionType = \"ir.actions.act_window\";\n const action = `${actionType},${actionId}`;\n\n const dataForAction = await ConnectionProvider.getHandler().getActionData({\n action,\n context: rootContext,\n });\n\n const parsedContext = parseContext({\n context: dataForAction.context,\n values: globalValues,\n fields: {},\n });\n\n const parsedDomain = dataForAction.domain\n ? await ConnectionProvider.getHandler().evalDomain({\n domain: dataForAction.domain,\n values: globalValues,\n context: { ...rootContext, ...parsedContext },\n })\n : [];\n\n const {\n res_model: model,\n views,\n name: title,\n limit,\n view_type,\n } = dataForAction;\n const treeExpandable = view_type === \"tree\";\n\n const finalViews = [];\n\n for (const viewArray of views) {\n const [id, viewType] = viewArray;\n\n if (!id) {\n const { view_id } = await ConnectionProvider.getHandler().getView({\n model,\n type: viewType,\n id,\n context: { ...rootContext, ...parsedContext },\n });\n finalViews.push([view_id, viewType]);\n } else {\n finalViews.push(viewArray);\n }\n }\n\n const [id, type] = finalViews[0];\n const initialView = { id, type };\n\n return {\n title,\n actionId,\n actionType,\n key: nanoid(),\n views,\n model,\n context: { ...rootContext, ...parsedContext },\n domain: parsedDomain,\n initialView,\n limit,\n treeExpandable,\n };\n}\n","import React from \"react\";\nimport { DashboardGridProps } from \"./DashboardGrid.types\";\nimport { WidthProvider, Responsive } from \"react-grid-layout\";\nimport \"react-resizable/css/styles.css\";\nimport \"react-grid-layout/css/styles.css\";\n\nconst ResponsiveReactGridLayout = WidthProvider(Responsive);\n\nexport const DashboardGrid = (props: DashboardGridProps) => {\n const { children = [], onPositionItemsChanged } = props;\n\n const items = React.Children.map(\n children,\n (\n child:\n | boolean\n | React.ReactChild\n | React.ReactFragment\n | React.ReactPortal,\n ) => {\n const { parms, id } = (child as any).props;\n return (\n <div key={id} data-grid={parms}>\n {child}\n </div>\n );\n },\n );\n\n return (\n <ResponsiveReactGridLayout\n className=\"layout\"\n cols={{ lg: 12, md: 10, sm: 6, xs: 4, xxs: 2 }}\n draggableHandle={\".draggable-head\"}\n rowHeight={30}\n onLayoutChange={(layout) => {\n onPositionItemsChanged?.(\n layout.map((item) => {\n return {\n id: parseInt(item.i.replace(\".$\", \"\"), 10),\n x: item.x,\n y: item.y,\n w: item.w,\n h: item.h,\n };\n }),\n );\n }}\n >\n {items}\n </ResponsiveReactGridLayout>\n );\n};\n","import { DashboardGridItemProps } from \"./DashboardGridItem.types\";\nimport { ExportOutlined } from \"@ant-design/icons\";\nimport { Row, Col, Typography, theme } from \"antd\";\nimport ErrorBoundary from \"antd/es/alert/ErrorBoundary\";\nconst { useToken } = theme;\n\nconst { Text } = Typography;\n\nexport const DashboardGridItem = (props: DashboardGridItemProps) => {\n const { title, children, action, openAction } = props;\n const { token } = useToken();\n\n return (\n <div\n className={\"shadow-md\"}\n style={{\n height: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n overflow: \"hidden\",\n border: \"1px solid #eee\",\n backgroundColor: \"white\",\n borderRadius: token.borderRadius,\n }}\n >\n <Row\n align=\"middle\"\n style={{\n borderBottom: \"1px solid #ddd\",\n backgroundColor: token.colorPrimaryBg,\n }}\n wrap={false}\n >\n <Col\n flex=\"auto\"\n className=\"draggable-head\"\n style={{\n fontWeight: \"bold\",\n padding: \"0.5rem\",\n cursor: \"grab\",\n overflow: \"hidden\",\n }}\n >\n <Text ellipsis={true}>{title}</Text>\n </Col>\n {action && (\n <Col flex=\"25px\" style={{ padding: \"0.5rem\" }}>\n <Row justify=\"end\" align=\"middle\">\n <ExportOutlined\n style={{ cursor: \"pointer\" }}\n onClick={() => {\n openAction?.(action);\n }}\n />\n </Row>\n </Col>\n )}\n </Row>\n <ErrorBoundary>{children}</ErrorBoundary>\n </div>\n );\n};\n","import React, { useEffect, useState, useRef } from \"react\";\nimport { Alert, Spin } from \"antd\";\n\nimport { Tree } from \"@/widgets/views/Tree\";\nimport { FormView, TreeView } from \"@/types/index\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\n\nimport { getColorMap, getTree, sortResults } from \"@/helpers/treeHelper\";\nimport { mergeParams } from \"@/helpers/searchHelper\";\n\nconst DEFAULT_SEARCH_LIMIT = 80;\n\ntype OnRowClickedData = {\n id: number;\n model: string;\n treeView: TreeView;\n};\n\ntype Props = {\n action?: string;\n model?: string;\n view_id?: number;\n onRowClicked: (data: OnRowClickedData) => void;\n domain?: any;\n visible?: boolean;\n parentContext?: any;\n};\n\nfunction DashboardTree(props: Props) {\n const {\n action,\n model,\n view_id,\n onRowClicked,\n domain = [],\n visible = true,\n parentContext = {},\n } = props;\n\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [initialFetchDone, setInitialFetchDone] = useState<boolean>(false);\n\n const [currentModel, setCurrentModel] = useState<string>();\n const [treeView, setTreeView] = useState<TreeView>();\n const [formView, setFormView] = useState<FormView>();\n\n const [page, setPage] = useState<number>(1);\n const [offset, setOffset] = useState<number>(0);\n const limitRef = useRef<number>(DEFAULT_SEARCH_LIMIT);\n\n const paramsRef = useRef<any[]>([]);\n\n const [totalItems, setTotalItems] = useState<number>(0);\n const [results, setResults] = useState<any>([]);\n const [colorsForResults, setColorsForResults] = useState<any>(undefined);\n const [sorter, setSorter] = useState<any>();\n\n const [searchError, setSearchError] = useState<string>();\n const [initialError, setInitialError] = useState<string>();\n\n const [tableRefreshing, setTableRefreshing] = useState<boolean>(false);\n\n const actionDomain = useRef<any>([]);\n\n const onRequestPageChange = (page: number) => {\n setTableRefreshing(true);\n setPage(page);\n setOffset((page - 1) * limitRef.current!);\n };\n\n const searchResults = async () => {\n const domainParams =\n actionDomain.current.length > 0 ? actionDomain.current : domain;\n\n const searchParams = mergeParams(paramsRef.current, domainParams);\n const { colors } = getTree(treeView!);\n\n const { totalItems, results, attrsEvaluated } =\n await ConnectionProvider.getHandler().searchForTree({\n params: searchParams,\n limit: limitRef.current,\n offset,\n model: currentModel!,\n fields: treeView!.fields,\n context: parentContext,\n attrs: colors && { colors },\n });\n setColorsForResults(getColorMap(attrsEvaluated));\n\n const resultsSorted = sortResults({\n resultsToSort: results,\n sorter,\n fields: { ...treeView!.fields, ...formView!.fields },\n });\n setTableRefreshing(false);\n\n setResults(resultsSorted);\n const totalItemsResult = await totalItems;\n setTotalItems(totalItemsResult);\n };\n\n const fetchResults = async () => {\n try {\n setTableRefreshing(true);\n await searchResults();\n } catch (error) {\n setSearchError(JSON.stringify(error));\n }\n };\n\n useEffect(() => {\n if (!initialFetchDone) {\n return;\n }\n\n if (visible) {\n fetchResults();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [page, offset, initialFetchDone, visible]);\n\n const fetchData = async (type: \"action\" | \"model\") => {\n setInitialFetchDone(false);\n setIsLoading(true);\n setInitialError(undefined);\n\n try {\n if (type === \"action\") {\n await fetchActionData();\n } else {\n await fetchModelData();\n }\n setInitialFetchDone(true);\n } catch (error) {\n setInitialError(error);\n } finally {\n setIsLoading(false);\n }\n };\n\n const fetchActionData = async () => {\n const dataForAction =\n await ConnectionProvider.getHandler().getViewsForAction({\n action: action!,\n context: parentContext,\n });\n actionDomain.current = dataForAction.domain;\n setFormView(dataForAction.views.get(\"form\"));\n setTreeView(dataForAction.views.get(\"tree\"));\n setCurrentModel(dataForAction.model);\n limitRef.current = dataForAction.limit;\n };\n\n const fetchModelData = async () => {\n setCurrentModel(model);\n\n const _formView = (await ConnectionProvider.getHandler().getView({\n model: model!,\n type: \"form\",\n context: parentContext,\n })) as FormView;\n setFormView(_formView as FormView);\n\n const _treeView = (await ConnectionProvider.getHandler().getView({\n model: model!,\n type: \"tree\",\n id: view_id,\n context: parentContext,\n })) as TreeView;\n\n setTreeView(_treeView as TreeView);\n };\n\n useEffect(() => {\n if (action) {\n fetchData(\"action\");\n } else if (model) {\n fetchData(\"model\");\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [action, model]);\n\n const onRowClickedHandler = (record: any) => {\n const { id } = record;\n onRowClicked({\n id,\n model: currentModel!,\n treeView: treeView!,\n });\n };\n\n const content = () => {\n if (!treeView || !formView) {\n return null;\n }\n\n return (\n <div style={{ overflowY: \"scroll\" }}>\n {searchError && (\n <Alert className=\"mt-10\" message={searchError} type=\"error\" banner />\n )}\n <Tree\n showPagination={false}\n total={totalItems}\n limit={limitRef.current}\n page={page}\n treeView={treeView}\n results={results}\n onRequestPageChange={onRequestPageChange}\n loading={tableRefreshing}\n onRowClicked={onRowClickedHandler}\n colorsForResults={colorsForResults}\n sorter={sorter}\n onChangeSort={(newSorter) => {\n setSorter?.(newSorter);\n const sortedResults = sortResults({\n resultsToSort: results,\n sorter: newSorter,\n fields: { ...treeView.fields, ...formView.fields },\n });\n setResults(sortedResults);\n }}\n context={parentContext}\n />\n </div>\n );\n };\n\n if (initialError) {\n return (\n <Alert className=\"mt-10\" message={initialError} type=\"error\" banner />\n );\n }\n\n return isLoading ? <Spin style={{ padding: \"2rem\" }} /> : content();\n}\n\nexport default DashboardTree;\n","import ConnectionProvider from \"@/ConnectionProvider\";\nimport React, { useEffect, useState } from \"react\";\nimport Form, { FormProps } from \"../Form\";\n\nexport const DashboardForm = (props: FormProps) => {\n const { model } = props;\n const [firstId, setFirstId] = useState<number>();\n\n useEffect(() => {\n fetchData();\n }, [model]);\n\n async function fetchData() {\n const results: any[] = (await ConnectionProvider.getHandler().search({\n params: [],\n model,\n limit: 1,\n })) as any;\n\n if (results.length > 0) {\n setFirstId(results[0].id);\n }\n }\n\n return (\n <div style={{ padding: \"0.5rem\", overflowY: \"scroll\" }}>\n <Form {...props} model={model} id={firstId} readOnly />\n </div>\n );\n};\n","import React, {\n forwardRef,\n useContext,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from \"react\";\nimport ActionView from \"@/views/ActionView\";\nimport { fetchAction } from \"./dashboardHelper\";\nimport \"react-resizable/css/styles.css\";\nimport \"react-grid-layout/css/styles.css\";\nimport { Graph } from \"../Graph/Graph\";\nimport { DashboardGrid, DashboardGridItem } from \"../DashboardGrid\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport { DashboardProps, FormView } from \"@/types\";\nimport { One2manyItem } from \"@/index\";\nimport { readObjectValues } from \"@/helpers/one2manyHelper\";\nimport { LoadingOutlined } from \"@ant-design/icons\";\nimport { Alert } from \"antd\";\nimport {\n DashboardActionContext,\n DashboardActionContextType,\n} from \"@/context/DashboardActionContext\";\nimport { ShortcutApi } from \"@/ui/FavouriteButton\";\nimport DashboardTree from \"./DashboardTree\";\nimport { DashboardForm } from \"./DashboardForm\";\n\nconst itemsField = \"line_ids\";\n\nfunction Dashboard(props: DashboardProps, ref: any) {\n const { model, context = {}, id, configAction } = props;\n const [dashboardItems, setDashboardItems] = useState<any[]>([]);\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [error, setError] = useState<string>();\n const {\n setIsLoading: setActionBarLoading,\n openAction,\n moveItemsEnabled,\n } = useContext(DashboardActionContext) as DashboardActionContextType;\n\n const itemsFields = useRef<any>();\n const boardFields = useRef<any>();\n\n useEffect(() => {\n fetchData();\n }, [model, id, context]);\n\n useImperativeHandle(ref, () => ({\n refresh: () => {\n fetchData();\n },\n configDashboard: openConfigDashboard,\n }));\n\n async function fetchData() {\n setIsLoading(true);\n setActionBarLoading(true);\n setError(undefined);\n\n try {\n const view: FormView = (await fetchView()) as FormView;\n const values = await fetchValues(view);\n const model = view.fields[itemsField].relation;\n const items: One2manyItem[] = values[itemsField].items;\n boardFields.current = view.fields;\n\n const originalItems: One2manyItem[] = await fetchDashboardItems({\n items,\n model,\n context,\n });\n\n const itemsWithActions = await getItemsWithActions(originalItems);\n setDashboardItems(itemsWithActions);\n setIsLoading(false);\n setActionBarLoading(false);\n } catch (err) {\n setError(JSON.stringify(err));\n }\n }\n\n async function fetchView() {\n return await ConnectionProvider.getHandler().getView({\n model,\n type: \"form\",\n context,\n });\n }\n\n async function fetchDashboardItems({\n items,\n model,\n context,\n }: {\n items: One2manyItem[];\n model: string;\n context: any;\n }) {\n itemsFields.current = (\n (await ConnectionProvider.getHandler().getView({\n model,\n type: \"form\",\n context,\n })) as FormView\n ).fields;\n\n const [results] = await readObjectValues({\n treeView: {\n fields: itemsFields.current,\n },\n formView: {\n fields: itemsFields.current,\n },\n model,\n items,\n context,\n currentView: \"form\",\n });\n return results;\n }\n\n async function fetchValues(view: FormView) {\n return (\n await ConnectionProvider.getHandler().readObjects({\n model,\n ids: [id],\n fields: view.fields,\n context,\n })\n )[0];\n }\n\n async function getItemsWithActions(items: One2manyItem[]) {\n const itemsWithActions = [];\n\n for (const dashboardItem of items) {\n const { values } = dashboardItem;\n if (values.action_id && values.action_id.length > 0) {\n const actionId = parseInt(values.action_id[0], 10);\n const actionData = await fetchAction({\n actionId,\n rootContext: context,\n });\n itemsWithActions.push({ ...dashboardItem, actionData });\n }\n }\n\n return itemsWithActions;\n }\n\n async function onPositionItemsChanged(itemPositions: any[]) {\n if (!moveItemsEnabled) {\n return;\n }\n\n const differences = itemPositions.filter((itemPosition) => {\n const dashboardItem = dashboardItems.find(\n (dashboardItem) => dashboardItem.id === itemPosition.id,\n );\n if (!dashboardItem) {\n return false;\n }\n\n if (!dashboardItem.position) {\n return true;\n }\n\n const remotePosition = {\n ...JSON.parse(dashboardItem.position.replace(/'/g, '\"')),\n id: dashboardItem.id,\n };\n\n return JSON.stringify(itemPosition) !== JSON.stringify(remotePosition);\n });\n\n if (differences.length === 0) {\n return;\n }\n\n const itemsToUpdate = dashboardItems.filter((dashboardItem) => {\n return differences.map((diff) => diff.id).includes(dashboardItem.id);\n });\n\n const itemsToUpdateWithUpdatedPos = itemsToUpdate.map((dashboardItem) => {\n const diffItem = {\n ...differences.find((diffItem) => diffItem.id === dashboardItem.id),\n };\n delete diffItem.id;\n\n const item = { ...dashboardItem };\n delete item.actionData;\n\n return {\n ...dashboardItem,\n operation: \"pendingUpdate\",\n values: {\n ...dashboardItem.values,\n position: JSON.stringify(diffItem).replace(/\"/g, \"'\"),\n },\n };\n });\n\n const valueToUpdate = {\n fields: itemsFields.current,\n items: itemsToUpdateWithUpdatedPos,\n };\n\n await ConnectionProvider.getHandler().update({\n model,\n id,\n values: { [itemsField]: valueToUpdate },\n fields: boardFields.current,\n context,\n });\n }\n\n async function openConfigDashboard() {\n openAction(configAction);\n }\n\n if (error) {\n console.log(error);\n return (\n <Alert className=\"mt-10 mb-20\" message={error} type=\"error\" banner />\n );\n }\n\n if (isLoading) {\n return <LoadingOutlined />;\n }\n\n return (\n <DashboardGrid onPositionItemsChanged={onPositionItemsChanged}>\n {dashboardItems.map((item, idx) => {\n const { actionData, values } = item;\n const { position, id } = values;\n\n const {\n actionId,\n actionType,\n key,\n title,\n views,\n model,\n context,\n domain,\n initialView,\n limit,\n } = actionData as any;\n\n let parmsParsed = {};\n\n try {\n parmsParsed = JSON.parse(position.replace(/'/g, '\"'));\n } catch (err) {\n // console.error(`Error parsing parms: ${action.position}`);\n parmsParsed = { x: idx * 2, y: 0, w: 2, h: 3 };\n }\n\n let childContent = null;\n\n if (initialView?.type === \"graph\") {\n childContent = (\n <Graph\n view_id={\n views.filter(\n (view: [number, string]) => view[1] === \"graph\",\n )[0][0]\n }\n model={model}\n context={context}\n domain={domain}\n limit={limit}\n />\n );\n } else if (initialView?.type === \"form\") {\n childContent = <DashboardForm model={model} actionDomain={domain} />;\n } else if (initialView?.type === \"tree\") {\n childContent = (\n <DashboardTree\n model={model}\n domain={domain}\n view_id={\n views.filter(\n (view: [number, string]) => view[1] === \"tree\",\n )[0][0]\n }\n onRowClicked={(record) => {\n const formView = views.find((view: any[]) => {\n const [, type] = view;\n return type === \"form\";\n });\n if (formView) {\n const [id, type] = formView;\n const {\n actionId: action_id,\n actionType: action_type,\n title: name,\n model: res_model,\n } = actionData;\n\n const action: ShortcutApi = {\n action_id,\n action_type,\n name,\n res_id: record.id,\n res_model,\n view_id: id,\n view_type: type,\n };\n openAction(action);\n }\n }}\n />\n );\n } else if (initialView !== undefined) {\n const formattedInitialView =\n initialView && Array.isArray(initialView.id)\n ? { ...initialView, id: initialView.id[0] }\n : initialView;\n childContent = (\n <ActionView\n action_id={actionId}\n action_type={actionType}\n tabKey={key}\n title={title}\n views={views}\n model={model}\n context={context}\n domain={domain}\n setCanWeClose={() => {}}\n initialView={formattedInitialView}\n limit={limit}\n />\n );\n }\n\n let action: ShortcutApi;\n const treeView = views.find((view: any[]) => {\n const [, type] = view;\n return type === \"tree\";\n });\n if (treeView) {\n const [id, type] = treeView;\n const {\n actionId: action_id,\n actionType: action_type,\n title: name,\n model: res_model,\n } = actionData;\n\n action = {\n action_id,\n action_type,\n name,\n res_id: false,\n res_model,\n view_id: id,\n view_type: type,\n };\n }\n\n return (\n <DashboardGridItem\n key={id}\n id={id}\n title={title}\n parms={parmsParsed}\n action={action!}\n openAction={openAction}\n >\n {childContent}\n </DashboardGridItem>\n );\n })}\n </DashboardGrid>\n );\n}\n\nexport default forwardRef(Dashboard);\n","import React, { useContext, useState } from \"react\";\nimport { MultiCheckbox as MultiCheckboxOoui } from \"@gisce/ooui\";\nimport Field from \"@/common/Field\";\nimport { One2manyItem, One2manyValue } from \"../base/one2many/One2manyInput\";\nimport useDeepCompareEffect from \"use-deep-compare-effect\";\nimport { FormContext, FormContextType } from \"@/context/FormContext\";\nimport { Alert, Checkbox, Spin, Col, Row, Button, Space } from \"antd\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport { transformPlainMany2Ones } from \"@/helpers/formHelper\";\n\ntype MultiCheckboxProps = {\n ooui: MultiCheckboxOoui;\n};\n\ntype MultiCheckboxInputProps = MultiCheckboxProps & {\n value?: One2manyValue;\n onChange?: (value: One2manyValue) => void;\n};\n\nexport const MultiCheckbox = (props: MultiCheckboxProps) => {\n const { ooui } = props;\n\n return (\n <Field type={\"array\"} {...props}>\n <MultiCheckboxInput ooui={ooui} />\n </Field>\n );\n};\n\nexport const MultiCheckboxInput = (props: MultiCheckboxInputProps) => {\n const { value, ooui, onChange } = props;\n const { items = [] } = value || {};\n const itemsToShow = items\n .filter((item) => item.operation !== \"pendingRemove\")\n .map((item) => item.id) as number[];\n\n const [options, setOptions] = useState<any[]>([]);\n const [error, setError] = useState<string>();\n const [isLoadingOptions, setIsLoadingOptions] = useState<boolean>(false);\n const { relation, context, readOnly, field, columns } = ooui;\n\n const formContext = useContext(FormContext) as FormContextType;\n const { getContext } = formContext || {};\n\n useDeepCompareEffect(() => {\n fetchOptions();\n }, [items]);\n\n const triggerChange = (changedValue: One2manyItem[]) => {\n onChange?.({\n items: changedValue,\n });\n };\n\n async function fetchOptions() {\n setIsLoadingOptions(true);\n let params: any = [];\n if (ooui.domain) {\n const evaluatedDomain = await ConnectionProvider.getHandler().evalDomain({\n domain: ooui.domain,\n values: transformPlainMany2Ones({\n fields: formContext?.getFields(),\n values: formContext.getPlainValues(),\n }),\n fields: formContext?.getFields(),\n context: formContext.getContext(),\n });\n params = [...params, ...evaluatedDomain];\n }\n try {\n const optionsRead = await ConnectionProvider.getHandler().search({\n model: relation,\n params,\n fieldsToRetrieve: [field],\n context: { ...getContext?.(), ...context },\n });\n const options = optionsRead.map((item: any) => {\n const value = item[field];\n let formattedValue = value;\n if (Array.isArray(value)) {\n formattedValue = value[1];\n }\n return { label: formattedValue, value: item.id };\n });\n setOptions(options);\n } catch (err) {\n setError(err as any);\n } finally {\n setIsLoadingOptions(false);\n }\n if (error) {\n return <Alert className=\"mt-10\" message={error} type=\"error\" banner />;\n }\n }\n\n const checkAll = () => {\n onChangeSelected(options.map((option) => option.value));\n };\n\n const uncheckAll = () => {\n onChangeSelected([]);\n };\n\n const onChangeSelected = (ids: any[]) => {\n const newItems: One2manyItem[] = items.map((item) => {\n if (ids.includes(item.id as number)) {\n if (item.operation == \"pendingRemove\") {\n return {\n ...item,\n operation: \"original\",\n };\n } else {\n return item;\n }\n } else {\n return { id: item.id, operation: \"pendingRemove\" };\n }\n });\n const currentIds = newItems.map((item) => item.id);\n ids\n .filter((id) => !currentIds.includes(id))\n .map((id) => {\n newItems.push({ id, operation: \"pendingLink\" });\n });\n triggerChange(newItems);\n };\n\n if (isLoadingOptions && options.length === 0) {\n return <Spin />;\n }\n\n return (\n <>\n <div className=\"flex flex-row\">\n <Checkbox.Group\n value={options.length ? itemsToShow : []}\n disabled={readOnly}\n onChange={onChangeSelected}\n style={{ width: \"100%\" }}\n >\n <Row>\n {options.map((option) => (\n <Col span={Math.floor(24 / columns)}>\n <Checkbox value={option.value}>{option.label}</Checkbox>\n </Col>\n ))}\n </Row>\n </Checkbox.Group>\n {!readOnly && (\n <Space>\n <Button\n onClick={checkAll}\n disabled={itemsToShow.length == options.length}\n >\n Check all\n </Button>\n <Button onClick={uncheckAll} disabled={itemsToShow.length === 0}>\n Uncheck all\n </Button>\n </Space>\n )}\n </div>\n </>\n );\n};\n","import Field from \"@/common/Field\";\nimport ReactMarkdown from \"react-markdown\";\nimport React from \"react\";\nimport { WidgetProps } from \"@/types\";\nimport remarkGfm from \"remark-gfm\";\n\nexport const Markdown = (props: WidgetProps) => {\n return (\n <Field {...props}>\n <MarkdownInput {...props} />\n </Field>\n );\n};\n\nexport const MarkdownInput = (props: any) => {\n const { value, ooui } = props;\n return (\n <div\n style={{\n height: ooui?.height ? ooui.height + \"px\" : \"100%\",\n overflow: \"auto\",\n }}\n >\n <ReactMarkdown\n remarkPlugins={[remarkGfm]}\n className=\"markdown-typography\"\n >\n {value}\n </ReactMarkdown>\n </div>\n );\n};\n","import React from \"react\";\nimport { Radio as RadioAnt, Space } from \"antd\";\n\nimport Field from \"@/common/Field\";\nimport { Radio as RadioOoui } from \"@gisce/ooui\";\nimport { WidgetProps } from \"@/types\";\n\nexport const Radio = (props: WidgetProps) => {\n const { ooui } = props;\n const { required } = ooui;\n\n return (\n <Field required={required} type={\"any\"} {...props}>\n <SelectionInput {...props} />\n </Field>\n );\n};\n\ntype RadioInputProps = WidgetProps & {\n onChange?: (value: any) => void;\n value?: string;\n};\n\nexport const SelectionInput = (props: RadioInputProps) => {\n const { ooui, onChange, value } = props;\n const { selectionValues, readOnly, direction } = ooui as RadioOoui;\n\n const values = Array.from(selectionValues.entries());\n\n const options =\n values &&\n values.length &&\n values.map((entry: string[]) => {\n const [key, value] = entry;\n return (\n <RadioAnt key={key} value={key}>\n {value}\n </RadioAnt>\n );\n });\n\n return (\n <RadioAnt.Group disabled={readOnly} onChange={onChange} value={value}>\n <Space direction={direction}>{options}</Space>\n </RadioAnt.Group>\n );\n};\n","import React from \"react\";\nimport { Switch as AntdSwitch } from \"antd\";\n\nimport Field from \"@/common/Field\";\nimport { WidgetProps } from \"@/types\";\n\nexport const Switch = (props: WidgetProps) => {\n const { ooui } = props;\n const { id, readOnly, required } = ooui;\n\n return (\n <Field {...props} valuePropName=\"checked\">\n <SwitchInput id={id} readOnly={readOnly} required={required} />\n </Field>\n );\n};\n\nconst SwitchInput = (props: any) => {\n const { required, readOnly, ...restProps } = props;\n\n return (\n <div className=\"flex flex-row\">\n <AntdSwitch disabled={readOnly} {...restProps} />\n </div>\n );\n};\n","import React, { useContext } from \"react\";\nimport { Steps as AntdSteps } from \"antd\";\nimport { FormContext, FormContextType } from \"@/context/FormContext\";\nimport Field from \"@/common/Field\";\nimport { Steps as StepsOoui } from \"@gisce/ooui\";\n\ntype StepsProps = {\n ooui: StepsOoui;\n value: any;\n};\n\ntype StatusType = \"wait\" | \"process\" | \"finish\" | \"error\";\n\nexport const Steps = (props: StepsProps) => {\n const { ooui } = props;\n const { required } = ooui;\n\n return (\n <Field required={required} type={\"any\"} {...props}>\n <StepsInput {...props} />\n </Field>\n );\n};\n\ntype StepsInputProps = StepsProps & {\n value?: any;\n};\n\nexport const StepsInput = (props: StepsInputProps) => {\n const { ooui, value } = props;\n const { selectionValues, errorField } = ooui as StepsOoui;\n const formContext = useContext(FormContext) as FormContextType;\n\n const values = Array.from(selectionValues.entries());\n const current = values.map((val) => val[0]).indexOf(value);\n let status: StatusType = \"process\";\n let error = \"\";\n\n if (errorField) {\n error = formContext.getFieldValue(errorField);\n if (error) {\n status = \"error\";\n }\n }\n\n return (\n <AntdSteps current={current} status={status}>\n {values.map((val, idx) => (\n <AntdSteps.Step\n title={val[1]}\n description={idx === current && status === \"error\" ? error : null}\n />\n ))}\n </AntdSteps>\n );\n};\n","import React, { useContext } from \"react\";\nimport Editor from \"@monaco-editor/react\";\nimport { FormContext, FormContextType } from \"@/context/FormContext\";\nimport { CodeEditor as CodeEditorOoui } from \"@gisce/ooui\";\n\nimport Field from \"@/common/Field\";\nimport { WidgetProps } from \"@/types\";\n\ntype CodeEditorProps = WidgetProps & {\n ooui: CodeEditorOoui;\n};\n\nexport const CodeEditor = (props: CodeEditorProps) => {\n const { ooui } = props;\n const { lang, height } = ooui;\n const formContext = useContext(FormContext) as FormContextType;\n const { elementHasLostFocus } = formContext || {};\n\n const onMount = (editor: any) => {\n editor.onDidBlurEditorWidget(elementHasLostFocus);\n };\n\n return (\n <Field {...props}>\n <Editor\n defaultLanguage={lang || \"\"}\n height={height || 300}\n onMount={onMount}\n />\n </Field>\n );\n};\n","import { Fragment, useContext } from \"react\";\nimport Field from \"@/common/Field\";\nimport { WidgetProps } from \"@/types\";\nimport {\n Card,\n Space,\n Typography,\n Avatar,\n Tag,\n Timeline,\n TimelineItemProps,\n} from \"antd\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\nimport dayjs from \"@/helpers/dayjs\";\nimport md5 from \"md5\";\n\nconst { Meta } = Card;\nconst { Text } = Typography;\n\ntype GravatarProps = {\n email: string;\n size?: number;\n theme: string;\n};\n\ntype CommentDataType = {\n id: number;\n isSender: boolean;\n isAuthor: boolean;\n text: string;\n email: string;\n date: string;\n author: string;\n};\n\ntype CommentProps = {\n data: CommentDataType;\n style?: any;\n};\n\ntype CommentsTypeProps = {\n data: CommentDataType[];\n};\n\ntype CommentsTimelineProps = {\n value?: EventsType[];\n};\n\ntype EventActionType = {\n date: string;\n action: string;\n};\n\nexport type EventsType = {\n type: \"action\" | \"comment\";\n event: EventActionType | CommentDataType;\n};\n\nconst Gravatar = ({ email, size = 40, theme = \"\" }: GravatarProps) => {\n // Genera el enlace de Gravatar utilizando el email\n const gravatarUrl = `https://www.gravatar.com/avatar/${md5(\n email,\n )}?s=${size}&d=${theme}`;\n\n return <Avatar src={gravatarUrl} size={size} />;\n};\n\nfunction TextWithNewlines({ text }: { text: string }) {\n const textParts = text.split(\"\\n\");\n\n return (\n <div>\n {textParts.map((part, index) => (\n <Fragment key={index}>\n {part}\n {index !== textParts.length - 1 && <br />}\n </Fragment>\n ))}\n </div>\n );\n}\n\nexport const Comment = (props: CommentProps) => {\n const { data, style } = props;\n const { t } = useContext(LocaleContext) as LocaleContextType;\n return (\n <Card key={data.id} style={{ ...style, ...{ textAlign: \"start\" } }}>\n <Meta\n avatar={<Gravatar email={data.email} theme=\"mp\" />}\n title={data.author}\n description={\n <Space direction=\"horizontal\">\n <span title={data.date}>{dayjs(data.date).fromNow()}</span>\n {data.isAuthor && <Tag color=\"blue\">{t(\"author\")}</Tag>}\n </Space>\n }\n style={{ marginBottom: \"5px\" }}\n />\n <Text>\n <TextWithNewlines text={data.text} />\n </Text>\n </Card>\n );\n};\n\nexport const Comments = (props: CommentsTypeProps) => {\n const { data = [] } = props;\n const comments = data.map((c) => {\n const style = { float: c.isSender ? \"right\" : \"left\", width: \"60%\" };\n return <Comment data={c} style={style} />;\n });\n return (\n <div>\n <Space direction=\"vertical\" size=\"middle\" style={{ display: \"flex\" }}>\n {comments}\n </Space>\n </div>\n );\n};\n\nexport const CommentsTimeline = (props: CommentsTimelineProps) => {\n const { value } = props;\n const items = (value || []).map((i) => {\n if (i.type === \"action\") {\n return {\n children: `${i.event.date} - ${(i.event as EventActionType).action}`,\n };\n } else if (i.type === \"comment\") {\n return {\n color: \"gray\",\n position: (i.event as CommentDataType).isSender ? \"left\" : \"right\",\n label: i.event.date,\n children: <Comment data={i.event as CommentDataType} />,\n };\n }\n });\n return <Timeline mode=\"alternate\" items={items as TimelineItemProps[]} />;\n};\n\nexport const CommentsTimelineField = (props: WidgetProps) => {\n return (\n <Field {...props}>\n <CommentsTimeline />\n </Field>\n );\n};\n","import React, { useContext } from \"react\";\nimport { Layout, Typography } from \"antd\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\nconst { Content } = Layout;\nconst { Title } = Typography;\n\nfunction Welcome(): React.ReactElement {\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n return (\n <Content className=\"m-5 select-none\">\n <Title level={5}>{t(\"welcome\")}</Title>\n </Content>\n );\n}\n\nexport default Welcome;\n","import React, {\n useState,\n forwardRef,\n useImperativeHandle,\n useRef,\n} from \"react\";\nimport { ConnectionProvider, ContentRootProvider, FormView } from \"..\";\nimport Welcome from \"./Welcome\";\nimport TabManagerProvider from \"@/context/TabManagerContext\";\nimport ActionView from \"./ActionView\";\nimport { parseContext } from \"@gisce/ooui\";\nimport LocaleContextProvider, { tForLang } from \"@/context/LocaleContext\";\nimport { ShortcutApi } from \"@/ui/FavouriteButton\";\nimport showErrorDialog from \"@/ui/ActionErrorDialog\";\nimport { InitialViewData, ViewType } from \"@/types\";\nimport { transformPlainMany2Ones } from \"@/helpers/formHelper\";\nimport { nanoid } from \"nanoid\";\n\ntype RootViewProps = {\n children: React.ReactNode;\n globalValues?: any;\n rootContext?: any;\n lang: string;\n};\n\nexport type ActionInfo = {\n id: number;\n type: string;\n};\n\nfunction RootView(props: RootViewProps, ref: any) {\n const { children, globalValues = {}, rootContext = {}, lang } = props;\n const [activeKey, setActiveKey] = useState<string>(\"welcome\");\n\n const [tabs, setTabs] = useState<any>([\n {\n title: tForLang(\"welcome\", lang),\n key: \"welcome\",\n closable: true,\n content: <Welcome />,\n },\n ]);\n const tabViewsCloseFunctions = useRef(new Map<string, any>());\n const contentRootProvider = useRef();\n\n useImperativeHandle(ref, () => ({\n retrieveAndOpenAction,\n openShortcut,\n }));\n\n function remove(key: string) {\n if (key === activeKey) {\n const currentIndex = tabs.findIndex((tab: any) => tab.key === key);\n\n if (tabs[currentIndex - 1]) {\n setActiveKey(tabs[currentIndex - 1].key);\n }\n if (tabs[currentIndex + 1]) {\n setActiveKey(tabs[currentIndex + 1].key);\n }\n }\n\n setTabs(tabs.filter((tab: any) => tab.key !== key));\n tabViewsCloseFunctions.current.delete(key);\n }\n\n function registerViewCloseFn({\n tabKey,\n canWeClose,\n }: {\n tabKey: string;\n canWeClose: any;\n }) {\n tabViewsCloseFunctions.current.set(tabKey, canWeClose);\n }\n\n async function retrieveAndOpenAction({\n action,\n values,\n forced_values,\n initialViewType,\n res_id,\n domain = [],\n }: {\n action: string;\n values?: any;\n forced_values?: any;\n initialViewType?: ViewType;\n res_id?: number;\n domain?: any;\n }) {\n const dataForAction = await ConnectionProvider.getHandler().getActionData({\n action,\n context: rootContext,\n });\n\n if (dataForAction.type === \"ir.actions.wizard\") {\n showErrorDialog(\"Action type not supported\");\n return;\n }\n\n const [action_type, action_id_string] = action.split(\",\");\n const action_id = parseInt(action_id_string);\n\n const parsedContext = parseContext({\n context: dataForAction.context,\n values: globalValues,\n fields: {},\n });\n\n const parsedDomain = dataForAction.domain\n ? await ConnectionProvider.getHandler().evalDomain({\n domain: dataForAction.domain,\n values: globalValues,\n context: { ...rootContext, ...parsedContext },\n })\n : [];\n\n const {\n res_model: model,\n views,\n name: title,\n target,\n view_type,\n limit,\n } = dataForAction;\n\n const treeExpandable = view_type === \"tree\";\n\n const finalViews = [];\n\n for (const viewArray of views) {\n const [id, viewType] = viewArray;\n\n if (!id) {\n if (viewType === \"dashboard\") {\n finalViews.push([undefined, \"dashboard\"]);\n } else {\n const { view_id } = await ConnectionProvider.getHandler().getView({\n model,\n type: viewType,\n id,\n context: { ...rootContext, ...parsedContext },\n });\n finalViews.push([view_id, viewType]);\n }\n } else {\n finalViews.push(viewArray);\n }\n }\n\n let initialView;\n\n if (initialViewType) {\n const [id, type] = finalViews.find(\n ([_, type]) => type === initialViewType,\n );\n initialView = { id, type };\n } else {\n const [id, type] = finalViews[0];\n initialView = { id, type };\n }\n\n openAction({\n domain: [...parsedDomain, ...domain],\n context: { ...rootContext, ...parsedContext },\n model,\n views: finalViews,\n title,\n target,\n initialView,\n action_type,\n action_id,\n values,\n forced_values,\n res_id,\n treeExpandable,\n limit,\n });\n }\n\n function addNewTab({\n title,\n content,\n key,\n action,\n }: {\n title: string;\n content: any;\n key: string;\n action?: ActionInfo;\n }) {\n let newTabs = [...tabs];\n\n if (tabs.length === 1 && tabs[0].key === \"welcome\") {\n newTabs = [...tabs.filter((tab: any) => tab.key !== \"welcome\")];\n }\n\n setTabs([\n ...newTabs,\n {\n title,\n key,\n closable: true,\n content,\n action,\n },\n ]);\n\n setActiveKey(key);\n }\n\n async function openRelate({\n relateData,\n fields,\n values,\n action_id,\n action_type,\n }: {\n relateData: any;\n fields: any;\n values: any;\n action_id: number;\n action_type: string;\n }) {\n const {\n res_model: model,\n context,\n domain,\n views,\n target,\n string: title,\n limit,\n } = relateData;\n\n const [id, type] = views[0];\n const initialView = { id, type };\n\n const parsedContext = parseContext({\n context,\n values: { ...values, ...globalValues },\n fields,\n });\n\n const parsedDomain = domain\n ? await ConnectionProvider.getHandler().evalDomain({\n domain,\n values: transformPlainMany2Ones({\n fields,\n values: { ...values, ...globalValues },\n }),\n fields,\n context: { ...rootContext, ...parsedContext },\n })\n : [];\n\n openAction({\n model,\n target,\n views,\n context: { ...rootContext, ...parsedContext },\n domain: parsedDomain,\n title,\n initialView,\n action_id,\n action_type,\n limit,\n });\n }\n\n async function openShortcut(shortcut: ShortcutApi) {\n const { action_id, action_type, res_id, view_id } = shortcut;\n const action = `${action_type},${action_id}`;\n\n const dataForAction = await ConnectionProvider.getHandler().getActionData({\n action,\n context: rootContext,\n });\n const parsedContext = parseContext({\n context: dataForAction.context,\n values: globalValues,\n fields: {},\n });\n\n const parsedDomain = dataForAction.domain\n ? await ConnectionProvider.getHandler().evalDomain({\n domain: dataForAction.domain,\n values: globalValues,\n context: { ...rootContext, ...parsedContext },\n })\n : [];\n\n const {\n res_model: model,\n views,\n name: title,\n target,\n view_type,\n limit,\n } = dataForAction;\n const treeExpandable = view_type === \"tree\";\n\n const finalViews = [];\n\n for (const viewArray of views) {\n const [id, viewType] = viewArray;\n\n if (!id) {\n if (viewType === \"dashboard\") {\n finalViews.push([undefined, \"dashboard\"]);\n } else {\n const { view_id } = await ConnectionProvider.getHandler().getView({\n model,\n type: viewType,\n id,\n context: { ...rootContext, ...parsedContext },\n });\n finalViews.push([view_id, viewType]);\n }\n } else {\n finalViews.push(viewArray);\n }\n }\n\n let id, type;\n if (view_id === undefined || view_id === null) {\n const view = finalViews.find((view: any[]) => {\n return view[0] === undefined;\n });\n id = undefined;\n type = view[1];\n } else {\n [id, type] = finalViews.find((view: any[]) => {\n if (view[0] === undefined) {\n return false;\n }\n return view[0] === view_id;\n });\n }\n\n const initialView = { id, type };\n\n openAction({\n domain: parsedDomain,\n context: { ...rootContext, ...parsedContext },\n model,\n views: finalViews,\n title,\n target,\n initialView,\n action_id,\n action_type,\n res_id,\n treeExpandable,\n limit,\n });\n }\n\n async function openDefaultActionForModel({\n model,\n values,\n forced_values,\n initialViewType,\n res_id,\n domain,\n }: {\n model: string;\n values?: any;\n forced_values?: any;\n initialViewType?: ViewType;\n res_id?: number;\n domain?: any;\n }) {\n const actionString =\n await ConnectionProvider.getHandler().getActionStringForModel(model);\n await retrieveAndOpenAction({\n action: actionString,\n values,\n forced_values,\n initialViewType,\n res_id,\n domain,\n });\n }\n\n async function openAction({\n domain,\n context,\n model,\n views,\n title,\n target,\n initialView,\n action_id,\n action_type,\n res_id,\n values,\n forced_values,\n treeExpandable = false,\n limit,\n }: {\n domain: any;\n context: any;\n model: string;\n views: any[];\n title: string;\n target: string;\n initialView: InitialViewData;\n action_id: number;\n action_type: string;\n res_id?: number | boolean;\n values?: any;\n forced_values?: any;\n treeExpandable?: boolean;\n limit?: number;\n }) {\n const key = nanoid();\n\n if (target !== \"current\") {\n const formView = (await ConnectionProvider.getHandler().getView({\n model,\n type: \"form\",\n id: initialView.type === \"form\" ? initialView.id : undefined,\n context: { ...rootContext, ...context },\n })) as FormView;\n\n (contentRootProvider.current as any).openActionModal({\n domain,\n model,\n formView,\n context: { ...rootContext, ...context },\n actionData: {\n action_id,\n action_type,\n res_id,\n view_id: formView.view_id,\n },\n });\n } else {\n const formattedInitialView =\n initialView && Array.isArray(initialView.id)\n ? { ...initialView, id: initialView.id[0] }\n : initialView;\n\n addNewTab({\n title,\n action: {\n id: action_id,\n type: action_type,\n },\n content: (\n <ActionView\n action_id={action_id}\n action_type={action_type}\n tabKey={key}\n title={title}\n views={views}\n model={model}\n context={{ ...rootContext, ...context }}\n domain={domain}\n setCanWeClose={registerViewCloseFn}\n initialView={formattedInitialView}\n res_id={res_id}\n formDefaultValues={values}\n formForcedValues={forced_values}\n treeExpandable={treeExpandable}\n limit={limit}\n />\n ),\n key,\n });\n }\n }\n\n return (\n <LocaleContextProvider lang={lang}>\n <TabManagerProvider\n openShortcut={openShortcut}\n openAction={openAction}\n openRelate={openRelate}\n openDefaultActionForModel={openDefaultActionForModel}\n tabs={tabs}\n activeKey={activeKey}\n onRemoveTab={async (key: string) => {\n const canWeCloseFn = tabViewsCloseFunctions.current.get(\n key as string,\n );\n const canWeClose = await canWeCloseFn?.();\n\n if (canWeClose || activeKey === \"welcome\") {\n remove(key as string);\n }\n }}\n onChangeTab={(key: string) => {\n setActiveKey(key);\n }}\n >\n <ContentRootProvider\n ref={contentRootProvider}\n globalValues={globalValues}\n >\n {children}\n </ContentRootProvider>\n </TabManagerProvider>\n </LocaleContextProvider>\n );\n}\n\nexport default forwardRef(RootView);\n","import React from \"react\";\nimport { CloseOutlined } from \"@ant-design/icons\";\nimport { theme } from \"antd\";\nconst { useToken } = theme;\n\ntype TabProps = {\n tabKey: string;\n label: string;\n onClose: (key: string) => void;\n isActive: boolean;\n onSelected: (key: string) => void;\n};\n\nfunction Tab(props: TabProps) {\n const { label, onClose, tabKey, isActive, onSelected } = props;\n const { token } = useToken();\n const bgColor = isActive ? token.colorBgContainer : token.colorPrimaryBg;\n\n return (\n <div\n onClick={() => {\n !isActive && onSelected(tabKey);\n }}\n style={{\n cursor: \"pointer\",\n height: 40,\n paddingTop: 7,\n paddingBottom: 5,\n paddingLeft: 10,\n paddingRight: 10,\n backgroundColor: bgColor,\n display: \"inline-flex\",\n flex: 1,\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"center\",\n borderTopLeftRadius: token.borderRadius,\n borderTopRightRadius: token.borderRadius,\n marginLeft: 2,\n }}\n >\n <div\n style={{\n color: token.colorPrimaryActive,\n userSelect: \"none\",\n height: 40,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n paddingLeft: 5,\n paddingRight: 5,\n marginBottom: 2,\n fontWeight: isActive ? 500 : \"normal\",\n }}\n >\n {label}\n </div>\n <div\n style={{\n paddingLeft: 5,\n height: 40,\n\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n }}\n >\n <CloseOutlined\n style={{\n color: token.colorPrimaryActive,\n }}\n onClick={(e) => {\n e.stopPropagation();\n onClose(tabKey);\n }}\n />\n </div>\n </div>\n );\n}\n\nexport default Tab;\n","import React, { useContext, useState } from \"react\";\n\nimport {\n TabManagerContext,\n TabManagerContextType,\n} from \"@/context/TabManagerContext\";\nimport Tab from \"./tabs/Tab\";\n\nfunction TabSelector() {\n const tabManagerContext = useContext(\n TabManagerContext,\n ) as TabManagerContextType;\n const { activeKey, tabs, onRemoveTab, onChangeTab } = tabManagerContext || {};\n\n return (\n <>\n {tabs.map((tab: any) => (\n <Tab\n key={tab.key}\n tabKey={tab.key}\n label={tab.title}\n onClose={onRemoveTab}\n isActive={activeKey === tab.key}\n onSelected={onChangeTab}\n />\n ))}\n </>\n );\n}\n\nexport default TabSelector;\n","import React, { useContext } from \"react\";\n\nimport {\n TabManagerContext,\n TabManagerContextType,\n} from \"@/context/TabManagerContext\";\n\ntype Props = {\n tab: any;\n};\n\nfunction TabContent(props: Props) {\n const { tab } = props;\n\n const tabManagerContext = useContext(\n TabManagerContext,\n ) as TabManagerContextType;\n const { activeKey } = tabManagerContext || {};\n\n const hiddenStyle: any = {\n display: \"none\",\n };\n\n return (\n <div style={tab.key !== activeKey ? hiddenStyle : undefined}>\n {tab.content}\n </div>\n );\n}\n\nexport default React.memo(TabContent, () => true);\n","import React, { useContext } from \"react\";\n\nimport {\n TabManagerContext,\n TabManagerContextType,\n} from \"@/context/TabManagerContext\";\nimport TabContent from \"./TabContent\";\n\nfunction CurrentTabContent() {\n const tabManagerContext = useContext(\n TabManagerContext,\n ) as TabManagerContextType;\n const { tabs } = tabManagerContext || {};\n\n const tabsToRender =\n tabs?.map((tab) => <TabContent key={tab.key} tab={tab} />) || null;\n\n return <>{tabsToRender}</>;\n}\n\nexport default CurrentTabContent;\n","import React, { useContext, useEffect, useState } from \"react\";\nimport {\n StarOutlined,\n StarFilled,\n DownOutlined,\n TableOutlined,\n FormOutlined,\n EditOutlined,\n} from \"@ant-design/icons\";\nimport { Button, Col, Row, Spin, Tooltip, theme, Menu, Dropdown } from \"antd\";\nimport showErrorDialog from \"@/ui/ActionErrorDialog\";\nimport {\n TabManagerContext,\n TabManagerContextType,\n} from \"@/context/TabManagerContext\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport { ViewType } from \"@/types\";\nconst { useToken } = theme;\n\nexport type ShortcutApi = {\n action_id: number;\n action_type: string;\n id?: number;\n name: string;\n res_id: number | boolean;\n res_model: string;\n view_id: number;\n view_type: string;\n};\n\nexport type FavouriteOptions = {\n action_id: number;\n action_type: string;\n res_id: number | boolean;\n view_id: number;\n};\n\ntype Props = {\n onRetrieveShortcuts: () => Promise<ShortcutApi[]>;\n onCheckIsFavourite: (options: FavouriteOptions) => Promise<number | boolean>;\n onAddFavourite: (options: FavouriteOptions) => Promise<number>;\n onRemoveFavourite: (shortcut_id: number) => Promise<void>;\n};\n\nconst FavouriteButton = (props: Props) => {\n const {\n onRetrieveShortcuts,\n onCheckIsFavourite,\n onAddFavourite,\n onRemoveFavourite,\n } = props;\n\n const [isFavourite, setIsFavourite] = useState(false);\n const [dropdownVisible, setDropdownVisible] = useState(false);\n const [shortcuts, setShortcuts] = useState<ShortcutApi[]>([]);\n const [loading, setLoading] = useState(true);\n const [currentShortcutId, setCurrentShortcutId] = useState<number>();\n const { t } = (useContext(LocaleContext) as LocaleContextType) || {};\n\n const { token } = useToken();\n\n const tabManagerContext = useContext(\n TabManagerContext,\n ) as TabManagerContextType;\n const {\n openShortcut,\n tabs,\n activeKey,\n currentView,\n currentId,\n openDefaultActionForModel,\n } = tabManagerContext || {};\n\n useEffect(() => {\n getShortcuts();\n }, []);\n\n useEffect(() => {\n checkFavourite();\n }, [tabs, activeKey, currentView, currentId]);\n\n async function getShortcuts() {\n try {\n setLoading(true);\n const shortcuts = await onRetrieveShortcuts();\n setShortcuts(shortcuts);\n } catch (e) {\n showErrorDialog(e);\n } finally {\n setLoading(false);\n }\n }\n\n function handleMenuClick(event: any) {\n const { key } = event;\n const shortcut = shortcuts.find((s) => s.id === Number(key));\n if (shortcut?.action_type === \"ir.actions.wizard\") {\n return;\n }\n if (shortcut) {\n openShortcut(shortcut);\n }\n setDropdownVisible(false);\n }\n\n function handleVisibleChange(flag: boolean) {\n if (flag) {\n getShortcuts();\n }\n setDropdownVisible(flag);\n }\n\n async function checkFavourite() {\n if (!currentView) {\n return;\n }\n\n const currentTab = tabs.find((t) => t.key === activeKey);\n const { id: action_id, type: action_type } = currentTab?.action || {};\n\n if (!action_id || !action_type) {\n setIsFavourite(false);\n return;\n }\n\n const view_id = currentView.view_id!;\n let res_id: boolean | number = false;\n\n if (currentView.type === \"form\") {\n res_id = currentId ? (currentId as number) : false;\n }\n const result = await onCheckIsFavourite({\n action_id,\n action_type,\n view_id,\n res_id,\n });\n\n if (result !== false) {\n setCurrentShortcutId(result as number);\n }\n\n setIsFavourite(result !== false);\n }\n\n async function editFavourites() {\n setDropdownVisible(false);\n openDefaultActionForModel?.({ model: \"ir.ui.view_sc\" });\n }\n\n const menu = (\n <Menu onClick={handleMenuClick}>\n <div style={{ width: 300, padding: 5, display: \"flex\" }}>\n <div style={{ paddingLeft: 15, color: \"#ccc\" }}>\n {t?.(\"favorites\").toUpperCase()}\n </div>\n <div style={{ flexGrow: 1, paddingLeft: 10 }}>\n <Tooltip title={t?.(\"edit_favorites\")}>\n <EditOutlined\n style={{ color: token.colorPrimary, cursor: \"pointer\" }}\n onClick={editFavourites}\n />\n </Tooltip>\n </div>\n </div>\n <Menu.Divider />\n {loading ? (\n <Spin style={{ padding: \"1rem\" }} />\n ) : shortcuts.length > 0 ? (\n <>\n {shortcuts.map((shortcut) => (\n <Menu.Item key={shortcut.id}>\n <FavouriteItem\n title={shortcut.name}\n type={shortcut.view_type as ViewType}\n />\n </Menu.Item>\n ))}\n </>\n ) : (\n <div style={{ width: 300, padding: 5, paddingLeft: 15 }}>\n {t?.(\"no_favorites\")}\n </div>\n )}\n </Menu>\n );\n\n function FavouriteItem({ title, type }: { title: string; type: ViewType }) {\n const icon = type === \"tree\" ? <TableOutlined /> : <FormOutlined />;\n return (\n <Row wrap={false}>\n <Col flex=\"none\" style={{ paddingRight: 20 }}>\n {icon}\n </Col>\n <Col flex=\"auto\">{title}</Col>\n </Row>\n );\n }\n\n async function toggleFavourite() {\n if (isFavourite && currentShortcutId) {\n await onRemoveFavourite(currentShortcutId);\n } else {\n if (!currentView) {\n return;\n }\n\n const currentTab = tabs.find((t) => t.key === activeKey);\n const { id: action_id, type: action_type } = currentTab?.action || {};\n const view_id = currentView.view_id!;\n let res_id: boolean | number = false;\n\n if (!action_id || !action_type) {\n setIsFavourite(false);\n return;\n }\n\n if (currentView.type === \"form\") {\n res_id = currentId ? (currentId as number) : false;\n }\n\n await onAddFavourite({\n action_id,\n action_type,\n view_id,\n res_id,\n });\n }\n\n await getShortcuts();\n setIsFavourite(!isFavourite);\n }\n\n return (\n <>\n <Button\n type={isFavourite ? \"primary\" : \"default\"}\n icon={\n isFavourite ? (\n <StarFilled style={{ color: \"white\" }} />\n ) : (\n <StarOutlined />\n )\n }\n style={{\n width: 50,\n borderTopRightRadius: 0,\n borderBottomRightRadius: 0,\n }}\n onClick={toggleFavourite}\n ></Button>\n <Dropdown\n overlay={menu}\n onVisibleChange={handleVisibleChange}\n open={dropdownVisible}\n >\n <Button\n style={{\n width: 25,\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0,\n }}\n icon={<DownOutlined style={{ fontSize: \"0.5em\" }} />}\n onClick={(e) => e.preventDefault()}\n ></Button>\n </Dropdown>\n </>\n );\n};\n\nexport default FavouriteButton;\n"],"names":["Text","Title","Typography","useToken","theme","alignClass","Label","props","ooui","align","responsiveBehaviour","label","tooltip","fieldForLabel","labelSize","labelType","labelText","labelAlgin","token","TextType","jsxs","jsx","Tooltip","QuestionCircleOutlined","Interweave","ca_ES","en_US","es_ES","localeStrings","LocaleContext","React","LocaleContextProvider","children","lang","t","key","tForLang","_a","Field","layout","valuePropName","showLabel","alignLabel","required","type","validator","id","useContext","rules","formItem","Form","labelWidget","LabelOoui","Row","Col","Fragment","confirm","Modal","showDialog","onOk","confirmMessage","ExclamationCircleOutlined","FormContext","FormProvider","activeId","activeModel","setFieldValue","getFieldValue","executeButtonAction","getContext","getValues","getPlainValues","domain","submitForm","fetchValues","formHasChanges","elementHasLostFocus","getFields","iconMapping","iconMapper","getIconForKey","toCamelCase","word","w","IconCamelCase","antKey","AntIcons","tablerKey","TablerIcons","TablerIcon","Icon","Button","activated","buttonType","icon","context","readOnly","formContext","isRunning","setIsRunning","useState","onClick_confirm","onClick","showConfirmDialog","getButtonIcon","LoadingOutlined","AntButton","ButtonGroup","defaultButton","secondaryButtons","caption","primary","danger","FieldOoui","Dropdown","DownOutlined","Items","items","button","Menu","MODAL_WIDTH_CONSTANT","getWindowDimensions","width","height","useWindowDimensions","windowDimensions","setWindowDimensions","useEffect","handleResize","_ConnectionProvider","handler","__publicField","ConnectionProvider","parseError","errorResponse","message","title","splitted","args","error","warning","err","WarningOutlined","TranslationModal","visible","onCloseModal","model","field","onSubmitSucceed","modalWidth","langs","setLangs","isLoading","setIsLoading","submitLoading","setSubmitLoading","valuesForLangs","setValuesForLangs","originalValuesForLangs","useRef","fetchData","getLangs","getValuesForLangs","showErrorDialog","item","retrievedValuesForLang","retrievedValue","getInputsForLangs","i","TextArea","event","onSubmit","langCode","content","Spin","Divider","Space","CloseOutlined","CheckOutlined","ButtonWithTooltip","restProps","info","Char","isSearchField","isPassword","translatable","requiredStyle","input","Input","TranslatableChar","value","onChange","translationModalVisible","setTranslationModalVisible","showInfo","TranslationOutlined","defaultAlgorithm","defaultSeed","mapToken","Option","Select","Selection","SelectionInput","selectionValues","values","options","entry","RequiredSelect","option","styled","Boolean","BooleanInput","RequiredCheckbox","AntCheckbox","getFilesize","base64string","inKbs","getMimeType","mimeInfo","fileTypeFromBuffer","toBase64","file","resolve","reject","reader","e","openBase64InNewTab","data","mimeType","byteCharacters","byteNumbers","byteArray","fileURL","Image","ImageInput","inputFile","triggerChange","changedValue","downloadFile","fileType","linkSource","downloadLink","onChangeFile","b64","clearFile","FolderOpenOutlined","DownloadOutlined","ClearOutlined","FiberGrid","FiberGridInput","GridUi","newValue","getTree","treeView","xml","fields","tree","TreeOoui","canRenderValue","getTableColumns","components","column","component","render","a","b","aItem","bItem","_b","getTableItems","treeOoui","results","parsedItem","widget","Reference","Many2one","getColorMap","colorsValue","getItemsAttributes","getStatusMap","attributes","attribute","map","sortResults","resultsToSort","sorter","desc","order","sortFn","hasActualValues","obj","readObjectValues","formView","currentView","temporalItems","idsToFetch","fieldsToRetrieve","evaluatedColorsForTree","colors","filteredValues","result","resultFormValues","fetchedItemValues","itemValues","itemWithFetchedValues","getNextPendingId","negativeIds","convertToPlain2ManyValues","Timeline","relation","oouiViews","setError","views","setViews","useDeepCompareEffect","getViewData","Alert","TimelineInput","showFormModal","setShowFormModal","modalItem","setModalItem","summaryField","titleField","itemsToShow","itemsWithValues","AntTimeline","index","searchItem","FormModal","Indicator","IndicatorInput","formattedValue","Statistic","Card","boolValue","processValues","getTouchedValues","source","target","differences","sourceValue","targetValue","numericId","targetNumericId","checkFieldsType","changedFields","formOoui","types","fieldType","mergeFieldsDomain","fieldsDomain","output","getValuesForDomain","getOnChangePayload","onChangeFieldActionArgs","parentValues","payload","arg","splittedArg","parentKey","mergeSearchFields","searchFields","mergedSearchFields","sf","onlyUnique","self","transformPlainMany2Ones","reformattedValues","colorFromString","text","hash","hexColour","stringFormat","match","Tag","TagInput","colorValue","color","CustomTag","style","isPresetStatusColor","isPresetColor","AntdTag","Tags","TagsInput","setOptions","isLoadingOptions","setIsLoadingOptions","fetchOptions","params","evaluatedDomain","onChangeSelected","ids","newItems","currentIds","tagRender","closable","onClose","onPreventMouseDown","getWidgetType","Tree","Notebook","Group","Integer","Float","ProgressBar","Date","DateTime","Time","One2many","Separator","Binary","Url","Email","FloatTime","MultiCheckbox","Markdown","Radio","Switch","Steps","CodeEditor","CommentsTimelineField","createReactWidget","widgetClass","getSpanStyleForItem","fillRowWithEmptiesToFit","row","mustFillWithEmpties","numberOfColumns","rowWithEmptiesToFit","totalColSpan","isLastItemAndMustFit","columnIndex","gapsToAdjust","gapsToFill","expandWidgetsIfNeeded","getSingleRowTemplateColumns","gridOptions","Container","columnsToAdd","getTemplateColumns","columns","fieldInRows","odd","even","templateColumns","getMaxColspanForRows","rows","prev","current","container","maxColspanForRows","firstRow","rowWithoutInvisibleFields","rowWithExpandedItems","onCancel","FormModalContext","FormModalProvider","setTitle","convertBooleanParamIfNeeded","getParamsForFields","widgetContainer","removeUndefinedFields","groupedDateTime","groupDateTimeValuesIfNeeded","groupedValues","ungroupDateValuesIfNeeded","getParamForField","acc","curVal","filteredKey","operator","valueEntry","getDatetimeDateFields","removeDateTimeSingleFields","newValues","datePair","baseKey","timeKey","timePair","from","to","timeValueFrom","timeValueTo","dateFields","getUniqueFieldsForParams","uniqueFields","param","mergeParams","searchParams","domainParams","finalParams","uniqueParams","element","DEFAULT_SEARCH_LIMIT","useSearch","opts","setSearchTreeNameSearch","setSelectedRowItems","setSearchParams","setSearchVisible","setTreeIsLoading","nameSearch","searchNameGetDoneRef","setActionViewTotalItems","setSorter","setCurrentItemIndex","setResultsActionView","resultsActionView","currentId","limit","setLimit","setSearchValues","tableRefreshing","setTableRefreshing","searchFilterLoading","setSearchFilterLoading","searchError","setSearchError","page","setPage","offset","setOffset","totalItems","setTotalItems","resultsInternal","setResultsInternal","colorsForResults","setColorsForResults","statusForResults","setStatusForResults","internalLimit","originalResults","setResults","useCallback","getResults","searchByNameSearch","searchResults","resultsIds","status","attrs","resultsWithData","resultsData","newResultIds","resultsSorted","newOffset","mergedParams","attrsEvaluated","newCurrentItemIndex","totalItemsValue","fetchResults","changeSort","newSorter","sortedResults","submit","searchValues","newLimit","requestPageChange","clear","fetchChildrenForRecord","record","child_id","getAllIds","ActionViewContext","ActionViewProvider","titleProps","setCurrentView","availableViews","formRef","searchTreeRef","onNewClicked","setCurrentId","currentItemIndex","currentModel","selectedRowItems","searchTreeNameSearch","goToResourceId","limitProps","formIsSaving","setFormIsSaving","setFormHasChanges","removingItem","setRemovingItem","formIsLoading","setFormIsLoading","treeIsLoading","attachments","setAttachments","duplicatingItem","setDuplicatingItem","searchVisible","graphIsLoading","setGraphIsLoading","previousView","setPreviousView","view","callOnFormSave","TabManagerContext","TabManagerProvider","openAction","openRelate","openDefaultActionForModel","openShortcut","activeKey","onChangeTab","onRemoveTab","tabs","ContentRootContext","callRefreshValues","fns","ContentRootProvider","ref","globalValues","reportInProgressInterval","waitingForReport","reportGenerating","setReportGenerating","tabManagerContext","onRefreshParentValues","useImperativeHandle","openActionModal","actionModalVisible","setActionModalVisible","actionModalOptions","setActionModalOptions","generateReport","reportData","reportContext","datas","report_name","idsToExecute","reportContextParsed","parseContext","newReportId","evaluateReportStatus","reportState","processAction","actionData","onRefreshParentValuesFn","runAction","_actionData","responseContext","mergedContext","parsedDomain","initialView","getViewsAndInitialView","openNewActionModal","onFormModalSucceed","view_mode","view_id","retriedViewData","viewData","viewTypes","viewType","retrievedViewId","_","ContentRootProvider$1","forwardRef","ErrorAlert","className","messageContent","messageType","WIDTH_BREAKPOINT","propsOnCancel","propsOnSubmitSucceed","showFooter","getDataFromAction","onFieldsChange","propsOnSubmitError","mustClearAfterSave","submitMode","valuesProps","formViewProps","postSaveAction","insideButtonModal","parentContext","actionDomain","rootForm","defaultValues","forcedValues","parentWidth","isSubmitting","setIsSubmitting","setFormOoui","antForm","AntForm","arch","setArch","setFields","formModalContext","containerWidth","setContainerWidth","defaultGetCalled","setDefaultGetCalled","createdId","originalFormValues","lastAssignedValues","warningIsShown","formSubmitting","x2manyPendingLink","parentId","getParentPlainValues","actionViewContext","contentRootContext","cancelUnsavedChanges","checkFieldsChanges","formValues","onSubmitError","getCurrentId","getCurrentValues","getAdditionalValues","val","getFormValues","getActiveIdsContext","getDefaultValues","currentValues","assignNewValuesToForm","checkIfFormHasErrors","getFormView","_fields","_arch","hasDefaultGetCalled","fetchValuesFromApi","parseForm","showUnsavedChangesDialog","action","reset","isDefaultGet","mergedValues","valuesProcessed","fieldsToUpdate","fieldName","fieldValue","submitApi","callOnSubmitSucceed","touchedValues","newId","submitValues","submitSucceed","formErrorsDialog","operationInProgress","FormOoui","evaluateChanges","debouncedCheckFieldsChanges","debounce","changedField","processFieldOnChange","onChangeFieldAction","response","processedValues","proccessedFields","runObjectButton","runWorkflowButton","runActionButton","closeParent","updateOperationInProgress","mustBlockButtons","additionalContext","updatedContext","footer","Measure","contentRect","measureRef","Form$1","buttonModal","isMenuAction","rest","formTitle","setFormTitle","isFavourite","setIsFavourite","currentShortcutId","setCurrentShortcutId","action_id","res_id","action_type","checkFavourite","toggleFavourite","header","StarFilled","StarOutlined","contentWidth","DateRangePicker","DatePicker","TimePicker","numberOfSelectsToHide","picker","pickerSelectedTimes","AntTimePicker","DateTimeRangePicker","TimeRangePicker","decimalDigits","InputNumber","newNumber","PairFields","Widget","IntegerOoui","getWidget","suffix","MultiSelection","MultiSelectionInput","optionValueKeyPair","optionKey","CustomSelect","handleChange","changedValues","keysForChangedValues","SearchField","SearchFieldTypes","SelectionOoui","SearchBottomBar","onAdvancedFilterToggle","advancedFilter","onClear","isSearching","UpOutlined","SearchOutlined","SearchParams","onLimitChange","limitOoui","offsetOoui","SearchFilter","setSearchFilterHeight","showLimitOptions","simpleSearchFields","setSimpleSearchFields","advancedSearchFields","setAdvancedSearchFields","setAdvancedFilter","sfo","form","getRowsAndCols","SearchFilterOoui","onFinish","newParams","getTextWidth","font","metrics","calculateColumnsWidth","maxWidthPerCell","columnsWithWidth","indexColumn","columnWidth","cellValue","cellWidth","tableWidth","SelectAllRecordsRow","numberOfVisibleSelectedRows","totalRecords","numberOfTotalRows","onSelectAllRecords","numberOfRealSelectedRows","loading","setLoading","translations","handleClick","selectRowsComponent","Link","allRowsAreSelected","parseStringToFloat","parseFloatToString","num","finalString","hours","mins","hoursString","minsStrings","ProgressBarInput","textValue","StyledProgress","Progress","Many2oneSuffixModal","onItemClicked","Many2oneSuffix","printModalVisible","setPrintModalVisible","setFormView","targetValues","setTargetValues","toolbar","parseContextFields","parseDomainFields","_c","_d","_e","menu","relateItems","handleMenuClick","ThunderboltOutlined","PrinterOutlined","EnterOutlined","relateItemClicked","onActionItemClicked","onPrintItemClicked","RightCircleOutlined","Many2oneTree","m2oField","ReferenceTree","name","setName","intId","fetchName","nameResponse","selectionDescription","dayjs","advancedFormat","customParseFormat","isoWeek","timezone","duration","relativeTime","weekday","localeData","Avatar","backgroundColor","AntdAvatar","DatePickerConfig","showTime","DatePickerInput","mode","onValueStringChange","momentDate","dateValue","AntDatePicker","BooleanComponent","useMemo","Checkbox","Many2OneComponent","TextComponent","DateComponent","DateTimeComponent","One2ManyComponent","length","ProgressBarComponent","FloatTimeComponent","NumberComponent","ImageComponent","TagComponent","SelectionComponent","selectionKey","ReferenceComponent","AvatarComponent","TagsComponent","setValues","loadValues","optionsRead","v","tags","COLUMN_COMPONENTS","memo","total","onRequestPageChange","onRowClicked","showPagination","selectedRowKeys","onRowSelectionChange","scrollY","onChangeSort","onFetchChildrenForRecord","childField","rootTree","readonly","setItems","errorInParseColors","setTreeOoui","summary","pagination","AntPagination","sums","sumFields","it","sumItems","sumField","dataTable","adjustedHeight","ErrorBoundary","GisceTable","Badge","PlusSquareOutlined","MinusSquareOutlined","SearchTree","treeViewProps","treeScrollY","onChangeSelectedRowKeys","initialFetchDone","setInitialFetchDone","setCurrentModel","setTreeView","initialError","setInitialError","searchFilterHeight","expandableClickActionData","changeSelectedRowKeys","newSelectedRowKeys","fetchModelData","_formView","_treeView","onSearchTreeLimitChange","treeButOpen","onRowClickedHandler","selectAllRecords","allIds","calculatedTableHeight","SearchTree$1","SearchModal","onCloseModalProps","onSelectValues","showCreateModal","setShowCreateModal","modalHeight","setSelectedRowKeys","FileAddOutlined","Many2oneInput","widgetDomain","showSearchModal","setShowSearchModal","searching","setSearching","searchText","setSearchText","searchButtonTappedRef","inputText","setInputText","inputTextRef","transformedDomain","searchDomain","setSearchDomain","fetchNameAndUpdate","onElementLostFocus","tryFetchFirstResultOrShowSearch","parseDomain","resultIds","transformDomainForChildWidget","onKeyDown","RequiredInput","One2manyContext","One2manyProvider","itemIndex","setItemIndex","manualTriggerChange","setManualTriggerChange","getValueForOperator","graphProcessor","fontGrowFactor","minFontSize","GraphIndicator","colorCondition","totalDomain","showPercent","iconProps","manualIds","setValue","percent","setPercent","totalValue","setTotalValue","setHeight","setWidth","setColor","setIcon","fetchValue","isTotal","fetchTotalValue","r","totalRetrievedValue","conditionEval","iconEval","PercentageIndicator","CommonIndicator","fontSize","localeValue","finalValue","tw","IconElement","twoLinesHeight","percentValue","formatter","graphType","object","axisFormatter","stringIsValidNumeric","isNumber","isValidDateString","dateType","getDateType","dateFormats","DefaultGraphOptions","variable","dateString","format","processGraphData","getFieldsToRetrieve","graphFieldUtils","useGraphData","uninformedString","setProcessedValues","evaluatedEntries","setEvaluatedEntries","setType","parseGraph","retrieveData","_processedValues","getFieldsForModel","fieldsDefinition","Line","Column","Pie","GraphChart","isGroup","isStack","Chart","getGraphProps","graphProps","GraphDefaults","GraphComp","graphOoui","setGraphOoui","graphXml","setGraphXml","graph","indicator","indicatorFieldopts","Graph","One2manyTopBar","titleString","onCreateItem","onToggleViewMode","onDelete","onPreviousItem","onNextItem","isMany2Many","onSearchItem","showCreateButton","showToggleButton","separator","deleteButton","ApiOutlined","DeleteOutlined","itemToShow","itemBrowser","LeftOutlined","RightOutlined","AlignLeftOutlined","ViewObjects","filterDuplicateItems","o","One2manyInput","continuousEntryMode","setContinuousEntryMode","originalSortItemIds","isMany2many","previousCurrentView","fetchDataIfNeeded","fetchOriginalItemsFromApi","toggleViewMode","keys","nextView","showFormChangesDialogIfNeeded","previousItem","nextItem","reloadOriginalValuesForFormItem","updatedFormObject","updatedTreeObject","updatedItems","callback","showRemoveConfirm","showUnlinkItemDialog","removeCurrentItem","removeSelectedItems","showRemoveItemDialog","createItem","inv_field","itemsToRemove","idsToRemove","onFormModalSubmitSucceed","nextId","onTreeRowClicked","itemId","itemsToLoadFrom","onSearchModalSelectValue","filteredIds","getTitle","ViewType","currentItemId","resultsToShow","m","FloatTimeInput","FieldSet","TabPane","Tabs","getPageIcon","TranslatableText","useExport","locale","selectedRegistersToExport","exportModelFields","onExport","exportDomain","addIdToRelationFields","onGetFields","convertToExportFields","onGetFieldChilds","optsForField","getFieldDefinition","getChildKey","onGetPredefinedExports","predefinedExports","listPredefinedExports","keysWithChilds","retrieveKeyFieldsForPredefinedExports","pExport","childKey","onSavePredefinedExport","fieldsForExport","getModelFields","fieldsForExportLine","exportId","onRemovePredefinedExport","fieldsForModel","exportFields","valuesForField","relationField","isRelationField","compoundId","fieldDefinition","getParentKey","parentTitle","pExports","exportLinesIds","exp","exportLinesObjects","getKeysWithoutChildsInFields","splitAndSortKeys","exists","allPredefinedExportKeys","keysWithoutChildsInFields","keysMap","subKeys","subKey","currentKey","aLevels","bLevels","ExportModal","totalRegisters","visibleRegisters","ExportModalFmg","TimeInput","time","timestring","ReferenceInput","splittedValue","many2oneValue","setMany2oneValue","selectionValue","setSelectionValue","m2oValue","referenceValue","Many2oneOoui","BinaryInput","filenameField","filesize","fileName","openFile","EyeOutlined","iconsForViewTypes","TableOutlined","FormOutlined","AreaChartOutlined","CalendarOutlined","getIconForView","ChangeViewButton","onChangeView","disabled","getMenu","menuItems","idx","tryNavigate","selectedView","Search","DropdownButton","onItemClick","searchable","searchValue","setSearchValue","mustShowSearch","onSearch","sanitizedValue","filteredItems","itemClicked","ActionButton","NewButton","onNewClickedProps","showLogInfo","translateFn","logInfo","create_date","create_uid","write_date","write_uid","AttachmentsButtonWrapper","numberOfAttachments","popoverVisible","setPopoverVisible","LinkOutlined","Popover","Content","onAddNewAttachment","onopenAttachmentLink","onOpenAttachmentDetail","onListAllAttachments","attachment","AttachmentsButton","onViewAttachmentDetails","preloading","setPreloading","preloadedAttachments","setPreloadedAttachments","downloading","setDownloading","preloadAttachments","openAttachmentLink","retrievedAttachment","openAttachmentDetail","FormActionBar","onFormSave","tryRefresh","refreshChangesDialog","onNextClick","onPreviousClick","tryDelete","remove","filteredResults","newIndex","duplicate","mustDisableButtons","SaveOutlined","CopyOutlined","InfoCircleOutlined","ReloadOutlined","saveDocument","report","relate","getAttachmentActionPayload","res_model","LinkInput","valueValidator","linkPrefix","editMode","setEditMode","showInput","setShowInput","EditOutlined","isURL","isEmail","GoToResourceModal","onIdSubmitted","inputRef","handleSubmit","open","ButtonWithBadge","badgeNumber","GraphActionBar","refreshGraph","FilterOutlined","newView","TitleHeader","getSummary","reg","GraphActionView","graphRef","applyLimit","setApplyLimit","FormActionView","SearchBar","mustShowClearSuffix","setMustShowClearSuffix","CloseCircleFilled","ConfigContext","ErpFeatureKeys","useConfigContext","useFeatureIsEnabled","featureKey","erpFeatures","TreeActionBar","treeExpandable","advancedExportEnabled","exportModalVisible","setExportModalVisible","hasNameSearch","searchString","idsToExport","TreeActionView","DashboardActionContext","DashboardActionProvider","moveItemsEnabled","setMoveItemsEnabled","dashboardRef","DashboardActionBar","BorderOuterOutlined","SettingOutlined","DashboardActionView","dashboardData","Dashboard","resolveViewInfoPromises","viewsToRetrieve","ActionView","setCanWeClose","tabKey","formDefaultValues","formForcedValues","setCurrentViewInternal","setAvailableViews","res_id_parsed","setCurrentIdInternal","gtResourceModalVisible","setGtResourceModalVisible","searchingForResourceId","setSearchingForResourceId","setCurrentViewTabContext","setCurrentIdTabContext","useHotkeys","handleGoToRecordShortcut","canWeClose","viewDataRetrieved","getViewsPromises","viewArray","viewsRetrieved","viewInfo","configAction","currentViewToAssign","initialViewWithData","resource","viewForm","ActionView$1","fetchAction","actionId","rootContext","actionType","dataForAction","parsedContext","view_type","finalViews","nanoid","ResponsiveReactGridLayout","WidthProvider","Responsive","DashboardGrid","onPositionItemsChanged","child","parms","DashboardGridItem","ExportOutlined","DashboardTree","limitRef","paramsRef","totalItemsResult","fetchActionData","DashboardForm","firstId","setFirstId","itemsField","dashboardItems","setDashboardItems","setActionBarLoading","itemsFields","boardFields","openConfigDashboard","fetchView","originalItems","fetchDashboardItems","itemsWithActions","getItemsWithActions","dashboardItem","itemPositions","itemPosition","remotePosition","itemsToUpdateWithUpdatedPos","diff","diffItem","valueToUpdate","position","parmsParsed","childContent","formattedInitialView","Dashboard$1","MultiCheckboxInput","checkAll","uncheckAll","MarkdownInput","ReactMarkdown","remarkGfm","direction","RadioAnt","SwitchInput","AntdSwitch","StepsInput","errorField","AntdSteps","Editor","editor","Meta","Gravatar","email","size","gravatarUrl","md5","TextWithNewlines","textParts","part","Comment","CommentsTimeline","Layout","Welcome","RootView","setActiveKey","setTabs","tabViewsCloseFunctions","contentRootProvider","retrieveAndOpenAction","currentIndex","tab","registerViewCloseFn","forced_values","initialViewType","action_id_string","addNewTab","newTabs","relateData","shortcut","actionString","canWeCloseFn","RootView$1","Tab","isActive","onSelected","bgColor","TabSelector","TabContent","hiddenStyle","TabContent$1","CurrentTabContent","tabsToRender","FavouriteButton","onRetrieveShortcuts","onCheckIsFavourite","onAddFavourite","onRemoveFavourite","dropdownVisible","setDropdownVisible","shortcuts","setShortcuts","getShortcuts","s","handleVisibleChange","flag","currentTab","editFavourites","FavouriteItem"],"mappings":"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"}
|