{"version":3,"file":"VisualSearchObject.mjs","names":["React","useMemo","Box","Chip","StatusChip","VisualSearchObject","searchObject","safeSO","filterElements","filterGroups","logicalSearchOperator","filtersByGroup","reduce","acc","fe","gid","groupId","push","groupLookup","lookup","forEach","g","children","parentGroupId","topLevelGroups","filter","map","rootGroup","OpLabel","renderGroup","group","level","length","i","searchField","searchOperator","searchValue","marginRight","marginBottom","c","hasAnything"],"sources":["../../../src/udp/export/VisualSearchObject.jsx"],"sourcesContent":["import React, { useMemo } from 'react';\nimport { Box, Chip } from '@material-ui/core';\nimport { StatusChip } from '../../UI/dataDisplay/status/StatusChip';\n\nexport const VisualSearchObject = ({ searchObject }) => {\n  // 1️⃣ Safely default to an empty object if searchObject is null/undefined:\n  const safeSO = searchObject || {};\n\n  // 2️⃣ Destructure with defaults for each property:\n  const {\n    filterElements = [],\n    filterGroups = [],\n    logicalSearchOperator = 1,\n  } = safeSO;\n\n  const filtersByGroup = useMemo(() => {\n    return filterElements.reduce((acc, fe) => {\n      const gid = fe.groupId ?? 0;\n      (acc[gid] = acc[gid] || []).push(fe);\n      return acc;\n    }, {});\n  }, [filterElements]);\n\n  const groupLookup = useMemo(() => {\n    const lookup = {};\n    filterGroups.forEach(g => {\n      lookup[g.groupId] = { ...g, children: [] };\n    });\n    filterGroups.forEach(g => {\n      if (g.parentGroupId && lookup[g.parentGroupId]) {\n        lookup[g.parentGroupId].children.push(lookup[g.groupId]);\n      }\n    });\n    return lookup;\n  }, [filterGroups]);\n\n  const topLevelGroups = useMemo(() => {\n    return filterGroups\n      .filter(g => !g.parentGroupId)\n      .map(g => groupLookup[g.groupId]);\n  }, [filterGroups, groupLookup]);\n\n  // virtual root\n  const rootGroup = {\n    groupId: 0,\n    logicalSearchOperator,\n    children: topLevelGroups,\n  };\n\n  // 4️⃣ Recursive render\n  const OpLabel = { 1: 'AND', 2: 'OR' };\n  const renderGroup = (group, level = 0) => (\n    <Box\n      key={group.groupId}\n      border={1}\n      borderColor=\"grey.300\"\n      borderRadius={4}\n      p={1}\n      ml={level * 2}\n      mb={1}\n      bgcolor={level === 0 ? 'grey.100' : 'transparent'}\n    >\n      <Box mb={1}>\n        <StatusChip\n          label={OpLabel[group.logicalSearchOperator] || 'AND'}\n          status=\"info\"\n          size=\"small\"\n        />\n      </Box>\n      <Box display=\"flex\" flexWrap=\"wrap\" mb={group.children.length ? 1 : 0}>\n        {(filtersByGroup[group.groupId] || []).map((fe, i) => (\n          <Chip\n            key={`g${group.groupId}-f${i}`}\n            size=\"small\"\n            label={`${fe.searchField} ${fe.searchOperator} ${fe.searchValue}`}\n            style={{ marginRight: 4, marginBottom: 4 }}\n          />\n        ))}\n      </Box>\n      {group.children.map(c => renderGroup(c, level + 1))}\n    </Box>\n  );\n\n  // 5️⃣ Finally, render nothing if truly empty:\n  const hasAnything =\n    filterElements.length > 0 || filterGroups.length > 0;\n\n  if (!hasAnything) return null;\n\n  return (\n    <Box>\n      {renderGroup(rootGroup)}\n    </Box>\n  );\n};\n"],"mappings":";;;;AAIA,MAAaK,sBAAsB,EAAEC,mBAAmB;CAKtD,MAAM,EACJE,iBAAiB,EAAE,EACnBC,eAAe,EAAE,EACjBC,wBAAwB,MANXJ,gBAAgB,EAAE;CASjC,MAAMK,iBAAiBV,cAAc;AACnC,SAAOO,eAAeI,QAAQC,KAAKC,OAAO;GACxC,MAAMC,MAAMD,GAAGE,WAAW;AAC1B,IAACH,IAAIE,OAAOF,IAAIE,QAAQ,EAAE,EAAEE,KAAKH,GAAG;AACpC,UAAOD;KACN,EAAE,CAAC;IACL,CAACL,eAAe,CAAC;CAEpB,MAAMU,cAAcjB,cAAc;EAChC,MAAMkB,SAAS,EAAE;AACjBV,eAAaW,SAAQC,MAAK;AACxBF,UAAOE,EAAEL,WAAW;IAAE,GAAGK;IAAGC,UAAU,EAAA;IAAI;IAC1C;AACFb,eAAaW,SAAQC,QAAK;AACxB,OAAIA,IAAEE,iBAAiBJ,OAAOE,IAAEE,eAC9BJ,QAAOE,IAAEE,eAAeD,SAASL,KAAKE,OAAOE,IAAEL,SAAS;IAE1D;AACF,SAAOG;IACN,CAACV,aAAa,CAAC;CASlB,MAAMkB,YAAY;EAChBX,SAAS;EACTN;EACAY,UAVqBrB,cAAc;AACnC,UAAOQ,aACJgB,QAAOJ,QAAK,CAACA,IAAEE,cAAc,CAC7BG,KAAIL,QAAKH,YAAYG,IAAEL,SAAS;KAClC,CAACP,cAAcS,YAAY,CAAC;EAO9B;CAGD,MAAMU,UAAU;EAAE,GAAG;EAAO,GAAG;EAAM;CACrC,MAAMC,eAAeC,OAAOC,QAAQ,MAClC,sBAAA,cAAC,KAAD;EACE,KAAKD,MAAMd;EACX,QAAQ;EACR,aAAY;EACZ,cAAc;EACd,GAAG;EACH,IAAIe,QAAQ;EACZ,IAAI;EACJ,SAASA,UAAU,IAAI,aAAa;EAqBvC,EAnBG,sBAAA,cAAC,KAAD,EAAK,IAAI,GAMJ,EALH,sBAAA,cAAC,YAAD;EACE,OAAOH,QAAQE,MAAMpB,0BAA0B;EAC/C,QAAO;EACP,MAAK;EAAO,CAAA,CAEX,EACL,sBAAA,cAAC,KAAD;EAAK,SAAQ;EAAO,UAAS;EAAO,IAAIoB,MAAMR,SAASU,SAAS,IAAI;EAS/D,GARDrB,eAAemB,MAAMd,YAAY,EAAE,EAAEU,KAAKZ,MAAImB,MAC9C,sBAAA,cAAC,MAAD;EACE,KAAK,IAAIH,MAAMd,QAAO,IAAKiB;EAC3B,MAAK;EACL,OAAO,GAAGnB,KAAGoB,YAAW,GAAIpB,KAAGqB,eAAc,GAAIrB,KAAGsB;EACpD,OAAO;GAAEC,aAAa;GAAGC,cAAc;GAAG;EAE7C,CAAA,CAAC,CACC,EACJR,MAAMR,SAASI,KAAIa,MAAKV,YAAYU,GAAGR,QAAQ,EAAE,CAAC,CAEtD;AAMD,KAAI,EAFFvB,eAAewB,SAAS,KAAKvB,aAAauB,SAAS,GAEnC,QAAO;AAEzB,QACE,sBAAA,cAAC,KAAA,MACEH,YAAYF,UAAU,CACnB"}