@looker/api-explorer 0.9.26 → 0.9.29

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 (220) hide show
  1. package/CHANGELOG.md +80 -1
  2. package/e2e/e2e.spec.ts +1 -1
  3. package/lib/ApiExplorer.d.ts +2 -6
  4. package/lib/ApiExplorer.js +53 -74
  5. package/lib/ApiExplorer.js.map +1 -1
  6. package/lib/StandaloneApiExplorer.js +35 -47
  7. package/lib/StandaloneApiExplorer.js.map +1 -1
  8. package/lib/components/Banner/Banner.d.ts +8 -0
  9. package/lib/components/Banner/Banner.js +70 -0
  10. package/lib/components/Banner/Banner.js.map +1 -0
  11. package/lib/components/Banner/index.d.ts +1 -0
  12. package/lib/components/Banner/index.js +14 -0
  13. package/lib/components/Banner/index.js.map +1 -0
  14. package/lib/components/DocPseudo/DocParam.js +3 -1
  15. package/lib/components/DocPseudo/DocParam.js.map +1 -1
  16. package/lib/components/DocSDKs/DocSDKs.js +3 -3
  17. package/lib/components/DocSDKs/DocSDKs.js.map +1 -1
  18. package/lib/components/ExploreType/ExploreType.js +3 -5
  19. package/lib/components/ExploreType/ExploreType.js.map +1 -1
  20. package/lib/components/Header/Header.d.ts +2 -5
  21. package/lib/components/Header/Header.js +1 -5
  22. package/lib/components/Header/Header.js.map +1 -1
  23. package/lib/components/SelectorContainer/ApiSpecSelector.d.ts +2 -5
  24. package/lib/components/SelectorContainer/ApiSpecSelector.js +5 -5
  25. package/lib/components/SelectorContainer/ApiSpecSelector.js.map +1 -1
  26. package/lib/components/SelectorContainer/SelectorContainer.d.ts +2 -5
  27. package/lib/components/SelectorContainer/SelectorContainer.js +3 -7
  28. package/lib/components/SelectorContainer/SelectorContainer.js.map +1 -1
  29. package/lib/components/SideNav/SideNav.d.ts +2 -5
  30. package/lib/components/SideNav/SideNav.js.map +1 -1
  31. package/lib/components/index.d.ts +1 -0
  32. package/lib/components/index.js +8 -0
  33. package/lib/components/index.js.map +1 -1
  34. package/lib/esm/ApiExplorer.js +54 -74
  35. package/lib/esm/ApiExplorer.js.map +1 -1
  36. package/lib/esm/StandaloneApiExplorer.js +34 -48
  37. package/lib/esm/StandaloneApiExplorer.js.map +1 -1
  38. package/lib/esm/components/Banner/Banner.js +54 -0
  39. package/lib/esm/components/Banner/Banner.js.map +1 -0
  40. package/lib/esm/components/Banner/index.js +2 -0
  41. package/lib/esm/components/Banner/index.js.map +1 -0
  42. package/lib/esm/components/DocPseudo/DocParam.js +2 -1
  43. package/lib/esm/components/DocPseudo/DocParam.js.map +1 -1
  44. package/lib/esm/components/DocSDKs/DocSDKs.js +2 -2
  45. package/lib/esm/components/DocSDKs/DocSDKs.js.map +1 -1
  46. package/lib/esm/components/ExploreType/ExploreType.js +3 -4
  47. package/lib/esm/components/ExploreType/ExploreType.js.map +1 -1
  48. package/lib/esm/components/Header/Header.js +1 -5
  49. package/lib/esm/components/Header/Header.js.map +1 -1
  50. package/lib/esm/components/SelectorContainer/ApiSpecSelector.js +4 -5
  51. package/lib/esm/components/SelectorContainer/ApiSpecSelector.js.map +1 -1
  52. package/lib/esm/components/SelectorContainer/SelectorContainer.js +3 -7
  53. package/lib/esm/components/SelectorContainer/SelectorContainer.js.map +1 -1
  54. package/lib/esm/components/SideNav/SideNav.js.map +1 -1
  55. package/lib/esm/components/index.js +1 -0
  56. package/lib/esm/components/index.js.map +1 -1
  57. package/lib/esm/index.js +1 -0
  58. package/lib/esm/index.js.map +1 -1
  59. package/lib/esm/routes/AppRouter.js +3 -7
  60. package/lib/esm/routes/AppRouter.js.map +1 -1
  61. package/lib/esm/scenes/DiffScene/DiffScene.js +43 -99
  62. package/lib/esm/scenes/DiffScene/DiffScene.js.map +1 -1
  63. package/lib/esm/scenes/DiffScene/DocDiff/DiffItem.js +9 -13
  64. package/lib/esm/scenes/DiffScene/DocDiff/DiffItem.js.map +1 -1
  65. package/lib/esm/scenes/DiffScene/DocDiff/DocDiff.js +2 -2
  66. package/lib/esm/scenes/DiffScene/DocDiff/DocDiff.js.map +1 -1
  67. package/lib/esm/scenes/MethodScene/MethodScene.js +4 -5
  68. package/lib/esm/scenes/MethodScene/MethodScene.js.map +1 -1
  69. package/lib/esm/state/index.js +1 -0
  70. package/lib/esm/state/index.js.map +1 -1
  71. package/lib/esm/state/specs/index.js +3 -0
  72. package/lib/esm/state/specs/index.js.map +1 -0
  73. package/lib/esm/state/specs/sagas.js +58 -0
  74. package/lib/esm/state/specs/sagas.js.map +1 -0
  75. package/lib/esm/state/specs/selectors.js +8 -0
  76. package/lib/esm/state/specs/selectors.js.map +1 -0
  77. package/lib/esm/state/specs/slice.js +55 -0
  78. package/lib/esm/state/specs/slice.js.map +1 -0
  79. package/lib/esm/state/store.js +53 -2
  80. package/lib/esm/state/store.js.map +1 -1
  81. package/lib/esm/test-utils/redux.js +9 -5
  82. package/lib/esm/test-utils/redux.js.map +1 -1
  83. package/lib/esm/utils/adaptorUtils.js +101 -0
  84. package/lib/esm/utils/adaptorUtils.js.map +1 -0
  85. package/lib/esm/utils/apixAdaptor.js +48 -0
  86. package/lib/esm/utils/apixAdaptor.js.map +1 -0
  87. package/lib/esm/utils/index.js +3 -1
  88. package/lib/esm/utils/index.js.map +1 -1
  89. package/lib/esm/utils/path.js +27 -2
  90. package/lib/esm/utils/path.js.map +1 -1
  91. package/lib/index.d.ts +1 -0
  92. package/lib/index.js +13 -0
  93. package/lib/index.js.map +1 -1
  94. package/lib/routes/AppRouter.d.ts +1 -5
  95. package/lib/routes/AppRouter.js +3 -7
  96. package/lib/routes/AppRouter.js.map +1 -1
  97. package/lib/scenes/DiffScene/DiffScene.js +45 -100
  98. package/lib/scenes/DiffScene/DiffScene.js.map +1 -1
  99. package/lib/scenes/DiffScene/DocDiff/DiffItem.js +9 -13
  100. package/lib/scenes/DiffScene/DocDiff/DiffItem.js.map +1 -1
  101. package/lib/scenes/DiffScene/DocDiff/DocDiff.js +2 -2
  102. package/lib/scenes/DiffScene/DocDiff/DocDiff.js.map +1 -1
  103. package/lib/scenes/MethodScene/MethodScene.d.ts +0 -4
  104. package/lib/scenes/MethodScene/MethodScene.js +5 -5
  105. package/lib/scenes/MethodScene/MethodScene.js.map +1 -1
  106. package/lib/state/index.d.ts +1 -0
  107. package/lib/state/index.js +13 -0
  108. package/lib/state/index.js.map +1 -1
  109. package/lib/state/settings/selectors.d.ts +1 -1
  110. package/lib/state/settings/slice.d.ts +1 -1
  111. package/lib/state/specs/index.d.ts +2 -0
  112. package/lib/state/specs/index.js +32 -0
  113. package/lib/state/specs/index.js.map +1 -0
  114. package/lib/state/specs/sagas.d.ts +1 -0
  115. package/lib/state/specs/sagas.js +67 -0
  116. package/lib/state/specs/sagas.js.map +1 -0
  117. package/lib/state/specs/selectors.d.ts +4 -0
  118. package/lib/state/specs/selectors.js +20 -0
  119. package/lib/state/specs/selectors.js.map +1 -0
  120. package/lib/state/specs/slice.d.ts +49 -0
  121. package/lib/state/specs/slice.js +70 -0
  122. package/lib/state/specs/slice.js.map +1 -0
  123. package/lib/state/store.d.ts +3 -0
  124. package/lib/state/store.js +56 -2
  125. package/lib/state/store.js.map +1 -1
  126. package/lib/test-data/declarations.d.ts +2 -0
  127. package/lib/test-data/examples.d.ts +2 -0
  128. package/lib/test-data/index.d.ts +3 -0
  129. package/lib/test-data/index.js +12 -42
  130. package/lib/test-data/index.js.map +1 -1
  131. package/lib/test-data/specs.d.ts +10 -0
  132. package/lib/test-data/specs.js +6 -6
  133. package/lib/test-data/specs.js.map +1 -1
  134. package/lib/test-utils/redux.d.ts +2 -1
  135. package/lib/test-utils/redux.js +9 -4
  136. package/lib/test-utils/redux.js.map +1 -1
  137. package/lib/utils/adaptorUtils.d.ts +30 -0
  138. package/lib/utils/adaptorUtils.js +124 -0
  139. package/lib/utils/adaptorUtils.js.map +1 -0
  140. package/lib/utils/apixAdaptor.d.ts +15 -0
  141. package/lib/utils/apixAdaptor.js +67 -0
  142. package/lib/utils/apixAdaptor.js.map +1 -0
  143. package/lib/utils/index.d.ts +3 -1
  144. package/lib/utils/index.js +45 -30
  145. package/lib/utils/index.js.map +1 -1
  146. package/lib/utils/path.d.ts +3 -0
  147. package/lib/utils/path.js +32 -2
  148. package/lib/utils/path.js.map +1 -1
  149. package/package.json +10 -10
  150. package/src/ApiExplorer.tsx +47 -74
  151. package/src/StandaloneApiExplorer.tsx +37 -52
  152. package/src/components/Banner/Banner.spec.tsx +99 -0
  153. package/src/components/Banner/Banner.tsx +87 -0
  154. package/src/{reducers → components/Banner}/index.ts +1 -1
  155. package/src/components/DocPseudo/DocParam.spec.tsx +2 -1
  156. package/src/components/DocPseudo/DocParam.tsx +2 -1
  157. package/src/components/DocSDKs/DocSDKs.tsx +4 -5
  158. package/src/components/ExploreType/ExploreType.spec.tsx +0 -23
  159. package/src/components/ExploreType/ExploreType.tsx +5 -6
  160. package/src/components/ExploreType/exploreUtils.spec.tsx +1 -1
  161. package/src/components/Header/Header.spec.tsx +9 -30
  162. package/src/components/Header/Header.tsx +3 -10
  163. package/src/components/SelectorContainer/ApiSpecSelector.spec.tsx +31 -44
  164. package/src/components/SelectorContainer/ApiSpecSelector.tsx +6 -12
  165. package/src/components/SelectorContainer/SelectorContainer.spec.tsx +7 -26
  166. package/src/components/SelectorContainer/SelectorContainer.tsx +4 -10
  167. package/src/components/SideNav/SideNav.spec.tsx +12 -45
  168. package/src/components/SideNav/SideNav.tsx +1 -7
  169. package/src/components/index.ts +1 -0
  170. package/src/index.ts +1 -0
  171. package/src/routes/AppRouter.tsx +25 -37
  172. package/src/scenes/DiffScene/DiffScene.tsx +47 -84
  173. package/src/scenes/DiffScene/DocDiff/DiffItem.spec.tsx +9 -16
  174. package/src/scenes/DiffScene/DocDiff/DiffItem.tsx +11 -12
  175. package/src/scenes/DiffScene/DocDiff/DocDiff.tsx +2 -2
  176. package/src/scenes/MethodScene/MethodScene.tsx +4 -10
  177. package/src/state/index.ts +1 -0
  178. package/src/{reducers/spec → state/specs}/index.ts +2 -3
  179. package/src/state/specs/sagas.spec.ts +135 -0
  180. package/src/state/specs/sagas.ts +81 -0
  181. package/src/{reducers/spec/actions.spec.ts → state/specs/selectors.ts} +12 -11
  182. package/src/state/specs/slice.ts +109 -0
  183. package/src/state/store.ts +58 -0
  184. package/src/test-data/index.ts +1 -8
  185. package/src/test-data/specs.ts +6 -6
  186. package/src/test-utils/redux.tsx +15 -4
  187. package/src/utils/adaptorUtils.ts +181 -0
  188. package/src/utils/apixAdaptor.ts +72 -0
  189. package/src/utils/index.ts +3 -7
  190. package/src/utils/path.ts +25 -2
  191. package/lib/esm/reducers/index.js +0 -2
  192. package/lib/esm/reducers/index.js.map +0 -1
  193. package/lib/esm/reducers/spec/actions.js +0 -19
  194. package/lib/esm/reducers/spec/actions.js.map +0 -1
  195. package/lib/esm/reducers/spec/index.js +0 -4
  196. package/lib/esm/reducers/spec/index.js.map +0 -1
  197. package/lib/esm/reducers/spec/reducer.js +0 -62
  198. package/lib/esm/reducers/spec/reducer.js.map +0 -1
  199. package/lib/esm/reducers/spec/utils.js +0 -74
  200. package/lib/esm/reducers/spec/utils.js.map +0 -1
  201. package/lib/reducers/index.d.ts +0 -1
  202. package/lib/reducers/index.js +0 -19
  203. package/lib/reducers/index.js.map +0 -1
  204. package/lib/reducers/spec/actions.d.ts +0 -20
  205. package/lib/reducers/spec/actions.js +0 -31
  206. package/lib/reducers/spec/actions.js.map +0 -1
  207. package/lib/reducers/spec/index.d.ts +0 -3
  208. package/lib/reducers/spec/index.js +0 -45
  209. package/lib/reducers/spec/index.js.map +0 -1
  210. package/lib/reducers/spec/reducer.d.ts +0 -7
  211. package/lib/reducers/spec/reducer.js +0 -73
  212. package/lib/reducers/spec/reducer.js.map +0 -1
  213. package/lib/reducers/spec/utils.d.ts +0 -7
  214. package/lib/reducers/spec/utils.js +0 -91
  215. package/lib/reducers/spec/utils.js.map +0 -1
  216. package/src/reducers/spec/actions.ts +0 -62
  217. package/src/reducers/spec/reducer.spec.ts +0 -44
  218. package/src/reducers/spec/reducer.ts +0 -69
  219. package/src/reducers/spec/utils.spec.ts +0 -138
  220. package/src/reducers/spec/utils.ts +0 -123
