@gisce/react-ooui 1.5.13 → 1.5.14

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.
@@ -1 +1 @@
1
- {"version":3,"file":"react-ooui.umd.js","sources":["../src/widgets/base/Label.tsx","../src/context/LocaleContext.tsx","../src/locales/ca_ES.tsx","../src/locales/en_US.tsx","../src/locales/es_ES.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/common/SelectAllRecordsRow.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","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","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: \"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, { 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 } 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?: (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((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 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 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 styled from \"styled-components\";\nimport { useContext, useState } from \"react\";\nimport React 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","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 {CustomTag, TagInput} from \"../custom/Tag\";\nimport { DatePickerConfig } from \"@/common/DatePicker\";\nimport { SelectAllRecordsRow } from \"@/common/SelectAllRecordsRow\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport {colorFromString} from \"@/helpers/formHelper\";\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 TagsComponent = (value:any, key: string, ooui: any, context: any): React.ReactElement => {\n const [ values, setValues ] = useState<Array<string>>([]);\n const { relation, field } = ooui;\n useEffect(() => {\n const loadValues = async () => {\n try {\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(optionsRead.map((i:any) => i.name));\n } catch (error) {\n console.log(\"Error loading data\", error);\n }\n }\n if (value) {\n loadValues();\n }\n }, []);\n const tags = values.map((v) => {\n const color = colorFromString(v);\n return (\n <CustomTag color={color}>{v}</CustomTag>\n );\n })\n return (\n <div style={{maxWidth: '300px', whiteSpace: 'break-spaces'}}>\n {tags}\n </div>\n )\n\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 tags: TagsComponent,\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 const numberOfVisibleSelectedRows = items?.filter(\n (entry) =>\n rowSelection?.selectedRowKeys &&\n rowSelection?.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 <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 {onSelectAllRecords && (\n <Col span={8} className=\"text-center\">\n <SelectAllRecordsRow\n numberOfVisibleSelectedRows={numberOfVisibleSelectedRows}\n numberOfRealSelectedRows={\n rowSelection?.selectedRowKeys?.length || 0\n }\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\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 return treeOoui.current === null ||\n !dataTable ||\n dataTable.columns?.length === 0 ? (\n <Spin style={{ padding: \"2rem\" }} />\n ) : (\n <div>\n {pagination()}\n {loading && <Spin className=\"pb-4\" />}\n <GisceTable\n height={adjustedHeight!}\n columns={dataTable.columns}\n dataSource={items}\n loading={false}\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 />\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().delete({\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) =>\n 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, { useState } 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\nfunction DropdownButton(props: Props) {\n const {\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 onSearch = (value?: string) => {\n if (!value) {\n setSearchValue(undefined);\n return;\n }\n\n const sanitizedValue = value.trim();\n\n if (sanitizedValue.length === 0) {\n setSearchValue(undefined);\n return;\n }\n\n setSearchValue(sanitizedValue);\n };\n\n function getMenu() {\n let itemsData = [];\n if (searchValue) {\n itemsData = items.filter((item) => {\n return item.name.toLowerCase().includes(searchValue.toLowerCase());\n });\n } else {\n itemsData = items;\n }\n\n const menuItems = itemsData.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 const mustShowSearch =\n searchable === true || (searchable === \"auto\" && items.length > 3);\n\n return (\n <Menu onClick={handleMenuClick}>\n <div>\n {mustShowSearch && (\n <Search\n onChange={(e: any) => onSearch(e.target.value)}\n onSearch={onSearch}\n allowClear\n style={{ padding: 5 }}\n />\n )}\n </div>\n <div style={{maxHeight: 300, overflowY: 'auto'}}>\n <Menu.ItemGroup title={tooltip}>{menuItems}</Menu.ItemGroup>\n </div>\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().delete({\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={{ 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, Input, Modal, Row, Space, Checkbox } 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, {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().delete({\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\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(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\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: 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 />\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\n style={{\n height: ooui?.height ? ooui.height + \"px\" : \"100%\",\n overflow: \"auto\",\n }}\n >\n <ReactMarkdown className=\"markdown-typography\">{value}</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}>\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","localeStrings","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","searchIdHelp","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","LocaleContext","React","createContext","LocaleContextProvider","children","lang","t","key","tForLang","Field","layout","valuePropName","showLabel","alignLabel","required","type","validator","id","useContext","rules","message","formItem","Form","tooltipInline","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","iconComponent","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","CustomSelect","RequiredSelect","option","toLowerCase","indexOf","styled","Boolean","BooleanInput","CustomCheckbox","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","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","gridStyle","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","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","h","c","d","l","$","y","M","m","v","g","D","p","S","O","f","T","Avatar","toString","slice","toUpperCase","join","AntdAvatar","dayjs","extend","weekday","localeData","DatePickerConfig","placeholder","dateDisplayFormat","dateInternalFormat","showTime","DatePickerInput","mode","onValueStringChange","momentDate","format","dateValue","AntDatePicker","div","SelectAllRecordsRow","numberOfVisibleSelectedRows","totalRecords","numberOfTotalRows","onSelectAllRecords","numberOfRealSelectedRows","translations","handleClick","selectRowsComponent","Link","fontWeight","allRowsAreSelected","booleanComponentFn","justifyContent","alignContent","Checkbox","many2OneComponentFn","textComponentFn","dateComponentFn","dateTimeComponentFn","one2ManyComponentFn","progressBarComponentFn","floatTimeComponent","numberComponent","textAlign","imageComponent","TagComponent","TagsComponent","setValues","optionsRead","tags","SelectionComponent","referenceComponent","AvatarFn","total","onRequestPageChange","onRowClicked","showPagination","rowSelection","scrollY","onChangeSort","onFetchChildrenForRecord","childField","rootTree","readonly","setItems","setColumns","errorInParseColors","many2one","one2many","many2many","image","reference","avatar","pagination","isExpandable","selectedRowKeys","Pagination","getSums","sumFields","it","sum","sumItems","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","CustomInput","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","Search","DropdownButton","onItemClick","searchable","searchValue","setSearchValue","onSearch","sanitizedValue","trim","itemsData","mustShowSearch","maxHeight","overflowY","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","filteredResults","newIndex","mustDisableButtons","SaveOutlined","CopyOutlined","InfoCircleOutlined","ReloadOutlined","saveDocument","getAttachmentActionPayload","initialViewType","selection_associated_object","forced_values","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","mustShowClearSuffix","setMustShowClearSuffix","CloseCircleFilled","ConfigContext","previewFeatures","TreeActionBar","treeExpandable","exportModalVisible","setExportModalVisible","hasNameSearch","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","ExportOutlined","DashboardTree","limitRef","paramsRef","searchForTree","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","parmsParsed","childContent","formattedInitialView","MultiCheckboxInput","checkAll","uncheckAll","MarkdownInput","ReactMarkdown","direction","RadioAnt","SwitchInput","AntdSwitch","StepsInput","errorField","AntdSteps","onMount","editor","onDidBlurEditorWidget","Editor","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.umd.js","sources":["../src/widgets/base/Label.tsx","../src/context/LocaleContext.tsx","../src/locales/ca_ES.tsx","../src/locales/en_US.tsx","../src/locales/es_ES.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/common/SelectAllRecordsRow.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","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","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: \"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, { 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 } 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?: (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((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 (!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 { 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 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 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 styled from \"styled-components\";\nimport { useContext, useState } from \"react\";\nimport React 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","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 {CustomTag, TagInput} from \"../custom/Tag\";\nimport { DatePickerConfig } from \"@/common/DatePicker\";\nimport { SelectAllRecordsRow } from \"@/common/SelectAllRecordsRow\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport {colorFromString} from \"@/helpers/formHelper\";\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 TagsComponent = (value:any, key: string, ooui: any, context: any): React.ReactElement => {\n const [ values, setValues ] = useState<Array<string>>([]);\n const { relation, field } = ooui;\n useEffect(() => {\n const loadValues = async () => {\n try {\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(optionsRead.map((i:any) => i.name));\n } catch (error) {\n console.log(\"Error loading data\", error);\n }\n }\n if (value) {\n loadValues();\n }\n }, []);\n const tags = values.map((v) => {\n const color = colorFromString(v);\n return (\n <CustomTag color={color}>{v}</CustomTag>\n );\n })\n return (\n <div style={{maxWidth: '300px', whiteSpace: 'break-spaces'}}>\n {tags}\n </div>\n )\n\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 tags: TagsComponent,\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 const numberOfVisibleSelectedRows = items?.filter(\n (entry) =>\n rowSelection?.selectedRowKeys &&\n rowSelection?.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 <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 {onSelectAllRecords && (\n <Col span={8} className=\"text-center\">\n <SelectAllRecordsRow\n numberOfVisibleSelectedRows={numberOfVisibleSelectedRows}\n numberOfRealSelectedRows={\n rowSelection?.selectedRowKeys?.length || 0\n }\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\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 return treeOoui.current === null ||\n !dataTable ||\n dataTable.columns?.length === 0 ? (\n <Spin style={{ padding: \"2rem\" }} />\n ) : (\n <div>\n {pagination()}\n {loading && <Spin className=\"pb-4\" />}\n <GisceTable\n height={adjustedHeight!}\n columns={dataTable.columns}\n dataSource={items}\n loading={false}\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 />\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 || 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\";\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().delete({\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) =>\n 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, { useState } 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\nfunction DropdownButton(props: Props) {\n const {\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 onSearch = (value?: string) => {\n if (!value) {\n setSearchValue(undefined);\n return;\n }\n\n const sanitizedValue = value.trim();\n\n if (sanitizedValue.length === 0) {\n setSearchValue(undefined);\n return;\n }\n\n setSearchValue(sanitizedValue);\n };\n\n function getMenu() {\n let itemsData = [];\n if (searchValue) {\n itemsData = items.filter((item) => {\n return item.name.toLowerCase().includes(searchValue.toLowerCase());\n });\n } else {\n itemsData = items;\n }\n\n const menuItems = itemsData.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 const mustShowSearch =\n searchable === true || (searchable === \"auto\" && items.length > 3);\n\n return (\n <Menu onClick={handleMenuClick}>\n <div>\n {mustShowSearch && (\n <Search\n onChange={(e: any) => onSearch(e.target.value)}\n onSearch={onSearch}\n allowClear\n style={{ padding: 5 }}\n />\n )}\n </div>\n <div style={{maxHeight: 300, overflowY: 'auto'}}>\n <Menu.ItemGroup title={tooltip}>{menuItems}</Menu.ItemGroup>\n </div>\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().delete({\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={{ 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, Input, Modal, Row, Space, Checkbox } 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, {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().delete({\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\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(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\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: 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 />\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\n style={{\n height: ooui?.height ? ooui.height + \"px\" : \"100%\",\n overflow: \"auto\",\n }}\n >\n <ReactMarkdown className=\"markdown-typography\">{value}</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}>\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","localeStrings","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","searchIdHelp","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","LocaleContext","React","createContext","LocaleContextProvider","children","lang","t","key","tForLang","Field","layout","valuePropName","showLabel","alignLabel","required","type","validator","id","useContext","rules","message","formItem","Form","tooltipInline","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","iconComponent","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","CustomSelect","RequiredSelect","option","toLowerCase","indexOf","styled","Boolean","BooleanInput","CustomCheckbox","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","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","gridStyle","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","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","h","c","d","l","$","y","M","m","v","g","D","p","S","O","f","T","Avatar","toString","slice","toUpperCase","join","AntdAvatar","dayjs","extend","weekday","localeData","DatePickerConfig","placeholder","dateDisplayFormat","dateInternalFormat","showTime","DatePickerInput","mode","onValueStringChange","momentDate","format","dateValue","AntDatePicker","div","SelectAllRecordsRow","numberOfVisibleSelectedRows","totalRecords","numberOfTotalRows","onSelectAllRecords","numberOfRealSelectedRows","translations","handleClick","selectRowsComponent","Link","fontWeight","allRowsAreSelected","booleanComponentFn","justifyContent","alignContent","Checkbox","many2OneComponentFn","textComponentFn","dateComponentFn","dateTimeComponentFn","one2ManyComponentFn","progressBarComponentFn","floatTimeComponent","numberComponent","textAlign","imageComponent","TagComponent","TagsComponent","setValues","optionsRead","tags","SelectionComponent","referenceComponent","AvatarFn","total","onRequestPageChange","onRowClicked","showPagination","rowSelection","scrollY","onChangeSort","onFetchChildrenForRecord","childField","rootTree","readonly","setItems","setColumns","errorInParseColors","many2one","one2many","many2many","image","reference","avatar","pagination","isExpandable","selectedRowKeys","Pagination","getSums","sumFields","it","sum","sumItems","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","CustomInput","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","Search","DropdownButton","onItemClick","searchable","searchValue","setSearchValue","onSearch","sanitizedValue","trim","itemsData","mustShowSearch","maxHeight","overflowY","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","filteredResults","newIndex","mustDisableButtons","SaveOutlined","CopyOutlined","InfoCircleOutlined","ReloadOutlined","saveDocument","getAttachmentActionPayload","initialViewType","selection_associated_object","forced_values","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","mustShowClearSuffix","setMustShowClearSuffix","CloseCircleFilled","ConfigContext","previewFeatures","TreeActionBar","treeExpandable","exportModalVisible","setExportModalVisible","hasNameSearch","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","ExportOutlined","DashboardTree","limitRef","paramsRef","searchForTree","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","parmsParsed","childContent","formattedInitialView","MultiCheckboxInput","checkAll","uncheckAll","MarkdownInput","ReactMarkdown","direction","RadioAnt","SwitchInput","AntdSwitch","StepsInput","errorField","AntdSteps","onMount","editor","onDidBlurEditorWidget","Editor","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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"}