{"version":3,"file":"DataBrowserContainer.mjs","names":["DateTime","findTermByType","cloneDeep","React","useCallback","useEffect","useMemo","useRef","useState","useTranslation","useHistory","SqlFilterOperators","LogicalSearchOperatorEnums","LookupTypeIdEnums","UdpEnums","usePromotedMethodEntity","useQueryExecutors","CrudTableSidePanel","useLookupsStore","executeQueryAdHoc","executeQueryWithParameters","FluentDialog","SideSheet","ClientSideUdpGrid","SearchMethodUdpGrid","useAgGridApi","getSanitizedName","toTitleCase","toUpperFirstChar","getSearchObject","DataBrowserColumnDefs","GRID_ID","DataBrowserContainer","props","entityData","onCreate","onUpdate","onDelete","onLoadInquiryNode","entityAttributes","foreignKeyData","loading","promotedEntity","isServerSide","setGridApi","filterElements","backToConfigPage","queryColumnsData","lookupsMap","other","dialogOpen","setDialogOpen","sideSheetOpenState","setSideSheetOpenState","add","update","sideSheetWidth","setSideSheetWidth","setSideSheetButtonLabel","setOtherSideSheetProps","setSideSheetOnSubmit","console","warn","setFilterChipsArray","searchFilterElements","setSearchFilterElements","entityUdpObjectInfo","setEntityUdpObjectInfo","t","history","gridApi","getCleanData","lookupApiMethodId","state","selectedEntity","setSelectedEntity","gridApiRef","handleSideSheet","type","open","prev","data","udpObjectInfoEntity","entityName","commonEntityName","properties","displayName","createApiMethodPageId","unityBaseCreateMethod","pageId","secondaryActionButtons","actions","push","onClick","label","defaultValue","iconName","tooltip","background","closeDialog","deleteDialogConfig","title","message","actionOne","labelOne","actionTwo","labelTwo","actionList","id","unityBaseUpdateMethod","handleOnClick","e","params","disabled","unityBaseDeleteMethod","opens","obj","view","virtualActions","value","pathname","search","name","checkDisabled","typeId","Lookup","jointActionList","toLowerCase","Udp_Lookup","columnDefs","sideSheetList","closeSheet","width","children","SideOptionList","map","item","index","getLookupResults","lookupToFilterOn","Object","values","find","filterOn","lookupId","lookupResult","formattedData","formattedEntityData","datetimeFields","reduce","defs","element","extendedProperties","childEntity","charAt","slice","length","forEach","keys","key","field","fromJSDate","Date","toFormat","handleChipToggle","chip","filterValue","keyName","updatedSearchFilterElements","chipFilterElement","searchValue","searchField","searchOperator","EQUALS","handleChipUntoggle","setFilterChips","filterChipsArray","lookup","lookupResults","valueName","chipKey","lookupMapKeys","i","numRows","filter","chipData","onToggle","onUntoggle","executeSearchForEntityUdpObjectInfo","apiMethodId","sanitizedEntityName","requestObj","response","status","pageList","unityBaseSearchMethod","handleGridApiCallback","api","current","gridHeaderConfig","primaryActionButton","gridFunctions","gridOptions","pagination","paginationPageSize","searchMethodConfig","searchObject","And","customSearchObject"],"sources":["../../src/dataBrowser/DataBrowserContainer.jsx"],"sourcesContent":["import { DateTime } from 'luxon';\nimport { findTermByType } from '../utilities/maintenanceEngine/CrudBrowserUtilities';\nimport { cloneDeep } from 'lodash-es';\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useHistory } from 'react-router-dom';\nimport { SqlFilterOperators } from '../enums/aggridEnums';\nimport {\n  LogicalSearchOperatorEnums,\n  LookupTypeIdEnums,\n  UdpEnums\n} from '../enums/unitySystemEnums';\nimport { usePromotedMethodEntity } from '../hooks/usePromotedMethodEntity';\nimport { useQueryExecutors } from '../hooks/useQueryExecutors';\nimport { CrudTableSidePanel } from '../maintenanceEngine/crudBrowser/CrudTableSidePanel';\nimport { useLookupsStore } from '../stores/lookupsStore';\nimport { executeQueryAdHoc, executeQueryWithParameters } from '../udp/utilities/methodUtils';\nimport { FluentDialog } from '../UI/feedback';\nimport { SideSheet } from '../UI/surfaces/SideSheet';\nimport {\n  ClientSideUdpGrid,\n  SearchMethodUdpGrid\n} from '../UI/templates/newGrid';\nimport { useAgGridApi } from '../utilities/aggrid/AgTable';\nimport { getSanitizedName } from '../utilities/entities/entityUtilities';\nimport { toTitleCase, toUpperFirstChar } from '../utilities/input/StringUtilities';\nimport { getSearchObject } from '../utilities/search/SearchUtilities';\nimport { DataBrowserColumnDefs } from './DataBrowserColumnDefs';\n\nconst GRID_ID = '4be3be45-1930-4ab9-b7b7-0c0fa3e30490';\n\nexport const DataBrowserContainer = (props) => {\n  const {\n    entityData,\n    onCreate,\n    onUpdate,\n    onDelete,\n    onLoadInquiryNode,\n    entityAttributes,\n    foreignKeyData,\n    loading,\n    promotedEntity,\n    isServerSide = false,\n    setGridApi,\n    filterElements,\n    backToConfigPage,\n    queryColumnsData,\n    lookupsMap = {},\n    ...other\n  } = props;\n  const [dialogOpen, setDialogOpen] = useState(false);\n  const [sideSheetOpenState, setSideSheetOpenState] = useState({\n    add: false,\n    update: false,\n  });\n  const [sideSheetWidth, setSideSheetWidth] = useState(600);\n  const [, setSideSheetButtonLabel] = useState('');\n  const [, setOtherSideSheetProps] = useState({});\n  const [, setSideSheetOnSubmit] = useState(() => () => console.warn('onSubmit not set'));\n  const [, setFilterChipsArray] = useState([]);\n  const [searchFilterElements, setSearchFilterElements] = useState(filterElements);\n  const [entityUdpObjectInfo, setEntityUdpObjectInfo] = useState(null);\n  const { t } = useTranslation();\n  const history = useHistory();\n  const { gridApi } = useAgGridApi();\n  const { getCleanData } = useQueryExecutors();\n  const lookupApiMethodId = useLookupsStore((state) => state.lookupApiMethodId);\n\n  const [selectedEntity, setSelectedEntity] = useState(null);\n  const gridApiRef = useRef(null);\n\n  const handleSideSheet = useCallback((type, open, selectedEntity) => {\n    setSelectedEntity(selectedEntity);\n    setSideSheetOpenState((prev) => ({\n      ...prev,\n      [type]: open,\n    }));\n  }, []);\n\n  const { data: udpObjectInfoEntity } = usePromotedMethodEntity('udpObjectInfo', true);\n\n  const entityName = useMemo(() => {\n    if (!promotedEntity) return '';\n    return promotedEntity.entityName || '';\n  }, [promotedEntity]);\n\n  const commonEntityName = useMemo(() => {\n    if (!entityName && !entityUdpObjectInfo) return '';\n    return toTitleCase(\n      entityUdpObjectInfo?.properties?.displayName || getSanitizedName(entityName)\n    );\n  }, [entityName, entityUdpObjectInfo]);\n\n  const createApiMethodPageId = useMemo(() => {\n    return promotedEntity?.unityBaseCreateMethod?.pageId;\n  }, [promotedEntity]);\n\n  const secondaryActionButtons = useMemo(() => {\n    const actions = [];\n    if (backToConfigPage) {\n      actions.push({\n        onClick: backToConfigPage,\n        label: t('dataBrowser.header.backToConfig', { defaultValue: 'Back To Config' }),\n        iconName: 'settings',\n        tooltip: t('dataBrowser.header.backToConfig', { defaultValue: 'Back To Config' }),\n        background: 'transparent',\n      });\n    }\n    return actions;\n  }, [backToConfigPage, t]);\n\n  const closeDialog = useCallback(() => {\n    setDialogOpen(false);\n  }, []);\n\n  const deleteDialogConfig = useMemo(() => {\n    return {\n      title: t('common.delete', { defaultValue: 'Delete' }),\n      message: t('dataBrowser.deleteDialog.message', {\n        defaultValue: 'Are you sure you want to delete this row?',\n      }),\n      actionOne: closeDialog,\n      labelOne: t('common.cancel', { defaultValue: 'Cancel' }),\n      actionTwo: onDelete,\n      labelTwo: t('common.confirm', { defaultValue: 'Confirm' }),\n      loading: !!!foreignKeyData,\n    };\n  }, [closeDialog, foreignKeyData, onDelete, t]);\n\n  const actionList = useMemo(() => {\n    if (!promotedEntity) {\n      return;\n    }\n    const actions = [\n      {\n        id: 1, // Must be unique\n        title: promotedEntity?.unityBaseUpdateMethod\n          ? t('common.edit', { defaultValue: 'Edit' })\n          : t('dataBrowser.actions.editNotAccessible', {\n              defaultValue: 'Edit Method Not Accessible',\n            }),\n        iconName: 'edit',\n        handleOnClick: (e, params) => handleSideSheet('update', true, params?.data),\n        disabled: !!!promotedEntity?.unityBaseUpdateMethod,\n      },\n      {\n        id: 2, // Must be unique\n        title: promotedEntity?.unityBaseDeleteMethod\n          ? t('common.delete', { defaultValue: 'Delete' })\n          : t('dataBrowser.actions.deleteNotAccessible', {\n              defaultValue: 'Delete Method Not Accessible',\n            }),\n        iconName: 'trashCan',\n        handleOnClick: () => setDialogOpen(true),\n        opens: 'dialog',\n        disabled: !!!promotedEntity?.unityBaseDeleteMethod,\n      },\n    ];\n\n    if (!!onLoadInquiryNode) {\n      actions.push({\n        id: 5, // Must be unique\n        title: t('dataBrowser.actions.loadToTree', { defaultValue: 'Load to Tree' }),\n        iconName: 'migrateAlt',\n        handleOnClick: (e, params) => {\n          const obj = getCleanData(params?.data, lookupsMap);\n          onLoadInquiryNode(obj);\n        },\n        loading: !!!foreignKeyData,\n        view: {},\n      });\n    }\n    return actions;\n  }, [\n    promotedEntity,\n    t,\n    onLoadInquiryNode,\n    handleSideSheet,\n    foreignKeyData,\n    getCleanData,\n    lookupsMap,\n  ]);\n\n  const virtualActions = useMemo(() => {\n    return [\n      // Action for opening Virtual Configuration\n      {\n        id: 3,\n        title: t('dataBrowser.actions.openVirtualTable', { defaultValue: 'Open Virtual Table' }),\n        iconName: 'search',\n        loading: !!!foreignKeyData,\n        handleOnClick: (value) => {\n          history.push({\n            pathname: `/virtual/${value.id}`,\n            search: `?entityName=${entityName}`,\n            state: {\n              value,\n              promotedEntity,\n              label: value.name,\n            },\n          });\n        },\n        checkDisabled: (value) => value.typeId !== LookupTypeIdEnums.Lookup,\n      },\n    ];\n  }, [entityName, t, history, promotedEntity, foreignKeyData]);\n\n  const jointActionList = useMemo(() => {\n    if (!actionList) {\n      return [];\n    }\n    // Check if it's a udp lookup entity\n    if (entityName.toLowerCase() === UdpEnums.Udp_Lookup.toLowerCase()) {\n      return [...actionList, ...virtualActions];\n    }\n    return actionList;\n  }, [actionList, virtualActions, entityName]);\n\n  const columnDefs = useMemo(() => {\n    return DataBrowserColumnDefs(entityAttributes, jointActionList, true, queryColumnsData);\n  }, [entityAttributes, jointActionList, queryColumnsData]);\n\n  const sideSheetList = useMemo(() => {\n    const data = getCleanData(entityData, lookupsMap);\n\n    return [\n      {\n        open: sideSheetOpenState.add,\n        closeSheet: () => handleSideSheet('add', false),\n        title: t('dataBrowser.sideSheet.addNewTitle', {\n          defaultValue: 'Add New {{entityName}}',\n          entityName: commonEntityName,\n        }),\n        width: sideSheetWidth,\n        children: (\n          <CrudTableSidePanel\n            entityAttributes={entityAttributes}\n            foreignKeyData={foreignKeyData}\n            onCreate={onCreate}\n            closeSideSheet={() => handleSideSheet('add', false)}\n            pageId={createApiMethodPageId}\n            setSideSheetWidth={setSideSheetWidth}\n            setSideSheetButtonLabel={setSideSheetButtonLabel}\n            setSideSheetOnSubmit={setSideSheetOnSubmit}\n            setSideSheetProps={setOtherSideSheetProps}\n            isNewEntry={true}\n            entityData={entityData}\n            entityName={entityName}\n          />\n        )\n      },\n      {\n        open: sideSheetOpenState.update,\n        closeSheet: () => handleSideSheet('update', false),\n        title: t('dataBrowser.sideSheet.updateTitle', {\n          defaultValue: 'Update {{entityName}}',\n          entityName: commonEntityName,\n        }),\n        width: 550,\n        children: (\n          <CrudTableSidePanel\n            entityAttributes={entityAttributes}\n            foreignKeyData={foreignKeyData}\n            crudTableEditionData={selectedEntity}\n            onUpdate={onUpdate}\n            closeSideSheet={() => handleSideSheet('update', false)}\n            closeSideSheetPropName={'closeSideSheet'}\n            pageId={promotedEntity?.unityBaseUpdateMethod?.pageId}\n            isNewEntry={false}\n            entityData={data}\n            entityName={entityName}\n          />\n        ),\n      },\n    ];\n  }, [\n    commonEntityName,\n    createApiMethodPageId,\n    entityAttributes,\n    entityData,\n    entityName,\n    foreignKeyData,\n    handleSideSheet,\n    onCreate,\n    onUpdate,\n    promotedEntity,\n    selectedEntity,\n    sideSheetOpenState,\n    sideSheetWidth,\n    getCleanData,\n    lookupsMap,\n    t,\n  ]);\n\n  const SideOptionList = useMemo(() => {\n    return sideSheetList.map((item, index) => (\n      <SideSheet\n        open={item.open}\n        onClose={item.closeSheet}\n        title={item.title}\n        width={item.width}\n        key={index}\n      >\n        {item.children}\n      </SideSheet>\n    ));\n  }, [sideSheetList]);\n\n  const getLookupResults = useCallback(async () => {\n    if (!lookupsMap || !lookupApiMethodId) return null;\n    const lookupToFilterOn = Object.values(lookupsMap).find((item) => item.filterOn);\n    const lookupId = lookupToFilterOn?.value || '';\n    if (lookupId) {\n      const lookupResult = await executeQueryWithParameters(\n        { data: { id: lookupId } },\n        lookupApiMethodId\n      );\n      return lookupResult;\n    }\n    return null;\n  }, [lookupsMap, lookupApiMethodId]);\n\n  const formattedData = useMemo(() => {\n    if (entityData) {\n      let formattedEntityData = cloneDeep(entityData);\n\n      // get list of attributes that are datetime\n      const datetimeFields = entityAttributes?.reduce((defs, element) => {\n        if (\n          !element?.extendedProperties?.childEntity &&\n          findTermByType(element?.type, 'datetime')\n        ) {\n          defs.push(element?.name.charAt(0).toLowerCase() + element?.name.slice(1));\n        }\n        return defs;\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  }, [entityAttributes, entityData]);\n\n  const handleChipToggle = useCallback(\n    (chip) => {\n      if (isServerSide && chip && chip.filterValue && chip.keyName) {\n        const updatedSearchFilterElements = [...searchFilterElements];\n        const chipFilterElement = {\n          searchValue: chip.filterValue,\n          searchField: toUpperFirstChar(chip.keyName),\n          searchOperator: SqlFilterOperators.EQUALS,\n        };\n        updatedSearchFilterElements.push(chipFilterElement);\n        setSearchFilterElements(updatedSearchFilterElements);\n      } else {\n        // TODO: handle client side filter chips\n      }\n    },\n    [isServerSide, searchFilterElements]\n  );\n\n  const handleChipUntoggle = useCallback(() => {\n    setSearchFilterElements(filterElements);\n  }, [filterElements]);\n\n  const setFilterChips = useCallback(async () => {\n    let filterChipsArray = [];\n\n    // A list of all the products (for product lookup)\n    const lookup = await getLookupResults();\n    const lookupResults = lookup?.data;\n\n    if (!lookupResults) {\n      setFilterChipsArray([]);\n      return; // no lookup results\n    }\n\n    let keyName = lookupResults.keyName;\n    const valueName = lookupResults.valueName;\n\n    const lookupToFilterOn = Object.values(lookupsMap).find((item) => item.filterOn);\n\n    let chipKey = keyName;\n    const lookupMapKeys = Object.keys(lookupsMap);\n    for (let i = 0; i < lookupMapKeys.length; i++) {\n      const key = lookupMapKeys[i];\n      if (lookupsMap[key].value === lookupToFilterOn?.value) {\n        chipKey = key;\n        break;\n      }\n    }\n\n    // Add the chips\n    for (let i = 0; i < lookupResults?.data.length; i++) {\n      const lookupResult = lookupResults.data[i];\n\n      const label = lookupResult[valueName];\n      const numRows = formattedData?.filter((obj) => obj[keyName] === label)?.length;\n\n      let chipData = {\n        label: `${label}`,\n        value: !isServerSide ? numRows || '' : '',\n        filterValue: lookupResult[keyName],\n        id: i,\n        keyName: chipKey,\n      };\n      chipData.onToggle = () => handleChipToggle(chipData);\n      chipData.onUntoggle = () => handleChipUntoggle();\n\n      // Only add the chip if it has results and is not using server side\n      if (!isServerSide && numRows > 0) {\n        filterChipsArray.push(chipData);\n      }\n      if (isServerSide) {\n        filterChipsArray.push(chipData);\n      }\n    }\n\n    setFilterChipsArray(filterChipsArray);\n  }, [\n    getLookupResults,\n    handleChipToggle,\n    handleChipUntoggle,\n    isServerSide,\n    formattedData,\n    lookupsMap,\n  ]);\n\n  useEffect(() => {\n    setFilterChips();\n  }, [setFilterChips]);\n\n  useEffect(() => {\n    // eslint-disable-next-line react-you-might-not-need-an-effect/no-derived-state\n    setSearchFilterElements(filterElements || []);\n  }, [filterElements]);\n\n  useEffect(() => {\n    if (!gridApi) return;\n    if (setGridApi) {\n      // eslint-disable-next-line react-you-might-not-need-an-effect/no-pass-data-to-parent\n      setGridApi(gridApi);\n    }\n  }, [gridApi, setGridApi]);\n\n  useEffect(() => {\n    const executeSearchForEntityUdpObjectInfo = async (apiMethodId, sanitizedEntityName) => {\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({ data: requestObj }, apiMethodId);\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  const handleGridApiCallback = (api) => {\n    gridApiRef.current = api;\n  };\n\n  const gridHeaderConfig = useMemo(() => {\n    return {\n      title: commonEntityName,\n      primaryActionButton: {\n        label: t('common.add', { defaultValue: 'Add' }),\n        iconName: 'add',\n        onClick: () => handleSideSheet('add', true, null),\n      },\n      secondaryActionButtons: secondaryActionButtons,\n    };\n  }, [commonEntityName, handleSideSheet, secondaryActionButtons, t]);\n\n  const gridFunctions = useMemo(() => {\n    return [\n      { name: 'agGridExport' },\n      { name: 'agGridHideShowColumns' },\n      { name: 'agGridSizeColumnsToFit' },\n      { name: 'agGridAutoSizeColumns' },\n      { name: 'openSavedViews' },\n      { name: 'quickFilter' },\n    ];\n  }, []);\n\n  const gridOptions = useMemo(() => {\n    return {\n      pagination: true,\n      paginationPageSize: 20,\n    };\n  }, []);\n\n  const searchMethodConfig = useMemo(() => {\n    const searchObject = getSearchObject(\n      searchFilterElements,\n      1,\n      null,\n      false,\n      LogicalSearchOperatorEnums.And\n    );\n\n    return {\n      apiMethodId: promotedEntity?.unityBaseSearchMethod?.apiMethodId,\n      customSearchObject: searchObject\n    };\n  }, [promotedEntity, searchFilterElements]);\n\n  return (\n    <>\n      {isServerSide && !!promotedEntity ? (\n        <SearchMethodUdpGrid\n          gridId={GRID_ID}\n          searchMethodConfig={searchMethodConfig}\n          columnDefs={columnDefs}\n          gridApiCallback={handleGridApiCallback}\n          gridHeaderConfig={gridHeaderConfig}\n          gridFunctions={[{ name: 'agGridRefreshData' }, ...gridFunctions]}\n          gridOptions={gridOptions}\n          loading={loading}\n          {...other}\n        />\n      ) : (\n        <ClientSideUdpGrid\n          gridId={GRID_ID}\n          rowData={formattedData}\n          columnDefs={columnDefs}\n          gridApiCallback={handleGridApiCallback}\n          gridHeaderConfig={gridHeaderConfig}\n          gridFunctions={gridFunctions}\n          gridOptions={gridOptions}\n          loading={loading}\n          {...other}\n        />\n      )}\n      {SideOptionList}\n      <FluentDialog\n        open={dialogOpen}\n        handleClose={closeDialog}\n        title={deleteDialogConfig?.title}\n        message={deleteDialogConfig?.message}\n        actionOne={deleteDialogConfig?.actionOne}\n        labelOne={deleteDialogConfig?.labelOne}\n        actionTwo={deleteDialogConfig?.actionTwo}\n        labelTwo={deleteDialogConfig?.labelTwo}\n        progress={deleteDialogConfig?.loading}\n      />\n    </>\n  );\n};\n"],"mappings":"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"}