{"version":3,"file":"index.modern.mjs","sources":["../src/provider.tsx","../src/component.tsx","../src/hooks.tsx","../src/controls.tsx"],"sourcesContent":["/**\n * Keep alive component\n * https://stackoverflow.com/questions/59124463/nextjs-how-to-not-unmount-previous-page-when-going-to-next-page-to-keep-state\n *\n * Tried following libraries before implementing this one:\n * - react-keep-alive: has a lot of dom manipulation bugs and crashes our app\n * - react-activation: does not handle SSR correctly\n * - there are some others but they are built on react-router, which next.js doesn't use\n *\n * Basic Usage:\n * 1) Wrap nextjs <Component /> with <KeepAliveProvider> in _app.tsx\n * 2) Wrap components export with \"withKeepAlive\" and provide unique name like this: export default withKeepAlive(IndexPage, 'index');\n */\nimport React, { useRef, memo, useEffect, ReactElement, cloneElement, Fragment, useState, EffectCallback } from 'react';\nimport { NextRouter } from 'next/router'; // eslint-disable-line import/no-extraneous-dependencies\n\ntype KeepAliveCacheType = {\n  [name: string]: {\n    Component: any,\n    pageProps: any,\n    scrollPos?: number,\n    name?: string,\n    enabled?: boolean\n  }\n};\n\ntype KeepAliveNameFnArgs = {\n  props: any,\n  router: NextRouter\n}\n\nexport type KeepAliveName = string | ((nameArgs: KeepAliveNameFnArgs) => string)\n\nexport type KeepAliveOptsProps = {\n  keepScrollEnabled?: boolean,\n  applyNewProps?: boolean | ((cachedProps: any, newProps: any) => Object)\n}\n\ntype KeepAliveData = {\n  name: KeepAliveName\n} & KeepAliveOptsProps;\n\ntype ExtendChildrenType = {\n  type: {\n    keepAlive: KeepAliveData\n  }\n};\n\ntype KeepAliveProviderProps = {\n  children: ReactElement & ExtendChildrenType,\n  router: NextRouter\n};\n\nconst defaultEnabled = true;\n\nconst KeepAliveProvider = (props: KeepAliveProviderProps) => {\n  const { children, router } = props;\n\n  const pageProps = children?.props;\n  const componentData = cloneElement(children);\n  const CurrentComponent = componentData?.type;\n  const keepAliveCache = useRef<KeepAliveCacheType>({});\n  const [, forceUpdate] = useState<any>();\n\n  const {\n    name: keepAliveName,\n    keepScrollEnabled,\n    applyNewProps\n    // @ts-ignore\n  } = componentData?.type?.keepAlive || {};\n\n  // KeepAlive name\n  const name = typeof keepAliveName === 'function'\n    ? keepAliveName({ props: pageProps, router })\n    : keepAliveName;\n  const isEnabled = () => keepAliveCache?.current?.[name]?.enabled;\n  const isKeptAlive = !!name;\n  const keepScroll = !!keepScrollEnabled;\n\n  // Add Component to retainedComponents if we haven't got it already\n  if (isKeptAlive && !keepAliveCache.current[name]) {\n    const Component: any = componentData?.type;\n    const MemoComponent = memo(Component);\n    keepAliveCache.current[name] = {\n      Component: MemoComponent,\n      pageProps,\n      scrollPos: 0,\n      name,\n      enabled: defaultEnabled\n    };\n  }\n\n  // Save the scroll position of current page before leaving\n  const handleRouteChangeStart = () => {\n    if (isKeptAlive && keepAliveCache?.current?.[name]) {\n      keepAliveCache.current[name].scrollPos = window.scrollY;\n    }\n  };\n\n  // Restore the scroll position of cached page\n  const handleRouteChangeComplete = () => {\n    if (isKeptAlive && isEnabled() && keepScroll) {\n      window.scrollTo(0, keepAliveCache.current[name]?.scrollPos || 0);\n      // Just in case try again in next event loop\n      setTimeout(() => {\n        window.scrollTo(0, keepAliveCache.current[name]?.scrollPos || 0);\n      }, 0);\n    }\n  };\n\n  // Enable/disable loading from cache\n  const handleLoadFromCache = (event: any) => {\n    const { name: controlsName, enabled: controlsEnabled } = event?.detail || {};\n\n    if (keepAliveCache.current[controlsName]) {\n      keepAliveCache.current[controlsName].enabled = controlsEnabled;\n    }\n  };\n\n  // Drop cache\n  const handleDropCache = (event: any) => {\n    const { name: dropKeepAliveName, scrollToTop } = event?.detail || {};\n\n    // If no name, drop all cache\n    if (!dropKeepAliveName) {\n      keepAliveCache.current = {};\n    } else if (typeof dropKeepAliveName === 'string') {\n      delete keepAliveCache.current?.[dropKeepAliveName];\n    } else if (typeof dropKeepAliveName === 'function') {\n      const caches = dropKeepAliveName?.(Object.keys(keepAliveCache.current));\n      const cachesToRemove: string[] = Array.isArray(caches) ? caches : [caches];\n\n      // eslint-disable-next-line no-unused-expressions\n      cachesToRemove\n        ?.filter(exists => exists)\n        ?.forEach(cacheName => delete keepAliveCache.current?.[cacheName]);\n    }\n\n    if (scrollToTop && typeof window !== 'undefined') {\n      window.scrollTo(0, 0);\n    }\n\n    forceUpdate({});\n  };\n\n  // Handle scroll position caching - requires an up-to-date router.asPath\n  useEffect(() => {\n    router.events.on('routeChangeStart', handleRouteChangeStart);\n    router.events.on('routeChangeComplete', handleRouteChangeComplete);\n\n    return () => {\n      router.events.off('routeChangeStart', handleRouteChangeStart);\n      router.events.off('routeChangeComplete', handleRouteChangeComplete);\n    };\n  }, [router.asPath]);\n\n  // Emit mounting events\n  // @ts-ignore\n  useEffect(() => {\n    if (isKeptAlive) {\n      window.dispatchEvent(\n        new CustomEvent('onKeepAliveMount', {\n          detail: name\n        })\n      );\n\n      return () => {\n        window.dispatchEvent(\n          new CustomEvent('onKeepAliveUnmount', {\n            detail: name\n          })\n        );\n      };\n    }\n  }, [CurrentComponent, pageProps]);\n\n  /**\n   * Listen to changes (enabled/disabled)\n   */\n  useEffect(() => {\n    window.addEventListener('keepAliveControls_LoadFromCache', handleLoadFromCache);\n    window.addEventListener('keepAliveControls_DropCache', handleDropCache);\n\n    return () => {\n      window.removeEventListener('keepAliveControls_LoadFromCache', handleLoadFromCache);\n      window.removeEventListener('keepAliveControls_DropCache', handleDropCache);\n    };\n  }, []);\n\n  const getCachedViewProps = (cachedProps: Object) => {\n    // Apply new props\n    if (applyNewProps === true) {\n      return pageProps;\n    }\n\n    // Apply combination of old and new props\n    if (typeof applyNewProps === 'function') {\n      return applyNewProps(cachedProps, pageProps);\n    }\n\n    // Apply cached props\n    return cachedProps;\n  };\n\n  /**\n   * Custom useEffect which runs only when component alive.\n   */\n  const getKeepAliveEffect = (isHidden: boolean) => {\n    const useKeepAliveEffect = (effect: EffectCallback, deps?: any[]) => useEffect(() => {\n      if (!isHidden) {\n        return effect();\n      }\n    }, deps);\n\n    return useKeepAliveEffect;\n  };\n\n  return (\n    // eslint-disable-next-line react/jsx-fragments\n    <Fragment>\n      { (!isKeptAlive || !isEnabled()) && children }\n\n      <div style={{ display: (isKeptAlive && isEnabled()) ? 'block' : 'none' }}\n           id=\"keep-alive-container\"\n           data-keepalivecontainer={true}\n      >\n        {\n          Object.entries(keepAliveCache.current).map(([cacheName, { Component, pageProps: cachedProps }]: any) => (\n            <div\n              key={cacheName}\n              style={{ display: name === cacheName ? 'block' : 'none' }}\n              data-keepalive={cacheName}\n              data-keepalive-hidden={name !== cacheName}\n            >\n              <Component isHiddenByKeepAlive={name !== cacheName}\n                         useEffect={getKeepAliveEffect(name !== cacheName)}\n                         {...getCachedViewProps(cachedProps)}\n              />\n            </div>\n          ))\n        }\n      </div>\n    </Fragment>\n  );\n};\n\nexport default KeepAliveProvider;\n","import React, { ReactElement, Fragment } from 'react';\nimport { KeepAliveName, KeepAliveOptsProps } from './provider';\n\ntype KeepAliveProps = {\n  children: ReactElement,\n}\n\nconst defaultOpts: KeepAliveOptsProps = {\n  keepScrollEnabled: true,\n  applyNewProps: false\n};\n\nconst withKeepAlive = (\n  Component: ((props?: Object) => JSX.Element),\n  name: KeepAliveName,\n  opts: KeepAliveOptsProps = defaultOpts\n) => {\n  const KeepAlive = (props: KeepAliveProps) => (\n    // eslint-disable-next-line react/jsx-fragments\n    <Fragment>\n      <Component {...props} />\n    </Fragment>\n  );\n\n  // Copy getInitial props so it will run as well\n  // @ts-ignore\n  if (Component.getInitialProps) {\n    // @ts-ignore\n    KeepAlive.getInitialProps = Component.getInitialProps;\n  }\n\n  const { keepScrollEnabled, applyNewProps } = opts || {};\n\n  KeepAlive.keepAlive = {\n    name,\n    keepScrollEnabled,\n    applyNewProps\n  };\n\n  return KeepAlive;\n};\n\nexport default withKeepAlive;\n","import { useEffect } from 'react';\n\n/**\n * Hook for handling mount event\n * @param name\n * @param effect\n */\nexport const useKeepAliveMountEffect = (name: string, effect: Function) => {\n  // Trigger mount\n  const handleMountedEvent = (e: any) => {\n    if (e?.detail === name && typeof effect === 'function') {\n      effect();\n    }\n  };\n\n  useEffect(() => {\n    window.addEventListener('onKeepAliveMount', handleMountedEvent);\n\n    return () => {\n      window.removeEventListener('onKeepAliveMount', handleMountedEvent);\n    };\n  }, []);\n};\n\n/**\n * Hook for handling unmount event\n * @param name\n * @param effect\n */\nexport const useKeepAliveUnmountEffect = (name: string, effect: Function) => {\n  // Trigger mount\n  const handleUnmountedEvent = (e: any) => {\n    if (e?.detail === name && typeof effect === 'function') {\n      effect();\n    }\n  };\n\n  useEffect(() => {\n    window.addEventListener('onKeepAliveUnmount', handleUnmountedEvent);\n\n    return () => {\n      window.removeEventListener('onKeepAliveUnmount', handleUnmountedEvent);\n    };\n  }, []);\n};\n","export function keepAliveLoadFromCache (name: string, enabled: boolean) {\n  if (typeof window !== 'undefined') {\n    window.dispatchEvent(\n      new CustomEvent('keepAliveControls_LoadFromCache', {\n        detail: {\n          name,\n          enabled\n        }\n      })\n    );\n  }\n}\n\nexport function keepAliveDropCache (name?: string | ((cacheKeys: string[]) => string | string[]), scrollToTop?: boolean) {\n  if (typeof window !== 'undefined') {\n    window.dispatchEvent(\n      new CustomEvent('keepAliveControls_DropCache', {\n        detail: {\n          name,\n          scrollToTop\n        }\n      })\n    );\n  }\n}\n"],"names":["defaultEnabled","KeepAliveProvider","props","_componentData$type","children","router","pageProps","componentData","cloneElement","CurrentComponent","type","keepAliveCache","useRef","forceUpdate","useState","name","keepAliveName","keepScrollEnabled","applyNewProps","keepAlive","isEnabled","_keepAliveCache$curre","current","enabled","isKeptAlive","keepScroll","Component","MemoComponent","memo","scrollPos","handleRouteChangeStart","_keepAliveCache$curre2","window","scrollY","handleRouteChangeComplete","_keepAliveCache$curre3","scrollTo","setTimeout","_keepAliveCache$curre4","handleLoadFromCache","event","controlsName","controlsEnabled","detail","handleDropCache","dropKeepAliveName","scrollToTop","_keepAliveCache$curre5","_cachesToRemove$filte","caches","Object","keys","cachesToRemove","Array","isArray","filter","exists","forEach","cacheName","_keepAliveCache$curre6","useEffect","events","on","off","asPath","dispatchEvent","CustomEvent","addEventListener","removeEventListener","getCachedViewProps","cachedProps","getKeepAliveEffect","isHidden","useKeepAliveEffect","effect","deps","React","createElement","Fragment","style","display","id","entries","map","key","_extends","isHiddenByKeepAlive","defaultOpts","withKeepAlive","opts","KeepAlive","getInitialProps","useKeepAliveMountEffect","handleMountedEvent","e","useKeepAliveUnmountEffect","handleUnmountedEvent","keepAliveLoadFromCache","keepAliveDropCache"],"mappings":"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"}