{"version":3,"sources":["../lib/index.tsx","../lib/components/Navigation.tsx","../lib/reducers/index.ts","../lib/hooks/index.ts"],"sourcesContent":["import React, { useRef, useMemo } from 'react'\nimport { config } from './config'\nimport { urlToPageKey, ujsHandlers, argsForHistory } from './utils'\nimport { saveAndProcessPage } from './action_creators'\nimport { historyChange, setCSRFToken } from './actions'\nimport { Provider } from 'react-redux'\n\nimport { createBrowserHistory, createMemoryHistory } from 'history'\n\nimport { NavigationProvider } from './components/Navigation'\nexport { NavigationProvider, NavigationContext } from './components/Navigation'\nexport { saveAndProcessPage } from './action_creators'\nexport {\n  beforeFetch,\n  beforeVisit,\n  beforeRemote,\n  updateFragments,\n  copyPage,\n  removePage,\n  saveResponse,\n  GRAFTING_ERROR,\n  GRAFTING_SUCCESS,\n} from './actions'\nexport * from './types'\n\nimport {\n  VisitResponse,\n  ApplicationProps,\n  NavigateTo,\n  SuperglueStore,\n  SetupProps,\n} from './types'\nexport { superglueReducer, pageReducer, rootReducer } from './reducers'\nexport { getIn } from './utils/immutability'\nexport { urlToPageKey }\nexport * from './hooks'\n\nconst hasWindow = typeof window !== 'undefined'\n\nconst createHistory = () => {\n  if (hasWindow) {\n    // This is used for client side rendering\n    return createBrowserHistory({})\n  } else {\n    // This is used for server side rendering\n    return createMemoryHistory({})\n  }\n}\n\nexport const prepareStore = (\n  store: SuperglueStore,\n  initialPage: VisitResponse,\n  path: string\n) => {\n  const initialPageKey = urlToPageKey(path)\n  const { csrfToken } = initialPage\n\n  store.dispatch(\n    historyChange({\n      pageKey: initialPageKey,\n    })\n  )\n  store.dispatch(saveAndProcessPage(initialPageKey, initialPage))\n  store.dispatch(setCSRFToken({ csrfToken }))\n}\n\n/**\n * This is the setup function that the Application calls. Use this function if\n * you like to build your own Application component.\n */\nexport const setup = ({\n  initialPage,\n  baseUrl,\n  path,\n  store,\n  buildVisitAndRemote,\n  history,\n  navigatorRef,\n}: SetupProps) => {\n  config.baseUrl = baseUrl\n\n  const { visit, remote } = buildVisitAndRemote(navigatorRef, store)\n\n  const initialPageKey = urlToPageKey(path)\n  const nextHistory = history || createHistory()\n  nextHistory.replace(...argsForHistory(path))\n  prepareStore(store, initialPage, path)\n\n  const handlers = ujsHandlers({\n    visit,\n    remote,\n    ujsAttributePrefix: 'data-sg',\n    store,\n  })\n\n  return {\n    visit,\n    remote,\n    nextHistory,\n    initialPageKey,\n    ujs: handlers,\n  }\n}\n\n/**\n * The entry point to your superglue application. It sets up the redux Provider,\n * redux state and the Navigation component.\n *\n * This is a simple component, you can override this by copying the source code and\n * use the exported methods used by this component (`start` and `ujsHandler`).\n */\nfunction Application({\n  initialPage,\n  baseUrl,\n  path,\n  store,\n  buildVisitAndRemote,\n  history,\n  mapping,\n  ...rest\n}: ApplicationProps) {\n  const navigatorRef = useRef<{ navigateTo: NavigateTo } | null>(null)\n\n  const { visit, remote, nextHistory, initialPageKey, ujs } = useMemo(() => {\n    return setup({\n      initialPage,\n      baseUrl,\n      path,\n      store,\n      buildVisitAndRemote,\n      history,\n      navigatorRef,\n    })\n  }, [])\n\n  // The Nav component is pretty bare and can be inherited from for custom\n  // behavior or replaced with your own.\n  return (\n    <div onClick={ujs.onClick} onSubmit={ujs.onSubmit} {...rest}>\n      <Provider store={store}>\n        <NavigationProvider\n          ref={navigatorRef}\n          visit={visit}\n          remote={remote}\n          mapping={mapping}\n          history={nextHistory}\n          initialPageKey={initialPageKey}\n        />\n      </Provider>\n    </div>\n  )\n}\n\nexport { Application }\n","import React, {\n  createContext,\n  useEffect,\n  useLayoutEffect,\n  forwardRef,\n  useImperativeHandle,\n  ForwardedRef,\n} from 'react'\nimport { urlToPageKey } from '../utils'\nimport { removePage, setActivePage } from '../actions'\nimport {\n  HistoryState,\n  RootState,\n  NavigateTo,\n  NavigationContextProps,\n  NavigationProviderProps,\n  AllPages,\n  SuperglueState,\n} from '../types'\nimport { Update } from 'history'\nimport { useDispatch, useSelector, useStore } from 'react-redux'\n\nconst NavigationContext = createContext<NavigationContextProps>(\n  {} as NavigationContextProps\n)\n\nconst hasWindow = typeof window !== 'undefined'\n\nconst setWindowScroll = (posX: number, posY: number): void => {\n  hasWindow && window.scrollTo(posX, posY)\n}\n\nconst notFound = (identifier: string | undefined): never => {\n  let reminder = ''\n  if (!identifier) {\n    reminder =\n      'Did you forget to add `json.componentIdentifier` in your application.json.props layout?'\n  }\n\n  const error = new Error(\n    `Superglue Nav component was looking for ${identifier} but could not find it in your mapping. ${reminder}`\n  )\n\n  throw error\n}\n\nconst NavigationProvider = forwardRef(function NavigationProvider(\n  { history, visit, remote, mapping }: NavigationProviderProps,\n  ref: ForwardedRef<{ navigateTo: NavigateTo | null }>\n) {\n  const dispatch = useDispatch()\n  const pages = useSelector<RootState, AllPages>((state) => state.pages)\n  const superglue = useSelector<RootState, SuperglueState>(\n    (state) => state.superglue\n  )\n  const currentPageKey = useSelector<RootState, string>(\n    (state) => state.superglue.currentPageKey\n  )\n  const store = useStore<RootState>()\n\n  useEffect(() => {\n    return history.listen(onHistoryChange)\n  }, [])\n\n  useLayoutEffect(() => {\n    const state = history.location.state as HistoryState\n    if (state && 'superglue' in state) {\n      const { posX, posY } = state\n      setWindowScroll(posX, posY)\n    }\n  }, [currentPageKey])\n\n  useImperativeHandle(\n    ref,\n    () => {\n      return {\n        navigateTo,\n      }\n    },\n    []\n  )\n\n  const onHistoryChange = ({ location, action }: Update): void => {\n    const state = location.state as HistoryState\n\n    if (action !== 'POP') {\n      return\n    }\n\n    if (!state && location.hash !== '') {\n      const nextPageKey = urlToPageKey(location.pathname + location.search)\n      const containsKey = !!pages[nextPageKey]\n      if (containsKey) {\n        history.replace(\n          {\n            pathname: location.pathname,\n            search: location.search,\n            hash: location.hash,\n          },\n          {\n            pageKey: nextPageKey,\n            superglue: true,\n            posY: window.pageYOffset,\n            posX: window.pageXOffset,\n          }\n        )\n      }\n    }\n\n    if (state && 'superglue' in state) {\n      const { pageKey } = state\n      const prevPageKey = store.getState().superglue.currentPageKey\n      const containsKey = !!pages[pageKey]\n\n      if (containsKey) {\n        const { restoreStrategy } = pages[pageKey]\n\n        switch (restoreStrategy) {\n          case 'fromCacheOnly':\n            dispatch(setActivePage({ pageKey }))\n            break\n          case 'fromCacheAndRevisitInBackground':\n            dispatch(setActivePage({ pageKey }))\n            visit(pageKey, { revisit: true })\n            break\n          case 'revisitOnly':\n          default:\n            visit(pageKey, { revisit: true }).then(() => {\n              const noNav =\n                prevPageKey === store.getState().superglue.currentPageKey\n              if (noNav) {\n                // When \"POP'ed\", revisiting (using revisit: true) a page can result in\n                // a redirect, or a render of the same page.\n                //\n                // When its a redirect, calculateNavAction  will correctly set the\n                // navigationAction to `replace` this is the noop scenario.\n                //\n                // When its the same page, navigationAction is set to `none` and\n                // no navigation took place. In that case, we have to set the\n                // activePage otherwise the user is stuck on the original page.\n                dispatch(setActivePage({ pageKey }))\n              }\n            })\n        }\n      } else {\n        visit(pageKey, { revisit: true }).then(() => {\n          const noNav =\n            prevPageKey === store.getState().superglue.currentPageKey\n          if (noNav) {\n            dispatch(setActivePage({ pageKey }))\n          }\n        })\n      }\n    }\n  }\n\n  const navigateTo: NavigateTo = (\n    path,\n    { action } = {\n      action: 'push',\n    }\n  ) => {\n    if (action === 'none') {\n      return false\n    }\n\n    const nextPageKey = urlToPageKey(path)\n    const hasPage = Object.prototype.hasOwnProperty.call(\n      store.getState().pages,\n      nextPageKey\n    )\n\n    if (hasPage) {\n      const location = history.location\n      const state = location.state as HistoryState\n      const historyArgs = [\n        path,\n        {\n          pageKey: nextPageKey,\n          superglue: true,\n          posY: 0,\n          posX: 0,\n        },\n      ] as const\n\n      if (action === 'push') {\n        if (hasWindow) {\n          history.replace(\n            {\n              pathname: location.pathname,\n              search: location.search,\n              hash: location.hash,\n            },\n            {\n              ...state,\n              posY: window.scrollY,\n              posX: window.scrollX,\n            }\n          )\n        }\n\n        history.push(...historyArgs)\n        dispatch(setActivePage({ pageKey: nextPageKey }))\n      }\n\n      if (action === 'replace') {\n        history.replace(...historyArgs)\n\n        if (currentPageKey !== nextPageKey) {\n          dispatch(setActivePage({ pageKey: nextPageKey }))\n          dispatch(removePage({ pageKey: currentPageKey }))\n        }\n      }\n      return true\n    } else {\n      console.warn(\n        `\\`navigateTo\\` was called , but could not find\n        the pageKey in the store. This may happen when the wrong\n        content_location was set in your non-get controller action.\n        No navigation will take place`\n      )\n      return false\n    }\n  }\n\n  const { search } = superglue\n  const { componentIdentifier } = pages[currentPageKey]\n  const Component = mapping[componentIdentifier]\n\n  if (Component) {\n    return (\n      <NavigationContext.Provider\n        value={{ pageKey: currentPageKey, search, navigateTo, visit, remote }}\n      >\n        <Component />\n      </NavigationContext.Provider>\n    )\n  } else {\n    notFound(componentIdentifier)\n  }\n})\n\nexport { NavigationContext, NavigationProvider }\n","import { setIn, getIn, urlToPageKey, parsePageKey } from '../utils'\nimport type { Action } from '@reduxjs/toolkit'\nimport {\n  saveResponse,\n  handleGraft,\n  historyChange,\n  copyPage,\n  setCSRFToken,\n  setActivePage,\n  removePage,\n} from '../actions'\nimport { config } from '../config'\nimport {\n  AllPages,\n  Page,\n  VisitResponse,\n  Fragment,\n  GraftResponse,\n  SuperglueState,\n  JSONMappable,\n} from '../types'\n\nfunction addPlaceholdersToDeferredNodes(existingPage: Page, page: Page): Page {\n  const { defers = [] } = existingPage\n\n  const prevDefers = defers.map(({ path }) => {\n    const node = getIn(existingPage, path)\n    const copy = JSON.stringify(node)\n    return [path, JSON.parse(copy)]\n  })\n\n  return prevDefers.reduce((memo, [path, node]) => {\n    return setIn(page, path, node)\n  }, page)\n}\n\nfunction constrainPagesSize(state: AllPages) {\n  const { maxPages } = config\n  const allPageKeys = Object.keys(state)\n  const cacheTimesRecentFirst = allPageKeys\n    .map((key) => state[key].savedAt)\n    .sort((a, b) => b - a)\n\n  for (const key of Array.from(allPageKeys)) {\n    if (state[key].savedAt <= cacheTimesRecentFirst[maxPages - 1]) {\n      delete state[key]\n    }\n  }\n}\n\nfunction handleSaveResponse(\n  state: AllPages,\n  pageKey: string,\n  page: VisitResponse\n): AllPages {\n  state = { ...state }\n\n  let nextPage: Page = {\n    ...page,\n    savedAt: Date.now(),\n  }\n\n  const existingPage = state[pageKey]\n\n  if (existingPage) {\n    nextPage = addPlaceholdersToDeferredNodes(existingPage, nextPage)\n  }\n  constrainPagesSize(state)\n  state[pageKey] = nextPage\n\n  return state\n}\n\nexport function appendReceivedFragmentsOntoPage(\n  state: AllPages,\n  pageKey: string,\n  receivedFragments: Fragment[]\n): AllPages {\n  if (!pageKey) {\n    return state\n  }\n\n  if (receivedFragments.length === 0) {\n    return state\n  }\n\n  const currentPage = state[pageKey]\n  const { fragments: prevFragments = [] } = currentPage\n  const nextFragments = [...prevFragments]\n  const existingKeys: Record<string, boolean> = {}\n  prevFragments.forEach((frag) => (existingKeys[frag.path] = true))\n\n  receivedFragments.forEach((frag) => {\n    if (!existingKeys[frag.path]) {\n      nextFragments.push(frag)\n    }\n  })\n\n  const nextPage = {\n    ...currentPage,\n    fragments: nextFragments,\n  }\n\n  const nextState = { ...state }\n  nextState[pageKey] = nextPage\n\n  return nextState\n}\n\nexport function graftNodeOntoPage(\n  state: AllPages,\n  pageKey: string,\n  node: JSONMappable,\n  pathToNode: string\n): AllPages {\n  if (!node) {\n    console.warn(\n      'There was no node returned in the response. Do you have the correct key path in your props_at?'\n    )\n    return state\n  }\n\n  if (!pathToNode || !pageKey) {\n    return state\n  }\n  const fullPathToNode = [pageKey, pathToNode].join('.')\n  return setIn(state, fullPathToNode, node)\n}\n\nfunction handleGraftResponse(\n  state: AllPages,\n  pageKey: string,\n  page: GraftResponse\n): AllPages {\n  const currentPage = state[pageKey]\n  if (!currentPage) {\n    const error = new Error(\n      `Superglue was looking for ${pageKey} in your state, but could not find it in your mapping. Did you forget to pass in a valid pageKey to this.props.remote or this.props.visit?`\n    )\n    throw error\n  }\n  const {\n    data: receivedNode,\n    path: pathToNode,\n    fragments: receivedFragments = [],\n  } = page\n\n  return [\n    (nextState: AllPages) =>\n      graftNodeOntoPage(nextState, pageKey, receivedNode, pathToNode),\n    (nextState: AllPages) =>\n      appendReceivedFragmentsOntoPage(nextState, pageKey, receivedFragments),\n  ].reduce((memo, fn) => fn(memo), state)\n}\n\nexport function pageReducer(state: AllPages = {}, action: Action): AllPages {\n  if (removePage.match(action)) {\n    const { pageKey } = action.payload\n    const nextState = { ...state }\n    delete nextState[pageKey]\n\n    return nextState\n  }\n\n  if (copyPage.match(action)) {\n    const nextState = { ...state }\n    const { from, to } = action.payload\n\n    nextState[urlToPageKey(to)] = JSON.parse(JSON.stringify(nextState[from]))\n\n    return nextState\n  }\n\n  if (handleGraft.match(action)) {\n    const { pageKey, page } = action.payload\n\n    return handleGraftResponse(state, pageKey, page)\n  }\n\n  if (saveResponse.match(action)) {\n    const { pageKey, page } = action.payload\n    const nextState = handleSaveResponse(state, pageKey, page)\n    return nextState\n  }\n\n  return state\n}\n\nexport function superglueReducer(\n  state: SuperglueState = {\n    currentPageKey: '',\n    search: {},\n    assets: [],\n  },\n  action: Action\n): SuperglueState {\n  if (setCSRFToken.match(action)) {\n    const { csrfToken } = action.payload\n    return { ...state, csrfToken: csrfToken }\n  }\n\n  if (setActivePage.match(action)) {\n    const { pageKey } = action.payload\n    const { search } = parsePageKey(pageKey)\n\n    return {\n      ...state,\n      search,\n      currentPageKey: pageKey,\n    }\n  }\n\n  if (historyChange.match(action)) {\n    const { pageKey } = action.payload\n    const { search } = parsePageKey(pageKey)\n\n    return {\n      ...state,\n      currentPageKey: pageKey,\n      search,\n    }\n  }\n\n  if (saveResponse.match(action)) {\n    const {\n      page: { csrfToken, assets },\n    } = action.payload\n\n    return { ...state, csrfToken, assets }\n  }\n\n  return state\n}\n\nexport const rootReducer = {\n  superglue: superglueReducer,\n  pages: pageReducer,\n}\n","import { useSelector } from 'react-redux'\nimport { JSONMappable, Page, RootState, SuperglueState } from '../types'\n\n/**\n * A lightweight hook that grabs the superglue state from the store.\n */\nexport function useSuperglue() {\n  return useSelector<RootState, SuperglueState>((state) => state.superglue)\n}\n\n/**\n * A lightweight hook that grabs the current page's content from the store.\n */\nexport function useContent<T = JSONMappable>() {\n  const superglueState = useSuperglue()\n  const currentPageKey = superglueState.currentPageKey\n\n  return useSelector<RootState<T>, Page<T>>(\n    (state) => state.pages[currentPageKey]\n  ).data\n}\n"],"mappings":"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","names":["React","NavigationProvider","useSelector","hasWindow","React"]}