{"version":3,"file":"ListView.mjs","names":["React","useState","useCallback","useEffect","startCase","CompactCard","makeStyles","Typography","useTranslation","MapPinIcon","ViewIcon","GridRow","GridUnit","StatusChip","isEqualIgnoreFunctions","useStyles","theme","noDataWrapper","position","top","left","transform","chipContainer","display","gap","spacing","flexWrap","marginTop","margin","chipContent","marginBottom","ListView","props","data","listViewConfig","noWrapPrimaryText","viewEvent","showMarkerEvent","chipConfig","activeChip","setActiveChip","filteredData","setFilteredData","t","classes","length","defaultChip","find","chip","default","updatedChip","id","filterData","handleOnClickChip","onClick","map","index","label","icon","console","log","disabled","content","record","extendedListData","extendedListFields","item","value","defaultValue","buttons","iconButtons","config","title","getTitle","titleField","primaryTextField","secondaryTextField","statusColor","toLowerCase","statusLabel","statusVariant","showAdornment","avatar","imageAvatarSrc"],"sources":["../../../../src/UI/mapLayout/ui/ListView.jsx"],"sourcesContent":["import React, { useState, useCallback, useEffect } from 'react';\nimport { startCase } from 'lodash-es';\nimport { CompactCard } from './CompactCard';\nimport { makeStyles, Typography } from '@material-ui/core';\nimport { useTranslation } from 'react-i18next';\nimport { MapPinIcon, ViewIcon } from '@fluentui/react-icons';\nimport { GridRow } from '../../../layout/GridRow';\nimport { GridUnit } from '../../../layout/GridUnit';\nimport { StatusChip } from '../../dataDisplay/status/StatusChip';\nimport { isEqualIgnoreFunctions } from '../utilities/MapUtilities';\n\nconst useStyles = makeStyles((theme) => ({\n  noDataWrapper: {\n    position: 'absolute',\n    top: '50%',\n    left: '50%',\n    transform: 'translate(-50%, -50%)'\n  },\n  chipContainer: {\n    display: 'flex',\n    gap: theme.spacing(1),\n    flexWrap: 'wrap',\n    marginTop: theme.spacing(1),\n    margin: theme.spacing(0, 1)\n  },\n  chipContent: {\n    margin: theme.spacing(1),\n    marginBottom: 0\n  }\n}));\n\nconst ListView = (props) => {\n  const {\n    data,\n    listViewConfig,\n    noWrapPrimaryText,\n    viewEvent,\n    showMarkerEvent,\n    chipConfig\n  } = props;\n  const [activeChip, setActiveChip] = useState(null);\n  const [filteredData, setFilteredData] = useState(data);\n  const { t } = useTranslation();\n  const classes = useStyles();\n\n  //Set default active chip only when chipConfig changes\n  useEffect(() => {\n    if (!chipConfig || chipConfig.length === 0) {\n      setFilteredData(data);\n      setActiveChip(null);\n      return;\n    }\n\n    const defaultChip =\n      chipConfig.find((chip) => chip?.default) ?? chipConfig[0];\n\n    if (!activeChip) {\n      setActiveChip(defaultChip);\n    } else {\n      const updatedChip = chipConfig.find((chip) => chip.id === activeChip.id);\n      if (\n        updatedChip &&\n        (updatedChip !== activeChip ||\n          !isEqualIgnoreFunctions(updatedChip, activeChip))\n      ) {\n        setActiveChip(updatedChip);\n      } else if (!updatedChip) {\n        // activeChip no longer exists in new config\n        setActiveChip(defaultChip);\n      }\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [chipConfig, activeChip]);\n\n  //Update filtered data whenever data or activeChip changes\n  useEffect(() => {\n    if (!chipConfig || chipConfig.length === 0) {\n      setFilteredData(data);\n      return;\n    }\n\n    if (activeChip?.filterData) {\n      setFilteredData(activeChip.filterData(data, activeChip));\n    } else {\n      setFilteredData(data);\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [activeChip, data]);\n\n  const handleOnClickChip = useCallback(\n    (chip) => {\n      if (chip?.onClick) {\n        chip?.onClick(data, chip);\n      }\n\n      setActiveChip(chip);\n    },\n    [data]\n  );\n\n  return (\n    <div>\n      {chipConfig?.length > 0 && (\n        <div className={classes.chipContainer}>\n          {chipConfig?.map((chip, index) => {\n            return (\n              <StatusChip\n                key={`${index}-${chip?.label}`}\n                label={chip?.label}\n                status={chip?.id === activeChip?.id ? 'info' : 'default'}\n                variant='outlined'\n                icon={chip?.icon}\n                onClick={() => {\n                  console.log('chip clicked', chip);\n                  handleOnClickChip(chip);\n                }}\n                isActionable={!chip?.disabled}\n              />\n            );\n          })}\n        </div>\n      )}\n\n      {activeChip?.content && (\n        <div className={classes.chipContent}>{activeChip?.content}</div>\n      )}\n      {filteredData?.length > 0 ? (\n        filteredData?.map((record, index) => {\n          const extendedListData = listViewConfig?.extendedListFields?.map(\n            (item) => {\n              return {\n                label: startCase(item),\n                value:\n                  record[item] ??\n                  t('mapLayout.notAvailable', { defaultValue: 'N/A' })\n              };\n            }\n          );\n\n          const buttons =\n            listViewConfig?.iconButtons?.map((config) => ({\n              ...config,\n              onClick: () => {\n                if (config?.onClick) {\n                  config?.onClick(record);\n                }\n              }\n            })) ?? [];\n\n          const iconButtons = [\n            ...buttons,\n            {\n              title: t('mapLayout.showMarker', { defaultValue: 'Show Marker' }),\n              icon: MapPinIcon,\n              onClick: () => {\n                showMarkerEvent(record);\n              }\n            },\n            {\n              title: t('common.view', { defaultValue: 'View' }),\n              icon: ViewIcon,\n              onClick: () => {\n                viewEvent(record);\n              }\n            }\n          ];\n\n          const title = listViewConfig?.getTitle\n            ? listViewConfig?.getTitle(record)\n            : record[listViewConfig?.titleField];\n\n          return (\n            <GridRow>\n              <GridUnit>\n                <CompactCard\n                  id={index}\n                  title={title}\n                  primaryText={record[listViewConfig?.primaryTextField]}\n                  secondaryText={record[listViewConfig?.secondaryTextField]}\n                  status={record[listViewConfig?.statusColor]?.toLowerCase()}\n                  statusLabel={record[listViewConfig?.statusLabel]}\n                  statusVariant={listViewConfig?.statusVariant}\n                  showAdornment={listViewConfig?.showAdornment}\n                  avatar={record[listViewConfig?.avatar]}\n                  imageAvatarSrc={record[listViewConfig?.imageAvatarSrc]}\n                  noWrap={noWrapPrimaryText}\n                  extendedList={extendedListData}\n                  iconButtons={iconButtons}\n                />\n              </GridUnit>\n            </GridRow>\n          );\n        })\n      ) : (\n        <div className={classes.noDataWrapper}>\n          <Typography variant='body1'>\n            {t('mapLayout.noData', { defaultValue: 'No Data' })}\n          </Typography>\n        </div>\n      )}\n    </div>\n  );\n};\n\nexport default ListView;\n"],"mappings":";;;;;;;;;;;AAWA,MAAMe,YAAYT,YAAYU,WAAW;CACvCC,eAAe;EACbC,UAAU;EACVC,KAAK;EACLC,MAAM;EACNC,WAAW;EACZ;CACDC,eAAe;EACbC,SAAS;EACTC,KAAKR,MAAMS,QAAQ,EAAE;EACrBC,UAAU;EACVC,WAAWX,MAAMS,QAAQ,EAAE;EAC3BG,QAAQZ,MAAMS,QAAQ,GAAG,EAAC;EAC3B;CACDI,aAAa;EACXD,QAAQZ,MAAMS,QAAQ,EAAE;EACxBK,cAAc;EAChB;CACD,EAAE;AAEH,MAAMC,YAAYC,UAAU;CAC1B,MAAM,EACJC,MACAC,gBACAC,mBACAC,WACAC,iBACAC,eACEN;CACJ,MAAM,CAACO,YAAYC,iBAAiBvC,SAAS,KAAK;CAClD,MAAM,CAACwC,cAAcC,mBAAmBzC,SAASgC,KAAK;CACtD,MAAM,EAAEU,MAAMnC,gBAAgB;CAC9B,MAAMoC,UAAU7B,WAAW;AAG3BZ,iBAAgB;AACd,MAAI,CAACmC,cAAcA,WAAWO,WAAW,GAAG;AAC1CH,mBAAgBT,KAAK;AACrBO,iBAAc,KAAK;AACnB;;EAGF,MAAMM,cACJR,WAAWS,MAAMC,SAASA,MAAMC,QAAQ,IAAIX,WAAW;AAEzD,MAAI,CAACC,WACHC,eAAcM,YAAY;OACrB;GACL,MAAMI,cAAcZ,WAAWS,MAAMC,SAASA,KAAKG,OAAOZ,WAAWY,GAAG;AACxE,OACED,gBACCA,gBAAgBX,cACf,CAACzB,uBAAuBoC,aAAaX,WAAW,EAElDC,eAAcU,YAAY;YACjB,CAACA,YAEVV,eAAcM,YAAY;;IAI7B,CAACR,YAAYC,WAAW,CAAC;AAG5BpC,iBAAgB;AACd,MAAI,CAACmC,cAAcA,WAAWO,WAAW,GAAG;AAC1CH,mBAAgBT,KAAK;AACrB;;AAGF,MAAIM,YAAYa,WACdV,iBAAgBH,WAAWa,WAAWnB,MAAMM,WAAW,CAAC;MAExDG,iBAAgBT,KAAK;IAGtB,CAACM,YAAYN,KAAK,CAAC;CAEtB,MAAMoB,oBAAoBnD,aACvB8C,SAAS;AACR,MAAIA,MAAMM,QACRN,OAAMM,QAAQrB,MAAMe,KAAK;AAG3BR,gBAAcQ,KAAK;IAErB,CAACf,KACH,CAAC;AAED,QACE,sBAAA,cAAC,OAAA,MACEK,YAAYO,SAAS,KACpB,sBAAA,cAAC,OAAD,EAAK,WAAWD,QAAQtB,eAkBzB,EAjBIgB,YAAYiB,KAAKP,MAAMQ,UAAU;AAChC,SACE,sBAAA,cAAC,YAAD;GACE,KAAK,GAAGA,MAAK,GAAIR,MAAMS;GACvB,OAAOT,MAAMS;GACb,QAAQT,MAAMG,OAAOZ,YAAYY,KAAK,SAAS;GAC/C,SAAQ;GACR,MAAMH,MAAMU;GACZ,eAAe;AACbC,YAAQC,IAAI,gBAAgBZ,KAAK;AACjCK,sBAAkBL,KAAK;;GAEzB,cAAc,CAACA,MAAMa;GACrB,CAAA;GAEJ,CAEL,EAEAtB,YAAYuB,WACX,sBAAA,cAAC,OAAD,EAAK,WAAWlB,QAAQf,aACzB,EADuCU,YAAYuB,QACnD,EACArB,cAAcI,SAAS,IACtBJ,cAAcc,KAAKQ,QAAQP,UAAU;EACnC,MAAMQ,mBAAmB9B,gBAAgB+B,oBAAoBV,KAC1DW,SAAS;AACR,UAAO;IACLT,OAAOrD,UAAU8D,KAAK;IACtBC,OACEJ,OAAOG,SACPvB,EAAE,0BAA0B,EAAEyB,cAAc,OAAO,CAAA;IACtD;IAEJ;EAYD,MAAME,cAAc;GAClB,GAVApC,gBAAgBoC,aAAaf,KAAKgB,YAAY;IAC5C,GAAGA;IACHjB,eAAe;AACb,SAAIiB,QAAQjB,QACViB,SAAQjB,QAAQS,OAAO;;IAG5B,EAAE,IAAI,EAAE;GAIT;IACES,OAAO7B,EAAE,wBAAwB,EAAEyB,cAAc,eAAe,CAAC;IACjEV,MAAMjD;IACN6C,eAAe;AACbjB,qBAAgB0B,OAAO;;IAE1B;GACD;IACES,OAAO7B,EAAE,eAAe,EAAEyB,cAAc,QAAQ,CAAC;IACjDV,MAAMhD;IACN4C,eAAe;AACblB,eAAU2B,OAAO;;IAEpB;GACF;EAED,MAAMS,QAAQtC,gBAAgBuC,WAC1BvC,gBAAgBuC,SAASV,OAAO,GAChCA,OAAO7B,gBAAgBwC;AAE3B,SACE,sBAAA,cAAC,SAAA,MACC,sBAAA,cAAC,UAAA,MACC,sBAAA,cAAC,aAAD;GACE,IAAIlB;GACGgB;GACP,aAAaT,OAAO7B,gBAAgByC;GACpC,eAAeZ,OAAO7B,gBAAgB0C;GACtC,QAAQb,OAAO7B,gBAAgB2C,cAAcC,aAAa;GAC1D,aAAaf,OAAO7B,gBAAgB6C;GACpC,eAAe7C,gBAAgB8C;GAC/B,eAAe9C,gBAAgB+C;GAC/B,QAAQlB,OAAO7B,gBAAgBgD;GAC/B,gBAAgBnB,OAAO7B,gBAAgBiD;GACvC,QAAQhD;GACR,cAAc6B;GACDM;GAAY,CAAA,CAEnB,CACF;GAEZ,GAEF,sBAAA,cAAC,OAAD,EAAK,WAAW1B,QAAQ3B,eAKzB,EAJG,sBAAA,cAAC,YAAD,EAAY,SAAQ,SAER,EADT0B,EAAE,oBAAoB,EAAEyB,cAAc,WAAW,CAAC,CACzC,CAEf,CACG"}