{"version":3,"file":"sort-ec9dcaef.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) => {\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
\n
\n \n \n {sortFields.map((field: SortCriteria, index: number) => (\n \n ))}\n \n
\n
\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":"kPAQA,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"}