{"version":3,"sources":["../src/hooks/useSaveData.tsx"],"names":["useRecoilCallback","useSaveData","setXPage","useXPageUpdater","snapshot","pagesAndCommons","currentPath","USE_X_PATH","EDITABLE_PATHS","path","currentPage","USE_X_PAGE","el","element","USE_X_ELEMENT","data","commons","COMMON_ELEMENT_INDEXES","index","USE_X_COMMON","isCommon","children","USE_X_COMMON_CHILDREN_SELECTOR","child","USE_X_ELEMENT_SELECTOR","childData","error"],"mappings":"4KAAA,OAAS,qBAAAA,MAAyB,SAc3B,IAAMC,EAAc,IAAM,CAC/B,IAAMC,EAAWC,EAAgB,EAEjC,OAAOH,EACL,CAAC,CAAE,SAAAI,CAAS,IACV,SAAY,CACV,GAAI,CACF,IAAMC,EAAuB,CAAC,EAExBC,EAAc,MAAMF,EAAS,WAAWG,CAAU,EAGxD,MAAM,QAAQ,IACZC,EAAe,IAAI,MAAOC,GAAS,CACjC,IAAIC,EAAc,MAAMN,EAAS,WAAWO,EAAWF,CAAI,CAAC,EAExDH,IAAgBG,IAClBC,EAAc,MAAM,QAAQ,IAC1BA,EAAY,IAAI,MAAOE,GAAO,CAC5B,GAAI,CAACA,EAAG,OAAQ,OAAOA,EAEvB,IAAMC,EAAU,MAAMT,EAAS,WAC7BU,EAAcF,EAAG,OAAO,KAAK,CAC/B,EAaA,GAAI,CAACC,EAAS,OAAOD,EAErB,IAAMG,EAAY,CAChB,KAAMF,EAAQ,KACd,MAAOA,EAAQ,MACf,OAAQ,CAAE,MAAOA,EAAQ,KAAM,EAC/B,aAAcA,EAAQ,YACxB,EAEA,OAAIA,EAAQ,UAASE,EAAK,OAAO,QAAUF,EAAQ,SAE5CE,CACT,CAAC,CACH,GAGFV,EAAgBI,GAAQC,CAC1B,CAAC,CACH,EAGA,OAAO,KAAKL,CAAe,EAAE,QAASI,GAAmB,CACvDP,EAAS,CAAE,KAAAO,EAAM,SAAUJ,EAAgBI,EAAM,CAAC,CACpD,CAAC,EAGD,IAAMO,EAA4B,CAAC,EAEnC,aAAM,QAAQ,IACZC,EAAuB,IAAI,MAAOC,GAAU,CAC1C,IAAML,EAAU,MAAMT,EAAS,WAAWe,EAAaD,CAAK,CAAC,EAG7D,GAAIL,EAAS,CACX,IAAME,EAAY,CAChB,KAAMF,EAAQ,KACd,MAAOA,EAAQ,MACf,OAAQ,CAAE,MAAOA,EAAQ,KAAM,CACjC,EAEIA,EAAQ,eACVE,EAAK,aAAeF,EAAQ,cAE1BA,EAAQ,UAASE,EAAK,OAAO,QAAUF,EAAQ,SAEnDR,EAAgBa,EAAM,kBAAkB,GAAKE,EAC3CF,EACA,EACF,EACIH,EAAK,MACLA,EAGJ,IAAMM,EAAW,MAAMjB,EAAS,WAC9BkB,EAA+BJ,CAAK,CACtC,EAEA,MAAM,QAAQ,IACZG,EAAS,IAAI,MAAOT,GAAO,CACzB,GAAI,CAACA,EAAG,OAAQ,OAEhB,IAAMW,EAAQ,MAAMnB,EAAS,WAC3BoB,EAAuBZ,EAAG,OAAO,KAAK,CACxC,EAEA,GAAI,CAACW,EAAO,OAEZ,IAAME,EAAiB,CACrB,KAAMF,EAAM,KACZ,MAAOA,EAAM,MACb,OAAQ,CAAE,MAAOA,EAAM,KAAM,CAC/B,EAEIA,EAAM,eACRE,EAAU,aAAeF,EAAM,cAG7BA,EAAM,UACRE,EAAU,OAAO,QAAUF,EAAM,SAGnCP,EAAQ,KAAKS,CAAS,CACxB,CAAC,CACH,CACF,CAEA,OAAOZ,CACT,CAAC,CACH,EAEAR,EAAgB,QAAUW,EAK1B,QAAQ,IAAI,gBAAiBX,CAAe,EAErCA,CACT,OAASqB,EAAP,CACA,QAAQ,MAAMA,CAAK,CACrB,CAEA,OAAO,IACT,EACF,CAAC,CACH,CACF","sourcesContent":["import { useRecoilCallback } from \"recoil\";\nimport { EDITABLE_PATHS } from \"../utils/constants/common/urlPaths\";\nimport { TComponentType } from \"../utils/types/common/components.types\";\nimport { TUrlPath } from \"../utils/types/elements/XText.types\";\nimport {\n  COMMON_ELEMENT_INDEXES,\n  isCommon,\n  USE_X_COMMON,\n  USE_X_COMMON_CHILDREN_SELECTOR,\n} from \"./useXCommon\";\nimport { USE_X_ELEMENT, USE_X_ELEMENT_SELECTOR } from \"./useXElement\";\nimport { useXPageUpdater, USE_X_PAGE } from \"./useXPage\";\nimport { USE_X_PATH } from \"./useXPath\";\n\nexport const useSaveData = () => {\n  const setXPage = useXPageUpdater();\n\n  return useRecoilCallback(\n    ({ snapshot }) =>\n      async () => {\n        try {\n          const pagesAndCommons: any = {};\n\n          const currentPath = await snapshot.getPromise(USE_X_PATH);\n\n          // GETTING PAGES USING PATH\n          await Promise.all(\n            EDITABLE_PATHS.map(async (path) => {\n              let currentPage = await snapshot.getPromise(USE_X_PAGE(path));\n\n              if (currentPath === path) {\n                currentPage = await Promise.all(\n                  currentPage.map(async (el) => {\n                    if (!el.config) return el;\n\n                    const element = await snapshot.getPromise(\n                      USE_X_ELEMENT(el.config.index)\n                    );\n\n                    // if (path !== \"/\") {\n                    //   console.log(\n                    //     \"PATH =>\",\n                    //     path,\n                    //     \"EL PAGE =>\",\n                    //     el,\n                    //     \"EL UPDATED =>\",\n                    //     element\n                    //   );\n                    // }\n\n                    if (!element) return el;\n\n                    const data: any = {\n                      name: element.name,\n                      props: element.value,\n                      config: { index: element.index },\n                      dataFetching: element.dataFetching,\n                    };\n\n                    if (element.childOf) data.config.childOf = element.childOf;\n\n                    return data;\n                  })\n                );\n              }\n\n              pagesAndCommons[path] = currentPage;\n            })\n          );\n\n          // UPDATING CURRENT PAGE ELEMENTS TO THE LATEST DATA\n          Object.keys(pagesAndCommons).forEach((path: TUrlPath) => {\n            setXPage({ path, elements: pagesAndCommons[path] });\n          });\n\n          // GETTING COMMON ELEMENTS TO UPDATE HEADER / FOOTER / ARTICLE / ETC...\n          const commons: TComponentType[] = [];\n\n          await Promise.all(\n            COMMON_ELEMENT_INDEXES.map(async (index) => {\n              const element = await snapshot.getPromise(USE_X_COMMON(index));\n\n              // ONLY UPDATE IF WE FINA DATA\n              if (element) {\n                const data: any = {\n                  name: element.name,\n                  props: element.value,\n                  config: { index: element.index },\n                };\n\n                if (element.dataFetching)\n                  data.dataFetching = element.dataFetching;\n\n                if (element.childOf) data.config.childOf = element.childOf;\n\n                pagesAndCommons[index.toLocaleLowerCase()] = isCommon(\n                  index,\n                  true\n                )\n                  ? data.props\n                  : data;\n\n                // GET CHILDREN\n                const children = await snapshot.getPromise(\n                  USE_X_COMMON_CHILDREN_SELECTOR(index)\n                );\n\n                await Promise.all(\n                  children.map(async (el) => {\n                    if (!el.config) return;\n\n                    const child = await snapshot.getPromise(\n                      USE_X_ELEMENT_SELECTOR(el.config.index)\n                    );\n\n                    if (!child) return;\n\n                    const childData: any = {\n                      name: child.name,\n                      props: child.value,\n                      config: { index: child.index },\n                    };\n\n                    if (child.dataFetching) {\n                      childData.dataFetching = child.dataFetching;\n                    }\n\n                    if (child.childOf) {\n                      childData.config.childOf = child.childOf;\n                    }\n\n                    commons.push(childData);\n                  })\n                );\n              }\n\n              return element;\n            })\n          );\n\n          pagesAndCommons.commons = commons;\n\n          // SAVE THE LATEST DATA\n          // await onSave();\n\n          console.log(\"SAVED DATA =>\", pagesAndCommons);\n\n          return pagesAndCommons;\n        } catch (error) {\n          console.error(error);\n        }\n\n        return null;\n      },\n    []\n  );\n};\n"]}