{"version":3,"sources":["../src/hooks/useXoraia.tsx"],"names":["React","atom","useRecoilState","useRecoilValue","useSetRecoilState","USE_XORAIA","props","useXoraia","useXoraiaValue","useXoraiaUpdater"],"mappings":"AAAA,OAAOA,MAAW,QAClB,OACE,QAAAC,EACA,kBAAAC,EACA,kBAAAC,EACA,qBAAAC,MACK,SA4OP,IAAMC,EAAaJ,EAAoB,CACrC,IAAK,aAEL,QAAS,CACP,IAAK,OACL,WAAY,YACZ,KAAOK,GAAUN,EAAA,cAAC,KAAG,GAAGM,GAAQA,EAAM,QAAS,CACjD,CACF,CAAC,EAEYC,EAAY,IAAML,EAAeG,CAAU,EAE3CG,EAAiB,IAAML,EAAeE,CAAU,EAEhDI,EAAmB,IAAML,EAAkBC,CAAU","sourcesContent":["import React from \"react\";\nimport {\n  atom,\n  useRecoilState,\n  useRecoilValue,\n  useSetRecoilState,\n} from \"recoil\";\n\nimport { DefaultTheme } from \"@mui/private-theming\";\nimport { XGUIProps } from \"../utils/interfaces/gui/fields.interfaces\";\nimport { IXImageProps } from \"../utils/interfaces/Elements/XImage.interfaces\";\nimport { IXIconProps } from \"../utils/interfaces/Elements/XIcon.interfaces\";\nimport { IArticleData } from \"../utils/interfaces/common/XArticle.interfaces\";\nimport { IAuthUserFormInput } from \"../utils/interfaces/core/AuthUser\";\n\nexport type TApiFetcherArticlesArgs = {\n  businessId?: string;\n\n  id?: string;\n\n  articleName?: string;\n\n  categoryId?: string;\n\n  badgeId?: string;\n\n  /**\n   * order by NAME | PRICE | QUANTITY (For limited edition) | RATING | CREATED_AT\n   */\n  order?: \"name\" | \"price\" | \"rating\" | \"qty\" | \"createdAt\";\n\n  /**\n   * DIRECTION\n   * @default desc\n   */\n  sort?: \"asc\" | \"desc\";\n\n  /**\n   * LIMIT IS USED INTERNALY\n   * IT IS ASSIGNED BU PAGE LIMIT\n   */\n  limit?: number;\n};\n\nexport interface IDataFetching extends TApiFetcherArticlesArgs {\n  /**\n   * LIST OF CATEGORY IDs\n   * ONE FETCH FROM ONE CATEGORIES\n   * 2+ CREATE A TABS GRID WITH CATEGORY NAME AS LABEL\n   * TODO : TAB STYLE NEED TO BE ADDED\n   */\n  categories?: string[]; // LIST CATEGORY IDS\n\n  /**\n   * LIST OF BADGES IDs\n   */\n  badges?: string[]; // LIST OF BADGE IDs\n\n  enabled?: boolean;\n}\n\nexport type TImageComponent = (\n  props: IXImageProps,\n  env: \"dev\" | \"prod\" | \"preview\",\n  devProps: any,\n  index: string\n) => React.ReactElement | null;\n\nexport type TIconComponent = (props?: IXIconProps) => React.ReactNode | null;\n\nexport type TAPIHandler = (query?: IDataFetching) => Promise<any> | any;\n\nexport interface IXoraiaConfig {\n  /**\n   * the environment mode\n   * \"dev\" for the dashboard (edtition mode)\n   * \"prod\" for the websote (preview and production mode)\n   */\n  env?: \"prod\" | \"dev\" | \"preview\";\n\n  /**\n   * Pop Up editor (dev mode)\n   */\n  XGUI?: React.FC<XGUIProps>;\n\n  /**\n   * @todo implement the material theming\n   */\n  theme?: Partial<DefaultTheme>; // TODO : IMPLEMENT THEME\n\n  /**\n   * next js component implementation\n   */\n  imageComponent?: TImageComponent;\n\n  /**\n   * @todo global icon implementation\n   */\n  iconComponent?: TIconComponent;\n\n  /**\n   * FUNCTION TO UPLOAD FILE\n   */\n  uploadFile?: (file: File, type: \"image\" | \"video\") => Promise<string>;\n\n  /**\n   * domain to show in the browser url\n   */\n  domain?: string;\n\n  /**\n   * connected user token\n   */\n  userId?: string;\n\n  /**\n   * xoraia orgs id or slug\n   */\n  businessId: string;\n\n  /**\n   * THIS IS USED FOR THE QUERY FILTER ON PAGES\n   */\n  setUrlParams?: TSetUrlParams;\n\n  /**\n   * FECTH DATA FROM API ENDPOINT\n   */\n  apiFetcher?: TApiFetcher;\n\n  /**\n   * THE LINK COMPONENT EITHER A | NEXT/LINK\n   */\n  Link: React.FC<{\n    href?: string;\n    children?: React.ReactNode;\n    target?: \"_blank\";\n    as?: string;\n  }>;\n\n  /**\n   * ARTICLE DATA TO USE PRODUCT DETAILS\n   */\n  article?: IArticleData;\n}\n\nexport interface ICategoryData {\n  name: string;\n  id: string;\n}\n\nexport interface IBadgeData {\n  name: string;\n  id: string;\n}\n\nexport interface IOptionData {\n  name: string;\n  id: string;\n  values: string[];\n  type: \"SELECT\" | \"COLOR\" | \"CHOICE\";\n}\n\nexport type TApiFetcher = {\n  articles?: (args?: TApiFetcherArticlesArgs) => Promise<IArticleData[]>;\n\n  categories?: (args?: any) => Promise<ICategoryData[]>;\n\n  badges?: (args?: any) => Promise<IBadgeData[]>;\n\n  options?: (args?: any) => Promise<IOptionData[]>;\n\n  /**\n   * use null as args to logout user\n   */\n  setAuthUser?: (args?: IAuthUserFormInput | null) => Promise<any>;\n};\n\n// TODO CHECK DATA TYPE LATER\nexport type TSetUrlParamsArgs = {\n  /**\n   * search query\n   */\n  q?: string;\n\n  /**\n   * min price\n   */\n  mn?: number;\n\n  /**\n   * max price\n   */\n  mx?: number;\n\n  /**\n   * category slug | id\n   */\n  c?: string;\n\n  /**\n   * tags id | slug\n   */\n  t?: string[];\n\n  /**\n   * sort createdAt | name | price | rating\n   */\n  s?: \"createdAt\" | \"name\" | \"price\" | \"rating\";\n\n  /**\n   * order asc | desc\n   */\n  o?: \"asc\" | \"desc\";\n\n  /**\n   * Current Page\n   */\n  p?: number;\n\n  /**\n   * article slug | id\n   */\n  a?: string;\n\n  /**\n   * article quantity used on product details\n   */\n  qty?: number;\n\n  /**\n   * any dynamic options\n   */\n  [key: string]: any;\n};\n\nexport type TSetUrlParams = (args: TSetUrlParamsArgs) => Promise<{\n  articles: IArticleData[];\n  config: TSetUrlParams;\n  count?: number;\n}>;\n\nconst USE_XORAIA = atom<IXoraiaConfig>({\n  key: \"USE_XORAIA\",\n\n  default: {\n    env: \"prod\",\n    businessId: \"LOCALHOST\",\n    Link: (props) => <a {...props}>{props.children}</a>,\n  },\n});\n\nexport const useXoraia = () => useRecoilState(USE_XORAIA);\n\nexport const useXoraiaValue = () => useRecoilValue(USE_XORAIA);\n\nexport const useXoraiaUpdater = () => useSetRecoilState(USE_XORAIA);\n"]}