@@ -24,16 +24,16 @@
24
24
 
25
25
  */
26
26
  import React from 'react'
27
- import { act, screen, waitFor } from '@testing-library/react'
28
- import { renderWithTheme } from '@looker/components-test-utils'
27
+ import { screen, waitFor } from '@testing-library/react'
29
28
  import userEvent from '@testing-library/user-event'
30
-
31
- import { specs, getLoadedSpecState } from '../../test-data'
32
- import { renderWithRouterAndReduxProvider } from '../../test-utils'
29
+ import { useHistory } from 'react-router-dom'
30
+ import { getLoadedSpecs, specs } from '../../test-data'
31
+ import {
32
+ renderWithReduxProvider,
33
+ renderWithRouterAndReduxProvider,
34
+ } from '../../test-utils'
33
35
  import { ApiSpecSelector } from './ApiSpecSelector'
34
36
 
35
- const specState = getLoadedSpecState()
36
-
37
37
  jest.mock('react-router-dom', () => {
38
38
  const ReactRouterDOM = jest.requireActual('react-router-dom')
39
39
  return {
@@ -41,34 +41,29 @@ jest.mock('react-router-dom', () => {
41
41
  useLocation: () => ({
42
42
  pathname: '/4.0/methods/Dashboard/dashboard',
43
43
  }),
44
+ useHistory: jest.fn().mockReturnValue({ push: jest.fn() }),
44
45
  }
45
46
  })
46
47
 
48
+ // jest.mock('../../state/specs', () => ({
49
+ // ...(jest.requireActual('../../state/specs') as Record<string, unknown>),
50
+ // useSpecActions: jest
51
+ // .fn()
52
+ // .mockReturnValue({ setCurrentSpecAction: jest.fn() }),
53
+ // }))
54
+
47
55
  describe('ApiSpecSelector', () => {
48
- const specDispatch = jest.fn()
49
56
  Element.prototype.scrollIntoView = jest.fn()
57
+ const spec = getLoadedSpecs()['4.0']
50
58
 
51
- test('the default spec is selected by default', () => {
52
- renderWithTheme(
53
- <ApiSpecSelector
54
- specs={specs}
55
- spec={specState.spec}
56
- specDispatch={specDispatch}
57
- />
58
- )
59
-
59
+ test('the base spec is selected by default', () => {
60
+ renderWithReduxProvider(<ApiSpecSelector spec={spec} />)
60
61
  const selector = screen.getByRole('textbox')
61
- expect(selector).toHaveValue(`${specState.spec.key}`)
62
+ expect(selector).toHaveValue(`${spec.key}`)
62
63
  })
63
64
 
64
65
  test('it lists all available specs', async () => {
65
- renderWithTheme(
66
- <ApiSpecSelector
67
- specs={specs}
68
- spec={specState.spec}
69
- specDispatch={specDispatch}
70
- />
71
- )
66
+ renderWithReduxProvider(<ApiSpecSelector spec={spec} />)
72
67
  userEvent.click(screen.getByRole('textbox'))
73
68
  await waitFor(() => {
74
69
  expect(screen.getAllByRole('option')).toHaveLength(
@@ -77,25 +72,17 @@ describe('ApiSpecSelector', () => {
77
72
  })
78
73
  })
79
74
 
80
- test('it fires a SELECT_SPEC action when another spec is selected', async () => {
81
- renderWithRouterAndReduxProvider(
82
- <ApiSpecSelector
83
- specs={specs}
84
- spec={specState.spec}
85
- specDispatch={specDispatch}
86
- />
87
- )
88
-
89
- await act(async () => {
90
- await userEvent.click(screen.getByRole('textbox'))
91
- await userEvent.click(screen.getByRole('option', { name: '3.1 current' }))
92
- await waitFor(() => {
93
- expect(specDispatch).toHaveBeenCalledTimes(1)
94
- expect(specDispatch).toHaveBeenCalledWith({
95
- type: 'SELECT_SPEC',
96
- payload: '3.1',
97
- })
98
- })
75
+ test('requests selected spec', async () => {
76
+ const { push } = useHistory()
77
+ renderWithRouterAndReduxProvider(<ApiSpecSelector spec={spec} />)
78
+ userEvent.click(screen.getByRole('textbox'))
79
+ await waitFor(() => {
80
+ expect(screen.getAllByRole('option')).toHaveLength(
81
+ Object.keys(specs).length
82
+ )
99
83
  })
84
+ const button = screen.getByText('3.1')
85
+ userEvent.click(button)
86
+ expect(push).toHaveBeenCalledWith('/3.1/methods/Dashboard/dashboard')
100
87
  })
101
88
  })
@@ -24,28 +24,23 @@
24
24
 
25
25
  */
26
26
 
27
- import type { FC, Dispatch } from 'react'
27
+ import type { FC } from 'react'
28
28
  import React from 'react'
29
29
  import { Select } from '@looker/components'
30
30
  import { useHistory, useLocation } from 'react-router-dom'
31
+ import type { SpecItem } from '@looker/sdk-codegen'
32
+ import { useSelector } from 'react-redux'
31
33
 
32
- import type { SpecList, SpecItem } from '@looker/sdk-codegen'
33
- import type { SpecAction } from '../../reducers'
34
- import { selectSpec } from '../../reducers'
34
+ import { selectSpecs } from '../../state'
35
35
 
36
36
  interface ApiSpecSelectorProps {
37
- specs: SpecList
38
37
  spec: SpecItem
39
- specDispatch: Dispatch<SpecAction>
40
38
  }
41
39
 
42
- export const ApiSpecSelector: FC<ApiSpecSelectorProps> = ({
43
- specs,
44
- spec,
45
- specDispatch,
46
- }) => {
40
+ export const ApiSpecSelector: FC<ApiSpecSelectorProps> = ({ spec }) => {
47
41
  const history = useHistory()
48
42
  const location = useLocation()
43
+ const specs = useSelector(selectSpecs)
49
44
  const options = Object.entries(specs).map(([key, spec]) => ({
50
45
  value: key,
51
46
  label: key,
@@ -53,7 +48,6 @@ export const ApiSpecSelector: FC<ApiSpecSelectorProps> = ({
53
48
  }))
54
49
 
55
50
  const handleChange = (specKey: string) => {
56
- specDispatch(selectSpec(specKey))
57
51
  const matchPath = location.pathname.replace(`/${spec.key}`, `/${specKey}`)
58
52
  history.push(matchPath)
59
53
  }
@@ -28,28 +28,21 @@ import { act, screen, waitFor } from '@testing-library/react'
28
28
  import { codeGenerators } from '@looker/sdk-codegen'
29
29
  import userEvent from '@testing-library/user-event'
30
30
 
31
- import { specs, specState } from '../../test-data'
31
+ import { getLoadedSpecs, specs } from '../../test-data'
32
32
  import { renderWithRouterAndReduxProvider } from '../../test-utils'
33
33
  import { defaultSettingsState } from '../../state'
34
34
  import { SelectorContainer } from './SelectorContainer'
35
35
 
36
36
  describe('SelectorContainer', () => {
37
- const specDispatch = jest.fn()
38
-
37
+ const spec = getLoadedSpecs()['4.0']
39
38
  beforeAll(() => {
40
39
  window.HTMLElement.prototype.scrollIntoView = jest.fn()
41
40
  })
42
41
 
43
42
  test('it renders a spec selector with the correct default value and options', async () => {
44
- renderWithRouterAndReduxProvider(
45
- <SelectorContainer
46
- specs={specs}
47
- spec={specState.spec}
48
- specDispatch={specDispatch}
49
- />
50
- )
43
+ renderWithRouterAndReduxProvider(<SelectorContainer spec={spec} />)
51
44
  const selector = screen.getByLabelText('spec selector')
52
- expect(selector).toHaveValue(`${specState.spec.key}`)
45
+ expect(selector).toHaveValue(`${spec.key}`)
53
46
  await act(async () => {
54
47
  await userEvent.click(selector)
55
48
  await waitFor(() => {
@@ -61,13 +54,7 @@ describe('SelectorContainer', () => {
61
54
  })
62
55
 
63
56
  test('it renders an sdk language selector with the correct value and options', async () => {
64
- renderWithRouterAndReduxProvider(
65
- <SelectorContainer
66
- specs={specs}
67
- spec={specState.spec}
68
- specDispatch={specDispatch}
69
- />
70
- )
57
+ renderWithRouterAndReduxProvider(<SelectorContainer spec={spec} />)
71
58
  const selector = screen.getByLabelText('sdk language selector')
72
59
  expect(selector).toHaveValue(defaultSettingsState.sdkLanguage)
73
60
  await act(async () => {
@@ -81,19 +68,13 @@ describe('SelectorContainer', () => {
81
68
  })
82
69
 
83
70
  test('it renders an icon button for the differ', () => {
84
- renderWithRouterAndReduxProvider(
85
- <SelectorContainer
86
- specs={specs}
87
- spec={specState.spec}
88
- specDispatch={specDispatch}
89
- />
90
- )
71
+ renderWithRouterAndReduxProvider(<SelectorContainer spec={spec} />)
91
72
  expect(
92
73
  screen
93
74
  .getByRole('button', {
94
75
  name: 'Compare Specifications',
95
76
  })
96
77
  .closest('a')
97
- ).toHaveAttribute('href', `/diff/${specState.spec.key}/`)
78
+ ).toHaveAttribute('href', `/diff/${spec.key}/`)
98
79
  })
99
80
  })
@@ -24,25 +24,21 @@
24
24
 
25
25
  */
26
26
 
27
- import type { FC, Dispatch } from 'react'
27
+ import type { FC } from 'react'
28
28
  import React from 'react'
29
29
  import type { SpaceHelperProps } from '@looker/components'
30
30
  import { Space, IconButton } from '@looker/components'
31
31
  import { ChangeHistory } from '@styled-icons/material/ChangeHistory'
32
- import type { SpecList, SpecItem } from '@looker/sdk-codegen'
32
+ import type { SpecItem } from '@looker/sdk-codegen'
33
+
33
34
  import { Link } from '../Link'
34
- import type { SpecAction } from '../../reducers'
35
35
  import { diffPath } from '../../utils'
36
36
  import { SdkLanguageSelector } from './SdkLanguageSelector'
37
37
  import { ApiSpecSelector } from './ApiSpecSelector'
38
38
 
39
39
  interface SelectorContainerProps extends SpaceHelperProps {
40
- /** Specs to choose from */
41
- specs: SpecList
42
40
  /** Current selected spec */
43
41
  spec: SpecItem
44
- /** Spec state setter */
45
- specDispatch: Dispatch<SpecAction>
46
42
  }
47
43
 
48
44
  export const HEADER_REM = 4
@@ -51,14 +47,12 @@ export const HEADER_REM = 4
51
47
  * Renders a container for selectors
52
48
  */
53
49
  export const SelectorContainer: FC<SelectorContainerProps> = ({
54
- specs,
55
50
  spec,
56
- specDispatch,
57
51
  ...spaceProps
58
52
  }) => (
59
53
  <Space width="auto" {...spaceProps}>
60
54
  <SdkLanguageSelector />
61
- <ApiSpecSelector specs={specs} spec={spec} specDispatch={specDispatch} />
55
+ <ApiSpecSelector spec={spec} />
62
56
  <Link to={`/${diffPath}/${spec.key}/`}>
63
57
  <IconButton
64
58
  toggle
@@ -28,15 +28,15 @@ import { criteriaToSet } from '@looker/sdk-codegen'
28
28
  import userEvent from '@testing-library/user-event'
29
29
  import { screen, waitFor } from '@testing-library/react'
30
30
 
31
- import { getLoadedSpecs, specState } from '../../test-data'
31
+ import { getLoadedSpecs } from '../../test-data'
32
32
  import { renderWithRouterAndReduxProvider } from '../../test-utils'
33
33
  import { defaultSettingsState } from '../../state'
34
34
  import { SideNav } from './SideNav'
35
35
  import { countMethods, countTypes } from './searchUtils'
36
36
 
37
+ const spec = getLoadedSpecs()['4.0']
38
+
37
39
  describe('SideNav', () => {
38
- const specs = getLoadedSpecs()
39
- const specDispatch = jest.fn()
40
40
  const allTagsPattern = /^(Auth|ApiAuth)$/
41
41
  const allTypesPattern = /^(WriteDashboard|WriteQuery)$/
42
42
 
@@ -55,13 +55,7 @@ describe('SideNav', () => {
55
55
  })
56
56
 
57
57
  test('it renders search, methods tab and types tab', () => {
58
- renderWithRouterAndReduxProvider(
59
- <SideNav
60
- specs={specs}
61
- spec={specState.spec}
62
- specDispatch={specDispatch}
63
- />
64
- )
58
+ renderWithRouterAndReduxProvider(<SideNav spec={spec} />)
65
59
  const search = screen.getByLabelText('Search')
66
60
  expect(search).toHaveProperty('placeholder', 'Search')
67
61
  const tabs = screen.getAllByRole('tab', {
@@ -69,23 +63,14 @@ describe('SideNav', () => {
69
63
  })
70
64
  expect(tabs).toHaveLength(2)
71
65
  expect(tabs[0]).toHaveTextContent(
72
- `Methods (${countMethods(specState.spec.api!.tags)})`
66
+ `Methods (${countMethods(spec.api!.tags)})`
73
67
  )
74
68
 
75
- expect(tabs[1]).toHaveTextContent(
76
- `Types (${countTypes(specState.spec.api!.types)})`
77
- )
69
+ expect(tabs[1]).toHaveTextContent(`Types (${countTypes(spec.api!.types)})`)
78
70
  })
79
71
 
80
72
  test('Methods tab is the default active tab', () => {
81
- renderWithRouterAndReduxProvider(
82
- <SideNav
83
- specs={specs}
84
- spec={specState.spec}
85
- specDispatch={specDispatch}
86
- />,
87
- ['/3.1/methods']
88
- )
73
+ renderWithRouterAndReduxProvider(<SideNav spec={spec} />, ['/3.1/methods'])
89
74
  expect(screen.getAllByText(allTagsPattern)).toHaveLength(2)
90
75
  expect(
91
76
  screen.queryAllByRole('link', { name: allTypesPattern })
@@ -97,47 +82,29 @@ describe('SideNav', () => {
97
82
  })
98
83
 
99
84
  test('url determines active tab', () => {
100
- renderWithRouterAndReduxProvider(
101
- <SideNav
102
- specs={specs}
103
- spec={specState.spec}
104
- specDispatch={specDispatch}
105
- />,
106
- ['/3.1/types']
107
- )
85
+ renderWithRouterAndReduxProvider(<SideNav spec={spec} />, ['/3.1/types'])
108
86
  // eslint-disable-next-line jest-dom/prefer-in-document
109
87
  expect(screen.queryAllByText(allTagsPattern)).toHaveLength(2)
110
88
  })
111
89
  })
112
90
 
113
91
  describe('Search', () => {
114
- const specs = getLoadedSpecs()
115
- const specDispatch = jest.fn()
116
-
117
92
  test('it filters methods and types on input', async () => {
118
- renderWithRouterAndReduxProvider(
119
- <SideNav
120
- specs={specs}
121
- spec={specState.spec}
122
- specDispatch={specDispatch}
123
- />
124
- )
93
+ renderWithRouterAndReduxProvider(<SideNav spec={spec} />)
125
94
  const searchPattern = 'embedsso'
126
95
  const input = screen.getByLabelText('Search')
127
- jest.spyOn(specState.spec.api!, 'search')
96
+ jest.spyOn(spec.api!, 'search')
128
97
  /** Pasting to avoid triggering search multiple times */
129
98
  await userEvent.paste(input, searchPattern)
130
99
  await waitFor(() => {
131
- expect(specState.spec.api!.search).toHaveBeenCalledWith(
100
+ expect(spec.api!.search).toHaveBeenCalledWith(
132
101
  searchPattern,
133
102
  criteriaToSet(defaultSettingsState.searchCriteria)
134
103
  )
135
104
  const methods = screen.getByRole('tab', { name: 'Methods (1)' })
136
105
  userEvent.click(methods)
137
106
  expect(
138
- screen.getByText(
139
- specState.spec.api!.tags.Auth.create_sso_embed_url.summary
140
- )
107
+ screen.getByText(spec.api!.tags.Auth.create_sso_embed_url.summary)
141
108
  ).toBeInTheDocument()
142
109
  const types = screen.getByRole('tab', { name: 'Types (1)' })
143
110
  userEvent.click(types)
@@ -24,7 +24,7 @@
24
24
 
25
25
  */
26
26
 
27
- import type { FC, Dispatch } from 'react'
27
+ import type { FC } from 'react'
28
28
  import React, { useEffect, useState } from 'react'
29
29
  import { useHistory, useLocation } from 'react-router-dom'
30
30
  import {
@@ -37,7 +37,6 @@ import {
37
37
  } from '@looker/components'
38
38
  import type {
39
39
  SpecItem,
40
- SpecList,
41
40
  ISearchResult,
42
41
  ApiModel,
43
42
  TagList,
@@ -46,7 +45,6 @@ import type {
46
45
  import { criteriaToSet, tagTypes } from '@looker/sdk-codegen'
47
46
  import { useSelector } from 'react-redux'
48
47
 
49
- import type { SpecAction } from '../../reducers'
50
48
  import { useWindowSize } from '../../utils'
51
49
  import { HEADER_REM } from '../Header'
52
50
  import { selectSearchCriteria, useSettingActions } from '../../state'
@@ -65,12 +63,8 @@ interface SideNavState {
65
63
 
66
64
  interface SideNavProps {
67
65
  headless?: boolean
68
- /** Specs to choose from */
69
- specs: SpecList
70
66
  /** Current selected spec */
71
67
  spec: SpecItem
72
- /** Spec state setter */
73
- specDispatch: Dispatch<SpecAction>
74
68
  }
75
69
 
76
70
  export const SideNav: FC<SideNavProps> = ({ headless = false, spec }) => {
@@ -45,3 +45,4 @@ export { DocTypeSummary } from './DocTypeSummary'
45
45
  export { Link } from './Link'
46
46
  export { ErrorBoundary } from './ErrorBoundary'
47
47
  export { SelectorContainer } from './SelectorContainer'
48
+ export { Banner } from './Banner'
package/src/index.ts CHANGED
@@ -27,3 +27,4 @@ export * from './ApiExplorer'
27
27
  export * from './StandaloneApiExplorer'
28
28
  export * from './components'
29
29
  export * from './state'
30
+ export * from './utils'
@@ -28,8 +28,6 @@ import type { FC } from 'react'
28
28
  import React from 'react'
29
29
  import { Redirect, Route, Switch } from 'react-router-dom'
30
30
  import type { ApiModel, SpecList } from '@looker/sdk-codegen'
31
- import type { RunItSetter } from '@looker/run-it'
32
- import type { IEnvironmentAdaptor } from '@looker/extension-utils'
33
31
 
34
32
  import {
35
33
  HomeScene,
@@ -42,47 +40,37 @@ import { DiffScene } from '../scenes/DiffScene'
42
40
  import { diffPath } from '../utils'
43
41
 
44
42
  interface AppRouterProps {
45
- api: ApiModel
46
43
  specKey: string
47
44
  specs: SpecList
45
+ api: ApiModel
48
46
  toggleNavigation: (target?: boolean) => void
49
- adaptor: IEnvironmentAdaptor
50
- setVersionsUrl: RunItSetter
51
47
  }
52
48
 
53
49
  export const AppRouter: FC<AppRouterProps> = ({
54
- specKey,
55
50
  api,
51
+ specKey,
56
52
  specs,
57
53
  toggleNavigation,
58
- adaptor,
59
- setVersionsUrl,
60
- }) => {
61
- return (
62
- <Switch>
63
- <Redirect from="/" to={`/${specKey}/`} exact />
64
- <Route path={`/${diffPath}/:l?/:r?`}>
65
- <DiffScene specs={specs} toggleNavigation={toggleNavigation} />
66
- </Route>
67
- <Route path="/:specKey/(methods|types)?" exact>
68
- <HomeScene api={api} />
69
- </Route>
70
- <Route path="/:specKey/methods/:methodTag" exact>
71
- <MethodTagScene api={api} />
72
- </Route>
73
- <Route path="/:specKey/methods/:methodTag/:methodName">
74
- <MethodScene
75
- api={api}
76
- adaptor={adaptor}
77
- setVersionsUrl={setVersionsUrl}
78
- />
79
- </Route>
80
- <Route path="/:specKey/types/:typeTag" exact>
81
- <TypeTagScene api={api} />
82
- </Route>
83
- <Route path="/:specKey/types/:typeTag/:typeName">
84
- <TypeScene api={api} />
85
- </Route>
86
- </Switch>
87
- )
88
- }
54
+ }) => (
55
+ <Switch>
56
+ <Redirect from="/" to={`/${specKey}/`} exact />
57
+ <Route path={`/${diffPath}/:l?/:r?`}>
58
+ <DiffScene specs={specs} toggleNavigation={toggleNavigation} />
59
+ </Route>
60
+ <Route path="/:specKey/(methods|types)?" exact>
61
+ <HomeScene api={api} />
62
+ </Route>
63
+ <Route path="/:specKey/methods/:methodTag" exact>
64
+ <MethodTagScene api={api} />
65
+ </Route>
66
+ <Route path="/:specKey/methods/:methodTag/:methodName">
67
+ <MethodScene api={api} />
68
+ </Route>
69
+ <Route path="/:specKey/types/:typeTag" exact>
70
+ <TypeTagScene api={api} />
71
+ </Route>
72
+ <Route path="/:specKey/types/:typeTag/:typeName">
73
+ <TypeScene api={api} />
74
+ </Route>
75
+ </Switch>
76
+ )