{"version":3,"file":"VirtualBrowser.mjs","names":["React","useMemo","useState","useCallback","useEffect","PrimaryActionButton","AmbientGridTemplate","SideSheet","ActionsRenderer","VirtualTableColumnDefs","AddIcon","DeleteIcon","EditIcon","Typography","DateTime","getPathObject","cloneDeep","useTranslation","executeQueryWithParameters","useHandleAxiosSnackbar","useAxiosMutate","useLocation","useUser","useAxiosGet","VirtualTableSidePanel","UdpEnums","useBuildEnvironment","getSanitizedName","useSetLocationState","ConfigService","useSearchParams","$","_c","search","t0","URLSearchParams","VirtualBrowser","props","other","urlSearchParams","location","value","promotedEntity","state","parts","pathname","split","virtualId","id","length","user","buildEnv","isSheetOpen","setSheetOpen","sideSheetWidth","setSideSheetWidth","sideSheetButtonLabel","setSideSheetButtonLabel","otherSideSheetProps","setOtherSideSheetProps","sideSheetOnSubmit","setSideSheetOnSubmit","console","warn","selectedEntity","setSelectedEntity","t","handleErrorSnackbar","handleSuccessSnackbar","setLocationState","closeSheet","entityName","has","get","createApiMethodPageId","unityBaseCreateMethod","pageId","data","tpacb","integrationV1ApiUrl","currentTenantId","config","UNITY_PRODUCT_ID","promotedMethodEntities","apiCatalogId","entityData","loading","isLoading","fetchEntityData","unityBaseGetDataMethod","apiMethodId","method","tableDescription","fetchTableDescription","unityBaseDescribeMethod","constructVirtualValuesForRequest","values","bodyArr","forEach","column","valueExist","name","toLowerCase","Udp_Lookup","push","lookupColumnId","handleOnCreate","unityBaseVirtualCreateMethod","requestArr","requestBody","response","catch","res","message","status","defaultValue","queryData","handleOnUpdate","unityBaseVirtualUpdateMethod","primaryKeyValues","udpVirtualRowId","pathObject","pathParameters","Array","isArray","po","Object","keys","handleOnDelete","unityBaseVirtualDeleteMethod","actionList","title","icon","onClick","opens","view","component","properties","onUpdate","valuePropName","closeSideSheet","closeSideSheetPropName","isNewEntry","disabled","labelOne","actionTwo","labelTwo","columnDefs","undefined","groupData","map","item","groupItem","field","label","headerName","pab","marginRight","SideOptionList","formatData","formattedEntityData","datetimeFields","reduce","fields","element","type","e","key","find","fromJSDate","Date","toFormat","actionsRenderer"],"sources":["../../../src/maintenanceEngine/virtualBrowser/VirtualBrowser.jsx"],"sourcesContent":["import React, { useMemo, useState, useCallback, useEffect } from 'react';\nimport PrimaryActionButton from '../../UI/inputs/buttons/PrimaryActionButton';\nimport { AmbientGridTemplate } from '../../UI/templates/deprecated/AmbientGridTemplate/AmbientGridTemplate';\nimport { SideSheet } from '../../UI/surfaces/SideSheet';\nimport { ActionsRenderer } from '../../UI/templates/ui/renderers/ActionsRenderer';\nimport { VirtualTableColumnDefs } from './VirtualTableColumnDefs';\nimport { AddIcon, DeleteIcon, EditIcon } from '@fluentui/react-icons';\nimport { Typography } from '@material-ui/core';\nimport { DateTime } from 'luxon';\nimport { getPathObject } from '../../utilities/maintenanceEngine/CrudBrowserUtilities';\nimport { cloneDeep } from 'lodash-es';\nimport { useTranslation } from 'react-i18next';\nimport { executeQueryWithParameters } from '../../udp/utilities/methodUtils';\nimport { useHandleAxiosSnackbar } from '../../utilities/apiHelpers';\nimport { useAxiosMutate } from '../../utilities/useAxiosMutate';\nimport { useLocation } from 'react-router-dom';\nimport { useUser } from '../../utilities/auth/useUser';\nimport { useAxiosGet } from '../../utilities/useAxiosGet';\nimport { VirtualTableSidePanel } from './VirtualTableSidePanel';\nimport { UdpEnums } from '../../enums/unitySystemEnums';\nimport { useBuildEnvironment } from '../../shell/ui/useBuildEnvironment';\nimport { getSanitizedName } from '../../utilities/entities/entityUtilities';\nimport { useSetLocationState } from '../../hooks/useSetLocationState';\nimport { ConfigService } from '../../configService';\n\nconst useSearchParams = () => {\n  const { search } = useLocation();\n  return useMemo(() => new URLSearchParams(search), [search]);\n};\n\nexport const VirtualBrowser = (props) => {\n  const { ...other } = props;\n  const urlSearchParams = useSearchParams();\n  const location = useLocation();\n  const { value, promotedEntity } = location.state || {};\n  const parts = location?.pathname?.split('/');\n  const virtualId = value ? value?.id : '' || parts ? parts[parts.length - 1] : null;\n\n  const user = useUser();\n  const buildEnv = useBuildEnvironment();\n  const [isSheetOpen, setSheetOpen] = useState(false);\n  const [sideSheetWidth, setSideSheetWidth] = useState(600);\n  const [sideSheetButtonLabel, setSideSheetButtonLabel] = useState('');\n  const [otherSideSheetProps, setOtherSideSheetProps] = useState({});\n  const [sideSheetOnSubmit, setSideSheetOnSubmit] = useState(\n    () => () => console.warn('onSubmit not set')\n  );\n  const [selectedEntity, setSelectedEntity] = useState(promotedEntity);\n  const { t } = useTranslation();\n  const { handleErrorSnackbar, handleSuccessSnackbar } = useHandleAxiosSnackbar();\n  const setLocationState = useSetLocationState();\n\n  const closeSheet = useCallback(() => {\n    setSheetOpen(false);\n  }, []);\n\n  const entityName = useMemo(() => {\n    if (selectedEntity) {\n      return selectedEntity.entityName || '';\n    } else {\n      return urlSearchParams.has('entityName') === true ? urlSearchParams.get('entityName') : '';\n    }\n  }, [selectedEntity, urlSearchParams]);\n\n  const createApiMethodPageId = useMemo(() => {\n    return selectedEntity?.unityBaseCreateMethod?.pageId;\n  }, [selectedEntity]);\n\n  const [{ data: tpacb }] = useAxiosGet(\n    ConfigService.integrationV1ApiUrl,\n    `tenantProductApiCatalogBase/tenant/${user?.currentTenantId}/product/${ConfigService.config.UNITY_PRODUCT_ID}`,\n    {},\n    !!!user || !!promotedEntity,\n    false\n  );\n\n  const [{ data: promotedMethodEntities }] = useAxiosGet(\n    ConfigService.integrationV1ApiUrl,\n    `apicatalog/${tpacb?.apiCatalogId}/promotedMethodEntities/${entityName}/product/${ConfigService.config.UNITY_PRODUCT_ID}`,\n    {},\n    !!!tpacb || !!!user || !!!entityName,\n    false\n  );\n\n  // Get all rows of an entity\n  const [{ data: entityData, loading: isLoading }, fetchEntityData] = useAxiosMutate(\n    ConfigService.integrationV1ApiUrl,\n    `apimethod/executeQueryWithParameters/${selectedEntity?.unityBaseGetDataMethod?.apiMethodId}`,\n    {\n      method: 'post',\n    }\n  );\n\n  // Get all rows of an entity\n  const [{ data: tableDescription }, fetchTableDescription] =\n    useAxiosMutate(\n      ConfigService.integrationV1ApiUrl,\n      `apimethod/executeQueryWithParameters/${selectedEntity?.unityBaseDescribeMethod?.apiMethodId}`,\n      {\n        method: 'post',\n      }\n    );\n\n  const constructVirtualValuesForRequest = useCallback(\n    (values) => {\n      if (!tableDescription) {\n        return [];\n      }\n      const bodyArr = [];\n      tableDescription.forEach((column) => {\n        const valueExist = typeof values[column.name] == 'boolean' || values[column.name];\n        if (column.name || valueExist) {\n          switch (getSanitizedName(entityName?.toLowerCase())) {\n            case UdpEnums.Udp_Lookup.toLowerCase():\n              bodyArr.push({\n                lookupColumnId: column.id,\n                value: values[column.name],\n              });\n              break;\n            default:\n          }\n        }\n      });\n      return bodyArr;\n    },\n    [tableDescription, entityName]\n  );\n\n  const handleOnCreate = useCallback(\n    async (values) => {\n      if (selectedEntity?.unityBaseVirtualCreateMethod) {\n        const requestArr = constructVirtualValuesForRequest(values);\n        const data = { requestBody: requestArr, id: virtualId };\n        const response = await executeQueryWithParameters(\n          { data },\n          selectedEntity.unityBaseVirtualCreateMethod.apiMethodId\n        ).catch((res) => {\n          handleErrorSnackbar(res.message);\n        });\n\n        if (response?.status === 200) {\n          handleSuccessSnackbar(\n            t('maintenance.virtualBrowser.rowCreated', {\n              defaultValue: 'Row has been created',\n            })\n          );\n          const queryData = { id: virtualId };\n          fetchEntityData({ data: queryData });\n        }\n      }\n    },\n    [\n      selectedEntity,\n      t,\n      fetchEntityData,\n      handleErrorSnackbar,\n      handleSuccessSnackbar,\n      virtualId,\n      constructVirtualValuesForRequest,\n    ]\n  );\n\n  const handleOnUpdate = useCallback(\n    async (values) => {\n      if (selectedEntity?.unityBaseVirtualUpdateMethod) {\n        // Get primary key value object using path parameters and merge with data\n        const primaryKeyValues = [virtualId, values.udpVirtualRowId];\n        const pathObject = getPathObject(\n          selectedEntity.unityBaseVirtualUpdateMethod.pathParameters,\n          primaryKeyValues\n        );\n        const requestArr = constructVirtualValuesForRequest(values);\n        let data = { requestBody: requestArr };\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: requestArr };\n        }\n\n        const response = await executeQueryWithParameters(\n          { data },\n          selectedEntity.unityBaseVirtualUpdateMethod.apiMethodId\n        ).catch((res) => {\n          handleErrorSnackbar(res.message);\n        });\n\n        if (response?.status === 200) {\n          handleSuccessSnackbar(\n            t('maintenance.virtualBrowser.rowUpdated', {\n              defaultValue: 'Row has been updated',\n            })\n          );\n          const queryData = { id: virtualId };\n          fetchEntityData({ data: queryData });\n        }\n      }\n    },\n    [\n      selectedEntity,\n      t,\n      fetchEntityData,\n      handleErrorSnackbar,\n      handleSuccessSnackbar,\n      virtualId,\n      constructVirtualValuesForRequest,\n    ]\n  );\n\n  const handleOnDelete = useCallback(\n    async (value) => {\n      if (selectedEntity?.unityBaseVirtualDeleteMethod) {\n        // Get primary key value object using path parameters and merge with data\n        const primaryKeyValues = [virtualId, value.udpVirtualRowId];\n        const pathObject = getPathObject(\n          selectedEntity?.unityBaseVirtualDeleteMethod.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 executeQueryWithParameters(\n          { data },\n          selectedEntity.unityBaseVirtualDeleteMethod.apiMethodId\n        ).catch((res) => {\n          handleErrorSnackbar(res.message);\n        });\n\n        if (response?.status === 200) {\n          handleSuccessSnackbar(\n            t('maintenance.virtualBrowser.rowDeleted', {\n              defaultValue: 'Row has been deleted',\n            })\n          );\n          const queryData = { id: virtualId };\n          fetchEntityData({ data: queryData });\n        }\n      }\n    },\n    [selectedEntity, t, fetchEntityData, handleErrorSnackbar, handleSuccessSnackbar, virtualId]\n  );\n\n  const actionList = useMemo(() => {\n    if (!selectedEntity) {\n      return;\n    }\n\n    return [\n      {\n        id: 1, // Must be unique\n        title: selectedEntity?.unityBaseVirtualUpdateMethod\n          ? t('common.edit', { defaultValue: 'Edit' })\n          : t('maintenance.virtualBrowser.editMethodNotAccessible', {\n              defaultValue: 'Edit Method Not Accessible',\n            }),\n        icon: EditIcon,\n        onClick: null,\n        opens: 'sideSheet',\n        view: {\n          component: VirtualTableSidePanel,\n          properties: {\n            tableDescription: tableDescription,\n            onUpdate: handleOnUpdate,\n            valuePropName: 'value',\n            closeSideSheet: null,\n            closeSideSheetPropName: 'closeSideSheet',\n            pageId: selectedEntity?.unityBaseVirtualUpdateMethod?.pageId,\n            isNewEntry: false,\n          },\n        },\n        disabled: !!!selectedEntity?.unityBaseVirtualUpdateMethod,\n      },\n      {\n        id: 2, // Must be unique\n        title: selectedEntity?.unityBaseVirtualDeleteMethod\n          ? t('common.delete', { defaultValue: 'Delete' })\n          : t('maintenance.virtualBrowser.deleteMethodNotAccessible', {\n              defaultValue: 'Delete Method Not Accessible',\n            }),\n        icon: DeleteIcon,\n        onClick: null,\n        opens: 'dialog',\n        view: {\n          component: null,\n          properties: {\n            title: t('common.delete', { defaultValue: 'Delete' }),\n            message: t('maintenance.virtualBrowser.confirmDeleteRow', {\n              defaultValue: 'Are you sure you want to delete this row?',\n            }),\n            labelOne: t('common.cancel', { defaultValue: 'Cancel' }),\n            actionTwo: handleOnDelete,\n            labelTwo: t('common.confirm', { defaultValue: 'Confirm' }),\n          },\n        },\n        disabled: !!!selectedEntity?.unityBaseVirtualDeleteMethod,\n      },\n    ];\n  }, [selectedEntity, t, handleOnUpdate, handleOnDelete, tableDescription]);\n\n  const columnDefs = useMemo(() => {\n    if (tableDescription?.length) {\n      return VirtualTableColumnDefs(tableDescription, actionList, undefined, undefined, undefined, t);\n    }\n    return [];\n  }, [actionList, tableDescription]);\n\n  const groupData = useMemo(() => {\n    return columnDefs?.map((item) => {\n      return {\n        groupItem: item.field,\n        label: item.headerName,\n        value: item.field,\n      };\n    });\n  }, [columnDefs]);\n\n  useEffect(() => {\n    if (promotedMethodEntities) {\n      setSelectedEntity(promotedMethodEntities);\n    }\n  }, [promotedMethodEntities]);\n\n  useEffect(() => {\n    if (virtualId) {\n      const queryData = { id: virtualId };\n      if (selectedEntity?.unityBaseGetDataMethod?.apiMethodId) {\n        fetchEntityData({ data: queryData });\n      }\n      if (selectedEntity?.unityBaseDescribeMethod?.apiMethodId) {\n        fetchTableDescription({ data: queryData });\n      }\n    }\n  }, [selectedEntity, fetchEntityData, virtualId, fetchTableDescription]);\n\n  // Setting location state label so that if this page was saved to favorites\n  // we can determine the bread crumb\n  useEffect(() => {\n    setLocationState({\n      label:\n        value?.name ||\n        t('maintenance.virtualBrowser.virtualLookup', {\n          defaultValue: 'Virtual Lookup',\n        }),\n    });\n  }, [setLocationState, t, value]);\n\n  const pab = (\n    <PrimaryActionButton onClick={() => setSheetOpen && setSheetOpen(true)}>\n      <Typography style={{ marginRight: 5 }}>\n        {t('common.add', { defaultValue: 'Add' })}\n      </Typography>\n      <AddIcon />\n    </PrimaryActionButton>\n  );\n\n  const SideOptionList = useMemo(\n    () => (\n      <SideSheet\n        open={isSheetOpen}\n        onClose={closeSheet}\n        title={t('maintenance.virtualBrowser.addNewEntity', {\n          defaultValue: 'Add new {{entityName}}',\n          entityName,\n        })}\n        width={sideSheetWidth}\n        buttonLabel={sideSheetButtonLabel}\n        onSubmit={sideSheetOnSubmit}\n        {...otherSideSheetProps}\n      >\n        <VirtualTableSidePanel\n          onCreate={handleOnCreate}\n          closeSideSheet={closeSheet}\n          pageId={createApiMethodPageId}\n          setSideSheetWidth={setSideSheetWidth}\n          setSideSheetButtonLabel={setSideSheetButtonLabel}\n          setSideSheetOnSubmit={setSideSheetOnSubmit}\n          setSideSheetProps={setOtherSideSheetProps}\n          tableDescription={tableDescription}\n        />\n      </SideSheet>\n    ),\n    [\n      isSheetOpen,\n      closeSheet,\n      entityName,\n      sideSheetWidth,\n      sideSheetButtonLabel,\n      sideSheetOnSubmit,\n      handleOnCreate,\n      createApiMethodPageId,\n      otherSideSheetProps,\n      tableDescription,\n      t,\n    ]\n  );\n\n  const formatData = useCallback(() => {\n    if (entityData?.data && tableDescription) {\n      let formattedEntityData = cloneDeep(entityData?.data);\n\n      //   get list of attributes that are datetime\n      const datetimeFields = tableDescription?.reduce((fields, element) => {\n        if (element?.type === 'datetime') {\n          fields.push(element?.name);\n        }\n        return fields;\n      }, []);\n\n      if (datetimeFields.length) {\n        formattedEntityData.forEach((e) => {\n          Object.keys(e).forEach((key) => {\n            // format all datetime fields\n            if (datetimeFields.find((field) => field === key)) {\n              // LAA UNT-2977: add null check to prevent default date from being added when null\n              if (e[key] === null) return;\n              e[key] = DateTime.fromJSDate(new Date(e[key])).toFormat('yyyy/MM/dd HH:mm:ss');\n            }\n          });\n        });\n      }\n\n      return formattedEntityData;\n    }\n    return [];\n  }, [entityData, tableDescription]);\n\n  return (\n    <>\n      <AmbientGridTemplate\n        title={value?.name || entityData?.name}\n        data={entityData ? formatData(entityData?.data) : []}\n        columnDefs={columnDefs}\n        groupingData={groupData}\n        primaryActionButton={pab}\n        frameworkComponents={{ actionsRenderer: ActionsRenderer }}\n        height={`calc(100vh - ${buildEnv ? '139px' : '114px'})`}\n        disableRowSelection={true}\n        loading={isLoading}\n        {...other}\n      />\n      {SideOptionList}\n    </>\n  );\n};\n\nexport default VirtualBrowser;\n"],"mappings":"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"}