{"version":3,"sources":["../src/components/elements/XRating.tsx"],"names":["React","Rating","Stack","Typography","useSetRecoilState","isEqual","compareProps","prevProps","nextProps","XRating","config","breakpoint","useBreakpoint","env","useXoraiaValue","xElement","useXElement","setSelectedElement","USE_SELECTED_INDEX","value","valueAtBreakPoint","getValueOnBreakpoint","devProps","e","clickHandler","editable","initialRate","reviewCount","reviewCountMode","color","bgColor","fontSize","fontFamily","margin","padding","textAlign","fontWeight","width","height","sx","hasReview","rating","generateSide","XRating_default"],"mappings":"6PAAA,UAAYA,MAAW,QACvB,OAAS,UAAAC,EAAQ,SAAAC,EAAO,cAAAC,MAAkB,gBAM1C,OAAS,qBAAAC,MAAyB,SAKlC,OAAS,WAAAC,MAAe,SAOxB,IAAMC,EAAe,CAACC,EAAgBC,IAC7BH,EAAQE,EAAWC,CAAS,EAG/BC,EAAwC,OAC5C,CAAC,CAAE,OAAAC,EAAS,CAAC,CAAoB,IAAM,CAErC,IAAMC,EAAaC,EAAc,EAE3B,CAAE,IAAAC,CAAI,EAAIC,EAAe,EAGzB,CAAE,SAAAC,CAAS,EAAIC,EAAyCN,EAAO,KAAK,EAGpEO,EAAqBb,EAAkBc,CAAkB,EAG/D,GAAI,CAACH,GAAY,OAAO,KAAKA,CAAQ,EAAE,SAAW,EAAG,OAAO,KAG5D,GAAM,CAAE,MAAAI,CAAM,EAAIJ,EAGZK,EAAoBC,EACxBF,EACAR,CACF,EAEMW,EAAW,CACf,GAAIZ,EAAO,MACX,QAAUa,GAAWC,EAAaD,EAAGN,EAAoBP,EAAO,KAAK,CACvE,EAEM,CACJ,SAAAe,EACA,YAAAC,EACA,YAAAC,EAAcd,IAAQ,MAAQ,EAAI,EAClC,gBAAAe,EACA,MAAAC,EACA,QAAAC,EACA,SAAAC,EACA,WAAAC,EACA,OAAAC,EACA,QAAAC,EACA,UAAAC,EACA,WAAAC,EACA,MAAAC,EACA,OAAAC,KACGC,CACL,EAAInB,EAEEoB,EACJZ,GACAA,IAAoB,QACpBD,GACAA,EAAc,EAEZc,EACF,gBAACxC,EAAA,CACE,GAAIY,IAAQ,OAASY,GAAY,CAACe,GAAalB,EAChD,SAAU,CAACG,EACX,KAAK,QACL,UAAW,GACX,aAAcC,EACd,GAAI,CACF,GAAGa,EACH,MAAOV,EACP,QAASC,EACT,QAAUU,EAA+C,OAAnCE,EAAa,UAAWR,CAAO,EACrD,OAASM,EAA6C,OAAjCE,EAAa,SAAUT,CAAM,CACpD,EACF,EAGF,MAAI,CAACR,GAAYZ,IAAQ,QACvB4B,EACE,gBAACvC,EAAA,CACE,GAAI,CAACsC,GAAalB,EACnB,GAAI,CACF,QAAS,eACT,OAAQ,cACR,MAAO,aACT,GAECmB,CACH,GAIAD,IACFC,EACE,gBAACvC,EAAA,CACE,GAAIW,IAAQ,OAASS,EACtB,UAAU,MACV,WAAW,SACX,QAAS,EACT,GAAI,CACF,QAASoB,EAAa,UAAWR,CAAO,EACxC,OAAQQ,EAAa,SAAUT,CAAM,EACrC,MAAAI,EACA,OAAAC,CACF,GAECG,EACD,gBAACtC,EAAA,CACC,UAAU,OACV,SAAU4B,EACV,WAAYK,EACZ,UAAWD,EACX,WAAYH,GAEXJ,IAAoB,OACjB,IAAID,UACJ,IAAIA,IACV,CACF,GAIGc,CACT,EACAnC,CACF,EAEOqC,EAAQlC","sourcesContent":["import * as React from \"react\";\nimport { Rating, Stack, Typography } from \"@mui/material\";\n\nimport { useBreakpoint } from \"../../hooks/useBreakpoint\";\nimport { useXoraiaValue } 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\";\nimport { XElementConfig } from \"../../utils/interfaces/Elements/XElement.interfaces\";\n\nimport { isEqual } from \"lodash\";\nimport {\n  IXRatingProps,\n  XRatingProps,\n} from \"../../utils/interfaces/Elements/XRating.interfaces\";\nimport { generateSide } from \"../../lib/generateSide\";\n\nconst compareProps = (prevProps: any, nextProps: any) => {\n  return isEqual(prevProps, nextProps);\n};\n\nconst XRating: React.FC<XRatingProps> = React.memo(\n  ({ config = {} as XElementConfig }) => {\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<IXRatingProps>>(config.index);\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<IXRatingProps>(\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    };\n\n    const {\n      editable,\n      initialRate,\n      reviewCount = env === \"dev\" ? 1 : 0,\n      reviewCountMode,\n      color,\n      bgColor,\n      fontSize,\n      fontFamily,\n      margin,\n      padding,\n      textAlign,\n      fontWeight,\n      width,\n      height,\n      ...sx\n    } = valueAtBreakPoint;\n\n    const hasReview =\n      reviewCountMode &&\n      reviewCountMode !== \"none\" &&\n      reviewCount &&\n      reviewCount > 0;\n\n    let rating = (\n      <Rating\n        {...(env === \"dev\" && editable && !hasReview && devProps)}\n        readOnly={!editable}\n        size=\"small\"\n        precision={0.5}\n        defaultValue={initialRate}\n        sx={{\n          ...sx,\n          color: color,\n          bgcolor: bgColor,\n          padding: !hasReview ? generateSide(\"padding\", padding) : undefined,\n          margin: !hasReview ? generateSide(\"margin\", margin) : undefined,\n        }}\n      />\n    );\n\n    if (!editable && env === \"dev\") {\n      rating = (\n        <Stack\n          {...(!hasReview && devProps)}\n          sx={{\n            display: \"inline-block\",\n            height: \"max-content\",\n            width: \"max-content\",\n          }}\n        >\n          {rating}\n        </Stack>\n      );\n    }\n\n    if (hasReview) {\n      rating = (\n        <Stack\n          {...(env === \"dev\" && devProps)}\n          direction=\"row\"\n          alignItems=\"center\"\n          spacing={2}\n          sx={{\n            padding: generateSide(\"padding\", padding),\n            margin: generateSide(\"margin\", margin),\n            width,\n            height,\n          }}\n        >\n          {rating}\n          <Typography\n            component=\"span\"\n            fontSize={fontSize}\n            fontWeight={fontWeight}\n            textAlign={textAlign}\n            fontFamily={fontFamily}\n          >\n            {reviewCountMode === \"full\"\n              ? `(${reviewCount} Avis)`\n              : `(${reviewCount})`}\n          </Typography>\n        </Stack>\n      );\n    }\n\n    return rating;\n  },\n  compareProps\n);\n\nexport default XRating;\n"]}