udp-react-enterprise-component-library 26.9.0-beta.12 → 26.9.0-beta.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.
- package/dist/.tsbuildinfo +1 -1
- package/dist/udp/pages/UdpGridPanelManagementPage/UdpGridPanelManagementPage.js +1 -1
- package/dist/udp/pages/UdpGridPanelManagementPage/UdpGridPanelManagementPage.js.map +1 -1
- package/dist/udp/pages/UdpGridPanelManagementPage/UdpGridPanelManagementPage.mjs +1 -1
- package/dist/udp/pages/UdpGridPanelManagementPage/UdpGridPanelManagementPage.mjs.map +1 -1
- package/dist/udp/pages/UdpMaintenanceEnginePage/UdpMaintenanceEnginePage.js +1 -1
- package/dist/udp/pages/UdpMaintenanceEnginePage/UdpMaintenanceEnginePage.js.map +1 -1
- package/dist/udp/pages/UdpMaintenanceEnginePage/UdpMaintenanceEnginePage.mjs +1 -1
- package/dist/udp/pages/UdpMaintenanceEnginePage/UdpMaintenanceEnginePage.mjs.map +1 -1
- package/dist/udp/pages/UdpMaintenanceEnginePage/components/EntitiyTimeLine.d.ts.map +1 -1
- package/dist/udp/pages/UdpMaintenanceEnginePage/components/EntitiyTimeLine.js +1 -8
- package/dist/udp/pages/UdpMaintenanceEnginePage/components/EntitiyTimeLine.js.map +1 -1
- package/dist/udp/pages/UdpMaintenanceEnginePage/components/EntitiyTimeLine.mjs +1 -6
- package/dist/udp/pages/UdpMaintenanceEnginePage/components/EntitiyTimeLine.mjs.map +1 -1
- package/dist/udp/pages/UdpTranslationsPage/useTranslationsAdmin.d.ts +2 -3
- package/dist/udp/pages/UdpTranslationsPage/useTranslationsAdmin.d.ts.map +1 -1
- package/dist/udp/pages/UdpTranslationsPage/useTranslationsAdmin.js +2 -3
- package/dist/udp/pages/UdpTranslationsPage/useTranslationsAdmin.js.map +1 -1
- package/dist/udp/pages/UdpTranslationsPage/useTranslationsAdmin.mjs +2 -3
- package/dist/udp/pages/UdpTranslationsPage/useTranslationsAdmin.mjs.map +1 -1
- package/dist/udp/pages/UdpVerticalManagementPage/UdpVerticalManagementPage.js +1 -1
- package/dist/udp/pages/UdpVerticalManagementPage/UdpVerticalManagementPage.js.map +1 -1
- package/dist/udp/pages/UdpVerticalManagementPage/UdpVerticalManagementPage.mjs +1 -1
- package/dist/udp/pages/UdpVerticalManagementPage/UdpVerticalManagementPage.mjs.map +1 -1
- package/dist/udp/pages/UdpVerticalManagementSidesheet/UdpVerticalManagementSidesheet.js +1 -1
- package/dist/udp/pages/UdpVerticalManagementSidesheet/UdpVerticalManagementSidesheet.js.map +1 -1
- package/dist/udp/pages/UdpVerticalManagementSidesheet/UdpVerticalManagementSidesheet.mjs +1 -1
- package/dist/udp/pages/UdpVerticalManagementSidesheet/UdpVerticalManagementSidesheet.mjs.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UdpMaintenanceEnginePage.mjs","names":["React","useEffect","useState","useMemo","useCallback","useRef","useTranslation","CrudBrowserContainer","CrudTableSidePanel","getPathObject","getPrimaryKeyValues","apiMutate","toLowerFirstChar","toUpperFirstChar","EntityAttributeEnums","UdpEnums","mergeEntityAttributes","fetchForeignKeyData","fetchUdpFieldInfos","executeQueryAdHoc","executeQueryWithParameters","getSearchObject","useHandleAxiosSnackbar","usePromotedMethodEntity","getSanitizedName","Alert","v4","uuid","useLocation","TagEnums","ConfigService","SideSheet","useCatalogStore","useHistory","Inquiry","useAxiosGet","UdpDialog","UdpDrawer","UdpList","UdpListItem","UdpTablist","UdpButton","UdpCard","UdpFlexbox","UdpFluentButton","UdpFluentIcon","UdpMessageBar","UdpTabPanel","UdpText","EntityTimeLine","formatDate","EntityNotes","AuditEventTypeEnums","ReactJsonView","AddViewNote","EDIT_TAB_ID","DOMAIN_FIELDS","AUDIT_HISTORY","NOTES","UdpMaintenanceEnginePage","props","catalogKey","params","t","udpFieldInfos","setUdpFieldInfos","alertWarnings","setAlertWarnings","showBackToTableBrowser","setShowBackToTableBrowser","gridApiRef","modalConfig","setModalConfig","type","data","openCompareDomainAuditsSidesheet","setOpenCompareDomainAuditsSidesheet","lastModifiedAuditEvent","setLastModifiedAuditEvent","selectedAuditEvent","setSelectedAuditEvent","openAddViewNoteSidesheet","setopenAddViewNoteSidesheet","noteMode","setNoteMode","selectedNote","setSelectedNote","refreshNotes","setRefreshNotes","createFormApiRef","editFormApiRef","location","state","history","searchParamStr","search","searchParams","URLSearchParams","searchParamsEntityName","entityName","has","get","handleErrorSnackbar","handleSuccessSnackbar","handleGoToTableBrowser","push","pathname","udpCatalogKey","udpTagId","selectedEntity","setSelectedEntity","foreignKeyData","setForeignKeyData","udpFieldSearchApiId","setUdpFieldSearchApiId","entityUdpObjectInfo","setEntityUdpObjectInfo","editSidesheetTabs","id","label","defaultValue","selectedTabId","setSelectedTabId","setEntityName","currentApiCatalogId","udpObjectInfoEntity","udpObjectFieldInfo","promotedMethodEntities","openModal","closeModal","executeCreate","unityBaseCreateMethod","apiMethodId","executeUpdate","unityBaseUpdateMethod","executeDelete","unityBaseDeleteMethod","onCreate","onUpdate","onDelete","catalogObject","integrationV2ApiUrl","searchObj","eagerLoad","pageNumber","pageSize","orderElements","sortColumn","sortDirection","searchFilterElements","filterElements","searchField","searchOperator","searchValue","forEach","filter","entityAttributes","undefined","properties","fetchLastModifiedAuditEvent","updatedEntityQualifiedName","fullyQualifiedEntityName","filterElems","uemV1ApiUrl","method","then","resp","pageList","catch","handleOnCreate","values","requestBody","response","res","status","current","refreshServerSide","handleOnUpdate","primaryKeyValues","pathObject","pathParameters","Array","isArray","po","Object","keys","businessObjectKey","handleOnDelete","value","removeWarning","updatedWarnings","warning","shouldDisableAction","sanitizedEntityName","tagTypeShouldDisableEdit","TagTypeSanitizedName","toLowerCase","includes","User_Defined","shortCutContentShouldDisableEdit","Udp_Shortcut_Content","Is_Product_ShortcutContent","lookupShouldDisableEdit","Udp_Lookup","Is_Product_Lookup","actionList","actions","iconName","getTitle","handleOnClick","e","checkDisabled","inquiryTreeId","splice","title","executeSearchForEntityUdpObjectInfo","requestObj","unityBaseSearchMethod","cancelled","entitiesMissingGetAll","length","existingWarnings","map","messageKey","messageParams","udpFieldWarning","prevState","fieldInfos","from","handleGridApiCallback","api","primaryKeyFieldName","fieldName","find","field","isPrimaryKey","name","slice","handleCloseNotesSidesheet","getChangedFieldsandValues","oldDataStr","newDataStr","oldData","JSON","parse","newData","Set","changes","key","oldValue","newValue","stringify","previousValue","currentValue","createPageId","pageId","updatePageId","sidesheetList","open","onClose","legacySheet","displayName","width","children","handleSubmit","detail","typeCode","Update_Domain","Delete_Domain","udpAuditEventUdpAuditEventDetail","oldObj","Create_Domain","newObj","message","record","entityBusinessKey","date","createdOn","user","userDisplayName","sidesheet"],"sources":["../../../../src/udp/pages/UdpMaintenanceEnginePage/UdpMaintenanceEnginePage.jsx"],"sourcesContent":["import React, {\n useEffect,\n useState,\n useMemo,\n useCallback,\n useRef\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { CrudBrowserContainer } from '../../../maintenanceEngine/crudBrowser/CrudBrowserContainer';\nimport { CrudTableSidePanel } from '../../../maintenanceEngine/crudBrowser/CrudTableSidePanel';\nimport {\n getPathObject,\n getPrimaryKeyValues\n} from '../../../utilities/maintenanceEngine/CrudBrowserUtilities';\nimport { apiMutate } from '../../../utilities/useAxiosMutate';\nimport {\n toLowerFirstChar,\n toUpperFirstChar\n} from '../../../utilities/input/StringUtilities';\nimport {\n EntityAttributeEnums,\n UdpEnums\n} from '../../../enums/unitySystemEnums';\nimport { mergeEntityAttributes } from '../../../domain/entityForm/entityFormModel';\nimport {\n fetchForeignKeyData,\n fetchUdpFieldInfos\n} from '../../../maintenanceEngine/entityFormInputs';\nimport {\n executeQueryAdHoc,\n executeQueryWithParameters\n} from '../../utilities/methodUtils';\nimport { getSearchObject } from '../../../utilities/search/SearchUtilities';\nimport { useHandleAxiosSnackbar } from '../../../utilities/apiHelpers';\nimport { usePromotedMethodEntity } from '../../../hooks/usePromotedMethodEntity';\nimport { getSanitizedName } from '../../../utilities/entities/entityUtilities';\nimport { Alert } from '@material-ui/lab';\nimport { v4 as uuid } from 'uuid';\nimport { useLocation } from 'react-router-dom';\nimport { TagEnums } from '../../../enums/tagEnums';\nimport { ConfigService } from '../../../configService';\nimport { SideSheet } from '../../../UI/surfaces/SideSheet';\nimport { useCatalogStore } from '../../../stores/catalogStore';\nimport { useHistory } from 'react-router-dom';\nimport { Inquiry } from '../../../inquiry';\nimport { useAxiosGet } from '../../../utilities';\nimport { UdpDialog, UdpDrawer, UdpList, UdpListItem, UdpTablist } from '../../../UI/fluent-web-components';\nimport { UdpButton, UdpCard, UdpFlexbox, UdpFluentButton, UdpFluentIcon, UdpMessageBar, UdpTabPanel, UdpText } from '@univerus/udp-react-stencil-component-library';\nimport EntityTimeLine from './components/EntitiyTimeLine';\nimport { formatDate } from '../../../UI/widgets/utils/dateUtils';\nimport { EntityNotes } from './components/EntityNotes';\nimport { AuditEventTypeEnums } from '../../../enums/auditEventEnums';\nimport ReactJsonView from '@microlink/react-json-view'\nimport AddViewNote from './components/AddViewNote';\n\nconst EDIT_TAB_ID = {\n DOMAIN_FIELDS: 'DomainFields',\n AUDIT_HISTORY: 'AuditHistory',\n NOTES: 'Notes',\n}\n\nexport const UdpMaintenanceEnginePage = (props) => {\n const { catalogKey, params } = props;\n const { t } = useTranslation();\n const [udpFieldInfos, setUdpFieldInfos] = useState([]);\n const [alertWarnings, setAlertWarnings] = useState([]);\n const [showBackToTableBrowser, setShowBackToTableBrowser] = useState(false);\n const gridApiRef = useRef(null);\n const [modalConfig, setModalConfig] = useState({ type: null, data: null });\n const [openCompareDomainAuditsSidesheet, setOpenCompareDomainAuditsSidesheet] = useState(false);\n const [lastModifiedAuditEvent, setLastModifiedAuditEvent] = useState();\n const [selectedAuditEvent, setSelectedAuditEvent] = useState();\n const [openAddViewNoteSidesheet, setopenAddViewNoteSidesheet] = useState(false);\n const [noteMode, setNoteMode] = useState('');\n const [selectedNote, setSelectedNote] = useState(null);\n const [refreshNotes, setRefreshNotes] = useState(false);\n\n const createFormApiRef = useRef();\n const editFormApiRef = useRef();\n\n const location = useLocation();\n const state = location.state;\n const history = useHistory();\n let searchParamStr = location.search;\n let searchParams = new URLSearchParams(searchParamStr);\n const searchParamsEntityName = state?.entityName\n ? state.entityName\n : searchParams.has('entityName') === true\n ? toUpperFirstChar(searchParams.get('entityName'))\n : '';\n\n const { handleErrorSnackbar, handleSuccessSnackbar } =\n useHandleAxiosSnackbar();\n\n const handleGoToTableBrowser = useCallback(() => {\n history.push({\n pathname: `/tableBrowser`\n });\n }, [history]);\n\n const udpCatalogKey = useMemo(() => {\n if (params?.entityName || catalogKey || searchParamsEntityName) {\n return params?.entityName || catalogKey || searchParamsEntityName;\n } else {\n handleGoToTableBrowser();\n }\n }, [\n params?.entityName,\n catalogKey,\n searchParamsEntityName,\n handleGoToTableBrowser\n ]);\n const udpTagId = params?.udpTagId || '';\n\n const [selectedEntity, setSelectedEntity] = useState(null);\n const [foreignKeyData, setForeignKeyData] = useState(null);\n const [udpFieldSearchApiId, setUdpFieldSearchApiId] = useState(null);\n const [entityUdpObjectInfo, setEntityUdpObjectInfo] = useState(null);\n const editSidesheetTabs = [\n {\n id: EDIT_TAB_ID.DOMAIN_FIELDS,\n label: t('maintenanceEngine.tabs.domainFields', { defaultValue: 'Domain Fields' })\n },\n {\n id: EDIT_TAB_ID.AUDIT_HISTORY,\n label: t('maintenanceEngine.tabs.auditHistory', { defaultValue: 'Audit History' })\n },\n {\n id: EDIT_TAB_ID.NOTES,\n label: t('maintenanceEngine.tabs.notes', { defaultValue: 'Notes' })\n }\n ];\n const [selectedTabId, setSelectedTabId] = useState(editSidesheetTabs[0]?.id);\n\n const [entityName, setEntityName] = useState(null);\n\n const { currentApiCatalogId } = useCatalogStore();\n\n const { data: udpObjectInfoEntity } = usePromotedMethodEntity(\n 'udpObjectInfo',\n true\n );\n\n const { data: udpObjectFieldInfo } = usePromotedMethodEntity(\n 'UdpObjectFieldInfo',\n true\n );\n\n const { data: promotedMethodEntities } = usePromotedMethodEntity(\n udpCatalogKey,\n true\n );\n\n // 2. MODAL HANDLERS: Callbacks to open and close modals/sheets.\n const openModal = useCallback((type, data = null) => {\n setModalConfig({ type, data });\n }, []);\n\n const closeModal = useCallback(() => {\n setModalConfig({ type: null, data: null });\n }, []);\n\n //------- CRUD operations (direct-if-eligible routed via methodUtils) --------\n const executeCreate = useCallback(\n async (data) =>\n executeQueryWithParameters(\n data,\n selectedEntity?.unityBaseCreateMethod?.apiMethodId\n ),\n [selectedEntity]\n );\n\n const executeUpdate = useCallback(\n async (data) =>\n executeQueryWithParameters(\n data,\n selectedEntity?.unityBaseUpdateMethod?.apiMethodId\n ),\n [selectedEntity]\n );\n\n const executeDelete = useCallback(\n async (data) =>\n executeQueryWithParameters(\n data,\n selectedEntity?.unityBaseDeleteMethod?.apiMethodId\n ),\n [selectedEntity]\n );\n\n const onCreate = useCallback(\n async (data) => {\n return await executeCreate(data);\n },\n [executeCreate]\n );\n\n const onUpdate = useCallback(\n async (data) => {\n return await executeUpdate(data);\n },\n [executeUpdate]\n );\n\n const onDelete = useCallback(\n async (data) => {\n return await executeDelete(data);\n },\n [executeDelete]\n );\n\n const [{ data: catalogObject }] = useAxiosGet(\n ConfigService.integrationV2ApiUrl,\n `apiCatalog/${currentApiCatalogId}/catalogObject/${entityName}`,\n {},\n !!!currentApiCatalogId || !!!entityName,\n false\n );\n\n const searchObj = useMemo(() => {\n return {\n eagerLoad: true,\n pageNumber: 0,\n pageSize: 100,\n orderElements: [\n {\n sortColumn: 'createdOn',\n sortDirection: 'desc'\n }\n ],\n };\n }, []);\n\n const searchFilterElements = useMemo(() => {\n const filterElements = [];\n if (udpTagId) {\n filterElements.push({\n searchField: 'UdpTags.UdpTagAssociationUdpTag.Id',\n searchOperator: '=',\n searchValue: udpTagId\n });\n }\n if (params?.filterElements) {\n params?.filterElements?.forEach((filter) => {\n filterElements.push(filter);\n });\n }\n return filterElements;\n }, [udpTagId, params?.filterElements]);\n\n const entityAttributes = useMemo(() => {\n if (!catalogObject || !entityName) return undefined;\n return mergeEntityAttributes(catalogObject.properties || [], udpFieldInfos);\n }, [catalogObject, entityName, udpFieldInfos]);\n\n const fetchLastModifiedAuditEvent = useCallback((updatedEntityQualifiedName) => {\n let fullyQualifiedEntityName = promotedMethodEntities?.entityName;\n if(updatedEntityQualifiedName){\n fullyQualifiedEntityName = updatedEntityQualifiedName\n }\n if (!fullyQualifiedEntityName) return;\n const filterElems = [{ searchField: 'domain', searchOperator: '=', searchValue: fullyQualifiedEntityName }]\n apiMutate(\n ConfigService.uemV1ApiUrl,\n 'UdpAuditEvent/search',\n { method: 'post' },\n {\n data: {\n ...searchObj,\n pageSize: 1,\n filterElements: filterElems\n }\n }\n ).then(\n (resp) =>\n setLastModifiedAuditEvent(resp?.data?.pageList?.[0])\n )\n .catch(() => setLastModifiedAuditEvent(null));\n },[promotedMethodEntities, searchObj]);\n\n const handleOnCreate = useCallback(\n async (values) => {\n if (selectedEntity) {\n const entityName = selectedEntity?.entityName;\n if (selectedEntity?.unityBaseCreateMethod) {\n const data = { requestBody: values };\n const response = await onCreate({ data }).catch((res) => {\n handleErrorSnackbar(res);\n });\n\n if (response?.status === 200) {\n handleSuccessSnackbar(\n entityName\n ? t('maintenanceEngine.snackbar.entityCreated', {\n defaultValue: '{{entityName}} has been created',\n entityName\n })\n : t('maintenanceEngine.snackbar.created', {\n defaultValue: 'Entity has been created'\n })\n );\n gridApiRef.current.refreshServerSide();\n closeModal('create');\n return response;\n }\n } else {\n handleErrorSnackbar(\n null,\n t('maintenanceEngine.errors.createNotPromoted', {\n defaultValue: \"{{entityName}}'s create method must be promoted\",\n entityName: selectedEntity.entityName\n })\n );\n }\n }\n },\n [\n selectedEntity,\n onCreate,\n handleErrorSnackbar,\n handleSuccessSnackbar,\n t,\n closeModal\n ]\n );\n\n const handleOnUpdate = useCallback(\n async (values, primaryKeyValues) => {\n if (selectedEntity) {\n const entityName = selectedEntity?.entityName;\n\n if (selectedEntity?.unityBaseUpdateMethod) {\n // Get primary key value object using path parameters and merge with data\n const pathObject = getPathObject(\n selectedEntity.unityBaseUpdateMethod.pathParameters,\n primaryKeyValues\n );\n let data = { requestBody: values };\n if (Array.isArray(pathObject)) {\n pathObject.forEach((po) => {\n data[Object.keys(po)[0]] = po[Object.keys(po)[0]];\n });\n } else {\n data = { ...pathObject, requestBody: values };\n }\n\n const response = await onUpdate({ data }).catch((res) => {\n handleErrorSnackbar(res);\n });\n\n if (response?.status === 200) {\n handleSuccessSnackbar(\n entityName\n ? t('maintenanceEngine.snackbar.entityUpdated', {\n defaultValue: '{{entityName}} has been updated',\n entityName\n })\n : t('maintenanceEngine.snackbar.updated', {\n defaultValue: 'Entity has been updated'\n })\n );\n\n gridApiRef.current.refreshServerSide();\n fetchLastModifiedAuditEvent(data?.businessObjectKey);\n closeModal('edit');\n }\n }\n }\n },\n [\n selectedEntity,\n onUpdate,\n handleErrorSnackbar,\n handleSuccessSnackbar,\n t,\n closeModal,\n fetchLastModifiedAuditEvent\n ]\n );\n\n const handleOnDelete = useCallback(\n async (value) => {\n if (selectedEntity) {\n const entityName = selectedEntity?.entityName;\n\n if (selectedEntity?.unityBaseDeleteMethod) {\n // Get primary key value object using path parameters and merge with data\n const primaryKeyValues = getPrimaryKeyValues(entityAttributes, value);\n const pathObject = getPathObject(\n selectedEntity?.unityBaseDeleteMethod.pathParameters,\n primaryKeyValues\n );\n let data = {};\n if (Array.isArray(pathObject)) {\n pathObject.forEach((po) => {\n data[Object.keys(po)[0]] = po[Object.keys(po)[0]];\n });\n } else {\n data = { ...pathObject };\n }\n\n const response = await onDelete({ data }).catch((res) => {\n handleErrorSnackbar(res);\n });\n\n if (response?.status === 200) {\n handleSuccessSnackbar(\n entityName\n ? t('maintenanceEngine.snackbar.entityDeleted', {\n defaultValue: '{{entityName}} has been deleted',\n entityName\n })\n : t('maintenanceEngine.snackbar.deleted', {\n defaultValue: 'Entity has been deleted'\n })\n );\n gridApiRef.current.refreshServerSide();\n closeModal('delete');\n }\n }\n }\n },\n [\n selectedEntity,\n entityAttributes,\n onDelete,\n handleErrorSnackbar,\n handleSuccessSnackbar,\n t,\n closeModal\n ]\n );\n\n const removeWarning = useCallback(\n (id) => {\n const updatedWarnings = alertWarnings.filter(\n (warning) => warning.id !== id\n );\n setAlertWarnings(updatedWarnings);\n },\n [alertWarnings]\n );\n\n const shouldDisableAction = useCallback(\n (value) => {\n const sanitizedEntityName = getSanitizedName(entityName);\n const tagTypeShouldDisableEdit =\n [TagEnums.TagTypeSanitizedName.toLowerCase()].includes(\n sanitizedEntityName?.toLowerCase()\n ) && !value?.[toLowerFirstChar(EntityAttributeEnums.User_Defined)];\n\n const shortCutContentShouldDisableEdit =\n [UdpEnums.Udp_Shortcut_Content.toLowerCase()].includes(\n sanitizedEntityName?.toLowerCase()\n ) &&\n value?.[\n toLowerFirstChar(EntityAttributeEnums.Is_Product_ShortcutContent)\n ];\n\n const lookupShouldDisableEdit =\n [UdpEnums.Udp_Lookup.toLowerCase()].includes(\n sanitizedEntityName?.toLowerCase()\n ) && value?.[toLowerFirstChar(EntityAttributeEnums.Is_Product_Lookup)];\n return (\n tagTypeShouldDisableEdit ||\n shortCutContentShouldDisableEdit ||\n lookupShouldDisableEdit\n );\n },\n [entityName]\n );\n\n const actionList = useMemo(() => {\n if (!selectedEntity) {\n return [];\n }\n\n let actions = [\n {\n id: 'edit',\n iconName: 'edit', // Pass string name for the icon\n getTitle: () =>\n // Use getTitle for dynamic text\n selectedEntity?.unityBaseUpdateMethod\n ? t('common.edit', { defaultValue: 'Edit' })\n : t('maintenanceEngine.actions.editNotAccessible', {\n defaultValue: 'Edit Method Not Accessible'\n }),\n handleOnClick: (e, params) => {\n openModal('edit', params.data); // Calls parent state handler\n },\n checkDisabled: (params) =>\n !!!selectedEntity?.unityBaseUpdateMethod ||\n shouldDisableAction(params.data)\n },\n {\n id: 'delete',\n iconName: 'trashCan', // Pass string name for the icon\n getTitle: () =>\n selectedEntity?.unityBaseDeleteMethod\n ? t('common.delete', { defaultValue: 'Delete' })\n : t('maintenanceEngine.actions.deleteNotAccessible', {\n defaultValue: 'Delete Method Not Accessible'\n }),\n handleOnClick: (e, params) => {\n openModal('delete', params.data); // Calls parent state handler\n },\n checkDisabled: (params) =>\n !!!selectedEntity?.unityBaseDeleteMethod ||\n shouldDisableAction(params.data)\n }\n ];\n if (params?.inquiryTreeId) {\n actions.splice(1, 0, {\n id: 'inquiry',\n iconName: 'relationshipDiagram',\n title: t('maintenanceEngine.actions.detailedView', { defaultValue: 'Detailed view' }),\n handleOnClick: (e, params) => {\n openModal('inquiry', params.data);\n }\n });\n }\n return actions;\n }, [\n selectedEntity,\n t,\n shouldDisableAction,\n openModal,\n params?.inquiryTreeId\n ]);\n\n useEffect(() => {\n const executeSearchForEntityUdpObjectInfo = async (\n apiMethodId,\n sanitizedEntityName\n ) => {\n const filterElements = [\n {\n searchField: 'SanitizedName',\n searchOperator: '=',\n searchValue: sanitizedEntityName\n }\n ];\n const requestObj = getSearchObject(filterElements, 1, 50, false);\n const response = await executeQueryAdHoc(\n { data: requestObj },\n apiMethodId\n );\n if (response.status === 200) {\n const data = response?.data?.pageList[0];\n setEntityUdpObjectInfo(data);\n }\n };\n if (udpObjectInfoEntity?.unityBaseSearchMethod && entityName) {\n executeSearchForEntityUdpObjectInfo(\n udpObjectInfoEntity?.unityBaseSearchMethod?.apiMethodId,\n getSanitizedName(entityName)\n );\n }\n }, [udpObjectInfoEntity, entityName]);\n\n useEffect(() => {\n if (!entityAttributes || udpFieldSearchApiId === null) return;\n let cancelled = false;\n fetchForeignKeyData(\n currentApiCatalogId,\n entityAttributes,\n udpFieldSearchApiId\n ).then(({ foreignKeyData, entitiesMissingGetAll }) => {\n if (cancelled) return;\n setForeignKeyData(foreignKeyData);\n if (!entitiesMissingGetAll.length) return;\n setAlertWarnings((existingWarnings) => [\n ...existingWarnings,\n ...entitiesMissingGetAll.map((entityName) => ({\n id: uuid(),\n messageKey: 'maintenanceEngine.warnings.getAllNotPromoted',\n defaultValue: \"{{entityName}}'s Get-All method needs to be promoted\",\n messageParams: { entityName }\n }))\n ]);\n });\n return () => {\n cancelled = true;\n };\n }, [entityAttributes, udpFieldSearchApiId, currentApiCatalogId]);\n\n useEffect(() => {\n if (promotedMethodEntities) {\n setSelectedEntity(promotedMethodEntities);\n setEntityName(promotedMethodEntities?.entityName);\n }\n }, [promotedMethodEntities]);\n\n useEffect(() => {\n if (udpObjectFieldInfo) {\n if (udpObjectFieldInfo?.unityBaseSearchMethod?.apiMethodId) {\n setUdpFieldSearchApiId(\n udpObjectFieldInfo?.unityBaseSearchMethod?.apiMethodId\n );\n } else {\n setUdpFieldSearchApiId('');\n const udpFieldWarning = {\n id: uuid(),\n messageKey: 'maintenanceEngine.warnings.udpObjectFieldInfoNotPromoted',\n defaultValue: 'UdpObjectFieldInfo method needs to be promoted'\n };\n setAlertWarnings((prevState) => [...prevState, udpFieldWarning]);\n }\n }\n }, [udpObjectFieldInfo]);\n\n useEffect(() => {\n if (!udpFieldSearchApiId) return;\n let cancelled = false;\n fetchUdpFieldInfos(udpFieldSearchApiId, entityName).then((fieldInfos) => {\n if (!cancelled) setUdpFieldInfos(fieldInfos);\n });\n return () => {\n cancelled = true;\n };\n }, [udpFieldSearchApiId, entityName]);\n\n useEffect(() => {\n if (location.state?.from === 'tablebrowser') {\n setShowBackToTableBrowser(true);\n }\n }, [location.state]);\n\n const handleGridApiCallback = (api) => {\n gridApiRef.current = api;\n };\n\n\n useEffect(() => {\n fetchLastModifiedAuditEvent();\n }, [fetchLastModifiedAuditEvent]);\n\n const primaryKeyFieldName = useMemo(() => {\n const fieldName = udpFieldInfos?.find((field) => field.isPrimaryKey)?.name;\n return fieldName?.[0]?.toLowerCase() + fieldName?.slice(1);\n }, [udpFieldInfos]);\n\n const handleCloseNotesSidesheet = () => {\n setopenAddViewNoteSidesheet(false);\n setSelectedNote(null);\n setNoteMode('');\n };\n\n const getChangedFieldsandValues = (oldDataStr, newDataStr) => {\n if (!oldDataStr || !newDataStr) return;\n const oldData = JSON.parse(oldDataStr);\n const newData = JSON.parse(newDataStr);\n const keys = new Set([...Object.keys(oldData), ...Object.keys(newData)]);\n\n const changes = [];\n keys.forEach((key) => {\n const oldValue = oldData[key] ?? null;\n const newValue = newData[key] ?? null;\n if (JSON.stringify(oldValue) !== JSON.stringify(newValue)) {\n changes.push({\n field: key,\n previousValue: oldValue,\n currentValue: newValue\n });\n }\n });\n return changes;\n };\n\n // A custom page can contain MUI popups, which portal outside the modal\n // UdpDrawer's top layer and can't be clicked there — it stays on SideSheet.\n const createPageId = selectedEntity?.unityBaseCreateMethod?.pageId;\n const updatePageId = selectedEntity?.unityBaseUpdateMethod?.pageId;\n\n const sidesheetList = [\n {\n open: modalConfig.type === 'create',\n onClose: closeModal,\n legacySheet: !!createPageId,\n title: t('maintenanceEngine.sheet.addTitle', {\n defaultValue: 'Add New {{name}}',\n name:\n entityUdpObjectInfo?.properties?.displayName ||\n getSanitizedName(entityName)\n }),\n width: '600px',\n children: (\n <>\n <CrudTableSidePanel\n entityAttributes={entityAttributes}\n udpFieldInfos={udpFieldInfos}\n foreignKeyData={foreignKeyData}\n closeSideSheet={closeModal}\n isNewEntry={modalConfig.type === 'create'}\n entityName={entityName}\n onCreate={handleOnCreate}\n onUpdate={undefined}\n crudTableEditionData={null}\n pageId={createPageId}\n formApiRef={createFormApiRef}\n hideSubmitButton\n />\n {!createPageId && (\n <UdpFluentButton\n appearance='primary'\n slot='footer'\n onClick={() => createFormApiRef.current?.handleSubmit()}\n >\n {t('common.add', { defaultValue: 'Add' })}\n </UdpFluentButton>\n )}\n </>\n )\n },\n {\n open: modalConfig.type === 'edit',\n onClose: closeModal,\n legacySheet: !!updatePageId,\n title: t('maintenanceEngine.sheet.editTitle', {\n defaultValue: 'Edit {{name}}',\n name:\n entityUdpObjectInfo?.properties?.displayName ||\n getSanitizedName(entityName)\n }),\n width: '600px',\n children: (\n <>\n <UdpFlexbox\n slot='toolbar'\n direction='row'\n align='center'\n justify='space-between'\n width='100%'\n >\n <UdpTablist\n tabList={editSidesheetTabs}\n activeId={selectedTabId}\n onTabChange={(e) => setSelectedTabId(e?.detail)}\n />\n <UdpFluentButton\n appearance='transparent'\n onClick={() => {\n setopenAddViewNoteSidesheet(true);\n setNoteMode('ADD');\n }}\n startIconName='add'\n >\n {t('notes.actions.add', { defaultValue: 'Add Note' })}\n </UdpFluentButton>\n </UdpFlexbox>\n <UdpTabPanel\n activeTabId={selectedTabId}\n id={EDIT_TAB_ID.DOMAIN_FIELDS}\n >\n <CrudTableSidePanel\n entityAttributes={entityAttributes}\n udpFieldInfos={udpFieldInfos}\n foreignKeyData={foreignKeyData}\n closeSideSheet={closeModal}\n isNewEntry={modalConfig.type === 'create'}\n entityName={entityName}\n onCreate={undefined}\n onUpdate={handleOnUpdate}\n crudTableEditionData={modalConfig.data}\n pageId={updatePageId}\n formApiRef={editFormApiRef}\n hideSubmitButton\n />\n </UdpTabPanel>\n\n <UdpTabPanel\n activeTabId={selectedTabId}\n id={EDIT_TAB_ID.AUDIT_HISTORY}\n >\n <EntityTimeLine\n setOpenCompareDomainAuditsSidesheet={\n setOpenCompareDomainAuditsSidesheet\n }\n setSelectedAuditEvent={setSelectedAuditEvent}\n entityData={modalConfig?.data}\n />\n </UdpTabPanel>\n\n <UdpTabPanel activeTabId={selectedTabId} id={EDIT_TAB_ID.NOTES}>\n <EntityNotes\n businessObjectKey={modalConfig?.data?.businessObjectKey}\n setNoteMode={setNoteMode}\n setOpenViewNoteSidesheet={setopenAddViewNoteSidesheet}\n setSelectedNote={setSelectedNote}\n refreshNotes={refreshNotes}\n setRefreshNotes={setRefreshNotes}\n />\n </UdpTabPanel>\n {selectedTabId === EDIT_TAB_ID.DOMAIN_FIELDS && !updatePageId && (\n <UdpFluentButton\n appearance='primary'\n slot='footer'\n onClick={() => editFormApiRef.current?.handleSubmit()}\n >\n {t('common.save', { defaultValue: 'Save' })}\n </UdpFluentButton>\n )}\n </>\n )\n },\n {\n open: modalConfig.type === 'inquiry',\n onClose: closeModal,\n title: t('maintenanceEngine.actions.detailedView', {\n defaultValue: 'Detailed view'\n }),\n width: '90%',\n children: (\n <Inquiry\n treeId={params?.inquiryTreeId}\n autoCollapseNav={true}\n searchValue={modalConfig?.data?.[primaryKeyFieldName]}\n />\n )\n },\n {\n open: openCompareDomainAuditsSidesheet,\n onClose: () => {\n setOpenCompareDomainAuditsSidesheet(false);\n },\n title: t('maintenanceEngine.sheet.compareAuditsTitle', {\n defaultValue: 'Compare Audits'\n }),\n width: '500px',\n children: (\n <UdpCard>\n {(selectedAuditEvent?.typeCode ===\n AuditEventTypeEnums.Update_Domain ||\n selectedAuditEvent?.typeCode ===\n AuditEventTypeEnums.Delete_Domain) && (\n <ReactJsonView\n src={\n selectedAuditEvent?.udpAuditEventUdpAuditEventDetail?.[0]\n ?.oldObj\n ? JSON.parse(\n selectedAuditEvent?.udpAuditEventUdpAuditEventDetail?.[0]\n ?.oldObj\n )\n : {}\n }\n name={t('auditEvents.sidesheet.oldDetails', {\n defaultValue: 'Old Details'\n })}\n displayDataTypes={false}\n displayObjectSize={false}\n collapsed={true}\n />\n )}\n {(selectedAuditEvent?.typeCode ===\n AuditEventTypeEnums.Update_Domain ||\n selectedAuditEvent?.typeCode ===\n AuditEventTypeEnums.Create_Domain) && (\n <ReactJsonView\n src={\n selectedAuditEvent?.udpAuditEventUdpAuditEventDetail?.[0]\n ?.newObj\n ? JSON.parse(\n selectedAuditEvent?.udpAuditEventUdpAuditEventDetail?.[0]\n ?.newObj\n )\n : {}\n }\n name={t('auditEvents.sidesheet.newDetails', {\n defaultValue: 'New Details'\n })}\n displayDataTypes={false}\n displayObjectSize={false}\n collapsed={true}\n />\n )}\n {selectedAuditEvent && (\n <UdpList>\n {getChangedFieldsandValues(\n selectedAuditEvent?.udpAuditEventUdpAuditEventDetail?.[0]\n ?.oldObj,\n selectedAuditEvent?.udpAuditEventUdpAuditEventDetail?.[0]\n ?.newObj\n )?.map(({ field, previousValue, currentValue }) => {\n return (\n <UdpListItem\n key={field}\n label={field}\n subtitle={t('maintenanceEngine.compareAudits.change', {\n defaultValue:\n 'Old: {{previousValue}} New: {{currentValue}}',\n previousValue,\n currentValue\n })}\n value={field}\n />\n );\n })}\n </UdpList>\n )}\n </UdpCard>\n )\n },\n {\n open: openAddViewNoteSidesheet,\n onClose: () => handleCloseNotesSidesheet(),\n title:\n noteMode === 'ADD'\n ? t('notes.addTitle', { defaultValue: 'Add Note' })\n : t('notes.viewTitle', { defaultValue: 'View Note' }),\n width: '500px',\n children: (\n <AddViewNote\n entityBusinessKey={modalConfig?.data?.businessObjectKey}\n closeSidesheet={() => {\n handleCloseNotesSidesheet();\n }}\n mode={noteMode}\n selectedNote={selectedNote}\n setRefreshNotes={setRefreshNotes}\n />\n )\n }\n ];\n\n return (\n <>\n {alertWarnings.map((warning) => (\n <Alert\n key={warning.id}\n onClose={() => removeWarning(warning.id)}\n severity='warning'\n >\n {warning.messageKey\n ? t(warning.messageKey, {\n defaultValue: warning.defaultValue,\n ...warning.messageParams\n })\n : warning.message}\n </Alert>\n ))}\n {lastModifiedAuditEvent && (\n <UdpMessageBar slot='inline' intent='warning'>\n <div slot='icon'>\n <UdpFluentIcon name='clock' color='primary' size='xs' />\n </div>\n <UdpText variant='body2'>\n {t('maintenanceEngine.messageBar.lastUpdated', {\n defaultValue: 'Last Updated {{record}} on {{date}} by {{user}}',\n record: lastModifiedAuditEvent?.entityBusinessKey,\n date: formatDate(lastModifiedAuditEvent?.createdOn, 'dd/mm/yyyy'),\n user: lastModifiedAuditEvent?.userDisplayName\n })}\n </UdpText>\n <UdpButton\n slot='actions'\n variant='outlined'\n size='small'\n onClick={(e) => {\n setSelectedAuditEvent(lastModifiedAuditEvent);\n setOpenCompareDomainAuditsSidesheet(true);\n }}\n >\n {t('maintenanceEngine.actions.moreDetails', {\n defaultValue: 'More Details'\n })}\n </UdpButton>\n </UdpMessageBar>\n )}\n <CrudBrowserContainer\n actionList={actionList}\n onCreate={() => openModal('create')}\n entityAttributes={entityAttributes}\n foreignKeyData={foreignKeyData}\n promotedEntity={selectedEntity}\n apiMethod={{ currentApiCatalogId, entityName }}\n filterElements={searchFilterElements}\n setAlertWarnings={setAlertWarnings}\n gridApiCallback={handleGridApiCallback}\n showBackToTableBrowser={showBackToTableBrowser}\n gridTitle={entityUdpObjectInfo?.properties?.displayName}\n />\n {sidesheetList.map((sidesheet) => {\n return modalConfig.type === 'inquiry' || sidesheet?.legacySheet ? (\n <SideSheet\n key={sidesheet?.title}\n open={sidesheet?.open}\n onClose={sidesheet?.onClose}\n title={sidesheet?.title}\n width={sidesheet?.width}\n >\n {sidesheet?.children}\n </SideSheet>\n ) : (\n <UdpDrawer\n key={sidesheet?.title}\n open={sidesheet?.open}\n onDrawerClose={sidesheet?.onClose}\n drawerTitle={sidesheet?.title}\n drawerWidth={sidesheet?.width}\n >\n {sidesheet?.children}\n </UdpDrawer>\n );\n })}\n {/* <SideSheet\n open={modalConfig.type === 'create' || modalConfig.type === 'edit'}\n onClose={closeModal}\n title={\n modalConfig.type === 'create'\n ? t('maintenanceEngine.sheet.addTitle', {\n defaultValue: 'Add New {{name}}',\n name:\n entityUdpObjectInfo?.properties?.displayName ||\n getSanitizedName(entityName)\n })\n : t('maintenanceEngine.sheet.editTitle', {\n defaultValue: 'Edit {{name}}',\n name:\n entityUdpObjectInfo?.properties?.displayName ||\n getSanitizedName(entityName)\n })\n }\n width={600}\n >\n {(modalConfig.type === 'create' || modalConfig.type === 'edit') && (\n <CrudTableSidePanel\n entityAttributes={entityAttributes}\n udpFieldInfos={udpFieldInfos}\n foreignKeyData={foreignKeyData}\n closeSideSheet={closeModal}\n isNewEntry={modalConfig.type === 'create'}\n entityName={entityName}\n onCreate={\n modalConfig.type === 'create' ? handleOnCreate : undefined\n }\n onUpdate={modalConfig.type === 'edit' ? handleOnUpdate : undefined}\n crudTableEditionData={\n modalConfig.type === 'edit' ? modalConfig.data : null\n }\n pageId={\n modalConfig.type === 'edit'\n ? selectedEntity?.unityBaseUpdateMethod?.pageId\n : selectedEntity?.unityBaseCreateMethod?.pageId\n }\n />\n )}\n </SideSheet>\n <SideSheet\n open={modalConfig.type === 'inquiry'}\n onClose={closeModal}\n title={t('maintenanceEngine.actions.detailedView', { defaultValue: 'Detailed view' })}\n width={'90%'}\n >\n <Inquiry\n treeId={params?.inquiryTreeId}\n autoCollapseNav={true}\n searchValue={modalConfig?.data?.[primaryKeyFieldName]}\n />\n </SideSheet> */}\n {/* <FluentDialog\n open={modalConfig.type === 'delete'}\n handleClose={closeModal}\n title={t('common.delete', { defaultValue: 'Delete' })}\n message={t('maintenanceEngine.deleteDialog.message', { defaultValue: 'Are you sure you want to delete this row?' })}\n actionOne={closeModal}\n labelOne={t('common.cancel', { defaultValue: 'Cancel' })}\n actionTwo={() => handleOnDelete(modalConfig.data)}\n labelTwo={t('common.confirm', { defaultValue: 'Confirm' })}\n /> */}\n <UdpDialog\n open={modalConfig.type === 'delete'}\n dialogTitle={t('common.delete', { defaultValue: 'Delete' })}\n onDialogClose={() => closeModal()}\n >\n <UdpText variant='body1'>\n {t('maintenanceEngine.deleteDialog.message', {\n defaultValue: 'Are you sure you want to delete this row?'\n })}\n </UdpText>\n <UdpFluentButton\n slot='action'\n appearance='outline'\n onClick={() => handleOnDelete(modalConfig.data)}\n >\n {t('common.delete', { defaultValue: 'Delete' })}\n </UdpFluentButton>\n <UdpFluentButton\n slot='action'\n appearance='primary'\n onClick={() => closeModal()}\n >\n {t('common.cancel', { defaultValue: 'Cancel' })}\n </UdpFluentButton>\n </UdpDialog>\n </>\n );\n};\n\nexport default UdpMaintenanceEnginePage;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"UdpMaintenanceEnginePage.mjs","names":["React","useEffect","useState","useMemo","useCallback","useRef","useTranslation","CrudBrowserContainer","CrudTableSidePanel","getPathObject","getPrimaryKeyValues","apiMutate","toLowerFirstChar","toUpperFirstChar","EntityAttributeEnums","UdpEnums","mergeEntityAttributes","fetchForeignKeyData","fetchUdpFieldInfos","executeQueryAdHoc","executeQueryWithParameters","getSearchObject","useHandleAxiosSnackbar","usePromotedMethodEntity","getSanitizedName","Alert","v4","uuid","useLocation","TagEnums","ConfigService","SideSheet","useCatalogStore","useHistory","Inquiry","useAxiosGet","UdpDialog","UdpDrawer","UdpList","UdpListItem","UdpTablist","UdpButton","UdpCard","UdpFlexbox","UdpFluentButton","UdpFluentIcon","UdpMessageBar","UdpTabPanel","UdpText","EntityTimeLine","formatDate","EntityNotes","AuditEventTypeEnums","ReactJsonView","AddViewNote","EDIT_TAB_ID","DOMAIN_FIELDS","AUDIT_HISTORY","NOTES","UdpMaintenanceEnginePage","props","catalogKey","params","t","udpFieldInfos","setUdpFieldInfos","alertWarnings","setAlertWarnings","showBackToTableBrowser","setShowBackToTableBrowser","gridApiRef","modalConfig","setModalConfig","type","data","openCompareDomainAuditsSidesheet","setOpenCompareDomainAuditsSidesheet","lastModifiedAuditEvent","setLastModifiedAuditEvent","selectedAuditEvent","setSelectedAuditEvent","openAddViewNoteSidesheet","setopenAddViewNoteSidesheet","noteMode","setNoteMode","selectedNote","setSelectedNote","refreshNotes","setRefreshNotes","createFormApiRef","editFormApiRef","location","state","history","searchParamStr","search","searchParams","URLSearchParams","searchParamsEntityName","entityName","has","get","handleErrorSnackbar","handleSuccessSnackbar","handleGoToTableBrowser","push","pathname","udpCatalogKey","udpTagId","selectedEntity","setSelectedEntity","foreignKeyData","setForeignKeyData","udpFieldSearchApiId","setUdpFieldSearchApiId","entityUdpObjectInfo","setEntityUdpObjectInfo","editSidesheetTabs","id","label","defaultValue","selectedTabId","setSelectedTabId","setEntityName","currentApiCatalogId","udpObjectInfoEntity","udpObjectFieldInfo","promotedMethodEntities","openModal","closeModal","executeCreate","unityBaseCreateMethod","apiMethodId","executeUpdate","unityBaseUpdateMethod","executeDelete","unityBaseDeleteMethod","onCreate","onUpdate","onDelete","catalogObject","integrationV2ApiUrl","searchObj","eagerLoad","pageNumber","pageSize","orderElements","sortColumn","sortDirection","searchFilterElements","filterElements","searchField","searchOperator","searchValue","forEach","filter","entityAttributes","undefined","properties","fetchLastModifiedAuditEvent","updatedEntityQualifiedName","fullyQualifiedEntityName","filterElems","productV1ApiUrl","method","then","resp","pageList","catch","handleOnCreate","values","requestBody","response","res","status","current","refreshServerSide","handleOnUpdate","primaryKeyValues","pathObject","pathParameters","Array","isArray","po","Object","keys","businessObjectKey","handleOnDelete","value","removeWarning","updatedWarnings","warning","shouldDisableAction","sanitizedEntityName","tagTypeShouldDisableEdit","TagTypeSanitizedName","toLowerCase","includes","User_Defined","shortCutContentShouldDisableEdit","Udp_Shortcut_Content","Is_Product_ShortcutContent","lookupShouldDisableEdit","Udp_Lookup","Is_Product_Lookup","actionList","actions","iconName","getTitle","handleOnClick","e","checkDisabled","inquiryTreeId","splice","title","executeSearchForEntityUdpObjectInfo","requestObj","unityBaseSearchMethod","cancelled","entitiesMissingGetAll","length","existingWarnings","map","messageKey","messageParams","udpFieldWarning","prevState","fieldInfos","from","handleGridApiCallback","api","primaryKeyFieldName","fieldName","find","field","isPrimaryKey","name","slice","handleCloseNotesSidesheet","getChangedFieldsandValues","oldDataStr","newDataStr","oldData","JSON","parse","newData","Set","changes","key","oldValue","newValue","stringify","previousValue","currentValue","createPageId","pageId","updatePageId","sidesheetList","open","onClose","legacySheet","displayName","width","children","handleSubmit","detail","typeCode","Update_Domain","Delete_Domain","udpAuditEventUdpAuditEventDetail","oldObj","Create_Domain","newObj","message","record","entityBusinessKey","date","createdOn","user","userDisplayName","sidesheet"],"sources":["../../../../src/udp/pages/UdpMaintenanceEnginePage/UdpMaintenanceEnginePage.jsx"],"sourcesContent":["import React, {\n useEffect,\n useState,\n useMemo,\n useCallback,\n useRef\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { CrudBrowserContainer } from '../../../maintenanceEngine/crudBrowser/CrudBrowserContainer';\nimport { CrudTableSidePanel } from '../../../maintenanceEngine/crudBrowser/CrudTableSidePanel';\nimport {\n getPathObject,\n getPrimaryKeyValues\n} from '../../../utilities/maintenanceEngine/CrudBrowserUtilities';\nimport { apiMutate } from '../../../utilities/useAxiosMutate';\nimport {\n toLowerFirstChar,\n toUpperFirstChar\n} from '../../../utilities/input/StringUtilities';\nimport {\n EntityAttributeEnums,\n UdpEnums\n} from '../../../enums/unitySystemEnums';\nimport { mergeEntityAttributes } from '../../../domain/entityForm/entityFormModel';\nimport {\n fetchForeignKeyData,\n fetchUdpFieldInfos\n} from '../../../maintenanceEngine/entityFormInputs';\nimport {\n executeQueryAdHoc,\n executeQueryWithParameters\n} from '../../utilities/methodUtils';\nimport { getSearchObject } from '../../../utilities/search/SearchUtilities';\nimport { useHandleAxiosSnackbar } from '../../../utilities/apiHelpers';\nimport { usePromotedMethodEntity } from '../../../hooks/usePromotedMethodEntity';\nimport { getSanitizedName } from '../../../utilities/entities/entityUtilities';\nimport { Alert } from '@material-ui/lab';\nimport { v4 as uuid } from 'uuid';\nimport { useLocation } from 'react-router-dom';\nimport { TagEnums } from '../../../enums/tagEnums';\nimport { ConfigService } from '../../../configService';\nimport { SideSheet } from '../../../UI/surfaces/SideSheet';\nimport { useCatalogStore } from '../../../stores/catalogStore';\nimport { useHistory } from 'react-router-dom';\nimport { Inquiry } from '../../../inquiry';\nimport { useAxiosGet } from '../../../utilities';\nimport { UdpDialog, UdpDrawer, UdpList, UdpListItem, UdpTablist } from '../../../UI/fluent-web-components';\nimport { UdpButton, UdpCard, UdpFlexbox, UdpFluentButton, UdpFluentIcon, UdpMessageBar, UdpTabPanel, UdpText } from '@univerus/udp-react-stencil-component-library';\nimport EntityTimeLine from './components/EntitiyTimeLine';\nimport { formatDate } from '../../../UI/widgets/utils/dateUtils';\nimport { EntityNotes } from './components/EntityNotes';\nimport { AuditEventTypeEnums } from '../../../enums/auditEventEnums';\nimport ReactJsonView from '@microlink/react-json-view'\nimport AddViewNote from './components/AddViewNote';\n\nconst EDIT_TAB_ID = {\n DOMAIN_FIELDS: 'DomainFields',\n AUDIT_HISTORY: 'AuditHistory',\n NOTES: 'Notes',\n}\n\nexport const UdpMaintenanceEnginePage = (props) => {\n const { catalogKey, params } = props;\n const { t } = useTranslation();\n const [udpFieldInfos, setUdpFieldInfos] = useState([]);\n const [alertWarnings, setAlertWarnings] = useState([]);\n const [showBackToTableBrowser, setShowBackToTableBrowser] = useState(false);\n const gridApiRef = useRef(null);\n const [modalConfig, setModalConfig] = useState({ type: null, data: null });\n const [openCompareDomainAuditsSidesheet, setOpenCompareDomainAuditsSidesheet] = useState(false);\n const [lastModifiedAuditEvent, setLastModifiedAuditEvent] = useState();\n const [selectedAuditEvent, setSelectedAuditEvent] = useState();\n const [openAddViewNoteSidesheet, setopenAddViewNoteSidesheet] = useState(false);\n const [noteMode, setNoteMode] = useState('');\n const [selectedNote, setSelectedNote] = useState(null);\n const [refreshNotes, setRefreshNotes] = useState(false);\n\n const createFormApiRef = useRef();\n const editFormApiRef = useRef();\n\n const location = useLocation();\n const state = location.state;\n const history = useHistory();\n let searchParamStr = location.search;\n let searchParams = new URLSearchParams(searchParamStr);\n const searchParamsEntityName = state?.entityName\n ? state.entityName\n : searchParams.has('entityName') === true\n ? toUpperFirstChar(searchParams.get('entityName'))\n : '';\n\n const { handleErrorSnackbar, handleSuccessSnackbar } =\n useHandleAxiosSnackbar();\n\n const handleGoToTableBrowser = useCallback(() => {\n history.push({\n pathname: `/tableBrowser`\n });\n }, [history]);\n\n const udpCatalogKey = useMemo(() => {\n if (params?.entityName || catalogKey || searchParamsEntityName) {\n return params?.entityName || catalogKey || searchParamsEntityName;\n } else {\n handleGoToTableBrowser();\n }\n }, [\n params?.entityName,\n catalogKey,\n searchParamsEntityName,\n handleGoToTableBrowser\n ]);\n const udpTagId = params?.udpTagId || '';\n\n const [selectedEntity, setSelectedEntity] = useState(null);\n const [foreignKeyData, setForeignKeyData] = useState(null);\n const [udpFieldSearchApiId, setUdpFieldSearchApiId] = useState(null);\n const [entityUdpObjectInfo, setEntityUdpObjectInfo] = useState(null);\n const editSidesheetTabs = [\n {\n id: EDIT_TAB_ID.DOMAIN_FIELDS,\n label: t('maintenanceEngine.tabs.domainFields', { defaultValue: 'Domain Fields' })\n },\n {\n id: EDIT_TAB_ID.AUDIT_HISTORY,\n label: t('maintenanceEngine.tabs.auditHistory', { defaultValue: 'Audit History' })\n },\n {\n id: EDIT_TAB_ID.NOTES,\n label: t('maintenanceEngine.tabs.notes', { defaultValue: 'Notes' })\n }\n ];\n const [selectedTabId, setSelectedTabId] = useState(editSidesheetTabs[0]?.id);\n\n const [entityName, setEntityName] = useState(null);\n\n const { currentApiCatalogId } = useCatalogStore();\n\n const { data: udpObjectInfoEntity } = usePromotedMethodEntity(\n 'udpObjectInfo',\n true\n );\n\n const { data: udpObjectFieldInfo } = usePromotedMethodEntity(\n 'UdpObjectFieldInfo',\n true\n );\n\n const { data: promotedMethodEntities } = usePromotedMethodEntity(\n udpCatalogKey,\n true\n );\n\n // 2. MODAL HANDLERS: Callbacks to open and close modals/sheets.\n const openModal = useCallback((type, data = null) => {\n setModalConfig({ type, data });\n }, []);\n\n const closeModal = useCallback(() => {\n setModalConfig({ type: null, data: null });\n }, []);\n\n //------- CRUD operations (direct-if-eligible routed via methodUtils) --------\n const executeCreate = useCallback(\n async (data) =>\n executeQueryWithParameters(\n data,\n selectedEntity?.unityBaseCreateMethod?.apiMethodId\n ),\n [selectedEntity]\n );\n\n const executeUpdate = useCallback(\n async (data) =>\n executeQueryWithParameters(\n data,\n selectedEntity?.unityBaseUpdateMethod?.apiMethodId\n ),\n [selectedEntity]\n );\n\n const executeDelete = useCallback(\n async (data) =>\n executeQueryWithParameters(\n data,\n selectedEntity?.unityBaseDeleteMethod?.apiMethodId\n ),\n [selectedEntity]\n );\n\n const onCreate = useCallback(\n async (data) => {\n return await executeCreate(data);\n },\n [executeCreate]\n );\n\n const onUpdate = useCallback(\n async (data) => {\n return await executeUpdate(data);\n },\n [executeUpdate]\n );\n\n const onDelete = useCallback(\n async (data) => {\n return await executeDelete(data);\n },\n [executeDelete]\n );\n\n const [{ data: catalogObject }] = useAxiosGet(\n ConfigService.integrationV2ApiUrl,\n `apiCatalog/${currentApiCatalogId}/catalogObject/${entityName}`,\n {},\n !!!currentApiCatalogId || !!!entityName,\n false\n );\n\n const searchObj = useMemo(() => {\n return {\n eagerLoad: true,\n pageNumber: 0,\n pageSize: 100,\n orderElements: [\n {\n sortColumn: 'createdOn',\n sortDirection: 'desc'\n }\n ],\n };\n }, []);\n\n const searchFilterElements = useMemo(() => {\n const filterElements = [];\n if (udpTagId) {\n filterElements.push({\n searchField: 'UdpTags.UdpTagAssociationUdpTag.Id',\n searchOperator: '=',\n searchValue: udpTagId\n });\n }\n if (params?.filterElements) {\n params?.filterElements?.forEach((filter) => {\n filterElements.push(filter);\n });\n }\n return filterElements;\n }, [udpTagId, params?.filterElements]);\n\n const entityAttributes = useMemo(() => {\n if (!catalogObject || !entityName) return undefined;\n return mergeEntityAttributes(catalogObject.properties || [], udpFieldInfos);\n }, [catalogObject, entityName, udpFieldInfos]);\n\n const fetchLastModifiedAuditEvent = useCallback((updatedEntityQualifiedName) => {\n let fullyQualifiedEntityName = promotedMethodEntities?.entityName;\n if(updatedEntityQualifiedName){\n fullyQualifiedEntityName = updatedEntityQualifiedName\n }\n if (!fullyQualifiedEntityName) return;\n const filterElems = [{ searchField: 'domain', searchOperator: '=', searchValue: fullyQualifiedEntityName }]\n apiMutate(\n ConfigService.productV1ApiUrl,\n 'UdpAuditEvent/search',\n { method: 'post' },\n {\n data: {\n ...searchObj,\n pageSize: 1,\n filterElements: filterElems\n }\n }\n ).then(\n (resp) =>\n setLastModifiedAuditEvent(resp?.data?.pageList?.[0])\n )\n .catch(() => setLastModifiedAuditEvent(null));\n },[promotedMethodEntities, searchObj]);\n\n const handleOnCreate = useCallback(\n async (values) => {\n if (selectedEntity) {\n const entityName = selectedEntity?.entityName;\n if (selectedEntity?.unityBaseCreateMethod) {\n const data = { requestBody: values };\n const response = await onCreate({ data }).catch((res) => {\n handleErrorSnackbar(res);\n });\n\n if (response?.status === 200) {\n handleSuccessSnackbar(\n entityName\n ? t('maintenanceEngine.snackbar.entityCreated', {\n defaultValue: '{{entityName}} has been created',\n entityName\n })\n : t('maintenanceEngine.snackbar.created', {\n defaultValue: 'Entity has been created'\n })\n );\n gridApiRef.current.refreshServerSide();\n closeModal('create');\n return response;\n }\n } else {\n handleErrorSnackbar(\n null,\n t('maintenanceEngine.errors.createNotPromoted', {\n defaultValue: \"{{entityName}}'s create method must be promoted\",\n entityName: selectedEntity.entityName\n })\n );\n }\n }\n },\n [\n selectedEntity,\n onCreate,\n handleErrorSnackbar,\n handleSuccessSnackbar,\n t,\n closeModal\n ]\n );\n\n const handleOnUpdate = useCallback(\n async (values, primaryKeyValues) => {\n if (selectedEntity) {\n const entityName = selectedEntity?.entityName;\n\n if (selectedEntity?.unityBaseUpdateMethod) {\n // Get primary key value object using path parameters and merge with data\n const pathObject = getPathObject(\n selectedEntity.unityBaseUpdateMethod.pathParameters,\n primaryKeyValues\n );\n let data = { requestBody: values };\n if (Array.isArray(pathObject)) {\n pathObject.forEach((po) => {\n data[Object.keys(po)[0]] = po[Object.keys(po)[0]];\n });\n } else {\n data = { ...pathObject, requestBody: values };\n }\n\n const response = await onUpdate({ data }).catch((res) => {\n handleErrorSnackbar(res);\n });\n\n if (response?.status === 200) {\n handleSuccessSnackbar(\n entityName\n ? t('maintenanceEngine.snackbar.entityUpdated', {\n defaultValue: '{{entityName}} has been updated',\n entityName\n })\n : t('maintenanceEngine.snackbar.updated', {\n defaultValue: 'Entity has been updated'\n })\n );\n\n gridApiRef.current.refreshServerSide();\n fetchLastModifiedAuditEvent(data?.businessObjectKey);\n closeModal('edit');\n }\n }\n }\n },\n [\n selectedEntity,\n onUpdate,\n handleErrorSnackbar,\n handleSuccessSnackbar,\n t,\n closeModal,\n fetchLastModifiedAuditEvent\n ]\n );\n\n const handleOnDelete = useCallback(\n async (value) => {\n if (selectedEntity) {\n const entityName = selectedEntity?.entityName;\n\n if (selectedEntity?.unityBaseDeleteMethod) {\n // Get primary key value object using path parameters and merge with data\n const primaryKeyValues = getPrimaryKeyValues(entityAttributes, value);\n const pathObject = getPathObject(\n selectedEntity?.unityBaseDeleteMethod.pathParameters,\n primaryKeyValues\n );\n let data = {};\n if (Array.isArray(pathObject)) {\n pathObject.forEach((po) => {\n data[Object.keys(po)[0]] = po[Object.keys(po)[0]];\n });\n } else {\n data = { ...pathObject };\n }\n\n const response = await onDelete({ data }).catch((res) => {\n handleErrorSnackbar(res);\n });\n\n if (response?.status === 200) {\n handleSuccessSnackbar(\n entityName\n ? t('maintenanceEngine.snackbar.entityDeleted', {\n defaultValue: '{{entityName}} has been deleted',\n entityName\n })\n : t('maintenanceEngine.snackbar.deleted', {\n defaultValue: 'Entity has been deleted'\n })\n );\n gridApiRef.current.refreshServerSide();\n closeModal('delete');\n }\n }\n }\n },\n [\n selectedEntity,\n entityAttributes,\n onDelete,\n handleErrorSnackbar,\n handleSuccessSnackbar,\n t,\n closeModal\n ]\n );\n\n const removeWarning = useCallback(\n (id) => {\n const updatedWarnings = alertWarnings.filter(\n (warning) => warning.id !== id\n );\n setAlertWarnings(updatedWarnings);\n },\n [alertWarnings]\n );\n\n const shouldDisableAction = useCallback(\n (value) => {\n const sanitizedEntityName = getSanitizedName(entityName);\n const tagTypeShouldDisableEdit =\n [TagEnums.TagTypeSanitizedName.toLowerCase()].includes(\n sanitizedEntityName?.toLowerCase()\n ) && !value?.[toLowerFirstChar(EntityAttributeEnums.User_Defined)];\n\n const shortCutContentShouldDisableEdit =\n [UdpEnums.Udp_Shortcut_Content.toLowerCase()].includes(\n sanitizedEntityName?.toLowerCase()\n ) &&\n value?.[\n toLowerFirstChar(EntityAttributeEnums.Is_Product_ShortcutContent)\n ];\n\n const lookupShouldDisableEdit =\n [UdpEnums.Udp_Lookup.toLowerCase()].includes(\n sanitizedEntityName?.toLowerCase()\n ) && value?.[toLowerFirstChar(EntityAttributeEnums.Is_Product_Lookup)];\n return (\n tagTypeShouldDisableEdit ||\n shortCutContentShouldDisableEdit ||\n lookupShouldDisableEdit\n );\n },\n [entityName]\n );\n\n const actionList = useMemo(() => {\n if (!selectedEntity) {\n return [];\n }\n\n let actions = [\n {\n id: 'edit',\n iconName: 'edit', // Pass string name for the icon\n getTitle: () =>\n // Use getTitle for dynamic text\n selectedEntity?.unityBaseUpdateMethod\n ? t('common.edit', { defaultValue: 'Edit' })\n : t('maintenanceEngine.actions.editNotAccessible', {\n defaultValue: 'Edit Method Not Accessible'\n }),\n handleOnClick: (e, params) => {\n openModal('edit', params.data); // Calls parent state handler\n },\n checkDisabled: (params) =>\n !!!selectedEntity?.unityBaseUpdateMethod ||\n shouldDisableAction(params.data)\n },\n {\n id: 'delete',\n iconName: 'trashCan', // Pass string name for the icon\n getTitle: () =>\n selectedEntity?.unityBaseDeleteMethod\n ? t('common.delete', { defaultValue: 'Delete' })\n : t('maintenanceEngine.actions.deleteNotAccessible', {\n defaultValue: 'Delete Method Not Accessible'\n }),\n handleOnClick: (e, params) => {\n openModal('delete', params.data); // Calls parent state handler\n },\n checkDisabled: (params) =>\n !!!selectedEntity?.unityBaseDeleteMethod ||\n shouldDisableAction(params.data)\n }\n ];\n if (params?.inquiryTreeId) {\n actions.splice(1, 0, {\n id: 'inquiry',\n iconName: 'relationshipDiagram',\n title: t('maintenanceEngine.actions.detailedView', { defaultValue: 'Detailed view' }),\n handleOnClick: (e, params) => {\n openModal('inquiry', params.data);\n }\n });\n }\n return actions;\n }, [\n selectedEntity,\n t,\n shouldDisableAction,\n openModal,\n params?.inquiryTreeId\n ]);\n\n useEffect(() => {\n const executeSearchForEntityUdpObjectInfo = async (\n apiMethodId,\n sanitizedEntityName\n ) => {\n const filterElements = [\n {\n searchField: 'SanitizedName',\n searchOperator: '=',\n searchValue: sanitizedEntityName\n }\n ];\n const requestObj = getSearchObject(filterElements, 1, 50, false);\n const response = await executeQueryAdHoc(\n { data: requestObj },\n apiMethodId\n );\n if (response.status === 200) {\n const data = response?.data?.pageList[0];\n setEntityUdpObjectInfo(data);\n }\n };\n if (udpObjectInfoEntity?.unityBaseSearchMethod && entityName) {\n executeSearchForEntityUdpObjectInfo(\n udpObjectInfoEntity?.unityBaseSearchMethod?.apiMethodId,\n getSanitizedName(entityName)\n );\n }\n }, [udpObjectInfoEntity, entityName]);\n\n useEffect(() => {\n if (!entityAttributes || udpFieldSearchApiId === null) return;\n let cancelled = false;\n fetchForeignKeyData(\n currentApiCatalogId,\n entityAttributes,\n udpFieldSearchApiId\n ).then(({ foreignKeyData, entitiesMissingGetAll }) => {\n if (cancelled) return;\n setForeignKeyData(foreignKeyData);\n if (!entitiesMissingGetAll.length) return;\n setAlertWarnings((existingWarnings) => [\n ...existingWarnings,\n ...entitiesMissingGetAll.map((entityName) => ({\n id: uuid(),\n messageKey: 'maintenanceEngine.warnings.getAllNotPromoted',\n defaultValue: \"{{entityName}}'s Get-All method needs to be promoted\",\n messageParams: { entityName }\n }))\n ]);\n });\n return () => {\n cancelled = true;\n };\n }, [entityAttributes, udpFieldSearchApiId, currentApiCatalogId]);\n\n useEffect(() => {\n if (promotedMethodEntities) {\n setSelectedEntity(promotedMethodEntities);\n setEntityName(promotedMethodEntities?.entityName);\n }\n }, [promotedMethodEntities]);\n\n useEffect(() => {\n if (udpObjectFieldInfo) {\n if (udpObjectFieldInfo?.unityBaseSearchMethod?.apiMethodId) {\n setUdpFieldSearchApiId(\n udpObjectFieldInfo?.unityBaseSearchMethod?.apiMethodId\n );\n } else {\n setUdpFieldSearchApiId('');\n const udpFieldWarning = {\n id: uuid(),\n messageKey: 'maintenanceEngine.warnings.udpObjectFieldInfoNotPromoted',\n defaultValue: 'UdpObjectFieldInfo method needs to be promoted'\n };\n setAlertWarnings((prevState) => [...prevState, udpFieldWarning]);\n }\n }\n }, [udpObjectFieldInfo]);\n\n useEffect(() => {\n if (!udpFieldSearchApiId) return;\n let cancelled = false;\n fetchUdpFieldInfos(udpFieldSearchApiId, entityName).then((fieldInfos) => {\n if (!cancelled) setUdpFieldInfos(fieldInfos);\n });\n return () => {\n cancelled = true;\n };\n }, [udpFieldSearchApiId, entityName]);\n\n useEffect(() => {\n if (location.state?.from === 'tablebrowser') {\n setShowBackToTableBrowser(true);\n }\n }, [location.state]);\n\n const handleGridApiCallback = (api) => {\n gridApiRef.current = api;\n };\n\n\n useEffect(() => {\n fetchLastModifiedAuditEvent();\n }, [fetchLastModifiedAuditEvent]);\n\n const primaryKeyFieldName = useMemo(() => {\n const fieldName = udpFieldInfos?.find((field) => field.isPrimaryKey)?.name;\n return fieldName?.[0]?.toLowerCase() + fieldName?.slice(1);\n }, [udpFieldInfos]);\n\n const handleCloseNotesSidesheet = () => {\n setopenAddViewNoteSidesheet(false);\n setSelectedNote(null);\n setNoteMode('');\n };\n\n const getChangedFieldsandValues = (oldDataStr, newDataStr) => {\n if (!oldDataStr || !newDataStr) return;\n const oldData = JSON.parse(oldDataStr);\n const newData = JSON.parse(newDataStr);\n const keys = new Set([...Object.keys(oldData), ...Object.keys(newData)]);\n\n const changes = [];\n keys.forEach((key) => {\n const oldValue = oldData[key] ?? null;\n const newValue = newData[key] ?? null;\n if (JSON.stringify(oldValue) !== JSON.stringify(newValue)) {\n changes.push({\n field: key,\n previousValue: oldValue,\n currentValue: newValue\n });\n }\n });\n return changes;\n };\n\n // A custom page can contain MUI popups, which portal outside the modal\n // UdpDrawer's top layer and can't be clicked there — it stays on SideSheet.\n const createPageId = selectedEntity?.unityBaseCreateMethod?.pageId;\n const updatePageId = selectedEntity?.unityBaseUpdateMethod?.pageId;\n\n const sidesheetList = [\n {\n open: modalConfig.type === 'create',\n onClose: closeModal,\n legacySheet: !!createPageId,\n title: t('maintenanceEngine.sheet.addTitle', {\n defaultValue: 'Add New {{name}}',\n name:\n entityUdpObjectInfo?.properties?.displayName ||\n getSanitizedName(entityName)\n }),\n width: '600px',\n children: (\n <>\n <CrudTableSidePanel\n entityAttributes={entityAttributes}\n udpFieldInfos={udpFieldInfos}\n foreignKeyData={foreignKeyData}\n closeSideSheet={closeModal}\n isNewEntry={modalConfig.type === 'create'}\n entityName={entityName}\n onCreate={handleOnCreate}\n onUpdate={undefined}\n crudTableEditionData={null}\n pageId={createPageId}\n formApiRef={createFormApiRef}\n hideSubmitButton\n />\n {!createPageId && (\n <UdpFluentButton\n appearance='primary'\n slot='footer'\n onClick={() => createFormApiRef.current?.handleSubmit()}\n >\n {t('common.add', { defaultValue: 'Add' })}\n </UdpFluentButton>\n )}\n </>\n )\n },\n {\n open: modalConfig.type === 'edit',\n onClose: closeModal,\n legacySheet: !!updatePageId,\n title: t('maintenanceEngine.sheet.editTitle', {\n defaultValue: 'Edit {{name}}',\n name:\n entityUdpObjectInfo?.properties?.displayName ||\n getSanitizedName(entityName)\n }),\n width: '600px',\n children: (\n <>\n <UdpFlexbox\n slot='toolbar'\n direction='row'\n align='center'\n justify='space-between'\n width='100%'\n >\n <UdpTablist\n tabList={editSidesheetTabs}\n activeId={selectedTabId}\n onTabChange={(e) => setSelectedTabId(e?.detail)}\n />\n <UdpFluentButton\n appearance='transparent'\n onClick={() => {\n setopenAddViewNoteSidesheet(true);\n setNoteMode('ADD');\n }}\n startIconName='add'\n >\n {t('notes.actions.add', { defaultValue: 'Add Note' })}\n </UdpFluentButton>\n </UdpFlexbox>\n <UdpTabPanel\n activeTabId={selectedTabId}\n id={EDIT_TAB_ID.DOMAIN_FIELDS}\n >\n <CrudTableSidePanel\n entityAttributes={entityAttributes}\n udpFieldInfos={udpFieldInfos}\n foreignKeyData={foreignKeyData}\n closeSideSheet={closeModal}\n isNewEntry={modalConfig.type === 'create'}\n entityName={entityName}\n onCreate={undefined}\n onUpdate={handleOnUpdate}\n crudTableEditionData={modalConfig.data}\n pageId={updatePageId}\n formApiRef={editFormApiRef}\n hideSubmitButton\n />\n </UdpTabPanel>\n\n <UdpTabPanel\n activeTabId={selectedTabId}\n id={EDIT_TAB_ID.AUDIT_HISTORY}\n >\n <EntityTimeLine\n setOpenCompareDomainAuditsSidesheet={\n setOpenCompareDomainAuditsSidesheet\n }\n setSelectedAuditEvent={setSelectedAuditEvent}\n entityData={modalConfig?.data}\n />\n </UdpTabPanel>\n\n <UdpTabPanel activeTabId={selectedTabId} id={EDIT_TAB_ID.NOTES}>\n <EntityNotes\n businessObjectKey={modalConfig?.data?.businessObjectKey}\n setNoteMode={setNoteMode}\n setOpenViewNoteSidesheet={setopenAddViewNoteSidesheet}\n setSelectedNote={setSelectedNote}\n refreshNotes={refreshNotes}\n setRefreshNotes={setRefreshNotes}\n />\n </UdpTabPanel>\n {selectedTabId === EDIT_TAB_ID.DOMAIN_FIELDS && !updatePageId && (\n <UdpFluentButton\n appearance='primary'\n slot='footer'\n onClick={() => editFormApiRef.current?.handleSubmit()}\n >\n {t('common.save', { defaultValue: 'Save' })}\n </UdpFluentButton>\n )}\n </>\n )\n },\n {\n open: modalConfig.type === 'inquiry',\n onClose: closeModal,\n title: t('maintenanceEngine.actions.detailedView', {\n defaultValue: 'Detailed view'\n }),\n width: '90%',\n children: (\n <Inquiry\n treeId={params?.inquiryTreeId}\n autoCollapseNav={true}\n searchValue={modalConfig?.data?.[primaryKeyFieldName]}\n />\n )\n },\n {\n open: openCompareDomainAuditsSidesheet,\n onClose: () => {\n setOpenCompareDomainAuditsSidesheet(false);\n },\n title: t('maintenanceEngine.sheet.compareAuditsTitle', {\n defaultValue: 'Compare Audits'\n }),\n width: '500px',\n children: (\n <UdpCard>\n {(selectedAuditEvent?.typeCode ===\n AuditEventTypeEnums.Update_Domain ||\n selectedAuditEvent?.typeCode ===\n AuditEventTypeEnums.Delete_Domain) && (\n <ReactJsonView\n src={\n selectedAuditEvent?.udpAuditEventUdpAuditEventDetail?.[0]\n ?.oldObj\n ? JSON.parse(\n selectedAuditEvent?.udpAuditEventUdpAuditEventDetail?.[0]\n ?.oldObj\n )\n : {}\n }\n name={t('auditEvents.sidesheet.oldDetails', {\n defaultValue: 'Old Details'\n })}\n displayDataTypes={false}\n displayObjectSize={false}\n collapsed={true}\n />\n )}\n {(selectedAuditEvent?.typeCode ===\n AuditEventTypeEnums.Update_Domain ||\n selectedAuditEvent?.typeCode ===\n AuditEventTypeEnums.Create_Domain) && (\n <ReactJsonView\n src={\n selectedAuditEvent?.udpAuditEventUdpAuditEventDetail?.[0]\n ?.newObj\n ? JSON.parse(\n selectedAuditEvent?.udpAuditEventUdpAuditEventDetail?.[0]\n ?.newObj\n )\n : {}\n }\n name={t('auditEvents.sidesheet.newDetails', {\n defaultValue: 'New Details'\n })}\n displayDataTypes={false}\n displayObjectSize={false}\n collapsed={true}\n />\n )}\n {selectedAuditEvent && (\n <UdpList>\n {getChangedFieldsandValues(\n selectedAuditEvent?.udpAuditEventUdpAuditEventDetail?.[0]\n ?.oldObj,\n selectedAuditEvent?.udpAuditEventUdpAuditEventDetail?.[0]\n ?.newObj\n )?.map(({ field, previousValue, currentValue }) => {\n return (\n <UdpListItem\n key={field}\n label={field}\n subtitle={t('maintenanceEngine.compareAudits.change', {\n defaultValue:\n 'Old: {{previousValue}} New: {{currentValue}}',\n previousValue,\n currentValue\n })}\n value={field}\n />\n );\n })}\n </UdpList>\n )}\n </UdpCard>\n )\n },\n {\n open: openAddViewNoteSidesheet,\n onClose: () => handleCloseNotesSidesheet(),\n title:\n noteMode === 'ADD'\n ? t('notes.addTitle', { defaultValue: 'Add Note' })\n : t('notes.viewTitle', { defaultValue: 'View Note' }),\n width: '500px',\n children: (\n <AddViewNote\n entityBusinessKey={modalConfig?.data?.businessObjectKey}\n closeSidesheet={() => {\n handleCloseNotesSidesheet();\n }}\n mode={noteMode}\n selectedNote={selectedNote}\n setRefreshNotes={setRefreshNotes}\n />\n )\n }\n ];\n\n return (\n <>\n {alertWarnings.map((warning) => (\n <Alert\n key={warning.id}\n onClose={() => removeWarning(warning.id)}\n severity='warning'\n >\n {warning.messageKey\n ? t(warning.messageKey, {\n defaultValue: warning.defaultValue,\n ...warning.messageParams\n })\n : warning.message}\n </Alert>\n ))}\n {lastModifiedAuditEvent && (\n <UdpMessageBar slot='inline' intent='warning'>\n <div slot='icon'>\n <UdpFluentIcon name='clock' color='primary' size='xs' />\n </div>\n <UdpText variant='body2'>\n {t('maintenanceEngine.messageBar.lastUpdated', {\n defaultValue: 'Last Updated {{record}} on {{date}} by {{user}}',\n record: lastModifiedAuditEvent?.entityBusinessKey,\n date: formatDate(lastModifiedAuditEvent?.createdOn, 'dd/mm/yyyy'),\n user: lastModifiedAuditEvent?.userDisplayName\n })}\n </UdpText>\n <UdpButton\n slot='actions'\n variant='outlined'\n size='small'\n onClick={(e) => {\n setSelectedAuditEvent(lastModifiedAuditEvent);\n setOpenCompareDomainAuditsSidesheet(true);\n }}\n >\n {t('maintenanceEngine.actions.moreDetails', {\n defaultValue: 'More Details'\n })}\n </UdpButton>\n </UdpMessageBar>\n )}\n <CrudBrowserContainer\n actionList={actionList}\n onCreate={() => openModal('create')}\n entityAttributes={entityAttributes}\n foreignKeyData={foreignKeyData}\n promotedEntity={selectedEntity}\n apiMethod={{ currentApiCatalogId, entityName }}\n filterElements={searchFilterElements}\n setAlertWarnings={setAlertWarnings}\n gridApiCallback={handleGridApiCallback}\n showBackToTableBrowser={showBackToTableBrowser}\n gridTitle={entityUdpObjectInfo?.properties?.displayName}\n />\n {sidesheetList.map((sidesheet) => {\n return modalConfig.type === 'inquiry' || sidesheet?.legacySheet ? (\n <SideSheet\n key={sidesheet?.title}\n open={sidesheet?.open}\n onClose={sidesheet?.onClose}\n title={sidesheet?.title}\n width={sidesheet?.width}\n >\n {sidesheet?.children}\n </SideSheet>\n ) : (\n <UdpDrawer\n key={sidesheet?.title}\n open={sidesheet?.open}\n onDrawerClose={sidesheet?.onClose}\n drawerTitle={sidesheet?.title}\n drawerWidth={sidesheet?.width}\n >\n {sidesheet?.children}\n </UdpDrawer>\n );\n })}\n {/* <SideSheet\n open={modalConfig.type === 'create' || modalConfig.type === 'edit'}\n onClose={closeModal}\n title={\n modalConfig.type === 'create'\n ? t('maintenanceEngine.sheet.addTitle', {\n defaultValue: 'Add New {{name}}',\n name:\n entityUdpObjectInfo?.properties?.displayName ||\n getSanitizedName(entityName)\n })\n : t('maintenanceEngine.sheet.editTitle', {\n defaultValue: 'Edit {{name}}',\n name:\n entityUdpObjectInfo?.properties?.displayName ||\n getSanitizedName(entityName)\n })\n }\n width={600}\n >\n {(modalConfig.type === 'create' || modalConfig.type === 'edit') && (\n <CrudTableSidePanel\n entityAttributes={entityAttributes}\n udpFieldInfos={udpFieldInfos}\n foreignKeyData={foreignKeyData}\n closeSideSheet={closeModal}\n isNewEntry={modalConfig.type === 'create'}\n entityName={entityName}\n onCreate={\n modalConfig.type === 'create' ? handleOnCreate : undefined\n }\n onUpdate={modalConfig.type === 'edit' ? handleOnUpdate : undefined}\n crudTableEditionData={\n modalConfig.type === 'edit' ? modalConfig.data : null\n }\n pageId={\n modalConfig.type === 'edit'\n ? selectedEntity?.unityBaseUpdateMethod?.pageId\n : selectedEntity?.unityBaseCreateMethod?.pageId\n }\n />\n )}\n </SideSheet>\n <SideSheet\n open={modalConfig.type === 'inquiry'}\n onClose={closeModal}\n title={t('maintenanceEngine.actions.detailedView', { defaultValue: 'Detailed view' })}\n width={'90%'}\n >\n <Inquiry\n treeId={params?.inquiryTreeId}\n autoCollapseNav={true}\n searchValue={modalConfig?.data?.[primaryKeyFieldName]}\n />\n </SideSheet> */}\n {/* <FluentDialog\n open={modalConfig.type === 'delete'}\n handleClose={closeModal}\n title={t('common.delete', { defaultValue: 'Delete' })}\n message={t('maintenanceEngine.deleteDialog.message', { defaultValue: 'Are you sure you want to delete this row?' })}\n actionOne={closeModal}\n labelOne={t('common.cancel', { defaultValue: 'Cancel' })}\n actionTwo={() => handleOnDelete(modalConfig.data)}\n labelTwo={t('common.confirm', { defaultValue: 'Confirm' })}\n /> */}\n <UdpDialog\n open={modalConfig.type === 'delete'}\n dialogTitle={t('common.delete', { defaultValue: 'Delete' })}\n onDialogClose={() => closeModal()}\n >\n <UdpText variant='body1'>\n {t('maintenanceEngine.deleteDialog.message', {\n defaultValue: 'Are you sure you want to delete this row?'\n })}\n </UdpText>\n <UdpFluentButton\n slot='action'\n appearance='outline'\n onClick={() => handleOnDelete(modalConfig.data)}\n >\n {t('common.delete', { defaultValue: 'Delete' })}\n </UdpFluentButton>\n <UdpFluentButton\n slot='action'\n appearance='primary'\n onClick={() => closeModal()}\n >\n {t('common.cancel', { defaultValue: 'Cancel' })}\n </UdpFluentButton>\n </UdpDialog>\n </>\n );\n};\n\nexport default UdpMaintenanceEnginePage;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntitiyTimeLine.d.ts","sourceRoot":"","sources":["../../../../../src/udp/pages/UdpMaintenanceEnginePage/components/EntitiyTimeLine.jsx"],"names":[],"mappings":"AAAA,OAAO,KAA0C,MAAM,OAAO,CAAC;AAU/D,QAAA,MAAM,cAAc,
|
|
1
|
+
{"version":3,"file":"EntitiyTimeLine.d.ts","sourceRoot":"","sources":["../../../../../src/udp/pages/UdpMaintenanceEnginePage/components/EntitiyTimeLine.jsx"],"names":[],"mappings":"AAAA,OAAO,KAA0C,MAAM,OAAO,CAAC;AAU/D,QAAA,MAAM,cAAc,mCAsFnB,CAAC;AAEF,eAAe,cAAc,CAAC"}
|
|
@@ -16,13 +16,6 @@ const EntityTimeLine = (props) => {
|
|
|
16
16
|
eagerLoad: true,
|
|
17
17
|
pageNumber: 0,
|
|
18
18
|
pageSize: 100,
|
|
19
|
-
filterElements: [
|
|
20
|
-
{
|
|
21
|
-
searchField: 'domain',
|
|
22
|
-
searchValue: 'Univerus.Unity.Uem.Domain.Models.ApiUrlBase',
|
|
23
|
-
searchOperator: '='
|
|
24
|
-
}
|
|
25
|
-
],
|
|
26
19
|
orderElements: [
|
|
27
20
|
{
|
|
28
21
|
sortColumn: 'createdOn',
|
|
@@ -31,7 +24,7 @@ const EntityTimeLine = (props) => {
|
|
|
31
24
|
]
|
|
32
25
|
};
|
|
33
26
|
}, []);
|
|
34
|
-
const [{ data: entityHistory, loading: entityHistoryLoading }, fetchEntityHistory] = useAxiosMutate(ConfigService.
|
|
27
|
+
const [{ data: entityHistory, loading: entityHistoryLoading }, fetchEntityHistory] = useAxiosMutate(ConfigService.productV1ApiUrl, 'UdpAuditEvent/search', {
|
|
35
28
|
method: 'post',
|
|
36
29
|
data: searchObj
|
|
37
30
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntitiyTimeLine.js","sourceRoot":"","sources":["../../../../../src/udp/pages/UdpMaintenanceEnginePage/components/EntitiyTimeLine.jsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,sCAAsC,CAAC;AAE/D,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC;;IAChC,MAAM,EAAE,CAAC,EAAE,GAAG,cAAc,EAAE,CAAC;IAE/B,MAAM,EACJ,qBAAqB,EACrB,mCAAmC,EACnC,UAAU,EACX,GAAG,KAAK,CAAC;IAEV,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAC9B,OAAO;YACL,SAAS,EAAE,IAAI;YACf,UAAU,EAAE,CAAC;YACb,QAAQ,EAAE,GAAG;YACb,
|
|
1
|
+
{"version":3,"file":"EntitiyTimeLine.js","sourceRoot":"","sources":["../../../../../src/udp/pages/UdpMaintenanceEnginePage/components/EntitiyTimeLine.jsx"],"names":[],"mappings":"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"}
|
|
@@ -20,11 +20,6 @@ const EntityTimeLine = (props) => {
|
|
|
20
20
|
eagerLoad: true,
|
|
21
21
|
pageNumber: 0,
|
|
22
22
|
pageSize: 100,
|
|
23
|
-
filterElements: [{
|
|
24
|
-
searchField: "domain",
|
|
25
|
-
searchValue: "Univerus.Unity.Uem.Domain.Models.ApiUrlBase",
|
|
26
|
-
searchOperator: "="
|
|
27
|
-
}],
|
|
28
23
|
orderElements: [{
|
|
29
24
|
sortColumn: "createdOn",
|
|
30
25
|
sortDirection: "desc"
|
|
@@ -41,7 +36,7 @@ const EntityTimeLine = (props) => {
|
|
|
41
36
|
};
|
|
42
37
|
$[1] = t1;
|
|
43
38
|
} else t1 = $[1];
|
|
44
|
-
const [t2, fetchEntityHistory] = useAxiosMutate(ConfigService.
|
|
39
|
+
const [t2, fetchEntityHistory] = useAxiosMutate(ConfigService.productV1ApiUrl, "UdpAuditEvent/search", t1);
|
|
45
40
|
const { data: entityHistory, loading: entityHistoryLoading } = t2;
|
|
46
41
|
let t3;
|
|
47
42
|
if ($[2] !== setOpenCompareDomainAuditsSidesheet || $[3] !== setSelectedAuditEvent) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntitiyTimeLine.mjs","names":["React","useEffect","useMemo","useCallback","EntityTimeLineItem","useAxiosMutate","ConfigService","UdpTimeline","EmptyStateDisplay","PageLoading","formatDate","useTranslation","UdpCard","EntityTimeLine","props","$","_c","t","setSelectedAuditEvent","setOpenCompareDomainAuditsSidesheet","entityData","t0","Symbol","for","eagerLoad","pageNumber","pageSize","
|
|
1
|
+
{"version":3,"file":"EntitiyTimeLine.mjs","names":["React","useEffect","useMemo","useCallback","EntityTimeLineItem","useAxiosMutate","ConfigService","UdpTimeline","EmptyStateDisplay","PageLoading","formatDate","useTranslation","UdpCard","EntityTimeLine","props","$","_c","t","setSelectedAuditEvent","setOpenCompareDomainAuditsSidesheet","entityData","t0","Symbol","for","eagerLoad","pageNumber","pageSize","orderElements","sortColumn","sortDirection","searchObj","t1","method","data","t2","fetchEntityHistory","productV1ApiUrl","entityHistory","loading","entityHistoryLoading","t3","domainHistory","handleOnClick","t4","businessObjectKey","entityBusinessObjectKey","filterElems","searchField","searchOperator","searchValue","filterElements","t5","t6","pageList","length","map","item","id","udpAuditEventUdpAuditEventType","name","userDisplayName","createdOn","defaultValue","t7"],"sources":["../../../../../src/udp/pages/UdpMaintenanceEnginePage/components/EntitiyTimeLine.jsx"],"sourcesContent":["import React, { useEffect, useMemo, useCallback } from 'react';\nimport { EntityTimeLineItem } from './EntityTimeLineItem';\nimport { useAxiosMutate } from '../../../../utilities';\nimport { ConfigService } from '../../../../configService';\nimport { UdpTimeline } from '../../../../UI/timeline';\nimport { EmptyStateDisplay, PageLoading } from '../../../../UI';\nimport { formatDate } from '../../../../UI/widgets/utils/dateUtils';\nimport { useTranslation } from 'react-i18next';\nimport { UdpCard } from '../../../../UI/fluent-web-components';\n\nconst EntityTimeLine = (props) => {\n const { t } = useTranslation();\n\n const {\n setSelectedAuditEvent,\n setOpenCompareDomainAuditsSidesheet,\n entityData\n } = props;\n\n const searchObj = useMemo(() => {\n return {\n eagerLoad: true,\n pageNumber: 0,\n pageSize: 100,\n orderElements: [\n {\n sortColumn: 'createdOn',\n sortDirection: 'desc'\n }\n ]\n };\n }, []);\n\n const [\n { data: entityHistory, loading: entityHistoryLoading },\n fetchEntityHistory\n ] = useAxiosMutate(ConfigService.productV1ApiUrl, 'UdpAuditEvent/search', {\n method: 'post',\n data: searchObj\n });\n\n const handleOnClick = useCallback(\n (domainHistory) => {\n setSelectedAuditEvent(domainHistory);\n setOpenCompareDomainAuditsSidesheet(true);\n },\n [setSelectedAuditEvent, setOpenCompareDomainAuditsSidesheet]\n );\n\n useEffect(() => {\n const entityBusinessObjectKey = entityData?.businessObjectKey;\n if (!entityBusinessObjectKey) return;\n\n const filterElems = [\n {\n searchField: 'EntityBusinessKey',\n searchOperator: '=',\n searchValue: entityBusinessObjectKey\n }\n ];\n fetchEntityHistory({\n data: {\n ...searchObj,\n filterElements: filterElems\n }\n });\n }, [fetchEntityHistory, searchObj, entityData]);\n\n return (\n <UdpCard>\n <UdpTimeline>\n {entityHistoryLoading ? (\n <PageLoading />\n ) : entityHistory?.pageList?.length > 0 ? (\n entityHistory?.pageList?.map((item) => {\n return (\n <EntityTimeLineItem\n key={item?.id}\n item={item}\n title={item?.udpAuditEventUdpAuditEventType?.name}\n description={item?.userDisplayName}\n date={formatDate(item?.createdOn, 'dd/mm/yyyy')}\n onClick={handleOnClick}\n />\n );\n })\n ) : (\n <EmptyStateDisplay\n primaryText={t('maintenanceEngine.timeline.empty', {\n defaultValue: 'No Audit History'\n })}\n />\n )}\n </UdpTimeline>\n </UdpCard>\n );\n};\n\nexport default EntityTimeLine;\n"],"mappings":"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"}
|
|
@@ -17,9 +17,8 @@ import { TranslationScopeEnums } from '../../../enums/translationEnums';
|
|
|
17
17
|
*
|
|
18
18
|
* @param {object} [options]
|
|
19
19
|
* @param {string} [options.baseUrl]
|
|
20
|
-
* Base API URL of the backend hosting the generated translation stack
|
|
21
|
-
* ConfigService.
|
|
22
|
-
* ConfigService.productV1ApiUrl.
|
|
20
|
+
* Base API URL of the backend hosting the generated translation stack.
|
|
21
|
+
* Defaults to ConfigService.productV1ApiUrl, the host product's own API.
|
|
23
22
|
*/
|
|
24
23
|
export declare const useTranslationsAdmin: ({ baseUrl }?: {
|
|
25
24
|
baseUrl?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTranslationsAdmin.d.ts","sourceRoot":"","sources":["../../../../src/udp/pages/UdpTranslationsPage/useTranslationsAdmin.js"],"names":[],"mappings":"AAMA,OAAO,EACL,qBAAqB,EAEtB,MAAM,iCAAiC,CAAC;AAEzC
|
|
1
|
+
{"version":3,"file":"useTranslationsAdmin.d.ts","sourceRoot":"","sources":["../../../../src/udp/pages/UdpTranslationsPage/useTranslationsAdmin.js"],"names":[],"mappings":"AAMA,OAAO,EACL,qBAAqB,EAEtB,MAAM,iCAAiC,CAAC;AAEzC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwVhC,CAAC"}
|
|
@@ -23,9 +23,8 @@ import { TranslationScopeEnums, DEFAULT_TRANSLATION_BRAND } from '../../../enums
|
|
|
23
23
|
*
|
|
24
24
|
* @param {object} [options]
|
|
25
25
|
* @param {string} [options.baseUrl]
|
|
26
|
-
* Base API URL of the backend hosting the generated translation stack
|
|
27
|
-
* ConfigService.
|
|
28
|
-
* ConfigService.productV1ApiUrl.
|
|
26
|
+
* Base API URL of the backend hosting the generated translation stack.
|
|
27
|
+
* Defaults to ConfigService.productV1ApiUrl, the host product's own API.
|
|
29
28
|
*/
|
|
30
29
|
export const useTranslationsAdmin = ({ baseUrl } = {}) => {
|
|
31
30
|
var _a, _b;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTranslationsAdmin.js","sourceRoot":"","sources":["../../../../src/udp/pages/UdpTranslationsPage/useTranslationsAdmin.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EACL,qBAAqB,EACrB,yBAAyB,EAC1B,MAAM,iCAAiC,CAAC;AAEzC
|
|
1
|
+
{"version":3,"file":"useTranslationsAdmin.js","sourceRoot":"","sources":["../../../../src/udp/pages/UdpTranslationsPage/useTranslationsAdmin.js"],"names":[],"mappings":"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"}
|
|
@@ -24,9 +24,8 @@ import { useTranslation } from "react-i18next";
|
|
|
24
24
|
*
|
|
25
25
|
* @param {object} [options]
|
|
26
26
|
* @param {string} [options.baseUrl]
|
|
27
|
-
* Base API URL of the backend hosting the generated translation stack
|
|
28
|
-
* ConfigService.
|
|
29
|
-
* ConfigService.productV1ApiUrl.
|
|
27
|
+
* Base API URL of the backend hosting the generated translation stack.
|
|
28
|
+
* Defaults to ConfigService.productV1ApiUrl, the host product's own API.
|
|
30
29
|
*/
|
|
31
30
|
const useTranslationsAdmin = ({ baseUrl } = {}) => {
|
|
32
31
|
const { i18n } = useTranslation();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTranslationsAdmin.mjs","names":["useState","useEffect","useCallback","useTranslation","apiMutate","ConfigService","useHandleAxiosSnackbar","useTenant","TranslationScopeEnums","DEFAULT_TRANSLATION_BRAND","useTranslationsAdmin","baseUrl","i18n","t","key","options","handleErrorSnackbar","handleSuccessSnackbar","apiBaseUrl","productV1ApiUrl","tenantId","activeTenant","languages","setLanguages","languagesLoading","setLanguagesLoading","fetchLanguages","response","method","Array","isArray","data","error","console","fetchAdminTranslations","brand","unityUserId","params","URLSearchParams","productId","config","UNITY_PRODUCT_ID","set","toString","defaultValue","fetchLabelTranslations","languageId","label","createTranslation","value","scope","Brand","url","encodeURIComponent","LanguageId","ProductId","Scope","TenantId","Label","Value","status","updateTranslation","translationId","TranslationId","UnityUserId","deleteTranslation","includeOverrides","cascadeParams","suggestTranslations","sourceLanguageCode","content","context","targetLanguageCodes","tenantV2ApiUrl","SourceLanguageCode","Content","Context","TargetLanguageCodes","deleteTranslationOverrides","qs"],"sources":["../../../../src/udp/pages/UdpTranslationsPage/useTranslationsAdmin.js"],"sourcesContent":["import { useState, useEffect, useCallback } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { apiMutate } from '../../../utilities/useAxiosMutate';\nimport { ConfigService } from '../../../configService';\nimport { useHandleAxiosSnackbar } from '../../../utilities/apiHelpers';\nimport { useTenant } from '../../../utilities/tenant';\nimport {\n TranslationScopeEnums,\n DEFAULT_TRANSLATION_BRAND\n} from '../../../enums/translationEnums';\n\n/**\n * Data hook for the Translation admin page.\n *\n * Talks to the generated UdpTranslation/UdpLanguage controllers on whichever\n * backend hosts the generated translation stack (translations are generated\n * into each application's own backend, not centralized in the Unity tenant\n * service):\n * GET UdpLanguage -> List<UdpLanguage> (base GetAll)\n * POST UdpTranslation/language -> bool (false => label already exists for that language)\n * POST UdpTranslation/suggest -> [{ code, value }] (AI-gateway proxy)\n * PATCH UdpTranslation/language/{id} -> bool (false => not found / conflicting label)\n * DELETE UdpTranslation/language/{id} -> bool\n *\n * Note: system translations are created with a null UnityUserId, which is the\n * default when the query param is omitted.\n *\n * @param {object} [options]\n * @param {string} [options.baseUrl]\n * Base API URL of the backend hosting the generated translation stack, e.g.\n * ConfigService.uemV1ApiUrl for UEM or the Unity Client's API. Defaults to\n * ConfigService.productV1ApiUrl.\n */\nexport const useTranslationsAdmin = ({ baseUrl } = {}) => {\n // `i18n` (the singleton), NOT the hook's `t`: `t` is rebound on every\n // language change, and including it in the fetch callbacks' deps made those\n // callbacks - and the page effect that depends on them - re-run, refetching\n // the whole grid on every language switch. These messages are resolved\n // imperatively at call time, so i18n.t is both stable and always current.\n const { i18n } = useTranslation();\n // Stable across renders (i18n is the singleton), so callbacks that use it for\n // messages keep their identity while still resolving the current language.\n const t = useCallback((key, options) => i18n.t(key, options), [i18n]);\n const { handleErrorSnackbar, handleSuccessSnackbar } =\n useHandleAxiosSnackbar();\n\n const apiBaseUrl = baseUrl || ConfigService.productV1ApiUrl;\n\n // Active tenant context: Tenant (Scope = 2) and User (Scope = 3) rows are\n // tenant-scoped (CK_Translation_TenantId). Mutations stamp it; fetches and\n // cascades stay inside the active tenant.\n const tenantId = useTenant()?.activeTenant?.tenantId ?? null;\n\n const [languages, setLanguages] = useState([]);\n const [languagesLoading, setLanguagesLoading] = useState(false);\n\n const fetchLanguages = useCallback(async () => {\n setLanguagesLoading(true);\n try {\n const response = await apiMutate(apiBaseUrl, 'UdpLanguage', {\n method: 'get'\n });\n setLanguages(Array.isArray(response?.data) ? response.data : []);\n } catch (error) {\n // No error toast: an empty language list is a self-explanatory state on\n // the page (nothing to create against) and transient failures would\n // otherwise toast on every mount. Log for diagnosis and treat as empty\n // (\"no languages yet\" 404s land here too).\n console.error('Failed to load languages', error);\n setLanguages([]);\n } finally {\n setLanguagesLoading(false);\n }\n }, [apiBaseUrl]);\n\n useEffect(() => {\n fetchLanguages();\n }, [fetchLanguages]);\n\n /**\n * Admin listing: every tier - Product, the brand's rows, Tenant, and the\n * calling user's own User rows - across all languages. The page consolidates\n * by (languageId, label): lowest tier present = the entry's base.\n */\n const fetchAdminTranslations = useCallback(\n async ({ brand = DEFAULT_TRANSLATION_BRAND, unityUserId = null } = {}) => {\n try {\n const params = new URLSearchParams({\n productId: ConfigService.config.UNITY_PRODUCT_ID,\n brand\n });\n if (unityUserId) params.set('unityUserId', unityUserId);\n if (tenantId) params.set('tenantId', tenantId);\n const response = await apiMutate(\n apiBaseUrl,\n `UdpTranslation/admin?${params.toString()}`,\n { method: 'get' }\n );\n return Array.isArray(response?.data) ? response.data : [];\n } catch (error) {\n handleErrorSnackbar(\n error,\n t('translations.messages.loadFailed', {\n defaultValue: 'Failed to load translations'\n })\n );\n return [];\n }\n },\n [apiBaseUrl, tenantId, handleErrorSnackbar, t]\n );\n\n /**\n * All tiers for one label+language: Product row, the brand's row, the Tenant\n * row, and the calling user's own override. Feeds the override sidesheet tabs.\n */\n const fetchLabelTranslations = useCallback(\n async ({\n languageId,\n label,\n brand = DEFAULT_TRANSLATION_BRAND,\n unityUserId = null\n }) => {\n try {\n const params = new URLSearchParams({\n languageId,\n productId: ConfigService.config.UNITY_PRODUCT_ID,\n label,\n brand\n });\n if (unityUserId) params.set('unityUserId', unityUserId);\n if (tenantId) params.set('tenantId', tenantId);\n const response = await apiMutate(\n apiBaseUrl,\n `UdpTranslation/label?${params.toString()}`,\n { method: 'get' }\n );\n return Array.isArray(response?.data) ? response.data : [];\n } catch (error) {\n handleErrorSnackbar(\n error,\n t('translations.messages.labelOverridesLoadFailed', {\n defaultValue: 'Failed to load label overrides'\n })\n );\n return [];\n }\n },\n [apiBaseUrl, tenantId, handleErrorSnackbar, t]\n );\n\n /**\n * Create one translation row (a single language/label/value).\n * Returns 'created' | 'duplicate' | 'error' so callers can aggregate a\n * multi-language create without a toast per row.\n */\n const createTranslation = useCallback(\n async ({\n languageId,\n label,\n value,\n unityUserId = null,\n scope = TranslationScopeEnums.Brand,\n brand = DEFAULT_TRANSLATION_BRAND\n }) => {\n try {\n // A null unityUserId creates a Brand (scope 1, the default) or Tenant\n // (scope 2) translation; a non-null value creates a personal override.\n // Product rows (scope 0) can only be seeded by migration scripts.\n const url = unityUserId\n ? `UdpTranslation/language?unityUserId=${encodeURIComponent(unityUserId)}`\n : 'UdpTranslation/language';\n const response = await apiMutate(\n apiBaseUrl,\n url,\n { method: 'post' },\n {\n data: {\n LanguageId: languageId,\n ProductId: ConfigService.config.UNITY_PRODUCT_ID,\n Scope: scope,\n Brand: brand,\n TenantId: tenantId,\n Label: label,\n Value: value\n }\n }\n );\n // The route returns 200 + `true` on success and 400 when the label already exists.\n return response?.data === true ? 'created' : 'duplicate';\n } catch (error) {\n if (error?.response?.status === 400) {\n return 'duplicate';\n }\n return 'error';\n }\n },\n [apiBaseUrl, tenantId]\n );\n\n const updateTranslation = useCallback(\n async ({ translationId, languageId, label, value, unityUserId = null }) => {\n try {\n const response = await apiMutate(\n apiBaseUrl,\n `UdpTranslation/language/${translationId}`,\n { method: 'patch' },\n {\n data: {\n TranslationId: translationId,\n LanguageId: languageId,\n Label: label,\n Value: value,\n UnityUserId: unityUserId,\n TenantId: tenantId\n }\n }\n );\n if (response?.data === true) {\n handleSuccessSnackbar(\n t('translations.messages.updated', {\n defaultValue: 'Translation updated'\n })\n );\n return true;\n }\n handleErrorSnackbar(\n null,\n t('translations.messages.updateConflict', {\n defaultValue:\n 'Could not update translation (not found or duplicate label)'\n })\n );\n return false;\n } catch (error) {\n handleErrorSnackbar(\n error,\n t('translations.messages.updateFailed', {\n defaultValue: 'Failed to update translation'\n })\n );\n return false;\n }\n },\n [apiBaseUrl, tenantId, handleErrorSnackbar, handleSuccessSnackbar, t]\n );\n\n const deleteTranslation = useCallback(\n async (translationId, { includeOverrides = false } = {}) => {\n try {\n // ALWAYS the custom route (UdpTranslation/language/{id}): it is the only\n // route with the includeOverrides parameter - the base CRUD route\n // (UdpTranslation/{id}) silently ignores unknown query params and would\n // strand the overrides on a cascade. The cascade stays inside the\n // active tenant for tenant-scoped tiers.\n const cascadeParams = new URLSearchParams({ includeOverrides: 'true' });\n if (tenantId) cascadeParams.set('tenantId', tenantId);\n const url = includeOverrides\n ? `UdpTranslation/language/${translationId}?${cascadeParams.toString()}`\n : `UdpTranslation/${translationId}`;\n await apiMutate(apiBaseUrl, url, { method: 'delete' });\n handleSuccessSnackbar(\n includeOverrides\n ? t('translations.messages.deletedWithOverrides', {\n defaultValue: 'Translation and overrides deleted'\n })\n : t('translations.messages.deleted', {\n defaultValue: 'Translation deleted'\n })\n );\n return true;\n } catch (error) {\n handleErrorSnackbar(\n error,\n t('translations.messages.deleteFailed', {\n defaultValue: 'Failed to delete translation'\n })\n );\n return false;\n }\n },\n [apiBaseUrl, tenantId, handleErrorSnackbar, handleSuccessSnackbar, t]\n );\n\n /**\n * AI translation suggestions via the Tenants v2 ai-gateway proxy\n * (POST UdpTranslation/suggest). Translates `content` from the source\n * language into the target languages (all other DB languages when\n * targetLanguageCodes is omitted). Languages are addressed by CODE\n * (\"en\", \"fr-CA\") - languageId GUIDs differ per database, codes don't.\n * Returns [{ code, value }], or null on failure (after toasting the\n * error); match results by code.\n */\n const suggestTranslations = useCallback(\n async ({\n sourceLanguageCode,\n content,\n context = null,\n targetLanguageCodes = null\n }) => {\n try {\n const response = await apiMutate(\n ConfigService.tenantV2ApiUrl,\n 'UdpTranslation/suggest',\n { method: 'post' },\n {\n data: {\n SourceLanguageCode: sourceLanguageCode,\n ProductId: ConfigService.config.UNITY_PRODUCT_ID,\n Content: content,\n Context: context,\n TargetLanguageCodes: targetLanguageCodes\n }\n }\n );\n return Array.isArray(response?.data) ? response.data : [];\n } catch (error) {\n handleErrorSnackbar(\n error,\n t('translations.messages.suggestFailed', {\n defaultValue: 'Failed to suggest translations'\n })\n );\n return null;\n }\n },\n [handleErrorSnackbar, t]\n );\n\n /**\n * Removes every override ABOVE the row's tier (including other users' rows)\n * while keeping the row itself - \"delete all overrides\" for product entries.\n */\n const deleteTranslationOverrides = useCallback(\n async (translationId) => {\n try {\n const qs = tenantId ? `?tenantId=${encodeURIComponent(tenantId)}` : '';\n // The overrides route lives under the language segment\n // (language/{id}/overrides), matching the generated controller.\n await apiMutate(\n apiBaseUrl,\n `UdpTranslation/language/${translationId}/overrides${qs}`,\n { method: 'delete' }\n );\n handleSuccessSnackbar(\n t('translations.messages.overridesDeleted', {\n defaultValue: 'Overrides deleted'\n })\n );\n return true;\n } catch (error) {\n handleErrorSnackbar(\n error,\n t('translations.messages.overridesDeleteFailed', {\n defaultValue: 'Failed to delete overrides'\n })\n );\n return false;\n }\n },\n [apiBaseUrl, tenantId, handleErrorSnackbar, handleSuccessSnackbar, t]\n );\n\n return {\n languages,\n languagesLoading,\n fetchLanguages,\n fetchAdminTranslations,\n fetchLabelTranslations,\n createTranslation,\n updateTranslation,\n deleteTranslation,\n deleteTranslationOverrides,\n suggestTranslations,\n handleSuccessSnackbar,\n handleErrorSnackbar\n };\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useTranslationsAdmin.mjs","names":["useState","useEffect","useCallback","useTranslation","apiMutate","ConfigService","useHandleAxiosSnackbar","useTenant","TranslationScopeEnums","DEFAULT_TRANSLATION_BRAND","useTranslationsAdmin","baseUrl","i18n","t","key","options","handleErrorSnackbar","handleSuccessSnackbar","apiBaseUrl","productV1ApiUrl","tenantId","activeTenant","languages","setLanguages","languagesLoading","setLanguagesLoading","fetchLanguages","response","method","Array","isArray","data","error","console","fetchAdminTranslations","brand","unityUserId","params","URLSearchParams","productId","config","UNITY_PRODUCT_ID","set","toString","defaultValue","fetchLabelTranslations","languageId","label","createTranslation","value","scope","Brand","url","encodeURIComponent","LanguageId","ProductId","Scope","TenantId","Label","Value","status","updateTranslation","translationId","TranslationId","UnityUserId","deleteTranslation","includeOverrides","cascadeParams","suggestTranslations","sourceLanguageCode","content","context","targetLanguageCodes","tenantV2ApiUrl","SourceLanguageCode","Content","Context","TargetLanguageCodes","deleteTranslationOverrides","qs"],"sources":["../../../../src/udp/pages/UdpTranslationsPage/useTranslationsAdmin.js"],"sourcesContent":["import { useState, useEffect, useCallback } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { apiMutate } from '../../../utilities/useAxiosMutate';\nimport { ConfigService } from '../../../configService';\nimport { useHandleAxiosSnackbar } from '../../../utilities/apiHelpers';\nimport { useTenant } from '../../../utilities/tenant';\nimport {\n TranslationScopeEnums,\n DEFAULT_TRANSLATION_BRAND\n} from '../../../enums/translationEnums';\n\n/**\n * Data hook for the Translation admin page.\n *\n * Talks to the generated UdpTranslation/UdpLanguage controllers on whichever\n * backend hosts the generated translation stack (translations are generated\n * into each application's own backend, not centralized in the Unity tenant\n * service):\n * GET UdpLanguage -> List<UdpLanguage> (base GetAll)\n * POST UdpTranslation/language -> bool (false => label already exists for that language)\n * POST UdpTranslation/suggest -> [{ code, value }] (AI-gateway proxy)\n * PATCH UdpTranslation/language/{id} -> bool (false => not found / conflicting label)\n * DELETE UdpTranslation/language/{id} -> bool\n *\n * Note: system translations are created with a null UnityUserId, which is the\n * default when the query param is omitted.\n *\n * @param {object} [options]\n * @param {string} [options.baseUrl]\n * Base API URL of the backend hosting the generated translation stack.\n * Defaults to ConfigService.productV1ApiUrl, the host product's own API.\n */\nexport const useTranslationsAdmin = ({ baseUrl } = {}) => {\n // `i18n` (the singleton), NOT the hook's `t`: `t` is rebound on every\n // language change, and including it in the fetch callbacks' deps made those\n // callbacks - and the page effect that depends on them - re-run, refetching\n // the whole grid on every language switch. These messages are resolved\n // imperatively at call time, so i18n.t is both stable and always current.\n const { i18n } = useTranslation();\n // Stable across renders (i18n is the singleton), so callbacks that use it for\n // messages keep their identity while still resolving the current language.\n const t = useCallback((key, options) => i18n.t(key, options), [i18n]);\n const { handleErrorSnackbar, handleSuccessSnackbar } =\n useHandleAxiosSnackbar();\n\n const apiBaseUrl = baseUrl || ConfigService.productV1ApiUrl;\n\n // Active tenant context: Tenant (Scope = 2) and User (Scope = 3) rows are\n // tenant-scoped (CK_Translation_TenantId). Mutations stamp it; fetches and\n // cascades stay inside the active tenant.\n const tenantId = useTenant()?.activeTenant?.tenantId ?? null;\n\n const [languages, setLanguages] = useState([]);\n const [languagesLoading, setLanguagesLoading] = useState(false);\n\n const fetchLanguages = useCallback(async () => {\n setLanguagesLoading(true);\n try {\n const response = await apiMutate(apiBaseUrl, 'UdpLanguage', {\n method: 'get'\n });\n setLanguages(Array.isArray(response?.data) ? response.data : []);\n } catch (error) {\n // No error toast: an empty language list is a self-explanatory state on\n // the page (nothing to create against) and transient failures would\n // otherwise toast on every mount. Log for diagnosis and treat as empty\n // (\"no languages yet\" 404s land here too).\n console.error('Failed to load languages', error);\n setLanguages([]);\n } finally {\n setLanguagesLoading(false);\n }\n }, [apiBaseUrl]);\n\n useEffect(() => {\n fetchLanguages();\n }, [fetchLanguages]);\n\n /**\n * Admin listing: every tier - Product, the brand's rows, Tenant, and the\n * calling user's own User rows - across all languages. The page consolidates\n * by (languageId, label): lowest tier present = the entry's base.\n */\n const fetchAdminTranslations = useCallback(\n async ({ brand = DEFAULT_TRANSLATION_BRAND, unityUserId = null } = {}) => {\n try {\n const params = new URLSearchParams({\n productId: ConfigService.config.UNITY_PRODUCT_ID,\n brand\n });\n if (unityUserId) params.set('unityUserId', unityUserId);\n if (tenantId) params.set('tenantId', tenantId);\n const response = await apiMutate(\n apiBaseUrl,\n `UdpTranslation/admin?${params.toString()}`,\n { method: 'get' }\n );\n return Array.isArray(response?.data) ? response.data : [];\n } catch (error) {\n handleErrorSnackbar(\n error,\n t('translations.messages.loadFailed', {\n defaultValue: 'Failed to load translations'\n })\n );\n return [];\n }\n },\n [apiBaseUrl, tenantId, handleErrorSnackbar, t]\n );\n\n /**\n * All tiers for one label+language: Product row, the brand's row, the Tenant\n * row, and the calling user's own override. Feeds the override sidesheet tabs.\n */\n const fetchLabelTranslations = useCallback(\n async ({\n languageId,\n label,\n brand = DEFAULT_TRANSLATION_BRAND,\n unityUserId = null\n }) => {\n try {\n const params = new URLSearchParams({\n languageId,\n productId: ConfigService.config.UNITY_PRODUCT_ID,\n label,\n brand\n });\n if (unityUserId) params.set('unityUserId', unityUserId);\n if (tenantId) params.set('tenantId', tenantId);\n const response = await apiMutate(\n apiBaseUrl,\n `UdpTranslation/label?${params.toString()}`,\n { method: 'get' }\n );\n return Array.isArray(response?.data) ? response.data : [];\n } catch (error) {\n handleErrorSnackbar(\n error,\n t('translations.messages.labelOverridesLoadFailed', {\n defaultValue: 'Failed to load label overrides'\n })\n );\n return [];\n }\n },\n [apiBaseUrl, tenantId, handleErrorSnackbar, t]\n );\n\n /**\n * Create one translation row (a single language/label/value).\n * Returns 'created' | 'duplicate' | 'error' so callers can aggregate a\n * multi-language create without a toast per row.\n */\n const createTranslation = useCallback(\n async ({\n languageId,\n label,\n value,\n unityUserId = null,\n scope = TranslationScopeEnums.Brand,\n brand = DEFAULT_TRANSLATION_BRAND\n }) => {\n try {\n // A null unityUserId creates a Brand (scope 1, the default) or Tenant\n // (scope 2) translation; a non-null value creates a personal override.\n // Product rows (scope 0) can only be seeded by migration scripts.\n const url = unityUserId\n ? `UdpTranslation/language?unityUserId=${encodeURIComponent(unityUserId)}`\n : 'UdpTranslation/language';\n const response = await apiMutate(\n apiBaseUrl,\n url,\n { method: 'post' },\n {\n data: {\n LanguageId: languageId,\n ProductId: ConfigService.config.UNITY_PRODUCT_ID,\n Scope: scope,\n Brand: brand,\n TenantId: tenantId,\n Label: label,\n Value: value\n }\n }\n );\n // The route returns 200 + `true` on success and 400 when the label already exists.\n return response?.data === true ? 'created' : 'duplicate';\n } catch (error) {\n if (error?.response?.status === 400) {\n return 'duplicate';\n }\n return 'error';\n }\n },\n [apiBaseUrl, tenantId]\n );\n\n const updateTranslation = useCallback(\n async ({ translationId, languageId, label, value, unityUserId = null }) => {\n try {\n const response = await apiMutate(\n apiBaseUrl,\n `UdpTranslation/language/${translationId}`,\n { method: 'patch' },\n {\n data: {\n TranslationId: translationId,\n LanguageId: languageId,\n Label: label,\n Value: value,\n UnityUserId: unityUserId,\n TenantId: tenantId\n }\n }\n );\n if (response?.data === true) {\n handleSuccessSnackbar(\n t('translations.messages.updated', {\n defaultValue: 'Translation updated'\n })\n );\n return true;\n }\n handleErrorSnackbar(\n null,\n t('translations.messages.updateConflict', {\n defaultValue:\n 'Could not update translation (not found or duplicate label)'\n })\n );\n return false;\n } catch (error) {\n handleErrorSnackbar(\n error,\n t('translations.messages.updateFailed', {\n defaultValue: 'Failed to update translation'\n })\n );\n return false;\n }\n },\n [apiBaseUrl, tenantId, handleErrorSnackbar, handleSuccessSnackbar, t]\n );\n\n const deleteTranslation = useCallback(\n async (translationId, { includeOverrides = false } = {}) => {\n try {\n // ALWAYS the custom route (UdpTranslation/language/{id}): it is the only\n // route with the includeOverrides parameter - the base CRUD route\n // (UdpTranslation/{id}) silently ignores unknown query params and would\n // strand the overrides on a cascade. The cascade stays inside the\n // active tenant for tenant-scoped tiers.\n const cascadeParams = new URLSearchParams({ includeOverrides: 'true' });\n if (tenantId) cascadeParams.set('tenantId', tenantId);\n const url = includeOverrides\n ? `UdpTranslation/language/${translationId}?${cascadeParams.toString()}`\n : `UdpTranslation/${translationId}`;\n await apiMutate(apiBaseUrl, url, { method: 'delete' });\n handleSuccessSnackbar(\n includeOverrides\n ? t('translations.messages.deletedWithOverrides', {\n defaultValue: 'Translation and overrides deleted'\n })\n : t('translations.messages.deleted', {\n defaultValue: 'Translation deleted'\n })\n );\n return true;\n } catch (error) {\n handleErrorSnackbar(\n error,\n t('translations.messages.deleteFailed', {\n defaultValue: 'Failed to delete translation'\n })\n );\n return false;\n }\n },\n [apiBaseUrl, tenantId, handleErrorSnackbar, handleSuccessSnackbar, t]\n );\n\n /**\n * AI translation suggestions via the Tenants v2 ai-gateway proxy\n * (POST UdpTranslation/suggest). Translates `content` from the source\n * language into the target languages (all other DB languages when\n * targetLanguageCodes is omitted). Languages are addressed by CODE\n * (\"en\", \"fr-CA\") - languageId GUIDs differ per database, codes don't.\n * Returns [{ code, value }], or null on failure (after toasting the\n * error); match results by code.\n */\n const suggestTranslations = useCallback(\n async ({\n sourceLanguageCode,\n content,\n context = null,\n targetLanguageCodes = null\n }) => {\n try {\n const response = await apiMutate(\n ConfigService.tenantV2ApiUrl,\n 'UdpTranslation/suggest',\n { method: 'post' },\n {\n data: {\n SourceLanguageCode: sourceLanguageCode,\n ProductId: ConfigService.config.UNITY_PRODUCT_ID,\n Content: content,\n Context: context,\n TargetLanguageCodes: targetLanguageCodes\n }\n }\n );\n return Array.isArray(response?.data) ? response.data : [];\n } catch (error) {\n handleErrorSnackbar(\n error,\n t('translations.messages.suggestFailed', {\n defaultValue: 'Failed to suggest translations'\n })\n );\n return null;\n }\n },\n [handleErrorSnackbar, t]\n );\n\n /**\n * Removes every override ABOVE the row's tier (including other users' rows)\n * while keeping the row itself - \"delete all overrides\" for product entries.\n */\n const deleteTranslationOverrides = useCallback(\n async (translationId) => {\n try {\n const qs = tenantId ? `?tenantId=${encodeURIComponent(tenantId)}` : '';\n // The overrides route lives under the language segment\n // (language/{id}/overrides), matching the generated controller.\n await apiMutate(\n apiBaseUrl,\n `UdpTranslation/language/${translationId}/overrides${qs}`,\n { method: 'delete' }\n );\n handleSuccessSnackbar(\n t('translations.messages.overridesDeleted', {\n defaultValue: 'Overrides deleted'\n })\n );\n return true;\n } catch (error) {\n handleErrorSnackbar(\n error,\n t('translations.messages.overridesDeleteFailed', {\n defaultValue: 'Failed to delete overrides'\n })\n );\n return false;\n }\n },\n [apiBaseUrl, tenantId, handleErrorSnackbar, handleSuccessSnackbar, t]\n );\n\n return {\n languages,\n languagesLoading,\n fetchLanguages,\n fetchAdminTranslations,\n fetchLabelTranslations,\n createTranslation,\n updateTranslation,\n deleteTranslation,\n deleteTranslationOverrides,\n suggestTranslations,\n handleSuccessSnackbar,\n handleErrorSnackbar\n };\n};\n"],"mappings":"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"}
|