@looker/api-explorer 0.9.33 → 0.9.36

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/CHANGELOG.md +49 -0
  2. package/dist/bundle.js +1 -1
  3. package/dist/bundle.js.map +1 -1
  4. package/lib/ApiExplorer.js +9 -1
  5. package/lib/ApiExplorer.js.map +1 -1
  6. package/lib/components/DocMarkdown/DocMarkdown.js +7 -7
  7. package/lib/components/DocMarkdown/DocMarkdown.js.map +1 -1
  8. package/lib/components/SelectorContainer/ApiSpecSelector.js +4 -2
  9. package/lib/components/SelectorContainer/ApiSpecSelector.js.map +1 -1
  10. package/lib/components/SideNav/SideNav.js +23 -13
  11. package/lib/components/SideNav/SideNav.js.map +1 -1
  12. package/lib/components/SideNav/SideNavMethods.js +8 -6
  13. package/lib/components/SideNav/SideNavMethods.js.map +1 -1
  14. package/lib/components/SideNav/SideNavTypes.js +6 -4
  15. package/lib/components/SideNav/SideNavTypes.js.map +1 -1
  16. package/lib/esm/ApiExplorer.js +9 -1
  17. package/lib/esm/ApiExplorer.js.map +1 -1
  18. package/lib/esm/components/DocMarkdown/DocMarkdown.js +4 -4
  19. package/lib/esm/components/DocMarkdown/DocMarkdown.js.map +1 -1
  20. package/lib/esm/components/SelectorContainer/ApiSpecSelector.js +4 -3
  21. package/lib/esm/components/SelectorContainer/ApiSpecSelector.js.map +1 -1
  22. package/lib/esm/components/SideNav/SideNav.js +26 -16
  23. package/lib/esm/components/SideNav/SideNav.js.map +1 -1
  24. package/lib/esm/components/SideNav/SideNavMethods.js +8 -6
  25. package/lib/esm/components/SideNav/SideNavMethods.js.map +1 -1
  26. package/lib/esm/components/SideNav/SideNavTypes.js +8 -6
  27. package/lib/esm/components/SideNav/SideNavTypes.js.map +1 -1
  28. package/lib/esm/scenes/DiffScene/DiffScene.js +6 -6
  29. package/lib/esm/scenes/DiffScene/DiffScene.js.map +1 -1
  30. package/lib/esm/scenes/DiffScene/DocDiff/DiffItem.js +3 -4
  31. package/lib/esm/scenes/DiffScene/DocDiff/DiffItem.js.map +1 -1
  32. package/lib/esm/scenes/MethodScene/MethodScene.js +4 -3
  33. package/lib/esm/scenes/MethodScene/MethodScene.js.map +1 -1
  34. package/lib/esm/scenes/MethodTagScene/MethodTagScene.js +3 -2
  35. package/lib/esm/scenes/MethodTagScene/MethodTagScene.js.map +1 -1
  36. package/lib/esm/scenes/TypeScene/TypeScene.js +5 -1
  37. package/lib/esm/scenes/TypeScene/TypeScene.js.map +1 -1
  38. package/lib/esm/scenes/TypeTagScene/TypeTagScene.js +5 -5
  39. package/lib/esm/scenes/TypeTagScene/TypeTagScene.js.map +1 -1
  40. package/lib/esm/utils/hooks.js +26 -0
  41. package/lib/esm/utils/hooks.js.map +1 -0
  42. package/lib/esm/utils/index.js +1 -0
  43. package/lib/esm/utils/index.js.map +1 -1
  44. package/lib/esm/utils/path.js +2 -2
  45. package/lib/esm/utils/path.js.map +1 -1
  46. package/lib/scenes/DiffScene/DiffScene.js +4 -4
  47. package/lib/scenes/DiffScene/DiffScene.js.map +1 -1
  48. package/lib/scenes/DiffScene/DocDiff/DiffItem.js +2 -4
  49. package/lib/scenes/DiffScene/DocDiff/DiffItem.js.map +1 -1
  50. package/lib/scenes/MethodScene/MethodScene.js +3 -2
  51. package/lib/scenes/MethodScene/MethodScene.js.map +1 -1
  52. package/lib/scenes/MethodTagScene/MethodTagScene.js +2 -1
  53. package/lib/scenes/MethodTagScene/MethodTagScene.js.map +1 -1
  54. package/lib/scenes/TypeScene/TypeScene.js +6 -1
  55. package/lib/scenes/TypeScene/TypeScene.js.map +1 -1
  56. package/lib/scenes/TypeTagScene/TypeTagScene.js +3 -3
  57. package/lib/scenes/TypeTagScene/TypeTagScene.js.map +1 -1
  58. package/lib/utils/hooks.d.ts +3 -0
  59. package/lib/utils/hooks.js +36 -0
  60. package/lib/utils/hooks.js.map +1 -0
  61. package/lib/utils/index.d.ts +1 -0
  62. package/lib/utils/index.js +10 -1
  63. package/lib/utils/index.js.map +1 -1
  64. package/lib/utils/path.d.ts +2 -2
  65. package/lib/utils/path.js +2 -2
  66. package/lib/utils/path.js.map +1 -1
  67. package/package.json +9 -9
  68. package/src/ApiExplorer.tsx +7 -1
  69. package/src/components/DocMarkdown/DocMarkdown.tsx +4 -4
  70. package/src/components/SelectorContainer/ApiSpecSelector.spec.tsx +5 -2
  71. package/src/components/SelectorContainer/ApiSpecSelector.tsx +4 -3
  72. package/src/components/SideNav/SideNav.spec.tsx +39 -5
  73. package/src/components/SideNav/SideNav.tsx +22 -21
  74. package/src/components/SideNav/SideNavMethods.spec.tsx +9 -2
  75. package/src/components/SideNav/SideNavMethods.tsx +15 -8
  76. package/src/components/SideNav/SideNavTypes.spec.tsx +9 -2
  77. package/src/components/SideNav/SideNavTypes.tsx +15 -8
  78. package/src/scenes/DiffScene/DiffScene.tsx +6 -6
  79. package/src/scenes/DiffScene/DocDiff/DiffItem.spec.tsx +4 -3
  80. package/src/scenes/DiffScene/DocDiff/DiffItem.tsx +3 -4
  81. package/src/scenes/MethodScene/MethodScene.tsx +4 -3
  82. package/src/scenes/MethodTagScene/MethodTagScene.tsx +3 -2
  83. package/src/scenes/TypeScene/TypeScene.tsx +8 -2
  84. package/src/scenes/TypeTagScene/TypeTagScene.tsx +5 -5
  85. package/src/utils/hooks.spec.ts +78 -0
  86. package/src/utils/hooks.ts +53 -0
  87. package/src/utils/index.ts +1 -0
  88. package/src/utils/path.spec.ts +25 -2
  89. package/src/utils/path.ts +11 -4
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/ApiExplorer.tsx"],"names":["React","useState","useEffect","useCallback","styled","createGlobalStyle","Aside","ComponentsProvider","Divider","Heading","IconButton","Layout","Page","Space","FirstPage","LastPage","registerEnvAdaptor","unregisterEnvAdaptor","useSelector","useLocation","Header","SideNav","ErrorBoundary","SelectorContainer","HEADER_TOGGLE_LABEL","Loader","Banner","AppRouter","apixFilesHost","useSettingActions","useSettingStoreState","useLodeActions","useLodesStoreState","useSpecActions","useSpecStoreState","selectSpecs","selectCurrentSpec","getSpecKey","diffPath","BodyOverride","ApiExplorer","adaptor","examplesLodeUrl","declarationsLodeUrl","headless","working","description","specs","spec","initLodesAction","initSettingsAction","initSpecsAction","setCurrentSpecAction","location","hasNavigation","setHasNavigation","toggleNavigation","target","hasNavigationToggle","e","origin","window","data","action","currentHasNavigation","specKey","maybeSpec","pathname","split","key","currentSpecKey","addEventListener","removeEventListener","themeOverrides","neededSpec","loadGoogleFonts","themeCustomizations","logError","bind","overflow","api","AsideBorder","isOpen"],"mappings":"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","sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2021 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\n\nimport type { FC } from 'react'\nimport React, { useState, useEffect, useCallback } from 'react'\nimport styled, { createGlobalStyle } from 'styled-components'\nimport {\n Aside,\n ComponentsProvider,\n Divider,\n Heading,\n IconButton,\n Layout,\n Page,\n Space,\n} from '@looker/components'\nimport { FirstPage } from '@styled-icons/material/FirstPage'\nimport { LastPage } from '@styled-icons/material/LastPage'\nimport {\n registerEnvAdaptor,\n unregisterEnvAdaptor,\n} from '@looker/extension-utils'\nimport { useSelector } from 'react-redux'\nimport { useLocation } from 'react-router-dom'\n\nimport type { IApixAdaptor } from './utils'\nimport {\n Header,\n SideNav,\n ErrorBoundary,\n SelectorContainer,\n HEADER_TOGGLE_LABEL,\n Loader,\n Banner,\n} from './components'\nimport { AppRouter } from './routes'\nimport { apixFilesHost } from './utils/lodeUtils'\nimport {\n useSettingActions,\n useSettingStoreState,\n useLodeActions,\n useLodesStoreState,\n useSpecActions,\n useSpecStoreState,\n selectSpecs,\n selectCurrentSpec,\n} from './state'\nimport { getSpecKey, diffPath } from './utils'\n\nexport interface ApiExplorerProps {\n adaptor: IApixAdaptor\n examplesLodeUrl?: string\n declarationsLodeUrl?: string\n headless?: boolean\n}\n\nconst BodyOverride = createGlobalStyle` html { height: 100%; overflow: hidden; } `\n\nexport const ApiExplorer: FC<ApiExplorerProps> = ({\n adaptor,\n examplesLodeUrl = 'https://raw.githubusercontent.com/looker-open-source/sdk-codegen/main/examplesIndex.json',\n declarationsLodeUrl = `${apixFilesHost}/declarationsIndex.json`,\n headless = false,\n}) => {\n useSettingStoreState()\n useLodesStoreState()\n const { working, description } = useSpecStoreState()\n const specs = useSelector(selectSpecs)\n const spec = useSelector(selectCurrentSpec)\n const { initLodesAction } = useLodeActions()\n const { initSettingsAction } = useSettingActions()\n const { initSpecsAction, setCurrentSpecAction } = useSpecActions()\n\n const location = useLocation()\n const [hasNavigation, setHasNavigation] = useState(true)\n const toggleNavigation = (target?: boolean) =>\n setHasNavigation(target || !hasNavigation)\n\n const hasNavigationToggle = useCallback((e: MessageEvent<any>) => {\n if (e.origin === window.origin && e.data.action === 'toggle_sidebar') {\n setHasNavigation((currentHasNavigation) => !currentHasNavigation)\n }\n }, [])\n\n registerEnvAdaptor(adaptor)\n\n useEffect(() => {\n initSettingsAction()\n initLodesAction({ examplesLodeUrl, declarationsLodeUrl })\n\n const specKey = getSpecKey(location)\n initSpecsAction({ specKey })\n return () => unregisterEnvAdaptor()\n }, [])\n\n useEffect(() => {\n const maybeSpec = location.pathname?.split('/')[1]\n if (spec && maybeSpec && maybeSpec !== diffPath && maybeSpec !== spec.key) {\n setCurrentSpecAction({ currentSpecKey: maybeSpec })\n }\n }, [location.pathname, spec])\n\n useEffect(() => {\n if (headless) {\n window.addEventListener('message', hasNavigationToggle)\n }\n return () => {\n if (headless) {\n window.removeEventListener('message', hasNavigationToggle)\n }\n }\n }, [headless, hasNavigationToggle])\n\n const themeOverrides = adaptor.themeOverrides()\n\n let neededSpec = location.pathname?.split('/')[1]\n if (!neededSpec || neededSpec === diffPath) {\n neededSpec = spec?.key\n }\n\n return (\n <>\n <ComponentsProvider\n loadGoogleFonts={themeOverrides.loadGoogleFonts}\n themeCustomizations={themeOverrides.themeCustomizations}\n >\n {working || !neededSpec || neededSpec !== spec.key ? (\n <Loader message={description} themeOverrides={themeOverrides} />\n ) : (\n <ErrorBoundary logError={adaptor.logError.bind(adaptor)}>\n <Banner adaptor={adaptor} specs={specs} />\n <Page style={{ overflow: 'hidden' }}>\n {!headless && (\n <Header spec={spec} toggleNavigation={toggleNavigation} />\n )}\n <Layout hasAside height=\"100%\">\n <AsideBorder\n borderRight\n isOpen={hasNavigation}\n headless={headless}\n >\n {headless && (\n <>\n <Space\n alignItems=\"center\"\n py=\"u3\"\n px={hasNavigation ? 'u5' : '0'}\n justifyContent={\n hasNavigation ? 'space-between' : 'center'\n }\n >\n {hasNavigation && (\n <Heading\n as=\"h2\"\n fontSize=\"xsmall\"\n fontWeight=\"bold\"\n color=\"text2\"\n >\n API DOCUMENTATION\n </Heading>\n )}\n <IconButton\n size=\"xsmall\"\n shape=\"round\"\n icon={hasNavigation ? <FirstPage /> : <LastPage />}\n label={HEADER_TOGGLE_LABEL}\n onClick={() => toggleNavigation()}\n />\n </Space>\n {hasNavigation && (\n <>\n <Divider mb=\"u3\" appearance=\"light\" />\n <SelectorContainer\n spec={spec}\n ml=\"large\"\n mr=\"large\"\n />\n </>\n )}\n </>\n )}\n {hasNavigation && <SideNav headless={headless} spec={spec} />}\n </AsideBorder>\n <AppRouter\n specKey={spec.key}\n api={spec.api!}\n specs={specs}\n toggleNavigation={toggleNavigation}\n />\n </Layout>\n </Page>\n </ErrorBoundary>\n )}\n </ComponentsProvider>\n {!headless && <BodyOverride />}\n </>\n )\n}\n\nconst AsideBorder = styled(Aside)<{\n isOpen: boolean\n headless: boolean\n}>`\n width: ${({ isOpen, headless }) =>\n isOpen ? '20rem' : headless ? '2.75rem' : '0rem'};\n`\n"],"file":"ApiExplorer.js"}
1
+ {"version":3,"sources":["../../src/ApiExplorer.tsx"],"names":["React","useState","useEffect","useCallback","styled","createGlobalStyle","Aside","ComponentsProvider","Divider","Heading","IconButton","Layout","Page","Space","FirstPage","LastPage","registerEnvAdaptor","unregisterEnvAdaptor","useSelector","useLocation","Header","SideNav","ErrorBoundary","SelectorContainer","HEADER_TOGGLE_LABEL","Loader","Banner","AppRouter","apixFilesHost","useSettingActions","useSettingStoreState","useLodeActions","useLodesStoreState","useSpecActions","useSpecStoreState","selectSpecs","selectCurrentSpec","getSpecKey","diffPath","BodyOverride","ApiExplorer","adaptor","examplesLodeUrl","declarationsLodeUrl","headless","working","description","specs","spec","initLodesAction","initSettingsAction","setSearchPatternAction","initSpecsAction","setCurrentSpecAction","location","hasNavigation","setHasNavigation","toggleNavigation","target","hasNavigationToggle","e","origin","window","data","action","currentHasNavigation","specKey","maybeSpec","pathname","split","key","currentSpecKey","searchParams","URLSearchParams","search","searchPattern","get","addEventListener","removeEventListener","themeOverrides","neededSpec","loadGoogleFonts","themeCustomizations","logError","bind","overflow","api","AsideBorder","isOpen"],"mappings":"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","sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2021 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\n\nimport type { FC } from 'react'\nimport React, { useState, useEffect, useCallback } from 'react'\nimport styled, { createGlobalStyle } from 'styled-components'\nimport {\n Aside,\n ComponentsProvider,\n Divider,\n Heading,\n IconButton,\n Layout,\n Page,\n Space,\n} from '@looker/components'\nimport { FirstPage } from '@styled-icons/material/FirstPage'\nimport { LastPage } from '@styled-icons/material/LastPage'\nimport {\n registerEnvAdaptor,\n unregisterEnvAdaptor,\n} from '@looker/extension-utils'\nimport { useSelector } from 'react-redux'\nimport { useLocation } from 'react-router-dom'\n\nimport type { IApixAdaptor } from './utils'\nimport {\n Header,\n SideNav,\n ErrorBoundary,\n SelectorContainer,\n HEADER_TOGGLE_LABEL,\n Loader,\n Banner,\n} from './components'\nimport { AppRouter } from './routes'\nimport { apixFilesHost } from './utils/lodeUtils'\nimport {\n useSettingActions,\n useSettingStoreState,\n useLodeActions,\n useLodesStoreState,\n useSpecActions,\n useSpecStoreState,\n selectSpecs,\n selectCurrentSpec,\n} from './state'\nimport { getSpecKey, diffPath } from './utils'\n\nexport interface ApiExplorerProps {\n adaptor: IApixAdaptor\n examplesLodeUrl?: string\n declarationsLodeUrl?: string\n headless?: boolean\n}\n\nconst BodyOverride = createGlobalStyle` html { height: 100%; overflow: hidden; } `\n\nexport const ApiExplorer: FC<ApiExplorerProps> = ({\n adaptor,\n examplesLodeUrl = 'https://raw.githubusercontent.com/looker-open-source/sdk-codegen/main/examplesIndex.json',\n declarationsLodeUrl = `${apixFilesHost}/declarationsIndex.json`,\n headless = false,\n}) => {\n useSettingStoreState()\n useLodesStoreState()\n const { working, description } = useSpecStoreState()\n const specs = useSelector(selectSpecs)\n const spec = useSelector(selectCurrentSpec)\n const { initLodesAction } = useLodeActions()\n const { initSettingsAction, setSearchPatternAction } = useSettingActions()\n const { initSpecsAction, setCurrentSpecAction } = useSpecActions()\n\n const location = useLocation()\n const [hasNavigation, setHasNavigation] = useState(true)\n const toggleNavigation = (target?: boolean) =>\n setHasNavigation(target || !hasNavigation)\n\n const hasNavigationToggle = useCallback((e: MessageEvent<any>) => {\n if (e.origin === window.origin && e.data.action === 'toggle_sidebar') {\n setHasNavigation((currentHasNavigation) => !currentHasNavigation)\n }\n }, [])\n\n registerEnvAdaptor(adaptor)\n\n useEffect(() => {\n initSettingsAction()\n initLodesAction({ examplesLodeUrl, declarationsLodeUrl })\n\n const specKey = getSpecKey(location)\n initSpecsAction({ specKey })\n return () => unregisterEnvAdaptor()\n }, [])\n\n useEffect(() => {\n const maybeSpec = location.pathname?.split('/')[1]\n if (spec && maybeSpec && maybeSpec !== diffPath && maybeSpec !== spec.key) {\n setCurrentSpecAction({ currentSpecKey: maybeSpec })\n }\n }, [location.pathname, spec])\n\n useEffect(() => {\n const searchParams = new URLSearchParams(location.search)\n const searchPattern = searchParams.get('s') || ''\n setSearchPatternAction({ searchPattern: searchPattern! })\n }, [location.search])\n\n useEffect(() => {\n if (headless) {\n window.addEventListener('message', hasNavigationToggle)\n }\n return () => {\n if (headless) {\n window.removeEventListener('message', hasNavigationToggle)\n }\n }\n }, [headless, hasNavigationToggle])\n\n const themeOverrides = adaptor.themeOverrides()\n\n let neededSpec = location.pathname?.split('/')[1]\n if (!neededSpec || neededSpec === diffPath) {\n neededSpec = spec?.key\n }\n\n return (\n <>\n <ComponentsProvider\n loadGoogleFonts={themeOverrides.loadGoogleFonts}\n themeCustomizations={themeOverrides.themeCustomizations}\n >\n {working || !neededSpec || neededSpec !== spec.key ? (\n <Loader message={description} themeOverrides={themeOverrides} />\n ) : (\n <ErrorBoundary logError={adaptor.logError.bind(adaptor)}>\n <Banner adaptor={adaptor} specs={specs} />\n <Page style={{ overflow: 'hidden' }}>\n {!headless && (\n <Header spec={spec} toggleNavigation={toggleNavigation} />\n )}\n <Layout hasAside height=\"100%\">\n <AsideBorder\n borderRight\n isOpen={hasNavigation}\n headless={headless}\n >\n {headless && (\n <>\n <Space\n alignItems=\"center\"\n py=\"u3\"\n px={hasNavigation ? 'u5' : '0'}\n justifyContent={\n hasNavigation ? 'space-between' : 'center'\n }\n >\n {hasNavigation && (\n <Heading\n as=\"h2\"\n fontSize=\"xsmall\"\n fontWeight=\"bold\"\n color=\"text2\"\n >\n API DOCUMENTATION\n </Heading>\n )}\n <IconButton\n size=\"xsmall\"\n shape=\"round\"\n icon={hasNavigation ? <FirstPage /> : <LastPage />}\n label={HEADER_TOGGLE_LABEL}\n onClick={() => toggleNavigation()}\n />\n </Space>\n {hasNavigation && (\n <>\n <Divider mb=\"u3\" appearance=\"light\" />\n <SelectorContainer\n spec={spec}\n ml=\"large\"\n mr=\"large\"\n />\n </>\n )}\n </>\n )}\n {hasNavigation && <SideNav headless={headless} spec={spec} />}\n </AsideBorder>\n <AppRouter\n specKey={spec.key}\n api={spec.api!}\n specs={specs}\n toggleNavigation={toggleNavigation}\n />\n </Layout>\n </Page>\n </ErrorBoundary>\n )}\n </ComponentsProvider>\n {!headless && <BodyOverride />}\n </>\n )\n}\n\nconst AsideBorder = styled(Aside)<{\n isOpen: boolean\n headless: boolean\n}>`\n width: ${({ isOpen, headless }) =>\n isOpen ? '20rem' : headless ? '2.75rem' : '0rem'};\n`\n"],"file":"ApiExplorer.js"}
@@ -1,9 +1,9 @@
1
1
  import React from 'react';
2
- import { useHistory } from 'react-router-dom';
3
2
  import { Markdown } from '@looker/code-editor';
4
3
  import { useSelector } from 'react-redux';
5
4
  import { getEnvAdaptor } from '@looker/extension-utils';
6
5
  import { selectSearchPattern } from '../../state';
6
+ import { useNavigation } from '../../utils';
7
7
  import { transformURL } from './utils';
8
8
  export var DocMarkdown = _ref => {
9
9
  var {
@@ -11,13 +11,13 @@ export var DocMarkdown = _ref => {
11
11
  specKey
12
12
  } = _ref;
13
13
  var searchPattern = useSelector(selectSearchPattern);
14
- var history = useHistory();
14
+ var navigate = useNavigation();
15
15
 
16
16
  var linkClickHandler = (pathname, url) => {
17
17
  if (pathname.startsWith("/".concat(specKey))) {
18
- history.push(pathname);
18
+ navigate(pathname);
19
19
  } else if (url.startsWith("/".concat(specKey))) {
20
- history.push(url);
20
+ navigate(url);
21
21
  } else if (url.startsWith('https://')) {
22
22
  var adaptor = getEnvAdaptor();
23
23
  adaptor.openBrowserWindow(url);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/DocMarkdown/DocMarkdown.tsx"],"names":["React","useHistory","Markdown","useSelector","getEnvAdaptor","selectSearchPattern","transformURL","DocMarkdown","source","specKey","searchPattern","history","linkClickHandler","pathname","url","startsWith","push","adaptor","openBrowserWindow","bind"],"mappings":"AA2BA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAASC,UAAT,QAA2B,kBAA3B;AACA,SAASC,QAAT,QAAyB,qBAAzB;AACA,SAASC,WAAT,QAA4B,aAA5B;AACA,SAASC,aAAT,QAA8B,yBAA9B;AACA,SAASC,mBAAT,QAAoC,aAApC;AACA,SAASC,YAAT,QAA6B,SAA7B;AAOA,OAAO,IAAMC,WAAiC,GAAG,QAAyB;AAAA,MAAxB;AAAEC,IAAAA,MAAF;AAAUC,IAAAA;AAAV,GAAwB;AACxE,MAAMC,aAAa,GAAGP,WAAW,CAACE,mBAAD,CAAjC;AACA,MAAMM,OAAO,GAAGV,UAAU,EAA1B;;AAEA,MAAMW,gBAAgB,GAAG,CAACC,QAAD,EAAmBC,GAAnB,KAAmC;AAC1D,QAAID,QAAQ,CAACE,UAAT,YAAwBN,OAAxB,EAAJ,EAAwC;AACtCE,MAAAA,OAAO,CAACK,IAAR,CAAaH,QAAb;AACD,KAFD,MAEO,IAAIC,GAAG,CAACC,UAAJ,YAAmBN,OAAnB,EAAJ,EAAmC;AACxCE,MAAAA,OAAO,CAACK,IAAR,CAAaF,GAAb;AACD,KAFM,MAEA,IAAIA,GAAG,CAACC,UAAJ,CAAe,UAAf,CAAJ,EAAgC;AACrC,UAAME,OAAO,GAAGb,aAAa,EAA7B;AACAa,MAAAA,OAAO,CAACC,iBAAR,CAA0BJ,GAA1B;AACD;AACF,GATD;;AAUA,SACE,oBAAC,QAAD;AACE,IAAA,MAAM,EAAEN,MADV;AAEE,IAAA,OAAO,EAAEE,aAFX;AAGE,IAAA,gBAAgB,EAAEE,gBAHpB;AAIE,IAAA,gBAAgB,EAAEN,YAAY,CAACa,IAAb,CAAkB,IAAlB,EAAwBV,OAAxB;AAJpB,IADF;AAQD,CAtBM","sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2021 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\n\nimport type { FC } from 'react'\nimport React from 'react'\nimport { useHistory } from 'react-router-dom'\nimport { Markdown } from '@looker/code-editor'\nimport { useSelector } from 'react-redux'\nimport { getEnvAdaptor } from '@looker/extension-utils'\nimport { selectSearchPattern } from '../../state'\nimport { transformURL } from './utils'\n\ninterface DocMarkdownProps {\n source: string\n specKey: string\n}\n\nexport const DocMarkdown: FC<DocMarkdownProps> = ({ source, specKey }) => {\n const searchPattern = useSelector(selectSearchPattern)\n const history = useHistory()\n\n const linkClickHandler = (pathname: string, url: string) => {\n if (pathname.startsWith(`/${specKey}`)) {\n history.push(pathname)\n } else if (url.startsWith(`/${specKey}`)) {\n history.push(url)\n } else if (url.startsWith('https://')) {\n const adaptor = getEnvAdaptor()\n adaptor.openBrowserWindow(url)\n }\n }\n return (\n <Markdown\n source={source}\n pattern={searchPattern}\n linkClickHandler={linkClickHandler}\n transformLinkUri={transformURL.bind(null, specKey)}\n />\n )\n}\n"],"file":"DocMarkdown.js"}
1
+ {"version":3,"sources":["../../../../src/components/DocMarkdown/DocMarkdown.tsx"],"names":["React","Markdown","useSelector","getEnvAdaptor","selectSearchPattern","useNavigation","transformURL","DocMarkdown","source","specKey","searchPattern","navigate","linkClickHandler","pathname","url","startsWith","adaptor","openBrowserWindow","bind"],"mappings":"AA2BA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAASC,QAAT,QAAyB,qBAAzB;AACA,SAASC,WAAT,QAA4B,aAA5B;AACA,SAASC,aAAT,QAA8B,yBAA9B;AACA,SAASC,mBAAT,QAAoC,aAApC;AACA,SAASC,aAAT,QAA8B,aAA9B;AACA,SAASC,YAAT,QAA6B,SAA7B;AAOA,OAAO,IAAMC,WAAiC,GAAG,QAAyB;AAAA,MAAxB;AAAEC,IAAAA,MAAF;AAAUC,IAAAA;AAAV,GAAwB;AACxE,MAAMC,aAAa,GAAGR,WAAW,CAACE,mBAAD,CAAjC;AACA,MAAMO,QAAQ,GAAGN,aAAa,EAA9B;;AAEA,MAAMO,gBAAgB,GAAG,CAACC,QAAD,EAAmBC,GAAnB,KAAmC;AAC1D,QAAID,QAAQ,CAACE,UAAT,YAAwBN,OAAxB,EAAJ,EAAwC;AACtCE,MAAAA,QAAQ,CAACE,QAAD,CAAR;AACD,KAFD,MAEO,IAAIC,GAAG,CAACC,UAAJ,YAAmBN,OAAnB,EAAJ,EAAmC;AACxCE,MAAAA,QAAQ,CAACG,GAAD,CAAR;AACD,KAFM,MAEA,IAAIA,GAAG,CAACC,UAAJ,CAAe,UAAf,CAAJ,EAAgC;AACrC,UAAMC,OAAO,GAAGb,aAAa,EAA7B;AACAa,MAAAA,OAAO,CAACC,iBAAR,CAA0BH,GAA1B;AACD;AACF,GATD;;AAUA,SACE,oBAAC,QAAD;AACE,IAAA,MAAM,EAAEN,MADV;AAEE,IAAA,OAAO,EAAEE,aAFX;AAGE,IAAA,gBAAgB,EAAEE,gBAHpB;AAIE,IAAA,gBAAgB,EAAEN,YAAY,CAACY,IAAb,CAAkB,IAAlB,EAAwBT,OAAxB;AAJpB,IADF;AAQD,CAtBM","sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2021 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\n\nimport type { FC } from 'react'\nimport React from 'react'\nimport { Markdown } from '@looker/code-editor'\nimport { useSelector } from 'react-redux'\nimport { getEnvAdaptor } from '@looker/extension-utils'\nimport { selectSearchPattern } from '../../state'\nimport { useNavigation } from '../../utils'\nimport { transformURL } from './utils'\n\ninterface DocMarkdownProps {\n source: string\n specKey: string\n}\n\nexport const DocMarkdown: FC<DocMarkdownProps> = ({ source, specKey }) => {\n const searchPattern = useSelector(selectSearchPattern)\n const navigate = useNavigation()\n\n const linkClickHandler = (pathname: string, url: string) => {\n if (pathname.startsWith(`/${specKey}`)) {\n navigate(pathname)\n } else if (url.startsWith(`/${specKey}`)) {\n navigate(url)\n } else if (url.startsWith('https://')) {\n const adaptor = getEnvAdaptor()\n adaptor.openBrowserWindow(url)\n }\n }\n return (\n <Markdown\n source={source}\n pattern={searchPattern}\n linkClickHandler={linkClickHandler}\n transformLinkUri={transformURL.bind(null, specKey)}\n />\n )\n}\n"],"file":"DocMarkdown.js"}
@@ -1,14 +1,15 @@
1
1
  import React from 'react';
2
2
  import { Select } from '@looker/components';
3
- import { useHistory, useLocation } from 'react-router-dom';
3
+ import { useLocation } from 'react-router-dom';
4
4
  import { useSelector } from 'react-redux';
5
+ import { useNavigation } from '../../utils';
5
6
  import { selectSpecs } from '../../state';
6
7
  export var ApiSpecSelector = _ref => {
7
8
  var {
8
9
  spec
9
10
  } = _ref;
10
- var history = useHistory();
11
11
  var location = useLocation();
12
+ var navigate = useNavigation();
12
13
  var specs = useSelector(selectSpecs);
13
14
  var options = Object.entries(specs).map(_ref2 => {
14
15
  var [key, spec] = _ref2;
@@ -21,7 +22,7 @@ export var ApiSpecSelector = _ref => {
21
22
 
22
23
  var handleChange = specKey => {
23
24
  var matchPath = location.pathname.replace("/".concat(spec.key), "/".concat(specKey));
24
- history.push(matchPath);
25
+ navigate(matchPath);
25
26
  };
26
27
 
27
28
  return React.createElement(Select, {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/SelectorContainer/ApiSpecSelector.tsx"],"names":["React","Select","useHistory","useLocation","useSelector","selectSpecs","ApiSpecSelector","spec","history","location","specs","options","Object","entries","map","key","value","label","description","status","handleChange","specKey","matchPath","pathname","replace","push"],"mappings":"AA2BA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAASC,MAAT,QAAuB,oBAAvB;AACA,SAASC,UAAT,EAAqBC,WAArB,QAAwC,kBAAxC;AAEA,SAASC,WAAT,QAA4B,aAA5B;AAEA,SAASC,WAAT,QAA4B,aAA5B;AAMA,OAAO,IAAMC,eAAyC,GAAG,QAAc;AAAA,MAAb;AAAEC,IAAAA;AAAF,GAAa;AACrE,MAAMC,OAAO,GAAGN,UAAU,EAA1B;AACA,MAAMO,QAAQ,GAAGN,WAAW,EAA5B;AACA,MAAMO,KAAK,GAAGN,WAAW,CAACC,WAAD,CAAzB;AACA,MAAMM,OAAO,GAAGC,MAAM,CAACC,OAAP,CAAeH,KAAf,EAAsBI,GAAtB,CAA0B;AAAA,QAAC,CAACC,GAAD,EAAMR,IAAN,CAAD;AAAA,WAAkB;AAC1DS,MAAAA,KAAK,EAAED,GADmD;AAE1DE,MAAAA,KAAK,EAAEF,GAFmD;AAG1DG,MAAAA,WAAW,EAAEX,IAAI,CAACY;AAHwC,KAAlB;AAAA,GAA1B,CAAhB;;AAMA,MAAMC,YAAY,GAAIC,OAAD,IAAqB;AACxC,QAAMC,SAAS,GAAGb,QAAQ,CAACc,QAAT,CAAkBC,OAAlB,YAA8BjB,IAAI,CAACQ,GAAnC,cAA8CM,OAA9C,EAAlB;AACAb,IAAAA,OAAO,CAACiB,IAAR,CAAaH,SAAb;AACD,GAHD;;AAKA,SACE,oBAAC,MAAD;AACE,IAAA,KAAK,EAAC,OADR;AAEE,kBAAW,eAFb;AAGE,IAAA,YAAY,EAAEf,IAAI,CAACQ,GAHrB;AAIE,IAAA,OAAO,EAAEJ,OAJX;AAKE,IAAA,QAAQ,EAAES;AALZ,IADF;AASD,CAxBM","sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2021 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\n\nimport type { FC } from 'react'\nimport React from 'react'\nimport { Select } from '@looker/components'\nimport { useHistory, useLocation } from 'react-router-dom'\nimport type { SpecItem } from '@looker/sdk-codegen'\nimport { useSelector } from 'react-redux'\n\nimport { selectSpecs } from '../../state'\n\ninterface ApiSpecSelectorProps {\n spec: SpecItem\n}\n\nexport const ApiSpecSelector: FC<ApiSpecSelectorProps> = ({ spec }) => {\n const history = useHistory()\n const location = useLocation()\n const specs = useSelector(selectSpecs)\n const options = Object.entries(specs).map(([key, spec]) => ({\n value: key,\n label: key,\n description: spec.status,\n }))\n\n const handleChange = (specKey: string) => {\n const matchPath = location.pathname.replace(`/${spec.key}`, `/${specKey}`)\n history.push(matchPath)\n }\n\n return (\n <Select\n width=\"10rem\"\n aria-label=\"spec selector\"\n defaultValue={spec.key}\n options={options}\n onChange={handleChange}\n />\n )\n}\n"],"file":"ApiSpecSelector.js"}
1
+ {"version":3,"sources":["../../../../src/components/SelectorContainer/ApiSpecSelector.tsx"],"names":["React","Select","useLocation","useSelector","useNavigation","selectSpecs","ApiSpecSelector","spec","location","navigate","specs","options","Object","entries","map","key","value","label","description","status","handleChange","specKey","matchPath","pathname","replace"],"mappings":"AA2BA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAASC,MAAT,QAAuB,oBAAvB;AACA,SAASC,WAAT,QAA4B,kBAA5B;AAEA,SAASC,WAAT,QAA4B,aAA5B;AACA,SAASC,aAAT,QAA8B,aAA9B;AAEA,SAASC,WAAT,QAA4B,aAA5B;AAMA,OAAO,IAAMC,eAAyC,GAAG,QAAc;AAAA,MAAb;AAAEC,IAAAA;AAAF,GAAa;AACrE,MAAMC,QAAQ,GAAGN,WAAW,EAA5B;AACA,MAAMO,QAAQ,GAAGL,aAAa,EAA9B;AACA,MAAMM,KAAK,GAAGP,WAAW,CAACE,WAAD,CAAzB;AACA,MAAMM,OAAO,GAAGC,MAAM,CAACC,OAAP,CAAeH,KAAf,EAAsBI,GAAtB,CAA0B;AAAA,QAAC,CAACC,GAAD,EAAMR,IAAN,CAAD;AAAA,WAAkB;AAC1DS,MAAAA,KAAK,EAAED,GADmD;AAE1DE,MAAAA,KAAK,EAAEF,GAFmD;AAG1DG,MAAAA,WAAW,EAAEX,IAAI,CAACY;AAHwC,KAAlB;AAAA,GAA1B,CAAhB;;AAMA,MAAMC,YAAY,GAAIC,OAAD,IAAqB;AACxC,QAAMC,SAAS,GAAGd,QAAQ,CAACe,QAAT,CAAkBC,OAAlB,YAA8BjB,IAAI,CAACQ,GAAnC,cAA8CM,OAA9C,EAAlB;AACAZ,IAAAA,QAAQ,CAACa,SAAD,CAAR;AACD,GAHD;;AAKA,SACE,oBAAC,MAAD;AACE,IAAA,KAAK,EAAC,OADR;AAEE,kBAAW,eAFb;AAGE,IAAA,YAAY,EAAEf,IAAI,CAACQ,GAHrB;AAIE,IAAA,OAAO,EAAEJ,OAJX;AAKE,IAAA,QAAQ,EAAES;AALZ,IADF;AASD,CAxBM","sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2021 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\n\nimport type { FC } from 'react'\nimport React from 'react'\nimport { Select } from '@looker/components'\nimport { useLocation } from 'react-router-dom'\nimport type { SpecItem } from '@looker/sdk-codegen'\nimport { useSelector } from 'react-redux'\nimport { useNavigation } from '../../utils'\n\nimport { selectSpecs } from '../../state'\n\ninterface ApiSpecSelectorProps {\n spec: SpecItem\n}\n\nexport const ApiSpecSelector: FC<ApiSpecSelectorProps> = ({ spec }) => {\n const location = useLocation()\n const navigate = useNavigation()\n const specs = useSelector(selectSpecs)\n const options = Object.entries(specs).map(([key, spec]) => ({\n value: key,\n label: key,\n description: spec.status,\n }))\n\n const handleChange = (specKey: string) => {\n const matchPath = location.pathname.replace(`/${spec.key}`, `/${specKey}`)\n navigate(matchPath)\n }\n\n return (\n <Select\n width=\"10rem\"\n aria-label=\"spec selector\"\n defaultValue={spec.key}\n options={options}\n onChange={handleChange}\n />\n )\n}\n"],"file":"ApiSpecSelector.js"}
@@ -1,13 +1,13 @@
1
1
  function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
2
 
3
3
  import React, { useEffect, useState } from 'react';
4
- import { useHistory, useLocation } from 'react-router-dom';
4
+ import { useLocation } from 'react-router-dom';
5
5
  import { TabList, Tab, TabPanel, TabPanels, useTabs, InputSearch } from '@looker/components';
6
6
  import { criteriaToSet, tagTypes } from '@looker/sdk-codegen';
7
7
  import { useSelector } from 'react-redux';
8
- import { useWindowSize } from '../../utils';
8
+ import { useWindowSize, useNavigation } from '../../utils';
9
9
  import { HEADER_REM } from '../Header';
10
- import { selectSearchCriteria, useSettingActions } from '../../state';
10
+ import { selectSearchCriteria, selectSearchPattern } from '../../state';
11
11
  import { SideNavMethodTags } from './SideNavMethodTags';
12
12
  import { SideNavTypeTags } from './SideNavTypeTags';
13
13
  import { useDebounce, countMethods, countTypes } from './searchUtils';
@@ -17,8 +17,8 @@ export var SideNav = _ref => {
17
17
  headless = false,
18
18
  spec
19
19
  } = _ref;
20
- var history = useHistory();
21
20
  var location = useLocation();
21
+ var navigate = useNavigation();
22
22
  var specKey = spec.key;
23
23
  var tabNames = ['methods', 'types'];
24
24
  var pathParts = location.pathname.split('/');
@@ -35,12 +35,12 @@ export var SideNav = _ref => {
35
35
  if (parts[1] === 'diff') {
36
36
  if (parts[3] !== tabNames[index]) {
37
37
  parts[3] = tabNames[index];
38
- history.push(parts.join('/'));
38
+ navigate(parts.join('/'));
39
39
  }
40
40
  } else {
41
41
  if (parts[2] !== tabNames[index]) {
42
42
  parts[2] = tabNames[index];
43
- history.push(parts.join('/'));
43
+ navigate(parts.join('/'));
44
44
  }
45
45
  }
46
46
  };
@@ -50,10 +50,8 @@ export var SideNav = _ref => {
50
50
  onChange: onTabChange
51
51
  });
52
52
  var searchCriteria = useSelector(selectSearchCriteria);
53
- var {
54
- setSearchPatternAction
55
- } = useSettingActions();
56
- var [pattern, setSearchPattern] = useState('');
53
+ var searchPattern = useSelector(selectSearchPattern);
54
+ var [pattern, setSearchPattern] = useState(searchPattern);
57
55
  var debouncedPattern = useDebounce(pattern, 250);
58
56
  var [sideNavState, setSideNavState] = useState(() => {
59
57
  var _spec$api, _spec$api2, _spec$api3, _spec$api4;
@@ -78,6 +76,21 @@ export var SideNav = _ref => {
78
76
  setSearchPattern(value);
79
77
  };
80
78
 
79
+ useEffect(() => {
80
+ var searchParams = new URLSearchParams(location.search);
81
+
82
+ if (debouncedPattern && debouncedPattern !== searchParams.get('s')) {
83
+ searchParams.set('s', debouncedPattern);
84
+ navigate(location.pathname, {
85
+ search: searchParams.toString()
86
+ });
87
+ } else if (!debouncedPattern && searchParams.get('s')) {
88
+ searchParams.delete('s');
89
+ navigate(location.pathname, {
90
+ search: searchParams.toString()
91
+ });
92
+ }
93
+ }, [location.search, debouncedPattern]);
81
94
  useEffect(() => {
82
95
  var results;
83
96
  var newTags;
@@ -85,8 +98,8 @@ export var SideNav = _ref => {
85
98
  var newTypeTags;
86
99
  var api = spec.api || {};
87
100
 
88
- if (debouncedPattern && api.search) {
89
- results = api.search(pattern, criteriaToSet(searchCriteria));
101
+ if (searchPattern && api.search) {
102
+ results = api.search(searchPattern, criteriaToSet(searchCriteria));
90
103
  newTags = results.tags;
91
104
  newTypes = results.types;
92
105
  newTypeTags = tagTypes(api, results.types);
@@ -103,10 +116,7 @@ export var SideNav = _ref => {
103
116
  methodCount: countMethods(newTags),
104
117
  searchResults: results
105
118
  });
106
- setSearchPatternAction({
107
- searchPattern: debouncedPattern
108
- });
109
- }, [debouncedPattern, specKey, spec, setSearchPatternAction, pattern, searchCriteria]);
119
+ }, [searchPattern, specKey, spec, searchCriteria]);
110
120
  useEffect(() => {
111
121
  var {
112
122
  selectedIndex,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/SideNav/SideNav.tsx"],"names":["React","useEffect","useState","useHistory","useLocation","TabList","Tab","TabPanel","TabPanels","useTabs","InputSearch","criteriaToSet","tagTypes","useSelector","useWindowSize","HEADER_REM","selectSearchCriteria","useSettingActions","SideNavMethodTags","SideNavTypeTags","useDebounce","countMethods","countTypes","SearchMessage","SideNav","headless","spec","history","location","specKey","key","tabNames","pathParts","pathname","split","sideNavTab","defaultIndex","indexOf","onTabChange","index","parts","push","join","tabs","onChange","searchCriteria","setSearchPatternAction","pattern","setSearchPattern","debouncedPattern","sideNavState","setSideNavState","tags","api","typeTags","methodCount","typeCount","types","searchResults","undefined","handleInputChange","value","results","newTags","newTypes","newTypeTags","search","searchPattern","selectedIndex","onSelectTab","size","headlessOffset","menuH","height"],"mappings":"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","sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2021 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\n\nimport type { FC } from 'react'\nimport React, { useEffect, useState } from 'react'\nimport { useHistory, useLocation } from 'react-router-dom'\nimport {\n TabList,\n Tab,\n TabPanel,\n TabPanels,\n useTabs,\n InputSearch,\n} from '@looker/components'\nimport type {\n SpecItem,\n ISearchResult,\n ApiModel,\n TagList,\n TypeTagList,\n} from '@looker/sdk-codegen'\nimport { criteriaToSet, tagTypes } from '@looker/sdk-codegen'\nimport { useSelector } from 'react-redux'\n\nimport { useWindowSize } from '../../utils'\nimport { HEADER_REM } from '../Header'\nimport { selectSearchCriteria, useSettingActions } from '../../state'\nimport { SideNavMethodTags } from './SideNavMethodTags'\nimport { SideNavTypeTags } from './SideNavTypeTags'\nimport { useDebounce, countMethods, countTypes } from './searchUtils'\nimport { SearchMessage } from './SearchMessage'\n\ninterface SideNavState {\n tags: TagList\n typeTags: TypeTagList\n methodCount: number\n typeCount: number\n searchResults?: ISearchResult\n}\n\ninterface SideNavProps {\n headless?: boolean\n /** Current selected spec */\n spec: SpecItem\n}\n\nexport const SideNav: FC<SideNavProps> = ({ headless = false, spec }) => {\n const history = useHistory()\n const location = useLocation()\n const specKey = spec.key\n const tabNames = ['methods', 'types']\n const pathParts = location.pathname.split('/')\n const sideNavTab = pathParts[1] === 'diff' ? pathParts[3] : pathParts[2]\n let defaultIndex = tabNames.indexOf(sideNavTab)\n if (defaultIndex < 0) {\n defaultIndex = tabNames.indexOf('methods')\n }\n const onTabChange = (index: number) => {\n const parts = location.pathname.split('/')\n if (parts[1] === 'diff') {\n if (parts[3] !== tabNames[index]) {\n parts[3] = tabNames[index]\n history.push(parts.join('/'))\n }\n } else {\n if (parts[2] !== tabNames[index]) {\n parts[2] = tabNames[index]\n history.push(parts.join('/'))\n }\n }\n }\n const tabs = useTabs({ defaultIndex, onChange: onTabChange })\n const searchCriteria = useSelector(selectSearchCriteria)\n const { setSearchPatternAction } = useSettingActions()\n\n const [pattern, setSearchPattern] = useState('')\n const debouncedPattern = useDebounce(pattern, 250)\n const [sideNavState, setSideNavState] = useState<SideNavState>(() => ({\n tags: spec?.api?.tags || {},\n typeTags: spec?.api?.typeTags || {},\n methodCount: countMethods(spec?.api?.tags || {}),\n typeCount: countTypes(spec?.api?.types || {}),\n searchResults: undefined,\n }))\n const { tags, typeTags, methodCount, typeCount, searchResults } = sideNavState\n\n const handleInputChange = (value: string) => {\n setSearchPattern(value)\n }\n\n useEffect(() => {\n let results\n let newTags\n let newTypes\n let newTypeTags\n const api = spec.api || ({} as ApiModel)\n\n if (debouncedPattern && api.search) {\n results = api.search(pattern, criteriaToSet(searchCriteria))\n newTags = results.tags\n newTypes = results.types\n newTypeTags = tagTypes(api, results.types)\n } else {\n newTags = api.tags || {}\n newTypes = api.types || {}\n newTypeTags = api.typeTags || {}\n }\n\n setSideNavState({\n tags: newTags,\n typeTags: newTypeTags,\n typeCount: countTypes(newTypes),\n methodCount: countMethods(newTags),\n searchResults: results,\n })\n setSearchPatternAction({ searchPattern: debouncedPattern })\n }, [\n debouncedPattern,\n specKey,\n spec,\n setSearchPatternAction,\n pattern,\n searchCriteria,\n ])\n\n useEffect(() => {\n const { selectedIndex, onSelectTab } = tabs\n if (defaultIndex !== selectedIndex) {\n onSelectTab(defaultIndex)\n }\n }, [defaultIndex, tabs])\n\n const size = useWindowSize()\n const headlessOffset = headless ? 200 : 120\n const menuH = size.height - 16 * HEADER_REM - headlessOffset\n\n return (\n <nav>\n <InputSearch\n pl=\"large\"\n pr=\"large\"\n pb=\"large\"\n pt={headless ? 'u3' : 'large'}\n aria-label=\"Search\"\n onChange={handleInputChange}\n placeholder=\"Search\"\n value={pattern}\n isClearable\n />\n <SearchMessage search={searchResults} />\n <TabList {...tabs} distribute>\n <Tab>Methods ({methodCount})</Tab>\n <Tab>Types ({typeCount})</Tab>\n </TabList>\n <TabPanels {...tabs} pt=\"xsmall\" height={`${menuH}px`} overflow=\"auto\">\n <TabPanel>\n <SideNavMethodTags\n tags={tags}\n specKey={specKey}\n defaultOpen={!!searchResults}\n />\n </TabPanel>\n <TabPanel>\n <SideNavTypeTags\n tags={typeTags}\n specKey={specKey}\n defaultOpen={!!searchResults}\n />\n </TabPanel>\n </TabPanels>\n </nav>\n )\n}\n"],"file":"SideNav.js"}
1
+ {"version":3,"sources":["../../../../src/components/SideNav/SideNav.tsx"],"names":["React","useEffect","useState","useLocation","TabList","Tab","TabPanel","TabPanels","useTabs","InputSearch","criteriaToSet","tagTypes","useSelector","useWindowSize","useNavigation","HEADER_REM","selectSearchCriteria","selectSearchPattern","SideNavMethodTags","SideNavTypeTags","useDebounce","countMethods","countTypes","SearchMessage","SideNav","headless","spec","location","navigate","specKey","key","tabNames","pathParts","pathname","split","sideNavTab","defaultIndex","indexOf","onTabChange","index","parts","join","tabs","onChange","searchCriteria","searchPattern","pattern","setSearchPattern","debouncedPattern","sideNavState","setSideNavState","tags","api","typeTags","methodCount","typeCount","types","searchResults","undefined","handleInputChange","value","searchParams","URLSearchParams","search","get","set","toString","delete","results","newTags","newTypes","newTypeTags","selectedIndex","onSelectTab","size","headlessOffset","menuH","height"],"mappings":"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","sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2021 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\n\nimport type { FC } from 'react'\nimport React, { useEffect, useState } from 'react'\nimport { useLocation } from 'react-router-dom'\nimport {\n TabList,\n Tab,\n TabPanel,\n TabPanels,\n useTabs,\n InputSearch,\n} from '@looker/components'\nimport type {\n SpecItem,\n ISearchResult,\n ApiModel,\n TagList,\n TypeTagList,\n} from '@looker/sdk-codegen'\nimport { criteriaToSet, tagTypes } from '@looker/sdk-codegen'\nimport { useSelector } from 'react-redux'\nimport { useWindowSize, useNavigation } from '../../utils'\nimport { HEADER_REM } from '../Header'\nimport { selectSearchCriteria, selectSearchPattern } from '../../state'\nimport { SideNavMethodTags } from './SideNavMethodTags'\nimport { SideNavTypeTags } from './SideNavTypeTags'\nimport { useDebounce, countMethods, countTypes } from './searchUtils'\nimport { SearchMessage } from './SearchMessage'\n\ninterface SideNavState {\n tags: TagList\n typeTags: TypeTagList\n methodCount: number\n typeCount: number\n searchResults?: ISearchResult\n}\n\ninterface SideNavProps {\n headless?: boolean\n /** Current selected spec */\n spec: SpecItem\n}\n\nexport const SideNav: FC<SideNavProps> = ({ headless = false, spec }) => {\n const location = useLocation()\n const navigate = useNavigation()\n const specKey = spec.key\n const tabNames = ['methods', 'types']\n const pathParts = location.pathname.split('/')\n const sideNavTab = pathParts[1] === 'diff' ? pathParts[3] : pathParts[2]\n let defaultIndex = tabNames.indexOf(sideNavTab)\n if (defaultIndex < 0) {\n defaultIndex = tabNames.indexOf('methods')\n }\n const onTabChange = (index: number) => {\n const parts = location.pathname.split('/')\n if (parts[1] === 'diff') {\n if (parts[3] !== tabNames[index]) {\n parts[3] = tabNames[index]\n navigate(parts.join('/'))\n }\n } else {\n if (parts[2] !== tabNames[index]) {\n parts[2] = tabNames[index]\n navigate(parts.join('/'))\n }\n }\n }\n const tabs = useTabs({ defaultIndex, onChange: onTabChange })\n const searchCriteria = useSelector(selectSearchCriteria)\n const searchPattern = useSelector(selectSearchPattern)\n const [pattern, setSearchPattern] = useState(searchPattern)\n const debouncedPattern = useDebounce(pattern, 250)\n const [sideNavState, setSideNavState] = useState<SideNavState>(() => ({\n tags: spec?.api?.tags || {},\n typeTags: spec?.api?.typeTags || {},\n methodCount: countMethods(spec?.api?.tags || {}),\n typeCount: countTypes(spec?.api?.types || {}),\n searchResults: undefined,\n }))\n const { tags, typeTags, methodCount, typeCount, searchResults } = sideNavState\n\n const handleInputChange = (value: string) => {\n setSearchPattern(value)\n }\n\n useEffect(() => {\n const searchParams = new URLSearchParams(location.search)\n if (debouncedPattern && debouncedPattern !== searchParams.get('s')) {\n searchParams.set('s', debouncedPattern)\n navigate(location.pathname, { search: searchParams.toString() })\n } else if (!debouncedPattern && searchParams.get('s')) {\n searchParams.delete('s')\n navigate(location.pathname, { search: searchParams.toString() })\n }\n }, [location.search, debouncedPattern])\n\n useEffect(() => {\n let results\n let newTags\n let newTypes\n let newTypeTags\n const api = spec.api || ({} as ApiModel)\n\n if (searchPattern && api.search) {\n results = api.search(searchPattern, criteriaToSet(searchCriteria))\n newTags = results.tags\n newTypes = results.types\n newTypeTags = tagTypes(api, results.types)\n } else {\n newTags = api.tags || {}\n newTypes = api.types || {}\n newTypeTags = api.typeTags || {}\n }\n\n setSideNavState({\n tags: newTags,\n typeTags: newTypeTags,\n typeCount: countTypes(newTypes),\n methodCount: countMethods(newTags),\n searchResults: results,\n })\n }, [searchPattern, specKey, spec, searchCriteria])\n\n useEffect(() => {\n const { selectedIndex, onSelectTab } = tabs\n if (defaultIndex !== selectedIndex) {\n onSelectTab(defaultIndex)\n }\n }, [defaultIndex, tabs])\n\n const size = useWindowSize()\n const headlessOffset = headless ? 200 : 120\n const menuH = size.height - 16 * HEADER_REM - headlessOffset\n\n return (\n <nav>\n <InputSearch\n pl=\"large\"\n pr=\"large\"\n pb=\"large\"\n pt={headless ? 'u3' : 'large'}\n aria-label=\"Search\"\n onChange={handleInputChange}\n placeholder=\"Search\"\n value={pattern}\n isClearable\n />\n <SearchMessage search={searchResults} />\n <TabList {...tabs} distribute>\n <Tab>Methods ({methodCount})</Tab>\n <Tab>Types ({typeCount})</Tab>\n </TabList>\n <TabPanels {...tabs} pt=\"xsmall\" height={`${menuH}px`} overflow=\"auto\">\n <TabPanel>\n <SideNavMethodTags\n tags={tags}\n specKey={specKey}\n defaultOpen={!!searchResults}\n />\n </TabPanel>\n <TabPanel>\n <SideNavTypeTags\n tags={typeTags}\n specKey={specKey}\n defaultOpen={!!searchResults}\n />\n </TabPanel>\n </TabPanels>\n </nav>\n )\n}\n"],"file":"SideNav.js"}
@@ -2,9 +2,9 @@ import React, { useEffect, useState } from 'react';
2
2
  import styled from 'styled-components';
3
3
  import { Accordion2, Heading } from '@looker/components';
4
4
  import { useSelector } from 'react-redux';
5
- import { useHistory, useRouteMatch } from 'react-router-dom';
5
+ import { useLocation, useRouteMatch } from 'react-router-dom';
6
+ import { useNavigation, highlightHTML, buildMethodPath } from '../../utils';
6
7
  import { Link } from '../Link';
7
- import { buildMethodPath, highlightHTML } from '../../utils';
8
8
  import { selectSearchPattern } from '../../state';
9
9
  export var SideNavMethods = styled(_ref => {
10
10
  var {
@@ -14,10 +14,12 @@ export var SideNavMethods = styled(_ref => {
14
14
  specKey,
15
15
  defaultOpen = false
16
16
  } = _ref;
17
+ var location = useLocation();
18
+ var navigate = useNavigation();
19
+ var searchParams = new URLSearchParams(location.search);
17
20
  var searchPattern = useSelector(selectSearchPattern);
18
21
  var match = useRouteMatch("/:specKey/methods/:methodTag/:methodName?");
19
22
  var [isOpen, setIsOpen] = useState(defaultOpen);
20
- var history = useHistory();
21
23
 
22
24
  var handleOpen = () => {
23
25
  var _isOpen = !isOpen;
@@ -25,9 +27,9 @@ export var SideNavMethods = styled(_ref => {
25
27
  setIsOpen(_isOpen);
26
28
 
27
29
  if (_isOpen) {
28
- history.push("/".concat(specKey, "/methods/").concat(tag));
30
+ navigate("/".concat(specKey, "/methods/").concat(tag));
29
31
  } else {
30
- history.push("/".concat(specKey, "/methods"));
32
+ navigate("/".concat(specKey, "/methods"));
31
33
  }
32
34
  };
33
35
 
@@ -47,7 +49,7 @@ export var SideNavMethods = styled(_ref => {
47
49
  }, React.createElement("ul", null, Object.values(methods).map(method => React.createElement("li", {
48
50
  key: method.name
49
51
  }, React.createElement(Link, {
50
- to: "".concat(buildMethodPath(specKey, tag, method.name))
52
+ to: "".concat(buildMethodPath(specKey, tag, method.name, searchParams.toString()))
51
53
  }, highlightHTML(searchPattern, method.summary))))));
52
54
  }).withConfig({
53
55
  displayName: "SideNavMethods",
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/SideNav/SideNavMethods.tsx"],"names":["React","useEffect","useState","styled","Accordion2","Heading","useSelector","useHistory","useRouteMatch","Link","buildMethodPath","highlightHTML","selectSearchPattern","SideNavMethods","className","methods","tag","specKey","defaultOpen","searchPattern","match","isOpen","setIsOpen","history","handleOpen","_isOpen","push","status","params","methodTag","Object","values","map","method","name","summary","theme","fonts","brand","colors","key","fontWeights","semiBold","ui2","space","xxsmall","ui1","radii","medium","xsmall"],"mappings":"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","sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2021 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\n\nimport React, { useEffect, useState } from 'react'\nimport styled from 'styled-components'\nimport { Accordion2, Heading } from '@looker/components'\nimport type { MethodList } from '@looker/sdk-codegen'\nimport { useSelector } from 'react-redux'\nimport { useHistory, useRouteMatch } from 'react-router-dom'\n\nimport { Link } from '../Link'\nimport { buildMethodPath, highlightHTML } from '../../utils'\nimport { selectSearchPattern } from '../../state'\n\ninterface MethodsProps {\n methods: MethodList\n tag: string\n specKey: string\n className?: string\n defaultOpen?: boolean\n}\n\nexport const SideNavMethods = styled(\n ({ className, methods, tag, specKey, defaultOpen = false }: MethodsProps) => {\n const searchPattern = useSelector(selectSearchPattern)\n const match = useRouteMatch<{ methodTag: string }>(\n `/:specKey/methods/:methodTag/:methodName?`\n )\n const [isOpen, setIsOpen] = useState(defaultOpen)\n const history = useHistory()\n\n const handleOpen = () => {\n const _isOpen = !isOpen\n setIsOpen(_isOpen)\n if (_isOpen) {\n history.push(`/${specKey}/methods/${tag}`)\n } else {\n history.push(`/${specKey}/methods`)\n }\n }\n\n useEffect(() => {\n const status = match\n ? defaultOpen || match.params.methodTag === tag\n : defaultOpen\n setIsOpen(status)\n }, [defaultOpen])\n\n /* TODO: Fix highlighting. It is applied but it is somehow being overridden */\n return (\n <Accordion2\n isOpen={isOpen}\n toggleOpen={handleOpen}\n className={className}\n label={\n <Heading as=\"h4\" fontSize=\"small\" py=\"xsmall\">\n {highlightHTML(searchPattern, tag)}\n </Heading>\n }\n >\n <ul>\n {Object.values(methods).map((method) => (\n <li key={method.name}>\n <Link to={`${buildMethodPath(specKey, tag, method.name)}`}>\n {highlightHTML(searchPattern, method.summary)}\n </Link>\n </li>\n ))}\n </ul>\n </Accordion2>\n )\n }\n)`\n font-family: ${({ theme }) => theme.fonts.brand};\n\n [aria-controls]:hover,\n [aria-expanded='true'] {\n h4,\n svg {\n color: ${({ theme }) => theme.colors.key};\n }\n }\n\n [aria-expanded='true'] h4 {\n font-weight: ${({ theme }) => theme.fontWeights.semiBold};\n }\n\n ul {\n border-left: dashed 1px ${({ theme }) => theme.colors.ui2};\n list-style: none;\n margin: 0;\n padding: 0;\n padding-left: ${({ theme }) => theme.space.xxsmall};\n padding-top: ${({ theme }) => theme.space.xxsmall};\n }\n\n [aria-current] {\n background: ${({ theme }) => theme.colors.ui1};\n font-weight: ${({ theme }) => theme.fontWeights.semiBold};\n }\n\n ${Link} {\n border-radius: ${({ theme }) => theme.radii.medium};\n display: block;\n overflow: hidden;\n padding: ${({ theme }) => theme.space.xsmall};\n text-overflow: ellipsis;\n white-space: nowrap;\n\n &:hover,\n &:focus,\n &.active {\n background: ${({ theme }) => theme.colors.ui1};\n }\n }\n`\n"],"file":"SideNavMethods.js"}
1
+ {"version":3,"sources":["../../../../src/components/SideNav/SideNavMethods.tsx"],"names":["React","useEffect","useState","styled","Accordion2","Heading","useSelector","useLocation","useRouteMatch","useNavigation","highlightHTML","buildMethodPath","Link","selectSearchPattern","SideNavMethods","className","methods","tag","specKey","defaultOpen","location","navigate","searchParams","URLSearchParams","search","searchPattern","match","isOpen","setIsOpen","handleOpen","_isOpen","status","params","methodTag","Object","values","map","method","name","toString","summary","theme","fonts","brand","colors","key","fontWeights","semiBold","ui2","space","xxsmall","ui1","radii","medium","xsmall"],"mappings":"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","sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2021 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\n\nimport React, { useEffect, useState } from 'react'\nimport styled from 'styled-components'\nimport { Accordion2, Heading } from '@looker/components'\nimport type { MethodList } from '@looker/sdk-codegen'\nimport { useSelector } from 'react-redux'\nimport { useLocation, useRouteMatch } from 'react-router-dom'\nimport { useNavigation, highlightHTML, buildMethodPath } from '../../utils'\nimport { Link } from '../Link'\nimport { selectSearchPattern } from '../../state'\n\ninterface MethodsProps {\n methods: MethodList\n tag: string\n specKey: string\n className?: string\n defaultOpen?: boolean\n}\n\nexport const SideNavMethods = styled(\n ({ className, methods, tag, specKey, defaultOpen = false }: MethodsProps) => {\n const location = useLocation()\n const navigate = useNavigation()\n const searchParams = new URLSearchParams(location.search)\n const searchPattern = useSelector(selectSearchPattern)\n const match = useRouteMatch<{ methodTag: string }>(\n `/:specKey/methods/:methodTag/:methodName?`\n )\n const [isOpen, setIsOpen] = useState(defaultOpen)\n const handleOpen = () => {\n const _isOpen = !isOpen\n setIsOpen(_isOpen)\n if (_isOpen) {\n navigate(`/${specKey}/methods/${tag}`)\n } else {\n navigate(`/${specKey}/methods`)\n }\n }\n\n useEffect(() => {\n const status = match\n ? defaultOpen || match.params.methodTag === tag\n : defaultOpen\n setIsOpen(status)\n }, [defaultOpen])\n\n /* TODO: Fix highlighting. It is applied but it is somehow being overridden */\n return (\n <Accordion2\n isOpen={isOpen}\n toggleOpen={handleOpen}\n className={className}\n label={\n <Heading as=\"h4\" fontSize=\"small\" py=\"xsmall\">\n {highlightHTML(searchPattern, tag)}\n </Heading>\n }\n >\n <ul>\n {Object.values(methods).map((method) => (\n <li key={method.name}>\n <Link\n to={`${buildMethodPath(\n specKey,\n tag,\n method.name,\n searchParams.toString()\n )}`}\n >\n {highlightHTML(searchPattern, method.summary)}\n </Link>\n </li>\n ))}\n </ul>\n </Accordion2>\n )\n }\n)`\n font-family: ${({ theme }) => theme.fonts.brand};\n\n [aria-controls]:hover,\n [aria-expanded='true'] {\n h4,\n svg {\n color: ${({ theme }) => theme.colors.key};\n }\n }\n\n [aria-expanded='true'] h4 {\n font-weight: ${({ theme }) => theme.fontWeights.semiBold};\n }\n\n ul {\n border-left: dashed 1px ${({ theme }) => theme.colors.ui2};\n list-style: none;\n margin: 0;\n padding: 0;\n padding-left: ${({ theme }) => theme.space.xxsmall};\n padding-top: ${({ theme }) => theme.space.xxsmall};\n }\n\n [aria-current] {\n background: ${({ theme }) => theme.colors.ui1};\n font-weight: ${({ theme }) => theme.fontWeights.semiBold};\n }\n\n ${Link} {\n border-radius: ${({ theme }) => theme.radii.medium};\n display: block;\n overflow: hidden;\n padding: ${({ theme }) => theme.space.xsmall};\n text-overflow: ellipsis;\n white-space: nowrap;\n\n &:hover,\n &:focus,\n &.active {\n background: ${({ theme }) => theme.colors.ui1};\n }\n }\n`\n"],"file":"SideNavMethods.js"}
@@ -1,10 +1,10 @@
1
1
  import React, { useEffect, useState } from 'react';
2
2
  import styled from 'styled-components';
3
3
  import { Accordion2, Heading } from '@looker/components';
4
- import { useHistory, useRouteMatch } from 'react-router-dom';
4
+ import { useLocation, useRouteMatch } from 'react-router-dom';
5
5
  import { useSelector } from 'react-redux';
6
6
  import { Link } from '../Link';
7
- import { buildTypePath, highlightHTML } from '../../utils';
7
+ import { highlightHTML, useNavigation, buildTypePath } from '../../utils';
8
8
  import { selectSearchPattern } from '../../state';
9
9
  export var SideNavTypes = styled(_ref => {
10
10
  var {
@@ -14,10 +14,12 @@ export var SideNavTypes = styled(_ref => {
14
14
  specKey,
15
15
  defaultOpen = false
16
16
  } = _ref;
17
+ var location = useLocation();
18
+ var navigate = useNavigation();
19
+ var searchParams = new URLSearchParams(location.search);
17
20
  var searchPattern = useSelector(selectSearchPattern);
18
21
  var match = useRouteMatch("/:specKey/types/:typeTag/:typeName?");
19
22
  var [isOpen, setIsOpen] = useState(defaultOpen);
20
- var history = useHistory();
21
23
 
22
24
  var handleOpen = () => {
23
25
  var _isOpen = !isOpen;
@@ -25,9 +27,9 @@ export var SideNavTypes = styled(_ref => {
25
27
  setIsOpen(_isOpen);
26
28
 
27
29
  if (_isOpen) {
28
- history.push("/".concat(specKey, "/types/").concat(tag));
30
+ navigate("/".concat(specKey, "/types/").concat(tag));
29
31
  } else {
30
- history.push("/".concat(specKey, "/types"));
32
+ navigate("/".concat(specKey, "/types"));
31
33
  }
32
34
  };
33
35
 
@@ -47,7 +49,7 @@ export var SideNavTypes = styled(_ref => {
47
49
  }, React.createElement("ul", null, Object.values(types).map(type => React.createElement("li", {
48
50
  key: type.name
49
51
  }, React.createElement(Link, {
50
- to: "".concat(buildTypePath(specKey, tag, type.name))
52
+ to: "".concat(buildTypePath(specKey, tag, type.name, searchParams.toString()))
51
53
  }, highlightHTML(searchPattern, type.name))))));
52
54
  }).withConfig({
53
55
  displayName: "SideNavTypes",
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/SideNav/SideNavTypes.tsx"],"names":["React","useEffect","useState","styled","Accordion2","Heading","useHistory","useRouteMatch","useSelector","Link","buildTypePath","highlightHTML","selectSearchPattern","SideNavTypes","className","types","tag","specKey","defaultOpen","searchPattern","match","isOpen","setIsOpen","history","handleOpen","_isOpen","push","status","params","typeTag","Object","values","map","type","name","theme","fonts","brand","colors","key","fontWeights","semiBold","ui2","space","xxsmall","ui1","radii","medium","xsmall"],"mappings":"AA0BA,OAAOA,KAAP,IAAgBC,SAAhB,EAA2BC,QAA3B,QAA2C,OAA3C;AACA,OAAOC,MAAP,MAAmB,mBAAnB;AACA,SAASC,UAAT,EAAqBC,OAArB,QAAoC,oBAApC;AAEA,SAASC,UAAT,EAAqBC,aAArB,QAA0C,kBAA1C;AACA,SAASC,WAAT,QAA4B,aAA5B;AAEA,SAASC,IAAT,QAAqB,SAArB;AACA,SAASC,aAAT,EAAwBC,aAAxB,QAA6C,aAA7C;AACA,SAASC,mBAAT,QAAoC,aAApC;AAUA,OAAO,IAAMC,YAAY,GAAGV,MAAM,CAChC,QAAyE;AAAA,MAAxE;AAAEW,IAAAA,SAAF;AAAaC,IAAAA,KAAb;AAAoBC,IAAAA,GAApB;AAAyBC,IAAAA,OAAzB;AAAkCC,IAAAA,WAAW,GAAG;AAAhD,GAAwE;AACvE,MAAMC,aAAa,GAAGX,WAAW,CAACI,mBAAD,CAAjC;AACA,MAAMQ,KAAK,GAAGb,aAAa,uCAA3B;AAGA,MAAM,CAACc,MAAD,EAASC,SAAT,IAAsBpB,QAAQ,CAACgB,WAAD,CAApC;AACA,MAAMK,OAAO,GAAGjB,UAAU,EAA1B;;AAEA,MAAMkB,UAAU,GAAG,MAAM;AACvB,QAAMC,OAAO,GAAG,CAACJ,MAAjB;;AACAC,IAAAA,SAAS,CAACG,OAAD,CAAT;;AACA,QAAIA,OAAJ,EAAa;AACXF,MAAAA,OAAO,CAACG,IAAR,YAAiBT,OAAjB,oBAAkCD,GAAlC;AACD,KAFD,MAEO;AACLO,MAAAA,OAAO,CAACG,IAAR,YAAiBT,OAAjB;AACD;AACF,GARD;;AAUAhB,EAAAA,SAAS,CAAC,MAAM;AACd,QAAM0B,MAAM,GAAGP,KAAK,GAChBF,WAAW,IAAIE,KAAK,CAACQ,MAAN,CAAaC,OAAb,KAAyBb,GADxB,GAEhBE,WAFJ;AAGAI,IAAAA,SAAS,CAACK,MAAD,CAAT;AACD,GALQ,EAKN,CAACT,WAAD,CALM,CAAT;AAQA,SACE,oBAAC,UAAD;AACE,IAAA,MAAM,EAAEG,MADV;AAEE,IAAA,UAAU,EAAEG,UAFd;AAGE,IAAA,SAAS,EAAEV,SAHb;AAIE,IAAA,KAAK,EACH,oBAAC,OAAD;AAAS,MAAA,EAAE,EAAC,IAAZ;AAAiB,MAAA,QAAQ,EAAC,OAA1B;AAAkC,MAAA,EAAE,EAAC;AAArC,OACGH,aAAa,CAACQ,aAAD,EAAgBH,GAAhB,CADhB;AALJ,KAUE,gCACGc,MAAM,CAACC,MAAP,CAAchB,KAAd,EAAqBiB,GAArB,CAA0BC,IAAD,IACxB;AAAI,IAAA,GAAG,EAAEA,IAAI,CAACC;AAAd,KACE,oBAAC,IAAD;AAAM,IAAA,EAAE,YAAKxB,aAAa,CAACO,OAAD,EAAUD,GAAV,EAAeiB,IAAI,CAACC,IAApB,CAAlB;AAAR,KACGvB,aAAa,CAACQ,aAAD,EAAgBc,IAAI,CAACC,IAArB,CADhB,CADF,CADD,CADH,CAVF,CADF;AAsBD,CAjD+B,CAAT;AAAA;AAAA;AAAA,sbAmDR;AAAA,MAAC;AAAEC,IAAAA;AAAF,GAAD;AAAA,SAAeA,KAAK,CAACC,KAAN,CAAYC,KAA3B;AAAA,CAnDQ,EAyDV;AAAA,MAAC;AAAEF,IAAAA;AAAF,GAAD;AAAA,SAAeA,KAAK,CAACG,MAAN,CAAaC,GAA5B;AAAA,CAzDU,EA8DN;AAAA,MAAC;AAAEJ,IAAAA;AAAF,GAAD;AAAA,SAAeA,KAAK,CAACK,WAAN,CAAkBC,QAAjC;AAAA,CA9DM,EAkEK;AAAA,MAAC;AAAEN,IAAAA;AAAF,GAAD;AAAA,SAAeA,KAAK,CAACG,MAAN,CAAaI,GAA5B;AAAA,CAlEL,EAsEL;AAAA,MAAC;AAAEP,IAAAA;AAAF,GAAD;AAAA,SAAeA,KAAK,CAACQ,KAAN,CAAYC,OAA3B;AAAA,CAtEK,EAuEN;AAAA,MAAC;AAAET,IAAAA;AAAF,GAAD;AAAA,SAAeA,KAAK,CAACQ,KAAN,CAAYC,OAA3B;AAAA,CAvEM,EA2EP;AAAA,MAAC;AAAET,IAAAA;AAAF,GAAD;AAAA,SAAeA,KAAK,CAACG,MAAN,CAAaO,GAA5B;AAAA,CA3EO,EA4EN;AAAA,MAAC;AAAEV,IAAAA;AAAF,GAAD;AAAA,SAAeA,KAAK,CAACK,WAAN,CAAkBC,QAAjC;AAAA,CA5EM,EA+ErBhC,IA/EqB,EAgFJ;AAAA,MAAC;AAAE0B,IAAAA;AAAF,GAAD;AAAA,SAAeA,KAAK,CAACW,KAAN,CAAYC,MAA3B;AAAA,CAhFI,EAmFV;AAAA,MAAC;AAAEZ,IAAAA;AAAF,GAAD;AAAA,SAAeA,KAAK,CAACQ,KAAN,CAAYK,MAA3B;AAAA,CAnFU,EA0FL;AAAA,MAAC;AAAEb,IAAAA;AAAF,GAAD;AAAA,SAAeA,KAAK,CAACG,MAAN,CAAaO,GAA5B;AAAA,CA1FK,CAAlB","sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2021 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\n\nimport React, { useEffect, useState } from 'react'\nimport styled from 'styled-components'\nimport { Accordion2, Heading } from '@looker/components'\nimport type { TypeList } from '@looker/sdk-codegen'\nimport { useHistory, useRouteMatch } from 'react-router-dom'\nimport { useSelector } from 'react-redux'\n\nimport { Link } from '../Link'\nimport { buildTypePath, highlightHTML } from '../../utils'\nimport { selectSearchPattern } from '../../state'\n\ninterface TypesProps {\n types: TypeList\n tag: string\n specKey: string\n className?: string\n defaultOpen?: boolean\n}\n\nexport const SideNavTypes = styled(\n ({ className, types, tag, specKey, defaultOpen = false }: TypesProps) => {\n const searchPattern = useSelector(selectSearchPattern)\n const match = useRouteMatch<{ typeTag: string }>(\n `/:specKey/types/:typeTag/:typeName?`\n )\n const [isOpen, setIsOpen] = useState(defaultOpen)\n const history = useHistory()\n\n const handleOpen = () => {\n const _isOpen = !isOpen\n setIsOpen(_isOpen)\n if (_isOpen) {\n history.push(`/${specKey}/types/${tag}`)\n } else {\n history.push(`/${specKey}/types`)\n }\n }\n\n useEffect(() => {\n const status = match\n ? defaultOpen || match.params.typeTag === tag\n : defaultOpen\n setIsOpen(status)\n }, [defaultOpen])\n\n /* TODO: Fix highlighting. It is applied but it is somehow being overridden */\n return (\n <Accordion2\n isOpen={isOpen}\n toggleOpen={handleOpen}\n className={className}\n label={\n <Heading as=\"h4\" fontSize=\"small\" py=\"xsmall\">\n {highlightHTML(searchPattern, tag)}\n </Heading>\n }\n >\n <ul>\n {Object.values(types).map((type) => (\n <li key={type.name}>\n <Link to={`${buildTypePath(specKey, tag, type.name)}`}>\n {highlightHTML(searchPattern, type.name)}\n </Link>\n </li>\n ))}\n </ul>\n </Accordion2>\n )\n }\n)`\n font-family: ${({ theme }) => theme.fonts.brand};\n\n [aria-controls]:hover,\n [aria-expanded='true'] {\n h4,\n svg {\n color: ${({ theme }) => theme.colors.key};\n }\n }\n\n [aria-expanded='true'] h4 {\n font-weight: ${({ theme }) => theme.fontWeights.semiBold};\n }\n\n ul {\n border-left: dashed 1px ${({ theme }) => theme.colors.ui2};\n list-style: none;\n margin: 0;\n padding: 0;\n padding-left: ${({ theme }) => theme.space.xxsmall};\n padding-top: ${({ theme }) => theme.space.xxsmall};\n }\n\n [aria-current] {\n background: ${({ theme }) => theme.colors.ui1};\n font-weight: ${({ theme }) => theme.fontWeights.semiBold};\n }\n\n ${Link} {\n border-radius: ${({ theme }) => theme.radii.medium};\n display: block;\n overflow: hidden;\n padding: ${({ theme }) => theme.space.xsmall};\n text-overflow: ellipsis;\n white-space: nowrap;\n\n &:hover,\n &:focus,\n &.active {\n background: ${({ theme }) => theme.colors.ui1};\n }\n }\n`\n"],"file":"SideNavTypes.js"}
1
+ {"version":3,"sources":["../../../../src/components/SideNav/SideNavTypes.tsx"],"names":["React","useEffect","useState","styled","Accordion2","Heading","useLocation","useRouteMatch","useSelector","Link","highlightHTML","useNavigation","buildTypePath","selectSearchPattern","SideNavTypes","className","types","tag","specKey","defaultOpen","location","navigate","searchParams","URLSearchParams","search","searchPattern","match","isOpen","setIsOpen","handleOpen","_isOpen","status","params","typeTag","Object","values","map","type","name","toString","theme","fonts","brand","colors","key","fontWeights","semiBold","ui2","space","xxsmall","ui1","radii","medium","xsmall"],"mappings":"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","sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2021 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\n\nimport React, { useEffect, useState } from 'react'\nimport styled from 'styled-components'\nimport { Accordion2, Heading } from '@looker/components'\nimport type { TypeList } from '@looker/sdk-codegen'\nimport { useLocation, useRouteMatch } from 'react-router-dom'\nimport { useSelector } from 'react-redux'\nimport { Link } from '../Link'\nimport { highlightHTML, useNavigation, buildTypePath } from '../../utils'\nimport { selectSearchPattern } from '../../state'\n\ninterface TypesProps {\n types: TypeList\n tag: string\n specKey: string\n className?: string\n defaultOpen?: boolean\n}\n\nexport const SideNavTypes = styled(\n ({ className, types, tag, specKey, defaultOpen = false }: TypesProps) => {\n const location = useLocation()\n const navigate = useNavigation()\n const searchParams = new URLSearchParams(location.search)\n const searchPattern = useSelector(selectSearchPattern)\n const match = useRouteMatch<{ typeTag: string }>(\n `/:specKey/types/:typeTag/:typeName?`\n )\n const [isOpen, setIsOpen] = useState(defaultOpen)\n const handleOpen = () => {\n const _isOpen = !isOpen\n setIsOpen(_isOpen)\n if (_isOpen) {\n navigate(`/${specKey}/types/${tag}`)\n } else {\n navigate(`/${specKey}/types`)\n }\n }\n\n useEffect(() => {\n const status = match\n ? defaultOpen || match.params.typeTag === tag\n : defaultOpen\n setIsOpen(status)\n }, [defaultOpen])\n\n /* TODO: Fix highlighting. It is applied but it is somehow being overridden */\n return (\n <Accordion2\n isOpen={isOpen}\n toggleOpen={handleOpen}\n className={className}\n label={\n <Heading as=\"h4\" fontSize=\"small\" py=\"xsmall\">\n {highlightHTML(searchPattern, tag)}\n </Heading>\n }\n >\n <ul>\n {Object.values(types).map((type) => (\n <li key={type.name}>\n <Link\n to={`${buildTypePath(\n specKey,\n tag,\n type.name,\n searchParams.toString()\n )}`}\n >\n {highlightHTML(searchPattern, type.name)}\n </Link>\n </li>\n ))}\n </ul>\n </Accordion2>\n )\n }\n)`\n font-family: ${({ theme }) => theme.fonts.brand};\n\n [aria-controls]:hover,\n [aria-expanded='true'] {\n h4,\n svg {\n color: ${({ theme }) => theme.colors.key};\n }\n }\n\n [aria-expanded='true'] h4 {\n font-weight: ${({ theme }) => theme.fontWeights.semiBold};\n }\n\n ul {\n border-left: dashed 1px ${({ theme }) => theme.colors.ui2};\n list-style: none;\n margin: 0;\n padding: 0;\n padding-left: ${({ theme }) => theme.space.xxsmall};\n padding-top: ${({ theme }) => theme.space.xxsmall};\n }\n\n [aria-current] {\n background: ${({ theme }) => theme.colors.ui1};\n font-weight: ${({ theme }) => theme.fontWeights.semiBold};\n }\n\n ${Link} {\n border-radius: ${({ theme }) => theme.radii.medium};\n display: block;\n overflow: hidden;\n padding: ${({ theme }) => theme.space.xsmall};\n text-overflow: ellipsis;\n white-space: nowrap;\n\n &:hover,\n &:focus,\n &.active {\n background: ${({ theme }) => theme.colors.ui1};\n }\n }\n`\n"],"file":"SideNavTypes.js"}
@@ -1,11 +1,11 @@
1
1
  import React, { useState, useEffect } from 'react';
2
- import { useHistory, useRouteMatch } from 'react-router-dom';
2
+ import { useRouteMatch } from 'react-router-dom';
3
3
  import { Box, Flex, FlexItem, IconButton, Label, Select, SelectMulti } from '@looker/components';
4
4
  import { SyncAlt } from '@styled-icons/material/SyncAlt';
5
5
  import { useSelector } from 'react-redux';
6
6
  import { ApixSection } from '../../components';
7
7
  import { selectCurrentSpec } from '../../state';
8
- import { diffPath, getApixAdaptor } from '../../utils';
8
+ import { diffPath, getApixAdaptor, useNavigation } from '../../utils';
9
9
  import { diffSpecs, standardDiffToggles } from './diffUtils';
10
10
  import { DocDiff } from './DocDiff';
11
11
  var diffToggles = [{
@@ -39,7 +39,7 @@ export var DiffScene = _ref => {
39
39
  toggleNavigation
40
40
  } = _ref;
41
41
  var adaptor = getApixAdaptor();
42
- var history = useHistory();
42
+ var navigate = useNavigation();
43
43
  var spec = useSelector(selectCurrentSpec);
44
44
  var currentSpecKey = spec.key;
45
45
  var match = useRouteMatch("/".concat(diffPath, "/:l?/:r?"));
@@ -73,15 +73,15 @@ export var DiffScene = _ref => {
73
73
  var [delta, setDelta] = useState([]);
74
74
 
75
75
  var handleLeftChange = newLeft => {
76
- history.push("/".concat(diffPath, "/").concat(newLeft, "/").concat(rightKey));
76
+ navigate("/".concat(diffPath, "/").concat(newLeft, "/").concat(rightKey));
77
77
  };
78
78
 
79
79
  var handleRightChange = newRight => {
80
- history.push("/".concat(diffPath, "/").concat(leftKey, "/").concat(newRight));
80
+ navigate("/".concat(diffPath, "/").concat(leftKey, "/").concat(newRight));
81
81
  };
82
82
 
83
83
  var handleSwitch = () => {
84
- history.push("/".concat(diffPath, "/").concat(rightKey, "/").concat(leftKey));
84
+ navigate("/".concat(diffPath, "/").concat(rightKey, "/").concat(leftKey));
85
85
  };
86
86
 
87
87
  useEffect(() => {