{"version":3,"file":"useTags.mjs","names":["useQuery","ConfigService","UdpTag","UdpTagAssociation","apiMutate","TAG_ASSOCIATION_ENDPOINT","BASE_SEARCH_PAYLOAD","pageNumber","pageSize","filterElements","filterGroups","orderElements","groupingType","groupProperty","groupOperationList","eagerLoad","logicalSearchOperator","EMPTY_MAP","ReadonlyMap","Map","fetchTagAssociations","entityBusinessKeyPrefix","Promise","res","productV1ApiUrl","method","data","getAll","searchField","searchOperator","searchValue","pageList","buildTagMap","associations","map","a","id","entityBusinessKey","split","tag","udpTagAssociationUdpTag","existing","get","push","set","tagsForBusinessKey","tagMap","businessObjectKey","undefined","tagQueryOptions","queryKey","const","queryFn","select","UseTagsResult","isLoading","error","Error","useTags","options","$","_c","t0","t1","enabled","t2","query","t3","t4"],"sources":["../../../src/udp/tags/useTags.ts"],"sourcesContent":["import { useQuery } from '@tanstack/react-query';\nimport { ConfigService } from '@univerus/udp-react-stencil-component-library';\nimport type {\n  UdpTag,\n  UdpTagAssociation,\n} from '@univerus/udp-stencil-component-library';\nimport { apiMutate } from '../../utilities/useAxiosMutate';\n\nconst TAG_ASSOCIATION_ENDPOINT = 'udpTagAssociation/search';\n\nconst BASE_SEARCH_PAYLOAD = {\n  pageNumber: 1,\n  pageSize: 200,\n  filterElements: [],\n  filterGroups: [],\n  orderElements: [],\n  groupingType: '',\n  groupProperty: [],\n  groupOperationList: [],\n  eagerLoad: true,\n  logicalSearchOperator: 1,\n};\n\nconst EMPTY_MAP: ReadonlyMap<string, UdpTag[]> = new Map();\n\nconst fetchTagAssociations = async (\n  entityBusinessKeyPrefix: string,\n): Promise<UdpTagAssociation[]> => {\n  const res = (await apiMutate(\n    ConfigService.productV1ApiUrl,\n    TAG_ASSOCIATION_ENDPOINT,\n    { method: 'post' },\n    {\n      data: {\n        ...BASE_SEARCH_PAYLOAD,\n        getAll: true,\n        filterElements: [\n          {\n            searchField: 'entityBusinessKey',\n            searchOperator: 'STARTSWITH',\n            searchValue: entityBusinessKeyPrefix,\n          },\n        ],\n      },\n    },\n  )) as { data?: { pageList?: UdpTagAssociation[] } } | undefined;\n  return res?.data?.pageList ?? [];\n};\n\nconst buildTagMap = (\n  associations: UdpTagAssociation[],\n): Map<string, UdpTag[]> => {\n  const map = new Map<string, UdpTag[]>();\n  for (const a of associations) {\n    const id = a.entityBusinessKey?.split('|')[1];\n    const tag = a.udpTagAssociationUdpTag;\n    if (!id || !tag) continue;\n    const existing = map.get(id);\n    if (existing) {\n      existing.push(tag);\n    } else {\n      map.set(id, [tag]);\n    }\n  }\n  return map;\n};\n\n/** Business keys are `<full entity name>|<record id>`; the map is keyed by the id. */\nexport const tagsForBusinessKey = (\n  tagMap: ReadonlyMap<string, UdpTag[]>,\n  businessObjectKey: unknown,\n): UdpTag[] => {\n  const id = typeof businessObjectKey === 'string' ? businessObjectKey.split('|')[1] : undefined;\n  return (id && tagMap.get(id)) || [];\n};\n\n/**\n * The query for one entity type's tag associations, selected into the\n * `Map<recordId, UdpTag[]>` — shared by `useTags` and by callers that need\n * several entity types at once through `useQueries` (the inquiry tree rows).\n */\nexport const tagQueryOptions = (entityBusinessKeyPrefix: string) => ({\n  queryKey: [TAG_ASSOCIATION_ENDPOINT, entityBusinessKeyPrefix] as const,\n  queryFn: () => fetchTagAssociations(entityBusinessKeyPrefix),\n  select: buildTagMap,\n});\n\nexport interface UseTagsResult {\n  tagMap: ReadonlyMap<string, UdpTag[]>;\n  isLoading: boolean;\n  error: Error | null;\n}\n\n/**\n * Fetch and cache tag associations for every record of a single entity type.\n *\n * Pass a type-only prefix ending in `|` — e.g.\n * `Univerus.Unity.Starter.Project.Models.ChargeCodeTask|`.\n *\n * Returns a `Map<entityId, UdpTag[]>` keyed by the GUID portion of the\n * business key. The query is shared across the app via TanStack Query, so\n * multiple components calling this hook with the same prefix dedupe to a\n * single request and stay in sync on invalidation.\n */\nexport const useTags = (\n  entityBusinessKeyPrefix: string,\n  options?: { enabled?: boolean },\n): UseTagsResult => {\n  const query = useQuery({\n    ...tagQueryOptions(entityBusinessKeyPrefix),\n    enabled: options?.enabled !== false && !!entityBusinessKeyPrefix,\n  });\n\n  return {\n    tagMap: query.data ?? EMPTY_MAP,\n    isLoading: query.isLoading,\n    error: query.error,\n  };\n};\n"],"mappings":";;;;;AAQA,MAAMK,2BAA2B;AAEjC,MAAMC,sBAAsB;CAC1BC,YAAY;CACZC,UAAU;CACVC,gBAAgB,EAAE;CAClBC,cAAc,EAAE;CAChBC,eAAe,EAAE;CACjBC,cAAc;CACdC,eAAe,EAAE;CACjBC,oBAAoB,EAAE;CACtBC,WAAW;CACXC,uBAAuB;CACxB;AAED,MAAMC,4BAA2C,IAAIE,KAAK;AAE1D,MAAMC,uBAAuB,OAC3BC,4BACiC;AAmBjC,SAlBa,MAAMjB,UACjBH,cAAcuB,iBACdnB,0BACA,EAAEoB,QAAQ,QAAQ,EAClB,EACEC,MAAM;EACJ,GAAGpB;EACHqB,QAAQ;EACRlB,gBAAgB,CACd;GACEmB,aAAa;GACbC,gBAAgB;GAChBC,aAAaT;GACd,CAAA;EAEL,EAEJ,CAAC,GACWK,MAAMK,YAAY,EAAE;;AAGlC,MAAMC,eACJC,iBAC0B;CAC1B,MAAMC,sBAAM,IAAIf,KAAuB;AACvC,MAAK,MAAMgB,KAAKF,cAAc;EAC5B,MAAMG,KAAKD,EAAEE,mBAAmBC,MAAM,IAAI,CAAC;EAC3C,MAAMC,MAAMJ,EAAEK;AACd,MAAI,CAACJ,MAAM,CAACG,IAAK;EACjB,MAAME,WAAWP,IAAIQ,IAAIN,GAAG;AAC5B,MAAIK,SACFA,UAASE,KAAKJ,IAAI;MAElBL,KAAIU,IAAIR,IAAI,CAACG,IAAI,CAAC;;AAGtB,QAAOL;;;AAIT,MAAaW,sBACXC,QACAC,sBACa;CACb,MAAMX,KAAK,OAAOW,sBAAsB,WAAWA,kBAAkBT,MAAM,IAAI,CAAC,KAAKU,KAAAA;AACrF,QAAQZ,MAAMU,OAAOJ,IAAIN,GAAG,IAAK,EAAE;;;;;;;AAQrC,MAAaa,mBAAmB5B,6BAAqC;CACnE6B,UAAU,CAAC7C,0BAA0BgB,wBAAwB;CAC7D+B,eAAehC,qBAAqBC,wBAAwB;CAC5DgC,QAAQrB;CACT;;;;;;;;;;;;AAmBD,MAAa0B,WAAUrC,yBAAAsC,YAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAAA,IAAAC;AAAA,KAAAF,EAAA,OAAAvC,yBAAA;AAKhByC,OAAAb,gBAAgB5B,wBAAwB;AAAAuC,IAAA,KAAAvC;AAAAuC,IAAA,KAAAE;OAAAA,MAAAF,EAAA;CAClC,MAAAG,KAAAJ,SAAOK,YAAc,SAArB,CAA+B,CAAC3C;CAAuB,IAAA4C;AAAA,KAAAL,EAAA,OAAAE,MAAAF,EAAA,OAAAG,IAAA;AAF3CE,OAAA;GAAA,GAClBH;GAAwCE,SAClCD;GACV;AAAAH,IAAA,KAAAE;AAAAF,IAAA,KAAAG;AAAAH,IAAA,KAAAK;OAAAA,MAAAL,EAAA;CAHD,MAAAM,QAAclE,SAASiE,GAGrB;CAGQ,MAAAE,KAAAD,MAAKxC,QAALT;CAAuB,IAAAmD;AAAA,KAAAR,EAAA,OAAAM,MAAAV,SAAAI,EAAA,OAAAM,MAAAX,aAAAK,EAAA,OAAAO,IAAA;AAD1BC,OAAA;GAAAtB,QACGqB;GAAuBZ,WACpBW,MAAKX;GAAUC,OACnBU,MAAKV;GACb;AAAAI,IAAA,KAAAM,MAAAV;AAAAI,IAAA,KAAAM,MAAAX;AAAAK,IAAA,KAAAO;AAAAP,IAAA,KAAAQ;OAAAA,MAAAR,EAAA;AAAA,QAJMQ"}