{"version":3,"file":"useFilterConversion.cjs","names":["_react","require","useFilterConversion","columns","filters","convertFilterSelectOptions","useCallback","options","map","option","label","value","convertColumnToFilter","column","enableColumnFilter","accessorKey","id","header","variant","filterVariant","filterSelectOptions","dataTableFilters","useMemo","providedFilters","reduce","accumulator","item","foundColumn","find","filter","concat","exports"],"sources":["../../../../src/labs/DataView/useFilterConversion.ts"],"sourcesContent":["/*!\n * Copyright (c) 2024-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { MRT_RowData } from \"material-react-table\";\nimport { useCallback, useMemo } from \"react\";\n\nimport { DataTableColumn } from \"../../DataTable/DataTable.js\";\nimport { DataFilter } from \"../DataFilters.js\";\nimport { TableLayoutProps, UniversalProps } from \"./componentTypes.js\";\n\ntype FilterConversionType<TData extends MRT_RowData> = {\n  columns?: TableLayoutProps<TData>[\"columns\"];\n  filters?: UniversalProps<TData>[\"filters\"];\n};\n\nexport const useFilterConversion = <TData extends MRT_RowData>({\n  columns,\n  filters,\n}: FilterConversionType<TData>) => {\n  const convertFilterSelectOptions = useCallback(\n    (options: DataTableColumn<TData>[\"filterSelectOptions\"]) =>\n      options?.map((option) =>\n        typeof option === \"string\"\n          ? {\n              label: option,\n              value: option,\n            }\n          : {\n              // If the option isn't a string, it must have value and/or option defined. If either is undefined, use the other\n              label: (option.label ?? option.value) as string,\n              value: (option.value ?? option.label) as string,\n            },\n      ),\n    [],\n  );\n\n  const convertColumnToFilter = useCallback(\n    (column: DataTableColumn<TData>) =>\n      column.enableColumnFilter !== false && column.accessorKey\n        ? {\n            id: column.accessorKey,\n            label: column.header,\n            variant: column.filterVariant,\n            options: convertFilterSelectOptions(column.filterSelectOptions),\n          }\n        : null,\n    [convertFilterSelectOptions],\n  );\n\n  const dataTableFilters = useMemo(() => {\n    // Filters may be manually set via the `filters` variable;\n    // If not, they may be inferred from `columns`\n    const providedFilters = filters || columns || [];\n\n    return providedFilters.reduce<DataFilter[]>((accumulator, item) => {\n      if (typeof item === \"string\") {\n        const foundColumn = columns?.find(\n          (column) => column.accessorKey === item,\n        );\n        const filter = foundColumn && convertColumnToFilter(foundColumn);\n        return filter ? accumulator.concat(filter) : accumulator;\n      }\n\n      if (\"accessorKey\" in item) {\n        const filter = convertColumnToFilter(item);\n        return filter ? accumulator.concat(filter) : accumulator;\n      }\n\n      if (\"label\" in item) {\n        return accumulator.concat(item);\n      }\n\n      return accumulator;\n    }, []);\n  }, [columns, convertColumnToFilter, filters]);\n\n  return dataTableFilters;\n};\n"],"mappings":";;;;;;AAaA,IAAAA,MAAA,GAAAC,OAAA;AAbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAcO,MAAMC,mBAAmB,GAAGA,CAA4B;EAC7DC,OAAO;EACPC;AAC2B,CAAC,KAAK;EACjC,MAAMC,0BAA0B,GAAG,IAAAC,kBAAW,EAC3CC,OAAsD,IACrDA,OAAO,EAAEC,GAAG,CAAEC,MAAM,IAClB,OAAOA,MAAM,KAAK,QAAQ,GACtB;IACEC,KAAK,EAAED,MAAM;IACbE,KAAK,EAAEF;EACT,CAAC,GACD;IAEEC,KAAK,EAAGD,MAAM,CAACC,KAAK,IAAID,MAAM,CAACE,KAAgB;IAC/CA,KAAK,EAAGF,MAAM,CAACE,KAAK,IAAIF,MAAM,CAACC;EACjC,CACN,CAAC,EACH,EACF,CAAC;EAED,MAAME,qBAAqB,GAAG,IAAAN,kBAAW,EACtCO,MAA8B,IAC7BA,MAAM,CAACC,kBAAkB,KAAK,KAAK,IAAID,MAAM,CAACE,WAAW,GACrD;IACEC,EAAE,EAAEH,MAAM,CAACE,WAAW;IACtBL,KAAK,EAAEG,MAAM,CAACI,MAAM;IACpBC,OAAO,EAAEL,MAAM,CAACM,aAAa;IAC7BZ,OAAO,EAAEF,0BAA0B,CAACQ,MAAM,CAACO,mBAAmB;EAChE,CAAC,GACD,IAAI,EACV,CAACf,0BAA0B,CAC7B,CAAC;EAED,MAAMgB,gBAAgB,GAAG,IAAAC,cAAO,EAAC,MAAM;IAGrC,MAAMC,eAAe,GAAGnB,OAAO,IAAID,OAAO,IAAI,EAAE;IAEhD,OAAOoB,eAAe,CAACC,MAAM,CAAe,CAACC,WAAW,EAAEC,IAAI,KAAK;MACjE,IAAI,OAAOA,IAAI,KAAK,QAAQ,EAAE;QAC5B,MAAMC,WAAW,GAAGxB,OAAO,EAAEyB,IAAI,CAC9Bf,MAAM,IAAKA,MAAM,CAACE,WAAW,KAAKW,IACrC,CAAC;QACD,MAAMG,MAAM,GAAGF,WAAW,IAAIf,qBAAqB,CAACe,WAAW,CAAC;QAChE,OAAOE,MAAM,GAAGJ,WAAW,CAACK,MAAM,CAACD,MAAM,CAAC,GAAGJ,WAAW;MAC1D;MAEA,IAAI,aAAa,IAAIC,IAAI,EAAE;QACzB,MAAMG,MAAM,GAAGjB,qBAAqB,CAACc,IAAI,CAAC;QAC1C,OAAOG,MAAM,GAAGJ,WAAW,CAACK,MAAM,CAACD,MAAM,CAAC,GAAGJ,WAAW;MAC1D;MAEA,IAAI,OAAO,IAAIC,IAAI,EAAE;QACnB,OAAOD,WAAW,CAACK,MAAM,CAACJ,IAAI,CAAC;MACjC;MAEA,OAAOD,WAAW;IACpB,CAAC,EAAE,EAAE,CAAC;EACR,CAAC,EAAE,CAACtB,OAAO,EAAES,qBAAqB,EAAER,OAAO,CAAC,CAAC;EAE7C,OAAOiB,gBAAgB;AACzB,CAAC;AAACU,OAAA,CAAA7B,mBAAA,GAAAA,mBAAA","ignoreList":[]}