{"version":3,"file":"sort-e0b042bf.js","sources":["../../../../src/scripts/coveo/controllers/sort-criteria.tsx","../../../../src/scripts/coveo/components/sort.tsx"],"sourcesContent":["import {\n  buildRelevanceSortCriterion,\n  buildFieldSortCriterion,\n  SortOrder,\n  SortByRelevancy,\n  SortByField\n} from '@coveo/headless';\n\nconst SORT_ORDER = Object.freeze({\n  ascending: SortOrder.Ascending,\n  descending: SortOrder.Descending\n});\n\nexport type SortFields = {\n  title: string;\n  field: string;\n  type: string;\n  direction: string;\n  context?: {\n    [key: string]: string;\n  };\n};\n\nexport type SortCriteria = {\n  title: string;\n  criterion: SortByRelevancy | SortByField | null;\n};\n\nconst { dataset } = document.getElementsByClassName(\n  'coveo-listing__data-wrapper'\n)[0] as HTMLElement;\n\nlet fields = [];\n\nif (dataset.sortFields) {\n  fields = JSON.parse(dataset.sortFields);\n}\n\nexport const sortFields = fields.map((field: SortFields) => {\n  const obj = {\n    title: field.title,\n    criterion: null,\n    context: field.context\n  } as SortCriteria;\n\n  if (field.type === 'relevance') {\n    obj.criterion = buildRelevanceSortCriterion();\n  }\n\n  if (field.type === 'field') {\n    obj.criterion = buildFieldSortCriterion(\n      field.field,\n      SORT_ORDER[field.direction as keyof typeof SORT_ORDER]\n    );\n  }\n\n  return obj;\n});\n","import React, { useEffect, useState, useId, useContext } from 'react';\nimport { buildSort, ContextPayload, SearchEngine } from '@coveo/headless';\nimport { sortFields } from '../controllers/sort-criteria';\nimport { ExtendedWindowType, headlessEngine } from '../engine';\nimport { SortCriteria } from '../controllers/sort-criteria';\nimport { CoveoContext } from './context';\nimport SecondCall from './second-call-context';\n\ntype SortProps = {\n  sortByLabel: string;\n  extraClasses?: string;\n};\n\nconst initialCriterion = sortFields[0].criterion;\nconst initialContext = sortFields[0].context;\n\nif (initialContext) {\n  const context = CoveoContext();\n\n  context?.set({\n    sortingStrategy: initialContext.sortingStrategy\n  } as ContextPayload);\n}\n\nconst controller = buildSort(headlessEngine as SearchEngine, {\n  initialState: { criterion: initialCriterion }\n});\n\nexport const Sort = ({ sortByLabel, extraClasses }: SortProps) => {\n  const [state, setState] = useState(controller.state);\n  const secondCallContext = useContext(SecondCall);\n  const id = useId();\n\n  useEffect(() => {\n    controller.subscribe(() => setState(controller.state));\n  }, []);\n\n  const handleChange = (e: React.ChangeEvent<HTMLSelectElement>) => {\n    const sort = sortFields.find(\n      (field: SortCriteria) => field.title === e.target.value\n    );\n\n    const criterion = sort?.criterion;\n    secondCallContext.setOriginalContext?.(undefined);\n    if (criterion && sort?.context) {\n      const context = CoveoContext();\n\n      context?.set({\n        sortingStrategy: sort.context.sortingStrategy\n      } as ContextPayload);\n    }\n\n    controller.sortBy(criterion);\n\n    const global = window as ExtendedWindowType;\n\n    global.dataLayer?.push({\n      event: 'sort_by',\n      event_category: 'listing page interactions',\n      event_action: 'sort by'\n    });\n  };\n\n  const getCurrentCriterion = () => {\n    const criterion = sortFields.find((field: SortCriteria) => {\n      if (field.criterion?.by !== 'field') {\n        return field.criterion?.by === state.sortCriteria;\n      } else {\n        return (\n          state.sortCriteria ===\n          `@${field.criterion?.field} ${field.criterion?.order}`\n        );\n      }\n    })?.title;\n\n    return criterion;\n  };\n\n  return (\n    <div>\n      <div className={`field field--select ${extraClasses || ''}`}>\n        <label htmlFor={`coveo-select${id}`} className=\"field__label\">\n          {sortByLabel}\n        </label>\n        <select\n          name={`coveo-select${id}`}\n          id={`coveo-select${id}`}\n          className=\"field__select\"\n          onChange={handleChange}\n          value={getCurrentCriterion()}\n        >\n          {sortFields.map((field: SortCriteria, index: number) => (\n            <option key={index} value={field.title}>\n              {field.title}\n            </option>\n          ))}\n        </select>\n      </div>\n    </div>\n  );\n};\n"],"names":["SORT_ORDER","SortOrder","dataset","fields","sortFields","field","obj","buildRelevanceSortCriterion","buildFieldSortCriterion","initialCriterion","initialContext","context","CoveoContext","controller","buildSort","headlessEngine","Sort","sortByLabel","extraClasses","state","setState","useState","secondCallContext","useContext","SecondCall","id","useId","useEffect","handleChange","e","sort","criterion","_a","_b","getCurrentCriterion","_c","_d","React","index"],"mappings":"0PAQA,MAAMA,EAAa,OAAO,OAAO,CAC/B,UAAWC,EAAU,UACrB,WAAYA,EAAU,UACxB,CAAC,EAiBK,CAAE,QAAAC,CAAQ,EAAI,SAAS,uBAC3B,6BACF,EAAE,CAAC,EAEH,IAAIC,EAAS,CAAA,EAETD,EAAQ,aACDC,EAAA,KAAK,MAAMD,EAAQ,UAAU,GAGjC,MAAME,EAAaD,EAAO,IAAKE,GAAsB,CAC1D,MAAMC,EAAM,CACV,MAAOD,EAAM,MACb,UAAW,KACX,QAASA,EAAM,OAAA,EAGb,OAAAA,EAAM,OAAS,cACjBC,EAAI,UAAYC,KAGdF,EAAM,OAAS,UACjBC,EAAI,UAAYE,EACdH,EAAM,MACNL,EAAWK,EAAM,SAAoC,CAAA,GAIlDC,CACT,CAAC,EC5CKG,EAAmBL,EAAW,CAAC,EAAE,UACjCM,EAAiBN,EAAW,CAAC,EAAE,QAErC,GAAIM,EAAgB,CAClB,MAAMC,EAAUC,IAEhBD,GAAA,MAAAA,EAAS,IAAI,CACX,gBAAiBD,EAAe,eAAA,GAIpC,MAAMG,EAAaC,EAAUC,EAAgC,CAC3D,aAAc,CAAE,UAAWN,CAAiB,CAC9C,CAAC,EAEYO,EAAO,CAAC,CAAE,YAAAC,EAAa,aAAAC,KAA8B,CAChE,KAAM,CAACC,EAAOC,CAAQ,EAAIC,EAAAA,SAASR,EAAW,KAAK,EAC7CS,EAAoBC,aAAWC,CAAU,EACzCC,EAAKC,EAAAA,QAEXC,EAAAA,UAAU,IAAM,CACdd,EAAW,UAAU,IAAMO,EAASP,EAAW,KAAK,CAAC,CACvD,EAAG,CAAE,CAAA,EAEC,MAAAe,EAAgBC,GAA4C,SAChE,MAAMC,EAAO1B,EAAW,KACrBC,GAAwBA,EAAM,QAAUwB,EAAE,OAAO,KAAA,EAG9CE,EAAYD,GAAA,YAAAA,EAAM,UAEpB,IADJE,EAAAV,EAAkB,qBAAlB,MAAAU,EAAA,KAAAV,EAAuC,QACnCS,IAAaD,GAAA,MAAAA,EAAM,SAAS,CAC9B,MAAMnB,EAAUC,IAEhBD,GAAA,MAAAA,EAAS,IAAI,CACX,gBAAiBmB,EAAK,QAAQ,eAAA,GAIlCjB,EAAW,OAAOkB,CAAS,GAI3BE,EAFe,OAER,YAAP,MAAAA,EAAkB,KAAK,CACrB,MAAO,UACP,eAAgB,4BAChB,aAAc,SAAA,EACf,EAGGC,EAAsB,IAAM,OAYzB,OAXWF,EAAA5B,EAAW,KAAMC,GAAwB,aACrD,QAAA2B,EAAA3B,EAAM,YAAN,YAAA2B,EAAiB,MAAO,UACnBC,EAAA5B,EAAM,YAAN,YAAA4B,EAAiB,MAAOd,EAAM,aAGnCA,EAAM,eACN,KAAIgB,EAAA9B,EAAM,YAAN,YAAA8B,EAAiB,UAASC,EAAA/B,EAAM,YAAN,YAAA+B,EAAiB,OAGpD,CAAA,IATiB,YAAAJ,EASd,KAEG,EAGT,uBACG,MACC,KAAAK,EAAA,cAAC,MAAI,CAAA,UAAW,uBAAuBnB,GAAgB,IAAA,EACpDmB,EAAA,cAAA,QAAA,CAAM,QAAS,eAAeZ,IAAM,UAAU,cAAA,EAC5CR,CACH,EACAoB,EAAA,cAAC,SAAA,CACC,KAAM,eAAeZ,IACrB,GAAI,eAAeA,IACnB,UAAU,gBACV,SAAUG,EACV,MAAOM,EAAoB,CAAA,EAE1B9B,EAAW,IAAI,CAACC,EAAqBiC,IACnCD,EAAA,cAAA,SAAA,CAAO,IAAKC,EAAO,MAAOjC,EAAM,KAC9B,EAAAA,EAAM,KACT,CACD,CAEL,CAAA,CACF,CAEJ"}