{"version":3,"file":"get-ordered-resources.cjs","names":[],"sources":["../../../src/utils/get-ordered-resources/get-ordered-resources.ts"],"sourcesContent":["import { ScheduleResourceData, ScheduleResourceGroup } from '../../types';\n\nexport interface GroupRange {\n  group: ScheduleResourceGroup;\n  startIndex: number;\n  count: number;\n}\n\nexport interface ResourceGroupInfo {\n  group: ScheduleResourceGroup;\n  position: 'first' | 'middle' | 'last' | 'only';\n  count: number;\n}\n\nexport interface OrderedResourcesResult {\n  orderedResources: ScheduleResourceData[];\n  groupRanges: GroupRange[];\n  resourceGroupMap: (ResourceGroupInfo | null)[];\n}\n\nexport function getOrderedResources(\n  resources: ScheduleResourceData[],\n  groups: ScheduleResourceGroup[] | undefined\n): OrderedResourcesResult {\n  if (!groups || groups.length === 0) {\n    return { orderedResources: resources, groupRanges: [], resourceGroupMap: [] };\n  }\n\n  const resourceMap = new Map(resources.map((r) => [r.id, r]));\n  const usedIds = new Set<string | number>();\n  const orderedResources: ScheduleResourceData[] = [];\n  const groupRanges: GroupRange[] = [];\n\n  for (const group of groups) {\n    const startIndex = orderedResources.length;\n    let count = 0;\n\n    for (const id of group.resourceIds) {\n      const resource = resourceMap.get(id);\n      if (resource && !usedIds.has(id)) {\n        orderedResources.push(resource);\n        usedIds.add(id);\n        count++;\n      }\n    }\n\n    if (count > 0) {\n      groupRanges.push({ group, startIndex, count });\n    }\n  }\n\n  for (const resource of resources) {\n    if (!usedIds.has(resource.id)) {\n      orderedResources.push(resource);\n    }\n  }\n\n  const resourceGroupMap: (ResourceGroupInfo | null)[] = new Array(orderedResources.length).fill(\n    null\n  );\n\n  for (const range of groupRanges) {\n    for (let i = 0; i < range.count; i++) {\n      const idx = range.startIndex + i;\n      let position: ResourceGroupInfo['position'];\n      if (range.count === 1) {\n        position = 'only';\n      } else if (i === 0) {\n        position = 'first';\n      } else if (i === range.count - 1) {\n        position = 'last';\n      } else {\n        position = 'middle';\n      }\n      resourceGroupMap[idx] = { group: range.group, position, count: range.count };\n    }\n  }\n\n  return { orderedResources, groupRanges, resourceGroupMap };\n}\n"],"mappings":";;AAoBA,SAAgB,oBACd,WACA,QACwB;CACxB,IAAI,CAAC,UAAU,OAAO,WAAW,GAC/B,OAAO;EAAE,kBAAkB;EAAW,aAAa,CAAC;EAAG,kBAAkB,CAAC;CAAE;CAG9E,MAAM,cAAc,IAAI,IAAI,UAAU,KAAK,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;CAC3D,MAAM,0BAAU,IAAI,IAAqB;CACzC,MAAM,mBAA2C,CAAC;CAClD,MAAM,cAA4B,CAAC;CAEnC,KAAK,MAAM,SAAS,QAAQ;EAC1B,MAAM,aAAa,iBAAiB;EACpC,IAAI,QAAQ;EAEZ,KAAK,MAAM,MAAM,MAAM,aAAa;GAClC,MAAM,WAAW,YAAY,IAAI,EAAE;GACnC,IAAI,YAAY,CAAC,QAAQ,IAAI,EAAE,GAAG;IAChC,iBAAiB,KAAK,QAAQ;IAC9B,QAAQ,IAAI,EAAE;IACd;GACF;EACF;EAEA,IAAI,QAAQ,GACV,YAAY,KAAK;GAAE;GAAO;GAAY;EAAM,CAAC;CAEjD;CAEA,KAAK,MAAM,YAAY,WACrB,IAAI,CAAC,QAAQ,IAAI,SAAS,EAAE,GAC1B,iBAAiB,KAAK,QAAQ;CAIlC,MAAM,mBAAiD,IAAI,MAAM,iBAAiB,MAAM,CAAC,CAAC,KACxF,IACF;CAEA,KAAK,MAAM,SAAS,aAClB,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,OAAO,KAAK;EACpC,MAAM,MAAM,MAAM,aAAa;EAC/B,IAAI;EACJ,IAAI,MAAM,UAAU,GAClB,WAAW;OACN,IAAI,MAAM,GACf,WAAW;OACN,IAAI,MAAM,MAAM,QAAQ,GAC7B,WAAW;OAEX,WAAW;EAEb,iBAAiB,OAAO;GAAE,OAAO,MAAM;GAAO;GAAU,OAAO,MAAM;EAAM;CAC7E;CAGF,OAAO;EAAE;EAAkB;EAAa;CAAiB;AAC3D"}