{"version":3,"sources":["../src/components/containers/XCategoryFilter/index.tsx","../src/components/containers/XCategoryFilter/FilterSide/index.tsx","../src/components/containers/XCategoryFilter/FilterSide/FilterSection.tsx","../src/components/containers/XCategoryFilter/FilterSide/CategoryFilter.tsx","../src/components/containers/XGrid/PricingFilter.tsx","../src/components/containers/XCategoryFilter/FilterSide/BadgesFilter.tsx","../src/hooks/useBadges.ts","../src/components/containers/XCategoryFilter/FilterSide/OtherOptionsFilter.tsx","../src/hooks/useOptions.ts","../src/components/containers/XCategoryFilter/FilterSide/ColorPicker.tsx","../src/components/containers/XCategoryFilter/FilterSide/CheckboxFilter.tsx","../src/components/containers/XCategoryFilter/GridSide/index.tsx","../src/components/containers/XCategoryFilter/GridSide/GridSorter.tsx","../src/components/containers/XCategoryFilter/GridSide/GridArticleList.tsx"],"names":["React","Container","Drawer","Stack","useSetRecoilState","isEqual","Accordion","AccordionDetails","AccordionSummary","Typography","ExpandMore","FilterSection","title","child","FilterSection_default","List","ListItemButton","ListItemText","CategoryFilter","onChange","urlParams","categories","useCategories","cat","CategoryFilter_default","Button","Slider","useDebouncedCallback","PricingFilter","pricingMode","pricingHandlerBorder","pricingHandlerWidth","pricingHandlerHeight","pricingHandlerRadius","pricingHandlerColor","pricingLineHeight","pricingLineColor","pricingHoverHandlerColor","pricingActiveLineHeight","pricingActiveLineColor","pricingBtnColor","pricingBtnTextColor","pricingBtnHoverColor","pricingBtnHoverTextColor","pricingHoverHandlerBorder","value","setValue","handleChange","newValue","debounced","price","generateBorder","generateRadius","_","v","PricingFilter_default","Chip","atom","useSWR","USE_BADGES","useBadges","articleId","apiFetcher","businessId","useXoraiaValue","requestKey","data","error","TagsFilter","tagHeight","tagPadding","tagRadius","tagFontSize","tagBorder","tagBgColor","tagTextColor","tagActiveBorder","tagActiveBgColor","tagActiveTextColor","badges","handleClick","index","tag","BadgesFilter_default","USE_OPTIONS","useOptions","ToggleButton","ToggleButtonGroup","ColorPicker","colorPickerBorder","colorPickerColors","colorPickerSize","slug","color","setColor","_color","c","ColorPicker_default","Checkbox","FormControlLabel","FormGroup","CheckboxFilter","values","list","setList","checked","newList","i","CheckboxFilter_default","OtherOptionsFilter","props","options","opt","OtherOptionsFilter_default","FilterSide","filterBgColor","filterWidth","filterPadding","sectionGap","divider","titleFontSize","titleFontWeight","titleFontStyle","titleColor","titleBgColor","titleHeight","checkboxSize","checkboxTextColor","checkboxColor","generateSide","FilterSide_default","Pagination","FilterListRounded","IconButton","Select","GridSorter","gridSorterBgColor","gridSorterFontSize","gridSorterRadius","gridSorterPadding","gridSorterMargin","gridSorterColor","gridSorterSelectBgColor","gridSorterSelectColor","gridSorterSelectBorder","gridSorterSelectRadius","articlesCount","pageLimit","pageCount","setOpenFilter","breakpoint","useBreakpoint","env","currentPage","fromCount","toCount","isSmall","e","GridSorter_default","GridArticleList","Grid","article","id","XArticleProvider_default","XArticle_default","GridArticleList_default","GridSide","_page","GridSide_default","compareProps","prevProps","nextProps","XCategoryFilter","config","openFilter","setArticlesCount","updateUrlParams","xElement","useXElement","articles","useArticles","args","old","setSelectedElement","USE_SELECTED_INDEX","valueAtBreakPoint","getValueOnBreakpoint","devProps","clickHandler","padding","margin","bgColor","containerMode","filterPosition","textColor","fontSize","style","gridSide","filterSide","content","XCategoryFilter_default"],"mappings":"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","sourcesContent":["import * as React from \"react\";\nimport { Container, Drawer, Stack, SxProps } from \"@mui/material\";\n// import { useRouter } from \"next/router\";\n\nimport { useBreakpoint } from \"../../../hooks/useBreakpoint\";\nimport {\n  // IDataFetching,\n  TSetUrlParamsArgs,\n  useXoraiaValue,\n} from \"../../../hooks/useXoraia\";\nimport { TUseXElement, useXElement } from \"../../../hooks/useXElement\";\nimport { USE_SELECTED_INDEX } from \"../../../hooks/useSelectedElement\";\nimport { useSetRecoilState } from \"recoil\";\nimport { getValueOnBreakpoint } from \"../../../lib/getValueOnBreakpoint\";\nimport { clickHandler } from \"../../../lib/clickHandler\";\n\nimport { isEqual } from \"lodash\";\nimport { XElementConfig } from \"../../../utils/interfaces/Elements/XElement.interfaces\";\nimport {\n  IXCategoryFilterProps,\n  XCategoryFilterProps,\n} from \"../../../utils/interfaces/containers/XCategoryFilter.interfaces\";\nimport FilterSide from \"./FilterSide\";\nimport GridSide from \"./GridSide\";\nimport { useArticles } from \"../../../hooks/useArticles\";\nimport { generateSide } from \"../../../lib/generateSide\";\n\nconst compareProps = (prevProps: any, nextProps: any) => {\n  return isEqual(prevProps, nextProps);\n};\n\n// TODO SOLVE TEXT COLOR ISSUE\n// todo solve font size issue\n// todo solve seperator issue\n// todo solve section gutter issue\n// todo solve checkbox count issue\n\nconst XCategoryFilter: React.FC<XCategoryFilterProps> = React.memo(\n  ({ config = {} as XElementConfig }) => {\n    const [openFilter, setOpenFilter] = React.useState<boolean>(false);\n    const [articlesCount, setArticlesCount] = React.useState<number>(0);\n\n    const [urlParams, updateUrlParams] = React.useState<TSetUrlParamsArgs>({});\n\n    // WE TRACK THE BREAK POINTS CHANGES\n    const breakpoint = useBreakpoint();\n\n    const { env } = useXoraiaValue();\n\n    // WE ARE GETTING THE CURRENT ELEMENT FROM THE ATOM FAMILY\n    const { xElement } = useXElement<TUseXElement<IXCategoryFilterProps>>(\n      config.index\n    );\n\n    const { articles } = useArticles({\n      limit: 8,\n      ...xElement.dataFetching,\n      ...urlParams,\n    });\n\n    const onChange = async (args: TSetUrlParamsArgs) => {\n      try {\n        updateUrlParams((old) => ({ ...old, ...args }));\n\n        // TODO IMPLEMENT using useArticle ans props count\n        setArticlesCount(20);\n      } catch (error) {\n        console.error(\"UPDATE_URL =>\", error);\n      }\n    };\n\n    // GARBING THE INDEX UPDATER FOR GENERAL USAGE\n    const setSelectedElement = useSetRecoilState(USE_SELECTED_INDEX);\n\n    // IF WE DONT HAVE THIS ELEMENT CONFIGS ADDED WE DON'T SHOW IT\n    if (!xElement || Object.keys(xElement).length === 0) return null;\n\n    // WE GET ALL DEVICES PROPS AS VALUE\n    const { value } = xElement;\n\n    // WE NOW USE THE CURRENT BREAKPOINT VALUE ON THIS ELEMENT\n    const valueAtBreakPoint = getValueOnBreakpoint<IXCategoryFilterProps>(\n      value as any,\n      breakpoint\n    );\n\n    const devProps = {\n      id: config.index,\n      onClick: (e: any) => clickHandler(e, setSelectedElement, config.index),\n      // ...(!xElement.childOf && dndProps),\n    };\n\n    const {\n      padding, // TODO ADD THIS TO SETTINGs\n      margin, // TODO ADD THIS TO SETTINGs\n      bgColor,\n\n      // columns = 3,\n      // pageLimit = 20,\n      containerMode = \"FILL\",\n      filterPosition = \"left\",\n      // fontFamily = DEFAULT_FONT_FAMILY,\n      textColor = \"#000000\",\n      fontSize = \"16px\",\n      // primaryColor = MAIN_COLOR,\n      // collapsible = true,\n    } = valueAtBreakPoint;\n\n    const style: SxProps = {\n      // fontFamily,\n      fontSize,\n      color: textColor,\n      bgcolor: bgColor,\n      padding: generateSide(\"padding\", padding),\n      margin: generateSide(\"margin\", margin),\n    };\n\n    const gridSide = (\n      <GridSide\n        {...valueAtBreakPoint}\n        articles={articles}\n        onChange={onChange}\n        urlParams={urlParams}\n        articlesCount={articlesCount}\n        setOpenFilter={setOpenFilter}\n      />\n    );\n\n    let filterSide = (\n      <FilterSide\n        {...valueAtBreakPoint}\n        onChange={onChange}\n        urlParams={urlParams}\n      />\n    );\n\n    if (breakpoint === \"tablet\" || breakpoint === \"mobile\") {\n      filterSide = (\n        <Drawer\n          anchor=\"left\"\n          style={{ width: valueAtBreakPoint.filterWidth }}\n          open={openFilter}\n          onClose={() => setOpenFilter(false)}\n          PaperProps={{\n            sx: { px: 2 },\n          }}\n        >\n          {filterSide}\n        </Drawer>\n      );\n    }\n\n    let content = (\n      <Stack\n        id=\"XCategoryFilter_Container\"\n        direction=\"row\"\n        spacing={3}\n        sx={style}\n      >\n        {filterPosition === \"left\" ? filterSide : gridSide}\n        {filterPosition === \"left\" ? gridSide : filterSide}\n      </Stack>\n    );\n\n    if (containerMode === \"CENTER\") {\n      content = <Container>{content}</Container>;\n    } else if (containerMode === \"FILL\") {\n      content = <Container maxWidth={false}>{content}</Container>;\n    }\n\n    return (\n      <Stack\n        position=\"relative\"\n        {...(env === \"dev\" && devProps)}\n        width=\"100%\"\n        // sx={{\n        //   margin: generateSide(\"margin\", margin),\n        //   padding: generateSide(\"padding\", padding),\n        // }}\n      >\n        {content}\n      </Stack>\n    );\n  },\n  compareProps\n);\n\nexport default XCategoryFilter;\n","import * as React from \"react\";\nimport { Stack } from \"@mui/material\";\nimport { generateSide } from \"../../../../lib/generateSide\";\nimport { IXCategoryFilterProps } from \"../../../../utils/interfaces/containers/XCategoryFilter.interfaces\";\nimport { TSetUrlParamsArgs } from \"../../../../hooks/useXoraia\";\nimport FilterSection from \"./FilterSection\";\nimport CategoryFilter from \"./CategoryFilter\";\nimport PricingFilter from \"../../XGrid/PricingFilter\";\nimport BadgesFilter from \"./BadgesFilter\";\nimport OtherOptionsFilter from \"./OtherOptionsFilter\";\n\nconst FilterSide: React.FC<\n  IXCategoryFilterProps & {\n    onChange: (args: TSetUrlParamsArgs) => Promise<void>;\n\n    urlParams: TSetUrlParamsArgs;\n  }\n> = (props) => {\n  const {\n    filterBgColor,\n    filterWidth = \"300px\",\n    filterPadding,\n    sectionGap = \"20px\",\n    divider = false,\n    // TITLE\n    titleFontSize = \"18px\",\n    titleFontWeight = 500,\n    titleFontStyle = \"normal\",\n    titleColor = \"#000000\",\n    titleBgColor,\n    titleHeight = \"50px\",\n\n    // GRID\n\n    // pageLimit = 5, // TODO IMPLEMENT PAGE LIMITE\n\n    // CHECK BOX\n    checkboxSize = \"20px\",\n    checkboxTextColor,\n    checkboxColor,\n  } = props;\n\n  return (\n    <Stack\n      spacing={sectionGap}\n      bgcolor={filterBgColor}\n      width={filterWidth}\n      sx={{\n        padding: generateSide(\"padding\", filterPadding),\n        \"&.XCategoryFilter_Filter\": {\n          position: \"sticky\",\n          top: 0,\n          left: 0,\n\n          \"& .XCategoryFilter_FilterSection\": {\n            bgcolor: \"transparent\",\n            mt: 0,\n            borderRadius: 0,\n            border: 0,\n            lineHeight: \"1em\",\n            borderBottom: divider ? 3 : 0,\n            borderBottomColor: \"#cdcdcd\",\n\n            \"&:not(last-of-type)\": {\n              borderBottom: 0,\n            },\n\n            \"&:before\": {\n              display: \"none\",\n            },\n\n            \"&.Mui-expanded\": {\n              pb: 2,\n            },\n\n            \"& .MuiPaper-root\": {\n              bgcolor: \"transparent\",\n            },\n\n            \"& .MuiAccordionSummary-root\": {\n              px: 0,\n              alignItems: \"center\",\n              minHeight: \"auto\",\n              bgcolor: \"transparent\",\n\n              \"& .MuiAccordionSummary-content\": {\n                mt: 0,\n                mb: 0,\n                height: titleHeight,\n                alignItems: \"center\",\n                bgcolor: titleBgColor ?? \"transparent\",\n\n                // \"&:hover\": {\n                //   color: primaryColor,\n                // },\n\n                \"& .XCategoryFilter_FilterSection_Title\": {\n                  fontSize: titleFontSize,\n                  fontWeight: titleFontWeight,\n                  fontStyle: titleFontStyle,\n                  color: titleColor,\n                  lineHeight: \"1em\",\n                  fontFamily: \"inherit\",\n                  width: \"100%\",\n                },\n              },\n            },\n\n            \"& .MuiCollapse-root\": {\n              // borderLeft: '1px solid #eee',\n\n              \"& .MuiAccordionDetails-root\": {\n                p: 0,\n\n                \"& .MuiListItemText-root\": {\n                  m: 0,\n                  \"& span\": { lineHeight: \"1em\" },\n                },\n\n                // CHECKBOX FILTER\n                \"& .MuiFormGroup-root\": {\n                  // CHECKBOX\n                  \"& .MuiCheckbox-root\": {\n                    \"&.Mui-checked\": {\n                      color: checkboxColor,\n                      // color: checkboxActiveColor,\n                    },\n\n                    \"& .MuiSvgIcon-root\": {\n                      fontSize: checkboxSize,\n                    },\n                  },\n                  // LABEL\n                  \"& .MuiFormControlLabel-root\": {\n                    color: checkboxTextColor,\n\n                    \"& .MuiTypography-root\": {\n                      color: \"inherit\",\n\n                      \"&:not(.MuiTypography-caption)\": {\n                        fontSize: \"inherit\",\n                      },\n                    },\n                  },\n                },\n              },\n            },\n          },\n        },\n      }}\n      className=\"XCategoryFilter_Filter\"\n    >\n      <FilterSection title=\"Catégories\" child={<CategoryFilter {...props} />} />\n      <FilterSection title=\"Prix\" child={<PricingFilter {...props} />} />\n      <FilterSection title=\"Badges\" child={<BadgesFilter {...props} />} />\n      <OtherOptionsFilter {...props} />\n    </Stack>\n  );\n};\n\nexport default FilterSide;\n","import * as React from \"react\";\nimport {\n  Accordion,\n  AccordionDetails,\n  AccordionSummary,\n  Typography,\n} from \"@mui/material\";\n// import { useRouter } from \"next/router\";\n\nimport { ExpandMore } from \"@mui/icons-material\";\n\nconst FilterSection: React.FC<{ title: string; child: React.ReactNode }> = ({\n  title,\n  child,\n}) => {\n  return (\n    <Accordion\n      variant=\"outlined\"\n      disableGutters\n      defaultExpanded\n      className=\"XCategoryFilter_FilterSection\"\n    >\n      <AccordionSummary\n        expandIcon={<ExpandMore sx={{ fontSize: \"18px\", color: \"inherit\" }} />}\n      >\n        <Typography className=\"XCategoryFilter_FilterSection_Title\">\n          {title}\n        </Typography>\n      </AccordionSummary>\n      <AccordionDetails>{child}</AccordionDetails>\n    </Accordion>\n  );\n};\n\nexport default FilterSection;\n","import * as React from \"react\";\nimport { List, ListItemButton, ListItemText, Typography } from \"@mui/material\";\nimport { TSetUrlParamsArgs } from \"../../../../hooks/useXoraia\";\nimport { useCategories } from \"../../../../hooks/useCategories\";\n\nconst CategoryFilter: React.FC<{\n  showCount?: boolean; // TODO IMPLEMENT COUNT\n  onChange: (args: TSetUrlParamsArgs) => Promise<void>;\n  urlParams?: TSetUrlParamsArgs;\n}> = ({ onChange, urlParams = {} }) => {\n  const { categories } = useCategories();\n\n  if (categories.length === 0) {\n    return (\n      <Typography color=\"GrayText\">{\"Il n'y a aucune catégorie\"}</Typography>\n    );\n  }\n\n  return (\n    <List disablePadding>\n      {categories.map((cat) => {\n        return (\n          <ListItemButton\n            key={cat.id}\n            disableGutters\n            disableRipple\n            selected={urlParams.c === cat.id}\n            onClick={async () => {\n              await onChange({ c: cat.id });\n            }}\n          >\n            <ListItemText primary={cat.name} />\n            {/* <ListItemText primary={`Category 1${showCount ? \" (10)\" : \"\"}`} /> */}\n          </ListItemButton>\n        );\n      })}\n    </List>\n  );\n};\n\nexport default CategoryFilter;\n","import { Button, Slider, Stack, Typography } from \"@mui/material\";\nimport { useDebouncedCallback } from \"use-debounce\";\nimport * as React from \"react\";\nimport { generateBorder } from \"../../../lib/generateBorder\";\nimport { generateRadius } from \"../../../lib/generateRadius\";\nimport { PricingFilterProps } from \"../../../utils/interfaces/core/PricingFilterProps\";\n\nconst PricingFilter: React.FC<PricingFilterProps> = ({\n  pricingMode = \"column\",\n  pricingHandlerBorder = { width: \"3px\" },\n  pricingHandlerWidth = \"20px\",\n  pricingHandlerHeight = \"20px\",\n  pricingHandlerRadius,\n  pricingHandlerColor = \"#FFFFFF\",\n  pricingLineHeight = \"3px\",\n  pricingLineColor = \"#EEEEEE\",\n  pricingHoverHandlerColor = \"#FFFFFF\",\n  pricingActiveLineHeight = \"3px\",\n  pricingActiveLineColor = \"#000000\",\n  pricingBtnColor = \"#000000\",\n  pricingBtnTextColor = \"#FFFFFF\",\n  pricingBtnHoverColor = \"#000000\",\n  pricingBtnHoverTextColor = \"#FFFFFF\",\n  pricingHoverHandlerBorder,\n\n  /**\n   * FOR EDITION\n   */\n  onChange,\n  urlParams = {},\n}) => {\n  const [value, setValue] = React.useState<number[]>([\n    urlParams.mn ?? 0,\n    urlParams.mx ?? 1000000,\n  ]);\n\n  React.useEffect(() => {\n    if (urlParams.mn || urlParams.mx) {\n      setValue([urlParams.mn ?? 0, urlParams.mx ?? 1000000]);\n    }\n  }, [urlParams]);\n\n  const handleChange = async (newValue: number | number[]) => {\n    if (pricingMode === \"auto\" && onChange) {\n      await onChange({ mn: newValue[0], mx: newValue[1] });\n    }\n  };\n\n  const debounced = useDebouncedCallback((value: number[]) => {\n    handleChange(value);\n  }, 300);\n\n  const price = (\n    <Typography>\n      Prix: {value[0]} F CFA - {value[1]} F CFA\n    </Typography>\n  );\n\n  return (\n    <Stack\n      id=\"PricingFilter\"\n      sx={{\n        \"&#PricingFilter\": {\n          \"& .MuiButtonBase-root\": {\n            bgcolor: pricingBtnColor,\n            color: pricingBtnTextColor,\n\n            \"&:hover\": {\n              bgcolor: pricingBtnHoverColor,\n              color: pricingBtnHoverTextColor,\n            },\n          },\n          \"& .MuiSlider-root\": {\n            color: pricingActiveLineColor,\n\n            \"& .MuiSlider-rail\": {\n              height: pricingLineHeight,\n              backgroundColor: pricingLineColor,\n            },\n\n            \"& .MuiSlider-track\": {\n              height: pricingActiveLineHeight,\n            },\n\n            \"& .MuiSlider-thumb\": {\n              border: generateBorder(pricingHandlerBorder),\n\n              bgcolor: pricingHandlerColor,\n              width: pricingHandlerWidth,\n              height: pricingHandlerHeight,\n              borderRadius: generateRadius(pricingHandlerRadius, \"50%\"),\n\n              \"&:hover\": {\n                borderColor: generateBorder(pricingHoverHandlerBorder),\n                bgcolor: pricingHoverHandlerColor,\n              },\n            },\n          },\n        },\n      }}\n      spacing={1}\n    >\n      <Slider\n        getAriaLabel={() => \"Temperature range\"}\n        value={value}\n        onChange={(_, v) => {\n          setValue(v as number[]);\n          debounced(v as number[]);\n        }}\n        valueLabelDisplay=\"auto\"\n        sx={{ mx: \"10px\", width: \"calc(100% - 20px)\" }}\n        step={500}\n        max={1000000}\n      />\n      {pricingMode !== \"auto\" ? (\n        <Stack\n          direction={pricingMode}\n          alignItems=\"flex-start\"\n          spacing={1}\n          justifyContent=\"space-between\"\n        >\n          {price}\n          <Button\n            disableElevation\n            variant=\"contained\"\n            color=\"inherit\"\n            size=\"small\"\n            // todo handler loading\n            onClick={async () => {\n              if (onChange) {\n                await onChange({\n                  mn: value[0],\n                  mx: value[1],\n                });\n              }\n            }}\n          >\n            Filtrer\n          </Button>\n        </Stack>\n      ) : (\n        price\n      )}\n    </Stack>\n  );\n};\n\nexport default PricingFilter;\n","import { Chip, Stack, Typography } from \"@mui/material\";\nimport * as React from \"react\";\nimport { useBadges } from \"../../../../hooks/useBadges\";\nimport { generateBorder } from \"../../../../lib/generateBorder\";\nimport { generateRadius } from \"../../../../lib/generateRadius\";\nimport { TagsFilterProps } from \"../../../../utils/interfaces/core/TagsFilterProps\";\n\nconst TagsFilter: React.FC<TagsFilterProps> = ({\n  tagHeight = \"32px\",\n  tagPadding = { Left: \"12px\", Right: \"12px\" },\n  tagRadius = {\n    TopLeft: \"16px\",\n    TopRight: \"16px\",\n    BottomLeft: \"16px\",\n    BottomRight: \"16px\",\n  },\n  // tagBorderSize = 2,\n  tagFontSize = \"13px\",\n  tagBorder = { width: \"2px\", color: \"#00000000\" },\n  tagBgColor = \"#00000010\",\n  tagTextColor = \"#000000\",\n  tagActiveBorder = { width: \"2px\" },\n  tagActiveBgColor = \"#FFFFFF\",\n  tagActiveTextColor = \"#000000\",\n\n  /**\n   * FOR EDITION\n   */\n  onChange,\n  urlParams = {},\n}) => {\n  const { badges } = useBadges();\n\n  const [value, setValue] = React.useState<string[]>(urlParams.t ?? []);\n\n  React.useEffect(() => {\n    if (urlParams.t) {\n      setValue(urlParams.t);\n    }\n  }, [urlParams]);\n\n  const handleClick = async (index: string) => {\n    try {\n      const newValue = value.includes(index)\n        ? value.filter((v) => v !== index)\n        : [...value, index];\n\n      setValue(newValue);\n\n      if (onChange) await onChange({ t: newValue });\n    } catch (error) {\n      console.error(\"ERROR_UPDATE_TAGS =>\", error);\n    }\n  };\n\n  if (badges.length === 0) {\n    return <Typography color=\"GrayText\">{\"Il n'y a aucun badge\"}</Typography>;\n  }\n\n  return (\n    <Stack\n      sx={{\n        gap: \"8px\",\n\n        \"& .MuiChip-root\": {\n          height: tagHeight,\n          borderRadius: generateRadius(tagRadius),\n          border: generateBorder(tagBorder),\n          bgcolor: tagBgColor,\n          cursor: \"pointer\",\n\n          \"& .MuiChip-label\": {\n            padding: tagPadding,\n            fontSize: tagFontSize,\n            fontFamily: \"inherit\",\n            color: tagTextColor,\n          },\n\n          \"&.SelectedTag, &:hover\": {\n            border: generateBorder(tagActiveBorder),\n            bgcolor: tagActiveBgColor,\n\n            \"& .MuiChip-label\": {\n              color: tagActiveTextColor,\n            },\n          },\n        },\n      }}\n      direction=\"row\"\n      flexWrap=\"wrap\"\n    >\n      {badges.map((tag) => (\n        <Chip\n          onClick={() => {\n            handleClick(tag.id);\n          }}\n          key={tag.id}\n          label={tag.name}\n          className={`${value.includes(tag.id) ? \"SelectedTag\" : \"\"}`}\n        />\n      ))}\n    </Stack>\n  );\n};\n\nexport default TagsFilter;\n","import { atom } from \"recoil\";\nimport { IBadgeData, useXoraiaValue } from \"./useXoraia\";\nimport useSWR from \"swr\";\n\nexport const USE_BADGES = atom<IBadgeData[]>({\n  key: \"USE_BADGES\",\n  default: [],\n});\n\nexport const useBadges = (articleId?: string) => {\n  const { apiFetcher, businessId } = useXoraiaValue();\n  const requestKey = `useBadges${articleId ? \"-\" + articleId : \"\"}`;\n\n  const { data } = useSWR(\n    requestKey,\n    async () => {\n      try {\n        if (!apiFetcher || !apiFetcher.badges) {\n          throw \"no-api-fetcher\";\n        }\n\n        const _opts = await apiFetcher.badges({ businessId, articleId });\n\n        return _opts ?? [];\n      } catch (error) {\n        console.error(\"useBadges/Error =>\", error);\n\n        return [];\n      }\n    },\n    { fallbackData: [] }\n  );\n\n  console.log(\"useBadges/Data =>\", data);\n\n  return { badges: data };\n  // const { apiFetcher, businessId } = useXoraiaValue();\n  // const [badges, setBadges] = useRecoilState(USE_BADGES);\n\n  // React.useEffect(() => {\n  //   const getBadges = async () => {\n  //     if (!apiFetcher || !apiFetcher.badges || badges.length !== 0) return;\n\n  //     try {\n  //       const _opts = await apiFetcher.badges({ businessId });\n\n  //       if (_opts.length > 0) setBadges(_opts);\n  //     } catch (error) {\n  //       console.error(\"GET BADGE =>\", error);\n  //     }\n  //   };\n\n  //   getBadges();\n  // }, [apiFetcher, badges]);\n\n  // return { badges, setBadges };\n};\n","import * as React from \"react\";\nimport { useOptions } from \"../../../../hooks/useOptions\";\nimport { TSetUrlParamsArgs } from \"../../../../hooks/useXoraia\";\n\nimport ColorPicker from \"./ColorPicker\";\nimport CheckboxFilter from \"./CheckboxFilter\";\nimport FilterSection from \"./FilterSection\";\n\nconst OtherOptionsFilter: React.FC<{\n  onChange: (args: TSetUrlParamsArgs) => Promise<void>;\n\n  urlParams?: TSetUrlParamsArgs;\n}> = (props) => {\n  const { options } = useOptions();\n\n  return (\n    <React.Fragment>\n      {options.map((opt) => {\n        if (opt.type === \"COLOR\") {\n          return (\n            <FilterSection\n              key={opt.name}\n              title={opt.name}\n              child={\n                <ColorPicker\n                  {...props}\n                  slug={opt.id}\n                  colorPickerColors={opt.values}\n                />\n              }\n            />\n          );\n        }\n\n        return (\n          <FilterSection\n            key={opt.name}\n            title={opt.name}\n            child={\n              <CheckboxFilter {...props} slug={opt.id} values={opt.values} />\n            }\n          />\n        );\n      })}\n    </React.Fragment>\n  );\n};\n\nexport default OtherOptionsFilter;\n","// import * as React from \"react\";\nimport { atom } from \"recoil\";\nimport { IOptionData, useXoraiaValue } from \"./useXoraia\";\nimport useSWR from \"swr\";\n\nexport const USE_OPTIONS = atom<IOptionData[]>({\n  key: \"USE_OPTIONS\",\n  default: [],\n});\n\nexport const useOptions = (articleId?: string) => {\n  const { apiFetcher, businessId } = useXoraiaValue();\n  const requestKey = `useOptions${articleId ? \"-\" + articleId : \"\"}`;\n\n  const { data } = useSWR(\n    requestKey,\n    async () => {\n      try {\n        if (!apiFetcher || !apiFetcher.options) {\n          throw \"no-api-fetcher\";\n        }\n\n        const _opts = await apiFetcher.options({ businessId, articleId });\n\n        return _opts ?? [];\n      } catch (error) {\n        console.error(\"useOptions/Error =>\", error);\n\n        return [];\n      }\n    },\n    { fallbackData: [] }\n  );\n\n  console.log(\"useOptions/Data =>\", data);\n\n  return { options: data };\n};\n","import { Stack, ToggleButton, ToggleButtonGroup } from \"@mui/material\";\nimport * as React from \"react\";\nimport { TSetUrlParamsArgs } from \"../../../../hooks/useXoraia\";\nimport { generateBorder } from \"../../../../lib/generateBorder\";\nimport { ColorPickerProps } from \"../../../../utils/interfaces/core/ColorPickerProps\";\n\nconst ColorPicker: React.FC<\n  ColorPickerProps & {\n    slug: string;\n\n    onChange: (args: TSetUrlParamsArgs) => Promise<void>;\n\n    urlParams?: TSetUrlParamsArgs;\n  }\n> = ({\n  colorPickerBorder = { width: \"2px\" },\n  colorPickerColors = [\"#FFFFFF\", \"#000000\"],\n  colorPickerSize = \"40px\",\n  onChange,\n  slug,\n  urlParams = {},\n}) => {\n  const [color, setColor] = React.useState<string>(\n    urlParams[slug] ? urlParams[slug] : colorPickerColors[0] ?? \"#FFFFFF\"\n  );\n\n  return (\n    <ToggleButtonGroup\n      exclusive\n      value={color}\n      onChange={async (_, _color) => {\n        setColor(_color);\n\n        await onChange({ [slug]: _color });\n      }}\n      className=\"XProductDetails_ColorPicker\"\n      sx={{\n        \"&.XProductDetails_ColorPicker\": {\n          borderRadius: 0,\n\n          \"& .MuiToggleButton-root\": {\n            borderWidth: 0,\n            p: \"3px\",\n            bgcolor: \"transparent\",\n            width: colorPickerSize,\n            height: colorPickerSize,\n            borderRadius: \"50% !important\",\n\n            \"& .XProductDetails_ColorPicker_Color\": {\n              borderRadius: \"50%\",\n              border: \"1px solid #ddd !important\",\n            },\n\n            \"&.Mui-selected\": {\n              border: generateBorder(colorPickerBorder),\n            },\n\n            \"&:not(:first-of-type)\": {\n              ml: 1,\n            },\n          },\n        },\n      }}\n    >\n      {colorPickerColors.map((c) => (\n        <ToggleButton key={c} value={c} disableRipple>\n          <Stack\n            className=\"XProductDetails_ColorPicker_Color\"\n            bgcolor={c}\n            width=\"100%\"\n            height=\"100%\"\n          />\n        </ToggleButton>\n      ))}\n    </ToggleButtonGroup>\n  );\n};\n\nexport default ColorPicker;\n","import {\n  Checkbox,\n  FormControlLabel,\n  FormGroup,\n  Typography,\n} from \"@mui/material\";\nimport * as React from \"react\";\nimport { TSetUrlParamsArgs } from \"../../../../hooks/useXoraia\";\nimport { CheckboxFilterProps } from \"../../../../utils/interfaces/core/CheckboxFilterProps\";\n\nconst CheckboxFilter: React.FC<\n  CheckboxFilterProps & {\n    slug: string;\n\n    onChange: (args: TSetUrlParamsArgs) => Promise<void>;\n\n    urlParams?: TSetUrlParamsArgs;\n  }\n> = ({ values = [], slug, onChange, urlParams = {} }) => {\n  const [list, setList] = React.useState<string[]>(urlParams[slug] ?? []);\n\n  return (\n    <FormGroup>\n      {values.map((value) => (\n        <FormControlLabel\n          key={value}\n          control={\n            <Checkbox\n              value={list.includes(value)}\n              onChange={async (_, checked) => {\n                const newList = checked\n                  ? [...list, value]\n                  : list.filter((i) => i !== value);\n\n                setList(newList);\n\n                await onChange({ [slug]: newList });\n              }}\n            />\n          }\n          label={\n            <Typography\n              width={\"100%\"}\n              justifyContent=\"space-between\"\n              display=\"flex\"\n            >\n              <Typography component=\"strong\">{value}</Typography>\n              {/* <Typography component=\"span\" variant=\"caption\">\n                (10)\n              </Typography> */}\n            </Typography>\n          }\n        />\n      ))}\n    </FormGroup>\n  );\n};\n\nexport default CheckboxFilter;\n","import * as React from \"react\";\nimport { Pagination, Stack } from \"@mui/material\";\n\nimport { TSetUrlParamsArgs } from \"../../../../hooks/useXoraia\";\nimport { IXCategoryFilterProps } from \"../../../../utils/interfaces/containers/XCategoryFilter.interfaces\";\nimport { IArticleData } from \"../../../../utils/interfaces/common/XArticle.interfaces\";\n\nimport GridSorter from \"./GridSorter\";\nimport GridArticleList from \"./GridArticleList\";\n\nconst GridSide: React.FC<\n  IXCategoryFilterProps & {\n    onChange: (args: TSetUrlParamsArgs) => Promise<void>;\n    urlParams: TSetUrlParamsArgs;\n    articles?: IArticleData[];\n    articlesCount?: number;\n    setOpenFilter: (open: boolean) => void;\n  }\n> = ({ articlesCount = 0, pageLimit = 8, ...props }) => {\n  const pageCount = Math.ceil(articlesCount / pageLimit);\n\n  return (\n    <Stack flex={1} spacing={2}>\n      <GridSorter\n        {...props}\n        articlesCount={articlesCount}\n        pageLimit={pageLimit}\n        pageCount={pageCount}\n      />\n      <GridArticleList {...props} pageLimit={pageLimit} />\n      {pageCount > 1 && (\n        <Pagination\n          page={props.urlParams.p ?? 1}\n          count={pageCount}\n          onChange={async (_, _page) => {\n            await props.onChange({ p: _page });\n          }}\n        />\n      )}\n    </Stack>\n  );\n};\n\nexport default GridSide;\n","import { FilterListRounded } from \"@mui/icons-material\";\nimport { IconButton, Select, Stack, Typography } from \"@mui/material\";\nimport * as React from \"react\";\nimport { useBreakpoint } from \"../../../../hooks/useBreakpoint\";\nimport { TSetUrlParamsArgs, useXoraiaValue } from \"../../../../hooks/useXoraia\";\nimport { generateBorder } from \"../../../../lib/generateBorder\";\nimport { generateRadius } from \"../../../../lib/generateRadius\";\nimport { generateSide } from \"../../../../lib/generateSide\";\nimport { IArticleData } from \"../../../../utils/interfaces/common/XArticle.interfaces\";\nimport { IXCategoryFilterProps } from \"../../../../utils/interfaces/containers/XCategoryFilter.interfaces\";\n\nconst GridSorter: React.FC<\n  IXCategoryFilterProps & {\n    onChange: (args: TSetUrlParamsArgs) => Promise<void>;\n    urlParams: TSetUrlParamsArgs;\n    articles?: IArticleData[];\n    articlesCount: number;\n    pageCount: number;\n    setOpenFilter: (open: boolean) => void;\n  }\n> = ({\n  gridSorterBgColor,\n  gridSorterFontSize = \"16px\",\n  gridSorterRadius,\n  gridSorterPadding = {\n    Top: \"15px\",\n    Bottom: \"15px\",\n    Left: \"20px\",\n    Right: \"20px\",\n  },\n  gridSorterMargin,\n  gridSorterColor = \"#000000\",\n  gridSorterSelectBgColor = \"#FFFFFF\",\n  gridSorterSelectColor = \"#000000\",\n  gridSorterSelectBorder = { width: \"1px\", color: \"#EEEEEE\" },\n  gridSorterSelectRadius,\n  articlesCount,\n  pageLimit = 8,\n  urlParams,\n  pageCount,\n  onChange,\n  setOpenFilter,\n}) => {\n  const breakpoint = useBreakpoint();\n  const { env } = useXoraiaValue();\n  const currentPage = urlParams.p ?? 1;\n  const fromCount = (currentPage - 1) * pageLimit;\n  let toCount = currentPage * pageLimit;\n\n  if (pageCount === currentPage) {\n    toCount = toCount - (articlesCount % pageLimit);\n  }\n\n  const isSmall = [\"mobile\", \"tablet\"].includes(breakpoint);\n\n  return (\n    <Stack\n      direction=\"row\"\n      spacing={1}\n      alignItems=\"center\"\n      id=\"FilterGridHeader\"\n      sx={{\n        bgcolor: gridSorterBgColor,\n        fontSize: gridSorterFontSize,\n        borderRadius: generateRadius(gridSorterRadius),\n        padding: generateSide(\"padding\", gridSorterPadding),\n        margin: generateSide(\"margin\", gridSorterMargin),\n        color: gridSorterColor,\n\n        ...(isSmall ? { px: 0 } : {}),\n\n        \"& .MuiNativeSelect-select\": {\n          bgcolor: gridSorterSelectBgColor,\n          color: gridSorterSelectColor,\n          border: generateBorder(gridSorterSelectBorder),\n          borderRadius: generateRadius(gridSorterSelectRadius),\n          py: 0.5,\n          fontSize: 12,\n          display: \"flex\",\n          alignItems: \"center\",\n          lineHeight: \"1em\",\n\n          \"& fieldset\": {\n            border: \"none\",\n          },\n        },\n      }}\n    >\n      {isSmall && (\n        <IconButton\n          size=\"small\"\n          onClick={env === \"dev\" ? undefined : () => setOpenFilter(true)}\n          color=\"inherit\"\n        >\n          <FilterListRounded color=\"inherit\" />\n        </IconButton>\n      )}\n      {isSmall && breakpoint === \"mobile\" && (\n        <Typography flex={1} variant=\"caption\">\n          {fromCount}-{toCount}\n        </Typography>\n      )}\n      {(!isSmall || breakpoint === \"tablet\") && (\n        <Typography flex={1}>\n          Affichage de {fromCount} à {toCount} sur {articlesCount} résultats.\n        </Typography>\n      )}\n      <Stack spacing={1} direction=\"row\" alignItems=\"center\">\n        {!isSmall && <Typography fontSize=\"inherit\">Trier par</Typography>}\n        <Select\n          native\n          size=\"small\"\n          value={urlParams.s ?? \"createdAt\"}\n          onChange={(e) => {\n            onChange({ s: e.target.value as any });\n          }}\n        >\n          <option value=\"createdAt\">Trier par Date</option>\n          <option value=\"price\">Trier par Prix</option>\n          <option value=\"name\">Trier par Nom</option>\n          <option value=\"rating\">Trier par Notes</option>\n        </Select>\n      </Stack>\n      <Stack spacing={1} direction=\"row\" alignItems=\"center\">\n        {!isSmall && <Typography fontSize=\"inherit\">Sens</Typography>}\n        <Select\n          native\n          size=\"small\"\n          value={urlParams.o ?? \"asc\"}\n          onChange={(e) => {\n            onChange({ o: e.target.value as any });\n          }}\n        >\n          <option value=\"asc\">Croissant</option>\n          <option value=\"desc\">Décroissant</option>\n        </Select>\n      </Stack>\n    </Stack>\n  );\n};\n\nexport default GridSorter;\n","import * as React from \"react\";\nimport { TSetUrlParamsArgs } from \"../../../../hooks/useXoraia\";\nimport { IXCategoryFilterProps } from \"../../../../utils/interfaces/containers/XCategoryFilter.interfaces\";\nimport { Grid } from \"../../../core/Grid\";\nimport { IArticleData } from \"../../../../utils/interfaces/common/XArticle.interfaces\";\nimport XArticleProvider from \"../../../../context/XArticleProvider\";\nimport XArticle from \"../../../common/XArticle\";\n\nconst GridArticleList: React.FC<\n  IXCategoryFilterProps & {\n    onChange: (args: TSetUrlParamsArgs) => Promise<void>;\n    urlParams: TSetUrlParamsArgs;\n    articles?: IArticleData[];\n  }\n> = (props) => {\n  return (\n    <Grid columns={props.columns} gap={props.gap}>\n      {(props.articles ?? []).map((article, i) => {\n        const id = article.id ?? i.toString();\n\n        return (\n          <XArticleProvider data={article} key={id}>\n            <XArticle index={id} />\n          </XArticleProvider>\n        );\n      })}\n    </Grid>\n  );\n};\n\nexport default GridArticleList;\n"]}