@gisce/react-ooui 1.4.13-rc.0 → 1.4.13
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.es.js","sources":["../src/widgets/base/Label.tsx","../src/locales/ca_ES.tsx","../src/locales/en_US.tsx","../src/locales/es_ES.tsx","../src/context/LocaleContext.tsx","../src/common/Field.tsx","../src/ui/ConfirmDialog.tsx","../src/context/FormContext.tsx","../src/helpers/iconMapper.ts","../src/widgets/base/Button.tsx","../src/widgets/custom/ButtonGroup.tsx","../src/hooks/useWindowDimensions.ts","../src/ConnectionProvider.ts","../src/helpers/errorHelper.ts","../src/ui/ActionErrorDialog.tsx","../src/widgets/modals/TranslationModal.tsx","../src/common/ButtonWithTooltip.tsx","../src/ui/InfoDialog.tsx","../src/widgets/base/Char.tsx","../src/widgets/base/Selection.tsx","../src/widgets/base/Boolean.tsx","../node_modules/lodash/isObject.js","../node_modules/lodash/_freeGlobal.js","../node_modules/lodash/_root.js","../node_modules/lodash/now.js","../node_modules/lodash/_trimmedEndIndex.js","../node_modules/lodash/_baseTrim.js","../node_modules/lodash/_Symbol.js","../node_modules/lodash/_getRawTag.js","../node_modules/lodash/_objectToString.js","../node_modules/lodash/_baseGetTag.js","../node_modules/lodash/isObjectLike.js","../node_modules/lodash/isSymbol.js","../node_modules/lodash/toNumber.js","../node_modules/lodash/debounce.js","../src/helpers/filesHelper.ts","../src/widgets/base/Image.tsx","../src/widgets/custom/FiberGrid.tsx","../src/helpers/treeHelper.ts","../src/helpers/one2manyHelper.ts","../src/widgets/custom/Timeline.tsx","../src/widgets/custom/Indicator.tsx","../src/helpers/formHelper.ts","../src/widgets/custom/Tag.tsx","../src/widgets/custom/Tags.tsx","../src/widgets/WidgetFactory.tsx","../src/helpers/containerHelper.ts","../src/widgets/containers/Container.tsx","../src/ui/UnsavedChangesDialog.tsx","../src/ui/FormErrorsDialog.tsx","../src/ui/WarningDialog.tsx","../src/context/FormModalContext.tsx","../src/helpers/searchHelper.ts","../src/hooks/useSearch.ts","../src/context/ActionViewContext.tsx","../src/context/TabManagerContext.tsx","../src/context/ContentRootContext.tsx","../src/ui/ErrorAlert.tsx","../src/widgets/views/Form.tsx","../src/widgets/modals/FormModal.tsx","../src/widgets/views/searchFilter/DateRangePicker.tsx","../src/widgets/views/searchFilter/DateTimeRangePicker.tsx","../src/widgets/base/Float.tsx","../src/widgets/base/Integer.tsx","../src/widgets/views/searchFilter/PairFields.tsx","../src/widgets/base/MultiSelection.tsx","../src/widgets/views/searchFilter/SearchField.tsx","../src/widgets/views/searchFilter/SearchBottomBar.tsx","../src/widgets/views/searchFilter/SearchParams.tsx","../src/widgets/views/searchFilter/SearchFilter.tsx","../src/helpers/dynamicColumnsHelper.ts","../src/helpers/timeHelper.ts","../src/widgets/base/ProgressBar.tsx","../src/widgets/base/many2one/Many2oneSuffixModal.tsx","../src/widgets/base/many2one/Many2oneSuffix.tsx","../src/widgets/base/many2one/Many2oneTree.tsx","../src/widgets/base/ReferenceTree.tsx","../node_modules/dayjs/dayjs.min.js","../src/widgets/custom/Avatar.tsx","../node_modules/dayjs/plugin/weekday.js","../node_modules/dayjs/plugin/localeData.js","../src/common/DatePicker.tsx","../src/widgets/views/Tree.tsx","../src/widgets/views/SearchTree.tsx","../src/widgets/modals/SearchModal.tsx","../src/ui/GenericErrorDialog.tsx","../src/widgets/base/many2one/Many2one.tsx","../src/context/One2manyContext.tsx","../src/widgets/views/Graph/GraphIndicator.tsx","../src/widgets/views/Graph/GraphDefaults.ts","../src/widgets/views/Graph/useGraphData.tsx","../src/widgets/views/Graph/GraphChart.tsx","../src/widgets/views/Graph/Graph.tsx","../src/ui/RemoveItemDialog.tsx","../src/ui/UnlinkItemDialog.tsx","../src/widgets/base/one2many/One2manyTopBar.tsx","../src/widgets/base/one2many/One2manyInput.tsx","../src/widgets/base/one2many/One2many.tsx","../src/widgets/base/FloatTime.tsx","../src/widgets/containers/Group.tsx","../src/widgets/containers/Notebook.tsx","../src/widgets/base/Text.tsx","../src/widgets/base/Separator.tsx","../src/hooks/useExport.ts","../src/widgets/modals/ExportModal.tsx","../src/widgets/base/Date.tsx","../src/widgets/base/DateTime.tsx","../node_modules/dayjs/plugin/customParseFormat.js","../src/widgets/base/Time.tsx","../src/widgets/base/Reference.tsx","../src/widgets/base/Binary.tsx","../src/actionbar/ChangeViewButton.tsx","../src/actionbar/DropdownButton.tsx","../src/actionbar/ActionButton.tsx","../src/actionbar/NewButton.tsx","../src/ui/RefreshItemDialog.tsx","../src/helpers/logInfoHelper.tsx","../src/actionbar/AttachmentsButtonWrapper.tsx","../src/actionbar/AttachmentsButton.tsx","../src/actionbar/FormActionBar.tsx","../src/widgets/base/LinkInput.tsx","../src/widgets/base/Url.tsx","../src/widgets/base/Email.tsx","../src/ui/GoToResourceModal.tsx","../src/actionbar/ButtonWithBadge.tsx","../src/actionbar/GraphActionBar.tsx","../src/ui/TitleHeader.tsx","../src/views/actionViews/GraphActionView.tsx","../src/views/actionViews/FormActionView.tsx","../src/actionbar/SearchBar.tsx","../src/context/ConfigContext.tsx","../src/actionbar/TreeActionBar.tsx","../src/views/actionViews/TreeActionView.tsx","../src/context/DashboardActionContext.tsx","../src/actionbar/DashboardActionBar.tsx","../src/views/actionViews/DashboardActionView.tsx","../src/helpers/viewHelper.ts","../src/views/ActionView.tsx","../src/widgets/views/Dashboard/dashboardHelper.ts","../src/widgets/views/DashboardGrid/DashboardGrid.tsx","../src/widgets/views/DashboardGrid/DashboardGridItem.tsx","../src/widgets/views/Dashboard/DashboardTree.tsx","../src/widgets/views/Dashboard/DashboardForm.tsx","../src/widgets/views/Dashboard/Dashboard.tsx","../src/widgets/custom/MultiCheckbox.tsx","../src/widgets/custom/Markdown.tsx","../src/widgets/custom/Radio.tsx","../src/widgets/custom/Switch.tsx","../src/widgets/custom/Steps.tsx","../src/widgets/custom/CodeEditor.tsx","../src/views/Welcome.tsx","../src/views/RootView.tsx","../src/views/tabs/Tab.tsx","../src/views/TabSelector.tsx","../src/views/TabContent.tsx","../src/views/CurrentTabContent.tsx","../src/ui/FavouriteButton.tsx"],"sourcesContent":["import React from \"react\";\nimport { Tooltip, Typography, theme } from \"antd\";\nimport { WidgetProps } from \"@/types\";\nimport { QuestionCircleOutlined } from \"@ant-design/icons\";\nimport { Label as LabelOoui } from \"@gisce/ooui\";\nimport { Interweave } from \"interweave\";\nconst { Text, Title } = Typography;\nconst { useToken } = theme;\n\ntype Props = WidgetProps & {\n align?: \"left\" | \"center\" | \"right\";\n responsiveBehaviour?: boolean;\n};\n\nconst alignClass = {\n left: \"justify-start\",\n center: \"justify-center\",\n right: \"justify-end\",\n};\n\nconst Label = (props: Props) => {\n const { ooui, align, responsiveBehaviour } = props;\n const { label, tooltip, fieldForLabel, labelSize, labelType } =\n ooui as LabelOoui;\n const addColon = fieldForLabel !== null ? true : false;\n const labelText = addColon && label.length > 1 ? label + \" :\" : label;\n const responsiveAlign = responsiveBehaviour ? \"left\" : \"right\";\n const labelAlgin = align ? align : fieldForLabel ? responsiveAlign : \"left\";\n const { token } = useToken();\n\n const TextType = labelSize === undefined ? Text : Title;\n\n return (\n <div\n className={`flex flex-row items-center pb-1 pt-1 ${alignClass[labelAlgin]}`}\n >\n {tooltip && (\n <Tooltip title={tooltip}>\n <QuestionCircleOutlined className=\"pr-1 text-xs\" style={{\n color: token.colorPrimary\n }} />\n </Tooltip>\n )}\n <span className=\"pr-2\">\n <TextType\n level={labelSize}\n type={labelType as any}\n >\n <Interweave content={labelText} />\n </TextType>\n </span>\n </div>\n );\n};\n\nexport default Label;\n","export default {\n true: \"Sí\",\n false: \"No\",\n simple_search: \"Búsqueda simple\",\n advanced_search: \"Búsqueda avançada\",\n search: \"Buscar\",\n parameters: \"Paràmetres\",\n limit: \"Limit\",\n first: \"Primer\",\n no_results: \"No hi ha resultats\",\n summary:\n \"Mostrant resultats des de {from} fins {to} d'un total de {total} registres\",\n welcome: \"Benvingut\",\n attachments: \"Adjunts\",\n addNewAttachment: \"Afegir nou adjunt\",\n listAllAttachments: \"Veure tots els adjunts\",\n viewAs: \"Veure com\",\n confirmRemoveItem: \"Estàs segur de volguer eliminar aquest item?\",\n save: \"Desar\",\n delete: \"Eliminar\",\n refresh: \"Refrescar\",\n previous: \"Anterior\",\n next: \"Següent\",\n actions: \"Accions\",\n reports: \"Informes\",\n related: \"Relacionat\",\n new: \"Nou\",\n fillRequiredField: \"Siusplau, omple aquest camp obligatori\",\n fillRequiredFields: \"Siusplau, omple tots els camps obligatoris\",\n generatingReport: \"Generant informe...\",\n confirmation: \"Confirmació\",\n ok: \"D'acord\",\n cancel: \"Cancel·lar\",\n formHasErrors: \"El formulari té errors\",\n unsavedChanges: \"Hi ha canvis sense guardar\",\n confirmRefreshWithoutSave:\n \"Estàs segur de volguer refrescar la pàgina sense guardar els canvis?\",\n discardAndRefresh: \"Descarta els canvis i refresca\",\n removeItems: \"Elimina el registre/s\",\n confirmRemove: \"Estàs segur de volguer eliminar els registre/s seleccionats?\",\n yesConfirmRemove: \"Sí, elimina\",\n unlinkItems: \"Desenllaça registre/s\",\n confirmUnlink:\n \"Estàs segur de volguer desenllaçar els registre/s seleccionats?\",\n yesConfirmUnlink: \"Sí, desenllaça\",\n confirmCloseWithoutSave:\n \"Estàs segur de volguer tancar aquesta finestra sense guardar?\",\n closeWithoutSaving: \"Tancar sense guardar\",\n action: \"Acció\",\n report: \"Informe\",\n selectAction: \"Selecciona una acció\",\n download: \"Descarrega\",\n clear: \"Neteja\",\n open: \"Obre\",\n uploadNewImage: \"Puja una nova imatge\",\n noCurrentEntries: \"No hi ha registres\",\n duplicate: \"Duplicar\",\n downloadingAttachment: \"Descarregant adjunt...\",\n tree: \"llista\",\n form: \"formulari\",\n favorites: \"Els meus favorits\",\n edit_favorites: \"Edita els favorits\",\n no_favorites: \"No tens favorits guardats\",\n register: \"Registre\",\n of: \"de\",\n editingDocument: \"Editant document\",\n showLogs: \"Veure logs\",\n createdBy: \"Creat per l'usuari\",\n creationDate: \"Data creació\",\n lastUpdatedBy: \"Última modificació per\",\n lastUpdatedDate: \"Data última modificació\",\n goToResourceId: \"Vés al recurs amb ID\",\n searchId: \"ID de cerca:\",\n idNotFound: \"No es troba aquesta id de recurs per l'objecte\",\n selectedRegisters: \"registres seleccionats\",\n translate: \"Traduïr\",\n enterTextBeforeTranslate:\n \"Introdueix algun text al camp abans d'afegir traduccions\",\n saveBeforeTranslate:\n \"Heu de desar el registre abans d'afegir les traduccions\",\n configDashboard: \"Configurar panell\",\n moveDashboard: \"Moure items del panell\",\n openAttachment: \"Veure detall de l'adjunt\",\n openAttachmentLink: \"Obrir enllaç de l'adjunt\",\n uninformed: \"Sense informar\",\n totalRegisters: \"Registres totals:\",\n export: \"Exportar\",\n selectAtLeastOneField: \"Selecciona almenys un camp per a l'exportació\",\n printScreen: \"Imprimir pantalla\",\n advancedExport: \"Exportació avançada\",\n savedRegisters: \"Registre guardat correctament\",\n errorWhileSavingForm: \"Error en guardar el formulari\",\n};\n","export default {\n true: \"Yes\",\n false: \"No\",\n simple_search: \"Simple search\",\n advanced_search: \"Advanced search\",\n search: \"Search\",\n parameters: \"Parameters\",\n limit: \"Limit\",\n first: \"First\",\n no_results: \"No results\",\n summary: \"Showing registers from {from} to {to} of {total} registers\",\n welcome: \"Welcome\",\n attachments: \"Attachments\",\n addNewAttachment: \"Add new attachment\",\n listAllAttachments: \"View all the attachments\",\n viewAs: \"View as\",\n confirmRemoveItem: \"Are you sure to remove this item?\",\n save: \"Save\",\n delete: \"Delete\",\n refresh: \"Refresh\",\n previous: \"Previous\",\n next: \"Next\",\n actions: \"Actions\",\n reports: \"Reports\",\n related: \"Related\",\n new: \"New\",\n fillRequiredField: \"Please fill this required field\",\n fillRequiredFields: \"Please fill all the required fields\",\n generatingReport: \"Generating report...\",\n confirmation: \"Confirmation\",\n ok: \"OK\",\n cancel: \"Cancel\",\n formHasErrors: \"Form has errors\",\n unsavedChanges: \"There are unsaved changes\",\n confirmRefreshWithoutSave:\n \"Do you really want to refresh this window without saving?\",\n discardAndRefresh: \"Discard changes and refresh\",\n removeItems: \"Remove item/s\",\n confirmRemove: \"Are you sure you want to remove the selected item/s?\",\n yesConfirmRemove: \"Yes, remove\",\n unlinkItems: \"Unlink item/s\",\n confirmUnlink: \"Are you sure you want to unlink the selected item/s?\",\n yesConfirmUnlink: \"Yes, unlink\",\n confirmCloseWithoutSave:\n \"Do you really want to close this window without saving?\",\n closeWithoutSaving: \"Close without saving\",\n action: \"Action\",\n report: \"Report\",\n selectAction: \"Select an action\",\n download: \"Download\",\n clear: \"Clear\",\n open: \"Open\",\n uploadNewImage: \"Upload new image\",\n noCurrentEntries: \"No current entries\",\n duplicate: \"Duplicate\",\n downloadingAttachment: \"Downloading attachment...\",\n tree: \"list\",\n form: \"form\",\n favorites: \"My shortcuts\",\n edit_favorites: \"Edit shortcuts\",\n no_favorites: \"You don't have any shortcuts saved yet\",\n register: \"Register\",\n of: \"of\",\n editingDocument: \"Editing document\",\n showLogs: \"Show logs\",\n createdBy: \"Created by user\",\n creationDate: \"Creation date\",\n lastUpdatedBy: \"Last modified by\",\n lastUpdatedDate: \"Date of last modification\",\n goToResourceId: \"Go to resource ID\",\n searchId: \"Search ID:\",\n idNotFound: \"Resource ID does not exist for this object!\",\n selectedRegisters: \"selected registers\",\n translate: \"Translate\",\n enterTextBeforeTranslate:\n \"Enter some text to the related field before adding translations\",\n saveBeforeTranslate: \"You must save the record before adding translations\",\n configDashboard: \"Setup dashboard\",\n moveDashboard: \"Move dashboard items\",\n openAttachment: \"Open attachment detail\",\n openAttachmentLink: \"Open attachment link\",\n uninformed: \"Uninformed\",\n totalRegisters: \"Total registers:\",\n export: \"Export\",\n selectAtLeastOneField: \"Select at least one field for the export\",\n printScreen: \"Print screen\",\n advancedExport: \"Advanced export\",\n savedRegisters: \"Record successfully saved\",\n errorWhileSavingForm: \"Error while saving form\",\n};\n","export default {\n true: \"Sí\",\n false: \"No\",\n simple_search: \"Búsqueda simple\",\n advanced_search: \"Búsqueda avanzada\",\n search: \"Buscar\",\n parameters: \"Parametros\",\n limit: \"Límite\",\n first: \"Primero\",\n no_results: \"No hay resultados\",\n summary:\n \"Mostrando resultado desde {from} hasta {to} de un total de {total} registros\",\n welcome: \"Bienvenido\",\n attachments: \"Adjuntos\",\n addNewAttachment: \"Añadir nuevo adjunto\",\n listAllAttachments: \"Ver todos los adjuntos\",\n viewAs: \"Ver cómo\",\n confirmRemoveItem: \"Estás seguro de querer eliminar éste registro?\",\n save: \"Guardar\",\n delete: \"Eliminar\",\n refresh: \"Refrescar\",\n previous: \"Anterior\",\n next: \"Siguiente\",\n actions: \"Acciones\",\n reports: \"Informes\",\n related: \"Relacionado\",\n new: \"Nuevo\",\n fillRequiredField: \"Por favor, rellena éste campo obligatorio\",\n fillRequiredFields: \"Por favor, rellena todos los campos obligatorios\",\n generatingReport: \"Generando informe...\",\n confirmation: \"Confirmacióm\",\n ok: \"De acuerdo\",\n cancel: \"Cancelar\",\n formHasErrors: \"El formulario tiene errores\",\n unsavedChanges: \"Hay cambios sin guardar\",\n confirmRefreshWithoutSave:\n \"Estás seguro de querer refrescar la página sin guardar los cambios?\",\n discardAndRefresh: \"Descarta los cambios y refresca\",\n removeItems: \"Eliminar el registro/s\",\n confirmRemove:\n \"Estás seguro de querer eliminar los registro/s seleccionados?\",\n yesConfirmRemove: \"Sí, elimina\",\n unlinkItems: \"Desenlaza registro/s\",\n confirmUnlink:\n \"Estás seguro de querer desenlazar los registro/s seleccionados?\",\n yesConfirmUnlink: \"Sí, desenlaza\",\n confirmCloseWithoutSave:\n \"Estás seguro de querer cerrar ésta ventana sin cerrar?\",\n closeWithoutSaving: \"Cerrar sin guardar\",\n action: \"Acción\",\n report: \"Informe\",\n selectAction: \"Selecciona una acción\",\n download: \"Descarga\",\n clear: \"Limpiar\",\n open: \"Abrir\",\n uploadNewImage: \"Subir una nueva imágen\",\n noCurrentEntries: \"No hay registros\",\n duplicate: \"Duplicar\",\n downloadingAttachment: \"Descargando adjunto...\",\n tree: \"lista\",\n form: \"formulario\",\n favorites: \"Mis favoritos\",\n edit_favorites: \"Edita los favoritos\",\n no_favorites: \"No tienes favoritos guardados\",\n register: \"Registro\",\n of: \"de\",\n editingDocument: \"Editando documento\",\n showLogs: \"Ver logs\",\n createdBy: \"Creado por el usuario\",\n creationDate: \"Fecha creación\",\n lastUpdatedBy: \"Última modificación por\",\n lastUpdatedDate: \"Fecha última modificación\",\n goToResourceId: \"Ir al recurso con ID\",\n searchId: \"ID de búsqueda:\",\n idNotFound: \"No se encuentra ésta ID de recursos para el objeto\",\n selectedRegisters: \"registros seleccionados\",\n translate: \"Traducir\",\n enterTextBeforeTranslate:\n \"Introduce algun texto en el campo antes de añadir traducciones\",\n saveBeforeTranslate:\n \"Tienes que guardar el registro antes de añadir las traducciones\",\n configDashboard: \"Configurar panel\",\n moveDashboard: \"Mover items del panel\",\n openAttachment: \"Ver detalle del adjunto\",\n openAttachmentLink: \"Abrir enlace del adjunto\",\n uninformed: \"Sin informar\",\n totalRegisters: \"Registros totales:\",\n export: \"Exportar\",\n selectAtLeastOneField: \"Selecciona al menos un campo para la exportación\",\n printScreen: \"Imprimir pantalla\",\n advancedExport: \"Exportación avanzada\",\n savedRegisters: \"Registro guardado correctamente\",\n errorWhileSavingForm: \"Error al guardar el formulario\",\n};\n","import React from \"react\";\nimport ca_ES from \"@/locales/ca_ES\";\nimport en_US from \"@/locales/en_US\";\nimport es_ES from \"@/locales/es_ES\";\n\nconst localeStrings: any = {\n ca_ES,\n en_US,\n es_ES,\n};\n\nexport type LocaleContextType = {\n lang: string;\n t: (key: string) => string;\n};\n\nexport const LocaleContext = React.createContext<LocaleContextType | null>(\n null\n);\n\ntype LocaleContextProps = {\n children: React.ReactNode;\n lang: string;\n};\n\nconst LocaleContextProvider = (props: LocaleContextProps): any => {\n const { children, lang } = props;\n\n function t(key: string): string {\n return tForLang(key, lang);\n }\n\n return (\n <LocaleContext.Provider\n value={{\n lang,\n t,\n }}\n >\n {children}\n </LocaleContext.Provider>\n );\n};\n\nexport const tForLang = (key: string, lang: string) => {\n const translated = localeStrings[lang]?.[key];\n return translated || key;\n};\n\nexport default LocaleContextProvider;\n","import React, { useContext } from \"react\";\nimport { Form, Row, Col } from \"antd\";\nimport { Field as FieldOoui, Label as LabelOoui } from \"@gisce/ooui\";\nimport Label from \"@/widgets/base/Label\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\nexport default function Field({\n ooui,\n children,\n layout = \"horizontal\",\n valuePropName,\n showLabel = false,\n alignLabel = \"left\",\n required = false,\n type,\n validator,\n}: {\n ooui: FieldOoui;\n children?: React.ReactNode;\n layout?: \"horizontal\" | \"vertical\";\n valuePropName?: string;\n showLabel?: boolean;\n alignLabel?: \"left\" | \"center\" | \"right\";\n required?: boolean;\n type?: any;\n validator?: any;\n}) {\n const { id, label, tooltip } = ooui;\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n const rules = required\n ? [\n {\n required: true,\n message: t(\"fillRequiredField\"),\n type,\n validator,\n },\n ]\n : undefined;\n\n const formItem = () => (\n <Form.Item\n className=\"mb-0\"\n name={id}\n valuePropName={valuePropName}\n rules={rules}\n >\n {children}\n </Form.Item>\n );\n\n if (!showLabel) {\n return formItem();\n }\n\n const labelWidget = (\n <Label\n ooui={\n new LabelOoui({\n name: id + \"_label\",\n string: label,\n help: tooltip,\n fieldForLabel: id,\n })\n }\n align={alignLabel}\n />\n );\n\n const horizontalMode = () => {\n return (\n <Row align=\"middle\" className=\"pb-1 pt-1\">\n <Col className=\"ml-2\" flex=\"7rem\">\n <div className=\"flex flex-col items-end\">{labelWidget}</div>\n </Col>\n <Col flex=\"auto\">{formItem()}</Col>\n </Row>\n );\n };\n\n const verticalMode = () => {\n return (\n <>\n {labelWidget}\n {formItem()}\n </>\n );\n };\n\n return layout === \"horizontal\" ? horizontalMode() : verticalMode();\n}\n","import React from \"react\";\nimport { Modal } from \"antd\";\nimport { ExclamationCircleOutlined } from \"@ant-design/icons\";\nimport { tForLang } from \"@/context/LocaleContext\";\n\nconst { confirm } = Modal;\n\nconst showDialog = ({\n onOk,\n confirmMessage,\n lang\n}: {\n onOk: () => void;\n confirmMessage: string;\n lang: string;\n}) => {\n confirm({\n title: tForLang(\"confirmation\", lang),\n icon: <ExclamationCircleOutlined />,\n centered: true,\n content: confirmMessage,\n okText: tForLang(\"ok\", lang),\n cancelText: tForLang(\"cancel\", lang),\n onOk,\n });\n};\n\nexport default showDialog;\n","import React, { useRef, useState } from \"react\";\n\nexport type FormContextType = {\n activeId?: number;\n activeModel: string;\n setFieldValue: (field: string, value?: string) => void;\n getFieldValue: (field: string) => string;\n executeButtonAction: ({\n type,\n action,\n context,\n }: {\n type: string;\n action: string;\n context?: any;\n }) => Promise<void>;\n getContext: () => Promise<any>;\n getValues: () => Promise<any>;\n getPlainValues: () => { [key: string]: any };\n getFields: () => Promise<any>;\n domain: any[];\n submitForm?: (options?: {\n callOnSubmitSucceed?: boolean;\n }) => Promise<{ succeed: boolean; id: number }>;\n fetchValues?: () => void;\n formHasChanges?: () => boolean;\n elementHasLostFocus?: () => void;\n};\n\nexport const FormContext = React.createContext<FormContextType | null>(null);\n\ntype FormProviderProps = FormContextType & {\n children: React.ReactNode;\n};\n\nconst FormProvider = (props: FormProviderProps): any => {\n const {\n children,\n activeId,\n activeModel,\n setFieldValue,\n getFieldValue,\n executeButtonAction,\n getContext,\n getValues,\n getPlainValues,\n domain,\n submitForm,\n fetchValues,\n formHasChanges,\n elementHasLostFocus,\n getFields,\n } = props;\n\n return (\n <FormContext.Provider\n value={{\n domain,\n getValues,\n getPlainValues,\n getFields,\n activeId,\n activeModel,\n setFieldValue,\n getFieldValue,\n executeButtonAction,\n getContext,\n submitForm,\n fetchValues,\n formHasChanges,\n elementHasLostFocus,\n }}\n >\n {children}\n </FormContext.Provider>\n );\n};\n\nexport default FormProvider;\n","import React, { CSSProperties } from \"react\";\nimport * as AntIcons from \"@ant-design/icons\";\nimport * as TablerIcons from \"@tabler/icons-react\";\nimport Icon from \"@ant-design/icons\";\n\ntype TablerKey = keyof typeof TablerIcons;\ntype AntKey = keyof typeof AntIcons;\n\nconst iconMapping: { [key: string]: string } = {\n \"terp-purchase\": \"ShoppingCart\",\n \"terp-graph\": \"PieChart\",\n \"terp-crm\": \"Contacts\",\n \"terp-hr\": \"Friends\",\n \"terp-account\": \"BuildingBank\",\n \"terp-project\": \"Checklist\",\n \"terp-administration\": \"Adjustments\",\n \"terp-partner\": \"Team\",\n \"terp-mrp\": \"Build\",\n \"terp-product\": \"Shopping\",\n STOCK_JUSTIFY_FILL: \"UnorderedList\",\n STOCK_INDENT: \"IndentIncrease\",\n STOCK_HELP: \"Question\",\n STOCK_GO_UP: \"ArrowUp\",\n STOCK_SORT_DESCENDING: \"SortDescending\",\n STOCK_ADD: \"Plus\",\n STOCK_GOTO_LAST: \"FastForward\",\n STOCK_FIND: \"Search\",\n STOCK_PROPERTIES: \"Control\",\n STOCK_DIALOG_INFO: \"Info\",\n STOCK_FLOPPY: \"Usb\",\n STOCK_JUSTIFY_CENTER: \"AlignCenter\",\n STOCK_GO_BACK: \"ArrowLeft\",\n STOCK_UNDERLINE: \"Underline\",\n STOCK_BOLD: \"Bold\",\n STOCK_APPLY: \"Check\",\n STOCK_ZOOM_OUT: \"ZoomOut\",\n STOCK_STRIKETHROUGH: \"Strikethrough\",\n STOCK_MEDIA_REWIND: \"Backward\",\n STOCK_PRINT: \"Printer\",\n STOCK_NO: \"Close\",\n STOCK_GOTO_FIRST: \"FastBackward\",\n STOCK_CLOSE: \"Close\",\n STOCK_REMOVE: \"Minus\",\n STOCK_CUT: \"Scissor\",\n STOCK_DIALOG_AUTHENTICATION: \"Safety\",\n STOCK_ZOOM_FIT: \"Expand\",\n STOCK_JUMP_TO: \"Select\",\n STOCK_HARDDISK: \"Hdd\",\n STOCK_SAVE_AS: \"Save\",\n STOCK_UNDO: \"Undo\",\n STOCK_JUSTIFY_RIGHT: \"AlignRight\",\n STOCK_DIALOG_ERROR: \"CloseCircle\",\n STOCK_INDEX: \"Profile\",\n STOCK_GOTO_BOTTOM: \"VerticalAlignBottom\",\n STOCK_MEDIA_NEXT: \"StepForward\",\n STOCK_REDO: \"Redo\",\n STOCK_COPY: \"Copy\",\n STOCK_MEDIA_PAUSE: \"Pause\",\n STOCK_GO_FORWARD: \"ArrowRight\",\n STOCK_UNDELETE: \"Undo\",\n STOCK_EXECUTE: \"Setting\",\n STOCK_SAVE: \"Save\",\n STOCK_DIALOG_QUESTION: \"QuestionCircle\",\n STOCK_SORT_ASCENDING: \"SortAscending\",\n STOCK_REFRESH: \"Reload\",\n STOCK_MEDIA_FORWARD: \"Forward\",\n STOCK_STOP: \"Border\",\n STOCK_PRINT_PREVIEW: \"Printer\",\n STOCK_HOME: \"Home\",\n STOCK_PASTE: \"CarryOut\",\n STOCK_ZOOM_100: \"ZoomIn\",\n STOCK_FIND_AND_REPLACE: \"FileSearch\",\n STOCK_DIALOG_WARNING: \"Warning\",\n STOCK_ZOOM_IN: \"ZoomIn\",\n STOCK_CONVERT: \"Export\",\n STOCK_ITALIC: \"Italic\",\n STOCK_YES: \"Check\",\n STOCK_MEDIA_PLAY: \"PlayCircle\",\n STOCK_MEDIA_RECORD: \"VideoCamera\",\n STOCK_MEDIA_PREVIOUS: \"StepBackward\",\n STOCK_NEW: \"FileAdd\",\n STOCK_CANCEL: \"Close\",\n STOCK_DISCONNECT: \"Api\",\n STOCK_JUSTIFY_LEFT: \"AlignLeft\",\n STOCK_FILE: \"File\",\n STOCK_QUIT: \"Logout\",\n STOCK_EDIT: \"Edit\",\n STOCK_CONNECT: \"Api\",\n STOCK_GO_DOWN: \"CaretDown\",\n STOCK_NETWORK: \"Apartment\",\n STOCK_OK: \"Check\",\n STOCK_GOTO_TOP: \"VerticalAlignTop\",\n STOCK_ABOUT: \"Star\",\n STOCK_COLOR_PICKER: \"Aim\",\n STOCK_SELECT_FONT: \"FontSize\",\n STOCK_DELETE: \"Delete\",\n STOCK_DND: \"FileText\",\n STOCK_CLEAR: \"CloseSquare\",\n STOCK_UNINDENT: \"AlignLeft\",\n STOCK_PREFERENCES: \"Setting\",\n};\n\nexport default (\n key: string,\n props?: { className?: any; style: CSSProperties }\n) => {\n if (key.indexOf(\"gtk-\") !== -1) {\n const rootIcon = key.replace(\"gtk-\", \"\").replace(/\\-/g, \"_\");\n key = `STOCK_${rootIcon.toUpperCase()}`;\n }\n\n if (iconMapping.hasOwnProperty(key)) {\n return getIconForKey(iconMapping[key], props);\n }\n\n return getIconForKey(key, props);\n};\n\nfunction toCamelCase(key: string): string {\n return `${key\n .split(\"-\")\n .map((word) =>\n word.replace(\n /\\w\\S*/g,\n (w) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase()\n )\n )\n .join(\"\")}`;\n}\n\nfunction getIconForKey(\n key: string,\n props?: { className?: any; style: CSSProperties }\n) {\n let IconCamelCase = key.charAt(0).toUpperCase() + key.slice(1); // Capitalize first letter\n if (IconCamelCase.indexOf(\"-\") !== -1) {\n IconCamelCase = toCamelCase(IconCamelCase);\n }\n\n const antKey: AntKey = `${IconCamelCase}Outlined` as any;\n if (AntIcons[antKey]) {\n return () =>\n React.createElement(AntIcons[antKey] as any, {\n ...props,\n });\n }\n\n const tablerKey: TablerKey = `Icon${IconCamelCase}` as any;\n if (TablerIcons[tablerKey]) {\n const TablerIcon = () =>\n React.createElement(TablerIcons[tablerKey] as any, {\n fill: \"transparent\",\n height: 17,\n width: 17,\n });\n const CustomIcon = () =>\n React.createElement(Icon, {\n component: TablerIcon,\n ...props,\n });\n return CustomIcon;\n }\n\n return undefined;\n}\n","import React, { useContext, useState } from \"react\";\nimport Field from \"@/common/Field\";\nimport { Button as AntButton } from \"antd\";\nimport { Button as ButtonOoui } from \"@gisce/ooui\";\nimport showConfirmDialog from \"@/ui/ConfirmDialog\";\nimport { FormContext, FormContextType } from \"@/context/FormContext\";\nimport { LoadingOutlined } from \"@ant-design/icons\";\nimport iconMapper from \"@/helpers/iconMapper\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\ntype Props = {\n ooui: ButtonOoui;\n};\n\nexport const Button = (props: Props) => {\n const { ooui } = props;\n const {\n id,\n label,\n activated,\n buttonType,\n confirmMessage,\n icon,\n context,\n readOnly,\n } = ooui;\n const formContext = useContext(FormContext) as FormContextType;\n const { executeButtonAction } = formContext || {};\n const [isRunning, setIsRunning] = useState<boolean>(false);\n const { lang } = useContext(LocaleContext) as LocaleContextType;\n\n async function onClick_confirm() {\n setIsRunning(true);\n await executeButtonAction({ type: buttonType, action: id, context });\n setIsRunning(false);\n }\n\n function onClick() {\n if (confirmMessage) {\n showConfirmDialog({\n confirmMessage,\n lang,\n onOk: () => {\n onClick_confirm();\n },\n });\n return;\n }\n\n onClick_confirm();\n }\n\n function getButtonIcon() {\n if (isRunning) return <LoadingOutlined />;\n if (icon) {\n const Icon: React.ElementType = iconMapper(icon) as any;\n return Icon && <Icon />;\n }\n return undefined;\n }\n\n return (\n <Field ooui={ooui}>\n <AntButton\n block\n disabled={!activated || readOnly}\n onClick={onClick}\n icon={getButtonIcon()}\n type={ooui.primary ? \"primary\" : \"default\"}\n danger={ooui.danger}\n style={{ whiteSpace: \"normal\", height: \"auto\" }}\n >\n {label}\n </AntButton>\n </Field>\n );\n};\n","import React, { useContext, useState } from \"react\";\nimport Field from \"@/common/Field\";\nimport { DownOutlined } from \"@ant-design/icons\";\nimport { Dropdown, Menu } from \"antd\";\nimport { Button } from \"@/widgets/base/Button\";\nimport {\n ButtonGroup as ButtonGroupOoui,\n Button as ButtonOoui,\n Field as FieldOoui,\n} from \"@gisce/ooui\";\nimport showConfirmDialog from \"@/ui/ConfirmDialog\";\nimport { FormContext, FormContextType } from \"@/context/FormContext\";\nimport { LoadingOutlined } from \"@ant-design/icons\";\nimport iconMapper from \"@/helpers/iconMapper\";\nimport { WidgetProps } from \"@/types\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\ntype ButtonGroupProps = {\n ooui: ButtonGroupOoui;\n};\n\ntype ItemsProps = {\n ooui: ButtonOoui[];\n executeButtonAction: any,\n lang: string\n};\n\nexport const ButtonGroup = (props: ButtonGroupProps) => {\n const { ooui } = props;\n const { defaultButton, secondaryButtons } = ooui;\n const {\n id,\n caption,\n activated,\n buttonType,\n confirmMessage,\n icon,\n primary,\n danger,\n context,\n readOnly,\n } = defaultButton || {};\n const formContext = useContext(FormContext) as FormContextType;\n const { executeButtonAction } = formContext || {};\n const [isRunning, setIsRunning] = useState<boolean>(false);\n const { lang } = useContext(LocaleContext) as LocaleContextType;\n\n function getButtonIcon() {\n if (isRunning) return <LoadingOutlined />;\n if (icon) {\n const Icon: React.ElementType = iconMapper(icon) as any;\n return Icon && <Icon />;\n }\n return undefined;\n }\n\n async function onClick_confirm() {\n if (buttonType && id) {\n setIsRunning(true);\n await executeButtonAction({ type: buttonType, action: id, context });\n setIsRunning(false);\n }\n }\n\n function onClick() {\n if (confirmMessage) {\n showConfirmDialog({\n confirmMessage,\n lang,\n onOk: () => {\n onClick_confirm();\n },\n });\n return;\n }\n\n onClick_confirm();\n }\n if (ooui.buttons.length === 0) {\n return null;\n } else if (ooui.buttons.length > 1) {\n return (\n <Field ooui={new FieldOoui({ ...{ ooui } })}>\n <Dropdown.Button\n disabled={!activated || readOnly}\n onClick={onClick}\n icon={<DownOutlined />}\n type={primary ? \"primary\" : undefined}\n //danger={danger ? true : undefined} This works but typescript\n // doesn't accept\n overlay={<Items ooui={secondaryButtons} executeButtonAction={executeButtonAction} lang={lang} /> }\n >\n {getButtonIcon()}\n {caption}\n </Dropdown.Button>\n </Field>\n );\n } else if (defaultButton) {\n return (\n <Button ooui={defaultButton} />\n )\n }\n};\n\nconst Items = (props: ItemsProps) => {\n const { ooui, executeButtonAction, lang } = props;\n if (!ooui) {\n return null;\n }\n const items = ooui.map((button) => {\n const {\n id,\n caption,\n activated,\n buttonType,\n confirmMessage,\n icon,\n context,\n readOnly,\n danger,\n } = button;\n const [isRunning, setIsRunning] = useState<boolean>(false);\n\n async function onClick_confirm() {\n setIsRunning(true);\n await executeButtonAction({ type: buttonType, action: id, context });\n setIsRunning(false);\n }\n\n function onClick() {\n if (confirmMessage) {\n showConfirmDialog({\n confirmMessage,\n lang,\n onOk: () => {\n onClick_confirm();\n },\n });\n return;\n }\n\n onClick_confirm();\n }\n\n function getButtonIcon() {\n if (isRunning) return <LoadingOutlined />;\n if (icon) {\n const Icon: React.ElementType = iconMapper(icon) as any;\n return Icon && <Icon />;\n }\n return undefined;\n }\n\n return (\n <Menu.Item\n disabled={!activated || readOnly}\n onClick={onClick}\n icon={getButtonIcon()}\n danger={danger}\n >\n {caption}\n </Menu.Item>\n );\n });\n return <Menu>{items}</Menu>;\n};\n","import { useState, useEffect } from \"react\";\n\nconst MODAL_WIDTH_CONSTANT = 0.7;\n\nfunction getWindowDimensions() {\n const { innerWidth: width, innerHeight: height } = window;\n return {\n width,\n height,\n };\n}\n\nexport default function useWindowDimensions() {\n const [windowDimensions, setWindowDimensions] = useState(\n getWindowDimensions()\n );\n\n useEffect(() => {\n function handleResize() {\n setWindowDimensions(getWindowDimensions());\n }\n\n window.addEventListener(\"resize\", handleResize);\n return () => window.removeEventListener(\"resize\", handleResize);\n }, []);\n\n return {\n modalWidth: windowDimensions.width * MODAL_WIDTH_CONSTANT,\n modalHeight: windowDimensions.height,\n width: windowDimensions.width,\n height: windowDimensions.height,\n };\n}\n","import { ConnectionProviderType } from \"@/types\";\n\nexport default class ConnectionProvider {\n private static handler: ConnectionProviderType;\n\n public static init(handler: ConnectionProviderType): void {\n ConnectionProvider.handler = handler;\n }\n\n public static getHandler(): ConnectionProviderType {\n if (!ConnectionProvider.handler) {\n throw 'Must call init() first with a valid ConnectionProvider instance';\n }\n return ConnectionProvider.handler;\n }\n}\n","export const parseError = (errorResponse: string) => {\n let message;\n let type;\n let title;\n\n if (\n typeof errorResponse === \"string\" &&\n errorResponse.indexOf(\" -- \") !== -1 &&\n errorResponse.indexOf(\"\\n\\n\") !== -1\n ) {\n const splitted = errorResponse.split(\"\\n\\n\");\n message = splitted[1].replace(/\\n/g, \"<br />\");\n const args = splitted[0].split(\" -- \");\n type = args[0];\n title = args[1];\n } else {\n message = errorResponse;\n type = \"error\";\n title = \"Error\";\n }\n\n return {\n type,\n message,\n title,\n };\n};\n","import React from \"react\";\nimport { Modal } from \"antd\";\nimport { ExclamationCircleOutlined, WarningOutlined } from \"@ant-design/icons\";\nimport { parseError } from \"@/helpers/errorHelper\";\n\nconst { error, warning } = Modal;\n\nconst showDialog = (err: string) => {\n const { message, type, title } = parseError(err);\n\n const iconComponent =\n type === \"error\" ? <ExclamationCircleOutlined /> : <WarningOutlined />;\n\n const modalType = type === \"error\" ? error : warning;\n\n modalType({\n title,\n icon: iconComponent,\n centered: true,\n content: message,\n });\n};\n\nexport default showDialog;\n","import React, { useContext, useEffect, useRef, useState } from \"react\";\nimport { Modal, Button, Divider, Row, Space, Spin, Col } from \"antd\";\nimport {\n CheckOutlined,\n CloseOutlined,\n LoadingOutlined,\n} from \"@ant-design/icons\";\nimport useWindowDimensions from \"@/hooks/useWindowDimensions\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport TextArea from \"antd/lib/input/TextArea\";\nimport showErrorDialog from \"@/ui/ActionErrorDialog\";\n\ntype TranslationModalProps = {\n visible: boolean;\n model: string;\n id: number;\n field: string;\n onCloseModal: () => void;\n onSubmitSucceed: () => void;\n};\n\ntype Lang = {\n code: string;\n name: string;\n};\n\ntype ValuesForLangs = {\n [key: string]: string;\n};\n\nexport const TranslationModal = (props: TranslationModalProps) => {\n const { visible, onCloseModal, model, id, field, onSubmitSucceed } = props;\n\n const { modalWidth } = useWindowDimensions();\n const { t } = useContext(LocaleContext) as LocaleContextType;\n const [langs, setLangs] = useState<Lang[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [submitLoading, setSubmitLoading] = useState(false);\n const [valuesForLangs, setValuesForLangs] = useState<ValuesForLangs>({});\n\n const originalValuesForLangs = useRef<ValuesForLangs>();\n\n useEffect(() => {\n if (visible) {\n fetchData();\n } else {\n setValuesForLangs({});\n }\n }, [visible]);\n\n async function fetchData() {\n setIsLoading(true);\n\n try {\n const langs = await getLangs();\n await getValuesForLangs(langs);\n } catch (err) {\n showErrorDialog(err as any);\n }\n\n setIsLoading(false);\n }\n\n async function getLangs() {\n const results: any[] = (await ConnectionProvider.getHandler().search({\n params: [[\"translatable\", \"=\", \"1\"]],\n fields: [\"code\", \"name\"],\n model: \"res.lang\",\n })) as any;\n\n const langs = results.map((item: any) => {\n return {\n code: item.code,\n name: item.name,\n };\n });\n\n setLangs?.(langs);\n return langs;\n }\n\n async function getValuesForLangs(langs: Lang[]) {\n const retrievedValuesForLang: ValuesForLangs = {};\n\n for (const lang of langs) {\n const retrievedValue = (\n await ConnectionProvider.getHandler().readObjects({\n model,\n ids: [id],\n fieldsToRetrieve: [field],\n context: { lang: lang.code },\n })\n )[0];\n retrievedValuesForLang[lang.code] = retrievedValue[field] || \"\";\n }\n\n originalValuesForLangs.current = retrievedValuesForLang;\n setValuesForLangs(retrievedValuesForLang);\n }\n\n function getInputsForLangs() {\n return langs.map((lang: Lang, i: number) => {\n return (\n <Row key={i} style={{ paddingBottom: 20 }}>\n <Col flex=\"8rem\" style={{ paddingRight: 10 }}>\n {lang.name}\n </Col>\n <Col flex=\"auto\">\n <TextArea\n rows={4}\n value={valuesForLangs[lang.code] || \"\"}\n onChange={(event: any) => {\n setValuesForLangs({\n ...valuesForLangs,\n [lang.code]: event.target.value,\n });\n }}\n disabled={submitLoading}\n />\n </Col>\n </Row>\n );\n });\n }\n\n async function onSubmit() {\n setSubmitLoading(true);\n\n try {\n for (const langCode of Object.keys(valuesForLangs)) {\n if (\n valuesForLangs[langCode] !== originalValuesForLangs.current![langCode]\n ) {\n await ConnectionProvider.getHandler().update({\n model,\n id,\n values: { [field]: valuesForLangs[langCode] },\n context: {\n lang: langCode,\n },\n fields: {},\n });\n }\n }\n } catch (err) {\n showErrorDialog(err as any);\n }\n\n setSubmitLoading(false);\n onSubmitSucceed();\n }\n\n function content() {\n if (isLoading) {\n return <Spin />;\n }\n\n return (\n <>\n {getInputsForLangs()}\n <Divider />\n <Row justify=\"end\">\n <Space>\n <Button\n icon={<CloseOutlined />}\n onClick={onCloseModal}\n disabled={submitLoading}\n >\n {t(\"cancel\")}\n </Button>\n <Button\n icon={submitLoading ? <LoadingOutlined /> : <CheckOutlined />}\n disabled={submitLoading}\n onClick={onSubmit}\n style={{ marginLeft: 15 }}\n type=\"primary\"\n >\n {t(\"ok\")}\n </Button>\n </Space>\n </Row>\n </>\n );\n }\n\n return (\n (<Modal\n title={t(\"translate\")}\n centered\n width={modalWidth}\n open={visible}\n closable={true}\n onCancel={onCloseModal}\n footer={null}\n destroyOnClose\n maskClosable={false}\n >\n {content()}\n </Modal>)\n );\n};\n","import React from \"react\";\nimport { Button, Tooltip, ButtonProps } from \"antd\";\n\nexport type Props = ButtonProps & {\n tooltip: string;\n};\n\nfunction ButtonWithTooltip(props: Props) {\n const { tooltip, ...restProps } = props;\n\n return (\n <Tooltip title={tooltip}>\n <Button {...restProps} />\n </Tooltip>\n );\n}\n\nexport default ButtonWithTooltip;\n","import { Modal } from \"antd\";\n\nconst { info } = Modal;\n\nconst showDialog = (content: any) => {\n info({\n title: \"\",\n centered: true,\n content,\n });\n};\n\nexport default showDialog;\n","import React, { CSSProperties, useContext, useState } from \"react\";\nimport { Col, Input, Row, theme } from \"antd\";\nimport Field from \"@/common/Field\";\nimport { Char as CharOoui } from \"@gisce/ooui\";\nimport { WidgetProps } from \"@/types\";\nimport { TranslationModal } from \"../modals/TranslationModal\";\nimport { FormContext, FormContextType } from \"@/context/FormContext\";\nimport ButtonWithTooltip from \"@/common/ButtonWithTooltip\";\nimport { TranslationOutlined } from \"@ant-design/icons\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport showInfo from \"@/ui/InfoDialog\";\nconst { useToken } = theme;\n\ntype CharProps = WidgetProps & {\n isSearchField?: boolean;\n};\n\nexport const Char = (props: CharProps) => {\n const { ooui, isSearchField = false } = props;\n const { id, readOnly, isPassword, required, translatable } = ooui as CharOoui;\n const { token } = useToken();\n const requiredStyle =\n required && !readOnly\n ? { backgroundColor: token.colorPrimaryBg }\n : undefined;\n const formContext = useContext(FormContext) as FormContextType;\n const { elementHasLostFocus } = formContext || {};\n\n let input = (\n <Input\n disabled={readOnly || (translatable && !isSearchField)}\n id={id}\n style={requiredStyle}\n maxLength={(ooui as CharOoui).size}\n onBlur={elementHasLostFocus}\n />\n );\n\n if (isPassword) {\n input = (\n <Input.Password\n disabled={readOnly}\n id={id}\n onBlur={elementHasLostFocus}\n />\n );\n }\n\n if (translatable && !readOnly && !isSearchField) {\n input = <TranslatableChar field={id} requiredStyle={requiredStyle} />;\n }\n\n return (\n <Field required={required} {...props}>\n {input}\n </Field>\n );\n};\n\nconst TranslatableChar = ({\n value,\n field,\n requiredStyle,\n onChange,\n}: {\n value?: string;\n field: string;\n requiredStyle: CSSProperties | undefined;\n onChange?: (value: string) => void;\n}) => {\n const formContext = useContext(FormContext) as FormContextType;\n const {\n activeId,\n activeModel,\n fetchValues,\n formHasChanges,\n elementHasLostFocus,\n } = formContext || {};\n const [translationModalVisible, setTranslationModalVisible] = useState(false);\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n if (!activeId) {\n return (\n <>\n <Row gutter={8} wrap={false}>\n <Col flex=\"auto\">\n <Input\n value={value}\n id={field}\n style={requiredStyle}\n onChange={(event: any) => {\n onChange?.(event.target.value);\n }}\n onBlur={elementHasLostFocus}\n />\n </Col>\n <Col flex=\"32px\">\n <ButtonWithTooltip\n tooltip={t(\"translate\")}\n icon={<TranslationOutlined />}\n onClick={async () => {\n if (formHasChanges?.()) {\n showInfo(t(\"saveBeforeTranslate\"));\n } else {\n showInfo(t(\"enterTextBeforeTranslate\"));\n }\n }}\n >\n {t(\"translate\")}\n </ButtonWithTooltip>\n </Col>\n </Row>\n </>\n );\n }\n\n return (\n <>\n <div\n onClick={() => {\n if (formHasChanges?.()) {\n showInfo(t(\"saveBeforeTranslate\"));\n return;\n }\n\n if (!translationModalVisible) {\n setTranslationModalVisible(true);\n }\n }}\n >\n <Input\n value={value}\n disabled={true}\n id={field}\n onChange={(event: any) => {\n onChange?.(event.target.value);\n }}\n onBlur={elementHasLostFocus}\n style={{ cursor: \"pointer\", pointerEvents: \"none\", ...requiredStyle }}\n />\n </div>\n <TranslationModal\n id={activeId!}\n model={activeModel}\n field={field}\n visible={translationModalVisible}\n onCloseModal={() => {\n setTranslationModalVisible(false);\n }}\n onSubmitSucceed={() => {\n setTranslationModalVisible(false);\n fetchValues?.();\n }}\n />\n </>\n );\n};\n","import React from \"react\";\nimport { Select } from \"antd\";\nimport styled from \"styled-components\";\n\nimport Field from \"@/common/Field\";\nimport { Selection as SelectionOoui } from \"@gisce/ooui\";\nimport { WidgetProps } from \"@/types\";\nimport { theme } from \"antd\";\n\nconst { defaultAlgorithm, defaultSeed } = theme;\n\nconst mapToken = defaultAlgorithm(defaultSeed);\n\nconst { Option } = Select;\n\nexport const Selection = (props: WidgetProps) => {\n const { ooui } = props;\n const { required } = ooui;\n\n return (\n <Field required={required} type={\"any\"} {...props}>\n <SelectionInput {...props} />\n </Field>\n );\n};\n\ntype SelectionInputProps = WidgetProps & {\n onChange?: (value: any) => void;\n value?: string;\n};\n\nexport const SelectionInput = (props: SelectionInputProps) => {\n const { ooui, onChange, value } = props;\n const { selectionValues, readOnly, required } = ooui as SelectionOoui;\n\n const values = Array.from(selectionValues.entries());\n\n const options =\n values &&\n values.length &&\n values.map((entry: string[]) => {\n const [key, value] = entry;\n return (\n <Option key={key} value={key}>\n {value}\n </Option>\n );\n });\n\n const CustomSelect: any = required && !readOnly ? RequiredSelect : Select;\n\n return (\n <CustomSelect disabled={readOnly} onChange={onChange} value={value} optionFilterProp=\"children\" filterOption={\n (input: string, option: any) => option.children.toLowerCase().indexOf(input.toLowerCase()) >= 0\n } showSearch>\n {options}\n </CustomSelect>\n );\n};\n\nconst RequiredSelect = styled(Select)`\n &.ant-select:not(.ant-select-customize-input) .ant-select-selector {\n background-color: ${mapToken.colorPrimaryBg};\n }\n`;\n","import React from \"react\";\nimport { Checkbox as AntCheckbox } from \"antd\";\nimport styled from \"styled-components\";\n\nimport Field from \"@/common/Field\";\nimport { WidgetProps } from \"@/types\";\nimport { theme } from \"antd\";\n\nconst { defaultAlgorithm, defaultSeed } = theme;\n\nconst mapToken = defaultAlgorithm(defaultSeed);\n\nexport const Boolean = (props: WidgetProps) => {\n const { ooui } = props;\n const { id, readOnly, required } = ooui;\n\n return (\n <Field {...props} valuePropName=\"checked\">\n <BooleanInput id={id} readOnly={readOnly} required={required} />\n </Field>\n );\n};\n\nconst BooleanInput = (props: any) => {\n const { required, readOnly, ...restProps } = props;\n\n const CustomCheckbox: any =\n required && !readOnly ? RequiredCheckbox : AntCheckbox;\n\n return (\n <div className=\"flex flex-row\">\n <CustomCheckbox disabled={readOnly} {...restProps} />\n </div>\n );\n};\n\nconst RequiredCheckbox = styled(AntCheckbox)`\n .ant-checkbox-inner {\n background-color: ${mapToken.colorPrimaryBg};\n }\n\n .ant-checkbox-checked .ant-checkbox-inner {\n background-color: ${mapToken.colorPrimary};\n }\n`;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","import { fileTypeFromBuffer } from \"file-type-buffer-browser\";\n\nexport function getFilesize(base64string: string) {\n const buffer = Buffer.from(base64string, \"base64\");\n const inKbs = buffer.length / 1e3;\n return `${Math.round((inKbs + Number.EPSILON) * 100) / 100} KB`;\n}\n\nexport async function getMimeType(base64string: string) {\n const mimeInfo = await fileTypeFromBuffer(\n Buffer.from(base64string, \"base64\")\n );\n if (!mimeInfo) {\n return {\n mime: \"text/plain\",\n ext: \"txt\",\n };\n }\n\n return mimeInfo;\n}\n\nexport const toBase64 = (file: File): Promise<string> =>\n new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = (e: any) => resolve(e.target.result.split(\",\")[1]);\n reader.onerror = (error) => reject(error);\n });\n\nexport function openBase64InNewTab(data: string, mimeType: string) {\n var byteCharacters = atob(data);\n var byteNumbers = new Array(byteCharacters.length);\n for (var i = 0; i < byteCharacters.length; i++) {\n byteNumbers[i] = byteCharacters.charCodeAt(i);\n }\n var byteArray = new Uint8Array(byteNumbers);\n var file = new Blob([byteArray], { type: mimeType + \";base64\" });\n var fileURL = URL.createObjectURL(file);\n window.open(fileURL);\n}\n","import React, { useContext, useRef } from \"react\";\nimport { Row, Space } from \"antd\";\nimport Field from \"@/common/Field\";\nimport { Image as ImageOoui } from \"@gisce/ooui\";\nimport ButtonWithTooltip from \"@/common/ButtonWithTooltip\";\nimport {\n FolderOpenOutlined,\n DownloadOutlined,\n ClearOutlined,\n} from \"@ant-design/icons\";\n\nimport { toBase64, getMimeType } from \"@/helpers/filesHelper\";\nimport iconMapper from \"@/helpers/iconMapper\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\ntype Props = {\n ooui: ImageOoui;\n};\n\nexport const Image = (props: Props) => {\n const { ooui } = props;\n const { required, id } = ooui;\n\n const Icon: React.ElementType = iconMapper(id) as any;\n\n if (Icon) {\n return <Icon />;\n }\n\n return (\n <Field required={required} {...props}>\n <ImageInput ooui={ooui} />\n </Field>\n );\n};\n\ninterface ImageInputProps {\n ooui: ImageOoui;\n value?: string;\n onChange?: (value: string | undefined) => void;\n}\n\nexport const ImageInput = (props: ImageInputProps) => {\n const { ooui, value, onChange } = props;\n const { readOnly } = ooui as ImageOoui;\n const inputFile = useRef(null);\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n const triggerChange = (changedValue?: string) => {\n onChange?.(changedValue);\n };\n\n async function downloadFile() {\n const fileType = await getMimeType(value!);\n const linkSource = `data:${fileType?.mime};base64,${value}`;\n const downloadLink = document.createElement(\"a\");\n\n downloadLink.href = linkSource;\n downloadLink.download = `image.${fileType?.ext}`;\n downloadLink.click();\n }\n\n async function onChangeFile(event: any) {\n event.stopPropagation();\n event.preventDefault();\n const file = event.target.files[0];\n const b64: string = await toBase64(file);\n triggerChange(b64);\n }\n\n function clearFile() {\n triggerChange(undefined);\n }\n\n return (\n <>\n <Row gutter={8} wrap={false} justify=\"center\">\n {value && (\n <img\n src={`data:image/*;base64,${value}`}\n style={{ maxWidth: \"100px\" }}\n />\n )}\n <input\n type=\"file\"\n id=\"file\"\n ref={inputFile}\n accept=\"image/*\"\n style={{ display: \"none\" }}\n onChange={onChangeFile}\n />\n </Row>\n <Row gutter={8} wrap={false} justify=\"center\" className=\"pt-5\">\n <Space>\n <ButtonWithTooltip\n tooltip={t(\"uploadNewImage\")}\n icon={<FolderOpenOutlined />}\n disabled={readOnly}\n onClick={() => {\n const fileUploadField = inputFile.current as any;\n fileUploadField.click();\n }}\n />\n <ButtonWithTooltip\n tooltip={t(\"download\")}\n disabled={!value}\n onClick={downloadFile}\n icon={<DownloadOutlined />}\n />\n <ButtonWithTooltip\n tooltip={t(\"clear\")}\n disabled={readOnly || !value}\n onClick={clearFile}\n icon={<ClearOutlined />}\n />\n </Space>\n </Row>\n </>\n );\n};\n","import React from \"react\";\nimport Field from \"@/common/Field\";\nimport { Char as CharOoui } from \"@gisce/ooui\";\nimport { WidgetProps } from \"@/types\";\nimport { GridUi } from \"@gisce/fiber-diagram\";\n\nexport const FiberGrid = (props: WidgetProps) => {\n const { ooui } = props;\n const { required } = ooui as CharOoui;\n\n return (\n <Field required={required} {...props}>\n <FiberGridInput />\n </Field>\n );\n};\n\ninterface FiberGridInputProps {\n value?: string;\n onChange?: (value: string) => void;\n}\n\nexport const FiberGridInput = (props: FiberGridInputProps) => {\n const { value, onChange } = props;\n\n if (!value) {\n return null;\n }\n\n // Validate string json\n try {\n JSON.parse(value);\n } catch (e) {\n console.log(e);\n return null;\n }\n\n return (\n <GridUi\n inputJson={value}\n onChange={(newValue) => {\n if (onChange) {\n onChange(newValue);\n }\n }}\n />\n );\n};\n","import {\n Tree as TreeOoui,\n Selection,\n Many2one,\n Boolean,\n Reference,\n} from \"@gisce/ooui\";\nimport { TreeView, Column } from \"@/types\";\n\nconst getTree = (treeView: TreeView): TreeOoui => {\n const xml = treeView.arch;\n const fields = treeView.fields;\n const tree = new TreeOoui(fields);\n tree.parse(xml);\n return tree;\n};\n\nconst getTableColumns = (\n tree: TreeOoui,\n components: any,\n context: any\n): Array<Column> => {\n const tableColumns = tree.columns.map((column) => {\n const type = column.type;\n const key = column.id;\n const component = components?.[type];\n let render;\n\n if (component) {\n render = (item: any) => {\n return component(item, key, column, context);\n };\n }\n\n return {\n key,\n dataIndex: key,\n title: column.label,\n render,\n sorter: (a: any, b: any) => {\n let aItem = a[key] || \"\",\n bItem = b[key] || \"\";\n\n if (type === \"many2one\") {\n aItem = a[key]?.value || \"\";\n bItem = b[key]?.value || \"\";\n }\n\n if (aItem < bItem) return -1;\n if (aItem > bItem) return 1;\n return 0;\n },\n };\n });\n return tableColumns;\n};\n\nconst getTableItems = (treeOoui: TreeOoui, results: Array<any>): Array<any> => {\n const tableItems = results.map((item: any) => {\n const parsedItem: any = {};\n Object.keys(item).map((key) => {\n if (key === \"id\") {\n parsedItem[key] = item[key];\n } else {\n const widget = treeOoui.findById(key);\n\n if (widget instanceof Reference) {\n parsedItem[key] = item[key];\n } else if (widget instanceof Selection) {\n const selection = widget;\n parsedItem[key] = item[key];\n } else if (widget instanceof Many2one) {\n parsedItem[key] = item[key] &&\n Array.isArray(item[key]) &&\n item[key].length === 2 && {\n model: widget.relation,\n id: item[key][0],\n value: item[key][1],\n };\n } else if (widget instanceof Boolean) {\n parsedItem[key] = item[key];\n } else if (widget) {\n parsedItem[key] = item[key] === false ? \"\" : item[key];\n } else {\n parsedItem[key] = item[key];\n }\n }\n });\n return parsedItem;\n });\n\n return tableItems;\n};\n\nfunction itemHasBooleans({ values, fields }: { values: any; fields: any }) {\n if (!fields) {\n return false;\n }\n return Object.keys(values).some((key) => {\n return fields[key] !== undefined && fields[key].type === \"boolean\";\n });\n}\n\nfunction convertBooleansToNumeric({\n values,\n fields,\n}: {\n values: any;\n fields: any;\n}) {\n if (!fields) {\n return values;\n }\n const filteredValues: any = {};\n Object.keys(values).forEach((key) => {\n if (fields[key] !== undefined && fields[key].type === \"boolean\") {\n filteredValues[key] = values[key] === true ? 1 : 0;\n }\n });\n return { ...values, ...filteredValues };\n}\n\nfunction getColorMap(colorsValue: any) {\n return getItemsAttributes(colorsValue, \"colors\");\n}\n\nfunction getStatusMap(values: any) {\n return getItemsAttributes(values, \"status\");\n}\n\nfunction getItemsAttributes(attributes: object[], attribute: string) {\n if (!attributes) {\n return undefined;\n }\n const map: any = {};\n attributes.forEach((entry: any) => {\n map[entry.id] = entry[attribute];\n });\n return map;\n}\n\nfunction sortResults({\n resultsToSort,\n sorter,\n fields,\n}: {\n resultsToSort: any[];\n sorter: any;\n fields: any;\n}) {\n if (!sorter) {\n return resultsToSort;\n }\n\n const { id: field, desc } = sorter;\n const order = desc === false ? \"ascend\" : \"descend\";\n\n const type = fields[field].type;\n\n const sortFn = (a: any, b: any) => {\n let aItem = a[field] || \"\",\n bItem = b[field] || \"\";\n\n if (type === \"many2one\") {\n aItem = a[field]?.[1] || \"\";\n bItem = b[field]?.[1] || \"\";\n }\n\n if (aItem === bItem) {\n return 0;\n }\n\n if (order === \"ascend\") {\n return aItem > bItem ? 1 : -1;\n }\n\n return aItem < bItem ? 1 : -1;\n };\n\n return resultsToSort.sort(sortFn);\n}\n\nfunction hasActualValues(obj: Record<string, any>): boolean {\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n if (obj[key] !== undefined) {\n return true;\n }\n }\n }\n return false;\n}\n\nexport {\n getTableColumns,\n getTableItems,\n getTree,\n convertBooleansToNumeric,\n itemHasBooleans,\n getColorMap,\n getStatusMap,\n sortResults,\n hasActualValues,\n};\n","import { One2manyItem } from \"@/widgets/base/one2many/One2manyInput\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport { TreeView, View, ViewType } from \"@/types\";\nimport { getColorMap, getTree } from \"./treeHelper\";\n\ntype ReadObjectValuesOptions = {\n items: One2manyItem[];\n model: string;\n context?: any;\n currentView: ViewType;\n formView: {\n fields: any;\n };\n treeView: {\n arch?: string;\n fields: any;\n };\n};\n\nconst readObjectValues = async (\n options: ReadObjectValuesOptions\n): Promise<[One2manyItem[], any]> => {\n const {\n items,\n model,\n formView,\n treeView,\n context,\n currentView = {},\n } = options;\n\n const temporalItems: One2manyItem = items.filter(\n (item) => item.operation !== \"original\"\n );\n\n // We get a number array of id's\n const idsToFetch = items\n .filter((item) => item.operation === \"original\")\n .map((item) => item.id) as number[];\n\n const fieldsToRetrieve: { [key: string]: any } = {\n form: formView.fields,\n tree: treeView.fields,\n };\n\n let values = [],\n evaluatedColorsForTree;\n\n if (currentView === \"tree\" && treeView?.arch) {\n const colors = getTree(treeView as TreeView)?.colors;\n const results = await ConnectionProvider.getHandler().readEvalUiObjects({\n model,\n ids: idsToFetch,\n arch: treeView?.arch!,\n fields: treeView!.fields,\n context,\n attrs: colors && {\n colors,\n },\n });\n values = results[0];\n evaluatedColorsForTree = getColorMap(results[1]);\n } else {\n values = await ConnectionProvider.getHandler().readObjects({\n model,\n ids: idsToFetch,\n fields: fieldsToRetrieve[currentView as string],\n context,\n });\n }\n\n const filteredValues = values.map((result: any) => {\n const resultFormValues: any = {};\n Object.keys(result).forEach((key) => {\n if (\n fieldsToRetrieve[currentView as string].hasOwnProperty(key) ||\n key === \"id\"\n ) {\n resultFormValues[key] = result[key];\n }\n });\n return resultFormValues;\n });\n\n // We fill the values property of the One2manyItem with the retrieved values from the API\n const originalItemsWithFetchedValues: One2manyItem[] = items.map((item) => {\n const fetchedItemValues = filteredValues.find(\n (itemValues: any) => itemValues.id === item.id\n );\n\n const itemWithFetchedValues = {\n ...item,\n };\n\n if (currentView === \"form\") {\n itemWithFetchedValues[\"values\"] = fetchedItemValues;\n } else if (currentView === \"tree\") {\n itemWithFetchedValues[\"treeValues\"] = fetchedItemValues;\n }\n return itemWithFetchedValues;\n });\n\n return [\n originalItemsWithFetchedValues.concat(temporalItems),\n evaluatedColorsForTree,\n ];\n};\n\ntype RemoveItemOptions = {\n model: string;\n activeId: number;\n fieldName: string;\n idsToRemove: number[];\n fields: any;\n isMany2many: boolean;\n};\n\nconst removeItems = async (options: RemoveItemOptions) => {\n const { model, activeId, fieldName, idsToRemove, fields, isMany2many } =\n options;\n\n const values: any = {};\n values[fieldName] = [];\n\n for (const idToRemove of idsToRemove) {\n values[fieldName].push([isMany2many ? 3 : 2, idToRemove]);\n }\n\n await ConnectionProvider.getHandler().update({\n model,\n id: activeId,\n values,\n fields,\n });\n};\n\ntype LinkItemOptions = {\n model: string;\n activeId: number;\n fieldName: string;\n id: number;\n fields: any;\n};\n\nconst linkItem = async (options: LinkItemOptions) => {\n const { model, activeId, fieldName, id, fields } = options;\n\n const values: any = {};\n values[fieldName] = [[4, id]];\n\n await ConnectionProvider.getHandler().update({\n model,\n id: activeId,\n values,\n fields,\n });\n};\n\nconst getNextPendingId = (items: One2manyItem[]) => {\n const negativeIds: number[] = items\n .filter((item) => item.id && item.id < 0)\n .map((item) => item.id!);\n if (negativeIds.length === 0) {\n return -1;\n } else {\n return Math.min(...negativeIds) - 1;\n }\n};\n\nconst convertToPlain2ManyValues = (values: any, fields: any) => {\n const result: any = {};\n Object.keys(values).forEach((key) => {\n if (\n fields.hasOwnProperty(key) &&\n (fields[key].type === \"one2many\" || fields[key].type === \"many2many\") &&\n values[key] &&\n values[key]?.items\n ) {\n result[key] = values[key].items.filter(\n (item: One2manyItem) => item.operation !== \"pendingRemove\"\n );\n } else {\n result[key] = values[key];\n }\n });\n return result;\n};\nexport {\n readObjectValues,\n removeItems,\n linkItem,\n getNextPendingId,\n convertToPlain2ManyValues,\n};\n","import React, { useContext, useState } from \"react\";\nimport { Timeline as TimelineOoui } from \"@gisce/ooui\";\nimport Field from \"@/common/Field\";\nimport { One2manyItem, One2manyValue } from \"../base/one2many/One2manyInput\";\nimport useDeepCompareEffect from \"use-deep-compare-effect\";\nimport { Views, ViewType } from \"@/types\";\nimport { FormContext, FormContextType } from \"@/context/FormContext\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport { Spin, Alert, Timeline as AntTimeline } from \"antd\";\nimport { readObjectValues } from \"@/helpers/one2manyHelper\";\nimport { FormModal } from \"../modals/FormModal\";\n\ntype TimelineProps = {\n ooui: TimelineOoui;\n};\n\ntype TimelineInputProps = TimelineProps & {\n value?: One2manyValue;\n onChange?: (value: One2manyValue) => void;\n views: Views;\n};\n\nexport const Timeline = (props: TimelineProps) => {\n const { ooui } = props;\n const { relation, context, views: oouiViews } = ooui;\n const [isLoading, setIsLoading] = useState<boolean>(true);\n const [error, setError] = useState<string>();\n const [views, setViews] = useState<Views>(new Map<string, any>());\n const formContext = useContext(FormContext) as FormContextType;\n const { getContext } = formContext || {};\n\n useDeepCompareEffect(() => {\n fetchData();\n }, [ooui]);\n\n const getViewData = async (type: ViewType) => {\n if (oouiViews && oouiViews[type]) {\n return oouiViews[type];\n }\n return await ConnectionProvider.getHandler().getView({\n model: relation,\n type,\n context: { ...getContext?.(), ...context },\n });\n };\n\n const fetchData = async () => {\n setIsLoading(true);\n setError(undefined);\n\n try {\n const formView = await getViewData(\"form\");\n const treeView = await getViewData(\"tree\");\n views.set(\"form\", formView);\n views.set(\"tree\", treeView);\n setViews(views);\n } catch (err) {\n setError(err as any);\n } finally {\n setIsLoading(false);\n }\n };\n\n if (isLoading) {\n return <Spin />;\n }\n\n if (error) {\n return <Alert className=\"mt-10\" message={error} type=\"error\" banner />;\n }\n\n return (\n <Field type={\"array\"} {...props}>\n <TimelineInput ooui={ooui} views={views} />\n </Field>\n );\n};\n\nexport const TimelineInput = (props: TimelineInputProps) => {\n const { value, views, ooui, onChange } = props;\n const { items = [] } = value || {};\n\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [error, setError] = useState<string>();\n const [showFormModal, setShowFormModal] = useState<boolean>(false);\n const [modalItem, setModalItem] = useState<One2manyItem>();\n const { relation, context, readOnly, summaryField, titleField } = ooui;\n const itemsToShow = items.filter((item) => item.values);\n\n const formContext = useContext(FormContext) as FormContextType;\n const { getContext } = formContext || {};\n\n useDeepCompareEffect(() => {\n fetchData();\n }, [items]);\n\n const triggerChange = (changedValue: Array<One2manyItem>) => {\n onChange?.({\n items: changedValue,\n });\n };\n\n async function fetchData() {\n setIsLoading(true);\n setError(undefined);\n\n try {\n const [itemsWithValues] = await readObjectValues({\n treeView: {\n fields: views.get(\"tree\").fields,\n arch: views.get(\"tree\").arch\n },\n formView: {\n fields: views.get(\"form\").fields,\n },\n model: relation,\n items,\n context: { ...getContext?.(), ...context },\n currentView: \"form\",\n });\n\n triggerChange(itemsWithValues);\n } catch (err) {\n setError(err as any);\n } finally {\n setIsLoading(false);\n }\n }\n\n if (error) {\n return <Alert className=\"mt-10\" message={error} type=\"error\" banner />;\n }\n\n if (isLoading) {\n return <Spin />;\n }\n\n return (\n <>\n <AntTimeline style={{ padding: \"1rem\" }}>\n {itemsToShow.map((item, index) => {\n return (\n <div key={index}>\n <AntTimeline.Item key={index}>\n <div\n style={{ display: \"inline-block\", cursor: \"pointer\" }}\n onClick={() => {\n setModalItem(\n itemsToShow.find(\n (searchItem) => item.id === searchItem.id\n )\n );\n setShowFormModal(true);\n }}\n >\n <strong>{item.values?.[titleField]}</strong>\n </div>\n <br />\n <div\n style={{ display: \"inline-block\", cursor: \"pointer\" }}\n onClick={() => {\n setModalItem(\n itemsToShow.find(\n (searchItem) => item.id === searchItem.id\n )\n );\n setShowFormModal(true);\n }}\n >\n {item.values?.[summaryField]}\n </div>\n </AntTimeline.Item>\n </div>\n );\n })}\n </AntTimeline>\n <FormModal\n formView={views.get(\"form\")}\n model={relation}\n id={modalItem?.id}\n values={modalItem?.values}\n defaultValues={modalItem?.defaultValues}\n visible={showFormModal}\n onSubmitSucceed={() => {\n setShowFormModal(false);\n }}\n parentContext={{ ...getContext?.(), ...context }}\n onCancel={() => {\n setShowFormModal(false);\n }}\n readOnly={readOnly}\n postSaveAction={fetchData}\n />\n </>\n );\n};\n","import React from \"react\";\nimport { Tooltip, theme } from \"antd\";\nimport { Statistic, Card } from \"antd\";\nimport { Indicator as IndicatorOoui } from \"@gisce/ooui\";\nimport { WidgetProps } from \"@/types\";\nimport Field from \"@/common/Field\";\nimport { QuestionCircleOutlined } from \"@ant-design/icons\";\nimport iconMapper from \"@/helpers/iconMapper\";\nconst { useToken } = theme;\n\ntype IndicatorProps = WidgetProps & {\n ooui: IndicatorOoui;\n value?: number;\n};\n\nexport const Indicator = (props: IndicatorProps) => {\n const { ooui } = props;\n\n return (\n <Field ooui={ooui}>\n <IndicatorInput ooui={ooui} />\n </Field>\n );\n};\n\ntype IndicatorInputProps = {\n ooui: IndicatorOoui;\n value?: any;\n};\n\nconst IndicatorInput = (props: IndicatorInputProps) => {\n const { token } = useToken();\n const { ooui, value } = props;\n const title = (\n <>\n <span>{ooui.label} </span>\n {ooui.tooltip && (\n <Tooltip title={ooui.tooltip}>\n <QuestionCircleOutlined\n className=\"pr-1 text-xs\"\n style={{ color: token.colorPrimaryBg }}\n />\n </Tooltip>\n )}\n </>\n );\n const Icon: React.ElementType = iconMapper(ooui.icon) as any;\n let formattedValue = value;\n if (ooui.selectionValues.size) {\n formattedValue = ooui.selectionValues.get(value);\n } else if (Array.isArray(value)) {\n formattedValue = value[1];\n }\n const field = (\n <Statistic\n title={title}\n prefix={Icon && <Icon />}\n suffix={ooui.suffix}\n value={formattedValue}\n />\n );\n if (ooui.card) {\n return <Card>{field}</Card>;\n } else {\n return field;\n }\n};\n","import { One2manyItem } from \"@/widgets/base/one2many/One2manyInput\";\nimport { Form as FormOoui } from \"@gisce/ooui\";\n\nconst filteredValues = (values: any, fields: any) => {\n if (!fields) {\n return values;\n }\n const filteredValues: any = {};\n Object.keys(values).forEach((key) => {\n if (fields[key] === undefined) {\n // console.log(`${key} is not in fields`);\n filteredValues[key] = values[key];\n } else if (values[key] === false && fields[key].type !== \"boolean\") {\n // Do nothing - filter the field.\n } else if (fields[key].type === \"boolean\") {\n const boolValue = values[key];\n if (boolValue === 0) {\n filteredValues[key] = false;\n } else if (boolValue === 1) {\n filteredValues[key] = true;\n } else {\n filteredValues[key] = values[key];\n }\n } else {\n filteredValues[key] = values[key];\n }\n });\n return filteredValues;\n};\n\nexport const processValues = (values: any, fields: any) => {\n const filterBooleans = filteredValues(values, fields);\n return filterBooleans;\n};\n\nexport const getTouchedValues = ({\n source,\n target,\n fields,\n}: {\n source: any;\n target: any;\n fields: any;\n}) => {\n const differences: any = {};\n Object.keys(target).forEach((key) => {\n const is2Many = fields[key]\n ? fields[key].type === \"one2many\" || fields[key].type === \"many2many\"\n : false;\n\n if (is2Many) {\n const sourceValue = JSON.stringify(source[key]);\n const targetValue = JSON.stringify(target[key]);\n if (sourceValue === targetValue) {\n return;\n }\n\n const nonOriginalItems =\n target[key]?.items?.filter(\n (item: One2manyItem) => item.operation !== \"original\"\n ) || [];\n\n if (nonOriginalItems.length > 0) {\n differences[key] = target[key];\n }\n } else if (Array.isArray(target[key])) {\n if (source[key] === undefined) {\n differences[key] = target[key];\n } else if (fields[key].type === \"many2one\") {\n if (!Array.isArray(source[key])) {\n // This will mean the source many2one value is a numeric id\n const numericId = source[key];\n const [targetNumericId] = target[key];\n if (numericId !== targetNumericId) {\n differences[key] = target[key];\n }\n } else {\n const sourceValue = JSON.stringify(source[key]);\n const targetValue = JSON.stringify(target[key]);\n if (sourceValue !== targetValue) {\n differences[key] = target[key];\n }\n }\n } else {\n const sourceValue = JSON.stringify(source[key]);\n const targetValue = JSON.stringify(target[key]);\n if (sourceValue !== targetValue) {\n differences[key] = target[key];\n }\n }\n } else if (source[key] !== target[key]) {\n if (target[key] === undefined) {\n differences[key] = null;\n } else {\n differences[key] = target[key];\n }\n }\n });\n return differences;\n};\n\nexport const checkFieldsType = ({\n changedFields,\n formOoui,\n types,\n}: {\n changedFields: string[];\n formOoui: FormOoui;\n types: string[];\n}) => {\n const valuesChecked = changedFields.map((key) => {\n const fieldType = formOoui?.findById(key)?.type!;\n return types.includes(fieldType);\n });\n return valuesChecked.some((i) => i === true);\n};\n\nexport const mergeFieldsDomain = ({\n fieldsDomain,\n fields,\n}: {\n fieldsDomain: any;\n fields: any;\n}) => {\n const output: any = {};\n\n Object.keys(fields).forEach((key) => {\n output[key] = fields[key];\n\n if (fieldsDomain[key]) {\n output[key].domain = fieldsDomain[key];\n }\n });\n\n return output;\n};\n\nexport const getValuesForDomain = (domain: any[]) => {\n const values: any = {};\n\n if (!domain || !Array.isArray(domain) || domain?.length === 0) {\n return {};\n }\n\n domain.forEach((entry) => {\n if (entry?.[1] === \"=\") {\n values[entry[0]] = entry[2];\n }\n });\n\n return values;\n};\n\nexport const getOnChangePayload = ({\n onChangeFieldActionArgs,\n values,\n parentValues = {},\n}: {\n onChangeFieldActionArgs: any[];\n values: any;\n parentValues?: any;\n}) => {\n const payload: any = {};\n onChangeFieldActionArgs.forEach((arg: string) => {\n const splittedArg = arg.split(\"\");\n\n if (arg === \"True\") {\n payload[arg] = true;\n } else if (arg === \"False\") {\n payload[arg] = false;\n } else if (values[arg]) {\n payload[arg] = values[arg];\n } else if (\n splittedArg[0] === \"'\" &&\n splittedArg[splittedArg.length - 1] === \"'\" &&\n splittedArg.filter((i: string) => i === \"'\").length === 2\n ) {\n payload[arg] = arg.replace(/'/g, \"\");\n } else if (splittedArg.includes(\"'\")) {\n // This is a string with a variable in it.\n // TODO: pending implement.\n payload[arg] = arg;\n } else if (arg.indexOf(\"parent.\") !== -1) {\n const parentKey = arg.replace(\"parent.\", \"\");\n payload[arg] = parentValues[parentKey] || false;\n } else {\n payload[arg] = false;\n }\n });\n return payload;\n};\n\nexport const mergeSearchFields = (searchFields: any[]) => {\n const mergedSearchFields = {\n primary: [],\n secondary: [],\n };\n\n searchFields.forEach((sf) => {\n if (!sf) {\n return;\n }\n\n mergedSearchFields.primary = mergedSearchFields.primary.concat(sf.primary);\n mergedSearchFields.secondary = mergedSearchFields.secondary.concat(\n sf.secondary\n );\n });\n\n return {\n primary: mergedSearchFields.primary.filter(onlyUnique),\n secondary: mergedSearchFields.secondary.filter(onlyUnique),\n };\n};\n\nfunction onlyUnique(value: any, index: number, self: any) {\n return self.indexOf(value) === index;\n}\n\nexport const transformPlainMany2Ones = ({\n values,\n fields,\n}: {\n values: any;\n fields: any;\n}) => {\n let reformattedValues: { [key: string]: any } = {};\n\n Object.keys(values).forEach((key) => {\n const value = values[key];\n\n if (\n fields[key] &&\n fields[key].type === \"many2one\" &&\n value &&\n Array.isArray(value) &&\n value.length === 2\n ) {\n reformattedValues[key] = value[0];\n } else {\n reformattedValues[key] = value;\n }\n });\n\n return reformattedValues;\n};\n\n\nexport const colorFromString = (text: string) => {\n let hash = 0;\n text = text.toString().padEnd(10, '0');\n for (let i = 0; i < text.length; i++) {\n hash = text.charCodeAt(i) + ((hash << 5) - hash);\n }\n let hexColour = '#';\n for (let i = 0; i < 3; i++) {\n var value = (hash >> (i * 8)) & 0xFF;\n hexColour += ('00' + value.toString(16)).slice(-2);\n }\n return hexColour;\n}\n\nexport const colorTextFromBackground = (color: string) => {\n function getRGB(c: string): number {\n return parseInt(c, 16) || parseInt(c)\n }\n\n function getsRGB(c: string ) {\n return getRGB(c) / 255 <= 0.03928\n ? getRGB(c) / 255 / 12.92\n : Math.pow((getRGB(c) / 255 + 0.055) / 1.055, 2.4)\n }\n\n function getLuminance(hexColor: string) {\n return (\n 0.2126 * getsRGB(hexColor.substr(1, 2)) +\n 0.7152 * getsRGB(hexColor.substr(3, 2)) +\n 0.0722 * getsRGB(hexColor.substr(-2))\n )\n }\n\n function getContrast(f: string, b: string) {\n const L1 = getLuminance(f)\n const L2 = getLuminance(b)\n return (Math.max(L1, L2) + 0.05) / (Math.min(L1, L2) + 0.05)\n }\n\n function getTextColor(bgColor: string) {\n const whiteContrast = getContrast(bgColor, '#ffffff')\n const blackContrast = getContrast(bgColor, '#000000')\n\n return whiteContrast > blackContrast ? '#ffffff' : '#000000'\n }\n\n return getTextColor(color);\n\n}\n\n\nexport const stringFormat = (text: string, values: any): string => {\n return text.replace(/\\{([^}]+)\\}/g, (match, key) => values[key] !== undefined ? values[key] : match);\n}\n","import React from \"react\";\nimport Field from \"@/common/Field\";\nimport { WidgetProps } from \"@/types\";\nimport { Tag as AntdTag, TagProps } from 'antd';\nimport { isPresetStatusColor, isPresetColor } from 'antd/lib/_util/colors'\nimport { colorFromString } from \"@/helpers/formHelper\";\n\nexport const Tag = (props: WidgetProps) => {\n return (\n <Field {...props}>\n <TagInput {...props}/>\n </Field>\n );\n};\n\nexport const TagInput = (props: any) => {\n const {ooui, value} = props;\n let formattedValue = value;\n let colorValue = value;\n if (ooui.selectionValues.size) {\n formattedValue = ooui.selectionValues.get(value);\n } else if (Array.isArray(value)) {\n colorValue = value[0];\n formattedValue = value[1];\n }\n if (!value) {\n return null\n }\n const color = ooui.colors === \"auto\" ? colorFromString(colorValue) : ooui.colors[colorValue] || colorFromString(colorValue);\n return (\n <CustomTag color={color}>{formattedValue}</CustomTag>\n );\n}\n\n\nexport const CustomTag = (props: TagProps) => {\n let { color } = props;\n let style = {}\n if (!isPresetStatusColor(props.color) && !isPresetColor(props.color)) {\n style = {\n color: color,\n borderColor: color,\n borderStyle: \"solid\",\n borderWidth: \"1px\",\n }\n color = `${color}20`;\n }\n return <AntdTag {...props} style={style} color={color}>{props.children}</AntdTag>\n}\n","import React, { useContext, useState } from \"react\";\nimport { Tags as TagsOoui } from \"@gisce/ooui\";\nimport Field from \"@/common/Field\";\nimport { WidgetProps } from \"@/types\";\nimport { One2manyItem, One2manyValue } from \"../base/one2many/One2manyInput\";\nimport useDeepCompareEffect from \"use-deep-compare-effect\";\nimport { FormContext, FormContextType } from \"@/context/FormContext\";\nimport { Alert, Select } from \"antd\";\nimport { colorFromString, transformPlainMany2Ones } from \"@/helpers/formHelper\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport { CustomTag } from \"@/widgets/custom/Tag\";\n\ntype TagsProps = WidgetProps & {\n ooui: TagsOoui;\n};\n\ntype TagsInputProps = TagsProps & {\n value?: One2manyValue;\n onChange?: (value: One2manyValue) => void;\n};\n\nexport const Tags = (props: TagsProps) => {\n const { ooui } = props;\n\n return (\n <Field type={\"array\"} {...props}>\n <TagsInput ooui={ooui} />\n </Field>\n );\n};\n\nexport const TagsInput = (props: TagsInputProps) => {\n const { value, ooui, onChange } = props;\n const { items = [] } = value || {};\n const itemsToShow = items\n .filter((item) => item.operation !== \"pendingRemove\")\n .map((item) => item.id) as number[];\n\n const [options, setOptions] = useState<any[]>([]);\n const [error, setError] = useState<string>();\n const [isLoadingOptions, setIsLoadingOptions] = useState<boolean>(false);\n const { relation, context, readOnly, field } = ooui;\n\n const formContext = useContext(FormContext) as FormContextType;\n const { getContext } = formContext || {};\n\n useDeepCompareEffect(() => {\n fetchOptions();\n }, [items]);\n\n const triggerChange = (changedValue: Array<One2manyItem>) => {\n onChange?.({\n items: changedValue,\n });\n };\n\n async function fetchOptions() {\n setIsLoadingOptions(true);\n let params: any[] = [];\n try {\n if (readOnly) {\n params = [[\"id\", \"in\", itemsToShow]];\n }\n if (ooui.domain) {\n const evaluatedDomain =\n await ConnectionProvider.getHandler().evalDomain({\n domain: ooui.domain,\n values: transformPlainMany2Ones({\n fields: formContext?.getFields(),\n values: formContext.getPlainValues(),\n }),\n fields: formContext?.getFields(),\n context: formContext.getContext(),\n });\n params = [...params, ...evaluatedDomain];\n }\n\n const optionsRead = await ConnectionProvider.getHandler().search({\n model: relation,\n params: params,\n fields: [field],\n context: { ...getContext?.(), ...context },\n });\n const options = optionsRead.map((item: any) => {\n const value = item[field];\n let formattedValue = value;\n if (Array.isArray(value)) {\n formattedValue = value[1];\n }\n return { label: formattedValue, value: item.id };\n });\n setOptions(options);\n } catch (err) {\n setError(err as any);\n } finally {\n setIsLoadingOptions(false);\n }\n }\n\n const onChangeSelected = (ids: number[]) => {\n const newItems: One2manyItem[] = items.map((item) => {\n if (ids.includes(item.id as number)) {\n if (item.operation == \"pendingRemove\") {\n return {\n ...item,\n operation: \"pendingLink\",\n };\n } else {\n return item;\n }\n } else {\n return { id: item.id, operation: \"pendingRemove\" };\n }\n });\n const currentIds = newItems.map((item) => item.id);\n ids\n .filter((id) => !currentIds.includes(id))\n .map((id) => {\n newItems.push({ id, operation: \"pendingLink\" });\n });\n triggerChange(newItems);\n };\n\n const tagRender = (props: any) => {\n const { label, closable, onClose } = props;\n const onPreventMouseDown = (event: React.MouseEvent<HTMLSpanElement>) => {\n event.preventDefault();\n event.stopPropagation();\n };\n const color = colorFromString(label);\n return (\n <CustomTag\n color={color}\n onMouseDown={onPreventMouseDown}\n closable={closable}\n onClose={onClose}\n closeIcon={<span style={{color}}>X</span>}\n >\n {label}\n </CustomTag>\n );\n };\n\n if (error) {\n return <Alert className=\"mt-10\" message={error} type=\"error\" banner />;\n }\n\n return (\n <>\n <div className=\"flex flex-row\">\n <Select\n mode=\"multiple\"\n value={options.length ? itemsToShow : []}\n tagRender={tagRender}\n bordered={!readOnly}\n disabled={readOnly}\n options={options}\n onChange={onChangeSelected}\n loading={isLoadingOptions}\n ></Select>\n </div>\n </>\n );\n};\n","import React from \"react\";\n\nimport {\n Notebook,\n Group,\n Label,\n Char,\n Text,\n Button,\n ButtonGroup,\n Selection,\n Many2one,\n Boolean,\n Integer,\n Float,\n Date,\n DateTime,\n Time,\n One2many,\n Separator,\n Form,\n Tree,\n Reference,\n Binary,\n Url,\n Email,\n FloatTime,\n ProgressBar,\n MultiCheckbox,\n Markdown,\n Radio,\n Switch,\n Steps,\n Tag,\n CodeEditor,\n} 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 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, 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!); const attrs: any = {};\n if (colors) {\n attrs.colors = colors;\n }\n if (status) {\n attrs.status = status;\n }\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 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 };\n};\n","import { DEFAULT_SEARCH_LIMIT } from \"@/hooks/useSearch\";\nimport { View } from \"@/types\";\nimport React, { useEffect, useRef, useState } from \"react\";\n\nexport type ActionViewContextType = {\n title: string;\n availableViews: View[];\n currentView: View;\n setCurrentView: (view: View) => void;\n formIsSaving?: boolean;\n setFormIsSaving?: (value: boolean) => void;\n formHasChanges?: boolean;\n setFormHasChanges?: (value: boolean) => void;\n onFormSave?: () => Promise<{ succeed: boolean; id: number }>;\n formRef?: any;\n searchTreeRef?: any;\n onNewClicked: () => void;\n currentId?: number;\n setCurrentId?: (id?: number) => void;\n currentItemIndex?: number;\n setCurrentItemIndex?: (value?: number) => void;\n results?: any[];\n setResults?: (value: any[]) => void;\n currentModel?: string;\n removingItem?: boolean;\n setRemovingItem?: (value: boolean) => void;\n formIsLoading?: boolean;\n setFormIsLoading?: (value: boolean) => void;\n treeIsLoading?: boolean;\n setTreeIsLoading?: (value: boolean) => void;\n graphIsLoading?: boolean;\n setGraphIsLoading?: (value: boolean) => void;\n attachments?: any;\n setAttachments?: (value: any) => void;\n selectedRowItems?: any[];\n setSelectedRowItems?: (value: any[]) => void;\n duplicatingItem?: boolean;\n setDuplicatingItem?: (value: boolean) => void;\n searchParams?: any[];\n setSearchParams?: (value: any[]) => void;\n searchVisible?: boolean;\n setSearchVisible?: (value: boolean) => void;\n sorter: any;\n setSorter: (sorter: any) => void;\n totalItems: number;\n setTotalItems: (totalItems: number) => void;\n searchTreeNameSearch?: string;\n setSearchTreeNameSearch?: (searchString?: string) => void;\n previousView?: View;\n setPreviousView?: (view: View) => void;\n goToResourceId?: (id: number) => Promise<void>;\n searchValues?: any;\n setSearchValues?: (value: any) => void;\n limit?: number;\n setLimit?: (value: number) => void;\n setTitle?: (value: string) => void;\n};\n\nexport const ActionViewContext =\n React.createContext<ActionViewContextType | null>(null);\n\ntype ActionViewProviderProps = ActionViewContextType & {\n children: React.ReactNode;\n};\n\nconst ActionViewProvider = (props: ActionViewProviderProps): any => {\n const {\n children,\n currentView,\n title: titleProps,\n setCurrentView,\n availableViews,\n formRef,\n searchTreeRef,\n onNewClicked,\n currentId,\n setCurrentId,\n setResults,\n results,\n currentItemIndex,\n setCurrentItemIndex,\n currentModel,\n sorter,\n setSorter,\n totalItems,\n setTotalItems,\n setSelectedRowItems,\n selectedRowItems,\n searchTreeNameSearch,\n setSearchTreeNameSearch,\n goToResourceId,\n limit: limitProps,\n } = props;\n\n const [formIsSaving, setFormIsSaving] = useState<boolean>(false);\n const [formHasChanges, setFormHasChanges] = useState<boolean>(false);\n const [removingItem, setRemovingItem] = useState<boolean>(false);\n const [formIsLoading, setFormIsLoading] = useState<boolean>(true);\n const [treeIsLoading, setTreeIsLoading] = useState<boolean>(true);\n const [attachments, setAttachments] = useState<any>([]);\n const [duplicatingItem, setDuplicatingItem] = useState<boolean>(false);\n const [searchParams, setSearchParams] = useState<any[]>([]);\n const [searchVisible, setSearchVisible] = useState<boolean>(false);\n const [graphIsLoading, setGraphIsLoading] = useState<boolean>(true);\n const [previousView, setPreviousView] = useState<View>();\n const [searchValues, setSearchValues] = useState<any>({});\n const [limit, setLimit] = useState<number>(\n limitProps !== undefined ? limitProps : DEFAULT_SEARCH_LIMIT\n );\n const [title, setTitle] = useState<string>(titleProps);\n\n useEffect(() => {\n if (results && results.length > 0 && !currentItemIndex) {\n setCurrentItemIndex?.(0);\n setCurrentId?.(results[0].id);\n }\n }, [results]);\n\n useEffect(() => {\n setLimit(limitProps !== undefined ? limitProps : DEFAULT_SEARCH_LIMIT);\n }, [limitProps]);\n\n useEffect(() => {\n if (availableViews.length === 1) {\n setPreviousView(availableViews[0]);\n } else if (availableViews.length > 1) {\n setPreviousView(\n availableViews.filter((view) => view.view_id !== currentView.view_id)[0]\n );\n }\n }, [availableViews]);\n\n useEffect(() => {\n if (\n previousView?.view_id === currentView.view_id &&\n availableViews.length > 1\n ) {\n setPreviousView(\n availableViews.filter((view) => view.view_id !== currentView.view_id)[0]\n );\n }\n }, [currentView]);\n\n const callOnFormSave = async () => {\n return await (formRef.current as any)?.submitForm();\n };\n\n return (\n <ActionViewContext.Provider\n value={{\n title,\n currentView,\n setCurrentView,\n availableViews,\n formIsSaving,\n setFormIsSaving,\n formHasChanges,\n setFormHasChanges,\n formRef,\n searchTreeRef,\n onFormSave: callOnFormSave,\n onNewClicked,\n currentId,\n setCurrentId,\n currentItemIndex,\n setCurrentItemIndex,\n results,\n setResults,\n currentModel,\n removingItem,\n setRemovingItem,\n formIsLoading,\n setFormIsLoading,\n treeIsLoading,\n setTreeIsLoading,\n attachments,\n setAttachments,\n selectedRowItems,\n setSelectedRowItems,\n duplicatingItem,\n setDuplicatingItem,\n setSearchParams,\n searchParams,\n searchVisible,\n setSearchVisible,\n sorter,\n setSorter,\n totalItems,\n setTotalItems,\n searchTreeNameSearch,\n setSearchTreeNameSearch,\n setGraphIsLoading,\n graphIsLoading,\n previousView,\n setPreviousView,\n goToResourceId,\n searchValues,\n setSearchValues,\n limit,\n setLimit,\n setTitle,\n }}\n >\n {children}\n </ActionViewContext.Provider>\n );\n};\n\nexport default ActionViewProvider;\n","import { InitialViewData, View, ViewType } from \"@/types\";\nimport { ShortcutApi } from \"@/ui/FavouriteButton\";\nimport React, { useState } from \"react\";\n\nexport type TabManagerContextType = {\n openAction: ({\n domain,\n context,\n model,\n views,\n title,\n target,\n initialView,\n action_id,\n action_type,\n res_id,\n values,\n forced_values,\n }: {\n domain: any;\n context: any;\n model: string;\n views: Array<any>;\n title: string;\n target: string;\n initialView: InitialViewData;\n action_id: number;\n action_type: string;\n res_id?: number | boolean;\n values?: any;\n forced_values?: any;\n }) => void;\n openRelate: ({\n relateData,\n fields,\n values,\n action_id,\n action_type,\n }: {\n relateData: any;\n fields: any;\n values: any;\n action_id: number;\n action_type: string;\n }) => void;\n openDefaultActionForModel: ({\n model,\n values,\n forced_values,\n initialViewType,\n res_id,\n domain,\n }: {\n model: string;\n values?: any;\n forced_values?: any;\n initialViewType?: ViewType;\n res_id?: number;\n domain?: any;\n }) => void;\n activeKey: string;\n onChangeTab: (key: string) => void;\n onRemoveTab: (key: string) => void;\n openShortcut: (shortcut: ShortcutApi) => void;\n tabs: any[];\n currentView?: View;\n setCurrentView?: (view?: View) => void;\n currentId?: number;\n setCurrentId?: (id?: number) => void;\n};\n\nexport const TabManagerContext = React.createContext<TabManagerContextType | null>(\n null\n);\n\ntype TabManagerProviderProps = TabManagerContextType & {\n children: React.ReactNode;\n};\n\nconst TabManagerProvider = (props: TabManagerProviderProps): any => {\n const {\n children,\n openAction,\n openRelate,\n openDefaultActionForModel,\n openShortcut,\n activeKey,\n onChangeTab,\n onRemoveTab,\n tabs,\n } = props;\n\n const [currentView, setCurrentView] = useState<View>();\n const [currentId, setCurrentId] = useState<number>();\n\n return (\n <TabManagerContext.Provider\n value={{\n openAction,\n openRelate,\n openDefaultActionForModel,\n activeKey,\n openShortcut,\n onChangeTab,\n onRemoveTab,\n tabs,\n currentId,\n currentView,\n setCurrentId,\n setCurrentView,\n }}\n >\n {children}\n </TabManagerContext.Provider>\n );\n};\n\nexport default TabManagerProvider;\n","import { FormView, GenerateReportOptions, ViewType } from \"@/types\";\nimport React, {\n useContext,\n useRef,\n useState,\n forwardRef,\n useImperativeHandle,\n} from \"react\";\nimport showErrorDialog from \"@/ui/ActionErrorDialog\";\nimport { openBase64InNewTab, getMimeType } from \"@/helpers/filesHelper\";\nimport { parseContext } from \"@gisce/ooui\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport { Modal, Spin } from \"antd\";\nimport {\n TabManagerContext,\n TabManagerContextType,\n} from \"@/context/TabManagerContext\";\nimport { FormModal } from \"@/widgets/modals/FormModal\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport { transformPlainMany2Ones, stringFormat } from \"@/helpers/formHelper\";\n\nexport type ContentRootContextType = {\n processAction: ({\n actionData,\n fields,\n values,\n context,\n }: {\n actionData: any;\n fields: any;\n values: any;\n context?: any;\n onRefreshParentValues?: () => void;\n }) => Promise<any>;\n globalValues?: any;\n};\n\ntype ActionModalOpts = {\n model?: string;\n domain?: any;\n context: any;\n formView?: FormView;\n actionData?: any;\n};\n\nexport const ContentRootContext =\n React.createContext<ContentRootContextType | null>(null);\n\ntype ContentRootProviderProps = {\n children: React.ReactNode;\n globalValues?: any;\n};\n\nconst callRefreshValues = async (fns: any[]) => {\n for (let i = 0; i < fns.length; i++) {\n await fns?.[i]?.();\n }\n};\n\nconst ContentRootProvider = (\n props: ContentRootProviderProps,\n ref: any\n): any => {\n const { children, globalValues = {} } = props;\n const reportInProgressInterval = useRef<any>();\n const waitingForReport = useRef<boolean>();\n const [reportGenerating, setReportGenerating] = useState<boolean>(false);\n const tabManagerContext = useContext(\n TabManagerContext\n ) as TabManagerContextType;\n const { openAction } = tabManagerContext || {};\n const onRefreshParentValues = useRef<any>([]);\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n useImperativeHandle(ref, () => ({\n openActionModal,\n }));\n\n // Action modal state\n const [actionModalVisible, setActionModalVisible] = useState<boolean>(false);\n\n const [actionModalOptions, setActionModalOptions] = useState<ActionModalOpts>(\n {\n context: {},\n }\n );\n\n async function generateReport(options: GenerateReportOptions) {\n const { reportData, fields, values, context = {} } = options;\n\n const {\n context: reportContext,\n model,\n datas = {},\n report_name,\n type,\n } = reportData;\n\n if (type !== \"ir.actions.report.xml\") {\n showErrorDialog(`${type} action not supported`);\n return;\n }\n\n const { ids } = datas || {};\n\n let idsToExecute = ids || [];\n\n const reportContextParsed =\n typeof reportContext === \"string\"\n ? parseContext({\n context: reportContext,\n fields,\n values,\n })\n : reportContext;\n\n try {\n const newReportId = await ConnectionProvider.getHandler().createReport({\n model,\n name: report_name,\n datas,\n ids: idsToExecute,\n context: { ...context, ...reportContextParsed },\n });\n\n setReportGenerating(true);\n\n waitingForReport.current = true;\n reportInProgressInterval.current = setInterval(() => {\n evaluateReportStatus(newReportId);\n }, 1000);\n } catch (err) {\n waitingForReport.current = false;\n clearInterval(reportInProgressInterval.current);\n showErrorDialog(err);\n setReportGenerating(false);\n }\n }\n\n async function evaluateReportStatus(id: any) {\n let reportState;\n try {\n reportState = await ConnectionProvider.getHandler().getReport({\n id,\n });\n if (reportState.state && waitingForReport.current === true) {\n waitingForReport.current = false;\n clearInterval(reportInProgressInterval.current);\n setReportGenerating(false);\n const fileType: any = await getMimeType(reportState.result);\n openBase64InNewTab(reportState.result, fileType.mime);\n }\n } catch (error) {\n waitingForReport.current = false;\n clearInterval(reportInProgressInterval.current);\n setReportGenerating(false);\n showErrorDialog(error.exception || error);\n }\n }\n\n async function processAction({\n actionData,\n fields,\n values,\n context,\n onRefreshParentValues: onRefreshParentValuesFn,\n }: {\n actionData: any;\n fields: any;\n values: any;\n context?: any;\n onRefreshParentValues?: any;\n }) {\n const { type } = actionData;\n onRefreshParentValues.current.push(onRefreshParentValuesFn);\n\n if (type === \"ir.actions.report.xml\") {\n return await generateReport({\n reportData: actionData,\n fields,\n values,\n context,\n });\n } else if (type === \"ir.actions.act_window\") {\n return await runAction({actionData, fields, values, context});\n } else if (type === \"ir.actions.act_url\") {\n window.open(stringFormat(actionData.url, {...values, context}), \"_blank\");\n } else {\n showErrorDialog(`${type} action not supported`);\n return {};\n }\n }\n\n async function runAction({\n actionData: _actionData,\n fields = {},\n values = {},\n context = {},\n }: {\n actionData: any;\n fields?: any;\n values?: any;\n context?: any;\n }) {\n let actionData = _actionData;\n\n if (!_actionData.res_model) {\n actionData = (\n await ConnectionProvider.getHandler().readObjects({\n model: \"ir.actions.act_window\",\n ids: [parseInt(_actionData.id)],\n context,\n })\n )[0];\n }\n\n const responseContext =\n typeof actionData?.context === \"string\"\n ? parseContext({\n context: actionData.context,\n fields,\n values: { ...values, ...globalValues },\n })\n : actionData.context;\n\n const mergedContext = {\n ...context,\n ...responseContext,\n };\n\n let parsedDomain = [];\n\n if (actionData.domain) {\n parsedDomain = await ConnectionProvider.getHandler().evalDomain({\n domain: actionData.domain,\n values: transformPlainMany2Ones({\n fields,\n values: { ...values, ...globalValues },\n }),\n fields,\n context: mergedContext,\n });\n }\n\n // -- Possible values for target property --\n // * new ==> modal\n // * current ==> new tab\n // * undefined ==> new tab\n if (actionData.target === \"new\") {\n const formView = (await ConnectionProvider.getHandler().getView({\n model: actionData.res_model,\n type: \"form\",\n id: actionData?.view_id?.[0] || undefined,\n context: mergedContext,\n })) as FormView;\n\n openActionModal({\n domain: parsedDomain,\n model: actionData.res_model,\n formView,\n context: mergedContext,\n });\n\n return {};\n } else {\n const { initialView, views } = await getViewsAndInitialView({\n model: actionData.res_model,\n context: mergedContext,\n view_mode: actionData.view_mode,\n views: actionData.views,\n });\n\n openAction?.({\n target: \"current\",\n context: mergedContext,\n domain: parsedDomain,\n model: actionData.res_model,\n views: views,\n title: actionData.name,\n initialView,\n action_id: actionData.id,\n action_type: actionData.type,\n });\n\n return { closeParent: true };\n }\n }\n\n function openActionModal({\n domain,\n model,\n formView,\n context,\n actionData,\n }: {\n domain: any;\n model: string;\n formView: FormView;\n context: any;\n actionData?: any;\n }) {\n if (actionModalVisible) {\n openNewActionModal({ domain, model, formView, context, actionData });\n } else {\n setActionModalOptions({ domain, model, context, formView, actionData });\n setActionModalVisible(true);\n }\n }\n\n async function openNewActionModal({\n domain,\n model,\n formView,\n context,\n actionData,\n }: {\n domain: any;\n model: string;\n formView: FormView;\n context: any;\n actionData?: any;\n }) {\n setActionModalOptions({\n domain: undefined,\n model: undefined,\n context: {},\n formView: undefined,\n actionData: undefined,\n });\n setActionModalVisible(false);\n await new Promise((resolve) => setTimeout(resolve, 300));\n setActionModalOptions({ domain, model, context, formView, actionData });\n setActionModalVisible(true);\n }\n\n async function onFormModalSucceed() {\n callRefreshValues(onRefreshParentValues.current);\n onRefreshParentValues.current = [];\n setActionModalVisible(false);\n setActionModalOptions({\n domain: undefined,\n model: undefined,\n context: {},\n formView: undefined,\n actionData: undefined,\n });\n }\n\n return (<>\n <ContentRootContext.Provider\n value={{\n processAction,\n globalValues,\n }}\n >\n <>\n {children}\n <Modal\n title={t(\"generatingReport\")}\n open={reportGenerating}\n footer={null}\n closable={false}\n centered\n maskClosable={false}\n >\n <Spin />\n </Modal>\n <FormModal\n buttonModal\n parentContext={actionModalOptions.context}\n model={actionModalOptions.model!}\n formView={actionModalOptions.formView}\n visible={actionModalVisible}\n onSubmitSucceed={onFormModalSucceed}\n onCancel={() => {\n callRefreshValues(onRefreshParentValues.current);\n onRefreshParentValues.current = [];\n setActionModalVisible(false);\n setActionModalOptions({\n domain: undefined,\n model: undefined,\n context: {},\n formView: undefined,\n actionData: undefined,\n });\n }}\n showFooter={false}\n actionDomain={actionModalOptions.domain}\n isMenuAction={actionModalOptions?.actionData !== undefined}\n actionData={actionModalOptions?.actionData}\n />\n </>\n </ContentRootContext.Provider>\n </>);\n};\n\nasync function getViewsAndInitialView({\n views,\n view_mode,\n model,\n context,\n view_id,\n}: {\n views: any[];\n view_mode: string;\n model: string;\n context: any;\n view_id?: number;\n}) {\n const retriedViewData = [];\n let initialView;\n\n if (views) {\n for (const view of views) {\n const viewData = await ConnectionProvider.getHandler().getView({\n model,\n type: view[1],\n id: view[0],\n context,\n });\n retriedViewData.push([viewData.view_id, view[1]]);\n }\n } else {\n const viewTypes = view_mode.split(\",\");\n for (const viewType of viewTypes) {\n const viewData = await ConnectionProvider.getHandler().getView({\n model,\n type: viewType as ViewType,\n context,\n });\n retriedViewData.push([viewData.view_id, viewType]);\n }\n }\n if (views && views.length > 0) {\n const [id, type] = views[0];\n initialView = {\n id,\n type,\n };\n } else if (!view_id) {\n const type = view_mode.split(\",\")[0];\n const [retrievedViewId] = retriedViewData.find(([_, viewType]) => viewType === type)!;\n initialView = { id: retrievedViewId, type };\n } else {\n initialView = {\n id: view_id,\n type: view_mode.split(\",\")[0],\n };\n }\n\n return { views: retriedViewData, initialView };\n}\n\nexport default forwardRef(ContentRootProvider);\n","import { parseError } from \"@/helpers/errorHelper\";\nimport { Alert } from \"antd\";\nimport React from \"react\";\nimport { Interweave } from \"interweave\";\n\nexport const ErrorAlert = ({\n error,\n className,\n}: {\n error: any;\n className: string;\n}) => {\n let messageContent;\n let messageType = \"error\";\n\n if (\n typeof error === \"string\" &&\n error.indexOf(\" -- \") !== -1 &&\n error.indexOf(\"\\n\\n\") !== -1\n ) {\n const { message, type, title } = parseError(error);\n messageContent = <Interweave content={`${title}<br />${message}`} />;\n messageType = type;\n } else {\n messageContent = error.message\n ? JSON.stringify(error.message)\n : JSON.stringify(error);\n }\n return (\n <Alert\n className={className}\n message={messageContent}\n type={messageType as any}\n banner\n />\n );\n};\n","import React, {\n useState,\n forwardRef,\n useImperativeHandle,\n useEffect,\n useRef,\n useContext,\n} from \"react\";\nimport { Form as FormOoui, parseContext } from \"@gisce/ooui\";\nimport {\n Form as AntForm,\n Button,\n Divider,\n Space,\n Row,\n Alert,\n Spin,\n message,\n} from \"antd\";\nimport Measure from \"react-measure\";\nimport { CheckOutlined, CloseOutlined } from \"@ant-design/icons\";\nimport debounce from \"lodash/debounce\";\n\nimport Container from \"@/widgets/containers/Container\";\nimport {\n processValues,\n getTouchedValues,\n checkFieldsType,\n mergeFieldsDomain,\n getValuesForDomain,\n getOnChangePayload,\n} from \"@/helpers/formHelper\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport showUnsavedChangesDialog from \"@/ui/UnsavedChangesDialog\";\nimport formErrorsDialog from \"@/ui/FormErrorsDialog\";\nimport showErrorDialog from \"@/ui/ActionErrorDialog\";\nimport showWarningDialog from \"@/ui/WarningDialog\";\nimport FormProvider, {\n FormContext,\n FormContextType,\n} from \"@/context/FormContext\";\nimport { FormView, One2manyItem } from \"@/index\";\nimport {\n FormModalContext,\n FormModalContextType,\n} from \"@/context/FormModalContext\";\n\nimport {\n ActionViewContext,\n ActionViewContextType,\n} from \"@/context/ActionViewContext\";\n\nimport {\n ContentRootContext,\n ContentRootContextType,\n} from \"@/context/ContentRootContext\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport { convertToPlain2ManyValues } from \"@/helpers/one2manyHelper\";\nimport { ErrorAlert } from \"@/ui/ErrorAlert\";\n\nexport type FormProps = {\n model: string;\n readOnly?: boolean;\n id?: number;\n formView?: FormView;\n values?: any;\n showFooter?: boolean;\n getDataFromAction?: boolean;\n mustClearAfterSave?: boolean;\n submitMode?: \"api\" | \"values\" | \"2many\";\n onSubmitSucceed?: (\n id?: number,\n values?: any,\n formValues?: any,\n x2manyPendingLink?: boolean\n ) => void;\n onSubmitError?: (error: any) => void;\n onCancel?: () => void;\n onFieldsChange?: (values: any) => void;\n postSaveAction?: (event: any) => Promise<void>;\n insideButtonModal?: boolean;\n parentContext?: any;\n actionDomain?: any;\n visible?: boolean;\n rootForm?: boolean;\n defaultValues?: any;\n forcedValues?: any;\n parentWidth?: number;\n};\n\nconst WIDTH_BREAKPOINT = 800;\n\nfunction Form(props: FormProps, ref: any) {\n const {\n model,\n id,\n onCancel: propsOnCancel,\n onSubmitSucceed: propsOnSubmitSucceed,\n showFooter = false,\n getDataFromAction = false,\n onFieldsChange,\n onSubmitError: propsOnSubmitError,\n readOnly = false,\n mustClearAfterSave = false,\n submitMode = \"api\",\n values: valuesProps,\n formView: formViewProps,\n postSaveAction,\n insideButtonModal = false,\n parentContext = {},\n actionDomain,\n visible = true,\n rootForm = false,\n defaultValues,\n forcedValues = {},\n parentWidth,\n } = props;\n const { t, lang } = useContext(LocaleContext) as LocaleContextType;\n\n const [isSubmitting, setIsSubmitting] = useState<boolean>(false);\n const [error, setError] = useState<string>();\n const [formOoui, setFormOoui] = useState<FormOoui>();\n const [antForm] = AntForm.useForm();\n const [arch, setArch] = useState<string>();\n const [fields, setFields] = useState<any>();\n const formModalContext = useContext(FormModalContext) as FormModalContextType;\n const [containerWidth, setContainerWidth] = useState<any>();\n const [defaultGetCalled, setDefaultGetCalled] = useState<boolean>(false);\n\n const createdId = useRef<number>();\n const originalFormValues = useRef<any>({});\n const lastAssignedValues = useRef<any>({});\n const warningIsShown = useRef<boolean>(false);\n const formSubmitting = useRef<boolean>(false);\n const x2manyPendingLink = useRef<boolean>(false);\n\n const widthToEvaluate =\n parentWidth !== undefined ? parentWidth : containerWidth;\n const responsiveBehaviour = widthToEvaluate < WIDTH_BREAKPOINT;\n\n const formContext = useContext(FormContext) as FormContextType;\n const { activeId: parentId, getPlainValues: getParentPlainValues } =\n formContext || {};\n\n const actionViewContext = useContext(\n ActionViewContext\n ) as ActionViewContextType;\n const {\n setFormIsSaving = undefined,\n setFormHasChanges = undefined,\n setCurrentId = undefined,\n setFormIsLoading = undefined,\n setAttachments = undefined,\n title = undefined,\n setTitle = undefined,\n } = (rootForm ? actionViewContext : {}) || {};\n\n const contentRootContext = useContext(\n ContentRootContext\n ) as ContentRootContextType;\n const { processAction, globalValues } = contentRootContext || {};\n\n useImperativeHandle(ref, () => ({\n submitForm,\n getFields,\n getValues,\n getPlainValues,\n getContext,\n fetchValues,\n cancelUnsavedChanges,\n clearAndReload: () => {\n createdId.current = undefined;\n setFormOoui(undefined);\n fetchData();\n },\n }));\n\n useEffect(() => {\n setError(undefined);\n\n if (!model && !formViewProps) {\n return;\n }\n\n if (!visible) {\n createdId.current = undefined;\n setFormOoui(undefined);\n return;\n }\n\n // In the case we set the id to undefined for creating a new item\n if (\n (id === undefined && fields) ||\n (id !== undefined && fields && id < 0)\n ) {\n createdId.current = undefined;\n setFormOoui(undefined);\n }\n\n fetchData();\n }, [id, model, valuesProps, formViewProps, visible]);\n\n useEffect(() => {\n if (defaultGetCalled) {\n checkFieldsChanges({\n elementHasLostFocus: true,\n });\n setDefaultGetCalled(false);\n }\n }, [defaultGetCalled]);\n\n const onSubmitSucceed = (\n id?: number,\n values?: any,\n formValues?: any,\n x2manyPendingLink?: boolean\n ) => {\n setFormHasChanges?.(false);\n setFormIsSaving?.(false);\n propsOnSubmitSucceed?.(id, values, formValues, x2manyPendingLink);\n setCurrentId?.(id);\n };\n\n const onCancel = () => {\n setFormIsSaving?.(false);\n propsOnCancel?.();\n };\n\n const onSubmitError = (error: any) => {\n setFormIsSaving?.(false);\n propsOnSubmitError?.(error);\n };\n\n function getCurrentId() {\n return id || createdId.current;\n }\n\n function getFields() {\n return fields;\n }\n\n function getValues() {\n const values = {\n ...getCurrentValues(fields),\n ...getAdditionalValues(),\n };\n\n for (const key in values) {\n if (values[key] === undefined) {\n delete values[key];\n }\n }\n\n return values;\n }\n\n function getPlainValues() {\n const values: any = getValues();\n const fields: any = getFields();\n let reformattedValues: { [key: string]: any } = {};\n\n Object.keys(values).forEach((key) => {\n const value = values[key];\n\n if (\n fields[key] &&\n fields[key].type === \"many2one\" &&\n value &&\n Array.isArray(value) &&\n value.length === 2\n ) {\n reformattedValues[key] = value[0];\n } else if (\n fields[key] &&\n (fields[key].type === \"one2many\" || fields[key].type === \"many2many\") &&\n value &&\n value.items\n ) {\n reformattedValues[key] = value.items\n .filter((item: One2manyItem) => item.operation !== \"pendingRemove\")\n .map((val: any) => val.id);\n } else {\n reformattedValues[key] = value;\n }\n });\n\n return reformattedValues;\n }\n\n function getFormValues() {\n const values = {\n ...getCurrentValues(fields),\n };\n\n for (const key in values) {\n if (values[key] === undefined) {\n delete values[key];\n }\n }\n\n return values;\n }\n\n function getContext() {\n return { ...parentContext, ...formOoui?.context };\n }\n\n function getActiveIdsContext() {\n const currentId = getCurrentId()!;\n\n if (!currentId) {\n return {};\n }\n return { active_id: getCurrentId()!, active_ids: [getCurrentId()!] };\n }\n\n function getAdditionalValues() {\n return {\n id: getCurrentId()!,\n active_id: getCurrentId()!,\n active_ids: [getCurrentId()!],\n parent_id: parentId,\n ...globalValues,\n };\n }\n\n const getDefaultValues = async (fields: any) => {\n const formContext = getCurrentId() ? formOoui?.context : {};\n return await ConnectionProvider.getHandler().defaultGet({\n model,\n fields,\n context: { ...parentContext, ...formContext },\n extraValues: defaultValues,\n });\n };\n\n const formHasChanges = () => {\n return (\n Object.keys(\n getTouchedValues({\n source: originalFormValues.current,\n target: getCurrentValues(fields),\n fields,\n })\n ).length !== 0\n );\n };\n\n const getCurrentValues = (fields: any) => {\n const currentValues = antForm.getFieldsValue(true);\n return processValues(currentValues, fields);\n };\n\n const setFieldValue = (field: string, value?: string) => {\n assignNewValuesToForm({\n values: {\n ...processValues(antForm.getFieldsValue(true), fields),\n [field]: value,\n },\n fields,\n reset: false,\n });\n };\n\n const getFieldValue = (field: string) => {\n const values = antForm.getFieldsValue(true);\n return values[field];\n };\n\n async function checkIfFormHasErrors() {\n try {\n await antForm.validateFields();\n return false;\n } catch (verror) {\n message.error(t(\"fillRequiredFields\"));\n return true;\n }\n }\n const fetchData = async () => {\n setError(undefined);\n setFormIsLoading?.(true);\n\n let view;\n\n try {\n if (formViewProps) {\n view = { arch: formViewProps.arch, fields: formViewProps.fields };\n } else {\n view = await getFormView();\n }\n\n const { fields, arch } = view;\n setFields(fields);\n setArch(arch);\n\n await fetchValues({\n fields,\n arch,\n });\n } catch (err) {\n setError(err?.message ? err.message + err.stack : err);\n setFormIsLoading?.(false);\n // setLoading(false);\n }\n };\n\n type FetchValuesOptions = {\n fields?: any;\n arch?: string;\n forceRefresh?: boolean;\n };\n\n const fetchValues = async (options?: FetchValuesOptions) => {\n let values;\n let _fields;\n let _arch;\n let hasDefaultGetCalled;\n\n setFormIsLoading?.(true);\n setError(undefined);\n\n if (options?.fields) {\n _fields = options.fields;\n _arch = options.arch;\n } else {\n _fields = fields;\n _arch = arch;\n }\n\n if (valuesProps && options?.forceRefresh !== true) {\n values = valuesProps;\n } else {\n ({ values, defaultGetCalled: hasDefaultGetCalled } =\n await fetchValuesFromApi({\n fields: _fields,\n arch: _arch!,\n }));\n }\n\n if (actionDomain) {\n values = { ...getValuesForDomain(actionDomain), ...values };\n }\n\n originalFormValues.current = processValues(values, _fields);\n\n assignNewValuesToForm({\n values,\n fields: _fields,\n reset: true,\n isDefaultGet: hasDefaultGetCalled,\n });\n parseForm({ fields: _fields, arch: _arch!, values });\n setFormIsLoading?.(false);\n setFormHasChanges?.(false);\n\n if (hasDefaultGetCalled) {\n setDefaultGetCalled(true);\n }\n };\n\n const cancelUnsavedChanges = async () => {\n return new Promise(async (resolve) => {\n if (formHasChanges()) {\n showUnsavedChangesDialog({\n lang,\n onOk: () => {\n onCancel?.();\n resolve(true);\n },\n onCancel: () => {\n resolve(false);\n },\n });\n } else {\n onCancel?.();\n resolve(true);\n }\n });\n };\n\n const getFormView = async (): Promise<FormView> => {\n if (getDataFromAction) {\n const action =\n await ConnectionProvider.getHandler().getActionStringForModel(model);\n const viewsForAction =\n await ConnectionProvider.getHandler().getViewsForAction({\n action,\n context: parentContext,\n });\n return viewsForAction.views.get(\"form\");\n }\n\n return (await ConnectionProvider.getHandler().getView({\n model,\n type: \"form\",\n context: parentContext,\n })) as FormView;\n };\n\n const assignNewValuesToForm = ({\n values: newValues,\n fields,\n reset,\n isDefaultGet = false,\n }: {\n values: any;\n fields: any;\n reset: boolean;\n isDefaultGet?: boolean;\n }) => {\n const currentValues = reset ? {} : antForm.getFieldsValue(true);\n const mergedValues = { ...currentValues, ...newValues };\n const valuesProcessed = processValues(mergedValues, fields);\n const fieldsToUpdate = Object.keys(fields).map((fieldName) => {\n const fieldValue =\n valuesProcessed[fieldName] !== undefined\n ? valuesProcessed[fieldName]\n : undefined;\n return {\n name: fieldName,\n touched: false,\n value: fieldValue,\n };\n });\n\n if (!isDefaultGet) {\n lastAssignedValues.current = valuesProcessed;\n }\n\n antForm.setFields(fieldsToUpdate);\n };\n\n const fetchValuesFromApi = async ({\n fields,\n arch,\n }: {\n fields: any;\n arch: string;\n }) => {\n let values = {};\n let defaultGetCalled = false;\n\n if (getCurrentId()!) {\n values = (\n await ConnectionProvider.getHandler().readObjects({\n model,\n ids: [getCurrentId()!],\n fields,\n context: parentContext,\n })\n )[0];\n\n const results = await ConnectionProvider.getHandler().search({\n params: [\n [\"res_model\", \"=\", model],\n [\"res_id\", \"=\", getCurrentId()!],\n ],\n fields: [\"id\", \"name\"],\n context: getContext(),\n model: \"ir.attachment\",\n });\n setAttachments?.(results);\n } else {\n setAttachments?.([]);\n values = await getDefaultValues(fields);\n defaultGetCalled = true;\n }\n return { values, defaultGetCalled };\n };\n\n const submitApi = async (options?: { callOnSubmitSucceed?: boolean }) => {\n const { callOnSubmitSucceed = true } = options || {};\n\n if (getCurrentId()) {\n const touchedValues = getTouchedValues({\n source: originalFormValues.current,\n target: getCurrentValues(fields),\n fields,\n });\n\n await ConnectionProvider.getHandler().update({\n model,\n id: getCurrentId()!,\n values: { ...touchedValues, ...forcedValues },\n fields,\n context: {\n ...parentContext,\n ...formOoui?.context,\n },\n });\n originalFormValues.current = getCurrentValues(fields);\n } else {\n const currentValues = getCurrentValues(fields);\n\n const newId = await ConnectionProvider.getHandler().create({\n model,\n values: { ...currentValues, ...forcedValues },\n fields,\n context: {\n ...parentContext,\n ...formOoui?.context,\n },\n });\n createdId.current = newId;\n originalFormValues.current = currentValues;\n }\n\n if (postSaveAction) {\n await postSaveAction([getCurrentId()]);\n }\n\n if (!insideButtonModal && callOnSubmitSucceed) {\n onSubmitSucceed?.(getCurrentId(), getValues(), getFormValues());\n }\n };\n\n const submitValues = async (options?: { callOnSubmitSucceed?: boolean }) => {\n const { callOnSubmitSucceed = true } = options || {};\n\n if (!insideButtonModal && callOnSubmitSucceed) {\n onSubmitSucceed?.(getCurrentId(), getValues(), getFormValues());\n }\n };\n\n const submitForm = async (options?: { callOnSubmitSucceed?: boolean }) => {\n let submitSucceed = false;\n const { callOnSubmitSucceed = true } = options || {};\n formSubmitting.current = true;\n\n setError(undefined);\n\n if (\n x2manyPendingLink.current &&\n !formHasChanges() &&\n getCurrentId()! &&\n callOnSubmitSucceed\n ) {\n formSubmitting.current = false;\n setFormHasChanges?.(false);\n onSubmitSucceed?.(\n getCurrentId(),\n getValues(),\n getFormValues(),\n x2manyPendingLink.current\n );\n x2manyPendingLink.current = false;\n const currentId = getCurrentId()!;\n\n if (mustClearAfterSave) {\n createdId.current = undefined;\n assignNewValuesToForm({ values: {}, fields, reset: true });\n }\n\n return { succeed: true, id: currentId };\n }\n\n if (!formHasChanges() && getCurrentId()! && callOnSubmitSucceed) {\n formSubmitting.current = false;\n setFormHasChanges?.(false);\n onCancel?.();\n return { succeed: true, id: getCurrentId()! };\n }\n\n if (await checkIfFormHasErrors()) {\n formSubmitting.current = false;\n formErrorsDialog(lang);\n return { succeed: false, id: getCurrentId()! };\n }\n\n setIsSubmitting(true);\n setFormIsSaving?.(true);\n\n try {\n if (submitMode === \"api\") {\n await submitApi(options);\n } else {\n await submitValues(options);\n }\n\n if (mustClearAfterSave) {\n createdId.current = undefined;\n assignNewValuesToForm({ values: {}, fields, reset: true });\n }\n\n await fetchValues({ forceRefresh: true });\n submitSucceed = true;\n message.success(t(\"savedRegisters\"));\n } catch (err) {\n formSubmitting.current = false;\n setIsSubmitting(false);\n setFormIsSaving?.(false);\n onSubmitError?.(err);\n message.error(t(\"errorWhileSavingForm\"));\n setError(err?.message ? err.message : err);\n } finally {\n formSubmitting.current = false;\n setFormIsSaving?.(false);\n setIsSubmitting(false);\n }\n\n return { succeed: submitSucceed, id: getCurrentId()! };\n };\n\n const parseForm = ({\n fields,\n arch,\n values,\n operationInProgress = false,\n }: {\n arch: string;\n fields: any;\n values: any;\n operationInProgress?: boolean;\n }) => {\n const ooui = new FormOoui(fields);\n // TODO: Here we must inject `values` to the ooui parser in order to evaluate arch+values and get the new form container\n ooui.parse(arch, {\n readOnly: readOnly || operationInProgress,\n values: convertToPlain2ManyValues(\n {\n ...values,\n ...getAdditionalValues(),\n },\n fields\n ),\n });\n setFormOoui(ooui);\n\n if (ooui.string && ooui.string !== title) {\n setTitle?.(ooui.string);\n }\n\n if (formModalContext && ooui.string)\n formModalContext.setTitle?.(ooui.string);\n };\n\n const checkFieldsChanges = async ({\n elementHasLostFocus = false,\n }: {\n elementHasLostFocus?: boolean;\n }) => {\n if (formSubmitting.current) return;\n\n const touchedValues = getTouchedValues({\n source: lastAssignedValues.current,\n target: getCurrentValues(fields),\n fields,\n });\n\n const changedFields = Object.keys(touchedValues);\n\n if (changedFields.length !== 0) {\n // We check if there are any field of type text, email, url or char inside the changed values\n // in order to ignore the call, because it will fire when element lost focus\n if (\n checkFieldsType({\n changedFields,\n formOoui: formOoui!,\n types: [\n \"text\",\n \"codeeditor\",\n \"email\",\n \"url\",\n \"char\",\n \"float\",\n \"float_time\",\n \"integer\",\n \"many2one\",\n ],\n }) &&\n elementHasLostFocus !== true\n ) {\n return;\n } else {\n const values = processValues(antForm.getFieldsValue(true), fields);\n lastAssignedValues.current = values;\n\n onFieldsChange?.(values);\n setFormHasChanges?.(true);\n\n evaluateChanges(changedFields);\n }\n }\n };\n\n const debouncedCheckFieldsChanges = debounce(checkFieldsChanges, 100);\n\n const evaluateChanges = async (changedFields: any) => {\n try {\n for (let i = 0; i < changedFields.length; i += 1) {\n const changedField = changedFields[i];\n await processFieldOnChange(changedField);\n }\n } catch (err) {\n showErrorDialog(err);\n }\n };\n\n const processFieldOnChange = async (fieldName: string) => {\n const onChangeFieldAction = formOoui?.onChangeFields[fieldName];\n\n if (!onChangeFieldAction) {\n parseForm({\n fields,\n arch: arch!,\n values: getCurrentValues(fields),\n });\n return;\n }\n\n const payload = getOnChangePayload({\n values: {\n ...getCurrentValues(fields),\n context: {\n ...parentContext,\n ...formOoui?.context,\n },\n },\n parentValues: getParentPlainValues?.(),\n onChangeFieldActionArgs: onChangeFieldAction.args,\n });\n\n const response = await ConnectionProvider.getHandler().executeOnChange({\n model,\n action: onChangeFieldAction.method,\n ids: getCurrentId()! ? [getCurrentId()!] : [],\n payload,\n fields,\n });\n\n if (response.value) {\n const processedValues = {\n ...getCurrentValues(fields),\n ...response.value,\n };\n parseForm({ fields, arch: arch!, values: processedValues });\n assignNewValuesToForm({\n values: processedValues,\n fields: fields,\n reset: false,\n });\n }\n\n if (\n response.warning &&\n response.warning.title &&\n response.warning.message &&\n !warningIsShown.current\n ) {\n const { title, message } = response.warning;\n warningIsShown.current = true;\n showWarningDialog(title, message, () => {\n warningIsShown.current = false;\n });\n }\n\n if (response.domain && Object.keys(response.domain).length > 0) {\n const proccessedFields = mergeFieldsDomain({\n fieldsDomain: response.domain,\n fields,\n });\n\n parseForm({\n fields: proccessedFields,\n arch: arch!,\n values: getCurrentValues(proccessedFields),\n });\n setFields(proccessedFields);\n }\n };\n\n async function runObjectButton({\n action,\n context,\n }: {\n action: string;\n context: any;\n }) {\n const response = await ConnectionProvider.getHandler().execute({\n model,\n action,\n payload: [getCurrentId()!],\n context: {\n ...formOoui?.context,\n ...parentContext,\n ...context,\n },\n });\n\n if (\n typeof response === \"object\" &&\n response !== null &&\n Object.keys(response).length === 0 &&\n insideButtonModal\n ) {\n onSubmitSucceed?.(getCurrentId(), getValues(), getFormValues());\n } else if (\n response.type &&\n response.type === \"ir.actions.act_window_close\"\n ) {\n onSubmitSucceed?.(getCurrentId(), getValues(), getFormValues());\n } else if (response.type) {\n let responseContext = {};\n\n if (response.context) {\n responseContext = parseContext({\n context: response.context,\n fields,\n values: getValues(),\n });\n }\n\n await runAction({\n actionData: response,\n context: { ...context, ...responseContext },\n });\n } else {\n await fetchValues({ forceRefresh: true });\n }\n }\n\n async function runWorkflowButton({ action }: { action: string }) {\n const response = await ConnectionProvider.getHandler().executeWorkflow({\n model,\n action,\n payload: getCurrentId()!,\n });\n\n if (response.type && response.type === \"ir.actions.act_window_close\") {\n onSubmitSucceed?.(getCurrentId(), getValues(), getFormValues());\n } else {\n await fetchValues({ forceRefresh: true });\n }\n }\n\n async function runActionButton({\n action,\n context,\n }: {\n action: string;\n context: any;\n }) {\n const actionData = (\n await ConnectionProvider.getHandler().readObjects({\n model: \"ir.actions.actions\",\n ids: [parseInt(action)],\n context: parentContext,\n })\n )[0];\n\n await runAction({ actionData, context });\n }\n\n async function runAction({\n actionData,\n context,\n }: {\n actionData: any;\n context: any;\n }) {\n const { closeParent } =\n (await processAction?.({\n actionData,\n fields,\n values: getValues(),\n context: {\n ...parentContext,\n ...formOoui?.context,\n ...context,\n },\n onRefreshParentValues: () => {\n fetchValues({ forceRefresh: true });\n },\n })) || {};\n\n if (!rootForm && closeParent) {\n onSubmitSucceed?.(getCurrentId(), getValues(), getFormValues());\n }\n }\n\n function elementHasLostFocus() {\n checkFieldsChanges({ elementHasLostFocus: true });\n }\n\n function updateOperationInProgress(value: boolean) {\n parseForm({\n fields,\n arch: arch!,\n values: getCurrentValues(fields),\n operationInProgress: value,\n });\n }\n\n async function executeButtonAction({\n type,\n action,\n context,\n }: {\n type: string;\n action: string;\n context?: any;\n }) {\n // If the type of the button it's a cancel, we just close our form\n if (type === \"cancel\") {\n onCancel?.();\n return;\n }\n\n // We check for required fields\n if (await checkIfFormHasErrors()) {\n formErrorsDialog(lang);\n return;\n }\n\n try {\n if (formHasChanges() || getCurrentId() === undefined) {\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 updateOperationInProgress(true);\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 updateOperationInProgress(false);\n } catch (err) {\n updateOperationInProgress(false);\n showErrorDialog(err);\n }\n }\n\n const content = () => {\n if (!formOoui && !error) {\n return <Spin />;\n }\n\n if (!model && !formViewProps) {\n return null;\n }\n\n if (!visible) {\n return null;\n }\n\n return (\n <>\n <FormProvider\n getValues={getValues}\n getPlainValues={getPlainValues}\n getFields={getFields}\n domain={actionDomain}\n activeId={id}\n activeModel={model}\n setFieldValue={setFieldValue}\n getFieldValue={getFieldValue}\n executeButtonAction={executeButtonAction}\n getContext={getContext}\n submitForm={submitForm}\n fetchValues={fetchValues}\n formHasChanges={formHasChanges}\n elementHasLostFocus={elementHasLostFocus}\n >\n <AntForm\n form={antForm}\n onFieldsChange={() => {\n debouncedCheckFieldsChanges({ elementHasLostFocus: false });\n }}\n component={false}\n >\n {formOoui && (\n <Container\n container={formOoui.container}\n responsiveBehaviour={responsiveBehaviour}\n />\n )}\n </AntForm>\n </FormProvider>\n </>\n );\n };\n\n const footer = () => {\n return (\n <>\n <Divider />\n <Row justify=\"end\">\n <Space>\n <Button\n icon={<CloseOutlined />}\n disabled={isSubmitting}\n onClick={async () => {\n await cancelUnsavedChanges();\n }}\n >\n Cancel\n </Button>\n <Button\n disabled={isSubmitting || readOnly}\n loading={isSubmitting}\n icon={<CheckOutlined />}\n onClick={async () => {\n await submitForm();\n }}\n type=\"primary\"\n >\n OK\n </Button>\n </Space>\n </Row>\n </>\n );\n };\n\n if (!visible) {\n return null;\n }\n\n return (\n <Measure\n bounds\n onResize={(contentRect) => {\n setContainerWidth(contentRect.bounds?.width!);\n }}\n >\n {({ measureRef }) => (\n <div className=\"pb-2\" ref={measureRef}>\n {error && <ErrorAlert className=\"mt-5 mb-10\" error={error} />}\n {content()}\n {showFooter && footer()}\n </div>\n )}\n </Measure>\n );\n}\n\nexport default forwardRef(Form);\n","import React, { useEffect, useState } from \"react\";\nimport { Button, Col, Modal, Row, Tooltip } from \"antd\";\nimport Form, { FormProps } from \"@/widgets/views/Form\";\nimport useWindowDimensions from \"@/hooks/useWindowDimensions\";\nimport FormModalProvider from \"@/context/FormModalContext\";\nimport { StarOutlined, StarFilled } from \"@ant-design/icons\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\n\ntype FormModalProps = FormProps & {\n visible: boolean;\n title?: string;\n buttonModal?: boolean;\n isMenuAction?: boolean;\n actionData?: any;\n};\n\nexport const FormModal = (props: FormModalProps) => {\n const {\n visible,\n id,\n title,\n buttonModal = false,\n onCancel,\n isMenuAction = false,\n actionData,\n ...rest\n } = props;\n\n const { modalWidth } = useWindowDimensions();\n const [formTitle, setFormTitle] = useState<string>(title!);\n const [isFavourite, setIsFavourite] = useState(false);\n const [currentShortcutId, setCurrentShortcutId] = useState<number>();\n\n useEffect(() => {\n if (isMenuAction) {\n checkFavourite();\n }\n }, [actionData, isMenuAction]);\n\n async function checkFavourite() {\n const { action_id, res_id, action_type, view_id } = actionData;\n\n const result = await ConnectionProvider.getHandler().isShortcutFavorite({\n action_id,\n action_type,\n view_id,\n res_id: res_id || false,\n });\n\n setIsFavourite(result !== false);\n\n if (result !== false) {\n setCurrentShortcutId(result as number);\n }\n }\n\n async function toggleFavourite() {\n if (isFavourite && currentShortcutId) {\n await ConnectionProvider.getHandler().removeFavourite({\n shortcut_id: currentShortcutId,\n });\n } else {\n const { action_id, res_id, action_type, view_id } = actionData;\n\n await ConnectionProvider.getHandler().addFavourite({\n action_id,\n action_type,\n view_id,\n res_id: res_id || false,\n });\n }\n\n setIsFavourite(!isFavourite);\n }\n\n function header() {\n return (\n <Row align=\"middle\">\n <Col>\n <Button\n type={isFavourite ? \"primary\" : \"default\"}\n icon={\n isFavourite ? (\n <StarFilled style={{ color: \"white\" }} />\n ) : (\n <StarOutlined />\n )\n }\n style={{ width: 30 }}\n onClick={toggleFavourite}\n ></Button>\n </Col>\n <Col style={{ paddingLeft: 10 }}>{formTitle}</Col>\n </Row>\n );\n }\n\n const contentWidth = modalWidth * 0.95;\n return (\n <FormModalProvider setTitle={setFormTitle}>\n <Modal\n title={isMenuAction ? header() : formTitle}\n centered\n width={modalWidth}\n open={visible}\n footer={null}\n destroyOnClose\n onCancel={onCancel}\n maskClosable={false}\n >\n <Form\n id={id}\n showFooter={true}\n insideButtonModal={buttonModal}\n onCancel={onCancel}\n parentWidth={contentWidth}\n {...rest}\n />\n </Modal>\n </FormModalProvider>\n );\n};\n","import { DatePicker } from \"antd\";\n\nimport React from \"react\";\nimport Field from \"@/common/Field\";\nimport { WidgetProps } from \"@/types\";\n\nexport const DateRangePicker = (props: WidgetProps) => {\n return (\n <Field {...props} layout={\"vertical\"}>\n <DatePicker.RangePicker\n allowEmpty={[true, true]}\n format={\"DD/MM/YYYY\"}\n ></DatePicker.RangePicker>\n </Field>\n );\n};\n","import { DatePicker, TimePicker } from \"antd\";\n\nimport React from \"react\";\nimport Field from \"@/common/Field\";\nimport { Field as FieldOoui, Label as LabelOoui } from \"@gisce/ooui\";\nimport { WidgetProps } from \"@/types\";\nimport Label from \"@/widgets/base/Label\";\n\nimport { Row, Col } from \"antd\";\n\nexport const DateTimeRangePicker = (props: WidgetProps) => {\n const { ooui, showLabel = false } = props;\n const { label, id } = ooui;\n\n const fields = [\n new FieldOoui({\n name: id + \"#date\",\n label: \"\",\n }),\n new FieldOoui({\n name: id + \"#time\",\n label: \"\",\n }),\n ];\n\n return (\n <>\n {showLabel && (\n <Label\n ooui={\n new LabelOoui({\n name: id + \"_label\",\n string: label,\n help: ooui.tooltip,\n fieldForLabel: id,\n })\n }\n align={\"left\"}\n />\n )}\n <Row align={\"bottom\"} className=\"p-0\">\n <Col className=\"mr-2\">\n <Field {...props} ooui={fields[0]} showLabel={false}>\n <DatePicker.RangePicker\n className=\"w-60\"\n allowEmpty={[true, true]}\n format={\"DD/MM/YYYY\"}\n ></DatePicker.RangePicker>\n </Field>\n </Col>\n <Col>\n <Field {...props} ooui={fields[1]} showLabel={false}>\n <TimePicker.RangePicker\n className=\"w-60\"\n allowEmpty={[true, true]}\n format={\"HH:mm\"}\n ></TimePicker.RangePicker>\n </Field>\n </Col>\n </Row>\n </>\n );\n};\n","import React, { useContext } from \"react\";\nimport { InputNumber, theme } from \"antd\";\nimport Field from \"@/common/Field\";\nimport { Float as FloatOoui } from \"@gisce/ooui\";\nimport { WidgetProps } from \"@/types\";\nconst { useToken } = theme;\n\nimport { FormContext, FormContextType } from \"@/context/FormContext\";\n\nexport const Float = (props: WidgetProps) => {\n const { ooui } = props;\n const { id, decimalDigits, readOnly, required } = ooui as FloatOoui;\n const { token } = useToken();\n\n const requiredStyle =\n required && !readOnly\n ? { backgroundColor: token.colorPrimaryBg }\n : undefined;\n const formContext = useContext(FormContext) as FormContextType;\n const { elementHasLostFocus } = formContext || {};\n\n return (\n <Field required={required} type={\"number\"} {...props}>\n <InputNumber\n disabled={readOnly}\n className={\"w-full\"}\n style={requiredStyle}\n id={id}\n precision={decimalDigits}\n formatter={(value) => {\n return `${value}`.replace(/[^0-9\\.\\-]+/g, \"\");\n }}\n defaultValue={0}\n decimalSeparator={\".\"}\n onBlur={elementHasLostFocus}\n />\n </Field>\n );\n};\n","import React, { useContext } from \"react\";\nimport { InputNumber, theme } from \"antd\";\nimport Field from \"@/common/Field\";\nimport { WidgetProps } from \"@/types\";\nimport { FormContext, FormContextType } from \"@/context/FormContext\";\nconst { useToken } = theme;\n\ntype IntegerProps = WidgetProps & {\n onChange?: (newValue: number) => void;\n};\n\nexport const Integer = (props: IntegerProps) => {\n const { ooui, onChange } = props;\n const { id, readOnly, required } = ooui;\n const { token } = useToken();\n const requiredStyle =\n required && !readOnly\n ? { backgroundColor: token.colorPrimaryBg }\n : undefined;\n const formContext = useContext(FormContext) as FormContextType;\n const { elementHasLostFocus } = formContext || {};\n\n return (\n <Field required={required} type={\"number\"} {...props}>\n <InputNumber\n id={id}\n className={\"w-full \"}\n disabled={readOnly}\n formatter={(value) => {\n // Check if value is not undefined and is a valid number\n if (value === undefined) {\n return \"\";\n }\n\n if (typeof value === \"string\" && !isNaN(parseFloat(value))) {\n let truncatedValue = Math.trunc(parseFloat(value));\n return `${truncatedValue}`.replace(/[^0-9\\-]+/g, \"\");\n } else if (typeof value === \"number\") {\n let truncatedValue = Math.trunc(value);\n return `${truncatedValue}`.replace(/[^0-9\\-]+/g, \"\");\n }\n\n return \"\";\n }}\n onChange={(newValue: any) => {\n const newNumber = newValue as number;\n onChange?.(newNumber);\n }}\n defaultValue={0}\n onBlur={elementHasLostFocus}\n precision={0}\n style={requiredStyle}\n />\n </Field>\n );\n};\n","import React from \"react\";\nimport { Row, Col } from \"antd\";\nimport { Float } from \"@/widgets/base/Float\";\nimport { Integer } from \"@/widgets/base/Integer\";\nimport { Integer as IntegerOoui, Label as LabelOoui } from \"@gisce/ooui\";\nimport Label from \"@/widgets/base/Label\";\nimport { WidgetProps } from \"@/types\";\n\ntype Props = {\n ooui: any;\n};\n\nexport function PairFields(props: WidgetProps): React.ReactElement {\n const { ooui, showLabel } = props;\n const { id, label, tooltip } = ooui;\n const Widget = ooui instanceof IntegerOoui ? Integer : Float;\n\n const getWidget = (suffix: string) => {\n return (\n <Widget\n ooui={{\n ...(ooui as any),\n id: id + suffix,\n label: \"\",\n tooltip: undefined,\n }}\n layout=\"vertical\"\n />\n );\n };\n\n return (\n <>\n {showLabel && (\n <Label\n ooui={\n new LabelOoui({\n name: id + \"_label\",\n string: label,\n help: tooltip,\n fieldForLabel: id,\n })\n }\n align={\"left\"}\n />\n )}\n <Row align={\"bottom\"} className=\"mt-0\" wrap={false}>\n <Col>{getWidget(\"#from\")}</Col>\n <Col className=\"pb-1\">\n <span className=\"pl-2 pr-2 h-full\"> - </span>\n </Col>\n <Col>{getWidget(\"#to\")}</Col>\n </Row>\n </>\n );\n}\n","import React from \"react\";\nimport { Select } from \"antd\";\nimport styled from \"styled-components\";\n\nimport Field from \"@/common/Field\";\nimport { Selection as SelectionOoui } from \"@gisce/ooui\";\nimport { WidgetProps } from \"@/types\";\nimport { theme } from \"antd\";\n\nconst { defaultAlgorithm, defaultSeed } = theme;\n\nconst mapToken = defaultAlgorithm(defaultSeed);\n\nconst { Option } = Select;\n\nexport const MultiSelection = (props: WidgetProps) => {\n const { ooui } = props;\n const { required } = ooui;\n\n return (\n <Field required={required} type={\"any\"} {...props}>\n <MultiSelectionInput {...props} />\n </Field>\n );\n};\n\ntype SelectionInputProps = WidgetProps & {\n onChange?: (value: any) => void;\n value?: string[];\n};\n\nexport const MultiSelectionInput = (props: SelectionInputProps) => {\n const { ooui, onChange, value } = props;\n const { selectionValues, readOnly, required } = ooui as SelectionOoui;\n\n const values = Array.from(selectionValues.entries());\n\n const options =\n values &&\n values.length &&\n values\n .filter((optionValueKeyPair) => {\n const [optionKey] = optionValueKeyPair;\n if (!value) {\n return true;\n }\n return !value.includes(optionKey);\n })\n .map((entry: string[]) => {\n const [key, value] = entry;\n return (\n <Option key={key} value={value}>\n {value}\n </Option>\n );\n });\n\n const CustomSelect: any = required && !readOnly ? RequiredSelect : Select;\n\n function handleChange(changedValues: string[]) {\n const keysForChangedValues = changedValues.map((changedValue) => {\n const entry = values.find(([key, value]) => changedValue === value);\n return entry && entry[0];\n });\n\n if (keysForChangedValues.length === 0) {\n onChange?.(undefined);\n return;\n }\n\n onChange?.(keysForChangedValues);\n }\n\n return (\n <CustomSelect\n disabled={readOnly}\n onChange={handleChange}\n value={value?.map((key) => selectionValues.get(key))}\n mode=\"multiple\"\n showArrow={true}\n >\n {options}\n </CustomSelect>\n );\n};\n\nconst RequiredSelect = styled(Select)`\n &.ant-select:not(.ant-select-customize-input) .ant-select-selector {\n background-color: ${mapToken.colorPrimaryBg};\n }\n`;\n","import React, { useContext } from \"react\";\n\nimport { Char } from \"@/widgets/base/Char\";\nimport { Selection } from \"@/widgets/base/Selection\";\nimport { DateRangePicker } from \"./DateRangePicker\";\nimport { DateTimeRangePicker } from \"./DateTimeRangePicker\";\nimport { PairFields } from \"./PairFields\";\n\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\nimport { Field, SearchFieldTypes, Selection as SelectionOoui } from \"@gisce/ooui\";\nimport { MultiSelection } from \"@/widgets/base/MultiSelection\";\n\ntype Props = {\n field: Field;\n};\n\nexport function SearchField(props: Props) {\n const { field } = props;\n field.readOnly = false;\n field.required = false;\n\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n const widgetType = field.type;\n\n switch (widgetType) {\n case SearchFieldTypes.boolean: {\n const ooui = new SelectionOoui({\n name: field._id,\n string: field.label,\n selection: [\n [\"true\", t(\"true\")],\n [\"false\", t(\"false\")],\n ],\n });\n\n return <Selection layout=\"vertical\" ooui={ooui} showLabel />;\n }\n case SearchFieldTypes.float:\n case SearchFieldTypes.progressbar:\n case SearchFieldTypes.float_time:\n case SearchFieldTypes.integer: {\n return <PairFields ooui={field} showLabel />;\n }\n case SearchFieldTypes.date: {\n return <DateRangePicker ooui={field} layout=\"vertical\" showLabel />;\n }\n case SearchFieldTypes.datetime: {\n return <DateTimeRangePicker ooui={field} layout=\"vertical\" showLabel />;\n }\n case SearchFieldTypes.selection: {\n return <MultiSelection layout=\"vertical\" ooui={field} showLabel />;\n }\n default: {\n return <Char ooui={field} layout=\"vertical\" showLabel isSearchField />;\n }\n }\n}\n","import React, { useContext } from \"react\";\n\nimport { Row, Col, Button } from \"antd\";\nimport {\n DownOutlined,\n UpOutlined,\n SearchOutlined,\n ClearOutlined,\n} from \"@ant-design/icons\";\n\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\ntype Props = {\n advancedFilter: boolean;\n isSearching: boolean;\n onAdvancedFilterToggle: () => void;\n onClear: () => void;\n};\n\nexport function SearchBottomBar(props: Props): React.ReactElement {\n const {\n onAdvancedFilterToggle,\n advancedFilter,\n onClear,\n isSearching,\n } = props;\n\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n return (\n <Row>\n <Col span={12} className=\"text-left pt-4 pb-2 pl-2\">\n <a className=\"text-xs\" onClick={onAdvancedFilterToggle}>\n {advancedFilter ? (\n <UpOutlined className=\"pr-1\" />\n ) : (\n <DownOutlined className=\"pr-1\" />\n )}\n {advancedFilter ? t(\"simple_search\") : t(\"advanced_search\")}\n </a>\n </Col>\n <Col span={12} className=\"text-right pb-2\">\n <Button className=\"mr-5\" icon={<ClearOutlined />} onClick={onClear}>\n {t(\"clear\")}\n </Button>\n <Button\n icon={<SearchOutlined />}\n loading={isSearching}\n className=\"mr-2\"\n type=\"primary\"\n htmlType=\"submit\"\n >\n {t(\"search\")}\n </Button>\n </Col>\n </Row>\n );\n}\n","import React, { useContext } from \"react\";\n\nimport { Integer } from \"@/widgets/base/Integer\";\nimport { Row, Space } from \"antd\";\nimport { Integer as IntegerOoui } from \"@gisce/ooui\";\n\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\ntype SearchParamsProps = {\n onLimitChange?: (limit: number) => void;\n}\n\nexport function SearchParams(props: SearchParamsProps): React.ReactElement {\n const { onLimitChange } = props;\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n const limitOoui = new IntegerOoui({ name: \"limit\" });\n const offsetOoui = new IntegerOoui({ name: \"offset\" });\n return (\n <div className=\"pl-2 pt-2\">\n <Row key={\"count_params\"}>{t(\"parameters\")}</Row>\n <Space align=\"center\">\n {t(\"limit\") + \" :\"}\n <Integer ooui={limitOoui} onChange={(newValue: number) => {\n onLimitChange?.(newValue);\n }}/>\n {t(\"first\") + \" :\"}\n <Integer ooui={offsetOoui} />\n </Space>\n </div>\n );\n}\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { Form, Row, Col, Alert, theme } from \"antd\";\nimport useDeepCompareEffect from \"use-deep-compare-effect\";\n\nimport {\n SearchFilter as SearchFilterOoui,\n Container,\n Field,\n} from \"@gisce/ooui\";\n\nimport { SearchField } from \"./SearchField\";\nimport { SearchBottomBar } from \"./SearchBottomBar\";\nimport { SearchFields } from \"@/types\";\nimport { SearchParams } from \"./SearchParams\";\n\nimport { getParamsForFields } from \"@/helpers/searchHelper\";\nimport Measure from \"react-measure\";\nconst { useToken } = theme;\n\ntype Props = {\n fields: any;\n searchFields: SearchFields;\n onClear: () => void;\n onSubmit: (values: any) => void;\n isSearching: boolean;\n limit: number;\n offset: number;\n onLimitChange?: (limit: number) => void;\n searchVisible?: boolean;\n setSearchFilterHeight?: (height: number) => void;\n searchError?: string;\n searchValues?: any;\n showLimitOptions?: boolean;\n};\n\nfunction SearchFilter(props: Props) {\n const {\n fields,\n searchFields = { primary: [], secondary: [] },\n onClear,\n onSubmit,\n isSearching,\n offset,\n limit,\n onLimitChange,\n searchVisible,\n setSearchFilterHeight,\n searchError,\n searchValues,\n showLimitOptions = true,\n } = props;\n\n const [simpleSearchFields, setSimpleSearchFields] = useState<Container>();\n const [advancedSearchFields, setAdvancedSearchFields] = useState<Container>();\n const [advancedFilter, setAdvancedFilter] = useState(false);\n const sfo = useRef<SearchFilterOoui>();\n const { token } = useToken();\n\n const [form] = Form.useForm();\n\n useEffect(() => {\n form.setFieldsValue(searchValues);\n }, [searchValues]);\n\n const getRowsAndCols = () => {\n if (!advancedSearchFields) {\n return;\n }\n\n const fields = advancedFilter ? advancedSearchFields : simpleSearchFields;\n const rows = fields?.rows;\n\n return rows?.map((row, i) => {\n return (\n <Row key={i}>\n {row.map((item, j) => {\n return (\n <Col xs={24} className=\"p-2\" xl={6} key={j}>\n <SearchField field={item as Field} />\n </Col>\n );\n })}\n </Row>\n );\n });\n };\n\n useDeepCompareEffect(() => {\n setAdvancedFilter(false);\n sfo.current = new SearchFilterOoui(searchFields, fields);\n sfo.current.parse();\n setSimpleSearchFields(sfo.current._simpleSearchContainer);\n setAdvancedSearchFields(sfo.current._advancedSearchContainer);\n }, [fields, searchFields]);\n\n const rows = getRowsAndCols();\n\n const onFinish = (values: any) => {\n const { limit, offset } = values;\n delete values.offset;\n delete values.limit;\n const newParams = getParamsForFields(\n values,\n sfo.current?._advancedSearchContainer\n );\n\n onSubmit({ params: newParams, offset, limit, searchValues: values });\n };\n\n return (\n <Measure\n bounds\n onResize={(contentRect) => {\n setSearchFilterHeight?.(contentRect.bounds?.height!);\n }}\n >\n {({ measureRef }) => (\n <div ref={measureRef}>\n <div style={{ display: searchVisible ? \"block\" : \"none\" }}>\n <Form\n className=\"p-3 shadow-md\"\n style={{ borderRadius: token.borderRadius }}\n form={form}\n onFinish={onFinish}\n initialValues={{ offset, limit }}\n >\n {rows}\n {advancedFilter && showLimitOptions && (\n <SearchParams onLimitChange={onLimitChange} />\n )}\n <SearchBottomBar\n advancedFilter={advancedFilter}\n onAdvancedFilterToggle={() => {\n setAdvancedFilter(!advancedFilter);\n }}\n onClear={() => {\n form.resetFields();\n onClear();\n }}\n isSearching={isSearching}\n />\n </Form>\n {searchError && (\n <Alert\n className=\"mt-10\"\n message={searchError}\n type=\"error\"\n banner\n />\n )}\n <div className=\"pb-5\" />\n </div>\n </div>\n )}\n </Measure>\n );\n}\n\nexport default SearchFilter;\n","/**\n * This function calculate the width of a string based on its length\n * @param {String} text\n * @param {String} font\n */\nconst getTextWidth = (text: string, font = \"14px -apple-system\") => {\n const canvas = document.createElement(\"canvas\");\n const context = canvas.getContext(\"2d\");\n context!.font = font;\n const metrics = context!.measureText(text);\n return Math.round((metrics.width + 80) * 1.5);\n};\n\n/**\n * This function calculates the width of each column based in all CELL VALUES\n * @param {Array} columns\n * @param {Array} source\n * @param {Number} maxWidthPerCell\n */\nexport const calculateColumnsWidth = (\n columns: any,\n source: any,\n maxWidthPerCell = 500\n) => {\n if (columns.length === 0) {\n return columns;\n }\n\n // First we calculate the width for each column\n // The column width is based on its string length\n\n const columnsWithWidth = columns.map((column: any) =>\n Object.assign(column, {\n width: getTextWidth(column.title),\n })\n );\n\n // Since we have a minimum width (column's width already calculated),\n // now we are going to verify if the cell value is bigger\n // than the column width which is already set\n\n source.map((entry: any) => {\n columnsWithWidth.map((column: any, indexColumn: number) => {\n const columnWidth = column.width;\n const cellValue = (entry[column.key] as string) || \"\";\n\n // Get the string width based on chars length\n let cellWidth = getTextWidth(cellValue);\n\n // Verify if the cell value is smaller than column's width\n if (cellWidth < columnWidth) cellWidth = columnWidth;\n\n // Verify if the cell value width is bigger than our max width flag\n if (cellWidth > maxWidthPerCell) cellWidth = maxWidthPerCell;\n\n // Update the column width\n columnsWithWidth[indexColumn].width = cellWidth;\n });\n });\n\n // Sum of all columns width to determine the table max width\n const tableWidth = columnsWithWidth\n .map((column: any) => column.width)\n .reduce((a: any, b: any) => {\n return a + b;\n });\n\n return {\n columns: columnsWithWidth,\n source,\n tableWidth,\n };\n};\n","function parseStringToFloat(text?: string) {\n if (!text) {\n return undefined;\n }\n\n try {\n if (text.includes(\":\")) {\n const splitted = text.trim().split(\":\");\n return (\n Math.round(\n (parseInt(splitted[0]) + parseInt(splitted[1]) / 60.0) * 10000\n ) / 10000\n );\n } else {\n return parseFloat(text.trim());\n }\n } catch (err) {\n return 0;\n }\n}\n\nfunction parseFloatToString(num?: number) {\n if (num === undefined) {\n return undefined;\n }\n\n let finalString;\n let hours = Math.floor(Math.abs(num));\n let mins = Math.round((Math.abs(num) % 1) * 100) / 100;\n\n if (mins >= 1) {\n hours = hours + 1;\n mins = 0.0;\n } else {\n mins = mins * 60;\n }\n\n const hoursString = hours.toLocaleString(\"en-US\", {\n minimumIntegerDigits: 2,\n maximumFractionDigits: 0,\n useGrouping: false,\n });\n const minsStrings = mins.toLocaleString(\"en-US\", {\n minimumIntegerDigits: 2,\n maximumFractionDigits: 0,\n useGrouping: false,\n });\n\n finalString = `${hoursString}:${minsStrings}`;\n\n if (num < 0) {\n finalString = \"-\" + finalString;\n }\n\n return finalString;\n}\n\nexport { parseStringToFloat, parseFloatToString };","import React from \"react\";\nimport { Progress } from \"antd\";\nimport Field from \"@/common/Field\";\nimport { WidgetProps } from \"@/types\";\nimport styled from \"styled-components\";\n\nexport const ProgressBar = (props: WidgetProps) => {\n return (\n <Field {...props}>\n <ProgressBarInput />\n </Field>\n );\n};\n\nexport const ProgressBarInput = ({ value }: { value?: number }) => {\n const textValue = `${(value || 0).toLocaleString(\"en-US\", {\n minimumIntegerDigits: 1,\n maximumFractionDigits: 4,\n useGrouping: false,\n })}%`;\n\n return (\n <div style={{ flex: 1, display: \"flex\", alignItems: \"center\" }}>\n <StyledProgress percent={value} />\n <div style={{ flexGrow: 1, paddingLeft: 10 }}>{textValue}</div>\n </div>\n );\n};\n\nconst StyledProgress = styled(Progress)`\n .ant-progress-outer {\n margin-right: 0px;\n padding-right: 0px;\n }\n .ant-progress-text {\n display: none;\n }\n`;\n","import React, { useContext } from \"react\";\nimport { Modal, Button, Space } from \"antd\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\ntype Props = {\n visible: boolean;\n items: any[];\n onItemClicked: (item: any) => void;\n onCancel: () => void;\n};\n\nexport const Many2oneSuffixModal = (props: Props) => {\n const { visible, onCancel, items = [], onItemClicked } = props;\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n return (\n (<Modal\n title={t(\"selectAction\")}\n centered\n open={visible}\n footer={null}\n destroyOnClose\n onCancel={onCancel}\n maskClosable={false}\n >\n <Space direction=\"vertical\" className=\"w-full\">\n {items.map((item) => {\n return (\n <Button\n className=\"w-full\"\n onClick={() => {\n onItemClicked(item);\n }}\n >\n {item.name}\n </Button>\n );\n })}\n </Space>\n </Modal>)\n );\n};\n","import React, { useContext, useState, useEffect } from \"react\";\nimport {\n RightCircleOutlined,\n PrinterOutlined,\n ThunderboltOutlined,\n EnterOutlined,\n} from \"@ant-design/icons\";\nimport { Menu, Dropdown, Spin } from \"antd\";\nimport {\n TabManagerContext,\n TabManagerContextType,\n} from \"@/context/TabManagerContext\";\nimport { FormView } from \"@/types\";\nimport { Many2oneSuffixModal } from \"./Many2oneSuffixModal\";\nimport {\n ContentRootContext,\n ContentRootContextType,\n} from \"@/context/ContentRootContext\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport { processValues } from \"@/helpers/formHelper\";\nimport showErrorDialog from \"@/ui/ActionErrorDialog\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport { parseContextFields, parseDomainFields } from \"@gisce/ooui\";\n\ntype Props = {\n id: number;\n model: string;\n context?: any;\n};\n\nexport const Many2oneSuffix = (props: Props) => {\n const { id, model, context = {} } = props;\n const [actionModalVisible, setActionModalVisible] = useState<boolean>(false);\n const [printModalVisible, setPrintModalVisible] = useState<boolean>(false);\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [formView, setFormView] = useState<FormView>();\n const [targetValues, setTargetValues] = useState<any>();\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n const tabManagerContext = useContext(\n TabManagerContext\n ) as TabManagerContextType;\n const { openRelate } = tabManagerContext || {};\n\n const contentRootContext = useContext(\n ContentRootContext\n ) as ContentRootContextType;\n const { processAction } = contentRootContext || {};\n\n if (!id) {\n return null;\n }\n\n async function fetchData() {\n setIsLoading(true);\n\n try {\n const formView = await ConnectionProvider.getHandler().getView({\n model,\n type: \"form\",\n context,\n }) as FormView;\n setFormView(formView);\n let fields: string[] = [];\n const { toolbar } = formView;\n toolbar.action?.filter((item: any) => item.hasOwnProperty('context')).map((item: any) => fields.push(...parseContextFields(item.context)));\n toolbar.action?.filter((item: any) => item.hasOwnProperty('domain')).map((item: any) => fields.push(...parseDomainFields(item.domain)));\n toolbar.relate?.filter((item: any) => item.hasOwnProperty('context')).map((item: any) => fields.push(...parseContextFields(item.context)));\n toolbar.relate?.filter((item: any) => item.hasOwnProperty('domain')).map((item: any) => fields.push(...parseDomainFields(item.domain)));\n toolbar.print?.filter((item: any) => item.hasOwnProperty('context')).map((item: any) => fields.push(...parseContextFields(item.context)));\n fields = fields.filter((i) => Object.keys(formView.fields).indexOf(i) > -1)\n\n let values = {}\n\n if (fields.length > 0) {\n values = (\n await ConnectionProvider.getHandler().readObjects({\n model,\n ids: [id],\n fieldsToRetrieve: fields,\n context,\n })\n )[0];\n }\n values = { ...processValues(values, fields), active_id: id };\n setTargetValues(values);\n\n setIsLoading(false);\n } catch (err) {\n setIsLoading(false);\n showErrorDialog(err);\n return;\n }\n }\n\n function menu() {\n if (isLoading) {\n return (\n <Menu>\n <div style={{ padding: 15 }}>\n <Spin />\n </div>\n </Menu>\n );\n }\n\n if (!formView || !formView.toolbar) {\n return <Menu />;\n }\n\n const relateItems = formView?.toolbar?.relate.map((item: any) => {\n return <Menu.Item key={item.id}>{item.name}</Menu.Item>;\n });\n\n return (\n <Menu onClick={handleMenuClick}>\n {[\n <Menu.Item\n key=\"action\"\n disabled={\n !formView!.toolbar.action || formView!.toolbar.action.length === 0\n }\n icon={<ThunderboltOutlined />}\n >\n {t(\"action\")}\n </Menu.Item>,\n <Menu.Item\n key=\"print\"\n disabled={\n !formView!.toolbar.print || formView!.toolbar.print.length === 0\n }\n icon={<PrinterOutlined />}\n >\n {t(\"report\")}\n </Menu.Item>,\n <Menu.Divider />,\n <Menu.ItemGroup\n title={\n <>\n <EnterOutlined /> <span> {t(\"related\")}</span>\n </>\n }\n >\n {relateItems}\n </Menu.ItemGroup>,\n ]}\n </Menu>\n );\n }\n\n function handleMenuClick(event: any) {\n if (event.key === \"action\") {\n setActionModalVisible(true);\n } else if (event.key === \"print\") {\n setPrintModalVisible(true);\n } else {\n const relateItemClicked = formView!.toolbar.relate.find((item: any) => {\n return item.id === parseInt(event.key);\n });\n if (!relateItemClicked) {\n return;\n }\n\n openRelate({\n relateData: relateItemClicked,\n values: targetValues,\n fields: formView!.fields,\n action_id: relateItemClicked.id,\n action_type: relateItemClicked.type,\n });\n }\n }\n\n function onActionItemClicked(actionData: any) {\n setActionModalVisible(false);\n processAction?.({\n actionData,\n values: targetValues,\n fields: formView!.fields,\n context: { active_id: id, active_ids: [id] },\n });\n }\n\n function onPrintItemClicked(reportData: any) {\n setPrintModalVisible(false);\n processAction?.({\n actionData: {\n ...reportData,\n datas: { ...(reportData.datas || {}), ids: [id] },\n },\n values: targetValues,\n fields: formView!.fields,\n });\n }\n\n return (\n <>\n <Dropdown overlay={menu()} trigger={[\"click\"]}>\n <RightCircleOutlined\n style={{ color: \"rgba(0,0,0,.45)\" }}\n onClick={(e) => {\n e.preventDefault();\n fetchData();\n }}\n />\n </Dropdown>\n <Many2oneSuffixModal\n visible={actionModalVisible}\n items={formView?.toolbar?.action}\n onItemClicked={onActionItemClicked}\n onCancel={() => setActionModalVisible(false)}\n />\n <Many2oneSuffixModal\n visible={printModalVisible}\n items={formView?.toolbar?.print}\n onItemClicked={onPrintItemClicked}\n onCancel={() => setPrintModalVisible(false)}\n />\n </>\n );\n};\n","import { Space } from \"antd\";\nimport React from \"react\";\nimport { Many2oneSuffix } from \"./Many2oneSuffix\";\n\nexport type Many2oneTreeProps = { m2oField: any };\n\nexport const Many2oneTree = (props: Many2oneTreeProps): React.ReactElement => {\n const { m2oField } = props;\n if (!m2oField) {\n return <></>;\n }\n return (\n <Space>\n <>{m2oField.value}</>\n <Many2oneSuffix id={m2oField.id} model={m2oField.model} />\n </Space>\n );\n};\n","import ConnectionProvider from \"@/ConnectionProvider\";\nimport { Space } from \"antd\";\nimport React, { useCallback, useEffect, useState } from \"react\";\nimport { Many2oneSuffix } from \"./many2one/Many2oneSuffix\";\nimport { LoadingOutlined } from \"@ant-design/icons\";\n\nexport type ReferenceTreeProps = {\n value: string;\n context?: any;\n selectionValues?: any;\n};\n\nexport const ReferenceTree = (\n props: ReferenceTreeProps\n): React.ReactElement => {\n const { value, context, selectionValues } = props;\n const [name, setName] = useState();\n const [loading, setLoading] = useState(false);\n\n const [model, id] = value ? value.split(\",\") : [];\n const intId = parseInt(id);\n\n const fetchName = useCallback(async () => {\n if (!value) {\n return;\n }\n if (value && name) {\n return;\n }\n setLoading(true);\n const nameResponse = await ConnectionProvider.getHandler().execute({\n action: \"name_get\",\n payload: [intId],\n model,\n context,\n });\n setName(nameResponse[0][1]);\n setLoading(false);\n }, [value, name]);\n\n useEffect(() => {\n fetchName();\n }, [value]);\n\n if (!value && !loading) {\n return <></>;\n }\n\n if (loading) {\n return <LoadingOutlined />;\n }\n\n const selectionDescription = selectionValues.get(model);\n\n return (\n <Space>\n <>{`${selectionDescription}:`}</>\n <>{name}</>\n <Many2oneSuffix id={intId} model={model} />\n </Space>\n );\n};\n","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",f=\"month\",h=\"quarter\",c=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,f),s=n-i<0,u=e.clone().add(r+(s?-1:1),f);return+(-(r+(n-i)/(s?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:f,y:c,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:h}[t]||String(t||\"\").toLowerCase().replace(/s$/,\"\")},u:function(t){return void 0===t}},g=\"en\",D={};D[g]=M;var p=function(t){return t instanceof _},S=function t(e,n,r){var i;if(!e)return g;if(\"string\"==typeof e){var s=e.toLowerCase();D[s]&&(i=s),n&&(D[s]=n,i=s);var u=e.split(\"-\");if(!i&&u.length>1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},w=function(t,e){if(p(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},O=v;O.l=S,O.i=p,O.w=function(t,e){return w(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=S(t.locale,null,!0),this.parse(t)}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(O.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.$x=t.x||{},this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return O},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=w(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return w(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<w(t)},m.$g=function(t,e,n){return O.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!O.u(e)||e,h=O.p(t),l=function(t,e){var i=O.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(a)},$=function(t,e){return O.w(n.toDate()[t].apply(n.toDate(\"s\"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},y=this.$W,M=this.$M,m=this.$D,v=\"set\"+(this.$u?\"UTC\":\"\");switch(h){case c:return r?l(1,0):l(31,11);case f:return r?l(1,M):l(0,M+1);case o:var g=this.$locale().weekStart||0,D=(y<g?y+7:y)-g;return l(r?m-D:m+(6-D),M);case a:case d:return $(v+\"Hours\",0);case u:return $(v+\"Minutes\",1);case s:return $(v+\"Seconds\",2);case i:return $(v+\"Milliseconds\",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,o=O.p(t),h=\"set\"+(this.$u?\"UTC\":\"\"),l=(n={},n[a]=h+\"Date\",n[d]=h+\"Date\",n[f]=h+\"Month\",n[c]=h+\"FullYear\",n[u]=h+\"Hours\",n[s]=h+\"Minutes\",n[i]=h+\"Seconds\",n[r]=h+\"Milliseconds\",n)[o],$=o===a?this.$D+(e-this.$W):e;if(o===f||o===c){var y=this.clone().set(d,1);y.$d[l]($),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d}else l&&this.$d[l]($);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[O.p(t)]()},m.add=function(r,h){var d,l=this;r=Number(r);var $=O.p(h),y=function(t){var e=w(l);return O.w(e.date(e.date()+Math.round(t*r)),l)};if($===f)return this.set(f,this.$M+r);if($===c)return this.set(c,this.$y+r);if($===a)return y(1);if($===o)return y(7);var M=(d={},d[s]=e,d[u]=n,d[i]=t,d)[$]||1,m=this.$d.getTime()+r*M;return O.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||l;var r=t||\"YYYY-MM-DDTHH:mm:ssZ\",i=O.z(this),s=this.$H,u=this.$m,a=this.$M,o=n.weekdays,f=n.months,h=function(t,n,i,s){return t&&(t[n]||t(e,r))||i[n].slice(0,s)},c=function(t){return O.s(s%12||12,t,\"0\")},d=n.meridiem||function(t,e,n){var r=t<12?\"AM\":\"PM\";return n?r.toLowerCase():r},$={YY:String(this.$y).slice(-2),YYYY:O.s(this.$y,4,\"0\"),M:a+1,MM:O.s(a+1,2,\"0\"),MMM:h(n.monthsShort,a,f,3),MMMM:h(f,a),D:this.$D,DD:O.s(this.$D,2,\"0\"),d:String(this.$W),dd:h(n.weekdaysMin,this.$W,o,2),ddd:h(n.weekdaysShort,this.$W,o,3),dddd:o[this.$W],H:String(s),HH:O.s(s,2,\"0\"),h:c(1),hh:c(2),a:d(s,u,!0),A:d(s,u,!1),m:String(u),mm:O.s(u,2,\"0\"),s:String(this.$s),ss:O.s(this.$s,2,\"0\"),SSS:O.s(this.$ms,3,\"0\"),Z:i};return r.replace(y,(function(t,e){return e||$[t]||i.replace(\":\",\"\")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,l){var $,y=O.p(d),M=w(r),m=(M.utcOffset()-this.utcOffset())*e,v=this-M,g=O.m(this,M);return g=($={},$[c]=g/12,$[f]=g,$[h]=g/3,$[o]=(v-m)/6048e5,$[a]=(v-m)/864e5,$[u]=v/n,$[s]=v/e,$[i]=v/t,$)[y]||v,l?g:O.a(g)},m.daysInMonth=function(){return this.endOf(f).$D},m.$locale=function(){return D[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=S(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return O.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},M}(),T=_.prototype;return w.prototype=T,[[\"$ms\",r],[\"$s\",i],[\"$m\",s],[\"$H\",u],[\"$W\",a],[\"$M\",f],[\"$y\",c],[\"$D\",d]].forEach((function(t){T[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),w.extend=function(t,e){return t.$i||(t(e,_,w),t.$i=!0),w},w.locale=S,w.isDayjs=p,w.unix=function(t){return w(1e3*t)},w.en=D[g],w.Ls=D,w.p={},w}));","import React from \"react\";\nimport {WidgetProps} from \"@/types\";\nimport { Avatar as AntdAvatar, Tooltip } from \"antd\";\nimport { Avatar as AvatarOoui} from \"@gisce/ooui\";\nimport { colorFromString } from \"@/helpers/formHelper\";\n\ntype AvatarProps = WidgetProps & {\n ooui: AvatarOoui\n value?: any;\n};\n\nconst Avatar = (props: AvatarProps): React.ReactElement | null => {\n console.log(\"Avatar Props\", props);\n const {ooui, value} = props;\n if (!value) {\n return null;\n }\n let formattedValue = value;\n if (ooui.selectionValues.size) {\n formattedValue = ooui.selectionValues.get(value);\n } else if (Array.isArray(value)) {\n formattedValue = value[1];\n }\n const text = formattedValue.toString().split(\" \").filter((word:string) => word.length > 1).slice(0, 3).map((word:string) => word[0].toUpperCase()).join(\"\");\n const backgroundColor = colorFromString(formattedValue);\n return (\n <Tooltip title={formattedValue}>\n <AntdAvatar alt={formattedValue} style={{backgroundColor}}>{text}</AntdAvatar>\n </Tooltip>\n );\n}\n\nexport default Avatar;\n","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_weekday=t()}(this,(function(){\"use strict\";return function(e,t){t.prototype.weekday=function(e){var t=this.$locale().weekStart||0,i=this.$W,n=(i<t?i+7:i)-t;return this.$utils().u(e)?n:this.subtract(n,\"day\").add(e,\"day\")}}}));","!function(n,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(n=\"undefined\"!=typeof globalThis?globalThis:n||self).dayjs_plugin_localeData=e()}(this,(function(){\"use strict\";return function(n,e,t){var r=e.prototype,o=function(n){return n&&(n.indexOf?n:n.s)},u=function(n,e,t,r,u){var i=n.name?n:n.$locale(),a=o(i[e]),s=o(i[t]),f=a||s.map((function(n){return n.slice(0,r)}));if(!u)return f;var d=i.weekStart;return f.map((function(n,e){return f[(e+(d||0))%7]}))},i=function(){return t.Ls[t.locale()]},a=function(n,e){return n.formats[e]||function(n){return n.replace(/(\\[[^\\]]+])|(MMMM|MM|DD|dddd)/g,(function(n,e,t){return e||t.slice(1)}))}(n.formats[e.toUpperCase()])},s=function(){var n=this;return{months:function(e){return e?e.format(\"MMMM\"):u(n,\"months\")},monthsShort:function(e){return e?e.format(\"MMM\"):u(n,\"monthsShort\",\"months\",3)},firstDayOfWeek:function(){return n.$locale().weekStart||0},weekdays:function(e){return e?e.format(\"dddd\"):u(n,\"weekdays\")},weekdaysMin:function(e){return e?e.format(\"dd\"):u(n,\"weekdaysMin\",\"weekdays\",2)},weekdaysShort:function(e){return e?e.format(\"ddd\"):u(n,\"weekdaysShort\",\"weekdays\",3)},longDateFormat:function(e){return a(n.$locale(),e)},meridiem:this.$locale().meridiem,ordinal:this.$locale().ordinal}};r.localeData=function(){return s.bind(this)()},t.localeData=function(){var n=i();return{firstDayOfWeek:function(){return n.weekStart||0},weekdays:function(){return t.weekdays()},weekdaysShort:function(){return t.weekdaysShort()},weekdaysMin:function(){return t.weekdaysMin()},months:function(){return t.months()},monthsShort:function(){return t.monthsShort()},longDateFormat:function(e){return a(n,e)},meridiem:n.meridiem,ordinal:n.ordinal}},t.months=function(){return u(i(),\"months\")},t.monthsShort=function(){return u(i(),\"monthsShort\",\"months\",3)},t.weekdays=function(n){return u(i(),\"weekdays\",null,null,n)},t.weekdaysShort=function(n){return u(i(),\"weekdaysShort\",\"weekdays\",3,n)},t.weekdaysMin=function(n){return u(i(),\"weekdaysMin\",\"weekdays\",2,n)}}}));","import { DatePicker as AntDatePicker, theme } from \"antd\";\n\nimport React from \"react\";\nimport Field from \"@/common/Field\";\nimport { WidgetProps } from \"@/types\";\nimport { Date as DateOoui } from \"@gisce/ooui\";\nimport dayjs from \"dayjs\";\nconst { useToken } = theme;\nimport weekday from \"dayjs/plugin/weekday\";\nimport localeData from \"dayjs/plugin/localeData\";\ndayjs.extend(weekday);\ndayjs.extend(localeData);\n\ntype DatePickerProps = WidgetProps & {\n showTime?: boolean;\n};\n\nexport const DatePickerConfig = {\n date: {\n placeholder: \"__/__/____\",\n dateDisplayFormat: \"DD/MM/YYYY\",\n dateInternalFormat: \"YYYY-MM-DD\",\n },\n time: {\n placeholder: \"__/__/____ __:__:__\",\n dateDisplayFormat: \"DD/MM/YYYY HH:mm:ss\",\n dateInternalFormat: \"YYYY-MM-DD HH:mm:ss\",\n },\n};\n\nconst DatePicker = (props: DatePickerProps) => {\n const { ooui, showTime = false } = props;\n const { required } = ooui;\n\n return (\n <Field required={required} {...props}>\n <DatePickerInput ooui={ooui} showTime={showTime} />\n </Field>\n );\n};\n\ninterface DatePickerInputProps {\n ooui: DateOoui;\n value?: undefined | string;\n onChange?: (value: undefined | string) => void;\n showTime?: boolean;\n}\n\nconst DatePickerInput: React.FC<DatePickerInputProps> = (\n props: DatePickerInputProps\n) => {\n const { value, onChange, ooui, showTime } = props;\n const { id, readOnly, required } = ooui as DateOoui;\n const { token } = useToken();\n\n const requiredStyle =\n required && !readOnly\n ? { backgroundColor: token.colorPrimaryBg }\n : undefined;\n\n const mode = showTime ? \"time\" : \"date\";\n\n const triggerChange = (changedValue: undefined | string) => {\n onChange?.(changedValue);\n };\n\n const onValueStringChange = (momentDate: any) => {\n if (momentDate === null) {\n triggerChange(undefined);\n return;\n }\n\n triggerChange(momentDate.format(DatePickerConfig[mode].dateInternalFormat));\n };\n\n const dateValue = value\n ? dayjs(value, DatePickerConfig[mode].dateInternalFormat)\n : undefined;\n\n return (\n <AntDatePicker\n style={{ width: \"100%\", ...requiredStyle }}\n placeholder={\n showTime\n ? DatePickerConfig.time.placeholder\n : DatePickerConfig.date.placeholder\n }\n disabled={readOnly}\n id={id}\n picker={\"date\"}\n showTime={showTime}\n format={DatePickerConfig[mode].dateDisplayFormat}\n value={dateValue}\n onChange={onValueStringChange}\n />\n );\n};\n\nexport default DatePicker;\n","import React, { useContext, useEffect, useRef, useState } from \"react\";\nimport { Pagination, Checkbox, Space, Row, Col, Spin, Tag, Badge } from \"antd\";\nimport {\n getTree,\n getTableColumns,\n getTableItems,\n hasActualValues,\n} from \"@/helpers/treeHelper\";\nimport { Tree as TreeOoui } from \"@gisce/ooui\";\n\nimport { TreeView, Column } from \"@/types\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport { calculateColumnsWidth } from \"@/helpers/dynamicColumnsHelper\";\nimport { parseFloatToString } from \"@/helpers/timeHelper\";\nimport { ProgressBarInput } from \"../base/ProgressBar\";\nimport { Table as GisceTable } from \"@gisce/react-formiga-table\";\nimport {\n PlusSquareOutlined,\n MinusSquareOutlined,\n LoadingOutlined,\n} from \"@ant-design/icons\";\nimport { One2manyValue } from \"../base/one2many/One2manyInput\";\nimport { Interweave } from \"interweave\";\nimport {\n ActionViewContext,\n ActionViewContextType,\n} from \"@/context/ActionViewContext\";\nimport { Many2oneTree } from \"../base/many2one/Many2oneTree\";\nimport { ReferenceTree } from \"../base/ReferenceTree\";\nimport dayjs from \"dayjs\";\nimport Avatar from \"../custom/Avatar\";\nimport { TagInput } from \"../custom/Tag\";\nimport { DatePickerConfig } from \"@/common/DatePicker\";\n\ntype Props = {\n total?: number;\n limit: number;\n page?: number;\n loading: boolean;\n treeView: TreeView;\n results: Array<any>;\n showPagination?: boolean;\n onRequestPageChange?: (page: number, pageSize?: number) => void;\n onRowClicked?: (record: any) => void;\n rowSelection?: any;\n scrollY?: number;\n colorsForResults?: { [key: number]: string };\n statusForResults?: { [key: number]: string };\n onChangeSort?: (results: any) => void;\n sorter?: any;\n onFetchChildrenForRecord?: (item: any) => Promise<any[]>;\n childField?: string;\n rootTree?: boolean;\n context?: any;\n readonly?: boolean;\n};\n\nconst booleanComponentFn = (value: boolean): React.ReactElement => {\n return (\n <div\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n alignContent: \"center\",\n }}\n >\n <Checkbox checked={value} disabled />\n </div>\n );\n};\n\nconst many2OneComponentFn = (m2oField: any): React.ReactElement => {\n return <Many2oneTree m2oField={m2oField} />;\n};\n\nconst textComponentFn = (value: any): React.ReactElement => {\n return (\n <Interweave\n content={value?.toString().replace(/(?:\\r\\n|\\r|\\n)/g, \"<br>\")}\n />\n );\n};\n\nconst dateComponentFn = (value: any): React.ReactElement => {\n if (!value || (value && value.length === 0)) return <></>;\n\n const formattedValue = dayjs(\n value,\n DatePickerConfig.date.dateInternalFormat\n ).format(DatePickerConfig.date.dateDisplayFormat);\n return <>{formattedValue}</>;\n};\n\nconst dateTimeComponentFn = (value: any): React.ReactElement => {\n if (!value || (value && value.length === 0)) return <></>;\n const formattedValue = dayjs(\n value,\n DatePickerConfig.time.dateInternalFormat\n ).format(DatePickerConfig.time.dateDisplayFormat);\n return <>{formattedValue}</>;\n};\n\nconst one2ManyComponentFn = (value: One2manyValue): React.ReactElement => {\n const length = Array.isArray(value?.items) ? value?.items.length : 0;\n return <>{`( ${length} )`}</>;\n};\n\nconst progressBarComponentFn = (value: any): React.ReactElement => {\n return <ProgressBarInput value={value} />;\n};\n\nconst floatTimeComponent = (value: number): React.ReactElement => {\n return <>{parseFloatToString(value)}</>;\n};\n\nconst numberComponent = (value: number): React.ReactElement => {\n return <div style={{ textAlign: \"right\" }}>{value}</div>;\n};\n\nconst imageComponent = (value: string): React.ReactElement => {\n return (\n <img\n src={`data:image/*;base64,${value}`}\n style={{ maxWidth: \"50px\", padding: \"5px\" }}\n />\n );\n};\n\nconst TagComponent = (\n value: any,\n key: string,\n ooui: any,\n context: any\n): React.ReactElement => {\n return <TagInput ooui={ooui} value={value} />;\n};\n\nconst SelectionComponent = (\n value: any,\n key: string,\n ooui: any,\n context: any\n): React.ReactElement => {\n return <>{ooui.selectionValues.get(value)}</>;\n};\n\nconst referenceComponent = (\n value: any,\n key: string,\n ooui: any,\n context: any\n): React.ReactElement => {\n return (\n <>\n <ReferenceTree\n value={value}\n selectionValues={ooui.selectionValues}\n context={context}\n />\n </>\n );\n};\n\nconst AvatarFn = (\n value: any,\n key: string,\n ooui: any,\n context: any\n): React.ReactElement => <Avatar ooui={ooui} value={value} />;\n\nfunction Tree(props: Props): React.ReactElement {\n const {\n page = 1,\n limit,\n total,\n treeView,\n results,\n onRequestPageChange,\n loading,\n onRowClicked,\n showPagination = true,\n rowSelection,\n scrollY,\n colorsForResults = {},\n statusForResults = {},\n onChangeSort,\n sorter,\n onFetchChildrenForRecord,\n childField,\n rootTree = false,\n context,\n readonly,\n } = props;\n\n const [items, setItems] = useState<Array<any>>([]);\n const [columns, setColumns] = useState<Array<Column>>([]);\n\n const errorInParseColors = useRef<boolean>(false);\n\n const treeOoui = useRef<any>(null);\n\n const { t } = useContext(LocaleContext) as LocaleContextType;\n const internalLimit = useRef(limit);\n\n const actionViewContext = useContext(\n ActionViewContext\n ) as ActionViewContextType;\n const { title = undefined, setTitle = undefined } =\n (rootTree ? actionViewContext : {}) || {};\n\n useEffect(() => {\n treeOoui.current = getTree(treeView);\n\n const columns = getTableColumns(\n treeOoui.current,\n {\n boolean: booleanComponentFn,\n many2one: many2OneComponentFn,\n text: textComponentFn,\n one2many: one2ManyComponentFn,\n many2many: one2ManyComponentFn,\n progressbar: progressBarComponentFn,\n float_time: floatTimeComponent,\n image: imageComponent,\n integer: numberComponent,\n float: numberComponent,\n reference: referenceComponent,\n tag: TagComponent,\n selection: SelectionComponent,\n date: dateComponentFn,\n datetime: dateTimeComponentFn,\n avatar: AvatarFn,\n },\n context\n );\n\n setColumns(columns);\n\n if (treeOoui.current.string && title !== treeOoui.current.string) {\n setTitle?.(treeOoui.current.string);\n }\n }, [treeView]);\n\n useEffect(() => {\n errorInParseColors.current = false;\n const items = getTableItems(treeOoui.current, results);\n setItems(items);\n internalLimit.current = limit;\n }, [results]);\n\n const from = (page - 1) * internalLimit.current + 1;\n const to = from - 1 + items.length;\n const summary =\n total === undefined\n ? null\n : total === 0\n ? t(\"no_results\")\n : t(\"summary\")\n .replace(\"{from}\", from?.toString())\n .replace(\"{to}\", to?.toString())\n .replace(\"{total}\", total?.toString());\n\n const pagination = () => {\n if (!showPagination || treeView.isExpandable) {\n return null;\n }\n\n return loading ? null : total === undefined ? (\n <Spin className=\"pb-4\" />\n ) : (\n <Row align=\"bottom\" className=\"pb-4\">\n <Col span={12}>\n <Pagination\n total={total}\n pageSize={\n internalLimit.current === 0 ? total : internalLimit.current\n }\n current={page}\n showSizeChanger={false}\n onChange={onRequestPageChange}\n />\n </Col>\n <Col span={12} className=\"text-right\">\n {summary}\n </Col>\n </Row>\n );\n };\n\n function getSums() {\n const tree = treeOoui.current as TreeOoui;\n\n const sumFields = tree.columns\n .filter((it) => it.sum !== undefined)\n .map((it) => {\n return { label: it.sum, field: it.id };\n });\n\n if (!sumFields || sumFields.length === 0) {\n return null;\n }\n\n let summary: string[] = [];\n let sumItems =\n rowSelection?.selectedRowKeys?.length > 0\n ? items.filter((result: any) => {\n return rowSelection?.selectedRowKeys.includes(result.id);\n })\n : items;\n\n sumFields.forEach((sumField) => {\n const total = sumItems.reduce((prev, current) => {\n if (current[sumField.field] && !isNaN(current[sumField.field]))\n return prev + current[sumField.field];\n else return prev;\n }, 0);\n\n summary.push(`${sumField.label}: ${Math.round(total * 100) / 100}`);\n });\n\n return <div className=\"p-1 pb-0 pl-2 mt-2 \">{summary.join(\", \")}</div>;\n }\n\n let dataTable;\n let adjustedHeight = scrollY;\n\n // This helper function helps to calculate the width for each column\n // based on all table cells - column cell and source cell\n if (treeOoui.current !== null) {\n const maxWidthPerCell = 600;\n dataTable = calculateColumnsWidth(columns, items, maxWidthPerCell);\n const tree = treeOoui.current as TreeOoui;\n\n if (scrollY && tree.columns.some((it) => it.sum !== undefined)) {\n adjustedHeight = scrollY - 30;\n }\n }\n\n return treeOoui.current === null ? (\n <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 } = 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 const selectedRowItems = getResults().filter((entry: any) =>\n selectedRowKeys.includes(entry.id)\n );\n setSelectedRowItems?.(selectedRowItems);\n onChangeSelectedRowKeys?.(selectedRowKeys);\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 />\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);\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 const IconElement: any = icon && iconMapper(icon);\n\n if (tw >= width * 0.85 || fontSize * 2 < twoLinesHeight) {\n const maxFontSize = ((width * 0.85) / tw) * fontSize;\n fontSize = maxFontSize;\n }\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 });\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 from \"react\";\nimport { Menu, Dropdown, Button } from \"antd\";\nimport { DownOutlined } from \"@ant-design/icons\";\n\ntype Props = {\n onItemClick: (event: any) => void;\n items: any[];\n tooltip: string;\n icon: any;\n label?: string;\n disabled?: boolean;\n};\n\nfunction DropdownButton(props: Props) {\n const {\n icon,\n tooltip,\n items = [],\n onItemClick,\n label,\n disabled = false,\n } = props;\n\n function getMenu() {\n const menuItems = items?.map((item, idx) => {\n if (item.name === \"divider\") {\n return <Menu.Divider key={\"divider\" + idx} />;\n }\n return <Menu.Item key={item.id}>{item.name}</Menu.Item>;\n });\n\n return (\n <Menu onClick={handleMenuClick}>\n <Menu.ItemGroup title={tooltip}>{menuItems}</Menu.ItemGroup>\n </Menu>\n );\n }\n\n function handleMenuClick(event: any) {\n const itemClicked = items.find((item: any) => {\n return !isNaN(event.key)\n ? item.id === parseInt(event.key)\n : item.id === event.key;\n });\n\n onItemClick(itemClicked);\n }\n\n return (\n <Dropdown\n overlay={getMenu()}\n disabled={disabled || !items || items.length === 0}\n >\n <Button>\n {icon} {label} <DownOutlined />\n </Button>\n </Dropdown>\n );\n}\n\nexport default DropdownButton;\n","import React from \"react\";\nimport ButtonWithTooltip from \"@/common/ButtonWithTooltip\";\nimport { LoadingOutlined } from \"@ant-design/icons\";\n\ntype Props = {\n tooltip: string;\n onClick: any;\n icon: any;\n disabled?: boolean;\n label?: string;\n loading?: boolean;\n type?: string;\n};\n\nfunction ActionButton(props: Props) {\n const {\n onClick,\n disabled = false,\n loading = false,\n tooltip,\n icon,\n label,\n type = \"default\",\n } = props;\n const finalIcon = loading ? <LoadingOutlined /> : icon;\n\n return (\n <ButtonWithTooltip\n type={type as any}\n tooltip={tooltip}\n onClick={onClick}\n disabled={disabled}\n >\n {finalIcon}\n {label}\n </ButtonWithTooltip>\n );\n}\n\nexport default ActionButton;\n","import React, { useContext } from \"react\";\nimport { FileAddOutlined } from \"@ant-design/icons\";\nimport ActionButton from \"./ActionButton\";\nimport {\n ActionViewContext,\n ActionViewContextType,\n} from \"@/context/ActionViewContext\";\nimport showUnsavedChangesDialog from \"@/ui/UnsavedChangesDialog\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\ntype Props = {\n disabled?: boolean;\n};\n\nfunction NewButton(props: Props) {\n const { disabled = false } = props;\n\n const { formHasChanges, onNewClicked: onNewClickedProps } = useContext(\n ActionViewContext\n ) as ActionViewContextType;\n const { t, lang } = useContext(LocaleContext) as LocaleContextType;\n\n const onNewClicked = () => {\n if (formHasChanges) {\n showUnsavedChangesDialog({\n lang,\n onOk: () => {\n onNewClickedProps();\n },\n });\n return;\n }\n\n onNewClickedProps();\n };\n\n return (\n <ActionButton\n icon={<FileAddOutlined />}\n tooltip={t(\"new\")}\n onClick={onNewClicked}\n disabled={disabled}\n />\n );\n}\nexport default NewButton;\n","import React from \"react\";\nimport { Modal } from \"antd\";\nimport { ExclamationCircleOutlined } from \"@ant-design/icons\";\nimport { tForLang } from \"@/context/LocaleContext\";\n\nconst { confirm } = Modal;\n\nconst showDialog = ({\n onOk,\n onCancel,\n lang,\n}: {\n onOk: () => void;\n onCancel?: () => void;\n lang: string;\n}) => {\n confirm({\n title: tForLang(\"unsavedChanges\", lang),\n icon: <ExclamationCircleOutlined />,\n centered: true,\n content: tForLang(\"confirmRefreshWithoutSave\", lang),\n okText: tForLang(\"discardAndRefresh\", lang),\n cancelText: tForLang(\"cancel\", lang),\n onOk,\n onCancel,\n });\n};\n\nexport default showDialog;\n","import ConnectionProvider from \"@/ConnectionProvider\";\nimport React from \"react\";\nimport showInfo from \"@/ui/InfoDialog\";\n\nasync function showLogInfo(\n model: string,\n currentId: number,\n translateFn: Function\n) {\n const logInfo = ((await ConnectionProvider.getHandler().getLogInfo({\n model,\n ids: [currentId],\n })) as any)[0];\n\n const { create_date, create_uid, id, write_date, write_uid } = logInfo;\n\n showInfo(\n <div>\n {\"ID: \" + id} <br />\n {translateFn(\"createdBy\") + \": \" + create_uid[1]} <br />\n {translateFn(\"creationDate\") + \": \" + create_date} <br />\n {translateFn(\"lastUpdatedBy\") + \": \" + write_uid[1]} <br />\n {translateFn(\"lastUpdatedDate\") + \": \" + write_date}\n </div>\n );\n}\n\nexport { showLogInfo };\n","import React, { useContext, useState } from \"react\";\nimport {\n DownOutlined,\n FormOutlined,\n DownloadOutlined,\n LinkOutlined,\n FileAddOutlined,\n TableOutlined,\n} from \"@ant-design/icons\";\nimport { Popover, Button, Row, Col, Tooltip, Spin } from \"antd\";\nimport {\n LocaleContext,\n LocaleContextType,\n tForLang,\n} from \"@/context/LocaleContext\";\n\nexport type Attachment = {\n id: number;\n name: string;\n datas: string;\n link: string;\n};\n\nexport type AttachmentsButtonWrapperProps = {\n attachments: Attachment[] | undefined;\n numberOfAttachments: number;\n disabled: boolean;\n loading: boolean;\n onAddNewAttachment: () => void;\n onListAllAttachments: () => void;\n onopenAttachmentLink: (attachment: Attachment) => void;\n onOpenAttachmentDetail: (attachment: Attachment) => void;\n};\n\nexport const AttachmentsButtonWrapper = (\n props: AttachmentsButtonWrapperProps\n) => {\n const { numberOfAttachments, disabled } = props;\n const { t, lang } = useContext(LocaleContext) as LocaleContextType;\n const [popoverVisible, setPopoverVisible] = useState<boolean>(false);\n\n const button = (\n <Button disabled={disabled}>\n <LinkOutlined />\n {`(${numberOfAttachments})`}\n <DownOutlined style={{ fontSize: 12 }} />\n </Button>\n );\n\n if (disabled) {\n return button;\n }\n\n return (\n <Popover\n onVisibleChange={(visible: boolean) => setPopoverVisible(visible)}\n visible={popoverVisible}\n placement=\"bottom\"\n content={Content(props, setPopoverVisible, lang)}\n title={t(\"attachments\")}\n arrowContent={null}\n >\n {button}\n </Popover>\n );\n};\n\nconst Content = (\n props: AttachmentsButtonWrapperProps,\n setPopoverVisible: (visible: boolean) => void,\n locale: string\n) => {\n const {\n attachments = [],\n loading,\n onAddNewAttachment,\n onopenAttachmentLink,\n onOpenAttachmentDetail,\n onListAllAttachments,\n } = props;\n if (loading) {\n return <Spin style={{ padding: 20 }} />;\n }\n\n return (\n <>\n <a\n style={{ display: \"block\", paddingBottom: 5 }}\n href=\"#\"\n onClick={() => {\n setPopoverVisible(false);\n onListAllAttachments();\n }}\n >\n <TableOutlined /> {tForLang(\"listAllAttachments\", locale)}\n </a>\n <a\n style={{ display: \"block\" }}\n href=\"#\"\n onClick={() => {\n setPopoverVisible(false);\n onAddNewAttachment();\n }}\n >\n <FileAddOutlined /> {tForLang(\"addNewAttachment\", locale)}\n </a>\n {attachments.length > 0 && (\n <>\n <li className=\"ant-dropdown-menu-item-divider\"></li>\n {attachments.map((attachment: any) => {\n const Icon = attachment.link ? LinkOutlined : DownloadOutlined;\n return (\n <Row\n style={{ paddingTop: 4, paddingBottom: 4 }}\n wrap={false}\n align=\"middle\"\n key={attachment.id}\n >\n <Col flex=\"auto\">{attachment.name}</Col>\n <Col flex=\"25px\" style={{ textAlign: \"center\" }}>\n {(attachment.datas_fname || attachment.link) && (\n <Tooltip\n title={\n attachment.link\n ? tForLang(\"openAttachmentLink\", locale)\n : tForLang(\"download\", locale)\n }\n >\n <Icon\n style={{ cursor: \"pointer\" }}\n onClick={() => {\n setPopoverVisible(false);\n onopenAttachmentLink(attachment);\n }}\n />\n </Tooltip>\n )}\n </Col>\n <Col flex=\"25px\" style={{ textAlign: \"center\" }}>\n <Tooltip title={tForLang(\"openAttachment\", locale)}>\n <FormOutlined\n style={{ cursor: \"pointer\" }}\n onClick={() => {\n setPopoverVisible(false);\n onOpenAttachmentDetail(attachment);\n }}\n />\n </Tooltip>\n </Col>\n </Row>\n );\n })}\n </>\n )}\n </>\n );\n};\n","import React, { useCallback, useContext, useEffect, useState } from \"react\";\nimport { getMimeType, openBase64InNewTab } from \"@/helpers/filesHelper\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport {\n ActionViewContext,\n ActionViewContextType,\n} from \"@/context/ActionViewContext\";\nimport showErrorDialog from \"@/ui/ActionErrorDialog\";\nimport {\n Attachment,\n AttachmentsButtonWrapper,\n} from \"./AttachmentsButtonWrapper\";\nimport { Modal, Spin } from \"antd\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\nexport type AttachmentsButtonProps = {\n attachments?: any;\n disabled?: boolean;\n onAddNewAttachment: () => void;\n onListAllAttachments: () => void;\n onViewAttachmentDetails: (attachment: Attachment) => void;\n};\n\nfunction AttachmentsButton(props: AttachmentsButtonProps) {\n const {\n attachments,\n disabled = false,\n onAddNewAttachment,\n onListAllAttachments,\n onViewAttachmentDetails,\n } = props;\n const { formRef } = useContext(ActionViewContext) as ActionViewContextType;\n const [preloading, setPreloading] = useState(false);\n const [preloadedAttachments, setPreloadedAttachments] = useState<\n Attachment[]\n >([]);\n const [downloading, setDownloading] = useState(false);\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n const preloadAttachments = useCallback(async () => {\n setPreloading(true);\n try {\n const results = await ConnectionProvider.getHandler().readObjects({\n model: \"ir.attachment\",\n ids: attachments.map((a: any) => a.id),\n fieldsToRetrieve: [\"name\", \"datas_fname\", \"link\"],\n context: (formRef.current as any).getContext(),\n });\n setPreloadedAttachments(\n results.map((r: any) => ({\n id: r.id,\n name: r.name,\n datas_fname: r.datas_fname,\n link: r.link,\n }))\n );\n } catch (error) {\n showErrorDialog(error as any);\n }\n setPreloading(false);\n }, attachments);\n\n const openAttachmentLink = useCallback(async (attachment: any) => {\n if (attachment.link) {\n window.open(attachment.link);\n return;\n }\n\n setDownloading(true);\n\n let retrievedAttachment;\n\n try {\n const results = await ConnectionProvider.getHandler().readObjects({\n model: \"ir.attachment\",\n ids: [attachment.id],\n context: (formRef.current as any).getContext(),\n });\n retrievedAttachment = results[0];\n } catch (error) {\n showErrorDialog(error as any);\n }\n\n setDownloading(false);\n\n if (!retrievedAttachment) {\n return;\n }\n\n if (retrievedAttachment.datas) {\n const fileType: any = await getMimeType(retrievedAttachment.datas);\n openBase64InNewTab(retrievedAttachment.datas, fileType.mime);\n } else {\n onViewAttachmentDetails(retrievedAttachment);\n }\n }, []);\n\n const openAttachmentDetail = useCallback(async (attachment: any) => {\n onViewAttachmentDetails(attachment);\n }, []);\n\n useEffect(() => {\n preloadAttachments();\n }, [preloadAttachments]);\n\n return (<>\n <AttachmentsButtonWrapper\n numberOfAttachments={attachments.length}\n attachments={preloadedAttachments}\n disabled={disabled}\n loading={preloading}\n onAddNewAttachment={onAddNewAttachment}\n onListAllAttachments={onListAllAttachments}\n onopenAttachmentLink={openAttachmentLink}\n onOpenAttachmentDetail={openAttachmentDetail}\n />\n <Modal\n title={t(\"downloadingAttachment\")}\n open={downloading}\n footer={null}\n closable={false}\n centered\n maskClosable={false}\n >\n <Spin />\n </Modal>\n </>);\n}\n\nexport default AttachmentsButton;\n","import React, { useContext, useEffect, useRef } from \"react\";\nimport { Space, Spin, message } from \"antd\";\nimport {\n SaveOutlined,\n RightOutlined,\n LeftOutlined,\n DeleteOutlined,\n ThunderboltOutlined,\n PrinterOutlined,\n EnterOutlined,\n ReloadOutlined,\n CopyOutlined,\n InfoCircleOutlined,\n} from \"@ant-design/icons\";\nimport ChangeViewButton from \"./ChangeViewButton\";\nimport DropdownButton from \"./DropdownButton\";\nimport ActionButton from \"./ActionButton\";\nimport {\n ActionViewContext,\n ActionViewContextType,\n} from \"@/context/ActionViewContext\";\nimport NewButton from \"./NewButton\";\nimport showUnsavedChangesDialog from \"@/ui/UnsavedChangesDialog\";\nimport showConfirmDialog from \"@/ui/ConfirmDialog\";\nimport showErrorDialog from \"@/ui/GenericErrorDialog\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport refreshChangesDialog from \"@/ui/RefreshItemDialog\";\nimport { showLogInfo } from \"@/helpers/logInfoHelper\";\n\nimport {\n TabManagerContext,\n TabManagerContextType,\n} from \"@/context/TabManagerContext\";\n\nimport {\n ContentRootContext,\n ContentRootContextType,\n} from \"@/context/ContentRootContext\";\nimport AttachmentsButton from \"./AttachmentsButton\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport { Attachment } from \"./AttachmentsButtonWrapper\";\n\nfunction FormActionBar({ toolbar }: { toolbar: any }) {\n const {\n availableViews,\n currentView,\n setCurrentView,\n onFormSave,\n formHasChanges,\n formIsSaving,\n currentId,\n results,\n setCurrentItemIndex,\n currentItemIndex,\n setCurrentId,\n currentModel,\n setRemovingItem,\n removingItem,\n duplicatingItem,\n setDuplicatingItem,\n setResults,\n formIsLoading,\n attachments,\n formRef,\n setFormHasChanges,\n previousView,\n setPreviousView,\n goToResourceId,\n } = useContext(ActionViewContext) as ActionViewContextType;\n const { t, lang } = useContext(LocaleContext) as LocaleContextType;\n\n const contentRootContext = useContext(\n ContentRootContext\n ) as ContentRootContextType;\n const { processAction } = contentRootContext || {};\n\n const tabManagerContext = useContext(\n TabManagerContext\n ) as TabManagerContextType;\n const { openRelate, openDefaultActionForModel } = tabManagerContext || {};\n\n function tryRefresh(callback: any) {\n if (formHasChanges) {\n refreshChangesDialog({\n lang,\n onOk: () => {\n callback();\n },\n });\n return;\n }\n\n callback();\n }\n\n function tryNavigate(callback: any) {\n if (formHasChanges) {\n showUnsavedChangesDialog({\n lang,\n onOk: () => {\n callback();\n },\n });\n return;\n }\n\n callback();\n }\n\n function onNextClick() {\n if (results && results.length > currentItemIndex! + 1) {\n setCurrentItemIndex?.(currentItemIndex! + 1);\n setCurrentId?.(results[currentItemIndex! + 1].id);\n } else if (results && currentItemIndex! + 1 === results.length) {\n setCurrentItemIndex?.(0);\n setCurrentId?.(results[0].id);\n }\n }\n\n function onPreviousClick() {\n if (results && currentItemIndex! > 0) {\n setCurrentItemIndex?.(currentItemIndex! - 1);\n setCurrentId?.(results[currentItemIndex! - 1].id);\n } else if (results && currentItemIndex === 0) {\n setCurrentItemIndex?.(results.length - 1);\n setCurrentId?.(results[results.length - 1].id);\n }\n }\n\n function tryDelete() {\n showConfirmDialog({\n confirmMessage: t(\"confirmRemoveItem\"),\n lang,\n onOk: () => {\n remove();\n },\n });\n }\n\n async function remove() {\n try {\n setRemovingItem?.(true);\n\n await ConnectionProvider.getHandler().delete({\n model: currentModel!,\n ids: [currentId!],\n });\n\n const filteredResults = results?.filter((item: any) => {\n return item.id !== currentId;\n });\n setResults?.(filteredResults!);\n\n let newIndex = 0;\n\n if (currentItemIndex! > 0 && currentItemIndex! <= results!.length - 1) {\n newIndex = currentItemIndex! - 1;\n }\n\n if (!filteredResults?.[newIndex]) {\n setCurrentId?.(undefined);\n setCurrentItemIndex?.(undefined);\n } else {\n setCurrentId?.(filteredResults?.[newIndex].id);\n setCurrentItemIndex?.(newIndex);\n }\n } catch (e) {\n showErrorDialog(JSON.stringify(e));\n } finally {\n setRemovingItem?.(false);\n }\n }\n\n async function duplicate() {\n try {\n setDuplicatingItem?.(true);\n\n const newId = await ConnectionProvider.getHandler().duplicate({\n id: currentId!,\n model: currentModel!,\n context: (formRef.current as any).getContext(),\n });\n\n if (newId) {\n await goToResourceId?.(newId);\n }\n } catch (e) {\n showErrorDialog(JSON.stringify(e));\n } finally {\n setDuplicatingItem?.(false);\n }\n }\n\n const mustDisableButtons =\n formIsSaving || removingItem || formIsLoading || duplicatingItem;\n\n function runAction(actionData: any) {\n processAction?.({\n actionData,\n values: (formRef.current as any).getValues(),\n fields: (formRef.current as any).getFields(),\n context: (formRef.current as any).getContext(),\n onRefreshParentValues: () => {\n (formRef.current as any).fetchValues();\n },\n });\n }\n\n if (!currentView) {\n return null;\n }\n\n return (\n <Space wrap={true}>\n {formIsLoading && (\n <>\n <Spin />\n {separator()}\n {separator()}\n </>\n )}\n <NewButton\n disabled={\n formIsSaving || formIsLoading || removingItem || duplicatingItem\n }\n />\n <ActionButton\n icon={<SaveOutlined />}\n tooltip={t(\"save\")}\n disabled={!formHasChanges || mustDisableButtons}\n loading={formIsSaving}\n onClick={onFormSave}\n />\n <ActionButton\n icon={<CopyOutlined />}\n tooltip={t(\"duplicate\")}\n disabled={\n formHasChanges ||\n formIsSaving ||\n currentId === undefined ||\n duplicatingItem ||\n formIsLoading\n }\n loading={duplicatingItem}\n onClick={duplicate}\n />\n <ActionButton\n icon={<DeleteOutlined />}\n tooltip={t(\"delete\")}\n disabled={\n formIsSaving ||\n currentId === undefined ||\n removingItem ||\n duplicatingItem ||\n formIsLoading\n }\n loading={removingItem}\n onClick={tryDelete}\n />\n {separator()}\n <ActionButton\n icon={<InfoCircleOutlined />}\n tooltip={t(\"showLogs\")}\n disabled={\n formIsSaving ||\n currentId === undefined ||\n removingItem ||\n duplicatingItem ||\n formIsLoading\n }\n loading={false}\n onClick={() => {\n showLogInfo(currentModel!, currentId!, t);\n }}\n />\n <ActionButton\n icon={<ReloadOutlined />}\n tooltip={t(\"refresh\")}\n disabled={\n formIsSaving ||\n currentId === undefined ||\n removingItem ||\n duplicatingItem ||\n formIsLoading\n }\n loading={false}\n onClick={() => {\n tryRefresh(() => {\n (formRef.current as any).fetchValues();\n });\n }}\n />\n {separator()}\n <ChangeViewButton\n currentView={currentView}\n previousView={previousView}\n availableViews={availableViews}\n onChangeView={(view: any) => {\n setPreviousView?.(currentView);\n setFormHasChanges?.(false);\n setCurrentView?.(view);\n }}\n disabled={mustDisableButtons}\n formHasChanges={formHasChanges}\n />\n {separator()}\n <Space>\n <ActionButton\n icon={<LeftOutlined />}\n tooltip={t(\"previous\")}\n disabled={mustDisableButtons}\n loading={false}\n onClick={() => {\n tryNavigate(onPreviousClick);\n }}\n />\n <ActionButton\n icon={<RightOutlined />}\n tooltip={t(\"next\")}\n disabled={mustDisableButtons}\n loading={false}\n onClick={() => {\n tryNavigate(onNextClick);\n }}\n />\n </Space>\n {separator()}\n <DropdownButton\n icon={<ThunderboltOutlined />}\n disabled={mustDisableButtons}\n tooltip={t(\"actions\")}\n items={toolbar?.action}\n onItemClick={async (action: any) => {\n if (!action) {\n return;\n }\n\n const result = await saveDocument({\n onFormSave,\n });\n\n if (!result.succeed) {\n return;\n }\n\n runAction(action);\n }}\n />\n <DropdownButton\n icon={<PrinterOutlined />}\n disabled={mustDisableButtons}\n tooltip={t(\"reports\")}\n items={toolbar?.print}\n onItemClick={async (report: any) => {\n if (!report) {\n return;\n }\n const result = await saveDocument({\n onFormSave,\n });\n\n if (!result.succeed) {\n return;\n }\n\n runAction({\n ...report,\n datas: {\n ...(report.datas || {}),\n ids: [result.currentId as number],\n },\n });\n }}\n />\n <DropdownButton\n icon={<EnterOutlined />}\n disabled={mustDisableButtons}\n tooltip={t(\"related\")}\n items={toolbar?.relate}\n onItemClick={async (relate: any) => {\n if (!relate) {\n return;\n }\n\n const result = await saveDocument({\n onFormSave,\n });\n\n if (!result.succeed) {\n return;\n }\n\n openRelate({\n relateData: relate,\n values: (formRef.current as any).getValues(),\n fields: (formRef.current as any).getFields(),\n action_id: relate.id,\n action_type: relate.type,\n });\n }}\n />\n <AttachmentsButton\n disabled={mustDisableButtons}\n attachments={attachments}\n onAddNewAttachment={async () => {\n const result = await saveDocument({\n onFormSave,\n });\n\n if (!result.succeed) {\n return;\n }\n\n const res_id = result.currentId as number;\n const res_model = currentModel as string;\n openDefaultActionForModel({\n model: \"ir.attachment\",\n values: {\n selection_associated_object: `${res_model},${res_id}`,\n },\n forced_values: {\n res_model,\n res_id,\n },\n initialViewType: \"form\",\n });\n }}\n onListAllAttachments={async () => {\n const result = await saveDocument({\n onFormSave,\n });\n\n if (!result.succeed) {\n return;\n }\n\n const res_id = result.currentId as number;\n const res_model = currentModel as string;\n openDefaultActionForModel({\n model: \"ir.attachment\",\n domain: [\n [\"res_model\", \"=\", `${res_model}`],\n [\"res_id\", \"=\", `${res_id}`],\n ],\n initialViewType: \"tree\",\n });\n }}\n onViewAttachmentDetails={async (attachment: Attachment) => {\n const result = await saveDocument({\n onFormSave,\n });\n\n if (!result.succeed) {\n return;\n }\n\n openDefaultActionForModel({\n model: \"ir.attachment\",\n res_id: attachment.id,\n initialViewType: \"form\",\n });\n }}\n />\n </Space>\n );\n}\n\nfunction separator() {\n return <div className=\"inline-block w-2\" />;\n}\n\nasync function saveDocument({\n onFormSave,\n}: {\n onFormSave?: () => Promise<{ succeed: boolean; id: number }>;\n}): Promise<{ succeed: boolean; currentId?: number }> {\n const result = await onFormSave?.();\n if (result?.succeed) {\n return { succeed: true, currentId: result.id };\n } else {\n return { succeed: false, currentId: undefined };\n }\n}\n\nexport default FormActionBar;\n","import React, { useContext, useEffect, useState } from \"react\";\nimport { Input, Button, Row, Col, theme } from \"antd\";\nimport { Char as CharOoui } from \"@gisce/ooui\";\nimport { EditOutlined, CheckOutlined } from \"@ant-design/icons\";\nimport { FormContext, FormContextType } from \"@/context/FormContext\";\nconst { useToken } = theme;\n\ninterface LinkInputProps {\n ooui: CharOoui;\n value?: string;\n onChange?: (value: string) => void;\n valueValidator: (value?: string) => boolean;\n linkPrefix?: string;\n}\n\nexport const LinkInput = (props: LinkInputProps) => {\n const { ooui, value, onChange, valueValidator, linkPrefix = \"\" } = props;\n const { id, readOnly, required } = ooui as CharOoui;\n const { token } = useToken();\n const requiredStyle =\n required && !readOnly\n ? { backgroundColor: token.colorPrimaryBg }\n : undefined;\n const formContext = useContext(FormContext) as FormContextType;\n const { elementHasLostFocus } = formContext || {};\n\n const [editMode, setEditMode] = useState(false);\n const [showInput, setShowInput] = useState(false);\n\n useEffect(() => {\n if (readOnly && !editMode) {\n setShowInput(false);\n }\n\n if (!value && !readOnly) {\n setEditMode(true);\n setShowInput(true);\n }\n }, [editMode, readOnly]);\n\n const onValueStringChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(e.target.value);\n };\n\n return (\n <Row gutter={8} wrap={false} align=\"middle\">\n {!readOnly ? (\n <Col flex=\"32px\">\n {editMode ? (\n <Button\n icon={<CheckOutlined />}\n onClick={() => {\n if (valueValidator(value)) {\n setEditMode(false);\n setShowInput(false);\n }\n }}\n style={{ borderTopRightRadius: 0, borderBottomRightRadius: 0 }}\n tabIndex={-1}\n />\n ) : (\n <Button\n icon={<EditOutlined />}\n onClick={() => {\n setEditMode(true);\n setShowInput(true);\n }}\n style={{ borderTopRightRadius: 0, borderBottomRightRadius: 0 }}\n tabIndex={-1}\n />\n )}\n </Col>\n ) : null}\n <Col flex=\"auto\">\n {showInput ? (\n <Input\n style={{ borderTopLeftRadius: 0, borderBottomLeftRadius: 0, ...requiredStyle }}\n id={id}\n onChange={onValueStringChange}\n value={value}\n onBlur={() => {\n if (valueValidator(value)) {\n setEditMode(false);\n setShowInput(false);\n elementHasLostFocus?.();\n }\n }}\n />\n ) : (\n <a\n href={`${linkPrefix}${value}`}\n style={{ color: token.colorPrimary, paddingRight: 15 }}\n target=\"_blank\"\n >\n {value}\n </a>\n )}\n </Col>\n </Row>\n );\n};\n","import React from \"react\";\nimport isURL from \"validator/lib/isURL\";\nimport Field from \"@/common/Field\";\n\nimport { WidgetProps } from \"@/types\";\nimport { LinkInput } from \"./LinkInput\";\nimport { Char as CharOoui } from \"@gisce/ooui\";\n\nexport const Url = (props: WidgetProps) => {\n const { ooui } = props;\n const { required } = ooui as CharOoui;\n\n return (\n <Field required={required} {...props}>\n <LinkInput\n ooui={ooui as CharOoui}\n valueValidator={(value) => {\n if (!value) {\n return false;\n }\n return isURL(value);\n }}\n />\n </Field>\n );\n};\n","import React from \"react\";\nimport isEmail from \"validator/lib/isEmail\";\nimport Field from \"@/common/Field\";\n\nimport { WidgetProps } from \"@/types\";\nimport { LinkInput } from \"./LinkInput\";\nimport { Char as CharOoui } from \"@gisce/ooui\";\n\nexport const Email = (props: WidgetProps) => {\n const { ooui } = props;\n const { required } = ooui as CharOoui;\n\n return (\n <Field required={required} {...props}>\n <LinkInput\n ooui={ooui as CharOoui}\n linkPrefix={\"mailto:\"}\n valueValidator={(value) => {\n if (!value) {\n return false;\n }\n return isEmail(value);\n }}\n />\n </Field>\n );\n};\n","import React, { useContext, useRef } from \"react\";\nimport { Button, Col, Form, InputNumber, Modal, Row, Space } from \"antd\";\nimport { CheckOutlined, CloseOutlined } from \"@ant-design/icons\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\ntype Props = {\n visible: boolean;\n onIdSubmitted: (id: number) => void;\n onCancel: () => void;\n isSearching: boolean;\n};\n\nexport const GoToResourceModal = (props: Props) => {\n const { visible, onIdSubmitted, onCancel, isSearching } = props;\n\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n const inputRef = useRef<null | HTMLElement>();\n\n function handleSubmit(values: any) {\n onIdSubmitted(values.id);\n }\n\n return (\n (<Modal\n title={t(\"goToResourceId\")}\n centered\n open={visible}\n footer={null}\n destroyOnClose\n onCancel={onCancel}\n maskClosable={false}\n afterOpenChange={(open) => open && inputRef.current?.focus()}\n >\n <Form layout=\"vertical\" onFinish={handleSubmit} autoComplete=\"off\">\n <Form.Item\n name={\"id\"}\n label={t(\"searchId\")}\n rules={[\n {\n required: true,\n type: \"number\",\n },\n ]}\n >\n <InputNumber style={{ width: \"100%\" }} autoFocus ref={inputRef as any}/>\n </Form.Item>\n <Row align=\"middle\" justify=\"end\">\n <Col>\n <Space>\n <Button\n icon={<CloseOutlined />}\n htmlType=\"button\"\n onClick={onCancel}\n disabled={isSearching}\n >\n {t(\"cancel\")}\n </Button>\n <Button\n loading={isSearching}\n style={{ marginLeft: 15 }}\n icon={<CheckOutlined />}\n htmlType=\"submit\"\n type=\"primary\"\n disabled={isSearching}\n >\n {t(\"ok\")}\n </Button>\n </Space>\n </Col>\n </Row>\n </Form>\n </Modal>)\n );\n};\n","import React from \"react\";\nimport ButtonWithTooltip, {Props as ButtonWithTooltipProps } from \"@/common/ButtonWithTooltip\";\nimport { theme } from 'antd';\nconst { useToken } = theme;\n\ntype Props = ButtonWithTooltipProps & {\n badgeNumber?: number;\n};\n\nfunction ButtonWithBadge(props: Props) {\n const { badgeNumber = 0, ...restProps } = props;\n const { token } = useToken();\n\n return (\n <div style={{ position: \"relative\" }}>\n {badgeNumber > 0 && (\n <div style={{ position: \"absolute\", left: -10, top: -10, zIndex: 2 }}>\n <span\n style={{\n display: \"inline-block\",\n minWidth: \"22px\",\n padding: \"2px\",\n borderRadius: \"50%\",\n fontSize: \"12px\",\n textAlign: \"center\",\n background: token.colorPrimaryHover,\n color: token.colorPrimaryBg,\n }}\n >\n {badgeNumber}\n </span>\n </div>\n )}\n <ButtonWithTooltip\n {...restProps}\n style={{ width: 46, zIndex: 0 }}\n ></ButtonWithTooltip>\n </div>\n );\n}\n\nexport default ButtonWithBadge;\n","import React, { useContext } from \"react\";\nimport { Space } from \"antd\";\nimport ChangeViewButton from \"./ChangeViewButton\";\nimport {\n ActionViewContext,\n ActionViewContextType,\n} from \"@/context/ActionViewContext\";\nimport ActionButton from \"./ActionButton\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport ButtonWithBadge from \"./ButtonWithBadge\";\nimport { ReloadOutlined, FilterOutlined } from \"@ant-design/icons\";\nimport { View } from \"@/types\";\n\nfunction GraphActionBar({ refreshGraph }: { refreshGraph: () => void }) {\n const { t } = useContext(LocaleContext) as LocaleContextType;\n const {\n availableViews,\n currentView,\n setCurrentView,\n searchParams,\n searchVisible,\n setSearchVisible,\n graphIsLoading,\n previousView,\n setPreviousView,\n } = useContext(ActionViewContext) as ActionViewContextType;\n\n return (\n <Space wrap={true}>\n <ButtonWithBadge\n icon={\n <FilterOutlined\n style={{ color: searchVisible ? \"white\" : undefined }}\n />\n }\n tooltip={t(\"advanced_search\")}\n type={searchVisible ? \"primary\" : \"default\"}\n onClick={() => {\n setSearchVisible?.(!searchVisible);\n }}\n disabled={graphIsLoading}\n badgeNumber={searchParams?.length}\n />\n <ActionButton\n icon={<ReloadOutlined />}\n tooltip={t(\"refresh\")}\n disabled={graphIsLoading}\n loading={false}\n onClick={() => {\n refreshGraph();\n }}\n />\n <ChangeViewButton\n currentView={currentView}\n availableViews={availableViews}\n onChangeView={(newView: View) => {\n setPreviousView?.(currentView);\n setCurrentView?.(newView);\n }}\n disabled={false}\n previousView={previousView}\n />\n </Space>\n );\n}\n\nexport default GraphActionBar;\n","import React, { useContext } from \"react\";\nimport { Row, Col, Typography, theme } from \"antd\";\nimport {\n ActionViewContext,\n ActionViewContextType,\n} from \"@/context/ActionViewContext\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport { CopyOutlined } from \"@ant-design/icons\";\n\nconst { useToken } = theme;\n\nconst { Title, Text } = Typography;\n\ntype Props = {\n title?: string;\n children?: any;\n};\n\nfunction TitleHeader(props: Props) {\n const { title: titleProps, children } = props;\n const {\n title,\n currentView,\n currentId,\n currentItemIndex,\n results,\n totalItems,\n selectedRowItems,\n } = useContext(ActionViewContext) as ActionViewContextType;\n const { t } = useContext(LocaleContext) as LocaleContextType;\n const { token } = useToken();\n\n function getSummary() {\n if (currentView?.type === \"form\") {\n if (!currentId) {\n return \"\";\n }\n\n if (totalItems === 0) {\n return (\n <>\n {t(\"editingDocument\")} (id:{\" \"}\n <Text\n copyable={{ icon: <CopyOutlined style={{ color: \"red\" }} /> }}\n >\n {currentId}\n </Text>\n )\n </>\n );\n }\n\n return (\n <>\n {t(\"register\")}{\" \"}\n {currentItemIndex === undefined ? 1 : currentItemIndex + 1} /{\" \"}\n {results!.length} {t(\"of\")} {totalItems} - {t(\"editingDocument\")} (id:{\" \"}\n <Text copyable>{currentId}</Text>)\n </>\n );\n } else if (currentView?.type === \"tree\" && selectedRowItems) {\n if (selectedRowItems.length === 1) {\n return (\n <>\n 1 {t(\"selectedRegisters\")} - (id:{\" \"}\n <Text copyable>{selectedRowItems[0].id}</Text>)\n </>\n );\n } else if (selectedRowItems.length > 1) {\n return (\n <>\n {selectedRowItems.length} {t(\"selectedRegisters\")}\n <Text\n copyable={{\n text: selectedRowItems.map((reg) => reg.id).join(\", \"),\n }}\n ></Text>\n </>\n );\n }\n }\n return null;\n }\n return (\n <div style={{ position: \"sticky\", top: 80, zIndex: 3 }}>\n <Row\n className=\"shadow-md\"\n style={{\n padding: \"1em\",\n borderRadius: token.borderRadius,\n backgroundColor: token.colorPrimaryBg,\n }}\n align=\"middle\"\n >\n <Col flex={2}>\n <Title level={3} style={{ marginBottom: 0 }}>\n {titleProps || title}\n </Title>\n {getSummary()}\n </Col>\n <Col flex={3}>\n <Row justify=\"end\">{children}</Row>\n </Col>\n </Row>\n <div className=\"pb-5\" />\n </div>\n );\n}\n\nexport default TitleHeader;\n","import GraphActionBar from \"@/actionbar/GraphActionBar\";\nimport TitleHeader from \"@/ui/TitleHeader\";\nimport { Graph } from \"@/widgets/views/Graph/Graph\";\nimport React, { useContext, useEffect, useRef, useState } from \"react\";\nimport {\n ActionViewContext,\n ActionViewContextType,\n} from \"@/context/ActionViewContext\";\nimport { FormView, TreeView } from \"@/types\";\nimport { mergeSearchFields } from \"@/helpers/formHelper\";\nimport { useSearch } from \"@/hooks/useSearch\";\nimport SearchFilter from \"@/widgets/views/searchFilter/SearchFilter\";\nimport { Spin } from \"antd\";\nimport { mergeParams } from \"@/helpers/searchHelper\";\n\nexport type GraphActionViewProps = {\n viewData: any;\n visible: boolean;\n model: string;\n context: any;\n domain: any;\n formView: FormView;\n treeView: TreeView;\n};\n\nexport const GraphActionView = (props: GraphActionViewProps) => {\n const { viewData, visible, model, context, domain, formView, treeView } =\n props;\n const graphRef = useRef();\n\n const actionViewContext = useContext(\n ActionViewContext\n ) as ActionViewContextType;\n const {\n setResults: setResultsActionView = undefined,\n setCurrentItemIndex = undefined,\n currentId = undefined,\n results: resultsActionView = undefined,\n setSelectedRowItems = undefined,\n setSearchParams = undefined,\n searchVisible = true,\n setSearchVisible = undefined,\n sorter = undefined,\n setSorter = undefined,\n setTotalItems: setActionViewTotalItems = undefined,\n setSearchTreeNameSearch = undefined,\n setTreeIsLoading = undefined,\n limit,\n setLimit,\n searchParams,\n searchValues,\n setSearchValues,\n currentView,\n } = actionViewContext || {};\n\n const [applyLimit, setApplyLimit] = useState(true);\n\n useEffect(() => {\n (graphRef.current as any)?.refresh();\n }, [searchParams]);\n\n useEffect(() => {\n if (viewData.view_id !== currentView.view_id) {\n setApplyLimit(true);\n }\n }, [currentView]);\n\n const { clear, searchFilterLoading, searchError, offset, tableRefreshing } =\n useSearch({\n model,\n setSearchTreeNameSearch,\n setSelectedRowItems,\n searchParams,\n setSearchValues,\n setSearchParams,\n setSearchVisible,\n setTreeIsLoading,\n context,\n formView: formView!,\n treeView: treeView!,\n sorter,\n setSorter,\n setCurrentItemIndex,\n setResultsActionView,\n resultsActionView,\n domain,\n currentId,\n setActionViewTotalItems,\n limit,\n setLimit,\n });\n\n if (!visible) {\n return null;\n }\n\n if (!viewData) {\n return null;\n }\n\n return (\n <>\n <TitleHeader title={viewData.name}>\n <GraphActionBar\n refreshGraph={() => {\n (graphRef.current as any).refresh();\n }}\n />\n </TitleHeader>\n <SearchFilter\n fields={{ ...treeView.fields, ...formView.fields }}\n searchFields={mergeSearchFields([\n formView.search_fields,\n treeView.search_fields,\n ])}\n limit={limit!}\n onClear={clear}\n offset={offset}\n isSearching={searchFilterLoading}\n onSubmit={(opts: {\n params: any;\n limit: number;\n offset: number;\n searchValues: any;\n }) => {\n setApplyLimit(false);\n setSearchParams?.(opts.params);\n setSearchVisible?.(false);\n }}\n searchError={searchError}\n searchVisible={searchVisible}\n searchValues={searchValues}\n showLimitOptions={false}\n />\n {tableRefreshing ? (\n <Spin />\n ) : (\n <Graph\n ref={graphRef}\n view_id={viewData.view_id}\n model={model}\n context={context}\n domain={mergeParams(searchParams || [], domain)}\n limit={applyLimit ? limit : undefined}\n manualIds={\n applyLimit ? resultsActionView?.map((r) => r.id) : undefined\n }\n />\n )}\n </>\n );\n};\n","import FormActionBar from \"@/actionbar/FormActionBar\";\nimport { FormView } from \"@/types\";\nimport TitleHeader from \"@/ui/TitleHeader\";\nimport Form from \"@/widgets/views/Form\";\nimport React from \"react\";\n\nexport type FormActionViewProps = {\n formView?: FormView;\n visible: boolean;\n formRef: any;\n model: string;\n currentId?: number;\n domain: any;\n context: any;\n defaultValues?: any;\n forcedValues?: any;\n results: any[];\n setResults: (value: any[]) => void;\n setCurrentItemIndex: (value?: number) => void;\n};\n\nexport const FormActionView = (props: FormActionViewProps) => {\n const {\n visible,\n formRef,\n model,\n currentId,\n domain,\n formView,\n context,\n defaultValues,\n forcedValues,\n results,\n setResults,\n setCurrentItemIndex,\n } = props;\n\n if (!visible) {\n return null;\n }\n\n return (\n <>\n <TitleHeader>\n <FormActionBar toolbar={formView?.toolbar} />\n </TitleHeader>\n <Form\n rootForm={true}\n ref={formRef}\n model={model}\n defaultValues={defaultValues}\n forcedValues={forcedValues}\n formView={formView}\n actionDomain={domain}\n id={currentId}\n parentContext={context}\n onSubmitSucceed={(id, values) => {\n const itemIndex = results!.findIndex((item: any) => {\n return item.id === id;\n });\n if (itemIndex === -1) {\n results!.push(values);\n setResults(results);\n setCurrentItemIndex(results!.length - 1);\n }\n }}\n />\n </>\n );\n};\n","import React, { useContext, useEffect, useState } from \"react\";\nimport { Button, Col, Form, Input, Row, Tooltip } from \"antd\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport { CloseCircleFilled } from \"@ant-design/icons\";\n\ntype Props = {\n onSearch: (searchValue?: string) => void;\n searchText?: string;\n disabled?: boolean;\n};\n\nfunction SearchBar(props: Props) {\n const { onSearch, disabled = false, searchText } = props;\n const { t } = useContext(LocaleContext) as LocaleContextType;\n const [form] = Form.useForm();\n const [mustShowClearSuffix, setMustShowClearSuffix] =\n useState<boolean>(false);\n\n function handleSubmit(values: any) {\n onSearch(values.search);\n }\n\n useEffect(() => {\n form.setFieldsValue({ search: searchText });\n }, [searchText]);\n\n function clear() {\n setMustShowClearSuffix(false);\n form.setFieldsValue({ search: undefined });\n onSearch(undefined);\n }\n\n return (\n <Form form={form} onFinish={handleSubmit} autoComplete=\"off\">\n <Row align=\"middle\" justify=\"end\">\n <Col>\n <Form.Item name={\"search\"} noStyle>\n <Input\n autoFocus\n disabled={disabled}\n onChange={(e) => {\n setMustShowClearSuffix(e.target.value.length > 0);\n }}\n style={{ borderTopRightRadius: 0, borderBottomRightRadius: 0 }}\n suffix={\n (mustShowClearSuffix ||\n (searchText && searchText.length > 0)) && (\n <Tooltip title={t(\"clear\")}>\n <CloseCircleFilled\n style={{ color: \"rgba(0,0,0,.45)\" }}\n onClick={clear}\n />\n </Tooltip>\n )\n }\n />\n </Form.Item>\n </Col>\n <Col>\n <Button\n htmlType=\"submit\"\n disabled={disabled}\n style={{ borderTopLeftRadius: 0, borderBottomLeftRadius: 0 }}\n >\n {t(\"search\")}\n </Button>\n </Col>\n </Row>\n </Form>\n );\n}\n\nexport default SearchBar;\n","import React from \"react\";\n\ninterface ConfigContextProps {\n previewFeatures: boolean;\n}\n\nexport const ConfigContext = React.createContext<ConfigContextProps>({\n previewFeatures: false,\n});\n","import React, { useContext, useState } from \"react\";\nimport { Space, Spin } from \"antd\";\nimport ChangeViewButton from \"./ChangeViewButton\";\nimport {\n ActionViewContext,\n ActionViewContextType,\n} from \"@/context/ActionViewContext\";\nimport NewButton from \"./NewButton\";\nimport ActionButton from \"./ActionButton\";\nimport Icon, {\n DeleteOutlined,\n PrinterOutlined,\n ThunderboltOutlined,\n CopyOutlined,\n ReloadOutlined,\n InfoCircleOutlined,\n FilterOutlined,\n} from \"@ant-design/icons\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport showConfirmDialog from \"@/ui/ConfirmDialog\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport showErrorDialog from \"@/ui/ActionErrorDialog\";\nimport DropdownButton from \"./DropdownButton\";\nimport {\n ContentRootContext,\n ContentRootContextType,\n} from \"@/context/ContentRootContext\";\nimport ButtonWithBadge from \"./ButtonWithBadge\";\nimport { showLogInfo } from \"@/helpers/logInfoHelper\";\nimport SearchBar from \"./SearchBar\";\nimport { ExportModal } from \"..\";\nimport { mergeParams } from \"@/helpers/searchHelper\";\nimport { ConfigContext } from \"@/context/ConfigContext\";\n\ntype Props = {\n parentContext?: any;\n treeExpandable: boolean;\n toolbar: any;\n};\n\nfunction TreeActionBar(props: Props) {\n const {\n availableViews,\n currentView,\n setCurrentView,\n selectedRowItems,\n setRemovingItem,\n removingItem,\n duplicatingItem,\n setDuplicatingItem,\n currentModel,\n searchTreeRef,\n setCurrentId,\n setCurrentItemIndex,\n searchParams,\n searchVisible,\n setSearchVisible,\n setSearchTreeNameSearch,\n searchTreeNameSearch,\n treeIsLoading,\n setPreviousView,\n previousView,\n results,\n limit,\n totalItems,\n } = useContext(ActionViewContext) as ActionViewContextType;\n\n const { parentContext = {}, treeExpandable, toolbar } = props;\n const { previewFeatures } = useContext(ConfigContext);\n const { t, lang } = useContext(LocaleContext) as LocaleContextType;\n const contentRootContext = useContext(\n ContentRootContext\n ) as ContentRootContextType;\n const { processAction } = contentRootContext || {};\n const [exportModalVisible, setExportModalVisible] = useState(false);\n\n const hasNameSearch: boolean =\n searchTreeNameSearch !== undefined &&\n searchTreeNameSearch.trim().length > 0;\n\n function tryDelete() {\n showConfirmDialog({\n confirmMessage: t(\"confirmRemove\"),\n lang,\n onOk: () => {\n remove();\n },\n });\n }\n\n async function remove() {\n try {\n setRemovingItem?.(true);\n\n await ConnectionProvider.getHandler().delete({\n model: currentModel!,\n ids: selectedRowItems!.map((item) => item.id),\n });\n\n setCurrentId?.(undefined);\n setCurrentItemIndex?.(undefined);\n\n searchTreeRef?.current?.refreshResults();\n } catch (e) {\n showErrorDialog(e);\n } finally {\n setRemovingItem?.(false);\n }\n }\n\n async function duplicate() {\n try {\n setDuplicatingItem?.(true);\n\n const currentId = selectedRowItems![0].id;\n\n const newId = await ConnectionProvider.getHandler().duplicate({\n id: currentId,\n model: currentModel!,\n context: { ...parentContext },\n });\n\n if (newId) {\n searchTreeRef?.current?.refreshResults();\n }\n } catch (e) {\n showErrorDialog(e);\n } finally {\n setDuplicatingItem?.(false);\n }\n }\n\n function runAction(actionData: any) {\n processAction?.({\n actionData,\n values: {\n active_id: selectedRowItems?.map((item) => item.id)[0],\n active_ids: selectedRowItems?.map((item) => item.id),\n },\n fields: {},\n context: {\n ...parentContext,\n active_id: selectedRowItems?.map((item) => item.id)[0],\n active_ids: selectedRowItems?.map((item) => item.id),\n },\n onRefreshParentValues: () => {\n searchTreeRef?.current?.refreshResults();\n },\n });\n }\n\n return (\n <Space wrap={true}>\n {treeIsLoading && (\n <>\n <Spin />\n {separator()}\n {separator()}\n </>\n )}\n {treeExpandable ? null : (\n <>\n <SearchBar\n disabled={duplicatingItem || removingItem || treeIsLoading}\n searchText={searchTreeNameSearch}\n onSearch={(searchString?: string) => {\n if (searchString && searchString.trim().length > 0) {\n setSearchTreeNameSearch?.(searchString);\n } else {\n setSearchTreeNameSearch?.(undefined);\n }\n }}\n />\n {!treeExpandable && (\n <ButtonWithBadge\n icon={\n <FilterOutlined\n style={{ color: searchVisible ? \"white\" : undefined }}\n />\n }\n tooltip={t(\"advanced_search\")}\n type={searchVisible ? \"primary\" : \"default\"}\n onClick={() => {\n setSearchVisible?.(!searchVisible);\n }}\n disabled={duplicatingItem || removingItem || treeIsLoading}\n badgeNumber={searchParams?.length}\n />\n )}\n {separator()}\n <NewButton disabled={treeIsLoading} />\n <ActionButton\n icon={<CopyOutlined />}\n tooltip={t(\"duplicate\")}\n disabled={\n !selectedRowItems ||\n selectedRowItems?.length !== 1 ||\n duplicatingItem ||\n treeIsLoading\n }\n loading={duplicatingItem}\n onClick={duplicate}\n />\n <ActionButton\n icon={<DeleteOutlined />}\n tooltip={t(\"delete\")}\n disabled={\n !(selectedRowItems && selectedRowItems?.length > 0) ||\n treeIsLoading\n }\n loading={removingItem}\n onClick={tryDelete}\n />\n {separator()}\n </>\n )}\n <ActionButton\n icon={<InfoCircleOutlined />}\n tooltip={t(\"showLogs\")}\n disabled={\n !(selectedRowItems && selectedRowItems?.length > 0) || treeIsLoading\n }\n loading={false}\n onClick={() => {\n showLogInfo(currentModel!, selectedRowItems![0].id, t);\n }}\n />\n <ActionButton\n icon={<ReloadOutlined />}\n tooltip={t(\"refresh\")}\n disabled={duplicatingItem || removingItem || treeIsLoading}\n loading={false}\n onClick={() => {\n searchTreeRef?.current?.refreshResults();\n }}\n />\n {!treeExpandable && (\n <>\n {separator()}\n <ChangeViewButton\n currentView={currentView}\n availableViews={availableViews}\n onChangeView={(newView) => {\n setPreviousView?.(currentView);\n setCurrentView?.(newView);\n }}\n previousView={previousView}\n disabled={treeIsLoading}\n />\n </>\n )}\n {separator()}\n <DropdownButton\n icon={<ThunderboltOutlined />}\n disabled={\n !(selectedRowItems && selectedRowItems?.length > 0) || treeIsLoading\n }\n tooltip={t(\"actions\")}\n items={toolbar?.action}\n onItemClick={(action: any) => {\n if (!action) {\n return;\n }\n\n runAction(action);\n }}\n />\n <DropdownButton\n icon={<PrinterOutlined />}\n disabled={\n !(selectedRowItems && selectedRowItems?.length > 0) || treeIsLoading\n }\n tooltip={t(\"reports\")}\n items={toolbar?.print}\n onItemClick={(report: any) => {\n if (!report) {\n return;\n }\n\n runAction({\n ...report,\n datas: {\n ...(report.datas || {}),\n ids: selectedRowItems!.map((item) => item.id),\n },\n });\n }}\n />\n\n {previewFeatures && (\n <>\n {separator()}\n <DropdownButton\n icon={\n <Icon\n component={() => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"icon icon-tabler icon-tabler-database-export\"\n width=\"1em\"\n height=\"1em\"\n viewBox=\"0 0 24 24\"\n strokeWidth=\"1.5\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\n <ellipse cx=\"12\" cy=\"6\" rx=\"8\" ry=\"3\" />\n <path d=\"M4 6v6c0 1.657 3.582 3 8 3a19.84 19.84 0 0 0 3.302 -.267m4.698 -2.733v-6\" />\n <path d=\"M4 12v6c0 1.599 3.335 2.905 7.538 2.995m8.462 -6.995v-2m-6 7h7m-3 -3l3 3l-3 3\" />\n </svg>\n )}\n />\n }\n tooltip={t(\"export\")}\n items={[\n {\n id: \"print_screen\",\n name: t(\"printScreen\"),\n },\n {\n id: \"export\",\n name: t(\"advancedExport\"),\n },\n ]}\n onItemClick={(itemClicked: any) => {\n if (itemClicked.id === \"print_screen\") {\n let idsToExport =\n selectedRowItems?.map((item) => item.id) || [];\n\n if (idsToExport.length === 0) {\n idsToExport = results?.map((item) => item.id) || [];\n }\n\n runAction({\n id: -1,\n model: currentModel,\n report_name: \"printscreen.list\",\n type: \"ir.actions.report.xml\",\n datas: {\n model: currentModel,\n ids: idsToExport,\n },\n });\n return;\n }\n\n setExportModalVisible(true);\n }}\n disabled={\n duplicatingItem || removingItem || treeIsLoading || hasNameSearch\n }\n />\n <ExportModal\n visible={exportModalVisible}\n locale={lang}\n onClose={() => setExportModalVisible(false)}\n model={currentModel!}\n domain={mergeParams(\n searchTreeRef?.current?.getDomain() || [],\n searchParams || []\n )}\n limit={limit}\n totalRegisters={totalItems || 0}\n selectedRegistersToExport={selectedRowItems}\n visibleRegisters={results?.length || 0}\n context={parentContext}\n />\n </>\n )}\n </Space>\n );\n}\n\nfunction separator() {\n return <div className=\"inline-block w-2\" />;\n}\n\nexport default TreeActionBar;\n","import TreeActionBar from \"@/actionbar/TreeActionBar\";\nimport { FormView, TreeView, View } from \"@/types\";\nimport TitleHeader from \"@/ui/TitleHeader\";\nimport SearchTree from \"@/widgets/views/SearchTree\";\nimport React, { useContext } from \"react\";\nimport {\n ActionViewContext,\n ActionViewContextType,\n} from \"@/context/ActionViewContext\";\n\nexport type TreeActionViewProps = {\n formView?: FormView;\n treeView?: TreeView;\n visible: boolean;\n searchTreeRef: any;\n model: string;\n domain: any;\n context: any;\n results: any[];\n setCurrentItemIndex: (value?: number) => void;\n setCurrentId: (id?: number) => void;\n setCurrentView: (view: View) => void;\n availableViews: View[];\n searchTreeNameSearch?: string;\n limit?: number;\n};\n\nexport const TreeActionView = (props: TreeActionViewProps) => {\n const {\n visible,\n searchTreeRef,\n model,\n context,\n formView,\n treeView,\n domain,\n setCurrentItemIndex,\n results,\n setCurrentId,\n setCurrentView,\n availableViews,\n searchTreeNameSearch,\n } = props;\n\n const { currentView, setPreviousView } = useContext(\n ActionViewContext\n ) as ActionViewContextType;\n\n if (!visible) {\n return null;\n }\n\n return (\n <>\n <TitleHeader>\n <TreeActionBar\n toolbar={treeView?.toolbar}\n parentContext={context}\n treeExpandable={treeView?.isExpandable || false}\n />\n </TitleHeader>\n <SearchTree\n ref={searchTreeRef}\n rootTree={true}\n model={model}\n parentContext={context}\n nameSearch={searchTreeNameSearch}\n formView={formView}\n treeView={treeView}\n domain={domain}\n onRowClicked={(event: any) => {\n const { id } = event;\n setCurrentId(id);\n const itemIndex = results.findIndex((item: any) => {\n return item.id === id;\n });\n setPreviousView?.(currentView);\n setCurrentItemIndex(itemIndex);\n const formView = availableViews.find(\n (v) => v.type === \"form\"\n ) as FormView;\n setCurrentView(formView);\n }}\n />\n </>\n );\n};\n","import { ShortcutApi } from \"@/ui/FavouriteButton\";\nimport React, { useState } from \"react\";\n\nexport type DashboardActionContextType = {\n isLoading: boolean;\n setIsLoading: (value: boolean) => void;\n dashboardRef: any;\n openAction: (action?: ShortcutApi) => void;\n moveItemsEnabled: boolean;\n setMoveItemsEnabled: (value: boolean) => void;\n};\n\nexport const DashboardActionContext = React.createContext<DashboardActionContextType | null>(\n null\n);\n\ntype DashboardActionProviderProps = {\n children: React.ReactNode;\n dashboardRef: any;\n openAction: (action?: ShortcutApi) => void;\n};\n\nconst DashboardActionProvider = (props: DashboardActionProviderProps): any => {\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [moveItemsEnabled, setMoveItemsEnabled] = useState<boolean>(false);\n\n const { children, dashboardRef, openAction } = props;\n\n return (\n <DashboardActionContext.Provider\n value={{\n isLoading,\n setIsLoading,\n dashboardRef,\n openAction,\n moveItemsEnabled,\n setMoveItemsEnabled,\n }}\n >\n {children}\n </DashboardActionContext.Provider>\n );\n};\n\nexport default DashboardActionProvider;\n","import React, { useContext } from \"react\";\nimport {\n DashboardActionContext,\n DashboardActionContextType,\n} from \"@/context/DashboardActionContext\";\nimport { Space } from \"antd\";\nimport ActionButton from \"./ActionButton\";\nimport {\n ReloadOutlined,\n SettingOutlined,\n BorderOuterOutlined,\n} from \"@ant-design/icons\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\nfunction DashboardActionBar() {\n const {\n isLoading,\n dashboardRef,\n moveItemsEnabled,\n setMoveItemsEnabled,\n } = useContext(DashboardActionContext) as DashboardActionContextType;\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n return (\n <Space wrap={true}>\n <ActionButton\n icon={\n <BorderOuterOutlined\n style={{ color: moveItemsEnabled ? \"white\" : undefined }}\n />\n }\n type={moveItemsEnabled ? \"primary\" : \"default\"}\n tooltip={t(\"moveDashboard\")}\n disabled={isLoading}\n loading={false}\n onClick={() => {\n setMoveItemsEnabled(!moveItemsEnabled);\n }}\n />\n {separator()}\n <ActionButton\n icon={<SettingOutlined />}\n tooltip={t(\"configDashboard\")}\n disabled={isLoading}\n loading={false}\n onClick={() => {\n dashboardRef?.current.configDashboard();\n }}\n />\n <ActionButton\n icon={<ReloadOutlined />}\n tooltip={t(\"refresh\")}\n disabled={isLoading}\n loading={false}\n onClick={() => {\n dashboardRef?.current.refresh();\n }}\n />\n </Space>\n );\n}\n\nfunction separator() {\n return <div className=\"inline-block w-2\" />;\n}\n\nexport default DashboardActionBar;\n","import DashboardActionBar from \"@/actionbar/DashboardActionBar\";\nimport DashboardActionProvider from \"@/context/DashboardActionContext\";\nimport TitleHeader from \"@/ui/TitleHeader\";\nimport Dashboard from \"@/widgets/views/Dashboard/Dashboard\";\nimport React, { useContext, useRef } from \"react\";\nimport {\n TabManagerContext,\n TabManagerContextType,\n} from \"@/context/TabManagerContext\";\nimport { DashboardProps } from \"@/types\";\n\nexport type DashboardActionViewProps = {\n dashboardData: DashboardProps;\n};\n\nexport const DashboardActionView = (props: DashboardActionViewProps) => {\n const { dashboardData } = props;\n const dashboardRef = useRef();\n const tabManagerContext = useContext(\n TabManagerContext\n ) as TabManagerContextType;\n const { openShortcut } = tabManagerContext || {};\n\n if (!dashboardData) {\n return null;\n }\n\n return (\n <DashboardActionProvider\n dashboardRef={dashboardRef}\n openAction={(action) => {\n openShortcut(action!);\n }}\n >\n <TitleHeader>\n <DashboardActionBar />\n </TitleHeader>\n <Dashboard\n ref={dashboardRef}\n model={dashboardData!.model}\n id={dashboardData!.id}\n context={dashboardData?.context}\n configAction={dashboardData?.configAction}\n />\n </DashboardActionProvider>\n );\n};\n","import { ViewTuple, ViewType } from \"@/types\";\n\nexport async function resolveViewInfoPromises(\n viewsToRetrieve: { viewTuple: ViewTuple; promise?: Promise<any> }[]\n) {\n const results = await Promise.all(\n viewsToRetrieve.map(async (item) => {\n try {\n return await item.promise;\n } catch (error) {\n console.error(`Error for ${item.viewTuple}:`, error);\n return null;\n }\n })\n );\n\n const updatedViews = viewsToRetrieve.map((item, index) => ({\n ...item,\n info: results[index],\n }));\n\n return updatedViews.filter((item) => item.info !== null);\n}\n","import React, {\n useEffect,\n useState,\n useRef,\n forwardRef,\n useImperativeHandle,\n useContext,\n} from \"react\";\n\nimport { Spin } from \"antd\";\n\nimport {\n DashboardView,\n FormView,\n GraphView,\n InitialViewData,\n TreeView,\n View,\n ViewType,\n} from \"@/types/index\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\n\nimport ActionViewProvider from \"@/context/ActionViewContext\";\nimport {\n TabManagerContext,\n TabManagerContextType,\n} from \"@/context/TabManagerContext\";\nimport { useHotkeys } from \"react-hotkeys-hook\";\nimport { GoToResourceModal } from \"@/ui/GoToResourceModal\";\nimport showInfo from \"@/ui/InfoDialog\";\nimport showErrorDialog from \"@/ui/ActionErrorDialog\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport { GraphActionView } from \"@/views/actionViews/GraphActionView\";\nimport { FormActionView } from \"./actionViews/FormActionView\";\nimport { TreeActionView } from \"./actionViews/TreeActionView\";\nimport { DashboardActionView } from \"./actionViews/DashboardActionView\";\nimport { info } from \"console\";\nimport { resolveViewInfoPromises } from \"@/helpers/viewHelper\";\n\ntype Props = {\n domain: any;\n context: any;\n model: string;\n views: Array<[number, ViewType]>;\n title: string;\n tabKey: string;\n setCanWeClose: (f: any) => void;\n initialView: InitialViewData;\n formDefaultValues?: any;\n formForcedValues?: any;\n res_id?: number | boolean;\n action_id: number;\n action_type: string;\n treeExpandable?: boolean;\n limit?: number;\n};\n\nfunction ActionView(props: Props, ref: any) {\n const {\n domain,\n model,\n context,\n views,\n title,\n setCanWeClose,\n tabKey,\n initialView,\n formDefaultValues,\n formForcedValues = {},\n res_id = false,\n action_id,\n action_type,\n treeExpandable = false,\n limit,\n } = props;\n const [currentView, setCurrentViewInternal] = useState<View>();\n\n const [availableViews, setAvailableViews] = useState<View[]>([]);\n\n const [isLoading, setIsLoading] = useState<boolean>(true);\n const res_id_parsed: number | undefined = res_id\n ? (res_id as number)\n : undefined;\n\n const [currentId, setCurrentIdInternal] =\n useState<number | undefined>(res_id_parsed);\n const [selectedRowItems, setSelectedRowItems] = useState<any[]>([]);\n const [currentItemIndex, setCurrentItemIndex] = useState<number>();\n const [results, setResults] = useState<any>([]);\n const [sorter, setSorter] = useState<any>();\n const [totalItems, setTotalItems] = useState<number>(0);\n const [gtResourceModalVisible, setGtResourceModalVisible] =\n useState<boolean>(false);\n const [searchingForResourceId, setSearchingForResourceId] =\n useState<boolean>(false);\n const [searchTreeNameSearch, setSearchTreeNameSearch] = useState<string>();\n\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n const formRef = useRef();\n const searchTreeRef = useRef();\n\n const tabManagerContext = useContext(\n TabManagerContext\n ) as TabManagerContextType;\n const {\n setCurrentView: setCurrentViewTabContext,\n setCurrentId: setCurrentIdTabContext,\n tabs,\n activeKey,\n openAction,\n onRemoveTab,\n } = tabManagerContext || {};\n\n useHotkeys(\n \"ctrl+g,command+g\",\n (event) => {\n event.preventDefault();\n handleGoToRecordShortcut();\n },\n [activeKey, tabs, currentView, currentItemIndex, results]\n );\n\n function setCurrentId(id?: number) {\n setCurrentIdInternal(id);\n setCurrentIdTabContext?.(id);\n }\n\n function setCurrentView(view?: View) {\n setCurrentViewInternal(view);\n setCurrentViewTabContext?.(view);\n }\n\n useImperativeHandle(ref, () => ({\n canWeClose,\n }));\n\n const fetchData = async () => {\n setIsLoading(true);\n\n const viewDataRetrieved: View[] = [];\n\n const getViewsPromises = [];\n\n for (const viewArray of views) {\n const [id, viewType] = viewArray;\n if (viewType !== \"dashboard\") {\n getViewsPromises.push({\n viewTuple: viewArray,\n promise: ConnectionProvider.getHandler().getView({\n model,\n type: viewType,\n id,\n context,\n }),\n });\n } else {\n getViewsPromises.push({\n viewTuple: viewArray,\n });\n }\n }\n\n const viewsRetrieved = await resolveViewInfoPromises(getViewsPromises);\n\n for (const view of viewsRetrieved) {\n if (!view) {\n continue;\n }\n\n const [, viewType] = view.viewTuple;\n\n let viewInfo = view.info;\n\n switch (viewType) {\n case \"dashboard\": {\n const formView = views.find((view: any[]) => {\n const [, type] = view;\n return type === \"form\";\n });\n\n let configAction;\n\n if (formView) {\n configAction = {\n action_id,\n action_type,\n name: title,\n res_id: context[\"active_id\"],\n res_model: model,\n view_id: formView[0],\n view_type: formView[1],\n };\n }\n\n viewDataRetrieved.push({\n type: \"dashboard\",\n id: context[\"active_id\"],\n model,\n context,\n configAction,\n });\n break;\n }\n case \"form\": {\n viewDataRetrieved.push({\n ...(viewInfo as FormView),\n type: viewType,\n });\n break;\n }\n case \"tree\": {\n viewDataRetrieved.push({\n ...(viewInfo as TreeView),\n isExpandable: treeExpandable,\n type: viewType,\n });\n break;\n }\n case \"graph\": {\n viewDataRetrieved.push({\n ...(viewInfo as GraphView),\n type: viewType,\n });\n break;\n }\n default:\n break;\n }\n }\n let currentViewToAssign = undefined;\n\n if (!initialView && viewDataRetrieved.find((v) => v.type === \"tree\")) {\n const treeView: TreeView = viewDataRetrieved.find(\n (v) => v.type === \"tree\"\n ) as TreeView;\n currentViewToAssign = treeView;\n } else if (!initialView) {\n const formView: TreeView = viewDataRetrieved.find(\n (v) => v.type === \"form\"\n ) as TreeView;\n currentViewToAssign = formView;\n } else {\n const view = viewDataRetrieved.find((v) => {\n if (!initialView.id) {\n return v.type === initialView.type;\n } else {\n return v.type === initialView.type && v.view_id === initialView.id;\n }\n });\n currentViewToAssign = view;\n }\n\n if (!currentViewToAssign) {\n showErrorDialog(\n `Error determining the first view to show for model ${model}.\\nPlease, make sure the view ids on the fields_view_get responses are the same as the ones defined in the action`\n );\n onRemoveTab?.(tabKey);\n }\n\n setCurrentView(currentViewToAssign);\n setAvailableViews(viewDataRetrieved);\n setIsLoading(false);\n };\n\n setCanWeClose({ tabKey, canWeClose });\n\n useEffect(() => {\n const treeView = availableViews.find((v) => v.type === \"tree\") as TreeView;\n const initialViewWithData: View = availableViews.find((v) => {\n if (!initialView.id) {\n return v.type === initialView.type;\n } else {\n return v.type === initialView.type && v.view_id === initialView.id;\n }\n }) as View;\n\n setCurrentView(initialViewWithData || treeView);\n if (!res_id) {\n setCurrentId(undefined);\n setCurrentItemIndex(undefined);\n } else {\n setCurrentIdTabContext?.(res_id_parsed);\n }\n fetchData();\n }, [model, views, res_id]);\n\n useEffect(() => {\n if (activeKey === tabKey) {\n setCurrentIdTabContext?.(currentId);\n setCurrentViewTabContext?.(currentView);\n }\n }, [tabs, activeKey]);\n\n async function canWeClose() {\n if (!currentView) {\n return true;\n } else if (currentView!.type === \"form\") {\n return await (formRef.current as any).cancelUnsavedChanges();\n } else {\n return true;\n }\n }\n\n async function handleGoToRecordShortcut() {\n if (activeKey !== tabKey) {\n return;\n }\n\n if (currentView!.type === \"form\") {\n const canWeClose = await (formRef.current as any).cancelUnsavedChanges();\n\n if (!canWeClose) {\n return;\n }\n }\n\n setGtResourceModalVisible(true);\n }\n\n async function goToResourceId(id: number) {\n setSearchingForResourceId(true);\n\n const itemIndex = results!.findIndex((item: any) => {\n return item.id === id;\n });\n\n let resource;\n\n if (itemIndex === -1) {\n try {\n resource = (\n await ConnectionProvider.getHandler().readObjects({\n model,\n ids: [id],\n context,\n })\n )?.[0];\n } catch (err) {}\n\n if (!resource) {\n setSearchingForResourceId(false);\n setGtResourceModalVisible(false);\n showInfo(t(\"idNotFound\"));\n return;\n }\n } else {\n resource = results[itemIndex];\n }\n\n setSearchingForResourceId(false);\n setGtResourceModalVisible(false);\n\n const viewForm = views.find((v) => v[1] === \"form\");\n\n openAction({\n domain: [],\n context,\n model,\n views,\n title,\n target: \"current\",\n initialView: { id: viewForm?.[0]!, type: \"form\" },\n action_id,\n action_type,\n res_id: id,\n });\n }\n\n function content() {\n return availableViews.map((view) => {\n switch (view.type) {\n case \"form\": {\n return (\n <FormActionView\n key={`${view.type}-${view.view_id}`}\n formRef={formRef}\n currentId={currentId}\n visible={\n currentView!.type === view.type &&\n currentView!.view_id === view.view_id\n }\n formView={view as FormView}\n model={model}\n context={context}\n domain={domain}\n defaultValues={formDefaultValues}\n forcedValues={formForcedValues}\n results={results}\n setResults={setResults}\n setCurrentItemIndex={setCurrentItemIndex}\n />\n );\n }\n case \"tree\": {\n return (\n <TreeActionView\n key={`${view.type}-${view.view_id}`}\n visible={\n currentView!.type === view.type &&\n currentView!.view_id === view.view_id\n }\n limit={limit}\n model={model}\n context={context}\n domain={domain}\n formView={\n availableViews.find((v) => v.type === \"form\") as FormView\n }\n treeView={view as TreeView}\n searchTreeRef={searchTreeRef}\n searchTreeNameSearch={searchTreeNameSearch}\n availableViews={availableViews}\n results={results}\n setCurrentItemIndex={setCurrentItemIndex}\n setCurrentId={setCurrentId}\n setCurrentView={setCurrentView}\n />\n );\n }\n case \"graph\": {\n return (\n <GraphActionView\n key={`${view.type}-${view.view_id}`}\n visible={\n currentView!.type === view.type &&\n currentView!.view_id === view.view_id\n }\n viewData={view as GraphView}\n model={model}\n context={context}\n domain={domain}\n treeView={\n availableViews.find((v) => v.type === \"tree\") as TreeView\n }\n formView={\n availableViews.find((v) => v.type === \"form\") as FormView\n }\n />\n );\n }\n case \"dashboard\": {\n return (\n <DashboardActionView\n key={`${view.type}-${view.view_id}`}\n dashboardData={view as DashboardView}\n />\n );\n }\n }\n });\n }\n\n function onNewClicked() {\n if (currentId === undefined && currentView!.type === \"form\") {\n (formRef.current as any).clearAndReload();\n } else {\n setCurrentId(undefined);\n const formView: FormView = availableViews.find(\n (v) => v.type === \"form\"\n ) as FormView;\n setCurrentView(formView);\n }\n }\n\n if (isLoading) {\n return <Spin />;\n }\n\n if (!currentView) {\n return null;\n }\n\n return (\n <ActionViewProvider\n title={title}\n currentView={currentView}\n setCurrentView={setCurrentView}\n availableViews={availableViews}\n formRef={formRef}\n searchTreeRef={searchTreeRef}\n onNewClicked={onNewClicked}\n currentId={currentId}\n setCurrentId={setCurrentId}\n setCurrentItemIndex={setCurrentItemIndex}\n currentItemIndex={currentItemIndex}\n results={results}\n setResults={setResults}\n currentModel={model}\n sorter={sorter}\n setSorter={setSorter}\n totalItems={totalItems}\n setTotalItems={setTotalItems}\n selectedRowItems={selectedRowItems}\n setSelectedRowItems={setSelectedRowItems}\n setSearchTreeNameSearch={setSearchTreeNameSearch}\n searchTreeNameSearch={searchTreeNameSearch}\n goToResourceId={goToResourceId}\n limit={limit}\n >\n {content()}\n <GoToResourceModal\n visible={gtResourceModalVisible}\n onIdSubmitted={goToResourceId}\n isSearching={searchingForResourceId}\n onCancel={() => {\n setGtResourceModalVisible(false);\n }}\n />\n </ActionViewProvider>\n );\n}\n\nexport default forwardRef(ActionView);\n","import ConnectionProvider from \"@/ConnectionProvider\";\nimport { DashboardItem as DashboardItemOoui, parseContext } from \"@gisce/ooui\";\nimport { v4 as uuidv4 } from \"uuid\";\n\nexport async function fetchAction({\n actionId,\n rootContext = {},\n globalValues = {},\n}: {\n actionId: number;\n rootContext?: any;\n globalValues?: any;\n}): Promise<any> {\n const actionType = \"ir.actions.act_window\";\n const action = `${actionType},${actionId}`;\n\n const dataForAction = await ConnectionProvider.getHandler().getActionData({\n action,\n context: rootContext,\n });\n\n const parsedContext = parseContext({\n context: dataForAction.context,\n values: globalValues,\n fields: {},\n });\n\n const parsedDomain = dataForAction.domain\n ? await ConnectionProvider.getHandler().evalDomain({\n domain: dataForAction.domain,\n values: globalValues,\n context: { ...rootContext, ...parsedContext },\n })\n : [];\n\n const {\n res_model: model,\n views,\n name: title,\n limit,\n view_type,\n } = dataForAction;\n const treeExpandable = view_type === \"tree\";\n\n const finalViews = [];\n\n for (const viewArray of views) {\n const [id, viewType] = viewArray;\n\n if (!id) {\n const { view_id } = await ConnectionProvider.getHandler().getView({\n model,\n type: viewType,\n id,\n context: { ...rootContext, ...parsedContext },\n });\n finalViews.push([view_id, viewType]);\n } else {\n finalViews.push(viewArray);\n }\n }\n\n const [id, type] = finalViews[0];\n const initialView = { id, type };\n\n return {\n title,\n actionId,\n actionType,\n key: uuidv4(),\n views,\n model,\n context: { ...rootContext, ...parsedContext },\n domain: parsedDomain,\n initialView,\n limit,\n treeExpandable,\n };\n}\n","import React from \"react\";\nimport { DashboardGridProps } from \"./DashboardGrid.types\";\nimport { WidthProvider, Responsive } from \"react-grid-layout\";\nimport \"react-resizable/css/styles.css\";\nimport \"react-grid-layout/css/styles.css\";\n\nconst ResponsiveReactGridLayout = WidthProvider(Responsive);\n\nexport const DashboardGrid = (props: DashboardGridProps) => {\n const { children = [], onPositionItemsChanged } = props;\n\n const items = React.Children.map(\n children,\n (\n child:\n | boolean\n | React.ReactChild\n | React.ReactFragment\n | React.ReactPortal\n ) => {\n const { parms, id } = (child as any).props;\n return (\n <div key={id} data-grid={parms}>\n {child}\n </div>\n );\n }\n );\n\n return (\n <ResponsiveReactGridLayout\n className=\"layout\"\n cols={{ lg: 12, md: 10, sm: 6, xs: 4, xxs: 2 }}\n draggableHandle={\".draggable-head\"}\n rowHeight={30}\n onLayoutChange={(layout) => {\n onPositionItemsChanged?.(\n layout.map((item) => {\n return {\n id: parseInt(item.i.replace(\".$\", \"\"), 10),\n x: item.x,\n y: item.y,\n w: item.w,\n h: item.h,\n };\n })\n );\n }}\n >\n {items}\n </ResponsiveReactGridLayout>\n );\n};\n","import React from \"react\";\nimport { DashboardGridItemProps } from \"./DashboardGridItem.types\";\nimport { ExportOutlined } from \"@ant-design/icons\";\nimport { Row, Col, Typography, theme } from \"antd\";\nconst { useToken } = theme;\n\nconst { Text } = Typography;\n\nexport const DashboardGridItem = (props: DashboardGridItemProps) => {\n const { title, children, action, openAction } = props;\n const { token } = useToken();\n\n return (\n <div\n className={\"shadow-md\"}\n style={{\n height: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n overflow: \"hidden\",\n border: \"1px solid #eee\",\n backgroundColor: \"white\",\n borderRadius: token.borderRadius,\n }}\n >\n <Row\n align=\"middle\"\n style={{\n borderBottom: \"1px solid #ddd\",\n backgroundColor: token.colorPrimaryBg,\n }}\n wrap={false}\n >\n <Col\n flex=\"auto\"\n className=\"draggable-head\"\n style={{\n fontWeight: \"bold\",\n padding: \"0.5rem\",\n cursor: \"grab\",\n overflow: \"hidden\",\n }}\n >\n <Text ellipsis={true}>{title}</Text>\n </Col>\n {action && (\n <Col flex=\"25px\" style={{ padding: \"0.5rem\" }}>\n <Row justify=\"end\" align=\"middle\">\n <ExportOutlined\n style={{ cursor: \"pointer\" }}\n onClick={() => {\n openAction?.(action);\n }}\n />\n </Row>\n </Col>\n )}\n </Row>\n {children}\n </div>\n );\n};\n","import React, { useEffect, useState, useRef } from \"react\";\nimport { Alert, Spin } from \"antd\";\n\nimport Tree from \"@/widgets/views/Tree\";\nimport { FormView, TreeView } from \"@/types/index\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\n\nimport { getColorMap, getTree, sortResults } from \"@/helpers/treeHelper\";\nimport { mergeParams } from \"@/helpers/searchHelper\";\n\nconst DEFAULT_SEARCH_LIMIT = 80;\n\ntype OnRowClickedData = {\n id: number;\n model: string;\n treeView: TreeView;\n};\n\ntype Props = {\n action?: string;\n model?: string;\n view_id?: number;\n onRowClicked: (data: OnRowClickedData) => void;\n domain?: any;\n visible?: boolean;\n parentContext?: any;\n};\n\nfunction DashboardTree(props: Props) {\n const {\n action,\n model,\n view_id,\n onRowClicked,\n domain = [],\n visible = true,\n parentContext = {},\n } = props;\n\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [initialFetchDone, setInitialFetchDone] = useState<boolean>(false);\n\n const [currentModel, setCurrentModel] = useState<string>();\n const [treeView, setTreeView] = useState<TreeView>();\n const [formView, setFormView] = useState<FormView>();\n\n const [page, setPage] = useState<number>(1);\n const [offset, setOffset] = useState<number>(0);\n const limitRef = useRef<number>(DEFAULT_SEARCH_LIMIT);\n\n const paramsRef = useRef<Array<any>>([]);\n\n const [totalItems, setTotalItems] = useState<number>(0);\n const [results, setResults] = useState<any>([]);\n const [colorsForResults, setColorsForResults] = useState<any>(undefined);\n const [sorter, setSorter] = useState<any>();\n\n const [searchError, setSearchError] = useState<string>();\n const [initialError, setInitialError] = useState<string>();\n\n const [tableRefreshing, setTableRefreshing] = useState<boolean>(false);\n\n const actionDomain = useRef<any>([]);\n\n const onRequestPageChange = (page: number) => {\n setTableRefreshing(true);\n setPage(page);\n setOffset((page - 1) * limitRef.current!);\n };\n\n const searchResults = async () => {\n const domainParams =\n actionDomain.current.length > 0 ? actionDomain.current : domain;\n\n const searchParams = mergeParams(paramsRef.current, domainParams);\n const { colors } = getTree(treeView!);\n\n const { totalItems, results, attrsEvaluated } =\n await ConnectionProvider.getHandler().searchForTree({\n params: searchParams,\n limit: limitRef.current,\n offset,\n model: currentModel!,\n fields: treeView!.fields,\n context: parentContext,\n attrs: colors && { colors },\n });\n setColorsForResults(getColorMap(attrsEvaluated));\n\n const resultsSorted = sortResults({\n resultsToSort: results,\n sorter: sorter,\n fields: { ...treeView!.fields, ...formView!.fields },\n });\n setTableRefreshing(false);\n\n setResults(resultsSorted);\n const totalItemsResult = await totalItems;\n setTotalItems(totalItemsResult);\n };\n\n const fetchResults = async () => {\n try {\n setTableRefreshing(true);\n await searchResults();\n } catch (error) {\n setSearchError(JSON.stringify(error));\n }\n };\n\n useEffect(() => {\n if (!initialFetchDone) {\n return;\n }\n\n if (visible) {\n fetchResults();\n }\n }, [page, offset, initialFetchDone, visible]);\n\n const fetchData = async (type: \"action\" | \"model\") => {\n setInitialFetchDone(false);\n setIsLoading(true);\n setInitialError(undefined);\n\n try {\n if (type === \"action\") {\n await fetchActionData();\n } else {\n await fetchModelData();\n }\n setInitialFetchDone(true);\n } catch (error) {\n setInitialError(error);\n } finally {\n setIsLoading(false);\n }\n };\n\n const fetchActionData = async () => {\n const dataForAction =\n await ConnectionProvider.getHandler().getViewsForAction({\n action: action!,\n context: parentContext,\n });\n actionDomain.current = dataForAction.domain;\n setFormView(dataForAction.views.get(\"form\"));\n setTreeView(dataForAction.views.get(\"tree\"));\n setCurrentModel(dataForAction.model);\n limitRef.current = dataForAction.limit;\n };\n\n const fetchModelData = async () => {\n setCurrentModel(model);\n\n const _formView = (await ConnectionProvider.getHandler().getView({\n model: model!,\n type: \"form\",\n context: parentContext,\n })) as FormView;\n setFormView(_formView as FormView);\n\n const _treeView = (await ConnectionProvider.getHandler().getView({\n model: model!,\n type: \"tree\",\n id: view_id,\n context: parentContext,\n })) as TreeView;\n\n setTreeView(_treeView as TreeView);\n };\n\n useEffect(() => {\n if (action) {\n fetchData(\"action\");\n } else if (model) {\n fetchData(\"model\");\n }\n }, [action, model]);\n\n const onRowClickedHandler = (record: any) => {\n const { id } = record;\n onRowClicked({\n id,\n model: currentModel!,\n treeView: treeView!,\n });\n };\n\n const content = () => {\n if (!treeView || !formView) {\n return null;\n }\n\n return (\n <div style={{ overflowY: \"scroll\" }}>\n {searchError && (\n <Alert className=\"mt-10\" message={searchError} type=\"error\" banner />\n )}\n <Tree\n showPagination={false}\n total={totalItems}\n limit={limitRef.current}\n page={page}\n treeView={treeView}\n results={results}\n onRequestPageChange={onRequestPageChange}\n loading={tableRefreshing}\n onRowClicked={onRowClickedHandler}\n colorsForResults={colorsForResults}\n sorter={sorter}\n onChangeSort={(newSorter) => {\n setSorter?.(newSorter);\n const sortedResults = sortResults({\n resultsToSort: results,\n sorter: newSorter,\n fields: { ...treeView.fields, ...formView.fields },\n });\n setResults(sortedResults);\n }}\n context={parentContext}\n />\n </div>\n );\n };\n\n if (initialError) {\n return (\n <Alert className=\"mt-10\" message={initialError} type=\"error\" banner />\n );\n }\n\n return isLoading ? <Spin style={{ padding: \"2rem\" }} /> : content();\n}\n\nexport default DashboardTree;\n","import ConnectionProvider from \"@/ConnectionProvider\";\nimport React, { useEffect, useState } from \"react\";\nimport Form, { FormProps } from \"../Form\";\n\nexport const DashboardForm = (props: FormProps) => {\n const { model } = props;\n const [firstId, setFirstId] = useState<number>();\n\n useEffect(() => {\n fetchData();\n }, [model]);\n\n async function fetchData() {\n const results: any[] = (await ConnectionProvider.getHandler().search({\n params: [],\n model,\n limit: 1,\n })) as any;\n\n if (results.length > 0) {\n setFirstId(results[0].id);\n }\n }\n\n return (\n <div style={{ padding: \"0.5rem\", overflowY: \"scroll\" }}>\n <Form {...props} model={model} id={firstId} readOnly />\n </div>\n );\n};\n","import React, {\n forwardRef,\n useContext,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from \"react\";\nimport ActionView from \"@/views/ActionView\";\nimport { fetchAction } from \"./dashboardHelper\";\nimport \"react-resizable/css/styles.css\";\nimport \"react-grid-layout/css/styles.css\";\nimport { Graph } from \"../Graph/Graph\";\nimport { DashboardGrid, DashboardGridItem } from \"../DashboardGrid\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport { DashboardProps, FormView } from \"@/types\";\nimport { One2manyItem } from \"@/index\";\nimport { readObjectValues } from \"@/helpers/one2manyHelper\";\nimport { LoadingOutlined } from \"@ant-design/icons\";\nimport { Alert } from \"antd\";\nimport {\n DashboardActionContext,\n DashboardActionContextType,\n} from \"@/context/DashboardActionContext\";\nimport { ShortcutApi } from \"@/ui/FavouriteButton\";\nimport DashboardTree from \"./DashboardTree\";\nimport { DashboardForm } from \"./DashboardForm\";\n\nconst itemsField = \"line_ids\";\n\nfunction Dashboard(props: DashboardProps, ref: any) {\n const { model, context = {}, id, configAction } = props;\n const [dashboardItems, setDashboardItems] = useState<any[]>([]);\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [error, setError] = useState<string>();\n const {\n setIsLoading: setActionBarLoading,\n openAction,\n moveItemsEnabled,\n } = useContext(DashboardActionContext) as DashboardActionContextType;\n\n const itemsFields = useRef<any>();\n const boardFields = useRef<any>();\n\n useEffect(() => {\n fetchData();\n }, [model, id, context]);\n\n useImperativeHandle(ref, () => ({\n refresh: () => {\n fetchData();\n },\n configDashboard: openConfigDashboard,\n }));\n\n async function fetchData() {\n setIsLoading(true);\n setActionBarLoading(true);\n setError(undefined);\n\n try {\n const view: FormView = (await fetchView()) as FormView;\n const values = await fetchValues(view);\n const model = view.fields[itemsField].relation;\n const items: One2manyItem[] = values[itemsField].items;\n boardFields.current = view.fields;\n\n const originalItems: One2manyItem[] = await fetchDashboardItems({\n items,\n model,\n context,\n });\n\n const itemsWithActions = await getItemsWithActions(originalItems);\n setDashboardItems(itemsWithActions);\n setIsLoading(false);\n setActionBarLoading(false);\n } catch (err) {\n setError(JSON.stringify(err));\n }\n }\n\n async function fetchView() {\n return await ConnectionProvider.getHandler().getView({\n model,\n type: \"form\",\n context,\n });\n }\n\n async function fetchDashboardItems({\n items,\n model,\n context,\n }: {\n items: One2manyItem[];\n model: string;\n context: any;\n }) {\n itemsFields.current = (\n (await ConnectionProvider.getHandler().getView({\n model,\n type: \"form\",\n context,\n })) as FormView\n ).fields;\n\n const [results] = await readObjectValues({\n treeView: {\n fields: itemsFields.current,\n },\n formView: {\n fields: itemsFields.current,\n },\n model,\n items,\n context,\n currentView: \"form\",\n });\n return results;\n }\n\n async function fetchValues(view: FormView) {\n return (\n await ConnectionProvider.getHandler().readObjects({\n model,\n ids: [id],\n fields: view.fields,\n context,\n })\n )[0];\n }\n\n async function getItemsWithActions(items: One2manyItem[]) {\n const itemsWithActions = [];\n\n for (const dashboardItem of items) {\n const { values } = dashboardItem;\n if (values.action_id && values.action_id.length > 0) {\n const actionId = parseInt(values.action_id[0], 10);\n const actionData = await fetchAction({\n actionId,\n rootContext: context,\n });\n itemsWithActions.push({ ...dashboardItem, actionData });\n }\n }\n\n return itemsWithActions;\n }\n\n async function onPositionItemsChanged(itemPositions: any[]) {\n if (!moveItemsEnabled) {\n return;\n }\n\n const differences = itemPositions.filter((itemPosition) => {\n const dashboardItem = dashboardItems.find(\n (dashboardItem) => dashboardItem.id === itemPosition.id\n );\n if (!dashboardItem) {\n return false;\n }\n\n if (!dashboardItem.position) {\n return true;\n }\n\n const remotePosition = {\n ...JSON.parse(dashboardItem.position.replace(/'/g, '\"')),\n id: dashboardItem.id,\n };\n\n return JSON.stringify(itemPosition) !== JSON.stringify(remotePosition);\n });\n\n if (differences.length === 0) {\n return;\n }\n\n const itemsToUpdate = dashboardItems.filter((dashboardItem) => {\n return differences.map((diff) => diff.id).includes(dashboardItem.id);\n });\n\n const itemsToUpdateWithUpdatedPos = itemsToUpdate.map((dashboardItem) => {\n const diffItem = {\n ...differences.find((diffItem) => diffItem.id === dashboardItem.id),\n };\n delete diffItem.id;\n\n const item = { ...dashboardItem };\n delete item.actionData;\n\n return {\n ...dashboardItem,\n operation: \"pendingUpdate\",\n values: {\n ...dashboardItem.values,\n position: JSON.stringify(diffItem).replace(/\"/g, \"'\"),\n },\n };\n });\n\n const valueToUpdate = {\n fields: itemsFields.current,\n items: itemsToUpdateWithUpdatedPos,\n };\n\n await ConnectionProvider.getHandler().update({\n model,\n id,\n values: { [itemsField]: valueToUpdate },\n fields: boardFields.current,\n context,\n });\n }\n\n async function openConfigDashboard() {\n openAction(configAction);\n }\n\n if (error) {\n console.log(error);\n return (\n <Alert className=\"mt-10 mb-20\" message={error} type=\"error\" banner />\n );\n }\n\n if (isLoading) {\n return <LoadingOutlined />;\n }\n\n return (\n <DashboardGrid onPositionItemsChanged={onPositionItemsChanged}>\n {dashboardItems.map((item, idx) => {\n const { actionData, values } = item;\n const { position, id } = values;\n\n const {\n actionId,\n actionType,\n key,\n title,\n views,\n model,\n context,\n domain,\n initialView,\n limit,\n } = actionData as any;\n\n let parmsParsed = {};\n\n try {\n parmsParsed = JSON.parse(position.replace(/'/g, '\"'));\n } catch (err) {\n // console.error(`Error parsing parms: ${action.position}`);\n parmsParsed = { x: idx * 2, y: 0, w: 2, h: 3 };\n }\n\n let childContent = null;\n\n if (initialView?.type === \"graph\") {\n childContent = (\n <Graph\n view_id={\n views.filter(\n (view: [number, string]) => view[1] === \"graph\"\n )[0][0]\n }\n model={model}\n context={context}\n domain={domain}\n limit={limit}\n />\n );\n } else if (initialView?.type === \"form\") {\n childContent = <DashboardForm model={model} actionDomain={domain} />;\n } else if (initialView?.type === \"tree\") {\n childContent = (\n <DashboardTree\n model={model}\n domain={domain}\n view_id={\n views.filter(\n (view: [number, string]) => view[1] === \"tree\"\n )[0][0]\n }\n onRowClicked={(record) => {\n const formView = views.find((view: any[]) => {\n const [, type] = view;\n return type === \"form\";\n });\n if (formView) {\n const [id, type] = formView;\n const {\n actionId: action_id,\n actionType: action_type,\n title: name,\n model: res_model,\n } = actionData;\n\n const action: ShortcutApi = {\n action_id,\n action_type,\n name,\n res_id: record.id,\n res_model,\n view_id: id,\n view_type: type,\n };\n openAction(action);\n }\n }}\n />\n );\n } else if (initialView !== undefined) {\n const formattedInitialView =\n initialView && Array.isArray(initialView.id)\n ? { ...initialView, id: initialView.id[0] }\n : initialView;\n childContent = (\n <ActionView\n action_id={actionId}\n action_type={actionType}\n tabKey={key}\n title={title}\n views={views}\n model={model}\n context={context}\n domain={domain}\n setCanWeClose={() => {}}\n initialView={formattedInitialView}\n limit={limit}\n />\n );\n }\n\n let action: ShortcutApi;\n const treeView = views.find((view: any[]) => {\n const [, type] = view;\n return type === \"tree\";\n });\n if (treeView) {\n const [id, type] = treeView;\n const {\n actionId: action_id,\n actionType: action_type,\n title: name,\n model: res_model,\n } = actionData;\n\n action = {\n action_id,\n action_type,\n name,\n res_id: false,\n res_model,\n view_id: id,\n view_type: type,\n };\n }\n\n return (\n <DashboardGridItem\n key={id}\n id={id}\n title={title}\n parms={parmsParsed}\n action={action!}\n openAction={openAction}\n >\n {childContent}\n </DashboardGridItem>\n );\n })}\n </DashboardGrid>\n );\n}\n\nexport default forwardRef(Dashboard);\n","import React, { useContext, useState } from \"react\";\nimport { MultiCheckbox as MultiCheckboxOoui } from \"@gisce/ooui\";\nimport Field from \"@/common/Field\";\nimport { One2manyItem, One2manyValue } from \"../base/one2many/One2manyInput\";\nimport useDeepCompareEffect from \"use-deep-compare-effect\";\nimport { FormContext, FormContextType } from \"@/context/FormContext\";\nimport { Alert, Checkbox, Spin, Col, Row, Button, Space } from \"antd\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport { transformPlainMany2Ones } from \"@/helpers/formHelper\";\n\ntype MultiCheckboxProps = {\n ooui: MultiCheckboxOoui;\n};\n\ntype MultiCheckboxInputProps = MultiCheckboxProps & {\n value?: One2manyValue;\n onChange?: (value: One2manyValue) => void;\n};\n\nexport const MultiCheckbox = (props: MultiCheckboxProps) => {\n const { ooui } = props;\n\n return (\n <Field type={\"array\"} {...props}>\n <MultiCheckboxInput ooui={ooui} />\n </Field>\n );\n};\n\nexport const MultiCheckboxInput = (props: MultiCheckboxInputProps) => {\n const { value, ooui, onChange } = props;\n const { items = [] } = value || {};\n const itemsToShow = items\n .filter((item) => item.operation !== \"pendingRemove\")\n .map((item) => item.id) as number[];\n\n const [options, setOptions] = useState<any[]>([]);\n const [error, setError] = useState<string>();\n const [isLoadingOptions, setIsLoadingOptions] = useState<boolean>(false);\n const { relation, context, readOnly, field, columns } = ooui;\n\n const formContext = useContext(FormContext) as FormContextType;\n const { getContext } = formContext || {};\n\n useDeepCompareEffect(() => {\n fetchOptions();\n }, [items]);\n\n const triggerChange = (changedValue: Array<One2manyItem>) => {\n onChange?.({\n items: changedValue,\n });\n };\n\n async function fetchOptions() {\n setIsLoadingOptions(true);\n let params: any = [];\n if (ooui.domain) {\n const evaluatedDomain = await ConnectionProvider.getHandler().evalDomain({\n domain: ooui.domain,\n values: transformPlainMany2Ones({\n fields: formContext?.getFields(),\n values: formContext.getPlainValues(),\n }),\n fields: formContext?.getFields(),\n context: formContext.getContext(),\n });\n params = [...params, ...evaluatedDomain];\n }\n try {\n const optionsRead = await ConnectionProvider.getHandler().search({\n model: relation,\n params: params,\n fields: [field],\n context: { ...getContext?.(), ...context },\n });\n const options = optionsRead.map((item: any) => {\n const value = item[field];\n let formattedValue = value;\n if (Array.isArray(value)) {\n formattedValue = value[1];\n }\n return { label: formattedValue, value: item.id };\n });\n setOptions(options);\n } catch (err) {\n setError(err as any);\n } finally {\n setIsLoadingOptions(false);\n }\n if (error) {\n return <Alert className=\"mt-10\" message={error} type=\"error\" banner />;\n }\n }\n\n const checkAll = () => {\n onChangeSelected(options.map((option) => option.value));\n };\n\n const uncheckAll = () => {\n onChangeSelected([]);\n };\n\n const onChangeSelected = (ids: any[]) => {\n const newItems: One2manyItem[] = items.map((item) => {\n if (ids.includes(item.id as number)) {\n if (item.operation == \"pendingRemove\") {\n return {\n ...item,\n operation: \"original\",\n };\n } else {\n return item;\n }\n } else {\n return { id: item.id, operation: \"pendingRemove\" };\n }\n });\n const currentIds = newItems.map((item) => item.id);\n ids\n .filter((id) => !currentIds.includes(id))\n .map((id) => {\n newItems.push({ id, operation: \"pendingLink\" });\n });\n triggerChange(newItems);\n };\n\n if (isLoadingOptions && options.length === 0) {\n return <Spin />;\n }\n\n return (\n <>\n <div className=\"flex flex-row\">\n <Checkbox.Group\n value={options.length ? itemsToShow : []}\n disabled={readOnly}\n onChange={onChangeSelected}\n style={{ width: \"100%\" }}\n >\n <Row>\n {options.map((option) => (\n <Col span={Math.floor(24 / columns)}>\n <Checkbox value={option.value}>{option.label}</Checkbox>\n </Col>\n ))}\n </Row>\n </Checkbox.Group>\n {!readOnly && (\n <Space>\n <Button\n onClick={checkAll}\n disabled={itemsToShow.length == options.length}\n >\n Check all\n </Button>\n <Button onClick={uncheckAll} disabled={itemsToShow.length === 0}>\n Uncheck all\n </Button>\n </Space>\n )}\n </div>\n </>\n );\n};\n","import Field from \"@/common/Field\";\nimport ReactMarkdown from \"react-markdown\";\nimport React from \"react\";\nimport {WidgetProps} from \"@/types\";\n\nexport const Markdown = (props: WidgetProps) => {\n return (\n <Field {...props}>\n <MarkdownInput {...props} />\n </Field>\n );\n};\n\nexport const MarkdownInput = (props: any) => {\n const {value, ooui} = props;\n return (\n <div style={{height: ooui.height ? ooui.height + 'px' : '100%', overflow: 'auto'}}>\n <ReactMarkdown children={value} className=\"ant-typography\"/>\n </div>\n\n )\n}\n","import React from \"react\";\nimport { Radio as RadioAnt, Space } from \"antd\";\n\nimport Field from \"@/common/Field\";\nimport { Radio as RadioOoui } from \"@gisce/ooui\";\nimport { WidgetProps } from \"@/types\";\n\nexport const Radio = (props: WidgetProps) => {\n const { ooui } = props;\n const { required } = ooui;\n\n return (\n <Field required={required} type={\"any\"} {...props}>\n <SelectionInput {...props} />\n </Field>\n );\n};\n\ntype RadioInputProps = WidgetProps & {\n onChange?: (value: any) => void;\n value?: string;\n};\n\nexport const SelectionInput = (props: RadioInputProps) => {\n const { ooui, onChange, value } = props;\n const { selectionValues, readOnly, direction } = ooui as RadioOoui;\n\n const values = Array.from(selectionValues.entries());\n\n const options =\n values &&\n values.length &&\n values.map((entry: string[]) => {\n const [key, value] = entry;\n return (\n <RadioAnt key={key} value={key}>\n {value}\n </RadioAnt>\n );\n });\n\n return (\n <RadioAnt.Group disabled={readOnly} onChange={onChange} value={value}>\n <Space direction={direction}>\n {options}\n </Space>\n </RadioAnt.Group>\n );\n};","import React from \"react\";\nimport { Switch as AntdSwitch } from \"antd\";\n\nimport Field from \"@/common/Field\";\nimport { WidgetProps } from \"@/types\";\n\nexport const Switch = (props: WidgetProps) => {\n const { ooui } = props;\n const { id, readOnly, required } = ooui;\n\n return (\n <Field\n {...props}\n valuePropName=\"checked\"\n >\n <SwitchInput id={id} readOnly={readOnly} required={required} />\n </Field>\n );\n};\n\nconst SwitchInput = (props: any) => {\n const { required, readOnly, ...restProps } = props;\n\n\n return (\n <div className=\"flex flex-row\">\n <AntdSwitch disabled={readOnly} {...restProps} />\n </div>\n );\n};\n","import React, { useContext } from \"react\";\nimport { Steps as AntdSteps } from \"antd\";\nimport { FormContext, FormContextType } from \"@/context/FormContext\";\nimport Field from \"@/common/Field\";\nimport { Steps as StepsOoui } from \"@gisce/ooui\";\n\ntype StepsProps = {\n ooui: StepsOoui;\n value: any,\n}\n\ntype StatusType = 'wait' | 'process' | 'finish' | 'error';\n\n\nexport const Steps = (props: StepsProps) => {\n const { ooui } = props;\n const { required } = ooui;\n\n return (\n <Field required={required} type={\"any\"} {...props}>\n <StepsInput {...props} />\n </Field>\n );\n};\n\ntype StepsInputProps = StepsProps & {\n value?: any;\n};\n\nexport const StepsInput = (props: StepsInputProps) => {\n const { ooui, value } = props;\n const { selectionValues, errorField } = ooui as StepsOoui;\n const formContext = useContext(FormContext) as FormContextType;\n\n const values = Array.from(selectionValues.entries());\n const current = values.map(val => val[0]).indexOf(value);\n let status: StatusType = \"process\";\n let error = \"\";\n \n if (errorField) {\n error = formContext.getFieldValue(errorField);\n if (error) {\n status = \"error\";\n }\n }\n\n\n return (\n <AntdSteps current={current} status={status}>\n {values.map((val, idx) => (\n <AntdSteps.Step title={val[1]} description={idx === current && status === \"error\" ? error : null}/>\n ))}\n </AntdSteps>\n );\n};","import React, { useContext } from \"react\";\nimport Editor from \"@monaco-editor/react\";\nimport { FormContext, FormContextType } from \"@/context/FormContext\";\nimport { CodeEditor as CodeEditorOoui } from \"@gisce/ooui\";\n\nimport Field from \"@/common/Field\";\nimport { WidgetProps } from \"@/types\";\n\ntype CodeEditorProps = WidgetProps & {\n ooui: CodeEditorOoui;\n};\n\nexport const CodeEditor = (props: CodeEditorProps) => {\n const { ooui } = props;\n const { lang, height } = ooui;\n const formContext = useContext(FormContext) as FormContextType;\n const { elementHasLostFocus } = formContext || {};\n\n const onMount = (editor: any) => {\n editor.onDidBlurEditorWidget(elementHasLostFocus)\n }\n\n return (\n <Field {...props}>\n <Editor defaultLanguage={lang ? lang : ''} height={height ? height : 300} onMount={onMount}/>\n </Field>\n );\n};\n","import React, { useContext } from \"react\";\nimport { Layout, Typography } from \"antd\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\nconst { Content } = Layout;\nconst { Title } = Typography;\n\nfunction Welcome(): React.ReactElement {\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n return (\n <Content className=\"m-5 select-none\">\n <Title level={5}>{t(\"welcome\")}</Title>\n </Content>\n );\n}\n\nexport default Welcome;\n","import React, {\n useState,\n forwardRef,\n useImperativeHandle,\n useRef,\n} from \"react\";\nimport { ConnectionProvider, ContentRootProvider, FormView } from \"..\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport Welcome from \"./Welcome\";\nimport TabManagerProvider from \"@/context/TabManagerContext\";\nimport ActionView from \"./ActionView\";\nimport { parseContext } from \"@gisce/ooui\";\nimport LocaleContextProvider from \"@/context/LocaleContext\";\nimport { tForLang } from \"@/context/LocaleContext\";\nimport { ShortcutApi } from \"@/ui/FavouriteButton\";\nimport showErrorDialog from \"@/ui/ActionErrorDialog\";\nimport { InitialViewData, ViewType } from \"@/types\";\nimport { transformPlainMany2Ones } from \"@/helpers/formHelper\";\n\ntype RootViewProps = {\n children: React.ReactNode;\n globalValues?: any;\n rootContext?: any;\n lang: string;\n};\n\nexport type ActionInfo = {\n id: number;\n type: string;\n};\n\nfunction RootView(props: RootViewProps, ref: any) {\n const { children, globalValues = {}, rootContext = {}, lang } = props;\n const [activeKey, setActiveKey] = useState<string>(\"welcome\");\n\n const [tabs, setTabs] = useState<any>([\n {\n title: tForLang(\"welcome\", lang),\n key: \"welcome\",\n closable: true,\n content: <Welcome />,\n },\n ]);\n const tabViewsCloseFunctions = useRef(new Map<string, any>());\n const contentRootProvider = useRef();\n\n useImperativeHandle(ref, () => ({\n retrieveAndOpenAction,\n openShortcut,\n }));\n\n function remove(key: string) {\n if (key === activeKey) {\n const currentIndex = tabs.findIndex((tab: any) => tab.key === key);\n\n if (tabs[currentIndex - 1]) {\n setActiveKey(tabs[currentIndex - 1].key);\n }\n if (tabs[currentIndex + 1]) {\n setActiveKey(tabs[currentIndex + 1].key);\n }\n }\n\n setTabs(tabs.filter((tab: any) => tab.key !== key));\n tabViewsCloseFunctions.current.delete(key);\n }\n\n function registerViewCloseFn({\n tabKey,\n canWeClose,\n }: {\n tabKey: string;\n canWeClose: any;\n }) {\n tabViewsCloseFunctions.current.set(tabKey, canWeClose);\n }\n\n async function retrieveAndOpenAction({\n action,\n values,\n forced_values,\n initialViewType,\n res_id,\n domain = [],\n }: {\n action: string;\n values?: any;\n forced_values?: any;\n initialViewType?: ViewType;\n res_id?: number;\n domain?: any;\n }) {\n const dataForAction = await ConnectionProvider.getHandler().getActionData({\n action,\n context: rootContext,\n });\n\n if (dataForAction.type === \"ir.actions.wizard\") {\n showErrorDialog(\"Action type not supported\");\n return;\n }\n\n const [action_type, action_id_string] = action.split(\",\");\n const action_id = parseInt(action_id_string);\n\n const parsedContext = parseContext({\n context: dataForAction.context,\n values: globalValues,\n fields: {},\n });\n\n const parsedDomain = dataForAction.domain\n ? await ConnectionProvider.getHandler().evalDomain({\n domain: dataForAction.domain,\n values: globalValues,\n context: { ...rootContext, ...parsedContext },\n })\n : [];\n\n const {\n res_model: model,\n views,\n name: title,\n target,\n view_type,\n limit,\n } = dataForAction;\n\n const treeExpandable = view_type === \"tree\";\n\n const finalViews = [];\n\n for (const viewArray of views) {\n const [id, viewType] = viewArray;\n\n if (!id) {\n if (viewType === \"dashboard\") {\n finalViews.push([undefined, \"dashboard\"]);\n } else {\n const { view_id } = await ConnectionProvider.getHandler().getView({\n model,\n type: viewType,\n id,\n context: { ...rootContext, ...parsedContext },\n });\n finalViews.push([view_id, viewType]);\n }\n } else {\n finalViews.push(viewArray);\n }\n }\n\n let initialView;\n\n if (initialViewType) {\n const [id, type] = finalViews.find(\n ([_, type]) => type === initialViewType\n );\n initialView = { id, type };\n } else {\n const [id, type] = finalViews[0];\n initialView = { id, type };\n }\n\n openAction({\n domain: [...parsedDomain, ...domain],\n context: { ...rootContext, ...parsedContext },\n model,\n views: finalViews,\n title,\n target,\n initialView,\n action_type,\n action_id,\n values,\n forced_values,\n res_id,\n treeExpandable,\n limit,\n });\n }\n\n function addNewTab({\n title,\n content,\n key,\n action,\n }: {\n title: string;\n content: any;\n key: string;\n action?: ActionInfo;\n }) {\n let newTabs = [...tabs];\n\n if (tabs.length === 1 && tabs[0].key === \"welcome\") {\n newTabs = [...tabs.filter((tab: any) => tab.key !== \"welcome\")];\n }\n\n setTabs([\n ...newTabs,\n {\n title,\n key,\n closable: true,\n content,\n action,\n },\n ]);\n\n setActiveKey(key);\n }\n\n async function openRelate({\n relateData,\n fields,\n values,\n action_id,\n action_type,\n }: {\n relateData: any;\n fields: any;\n values: any;\n action_id: number;\n action_type: string;\n }) {\n const {\n res_model: model,\n context,\n domain,\n views,\n target,\n string: title,\n limit,\n } = relateData;\n\n const [id, type] = views[0];\n const initialView = { id, type };\n\n const parsedContext = parseContext({\n context,\n values: { ...values, ...globalValues },\n fields,\n });\n\n const parsedDomain = domain\n ? await ConnectionProvider.getHandler().evalDomain({\n domain: domain,\n values: transformPlainMany2Ones({\n fields,\n values: { ...values, ...globalValues },\n }),\n fields,\n context: { ...rootContext, ...parsedContext },\n })\n : [];\n\n openAction({\n model,\n target,\n views,\n context: { ...rootContext, ...parsedContext },\n domain: parsedDomain,\n title,\n initialView,\n action_id,\n action_type,\n limit,\n });\n }\n\n async function openShortcut(shortcut: ShortcutApi) {\n const { action_id, action_type, res_id, view_id } = shortcut;\n const action = `${action_type},${action_id}`;\n\n const dataForAction = await ConnectionProvider.getHandler().getActionData({\n action,\n context: rootContext,\n });\n const parsedContext = parseContext({\n context: dataForAction.context,\n values: globalValues,\n fields: {},\n });\n\n const parsedDomain = dataForAction.domain\n ? await ConnectionProvider.getHandler().evalDomain({\n domain: dataForAction.domain,\n values: globalValues,\n context: { ...rootContext, ...parsedContext },\n })\n : [];\n\n const {\n res_model: model,\n views,\n name: title,\n target,\n view_type,\n limit,\n } = dataForAction;\n const treeExpandable = view_type === \"tree\";\n\n const finalViews = [];\n\n for (const viewArray of views) {\n const [id, viewType] = viewArray;\n\n if (!id) {\n if (viewType === \"dashboard\") {\n finalViews.push([undefined, \"dashboard\"]);\n } else {\n const { view_id } = await ConnectionProvider.getHandler().getView({\n model,\n type: viewType,\n id,\n context: { ...rootContext, ...parsedContext },\n });\n finalViews.push([view_id, viewType]);\n }\n } else {\n finalViews.push(viewArray);\n }\n }\n\n let id, type;\n if (view_id === undefined || view_id === null) {\n const view = finalViews.find((view: any[]) => {\n return view[0] === undefined;\n });\n id = undefined;\n type = view[1];\n } else {\n [id, type] = finalViews.find((view: any[]) => {\n if (view[0] === undefined) {\n return false;\n }\n return view[0] === view_id;\n });\n }\n\n const initialView = { id, type };\n\n openAction({\n domain: parsedDomain,\n context: { ...rootContext, ...parsedContext },\n model,\n views: finalViews,\n title,\n target,\n initialView,\n action_id,\n action_type,\n res_id,\n treeExpandable,\n limit,\n });\n }\n\n async function openDefaultActionForModel({\n model,\n values,\n forced_values,\n initialViewType,\n res_id,\n domain,\n }: {\n model: string;\n values?: any;\n forced_values?: any;\n initialViewType?: ViewType;\n res_id?: number;\n domain?: any;\n }) {\n const actionString =\n await ConnectionProvider.getHandler().getActionStringForModel(model);\n await retrieveAndOpenAction({\n action: actionString,\n values,\n forced_values,\n initialViewType,\n res_id,\n domain,\n });\n }\n\n async function openAction({\n domain,\n context,\n model,\n views,\n title,\n target,\n initialView,\n action_id,\n action_type,\n res_id,\n values,\n forced_values,\n treeExpandable = false,\n limit,\n }: {\n domain: any;\n context: any;\n model: string;\n views: Array<any>;\n title: string;\n target: string;\n initialView: InitialViewData;\n action_id: number;\n action_type: string;\n res_id?: number | boolean;\n values?: any;\n forced_values?: any;\n treeExpandable?: boolean;\n limit?: number;\n }) {\n const key = uuidv4();\n\n if (target !== \"current\") {\n const formView = (await ConnectionProvider.getHandler().getView({\n model,\n type: \"form\",\n id: initialView.type === \"form\" ? initialView.id : undefined,\n context: { ...rootContext, ...context },\n })) as FormView;\n\n (contentRootProvider.current as any).openActionModal({\n domain,\n model,\n formView,\n context: { ...rootContext, ...context },\n actionData: {\n action_id,\n action_type,\n res_id,\n view_id: formView.view_id,\n },\n });\n } else {\n const formattedInitialView =\n initialView && Array.isArray(initialView.id)\n ? { ...initialView, id: initialView.id[0] }\n : initialView;\n\n addNewTab({\n title,\n action: {\n id: action_id,\n type: action_type,\n },\n content: (\n <ActionView\n action_id={action_id}\n action_type={action_type}\n tabKey={key}\n title={title}\n views={views}\n model={model}\n context={{ ...rootContext, ...context }}\n domain={domain}\n setCanWeClose={registerViewCloseFn}\n initialView={formattedInitialView}\n res_id={res_id}\n formDefaultValues={values}\n formForcedValues={forced_values}\n treeExpandable={treeExpandable}\n limit={limit}\n />\n ),\n key,\n });\n }\n }\n\n return (\n <LocaleContextProvider lang={lang}>\n <TabManagerProvider\n openShortcut={openShortcut}\n openAction={openAction}\n openRelate={openRelate}\n openDefaultActionForModel={openDefaultActionForModel}\n tabs={tabs}\n activeKey={activeKey}\n onRemoveTab={async (key: string) => {\n const canWeCloseFn = tabViewsCloseFunctions.current.get(\n key as string\n );\n const canWeClose = await canWeCloseFn?.();\n\n if (canWeClose || activeKey === \"welcome\") {\n remove(key as string);\n }\n }}\n onChangeTab={(key: string) => {\n setActiveKey(key);\n }}\n >\n <ContentRootProvider\n ref={contentRootProvider}\n globalValues={globalValues}\n >\n {children}\n </ContentRootProvider>\n </TabManagerProvider>\n </LocaleContextProvider>\n );\n}\n\nexport default forwardRef(RootView);\n","import React from \"react\";\nimport { CloseOutlined } from \"@ant-design/icons\";\nimport { theme } from \"antd\";\nconst { useToken } = theme;\n\ntype TabProps = {\n tabKey: string;\n label: string;\n onClose: (key: string) => void;\n isActive: boolean;\n onSelected: (key: string) => void;\n};\n\nfunction Tab(props: TabProps) {\n const { label, onClose, tabKey, isActive, onSelected } = props;\n const { token } = useToken();\n const bgColor = isActive ? token.colorBgContainer : token.colorPrimaryBg;\n\n return (\n <div\n onClick={() => {\n !isActive && onSelected(tabKey);\n }}\n style={{\n cursor: \"pointer\",\n height: 40,\n paddingTop: 7,\n paddingBottom: 5,\n paddingLeft: 10,\n paddingRight: 10,\n backgroundColor: bgColor,\n display: \"inline-flex\",\n flex: 1,\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"center\",\n borderTopLeftRadius: token.borderRadius,\n borderTopRightRadius: token.borderRadius,\n marginLeft: 2,\n }}\n >\n <div\n style={{\n color: token.colorPrimaryActive,\n userSelect: \"none\",\n height: 40,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n paddingLeft: 5,\n paddingRight: 5,\n marginBottom: 2,\n fontWeight: isActive ? 500 : \"normal\",\n }}\n >\n {label}\n </div>\n <div\n style={{\n paddingLeft: 5,\n height: 40,\n\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n }}\n >\n <CloseOutlined\n style={{\n color: token.colorPrimaryActive,\n }}\n onClick={(e) => {\n e.stopPropagation();\n onClose(tabKey);\n }}\n />\n </div>\n </div>\n );\n}\n\nexport default Tab;\n","import React, { useContext, useState } from \"react\";\n\nimport {\n TabManagerContext,\n TabManagerContextType,\n} from \"@/context/TabManagerContext\";\nimport Tab from \"./tabs/Tab\";\n\nfunction TabSelector() {\n const tabManagerContext = useContext(\n TabManagerContext\n ) as TabManagerContextType;\n const { activeKey, tabs, onRemoveTab, onChangeTab } = tabManagerContext || {};\n\n return (\n <>\n {tabs.map((tab: any) => (\n <Tab\n key={tab.key}\n tabKey={tab.key}\n label={tab.title}\n onClose={onRemoveTab}\n isActive={activeKey === tab.key}\n onSelected={onChangeTab}\n />\n ))}\n </>\n );\n}\n\nexport default TabSelector;\n","import React, { useContext } from \"react\";\n\nimport {\n TabManagerContext,\n TabManagerContextType,\n} from \"@/context/TabManagerContext\";\n\ntype Props = {\n tab: any;\n};\n\nfunction TabContent(props: Props) {\n const { tab } = props;\n\n const tabManagerContext = useContext(\n TabManagerContext\n ) as TabManagerContextType;\n const { activeKey } = tabManagerContext || {};\n\n const hiddenStyle: any = {\n display: \"none\",\n };\n\n return (\n <div style={tab.key !== activeKey ? hiddenStyle : undefined}>\n {tab.content}\n </div>\n );\n}\n\nexport default React.memo(TabContent, () => true);\n","import React, { useContext } from \"react\";\n\nimport {\n TabManagerContext,\n TabManagerContextType,\n} from \"@/context/TabManagerContext\";\nimport TabContent from \"./TabContent\";\n\nfunction CurrentTabContent() {\n const tabManagerContext = useContext(\n TabManagerContext\n ) as TabManagerContextType;\n const { tabs } = tabManagerContext || {};\n\n const tabsToRender =\n tabs?.map((tab) => <TabContent key={tab.key} tab={tab} />) || null;\n\n return <>{tabsToRender}</>;\n}\n\nexport default CurrentTabContent;\n","import React, { useContext, useEffect, useState } from \"react\";\nimport {\n StarOutlined,\n StarFilled,\n DownOutlined,\n TableOutlined,\n FormOutlined,\n EditOutlined,\n} from \"@ant-design/icons\";\nimport { Button, Col, Row, Spin, Tooltip, theme } from \"antd\";\nimport { Menu, Dropdown } from \"antd\";\nimport showErrorDialog from \"@/ui/ActionErrorDialog\";\nimport {\n TabManagerContext,\n TabManagerContextType,\n} from \"@/context/TabManagerContext\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport { ViewType } from \"@/types\";\nconst { useToken } = theme;\n\nexport type ShortcutApi = {\n action_id: number;\n action_type: string;\n id?: number;\n name: string;\n res_id: number | boolean;\n res_model: string;\n view_id: number;\n view_type: string;\n};\n\nexport type FavouriteOptions = {\n action_id: number;\n action_type: string;\n res_id: number | boolean;\n view_id: number;\n};\n\ntype Props = {\n onRetrieveShortcuts: () => Promise<ShortcutApi[]>;\n onCheckIsFavourite: (options: FavouriteOptions) => Promise<number | boolean>;\n onAddFavourite: (options: FavouriteOptions) => Promise<number>;\n onRemoveFavourite: (shortcut_id: number) => Promise<void>;\n};\n\nconst FavouriteButton = (props: Props) => {\n const {\n onRetrieveShortcuts,\n onCheckIsFavourite,\n onAddFavourite,\n onRemoveFavourite,\n } = props;\n\n const [isFavourite, setIsFavourite] = useState(false);\n const [dropdownVisible, setDropdownVisible] = useState(false);\n const [shortcuts, setShortcuts] = useState<ShortcutApi[]>([]);\n const [loading, setLoading] = useState(true);\n const [currentShortcutId, setCurrentShortcutId] = useState<number>();\n const { t } = (useContext(LocaleContext) as LocaleContextType) || {};\n\n const { token } = useToken();\n\n const tabManagerContext = useContext(\n TabManagerContext\n ) as TabManagerContextType;\n const {\n openShortcut,\n tabs,\n activeKey,\n currentView,\n currentId,\n openDefaultActionForModel,\n } = tabManagerContext || {};\n\n useEffect(() => {\n getShortcuts();\n }, []);\n\n useEffect(() => {\n checkFavourite();\n }, [tabs, activeKey, currentView, currentId]);\n\n async function getShortcuts() {\n try {\n setLoading(true);\n const shortcuts = await onRetrieveShortcuts();\n setShortcuts(shortcuts);\n } catch (e) {\n showErrorDialog(e);\n } finally {\n setLoading(false);\n }\n }\n\n function handleMenuClick(event: any) {\n const { key } = event;\n const shortcut = shortcuts.find((s) => s.id === Number(key));\n if (shortcut?.action_type === \"ir.actions.wizard\") {\n return;\n }\n if (shortcut) {\n openShortcut(shortcut);\n }\n setDropdownVisible(false);\n }\n\n function handleVisibleChange(flag: boolean) {\n if (flag) {\n getShortcuts();\n }\n setDropdownVisible(flag);\n }\n\n async function checkFavourite() {\n if (!currentView) {\n return;\n }\n\n const currentTab = tabs.find((t) => t.key === activeKey);\n const { id: action_id, type: action_type } = currentTab?.action || {};\n\n if (!action_id || !action_type) {\n setIsFavourite(false);\n return;\n }\n\n const view_id = currentView.view_id!;\n let res_id: boolean | number = false;\n\n if (currentView.type === \"form\") {\n res_id = currentId ? (currentId as number) : false;\n }\n const result = await onCheckIsFavourite({\n action_id,\n action_type,\n view_id,\n res_id,\n });\n\n if (result !== false) {\n setCurrentShortcutId(result as number);\n }\n\n setIsFavourite(result !== false);\n }\n\n async function editFavourites() {\n setDropdownVisible(false);\n openDefaultActionForModel?.({ model: \"ir.ui.view_sc\" });\n }\n\n const menu = (\n <Menu onClick={handleMenuClick}>\n <div style={{ width: 300, padding: 5, display: \"flex\" }}>\n <div style={{ paddingLeft: 15, color: \"#ccc\" }}>\n {t?.(\"favorites\").toUpperCase()}\n </div>\n <div style={{ flexGrow: 1, paddingLeft: 10 }}>\n <Tooltip title={t?.(\"edit_favorites\")}>\n <EditOutlined\n style={{ color: token.colorPrimary, cursor: \"pointer\" }}\n onClick={editFavourites}\n />\n </Tooltip>\n </div>\n </div>\n <Menu.Divider />\n {loading ? (\n <Spin style={{ padding: \"1rem\" }} />\n ) : shortcuts.length > 0 ? (\n <>\n {shortcuts.map((shortcut) => (\n <Menu.Item key={shortcut.id}>\n <FavouriteItem\n title={shortcut.name}\n type={shortcut.view_type as ViewType}\n />\n </Menu.Item>\n ))}\n </>\n ) : (\n <div style={{ width: 300, padding: 5, paddingLeft: 15 }}>\n {t?.(\"no_favorites\")}\n </div>\n )}\n </Menu>\n );\n\n function FavouriteItem({ title, type }: { title: string; type: ViewType }) {\n const icon = type === \"tree\" ? <TableOutlined /> : <FormOutlined />;\n return (\n <Row wrap={false}>\n <Col flex=\"none\" style={{ paddingRight: 20 }}>\n {icon}\n </Col>\n <Col flex=\"auto\">{title}</Col>\n </Row>\n );\n }\n\n async function toggleFavourite() {\n if (isFavourite && currentShortcutId) {\n await onRemoveFavourite(currentShortcutId);\n } else {\n if (!currentView) {\n return;\n }\n\n const currentTab = tabs.find((t) => t.key === activeKey);\n const { id: action_id, type: action_type } = currentTab?.action || {};\n const view_id = currentView.view_id!;\n let res_id: boolean | number = false;\n\n if (!action_id || !action_type) {\n setIsFavourite(false);\n return;\n }\n\n if (currentView.type === \"form\") {\n res_id = currentId ? (currentId as number) : false;\n }\n\n await onAddFavourite({\n action_id,\n action_type,\n view_id,\n res_id,\n });\n }\n\n await getShortcuts();\n setIsFavourite(!isFavourite);\n }\n\n return (\n <>\n <Button\n type={isFavourite ? \"primary\" : \"default\"}\n icon={\n isFavourite ? (\n <StarFilled style={{ color: \"white\" }} />\n ) : (\n <StarOutlined />\n )\n }\n style={{\n width: 50,\n borderTopRightRadius: 0,\n borderBottomRightRadius: 0,\n }}\n onClick={toggleFavourite}\n ></Button>\n <Dropdown\n overlay={menu}\n onVisibleChange={handleVisibleChange}\n open={dropdownVisible}\n >\n <Button\n style={{\n width: 25,\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0,\n }}\n icon={<DownOutlined style={{ fontSize: \"0.5em\" }} />}\n onClick={(e) => e.preventDefault()}\n ></Button>\n </Dropdown>\n </>\n );\n};\n\nexport default FavouriteButton;\n"],"names":["Text","Title","Typography","useToken","theme","alignClass","left","center","right","Label","props","ooui","align","responsiveBehaviour","label","tooltip","fieldForLabel","labelSize","labelType","labelText","length","labelAlgin","token","TextType","undefined","_jsx","Tooltip","QuestionCircleOutlined","color","colorPrimary","Interweave","ca_ES","true","false","simple_search","advanced_search","search","parameters","limit","first","no_results","summary","welcome","attachments","addNewAttachment","listAllAttachments","viewAs","confirmRemoveItem","save","delete","refresh","previous","next","actions","reports","related","new","fillRequiredField","fillRequiredFields","generatingReport","confirmation","ok","cancel","formHasErrors","unsavedChanges","confirmRefreshWithoutSave","discardAndRefresh","removeItems","confirmRemove","yesConfirmRemove","unlinkItems","confirmUnlink","yesConfirmUnlink","confirmCloseWithoutSave","closeWithoutSaving","action","report","selectAction","download","clear","open","uploadNewImage","noCurrentEntries","duplicate","downloadingAttachment","tree","form","favorites","edit_favorites","no_favorites","register","of","editingDocument","showLogs","createdBy","creationDate","lastUpdatedBy","lastUpdatedDate","goToResourceId","searchId","idNotFound","selectedRegisters","translate","enterTextBeforeTranslate","saveBeforeTranslate","configDashboard","moveDashboard","openAttachment","openAttachmentLink","uninformed","totalRegisters","export","selectAtLeastOneField","printScreen","advancedExport","savedRegisters","errorWhileSavingForm","en_US","es_ES","localeStrings","LocaleContext","React","createContext","LocaleContextProvider","children","lang","t","key","tForLang","Field","layout","valuePropName","showLabel","alignLabel","required","type","validator","id","useContext","rules","message","formItem","Form","labelWidget","LabelOoui","name","string","help","Row","Col","_Fragment","confirm","Modal","showDialog","onOk","confirmMessage","title","icon","ExclamationCircleOutlined","centered","content","okText","cancelText","FormContext","FormProvider","activeId","activeModel","setFieldValue","getFieldValue","executeButtonAction","getContext","getValues","getPlainValues","domain","submitForm","fetchValues","formHasChanges","elementHasLostFocus","getFields","iconMapping","iconMapper","getIconForKey","toCamelCase","word","w","IconCamelCase","antKey","AntIcons","tablerKey","TablerIcons","TablerIcon","Icon","Button","activated","buttonType","context","readOnly","formContext","isRunning","setIsRunning","useState","onClick_confirm","onClick","showConfirmDialog","getButtonIcon","LoadingOutlined","AntButton","primary","danger","whiteSpace","height","ButtonGroup","defaultButton","secondaryButtons","caption","buttons","FieldOoui","_jsxs","Dropdown","DownOutlined","Items","items","map","button","Menu","MODAL_WIDTH_CONSTANT","getWindowDimensions","width","useWindowDimensions","windowDimensions","setWindowDimensions","useEffect","handleResize","ConnectionProvider","handler","parseError","errorResponse","splitted","args","error","warning","err","WarningOutlined","TranslationModal","visible","onCloseModal","model","field","onSubmitSucceed","modalWidth","langs","setLangs","isLoading","setIsLoading","submitLoading","setSubmitLoading","valuesForLangs","setValuesForLangs","originalValuesForLangs","useRef","fetchData","getLangs","getValuesForLangs","showErrorDialog","getHandler","params","fields","item","code","retrievedValuesForLang","retrievedValue","readObjects","ids","fieldsToRetrieve","current","getInputsForLangs","i","paddingBottom","paddingRight","TextArea","event","target","value","onSubmit","langCode","Object","keys","update","values","Spin","Divider","Space","CloseOutlined","CheckOutlined","marginLeft","ButtonWithTooltip","restProps","info","Char","isSearchField","isPassword","translatable","requiredStyle","backgroundColor","colorPrimaryBg","input","Input","size","TranslatableChar","onChange","translationModalVisible","setTranslationModalVisible","cursor","pointerEvents","TranslationOutlined","defaultAlgorithm","defaultSeed","mapToken","Option","Select","Selection","SelectionInput","selectionValues","Array","from","entries","options","entry","RequiredSelect","option","toLowerCase","indexOf","styled","Boolean","BooleanInput","RequiredCheckbox","AntCheckbox","isObject","isObject_1","freeGlobal","global","_freeGlobal","require$$0","freeSelf","root","_root","now","now_1","reWhitespace","trimmedEndIndex","index","_trimmedEndIndex","reTrimStart","baseTrim","_baseTrim","Symbol","_Symbol","objectProto","hasOwnProperty","nativeObjectToString","symToStringTag","getRawTag","isOwn","tag","unmasked","result","_getRawTag","objectToString","_objectToString","require$$1","require$$2","nullTag","undefinedTag","baseGetTag","_baseGetTag","isObjectLike","isObjectLike_1","symbolTag","isSymbol","isSymbol_1","NAN","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","toNumber","other","isBinary","toNumber_1","FUNC_ERROR_TEXT","nativeMax","nativeMin","debounce","func","wait","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","invokeFunc","time","thisArg","leadingEdge","timerExpired","remainingWait","timeSinceLastCall","timeSinceLastInvoke","timeWaiting","shouldInvoke","trailingEdge","flush","debounced","isInvoking","debounce_1","getFilesize","base64string","inKbs","getMimeType","mimeInfo","fileTypeFromBuffer","toBase64","file","resolve","reject","reader","e","openBase64InNewTab","data","mimeType","byteCharacters","byteNumbers","byteArray","fileURL","Image","ImageInput","inputFile","triggerChange","changedValue","downloadFile","fileType","linkSource","mime","downloadLink","document","createElement","href","ext","click","onChangeFile","stopPropagation","preventDefault","files","b64","clearFile","maxWidth","display","FolderOpenOutlined","fileUploadField","DownloadOutlined","ClearOutlined","FiberGrid","FiberGridInput","JSON","parse","console","log","GridUi","newValue","getTree","treeView","xml","TreeOoui","getTableColumns","components","column","component","render","a","b","aItem","bItem","_a","_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","createReactWidget","widgetClass","getSpanStyleForItem","fillRowWithEmptiesToFit","row","mustFillWithEmpties","numberOfColumns","rowWithEmptiesToFit","totalColSpan","isLastItemAndMustFit","columnIndex","gapsToAdjust","gapsToFill","expandWidgetsIfNeeded","getSingleRowTemplateColumns","gridOptions","Container","columnsToAdd","getTemplateColumns","columns","fieldInRows","odd","even","templateColumns","getMaxColspanForRows","rows","prev","container","maxColspanForRows","firstRow","rowWithoutInvisibleFields","invisible","rowWithExpandedItems","some","concat","minWidth","gridTemplateColumns","gap","minHeight","onCancel","FormModalContext","FormModalProvider","setTitle","convertBooleanParamIfNeeded","getParamsForFields","widgetContainer","removeUndefinedFields","groupedDateTime","groupDateTimeValuesIfNeeded","groupedValues","ungroupDateValuesIfNeeded","getParamForField","acc","curVal","filteredKey","operator","valueEntry","getDatetimeDateFields","removeDateTimeSingleFields","newValues","datePair","baseKey","timeKey","timePair","to","timeValueFrom","timeValueTo","dateFields","getUniqueFieldsForParams","uniqueFields","param","mergeParams","searchParams","domainParams","finalParams","uniqueParams","element","DEFAULT_SEARCH_LIMIT","useSearch","opts","setSearchTreeNameSearch","setSelectedRowItems","setSearchParams","setSearchVisible","setTreeIsLoading","nameSearch","searchNameGetDoneRef","setActionViewTotalItems","setSorter","setCurrentItemIndex","setResultsActionView","resultsActionView","currentId","setLimit","setSearchValues","tableRefreshing","setTableRefreshing","searchFilterLoading","setSearchFilterLoading","searchError","setSearchError","page","setPage","offset","setOffset","totalItems","setTotalItems","resultsInternal","setResultsInternal","colorsForResults","setColorsForResults","statusForResults","setStatusForResults","internalLimit","originalResults","setResults","useCallback","getResults","searchByNameSearch","searchResults","resultsIds","status","attrs","resultsWithData","resultsData","newResultIds","resultsSorted","newOffset","mergedParams","attrsEvaluated","newCurrentItemIndex","totalItemsValue","fetchResults","changeSort","newSorter","sortedResults","submit","searchValues","newLimit","requestPageChange","fetchChildrenForRecord","record","child_id","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","additionalContext","updatedContext","footer","Measure","contentRect","bounds","measureRef","buttonModal","isMenuAction","rest","formTitle","setFormTitle","isFavourite","setIsFavourite","currentShortcutId","setCurrentShortcutId","checkFavourite","res_id","isShortcutFavorite","toggleFavourite","removeFavourite","shortcut_id","addFavourite","header","StarFilled","StarOutlined","paddingLeft","contentWidth","DateRangePicker","DatePicker","DateTimeRangePicker","TimePicker","decimalDigits","InputNumber","replace","isNaN","parseFloat","Math","trunc","newNumber","PairFields","Widget","IntegerOoui","getWidget","MultiSelection","MultiSelectionInput","optionValueKeyPair","optionKey","CustomSelect","handleChange","changedValues","keysForChangedValues","SearchField","widgetType","SearchFieldTypes","boolean","SelectionOoui","_id","selection","float","progressbar","float_time","integer","date","datetime","SearchBottomBar","onAdvancedFilterToggle","advancedFilter","onClear","isSearching","UpOutlined","SearchOutlined","SearchParams","onLimitChange","limitOoui","offsetOoui","SearchFilter","secondary","setSearchFilterHeight","showLimitOptions","simpleSearchFields","setSimpleSearchFields","advancedSearchFields","setAdvancedSearchFields","setAdvancedFilter","sfo","setFieldsValue","getRowsAndCols","j","SearchFilterOoui","_simpleSearchContainer","_advancedSearchContainer","onFinish","newParams","borderRadius","resetFields","getTextWidth","font","metrics","calculateColumnsWidth","maxWidthPerCell","columnsWithWidth","indexColumn","columnWidth","cellValue","cellWidth","tableWidth","parseStringToFloat","parseFloatToString","num","finalString","hours","mins","hoursString","minsStrings","ProgressBarInput","textValue","toLocaleString","minimumIntegerDigits","maximumFractionDigits","useGrouping","flex","alignItems","StyledProgress","flexGrow","Progress","Many2oneSuffixModal","onItemClicked","Many2oneSuffix","printModalVisible","setPrintModalVisible","setFormView","targetValues","setTargetValues","toolbar","parseContextFields","parseDomainFields","relate","print","menu","relateItems","handleMenuClick","ThunderboltOutlined","PrinterOutlined","EnterOutlined","relateItemClicked","relateData","onActionItemClicked","onPrintItemClicked","RightCircleOutlined","Many2oneTree","m2oField","ReferenceTree","setName","loading","setLoading","intId","fetchName","nameResponse","selectionDescription","module","this","n","r","s","o","f","h","c","d","l","$","y","M","m","v","u","g","p","S","O","D","T","Avatar","toString","slice","toUpperCase","join","AntdAvatar","dayjs","extend","weekday","localeData","DatePickerConfig","placeholder","dateDisplayFormat","dateInternalFormat","showTime","DatePickerInput","mode","onValueStringChange","momentDate","format","dateValue","AntDatePicker","booleanComponentFn","justifyContent","alignContent","Checkbox","many2OneComponentFn","textComponentFn","dateComponentFn","dateTimeComponentFn","one2ManyComponentFn","progressBarComponentFn","floatTimeComponent","numberComponent","textAlign","imageComponent","TagComponent","SelectionComponent","referenceComponent","AvatarFn","total","onRequestPageChange","onRowClicked","showPagination","rowSelection","scrollY","onChangeSort","onFetchChildrenForRecord","childField","rootTree","readonly","setItems","setColumns","errorInParseColors","many2one","one2many","many2many","image","reference","avatar","pagination","isExpandable","Pagination","getSums","sumFields","it","sum","sumItems","selectedRowKeys","sumField","reduce","round","dataTable","adjustedHeight","GisceTable","Badge","expandIcon","PlusSquareOutlined","collapseIcon","MinusSquareOutlined","loadingIcon","SearchTree","treeViewProps","treeScrollY","onChangeSelectedRowKeys","initialFetchDone","setInitialFetchDone","setCurrentModel","setTreeView","initialError","setInitialError","searchFilterHeight","expandableClickActionData","changeSelectedRowKeys","refreshResults","getDomain","fetchModelData","_formView","_treeView","onSearchTreeLimitChange","treeButOpen","onRowClickedHandler","calculateTableHeight","search_fields","field_parent","SearchModal","onCloseModalProps","onSelectValues","showCreateModal","setShowCreateModal","modalHeight","setSelectedRowKeys","FileAddOutlined","Error","Many2oneInput","widgetDomain","showSearchModal","setShowSearchModal","searching","setSearching","searchText","setSearchText","searchButtonTappedRef","inputText","setInputText","inputTextRef","transformedDomain","searchDomain","setSearchDomain","fetchNameAndUpdate","onElementLostFocus","tryFetchFirstResultOrShowSearch","parseDomain","resultIds","searchAllIds","transformDomainForChildWidget","widgetFieldName","onKeyDown","keyCode","RequiredInput","borderTopRightRadius","borderBottomRightRadius","borderTopLeftRadius","borderBottomLeftRadius","One2manyContext","One2manyProvider","itemIndex","setItemIndex","manualTriggerChange","setManualTriggerChange","getValueForOperator","graphProcessor","fontGrowFactor","minFontSize","GraphIndicator","colorCondition","totalDomain","showPercent","iconProps","manualIds","setValue","percent","setPercent","totalValue","setTotalValue","setHeight","setWidth","setColor","setIcon","fetchValue","isTotal","fetchTotalValue","searchCount","totalRetrievedValue","conditionEval","parseCondition","condition","iconEval","PercentageIndicator","CommonIndicator","getComputedStyle","body","measureText","fontSize","localeValue","finalValue","tw","floor","maxFontSize","IconElement","overflow","margin","twoLinesHeight","percentValue","flexDirection","formatter","graphType","object","axisFormatter","stringIsValidNumeric","isNumber","isValidDateString","dateType","getDateType","dateFormats","DefaultGraphOptions","variable","dateString","processGraphData","getFieldsToRetrieve","graphFieldUtils","useGraphData","uninformedString","setProcessedValues","evaluatedEntries","setEvaluatedEntries","setType","parseGraph","retrieveData","timerange","x","_processedValues","getFieldsForModel","fieldsDefinition","sort","line","Line","bar","Column","pie","Pie","GraphChart","isGroup","isStack","Chart","getGraphProps","graphProps","GraphDefaults","colorField","angleField","xField","yField","seriesField","groupField","GraphComp","graphOoui","setGraphOoui","graphXml","setGraphXml","graph","indicator","indicatorFieldopts","Graph","One2manyTopBar","titleString","onCreateItem","onToggleViewMode","onDelete","onPreviousItem","onNextItem","isMany2Many","onSearchItem","showCreateButton","showToggleButton","separator","colorPrimaryActive","deleteButton","ApiOutlined","DeleteOutlined","itemToShow","itemBrowser","LeftOutlined","RightOutlined","AlignLeftOutlined","ViewObjects","filterDuplicateItems","filtered","One2manyInput","continuousEntryMode","setContinuousEntryMode","originalSortItemIds","isMany2many","treeValues","previousCurrentView","fetchDataIfNeeded","fetchOriginalItemsFromApi","toggleViewMode","nextView","showFormChangesDialogIfNeeded","previousItem","nextItem","reloadOriginalValuesForFormItem","updatedFormObject","updatedTreeObject","updatedItems","callback","showRemoveConfirm","showUnlinkItemDialog","removeCurrentItem","removeSelectedItems","showRemoveItemDialog","createItem","inv_field","itemsToRemove","idsToRemove","onFormModalSubmitSucceed","nextId","onTreeRowClicked","itemId","itemsToLoadFrom","onSearchModalSelectValue","filteredIds","getTitle","ViewType","currentItemId","resultsToShow","FloatTimeInput","FieldSet","TabPane","Tabs","pages","getPageIcon","tabPosition","TranslatableText","paddingTop","useExport","locale","selectedRegistersToExport","exportModelFields","onExport","showInfo","exportDomain","addIdToRelationFields","onGetFields","convertToExportFields","onGetFieldChilds","optsForField","getFieldDefinition","getChildKey","onGetPredefinedExports","predefinedExports","listPredefinedExports","keysWithChilds","retrieveKeyFieldsForPredefinedExports","pExport","childKey","onSavePredefinedExport","fieldsForExport","getModelFields","fieldsForExportLine","exportId","onRemovePredefinedExport","fieldsForModel","exportFields","valuesForField","relationField","isRelationField","compoundId","fieldDefinition","getParentKey","parentTitle","pExports","exportLinesIds","exp","exportLinesObjects","getKeysWithoutChildsInFields","splitAndSortKeys","exists","_c","allPredefinedExportKeys","keysWithoutChildsInFields","keysMap","subKeys","subKey","currentKey","aLevels","bLevels","ExportModal","visibleRegisters","ExportModalFmg","Y","customParseFormat","TimeInput","timestring","ReferenceInput","splittedValue","many2oneValue","setMany2oneValue","selectionValue","setSelectionValue","m2oValue","referenceValue","Many2oneOoui","BinaryInput","filenameField","filesize","fileName","openFile","EyeOutlined","iconsForViewTypes","TableOutlined","FormOutlined","AreaChartOutlined","calendar","CalendarOutlined","getIconForView","ChangeViewButton","onChangeView","disabled","getMenu","menuItems","idx","charAt","opacity","tryNavigate","selectedView","DropdownButton","onItemClick","itemClicked","ActionButton","finalIcon","NewButton","onNewClickedProps","showLogInfo","translateFn","logInfo","getLogInfo","create_date","create_uid","write_date","write_uid","AttachmentsButtonWrapper","numberOfAttachments","popoverVisible","setPopoverVisible","LinkOutlined","Popover","Content","onAddNewAttachment","onopenAttachmentLink","onOpenAttachmentDetail","onListAllAttachments","attachment","link","datas_fname","AttachmentsButton","onViewAttachmentDetails","preloading","setPreloading","preloadedAttachments","setPreloadedAttachments","downloading","setDownloading","preloadAttachments","retrievedAttachment","openAttachmentDetail","FormActionBar","tryRefresh","refreshChangesDialog","onNextClick","onPreviousClick","tryDelete","remove","filteredResults","newIndex","mustDisableButtons","SaveOutlined","CopyOutlined","InfoCircleOutlined","ReloadOutlined","saveDocument","selection_associated_object","forced_values","initialViewType","LinkInput","valueValidator","linkPrefix","editMode","setEditMode","showInput","setShowInput","EditOutlined","isURL","isEmail","GoToResourceModal","onIdSubmitted","inputRef","handleSubmit","focus","ButtonWithBadge","badgeNumber","position","top","zIndex","background","colorPrimaryHover","GraphActionBar","refreshGraph","FilterOutlined","newView","TitleHeader","getSummary","reg","marginBottom","GraphActionView","graphRef","applyLimit","setApplyLimit","FormActionView","findIndex","SearchBar","onSearch","mustShowClearSuffix","setMustShowClearSuffix","CloseCircleFilled","ConfigContext","previewFeatures","TreeActionBar","treeExpandable","exportModalVisible","setExportModalVisible","hasNameSearch","trim","searchString","idsToExport","TreeActionView","DashboardActionContext","DashboardActionProvider","moveItemsEnabled","setMoveItemsEnabled","dashboardRef","DashboardActionBar","BorderOuterOutlined","SettingOutlined","DashboardActionView","dashboardData","Dashboard","configAction","resolveViewInfoPromises","viewsToRetrieve","ActionView","setCanWeClose","tabKey","formDefaultValues","formForcedValues","setCurrentViewInternal","setAvailableViews","res_id_parsed","setCurrentIdInternal","gtResourceModalVisible","setGtResourceModalVisible","searchingForResourceId","setSearchingForResourceId","setCurrentViewTabContext","setCurrentIdTabContext","useHotkeys","handleGoToRecordShortcut","canWeClose","viewDataRetrieved","getViewsPromises","viewArray","viewTuple","promise","viewsRetrieved","viewInfo","view_type","currentViewToAssign","initialViewWithData","resource","viewForm","fetchAction","actionId","rootContext","actionType","dataForAction","parsedContext","finalViews","uuidv4","ResponsiveReactGridLayout","WidthProvider","Responsive","DashboardGrid","onPositionItemsChanged","Children","child","parms","lg","md","sm","xs","xxs","DashboardGridItem","border","borderBottom","fontWeight","ExportOutlined","DashboardTree","limitRef","paramsRef","searchForTree","totalItemsResult","fetchActionData","overflowY","DashboardForm","firstId","setFirstId","itemsField","dashboardItems","setDashboardItems","setActionBarLoading","itemsFields","boardFields","openConfigDashboard","fetchView","originalItems","fetchDashboardItems","itemsWithActions","getItemsWithActions","dashboardItem","itemPositions","itemPosition","remotePosition","itemsToUpdateWithUpdatedPos","diff","diffItem","valueToUpdate","parmsParsed","childContent","formattedInitialView","MultiCheckboxInput","checkAll","uncheckAll","MarkdownInput","ReactMarkdown","direction","RadioAnt","SwitchInput","AntdSwitch","StepsInput","errorField","AntdSteps","Editor","editor","onDidBlurEditorWidget","Layout","Welcome","RootView","setActiveKey","setTabs","tabViewsCloseFunctions","contentRootProvider","retrieveAndOpenAction","currentIndex","tab","registerViewCloseFn","getActionData","action_id_string","addNewTab","newTabs","shortcut","actionString","canWeCloseFn","Tab","isActive","onSelected","bgColor","colorBgContainer","userSelect","TabSelector","TabContent","hiddenStyle","memo","CurrentTabContent","tabsToRender","FavouriteButton","onRetrieveShortcuts","onCheckIsFavourite","onAddFavourite","onRemoveFavourite","dropdownVisible","setDropdownVisible","shortcuts","setShortcuts","getShortcuts","Number","handleVisibleChange","flag","currentTab","editFavourites","FavouriteItem"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"react-ooui.es.js","sources":["../src/widgets/base/Label.tsx","../src/locales/ca_ES.tsx","../src/locales/en_US.tsx","../src/locales/es_ES.tsx","../src/context/LocaleContext.tsx","../src/common/Field.tsx","../src/ui/ConfirmDialog.tsx","../src/context/FormContext.tsx","../src/helpers/iconMapper.ts","../src/widgets/base/Button.tsx","../src/widgets/custom/ButtonGroup.tsx","../src/hooks/useWindowDimensions.ts","../src/ConnectionProvider.ts","../src/helpers/errorHelper.ts","../src/ui/ActionErrorDialog.tsx","../src/widgets/modals/TranslationModal.tsx","../src/common/ButtonWithTooltip.tsx","../src/ui/InfoDialog.tsx","../src/widgets/base/Char.tsx","../src/widgets/base/Selection.tsx","../src/widgets/base/Boolean.tsx","../node_modules/lodash/isObject.js","../node_modules/lodash/_freeGlobal.js","../node_modules/lodash/_root.js","../node_modules/lodash/now.js","../node_modules/lodash/_trimmedEndIndex.js","../node_modules/lodash/_baseTrim.js","../node_modules/lodash/_Symbol.js","../node_modules/lodash/_getRawTag.js","../node_modules/lodash/_objectToString.js","../node_modules/lodash/_baseGetTag.js","../node_modules/lodash/isObjectLike.js","../node_modules/lodash/isSymbol.js","../node_modules/lodash/toNumber.js","../node_modules/lodash/debounce.js","../src/helpers/filesHelper.ts","../src/widgets/base/Image.tsx","../src/widgets/custom/FiberGrid.tsx","../src/helpers/treeHelper.ts","../src/helpers/one2manyHelper.ts","../src/widgets/custom/Timeline.tsx","../src/widgets/custom/Indicator.tsx","../src/helpers/formHelper.ts","../src/widgets/custom/Tag.tsx","../src/widgets/custom/Tags.tsx","../src/widgets/WidgetFactory.tsx","../src/helpers/containerHelper.ts","../src/widgets/containers/Container.tsx","../src/ui/UnsavedChangesDialog.tsx","../src/ui/FormErrorsDialog.tsx","../src/ui/WarningDialog.tsx","../src/context/FormModalContext.tsx","../src/helpers/searchHelper.ts","../src/hooks/useSearch.ts","../src/context/ActionViewContext.tsx","../src/context/TabManagerContext.tsx","../src/context/ContentRootContext.tsx","../src/ui/ErrorAlert.tsx","../src/widgets/views/Form.tsx","../src/widgets/modals/FormModal.tsx","../src/widgets/views/searchFilter/DateRangePicker.tsx","../src/widgets/views/searchFilter/DateTimeRangePicker.tsx","../src/widgets/base/Float.tsx","../src/widgets/base/Integer.tsx","../src/widgets/views/searchFilter/PairFields.tsx","../src/widgets/base/MultiSelection.tsx","../src/widgets/views/searchFilter/SearchField.tsx","../src/widgets/views/searchFilter/SearchBottomBar.tsx","../src/widgets/views/searchFilter/SearchParams.tsx","../src/widgets/views/searchFilter/SearchFilter.tsx","../src/helpers/dynamicColumnsHelper.ts","../src/helpers/timeHelper.ts","../src/widgets/base/ProgressBar.tsx","../src/widgets/base/many2one/Many2oneSuffixModal.tsx","../src/widgets/base/many2one/Many2oneSuffix.tsx","../src/widgets/base/many2one/Many2oneTree.tsx","../src/widgets/base/ReferenceTree.tsx","../node_modules/dayjs/dayjs.min.js","../src/widgets/custom/Avatar.tsx","../node_modules/dayjs/plugin/weekday.js","../node_modules/dayjs/plugin/localeData.js","../src/common/DatePicker.tsx","../src/widgets/views/Tree.tsx","../src/widgets/views/SearchTree.tsx","../src/widgets/modals/SearchModal.tsx","../src/ui/GenericErrorDialog.tsx","../src/widgets/base/many2one/Many2one.tsx","../src/context/One2manyContext.tsx","../src/widgets/views/Graph/GraphIndicator.tsx","../src/widgets/views/Graph/GraphDefaults.ts","../src/widgets/views/Graph/useGraphData.tsx","../src/widgets/views/Graph/GraphChart.tsx","../src/widgets/views/Graph/Graph.tsx","../src/ui/RemoveItemDialog.tsx","../src/ui/UnlinkItemDialog.tsx","../src/widgets/base/one2many/One2manyTopBar.tsx","../src/widgets/base/one2many/One2manyInput.tsx","../src/widgets/base/one2many/One2many.tsx","../src/widgets/base/FloatTime.tsx","../src/widgets/containers/Group.tsx","../src/widgets/containers/Notebook.tsx","../src/widgets/base/Text.tsx","../src/widgets/base/Separator.tsx","../src/hooks/useExport.ts","../src/widgets/modals/ExportModal.tsx","../src/widgets/base/Date.tsx","../src/widgets/base/DateTime.tsx","../node_modules/dayjs/plugin/customParseFormat.js","../src/widgets/base/Time.tsx","../src/widgets/base/Reference.tsx","../src/widgets/base/Binary.tsx","../src/actionbar/ChangeViewButton.tsx","../src/actionbar/DropdownButton.tsx","../src/actionbar/ActionButton.tsx","../src/actionbar/NewButton.tsx","../src/ui/RefreshItemDialog.tsx","../src/helpers/logInfoHelper.tsx","../src/actionbar/AttachmentsButtonWrapper.tsx","../src/actionbar/AttachmentsButton.tsx","../src/actionbar/FormActionBar.tsx","../src/widgets/base/LinkInput.tsx","../src/widgets/base/Url.tsx","../src/widgets/base/Email.tsx","../src/ui/GoToResourceModal.tsx","../src/actionbar/ButtonWithBadge.tsx","../src/actionbar/GraphActionBar.tsx","../src/ui/TitleHeader.tsx","../src/views/actionViews/GraphActionView.tsx","../src/views/actionViews/FormActionView.tsx","../src/actionbar/SearchBar.tsx","../src/context/ConfigContext.tsx","../src/actionbar/TreeActionBar.tsx","../src/views/actionViews/TreeActionView.tsx","../src/context/DashboardActionContext.tsx","../src/actionbar/DashboardActionBar.tsx","../src/views/actionViews/DashboardActionView.tsx","../src/helpers/viewHelper.ts","../src/views/ActionView.tsx","../src/widgets/views/Dashboard/dashboardHelper.ts","../src/widgets/views/DashboardGrid/DashboardGrid.tsx","../src/widgets/views/DashboardGrid/DashboardGridItem.tsx","../src/widgets/views/Dashboard/DashboardTree.tsx","../src/widgets/views/Dashboard/DashboardForm.tsx","../src/widgets/views/Dashboard/Dashboard.tsx","../src/widgets/custom/MultiCheckbox.tsx","../src/widgets/custom/Markdown.tsx","../src/widgets/custom/Radio.tsx","../src/widgets/custom/Switch.tsx","../src/widgets/custom/Steps.tsx","../src/widgets/custom/CodeEditor.tsx","../src/views/Welcome.tsx","../src/views/RootView.tsx","../src/views/tabs/Tab.tsx","../src/views/TabSelector.tsx","../src/views/TabContent.tsx","../src/views/CurrentTabContent.tsx","../src/ui/FavouriteButton.tsx"],"sourcesContent":["import React from \"react\";\nimport { Tooltip, Typography, theme } from \"antd\";\nimport { WidgetProps } from \"@/types\";\nimport { QuestionCircleOutlined } from \"@ant-design/icons\";\nimport { Label as LabelOoui } from \"@gisce/ooui\";\nimport { Interweave } from \"interweave\";\nconst { Text, Title } = Typography;\nconst { useToken } = theme;\n\ntype Props = WidgetProps & {\n align?: \"left\" | \"center\" | \"right\";\n responsiveBehaviour?: boolean;\n};\n\nconst alignClass = {\n left: \"justify-start\",\n center: \"justify-center\",\n right: \"justify-end\",\n};\n\nconst Label = (props: Props) => {\n const { ooui, align, responsiveBehaviour } = props;\n const { label, tooltip, fieldForLabel, labelSize, labelType } =\n ooui as LabelOoui;\n const addColon = fieldForLabel !== null ? true : false;\n const labelText = addColon && label.length > 1 ? label + \" :\" : label;\n const responsiveAlign = responsiveBehaviour ? \"left\" : \"right\";\n const labelAlgin = align ? align : fieldForLabel ? responsiveAlign : \"left\";\n const { token } = useToken();\n\n const TextType = labelSize === undefined ? Text : Title;\n\n return (\n <div\n className={`flex flex-row items-center pb-1 pt-1 ${alignClass[labelAlgin]}`}\n >\n {tooltip && (\n <Tooltip title={tooltip}>\n <QuestionCircleOutlined className=\"pr-1 text-xs\" style={{\n color: token.colorPrimary\n }} />\n </Tooltip>\n )}\n <span className=\"pr-2\">\n <TextType\n level={labelSize}\n type={labelType as any}\n >\n <Interweave content={labelText} />\n </TextType>\n </span>\n </div>\n );\n};\n\nexport default Label;\n","export default {\n true: \"Sí\",\n false: \"No\",\n simple_search: \"Búsqueda simple\",\n advanced_search: \"Búsqueda avançada\",\n search: \"Buscar\",\n parameters: \"Paràmetres\",\n limit: \"Limit\",\n first: \"Primer\",\n no_results: \"No hi ha resultats\",\n summary:\n \"Mostrant resultats des de {from} fins {to} d'un total de {total} registres\",\n welcome: \"Benvingut\",\n attachments: \"Adjunts\",\n addNewAttachment: \"Afegir nou adjunt\",\n listAllAttachments: \"Veure tots els adjunts\",\n viewAs: \"Veure com\",\n confirmRemoveItem: \"Estàs segur de volguer eliminar aquest item?\",\n save: \"Desar\",\n delete: \"Eliminar\",\n refresh: \"Refrescar\",\n previous: \"Anterior\",\n next: \"Següent\",\n actions: \"Accions\",\n reports: \"Informes\",\n related: \"Relacionat\",\n new: \"Nou\",\n fillRequiredField: \"Siusplau, omple aquest camp obligatori\",\n fillRequiredFields: \"Siusplau, omple tots els camps obligatoris\",\n generatingReport: \"Generant informe...\",\n confirmation: \"Confirmació\",\n ok: \"D'acord\",\n cancel: \"Cancel·lar\",\n formHasErrors: \"El formulari té errors\",\n unsavedChanges: \"Hi ha canvis sense guardar\",\n confirmRefreshWithoutSave:\n \"Estàs segur de volguer refrescar la pàgina sense guardar els canvis?\",\n discardAndRefresh: \"Descarta els canvis i refresca\",\n removeItems: \"Elimina el registre/s\",\n confirmRemove: \"Estàs segur de volguer eliminar els registre/s seleccionats?\",\n yesConfirmRemove: \"Sí, elimina\",\n unlinkItems: \"Desenllaça registre/s\",\n confirmUnlink:\n \"Estàs segur de volguer desenllaçar els registre/s seleccionats?\",\n yesConfirmUnlink: \"Sí, desenllaça\",\n confirmCloseWithoutSave:\n \"Estàs segur de volguer tancar aquesta finestra sense guardar?\",\n closeWithoutSaving: \"Tancar sense guardar\",\n action: \"Acció\",\n report: \"Informe\",\n selectAction: \"Selecciona una acció\",\n download: \"Descarrega\",\n clear: \"Neteja\",\n open: \"Obre\",\n uploadNewImage: \"Puja una nova imatge\",\n noCurrentEntries: \"No hi ha registres\",\n duplicate: \"Duplicar\",\n downloadingAttachment: \"Descarregant adjunt...\",\n tree: \"llista\",\n form: \"formulari\",\n favorites: \"Els meus favorits\",\n edit_favorites: \"Edita els favorits\",\n no_favorites: \"No tens favorits guardats\",\n register: \"Registre\",\n of: \"de\",\n editingDocument: \"Editant document\",\n showLogs: \"Veure logs\",\n createdBy: \"Creat per l'usuari\",\n creationDate: \"Data creació\",\n lastUpdatedBy: \"Última modificació per\",\n lastUpdatedDate: \"Data última modificació\",\n goToResourceId: \"Vés al recurs amb ID\",\n searchId: \"ID de cerca:\",\n idNotFound: \"No es troba aquesta id de recurs per l'objecte\",\n selectedRegisters: \"registres seleccionats\",\n translate: \"Traduïr\",\n enterTextBeforeTranslate:\n \"Introdueix algun text al camp abans d'afegir traduccions\",\n saveBeforeTranslate:\n \"Heu de desar el registre abans d'afegir les traduccions\",\n configDashboard: \"Configurar panell\",\n moveDashboard: \"Moure items del panell\",\n openAttachment: \"Veure detall de l'adjunt\",\n openAttachmentLink: \"Obrir enllaç de l'adjunt\",\n uninformed: \"Sense informar\",\n totalRegisters: \"Registres totals:\",\n export: \"Exportar\",\n selectAtLeastOneField: \"Selecciona almenys un camp per a l'exportació\",\n printScreen: \"Imprimir pantalla\",\n advancedExport: \"Exportació avançada\",\n savedRegisters: \"Registre guardat correctament\",\n errorWhileSavingForm: \"Error en guardar el formulari\",\n};\n","export default {\n true: \"Yes\",\n false: \"No\",\n simple_search: \"Simple search\",\n advanced_search: \"Advanced search\",\n search: \"Search\",\n parameters: \"Parameters\",\n limit: \"Limit\",\n first: \"First\",\n no_results: \"No results\",\n summary: \"Showing registers from {from} to {to} of {total} registers\",\n welcome: \"Welcome\",\n attachments: \"Attachments\",\n addNewAttachment: \"Add new attachment\",\n listAllAttachments: \"View all the attachments\",\n viewAs: \"View as\",\n confirmRemoveItem: \"Are you sure to remove this item?\",\n save: \"Save\",\n delete: \"Delete\",\n refresh: \"Refresh\",\n previous: \"Previous\",\n next: \"Next\",\n actions: \"Actions\",\n reports: \"Reports\",\n related: \"Related\",\n new: \"New\",\n fillRequiredField: \"Please fill this required field\",\n fillRequiredFields: \"Please fill all the required fields\",\n generatingReport: \"Generating report...\",\n confirmation: \"Confirmation\",\n ok: \"OK\",\n cancel: \"Cancel\",\n formHasErrors: \"Form has errors\",\n unsavedChanges: \"There are unsaved changes\",\n confirmRefreshWithoutSave:\n \"Do you really want to refresh this window without saving?\",\n discardAndRefresh: \"Discard changes and refresh\",\n removeItems: \"Remove item/s\",\n confirmRemove: \"Are you sure you want to remove the selected item/s?\",\n yesConfirmRemove: \"Yes, remove\",\n unlinkItems: \"Unlink item/s\",\n confirmUnlink: \"Are you sure you want to unlink the selected item/s?\",\n yesConfirmUnlink: \"Yes, unlink\",\n confirmCloseWithoutSave:\n \"Do you really want to close this window without saving?\",\n closeWithoutSaving: \"Close without saving\",\n action: \"Action\",\n report: \"Report\",\n selectAction: \"Select an action\",\n download: \"Download\",\n clear: \"Clear\",\n open: \"Open\",\n uploadNewImage: \"Upload new image\",\n noCurrentEntries: \"No current entries\",\n duplicate: \"Duplicate\",\n downloadingAttachment: \"Downloading attachment...\",\n tree: \"list\",\n form: \"form\",\n favorites: \"My shortcuts\",\n edit_favorites: \"Edit shortcuts\",\n no_favorites: \"You don't have any shortcuts saved yet\",\n register: \"Register\",\n of: \"of\",\n editingDocument: \"Editing document\",\n showLogs: \"Show logs\",\n createdBy: \"Created by user\",\n creationDate: \"Creation date\",\n lastUpdatedBy: \"Last modified by\",\n lastUpdatedDate: \"Date of last modification\",\n goToResourceId: \"Go to resource ID\",\n searchId: \"Search ID:\",\n idNotFound: \"Resource ID does not exist for this object!\",\n selectedRegisters: \"selected registers\",\n translate: \"Translate\",\n enterTextBeforeTranslate:\n \"Enter some text to the related field before adding translations\",\n saveBeforeTranslate: \"You must save the record before adding translations\",\n configDashboard: \"Setup dashboard\",\n moveDashboard: \"Move dashboard items\",\n openAttachment: \"Open attachment detail\",\n openAttachmentLink: \"Open attachment link\",\n uninformed: \"Uninformed\",\n totalRegisters: \"Total registers:\",\n export: \"Export\",\n selectAtLeastOneField: \"Select at least one field for the export\",\n printScreen: \"Print screen\",\n advancedExport: \"Advanced export\",\n savedRegisters: \"Record successfully saved\",\n errorWhileSavingForm: \"Error while saving form\",\n};\n","export default {\n true: \"Sí\",\n false: \"No\",\n simple_search: \"Búsqueda simple\",\n advanced_search: \"Búsqueda avanzada\",\n search: \"Buscar\",\n parameters: \"Parametros\",\n limit: \"Límite\",\n first: \"Primero\",\n no_results: \"No hay resultados\",\n summary:\n \"Mostrando resultado desde {from} hasta {to} de un total de {total} registros\",\n welcome: \"Bienvenido\",\n attachments: \"Adjuntos\",\n addNewAttachment: \"Añadir nuevo adjunto\",\n listAllAttachments: \"Ver todos los adjuntos\",\n viewAs: \"Ver cómo\",\n confirmRemoveItem: \"Estás seguro de querer eliminar éste registro?\",\n save: \"Guardar\",\n delete: \"Eliminar\",\n refresh: \"Refrescar\",\n previous: \"Anterior\",\n next: \"Siguiente\",\n actions: \"Acciones\",\n reports: \"Informes\",\n related: \"Relacionado\",\n new: \"Nuevo\",\n fillRequiredField: \"Por favor, rellena éste campo obligatorio\",\n fillRequiredFields: \"Por favor, rellena todos los campos obligatorios\",\n generatingReport: \"Generando informe...\",\n confirmation: \"Confirmacióm\",\n ok: \"De acuerdo\",\n cancel: \"Cancelar\",\n formHasErrors: \"El formulario tiene errores\",\n unsavedChanges: \"Hay cambios sin guardar\",\n confirmRefreshWithoutSave:\n \"Estás seguro de querer refrescar la página sin guardar los cambios?\",\n discardAndRefresh: \"Descarta los cambios y refresca\",\n removeItems: \"Eliminar el registro/s\",\n confirmRemove:\n \"Estás seguro de querer eliminar los registro/s seleccionados?\",\n yesConfirmRemove: \"Sí, elimina\",\n unlinkItems: \"Desenlaza registro/s\",\n confirmUnlink:\n \"Estás seguro de querer desenlazar los registro/s seleccionados?\",\n yesConfirmUnlink: \"Sí, desenlaza\",\n confirmCloseWithoutSave:\n \"Estás seguro de querer cerrar ésta ventana sin cerrar?\",\n closeWithoutSaving: \"Cerrar sin guardar\",\n action: \"Acción\",\n report: \"Informe\",\n selectAction: \"Selecciona una acción\",\n download: \"Descarga\",\n clear: \"Limpiar\",\n open: \"Abrir\",\n uploadNewImage: \"Subir una nueva imágen\",\n noCurrentEntries: \"No hay registros\",\n duplicate: \"Duplicar\",\n downloadingAttachment: \"Descargando adjunto...\",\n tree: \"lista\",\n form: \"formulario\",\n favorites: \"Mis favoritos\",\n edit_favorites: \"Edita los favoritos\",\n no_favorites: \"No tienes favoritos guardados\",\n register: \"Registro\",\n of: \"de\",\n editingDocument: \"Editando documento\",\n showLogs: \"Ver logs\",\n createdBy: \"Creado por el usuario\",\n creationDate: \"Fecha creación\",\n lastUpdatedBy: \"Última modificación por\",\n lastUpdatedDate: \"Fecha última modificación\",\n goToResourceId: \"Ir al recurso con ID\",\n searchId: \"ID de búsqueda:\",\n idNotFound: \"No se encuentra ésta ID de recursos para el objeto\",\n selectedRegisters: \"registros seleccionados\",\n translate: \"Traducir\",\n enterTextBeforeTranslate:\n \"Introduce algun texto en el campo antes de añadir traducciones\",\n saveBeforeTranslate:\n \"Tienes que guardar el registro antes de añadir las traducciones\",\n configDashboard: \"Configurar panel\",\n moveDashboard: \"Mover items del panel\",\n openAttachment: \"Ver detalle del adjunto\",\n openAttachmentLink: \"Abrir enlace del adjunto\",\n uninformed: \"Sin informar\",\n totalRegisters: \"Registros totales:\",\n export: \"Exportar\",\n selectAtLeastOneField: \"Selecciona al menos un campo para la exportación\",\n printScreen: \"Imprimir pantalla\",\n advancedExport: \"Exportación avanzada\",\n savedRegisters: \"Registro guardado correctamente\",\n errorWhileSavingForm: \"Error al guardar el formulario\",\n};\n","import React from \"react\";\nimport ca_ES from \"@/locales/ca_ES\";\nimport en_US from \"@/locales/en_US\";\nimport es_ES from \"@/locales/es_ES\";\n\nconst localeStrings: any = {\n ca_ES,\n en_US,\n es_ES,\n};\n\nexport type LocaleContextType = {\n lang: string;\n t: (key: string) => string;\n};\n\nexport const LocaleContext = React.createContext<LocaleContextType | null>(\n null\n);\n\ntype LocaleContextProps = {\n children: React.ReactNode;\n lang: string;\n};\n\nconst LocaleContextProvider = (props: LocaleContextProps): any => {\n const { children, lang } = props;\n\n function t(key: string): string {\n return tForLang(key, lang);\n }\n\n return (\n <LocaleContext.Provider\n value={{\n lang,\n t,\n }}\n >\n {children}\n </LocaleContext.Provider>\n );\n};\n\nexport const tForLang = (key: string, lang: string) => {\n const translated = localeStrings[lang]?.[key];\n return translated || key;\n};\n\nexport default LocaleContextProvider;\n","import React, { useContext } from \"react\";\nimport { Form, Row, Col } from \"antd\";\nimport { Field as FieldOoui, Label as LabelOoui } from \"@gisce/ooui\";\nimport Label from \"@/widgets/base/Label\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\nexport default function Field({\n ooui,\n children,\n layout = \"horizontal\",\n valuePropName,\n showLabel = false,\n alignLabel = \"left\",\n required = false,\n type,\n validator,\n}: {\n ooui: FieldOoui;\n children?: React.ReactNode;\n layout?: \"horizontal\" | \"vertical\";\n valuePropName?: string;\n showLabel?: boolean;\n alignLabel?: \"left\" | \"center\" | \"right\";\n required?: boolean;\n type?: any;\n validator?: any;\n}) {\n const { id, label, tooltip } = ooui;\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n const rules = required\n ? [\n {\n required: true,\n message: t(\"fillRequiredField\"),\n type,\n validator,\n },\n ]\n : undefined;\n\n const formItem = () => (\n <Form.Item\n className=\"mb-0\"\n name={id}\n valuePropName={valuePropName}\n rules={rules}\n >\n {children}\n </Form.Item>\n );\n\n if (!showLabel) {\n return formItem();\n }\n\n const labelWidget = (\n <Label\n ooui={\n new LabelOoui({\n name: id + \"_label\",\n string: label,\n help: tooltip,\n fieldForLabel: id,\n })\n }\n align={alignLabel}\n />\n );\n\n const horizontalMode = () => {\n return (\n <Row align=\"middle\" className=\"pb-1 pt-1\">\n <Col className=\"ml-2\" flex=\"7rem\">\n <div className=\"flex flex-col items-end\">{labelWidget}</div>\n </Col>\n <Col flex=\"auto\">{formItem()}</Col>\n </Row>\n );\n };\n\n const verticalMode = () => {\n return (\n <>\n {labelWidget}\n {formItem()}\n </>\n );\n };\n\n return layout === \"horizontal\" ? horizontalMode() : verticalMode();\n}\n","import React from \"react\";\nimport { Modal } from \"antd\";\nimport { ExclamationCircleOutlined } from \"@ant-design/icons\";\nimport { tForLang } from \"@/context/LocaleContext\";\n\nconst { confirm } = Modal;\n\nconst showDialog = ({\n onOk,\n confirmMessage,\n lang\n}: {\n onOk: () => void;\n confirmMessage: string;\n lang: string;\n}) => {\n confirm({\n title: tForLang(\"confirmation\", lang),\n icon: <ExclamationCircleOutlined />,\n centered: true,\n content: confirmMessage,\n okText: tForLang(\"ok\", lang),\n cancelText: tForLang(\"cancel\", lang),\n onOk,\n });\n};\n\nexport default showDialog;\n","import React, { useRef, useState } from \"react\";\n\nexport type FormContextType = {\n activeId?: number;\n activeModel: string;\n setFieldValue: (field: string, value?: string) => void;\n getFieldValue: (field: string) => string;\n executeButtonAction: ({\n type,\n action,\n context,\n }: {\n type: string;\n action: string;\n context?: any;\n }) => Promise<void>;\n getContext: () => Promise<any>;\n getValues: () => Promise<any>;\n getPlainValues: () => { [key: string]: any };\n getFields: () => Promise<any>;\n domain: any[];\n submitForm?: (options?: {\n callOnSubmitSucceed?: boolean;\n }) => Promise<{ succeed: boolean; id: number }>;\n fetchValues?: () => void;\n formHasChanges?: () => boolean;\n elementHasLostFocus?: () => void;\n};\n\nexport const FormContext = React.createContext<FormContextType | null>(null);\n\ntype FormProviderProps = FormContextType & {\n children: React.ReactNode;\n};\n\nconst FormProvider = (props: FormProviderProps): any => {\n const {\n children,\n activeId,\n activeModel,\n setFieldValue,\n getFieldValue,\n executeButtonAction,\n getContext,\n getValues,\n getPlainValues,\n domain,\n submitForm,\n fetchValues,\n formHasChanges,\n elementHasLostFocus,\n getFields,\n } = props;\n\n return (\n <FormContext.Provider\n value={{\n domain,\n getValues,\n getPlainValues,\n getFields,\n activeId,\n activeModel,\n setFieldValue,\n getFieldValue,\n executeButtonAction,\n getContext,\n submitForm,\n fetchValues,\n formHasChanges,\n elementHasLostFocus,\n }}\n >\n {children}\n </FormContext.Provider>\n );\n};\n\nexport default FormProvider;\n","import React, { CSSProperties } from \"react\";\nimport * as AntIcons from \"@ant-design/icons\";\nimport * as TablerIcons from \"@tabler/icons-react\";\nimport Icon from \"@ant-design/icons\";\n\ntype TablerKey = keyof typeof TablerIcons;\ntype AntKey = keyof typeof AntIcons;\n\nconst iconMapping: { [key: string]: string } = {\n \"terp-purchase\": \"ShoppingCart\",\n \"terp-graph\": \"PieChart\",\n \"terp-crm\": \"Contacts\",\n \"terp-hr\": \"Friends\",\n \"terp-account\": \"BuildingBank\",\n \"terp-project\": \"Checklist\",\n \"terp-administration\": \"Adjustments\",\n \"terp-partner\": \"Team\",\n \"terp-mrp\": \"Build\",\n \"terp-product\": \"Shopping\",\n STOCK_JUSTIFY_FILL: \"UnorderedList\",\n STOCK_INDENT: \"IndentIncrease\",\n STOCK_HELP: \"Question\",\n STOCK_GO_UP: \"ArrowUp\",\n STOCK_SORT_DESCENDING: \"SortDescending\",\n STOCK_ADD: \"Plus\",\n STOCK_GOTO_LAST: \"FastForward\",\n STOCK_FIND: \"Search\",\n STOCK_PROPERTIES: \"Control\",\n STOCK_DIALOG_INFO: \"Info\",\n STOCK_FLOPPY: \"Usb\",\n STOCK_JUSTIFY_CENTER: \"AlignCenter\",\n STOCK_GO_BACK: \"ArrowLeft\",\n STOCK_UNDERLINE: \"Underline\",\n STOCK_BOLD: \"Bold\",\n STOCK_APPLY: \"Check\",\n STOCK_ZOOM_OUT: \"ZoomOut\",\n STOCK_STRIKETHROUGH: \"Strikethrough\",\n STOCK_MEDIA_REWIND: \"Backward\",\n STOCK_PRINT: \"Printer\",\n STOCK_NO: \"Close\",\n STOCK_GOTO_FIRST: \"FastBackward\",\n STOCK_CLOSE: \"Close\",\n STOCK_REMOVE: \"Minus\",\n STOCK_CUT: \"Scissor\",\n STOCK_DIALOG_AUTHENTICATION: \"Safety\",\n STOCK_ZOOM_FIT: \"Expand\",\n STOCK_JUMP_TO: \"Select\",\n STOCK_HARDDISK: \"Hdd\",\n STOCK_SAVE_AS: \"Save\",\n STOCK_UNDO: \"Undo\",\n STOCK_JUSTIFY_RIGHT: \"AlignRight\",\n STOCK_DIALOG_ERROR: \"CloseCircle\",\n STOCK_INDEX: \"Profile\",\n STOCK_GOTO_BOTTOM: \"VerticalAlignBottom\",\n STOCK_MEDIA_NEXT: \"StepForward\",\n STOCK_REDO: \"Redo\",\n STOCK_COPY: \"Copy\",\n STOCK_MEDIA_PAUSE: \"Pause\",\n STOCK_GO_FORWARD: \"ArrowRight\",\n STOCK_UNDELETE: \"Undo\",\n STOCK_EXECUTE: \"Setting\",\n STOCK_SAVE: \"Save\",\n STOCK_DIALOG_QUESTION: \"QuestionCircle\",\n STOCK_SORT_ASCENDING: \"SortAscending\",\n STOCK_REFRESH: \"Reload\",\n STOCK_MEDIA_FORWARD: \"Forward\",\n STOCK_STOP: \"Border\",\n STOCK_PRINT_PREVIEW: \"Printer\",\n STOCK_HOME: \"Home\",\n STOCK_PASTE: \"CarryOut\",\n STOCK_ZOOM_100: \"ZoomIn\",\n STOCK_FIND_AND_REPLACE: \"FileSearch\",\n STOCK_DIALOG_WARNING: \"Warning\",\n STOCK_ZOOM_IN: \"ZoomIn\",\n STOCK_CONVERT: \"Export\",\n STOCK_ITALIC: \"Italic\",\n STOCK_YES: \"Check\",\n STOCK_MEDIA_PLAY: \"PlayCircle\",\n STOCK_MEDIA_RECORD: \"VideoCamera\",\n STOCK_MEDIA_PREVIOUS: \"StepBackward\",\n STOCK_NEW: \"FileAdd\",\n STOCK_CANCEL: \"Close\",\n STOCK_DISCONNECT: \"Api\",\n STOCK_JUSTIFY_LEFT: \"AlignLeft\",\n STOCK_FILE: \"File\",\n STOCK_QUIT: \"Logout\",\n STOCK_EDIT: \"Edit\",\n STOCK_CONNECT: \"Api\",\n STOCK_GO_DOWN: \"CaretDown\",\n STOCK_NETWORK: \"Apartment\",\n STOCK_OK: \"Check\",\n STOCK_GOTO_TOP: \"VerticalAlignTop\",\n STOCK_ABOUT: \"Star\",\n STOCK_COLOR_PICKER: \"Aim\",\n STOCK_SELECT_FONT: \"FontSize\",\n STOCK_DELETE: \"Delete\",\n STOCK_DND: \"FileText\",\n STOCK_CLEAR: \"CloseSquare\",\n STOCK_UNINDENT: \"AlignLeft\",\n STOCK_PREFERENCES: \"Setting\",\n};\n\nexport default (\n key: string,\n props?: { className?: any; style: CSSProperties }\n) => {\n if (key.indexOf(\"gtk-\") !== -1) {\n const rootIcon = key.replace(\"gtk-\", \"\").replace(/\\-/g, \"_\");\n key = `STOCK_${rootIcon.toUpperCase()}`;\n }\n\n if (iconMapping.hasOwnProperty(key)) {\n return getIconForKey(iconMapping[key], props);\n }\n\n return getIconForKey(key, props);\n};\n\nfunction toCamelCase(key: string): string {\n return `${key\n .split(\"-\")\n .map((word) =>\n word.replace(\n /\\w\\S*/g,\n (w) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase()\n )\n )\n .join(\"\")}`;\n}\n\nfunction getIconForKey(\n key: string,\n props?: { className?: any; style: CSSProperties }\n) {\n let IconCamelCase = key.charAt(0).toUpperCase() + key.slice(1); // Capitalize first letter\n if (IconCamelCase.indexOf(\"-\") !== -1) {\n IconCamelCase = toCamelCase(IconCamelCase);\n }\n\n const antKey: AntKey = `${IconCamelCase}Outlined` as any;\n if (AntIcons[antKey]) {\n return () =>\n React.createElement(AntIcons[antKey] as any, {\n ...props,\n });\n }\n\n const tablerKey: TablerKey = `Icon${IconCamelCase}` as any;\n if (TablerIcons[tablerKey]) {\n const TablerIcon = () =>\n React.createElement(TablerIcons[tablerKey] as any, {\n fill: \"transparent\",\n height: 17,\n width: 17,\n });\n const CustomIcon = () =>\n React.createElement(Icon, {\n component: TablerIcon,\n ...props,\n });\n return CustomIcon;\n }\n\n return undefined;\n}\n","import React, { useContext, useState } from \"react\";\nimport Field from \"@/common/Field\";\nimport { Button as AntButton } from \"antd\";\nimport { Button as ButtonOoui } from \"@gisce/ooui\";\nimport showConfirmDialog from \"@/ui/ConfirmDialog\";\nimport { FormContext, FormContextType } from \"@/context/FormContext\";\nimport { LoadingOutlined } from \"@ant-design/icons\";\nimport iconMapper from \"@/helpers/iconMapper\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\ntype Props = {\n ooui: ButtonOoui;\n};\n\nexport const Button = (props: Props) => {\n const { ooui } = props;\n const {\n id,\n label,\n activated,\n buttonType,\n confirmMessage,\n icon,\n context,\n readOnly,\n } = ooui;\n const formContext = useContext(FormContext) as FormContextType;\n const { executeButtonAction } = formContext || {};\n const [isRunning, setIsRunning] = useState<boolean>(false);\n const { lang } = useContext(LocaleContext) as LocaleContextType;\n\n async function onClick_confirm() {\n setIsRunning(true);\n await executeButtonAction({ type: buttonType, action: id, context });\n setIsRunning(false);\n }\n\n function onClick() {\n if (confirmMessage) {\n showConfirmDialog({\n confirmMessage,\n lang,\n onOk: () => {\n onClick_confirm();\n },\n });\n return;\n }\n\n onClick_confirm();\n }\n\n function getButtonIcon() {\n if (isRunning) return <LoadingOutlined />;\n if (icon) {\n const Icon: React.ElementType = iconMapper(icon) as any;\n return Icon && <Icon />;\n }\n return undefined;\n }\n\n return (\n <Field ooui={ooui}>\n <AntButton\n block\n disabled={!activated || readOnly}\n onClick={onClick}\n icon={getButtonIcon()}\n type={ooui.primary ? \"primary\" : \"default\"}\n danger={ooui.danger}\n style={{ whiteSpace: \"normal\", height: \"auto\" }}\n >\n {label}\n </AntButton>\n </Field>\n );\n};\n","import React, { useContext, useState } from \"react\";\nimport Field from \"@/common/Field\";\nimport { DownOutlined } from \"@ant-design/icons\";\nimport { Dropdown, Menu } from \"antd\";\nimport { Button } from \"@/widgets/base/Button\";\nimport {\n ButtonGroup as ButtonGroupOoui,\n Button as ButtonOoui,\n Field as FieldOoui,\n} from \"@gisce/ooui\";\nimport showConfirmDialog from \"@/ui/ConfirmDialog\";\nimport { FormContext, FormContextType } from \"@/context/FormContext\";\nimport { LoadingOutlined } from \"@ant-design/icons\";\nimport iconMapper from \"@/helpers/iconMapper\";\nimport { WidgetProps } from \"@/types\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\ntype ButtonGroupProps = {\n ooui: ButtonGroupOoui;\n};\n\ntype ItemsProps = {\n ooui: ButtonOoui[];\n executeButtonAction: any,\n lang: string\n};\n\nexport const ButtonGroup = (props: ButtonGroupProps) => {\n const { ooui } = props;\n const { defaultButton, secondaryButtons } = ooui;\n const {\n id,\n caption,\n activated,\n buttonType,\n confirmMessage,\n icon,\n primary,\n danger,\n context,\n readOnly,\n } = defaultButton || {};\n const formContext = useContext(FormContext) as FormContextType;\n const { executeButtonAction } = formContext || {};\n const [isRunning, setIsRunning] = useState<boolean>(false);\n const { lang } = useContext(LocaleContext) as LocaleContextType;\n\n function getButtonIcon() {\n if (isRunning) return <LoadingOutlined />;\n if (icon) {\n const Icon: React.ElementType = iconMapper(icon) as any;\n return Icon && <Icon />;\n }\n return undefined;\n }\n\n async function onClick_confirm() {\n if (buttonType && id) {\n setIsRunning(true);\n await executeButtonAction({ type: buttonType, action: id, context });\n setIsRunning(false);\n }\n }\n\n function onClick() {\n if (confirmMessage) {\n showConfirmDialog({\n confirmMessage,\n lang,\n onOk: () => {\n onClick_confirm();\n },\n });\n return;\n }\n\n onClick_confirm();\n }\n if (ooui.buttons.length === 0) {\n return null;\n } else if (ooui.buttons.length > 1) {\n return (\n <Field ooui={new FieldOoui({ ...{ ooui } })}>\n <Dropdown.Button\n disabled={!activated || readOnly}\n onClick={onClick}\n icon={<DownOutlined />}\n type={primary ? \"primary\" : undefined}\n //danger={danger ? true : undefined} This works but typescript\n // doesn't accept\n overlay={<Items ooui={secondaryButtons} executeButtonAction={executeButtonAction} lang={lang} /> }\n >\n {getButtonIcon()}\n {caption}\n </Dropdown.Button>\n </Field>\n );\n } else if (defaultButton) {\n return (\n <Button ooui={defaultButton} />\n )\n }\n};\n\nconst Items = (props: ItemsProps) => {\n const { ooui, executeButtonAction, lang } = props;\n if (!ooui) {\n return null;\n }\n const items = ooui.map((button) => {\n const {\n id,\n caption,\n activated,\n buttonType,\n confirmMessage,\n icon,\n context,\n readOnly,\n danger,\n } = button;\n const [isRunning, setIsRunning] = useState<boolean>(false);\n\n async function onClick_confirm() {\n setIsRunning(true);\n await executeButtonAction({ type: buttonType, action: id, context });\n setIsRunning(false);\n }\n\n function onClick() {\n if (confirmMessage) {\n showConfirmDialog({\n confirmMessage,\n lang,\n onOk: () => {\n onClick_confirm();\n },\n });\n return;\n }\n\n onClick_confirm();\n }\n\n function getButtonIcon() {\n if (isRunning) return <LoadingOutlined />;\n if (icon) {\n const Icon: React.ElementType = iconMapper(icon) as any;\n return Icon && <Icon />;\n }\n return undefined;\n }\n\n return (\n <Menu.Item\n disabled={!activated || readOnly}\n onClick={onClick}\n icon={getButtonIcon()}\n danger={danger}\n >\n {caption}\n </Menu.Item>\n );\n });\n return <Menu>{items}</Menu>;\n};\n","import { useState, useEffect } from \"react\";\n\nconst MODAL_WIDTH_CONSTANT = 0.7;\n\nfunction getWindowDimensions() {\n const { innerWidth: width, innerHeight: height } = window;\n return {\n width,\n height,\n };\n}\n\nexport default function useWindowDimensions() {\n const [windowDimensions, setWindowDimensions] = useState(\n getWindowDimensions()\n );\n\n useEffect(() => {\n function handleResize() {\n setWindowDimensions(getWindowDimensions());\n }\n\n window.addEventListener(\"resize\", handleResize);\n return () => window.removeEventListener(\"resize\", handleResize);\n }, []);\n\n return {\n modalWidth: windowDimensions.width * MODAL_WIDTH_CONSTANT,\n modalHeight: windowDimensions.height,\n width: windowDimensions.width,\n height: windowDimensions.height,\n };\n}\n","import { ConnectionProviderType } from \"@/types\";\n\nexport default class ConnectionProvider {\n private static handler: ConnectionProviderType;\n\n public static init(handler: ConnectionProviderType): void {\n ConnectionProvider.handler = handler;\n }\n\n public static getHandler(): ConnectionProviderType {\n if (!ConnectionProvider.handler) {\n throw 'Must call init() first with a valid ConnectionProvider instance';\n }\n return ConnectionProvider.handler;\n }\n}\n","export const parseError = (errorResponse: string) => {\n let message;\n let type;\n let title;\n\n if (\n typeof errorResponse === \"string\" &&\n errorResponse.indexOf(\" -- \") !== -1 &&\n errorResponse.indexOf(\"\\n\\n\") !== -1\n ) {\n const splitted = errorResponse.split(\"\\n\\n\");\n message = splitted[1].replace(/\\n/g, \"<br />\");\n const args = splitted[0].split(\" -- \");\n type = args[0];\n title = args[1];\n } else {\n message = errorResponse;\n type = \"error\";\n title = \"Error\";\n }\n\n return {\n type,\n message,\n title,\n };\n};\n","import React from \"react\";\nimport { Modal } from \"antd\";\nimport { ExclamationCircleOutlined, WarningOutlined } from \"@ant-design/icons\";\nimport { parseError } from \"@/helpers/errorHelper\";\n\nconst { error, warning } = Modal;\n\nconst showDialog = (err: string) => {\n const { message, type, title } = parseError(err);\n\n const iconComponent =\n type === \"error\" ? <ExclamationCircleOutlined /> : <WarningOutlined />;\n\n const modalType = type === \"error\" ? error : warning;\n\n modalType({\n title,\n icon: iconComponent,\n centered: true,\n content: message,\n });\n};\n\nexport default showDialog;\n","import React, { useContext, useEffect, useRef, useState } from \"react\";\nimport { Modal, Button, Divider, Row, Space, Spin, Col } from \"antd\";\nimport {\n CheckOutlined,\n CloseOutlined,\n LoadingOutlined,\n} from \"@ant-design/icons\";\nimport useWindowDimensions from \"@/hooks/useWindowDimensions\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport TextArea from \"antd/lib/input/TextArea\";\nimport showErrorDialog from \"@/ui/ActionErrorDialog\";\n\ntype TranslationModalProps = {\n visible: boolean;\n model: string;\n id: number;\n field: string;\n onCloseModal: () => void;\n onSubmitSucceed: () => void;\n};\n\ntype Lang = {\n code: string;\n name: string;\n};\n\ntype ValuesForLangs = {\n [key: string]: string;\n};\n\nexport const TranslationModal = (props: TranslationModalProps) => {\n const { visible, onCloseModal, model, id, field, onSubmitSucceed } = props;\n\n const { modalWidth } = useWindowDimensions();\n const { t } = useContext(LocaleContext) as LocaleContextType;\n const [langs, setLangs] = useState<Lang[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [submitLoading, setSubmitLoading] = useState(false);\n const [valuesForLangs, setValuesForLangs] = useState<ValuesForLangs>({});\n\n const originalValuesForLangs = useRef<ValuesForLangs>();\n\n useEffect(() => {\n if (visible) {\n fetchData();\n } else {\n setValuesForLangs({});\n }\n }, [visible]);\n\n async function fetchData() {\n setIsLoading(true);\n\n try {\n const langs = await getLangs();\n await getValuesForLangs(langs);\n } catch (err) {\n showErrorDialog(err as any);\n }\n\n setIsLoading(false);\n }\n\n async function getLangs() {\n const results: any[] = (await ConnectionProvider.getHandler().search({\n params: [[\"translatable\", \"=\", \"1\"]],\n fields: [\"code\", \"name\"],\n model: \"res.lang\",\n })) as any;\n\n const langs = results.map((item: any) => {\n return {\n code: item.code,\n name: item.name,\n };\n });\n\n setLangs?.(langs);\n return langs;\n }\n\n async function getValuesForLangs(langs: Lang[]) {\n const retrievedValuesForLang: ValuesForLangs = {};\n\n for (const lang of langs) {\n const retrievedValue = (\n await ConnectionProvider.getHandler().readObjects({\n model,\n ids: [id],\n fieldsToRetrieve: [field],\n context: { lang: lang.code },\n })\n )[0];\n retrievedValuesForLang[lang.code] = retrievedValue[field] || \"\";\n }\n\n originalValuesForLangs.current = retrievedValuesForLang;\n setValuesForLangs(retrievedValuesForLang);\n }\n\n function getInputsForLangs() {\n return langs.map((lang: Lang, i: number) => {\n return (\n <Row key={i} style={{ paddingBottom: 20 }}>\n <Col flex=\"8rem\" style={{ paddingRight: 10 }}>\n {lang.name}\n </Col>\n <Col flex=\"auto\">\n <TextArea\n rows={4}\n value={valuesForLangs[lang.code] || \"\"}\n onChange={(event: any) => {\n setValuesForLangs({\n ...valuesForLangs,\n [lang.code]: event.target.value,\n });\n }}\n disabled={submitLoading}\n />\n </Col>\n </Row>\n );\n });\n }\n\n async function onSubmit() {\n setSubmitLoading(true);\n\n try {\n for (const langCode of Object.keys(valuesForLangs)) {\n if (\n valuesForLangs[langCode] !== originalValuesForLangs.current![langCode]\n ) {\n await ConnectionProvider.getHandler().update({\n model,\n id,\n values: { [field]: valuesForLangs[langCode] },\n context: {\n lang: langCode,\n },\n fields: {},\n });\n }\n }\n } catch (err) {\n showErrorDialog(err as any);\n }\n\n setSubmitLoading(false);\n onSubmitSucceed();\n }\n\n function content() {\n if (isLoading) {\n return <Spin />;\n }\n\n return (\n <>\n {getInputsForLangs()}\n <Divider />\n <Row justify=\"end\">\n <Space>\n <Button\n icon={<CloseOutlined />}\n onClick={onCloseModal}\n disabled={submitLoading}\n >\n {t(\"cancel\")}\n </Button>\n <Button\n icon={submitLoading ? <LoadingOutlined /> : <CheckOutlined />}\n disabled={submitLoading}\n onClick={onSubmit}\n style={{ marginLeft: 15 }}\n type=\"primary\"\n >\n {t(\"ok\")}\n </Button>\n </Space>\n </Row>\n </>\n );\n }\n\n return (\n (<Modal\n title={t(\"translate\")}\n centered\n width={modalWidth}\n open={visible}\n closable={true}\n onCancel={onCloseModal}\n footer={null}\n destroyOnClose\n maskClosable={false}\n >\n {content()}\n </Modal>)\n );\n};\n","import React from \"react\";\nimport { Button, Tooltip, ButtonProps } from \"antd\";\n\nexport type Props = ButtonProps & {\n tooltip: string;\n};\n\nfunction ButtonWithTooltip(props: Props) {\n const { tooltip, ...restProps } = props;\n\n return (\n <Tooltip title={tooltip}>\n <Button {...restProps} />\n </Tooltip>\n );\n}\n\nexport default ButtonWithTooltip;\n","import { Modal } from \"antd\";\n\nconst { info } = Modal;\n\nconst showDialog = (content: any) => {\n info({\n title: \"\",\n centered: true,\n content,\n });\n};\n\nexport default showDialog;\n","import React, { CSSProperties, useContext, useState } from \"react\";\nimport { Col, Input, Row, theme } from \"antd\";\nimport Field from \"@/common/Field\";\nimport { Char as CharOoui } from \"@gisce/ooui\";\nimport { WidgetProps } from \"@/types\";\nimport { TranslationModal } from \"../modals/TranslationModal\";\nimport { FormContext, FormContextType } from \"@/context/FormContext\";\nimport ButtonWithTooltip from \"@/common/ButtonWithTooltip\";\nimport { TranslationOutlined } from \"@ant-design/icons\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport showInfo from \"@/ui/InfoDialog\";\nconst { useToken } = theme;\n\ntype CharProps = WidgetProps & {\n isSearchField?: boolean;\n};\n\nexport const Char = (props: CharProps) => {\n const { ooui, isSearchField = false } = props;\n const { id, readOnly, isPassword, required, translatable } = ooui as CharOoui;\n const { token } = useToken();\n const requiredStyle =\n required && !readOnly\n ? { backgroundColor: token.colorPrimaryBg }\n : undefined;\n const formContext = useContext(FormContext) as FormContextType;\n const { elementHasLostFocus } = formContext || {};\n\n let input = (\n <Input\n disabled={readOnly || (translatable && !isSearchField)}\n id={id}\n style={requiredStyle}\n maxLength={(ooui as CharOoui).size}\n onBlur={elementHasLostFocus}\n />\n );\n\n if (isPassword) {\n input = (\n <Input.Password\n disabled={readOnly}\n id={id}\n onBlur={elementHasLostFocus}\n />\n );\n }\n\n if (translatable && !readOnly && !isSearchField) {\n input = <TranslatableChar field={id} requiredStyle={requiredStyle} />;\n }\n\n return (\n <Field required={required} {...props}>\n {input}\n </Field>\n );\n};\n\nconst TranslatableChar = ({\n value,\n field,\n requiredStyle,\n onChange,\n}: {\n value?: string;\n field: string;\n requiredStyle: CSSProperties | undefined;\n onChange?: (value: string) => void;\n}) => {\n const formContext = useContext(FormContext) as FormContextType;\n const {\n activeId,\n activeModel,\n fetchValues,\n formHasChanges,\n elementHasLostFocus,\n } = formContext || {};\n const [translationModalVisible, setTranslationModalVisible] = useState(false);\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n if (!activeId) {\n return (\n <>\n <Row gutter={8} wrap={false}>\n <Col flex=\"auto\">\n <Input\n value={value}\n id={field}\n style={requiredStyle}\n onChange={(event: any) => {\n onChange?.(event.target.value);\n }}\n onBlur={elementHasLostFocus}\n />\n </Col>\n <Col flex=\"32px\">\n <ButtonWithTooltip\n tooltip={t(\"translate\")}\n icon={<TranslationOutlined />}\n onClick={async () => {\n if (formHasChanges?.()) {\n showInfo(t(\"saveBeforeTranslate\"));\n } else {\n showInfo(t(\"enterTextBeforeTranslate\"));\n }\n }}\n >\n {t(\"translate\")}\n </ButtonWithTooltip>\n </Col>\n </Row>\n </>\n );\n }\n\n return (\n <>\n <div\n onClick={() => {\n if (formHasChanges?.()) {\n showInfo(t(\"saveBeforeTranslate\"));\n return;\n }\n\n if (!translationModalVisible) {\n setTranslationModalVisible(true);\n }\n }}\n >\n <Input\n value={value}\n disabled={true}\n id={field}\n onChange={(event: any) => {\n onChange?.(event.target.value);\n }}\n onBlur={elementHasLostFocus}\n style={{ cursor: \"pointer\", pointerEvents: \"none\", ...requiredStyle }}\n />\n </div>\n <TranslationModal\n id={activeId!}\n model={activeModel}\n field={field}\n visible={translationModalVisible}\n onCloseModal={() => {\n setTranslationModalVisible(false);\n }}\n onSubmitSucceed={() => {\n setTranslationModalVisible(false);\n fetchValues?.();\n }}\n />\n </>\n );\n};\n","import React from \"react\";\nimport { Select } from \"antd\";\nimport styled from \"styled-components\";\n\nimport Field from \"@/common/Field\";\nimport { Selection as SelectionOoui } from \"@gisce/ooui\";\nimport { WidgetProps } from \"@/types\";\nimport { theme } from \"antd\";\n\nconst { defaultAlgorithm, defaultSeed } = theme;\n\nconst mapToken = defaultAlgorithm(defaultSeed);\n\nconst { Option } = Select;\n\nexport const Selection = (props: WidgetProps) => {\n const { ooui } = props;\n const { required } = ooui;\n\n return (\n <Field required={required} type={\"any\"} {...props}>\n <SelectionInput {...props} />\n </Field>\n );\n};\n\ntype SelectionInputProps = WidgetProps & {\n onChange?: (value: any) => void;\n value?: string;\n};\n\nexport const SelectionInput = (props: SelectionInputProps) => {\n const { ooui, onChange, value } = props;\n const { selectionValues, readOnly, required } = ooui as SelectionOoui;\n\n const values = Array.from(selectionValues.entries());\n\n const options =\n values &&\n values.length &&\n values.map((entry: string[]) => {\n const [key, value] = entry;\n return (\n <Option key={key} value={key}>\n {value}\n </Option>\n );\n });\n\n const CustomSelect: any = required && !readOnly ? RequiredSelect : Select;\n\n return (\n <CustomSelect disabled={readOnly} onChange={onChange} value={value} optionFilterProp=\"children\" filterOption={\n (input: string, option: any) => option.children.toLowerCase().indexOf(input.toLowerCase()) >= 0\n } showSearch>\n {options}\n </CustomSelect>\n );\n};\n\nconst RequiredSelect = styled(Select)`\n &.ant-select:not(.ant-select-customize-input) .ant-select-selector {\n background-color: ${mapToken.colorPrimaryBg};\n }\n`;\n","import React from \"react\";\nimport { Checkbox as AntCheckbox } from \"antd\";\nimport styled from \"styled-components\";\n\nimport Field from \"@/common/Field\";\nimport { WidgetProps } from \"@/types\";\nimport { theme } from \"antd\";\n\nconst { defaultAlgorithm, defaultSeed } = theme;\n\nconst mapToken = defaultAlgorithm(defaultSeed);\n\nexport const Boolean = (props: WidgetProps) => {\n const { ooui } = props;\n const { id, readOnly, required } = ooui;\n\n return (\n <Field {...props} valuePropName=\"checked\">\n <BooleanInput id={id} readOnly={readOnly} required={required} />\n </Field>\n );\n};\n\nconst BooleanInput = (props: any) => {\n const { required, readOnly, ...restProps } = props;\n\n const CustomCheckbox: any =\n required && !readOnly ? RequiredCheckbox : AntCheckbox;\n\n return (\n <div className=\"flex flex-row\">\n <CustomCheckbox disabled={readOnly} {...restProps} />\n </div>\n );\n};\n\nconst RequiredCheckbox = styled(AntCheckbox)`\n .ant-checkbox-inner {\n background-color: ${mapToken.colorPrimaryBg};\n }\n\n .ant-checkbox-checked .ant-checkbox-inner {\n background-color: ${mapToken.colorPrimary};\n }\n`;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","import { fileTypeFromBuffer } from \"file-type-buffer-browser\";\n\nexport function getFilesize(base64string: string) {\n const buffer = Buffer.from(base64string, \"base64\");\n const inKbs = buffer.length / 1e3;\n return `${Math.round((inKbs + Number.EPSILON) * 100) / 100} KB`;\n}\n\nexport async function getMimeType(base64string: string) {\n const mimeInfo = await fileTypeFromBuffer(\n Buffer.from(base64string, \"base64\")\n );\n if (!mimeInfo) {\n return {\n mime: \"text/plain\",\n ext: \"txt\",\n };\n }\n\n return mimeInfo;\n}\n\nexport const toBase64 = (file: File): Promise<string> =>\n new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = (e: any) => resolve(e.target.result.split(\",\")[1]);\n reader.onerror = (error) => reject(error);\n });\n\nexport function openBase64InNewTab(data: string, mimeType: string) {\n var byteCharacters = atob(data);\n var byteNumbers = new Array(byteCharacters.length);\n for (var i = 0; i < byteCharacters.length; i++) {\n byteNumbers[i] = byteCharacters.charCodeAt(i);\n }\n var byteArray = new Uint8Array(byteNumbers);\n var file = new Blob([byteArray], { type: mimeType + \";base64\" });\n var fileURL = URL.createObjectURL(file);\n window.open(fileURL);\n}\n","import React, { useContext, useRef } from \"react\";\nimport { Row, Space } from \"antd\";\nimport Field from \"@/common/Field\";\nimport { Image as ImageOoui } from \"@gisce/ooui\";\nimport ButtonWithTooltip from \"@/common/ButtonWithTooltip\";\nimport {\n FolderOpenOutlined,\n DownloadOutlined,\n ClearOutlined,\n} from \"@ant-design/icons\";\n\nimport { toBase64, getMimeType } from \"@/helpers/filesHelper\";\nimport iconMapper from \"@/helpers/iconMapper\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\ntype Props = {\n ooui: ImageOoui;\n};\n\nexport const Image = (props: Props) => {\n const { ooui } = props;\n const { required, id } = ooui;\n\n const Icon: React.ElementType = iconMapper(id) as any;\n\n if (Icon) {\n return <Icon />;\n }\n\n return (\n <Field required={required} {...props}>\n <ImageInput ooui={ooui} />\n </Field>\n );\n};\n\ninterface ImageInputProps {\n ooui: ImageOoui;\n value?: string;\n onChange?: (value: string | undefined) => void;\n}\n\nexport const ImageInput = (props: ImageInputProps) => {\n const { ooui, value, onChange } = props;\n const { readOnly } = ooui as ImageOoui;\n const inputFile = useRef(null);\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n const triggerChange = (changedValue?: string) => {\n onChange?.(changedValue);\n };\n\n async function downloadFile() {\n const fileType = await getMimeType(value!);\n const linkSource = `data:${fileType?.mime};base64,${value}`;\n const downloadLink = document.createElement(\"a\");\n\n downloadLink.href = linkSource;\n downloadLink.download = `image.${fileType?.ext}`;\n downloadLink.click();\n }\n\n async function onChangeFile(event: any) {\n event.stopPropagation();\n event.preventDefault();\n const file = event.target.files[0];\n const b64: string = await toBase64(file);\n triggerChange(b64);\n }\n\n function clearFile() {\n triggerChange(undefined);\n }\n\n return (\n <>\n <Row gutter={8} wrap={false} justify=\"center\">\n {value && (\n <img\n src={`data:image/*;base64,${value}`}\n style={{ maxWidth: \"100px\" }}\n />\n )}\n <input\n type=\"file\"\n id=\"file\"\n ref={inputFile}\n accept=\"image/*\"\n style={{ display: \"none\" }}\n onChange={onChangeFile}\n />\n </Row>\n <Row gutter={8} wrap={false} justify=\"center\" className=\"pt-5\">\n <Space>\n <ButtonWithTooltip\n tooltip={t(\"uploadNewImage\")}\n icon={<FolderOpenOutlined />}\n disabled={readOnly}\n onClick={() => {\n const fileUploadField = inputFile.current as any;\n fileUploadField.click();\n }}\n />\n <ButtonWithTooltip\n tooltip={t(\"download\")}\n disabled={!value}\n onClick={downloadFile}\n icon={<DownloadOutlined />}\n />\n <ButtonWithTooltip\n tooltip={t(\"clear\")}\n disabled={readOnly || !value}\n onClick={clearFile}\n icon={<ClearOutlined />}\n />\n </Space>\n </Row>\n </>\n );\n};\n","import React from \"react\";\nimport Field from \"@/common/Field\";\nimport { Char as CharOoui } from \"@gisce/ooui\";\nimport { WidgetProps } from \"@/types\";\nimport { GridUi } from \"@gisce/fiber-diagram\";\n\nexport const FiberGrid = (props: WidgetProps) => {\n const { ooui } = props;\n const { required } = ooui as CharOoui;\n\n return (\n <Field required={required} {...props}>\n <FiberGridInput />\n </Field>\n );\n};\n\ninterface FiberGridInputProps {\n value?: string;\n onChange?: (value: string) => void;\n}\n\nexport const FiberGridInput = (props: FiberGridInputProps) => {\n const { value, onChange } = props;\n\n if (!value) {\n return null;\n }\n\n // Validate string json\n try {\n JSON.parse(value);\n } catch (e) {\n console.log(e);\n return null;\n }\n\n return (\n <GridUi\n inputJson={value}\n onChange={(newValue) => {\n if (onChange) {\n onChange(newValue);\n }\n }}\n />\n );\n};\n","import {\n Tree as TreeOoui,\n Selection,\n Many2one,\n Boolean,\n Reference,\n} from \"@gisce/ooui\";\nimport { TreeView, Column } from \"@/types\";\n\nconst getTree = (treeView: TreeView): TreeOoui => {\n const xml = treeView.arch;\n const fields = treeView.fields;\n const tree = new TreeOoui(fields);\n tree.parse(xml);\n return tree;\n};\n\nconst getTableColumns = (\n tree: TreeOoui,\n components: any,\n context: any\n): Array<Column> => {\n const tableColumns = tree.columns.map((column) => {\n const type = column.type;\n const key = column.id;\n const component = components?.[type];\n let render;\n\n if (component) {\n render = (item: any) => {\n return component(item, key, column, context);\n };\n }\n\n return {\n key,\n dataIndex: key,\n title: column.label,\n render,\n sorter: (a: any, b: any) => {\n let aItem = a[key] || \"\",\n bItem = b[key] || \"\";\n\n if (type === \"many2one\") {\n aItem = a[key]?.value || \"\";\n bItem = b[key]?.value || \"\";\n }\n\n if (aItem < bItem) return -1;\n if (aItem > bItem) return 1;\n return 0;\n },\n };\n });\n return tableColumns;\n};\n\nconst getTableItems = (treeOoui: TreeOoui, results: Array<any>): Array<any> => {\n const tableItems = results.map((item: any) => {\n const parsedItem: any = {};\n Object.keys(item).map((key) => {\n if (key === \"id\") {\n parsedItem[key] = item[key];\n } else {\n const widget = treeOoui.findById(key);\n\n if (widget instanceof Reference) {\n parsedItem[key] = item[key];\n } else if (widget instanceof Selection) {\n const selection = widget;\n parsedItem[key] = item[key];\n } else if (widget instanceof Many2one) {\n parsedItem[key] = item[key] &&\n Array.isArray(item[key]) &&\n item[key].length === 2 && {\n model: widget.relation,\n id: item[key][0],\n value: item[key][1],\n };\n } else if (widget instanceof Boolean) {\n parsedItem[key] = item[key];\n } else if (widget) {\n parsedItem[key] = item[key] === false ? \"\" : item[key];\n } else {\n parsedItem[key] = item[key];\n }\n }\n });\n return parsedItem;\n });\n\n return tableItems;\n};\n\nfunction itemHasBooleans({ values, fields }: { values: any; fields: any }) {\n if (!fields) {\n return false;\n }\n return Object.keys(values).some((key) => {\n return fields[key] !== undefined && fields[key].type === \"boolean\";\n });\n}\n\nfunction convertBooleansToNumeric({\n values,\n fields,\n}: {\n values: any;\n fields: any;\n}) {\n if (!fields) {\n return values;\n }\n const filteredValues: any = {};\n Object.keys(values).forEach((key) => {\n if (fields[key] !== undefined && fields[key].type === \"boolean\") {\n filteredValues[key] = values[key] === true ? 1 : 0;\n }\n });\n return { ...values, ...filteredValues };\n}\n\nfunction getColorMap(colorsValue: any) {\n return getItemsAttributes(colorsValue, \"colors\");\n}\n\nfunction getStatusMap(values: any) {\n return getItemsAttributes(values, \"status\");\n}\n\nfunction getItemsAttributes(attributes: object[], attribute: string) {\n if (!attributes) {\n return undefined;\n }\n const map: any = {};\n attributes.forEach((entry: any) => {\n map[entry.id] = entry[attribute];\n });\n return map;\n}\n\nfunction sortResults({\n resultsToSort,\n sorter,\n fields,\n}: {\n resultsToSort: any[];\n sorter: any;\n fields: any;\n}) {\n if (!sorter) {\n return resultsToSort;\n }\n\n const { id: field, desc } = sorter;\n const order = desc === false ? \"ascend\" : \"descend\";\n\n const type = fields[field].type;\n\n const sortFn = (a: any, b: any) => {\n let aItem = a[field] || \"\",\n bItem = b[field] || \"\";\n\n if (type === \"many2one\") {\n aItem = a[field]?.[1] || \"\";\n bItem = b[field]?.[1] || \"\";\n }\n\n if (aItem === bItem) {\n return 0;\n }\n\n if (order === \"ascend\") {\n return aItem > bItem ? 1 : -1;\n }\n\n return aItem < bItem ? 1 : -1;\n };\n\n return resultsToSort.sort(sortFn);\n}\n\nfunction hasActualValues(obj: Record<string, any>): boolean {\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n if (obj[key] !== undefined) {\n return true;\n }\n }\n }\n return false;\n}\n\nexport {\n getTableColumns,\n getTableItems,\n getTree,\n convertBooleansToNumeric,\n itemHasBooleans,\n getColorMap,\n getStatusMap,\n sortResults,\n hasActualValues,\n};\n","import { One2manyItem } from \"@/widgets/base/one2many/One2manyInput\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport { TreeView, View, ViewType } from \"@/types\";\nimport { getColorMap, getTree } from \"./treeHelper\";\n\ntype ReadObjectValuesOptions = {\n items: One2manyItem[];\n model: string;\n context?: any;\n currentView: ViewType;\n formView: {\n fields: any;\n };\n treeView: {\n arch?: string;\n fields: any;\n };\n};\n\nconst readObjectValues = async (\n options: ReadObjectValuesOptions\n): Promise<[One2manyItem[], any]> => {\n const {\n items,\n model,\n formView,\n treeView,\n context,\n currentView = {},\n } = options;\n\n const temporalItems: One2manyItem = items.filter(\n (item) => item.operation !== \"original\"\n );\n\n // We get a number array of id's\n const idsToFetch = items\n .filter((item) => item.operation === \"original\")\n .map((item) => item.id) as number[];\n\n const fieldsToRetrieve: { [key: string]: any } = {\n form: formView.fields,\n tree: treeView.fields,\n };\n\n let values = [],\n evaluatedColorsForTree;\n\n if (currentView === \"tree\" && treeView?.arch) {\n const colors = getTree(treeView as TreeView)?.colors;\n const results = await ConnectionProvider.getHandler().readEvalUiObjects({\n model,\n ids: idsToFetch,\n arch: treeView?.arch!,\n fields: treeView!.fields,\n context,\n attrs: colors && {\n colors,\n },\n });\n values = results[0];\n evaluatedColorsForTree = getColorMap(results[1]);\n } else {\n values = await ConnectionProvider.getHandler().readObjects({\n model,\n ids: idsToFetch,\n fields: fieldsToRetrieve[currentView as string],\n context,\n });\n }\n\n const filteredValues = values.map((result: any) => {\n const resultFormValues: any = {};\n Object.keys(result).forEach((key) => {\n if (\n fieldsToRetrieve[currentView as string].hasOwnProperty(key) ||\n key === \"id\"\n ) {\n resultFormValues[key] = result[key];\n }\n });\n return resultFormValues;\n });\n\n // We fill the values property of the One2manyItem with the retrieved values from the API\n const originalItemsWithFetchedValues: One2manyItem[] = items.map((item) => {\n const fetchedItemValues = filteredValues.find(\n (itemValues: any) => itemValues.id === item.id\n );\n\n const itemWithFetchedValues = {\n ...item,\n };\n\n if (currentView === \"form\") {\n itemWithFetchedValues[\"values\"] = fetchedItemValues;\n } else if (currentView === \"tree\") {\n itemWithFetchedValues[\"treeValues\"] = fetchedItemValues;\n }\n return itemWithFetchedValues;\n });\n\n return [\n originalItemsWithFetchedValues.concat(temporalItems),\n evaluatedColorsForTree,\n ];\n};\n\ntype RemoveItemOptions = {\n model: string;\n activeId: number;\n fieldName: string;\n idsToRemove: number[];\n fields: any;\n isMany2many: boolean;\n};\n\nconst removeItems = async (options: RemoveItemOptions) => {\n const { model, activeId, fieldName, idsToRemove, fields, isMany2many } =\n options;\n\n const values: any = {};\n values[fieldName] = [];\n\n for (const idToRemove of idsToRemove) {\n values[fieldName].push([isMany2many ? 3 : 2, idToRemove]);\n }\n\n await ConnectionProvider.getHandler().update({\n model,\n id: activeId,\n values,\n fields,\n });\n};\n\ntype LinkItemOptions = {\n model: string;\n activeId: number;\n fieldName: string;\n id: number;\n fields: any;\n};\n\nconst linkItem = async (options: LinkItemOptions) => {\n const { model, activeId, fieldName, id, fields } = options;\n\n const values: any = {};\n values[fieldName] = [[4, id]];\n\n await ConnectionProvider.getHandler().update({\n model,\n id: activeId,\n values,\n fields,\n });\n};\n\nconst getNextPendingId = (items: One2manyItem[]) => {\n const negativeIds: number[] = items\n .filter((item) => item.id && item.id < 0)\n .map((item) => item.id!);\n if (negativeIds.length === 0) {\n return -1;\n } else {\n return Math.min(...negativeIds) - 1;\n }\n};\n\nconst convertToPlain2ManyValues = (values: any, fields: any) => {\n const result: any = {};\n Object.keys(values).forEach((key) => {\n if (\n fields.hasOwnProperty(key) &&\n (fields[key].type === \"one2many\" || fields[key].type === \"many2many\") &&\n values[key] &&\n values[key]?.items\n ) {\n result[key] = values[key].items.filter(\n (item: One2manyItem) => item.operation !== \"pendingRemove\"\n );\n } else {\n result[key] = values[key];\n }\n });\n return result;\n};\nexport {\n readObjectValues,\n removeItems,\n linkItem,\n getNextPendingId,\n convertToPlain2ManyValues,\n};\n","import React, { useContext, useState } from \"react\";\nimport { Timeline as TimelineOoui } from \"@gisce/ooui\";\nimport Field from \"@/common/Field\";\nimport { One2manyItem, One2manyValue } from \"../base/one2many/One2manyInput\";\nimport useDeepCompareEffect from \"use-deep-compare-effect\";\nimport { Views, ViewType } from \"@/types\";\nimport { FormContext, FormContextType } from \"@/context/FormContext\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport { Spin, Alert, Timeline as AntTimeline } from \"antd\";\nimport { readObjectValues } from \"@/helpers/one2manyHelper\";\nimport { FormModal } from \"../modals/FormModal\";\n\ntype TimelineProps = {\n ooui: TimelineOoui;\n};\n\ntype TimelineInputProps = TimelineProps & {\n value?: One2manyValue;\n onChange?: (value: One2manyValue) => void;\n views: Views;\n};\n\nexport const Timeline = (props: TimelineProps) => {\n const { ooui } = props;\n const { relation, context, views: oouiViews } = ooui;\n const [isLoading, setIsLoading] = useState<boolean>(true);\n const [error, setError] = useState<string>();\n const [views, setViews] = useState<Views>(new Map<string, any>());\n const formContext = useContext(FormContext) as FormContextType;\n const { getContext } = formContext || {};\n\n useDeepCompareEffect(() => {\n fetchData();\n }, [ooui]);\n\n const getViewData = async (type: ViewType) => {\n if (oouiViews && oouiViews[type]) {\n return oouiViews[type];\n }\n return await ConnectionProvider.getHandler().getView({\n model: relation,\n type,\n context: { ...getContext?.(), ...context },\n });\n };\n\n const fetchData = async () => {\n setIsLoading(true);\n setError(undefined);\n\n try {\n const formView = await getViewData(\"form\");\n const treeView = await getViewData(\"tree\");\n views.set(\"form\", formView);\n views.set(\"tree\", treeView);\n setViews(views);\n } catch (err) {\n setError(err as any);\n } finally {\n setIsLoading(false);\n }\n };\n\n if (isLoading) {\n return <Spin />;\n }\n\n if (error) {\n return <Alert className=\"mt-10\" message={error} type=\"error\" banner />;\n }\n\n return (\n <Field type={\"array\"} {...props}>\n <TimelineInput ooui={ooui} views={views} />\n </Field>\n );\n};\n\nexport const TimelineInput = (props: TimelineInputProps) => {\n const { value, views, ooui, onChange } = props;\n const { items = [] } = value || {};\n\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [error, setError] = useState<string>();\n const [showFormModal, setShowFormModal] = useState<boolean>(false);\n const [modalItem, setModalItem] = useState<One2manyItem>();\n const { relation, context, readOnly, summaryField, titleField } = ooui;\n const itemsToShow = items.filter((item) => item.values);\n\n const formContext = useContext(FormContext) as FormContextType;\n const { getContext } = formContext || {};\n\n useDeepCompareEffect(() => {\n fetchData();\n }, [items]);\n\n const triggerChange = (changedValue: Array<One2manyItem>) => {\n onChange?.({\n items: changedValue,\n });\n };\n\n async function fetchData() {\n setIsLoading(true);\n setError(undefined);\n\n try {\n const [itemsWithValues] = await readObjectValues({\n treeView: {\n fields: views.get(\"tree\").fields,\n arch: views.get(\"tree\").arch\n },\n formView: {\n fields: views.get(\"form\").fields,\n },\n model: relation,\n items,\n context: { ...getContext?.(), ...context },\n currentView: \"form\",\n });\n\n triggerChange(itemsWithValues);\n } catch (err) {\n setError(err as any);\n } finally {\n setIsLoading(false);\n }\n }\n\n if (error) {\n return <Alert className=\"mt-10\" message={error} type=\"error\" banner />;\n }\n\n if (isLoading) {\n return <Spin />;\n }\n\n return (\n <>\n <AntTimeline style={{ padding: \"1rem\" }}>\n {itemsToShow.map((item, index) => {\n return (\n <div key={index}>\n <AntTimeline.Item key={index}>\n <div\n style={{ display: \"inline-block\", cursor: \"pointer\" }}\n onClick={() => {\n setModalItem(\n itemsToShow.find(\n (searchItem) => item.id === searchItem.id\n )\n );\n setShowFormModal(true);\n }}\n >\n <strong>{item.values?.[titleField]}</strong>\n </div>\n <br />\n <div\n style={{ display: \"inline-block\", cursor: \"pointer\" }}\n onClick={() => {\n setModalItem(\n itemsToShow.find(\n (searchItem) => item.id === searchItem.id\n )\n );\n setShowFormModal(true);\n }}\n >\n {item.values?.[summaryField]}\n </div>\n </AntTimeline.Item>\n </div>\n );\n })}\n </AntTimeline>\n <FormModal\n formView={views.get(\"form\")}\n model={relation}\n id={modalItem?.id}\n values={modalItem?.values}\n defaultValues={modalItem?.defaultValues}\n visible={showFormModal}\n onSubmitSucceed={() => {\n setShowFormModal(false);\n }}\n parentContext={{ ...getContext?.(), ...context }}\n onCancel={() => {\n setShowFormModal(false);\n }}\n readOnly={readOnly}\n postSaveAction={fetchData}\n />\n </>\n );\n};\n","import React from \"react\";\nimport { Tooltip, theme } from \"antd\";\nimport { Statistic, Card } from \"antd\";\nimport { Indicator as IndicatorOoui } from \"@gisce/ooui\";\nimport { WidgetProps } from \"@/types\";\nimport Field from \"@/common/Field\";\nimport { QuestionCircleOutlined } from \"@ant-design/icons\";\nimport iconMapper from \"@/helpers/iconMapper\";\nconst { useToken } = theme;\n\ntype IndicatorProps = WidgetProps & {\n ooui: IndicatorOoui;\n value?: number;\n};\n\nexport const Indicator = (props: IndicatorProps) => {\n const { ooui } = props;\n\n return (\n <Field ooui={ooui}>\n <IndicatorInput ooui={ooui} />\n </Field>\n );\n};\n\ntype IndicatorInputProps = {\n ooui: IndicatorOoui;\n value?: any;\n};\n\nconst IndicatorInput = (props: IndicatorInputProps) => {\n const { token } = useToken();\n const { ooui, value } = props;\n const title = (\n <>\n <span>{ooui.label} </span>\n {ooui.tooltip && (\n <Tooltip title={ooui.tooltip}>\n <QuestionCircleOutlined\n className=\"pr-1 text-xs\"\n style={{ color: token.colorPrimaryBg }}\n />\n </Tooltip>\n )}\n </>\n );\n const Icon: React.ElementType = iconMapper(ooui.icon) as any;\n let formattedValue = value;\n if (ooui.selectionValues.size) {\n formattedValue = ooui.selectionValues.get(value);\n } else if (Array.isArray(value)) {\n formattedValue = value[1];\n }\n const field = (\n <Statistic\n title={title}\n prefix={Icon && <Icon />}\n suffix={ooui.suffix}\n value={formattedValue}\n />\n );\n if (ooui.card) {\n return <Card>{field}</Card>;\n } else {\n return field;\n }\n};\n","import { One2manyItem } from \"@/widgets/base/one2many/One2manyInput\";\nimport { Form as FormOoui } from \"@gisce/ooui\";\n\nconst filteredValues = (values: any, fields: any) => {\n if (!fields) {\n return values;\n }\n const filteredValues: any = {};\n Object.keys(values).forEach((key) => {\n if (fields[key] === undefined) {\n // console.log(`${key} is not in fields`);\n filteredValues[key] = values[key];\n } else if (values[key] === false && fields[key].type !== \"boolean\") {\n // Do nothing - filter the field.\n } else if (fields[key].type === \"boolean\") {\n const boolValue = values[key];\n if (boolValue === 0) {\n filteredValues[key] = false;\n } else if (boolValue === 1) {\n filteredValues[key] = true;\n } else {\n filteredValues[key] = values[key];\n }\n } else {\n filteredValues[key] = values[key];\n }\n });\n return filteredValues;\n};\n\nexport const processValues = (values: any, fields: any) => {\n const filterBooleans = filteredValues(values, fields);\n return filterBooleans;\n};\n\nexport const getTouchedValues = ({\n source,\n target,\n fields,\n}: {\n source: any;\n target: any;\n fields: any;\n}) => {\n const differences: any = {};\n Object.keys(target).forEach((key) => {\n const is2Many = fields[key]\n ? fields[key].type === \"one2many\" || fields[key].type === \"many2many\"\n : false;\n\n if (is2Many) {\n const sourceValue = JSON.stringify(source[key]);\n const targetValue = JSON.stringify(target[key]);\n if (sourceValue === targetValue) {\n return;\n }\n\n const nonOriginalItems =\n target[key]?.items?.filter(\n (item: One2manyItem) => item.operation !== \"original\"\n ) || [];\n\n if (nonOriginalItems.length > 0) {\n differences[key] = target[key];\n }\n } else if (Array.isArray(target[key])) {\n if (source[key] === undefined) {\n differences[key] = target[key];\n } else if (fields[key].type === \"many2one\") {\n if (!Array.isArray(source[key])) {\n // This will mean the source many2one value is a numeric id\n const numericId = source[key];\n const [targetNumericId] = target[key];\n if (numericId !== targetNumericId) {\n differences[key] = target[key];\n }\n } else {\n const sourceValue = JSON.stringify(source[key]);\n const targetValue = JSON.stringify(target[key]);\n if (sourceValue !== targetValue) {\n differences[key] = target[key];\n }\n }\n } else {\n const sourceValue = JSON.stringify(source[key]);\n const targetValue = JSON.stringify(target[key]);\n if (sourceValue !== targetValue) {\n differences[key] = target[key];\n }\n }\n } else if (source[key] !== target[key]) {\n if (target[key] === undefined) {\n differences[key] = null;\n } else {\n differences[key] = target[key];\n }\n }\n });\n return differences;\n};\n\nexport const checkFieldsType = ({\n changedFields,\n formOoui,\n types,\n}: {\n changedFields: string[];\n formOoui: FormOoui;\n types: string[];\n}) => {\n const valuesChecked = changedFields.map((key) => {\n const fieldType = formOoui?.findById(key)?.type!;\n return types.includes(fieldType);\n });\n return valuesChecked.some((i) => i === true);\n};\n\nexport const mergeFieldsDomain = ({\n fieldsDomain,\n fields,\n}: {\n fieldsDomain: any;\n fields: any;\n}) => {\n const output: any = {};\n\n Object.keys(fields).forEach((key) => {\n output[key] = fields[key];\n\n if (fieldsDomain[key]) {\n output[key].domain = fieldsDomain[key];\n }\n });\n\n return output;\n};\n\nexport const getValuesForDomain = (domain: any[]) => {\n const values: any = {};\n\n if (!domain || !Array.isArray(domain) || domain?.length === 0) {\n return {};\n }\n\n domain.forEach((entry) => {\n if (entry?.[1] === \"=\") {\n values[entry[0]] = entry[2];\n }\n });\n\n return values;\n};\n\nexport const getOnChangePayload = ({\n onChangeFieldActionArgs,\n values,\n parentValues = {},\n}: {\n onChangeFieldActionArgs: any[];\n values: any;\n parentValues?: any;\n}) => {\n const payload: any = {};\n onChangeFieldActionArgs.forEach((arg: string) => {\n const splittedArg = arg.split(\"\");\n\n if (arg === \"True\") {\n payload[arg] = true;\n } else if (arg === \"False\") {\n payload[arg] = false;\n } else if (values[arg]) {\n payload[arg] = values[arg];\n } else if (\n splittedArg[0] === \"'\" &&\n splittedArg[splittedArg.length - 1] === \"'\" &&\n splittedArg.filter((i: string) => i === \"'\").length === 2\n ) {\n payload[arg] = arg.replace(/'/g, \"\");\n } else if (splittedArg.includes(\"'\")) {\n // This is a string with a variable in it.\n // TODO: pending implement.\n payload[arg] = arg;\n } else if (arg.indexOf(\"parent.\") !== -1) {\n const parentKey = arg.replace(\"parent.\", \"\");\n payload[arg] = parentValues[parentKey] || false;\n } else {\n payload[arg] = false;\n }\n });\n return payload;\n};\n\nexport const mergeSearchFields = (searchFields: any[]) => {\n const mergedSearchFields = {\n primary: [],\n secondary: [],\n };\n\n searchFields.forEach((sf) => {\n if (!sf) {\n return;\n }\n\n mergedSearchFields.primary = mergedSearchFields.primary.concat(sf.primary);\n mergedSearchFields.secondary = mergedSearchFields.secondary.concat(\n sf.secondary\n );\n });\n\n return {\n primary: mergedSearchFields.primary.filter(onlyUnique),\n secondary: mergedSearchFields.secondary.filter(onlyUnique),\n };\n};\n\nfunction onlyUnique(value: any, index: number, self: any) {\n return self.indexOf(value) === index;\n}\n\nexport const transformPlainMany2Ones = ({\n values,\n fields,\n}: {\n values: any;\n fields: any;\n}) => {\n let reformattedValues: { [key: string]: any } = {};\n\n Object.keys(values).forEach((key) => {\n const value = values[key];\n\n if (\n fields[key] &&\n fields[key].type === \"many2one\" &&\n value &&\n Array.isArray(value) &&\n value.length === 2\n ) {\n reformattedValues[key] = value[0];\n } else {\n reformattedValues[key] = value;\n }\n });\n\n return reformattedValues;\n};\n\n\nexport const colorFromString = (text: string) => {\n let hash = 0;\n text = text.toString().padEnd(10, '0');\n for (let i = 0; i < text.length; i++) {\n hash = text.charCodeAt(i) + ((hash << 5) - hash);\n }\n let hexColour = '#';\n for (let i = 0; i < 3; i++) {\n var value = (hash >> (i * 8)) & 0xFF;\n hexColour += ('00' + value.toString(16)).slice(-2);\n }\n return hexColour;\n}\n\nexport const colorTextFromBackground = (color: string) => {\n function getRGB(c: string): number {\n return parseInt(c, 16) || parseInt(c)\n }\n\n function getsRGB(c: string ) {\n return getRGB(c) / 255 <= 0.03928\n ? getRGB(c) / 255 / 12.92\n : Math.pow((getRGB(c) / 255 + 0.055) / 1.055, 2.4)\n }\n\n function getLuminance(hexColor: string) {\n return (\n 0.2126 * getsRGB(hexColor.substr(1, 2)) +\n 0.7152 * getsRGB(hexColor.substr(3, 2)) +\n 0.0722 * getsRGB(hexColor.substr(-2))\n )\n }\n\n function getContrast(f: string, b: string) {\n const L1 = getLuminance(f)\n const L2 = getLuminance(b)\n return (Math.max(L1, L2) + 0.05) / (Math.min(L1, L2) + 0.05)\n }\n\n function getTextColor(bgColor: string) {\n const whiteContrast = getContrast(bgColor, '#ffffff')\n const blackContrast = getContrast(bgColor, '#000000')\n\n return whiteContrast > blackContrast ? '#ffffff' : '#000000'\n }\n\n return getTextColor(color);\n\n}\n\n\nexport const stringFormat = (text: string, values: any): string => {\n return text.replace(/\\{([^}]+)\\}/g, (match, key) => values[key] !== undefined ? values[key] : match);\n}\n","import React from \"react\";\nimport Field from \"@/common/Field\";\nimport { WidgetProps } from \"@/types\";\nimport { Tag as AntdTag, TagProps } from 'antd';\nimport { isPresetStatusColor, isPresetColor } from 'antd/lib/_util/colors'\nimport { colorFromString } from \"@/helpers/formHelper\";\n\nexport const Tag = (props: WidgetProps) => {\n return (\n <Field {...props}>\n <TagInput {...props}/>\n </Field>\n );\n};\n\nexport const TagInput = (props: any) => {\n const {ooui, value} = props;\n let formattedValue = value;\n let colorValue = value;\n if (ooui.selectionValues.size) {\n formattedValue = ooui.selectionValues.get(value);\n } else if (Array.isArray(value)) {\n colorValue = value[0];\n formattedValue = value[1];\n }\n if (!value) {\n return null\n }\n const color = ooui.colors === \"auto\" ? colorFromString(colorValue) : ooui.colors[colorValue] || colorFromString(colorValue);\n return (\n <CustomTag color={color}>{formattedValue}</CustomTag>\n );\n}\n\n\nexport const CustomTag = (props: TagProps) => {\n let { color } = props;\n let style = {}\n if (!isPresetStatusColor(props.color) && !isPresetColor(props.color)) {\n style = {\n color: color,\n borderColor: color,\n borderStyle: \"solid\",\n borderWidth: \"1px\",\n }\n color = `${color}20`;\n }\n return <AntdTag {...props} style={style} color={color}>{props.children}</AntdTag>\n}\n","import React, { useContext, useState } from \"react\";\nimport { Tags as TagsOoui } from \"@gisce/ooui\";\nimport Field from \"@/common/Field\";\nimport { WidgetProps } from \"@/types\";\nimport { One2manyItem, One2manyValue } from \"../base/one2many/One2manyInput\";\nimport useDeepCompareEffect from \"use-deep-compare-effect\";\nimport { FormContext, FormContextType } from \"@/context/FormContext\";\nimport { Alert, Select } from \"antd\";\nimport { colorFromString, transformPlainMany2Ones } from \"@/helpers/formHelper\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport { CustomTag } from \"@/widgets/custom/Tag\";\n\ntype TagsProps = WidgetProps & {\n ooui: TagsOoui;\n};\n\ntype TagsInputProps = TagsProps & {\n value?: One2manyValue;\n onChange?: (value: One2manyValue) => void;\n};\n\nexport const Tags = (props: TagsProps) => {\n const { ooui } = props;\n\n return (\n <Field type={\"array\"} {...props}>\n <TagsInput ooui={ooui} />\n </Field>\n );\n};\n\nexport const TagsInput = (props: TagsInputProps) => {\n const { value, ooui, onChange } = props;\n const { items = [] } = value || {};\n const itemsToShow = items\n .filter((item) => item.operation !== \"pendingRemove\")\n .map((item) => item.id) as number[];\n\n const [options, setOptions] = useState<any[]>([]);\n const [error, setError] = useState<string>();\n const [isLoadingOptions, setIsLoadingOptions] = useState<boolean>(false);\n const { relation, context, readOnly, field } = ooui;\n\n const formContext = useContext(FormContext) as FormContextType;\n const { getContext } = formContext || {};\n\n useDeepCompareEffect(() => {\n fetchOptions();\n }, [items]);\n\n const triggerChange = (changedValue: Array<One2manyItem>) => {\n onChange?.({\n items: changedValue,\n });\n };\n\n async function fetchOptions() {\n setIsLoadingOptions(true);\n let params: any[] = [];\n try {\n if (readOnly) {\n params = [[\"id\", \"in\", itemsToShow]];\n }\n if (ooui.domain) {\n const evaluatedDomain =\n await ConnectionProvider.getHandler().evalDomain({\n domain: ooui.domain,\n values: transformPlainMany2Ones({\n fields: formContext?.getFields(),\n values: formContext.getPlainValues(),\n }),\n fields: formContext?.getFields(),\n context: formContext.getContext(),\n });\n params = [...params, ...evaluatedDomain];\n }\n\n const optionsRead = await ConnectionProvider.getHandler().search({\n model: relation,\n params: params,\n fields: [field],\n context: { ...getContext?.(), ...context },\n });\n const options = optionsRead.map((item: any) => {\n const value = item[field];\n let formattedValue = value;\n if (Array.isArray(value)) {\n formattedValue = value[1];\n }\n return { label: formattedValue, value: item.id };\n });\n setOptions(options);\n } catch (err) {\n setError(err as any);\n } finally {\n setIsLoadingOptions(false);\n }\n }\n\n const onChangeSelected = (ids: number[]) => {\n const newItems: One2manyItem[] = items.map((item) => {\n if (ids.includes(item.id as number)) {\n if (item.operation == \"pendingRemove\") {\n return {\n ...item,\n operation: \"pendingLink\",\n };\n } else {\n return item;\n }\n } else {\n return { id: item.id, operation: \"pendingRemove\" };\n }\n });\n const currentIds = newItems.map((item) => item.id);\n ids\n .filter((id) => !currentIds.includes(id))\n .map((id) => {\n newItems.push({ id, operation: \"pendingLink\" });\n });\n triggerChange(newItems);\n };\n\n const tagRender = (props: any) => {\n const { label, closable, onClose } = props;\n const onPreventMouseDown = (event: React.MouseEvent<HTMLSpanElement>) => {\n event.preventDefault();\n event.stopPropagation();\n };\n const color = colorFromString(label);\n return (\n <CustomTag\n color={color}\n onMouseDown={onPreventMouseDown}\n closable={closable}\n onClose={onClose}\n closeIcon={<span style={{color}}>X</span>}\n >\n {label}\n </CustomTag>\n );\n };\n\n if (error) {\n return <Alert className=\"mt-10\" message={error} type=\"error\" banner />;\n }\n\n return (\n <>\n <div className=\"flex flex-row\">\n <Select\n mode=\"multiple\"\n value={options.length ? itemsToShow : []}\n tagRender={tagRender}\n bordered={!readOnly}\n disabled={readOnly}\n options={options}\n onChange={onChangeSelected}\n loading={isLoadingOptions}\n ></Select>\n </div>\n </>\n );\n};\n","import React from \"react\";\n\nimport {\n Notebook,\n Group,\n Label,\n Char,\n Text,\n Button,\n ButtonGroup,\n Selection,\n Many2one,\n Boolean,\n Integer,\n Float,\n Date,\n DateTime,\n Time,\n One2many,\n Separator,\n Form,\n Tree,\n Reference,\n Binary,\n Url,\n Email,\n FloatTime,\n ProgressBar,\n MultiCheckbox,\n Markdown,\n Radio,\n Switch,\n Steps,\n Tag,\n CodeEditor,\n} 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 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, 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!); const attrs: any = {};\n if (colors) {\n attrs.colors = colors;\n }\n if (status) {\n attrs.status = status;\n }\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 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 };\n};\n","import { DEFAULT_SEARCH_LIMIT } from \"@/hooks/useSearch\";\nimport { View } from \"@/types\";\nimport React, { useEffect, useRef, useState } from \"react\";\n\nexport type ActionViewContextType = {\n title: string;\n availableViews: View[];\n currentView: View;\n setCurrentView: (view: View) => void;\n formIsSaving?: boolean;\n setFormIsSaving?: (value: boolean) => void;\n formHasChanges?: boolean;\n setFormHasChanges?: (value: boolean) => void;\n onFormSave?: () => Promise<{ succeed: boolean; id: number }>;\n formRef?: any;\n searchTreeRef?: any;\n onNewClicked: () => void;\n currentId?: number;\n setCurrentId?: (id?: number) => void;\n currentItemIndex?: number;\n setCurrentItemIndex?: (value?: number) => void;\n results?: any[];\n setResults?: (value: any[]) => void;\n currentModel?: string;\n removingItem?: boolean;\n setRemovingItem?: (value: boolean) => void;\n formIsLoading?: boolean;\n setFormIsLoading?: (value: boolean) => void;\n treeIsLoading?: boolean;\n setTreeIsLoading?: (value: boolean) => void;\n graphIsLoading?: boolean;\n setGraphIsLoading?: (value: boolean) => void;\n attachments?: any;\n setAttachments?: (value: any) => void;\n selectedRowItems?: any[];\n setSelectedRowItems?: (value: any[]) => void;\n duplicatingItem?: boolean;\n setDuplicatingItem?: (value: boolean) => void;\n searchParams?: any[];\n setSearchParams?: (value: any[]) => void;\n searchVisible?: boolean;\n setSearchVisible?: (value: boolean) => void;\n sorter: any;\n setSorter: (sorter: any) => void;\n totalItems: number;\n setTotalItems: (totalItems: number) => void;\n searchTreeNameSearch?: string;\n setSearchTreeNameSearch?: (searchString?: string) => void;\n previousView?: View;\n setPreviousView?: (view: View) => void;\n goToResourceId?: (id: number) => Promise<void>;\n searchValues?: any;\n setSearchValues?: (value: any) => void;\n limit?: number;\n setLimit?: (value: number) => void;\n setTitle?: (value: string) => void;\n};\n\nexport const ActionViewContext =\n React.createContext<ActionViewContextType | null>(null);\n\ntype ActionViewProviderProps = ActionViewContextType & {\n children: React.ReactNode;\n};\n\nconst ActionViewProvider = (props: ActionViewProviderProps): any => {\n const {\n children,\n currentView,\n title: titleProps,\n setCurrentView,\n availableViews,\n formRef,\n searchTreeRef,\n onNewClicked,\n currentId,\n setCurrentId,\n setResults,\n results,\n currentItemIndex,\n setCurrentItemIndex,\n currentModel,\n sorter,\n setSorter,\n totalItems,\n setTotalItems,\n setSelectedRowItems,\n selectedRowItems,\n searchTreeNameSearch,\n setSearchTreeNameSearch,\n goToResourceId,\n limit: limitProps,\n } = props;\n\n const [formIsSaving, setFormIsSaving] = useState<boolean>(false);\n const [formHasChanges, setFormHasChanges] = useState<boolean>(false);\n const [removingItem, setRemovingItem] = useState<boolean>(false);\n const [formIsLoading, setFormIsLoading] = useState<boolean>(true);\n const [treeIsLoading, setTreeIsLoading] = useState<boolean>(true);\n const [attachments, setAttachments] = useState<any>([]);\n const [duplicatingItem, setDuplicatingItem] = useState<boolean>(false);\n const [searchParams, setSearchParams] = useState<any[]>([]);\n const [searchVisible, setSearchVisible] = useState<boolean>(false);\n const [graphIsLoading, setGraphIsLoading] = useState<boolean>(true);\n const [previousView, setPreviousView] = useState<View>();\n const [searchValues, setSearchValues] = useState<any>({});\n const [limit, setLimit] = useState<number>(\n limitProps !== undefined ? limitProps : DEFAULT_SEARCH_LIMIT\n );\n const [title, setTitle] = useState<string>(titleProps);\n\n useEffect(() => {\n if (results && results.length > 0 && !currentItemIndex) {\n setCurrentItemIndex?.(0);\n setCurrentId?.(results[0].id);\n }\n }, [results]);\n\n useEffect(() => {\n setLimit(limitProps !== undefined ? limitProps : DEFAULT_SEARCH_LIMIT);\n }, [limitProps]);\n\n useEffect(() => {\n if (availableViews.length === 1) {\n setPreviousView(availableViews[0]);\n } else if (availableViews.length > 1) {\n setPreviousView(\n availableViews.filter((view) => view.view_id !== currentView.view_id)[0]\n );\n }\n }, [availableViews]);\n\n useEffect(() => {\n if (\n previousView?.view_id === currentView.view_id &&\n availableViews.length > 1\n ) {\n setPreviousView(\n availableViews.filter((view) => view.view_id !== currentView.view_id)[0]\n );\n }\n }, [currentView]);\n\n const callOnFormSave = async () => {\n return await (formRef.current as any)?.submitForm();\n };\n\n return (\n <ActionViewContext.Provider\n value={{\n title,\n currentView,\n setCurrentView,\n availableViews,\n formIsSaving,\n setFormIsSaving,\n formHasChanges,\n setFormHasChanges,\n formRef,\n searchTreeRef,\n onFormSave: callOnFormSave,\n onNewClicked,\n currentId,\n setCurrentId,\n currentItemIndex,\n setCurrentItemIndex,\n results,\n setResults,\n currentModel,\n removingItem,\n setRemovingItem,\n formIsLoading,\n setFormIsLoading,\n treeIsLoading,\n setTreeIsLoading,\n attachments,\n setAttachments,\n selectedRowItems,\n setSelectedRowItems,\n duplicatingItem,\n setDuplicatingItem,\n setSearchParams,\n searchParams,\n searchVisible,\n setSearchVisible,\n sorter,\n setSorter,\n totalItems,\n setTotalItems,\n searchTreeNameSearch,\n setSearchTreeNameSearch,\n setGraphIsLoading,\n graphIsLoading,\n previousView,\n setPreviousView,\n goToResourceId,\n searchValues,\n setSearchValues,\n limit,\n setLimit,\n setTitle,\n }}\n >\n {children}\n </ActionViewContext.Provider>\n );\n};\n\nexport default ActionViewProvider;\n","import { InitialViewData, View, ViewType } from \"@/types\";\nimport { ShortcutApi } from \"@/ui/FavouriteButton\";\nimport React, { useState } from \"react\";\n\nexport type TabManagerContextType = {\n openAction: ({\n domain,\n context,\n model,\n views,\n title,\n target,\n initialView,\n action_id,\n action_type,\n res_id,\n values,\n forced_values,\n }: {\n domain: any;\n context: any;\n model: string;\n views: Array<any>;\n title: string;\n target: string;\n initialView: InitialViewData;\n action_id: number;\n action_type: string;\n res_id?: number | boolean;\n values?: any;\n forced_values?: any;\n }) => void;\n openRelate: ({\n relateData,\n fields,\n values,\n action_id,\n action_type,\n }: {\n relateData: any;\n fields: any;\n values: any;\n action_id: number;\n action_type: string;\n }) => void;\n openDefaultActionForModel: ({\n model,\n values,\n forced_values,\n initialViewType,\n res_id,\n domain,\n }: {\n model: string;\n values?: any;\n forced_values?: any;\n initialViewType?: ViewType;\n res_id?: number;\n domain?: any;\n }) => void;\n activeKey: string;\n onChangeTab: (key: string) => void;\n onRemoveTab: (key: string) => void;\n openShortcut: (shortcut: ShortcutApi) => void;\n tabs: any[];\n currentView?: View;\n setCurrentView?: (view?: View) => void;\n currentId?: number;\n setCurrentId?: (id?: number) => void;\n};\n\nexport const TabManagerContext = React.createContext<TabManagerContextType | null>(\n null\n);\n\ntype TabManagerProviderProps = TabManagerContextType & {\n children: React.ReactNode;\n};\n\nconst TabManagerProvider = (props: TabManagerProviderProps): any => {\n const {\n children,\n openAction,\n openRelate,\n openDefaultActionForModel,\n openShortcut,\n activeKey,\n onChangeTab,\n onRemoveTab,\n tabs,\n } = props;\n\n const [currentView, setCurrentView] = useState<View>();\n const [currentId, setCurrentId] = useState<number>();\n\n return (\n <TabManagerContext.Provider\n value={{\n openAction,\n openRelate,\n openDefaultActionForModel,\n activeKey,\n openShortcut,\n onChangeTab,\n onRemoveTab,\n tabs,\n currentId,\n currentView,\n setCurrentId,\n setCurrentView,\n }}\n >\n {children}\n </TabManagerContext.Provider>\n );\n};\n\nexport default TabManagerProvider;\n","import { FormView, GenerateReportOptions, ViewType } from \"@/types\";\nimport React, {\n useContext,\n useRef,\n useState,\n forwardRef,\n useImperativeHandle,\n} from \"react\";\nimport showErrorDialog from \"@/ui/ActionErrorDialog\";\nimport { openBase64InNewTab, getMimeType } from \"@/helpers/filesHelper\";\nimport { parseContext } from \"@gisce/ooui\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport { Modal, Spin } from \"antd\";\nimport {\n TabManagerContext,\n TabManagerContextType,\n} from \"@/context/TabManagerContext\";\nimport { FormModal } from \"@/widgets/modals/FormModal\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport { transformPlainMany2Ones, stringFormat } from \"@/helpers/formHelper\";\n\nexport type ContentRootContextType = {\n processAction: ({\n actionData,\n fields,\n values,\n context,\n }: {\n actionData: any;\n fields: any;\n values: any;\n context?: any;\n onRefreshParentValues?: () => void;\n }) => Promise<any>;\n globalValues?: any;\n};\n\ntype ActionModalOpts = {\n model?: string;\n domain?: any;\n context: any;\n formView?: FormView;\n actionData?: any;\n};\n\nexport const ContentRootContext =\n React.createContext<ContentRootContextType | null>(null);\n\ntype ContentRootProviderProps = {\n children: React.ReactNode;\n globalValues?: any;\n};\n\nconst callRefreshValues = async (fns: any[]) => {\n for (let i = 0; i < fns.length; i++) {\n await fns?.[i]?.();\n }\n};\n\nconst ContentRootProvider = (\n props: ContentRootProviderProps,\n ref: any\n): any => {\n const { children, globalValues = {} } = props;\n const reportInProgressInterval = useRef<any>();\n const waitingForReport = useRef<boolean>();\n const [reportGenerating, setReportGenerating] = useState<boolean>(false);\n const tabManagerContext = useContext(\n TabManagerContext\n ) as TabManagerContextType;\n const { openAction } = tabManagerContext || {};\n const onRefreshParentValues = useRef<any>([]);\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n useImperativeHandle(ref, () => ({\n openActionModal,\n }));\n\n // Action modal state\n const [actionModalVisible, setActionModalVisible] = useState<boolean>(false);\n\n const [actionModalOptions, setActionModalOptions] = useState<ActionModalOpts>(\n {\n context: {},\n }\n );\n\n async function generateReport(options: GenerateReportOptions) {\n const { reportData, fields, values, context = {} } = options;\n\n const {\n context: reportContext,\n model,\n datas = {},\n report_name,\n type,\n } = reportData;\n\n if (type !== \"ir.actions.report.xml\") {\n showErrorDialog(`${type} action not supported`);\n return;\n }\n\n const { ids } = datas || {};\n\n let idsToExecute = ids || [];\n\n const reportContextParsed =\n typeof reportContext === \"string\"\n ? parseContext({\n context: reportContext,\n fields,\n values,\n })\n : reportContext;\n\n try {\n const newReportId = await ConnectionProvider.getHandler().createReport({\n model,\n name: report_name,\n datas,\n ids: idsToExecute,\n context: { ...context, ...reportContextParsed },\n });\n\n setReportGenerating(true);\n\n waitingForReport.current = true;\n reportInProgressInterval.current = setInterval(() => {\n evaluateReportStatus(newReportId);\n }, 1000);\n } catch (err) {\n waitingForReport.current = false;\n clearInterval(reportInProgressInterval.current);\n showErrorDialog(err);\n setReportGenerating(false);\n }\n }\n\n async function evaluateReportStatus(id: any) {\n let reportState;\n try {\n reportState = await ConnectionProvider.getHandler().getReport({\n id,\n });\n if (reportState.state && waitingForReport.current === true) {\n waitingForReport.current = false;\n clearInterval(reportInProgressInterval.current);\n setReportGenerating(false);\n const fileType: any = await getMimeType(reportState.result);\n openBase64InNewTab(reportState.result, fileType.mime);\n }\n } catch (error) {\n waitingForReport.current = false;\n clearInterval(reportInProgressInterval.current);\n setReportGenerating(false);\n showErrorDialog(error.exception || error);\n }\n }\n\n async function processAction({\n actionData,\n fields,\n values,\n context,\n onRefreshParentValues: onRefreshParentValuesFn,\n }: {\n actionData: any;\n fields: any;\n values: any;\n context?: any;\n onRefreshParentValues?: any;\n }) {\n const { type } = actionData;\n onRefreshParentValues.current.push(onRefreshParentValuesFn);\n\n if (type === \"ir.actions.report.xml\") {\n return await generateReport({\n reportData: actionData,\n fields,\n values,\n context,\n });\n } else if (type === \"ir.actions.act_window\") {\n return await runAction({actionData, fields, values, context});\n } else if (type === \"ir.actions.act_url\") {\n window.open(stringFormat(actionData.url, {...values, context}), \"_blank\");\n } else {\n showErrorDialog(`${type} action not supported`);\n return {};\n }\n }\n\n async function runAction({\n actionData: _actionData,\n fields = {},\n values = {},\n context = {},\n }: {\n actionData: any;\n fields?: any;\n values?: any;\n context?: any;\n }) {\n let actionData = _actionData;\n\n if (!_actionData.res_model) {\n actionData = (\n await ConnectionProvider.getHandler().readObjects({\n model: \"ir.actions.act_window\",\n ids: [parseInt(_actionData.id)],\n context,\n })\n )[0];\n }\n\n const responseContext =\n typeof actionData?.context === \"string\"\n ? parseContext({\n context: actionData.context,\n fields,\n values: { ...values, ...globalValues },\n })\n : actionData.context;\n\n const mergedContext = {\n ...context,\n ...responseContext,\n };\n\n let parsedDomain = [];\n\n if (actionData.domain) {\n parsedDomain = await ConnectionProvider.getHandler().evalDomain({\n domain: actionData.domain,\n values: transformPlainMany2Ones({\n fields,\n values: { ...values, ...globalValues },\n }),\n fields,\n context: mergedContext,\n });\n }\n\n // -- Possible values for target property --\n // * new ==> modal\n // * current ==> new tab\n // * undefined ==> new tab\n if (actionData.target === \"new\") {\n const formView = (await ConnectionProvider.getHandler().getView({\n model: actionData.res_model,\n type: \"form\",\n id: actionData?.view_id?.[0] || undefined,\n context: mergedContext,\n })) as FormView;\n\n openActionModal({\n domain: parsedDomain,\n model: actionData.res_model,\n formView,\n context: mergedContext,\n });\n\n return {};\n } else {\n const { initialView, views } = await getViewsAndInitialView({\n model: actionData.res_model,\n context: mergedContext,\n view_mode: actionData.view_mode,\n views: actionData.views,\n });\n\n openAction?.({\n target: \"current\",\n context: mergedContext,\n domain: parsedDomain,\n model: actionData.res_model,\n views: views,\n title: actionData.name,\n initialView,\n action_id: actionData.id,\n action_type: actionData.type,\n });\n\n return { closeParent: true };\n }\n }\n\n function openActionModal({\n domain,\n model,\n formView,\n context,\n actionData,\n }: {\n domain: any;\n model: string;\n formView: FormView;\n context: any;\n actionData?: any;\n }) {\n if (actionModalVisible) {\n openNewActionModal({ domain, model, formView, context, actionData });\n } else {\n setActionModalOptions({ domain, model, context, formView, actionData });\n setActionModalVisible(true);\n }\n }\n\n async function openNewActionModal({\n domain,\n model,\n formView,\n context,\n actionData,\n }: {\n domain: any;\n model: string;\n formView: FormView;\n context: any;\n actionData?: any;\n }) {\n setActionModalOptions({\n domain: undefined,\n model: undefined,\n context: {},\n formView: undefined,\n actionData: undefined,\n });\n setActionModalVisible(false);\n await new Promise((resolve) => setTimeout(resolve, 300));\n setActionModalOptions({ domain, model, context, formView, actionData });\n setActionModalVisible(true);\n }\n\n async function onFormModalSucceed() {\n callRefreshValues(onRefreshParentValues.current);\n onRefreshParentValues.current = [];\n setActionModalVisible(false);\n setActionModalOptions({\n domain: undefined,\n model: undefined,\n context: {},\n formView: undefined,\n actionData: undefined,\n });\n }\n\n return (<>\n <ContentRootContext.Provider\n value={{\n processAction,\n globalValues,\n }}\n >\n <>\n {children}\n <Modal\n title={t(\"generatingReport\")}\n open={reportGenerating}\n footer={null}\n closable={false}\n centered\n maskClosable={false}\n >\n <Spin />\n </Modal>\n <FormModal\n buttonModal\n parentContext={actionModalOptions.context}\n model={actionModalOptions.model!}\n formView={actionModalOptions.formView}\n visible={actionModalVisible}\n onSubmitSucceed={onFormModalSucceed}\n onCancel={() => {\n callRefreshValues(onRefreshParentValues.current);\n onRefreshParentValues.current = [];\n setActionModalVisible(false);\n setActionModalOptions({\n domain: undefined,\n model: undefined,\n context: {},\n formView: undefined,\n actionData: undefined,\n });\n }}\n showFooter={false}\n actionDomain={actionModalOptions.domain}\n isMenuAction={actionModalOptions?.actionData !== undefined}\n actionData={actionModalOptions?.actionData}\n />\n </>\n </ContentRootContext.Provider>\n </>);\n};\n\nasync function getViewsAndInitialView({\n views,\n view_mode,\n model,\n context,\n view_id,\n}: {\n views: any[];\n view_mode: string;\n model: string;\n context: any;\n view_id?: number;\n}) {\n const retriedViewData = [];\n let initialView;\n\n if (views) {\n for (const view of views) {\n const viewData = await ConnectionProvider.getHandler().getView({\n model,\n type: view[1],\n id: view[0],\n context,\n });\n retriedViewData.push([viewData.view_id, view[1]]);\n }\n } else {\n const viewTypes = view_mode.split(\",\");\n for (const viewType of viewTypes) {\n const viewData = await ConnectionProvider.getHandler().getView({\n model,\n type: viewType as ViewType,\n context,\n });\n retriedViewData.push([viewData.view_id, viewType]);\n }\n }\n if (views && views.length > 0) {\n const [id, type] = views[0];\n initialView = {\n id,\n type,\n };\n } else if (!view_id) {\n const type = view_mode.split(\",\")[0];\n const [retrievedViewId] = retriedViewData.find(([_, viewType]) => viewType === type)!;\n initialView = { id: retrievedViewId, type };\n } else {\n initialView = {\n id: view_id,\n type: view_mode.split(\",\")[0],\n };\n }\n\n return { views: retriedViewData, initialView };\n}\n\nexport default forwardRef(ContentRootProvider);\n","import { parseError } from \"@/helpers/errorHelper\";\nimport { Alert } from \"antd\";\nimport React from \"react\";\nimport { Interweave } from \"interweave\";\n\nexport const ErrorAlert = ({\n error,\n className,\n}: {\n error: any;\n className: string;\n}) => {\n let messageContent;\n let messageType = \"error\";\n\n if (\n typeof error === \"string\" &&\n error.indexOf(\" -- \") !== -1 &&\n error.indexOf(\"\\n\\n\") !== -1\n ) {\n const { message, type, title } = parseError(error);\n messageContent = <Interweave content={`${title}<br />${message}`} />;\n messageType = type;\n } else {\n messageContent = error.message\n ? JSON.stringify(error.message)\n : JSON.stringify(error);\n }\n return (\n <Alert\n className={className}\n message={messageContent}\n type={messageType as any}\n banner\n />\n );\n};\n","import React, {\n useState,\n forwardRef,\n useImperativeHandle,\n useEffect,\n useRef,\n useContext,\n} from \"react\";\nimport { Form as FormOoui, parseContext } from \"@gisce/ooui\";\nimport {\n Form as AntForm,\n Button,\n Divider,\n Space,\n Row,\n Alert,\n Spin,\n message,\n} from \"antd\";\nimport Measure from \"react-measure\";\nimport { CheckOutlined, CloseOutlined } from \"@ant-design/icons\";\nimport debounce from \"lodash/debounce\";\n\nimport Container from \"@/widgets/containers/Container\";\nimport {\n processValues,\n getTouchedValues,\n checkFieldsType,\n mergeFieldsDomain,\n getValuesForDomain,\n getOnChangePayload,\n} from \"@/helpers/formHelper\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport showUnsavedChangesDialog from \"@/ui/UnsavedChangesDialog\";\nimport formErrorsDialog from \"@/ui/FormErrorsDialog\";\nimport showErrorDialog from \"@/ui/ActionErrorDialog\";\nimport showWarningDialog from \"@/ui/WarningDialog\";\nimport FormProvider, {\n FormContext,\n FormContextType,\n} from \"@/context/FormContext\";\nimport { FormView, One2manyItem } from \"@/index\";\nimport {\n FormModalContext,\n FormModalContextType,\n} from \"@/context/FormModalContext\";\n\nimport {\n ActionViewContext,\n ActionViewContextType,\n} from \"@/context/ActionViewContext\";\n\nimport {\n ContentRootContext,\n ContentRootContextType,\n} from \"@/context/ContentRootContext\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport { convertToPlain2ManyValues } from \"@/helpers/one2manyHelper\";\nimport { ErrorAlert } from \"@/ui/ErrorAlert\";\n\nexport type FormProps = {\n model: string;\n readOnly?: boolean;\n id?: number;\n formView?: FormView;\n values?: any;\n showFooter?: boolean;\n getDataFromAction?: boolean;\n mustClearAfterSave?: boolean;\n submitMode?: \"api\" | \"values\" | \"2many\";\n onSubmitSucceed?: (\n id?: number,\n values?: any,\n formValues?: any,\n x2manyPendingLink?: boolean\n ) => void;\n onSubmitError?: (error: any) => void;\n onCancel?: () => void;\n onFieldsChange?: (values: any) => void;\n postSaveAction?: (event: any) => Promise<void>;\n insideButtonModal?: boolean;\n parentContext?: any;\n actionDomain?: any;\n visible?: boolean;\n rootForm?: boolean;\n defaultValues?: any;\n forcedValues?: any;\n parentWidth?: number;\n};\n\nconst WIDTH_BREAKPOINT = 800;\n\nfunction Form(props: FormProps, ref: any) {\n const {\n model,\n id,\n onCancel: propsOnCancel,\n onSubmitSucceed: propsOnSubmitSucceed,\n showFooter = false,\n getDataFromAction = false,\n onFieldsChange,\n onSubmitError: propsOnSubmitError,\n readOnly = false,\n mustClearAfterSave = false,\n submitMode = \"api\",\n values: valuesProps,\n formView: formViewProps,\n postSaveAction,\n insideButtonModal = false,\n parentContext = {},\n actionDomain,\n visible = true,\n rootForm = false,\n defaultValues,\n forcedValues = {},\n parentWidth,\n } = props;\n const { t, lang } = useContext(LocaleContext) as LocaleContextType;\n\n const [isSubmitting, setIsSubmitting] = useState<boolean>(false);\n const [error, setError] = useState<string>();\n const [formOoui, setFormOoui] = useState<FormOoui>();\n const [antForm] = AntForm.useForm();\n const [arch, setArch] = useState<string>();\n const [fields, setFields] = useState<any>();\n const formModalContext = useContext(FormModalContext) as FormModalContextType;\n const [containerWidth, setContainerWidth] = useState<any>();\n const [defaultGetCalled, setDefaultGetCalled] = useState<boolean>(false);\n\n const createdId = useRef<number>();\n const originalFormValues = useRef<any>({});\n const lastAssignedValues = useRef<any>({});\n const warningIsShown = useRef<boolean>(false);\n const formSubmitting = useRef<boolean>(false);\n const x2manyPendingLink = useRef<boolean>(false);\n\n const widthToEvaluate =\n parentWidth !== undefined ? parentWidth : containerWidth;\n const responsiveBehaviour = widthToEvaluate < WIDTH_BREAKPOINT;\n\n const formContext = useContext(FormContext) as FormContextType;\n const { activeId: parentId, getPlainValues: getParentPlainValues } =\n formContext || {};\n\n const actionViewContext = useContext(\n ActionViewContext\n ) as ActionViewContextType;\n const {\n setFormIsSaving = undefined,\n setFormHasChanges = undefined,\n setCurrentId = undefined,\n setFormIsLoading = undefined,\n setAttachments = undefined,\n title = undefined,\n setTitle = undefined,\n } = (rootForm ? actionViewContext : {}) || {};\n\n const contentRootContext = useContext(\n ContentRootContext\n ) as ContentRootContextType;\n const { processAction, globalValues } = contentRootContext || {};\n\n useImperativeHandle(ref, () => ({\n submitForm,\n getFields,\n getValues,\n getPlainValues,\n getContext,\n fetchValues,\n cancelUnsavedChanges,\n clearAndReload: () => {\n createdId.current = undefined;\n setFormOoui(undefined);\n fetchData();\n },\n }));\n\n useEffect(() => {\n setError(undefined);\n\n if (!model && !formViewProps) {\n return;\n }\n\n if (!visible) {\n createdId.current = undefined;\n setFormOoui(undefined);\n return;\n }\n\n // In the case we set the id to undefined for creating a new item\n if (\n (id === undefined && fields) ||\n (id !== undefined && fields && id < 0)\n ) {\n createdId.current = undefined;\n setFormOoui(undefined);\n }\n\n fetchData();\n }, [id, model, valuesProps, formViewProps, visible]);\n\n useEffect(() => {\n if (defaultGetCalled) {\n checkFieldsChanges({\n elementHasLostFocus: true,\n });\n setDefaultGetCalled(false);\n }\n }, [defaultGetCalled]);\n\n const onSubmitSucceed = (\n id?: number,\n values?: any,\n formValues?: any,\n x2manyPendingLink?: boolean\n ) => {\n setFormHasChanges?.(false);\n setFormIsSaving?.(false);\n propsOnSubmitSucceed?.(id, values, formValues, x2manyPendingLink);\n setCurrentId?.(id);\n };\n\n const onCancel = () => {\n setFormIsSaving?.(false);\n propsOnCancel?.();\n };\n\n const onSubmitError = (error: any) => {\n setFormIsSaving?.(false);\n propsOnSubmitError?.(error);\n };\n\n function getCurrentId() {\n return id || createdId.current;\n }\n\n function getFields() {\n return fields;\n }\n\n function getValues() {\n const values = {\n ...getCurrentValues(fields),\n ...getAdditionalValues(),\n };\n\n for (const key in values) {\n if (values[key] === undefined) {\n delete values[key];\n }\n }\n\n return values;\n }\n\n function getPlainValues() {\n const values: any = getValues();\n const fields: any = getFields();\n let reformattedValues: { [key: string]: any } = {};\n\n Object.keys(values).forEach((key) => {\n const value = values[key];\n\n if (\n fields[key] &&\n fields[key].type === \"many2one\" &&\n value &&\n Array.isArray(value) &&\n value.length === 2\n ) {\n reformattedValues[key] = value[0];\n } else if (\n fields[key] &&\n (fields[key].type === \"one2many\" || fields[key].type === \"many2many\") &&\n value &&\n value.items\n ) {\n reformattedValues[key] = value.items\n .filter((item: One2manyItem) => item.operation !== \"pendingRemove\")\n .map((val: any) => val.id);\n } else {\n reformattedValues[key] = value;\n }\n });\n\n return reformattedValues;\n }\n\n function getFormValues() {\n const values = {\n ...getCurrentValues(fields),\n };\n\n for (const key in values) {\n if (values[key] === undefined) {\n delete values[key];\n }\n }\n\n return values;\n }\n\n function getContext() {\n return { ...parentContext, ...formOoui?.context };\n }\n\n function getActiveIdsContext() {\n const currentId = getCurrentId()!;\n\n if (!currentId) {\n return {};\n }\n return { active_id: getCurrentId()!, active_ids: [getCurrentId()!] };\n }\n\n function getAdditionalValues() {\n return {\n id: getCurrentId()!,\n active_id: getCurrentId()!,\n active_ids: [getCurrentId()!],\n parent_id: parentId,\n ...globalValues,\n };\n }\n\n const getDefaultValues = async (fields: any) => {\n const formContext = getCurrentId() ? formOoui?.context : {};\n return await ConnectionProvider.getHandler().defaultGet({\n model,\n fields,\n context: { ...parentContext, ...formContext },\n extraValues: defaultValues,\n });\n };\n\n const formHasChanges = () => {\n return (\n Object.keys(\n getTouchedValues({\n source: originalFormValues.current,\n target: getCurrentValues(fields),\n fields,\n })\n ).length !== 0\n );\n };\n\n const getCurrentValues = (fields: any) => {\n const currentValues = antForm.getFieldsValue(true);\n return processValues(currentValues, fields);\n };\n\n const setFieldValue = (field: string, value?: string) => {\n assignNewValuesToForm({\n values: {\n ...processValues(antForm.getFieldsValue(true), fields),\n [field]: value,\n },\n fields,\n reset: false,\n });\n };\n\n const getFieldValue = (field: string) => {\n const values = antForm.getFieldsValue(true);\n return values[field];\n };\n\n async function checkIfFormHasErrors() {\n try {\n await antForm.validateFields();\n return false;\n } catch (verror) {\n message.error(t(\"fillRequiredFields\"));\n return true;\n }\n }\n const fetchData = async () => {\n setError(undefined);\n setFormIsLoading?.(true);\n\n let view;\n\n try {\n if (formViewProps) {\n view = { arch: formViewProps.arch, fields: formViewProps.fields };\n } else {\n view = await getFormView();\n }\n\n const { fields, arch } = view;\n setFields(fields);\n setArch(arch);\n\n await fetchValues({\n fields,\n arch,\n });\n } catch (err) {\n setError(err?.message ? err.message + err.stack : err);\n setFormIsLoading?.(false);\n // setLoading(false);\n }\n };\n\n type FetchValuesOptions = {\n fields?: any;\n arch?: string;\n forceRefresh?: boolean;\n };\n\n const fetchValues = async (options?: FetchValuesOptions) => {\n let values;\n let _fields;\n let _arch;\n let hasDefaultGetCalled;\n\n setFormIsLoading?.(true);\n setError(undefined);\n\n if (options?.fields) {\n _fields = options.fields;\n _arch = options.arch;\n } else {\n _fields = fields;\n _arch = arch;\n }\n\n if (valuesProps && options?.forceRefresh !== true) {\n values = valuesProps;\n } else {\n ({ values, defaultGetCalled: hasDefaultGetCalled } =\n await fetchValuesFromApi({\n fields: _fields,\n arch: _arch!,\n }));\n }\n\n if (actionDomain) {\n values = { ...getValuesForDomain(actionDomain), ...values };\n }\n\n originalFormValues.current = processValues(values, _fields);\n\n assignNewValuesToForm({\n values,\n fields: _fields,\n reset: true,\n isDefaultGet: hasDefaultGetCalled,\n });\n parseForm({ fields: _fields, arch: _arch!, values });\n setFormIsLoading?.(false);\n setFormHasChanges?.(false);\n\n if (hasDefaultGetCalled) {\n setDefaultGetCalled(true);\n }\n };\n\n const cancelUnsavedChanges = async () => {\n return new Promise(async (resolve) => {\n if (formHasChanges()) {\n showUnsavedChangesDialog({\n lang,\n onOk: () => {\n onCancel?.();\n resolve(true);\n },\n onCancel: () => {\n resolve(false);\n },\n });\n } else {\n onCancel?.();\n resolve(true);\n }\n });\n };\n\n const getFormView = async (): Promise<FormView> => {\n if (getDataFromAction) {\n const action =\n await ConnectionProvider.getHandler().getActionStringForModel(model);\n const viewsForAction =\n await ConnectionProvider.getHandler().getViewsForAction({\n action,\n context: parentContext,\n });\n return viewsForAction.views.get(\"form\");\n }\n\n return (await ConnectionProvider.getHandler().getView({\n model,\n type: \"form\",\n context: parentContext,\n })) as FormView;\n };\n\n const assignNewValuesToForm = ({\n values: newValues,\n fields,\n reset,\n isDefaultGet = false,\n }: {\n values: any;\n fields: any;\n reset: boolean;\n isDefaultGet?: boolean;\n }) => {\n const currentValues = reset ? {} : antForm.getFieldsValue(true);\n const mergedValues = { ...currentValues, ...newValues };\n const valuesProcessed = processValues(mergedValues, fields);\n const fieldsToUpdate = Object.keys(fields).map((fieldName) => {\n const fieldValue =\n valuesProcessed[fieldName] !== undefined\n ? valuesProcessed[fieldName]\n : undefined;\n return {\n name: fieldName,\n touched: false,\n value: fieldValue,\n };\n });\n\n if (!isDefaultGet) {\n lastAssignedValues.current = valuesProcessed;\n }\n\n antForm.setFields(fieldsToUpdate);\n };\n\n const fetchValuesFromApi = async ({\n fields,\n arch,\n }: {\n fields: any;\n arch: string;\n }) => {\n let values = {};\n let defaultGetCalled = false;\n\n if (getCurrentId()!) {\n values = (\n await ConnectionProvider.getHandler().readObjects({\n model,\n ids: [getCurrentId()!],\n fields,\n context: parentContext,\n })\n )[0];\n\n const results = await ConnectionProvider.getHandler().search({\n params: [\n [\"res_model\", \"=\", model],\n [\"res_id\", \"=\", getCurrentId()!],\n ],\n fields: [\"id\", \"name\"],\n context: getContext(),\n model: \"ir.attachment\",\n });\n setAttachments?.(results);\n } else {\n setAttachments?.([]);\n values = await getDefaultValues(fields);\n defaultGetCalled = true;\n }\n return { values, defaultGetCalled };\n };\n\n const submitApi = async (options?: { callOnSubmitSucceed?: boolean }) => {\n const { callOnSubmitSucceed = true } = options || {};\n\n if (getCurrentId()) {\n const touchedValues = getTouchedValues({\n source: originalFormValues.current,\n target: getCurrentValues(fields),\n fields,\n });\n\n await ConnectionProvider.getHandler().update({\n model,\n id: getCurrentId()!,\n values: { ...touchedValues, ...forcedValues },\n fields,\n context: {\n ...parentContext,\n ...formOoui?.context,\n },\n });\n originalFormValues.current = getCurrentValues(fields);\n } else {\n const currentValues = getCurrentValues(fields);\n\n const newId = await ConnectionProvider.getHandler().create({\n model,\n values: { ...currentValues, ...forcedValues },\n fields,\n context: {\n ...parentContext,\n ...formOoui?.context,\n },\n });\n createdId.current = newId;\n originalFormValues.current = currentValues;\n }\n\n if (postSaveAction) {\n await postSaveAction([getCurrentId()]);\n }\n\n if (!insideButtonModal && callOnSubmitSucceed) {\n onSubmitSucceed?.(getCurrentId(), getValues(), getFormValues());\n }\n };\n\n const submitValues = async (options?: { callOnSubmitSucceed?: boolean }) => {\n const { callOnSubmitSucceed = true } = options || {};\n\n if (!insideButtonModal && callOnSubmitSucceed) {\n onSubmitSucceed?.(getCurrentId(), getValues(), getFormValues());\n }\n };\n\n const submitForm = async (options?: { callOnSubmitSucceed?: boolean }) => {\n let submitSucceed = false;\n const { callOnSubmitSucceed = true } = options || {};\n formSubmitting.current = true;\n\n setError(undefined);\n\n if (\n x2manyPendingLink.current &&\n !formHasChanges() &&\n getCurrentId()! &&\n callOnSubmitSucceed\n ) {\n formSubmitting.current = false;\n setFormHasChanges?.(false);\n onSubmitSucceed?.(\n getCurrentId(),\n getValues(),\n getFormValues(),\n x2manyPendingLink.current\n );\n x2manyPendingLink.current = false;\n const currentId = getCurrentId()!;\n\n if (mustClearAfterSave) {\n createdId.current = undefined;\n assignNewValuesToForm({ values: {}, fields, reset: true });\n }\n\n return { succeed: true, id: currentId };\n }\n\n if (!formHasChanges() && getCurrentId()! && callOnSubmitSucceed) {\n formSubmitting.current = false;\n setFormHasChanges?.(false);\n onCancel?.();\n return { succeed: true, id: getCurrentId()! };\n }\n\n if (await checkIfFormHasErrors()) {\n formSubmitting.current = false;\n formErrorsDialog(lang);\n return { succeed: false, id: getCurrentId()! };\n }\n\n setIsSubmitting(true);\n setFormIsSaving?.(true);\n\n try {\n if (submitMode === \"api\") {\n await submitApi(options);\n } else {\n await submitValues(options);\n }\n\n if (mustClearAfterSave) {\n createdId.current = undefined;\n assignNewValuesToForm({ values: {}, fields, reset: true });\n }\n\n await fetchValues({ forceRefresh: true });\n submitSucceed = true;\n message.success(t(\"savedRegisters\"));\n } catch (err) {\n formSubmitting.current = false;\n setIsSubmitting(false);\n setFormIsSaving?.(false);\n onSubmitError?.(err);\n message.error(t(\"errorWhileSavingForm\"));\n setError(err?.message ? err.message : err);\n } finally {\n formSubmitting.current = false;\n setFormIsSaving?.(false);\n setIsSubmitting(false);\n }\n\n return { succeed: submitSucceed, id: getCurrentId()! };\n };\n\n const parseForm = ({\n fields,\n arch,\n values,\n operationInProgress = false,\n }: {\n arch: string;\n fields: any;\n values: any;\n operationInProgress?: boolean;\n }) => {\n const ooui = new FormOoui(fields);\n // TODO: Here we must inject `values` to the ooui parser in order to evaluate arch+values and get the new form container\n ooui.parse(arch, {\n readOnly: readOnly || operationInProgress,\n values: convertToPlain2ManyValues(\n {\n ...values,\n ...getAdditionalValues(),\n },\n fields\n ),\n });\n setFormOoui(ooui);\n\n if (ooui.string && ooui.string !== title) {\n setTitle?.(ooui.string);\n }\n\n if (formModalContext && ooui.string)\n formModalContext.setTitle?.(ooui.string);\n };\n\n const checkFieldsChanges = async ({\n elementHasLostFocus = false,\n }: {\n elementHasLostFocus?: boolean;\n }) => {\n if (formSubmitting.current) return;\n\n const touchedValues = getTouchedValues({\n source: lastAssignedValues.current,\n target: getCurrentValues(fields),\n fields,\n });\n\n const changedFields = Object.keys(touchedValues);\n\n if (changedFields.length !== 0) {\n // We check if there are any field of type text, email, url or char inside the changed values\n // in order to ignore the call, because it will fire when element lost focus\n if (\n checkFieldsType({\n changedFields,\n formOoui: formOoui!,\n types: [\n \"text\",\n \"codeeditor\",\n \"email\",\n \"url\",\n \"char\",\n \"float\",\n \"float_time\",\n \"integer\",\n \"many2one\",\n ],\n }) &&\n elementHasLostFocus !== true\n ) {\n return;\n } else {\n const values = processValues(antForm.getFieldsValue(true), fields);\n lastAssignedValues.current = values;\n\n onFieldsChange?.(values);\n setFormHasChanges?.(true);\n\n evaluateChanges(changedFields);\n }\n }\n };\n\n const debouncedCheckFieldsChanges = debounce(checkFieldsChanges, 100);\n\n const evaluateChanges = async (changedFields: any) => {\n try {\n for (let i = 0; i < changedFields.length; i += 1) {\n const changedField = changedFields[i];\n await processFieldOnChange(changedField);\n }\n } catch (err) {\n showErrorDialog(err);\n }\n };\n\n const processFieldOnChange = async (fieldName: string) => {\n const onChangeFieldAction = formOoui?.onChangeFields[fieldName];\n\n if (!onChangeFieldAction) {\n parseForm({\n fields,\n arch: arch!,\n values: getCurrentValues(fields),\n });\n return;\n }\n\n const payload = getOnChangePayload({\n values: {\n ...getCurrentValues(fields),\n context: {\n ...parentContext,\n ...formOoui?.context,\n },\n },\n parentValues: getParentPlainValues?.(),\n onChangeFieldActionArgs: onChangeFieldAction.args,\n });\n\n const response = await ConnectionProvider.getHandler().executeOnChange({\n model,\n action: onChangeFieldAction.method,\n ids: getCurrentId()! ? [getCurrentId()!] : [],\n payload,\n fields,\n });\n\n if (response.value) {\n const processedValues = {\n ...getCurrentValues(fields),\n ...response.value,\n };\n parseForm({ fields, arch: arch!, values: processedValues });\n assignNewValuesToForm({\n values: processedValues,\n fields: fields,\n reset: false,\n });\n }\n\n if (\n response.warning &&\n response.warning.title &&\n response.warning.message &&\n !warningIsShown.current\n ) {\n const { title, message } = response.warning;\n warningIsShown.current = true;\n showWarningDialog(title, message, () => {\n warningIsShown.current = false;\n });\n }\n\n if (response.domain && Object.keys(response.domain).length > 0) {\n const proccessedFields = mergeFieldsDomain({\n fieldsDomain: response.domain,\n fields,\n });\n\n parseForm({\n fields: proccessedFields,\n arch: arch!,\n values: getCurrentValues(proccessedFields),\n });\n setFields(proccessedFields);\n }\n };\n\n async function runObjectButton({\n action,\n context,\n }: {\n action: string;\n context: any;\n }) {\n const response = await ConnectionProvider.getHandler().execute({\n model,\n action,\n payload: [getCurrentId()!],\n context: {\n ...formOoui?.context,\n ...parentContext,\n ...context,\n },\n });\n\n if (\n typeof response === \"object\" &&\n response !== null &&\n Object.keys(response).length === 0 &&\n insideButtonModal\n ) {\n onSubmitSucceed?.(getCurrentId(), getValues(), getFormValues());\n } else if (\n response.type &&\n response.type === \"ir.actions.act_window_close\"\n ) {\n onSubmitSucceed?.(getCurrentId(), getValues(), getFormValues());\n } else if (response.type) {\n let responseContext = {};\n\n if (response.context) {\n responseContext = parseContext({\n context: response.context,\n fields,\n values: getValues(),\n });\n }\n\n await runAction({\n actionData: response,\n context: { ...context, ...responseContext },\n });\n } else {\n await fetchValues({ forceRefresh: true });\n }\n }\n\n async function runWorkflowButton({ action }: { action: string }) {\n const response = await ConnectionProvider.getHandler().executeWorkflow({\n model,\n action,\n payload: getCurrentId()!,\n });\n\n if (response.type && response.type === \"ir.actions.act_window_close\") {\n onSubmitSucceed?.(getCurrentId(), getValues(), getFormValues());\n } else {\n await fetchValues({ forceRefresh: true });\n }\n }\n\n async function runActionButton({\n action,\n context,\n }: {\n action: string;\n context: any;\n }) {\n const actionData = (\n await ConnectionProvider.getHandler().readObjects({\n model: \"ir.actions.actions\",\n ids: [parseInt(action)],\n context: parentContext,\n })\n )[0];\n\n await runAction({ actionData, context });\n }\n\n async function runAction({\n actionData,\n context,\n }: {\n actionData: any;\n context: any;\n }) {\n const { closeParent } =\n (await processAction?.({\n actionData,\n fields,\n values: getValues(),\n context: {\n ...parentContext,\n ...formOoui?.context,\n ...context,\n },\n onRefreshParentValues: () => {\n fetchValues({ forceRefresh: true });\n },\n })) || {};\n\n if (!rootForm && closeParent) {\n onSubmitSucceed?.(getCurrentId(), getValues(), getFormValues());\n }\n }\n\n function elementHasLostFocus() {\n checkFieldsChanges({ elementHasLostFocus: true });\n }\n\n function updateOperationInProgress(value: boolean) {\n parseForm({\n fields,\n arch: arch!,\n values: getCurrentValues(fields),\n operationInProgress: value,\n });\n }\n\n async function executeButtonAction({\n type,\n action,\n context,\n }: {\n type: string;\n action: string;\n context?: any;\n }) {\n // If the type of the button it's a cancel, we just close our form\n if (type === \"cancel\") {\n onCancel?.();\n return;\n }\n\n // We check for required fields\n if (await checkIfFormHasErrors()) {\n formErrorsDialog(lang);\n return;\n }\n\n let mustBlockButtons = false;\n\n try {\n if (formHasChanges() || getCurrentId() === undefined) {\n mustBlockButtons = true;\n updateOperationInProgress(true);\n if (submitMode === \"2many\") {\n await submitApi({ callOnSubmitSucceed: false });\n x2manyPendingLink.current = true;\n } else {\n await submitForm({ callOnSubmitSucceed: false });\n }\n }\n\n const additionalContext = x2manyPendingLink.current\n ? getActiveIdsContext()\n : {};\n\n const updatedContext = { ...context, ...additionalContext };\n\n if (type === \"object\") {\n await runObjectButton({ action, context: updatedContext });\n } else if (type === \"workflow\") {\n await runWorkflowButton({ action });\n } else if (type === \"action\") {\n await runActionButton({ action, context: updatedContext });\n }\n mustBlockButtons && updateOperationInProgress(false);\n } catch (err) {\n mustBlockButtons && updateOperationInProgress(false);\n showErrorDialog(err);\n }\n }\n\n const content = () => {\n if (!formOoui && !error) {\n return <Spin />;\n }\n\n if (!model && !formViewProps) {\n return null;\n }\n\n if (!visible) {\n return null;\n }\n\n return (\n <>\n <FormProvider\n getValues={getValues}\n getPlainValues={getPlainValues}\n getFields={getFields}\n domain={actionDomain}\n activeId={id}\n activeModel={model}\n setFieldValue={setFieldValue}\n getFieldValue={getFieldValue}\n executeButtonAction={executeButtonAction}\n getContext={getContext}\n submitForm={submitForm}\n fetchValues={fetchValues}\n formHasChanges={formHasChanges}\n elementHasLostFocus={elementHasLostFocus}\n >\n <AntForm\n form={antForm}\n onFieldsChange={() => {\n debouncedCheckFieldsChanges({ elementHasLostFocus: false });\n }}\n component={false}\n >\n {formOoui && (\n <Container\n container={formOoui.container}\n responsiveBehaviour={responsiveBehaviour}\n />\n )}\n </AntForm>\n </FormProvider>\n </>\n );\n };\n\n const footer = () => {\n return (\n <>\n <Divider />\n <Row justify=\"end\">\n <Space>\n <Button\n icon={<CloseOutlined />}\n disabled={isSubmitting}\n onClick={async () => {\n await cancelUnsavedChanges();\n }}\n >\n Cancel\n </Button>\n <Button\n disabled={isSubmitting || readOnly}\n loading={isSubmitting}\n icon={<CheckOutlined />}\n onClick={async () => {\n await submitForm();\n }}\n type=\"primary\"\n >\n OK\n </Button>\n </Space>\n </Row>\n </>\n );\n };\n\n if (!visible) {\n return null;\n }\n\n return (\n <Measure\n bounds\n onResize={(contentRect) => {\n setContainerWidth(contentRect.bounds?.width!);\n }}\n >\n {({ measureRef }) => (\n <div className=\"pb-2\" ref={measureRef}>\n {error && <ErrorAlert className=\"mt-5 mb-10\" error={error} />}\n {content()}\n {showFooter && footer()}\n </div>\n )}\n </Measure>\n );\n}\n\nexport default forwardRef(Form);\n","import React, { useEffect, useState } from \"react\";\nimport { Button, Col, Modal, Row, Tooltip } from \"antd\";\nimport Form, { FormProps } from \"@/widgets/views/Form\";\nimport useWindowDimensions from \"@/hooks/useWindowDimensions\";\nimport FormModalProvider from \"@/context/FormModalContext\";\nimport { StarOutlined, StarFilled } from \"@ant-design/icons\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\n\ntype FormModalProps = FormProps & {\n visible: boolean;\n title?: string;\n buttonModal?: boolean;\n isMenuAction?: boolean;\n actionData?: any;\n};\n\nexport const FormModal = (props: FormModalProps) => {\n const {\n visible,\n id,\n title,\n buttonModal = false,\n onCancel,\n isMenuAction = false,\n actionData,\n ...rest\n } = props;\n\n const { modalWidth } = useWindowDimensions();\n const [formTitle, setFormTitle] = useState<string>(title!);\n const [isFavourite, setIsFavourite] = useState(false);\n const [currentShortcutId, setCurrentShortcutId] = useState<number>();\n\n useEffect(() => {\n if (isMenuAction) {\n checkFavourite();\n }\n }, [actionData, isMenuAction]);\n\n async function checkFavourite() {\n const { action_id, res_id, action_type, view_id } = actionData;\n\n const result = await ConnectionProvider.getHandler().isShortcutFavorite({\n action_id,\n action_type,\n view_id,\n res_id: res_id || false,\n });\n\n setIsFavourite(result !== false);\n\n if (result !== false) {\n setCurrentShortcutId(result as number);\n }\n }\n\n async function toggleFavourite() {\n if (isFavourite && currentShortcutId) {\n await ConnectionProvider.getHandler().removeFavourite({\n shortcut_id: currentShortcutId,\n });\n } else {\n const { action_id, res_id, action_type, view_id } = actionData;\n\n await ConnectionProvider.getHandler().addFavourite({\n action_id,\n action_type,\n view_id,\n res_id: res_id || false,\n });\n }\n\n setIsFavourite(!isFavourite);\n }\n\n function header() {\n return (\n <Row align=\"middle\">\n <Col>\n <Button\n type={isFavourite ? \"primary\" : \"default\"}\n icon={\n isFavourite ? (\n <StarFilled style={{ color: \"white\" }} />\n ) : (\n <StarOutlined />\n )\n }\n style={{ width: 30 }}\n onClick={toggleFavourite}\n ></Button>\n </Col>\n <Col style={{ paddingLeft: 10 }}>{formTitle}</Col>\n </Row>\n );\n }\n\n const contentWidth = modalWidth * 0.95;\n return (\n <FormModalProvider setTitle={setFormTitle}>\n <Modal\n title={isMenuAction ? header() : formTitle}\n centered\n width={modalWidth}\n open={visible}\n footer={null}\n destroyOnClose\n onCancel={onCancel}\n maskClosable={false}\n >\n <Form\n id={id}\n showFooter={true}\n insideButtonModal={buttonModal}\n onCancel={onCancel}\n parentWidth={contentWidth}\n {...rest}\n />\n </Modal>\n </FormModalProvider>\n );\n};\n","import { DatePicker } from \"antd\";\n\nimport React from \"react\";\nimport Field from \"@/common/Field\";\nimport { WidgetProps } from \"@/types\";\n\nexport const DateRangePicker = (props: WidgetProps) => {\n return (\n <Field {...props} layout={\"vertical\"}>\n <DatePicker.RangePicker\n allowEmpty={[true, true]}\n format={\"DD/MM/YYYY\"}\n ></DatePicker.RangePicker>\n </Field>\n );\n};\n","import { DatePicker, TimePicker } from \"antd\";\n\nimport React from \"react\";\nimport Field from \"@/common/Field\";\nimport { Field as FieldOoui, Label as LabelOoui } from \"@gisce/ooui\";\nimport { WidgetProps } from \"@/types\";\nimport Label from \"@/widgets/base/Label\";\n\nimport { Row, Col } from \"antd\";\n\nexport const DateTimeRangePicker = (props: WidgetProps) => {\n const { ooui, showLabel = false } = props;\n const { label, id } = ooui;\n\n const fields = [\n new FieldOoui({\n name: id + \"#date\",\n label: \"\",\n }),\n new FieldOoui({\n name: id + \"#time\",\n label: \"\",\n }),\n ];\n\n return (\n <>\n {showLabel && (\n <Label\n ooui={\n new LabelOoui({\n name: id + \"_label\",\n string: label,\n help: ooui.tooltip,\n fieldForLabel: id,\n })\n }\n align={\"left\"}\n />\n )}\n <Row align={\"bottom\"} className=\"p-0\">\n <Col className=\"mr-2\">\n <Field {...props} ooui={fields[0]} showLabel={false}>\n <DatePicker.RangePicker\n className=\"w-60\"\n allowEmpty={[true, true]}\n format={\"DD/MM/YYYY\"}\n ></DatePicker.RangePicker>\n </Field>\n </Col>\n <Col>\n <Field {...props} ooui={fields[1]} showLabel={false}>\n <TimePicker.RangePicker\n className=\"w-60\"\n allowEmpty={[true, true]}\n format={\"HH:mm\"}\n ></TimePicker.RangePicker>\n </Field>\n </Col>\n </Row>\n </>\n );\n};\n","import React, { useContext } from \"react\";\nimport { InputNumber, theme } from \"antd\";\nimport Field from \"@/common/Field\";\nimport { Float as FloatOoui } from \"@gisce/ooui\";\nimport { WidgetProps } from \"@/types\";\nconst { useToken } = theme;\n\nimport { FormContext, FormContextType } from \"@/context/FormContext\";\n\nexport const Float = (props: WidgetProps) => {\n const { ooui } = props;\n const { id, decimalDigits, readOnly, required } = ooui as FloatOoui;\n const { token } = useToken();\n\n const requiredStyle =\n required && !readOnly\n ? { backgroundColor: token.colorPrimaryBg }\n : undefined;\n const formContext = useContext(FormContext) as FormContextType;\n const { elementHasLostFocus } = formContext || {};\n\n return (\n <Field required={required} type={\"number\"} {...props}>\n <InputNumber\n disabled={readOnly}\n className={\"w-full\"}\n style={requiredStyle}\n id={id}\n precision={decimalDigits}\n formatter={(value) => {\n return `${value}`.replace(/[^0-9\\.\\-]+/g, \"\");\n }}\n defaultValue={0}\n decimalSeparator={\".\"}\n onBlur={elementHasLostFocus}\n />\n </Field>\n );\n};\n","import React, { useContext } from \"react\";\nimport { InputNumber, theme } from \"antd\";\nimport Field from \"@/common/Field\";\nimport { WidgetProps } from \"@/types\";\nimport { FormContext, FormContextType } from \"@/context/FormContext\";\nconst { useToken } = theme;\n\ntype IntegerProps = WidgetProps & {\n onChange?: (newValue: number) => void;\n};\n\nexport const Integer = (props: IntegerProps) => {\n const { ooui, onChange } = props;\n const { id, readOnly, required } = ooui;\n const { token } = useToken();\n const requiredStyle =\n required && !readOnly\n ? { backgroundColor: token.colorPrimaryBg }\n : undefined;\n const formContext = useContext(FormContext) as FormContextType;\n const { elementHasLostFocus } = formContext || {};\n\n return (\n <Field required={required} type={\"number\"} {...props}>\n <InputNumber\n id={id}\n className={\"w-full \"}\n disabled={readOnly}\n formatter={(value) => {\n // Check if value is not undefined and is a valid number\n if (value === undefined) {\n return \"\";\n }\n\n if (typeof value === \"string\" && !isNaN(parseFloat(value))) {\n let truncatedValue = Math.trunc(parseFloat(value));\n return `${truncatedValue}`.replace(/[^0-9\\-]+/g, \"\");\n } else if (typeof value === \"number\") {\n let truncatedValue = Math.trunc(value);\n return `${truncatedValue}`.replace(/[^0-9\\-]+/g, \"\");\n }\n\n return \"\";\n }}\n onChange={(newValue: any) => {\n const newNumber = newValue as number;\n onChange?.(newNumber);\n }}\n defaultValue={0}\n onBlur={elementHasLostFocus}\n precision={0}\n style={requiredStyle}\n />\n </Field>\n );\n};\n","import React from \"react\";\nimport { Row, Col } from \"antd\";\nimport { Float } from \"@/widgets/base/Float\";\nimport { Integer } from \"@/widgets/base/Integer\";\nimport { Integer as IntegerOoui, Label as LabelOoui } from \"@gisce/ooui\";\nimport Label from \"@/widgets/base/Label\";\nimport { WidgetProps } from \"@/types\";\n\ntype Props = {\n ooui: any;\n};\n\nexport function PairFields(props: WidgetProps): React.ReactElement {\n const { ooui, showLabel } = props;\n const { id, label, tooltip } = ooui;\n const Widget = ooui instanceof IntegerOoui ? Integer : Float;\n\n const getWidget = (suffix: string) => {\n return (\n <Widget\n ooui={{\n ...(ooui as any),\n id: id + suffix,\n label: \"\",\n tooltip: undefined,\n }}\n layout=\"vertical\"\n />\n );\n };\n\n return (\n <>\n {showLabel && (\n <Label\n ooui={\n new LabelOoui({\n name: id + \"_label\",\n string: label,\n help: tooltip,\n fieldForLabel: id,\n })\n }\n align={\"left\"}\n />\n )}\n <Row align={\"bottom\"} className=\"mt-0\" wrap={false}>\n <Col>{getWidget(\"#from\")}</Col>\n <Col className=\"pb-1\">\n <span className=\"pl-2 pr-2 h-full\"> - </span>\n </Col>\n <Col>{getWidget(\"#to\")}</Col>\n </Row>\n </>\n );\n}\n","import React from \"react\";\nimport { Select } from \"antd\";\nimport styled from \"styled-components\";\n\nimport Field from \"@/common/Field\";\nimport { Selection as SelectionOoui } from \"@gisce/ooui\";\nimport { WidgetProps } from \"@/types\";\nimport { theme } from \"antd\";\n\nconst { defaultAlgorithm, defaultSeed } = theme;\n\nconst mapToken = defaultAlgorithm(defaultSeed);\n\nconst { Option } = Select;\n\nexport const MultiSelection = (props: WidgetProps) => {\n const { ooui } = props;\n const { required } = ooui;\n\n return (\n <Field required={required} type={\"any\"} {...props}>\n <MultiSelectionInput {...props} />\n </Field>\n );\n};\n\ntype SelectionInputProps = WidgetProps & {\n onChange?: (value: any) => void;\n value?: string[];\n};\n\nexport const MultiSelectionInput = (props: SelectionInputProps) => {\n const { ooui, onChange, value } = props;\n const { selectionValues, readOnly, required } = ooui as SelectionOoui;\n\n const values = Array.from(selectionValues.entries());\n\n const options =\n values &&\n values.length &&\n values\n .filter((optionValueKeyPair) => {\n const [optionKey] = optionValueKeyPair;\n if (!value) {\n return true;\n }\n return !value.includes(optionKey);\n })\n .map((entry: string[]) => {\n const [key, value] = entry;\n return (\n <Option key={key} value={value}>\n {value}\n </Option>\n );\n });\n\n const CustomSelect: any = required && !readOnly ? RequiredSelect : Select;\n\n function handleChange(changedValues: string[]) {\n const keysForChangedValues = changedValues.map((changedValue) => {\n const entry = values.find(([key, value]) => changedValue === value);\n return entry && entry[0];\n });\n\n if (keysForChangedValues.length === 0) {\n onChange?.(undefined);\n return;\n }\n\n onChange?.(keysForChangedValues);\n }\n\n return (\n <CustomSelect\n disabled={readOnly}\n onChange={handleChange}\n value={value?.map((key) => selectionValues.get(key))}\n mode=\"multiple\"\n showArrow={true}\n >\n {options}\n </CustomSelect>\n );\n};\n\nconst RequiredSelect = styled(Select)`\n &.ant-select:not(.ant-select-customize-input) .ant-select-selector {\n background-color: ${mapToken.colorPrimaryBg};\n }\n`;\n","import React, { useContext } from \"react\";\n\nimport { Char } from \"@/widgets/base/Char\";\nimport { Selection } from \"@/widgets/base/Selection\";\nimport { DateRangePicker } from \"./DateRangePicker\";\nimport { DateTimeRangePicker } from \"./DateTimeRangePicker\";\nimport { PairFields } from \"./PairFields\";\n\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\nimport { Field, SearchFieldTypes, Selection as SelectionOoui } from \"@gisce/ooui\";\nimport { MultiSelection } from \"@/widgets/base/MultiSelection\";\n\ntype Props = {\n field: Field;\n};\n\nexport function SearchField(props: Props) {\n const { field } = props;\n field.readOnly = false;\n field.required = false;\n\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n const widgetType = field.type;\n\n switch (widgetType) {\n case SearchFieldTypes.boolean: {\n const ooui = new SelectionOoui({\n name: field._id,\n string: field.label,\n selection: [\n [\"true\", t(\"true\")],\n [\"false\", t(\"false\")],\n ],\n });\n\n return <Selection layout=\"vertical\" ooui={ooui} showLabel />;\n }\n case SearchFieldTypes.float:\n case SearchFieldTypes.progressbar:\n case SearchFieldTypes.float_time:\n case SearchFieldTypes.integer: {\n return <PairFields ooui={field} showLabel />;\n }\n case SearchFieldTypes.date: {\n return <DateRangePicker ooui={field} layout=\"vertical\" showLabel />;\n }\n case SearchFieldTypes.datetime: {\n return <DateTimeRangePicker ooui={field} layout=\"vertical\" showLabel />;\n }\n case SearchFieldTypes.selection: {\n return <MultiSelection layout=\"vertical\" ooui={field} showLabel />;\n }\n default: {\n return <Char ooui={field} layout=\"vertical\" showLabel isSearchField />;\n }\n }\n}\n","import React, { useContext } from \"react\";\n\nimport { Row, Col, Button } from \"antd\";\nimport {\n DownOutlined,\n UpOutlined,\n SearchOutlined,\n ClearOutlined,\n} from \"@ant-design/icons\";\n\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\ntype Props = {\n advancedFilter: boolean;\n isSearching: boolean;\n onAdvancedFilterToggle: () => void;\n onClear: () => void;\n};\n\nexport function SearchBottomBar(props: Props): React.ReactElement {\n const {\n onAdvancedFilterToggle,\n advancedFilter,\n onClear,\n isSearching,\n } = props;\n\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n return (\n <Row>\n <Col span={12} className=\"text-left pt-4 pb-2 pl-2\">\n <a className=\"text-xs\" onClick={onAdvancedFilterToggle}>\n {advancedFilter ? (\n <UpOutlined className=\"pr-1\" />\n ) : (\n <DownOutlined className=\"pr-1\" />\n )}\n {advancedFilter ? t(\"simple_search\") : t(\"advanced_search\")}\n </a>\n </Col>\n <Col span={12} className=\"text-right pb-2\">\n <Button className=\"mr-5\" icon={<ClearOutlined />} onClick={onClear}>\n {t(\"clear\")}\n </Button>\n <Button\n icon={<SearchOutlined />}\n loading={isSearching}\n className=\"mr-2\"\n type=\"primary\"\n htmlType=\"submit\"\n >\n {t(\"search\")}\n </Button>\n </Col>\n </Row>\n );\n}\n","import React, { useContext } from \"react\";\n\nimport { Integer } from \"@/widgets/base/Integer\";\nimport { Row, Space } from \"antd\";\nimport { Integer as IntegerOoui } from \"@gisce/ooui\";\n\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\ntype SearchParamsProps = {\n onLimitChange?: (limit: number) => void;\n}\n\nexport function SearchParams(props: SearchParamsProps): React.ReactElement {\n const { onLimitChange } = props;\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n const limitOoui = new IntegerOoui({ name: \"limit\" });\n const offsetOoui = new IntegerOoui({ name: \"offset\" });\n return (\n <div className=\"pl-2 pt-2\">\n <Row key={\"count_params\"}>{t(\"parameters\")}</Row>\n <Space align=\"center\">\n {t(\"limit\") + \" :\"}\n <Integer ooui={limitOoui} onChange={(newValue: number) => {\n onLimitChange?.(newValue);\n }}/>\n {t(\"first\") + \" :\"}\n <Integer ooui={offsetOoui} />\n </Space>\n </div>\n );\n}\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { Form, Row, Col, Alert, theme } from \"antd\";\nimport useDeepCompareEffect from \"use-deep-compare-effect\";\n\nimport {\n SearchFilter as SearchFilterOoui,\n Container,\n Field,\n} from \"@gisce/ooui\";\n\nimport { SearchField } from \"./SearchField\";\nimport { SearchBottomBar } from \"./SearchBottomBar\";\nimport { SearchFields } from \"@/types\";\nimport { SearchParams } from \"./SearchParams\";\n\nimport { getParamsForFields } from \"@/helpers/searchHelper\";\nimport Measure from \"react-measure\";\nconst { useToken } = theme;\n\ntype Props = {\n fields: any;\n searchFields: SearchFields;\n onClear: () => void;\n onSubmit: (values: any) => void;\n isSearching: boolean;\n limit: number;\n offset: number;\n onLimitChange?: (limit: number) => void;\n searchVisible?: boolean;\n setSearchFilterHeight?: (height: number) => void;\n searchError?: string;\n searchValues?: any;\n showLimitOptions?: boolean;\n};\n\nfunction SearchFilter(props: Props) {\n const {\n fields,\n searchFields = { primary: [], secondary: [] },\n onClear,\n onSubmit,\n isSearching,\n offset,\n limit,\n onLimitChange,\n searchVisible,\n setSearchFilterHeight,\n searchError,\n searchValues,\n showLimitOptions = true,\n } = props;\n\n const [simpleSearchFields, setSimpleSearchFields] = useState<Container>();\n const [advancedSearchFields, setAdvancedSearchFields] = useState<Container>();\n const [advancedFilter, setAdvancedFilter] = useState(false);\n const sfo = useRef<SearchFilterOoui>();\n const { token } = useToken();\n\n const [form] = Form.useForm();\n\n useEffect(() => {\n form.setFieldsValue(searchValues);\n }, [searchValues]);\n\n const getRowsAndCols = () => {\n if (!advancedSearchFields) {\n return;\n }\n\n const fields = advancedFilter ? advancedSearchFields : simpleSearchFields;\n const rows = fields?.rows;\n\n return rows?.map((row, i) => {\n return (\n <Row key={i}>\n {row.map((item, j) => {\n return (\n <Col xs={24} className=\"p-2\" xl={6} key={j}>\n <SearchField field={item as Field} />\n </Col>\n );\n })}\n </Row>\n );\n });\n };\n\n useDeepCompareEffect(() => {\n setAdvancedFilter(false);\n sfo.current = new SearchFilterOoui(searchFields, fields);\n sfo.current.parse();\n setSimpleSearchFields(sfo.current._simpleSearchContainer);\n setAdvancedSearchFields(sfo.current._advancedSearchContainer);\n }, [fields, searchFields]);\n\n const rows = getRowsAndCols();\n\n const onFinish = (values: any) => {\n const { limit, offset } = values;\n delete values.offset;\n delete values.limit;\n const newParams = getParamsForFields(\n values,\n sfo.current?._advancedSearchContainer\n );\n\n onSubmit({ params: newParams, offset, limit, searchValues: values });\n };\n\n return (\n <Measure\n bounds\n onResize={(contentRect) => {\n setSearchFilterHeight?.(contentRect.bounds?.height!);\n }}\n >\n {({ measureRef }) => (\n <div ref={measureRef}>\n <div style={{ display: searchVisible ? \"block\" : \"none\" }}>\n <Form\n className=\"p-3 shadow-md\"\n style={{ borderRadius: token.borderRadius }}\n form={form}\n onFinish={onFinish}\n initialValues={{ offset, limit }}\n >\n {rows}\n {advancedFilter && showLimitOptions && (\n <SearchParams onLimitChange={onLimitChange} />\n )}\n <SearchBottomBar\n advancedFilter={advancedFilter}\n onAdvancedFilterToggle={() => {\n setAdvancedFilter(!advancedFilter);\n }}\n onClear={() => {\n form.resetFields();\n onClear();\n }}\n isSearching={isSearching}\n />\n </Form>\n {searchError && (\n <Alert\n className=\"mt-10\"\n message={searchError}\n type=\"error\"\n banner\n />\n )}\n <div className=\"pb-5\" />\n </div>\n </div>\n )}\n </Measure>\n );\n}\n\nexport default SearchFilter;\n","/**\n * This function calculate the width of a string based on its length\n * @param {String} text\n * @param {String} font\n */\nconst getTextWidth = (text: string, font = \"14px -apple-system\") => {\n const canvas = document.createElement(\"canvas\");\n const context = canvas.getContext(\"2d\");\n context!.font = font;\n const metrics = context!.measureText(text);\n return Math.round((metrics.width + 80) * 1.5);\n};\n\n/**\n * This function calculates the width of each column based in all CELL VALUES\n * @param {Array} columns\n * @param {Array} source\n * @param {Number} maxWidthPerCell\n */\nexport const calculateColumnsWidth = (\n columns: any,\n source: any,\n maxWidthPerCell = 500\n) => {\n if (columns.length === 0) {\n return columns;\n }\n\n // First we calculate the width for each column\n // The column width is based on its string length\n\n const columnsWithWidth = columns.map((column: any) =>\n Object.assign(column, {\n width: getTextWidth(column.title),\n })\n );\n\n // Since we have a minimum width (column's width already calculated),\n // now we are going to verify if the cell value is bigger\n // than the column width which is already set\n\n source.map((entry: any) => {\n columnsWithWidth.map((column: any, indexColumn: number) => {\n const columnWidth = column.width;\n const cellValue = (entry[column.key] as string) || \"\";\n\n // Get the string width based on chars length\n let cellWidth = getTextWidth(cellValue);\n\n // Verify if the cell value is smaller than column's width\n if (cellWidth < columnWidth) cellWidth = columnWidth;\n\n // Verify if the cell value width is bigger than our max width flag\n if (cellWidth > maxWidthPerCell) cellWidth = maxWidthPerCell;\n\n // Update the column width\n columnsWithWidth[indexColumn].width = cellWidth;\n });\n });\n\n // Sum of all columns width to determine the table max width\n const tableWidth = columnsWithWidth\n .map((column: any) => column.width)\n .reduce((a: any, b: any) => {\n return a + b;\n });\n\n return {\n columns: columnsWithWidth,\n source,\n tableWidth,\n };\n};\n","function parseStringToFloat(text?: string) {\n if (!text) {\n return undefined;\n }\n\n try {\n if (text.includes(\":\")) {\n const splitted = text.trim().split(\":\");\n return (\n Math.round(\n (parseInt(splitted[0]) + parseInt(splitted[1]) / 60.0) * 10000\n ) / 10000\n );\n } else {\n return parseFloat(text.trim());\n }\n } catch (err) {\n return 0;\n }\n}\n\nfunction parseFloatToString(num?: number) {\n if (num === undefined) {\n return undefined;\n }\n\n let finalString;\n let hours = Math.floor(Math.abs(num));\n let mins = Math.round((Math.abs(num) % 1) * 100) / 100;\n\n if (mins >= 1) {\n hours = hours + 1;\n mins = 0.0;\n } else {\n mins = mins * 60;\n }\n\n const hoursString = hours.toLocaleString(\"en-US\", {\n minimumIntegerDigits: 2,\n maximumFractionDigits: 0,\n useGrouping: false,\n });\n const minsStrings = mins.toLocaleString(\"en-US\", {\n minimumIntegerDigits: 2,\n maximumFractionDigits: 0,\n useGrouping: false,\n });\n\n finalString = `${hoursString}:${minsStrings}`;\n\n if (num < 0) {\n finalString = \"-\" + finalString;\n }\n\n return finalString;\n}\n\nexport { parseStringToFloat, parseFloatToString };","import React from \"react\";\nimport { Progress } from \"antd\";\nimport Field from \"@/common/Field\";\nimport { WidgetProps } from \"@/types\";\nimport styled from \"styled-components\";\n\nexport const ProgressBar = (props: WidgetProps) => {\n return (\n <Field {...props}>\n <ProgressBarInput />\n </Field>\n );\n};\n\nexport const ProgressBarInput = ({ value }: { value?: number }) => {\n const textValue = `${(value || 0).toLocaleString(\"en-US\", {\n minimumIntegerDigits: 1,\n maximumFractionDigits: 4,\n useGrouping: false,\n })}%`;\n\n return (\n <div style={{ flex: 1, display: \"flex\", alignItems: \"center\" }}>\n <StyledProgress percent={value} />\n <div style={{ flexGrow: 1, paddingLeft: 10 }}>{textValue}</div>\n </div>\n );\n};\n\nconst StyledProgress = styled(Progress)`\n .ant-progress-outer {\n margin-right: 0px;\n padding-right: 0px;\n }\n .ant-progress-text {\n display: none;\n }\n`;\n","import React, { useContext } from \"react\";\nimport { Modal, Button, Space } from \"antd\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\ntype Props = {\n visible: boolean;\n items: any[];\n onItemClicked: (item: any) => void;\n onCancel: () => void;\n};\n\nexport const Many2oneSuffixModal = (props: Props) => {\n const { visible, onCancel, items = [], onItemClicked } = props;\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n return (\n (<Modal\n title={t(\"selectAction\")}\n centered\n open={visible}\n footer={null}\n destroyOnClose\n onCancel={onCancel}\n maskClosable={false}\n >\n <Space direction=\"vertical\" className=\"w-full\">\n {items.map((item) => {\n return (\n <Button\n className=\"w-full\"\n onClick={() => {\n onItemClicked(item);\n }}\n >\n {item.name}\n </Button>\n );\n })}\n </Space>\n </Modal>)\n );\n};\n","import React, { useContext, useState, useEffect } from \"react\";\nimport {\n RightCircleOutlined,\n PrinterOutlined,\n ThunderboltOutlined,\n EnterOutlined,\n} from \"@ant-design/icons\";\nimport { Menu, Dropdown, Spin } from \"antd\";\nimport {\n TabManagerContext,\n TabManagerContextType,\n} from \"@/context/TabManagerContext\";\nimport { FormView } from \"@/types\";\nimport { Many2oneSuffixModal } from \"./Many2oneSuffixModal\";\nimport {\n ContentRootContext,\n ContentRootContextType,\n} from \"@/context/ContentRootContext\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport { processValues } from \"@/helpers/formHelper\";\nimport showErrorDialog from \"@/ui/ActionErrorDialog\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport { parseContextFields, parseDomainFields } from \"@gisce/ooui\";\n\ntype Props = {\n id: number;\n model: string;\n context?: any;\n};\n\nexport const Many2oneSuffix = (props: Props) => {\n const { id, model, context = {} } = props;\n const [actionModalVisible, setActionModalVisible] = useState<boolean>(false);\n const [printModalVisible, setPrintModalVisible] = useState<boolean>(false);\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [formView, setFormView] = useState<FormView>();\n const [targetValues, setTargetValues] = useState<any>();\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n const tabManagerContext = useContext(\n TabManagerContext\n ) as TabManagerContextType;\n const { openRelate } = tabManagerContext || {};\n\n const contentRootContext = useContext(\n ContentRootContext\n ) as ContentRootContextType;\n const { processAction } = contentRootContext || {};\n\n if (!id) {\n return null;\n }\n\n async function fetchData() {\n setIsLoading(true);\n\n try {\n const formView = await ConnectionProvider.getHandler().getView({\n model,\n type: \"form\",\n context,\n }) as FormView;\n setFormView(formView);\n let fields: string[] = [];\n const { toolbar } = formView;\n toolbar.action?.filter((item: any) => item.hasOwnProperty('context')).map((item: any) => fields.push(...parseContextFields(item.context)));\n toolbar.action?.filter((item: any) => item.hasOwnProperty('domain')).map((item: any) => fields.push(...parseDomainFields(item.domain)));\n toolbar.relate?.filter((item: any) => item.hasOwnProperty('context')).map((item: any) => fields.push(...parseContextFields(item.context)));\n toolbar.relate?.filter((item: any) => item.hasOwnProperty('domain')).map((item: any) => fields.push(...parseDomainFields(item.domain)));\n toolbar.print?.filter((item: any) => item.hasOwnProperty('context')).map((item: any) => fields.push(...parseContextFields(item.context)));\n fields = fields.filter((i) => Object.keys(formView.fields).indexOf(i) > -1)\n\n let values = {}\n\n if (fields.length > 0) {\n values = (\n await ConnectionProvider.getHandler().readObjects({\n model,\n ids: [id],\n fieldsToRetrieve: fields,\n context,\n })\n )[0];\n }\n values = { ...processValues(values, fields), active_id: id };\n setTargetValues(values);\n\n setIsLoading(false);\n } catch (err) {\n setIsLoading(false);\n showErrorDialog(err);\n return;\n }\n }\n\n function menu() {\n if (isLoading) {\n return (\n <Menu>\n <div style={{ padding: 15 }}>\n <Spin />\n </div>\n </Menu>\n );\n }\n\n if (!formView || !formView.toolbar) {\n return <Menu />;\n }\n\n const relateItems = formView?.toolbar?.relate.map((item: any) => {\n return <Menu.Item key={item.id}>{item.name}</Menu.Item>;\n });\n\n return (\n <Menu onClick={handleMenuClick}>\n {[\n <Menu.Item\n key=\"action\"\n disabled={\n !formView!.toolbar.action || formView!.toolbar.action.length === 0\n }\n icon={<ThunderboltOutlined />}\n >\n {t(\"action\")}\n </Menu.Item>,\n <Menu.Item\n key=\"print\"\n disabled={\n !formView!.toolbar.print || formView!.toolbar.print.length === 0\n }\n icon={<PrinterOutlined />}\n >\n {t(\"report\")}\n </Menu.Item>,\n <Menu.Divider />,\n <Menu.ItemGroup\n title={\n <>\n <EnterOutlined /> <span> {t(\"related\")}</span>\n </>\n }\n >\n {relateItems}\n </Menu.ItemGroup>,\n ]}\n </Menu>\n );\n }\n\n function handleMenuClick(event: any) {\n if (event.key === \"action\") {\n setActionModalVisible(true);\n } else if (event.key === \"print\") {\n setPrintModalVisible(true);\n } else {\n const relateItemClicked = formView!.toolbar.relate.find((item: any) => {\n return item.id === parseInt(event.key);\n });\n if (!relateItemClicked) {\n return;\n }\n\n openRelate({\n relateData: relateItemClicked,\n values: targetValues,\n fields: formView!.fields,\n action_id: relateItemClicked.id,\n action_type: relateItemClicked.type,\n });\n }\n }\n\n function onActionItemClicked(actionData: any) {\n setActionModalVisible(false);\n processAction?.({\n actionData,\n values: targetValues,\n fields: formView!.fields,\n context: { active_id: id, active_ids: [id] },\n });\n }\n\n function onPrintItemClicked(reportData: any) {\n setPrintModalVisible(false);\n processAction?.({\n actionData: {\n ...reportData,\n datas: { ...(reportData.datas || {}), ids: [id] },\n },\n values: targetValues,\n fields: formView!.fields,\n });\n }\n\n return (\n <>\n <Dropdown overlay={menu()} trigger={[\"click\"]}>\n <RightCircleOutlined\n style={{ color: \"rgba(0,0,0,.45)\" }}\n onClick={(e) => {\n e.preventDefault();\n fetchData();\n }}\n />\n </Dropdown>\n <Many2oneSuffixModal\n visible={actionModalVisible}\n items={formView?.toolbar?.action}\n onItemClicked={onActionItemClicked}\n onCancel={() => setActionModalVisible(false)}\n />\n <Many2oneSuffixModal\n visible={printModalVisible}\n items={formView?.toolbar?.print}\n onItemClicked={onPrintItemClicked}\n onCancel={() => setPrintModalVisible(false)}\n />\n </>\n );\n};\n","import { Space } from \"antd\";\nimport React from \"react\";\nimport { Many2oneSuffix } from \"./Many2oneSuffix\";\n\nexport type Many2oneTreeProps = { m2oField: any };\n\nexport const Many2oneTree = (props: Many2oneTreeProps): React.ReactElement => {\n const { m2oField } = props;\n if (!m2oField) {\n return <></>;\n }\n return (\n <Space>\n <>{m2oField.value}</>\n <Many2oneSuffix id={m2oField.id} model={m2oField.model} />\n </Space>\n );\n};\n","import ConnectionProvider from \"@/ConnectionProvider\";\nimport { Space } from \"antd\";\nimport React, { useCallback, useEffect, useState } from \"react\";\nimport { Many2oneSuffix } from \"./many2one/Many2oneSuffix\";\nimport { LoadingOutlined } from \"@ant-design/icons\";\n\nexport type ReferenceTreeProps = {\n value: string;\n context?: any;\n selectionValues?: any;\n};\n\nexport const ReferenceTree = (\n props: ReferenceTreeProps\n): React.ReactElement => {\n const { value, context, selectionValues } = props;\n const [name, setName] = useState();\n const [loading, setLoading] = useState(false);\n\n const [model, id] = value ? value.split(\",\") : [];\n const intId = parseInt(id);\n\n const fetchName = useCallback(async () => {\n if (!value) {\n return;\n }\n if (value && name) {\n return;\n }\n setLoading(true);\n const nameResponse = await ConnectionProvider.getHandler().execute({\n action: \"name_get\",\n payload: [intId],\n model,\n context,\n });\n setName(nameResponse[0][1]);\n setLoading(false);\n }, [value, name]);\n\n useEffect(() => {\n fetchName();\n }, [value]);\n\n if (!value && !loading) {\n return <></>;\n }\n\n if (loading) {\n return <LoadingOutlined />;\n }\n\n const selectionDescription = selectionValues.get(model);\n\n return (\n <Space>\n <>{`${selectionDescription}:`}</>\n <>{name}</>\n <Many2oneSuffix id={intId} model={model} />\n </Space>\n );\n};\n","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",f=\"month\",h=\"quarter\",c=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,f),s=n-i<0,u=e.clone().add(r+(s?-1:1),f);return+(-(r+(n-i)/(s?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:f,y:c,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:h}[t]||String(t||\"\").toLowerCase().replace(/s$/,\"\")},u:function(t){return void 0===t}},g=\"en\",D={};D[g]=M;var p=function(t){return t instanceof _},S=function t(e,n,r){var i;if(!e)return g;if(\"string\"==typeof e){var s=e.toLowerCase();D[s]&&(i=s),n&&(D[s]=n,i=s);var u=e.split(\"-\");if(!i&&u.length>1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},w=function(t,e){if(p(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},O=v;O.l=S,O.i=p,O.w=function(t,e){return w(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=S(t.locale,null,!0),this.parse(t)}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(O.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.$x=t.x||{},this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return O},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=w(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return w(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<w(t)},m.$g=function(t,e,n){return O.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!O.u(e)||e,h=O.p(t),l=function(t,e){var i=O.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(a)},$=function(t,e){return O.w(n.toDate()[t].apply(n.toDate(\"s\"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},y=this.$W,M=this.$M,m=this.$D,v=\"set\"+(this.$u?\"UTC\":\"\");switch(h){case c:return r?l(1,0):l(31,11);case f:return r?l(1,M):l(0,M+1);case o:var g=this.$locale().weekStart||0,D=(y<g?y+7:y)-g;return l(r?m-D:m+(6-D),M);case a:case d:return $(v+\"Hours\",0);case u:return $(v+\"Minutes\",1);case s:return $(v+\"Seconds\",2);case i:return $(v+\"Milliseconds\",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,o=O.p(t),h=\"set\"+(this.$u?\"UTC\":\"\"),l=(n={},n[a]=h+\"Date\",n[d]=h+\"Date\",n[f]=h+\"Month\",n[c]=h+\"FullYear\",n[u]=h+\"Hours\",n[s]=h+\"Minutes\",n[i]=h+\"Seconds\",n[r]=h+\"Milliseconds\",n)[o],$=o===a?this.$D+(e-this.$W):e;if(o===f||o===c){var y=this.clone().set(d,1);y.$d[l]($),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d}else l&&this.$d[l]($);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[O.p(t)]()},m.add=function(r,h){var d,l=this;r=Number(r);var $=O.p(h),y=function(t){var e=w(l);return O.w(e.date(e.date()+Math.round(t*r)),l)};if($===f)return this.set(f,this.$M+r);if($===c)return this.set(c,this.$y+r);if($===a)return y(1);if($===o)return y(7);var M=(d={},d[s]=e,d[u]=n,d[i]=t,d)[$]||1,m=this.$d.getTime()+r*M;return O.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||l;var r=t||\"YYYY-MM-DDTHH:mm:ssZ\",i=O.z(this),s=this.$H,u=this.$m,a=this.$M,o=n.weekdays,f=n.months,h=function(t,n,i,s){return t&&(t[n]||t(e,r))||i[n].slice(0,s)},c=function(t){return O.s(s%12||12,t,\"0\")},d=n.meridiem||function(t,e,n){var r=t<12?\"AM\":\"PM\";return n?r.toLowerCase():r},$={YY:String(this.$y).slice(-2),YYYY:O.s(this.$y,4,\"0\"),M:a+1,MM:O.s(a+1,2,\"0\"),MMM:h(n.monthsShort,a,f,3),MMMM:h(f,a),D:this.$D,DD:O.s(this.$D,2,\"0\"),d:String(this.$W),dd:h(n.weekdaysMin,this.$W,o,2),ddd:h(n.weekdaysShort,this.$W,o,3),dddd:o[this.$W],H:String(s),HH:O.s(s,2,\"0\"),h:c(1),hh:c(2),a:d(s,u,!0),A:d(s,u,!1),m:String(u),mm:O.s(u,2,\"0\"),s:String(this.$s),ss:O.s(this.$s,2,\"0\"),SSS:O.s(this.$ms,3,\"0\"),Z:i};return r.replace(y,(function(t,e){return e||$[t]||i.replace(\":\",\"\")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,l){var $,y=O.p(d),M=w(r),m=(M.utcOffset()-this.utcOffset())*e,v=this-M,g=O.m(this,M);return g=($={},$[c]=g/12,$[f]=g,$[h]=g/3,$[o]=(v-m)/6048e5,$[a]=(v-m)/864e5,$[u]=v/n,$[s]=v/e,$[i]=v/t,$)[y]||v,l?g:O.a(g)},m.daysInMonth=function(){return this.endOf(f).$D},m.$locale=function(){return D[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=S(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return O.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},M}(),T=_.prototype;return w.prototype=T,[[\"$ms\",r],[\"$s\",i],[\"$m\",s],[\"$H\",u],[\"$W\",a],[\"$M\",f],[\"$y\",c],[\"$D\",d]].forEach((function(t){T[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),w.extend=function(t,e){return t.$i||(t(e,_,w),t.$i=!0),w},w.locale=S,w.isDayjs=p,w.unix=function(t){return w(1e3*t)},w.en=D[g],w.Ls=D,w.p={},w}));","import React from \"react\";\nimport {WidgetProps} from \"@/types\";\nimport { Avatar as AntdAvatar, Tooltip } from \"antd\";\nimport { Avatar as AvatarOoui} from \"@gisce/ooui\";\nimport { colorFromString } from \"@/helpers/formHelper\";\n\ntype AvatarProps = WidgetProps & {\n ooui: AvatarOoui\n value?: any;\n};\n\nconst Avatar = (props: AvatarProps): React.ReactElement | null => {\n console.log(\"Avatar Props\", props);\n const {ooui, value} = props;\n if (!value) {\n return null;\n }\n let formattedValue = value;\n if (ooui.selectionValues.size) {\n formattedValue = ooui.selectionValues.get(value);\n } else if (Array.isArray(value)) {\n formattedValue = value[1];\n }\n const text = formattedValue.toString().split(\" \").filter((word:string) => word.length > 1).slice(0, 3).map((word:string) => word[0].toUpperCase()).join(\"\");\n const backgroundColor = colorFromString(formattedValue);\n return (\n <Tooltip title={formattedValue}>\n <AntdAvatar alt={formattedValue} style={{backgroundColor}}>{text}</AntdAvatar>\n </Tooltip>\n );\n}\n\nexport default Avatar;\n","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_weekday=t()}(this,(function(){\"use strict\";return function(e,t){t.prototype.weekday=function(e){var t=this.$locale().weekStart||0,i=this.$W,n=(i<t?i+7:i)-t;return this.$utils().u(e)?n:this.subtract(n,\"day\").add(e,\"day\")}}}));","!function(n,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(n=\"undefined\"!=typeof globalThis?globalThis:n||self).dayjs_plugin_localeData=e()}(this,(function(){\"use strict\";return function(n,e,t){var r=e.prototype,o=function(n){return n&&(n.indexOf?n:n.s)},u=function(n,e,t,r,u){var i=n.name?n:n.$locale(),a=o(i[e]),s=o(i[t]),f=a||s.map((function(n){return n.slice(0,r)}));if(!u)return f;var d=i.weekStart;return f.map((function(n,e){return f[(e+(d||0))%7]}))},i=function(){return t.Ls[t.locale()]},a=function(n,e){return n.formats[e]||function(n){return n.replace(/(\\[[^\\]]+])|(MMMM|MM|DD|dddd)/g,(function(n,e,t){return e||t.slice(1)}))}(n.formats[e.toUpperCase()])},s=function(){var n=this;return{months:function(e){return e?e.format(\"MMMM\"):u(n,\"months\")},monthsShort:function(e){return e?e.format(\"MMM\"):u(n,\"monthsShort\",\"months\",3)},firstDayOfWeek:function(){return n.$locale().weekStart||0},weekdays:function(e){return e?e.format(\"dddd\"):u(n,\"weekdays\")},weekdaysMin:function(e){return e?e.format(\"dd\"):u(n,\"weekdaysMin\",\"weekdays\",2)},weekdaysShort:function(e){return e?e.format(\"ddd\"):u(n,\"weekdaysShort\",\"weekdays\",3)},longDateFormat:function(e){return a(n.$locale(),e)},meridiem:this.$locale().meridiem,ordinal:this.$locale().ordinal}};r.localeData=function(){return s.bind(this)()},t.localeData=function(){var n=i();return{firstDayOfWeek:function(){return n.weekStart||0},weekdays:function(){return t.weekdays()},weekdaysShort:function(){return t.weekdaysShort()},weekdaysMin:function(){return t.weekdaysMin()},months:function(){return t.months()},monthsShort:function(){return t.monthsShort()},longDateFormat:function(e){return a(n,e)},meridiem:n.meridiem,ordinal:n.ordinal}},t.months=function(){return u(i(),\"months\")},t.monthsShort=function(){return u(i(),\"monthsShort\",\"months\",3)},t.weekdays=function(n){return u(i(),\"weekdays\",null,null,n)},t.weekdaysShort=function(n){return u(i(),\"weekdaysShort\",\"weekdays\",3,n)},t.weekdaysMin=function(n){return u(i(),\"weekdaysMin\",\"weekdays\",2,n)}}}));","import { DatePicker as AntDatePicker, theme } from \"antd\";\n\nimport React from \"react\";\nimport Field from \"@/common/Field\";\nimport { WidgetProps } from \"@/types\";\nimport { Date as DateOoui } from \"@gisce/ooui\";\nimport dayjs from \"dayjs\";\nconst { useToken } = theme;\nimport weekday from \"dayjs/plugin/weekday\";\nimport localeData from \"dayjs/plugin/localeData\";\ndayjs.extend(weekday);\ndayjs.extend(localeData);\n\ntype DatePickerProps = WidgetProps & {\n showTime?: boolean;\n};\n\nexport const DatePickerConfig = {\n date: {\n placeholder: \"__/__/____\",\n dateDisplayFormat: \"DD/MM/YYYY\",\n dateInternalFormat: \"YYYY-MM-DD\",\n },\n time: {\n placeholder: \"__/__/____ __:__:__\",\n dateDisplayFormat: \"DD/MM/YYYY HH:mm:ss\",\n dateInternalFormat: \"YYYY-MM-DD HH:mm:ss\",\n },\n};\n\nconst DatePicker = (props: DatePickerProps) => {\n const { ooui, showTime = false } = props;\n const { required } = ooui;\n\n return (\n <Field required={required} {...props}>\n <DatePickerInput ooui={ooui} showTime={showTime} />\n </Field>\n );\n};\n\ninterface DatePickerInputProps {\n ooui: DateOoui;\n value?: undefined | string;\n onChange?: (value: undefined | string) => void;\n showTime?: boolean;\n}\n\nconst DatePickerInput: React.FC<DatePickerInputProps> = (\n props: DatePickerInputProps\n) => {\n const { value, onChange, ooui, showTime } = props;\n const { id, readOnly, required } = ooui as DateOoui;\n const { token } = useToken();\n\n const requiredStyle =\n required && !readOnly\n ? { backgroundColor: token.colorPrimaryBg }\n : undefined;\n\n const mode = showTime ? \"time\" : \"date\";\n\n const triggerChange = (changedValue: undefined | string) => {\n onChange?.(changedValue);\n };\n\n const onValueStringChange = (momentDate: any) => {\n if (momentDate === null) {\n triggerChange(undefined);\n return;\n }\n\n triggerChange(momentDate.format(DatePickerConfig[mode].dateInternalFormat));\n };\n\n const dateValue = value\n ? dayjs(value, DatePickerConfig[mode].dateInternalFormat)\n : undefined;\n\n return (\n <AntDatePicker\n style={{ width: \"100%\", ...requiredStyle }}\n placeholder={\n showTime\n ? DatePickerConfig.time.placeholder\n : DatePickerConfig.date.placeholder\n }\n disabled={readOnly}\n id={id}\n picker={\"date\"}\n showTime={showTime}\n format={DatePickerConfig[mode].dateDisplayFormat}\n value={dateValue}\n onChange={onValueStringChange}\n />\n );\n};\n\nexport default DatePicker;\n","import React, { useContext, useEffect, useRef, useState } from \"react\";\nimport { Pagination, Checkbox, Space, Row, Col, Spin, Tag, Badge } from \"antd\";\nimport {\n getTree,\n getTableColumns,\n getTableItems,\n hasActualValues,\n} from \"@/helpers/treeHelper\";\nimport { Tree as TreeOoui } from \"@gisce/ooui\";\n\nimport { TreeView, Column } from \"@/types\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport { calculateColumnsWidth } from \"@/helpers/dynamicColumnsHelper\";\nimport { parseFloatToString } from \"@/helpers/timeHelper\";\nimport { ProgressBarInput } from \"../base/ProgressBar\";\nimport { Table as GisceTable } from \"@gisce/react-formiga-table\";\nimport {\n PlusSquareOutlined,\n MinusSquareOutlined,\n LoadingOutlined,\n} from \"@ant-design/icons\";\nimport { One2manyValue } from \"../base/one2many/One2manyInput\";\nimport { Interweave } from \"interweave\";\nimport {\n ActionViewContext,\n ActionViewContextType,\n} from \"@/context/ActionViewContext\";\nimport { Many2oneTree } from \"../base/many2one/Many2oneTree\";\nimport { ReferenceTree } from \"../base/ReferenceTree\";\nimport dayjs from \"dayjs\";\nimport Avatar from \"../custom/Avatar\";\nimport { TagInput } from \"../custom/Tag\";\nimport { DatePickerConfig } from \"@/common/DatePicker\";\n\ntype Props = {\n total?: number;\n limit: number;\n page?: number;\n loading: boolean;\n treeView: TreeView;\n results: Array<any>;\n showPagination?: boolean;\n onRequestPageChange?: (page: number, pageSize?: number) => void;\n onRowClicked?: (record: any) => void;\n rowSelection?: any;\n scrollY?: number;\n colorsForResults?: { [key: number]: string };\n statusForResults?: { [key: number]: string };\n onChangeSort?: (results: any) => void;\n sorter?: any;\n onFetchChildrenForRecord?: (item: any) => Promise<any[]>;\n childField?: string;\n rootTree?: boolean;\n context?: any;\n readonly?: boolean;\n};\n\nconst booleanComponentFn = (value: boolean): React.ReactElement => {\n return (\n <div\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n alignContent: \"center\",\n }}\n >\n <Checkbox checked={value} disabled />\n </div>\n );\n};\n\nconst many2OneComponentFn = (m2oField: any): React.ReactElement => {\n return <Many2oneTree m2oField={m2oField} />;\n};\n\nconst textComponentFn = (value: any): React.ReactElement => {\n return (\n <Interweave\n content={value?.toString().replace(/(?:\\r\\n|\\r|\\n)/g, \"<br>\")}\n />\n );\n};\n\nconst dateComponentFn = (value: any): React.ReactElement => {\n if (!value || (value && value.length === 0)) return <></>;\n\n const formattedValue = dayjs(\n value,\n DatePickerConfig.date.dateInternalFormat\n ).format(DatePickerConfig.date.dateDisplayFormat);\n return <>{formattedValue}</>;\n};\n\nconst dateTimeComponentFn = (value: any): React.ReactElement => {\n if (!value || (value && value.length === 0)) return <></>;\n const formattedValue = dayjs(\n value,\n DatePickerConfig.time.dateInternalFormat\n ).format(DatePickerConfig.time.dateDisplayFormat);\n return <>{formattedValue}</>;\n};\n\nconst one2ManyComponentFn = (value: One2manyValue): React.ReactElement => {\n const length = Array.isArray(value?.items) ? value?.items.length : 0;\n return <>{`( ${length} )`}</>;\n};\n\nconst progressBarComponentFn = (value: any): React.ReactElement => {\n return <ProgressBarInput value={value} />;\n};\n\nconst floatTimeComponent = (value: number): React.ReactElement => {\n return <>{parseFloatToString(value)}</>;\n};\n\nconst numberComponent = (value: number): React.ReactElement => {\n return <div style={{ textAlign: \"right\" }}>{value}</div>;\n};\n\nconst imageComponent = (value: string): React.ReactElement => {\n return (\n <img\n src={`data:image/*;base64,${value}`}\n style={{ maxWidth: \"50px\", padding: \"5px\" }}\n />\n );\n};\n\nconst TagComponent = (\n value: any,\n key: string,\n ooui: any,\n context: any\n): React.ReactElement => {\n return <TagInput ooui={ooui} value={value} />;\n};\n\nconst SelectionComponent = (\n value: any,\n key: string,\n ooui: any,\n context: any\n): React.ReactElement => {\n return <>{ooui.selectionValues.get(value)}</>;\n};\n\nconst referenceComponent = (\n value: any,\n key: string,\n ooui: any,\n context: any\n): React.ReactElement => {\n return (\n <>\n <ReferenceTree\n value={value}\n selectionValues={ooui.selectionValues}\n context={context}\n />\n </>\n );\n};\n\nconst AvatarFn = (\n value: any,\n key: string,\n ooui: any,\n context: any\n): React.ReactElement => <Avatar ooui={ooui} value={value} />;\n\nfunction Tree(props: Props): React.ReactElement {\n const {\n page = 1,\n limit,\n total,\n treeView,\n results,\n onRequestPageChange,\n loading,\n onRowClicked,\n showPagination = true,\n rowSelection,\n scrollY,\n colorsForResults = {},\n statusForResults = {},\n onChangeSort,\n sorter,\n onFetchChildrenForRecord,\n childField,\n rootTree = false,\n context,\n readonly,\n } = props;\n\n const [items, setItems] = useState<Array<any>>([]);\n const [columns, setColumns] = useState<Array<Column>>([]);\n\n const errorInParseColors = useRef<boolean>(false);\n\n const treeOoui = useRef<any>(null);\n\n const { t } = useContext(LocaleContext) as LocaleContextType;\n const internalLimit = useRef(limit);\n\n const actionViewContext = useContext(\n ActionViewContext\n ) as ActionViewContextType;\n const { title = undefined, setTitle = undefined } =\n (rootTree ? actionViewContext : {}) || {};\n\n useEffect(() => {\n treeOoui.current = getTree(treeView);\n\n const columns = getTableColumns(\n treeOoui.current,\n {\n boolean: booleanComponentFn,\n many2one: many2OneComponentFn,\n text: textComponentFn,\n one2many: one2ManyComponentFn,\n many2many: one2ManyComponentFn,\n progressbar: progressBarComponentFn,\n float_time: floatTimeComponent,\n image: imageComponent,\n integer: numberComponent,\n float: numberComponent,\n reference: referenceComponent,\n tag: TagComponent,\n selection: SelectionComponent,\n date: dateComponentFn,\n datetime: dateTimeComponentFn,\n avatar: AvatarFn,\n },\n context\n );\n\n setColumns(columns);\n\n if (treeOoui.current.string && title !== treeOoui.current.string) {\n setTitle?.(treeOoui.current.string);\n }\n }, [treeView]);\n\n useEffect(() => {\n errorInParseColors.current = false;\n const items = getTableItems(treeOoui.current, results);\n setItems(items);\n internalLimit.current = limit;\n }, [results]);\n\n const from = (page - 1) * internalLimit.current + 1;\n const to = from - 1 + items.length;\n const summary =\n total === undefined\n ? null\n : total === 0\n ? t(\"no_results\")\n : t(\"summary\")\n .replace(\"{from}\", from?.toString())\n .replace(\"{to}\", to?.toString())\n .replace(\"{total}\", total?.toString());\n\n const pagination = () => {\n if (!showPagination || treeView.isExpandable) {\n return null;\n }\n\n return loading ? null : total === undefined ? (\n <Spin className=\"pb-4\" />\n ) : (\n <Row align=\"bottom\" className=\"pb-4\">\n <Col span={12}>\n <Pagination\n total={total}\n pageSize={\n internalLimit.current === 0 ? total : internalLimit.current\n }\n current={page}\n showSizeChanger={false}\n onChange={onRequestPageChange}\n />\n </Col>\n <Col span={12} className=\"text-right\">\n {summary}\n </Col>\n </Row>\n );\n };\n\n function getSums() {\n const tree = treeOoui.current as TreeOoui;\n\n const sumFields = tree.columns\n .filter((it) => it.sum !== undefined)\n .map((it) => {\n return { label: it.sum, field: it.id };\n });\n\n if (!sumFields || sumFields.length === 0) {\n return null;\n }\n\n let summary: string[] = [];\n let sumItems =\n rowSelection?.selectedRowKeys?.length > 0\n ? items.filter((result: any) => {\n return rowSelection?.selectedRowKeys.includes(result.id);\n })\n : items;\n\n sumFields.forEach((sumField) => {\n const total = sumItems.reduce((prev, current) => {\n if (current[sumField.field] && !isNaN(current[sumField.field]))\n return prev + current[sumField.field];\n else return prev;\n }, 0);\n\n summary.push(`${sumField.label}: ${Math.round(total * 100) / 100}`);\n });\n\n return <div className=\"p-1 pb-0 pl-2 mt-2 \">{summary.join(\", \")}</div>;\n }\n\n let dataTable;\n let adjustedHeight = scrollY;\n\n // This helper function helps to calculate the width for each column\n // based on all table cells - column cell and source cell\n if (treeOoui.current !== null) {\n const maxWidthPerCell = 600;\n dataTable = calculateColumnsWidth(columns, items, maxWidthPerCell);\n const tree = treeOoui.current as TreeOoui;\n\n if (scrollY && tree.columns.some((it) => it.sum !== undefined)) {\n adjustedHeight = scrollY - 30;\n }\n }\n\n return treeOoui.current === null ? (\n <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 } = 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 const selectedRowItems = getResults().filter((entry: any) =>\n selectedRowKeys.includes(entry.id)\n );\n setSelectedRowItems?.(selectedRowItems);\n onChangeSelectedRowKeys?.(selectedRowKeys);\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 />\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);\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 const IconElement: any = icon && iconMapper(icon);\n\n if (tw >= width * 0.85 || fontSize * 2 < twoLinesHeight) {\n const maxFontSize = ((width * 0.85) / tw) * fontSize;\n fontSize = maxFontSize;\n }\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 });\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 from \"react\";\nimport { Menu, Dropdown, Button } from \"antd\";\nimport { DownOutlined } from \"@ant-design/icons\";\n\ntype Props = {\n onItemClick: (event: any) => void;\n items: any[];\n tooltip: string;\n icon: any;\n label?: string;\n disabled?: boolean;\n};\n\nfunction DropdownButton(props: Props) {\n const {\n icon,\n tooltip,\n items = [],\n onItemClick,\n label,\n disabled = false,\n } = props;\n\n function getMenu() {\n const menuItems = items?.map((item, idx) => {\n if (item.name === \"divider\") {\n return <Menu.Divider key={\"divider\" + idx} />;\n }\n return <Menu.Item key={item.id}>{item.name}</Menu.Item>;\n });\n\n return (\n <Menu onClick={handleMenuClick}>\n <Menu.ItemGroup title={tooltip}>{menuItems}</Menu.ItemGroup>\n </Menu>\n );\n }\n\n function handleMenuClick(event: any) {\n const itemClicked = items.find((item: any) => {\n return !isNaN(event.key)\n ? item.id === parseInt(event.key)\n : item.id === event.key;\n });\n\n onItemClick(itemClicked);\n }\n\n return (\n <Dropdown\n overlay={getMenu()}\n disabled={disabled || !items || items.length === 0}\n >\n <Button>\n {icon} {label} <DownOutlined />\n </Button>\n </Dropdown>\n );\n}\n\nexport default DropdownButton;\n","import React from \"react\";\nimport ButtonWithTooltip from \"@/common/ButtonWithTooltip\";\nimport { LoadingOutlined } from \"@ant-design/icons\";\n\ntype Props = {\n tooltip: string;\n onClick: any;\n icon: any;\n disabled?: boolean;\n label?: string;\n loading?: boolean;\n type?: string;\n};\n\nfunction ActionButton(props: Props) {\n const {\n onClick,\n disabled = false,\n loading = false,\n tooltip,\n icon,\n label,\n type = \"default\",\n } = props;\n const finalIcon = loading ? <LoadingOutlined /> : icon;\n\n return (\n <ButtonWithTooltip\n type={type as any}\n tooltip={tooltip}\n onClick={onClick}\n disabled={disabled}\n >\n {finalIcon}\n {label}\n </ButtonWithTooltip>\n );\n}\n\nexport default ActionButton;\n","import React, { useContext } from \"react\";\nimport { FileAddOutlined } from \"@ant-design/icons\";\nimport ActionButton from \"./ActionButton\";\nimport {\n ActionViewContext,\n ActionViewContextType,\n} from \"@/context/ActionViewContext\";\nimport showUnsavedChangesDialog from \"@/ui/UnsavedChangesDialog\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\ntype Props = {\n disabled?: boolean;\n};\n\nfunction NewButton(props: Props) {\n const { disabled = false } = props;\n\n const { formHasChanges, onNewClicked: onNewClickedProps } = useContext(\n ActionViewContext\n ) as ActionViewContextType;\n const { t, lang } = useContext(LocaleContext) as LocaleContextType;\n\n const onNewClicked = () => {\n if (formHasChanges) {\n showUnsavedChangesDialog({\n lang,\n onOk: () => {\n onNewClickedProps();\n },\n });\n return;\n }\n\n onNewClickedProps();\n };\n\n return (\n <ActionButton\n icon={<FileAddOutlined />}\n tooltip={t(\"new\")}\n onClick={onNewClicked}\n disabled={disabled}\n />\n );\n}\nexport default NewButton;\n","import React from \"react\";\nimport { Modal } from \"antd\";\nimport { ExclamationCircleOutlined } from \"@ant-design/icons\";\nimport { tForLang } from \"@/context/LocaleContext\";\n\nconst { confirm } = Modal;\n\nconst showDialog = ({\n onOk,\n onCancel,\n lang,\n}: {\n onOk: () => void;\n onCancel?: () => void;\n lang: string;\n}) => {\n confirm({\n title: tForLang(\"unsavedChanges\", lang),\n icon: <ExclamationCircleOutlined />,\n centered: true,\n content: tForLang(\"confirmRefreshWithoutSave\", lang),\n okText: tForLang(\"discardAndRefresh\", lang),\n cancelText: tForLang(\"cancel\", lang),\n onOk,\n onCancel,\n });\n};\n\nexport default showDialog;\n","import ConnectionProvider from \"@/ConnectionProvider\";\nimport React from \"react\";\nimport showInfo from \"@/ui/InfoDialog\";\n\nasync function showLogInfo(\n model: string,\n currentId: number,\n translateFn: Function\n) {\n const logInfo = ((await ConnectionProvider.getHandler().getLogInfo({\n model,\n ids: [currentId],\n })) as any)[0];\n\n const { create_date, create_uid, id, write_date, write_uid } = logInfo;\n\n showInfo(\n <div>\n {\"ID: \" + id} <br />\n {translateFn(\"createdBy\") + \": \" + create_uid[1]} <br />\n {translateFn(\"creationDate\") + \": \" + create_date} <br />\n {translateFn(\"lastUpdatedBy\") + \": \" + write_uid[1]} <br />\n {translateFn(\"lastUpdatedDate\") + \": \" + write_date}\n </div>\n );\n}\n\nexport { showLogInfo };\n","import React, { useContext, useState } from \"react\";\nimport {\n DownOutlined,\n FormOutlined,\n DownloadOutlined,\n LinkOutlined,\n FileAddOutlined,\n TableOutlined,\n} from \"@ant-design/icons\";\nimport { Popover, Button, Row, Col, Tooltip, Spin } from \"antd\";\nimport {\n LocaleContext,\n LocaleContextType,\n tForLang,\n} from \"@/context/LocaleContext\";\n\nexport type Attachment = {\n id: number;\n name: string;\n datas: string;\n link: string;\n};\n\nexport type AttachmentsButtonWrapperProps = {\n attachments: Attachment[] | undefined;\n numberOfAttachments: number;\n disabled: boolean;\n loading: boolean;\n onAddNewAttachment: () => void;\n onListAllAttachments: () => void;\n onopenAttachmentLink: (attachment: Attachment) => void;\n onOpenAttachmentDetail: (attachment: Attachment) => void;\n};\n\nexport const AttachmentsButtonWrapper = (\n props: AttachmentsButtonWrapperProps\n) => {\n const { numberOfAttachments, disabled } = props;\n const { t, lang } = useContext(LocaleContext) as LocaleContextType;\n const [popoverVisible, setPopoverVisible] = useState<boolean>(false);\n\n const button = (\n <Button disabled={disabled}>\n <LinkOutlined />\n {`(${numberOfAttachments})`}\n <DownOutlined style={{ fontSize: 12 }} />\n </Button>\n );\n\n if (disabled) {\n return button;\n }\n\n return (\n <Popover\n onVisibleChange={(visible: boolean) => setPopoverVisible(visible)}\n visible={popoverVisible}\n placement=\"bottom\"\n content={Content(props, setPopoverVisible, lang)}\n title={t(\"attachments\")}\n arrowContent={null}\n >\n {button}\n </Popover>\n );\n};\n\nconst Content = (\n props: AttachmentsButtonWrapperProps,\n setPopoverVisible: (visible: boolean) => void,\n locale: string\n) => {\n const {\n attachments = [],\n loading,\n onAddNewAttachment,\n onopenAttachmentLink,\n onOpenAttachmentDetail,\n onListAllAttachments,\n } = props;\n if (loading) {\n return <Spin style={{ padding: 20 }} />;\n }\n\n return (\n <>\n <a\n style={{ display: \"block\", paddingBottom: 5 }}\n href=\"#\"\n onClick={() => {\n setPopoverVisible(false);\n onListAllAttachments();\n }}\n >\n <TableOutlined /> {tForLang(\"listAllAttachments\", locale)}\n </a>\n <a\n style={{ display: \"block\" }}\n href=\"#\"\n onClick={() => {\n setPopoverVisible(false);\n onAddNewAttachment();\n }}\n >\n <FileAddOutlined /> {tForLang(\"addNewAttachment\", locale)}\n </a>\n {attachments.length > 0 && (\n <>\n <li className=\"ant-dropdown-menu-item-divider\"></li>\n {attachments.map((attachment: any) => {\n const Icon = attachment.link ? LinkOutlined : DownloadOutlined;\n return (\n <Row\n style={{ paddingTop: 4, paddingBottom: 4 }}\n wrap={false}\n align=\"middle\"\n key={attachment.id}\n >\n <Col flex=\"auto\">{attachment.name}</Col>\n <Col flex=\"25px\" style={{ textAlign: \"center\" }}>\n {(attachment.datas_fname || attachment.link) && (\n <Tooltip\n title={\n attachment.link\n ? tForLang(\"openAttachmentLink\", locale)\n : tForLang(\"download\", locale)\n }\n >\n <Icon\n style={{ cursor: \"pointer\" }}\n onClick={() => {\n setPopoverVisible(false);\n onopenAttachmentLink(attachment);\n }}\n />\n </Tooltip>\n )}\n </Col>\n <Col flex=\"25px\" style={{ textAlign: \"center\" }}>\n <Tooltip title={tForLang(\"openAttachment\", locale)}>\n <FormOutlined\n style={{ cursor: \"pointer\" }}\n onClick={() => {\n setPopoverVisible(false);\n onOpenAttachmentDetail(attachment);\n }}\n />\n </Tooltip>\n </Col>\n </Row>\n );\n })}\n </>\n )}\n </>\n );\n};\n","import React, { useCallback, useContext, useEffect, useState } from \"react\";\nimport { getMimeType, openBase64InNewTab } from \"@/helpers/filesHelper\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport {\n ActionViewContext,\n ActionViewContextType,\n} from \"@/context/ActionViewContext\";\nimport showErrorDialog from \"@/ui/ActionErrorDialog\";\nimport {\n Attachment,\n AttachmentsButtonWrapper,\n} from \"./AttachmentsButtonWrapper\";\nimport { Modal, Spin } from \"antd\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\nexport type AttachmentsButtonProps = {\n attachments?: any;\n disabled?: boolean;\n onAddNewAttachment: () => void;\n onListAllAttachments: () => void;\n onViewAttachmentDetails: (attachment: Attachment) => void;\n};\n\nfunction AttachmentsButton(props: AttachmentsButtonProps) {\n const {\n attachments,\n disabled = false,\n onAddNewAttachment,\n onListAllAttachments,\n onViewAttachmentDetails,\n } = props;\n const { formRef } = useContext(ActionViewContext) as ActionViewContextType;\n const [preloading, setPreloading] = useState(false);\n const [preloadedAttachments, setPreloadedAttachments] = useState<\n Attachment[]\n >([]);\n const [downloading, setDownloading] = useState(false);\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n const preloadAttachments = useCallback(async () => {\n setPreloading(true);\n try {\n const results = await ConnectionProvider.getHandler().readObjects({\n model: \"ir.attachment\",\n ids: attachments.map((a: any) => a.id),\n fieldsToRetrieve: [\"name\", \"datas_fname\", \"link\"],\n context: (formRef.current as any).getContext(),\n });\n setPreloadedAttachments(\n results.map((r: any) => ({\n id: r.id,\n name: r.name,\n datas_fname: r.datas_fname,\n link: r.link,\n }))\n );\n } catch (error) {\n showErrorDialog(error as any);\n }\n setPreloading(false);\n }, attachments);\n\n const openAttachmentLink = useCallback(async (attachment: any) => {\n if (attachment.link) {\n window.open(attachment.link);\n return;\n }\n\n setDownloading(true);\n\n let retrievedAttachment;\n\n try {\n const results = await ConnectionProvider.getHandler().readObjects({\n model: \"ir.attachment\",\n ids: [attachment.id],\n context: (formRef.current as any).getContext(),\n });\n retrievedAttachment = results[0];\n } catch (error) {\n showErrorDialog(error as any);\n }\n\n setDownloading(false);\n\n if (!retrievedAttachment) {\n return;\n }\n\n if (retrievedAttachment.datas) {\n const fileType: any = await getMimeType(retrievedAttachment.datas);\n openBase64InNewTab(retrievedAttachment.datas, fileType.mime);\n } else {\n onViewAttachmentDetails(retrievedAttachment);\n }\n }, []);\n\n const openAttachmentDetail = useCallback(async (attachment: any) => {\n onViewAttachmentDetails(attachment);\n }, []);\n\n useEffect(() => {\n preloadAttachments();\n }, [preloadAttachments]);\n\n return (<>\n <AttachmentsButtonWrapper\n numberOfAttachments={attachments.length}\n attachments={preloadedAttachments}\n disabled={disabled}\n loading={preloading}\n onAddNewAttachment={onAddNewAttachment}\n onListAllAttachments={onListAllAttachments}\n onopenAttachmentLink={openAttachmentLink}\n onOpenAttachmentDetail={openAttachmentDetail}\n />\n <Modal\n title={t(\"downloadingAttachment\")}\n open={downloading}\n footer={null}\n closable={false}\n centered\n maskClosable={false}\n >\n <Spin />\n </Modal>\n </>);\n}\n\nexport default AttachmentsButton;\n","import React, { useContext, useEffect, useRef } from \"react\";\nimport { Space, Spin, message } from \"antd\";\nimport {\n SaveOutlined,\n RightOutlined,\n LeftOutlined,\n DeleteOutlined,\n ThunderboltOutlined,\n PrinterOutlined,\n EnterOutlined,\n ReloadOutlined,\n CopyOutlined,\n InfoCircleOutlined,\n} from \"@ant-design/icons\";\nimport ChangeViewButton from \"./ChangeViewButton\";\nimport DropdownButton from \"./DropdownButton\";\nimport ActionButton from \"./ActionButton\";\nimport {\n ActionViewContext,\n ActionViewContextType,\n} from \"@/context/ActionViewContext\";\nimport NewButton from \"./NewButton\";\nimport showUnsavedChangesDialog from \"@/ui/UnsavedChangesDialog\";\nimport showConfirmDialog from \"@/ui/ConfirmDialog\";\nimport showErrorDialog from \"@/ui/GenericErrorDialog\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport refreshChangesDialog from \"@/ui/RefreshItemDialog\";\nimport { showLogInfo } from \"@/helpers/logInfoHelper\";\n\nimport {\n TabManagerContext,\n TabManagerContextType,\n} from \"@/context/TabManagerContext\";\n\nimport {\n ContentRootContext,\n ContentRootContextType,\n} from \"@/context/ContentRootContext\";\nimport AttachmentsButton from \"./AttachmentsButton\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport { Attachment } from \"./AttachmentsButtonWrapper\";\n\nfunction FormActionBar({ toolbar }: { toolbar: any }) {\n const {\n availableViews,\n currentView,\n setCurrentView,\n onFormSave,\n formHasChanges,\n formIsSaving,\n currentId,\n results,\n setCurrentItemIndex,\n currentItemIndex,\n setCurrentId,\n currentModel,\n setRemovingItem,\n removingItem,\n duplicatingItem,\n setDuplicatingItem,\n setResults,\n formIsLoading,\n attachments,\n formRef,\n setFormHasChanges,\n previousView,\n setPreviousView,\n goToResourceId,\n } = useContext(ActionViewContext) as ActionViewContextType;\n const { t, lang } = useContext(LocaleContext) as LocaleContextType;\n\n const contentRootContext = useContext(\n ContentRootContext\n ) as ContentRootContextType;\n const { processAction } = contentRootContext || {};\n\n const tabManagerContext = useContext(\n TabManagerContext\n ) as TabManagerContextType;\n const { openRelate, openDefaultActionForModel } = tabManagerContext || {};\n\n function tryRefresh(callback: any) {\n if (formHasChanges) {\n refreshChangesDialog({\n lang,\n onOk: () => {\n callback();\n },\n });\n return;\n }\n\n callback();\n }\n\n function tryNavigate(callback: any) {\n if (formHasChanges) {\n showUnsavedChangesDialog({\n lang,\n onOk: () => {\n callback();\n },\n });\n return;\n }\n\n callback();\n }\n\n function onNextClick() {\n if (results && results.length > currentItemIndex! + 1) {\n setCurrentItemIndex?.(currentItemIndex! + 1);\n setCurrentId?.(results[currentItemIndex! + 1].id);\n } else if (results && currentItemIndex! + 1 === results.length) {\n setCurrentItemIndex?.(0);\n setCurrentId?.(results[0].id);\n }\n }\n\n function onPreviousClick() {\n if (results && currentItemIndex! > 0) {\n setCurrentItemIndex?.(currentItemIndex! - 1);\n setCurrentId?.(results[currentItemIndex! - 1].id);\n } else if (results && currentItemIndex === 0) {\n setCurrentItemIndex?.(results.length - 1);\n setCurrentId?.(results[results.length - 1].id);\n }\n }\n\n function tryDelete() {\n showConfirmDialog({\n confirmMessage: t(\"confirmRemoveItem\"),\n lang,\n onOk: () => {\n remove();\n },\n });\n }\n\n async function remove() {\n try {\n setRemovingItem?.(true);\n\n await ConnectionProvider.getHandler().delete({\n model: currentModel!,\n ids: [currentId!],\n });\n\n const filteredResults = results?.filter((item: any) => {\n return item.id !== currentId;\n });\n setResults?.(filteredResults!);\n\n let newIndex = 0;\n\n if (currentItemIndex! > 0 && currentItemIndex! <= results!.length - 1) {\n newIndex = currentItemIndex! - 1;\n }\n\n if (!filteredResults?.[newIndex]) {\n setCurrentId?.(undefined);\n setCurrentItemIndex?.(undefined);\n } else {\n setCurrentId?.(filteredResults?.[newIndex].id);\n setCurrentItemIndex?.(newIndex);\n }\n } catch (e) {\n showErrorDialog(JSON.stringify(e));\n } finally {\n setRemovingItem?.(false);\n }\n }\n\n async function duplicate() {\n try {\n setDuplicatingItem?.(true);\n\n const newId = await ConnectionProvider.getHandler().duplicate({\n id: currentId!,\n model: currentModel!,\n context: (formRef.current as any).getContext(),\n });\n\n if (newId) {\n await goToResourceId?.(newId);\n }\n } catch (e) {\n showErrorDialog(JSON.stringify(e));\n } finally {\n setDuplicatingItem?.(false);\n }\n }\n\n const mustDisableButtons =\n formIsSaving || removingItem || formIsLoading || duplicatingItem;\n\n function runAction(actionData: any) {\n processAction?.({\n actionData,\n values: (formRef.current as any).getValues(),\n fields: (formRef.current as any).getFields(),\n context: (formRef.current as any).getContext(),\n onRefreshParentValues: () => {\n (formRef.current as any).fetchValues();\n },\n });\n }\n\n if (!currentView) {\n return null;\n }\n\n return (\n <Space wrap={true}>\n {formIsLoading && (\n <>\n <Spin />\n {separator()}\n {separator()}\n </>\n )}\n <NewButton\n disabled={\n formIsSaving || formIsLoading || removingItem || duplicatingItem\n }\n />\n <ActionButton\n icon={<SaveOutlined />}\n tooltip={t(\"save\")}\n disabled={!formHasChanges || mustDisableButtons}\n loading={formIsSaving}\n onClick={onFormSave}\n />\n <ActionButton\n icon={<CopyOutlined />}\n tooltip={t(\"duplicate\")}\n disabled={\n formHasChanges ||\n formIsSaving ||\n currentId === undefined ||\n duplicatingItem ||\n formIsLoading\n }\n loading={duplicatingItem}\n onClick={duplicate}\n />\n <ActionButton\n icon={<DeleteOutlined />}\n tooltip={t(\"delete\")}\n disabled={\n formIsSaving ||\n currentId === undefined ||\n removingItem ||\n duplicatingItem ||\n formIsLoading\n }\n loading={removingItem}\n onClick={tryDelete}\n />\n {separator()}\n <ActionButton\n icon={<InfoCircleOutlined />}\n tooltip={t(\"showLogs\")}\n disabled={\n formIsSaving ||\n currentId === undefined ||\n removingItem ||\n duplicatingItem ||\n formIsLoading\n }\n loading={false}\n onClick={() => {\n showLogInfo(currentModel!, currentId!, t);\n }}\n />\n <ActionButton\n icon={<ReloadOutlined />}\n tooltip={t(\"refresh\")}\n disabled={\n formIsSaving ||\n currentId === undefined ||\n removingItem ||\n duplicatingItem ||\n formIsLoading\n }\n loading={false}\n onClick={() => {\n tryRefresh(() => {\n (formRef.current as any).fetchValues();\n });\n }}\n />\n {separator()}\n <ChangeViewButton\n currentView={currentView}\n previousView={previousView}\n availableViews={availableViews}\n onChangeView={(view: any) => {\n setPreviousView?.(currentView);\n setFormHasChanges?.(false);\n setCurrentView?.(view);\n }}\n disabled={mustDisableButtons}\n formHasChanges={formHasChanges}\n />\n {separator()}\n <Space>\n <ActionButton\n icon={<LeftOutlined />}\n tooltip={t(\"previous\")}\n disabled={mustDisableButtons}\n loading={false}\n onClick={() => {\n tryNavigate(onPreviousClick);\n }}\n />\n <ActionButton\n icon={<RightOutlined />}\n tooltip={t(\"next\")}\n disabled={mustDisableButtons}\n loading={false}\n onClick={() => {\n tryNavigate(onNextClick);\n }}\n />\n </Space>\n {separator()}\n <DropdownButton\n icon={<ThunderboltOutlined />}\n disabled={mustDisableButtons}\n tooltip={t(\"actions\")}\n items={toolbar?.action}\n onItemClick={async (action: any) => {\n if (!action) {\n return;\n }\n\n const result = await saveDocument({\n onFormSave,\n });\n\n if (!result.succeed) {\n return;\n }\n\n runAction(action);\n }}\n />\n <DropdownButton\n icon={<PrinterOutlined />}\n disabled={mustDisableButtons}\n tooltip={t(\"reports\")}\n items={toolbar?.print}\n onItemClick={async (report: any) => {\n if (!report) {\n return;\n }\n const result = await saveDocument({\n onFormSave,\n });\n\n if (!result.succeed) {\n return;\n }\n\n runAction({\n ...report,\n datas: {\n ...(report.datas || {}),\n ids: [result.currentId as number],\n },\n });\n }}\n />\n <DropdownButton\n icon={<EnterOutlined />}\n disabled={mustDisableButtons}\n tooltip={t(\"related\")}\n items={toolbar?.relate}\n onItemClick={async (relate: any) => {\n if (!relate) {\n return;\n }\n\n const result = await saveDocument({\n onFormSave,\n });\n\n if (!result.succeed) {\n return;\n }\n\n openRelate({\n relateData: relate,\n values: (formRef.current as any).getValues(),\n fields: (formRef.current as any).getFields(),\n action_id: relate.id,\n action_type: relate.type,\n });\n }}\n />\n <AttachmentsButton\n disabled={mustDisableButtons}\n attachments={attachments}\n onAddNewAttachment={async () => {\n const result = await saveDocument({\n onFormSave,\n });\n\n if (!result.succeed) {\n return;\n }\n\n const res_id = result.currentId as number;\n const res_model = currentModel as string;\n openDefaultActionForModel({\n model: \"ir.attachment\",\n values: {\n selection_associated_object: `${res_model},${res_id}`,\n },\n forced_values: {\n res_model,\n res_id,\n },\n initialViewType: \"form\",\n });\n }}\n onListAllAttachments={async () => {\n const result = await saveDocument({\n onFormSave,\n });\n\n if (!result.succeed) {\n return;\n }\n\n const res_id = result.currentId as number;\n const res_model = currentModel as string;\n openDefaultActionForModel({\n model: \"ir.attachment\",\n domain: [\n [\"res_model\", \"=\", `${res_model}`],\n [\"res_id\", \"=\", `${res_id}`],\n ],\n initialViewType: \"tree\",\n });\n }}\n onViewAttachmentDetails={async (attachment: Attachment) => {\n const result = await saveDocument({\n onFormSave,\n });\n\n if (!result.succeed) {\n return;\n }\n\n openDefaultActionForModel({\n model: \"ir.attachment\",\n res_id: attachment.id,\n initialViewType: \"form\",\n });\n }}\n />\n </Space>\n );\n}\n\nfunction separator() {\n return <div className=\"inline-block w-2\" />;\n}\n\nasync function saveDocument({\n onFormSave,\n}: {\n onFormSave?: () => Promise<{ succeed: boolean; id: number }>;\n}): Promise<{ succeed: boolean; currentId?: number }> {\n const result = await onFormSave?.();\n if (result?.succeed) {\n return { succeed: true, currentId: result.id };\n } else {\n return { succeed: false, currentId: undefined };\n }\n}\n\nexport default FormActionBar;\n","import React, { useContext, useEffect, useState } from \"react\";\nimport { Input, Button, Row, Col, theme } from \"antd\";\nimport { Char as CharOoui } from \"@gisce/ooui\";\nimport { EditOutlined, CheckOutlined } from \"@ant-design/icons\";\nimport { FormContext, FormContextType } from \"@/context/FormContext\";\nconst { useToken } = theme;\n\ninterface LinkInputProps {\n ooui: CharOoui;\n value?: string;\n onChange?: (value: string) => void;\n valueValidator: (value?: string) => boolean;\n linkPrefix?: string;\n}\n\nexport const LinkInput = (props: LinkInputProps) => {\n const { ooui, value, onChange, valueValidator, linkPrefix = \"\" } = props;\n const { id, readOnly, required } = ooui as CharOoui;\n const { token } = useToken();\n const requiredStyle =\n required && !readOnly\n ? { backgroundColor: token.colorPrimaryBg }\n : undefined;\n const formContext = useContext(FormContext) as FormContextType;\n const { elementHasLostFocus } = formContext || {};\n\n const [editMode, setEditMode] = useState(false);\n const [showInput, setShowInput] = useState(false);\n\n useEffect(() => {\n if (readOnly && !editMode) {\n setShowInput(false);\n }\n\n if (!value && !readOnly) {\n setEditMode(true);\n setShowInput(true);\n }\n }, [editMode, readOnly]);\n\n const onValueStringChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(e.target.value);\n };\n\n return (\n <Row gutter={8} wrap={false} align=\"middle\">\n {!readOnly ? (\n <Col flex=\"32px\">\n {editMode ? (\n <Button\n icon={<CheckOutlined />}\n onClick={() => {\n if (valueValidator(value)) {\n setEditMode(false);\n setShowInput(false);\n }\n }}\n style={{ borderTopRightRadius: 0, borderBottomRightRadius: 0 }}\n tabIndex={-1}\n />\n ) : (\n <Button\n icon={<EditOutlined />}\n onClick={() => {\n setEditMode(true);\n setShowInput(true);\n }}\n style={{ borderTopRightRadius: 0, borderBottomRightRadius: 0 }}\n tabIndex={-1}\n />\n )}\n </Col>\n ) : null}\n <Col flex=\"auto\">\n {showInput ? (\n <Input\n style={{ borderTopLeftRadius: 0, borderBottomLeftRadius: 0, ...requiredStyle }}\n id={id}\n onChange={onValueStringChange}\n value={value}\n onBlur={() => {\n if (valueValidator(value)) {\n setEditMode(false);\n setShowInput(false);\n elementHasLostFocus?.();\n }\n }}\n />\n ) : (\n <a\n href={`${linkPrefix}${value}`}\n style={{ color: token.colorPrimary, paddingRight: 15 }}\n target=\"_blank\"\n >\n {value}\n </a>\n )}\n </Col>\n </Row>\n );\n};\n","import React from \"react\";\nimport isURL from \"validator/lib/isURL\";\nimport Field from \"@/common/Field\";\n\nimport { WidgetProps } from \"@/types\";\nimport { LinkInput } from \"./LinkInput\";\nimport { Char as CharOoui } from \"@gisce/ooui\";\n\nexport const Url = (props: WidgetProps) => {\n const { ooui } = props;\n const { required } = ooui as CharOoui;\n\n return (\n <Field required={required} {...props}>\n <LinkInput\n ooui={ooui as CharOoui}\n valueValidator={(value) => {\n if (!value) {\n return false;\n }\n return isURL(value);\n }}\n />\n </Field>\n );\n};\n","import React from \"react\";\nimport isEmail from \"validator/lib/isEmail\";\nimport Field from \"@/common/Field\";\n\nimport { WidgetProps } from \"@/types\";\nimport { LinkInput } from \"./LinkInput\";\nimport { Char as CharOoui } from \"@gisce/ooui\";\n\nexport const Email = (props: WidgetProps) => {\n const { ooui } = props;\n const { required } = ooui as CharOoui;\n\n return (\n <Field required={required} {...props}>\n <LinkInput\n ooui={ooui as CharOoui}\n linkPrefix={\"mailto:\"}\n valueValidator={(value) => {\n if (!value) {\n return false;\n }\n return isEmail(value);\n }}\n />\n </Field>\n );\n};\n","import React, { useContext, useRef } from \"react\";\nimport { Button, Col, Form, InputNumber, Modal, Row, Space } from \"antd\";\nimport { CheckOutlined, CloseOutlined } from \"@ant-design/icons\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\ntype Props = {\n visible: boolean;\n onIdSubmitted: (id: number) => void;\n onCancel: () => void;\n isSearching: boolean;\n};\n\nexport const GoToResourceModal = (props: Props) => {\n const { visible, onIdSubmitted, onCancel, isSearching } = props;\n\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n const inputRef = useRef<null | HTMLElement>();\n\n function handleSubmit(values: any) {\n onIdSubmitted(values.id);\n }\n\n return (\n (<Modal\n title={t(\"goToResourceId\")}\n centered\n open={visible}\n footer={null}\n destroyOnClose\n onCancel={onCancel}\n maskClosable={false}\n afterOpenChange={(open) => open && inputRef.current?.focus()}\n >\n <Form layout=\"vertical\" onFinish={handleSubmit} autoComplete=\"off\">\n <Form.Item\n name={\"id\"}\n label={t(\"searchId\")}\n rules={[\n {\n required: true,\n type: \"number\",\n },\n ]}\n >\n <InputNumber style={{ width: \"100%\" }} autoFocus ref={inputRef as any}/>\n </Form.Item>\n <Row align=\"middle\" justify=\"end\">\n <Col>\n <Space>\n <Button\n icon={<CloseOutlined />}\n htmlType=\"button\"\n onClick={onCancel}\n disabled={isSearching}\n >\n {t(\"cancel\")}\n </Button>\n <Button\n loading={isSearching}\n style={{ marginLeft: 15 }}\n icon={<CheckOutlined />}\n htmlType=\"submit\"\n type=\"primary\"\n disabled={isSearching}\n >\n {t(\"ok\")}\n </Button>\n </Space>\n </Col>\n </Row>\n </Form>\n </Modal>)\n );\n};\n","import React from \"react\";\nimport ButtonWithTooltip, {Props as ButtonWithTooltipProps } from \"@/common/ButtonWithTooltip\";\nimport { theme } from 'antd';\nconst { useToken } = theme;\n\ntype Props = ButtonWithTooltipProps & {\n badgeNumber?: number;\n};\n\nfunction ButtonWithBadge(props: Props) {\n const { badgeNumber = 0, ...restProps } = props;\n const { token } = useToken();\n\n return (\n <div style={{ position: \"relative\" }}>\n {badgeNumber > 0 && (\n <div style={{ position: \"absolute\", left: -10, top: -10, zIndex: 2 }}>\n <span\n style={{\n display: \"inline-block\",\n minWidth: \"22px\",\n padding: \"2px\",\n borderRadius: \"50%\",\n fontSize: \"12px\",\n textAlign: \"center\",\n background: token.colorPrimaryHover,\n color: token.colorPrimaryBg,\n }}\n >\n {badgeNumber}\n </span>\n </div>\n )}\n <ButtonWithTooltip\n {...restProps}\n style={{ width: 46, zIndex: 0 }}\n ></ButtonWithTooltip>\n </div>\n );\n}\n\nexport default ButtonWithBadge;\n","import React, { useContext } from \"react\";\nimport { Space } from \"antd\";\nimport ChangeViewButton from \"./ChangeViewButton\";\nimport {\n ActionViewContext,\n ActionViewContextType,\n} from \"@/context/ActionViewContext\";\nimport ActionButton from \"./ActionButton\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport ButtonWithBadge from \"./ButtonWithBadge\";\nimport { ReloadOutlined, FilterOutlined } from \"@ant-design/icons\";\nimport { View } from \"@/types\";\n\nfunction GraphActionBar({ refreshGraph }: { refreshGraph: () => void }) {\n const { t } = useContext(LocaleContext) as LocaleContextType;\n const {\n availableViews,\n currentView,\n setCurrentView,\n searchParams,\n searchVisible,\n setSearchVisible,\n graphIsLoading,\n previousView,\n setPreviousView,\n } = useContext(ActionViewContext) as ActionViewContextType;\n\n return (\n <Space wrap={true}>\n <ButtonWithBadge\n icon={\n <FilterOutlined\n style={{ color: searchVisible ? \"white\" : undefined }}\n />\n }\n tooltip={t(\"advanced_search\")}\n type={searchVisible ? \"primary\" : \"default\"}\n onClick={() => {\n setSearchVisible?.(!searchVisible);\n }}\n disabled={graphIsLoading}\n badgeNumber={searchParams?.length}\n />\n <ActionButton\n icon={<ReloadOutlined />}\n tooltip={t(\"refresh\")}\n disabled={graphIsLoading}\n loading={false}\n onClick={() => {\n refreshGraph();\n }}\n />\n <ChangeViewButton\n currentView={currentView}\n availableViews={availableViews}\n onChangeView={(newView: View) => {\n setPreviousView?.(currentView);\n setCurrentView?.(newView);\n }}\n disabled={false}\n previousView={previousView}\n />\n </Space>\n );\n}\n\nexport default GraphActionBar;\n","import React, { useContext } from \"react\";\nimport { Row, Col, Typography, theme } from \"antd\";\nimport {\n ActionViewContext,\n ActionViewContextType,\n} from \"@/context/ActionViewContext\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport { CopyOutlined } from \"@ant-design/icons\";\n\nconst { useToken } = theme;\n\nconst { Title, Text } = Typography;\n\ntype Props = {\n title?: string;\n children?: any;\n};\n\nfunction TitleHeader(props: Props) {\n const { title: titleProps, children } = props;\n const {\n title,\n currentView,\n currentId,\n currentItemIndex,\n results,\n totalItems,\n selectedRowItems,\n } = useContext(ActionViewContext) as ActionViewContextType;\n const { t } = useContext(LocaleContext) as LocaleContextType;\n const { token } = useToken();\n\n function getSummary() {\n if (currentView?.type === \"form\") {\n if (!currentId) {\n return \"\";\n }\n\n if (totalItems === 0) {\n return (\n <>\n {t(\"editingDocument\")} (id:{\" \"}\n <Text\n copyable={{ icon: <CopyOutlined style={{ color: \"red\" }} /> }}\n >\n {currentId}\n </Text>\n )\n </>\n );\n }\n\n return (\n <>\n {t(\"register\")}{\" \"}\n {currentItemIndex === undefined ? 1 : currentItemIndex + 1} /{\" \"}\n {results!.length} {t(\"of\")} {totalItems} - {t(\"editingDocument\")} (id:{\" \"}\n <Text copyable>{currentId}</Text>)\n </>\n );\n } else if (currentView?.type === \"tree\" && selectedRowItems) {\n if (selectedRowItems.length === 1) {\n return (\n <>\n 1 {t(\"selectedRegisters\")} - (id:{\" \"}\n <Text copyable>{selectedRowItems[0].id}</Text>)\n </>\n );\n } else if (selectedRowItems.length > 1) {\n return (\n <>\n {selectedRowItems.length} {t(\"selectedRegisters\")}\n <Text\n copyable={{\n text: selectedRowItems.map((reg) => reg.id).join(\", \"),\n }}\n ></Text>\n </>\n );\n }\n }\n return null;\n }\n return (\n <div style={{ position: \"sticky\", top: 80, zIndex: 3 }}>\n <Row\n className=\"shadow-md\"\n style={{\n padding: \"1em\",\n borderRadius: token.borderRadius,\n backgroundColor: token.colorPrimaryBg,\n }}\n align=\"middle\"\n >\n <Col flex={2}>\n <Title level={3} style={{ marginBottom: 0 }}>\n {titleProps || title}\n </Title>\n {getSummary()}\n </Col>\n <Col flex={3}>\n <Row justify=\"end\">{children}</Row>\n </Col>\n </Row>\n <div className=\"pb-5\" />\n </div>\n );\n}\n\nexport default TitleHeader;\n","import GraphActionBar from \"@/actionbar/GraphActionBar\";\nimport TitleHeader from \"@/ui/TitleHeader\";\nimport { Graph } from \"@/widgets/views/Graph/Graph\";\nimport React, { useContext, useEffect, useRef, useState } from \"react\";\nimport {\n ActionViewContext,\n ActionViewContextType,\n} from \"@/context/ActionViewContext\";\nimport { FormView, TreeView } from \"@/types\";\nimport { mergeSearchFields } from \"@/helpers/formHelper\";\nimport { useSearch } from \"@/hooks/useSearch\";\nimport SearchFilter from \"@/widgets/views/searchFilter/SearchFilter\";\nimport { Spin } from \"antd\";\nimport { mergeParams } from \"@/helpers/searchHelper\";\n\nexport type GraphActionViewProps = {\n viewData: any;\n visible: boolean;\n model: string;\n context: any;\n domain: any;\n formView: FormView;\n treeView: TreeView;\n};\n\nexport const GraphActionView = (props: GraphActionViewProps) => {\n const { viewData, visible, model, context, domain, formView, treeView } =\n props;\n const graphRef = useRef();\n\n const actionViewContext = useContext(\n ActionViewContext\n ) as ActionViewContextType;\n const {\n setResults: setResultsActionView = undefined,\n setCurrentItemIndex = undefined,\n currentId = undefined,\n results: resultsActionView = undefined,\n setSelectedRowItems = undefined,\n setSearchParams = undefined,\n searchVisible = true,\n setSearchVisible = undefined,\n sorter = undefined,\n setSorter = undefined,\n setTotalItems: setActionViewTotalItems = undefined,\n setSearchTreeNameSearch = undefined,\n setTreeIsLoading = undefined,\n limit,\n setLimit,\n searchParams,\n searchValues,\n setSearchValues,\n currentView,\n } = actionViewContext || {};\n\n const [applyLimit, setApplyLimit] = useState(true);\n\n useEffect(() => {\n (graphRef.current as any)?.refresh();\n }, [searchParams]);\n\n useEffect(() => {\n if (viewData.view_id !== currentView.view_id) {\n setApplyLimit(true);\n }\n }, [currentView]);\n\n const { clear, searchFilterLoading, searchError, offset, tableRefreshing } =\n useSearch({\n model,\n setSearchTreeNameSearch,\n setSelectedRowItems,\n searchParams,\n setSearchValues,\n setSearchParams,\n setSearchVisible,\n setTreeIsLoading,\n context,\n formView: formView!,\n treeView: treeView!,\n sorter,\n setSorter,\n setCurrentItemIndex,\n setResultsActionView,\n resultsActionView,\n domain,\n currentId,\n setActionViewTotalItems,\n limit,\n setLimit,\n });\n\n if (!visible) {\n return null;\n }\n\n if (!viewData) {\n return null;\n }\n\n return (\n <>\n <TitleHeader title={viewData.name}>\n <GraphActionBar\n refreshGraph={() => {\n (graphRef.current as any).refresh();\n }}\n />\n </TitleHeader>\n <SearchFilter\n fields={{ ...treeView.fields, ...formView.fields }}\n searchFields={mergeSearchFields([\n formView.search_fields,\n treeView.search_fields,\n ])}\n limit={limit!}\n onClear={clear}\n offset={offset}\n isSearching={searchFilterLoading}\n onSubmit={(opts: {\n params: any;\n limit: number;\n offset: number;\n searchValues: any;\n }) => {\n setApplyLimit(false);\n setSearchParams?.(opts.params);\n setSearchVisible?.(false);\n }}\n searchError={searchError}\n searchVisible={searchVisible}\n searchValues={searchValues}\n showLimitOptions={false}\n />\n {tableRefreshing ? (\n <Spin />\n ) : (\n <Graph\n ref={graphRef}\n view_id={viewData.view_id}\n model={model}\n context={context}\n domain={mergeParams(searchParams || [], domain)}\n limit={applyLimit ? limit : undefined}\n manualIds={\n applyLimit ? resultsActionView?.map((r) => r.id) : undefined\n }\n />\n )}\n </>\n );\n};\n","import FormActionBar from \"@/actionbar/FormActionBar\";\nimport { FormView } from \"@/types\";\nimport TitleHeader from \"@/ui/TitleHeader\";\nimport Form from \"@/widgets/views/Form\";\nimport React from \"react\";\n\nexport type FormActionViewProps = {\n formView?: FormView;\n visible: boolean;\n formRef: any;\n model: string;\n currentId?: number;\n domain: any;\n context: any;\n defaultValues?: any;\n forcedValues?: any;\n results: any[];\n setResults: (value: any[]) => void;\n setCurrentItemIndex: (value?: number) => void;\n};\n\nexport const FormActionView = (props: FormActionViewProps) => {\n const {\n visible,\n formRef,\n model,\n currentId,\n domain,\n formView,\n context,\n defaultValues,\n forcedValues,\n results,\n setResults,\n setCurrentItemIndex,\n } = props;\n\n if (!visible) {\n return null;\n }\n\n return (\n <>\n <TitleHeader>\n <FormActionBar toolbar={formView?.toolbar} />\n </TitleHeader>\n <Form\n rootForm={true}\n ref={formRef}\n model={model}\n defaultValues={defaultValues}\n forcedValues={forcedValues}\n formView={formView}\n actionDomain={domain}\n id={currentId}\n parentContext={context}\n onSubmitSucceed={(id, values) => {\n const itemIndex = results!.findIndex((item: any) => {\n return item.id === id;\n });\n if (itemIndex === -1) {\n results!.push(values);\n setResults(results);\n setCurrentItemIndex(results!.length - 1);\n }\n }}\n />\n </>\n );\n};\n","import React, { useContext, useEffect, useState } from \"react\";\nimport { Button, Col, Form, Input, Row, Tooltip } from \"antd\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport { CloseCircleFilled } from \"@ant-design/icons\";\n\ntype Props = {\n onSearch: (searchValue?: string) => void;\n searchText?: string;\n disabled?: boolean;\n};\n\nfunction SearchBar(props: Props) {\n const { onSearch, disabled = false, searchText } = props;\n const { t } = useContext(LocaleContext) as LocaleContextType;\n const [form] = Form.useForm();\n const [mustShowClearSuffix, setMustShowClearSuffix] =\n useState<boolean>(false);\n\n function handleSubmit(values: any) {\n onSearch(values.search);\n }\n\n useEffect(() => {\n form.setFieldsValue({ search: searchText });\n }, [searchText]);\n\n function clear() {\n setMustShowClearSuffix(false);\n form.setFieldsValue({ search: undefined });\n onSearch(undefined);\n }\n\n return (\n <Form form={form} onFinish={handleSubmit} autoComplete=\"off\">\n <Row align=\"middle\" justify=\"end\">\n <Col>\n <Form.Item name={\"search\"} noStyle>\n <Input\n autoFocus\n disabled={disabled}\n onChange={(e) => {\n setMustShowClearSuffix(e.target.value.length > 0);\n }}\n style={{ borderTopRightRadius: 0, borderBottomRightRadius: 0 }}\n suffix={\n (mustShowClearSuffix ||\n (searchText && searchText.length > 0)) && (\n <Tooltip title={t(\"clear\")}>\n <CloseCircleFilled\n style={{ color: \"rgba(0,0,0,.45)\" }}\n onClick={clear}\n />\n </Tooltip>\n )\n }\n />\n </Form.Item>\n </Col>\n <Col>\n <Button\n htmlType=\"submit\"\n disabled={disabled}\n style={{ borderTopLeftRadius: 0, borderBottomLeftRadius: 0 }}\n >\n {t(\"search\")}\n </Button>\n </Col>\n </Row>\n </Form>\n );\n}\n\nexport default SearchBar;\n","import React from \"react\";\n\ninterface ConfigContextProps {\n previewFeatures: boolean;\n}\n\nexport const ConfigContext = React.createContext<ConfigContextProps>({\n previewFeatures: false,\n});\n","import React, { useContext, useState } from \"react\";\nimport { Space, Spin } from \"antd\";\nimport ChangeViewButton from \"./ChangeViewButton\";\nimport {\n ActionViewContext,\n ActionViewContextType,\n} from \"@/context/ActionViewContext\";\nimport NewButton from \"./NewButton\";\nimport ActionButton from \"./ActionButton\";\nimport Icon, {\n DeleteOutlined,\n PrinterOutlined,\n ThunderboltOutlined,\n CopyOutlined,\n ReloadOutlined,\n InfoCircleOutlined,\n FilterOutlined,\n} from \"@ant-design/icons\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport showConfirmDialog from \"@/ui/ConfirmDialog\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport showErrorDialog from \"@/ui/ActionErrorDialog\";\nimport DropdownButton from \"./DropdownButton\";\nimport {\n ContentRootContext,\n ContentRootContextType,\n} from \"@/context/ContentRootContext\";\nimport ButtonWithBadge from \"./ButtonWithBadge\";\nimport { showLogInfo } from \"@/helpers/logInfoHelper\";\nimport SearchBar from \"./SearchBar\";\nimport { ExportModal } from \"..\";\nimport { mergeParams } from \"@/helpers/searchHelper\";\nimport { ConfigContext } from \"@/context/ConfigContext\";\n\ntype Props = {\n parentContext?: any;\n treeExpandable: boolean;\n toolbar: any;\n};\n\nfunction TreeActionBar(props: Props) {\n const {\n availableViews,\n currentView,\n setCurrentView,\n selectedRowItems,\n setRemovingItem,\n removingItem,\n duplicatingItem,\n setDuplicatingItem,\n currentModel,\n searchTreeRef,\n setCurrentId,\n setCurrentItemIndex,\n searchParams,\n searchVisible,\n setSearchVisible,\n setSearchTreeNameSearch,\n searchTreeNameSearch,\n treeIsLoading,\n setPreviousView,\n previousView,\n results,\n limit,\n totalItems,\n } = useContext(ActionViewContext) as ActionViewContextType;\n\n const { parentContext = {}, treeExpandable, toolbar } = props;\n const { previewFeatures } = useContext(ConfigContext);\n const { t, lang } = useContext(LocaleContext) as LocaleContextType;\n const contentRootContext = useContext(\n ContentRootContext\n ) as ContentRootContextType;\n const { processAction } = contentRootContext || {};\n const [exportModalVisible, setExportModalVisible] = useState(false);\n\n const hasNameSearch: boolean =\n searchTreeNameSearch !== undefined &&\n searchTreeNameSearch.trim().length > 0;\n\n function tryDelete() {\n showConfirmDialog({\n confirmMessage: t(\"confirmRemove\"),\n lang,\n onOk: () => {\n remove();\n },\n });\n }\n\n async function remove() {\n try {\n setRemovingItem?.(true);\n\n await ConnectionProvider.getHandler().delete({\n model: currentModel!,\n ids: selectedRowItems!.map((item) => item.id),\n });\n\n setCurrentId?.(undefined);\n setCurrentItemIndex?.(undefined);\n\n searchTreeRef?.current?.refreshResults();\n } catch (e) {\n showErrorDialog(e);\n } finally {\n setRemovingItem?.(false);\n }\n }\n\n async function duplicate() {\n try {\n setDuplicatingItem?.(true);\n\n const currentId = selectedRowItems![0].id;\n\n const newId = await ConnectionProvider.getHandler().duplicate({\n id: currentId,\n model: currentModel!,\n context: { ...parentContext },\n });\n\n if (newId) {\n searchTreeRef?.current?.refreshResults();\n }\n } catch (e) {\n showErrorDialog(e);\n } finally {\n setDuplicatingItem?.(false);\n }\n }\n\n function runAction(actionData: any) {\n processAction?.({\n actionData,\n values: {\n active_id: selectedRowItems?.map((item) => item.id)[0],\n active_ids: selectedRowItems?.map((item) => item.id),\n },\n fields: {},\n context: {\n ...parentContext,\n active_id: selectedRowItems?.map((item) => item.id)[0],\n active_ids: selectedRowItems?.map((item) => item.id),\n },\n onRefreshParentValues: () => {\n searchTreeRef?.current?.refreshResults();\n },\n });\n }\n\n return (\n <Space wrap={true}>\n {treeIsLoading && (\n <>\n <Spin />\n {separator()}\n {separator()}\n </>\n )}\n {treeExpandable ? null : (\n <>\n <SearchBar\n disabled={duplicatingItem || removingItem || treeIsLoading}\n searchText={searchTreeNameSearch}\n onSearch={(searchString?: string) => {\n if (searchString && searchString.trim().length > 0) {\n setSearchTreeNameSearch?.(searchString);\n } else {\n setSearchTreeNameSearch?.(undefined);\n }\n }}\n />\n {!treeExpandable && (\n <ButtonWithBadge\n icon={\n <FilterOutlined\n style={{ color: searchVisible ? \"white\" : undefined }}\n />\n }\n tooltip={t(\"advanced_search\")}\n type={searchVisible ? \"primary\" : \"default\"}\n onClick={() => {\n setSearchVisible?.(!searchVisible);\n }}\n disabled={duplicatingItem || removingItem || treeIsLoading}\n badgeNumber={searchParams?.length}\n />\n )}\n {separator()}\n <NewButton disabled={treeIsLoading} />\n <ActionButton\n icon={<CopyOutlined />}\n tooltip={t(\"duplicate\")}\n disabled={\n !selectedRowItems ||\n selectedRowItems?.length !== 1 ||\n duplicatingItem ||\n treeIsLoading\n }\n loading={duplicatingItem}\n onClick={duplicate}\n />\n <ActionButton\n icon={<DeleteOutlined />}\n tooltip={t(\"delete\")}\n disabled={\n !(selectedRowItems && selectedRowItems?.length > 0) ||\n treeIsLoading\n }\n loading={removingItem}\n onClick={tryDelete}\n />\n {separator()}\n </>\n )}\n <ActionButton\n icon={<InfoCircleOutlined />}\n tooltip={t(\"showLogs\")}\n disabled={\n !(selectedRowItems && selectedRowItems?.length > 0) || treeIsLoading\n }\n loading={false}\n onClick={() => {\n showLogInfo(currentModel!, selectedRowItems![0].id, t);\n }}\n />\n <ActionButton\n icon={<ReloadOutlined />}\n tooltip={t(\"refresh\")}\n disabled={duplicatingItem || removingItem || treeIsLoading}\n loading={false}\n onClick={() => {\n searchTreeRef?.current?.refreshResults();\n }}\n />\n {!treeExpandable && (\n <>\n {separator()}\n <ChangeViewButton\n currentView={currentView}\n availableViews={availableViews}\n onChangeView={(newView) => {\n setPreviousView?.(currentView);\n setCurrentView?.(newView);\n }}\n previousView={previousView}\n disabled={treeIsLoading}\n />\n </>\n )}\n {separator()}\n <DropdownButton\n icon={<ThunderboltOutlined />}\n disabled={\n !(selectedRowItems && selectedRowItems?.length > 0) || treeIsLoading\n }\n tooltip={t(\"actions\")}\n items={toolbar?.action}\n onItemClick={(action: any) => {\n if (!action) {\n return;\n }\n\n runAction(action);\n }}\n />\n <DropdownButton\n icon={<PrinterOutlined />}\n disabled={\n !(selectedRowItems && selectedRowItems?.length > 0) || treeIsLoading\n }\n tooltip={t(\"reports\")}\n items={toolbar?.print}\n onItemClick={(report: any) => {\n if (!report) {\n return;\n }\n\n runAction({\n ...report,\n datas: {\n ...(report.datas || {}),\n ids: selectedRowItems!.map((item) => item.id),\n },\n });\n }}\n />\n\n {previewFeatures && (\n <>\n {separator()}\n <DropdownButton\n icon={\n <Icon\n component={() => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"icon icon-tabler icon-tabler-database-export\"\n width=\"1em\"\n height=\"1em\"\n viewBox=\"0 0 24 24\"\n strokeWidth=\"1.5\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\n <ellipse cx=\"12\" cy=\"6\" rx=\"8\" ry=\"3\" />\n <path d=\"M4 6v6c0 1.657 3.582 3 8 3a19.84 19.84 0 0 0 3.302 -.267m4.698 -2.733v-6\" />\n <path d=\"M4 12v6c0 1.599 3.335 2.905 7.538 2.995m8.462 -6.995v-2m-6 7h7m-3 -3l3 3l-3 3\" />\n </svg>\n )}\n />\n }\n tooltip={t(\"export\")}\n items={[\n {\n id: \"print_screen\",\n name: t(\"printScreen\"),\n },\n {\n id: \"export\",\n name: t(\"advancedExport\"),\n },\n ]}\n onItemClick={(itemClicked: any) => {\n if (itemClicked.id === \"print_screen\") {\n let idsToExport =\n selectedRowItems?.map((item) => item.id) || [];\n\n if (idsToExport.length === 0) {\n idsToExport = results?.map((item) => item.id) || [];\n }\n\n runAction({\n id: -1,\n model: currentModel,\n report_name: \"printscreen.list\",\n type: \"ir.actions.report.xml\",\n datas: {\n model: currentModel,\n ids: idsToExport,\n },\n });\n return;\n }\n\n setExportModalVisible(true);\n }}\n disabled={\n duplicatingItem || removingItem || treeIsLoading || hasNameSearch\n }\n />\n <ExportModal\n visible={exportModalVisible}\n locale={lang}\n onClose={() => setExportModalVisible(false)}\n model={currentModel!}\n domain={mergeParams(\n searchTreeRef?.current?.getDomain() || [],\n searchParams || []\n )}\n limit={limit}\n totalRegisters={totalItems || 0}\n selectedRegistersToExport={selectedRowItems}\n visibleRegisters={results?.length || 0}\n context={parentContext}\n />\n </>\n )}\n </Space>\n );\n}\n\nfunction separator() {\n return <div className=\"inline-block w-2\" />;\n}\n\nexport default TreeActionBar;\n","import TreeActionBar from \"@/actionbar/TreeActionBar\";\nimport { FormView, TreeView, View } from \"@/types\";\nimport TitleHeader from \"@/ui/TitleHeader\";\nimport SearchTree from \"@/widgets/views/SearchTree\";\nimport React, { useContext } from \"react\";\nimport {\n ActionViewContext,\n ActionViewContextType,\n} from \"@/context/ActionViewContext\";\n\nexport type TreeActionViewProps = {\n formView?: FormView;\n treeView?: TreeView;\n visible: boolean;\n searchTreeRef: any;\n model: string;\n domain: any;\n context: any;\n results: any[];\n setCurrentItemIndex: (value?: number) => void;\n setCurrentId: (id?: number) => void;\n setCurrentView: (view: View) => void;\n availableViews: View[];\n searchTreeNameSearch?: string;\n limit?: number;\n};\n\nexport const TreeActionView = (props: TreeActionViewProps) => {\n const {\n visible,\n searchTreeRef,\n model,\n context,\n formView,\n treeView,\n domain,\n setCurrentItemIndex,\n results,\n setCurrentId,\n setCurrentView,\n availableViews,\n searchTreeNameSearch,\n } = props;\n\n const { currentView, setPreviousView } = useContext(\n ActionViewContext\n ) as ActionViewContextType;\n\n if (!visible) {\n return null;\n }\n\n return (\n <>\n <TitleHeader>\n <TreeActionBar\n toolbar={treeView?.toolbar}\n parentContext={context}\n treeExpandable={treeView?.isExpandable || false}\n />\n </TitleHeader>\n <SearchTree\n ref={searchTreeRef}\n rootTree={true}\n model={model}\n parentContext={context}\n nameSearch={searchTreeNameSearch}\n formView={formView}\n treeView={treeView}\n domain={domain}\n onRowClicked={(event: any) => {\n const { id } = event;\n setCurrentId(id);\n const itemIndex = results.findIndex((item: any) => {\n return item.id === id;\n });\n setPreviousView?.(currentView);\n setCurrentItemIndex(itemIndex);\n const formView = availableViews.find(\n (v) => v.type === \"form\"\n ) as FormView;\n setCurrentView(formView);\n }}\n />\n </>\n );\n};\n","import { ShortcutApi } from \"@/ui/FavouriteButton\";\nimport React, { useState } from \"react\";\n\nexport type DashboardActionContextType = {\n isLoading: boolean;\n setIsLoading: (value: boolean) => void;\n dashboardRef: any;\n openAction: (action?: ShortcutApi) => void;\n moveItemsEnabled: boolean;\n setMoveItemsEnabled: (value: boolean) => void;\n};\n\nexport const DashboardActionContext = React.createContext<DashboardActionContextType | null>(\n null\n);\n\ntype DashboardActionProviderProps = {\n children: React.ReactNode;\n dashboardRef: any;\n openAction: (action?: ShortcutApi) => void;\n};\n\nconst DashboardActionProvider = (props: DashboardActionProviderProps): any => {\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [moveItemsEnabled, setMoveItemsEnabled] = useState<boolean>(false);\n\n const { children, dashboardRef, openAction } = props;\n\n return (\n <DashboardActionContext.Provider\n value={{\n isLoading,\n setIsLoading,\n dashboardRef,\n openAction,\n moveItemsEnabled,\n setMoveItemsEnabled,\n }}\n >\n {children}\n </DashboardActionContext.Provider>\n );\n};\n\nexport default DashboardActionProvider;\n","import React, { useContext } from \"react\";\nimport {\n DashboardActionContext,\n DashboardActionContextType,\n} from \"@/context/DashboardActionContext\";\nimport { Space } from \"antd\";\nimport ActionButton from \"./ActionButton\";\nimport {\n ReloadOutlined,\n SettingOutlined,\n BorderOuterOutlined,\n} from \"@ant-design/icons\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\nfunction DashboardActionBar() {\n const {\n isLoading,\n dashboardRef,\n moveItemsEnabled,\n setMoveItemsEnabled,\n } = useContext(DashboardActionContext) as DashboardActionContextType;\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n return (\n <Space wrap={true}>\n <ActionButton\n icon={\n <BorderOuterOutlined\n style={{ color: moveItemsEnabled ? \"white\" : undefined }}\n />\n }\n type={moveItemsEnabled ? \"primary\" : \"default\"}\n tooltip={t(\"moveDashboard\")}\n disabled={isLoading}\n loading={false}\n onClick={() => {\n setMoveItemsEnabled(!moveItemsEnabled);\n }}\n />\n {separator()}\n <ActionButton\n icon={<SettingOutlined />}\n tooltip={t(\"configDashboard\")}\n disabled={isLoading}\n loading={false}\n onClick={() => {\n dashboardRef?.current.configDashboard();\n }}\n />\n <ActionButton\n icon={<ReloadOutlined />}\n tooltip={t(\"refresh\")}\n disabled={isLoading}\n loading={false}\n onClick={() => {\n dashboardRef?.current.refresh();\n }}\n />\n </Space>\n );\n}\n\nfunction separator() {\n return <div className=\"inline-block w-2\" />;\n}\n\nexport default DashboardActionBar;\n","import DashboardActionBar from \"@/actionbar/DashboardActionBar\";\nimport DashboardActionProvider from \"@/context/DashboardActionContext\";\nimport TitleHeader from \"@/ui/TitleHeader\";\nimport Dashboard from \"@/widgets/views/Dashboard/Dashboard\";\nimport React, { useContext, useRef } from \"react\";\nimport {\n TabManagerContext,\n TabManagerContextType,\n} from \"@/context/TabManagerContext\";\nimport { DashboardProps } from \"@/types\";\n\nexport type DashboardActionViewProps = {\n dashboardData: DashboardProps;\n};\n\nexport const DashboardActionView = (props: DashboardActionViewProps) => {\n const { dashboardData } = props;\n const dashboardRef = useRef();\n const tabManagerContext = useContext(\n TabManagerContext\n ) as TabManagerContextType;\n const { openShortcut } = tabManagerContext || {};\n\n if (!dashboardData) {\n return null;\n }\n\n return (\n <DashboardActionProvider\n dashboardRef={dashboardRef}\n openAction={(action) => {\n openShortcut(action!);\n }}\n >\n <TitleHeader>\n <DashboardActionBar />\n </TitleHeader>\n <Dashboard\n ref={dashboardRef}\n model={dashboardData!.model}\n id={dashboardData!.id}\n context={dashboardData?.context}\n configAction={dashboardData?.configAction}\n />\n </DashboardActionProvider>\n );\n};\n","import { ViewTuple, ViewType } from \"@/types\";\n\nexport async function resolveViewInfoPromises(\n viewsToRetrieve: { viewTuple: ViewTuple; promise?: Promise<any> }[]\n) {\n const results = await Promise.all(\n viewsToRetrieve.map(async (item) => {\n try {\n return await item.promise;\n } catch (error) {\n console.error(`Error for ${item.viewTuple}:`, error);\n return null;\n }\n })\n );\n\n const updatedViews = viewsToRetrieve.map((item, index) => ({\n ...item,\n info: results[index],\n }));\n\n return updatedViews.filter((item) => item.info !== null);\n}\n","import React, {\n useEffect,\n useState,\n useRef,\n forwardRef,\n useImperativeHandle,\n useContext,\n} from \"react\";\n\nimport { Spin } from \"antd\";\n\nimport {\n DashboardView,\n FormView,\n GraphView,\n InitialViewData,\n TreeView,\n View,\n ViewType,\n} from \"@/types/index\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\n\nimport ActionViewProvider from \"@/context/ActionViewContext\";\nimport {\n TabManagerContext,\n TabManagerContextType,\n} from \"@/context/TabManagerContext\";\nimport { useHotkeys } from \"react-hotkeys-hook\";\nimport { GoToResourceModal } from \"@/ui/GoToResourceModal\";\nimport showInfo from \"@/ui/InfoDialog\";\nimport showErrorDialog from \"@/ui/ActionErrorDialog\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport { GraphActionView } from \"@/views/actionViews/GraphActionView\";\nimport { FormActionView } from \"./actionViews/FormActionView\";\nimport { TreeActionView } from \"./actionViews/TreeActionView\";\nimport { DashboardActionView } from \"./actionViews/DashboardActionView\";\nimport { info } from \"console\";\nimport { resolveViewInfoPromises } from \"@/helpers/viewHelper\";\n\ntype Props = {\n domain: any;\n context: any;\n model: string;\n views: Array<[number, ViewType]>;\n title: string;\n tabKey: string;\n setCanWeClose: (f: any) => void;\n initialView: InitialViewData;\n formDefaultValues?: any;\n formForcedValues?: any;\n res_id?: number | boolean;\n action_id: number;\n action_type: string;\n treeExpandable?: boolean;\n limit?: number;\n};\n\nfunction ActionView(props: Props, ref: any) {\n const {\n domain,\n model,\n context,\n views,\n title,\n setCanWeClose,\n tabKey,\n initialView,\n formDefaultValues,\n formForcedValues = {},\n res_id = false,\n action_id,\n action_type,\n treeExpandable = false,\n limit,\n } = props;\n const [currentView, setCurrentViewInternal] = useState<View>();\n\n const [availableViews, setAvailableViews] = useState<View[]>([]);\n\n const [isLoading, setIsLoading] = useState<boolean>(true);\n const res_id_parsed: number | undefined = res_id\n ? (res_id as number)\n : undefined;\n\n const [currentId, setCurrentIdInternal] =\n useState<number | undefined>(res_id_parsed);\n const [selectedRowItems, setSelectedRowItems] = useState<any[]>([]);\n const [currentItemIndex, setCurrentItemIndex] = useState<number>();\n const [results, setResults] = useState<any>([]);\n const [sorter, setSorter] = useState<any>();\n const [totalItems, setTotalItems] = useState<number>(0);\n const [gtResourceModalVisible, setGtResourceModalVisible] =\n useState<boolean>(false);\n const [searchingForResourceId, setSearchingForResourceId] =\n useState<boolean>(false);\n const [searchTreeNameSearch, setSearchTreeNameSearch] = useState<string>();\n\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n const formRef = useRef();\n const searchTreeRef = useRef();\n\n const tabManagerContext = useContext(\n TabManagerContext\n ) as TabManagerContextType;\n const {\n setCurrentView: setCurrentViewTabContext,\n setCurrentId: setCurrentIdTabContext,\n tabs,\n activeKey,\n openAction,\n onRemoveTab,\n } = tabManagerContext || {};\n\n useHotkeys(\n \"ctrl+g,command+g\",\n (event) => {\n event.preventDefault();\n handleGoToRecordShortcut();\n },\n [activeKey, tabs, currentView, currentItemIndex, results]\n );\n\n function setCurrentId(id?: number) {\n setCurrentIdInternal(id);\n setCurrentIdTabContext?.(id);\n }\n\n function setCurrentView(view?: View) {\n setCurrentViewInternal(view);\n setCurrentViewTabContext?.(view);\n }\n\n useImperativeHandle(ref, () => ({\n canWeClose,\n }));\n\n const fetchData = async () => {\n setIsLoading(true);\n\n const viewDataRetrieved: View[] = [];\n\n const getViewsPromises = [];\n\n for (const viewArray of views) {\n const [id, viewType] = viewArray;\n if (viewType !== \"dashboard\") {\n getViewsPromises.push({\n viewTuple: viewArray,\n promise: ConnectionProvider.getHandler().getView({\n model,\n type: viewType,\n id,\n context,\n }),\n });\n } else {\n getViewsPromises.push({\n viewTuple: viewArray,\n });\n }\n }\n\n const viewsRetrieved = await resolveViewInfoPromises(getViewsPromises);\n\n for (const view of viewsRetrieved) {\n if (!view) {\n continue;\n }\n\n const [, viewType] = view.viewTuple;\n\n let viewInfo = view.info;\n\n switch (viewType) {\n case \"dashboard\": {\n const formView = views.find((view: any[]) => {\n const [, type] = view;\n return type === \"form\";\n });\n\n let configAction;\n\n if (formView) {\n configAction = {\n action_id,\n action_type,\n name: title,\n res_id: context[\"active_id\"],\n res_model: model,\n view_id: formView[0],\n view_type: formView[1],\n };\n }\n\n viewDataRetrieved.push({\n type: \"dashboard\",\n id: context[\"active_id\"],\n model,\n context,\n configAction,\n });\n break;\n }\n case \"form\": {\n viewDataRetrieved.push({\n ...(viewInfo as FormView),\n type: viewType,\n });\n break;\n }\n case \"tree\": {\n viewDataRetrieved.push({\n ...(viewInfo as TreeView),\n isExpandable: treeExpandable,\n type: viewType,\n });\n break;\n }\n case \"graph\": {\n viewDataRetrieved.push({\n ...(viewInfo as GraphView),\n type: viewType,\n });\n break;\n }\n default:\n break;\n }\n }\n let currentViewToAssign = undefined;\n\n if (!initialView && viewDataRetrieved.find((v) => v.type === \"tree\")) {\n const treeView: TreeView = viewDataRetrieved.find(\n (v) => v.type === \"tree\"\n ) as TreeView;\n currentViewToAssign = treeView;\n } else if (!initialView) {\n const formView: TreeView = viewDataRetrieved.find(\n (v) => v.type === \"form\"\n ) as TreeView;\n currentViewToAssign = formView;\n } else {\n const view = viewDataRetrieved.find((v) => {\n if (!initialView.id) {\n return v.type === initialView.type;\n } else {\n return v.type === initialView.type && v.view_id === initialView.id;\n }\n });\n currentViewToAssign = view;\n }\n\n if (!currentViewToAssign) {\n showErrorDialog(\n `Error determining the first view to show for model ${model}.\\nPlease, make sure the view ids on the fields_view_get responses are the same as the ones defined in the action`\n );\n onRemoveTab?.(tabKey);\n }\n\n setCurrentView(currentViewToAssign);\n setAvailableViews(viewDataRetrieved);\n setIsLoading(false);\n };\n\n setCanWeClose({ tabKey, canWeClose });\n\n useEffect(() => {\n const treeView = availableViews.find((v) => v.type === \"tree\") as TreeView;\n const initialViewWithData: View = availableViews.find((v) => {\n if (!initialView.id) {\n return v.type === initialView.type;\n } else {\n return v.type === initialView.type && v.view_id === initialView.id;\n }\n }) as View;\n\n setCurrentView(initialViewWithData || treeView);\n if (!res_id) {\n setCurrentId(undefined);\n setCurrentItemIndex(undefined);\n } else {\n setCurrentIdTabContext?.(res_id_parsed);\n }\n fetchData();\n }, [model, views, res_id]);\n\n useEffect(() => {\n if (activeKey === tabKey) {\n setCurrentIdTabContext?.(currentId);\n setCurrentViewTabContext?.(currentView);\n }\n }, [tabs, activeKey]);\n\n async function canWeClose() {\n if (!currentView) {\n return true;\n } else if (currentView!.type === \"form\") {\n return await (formRef.current as any).cancelUnsavedChanges();\n } else {\n return true;\n }\n }\n\n async function handleGoToRecordShortcut() {\n if (activeKey !== tabKey) {\n return;\n }\n\n if (currentView!.type === \"form\") {\n const canWeClose = await (formRef.current as any).cancelUnsavedChanges();\n\n if (!canWeClose) {\n return;\n }\n }\n\n setGtResourceModalVisible(true);\n }\n\n async function goToResourceId(id: number) {\n setSearchingForResourceId(true);\n\n const itemIndex = results!.findIndex((item: any) => {\n return item.id === id;\n });\n\n let resource;\n\n if (itemIndex === -1) {\n try {\n resource = (\n await ConnectionProvider.getHandler().readObjects({\n model,\n ids: [id],\n context,\n })\n )?.[0];\n } catch (err) {}\n\n if (!resource) {\n setSearchingForResourceId(false);\n setGtResourceModalVisible(false);\n showInfo(t(\"idNotFound\"));\n return;\n }\n } else {\n resource = results[itemIndex];\n }\n\n setSearchingForResourceId(false);\n setGtResourceModalVisible(false);\n\n const viewForm = views.find((v) => v[1] === \"form\");\n\n openAction({\n domain: [],\n context,\n model,\n views,\n title,\n target: \"current\",\n initialView: { id: viewForm?.[0]!, type: \"form\" },\n action_id,\n action_type,\n res_id: id,\n });\n }\n\n function content() {\n return availableViews.map((view) => {\n switch (view.type) {\n case \"form\": {\n return (\n <FormActionView\n key={`${view.type}-${view.view_id}`}\n formRef={formRef}\n currentId={currentId}\n visible={\n currentView!.type === view.type &&\n currentView!.view_id === view.view_id\n }\n formView={view as FormView}\n model={model}\n context={context}\n domain={domain}\n defaultValues={formDefaultValues}\n forcedValues={formForcedValues}\n results={results}\n setResults={setResults}\n setCurrentItemIndex={setCurrentItemIndex}\n />\n );\n }\n case \"tree\": {\n return (\n <TreeActionView\n key={`${view.type}-${view.view_id}`}\n visible={\n currentView!.type === view.type &&\n currentView!.view_id === view.view_id\n }\n limit={limit}\n model={model}\n context={context}\n domain={domain}\n formView={\n availableViews.find((v) => v.type === \"form\") as FormView\n }\n treeView={view as TreeView}\n searchTreeRef={searchTreeRef}\n searchTreeNameSearch={searchTreeNameSearch}\n availableViews={availableViews}\n results={results}\n setCurrentItemIndex={setCurrentItemIndex}\n setCurrentId={setCurrentId}\n setCurrentView={setCurrentView}\n />\n );\n }\n case \"graph\": {\n return (\n <GraphActionView\n key={`${view.type}-${view.view_id}`}\n visible={\n currentView!.type === view.type &&\n currentView!.view_id === view.view_id\n }\n viewData={view as GraphView}\n model={model}\n context={context}\n domain={domain}\n treeView={\n availableViews.find((v) => v.type === \"tree\") as TreeView\n }\n formView={\n availableViews.find((v) => v.type === \"form\") as FormView\n }\n />\n );\n }\n case \"dashboard\": {\n return (\n <DashboardActionView\n key={`${view.type}-${view.view_id}`}\n dashboardData={view as DashboardView}\n />\n );\n }\n }\n });\n }\n\n function onNewClicked() {\n if (currentId === undefined && currentView!.type === \"form\") {\n (formRef.current as any).clearAndReload();\n } else {\n setCurrentId(undefined);\n const formView: FormView = availableViews.find(\n (v) => v.type === \"form\"\n ) as FormView;\n setCurrentView(formView);\n }\n }\n\n if (isLoading) {\n return <Spin />;\n }\n\n if (!currentView) {\n return null;\n }\n\n return (\n <ActionViewProvider\n title={title}\n currentView={currentView}\n setCurrentView={setCurrentView}\n availableViews={availableViews}\n formRef={formRef}\n searchTreeRef={searchTreeRef}\n onNewClicked={onNewClicked}\n currentId={currentId}\n setCurrentId={setCurrentId}\n setCurrentItemIndex={setCurrentItemIndex}\n currentItemIndex={currentItemIndex}\n results={results}\n setResults={setResults}\n currentModel={model}\n sorter={sorter}\n setSorter={setSorter}\n totalItems={totalItems}\n setTotalItems={setTotalItems}\n selectedRowItems={selectedRowItems}\n setSelectedRowItems={setSelectedRowItems}\n setSearchTreeNameSearch={setSearchTreeNameSearch}\n searchTreeNameSearch={searchTreeNameSearch}\n goToResourceId={goToResourceId}\n limit={limit}\n >\n {content()}\n <GoToResourceModal\n visible={gtResourceModalVisible}\n onIdSubmitted={goToResourceId}\n isSearching={searchingForResourceId}\n onCancel={() => {\n setGtResourceModalVisible(false);\n }}\n />\n </ActionViewProvider>\n );\n}\n\nexport default forwardRef(ActionView);\n","import ConnectionProvider from \"@/ConnectionProvider\";\nimport { DashboardItem as DashboardItemOoui, parseContext } from \"@gisce/ooui\";\nimport { v4 as uuidv4 } from \"uuid\";\n\nexport async function fetchAction({\n actionId,\n rootContext = {},\n globalValues = {},\n}: {\n actionId: number;\n rootContext?: any;\n globalValues?: any;\n}): Promise<any> {\n const actionType = \"ir.actions.act_window\";\n const action = `${actionType},${actionId}`;\n\n const dataForAction = await ConnectionProvider.getHandler().getActionData({\n action,\n context: rootContext,\n });\n\n const parsedContext = parseContext({\n context: dataForAction.context,\n values: globalValues,\n fields: {},\n });\n\n const parsedDomain = dataForAction.domain\n ? await ConnectionProvider.getHandler().evalDomain({\n domain: dataForAction.domain,\n values: globalValues,\n context: { ...rootContext, ...parsedContext },\n })\n : [];\n\n const {\n res_model: model,\n views,\n name: title,\n limit,\n view_type,\n } = dataForAction;\n const treeExpandable = view_type === \"tree\";\n\n const finalViews = [];\n\n for (const viewArray of views) {\n const [id, viewType] = viewArray;\n\n if (!id) {\n const { view_id } = await ConnectionProvider.getHandler().getView({\n model,\n type: viewType,\n id,\n context: { ...rootContext, ...parsedContext },\n });\n finalViews.push([view_id, viewType]);\n } else {\n finalViews.push(viewArray);\n }\n }\n\n const [id, type] = finalViews[0];\n const initialView = { id, type };\n\n return {\n title,\n actionId,\n actionType,\n key: uuidv4(),\n views,\n model,\n context: { ...rootContext, ...parsedContext },\n domain: parsedDomain,\n initialView,\n limit,\n treeExpandable,\n };\n}\n","import React from \"react\";\nimport { DashboardGridProps } from \"./DashboardGrid.types\";\nimport { WidthProvider, Responsive } from \"react-grid-layout\";\nimport \"react-resizable/css/styles.css\";\nimport \"react-grid-layout/css/styles.css\";\n\nconst ResponsiveReactGridLayout = WidthProvider(Responsive);\n\nexport const DashboardGrid = (props: DashboardGridProps) => {\n const { children = [], onPositionItemsChanged } = props;\n\n const items = React.Children.map(\n children,\n (\n child:\n | boolean\n | React.ReactChild\n | React.ReactFragment\n | React.ReactPortal\n ) => {\n const { parms, id } = (child as any).props;\n return (\n <div key={id} data-grid={parms}>\n {child}\n </div>\n );\n }\n );\n\n return (\n <ResponsiveReactGridLayout\n className=\"layout\"\n cols={{ lg: 12, md: 10, sm: 6, xs: 4, xxs: 2 }}\n draggableHandle={\".draggable-head\"}\n rowHeight={30}\n onLayoutChange={(layout) => {\n onPositionItemsChanged?.(\n layout.map((item) => {\n return {\n id: parseInt(item.i.replace(\".$\", \"\"), 10),\n x: item.x,\n y: item.y,\n w: item.w,\n h: item.h,\n };\n })\n );\n }}\n >\n {items}\n </ResponsiveReactGridLayout>\n );\n};\n","import React from \"react\";\nimport { DashboardGridItemProps } from \"./DashboardGridItem.types\";\nimport { ExportOutlined } from \"@ant-design/icons\";\nimport { Row, Col, Typography, theme } from \"antd\";\nconst { useToken } = theme;\n\nconst { Text } = Typography;\n\nexport const DashboardGridItem = (props: DashboardGridItemProps) => {\n const { title, children, action, openAction } = props;\n const { token } = useToken();\n\n return (\n <div\n className={\"shadow-md\"}\n style={{\n height: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n overflow: \"hidden\",\n border: \"1px solid #eee\",\n backgroundColor: \"white\",\n borderRadius: token.borderRadius,\n }}\n >\n <Row\n align=\"middle\"\n style={{\n borderBottom: \"1px solid #ddd\",\n backgroundColor: token.colorPrimaryBg,\n }}\n wrap={false}\n >\n <Col\n flex=\"auto\"\n className=\"draggable-head\"\n style={{\n fontWeight: \"bold\",\n padding: \"0.5rem\",\n cursor: \"grab\",\n overflow: \"hidden\",\n }}\n >\n <Text ellipsis={true}>{title}</Text>\n </Col>\n {action && (\n <Col flex=\"25px\" style={{ padding: \"0.5rem\" }}>\n <Row justify=\"end\" align=\"middle\">\n <ExportOutlined\n style={{ cursor: \"pointer\" }}\n onClick={() => {\n openAction?.(action);\n }}\n />\n </Row>\n </Col>\n )}\n </Row>\n {children}\n </div>\n );\n};\n","import React, { useEffect, useState, useRef } from \"react\";\nimport { Alert, Spin } from \"antd\";\n\nimport Tree from \"@/widgets/views/Tree\";\nimport { FormView, TreeView } from \"@/types/index\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\n\nimport { getColorMap, getTree, sortResults } from \"@/helpers/treeHelper\";\nimport { mergeParams } from \"@/helpers/searchHelper\";\n\nconst DEFAULT_SEARCH_LIMIT = 80;\n\ntype OnRowClickedData = {\n id: number;\n model: string;\n treeView: TreeView;\n};\n\ntype Props = {\n action?: string;\n model?: string;\n view_id?: number;\n onRowClicked: (data: OnRowClickedData) => void;\n domain?: any;\n visible?: boolean;\n parentContext?: any;\n};\n\nfunction DashboardTree(props: Props) {\n const {\n action,\n model,\n view_id,\n onRowClicked,\n domain = [],\n visible = true,\n parentContext = {},\n } = props;\n\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [initialFetchDone, setInitialFetchDone] = useState<boolean>(false);\n\n const [currentModel, setCurrentModel] = useState<string>();\n const [treeView, setTreeView] = useState<TreeView>();\n const [formView, setFormView] = useState<FormView>();\n\n const [page, setPage] = useState<number>(1);\n const [offset, setOffset] = useState<number>(0);\n const limitRef = useRef<number>(DEFAULT_SEARCH_LIMIT);\n\n const paramsRef = useRef<Array<any>>([]);\n\n const [totalItems, setTotalItems] = useState<number>(0);\n const [results, setResults] = useState<any>([]);\n const [colorsForResults, setColorsForResults] = useState<any>(undefined);\n const [sorter, setSorter] = useState<any>();\n\n const [searchError, setSearchError] = useState<string>();\n const [initialError, setInitialError] = useState<string>();\n\n const [tableRefreshing, setTableRefreshing] = useState<boolean>(false);\n\n const actionDomain = useRef<any>([]);\n\n const onRequestPageChange = (page: number) => {\n setTableRefreshing(true);\n setPage(page);\n setOffset((page - 1) * limitRef.current!);\n };\n\n const searchResults = async () => {\n const domainParams =\n actionDomain.current.length > 0 ? actionDomain.current : domain;\n\n const searchParams = mergeParams(paramsRef.current, domainParams);\n const { colors } = getTree(treeView!);\n\n const { totalItems, results, attrsEvaluated } =\n await ConnectionProvider.getHandler().searchForTree({\n params: searchParams,\n limit: limitRef.current,\n offset,\n model: currentModel!,\n fields: treeView!.fields,\n context: parentContext,\n attrs: colors && { colors },\n });\n setColorsForResults(getColorMap(attrsEvaluated));\n\n const resultsSorted = sortResults({\n resultsToSort: results,\n sorter: sorter,\n fields: { ...treeView!.fields, ...formView!.fields },\n });\n setTableRefreshing(false);\n\n setResults(resultsSorted);\n const totalItemsResult = await totalItems;\n setTotalItems(totalItemsResult);\n };\n\n const fetchResults = async () => {\n try {\n setTableRefreshing(true);\n await searchResults();\n } catch (error) {\n setSearchError(JSON.stringify(error));\n }\n };\n\n useEffect(() => {\n if (!initialFetchDone) {\n return;\n }\n\n if (visible) {\n fetchResults();\n }\n }, [page, offset, initialFetchDone, visible]);\n\n const fetchData = async (type: \"action\" | \"model\") => {\n setInitialFetchDone(false);\n setIsLoading(true);\n setInitialError(undefined);\n\n try {\n if (type === \"action\") {\n await fetchActionData();\n } else {\n await fetchModelData();\n }\n setInitialFetchDone(true);\n } catch (error) {\n setInitialError(error);\n } finally {\n setIsLoading(false);\n }\n };\n\n const fetchActionData = async () => {\n const dataForAction =\n await ConnectionProvider.getHandler().getViewsForAction({\n action: action!,\n context: parentContext,\n });\n actionDomain.current = dataForAction.domain;\n setFormView(dataForAction.views.get(\"form\"));\n setTreeView(dataForAction.views.get(\"tree\"));\n setCurrentModel(dataForAction.model);\n limitRef.current = dataForAction.limit;\n };\n\n const fetchModelData = async () => {\n setCurrentModel(model);\n\n const _formView = (await ConnectionProvider.getHandler().getView({\n model: model!,\n type: \"form\",\n context: parentContext,\n })) as FormView;\n setFormView(_formView as FormView);\n\n const _treeView = (await ConnectionProvider.getHandler().getView({\n model: model!,\n type: \"tree\",\n id: view_id,\n context: parentContext,\n })) as TreeView;\n\n setTreeView(_treeView as TreeView);\n };\n\n useEffect(() => {\n if (action) {\n fetchData(\"action\");\n } else if (model) {\n fetchData(\"model\");\n }\n }, [action, model]);\n\n const onRowClickedHandler = (record: any) => {\n const { id } = record;\n onRowClicked({\n id,\n model: currentModel!,\n treeView: treeView!,\n });\n };\n\n const content = () => {\n if (!treeView || !formView) {\n return null;\n }\n\n return (\n <div style={{ overflowY: \"scroll\" }}>\n {searchError && (\n <Alert className=\"mt-10\" message={searchError} type=\"error\" banner />\n )}\n <Tree\n showPagination={false}\n total={totalItems}\n limit={limitRef.current}\n page={page}\n treeView={treeView}\n results={results}\n onRequestPageChange={onRequestPageChange}\n loading={tableRefreshing}\n onRowClicked={onRowClickedHandler}\n colorsForResults={colorsForResults}\n sorter={sorter}\n onChangeSort={(newSorter) => {\n setSorter?.(newSorter);\n const sortedResults = sortResults({\n resultsToSort: results,\n sorter: newSorter,\n fields: { ...treeView.fields, ...formView.fields },\n });\n setResults(sortedResults);\n }}\n context={parentContext}\n />\n </div>\n );\n };\n\n if (initialError) {\n return (\n <Alert className=\"mt-10\" message={initialError} type=\"error\" banner />\n );\n }\n\n return isLoading ? <Spin style={{ padding: \"2rem\" }} /> : content();\n}\n\nexport default DashboardTree;\n","import ConnectionProvider from \"@/ConnectionProvider\";\nimport React, { useEffect, useState } from \"react\";\nimport Form, { FormProps } from \"../Form\";\n\nexport const DashboardForm = (props: FormProps) => {\n const { model } = props;\n const [firstId, setFirstId] = useState<number>();\n\n useEffect(() => {\n fetchData();\n }, [model]);\n\n async function fetchData() {\n const results: any[] = (await ConnectionProvider.getHandler().search({\n params: [],\n model,\n limit: 1,\n })) as any;\n\n if (results.length > 0) {\n setFirstId(results[0].id);\n }\n }\n\n return (\n <div style={{ padding: \"0.5rem\", overflowY: \"scroll\" }}>\n <Form {...props} model={model} id={firstId} readOnly />\n </div>\n );\n};\n","import React, {\n forwardRef,\n useContext,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from \"react\";\nimport ActionView from \"@/views/ActionView\";\nimport { fetchAction } from \"./dashboardHelper\";\nimport \"react-resizable/css/styles.css\";\nimport \"react-grid-layout/css/styles.css\";\nimport { Graph } from \"../Graph/Graph\";\nimport { DashboardGrid, DashboardGridItem } from \"../DashboardGrid\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport { DashboardProps, FormView } from \"@/types\";\nimport { One2manyItem } from \"@/index\";\nimport { readObjectValues } from \"@/helpers/one2manyHelper\";\nimport { LoadingOutlined } from \"@ant-design/icons\";\nimport { Alert } from \"antd\";\nimport {\n DashboardActionContext,\n DashboardActionContextType,\n} from \"@/context/DashboardActionContext\";\nimport { ShortcutApi } from \"@/ui/FavouriteButton\";\nimport DashboardTree from \"./DashboardTree\";\nimport { DashboardForm } from \"./DashboardForm\";\n\nconst itemsField = \"line_ids\";\n\nfunction Dashboard(props: DashboardProps, ref: any) {\n const { model, context = {}, id, configAction } = props;\n const [dashboardItems, setDashboardItems] = useState<any[]>([]);\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [error, setError] = useState<string>();\n const {\n setIsLoading: setActionBarLoading,\n openAction,\n moveItemsEnabled,\n } = useContext(DashboardActionContext) as DashboardActionContextType;\n\n const itemsFields = useRef<any>();\n const boardFields = useRef<any>();\n\n useEffect(() => {\n fetchData();\n }, [model, id, context]);\n\n useImperativeHandle(ref, () => ({\n refresh: () => {\n fetchData();\n },\n configDashboard: openConfigDashboard,\n }));\n\n async function fetchData() {\n setIsLoading(true);\n setActionBarLoading(true);\n setError(undefined);\n\n try {\n const view: FormView = (await fetchView()) as FormView;\n const values = await fetchValues(view);\n const model = view.fields[itemsField].relation;\n const items: One2manyItem[] = values[itemsField].items;\n boardFields.current = view.fields;\n\n const originalItems: One2manyItem[] = await fetchDashboardItems({\n items,\n model,\n context,\n });\n\n const itemsWithActions = await getItemsWithActions(originalItems);\n setDashboardItems(itemsWithActions);\n setIsLoading(false);\n setActionBarLoading(false);\n } catch (err) {\n setError(JSON.stringify(err));\n }\n }\n\n async function fetchView() {\n return await ConnectionProvider.getHandler().getView({\n model,\n type: \"form\",\n context,\n });\n }\n\n async function fetchDashboardItems({\n items,\n model,\n context,\n }: {\n items: One2manyItem[];\n model: string;\n context: any;\n }) {\n itemsFields.current = (\n (await ConnectionProvider.getHandler().getView({\n model,\n type: \"form\",\n context,\n })) as FormView\n ).fields;\n\n const [results] = await readObjectValues({\n treeView: {\n fields: itemsFields.current,\n },\n formView: {\n fields: itemsFields.current,\n },\n model,\n items,\n context,\n currentView: \"form\",\n });\n return results;\n }\n\n async function fetchValues(view: FormView) {\n return (\n await ConnectionProvider.getHandler().readObjects({\n model,\n ids: [id],\n fields: view.fields,\n context,\n })\n )[0];\n }\n\n async function getItemsWithActions(items: One2manyItem[]) {\n const itemsWithActions = [];\n\n for (const dashboardItem of items) {\n const { values } = dashboardItem;\n if (values.action_id && values.action_id.length > 0) {\n const actionId = parseInt(values.action_id[0], 10);\n const actionData = await fetchAction({\n actionId,\n rootContext: context,\n });\n itemsWithActions.push({ ...dashboardItem, actionData });\n }\n }\n\n return itemsWithActions;\n }\n\n async function onPositionItemsChanged(itemPositions: any[]) {\n if (!moveItemsEnabled) {\n return;\n }\n\n const differences = itemPositions.filter((itemPosition) => {\n const dashboardItem = dashboardItems.find(\n (dashboardItem) => dashboardItem.id === itemPosition.id\n );\n if (!dashboardItem) {\n return false;\n }\n\n if (!dashboardItem.position) {\n return true;\n }\n\n const remotePosition = {\n ...JSON.parse(dashboardItem.position.replace(/'/g, '\"')),\n id: dashboardItem.id,\n };\n\n return JSON.stringify(itemPosition) !== JSON.stringify(remotePosition);\n });\n\n if (differences.length === 0) {\n return;\n }\n\n const itemsToUpdate = dashboardItems.filter((dashboardItem) => {\n return differences.map((diff) => diff.id).includes(dashboardItem.id);\n });\n\n const itemsToUpdateWithUpdatedPos = itemsToUpdate.map((dashboardItem) => {\n const diffItem = {\n ...differences.find((diffItem) => diffItem.id === dashboardItem.id),\n };\n delete diffItem.id;\n\n const item = { ...dashboardItem };\n delete item.actionData;\n\n return {\n ...dashboardItem,\n operation: \"pendingUpdate\",\n values: {\n ...dashboardItem.values,\n position: JSON.stringify(diffItem).replace(/\"/g, \"'\"),\n },\n };\n });\n\n const valueToUpdate = {\n fields: itemsFields.current,\n items: itemsToUpdateWithUpdatedPos,\n };\n\n await ConnectionProvider.getHandler().update({\n model,\n id,\n values: { [itemsField]: valueToUpdate },\n fields: boardFields.current,\n context,\n });\n }\n\n async function openConfigDashboard() {\n openAction(configAction);\n }\n\n if (error) {\n console.log(error);\n return (\n <Alert className=\"mt-10 mb-20\" message={error} type=\"error\" banner />\n );\n }\n\n if (isLoading) {\n return <LoadingOutlined />;\n }\n\n return (\n <DashboardGrid onPositionItemsChanged={onPositionItemsChanged}>\n {dashboardItems.map((item, idx) => {\n const { actionData, values } = item;\n const { position, id } = values;\n\n const {\n actionId,\n actionType,\n key,\n title,\n views,\n model,\n context,\n domain,\n initialView,\n limit,\n } = actionData as any;\n\n let parmsParsed = {};\n\n try {\n parmsParsed = JSON.parse(position.replace(/'/g, '\"'));\n } catch (err) {\n // console.error(`Error parsing parms: ${action.position}`);\n parmsParsed = { x: idx * 2, y: 0, w: 2, h: 3 };\n }\n\n let childContent = null;\n\n if (initialView?.type === \"graph\") {\n childContent = (\n <Graph\n view_id={\n views.filter(\n (view: [number, string]) => view[1] === \"graph\"\n )[0][0]\n }\n model={model}\n context={context}\n domain={domain}\n limit={limit}\n />\n );\n } else if (initialView?.type === \"form\") {\n childContent = <DashboardForm model={model} actionDomain={domain} />;\n } else if (initialView?.type === \"tree\") {\n childContent = (\n <DashboardTree\n model={model}\n domain={domain}\n view_id={\n views.filter(\n (view: [number, string]) => view[1] === \"tree\"\n )[0][0]\n }\n onRowClicked={(record) => {\n const formView = views.find((view: any[]) => {\n const [, type] = view;\n return type === \"form\";\n });\n if (formView) {\n const [id, type] = formView;\n const {\n actionId: action_id,\n actionType: action_type,\n title: name,\n model: res_model,\n } = actionData;\n\n const action: ShortcutApi = {\n action_id,\n action_type,\n name,\n res_id: record.id,\n res_model,\n view_id: id,\n view_type: type,\n };\n openAction(action);\n }\n }}\n />\n );\n } else if (initialView !== undefined) {\n const formattedInitialView =\n initialView && Array.isArray(initialView.id)\n ? { ...initialView, id: initialView.id[0] }\n : initialView;\n childContent = (\n <ActionView\n action_id={actionId}\n action_type={actionType}\n tabKey={key}\n title={title}\n views={views}\n model={model}\n context={context}\n domain={domain}\n setCanWeClose={() => {}}\n initialView={formattedInitialView}\n limit={limit}\n />\n );\n }\n\n let action: ShortcutApi;\n const treeView = views.find((view: any[]) => {\n const [, type] = view;\n return type === \"tree\";\n });\n if (treeView) {\n const [id, type] = treeView;\n const {\n actionId: action_id,\n actionType: action_type,\n title: name,\n model: res_model,\n } = actionData;\n\n action = {\n action_id,\n action_type,\n name,\n res_id: false,\n res_model,\n view_id: id,\n view_type: type,\n };\n }\n\n return (\n <DashboardGridItem\n key={id}\n id={id}\n title={title}\n parms={parmsParsed}\n action={action!}\n openAction={openAction}\n >\n {childContent}\n </DashboardGridItem>\n );\n })}\n </DashboardGrid>\n );\n}\n\nexport default forwardRef(Dashboard);\n","import React, { useContext, useState } from \"react\";\nimport { MultiCheckbox as MultiCheckboxOoui } from \"@gisce/ooui\";\nimport Field from \"@/common/Field\";\nimport { One2manyItem, One2manyValue } from \"../base/one2many/One2manyInput\";\nimport useDeepCompareEffect from \"use-deep-compare-effect\";\nimport { FormContext, FormContextType } from \"@/context/FormContext\";\nimport { Alert, Checkbox, Spin, Col, Row, Button, Space } from \"antd\";\nimport ConnectionProvider from \"@/ConnectionProvider\";\nimport { transformPlainMany2Ones } from \"@/helpers/formHelper\";\n\ntype MultiCheckboxProps = {\n ooui: MultiCheckboxOoui;\n};\n\ntype MultiCheckboxInputProps = MultiCheckboxProps & {\n value?: One2manyValue;\n onChange?: (value: One2manyValue) => void;\n};\n\nexport const MultiCheckbox = (props: MultiCheckboxProps) => {\n const { ooui } = props;\n\n return (\n <Field type={\"array\"} {...props}>\n <MultiCheckboxInput ooui={ooui} />\n </Field>\n );\n};\n\nexport const MultiCheckboxInput = (props: MultiCheckboxInputProps) => {\n const { value, ooui, onChange } = props;\n const { items = [] } = value || {};\n const itemsToShow = items\n .filter((item) => item.operation !== \"pendingRemove\")\n .map((item) => item.id) as number[];\n\n const [options, setOptions] = useState<any[]>([]);\n const [error, setError] = useState<string>();\n const [isLoadingOptions, setIsLoadingOptions] = useState<boolean>(false);\n const { relation, context, readOnly, field, columns } = ooui;\n\n const formContext = useContext(FormContext) as FormContextType;\n const { getContext } = formContext || {};\n\n useDeepCompareEffect(() => {\n fetchOptions();\n }, [items]);\n\n const triggerChange = (changedValue: Array<One2manyItem>) => {\n onChange?.({\n items: changedValue,\n });\n };\n\n async function fetchOptions() {\n setIsLoadingOptions(true);\n let params: any = [];\n if (ooui.domain) {\n const evaluatedDomain = await ConnectionProvider.getHandler().evalDomain({\n domain: ooui.domain,\n values: transformPlainMany2Ones({\n fields: formContext?.getFields(),\n values: formContext.getPlainValues(),\n }),\n fields: formContext?.getFields(),\n context: formContext.getContext(),\n });\n params = [...params, ...evaluatedDomain];\n }\n try {\n const optionsRead = await ConnectionProvider.getHandler().search({\n model: relation,\n params: params,\n fields: [field],\n context: { ...getContext?.(), ...context },\n });\n const options = optionsRead.map((item: any) => {\n const value = item[field];\n let formattedValue = value;\n if (Array.isArray(value)) {\n formattedValue = value[1];\n }\n return { label: formattedValue, value: item.id };\n });\n setOptions(options);\n } catch (err) {\n setError(err as any);\n } finally {\n setIsLoadingOptions(false);\n }\n if (error) {\n return <Alert className=\"mt-10\" message={error} type=\"error\" banner />;\n }\n }\n\n const checkAll = () => {\n onChangeSelected(options.map((option) => option.value));\n };\n\n const uncheckAll = () => {\n onChangeSelected([]);\n };\n\n const onChangeSelected = (ids: any[]) => {\n const newItems: One2manyItem[] = items.map((item) => {\n if (ids.includes(item.id as number)) {\n if (item.operation == \"pendingRemove\") {\n return {\n ...item,\n operation: \"original\",\n };\n } else {\n return item;\n }\n } else {\n return { id: item.id, operation: \"pendingRemove\" };\n }\n });\n const currentIds = newItems.map((item) => item.id);\n ids\n .filter((id) => !currentIds.includes(id))\n .map((id) => {\n newItems.push({ id, operation: \"pendingLink\" });\n });\n triggerChange(newItems);\n };\n\n if (isLoadingOptions && options.length === 0) {\n return <Spin />;\n }\n\n return (\n <>\n <div className=\"flex flex-row\">\n <Checkbox.Group\n value={options.length ? itemsToShow : []}\n disabled={readOnly}\n onChange={onChangeSelected}\n style={{ width: \"100%\" }}\n >\n <Row>\n {options.map((option) => (\n <Col span={Math.floor(24 / columns)}>\n <Checkbox value={option.value}>{option.label}</Checkbox>\n </Col>\n ))}\n </Row>\n </Checkbox.Group>\n {!readOnly && (\n <Space>\n <Button\n onClick={checkAll}\n disabled={itemsToShow.length == options.length}\n >\n Check all\n </Button>\n <Button onClick={uncheckAll} disabled={itemsToShow.length === 0}>\n Uncheck all\n </Button>\n </Space>\n )}\n </div>\n </>\n );\n};\n","import Field from \"@/common/Field\";\nimport ReactMarkdown from \"react-markdown\";\nimport React from \"react\";\nimport {WidgetProps} from \"@/types\";\n\nexport const Markdown = (props: WidgetProps) => {\n return (\n <Field {...props}>\n <MarkdownInput {...props} />\n </Field>\n );\n};\n\nexport const MarkdownInput = (props: any) => {\n const {value, ooui} = props;\n return (\n <div style={{height: ooui.height ? ooui.height + 'px' : '100%', overflow: 'auto'}}>\n <ReactMarkdown children={value} className=\"ant-typography\"/>\n </div>\n\n )\n}\n","import React from \"react\";\nimport { Radio as RadioAnt, Space } from \"antd\";\n\nimport Field from \"@/common/Field\";\nimport { Radio as RadioOoui } from \"@gisce/ooui\";\nimport { WidgetProps } from \"@/types\";\n\nexport const Radio = (props: WidgetProps) => {\n const { ooui } = props;\n const { required } = ooui;\n\n return (\n <Field required={required} type={\"any\"} {...props}>\n <SelectionInput {...props} />\n </Field>\n );\n};\n\ntype RadioInputProps = WidgetProps & {\n onChange?: (value: any) => void;\n value?: string;\n};\n\nexport const SelectionInput = (props: RadioInputProps) => {\n const { ooui, onChange, value } = props;\n const { selectionValues, readOnly, direction } = ooui as RadioOoui;\n\n const values = Array.from(selectionValues.entries());\n\n const options =\n values &&\n values.length &&\n values.map((entry: string[]) => {\n const [key, value] = entry;\n return (\n <RadioAnt key={key} value={key}>\n {value}\n </RadioAnt>\n );\n });\n\n return (\n <RadioAnt.Group disabled={readOnly} onChange={onChange} value={value}>\n <Space direction={direction}>\n {options}\n </Space>\n </RadioAnt.Group>\n );\n};","import React from \"react\";\nimport { Switch as AntdSwitch } from \"antd\";\n\nimport Field from \"@/common/Field\";\nimport { WidgetProps } from \"@/types\";\n\nexport const Switch = (props: WidgetProps) => {\n const { ooui } = props;\n const { id, readOnly, required } = ooui;\n\n return (\n <Field\n {...props}\n valuePropName=\"checked\"\n >\n <SwitchInput id={id} readOnly={readOnly} required={required} />\n </Field>\n );\n};\n\nconst SwitchInput = (props: any) => {\n const { required, readOnly, ...restProps } = props;\n\n\n return (\n <div className=\"flex flex-row\">\n <AntdSwitch disabled={readOnly} {...restProps} />\n </div>\n );\n};\n","import React, { useContext } from \"react\";\nimport { Steps as AntdSteps } from \"antd\";\nimport { FormContext, FormContextType } from \"@/context/FormContext\";\nimport Field from \"@/common/Field\";\nimport { Steps as StepsOoui } from \"@gisce/ooui\";\n\ntype StepsProps = {\n ooui: StepsOoui;\n value: any,\n}\n\ntype StatusType = 'wait' | 'process' | 'finish' | 'error';\n\n\nexport const Steps = (props: StepsProps) => {\n const { ooui } = props;\n const { required } = ooui;\n\n return (\n <Field required={required} type={\"any\"} {...props}>\n <StepsInput {...props} />\n </Field>\n );\n};\n\ntype StepsInputProps = StepsProps & {\n value?: any;\n};\n\nexport const StepsInput = (props: StepsInputProps) => {\n const { ooui, value } = props;\n const { selectionValues, errorField } = ooui as StepsOoui;\n const formContext = useContext(FormContext) as FormContextType;\n\n const values = Array.from(selectionValues.entries());\n const current = values.map(val => val[0]).indexOf(value);\n let status: StatusType = \"process\";\n let error = \"\";\n \n if (errorField) {\n error = formContext.getFieldValue(errorField);\n if (error) {\n status = \"error\";\n }\n }\n\n\n return (\n <AntdSteps current={current} status={status}>\n {values.map((val, idx) => (\n <AntdSteps.Step title={val[1]} description={idx === current && status === \"error\" ? error : null}/>\n ))}\n </AntdSteps>\n );\n};","import React, { useContext } from \"react\";\nimport Editor from \"@monaco-editor/react\";\nimport { FormContext, FormContextType } from \"@/context/FormContext\";\nimport { CodeEditor as CodeEditorOoui } from \"@gisce/ooui\";\n\nimport Field from \"@/common/Field\";\nimport { WidgetProps } from \"@/types\";\n\ntype CodeEditorProps = WidgetProps & {\n ooui: CodeEditorOoui;\n};\n\nexport const CodeEditor = (props: CodeEditorProps) => {\n const { ooui } = props;\n const { lang, height } = ooui;\n const formContext = useContext(FormContext) as FormContextType;\n const { elementHasLostFocus } = formContext || {};\n\n const onMount = (editor: any) => {\n editor.onDidBlurEditorWidget(elementHasLostFocus)\n }\n\n return (\n <Field {...props}>\n <Editor defaultLanguage={lang ? lang : ''} height={height ? height : 300} onMount={onMount}/>\n </Field>\n );\n};\n","import React, { useContext } from \"react\";\nimport { Layout, Typography } from \"antd\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\n\nconst { Content } = Layout;\nconst { Title } = Typography;\n\nfunction Welcome(): React.ReactElement {\n const { t } = useContext(LocaleContext) as LocaleContextType;\n\n return (\n <Content className=\"m-5 select-none\">\n <Title level={5}>{t(\"welcome\")}</Title>\n </Content>\n );\n}\n\nexport default Welcome;\n","import React, {\n useState,\n forwardRef,\n useImperativeHandle,\n useRef,\n} from \"react\";\nimport { ConnectionProvider, ContentRootProvider, FormView } from \"..\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport Welcome from \"./Welcome\";\nimport TabManagerProvider from \"@/context/TabManagerContext\";\nimport ActionView from \"./ActionView\";\nimport { parseContext } from \"@gisce/ooui\";\nimport LocaleContextProvider from \"@/context/LocaleContext\";\nimport { tForLang } from \"@/context/LocaleContext\";\nimport { ShortcutApi } from \"@/ui/FavouriteButton\";\nimport showErrorDialog from \"@/ui/ActionErrorDialog\";\nimport { InitialViewData, ViewType } from \"@/types\";\nimport { transformPlainMany2Ones } from \"@/helpers/formHelper\";\n\ntype RootViewProps = {\n children: React.ReactNode;\n globalValues?: any;\n rootContext?: any;\n lang: string;\n};\n\nexport type ActionInfo = {\n id: number;\n type: string;\n};\n\nfunction RootView(props: RootViewProps, ref: any) {\n const { children, globalValues = {}, rootContext = {}, lang } = props;\n const [activeKey, setActiveKey] = useState<string>(\"welcome\");\n\n const [tabs, setTabs] = useState<any>([\n {\n title: tForLang(\"welcome\", lang),\n key: \"welcome\",\n closable: true,\n content: <Welcome />,\n },\n ]);\n const tabViewsCloseFunctions = useRef(new Map<string, any>());\n const contentRootProvider = useRef();\n\n useImperativeHandle(ref, () => ({\n retrieveAndOpenAction,\n openShortcut,\n }));\n\n function remove(key: string) {\n if (key === activeKey) {\n const currentIndex = tabs.findIndex((tab: any) => tab.key === key);\n\n if (tabs[currentIndex - 1]) {\n setActiveKey(tabs[currentIndex - 1].key);\n }\n if (tabs[currentIndex + 1]) {\n setActiveKey(tabs[currentIndex + 1].key);\n }\n }\n\n setTabs(tabs.filter((tab: any) => tab.key !== key));\n tabViewsCloseFunctions.current.delete(key);\n }\n\n function registerViewCloseFn({\n tabKey,\n canWeClose,\n }: {\n tabKey: string;\n canWeClose: any;\n }) {\n tabViewsCloseFunctions.current.set(tabKey, canWeClose);\n }\n\n async function retrieveAndOpenAction({\n action,\n values,\n forced_values,\n initialViewType,\n res_id,\n domain = [],\n }: {\n action: string;\n values?: any;\n forced_values?: any;\n initialViewType?: ViewType;\n res_id?: number;\n domain?: any;\n }) {\n const dataForAction = await ConnectionProvider.getHandler().getActionData({\n action,\n context: rootContext,\n });\n\n if (dataForAction.type === \"ir.actions.wizard\") {\n showErrorDialog(\"Action type not supported\");\n return;\n }\n\n const [action_type, action_id_string] = action.split(\",\");\n const action_id = parseInt(action_id_string);\n\n const parsedContext = parseContext({\n context: dataForAction.context,\n values: globalValues,\n fields: {},\n });\n\n const parsedDomain = dataForAction.domain\n ? await ConnectionProvider.getHandler().evalDomain({\n domain: dataForAction.domain,\n values: globalValues,\n context: { ...rootContext, ...parsedContext },\n })\n : [];\n\n const {\n res_model: model,\n views,\n name: title,\n target,\n view_type,\n limit,\n } = dataForAction;\n\n const treeExpandable = view_type === \"tree\";\n\n const finalViews = [];\n\n for (const viewArray of views) {\n const [id, viewType] = viewArray;\n\n if (!id) {\n if (viewType === \"dashboard\") {\n finalViews.push([undefined, \"dashboard\"]);\n } else {\n const { view_id } = await ConnectionProvider.getHandler().getView({\n model,\n type: viewType,\n id,\n context: { ...rootContext, ...parsedContext },\n });\n finalViews.push([view_id, viewType]);\n }\n } else {\n finalViews.push(viewArray);\n }\n }\n\n let initialView;\n\n if (initialViewType) {\n const [id, type] = finalViews.find(\n ([_, type]) => type === initialViewType\n );\n initialView = { id, type };\n } else {\n const [id, type] = finalViews[0];\n initialView = { id, type };\n }\n\n openAction({\n domain: [...parsedDomain, ...domain],\n context: { ...rootContext, ...parsedContext },\n model,\n views: finalViews,\n title,\n target,\n initialView,\n action_type,\n action_id,\n values,\n forced_values,\n res_id,\n treeExpandable,\n limit,\n });\n }\n\n function addNewTab({\n title,\n content,\n key,\n action,\n }: {\n title: string;\n content: any;\n key: string;\n action?: ActionInfo;\n }) {\n let newTabs = [...tabs];\n\n if (tabs.length === 1 && tabs[0].key === \"welcome\") {\n newTabs = [...tabs.filter((tab: any) => tab.key !== \"welcome\")];\n }\n\n setTabs([\n ...newTabs,\n {\n title,\n key,\n closable: true,\n content,\n action,\n },\n ]);\n\n setActiveKey(key);\n }\n\n async function openRelate({\n relateData,\n fields,\n values,\n action_id,\n action_type,\n }: {\n relateData: any;\n fields: any;\n values: any;\n action_id: number;\n action_type: string;\n }) {\n const {\n res_model: model,\n context,\n domain,\n views,\n target,\n string: title,\n limit,\n } = relateData;\n\n const [id, type] = views[0];\n const initialView = { id, type };\n\n const parsedContext = parseContext({\n context,\n values: { ...values, ...globalValues },\n fields,\n });\n\n const parsedDomain = domain\n ? await ConnectionProvider.getHandler().evalDomain({\n domain: domain,\n values: transformPlainMany2Ones({\n fields,\n values: { ...values, ...globalValues },\n }),\n fields,\n context: { ...rootContext, ...parsedContext },\n })\n : [];\n\n openAction({\n model,\n target,\n views,\n context: { ...rootContext, ...parsedContext },\n domain: parsedDomain,\n title,\n initialView,\n action_id,\n action_type,\n limit,\n });\n }\n\n async function openShortcut(shortcut: ShortcutApi) {\n const { action_id, action_type, res_id, view_id } = shortcut;\n const action = `${action_type},${action_id}`;\n\n const dataForAction = await ConnectionProvider.getHandler().getActionData({\n action,\n context: rootContext,\n });\n const parsedContext = parseContext({\n context: dataForAction.context,\n values: globalValues,\n fields: {},\n });\n\n const parsedDomain = dataForAction.domain\n ? await ConnectionProvider.getHandler().evalDomain({\n domain: dataForAction.domain,\n values: globalValues,\n context: { ...rootContext, ...parsedContext },\n })\n : [];\n\n const {\n res_model: model,\n views,\n name: title,\n target,\n view_type,\n limit,\n } = dataForAction;\n const treeExpandable = view_type === \"tree\";\n\n const finalViews = [];\n\n for (const viewArray of views) {\n const [id, viewType] = viewArray;\n\n if (!id) {\n if (viewType === \"dashboard\") {\n finalViews.push([undefined, \"dashboard\"]);\n } else {\n const { view_id } = await ConnectionProvider.getHandler().getView({\n model,\n type: viewType,\n id,\n context: { ...rootContext, ...parsedContext },\n });\n finalViews.push([view_id, viewType]);\n }\n } else {\n finalViews.push(viewArray);\n }\n }\n\n let id, type;\n if (view_id === undefined || view_id === null) {\n const view = finalViews.find((view: any[]) => {\n return view[0] === undefined;\n });\n id = undefined;\n type = view[1];\n } else {\n [id, type] = finalViews.find((view: any[]) => {\n if (view[0] === undefined) {\n return false;\n }\n return view[0] === view_id;\n });\n }\n\n const initialView = { id, type };\n\n openAction({\n domain: parsedDomain,\n context: { ...rootContext, ...parsedContext },\n model,\n views: finalViews,\n title,\n target,\n initialView,\n action_id,\n action_type,\n res_id,\n treeExpandable,\n limit,\n });\n }\n\n async function openDefaultActionForModel({\n model,\n values,\n forced_values,\n initialViewType,\n res_id,\n domain,\n }: {\n model: string;\n values?: any;\n forced_values?: any;\n initialViewType?: ViewType;\n res_id?: number;\n domain?: any;\n }) {\n const actionString =\n await ConnectionProvider.getHandler().getActionStringForModel(model);\n await retrieveAndOpenAction({\n action: actionString,\n values,\n forced_values,\n initialViewType,\n res_id,\n domain,\n });\n }\n\n async function openAction({\n domain,\n context,\n model,\n views,\n title,\n target,\n initialView,\n action_id,\n action_type,\n res_id,\n values,\n forced_values,\n treeExpandable = false,\n limit,\n }: {\n domain: any;\n context: any;\n model: string;\n views: Array<any>;\n title: string;\n target: string;\n initialView: InitialViewData;\n action_id: number;\n action_type: string;\n res_id?: number | boolean;\n values?: any;\n forced_values?: any;\n treeExpandable?: boolean;\n limit?: number;\n }) {\n const key = uuidv4();\n\n if (target !== \"current\") {\n const formView = (await ConnectionProvider.getHandler().getView({\n model,\n type: \"form\",\n id: initialView.type === \"form\" ? initialView.id : undefined,\n context: { ...rootContext, ...context },\n })) as FormView;\n\n (contentRootProvider.current as any).openActionModal({\n domain,\n model,\n formView,\n context: { ...rootContext, ...context },\n actionData: {\n action_id,\n action_type,\n res_id,\n view_id: formView.view_id,\n },\n });\n } else {\n const formattedInitialView =\n initialView && Array.isArray(initialView.id)\n ? { ...initialView, id: initialView.id[0] }\n : initialView;\n\n addNewTab({\n title,\n action: {\n id: action_id,\n type: action_type,\n },\n content: (\n <ActionView\n action_id={action_id}\n action_type={action_type}\n tabKey={key}\n title={title}\n views={views}\n model={model}\n context={{ ...rootContext, ...context }}\n domain={domain}\n setCanWeClose={registerViewCloseFn}\n initialView={formattedInitialView}\n res_id={res_id}\n formDefaultValues={values}\n formForcedValues={forced_values}\n treeExpandable={treeExpandable}\n limit={limit}\n />\n ),\n key,\n });\n }\n }\n\n return (\n <LocaleContextProvider lang={lang}>\n <TabManagerProvider\n openShortcut={openShortcut}\n openAction={openAction}\n openRelate={openRelate}\n openDefaultActionForModel={openDefaultActionForModel}\n tabs={tabs}\n activeKey={activeKey}\n onRemoveTab={async (key: string) => {\n const canWeCloseFn = tabViewsCloseFunctions.current.get(\n key as string\n );\n const canWeClose = await canWeCloseFn?.();\n\n if (canWeClose || activeKey === \"welcome\") {\n remove(key as string);\n }\n }}\n onChangeTab={(key: string) => {\n setActiveKey(key);\n }}\n >\n <ContentRootProvider\n ref={contentRootProvider}\n globalValues={globalValues}\n >\n {children}\n </ContentRootProvider>\n </TabManagerProvider>\n </LocaleContextProvider>\n );\n}\n\nexport default forwardRef(RootView);\n","import React from \"react\";\nimport { CloseOutlined } from \"@ant-design/icons\";\nimport { theme } from \"antd\";\nconst { useToken } = theme;\n\ntype TabProps = {\n tabKey: string;\n label: string;\n onClose: (key: string) => void;\n isActive: boolean;\n onSelected: (key: string) => void;\n};\n\nfunction Tab(props: TabProps) {\n const { label, onClose, tabKey, isActive, onSelected } = props;\n const { token } = useToken();\n const bgColor = isActive ? token.colorBgContainer : token.colorPrimaryBg;\n\n return (\n <div\n onClick={() => {\n !isActive && onSelected(tabKey);\n }}\n style={{\n cursor: \"pointer\",\n height: 40,\n paddingTop: 7,\n paddingBottom: 5,\n paddingLeft: 10,\n paddingRight: 10,\n backgroundColor: bgColor,\n display: \"inline-flex\",\n flex: 1,\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"center\",\n borderTopLeftRadius: token.borderRadius,\n borderTopRightRadius: token.borderRadius,\n marginLeft: 2,\n }}\n >\n <div\n style={{\n color: token.colorPrimaryActive,\n userSelect: \"none\",\n height: 40,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n paddingLeft: 5,\n paddingRight: 5,\n marginBottom: 2,\n fontWeight: isActive ? 500 : \"normal\",\n }}\n >\n {label}\n </div>\n <div\n style={{\n paddingLeft: 5,\n height: 40,\n\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n }}\n >\n <CloseOutlined\n style={{\n color: token.colorPrimaryActive,\n }}\n onClick={(e) => {\n e.stopPropagation();\n onClose(tabKey);\n }}\n />\n </div>\n </div>\n );\n}\n\nexport default Tab;\n","import React, { useContext, useState } from \"react\";\n\nimport {\n TabManagerContext,\n TabManagerContextType,\n} from \"@/context/TabManagerContext\";\nimport Tab from \"./tabs/Tab\";\n\nfunction TabSelector() {\n const tabManagerContext = useContext(\n TabManagerContext\n ) as TabManagerContextType;\n const { activeKey, tabs, onRemoveTab, onChangeTab } = tabManagerContext || {};\n\n return (\n <>\n {tabs.map((tab: any) => (\n <Tab\n key={tab.key}\n tabKey={tab.key}\n label={tab.title}\n onClose={onRemoveTab}\n isActive={activeKey === tab.key}\n onSelected={onChangeTab}\n />\n ))}\n </>\n );\n}\n\nexport default TabSelector;\n","import React, { useContext } from \"react\";\n\nimport {\n TabManagerContext,\n TabManagerContextType,\n} from \"@/context/TabManagerContext\";\n\ntype Props = {\n tab: any;\n};\n\nfunction TabContent(props: Props) {\n const { tab } = props;\n\n const tabManagerContext = useContext(\n TabManagerContext\n ) as TabManagerContextType;\n const { activeKey } = tabManagerContext || {};\n\n const hiddenStyle: any = {\n display: \"none\",\n };\n\n return (\n <div style={tab.key !== activeKey ? hiddenStyle : undefined}>\n {tab.content}\n </div>\n );\n}\n\nexport default React.memo(TabContent, () => true);\n","import React, { useContext } from \"react\";\n\nimport {\n TabManagerContext,\n TabManagerContextType,\n} from \"@/context/TabManagerContext\";\nimport TabContent from \"./TabContent\";\n\nfunction CurrentTabContent() {\n const tabManagerContext = useContext(\n TabManagerContext\n ) as TabManagerContextType;\n const { tabs } = tabManagerContext || {};\n\n const tabsToRender =\n tabs?.map((tab) => <TabContent key={tab.key} tab={tab} />) || null;\n\n return <>{tabsToRender}</>;\n}\n\nexport default CurrentTabContent;\n","import React, { useContext, useEffect, useState } from \"react\";\nimport {\n StarOutlined,\n StarFilled,\n DownOutlined,\n TableOutlined,\n FormOutlined,\n EditOutlined,\n} from \"@ant-design/icons\";\nimport { Button, Col, Row, Spin, Tooltip, theme } from \"antd\";\nimport { Menu, Dropdown } from \"antd\";\nimport showErrorDialog from \"@/ui/ActionErrorDialog\";\nimport {\n TabManagerContext,\n TabManagerContextType,\n} from \"@/context/TabManagerContext\";\nimport { LocaleContext, LocaleContextType } from \"@/context/LocaleContext\";\nimport { ViewType } from \"@/types\";\nconst { useToken } = theme;\n\nexport type ShortcutApi = {\n action_id: number;\n action_type: string;\n id?: number;\n name: string;\n res_id: number | boolean;\n res_model: string;\n view_id: number;\n view_type: string;\n};\n\nexport type FavouriteOptions = {\n action_id: number;\n action_type: string;\n res_id: number | boolean;\n view_id: number;\n};\n\ntype Props = {\n onRetrieveShortcuts: () => Promise<ShortcutApi[]>;\n onCheckIsFavourite: (options: FavouriteOptions) => Promise<number | boolean>;\n onAddFavourite: (options: FavouriteOptions) => Promise<number>;\n onRemoveFavourite: (shortcut_id: number) => Promise<void>;\n};\n\nconst FavouriteButton = (props: Props) => {\n const {\n onRetrieveShortcuts,\n onCheckIsFavourite,\n onAddFavourite,\n onRemoveFavourite,\n } = props;\n\n const [isFavourite, setIsFavourite] = useState(false);\n const [dropdownVisible, setDropdownVisible] = useState(false);\n const [shortcuts, setShortcuts] = useState<ShortcutApi[]>([]);\n const [loading, setLoading] = useState(true);\n const [currentShortcutId, setCurrentShortcutId] = useState<number>();\n const { t } = (useContext(LocaleContext) as LocaleContextType) || {};\n\n const { token } = useToken();\n\n const tabManagerContext = useContext(\n TabManagerContext\n ) as TabManagerContextType;\n const {\n openShortcut,\n tabs,\n activeKey,\n currentView,\n currentId,\n openDefaultActionForModel,\n } = tabManagerContext || {};\n\n useEffect(() => {\n getShortcuts();\n }, []);\n\n useEffect(() => {\n checkFavourite();\n }, [tabs, activeKey, currentView, currentId]);\n\n async function getShortcuts() {\n try {\n setLoading(true);\n const shortcuts = await onRetrieveShortcuts();\n setShortcuts(shortcuts);\n } catch (e) {\n showErrorDialog(e);\n } finally {\n setLoading(false);\n }\n }\n\n function handleMenuClick(event: any) {\n const { key } = event;\n const shortcut = shortcuts.find((s) => s.id === Number(key));\n if (shortcut?.action_type === \"ir.actions.wizard\") {\n return;\n }\n if (shortcut) {\n openShortcut(shortcut);\n }\n setDropdownVisible(false);\n }\n\n function handleVisibleChange(flag: boolean) {\n if (flag) {\n getShortcuts();\n }\n setDropdownVisible(flag);\n }\n\n async function checkFavourite() {\n if (!currentView) {\n return;\n }\n\n const currentTab = tabs.find((t) => t.key === activeKey);\n const { id: action_id, type: action_type } = currentTab?.action || {};\n\n if (!action_id || !action_type) {\n setIsFavourite(false);\n return;\n }\n\n const view_id = currentView.view_id!;\n let res_id: boolean | number = false;\n\n if (currentView.type === \"form\") {\n res_id = currentId ? (currentId as number) : false;\n }\n const result = await onCheckIsFavourite({\n action_id,\n action_type,\n view_id,\n res_id,\n });\n\n if (result !== false) {\n setCurrentShortcutId(result as number);\n }\n\n setIsFavourite(result !== false);\n }\n\n async function editFavourites() {\n setDropdownVisible(false);\n openDefaultActionForModel?.({ model: \"ir.ui.view_sc\" });\n }\n\n const menu = (\n <Menu onClick={handleMenuClick}>\n <div style={{ width: 300, padding: 5, display: \"flex\" }}>\n <div style={{ paddingLeft: 15, color: \"#ccc\" }}>\n {t?.(\"favorites\").toUpperCase()}\n </div>\n <div style={{ flexGrow: 1, paddingLeft: 10 }}>\n <Tooltip title={t?.(\"edit_favorites\")}>\n <EditOutlined\n style={{ color: token.colorPrimary, cursor: \"pointer\" }}\n onClick={editFavourites}\n />\n </Tooltip>\n </div>\n </div>\n <Menu.Divider />\n {loading ? (\n <Spin style={{ padding: \"1rem\" }} />\n ) : shortcuts.length > 0 ? (\n <>\n {shortcuts.map((shortcut) => (\n <Menu.Item key={shortcut.id}>\n <FavouriteItem\n title={shortcut.name}\n type={shortcut.view_type as ViewType}\n />\n </Menu.Item>\n ))}\n </>\n ) : (\n <div style={{ width: 300, padding: 5, paddingLeft: 15 }}>\n {t?.(\"no_favorites\")}\n </div>\n )}\n </Menu>\n );\n\n function FavouriteItem({ title, type }: { title: string; type: ViewType }) {\n const icon = type === \"tree\" ? <TableOutlined /> : <FormOutlined />;\n return (\n <Row wrap={false}>\n <Col flex=\"none\" style={{ paddingRight: 20 }}>\n {icon}\n </Col>\n <Col flex=\"auto\">{title}</Col>\n </Row>\n );\n }\n\n async function toggleFavourite() {\n if (isFavourite && currentShortcutId) {\n await onRemoveFavourite(currentShortcutId);\n } else {\n if (!currentView) {\n return;\n }\n\n const currentTab = tabs.find((t) => t.key === activeKey);\n const { id: action_id, type: action_type } = currentTab?.action || {};\n const view_id = currentView.view_id!;\n let res_id: boolean | number = false;\n\n if (!action_id || !action_type) {\n setIsFavourite(false);\n return;\n }\n\n if (currentView.type === \"form\") {\n res_id = currentId ? (currentId as number) : false;\n }\n\n await onAddFavourite({\n action_id,\n action_type,\n view_id,\n res_id,\n });\n }\n\n await getShortcuts();\n setIsFavourite(!isFavourite);\n }\n\n return (\n <>\n <Button\n type={isFavourite ? \"primary\" : \"default\"}\n icon={\n isFavourite ? (\n <StarFilled style={{ color: \"white\" }} />\n ) : (\n <StarOutlined />\n )\n }\n style={{\n width: 50,\n borderTopRightRadius: 0,\n borderBottomRightRadius: 0,\n }}\n onClick={toggleFavourite}\n ></Button>\n <Dropdown\n overlay={menu}\n onVisibleChange={handleVisibleChange}\n open={dropdownVisible}\n >\n <Button\n style={{\n width: 25,\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0,\n }}\n icon={<DownOutlined style={{ fontSize: \"0.5em\" }} />}\n onClick={(e) => e.preventDefault()}\n ></Button>\n </Dropdown>\n </>\n );\n};\n\nexport default FavouriteButton;\n"],"names":["Text","Title","Typography","useToken","theme","alignClass","left","center","right","Label","props","ooui","align","responsiveBehaviour","label","tooltip","fieldForLabel","labelSize","labelType","labelText","length","labelAlgin","token","TextType","undefined","_jsx","Tooltip","QuestionCircleOutlined","color","colorPrimary","Interweave","ca_ES","true","false","simple_search","advanced_search","search","parameters","limit","first","no_results","summary","welcome","attachments","addNewAttachment","listAllAttachments","viewAs","confirmRemoveItem","save","delete","refresh","previous","next","actions","reports","related","new","fillRequiredField","fillRequiredFields","generatingReport","confirmation","ok","cancel","formHasErrors","unsavedChanges","confirmRefreshWithoutSave","discardAndRefresh","removeItems","confirmRemove","yesConfirmRemove","unlinkItems","confirmUnlink","yesConfirmUnlink","confirmCloseWithoutSave","closeWithoutSaving","action","report","selectAction","download","clear","open","uploadNewImage","noCurrentEntries","duplicate","downloadingAttachment","tree","form","favorites","edit_favorites","no_favorites","register","of","editingDocument","showLogs","createdBy","creationDate","lastUpdatedBy","lastUpdatedDate","goToResourceId","searchId","idNotFound","selectedRegisters","translate","enterTextBeforeTranslate","saveBeforeTranslate","configDashboard","moveDashboard","openAttachment","openAttachmentLink","uninformed","totalRegisters","export","selectAtLeastOneField","printScreen","advancedExport","savedRegisters","errorWhileSavingForm","en_US","es_ES","localeStrings","LocaleContext","React","createContext","LocaleContextProvider","children","lang","t","key","tForLang","Field","layout","valuePropName","showLabel","alignLabel","required","type","validator","id","useContext","rules","message","formItem","Form","labelWidget","LabelOoui","name","string","help","Row","Col","_Fragment","confirm","Modal","showDialog","onOk","confirmMessage","title","icon","ExclamationCircleOutlined","centered","content","okText","cancelText","FormContext","FormProvider","activeId","activeModel","setFieldValue","getFieldValue","executeButtonAction","getContext","getValues","getPlainValues","domain","submitForm","fetchValues","formHasChanges","elementHasLostFocus","getFields","iconMapping","iconMapper","getIconForKey","toCamelCase","word","w","IconCamelCase","antKey","AntIcons","tablerKey","TablerIcons","TablerIcon","Icon","Button","activated","buttonType","context","readOnly","formContext","isRunning","setIsRunning","useState","onClick_confirm","onClick","showConfirmDialog","getButtonIcon","LoadingOutlined","AntButton","primary","danger","whiteSpace","height","ButtonGroup","defaultButton","secondaryButtons","caption","buttons","FieldOoui","_jsxs","Dropdown","DownOutlined","Items","items","map","button","Menu","MODAL_WIDTH_CONSTANT","getWindowDimensions","width","useWindowDimensions","windowDimensions","setWindowDimensions","useEffect","handleResize","ConnectionProvider","handler","parseError","errorResponse","splitted","args","error","warning","err","WarningOutlined","TranslationModal","visible","onCloseModal","model","field","onSubmitSucceed","modalWidth","langs","setLangs","isLoading","setIsLoading","submitLoading","setSubmitLoading","valuesForLangs","setValuesForLangs","originalValuesForLangs","useRef","fetchData","getLangs","getValuesForLangs","showErrorDialog","getHandler","params","fields","item","code","retrievedValuesForLang","retrievedValue","readObjects","ids","fieldsToRetrieve","current","getInputsForLangs","i","paddingBottom","paddingRight","TextArea","event","target","value","onSubmit","langCode","Object","keys","update","values","Spin","Divider","Space","CloseOutlined","CheckOutlined","marginLeft","ButtonWithTooltip","restProps","info","Char","isSearchField","isPassword","translatable","requiredStyle","backgroundColor","colorPrimaryBg","input","Input","size","TranslatableChar","onChange","translationModalVisible","setTranslationModalVisible","cursor","pointerEvents","TranslationOutlined","defaultAlgorithm","defaultSeed","mapToken","Option","Select","Selection","SelectionInput","selectionValues","Array","from","entries","options","entry","RequiredSelect","option","toLowerCase","indexOf","styled","Boolean","BooleanInput","RequiredCheckbox","AntCheckbox","isObject","isObject_1","freeGlobal","global","_freeGlobal","require$$0","freeSelf","root","_root","now","now_1","reWhitespace","trimmedEndIndex","index","_trimmedEndIndex","reTrimStart","baseTrim","_baseTrim","Symbol","_Symbol","objectProto","hasOwnProperty","nativeObjectToString","symToStringTag","getRawTag","isOwn","tag","unmasked","result","_getRawTag","objectToString","_objectToString","require$$1","require$$2","nullTag","undefinedTag","baseGetTag","_baseGetTag","isObjectLike","isObjectLike_1","symbolTag","isSymbol","isSymbol_1","NAN","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","toNumber","other","isBinary","toNumber_1","FUNC_ERROR_TEXT","nativeMax","nativeMin","debounce","func","wait","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","invokeFunc","time","thisArg","leadingEdge","timerExpired","remainingWait","timeSinceLastCall","timeSinceLastInvoke","timeWaiting","shouldInvoke","trailingEdge","flush","debounced","isInvoking","debounce_1","getFilesize","base64string","inKbs","getMimeType","mimeInfo","fileTypeFromBuffer","toBase64","file","resolve","reject","reader","e","openBase64InNewTab","data","mimeType","byteCharacters","byteNumbers","byteArray","fileURL","Image","ImageInput","inputFile","triggerChange","changedValue","downloadFile","fileType","linkSource","mime","downloadLink","document","createElement","href","ext","click","onChangeFile","stopPropagation","preventDefault","files","b64","clearFile","maxWidth","display","FolderOpenOutlined","fileUploadField","DownloadOutlined","ClearOutlined","FiberGrid","FiberGridInput","JSON","parse","console","log","GridUi","newValue","getTree","treeView","xml","TreeOoui","getTableColumns","components","column","component","render","a","b","aItem","bItem","_a","_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","createReactWidget","widgetClass","getSpanStyleForItem","fillRowWithEmptiesToFit","row","mustFillWithEmpties","numberOfColumns","rowWithEmptiesToFit","totalColSpan","isLastItemAndMustFit","columnIndex","gapsToAdjust","gapsToFill","expandWidgetsIfNeeded","getSingleRowTemplateColumns","gridOptions","Container","columnsToAdd","getTemplateColumns","columns","fieldInRows","odd","even","templateColumns","getMaxColspanForRows","rows","prev","container","maxColspanForRows","firstRow","rowWithoutInvisibleFields","invisible","rowWithExpandedItems","some","concat","minWidth","gridTemplateColumns","gap","minHeight","onCancel","FormModalContext","FormModalProvider","setTitle","convertBooleanParamIfNeeded","getParamsForFields","widgetContainer","removeUndefinedFields","groupedDateTime","groupDateTimeValuesIfNeeded","groupedValues","ungroupDateValuesIfNeeded","getParamForField","acc","curVal","filteredKey","operator","valueEntry","getDatetimeDateFields","removeDateTimeSingleFields","newValues","datePair","baseKey","timeKey","timePair","to","timeValueFrom","timeValueTo","dateFields","getUniqueFieldsForParams","uniqueFields","param","mergeParams","searchParams","domainParams","finalParams","uniqueParams","element","DEFAULT_SEARCH_LIMIT","useSearch","opts","setSearchTreeNameSearch","setSelectedRowItems","setSearchParams","setSearchVisible","setTreeIsLoading","nameSearch","searchNameGetDoneRef","setActionViewTotalItems","setSorter","setCurrentItemIndex","setResultsActionView","resultsActionView","currentId","setLimit","setSearchValues","tableRefreshing","setTableRefreshing","searchFilterLoading","setSearchFilterLoading","searchError","setSearchError","page","setPage","offset","setOffset","totalItems","setTotalItems","resultsInternal","setResultsInternal","colorsForResults","setColorsForResults","statusForResults","setStatusForResults","internalLimit","originalResults","setResults","useCallback","getResults","searchByNameSearch","searchResults","resultsIds","status","attrs","resultsWithData","resultsData","newResultIds","resultsSorted","newOffset","mergedParams","attrsEvaluated","newCurrentItemIndex","totalItemsValue","fetchResults","changeSort","newSorter","sortedResults","submit","searchValues","newLimit","requestPageChange","fetchChildrenForRecord","record","child_id","ActionViewContext","ActionViewProvider","titleProps","setCurrentView","availableViews","formRef","searchTreeRef","onNewClicked","setCurrentId","currentItemIndex","currentModel","selectedRowItems","searchTreeNameSearch","limitProps","formIsSaving","setFormIsSaving","setFormHasChanges","removingItem","setRemovingItem","formIsLoading","setFormIsLoading","treeIsLoading","setAttachments","duplicatingItem","setDuplicatingItem","searchVisible","graphIsLoading","setGraphIsLoading","previousView","setPreviousView","view","view_id","callOnFormSave","onFormSave","TabManagerContext","TabManagerProvider","openAction","openRelate","openDefaultActionForModel","openShortcut","activeKey","onChangeTab","onRemoveTab","tabs","ContentRootContext","callRefreshValues","fns","ContentRootProvider","ref","globalValues","reportInProgressInterval","waitingForReport","reportGenerating","setReportGenerating","tabManagerContext","onRefreshParentValues","useImperativeHandle","openActionModal","actionModalVisible","setActionModalVisible","actionModalOptions","setActionModalOptions","generateReport","reportData","reportContext","datas","report_name","idsToExecute","reportContextParsed","parseContext","newReportId","createReport","setInterval","evaluateReportStatus","clearInterval","reportState","getReport","state","exception","processAction","actionData","onRefreshParentValuesFn","runAction","url","_actionData","res_model","parseInt","responseContext","mergedContext","parsedDomain","initialView","getViewsAndInitialView","view_mode","action_id","action_type","closeParent","openNewActionModal","Promise","setTimeout","onFormModalSucceed","retriedViewData","viewData","viewTypes","split","viewType","retrievedViewId","_","forwardRef","ErrorAlert","className","messageContent","messageType","stringify","WIDTH_BREAKPOINT","propsOnCancel","propsOnSubmitSucceed","showFooter","getDataFromAction","onFieldsChange","onSubmitError","propsOnSubmitError","mustClearAfterSave","submitMode","valuesProps","formViewProps","postSaveAction","insideButtonModal","parentContext","actionDomain","rootForm","forcedValues","parentWidth","isSubmitting","setIsSubmitting","setFormOoui","antForm","AntForm","useForm","setArch","setFields","formModalContext","containerWidth","setContainerWidth","defaultGetCalled","setDefaultGetCalled","createdId","originalFormValues","lastAssignedValues","warningIsShown","formSubmitting","x2manyPendingLink","parentId","getParentPlainValues","actionViewContext","contentRootContext","cancelUnsavedChanges","clearAndReload","checkFieldsChanges","formValues","getCurrentId","getCurrentValues","getAdditionalValues","forEach","val","getFormValues","getActiveIdsContext","active_id","active_ids","parent_id","getDefaultValues","defaultGet","extraValues","currentValues","getFieldsValue","assignNewValuesToForm","reset","checkIfFormHasErrors","validateFields","getFormView","stack","_fields","_arch","hasDefaultGetCalled","forceRefresh","fetchValuesFromApi","isDefaultGet","parseForm","showUnsavedChangesDialog","getActionStringForModel","viewsForAction","getViewsForAction","mergedValues","valuesProcessed","fieldsToUpdate","fieldName","fieldValue","touched","submitApi","callOnSubmitSucceed","touchedValues","newId","create","submitValues","submitSucceed","succeed","formErrorsDialog","success","operationInProgress","FormOoui","evaluateChanges","debouncedCheckFieldsChanges","changedField","processFieldOnChange","onChangeFieldAction","onChangeFields","response","executeOnChange","method","processedValues","proccessedFields","runObjectButton","execute","runWorkflowButton","executeWorkflow","runActionButton","updateOperationInProgress","mustBlockButtons","additionalContext","updatedContext","footer","Measure","contentRect","bounds","measureRef","buttonModal","isMenuAction","rest","formTitle","setFormTitle","isFavourite","setIsFavourite","currentShortcutId","setCurrentShortcutId","checkFavourite","res_id","isShortcutFavorite","toggleFavourite","removeFavourite","shortcut_id","addFavourite","header","StarFilled","StarOutlined","paddingLeft","contentWidth","DateRangePicker","DatePicker","DateTimeRangePicker","TimePicker","decimalDigits","InputNumber","replace","isNaN","parseFloat","Math","trunc","newNumber","PairFields","Widget","IntegerOoui","getWidget","MultiSelection","MultiSelectionInput","optionValueKeyPair","optionKey","CustomSelect","handleChange","changedValues","keysForChangedValues","SearchField","widgetType","SearchFieldTypes","boolean","SelectionOoui","_id","selection","float","progressbar","float_time","integer","date","datetime","SearchBottomBar","onAdvancedFilterToggle","advancedFilter","onClear","isSearching","UpOutlined","SearchOutlined","SearchParams","onLimitChange","limitOoui","offsetOoui","SearchFilter","secondary","setSearchFilterHeight","showLimitOptions","simpleSearchFields","setSimpleSearchFields","advancedSearchFields","setAdvancedSearchFields","setAdvancedFilter","sfo","setFieldsValue","getRowsAndCols","j","SearchFilterOoui","_simpleSearchContainer","_advancedSearchContainer","onFinish","newParams","borderRadius","resetFields","getTextWidth","font","metrics","calculateColumnsWidth","maxWidthPerCell","columnsWithWidth","indexColumn","columnWidth","cellValue","cellWidth","tableWidth","parseStringToFloat","parseFloatToString","num","finalString","hours","mins","hoursString","minsStrings","ProgressBarInput","textValue","toLocaleString","minimumIntegerDigits","maximumFractionDigits","useGrouping","flex","alignItems","StyledProgress","flexGrow","Progress","Many2oneSuffixModal","onItemClicked","Many2oneSuffix","printModalVisible","setPrintModalVisible","setFormView","targetValues","setTargetValues","toolbar","parseContextFields","parseDomainFields","relate","print","menu","relateItems","handleMenuClick","ThunderboltOutlined","PrinterOutlined","EnterOutlined","relateItemClicked","relateData","onActionItemClicked","onPrintItemClicked","RightCircleOutlined","Many2oneTree","m2oField","ReferenceTree","setName","loading","setLoading","intId","fetchName","nameResponse","selectionDescription","module","this","n","r","s","o","f","h","c","d","l","$","y","M","m","v","u","g","p","S","O","D","T","Avatar","toString","slice","toUpperCase","join","AntdAvatar","dayjs","extend","weekday","localeData","DatePickerConfig","placeholder","dateDisplayFormat","dateInternalFormat","showTime","DatePickerInput","mode","onValueStringChange","momentDate","format","dateValue","AntDatePicker","booleanComponentFn","justifyContent","alignContent","Checkbox","many2OneComponentFn","textComponentFn","dateComponentFn","dateTimeComponentFn","one2ManyComponentFn","progressBarComponentFn","floatTimeComponent","numberComponent","textAlign","imageComponent","TagComponent","SelectionComponent","referenceComponent","AvatarFn","total","onRequestPageChange","onRowClicked","showPagination","rowSelection","scrollY","onChangeSort","onFetchChildrenForRecord","childField","rootTree","readonly","setItems","setColumns","errorInParseColors","many2one","one2many","many2many","image","reference","avatar","pagination","isExpandable","Pagination","getSums","sumFields","it","sum","sumItems","selectedRowKeys","sumField","reduce","round","dataTable","adjustedHeight","GisceTable","Badge","expandIcon","PlusSquareOutlined","collapseIcon","MinusSquareOutlined","loadingIcon","SearchTree","treeViewProps","treeScrollY","onChangeSelectedRowKeys","initialFetchDone","setInitialFetchDone","setCurrentModel","setTreeView","initialError","setInitialError","searchFilterHeight","expandableClickActionData","changeSelectedRowKeys","refreshResults","getDomain","fetchModelData","_formView","_treeView","onSearchTreeLimitChange","treeButOpen","onRowClickedHandler","calculateTableHeight","search_fields","field_parent","SearchModal","onCloseModalProps","onSelectValues","showCreateModal","setShowCreateModal","modalHeight","setSelectedRowKeys","FileAddOutlined","Error","Many2oneInput","widgetDomain","showSearchModal","setShowSearchModal","searching","setSearching","searchText","setSearchText","searchButtonTappedRef","inputText","setInputText","inputTextRef","transformedDomain","searchDomain","setSearchDomain","fetchNameAndUpdate","onElementLostFocus","tryFetchFirstResultOrShowSearch","parseDomain","resultIds","searchAllIds","transformDomainForChildWidget","widgetFieldName","onKeyDown","keyCode","RequiredInput","borderTopRightRadius","borderBottomRightRadius","borderTopLeftRadius","borderBottomLeftRadius","One2manyContext","One2manyProvider","itemIndex","setItemIndex","manualTriggerChange","setManualTriggerChange","getValueForOperator","graphProcessor","fontGrowFactor","minFontSize","GraphIndicator","colorCondition","totalDomain","showPercent","iconProps","manualIds","setValue","percent","setPercent","totalValue","setTotalValue","setHeight","setWidth","setColor","setIcon","fetchValue","isTotal","fetchTotalValue","searchCount","totalRetrievedValue","conditionEval","parseCondition","condition","iconEval","PercentageIndicator","CommonIndicator","getComputedStyle","body","measureText","fontSize","localeValue","finalValue","tw","floor","maxFontSize","IconElement","overflow","margin","twoLinesHeight","percentValue","flexDirection","formatter","graphType","object","axisFormatter","stringIsValidNumeric","isNumber","isValidDateString","dateType","getDateType","dateFormats","DefaultGraphOptions","variable","dateString","processGraphData","getFieldsToRetrieve","graphFieldUtils","useGraphData","uninformedString","setProcessedValues","evaluatedEntries","setEvaluatedEntries","setType","parseGraph","retrieveData","timerange","x","_processedValues","getFieldsForModel","fieldsDefinition","sort","line","Line","bar","Column","pie","Pie","GraphChart","isGroup","isStack","Chart","getGraphProps","graphProps","GraphDefaults","colorField","angleField","xField","yField","seriesField","groupField","GraphComp","graphOoui","setGraphOoui","graphXml","setGraphXml","graph","indicator","indicatorFieldopts","Graph","One2manyTopBar","titleString","onCreateItem","onToggleViewMode","onDelete","onPreviousItem","onNextItem","isMany2Many","onSearchItem","showCreateButton","showToggleButton","separator","colorPrimaryActive","deleteButton","ApiOutlined","DeleteOutlined","itemToShow","itemBrowser","LeftOutlined","RightOutlined","AlignLeftOutlined","ViewObjects","filterDuplicateItems","filtered","One2manyInput","continuousEntryMode","setContinuousEntryMode","originalSortItemIds","isMany2many","treeValues","previousCurrentView","fetchDataIfNeeded","fetchOriginalItemsFromApi","toggleViewMode","nextView","showFormChangesDialogIfNeeded","previousItem","nextItem","reloadOriginalValuesForFormItem","updatedFormObject","updatedTreeObject","updatedItems","callback","showRemoveConfirm","showUnlinkItemDialog","removeCurrentItem","removeSelectedItems","showRemoveItemDialog","createItem","inv_field","itemsToRemove","idsToRemove","onFormModalSubmitSucceed","nextId","onTreeRowClicked","itemId","itemsToLoadFrom","onSearchModalSelectValue","filteredIds","getTitle","ViewType","currentItemId","resultsToShow","FloatTimeInput","FieldSet","TabPane","Tabs","pages","getPageIcon","tabPosition","TranslatableText","paddingTop","useExport","locale","selectedRegistersToExport","exportModelFields","onExport","showInfo","exportDomain","addIdToRelationFields","onGetFields","convertToExportFields","onGetFieldChilds","optsForField","getFieldDefinition","getChildKey","onGetPredefinedExports","predefinedExports","listPredefinedExports","keysWithChilds","retrieveKeyFieldsForPredefinedExports","pExport","childKey","onSavePredefinedExport","fieldsForExport","getModelFields","fieldsForExportLine","exportId","onRemovePredefinedExport","fieldsForModel","exportFields","valuesForField","relationField","isRelationField","compoundId","fieldDefinition","getParentKey","parentTitle","pExports","exportLinesIds","exp","exportLinesObjects","getKeysWithoutChildsInFields","splitAndSortKeys","exists","_c","allPredefinedExportKeys","keysWithoutChildsInFields","keysMap","subKeys","subKey","currentKey","aLevels","bLevels","ExportModal","visibleRegisters","ExportModalFmg","Y","customParseFormat","TimeInput","timestring","ReferenceInput","splittedValue","many2oneValue","setMany2oneValue","selectionValue","setSelectionValue","m2oValue","referenceValue","Many2oneOoui","BinaryInput","filenameField","filesize","fileName","openFile","EyeOutlined","iconsForViewTypes","TableOutlined","FormOutlined","AreaChartOutlined","calendar","CalendarOutlined","getIconForView","ChangeViewButton","onChangeView","disabled","getMenu","menuItems","idx","charAt","opacity","tryNavigate","selectedView","DropdownButton","onItemClick","itemClicked","ActionButton","finalIcon","NewButton","onNewClickedProps","showLogInfo","translateFn","logInfo","getLogInfo","create_date","create_uid","write_date","write_uid","AttachmentsButtonWrapper","numberOfAttachments","popoverVisible","setPopoverVisible","LinkOutlined","Popover","Content","onAddNewAttachment","onopenAttachmentLink","onOpenAttachmentDetail","onListAllAttachments","attachment","link","datas_fname","AttachmentsButton","onViewAttachmentDetails","preloading","setPreloading","preloadedAttachments","setPreloadedAttachments","downloading","setDownloading","preloadAttachments","retrievedAttachment","openAttachmentDetail","FormActionBar","tryRefresh","refreshChangesDialog","onNextClick","onPreviousClick","tryDelete","remove","filteredResults","newIndex","mustDisableButtons","SaveOutlined","CopyOutlined","InfoCircleOutlined","ReloadOutlined","saveDocument","selection_associated_object","forced_values","initialViewType","LinkInput","valueValidator","linkPrefix","editMode","setEditMode","showInput","setShowInput","EditOutlined","isURL","isEmail","GoToResourceModal","onIdSubmitted","inputRef","handleSubmit","focus","ButtonWithBadge","badgeNumber","position","top","zIndex","background","colorPrimaryHover","GraphActionBar","refreshGraph","FilterOutlined","newView","TitleHeader","getSummary","reg","marginBottom","GraphActionView","graphRef","applyLimit","setApplyLimit","FormActionView","findIndex","SearchBar","onSearch","mustShowClearSuffix","setMustShowClearSuffix","CloseCircleFilled","ConfigContext","previewFeatures","TreeActionBar","treeExpandable","exportModalVisible","setExportModalVisible","hasNameSearch","trim","searchString","idsToExport","TreeActionView","DashboardActionContext","DashboardActionProvider","moveItemsEnabled","setMoveItemsEnabled","dashboardRef","DashboardActionBar","BorderOuterOutlined","SettingOutlined","DashboardActionView","dashboardData","Dashboard","configAction","resolveViewInfoPromises","viewsToRetrieve","ActionView","setCanWeClose","tabKey","formDefaultValues","formForcedValues","setCurrentViewInternal","setAvailableViews","res_id_parsed","setCurrentIdInternal","gtResourceModalVisible","setGtResourceModalVisible","searchingForResourceId","setSearchingForResourceId","setCurrentViewTabContext","setCurrentIdTabContext","useHotkeys","handleGoToRecordShortcut","canWeClose","viewDataRetrieved","getViewsPromises","viewArray","viewTuple","promise","viewsRetrieved","viewInfo","view_type","currentViewToAssign","initialViewWithData","resource","viewForm","fetchAction","actionId","rootContext","actionType","dataForAction","parsedContext","finalViews","uuidv4","ResponsiveReactGridLayout","WidthProvider","Responsive","DashboardGrid","onPositionItemsChanged","Children","child","parms","lg","md","sm","xs","xxs","DashboardGridItem","border","borderBottom","fontWeight","ExportOutlined","DashboardTree","limitRef","paramsRef","searchForTree","totalItemsResult","fetchActionData","overflowY","DashboardForm","firstId","setFirstId","itemsField","dashboardItems","setDashboardItems","setActionBarLoading","itemsFields","boardFields","openConfigDashboard","fetchView","originalItems","fetchDashboardItems","itemsWithActions","getItemsWithActions","dashboardItem","itemPositions","itemPosition","remotePosition","itemsToUpdateWithUpdatedPos","diff","diffItem","valueToUpdate","parmsParsed","childContent","formattedInitialView","MultiCheckboxInput","checkAll","uncheckAll","MarkdownInput","ReactMarkdown","direction","RadioAnt","SwitchInput","AntdSwitch","StepsInput","errorField","AntdSteps","Editor","editor","onDidBlurEditorWidget","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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"}
|