{"version":3,"sources":["../src/hooks/useSelectedElement.ts","../src/hooks/useXCommon.ts","../src/hooks/useXElement.ts"],"names":["atom","selector","atomFamily","selectorFamily","useRecoilState","useRecoilValue","useSetRecoilState","COMMON_ELEMENT_INDEXES","isCommon","index","root","found","i","element","getRef","ref","USE_X_COMMON","useXCommon","xCommon","setXCommon","useXCommonUpdater","USE_X_COMMON_CHILDREN","USE_X_COMMON_CHILDREN_SELECTOR","id","opts","newValue","selectedId","USE_SELECTED_INDEX","useXCommonChildren","xChildren","setXChildren","useXCommonChildrenUpdater","useXCommonChildrenValue","useMount","USE_X_ELEMENT","USE_X_ELEMENT_SELECTOR","useXElement","initData","xElement","setXElement","useXElementValue","useXElementUpdater","SELECTED_ELEMENT","other","e","target"],"mappings":"AAAA,OAAS,QAAAA,EAAM,YAAAC,MAAgB,SCA/B,OACE,cAAAC,EACA,kBAAAC,EACA,kBAAAC,EACA,kBAAAC,EACA,qBAAAC,MACK,SAaA,IAAMC,EAAgD,CAC3D,SACA,SACA,SAKF,EAEaC,EAAW,CAACC,EAAeC,EAAgB,KAAU,CAChE,GAAIA,EACF,OAAOH,EAAuB,SAASE,CAA4B,EAErE,IAAIE,EAAQ,GAEZ,QAASC,EAAI,EAAGA,EAAIL,EAAuB,QAAU,CAACI,EAAOC,IAAK,CAChE,IAAMC,EAAUN,EAAuBK,GAEvCD,EAAQF,EAAM,WAAWI,CAAO,CAClC,CAEA,OAAOF,CACT,EAEaG,EAAUL,GAAkB,CACvC,IAAIM,EAAkC,KAEtC,GAAI,CAACN,EAAO,OAAOM,EAEnB,QAASH,EAAI,EAAGA,EAAIL,EAAuB,QAAUQ,IAAQ,KAAMH,IAAK,CACtE,IAAMC,EAAUN,EAAuBK,GAEnCH,EAAM,WAAWI,CAAO,IAC1BE,EAAMF,EAEV,CAEA,OAAOE,CACT,EAIaC,EAAed,EAG1B,CACA,IAAK,eACL,QAAS,IACX,CAAC,EAEYe,EAAcR,GAAwC,CACjE,GAAM,CAACS,EAASC,CAAU,EAAIf,EAAeY,EAAaP,CAAK,CAAC,EAEhE,MAAO,CAAE,QAAAS,EAAS,WAAAC,CAAW,CAC/B,EAEO,SAASC,EAAkBX,EAAqC,CACrE,OAAOH,EAAkBU,EAAaP,CAAK,CAAC,CAC9C,CAOO,IAAMY,EAAwBnB,EAGnC,CACA,IAAK,wBACL,QAAS,CAAC,CACZ,CAAC,EAEYoB,EAAiCnB,EAG5C,CACA,IAAK,iCACL,IAAMoB,GAAgBC,GAAS,CAC7B,IAAMT,EAAMD,EAAOS,CAAE,EAErB,OAAKR,EAEES,EAAK,IAAIH,EAAsBN,CAAG,CAAC,EAFzB,CAAC,CAGpB,EACA,IAAMQ,GAAe,CAACC,EAAMC,IAAa,CACvC,IAAMC,EAAaF,EAAK,IAAIG,CAAkB,EAExCZ,EAAMD,EAAOS,GAAMG,CAAU,EAEnC,GAAI,EAACX,EAEL,OAAOS,EAAK,IAAIH,EAAsBN,CAAG,EAAGU,CAAQ,CACtD,CACF,CAAC,EAEYG,EAAsBnB,GAA+B,CAChE,GAAM,CAACoB,EAAWC,CAAY,EAAI1B,EAChCkB,EAA+Bb,CAAK,CACtC,EAEA,MAAO,CAAE,UAAAoB,EAAW,aAAAC,CAAa,CACnC,EAEO,SAASC,EAA0BtB,EAA4B,CACpE,OAAOH,EAAkBgB,EAA+Bb,CAAK,CAAC,CAChE,CAEO,SAASuB,EAAwBvB,EAA4B,CAClE,OAAOJ,EAAeiB,EAA+Bb,CAAK,CAAC,CAC7D,CClIA,OAAS,YAAAwB,MAAgB,YACzB,OACE,cAAA/B,EACA,kBAAAC,EAEA,kBAAAC,EACA,kBAAAC,EACA,qBAAAC,MACK,SAkCA,IAAM4B,EAAgBhC,EAA+B,CAC1D,IAAK,gBACL,QAAS,CAAC,CAEZ,CAAC,EAEYiC,EAAyBhC,EAA4B,CAChE,IAAK,yBACL,IAAMoB,GAAgBC,GAChBhB,EAASe,CAAE,EAAUC,EAAK,IAAIR,EAAaO,CAAE,CAAC,EAE3CC,EAAK,IAAIU,EAAcX,CAAE,CAAC,EAEnC,IAAMA,GAAe,CAACC,EAAMC,IACtBjB,EAASe,CAAE,EAAUC,EAAK,IAAIR,EAAaO,CAAE,EAAGE,CAAQ,EAErDD,EAAK,IAAIU,EAAcX,CAAE,EAAGE,CAAQ,CAE/C,CAAC,EAEM,SAASW,EACd3B,EACA4B,EACkD,CAClD,GAAM,CAACC,EAAUC,CAAW,EAAInC,EAAe+B,EAAuB1B,CAAK,CAAC,EAE5E,OAAAwB,EAAS,IAAM,CACTI,GACFE,EAAYF,CAAQ,CAExB,CAAC,EAEM,CAAE,SAAAC,EAAU,YAAAC,CAAY,CACjC,CAEO,SAASC,EAAyB/B,EAAgC,CACvE,OAAOJ,EAAe8B,EAAuB1B,CAAK,CAAC,CACrD,CAEO,SAASgC,EACdhC,EACkC,CAClC,OAAOH,EAAkB6B,EAAuB1B,CAAK,CAAC,CACxD,CF7EO,IAAMkB,EAAqB3B,EAAoB,CACpD,IAAK,qBACL,QAAS,IACX,CAAC,EAEY0C,EAAmBzC,EAAmC,CACjE,IAAK,mBACL,IAAMuB,GAAS,CACb,IAAMD,EAAKC,EAAK,IAAIG,CAAkB,EAEtC,GAAI,CAACJ,EAAI,OAAO,KAEhB,IAAIV,EAQJ,OANIL,EAASe,CAAE,EACbV,EAAUW,EAAK,IAAIR,EAAaO,CAAyB,CAAC,EAE1DV,EAAUW,EAAK,IAAIU,EAAcX,CAAE,CAAC,EAGlC,CAACV,GAAW,OAAO,KAAKA,CAAO,EAAE,SAAW,EAAU,KAEnD,CAAE,GAAGA,EAAS,GAAAU,CAAG,CAC1B,EACA,IAAK,CAACC,EAAMC,IAAa,CACvB,IAAMF,EAAUC,EAAK,IAAIG,CAAkB,EAErCgB,EAAQ,SAAS,iBAAiB,mBAAmB,EAM3D,GAJIA,EAAM,OAAS,GACjBA,EAAM,QAASC,GAAMA,EAAE,gBAAgB,iBAAiB,CAAC,EAGvDrB,EAAI,CACN,IAAMsB,EAAS,SAAS,eAAetB,CAAE,EAEzC,OAAIsB,GAAQA,EAAO,aAAa,kBAAmB,MAAM,EAGlDrB,EAAK,IAAIW,EAAuBZ,CAAE,EAAGE,CAAQ,CAItD,CAEA,OAAO,IACT,CACF,CAAC","sourcesContent":["import { atom, selector } from \"recoil\";\nimport { isCommon, TCommonElementIndex, USE_X_COMMON } from \"./useXCommon\";\nimport {\n  TUseXElement,\n  USE_X_ELEMENT,\n  USE_X_ELEMENT_SELECTOR,\n} from \"./useXElement\";\n\nexport const USE_SELECTED_INDEX = atom<string | null>({\n  key: \"USE_SELECTED_INDEX\",\n  default: null,\n});\n\nexport const SELECTED_ELEMENT = selector<TUseXElement<any> | null>({\n  key: \"SELECTED_ELEMENT\",\n  get: (opts) => {\n    const id = opts.get(USE_SELECTED_INDEX);\n\n    if (!id) return null;\n\n    let element: any;\n\n    if (isCommon(id)) {\n      element = opts.get(USE_X_COMMON(id as TCommonElementIndex));\n    } else {\n      element = opts.get(USE_X_ELEMENT(id));\n    }\n\n    if (!element || Object.keys(element).length === 0) return null;\n\n    return { ...element, id };\n  },\n  set: (opts, newValue) => {\n    const id: any = opts.get(USE_SELECTED_INDEX);\n\n    const other = document.querySelectorAll(\"[data-x-selected]\");\n\n    if (other.length > 0) {\n      other.forEach((e) => e.removeAttribute(\"data-x-selected\"));\n    }\n\n    if (id) {\n      const target = document.getElementById(id);\n\n      if (target) target.setAttribute(\"data-x-selected\", \"true\");\n\n      // if (isCommon(id)) {\n      return opts.set(USE_X_ELEMENT_SELECTOR(id), newValue);\n      // } else {\n      //   return opts.set(USE_X_ELEMENT_SELECTOR(id), newValue);\n      // }\n    }\n\n    return null;\n  },\n});\n","import {\n  atomFamily,\n  selectorFamily,\n  useRecoilState,\n  useRecoilValue,\n  useSetRecoilState,\n} from \"recoil\";\nimport { TComponentType } from \"../utils/types/common/components.types\";\nimport { USE_SELECTED_INDEX } from \"./useSelectedElement\";\nimport { TUseXElement } from \"./useXElement\";\n\nexport type TCommonElementIndex =\n  | \"HEADER\"\n  | \"FOOTER\"\n  | \"PAGE\"\n  | \"ARTICLE\"\n  | \"CATEGORY_FILTER\"\n  | \"PRODUCT_DETAILS\";\n\nexport const COMMON_ELEMENT_INDEXES: TCommonElementIndex[] = [\n  \"HEADER\",\n  \"FOOTER\",\n  \"ARTICLE\",\n  // TODO IMPLEMENT ALL OTHER COMMON ELEMENTS\n  // \"PAGE\",\n  // \"CATEGORY_FILTER\",\n  // \"PRODUCT_DETAILS\",\n];\n\nexport const isCommon = (index: string, root: boolean = false) => {\n  if (root)\n    return COMMON_ELEMENT_INDEXES.includes(index as TCommonElementIndex);\n\n  let found = false;\n\n  for (let i = 0; i < COMMON_ELEMENT_INDEXES.length && !found; i++) {\n    const element = COMMON_ELEMENT_INDEXES[i];\n\n    found = index.startsWith(element);\n  }\n\n  return found;\n};\n\nexport const getRef = (index: string) => {\n  let ref: TCommonElementIndex | null = null;\n\n  if (!index) return ref;\n\n  for (let i = 0; i < COMMON_ELEMENT_INDEXES.length && ref === null; i++) {\n    const element = COMMON_ELEMENT_INDEXES[i];\n\n    if (index.startsWith(element)) {\n      ref = element;\n    }\n  }\n\n  return ref;\n};\n\n// THIS IS USED TO LIST ALL THE ELEMENTS PARENT AND CHILD\n// THIS HAS BEEN CREATED TO STORE ALL COMMON ELEMENTS AND CHILDREN\nexport const USE_X_COMMON = atomFamily<\n  TUseXElement<any> | null,\n  TCommonElementIndex | string\n>({\n  key: \"USE_X_COMMON\",\n  default: null,\n});\n\nexport const useXCommon = (index: TCommonElementIndex | string) => {\n  const [xCommon, setXCommon] = useRecoilState(USE_X_COMMON(index));\n\n  return { xCommon, setXCommon };\n};\n\nexport function useXCommonUpdater(index: TCommonElementIndex | string) {\n  return useSetRecoilState(USE_X_COMMON(index));\n}\n\nexport function useXCommonValue(index: TCommonElementIndex | string) {\n  return useRecoilValue(USE_X_COMMON(index));\n}\n\n// THIS IS USED FOR THE CHILDREN\nexport const USE_X_COMMON_CHILDREN = atomFamily<\n  TComponentType[],\n  TCommonElementIndex\n>({\n  key: \"USE_X_COMMON_CHILDREN\",\n  default: [],\n});\n\nexport const USE_X_COMMON_CHILDREN_SELECTOR = selectorFamily<\n  TComponentType[],\n  string\n>({\n  key: \"USE_X_COMMON_CHILDREN_SELECTOR\",\n  get: (id: string) => (opts) => {\n    const ref = getRef(id);\n\n    if (!ref) return [];\n\n    return opts.get(USE_X_COMMON_CHILDREN(ref));\n  },\n  set: (id: string) => (opts, newValue) => {\n    const selectedId = opts.get(USE_SELECTED_INDEX);\n\n    const ref = getRef(id ?? selectedId);\n\n    if (!ref) return;\n\n    return opts.set(USE_X_COMMON_CHILDREN(ref), newValue);\n  },\n});\n\nexport const useXCommonChildren = (index: TCommonElementIndex) => {\n  const [xChildren, setXChildren] = useRecoilState(\n    USE_X_COMMON_CHILDREN_SELECTOR(index)\n  );\n\n  return { xChildren, setXChildren };\n};\n\nexport function useXCommonChildrenUpdater(index: TCommonElementIndex) {\n  return useSetRecoilState(USE_X_COMMON_CHILDREN_SELECTOR(index));\n}\n\nexport function useXCommonChildrenValue(index: TCommonElementIndex) {\n  return useRecoilValue(USE_X_COMMON_CHILDREN_SELECTOR(index));\n}\n","import { useMount } from \"react-use\";\nimport {\n  atomFamily,\n  selectorFamily,\n  SetterOrUpdater,\n  useRecoilState,\n  useRecoilValue,\n  useSetRecoilState,\n} from \"recoil\";\nimport { TXGUIField } from \"../utils/interfaces/gui/fields.interfaces\";\nimport { TComponentName } from \"../utils/types/common/components.types\";\nimport { isCommon, USE_X_COMMON } from \"./useXCommon\";\nimport { IDataFetching } from \"./useXoraia\";\n\nexport type TUseXElement<T> = {\n  name: TComponentName;\n\n  value: T;\n\n  index: string;\n\n  elementsIndexes: string[];\n\n  hierachy: string;\n\n  /**\n   * @deprecated\n   */\n  guiFields?: TXGUIField[];\n\n  /**\n   * @deprecated\n   * */\n  element?: HTMLElement;\n\n  hasChildren: boolean; // use this on containers\n\n  childOf: string | null; // to reorder element\n\n  dataFetching?: IDataFetching;\n};\n\nexport const USE_X_ELEMENT = atomFamily<any, string | null>({\n  key: \"USE_X_ELEMENT\",\n  default: {},\n  // effects_UNSTABLE: [persistAtom],\n});\n\nexport const USE_X_ELEMENT_SELECTOR = selectorFamily<any, string>({\n  key: \"USE_X_ELEMENT_SELECTOR\",\n  get: (id: string) => (opts) => {\n    if (isCommon(id)) return opts.get(USE_X_COMMON(id));\n\n    return opts.get(USE_X_ELEMENT(id));\n  },\n  set: (id: string) => (opts, newValue) => {\n    if (isCommon(id)) return opts.set(USE_X_COMMON(id), newValue);\n\n    return opts.set(USE_X_ELEMENT(id), newValue);\n  },\n});\n\nexport function useXElement<T = {}>(\n  index: string,\n  initData?: T\n): { xElement: T; setXElement: SetterOrUpdater<T> } {\n  const [xElement, setXElement] = useRecoilState(USE_X_ELEMENT_SELECTOR(index));\n\n  useMount(() => {\n    if (initData) {\n      setXElement(initData);\n    }\n  });\n\n  return { xElement, setXElement };\n}\n\nexport function useXElementValue<T = {}>(index: string): TUseXElement<T> {\n  return useRecoilValue(USE_X_ELEMENT_SELECTOR(index));\n}\n\nexport function useXElementUpdater<T = {}>(\n  index: string\n): SetterOrUpdater<TUseXElement<T>> {\n  return useSetRecoilState(USE_X_ELEMENT_SELECTOR(index));\n}\n"]}