@looker/api-explorer 0.9.36 → 0.9.38

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 (268) hide show
  1. package/CHANGELOG.md +49 -1
  2. package/dist/bundle.js +1 -1
  3. package/dist/bundle.js.map +1 -1
  4. package/e2e/MethodScene.spec.ts +80 -0
  5. package/e2e/diffScene.spec.ts +28 -20
  6. package/e2e/e2e.spec.ts +45 -7
  7. package/lib/ApiExplorer.js +17 -6
  8. package/lib/ApiExplorer.js.map +1 -1
  9. package/lib/components/DocMarkdown/DocMarkdown.js +3 -1
  10. package/lib/components/DocMarkdown/DocMarkdown.js.map +1 -1
  11. package/lib/components/DocSDKs/DocDeclarations.js +10 -15
  12. package/lib/components/DocSDKs/DocDeclarations.js.map +1 -1
  13. package/lib/components/SelectorContainer/ApiSpecSelector.js +3 -1
  14. package/lib/components/SelectorContainer/ApiSpecSelector.js.map +1 -1
  15. package/lib/components/SelectorContainer/SdkLanguageSelector.js +20 -21
  16. package/lib/components/SelectorContainer/SdkLanguageSelector.js.map +1 -1
  17. package/lib/components/SelectorContainer/SelectorContainer.js +4 -1
  18. package/lib/components/SelectorContainer/SelectorContainer.js.map +1 -1
  19. package/lib/components/SelectorContainer/utils.d.ts +2 -0
  20. package/lib/components/SelectorContainer/utils.js +32 -0
  21. package/lib/components/SelectorContainer/utils.js.map +1 -0
  22. package/lib/components/SideNav/SideNav.js +20 -9
  23. package/lib/components/SideNav/SideNav.js.map +1 -1
  24. package/lib/components/SideNav/SideNavMethods.js +7 -6
  25. package/lib/components/SideNav/SideNavMethods.js.map +1 -1
  26. package/lib/components/SideNav/SideNavTypes.js +5 -4
  27. package/lib/components/SideNav/SideNavTypes.js.map +1 -1
  28. package/lib/components/index.d.ts +0 -1
  29. package/lib/components/index.js +0 -8
  30. package/lib/components/index.js.map +1 -1
  31. package/lib/esm/ApiExplorer.js +19 -8
  32. package/lib/esm/ApiExplorer.js.map +1 -1
  33. package/lib/esm/components/DocMarkdown/DocMarkdown.js +3 -1
  34. package/lib/esm/components/DocMarkdown/DocMarkdown.js.map +1 -1
  35. package/lib/esm/components/DocSDKs/DocDeclarations.js +9 -14
  36. package/lib/esm/components/DocSDKs/DocDeclarations.js.map +1 -1
  37. package/lib/esm/components/SelectorContainer/ApiSpecSelector.js +3 -1
  38. package/lib/esm/components/SelectorContainer/ApiSpecSelector.js.map +1 -1
  39. package/lib/esm/components/SelectorContainer/SdkLanguageSelector.js +16 -18
  40. package/lib/esm/components/SelectorContainer/SdkLanguageSelector.js.map +1 -1
  41. package/lib/esm/components/SelectorContainer/SelectorContainer.js +5 -2
  42. package/lib/esm/components/SelectorContainer/SelectorContainer.js.map +1 -1
  43. package/lib/esm/components/SelectorContainer/utils.js +22 -0
  44. package/lib/esm/components/SelectorContainer/utils.js.map +1 -0
  45. package/lib/esm/components/SideNav/SideNav.js +20 -10
  46. package/lib/esm/components/SideNav/SideNav.js.map +1 -1
  47. package/lib/esm/components/SideNav/SideNavMethods.js +8 -7
  48. package/lib/esm/components/SideNav/SideNavMethods.js.map +1 -1
  49. package/lib/esm/components/SideNav/SideNavTypes.js +6 -5
  50. package/lib/esm/components/SideNav/SideNavTypes.js.map +1 -1
  51. package/lib/esm/components/index.js +0 -1
  52. package/lib/esm/components/index.js.map +1 -1
  53. package/lib/esm/routes/AppRouter.js +6 -4
  54. package/lib/esm/routes/AppRouter.js.map +1 -1
  55. package/lib/esm/scenes/DiffScene/DiffScene.js +9 -7
  56. package/lib/esm/scenes/DiffScene/DiffScene.js.map +1 -1
  57. package/lib/esm/scenes/DiffScene/DocDiff/DiffItem.js +3 -1
  58. package/lib/esm/scenes/DiffScene/DocDiff/DiffItem.js.map +1 -1
  59. package/lib/esm/scenes/DiffScene/DocDiff/DocDiff.js +4 -4
  60. package/lib/esm/scenes/DiffScene/DocDiff/DocDiff.js.map +1 -1
  61. package/lib/esm/scenes/ErrorDetailScene/ErrorDetailScene.js +31 -0
  62. package/lib/esm/scenes/ErrorDetailScene/ErrorDetailScene.js.map +1 -0
  63. package/lib/esm/scenes/ErrorDetailScene/index.js +2 -0
  64. package/lib/esm/scenes/ErrorDetailScene/index.js.map +1 -0
  65. package/lib/esm/scenes/MethodScene/MethodScene.js +28 -9
  66. package/lib/esm/scenes/MethodScene/MethodScene.js.map +1 -1
  67. package/lib/esm/{components → scenes/MethodScene/components}/DocResponses/DocResponseTypes.js +1 -1
  68. package/lib/esm/scenes/MethodScene/components/DocResponses/DocResponseTypes.js.map +1 -0
  69. package/lib/esm/scenes/MethodScene/components/DocResponses/DocResponses.js +73 -0
  70. package/lib/esm/scenes/MethodScene/components/DocResponses/DocResponses.js.map +1 -0
  71. package/lib/esm/{components → scenes/MethodScene/components}/DocResponses/index.js +0 -0
  72. package/lib/esm/scenes/MethodScene/components/DocResponses/index.js.map +1 -0
  73. package/lib/esm/{components → scenes/MethodScene/components}/DocResponses/utils.js +0 -0
  74. package/lib/esm/scenes/MethodScene/components/DocResponses/utils.js.map +1 -0
  75. package/lib/esm/scenes/MethodScene/components/index.js +1 -0
  76. package/lib/esm/scenes/MethodScene/components/index.js.map +1 -1
  77. package/lib/esm/scenes/MethodTagScene/MethodTagScene.js +38 -11
  78. package/lib/esm/scenes/MethodTagScene/MethodTagScene.js.map +1 -1
  79. package/lib/esm/scenes/TypeScene/TypeScene.js +3 -1
  80. package/lib/esm/scenes/TypeScene/TypeScene.js.map +1 -1
  81. package/lib/esm/scenes/TypeTagScene/TypeTagScene.js +37 -10
  82. package/lib/esm/scenes/TypeTagScene/TypeTagScene.js.map +1 -1
  83. package/lib/esm/scenes/index.js +1 -0
  84. package/lib/esm/scenes/index.js.map +1 -1
  85. package/lib/esm/scenes/utils/hooks/index.js +2 -0
  86. package/lib/esm/scenes/utils/hooks/index.js.map +1 -0
  87. package/lib/esm/scenes/utils/hooks/tagStoreSync.js +37 -0
  88. package/lib/esm/scenes/utils/hooks/tagStoreSync.js.map +1 -0
  89. package/lib/esm/scenes/utils/index.js +2 -0
  90. package/lib/esm/scenes/utils/index.js.map +1 -0
  91. package/lib/esm/state/settings/selectors.js +1 -0
  92. package/lib/esm/state/settings/selectors.js.map +1 -1
  93. package/lib/esm/state/settings/slice.js +6 -1
  94. package/lib/esm/state/settings/slice.js.map +1 -1
  95. package/lib/esm/utils/hooks/globalStoreSync.js +53 -0
  96. package/lib/esm/utils/hooks/globalStoreSync.js.map +1 -0
  97. package/lib/esm/utils/hooks/index.js +4 -0
  98. package/lib/esm/utils/hooks/index.js.map +1 -0
  99. package/lib/esm/utils/hooks/navigation.js +72 -0
  100. package/lib/esm/utils/hooks/navigation.js.map +1 -0
  101. package/lib/esm/utils/hooks/useQuery.js +9 -0
  102. package/lib/esm/utils/hooks/useQuery.js.map +1 -0
  103. package/lib/esm/utils/index.js +2 -1
  104. package/lib/esm/utils/index.js.map +1 -1
  105. package/lib/esm/utils/path.js +21 -0
  106. package/lib/esm/utils/path.js.map +1 -1
  107. package/lib/esm/utils/sdkLanguage.js +42 -0
  108. package/lib/esm/utils/sdkLanguage.js.map +1 -0
  109. package/lib/routes/AppRouter.d.ts +1 -2
  110. package/lib/routes/AppRouter.js +5 -3
  111. package/lib/routes/AppRouter.js.map +1 -1
  112. package/lib/scenes/DiffScene/DiffScene.d.ts +0 -2
  113. package/lib/scenes/DiffScene/DiffScene.js +8 -6
  114. package/lib/scenes/DiffScene/DiffScene.js.map +1 -1
  115. package/lib/scenes/DiffScene/DocDiff/DiffItem.js +3 -1
  116. package/lib/scenes/DiffScene/DocDiff/DiffItem.js.map +1 -1
  117. package/lib/scenes/DiffScene/DocDiff/DocDiff.js +4 -4
  118. package/lib/scenes/DiffScene/DocDiff/DocDiff.js.map +1 -1
  119. package/lib/scenes/ErrorDetailScene/ErrorDetailScene.d.ts +7 -0
  120. package/lib/scenes/ErrorDetailScene/ErrorDetailScene.js +47 -0
  121. package/lib/scenes/ErrorDetailScene/ErrorDetailScene.js.map +1 -0
  122. package/lib/scenes/ErrorDetailScene/index.d.ts +1 -0
  123. package/lib/scenes/ErrorDetailScene/index.js +14 -0
  124. package/lib/{components/DocResponses → scenes/ErrorDetailScene}/index.js.map +1 -1
  125. package/lib/scenes/MethodScene/MethodScene.js +23 -4
  126. package/lib/scenes/MethodScene/MethodScene.js.map +1 -1
  127. package/lib/{components → scenes/MethodScene/components}/DocResponses/DocResponseTypes.d.ts +2 -2
  128. package/lib/{components → scenes/MethodScene/components}/DocResponses/DocResponseTypes.js +2 -2
  129. package/lib/scenes/MethodScene/components/DocResponses/DocResponseTypes.js.map +1 -0
  130. package/lib/scenes/MethodScene/components/DocResponses/DocResponses.d.ts +9 -0
  131. package/lib/scenes/MethodScene/components/DocResponses/DocResponses.js +93 -0
  132. package/lib/scenes/MethodScene/components/DocResponses/DocResponses.js.map +1 -0
  133. package/lib/{components → scenes/MethodScene/components}/DocResponses/index.d.ts +0 -0
  134. package/lib/{components → scenes/MethodScene/components}/DocResponses/index.js +0 -0
  135. package/lib/scenes/MethodScene/components/DocResponses/index.js.map +1 -0
  136. package/lib/{components → scenes/MethodScene/components}/DocResponses/utils.d.ts +0 -0
  137. package/lib/{components → scenes/MethodScene/components}/DocResponses/utils.js +0 -0
  138. package/lib/scenes/MethodScene/components/DocResponses/utils.js.map +1 -0
  139. package/lib/scenes/MethodScene/components/index.d.ts +1 -0
  140. package/lib/scenes/MethodScene/components/index.js +8 -0
  141. package/lib/scenes/MethodScene/components/index.js.map +1 -1
  142. package/lib/scenes/MethodTagScene/MethodTagScene.js +42 -12
  143. package/lib/scenes/MethodTagScene/MethodTagScene.js.map +1 -1
  144. package/lib/scenes/TypeScene/TypeScene.js +3 -1
  145. package/lib/scenes/TypeScene/TypeScene.js.map +1 -1
  146. package/lib/scenes/TypeTagScene/TypeTagScene.js +41 -11
  147. package/lib/scenes/TypeTagScene/TypeTagScene.js.map +1 -1
  148. package/lib/scenes/index.d.ts +1 -0
  149. package/lib/scenes/index.js +8 -0
  150. package/lib/scenes/index.js.map +1 -1
  151. package/lib/scenes/utils/hooks/index.d.ts +1 -0
  152. package/lib/scenes/utils/hooks/index.js +14 -0
  153. package/lib/scenes/utils/hooks/index.js.map +1 -0
  154. package/lib/scenes/utils/hooks/tagStoreSync.d.ts +1 -0
  155. package/lib/scenes/utils/hooks/tagStoreSync.js +51 -0
  156. package/lib/scenes/utils/hooks/tagStoreSync.js.map +1 -0
  157. package/lib/scenes/utils/index.d.ts +1 -0
  158. package/lib/scenes/utils/index.js +14 -0
  159. package/lib/scenes/utils/index.js.map +1 -0
  160. package/lib/state/settings/selectors.d.ts +2 -1
  161. package/lib/state/settings/selectors.js +5 -1
  162. package/lib/state/settings/selectors.js.map +1 -1
  163. package/lib/state/settings/slice.d.ts +7 -1
  164. package/lib/state/settings/slice.js +6 -1
  165. package/lib/state/settings/slice.js.map +1 -1
  166. package/lib/test-data/index.d.ts +1 -0
  167. package/lib/test-data/index.js +14 -0
  168. package/lib/test-data/index.js.map +1 -1
  169. package/lib/test-data/sdkLanguages.d.ts +10 -0
  170. package/lib/test-data/sdkLanguages.js +19 -0
  171. package/lib/test-data/sdkLanguages.js.map +1 -0
  172. package/lib/utils/hooks/globalStoreSync.d.ts +1 -0
  173. package/lib/utils/hooks/globalStoreSync.js +67 -0
  174. package/lib/utils/hooks/globalStoreSync.js.map +1 -0
  175. package/lib/utils/hooks/index.d.ts +3 -0
  176. package/lib/utils/hooks/index.js +30 -0
  177. package/lib/utils/hooks/index.js.map +1 -0
  178. package/lib/utils/hooks/navigation.d.ts +11 -0
  179. package/lib/utils/hooks/navigation.js +83 -0
  180. package/lib/utils/hooks/navigation.js.map +1 -0
  181. package/lib/utils/hooks/useQuery.d.ts +1 -0
  182. package/lib/utils/hooks/useQuery.js +20 -0
  183. package/lib/utils/hooks/useQuery.js.map +1 -0
  184. package/lib/utils/index.d.ts +2 -1
  185. package/lib/utils/index.js +29 -1
  186. package/lib/utils/index.js.map +1 -1
  187. package/lib/utils/path.d.ts +4 -0
  188. package/lib/utils/path.js +32 -1
  189. package/lib/utils/path.js.map +1 -1
  190. package/lib/utils/sdkLanguage.d.ts +6 -0
  191. package/lib/utils/sdkLanguage.js +59 -0
  192. package/lib/utils/sdkLanguage.js.map +1 -0
  193. package/package.json +14 -14
  194. package/src/ApiExplorer.tsx +13 -8
  195. package/src/components/DocMarkdown/DocMarkdown.tsx +1 -1
  196. package/src/components/DocSDKs/DocDeclarations.tsx +11 -22
  197. package/src/components/DocSDKs/DocSDKs.spec.tsx +4 -1
  198. package/src/components/Header/Header.spec.tsx +1 -1
  199. package/src/components/SelectorContainer/ApiSpecSelector.tsx +1 -1
  200. package/src/components/SelectorContainer/SdkLanguageSelector.spec.tsx +60 -33
  201. package/src/components/SelectorContainer/SdkLanguageSelector.tsx +15 -22
  202. package/src/components/SelectorContainer/SelectorContainer.spec.tsx +1 -1
  203. package/src/components/SelectorContainer/SelectorContainer.tsx +18 -15
  204. package/src/{utils/hooks.ts → components/SelectorContainer/utils.ts} +13 -21
  205. package/src/components/SideNav/SideNav.tsx +26 -14
  206. package/src/components/SideNav/SideNavMethods.spec.tsx +6 -8
  207. package/src/components/SideNav/SideNavMethods.tsx +8 -12
  208. package/src/components/SideNav/SideNavTypes.tsx +5 -10
  209. package/src/components/index.ts +0 -1
  210. package/src/routes/AppRouter.tsx +7 -5
  211. package/src/scenes/DiffScene/DiffScene.tsx +8 -8
  212. package/src/scenes/DiffScene/DocDiff/DiffItem.tsx +1 -1
  213. package/src/scenes/DiffScene/DocDiff/DocDiff.spec.tsx +73 -2
  214. package/src/scenes/DiffScene/DocDiff/DocDiff.tsx +4 -4
  215. package/src/scenes/ErrorDetailScene/ErrorDetailScene.tsx +72 -0
  216. package/src/scenes/ErrorDetailScene/index.ts +26 -0
  217. package/src/scenes/MethodScene/MethodScene.tsx +21 -7
  218. package/src/{components → scenes/MethodScene/components}/DocResponses/DocResponseTypes.tsx +3 -6
  219. package/src/scenes/MethodScene/components/DocResponses/DocResponses.spec.tsx +153 -0
  220. package/src/scenes/MethodScene/components/DocResponses/DocResponses.tsx +103 -0
  221. package/src/{components → scenes/MethodScene/components}/DocResponses/index.ts +0 -0
  222. package/src/{components → scenes/MethodScene/components}/DocResponses/utils.spec.ts +1 -1
  223. package/src/{components → scenes/MethodScene/components}/DocResponses/utils.ts +0 -0
  224. package/src/scenes/MethodScene/components/index.ts +1 -0
  225. package/src/scenes/MethodTagScene/MethodTagScene.spec.tsx +25 -14
  226. package/src/scenes/MethodTagScene/MethodTagScene.tsx +42 -11
  227. package/src/scenes/TypeScene/TypeScene.tsx +1 -1
  228. package/src/scenes/TypeTagScene/TypeTagScene.spec.tsx +21 -11
  229. package/src/scenes/TypeTagScene/TypeTagScene.tsx +44 -11
  230. package/src/scenes/index.ts +1 -0
  231. package/src/scenes/utils/hooks/index.ts +27 -0
  232. package/src/scenes/utils/hooks/tagStoreSync.spec.ts +102 -0
  233. package/src/scenes/utils/hooks/tagStoreSync.ts +68 -0
  234. package/src/scenes/utils/index.ts +27 -0
  235. package/src/state/settings/selectors.spec.ts +5 -1
  236. package/src/state/settings/selectors.ts +3 -0
  237. package/src/state/settings/slice.ts +6 -0
  238. package/src/test-data/index.ts +1 -0
  239. package/src/test-data/sdkLanguages.ts +36 -0
  240. package/src/utils/hooks/globalStoreSync.spec.tsx +146 -0
  241. package/src/utils/hooks/globalStoreSync.ts +77 -0
  242. package/src/utils/hooks/index.ts +28 -0
  243. package/src/utils/hooks/navigation.spec.ts +118 -0
  244. package/src/utils/hooks/navigation.ts +121 -0
  245. package/src/utils/hooks/useQuery.ts +36 -0
  246. package/src/utils/index.ts +2 -1
  247. package/src/utils/path.spec.ts +67 -1
  248. package/src/utils/path.ts +35 -0
  249. package/src/utils/sdkLanguage.spec.ts +69 -0
  250. package/src/utils/sdkLanguage.ts +63 -0
  251. package/lib/components/DocResponses/DocResponseTypes.js.map +0 -1
  252. package/lib/components/DocResponses/DocResponses.d.ts +0 -8
  253. package/lib/components/DocResponses/DocResponses.js +0 -46
  254. package/lib/components/DocResponses/DocResponses.js.map +0 -1
  255. package/lib/components/DocResponses/utils.js.map +0 -1
  256. package/lib/esm/components/DocResponses/DocResponseTypes.js.map +0 -1
  257. package/lib/esm/components/DocResponses/DocResponses.js +0 -30
  258. package/lib/esm/components/DocResponses/DocResponses.js.map +0 -1
  259. package/lib/esm/components/DocResponses/index.js.map +0 -1
  260. package/lib/esm/components/DocResponses/utils.js.map +0 -1
  261. package/lib/esm/utils/hooks.js +0 -26
  262. package/lib/esm/utils/hooks.js.map +0 -1
  263. package/lib/utils/hooks.d.ts +0 -3
  264. package/lib/utils/hooks.js +0 -36
  265. package/lib/utils/hooks.js.map +0 -1
  266. package/src/components/DocResponses/DocResponses.spec.tsx +0 -60
  267. package/src/components/DocResponses/DocResponses.tsx +0 -69
  268. package/src/utils/hooks.spec.ts +0 -78
@@ -0,0 +1,80 @@
1
+ /*
2
+
3
+ MIT License
4
+
5
+ Copyright (c) 2022 Looker Data Sciences, Inc.
6
+
7
+ Permission is hereby granted, free of charge, to any person obtaining a copy
8
+ of this software and associated documentation files (the "Software"), to deal
9
+ in the Software without restriction, including without limitation the rights
10
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
+ copies of the Software, and to permit persons to whom the Software is
12
+ furnished to do so, subject to the following conditions:
13
+
14
+ The above copyright notice and this permission notice shall be included in all
15
+ copies or substantial portions of the Software.
16
+
17
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23
+ SOFTWARE.
24
+
25
+ */
26
+ import { goToPage, v40Url as v40, v40Url } from './helpers'
27
+
28
+ jest.setTimeout(120000)
29
+
30
+ describe('MethodScene', () => {
31
+ beforeEach(async () => {
32
+ await jestPuppeteer.resetBrowser()
33
+ await page.setDefaultNavigationTimeout(120000)
34
+ })
35
+
36
+ afterEach(async () => {
37
+ await page.evaluate(() => {
38
+ localStorage.clear()
39
+ })
40
+ })
41
+
42
+ it('fetches error detail markdown when error code query param is present', async () => {
43
+ const errorCode = '400'
44
+ await goToPage(`${v40Url}/methods/Content/content_metadata?e=${errorCode}`)
45
+
46
+ // confirm method scene loaded
47
+ await expect(page).toMatchElement('h2', { text: 'Get Content Metadata' })
48
+
49
+ // confirm correct response tab is selected
50
+ await expect(page).toMatchElement('button[aria-selected=true]', {
51
+ text: '400: Bad Request',
52
+ })
53
+ // confirm error detail md file was fetched
54
+ await expect(page).toMatchElement('h2', {
55
+ text: `API Response ${errorCode} for `,
56
+ })
57
+ })
58
+
59
+ it('removes error code query param when user navigates away from method', async () => {
60
+ const errorCode = 400
61
+ await goToPage(
62
+ `${v40}/err/${errorCode}/get/content_metadata/:content_metadata_id`
63
+ )
64
+
65
+ // confirm method scene loaded
66
+ await expect(page).toMatchElement('h2', { text: 'Get Content Metadata' })
67
+
68
+ // confirm url and query param are set correctly
69
+ await expect(page.url()).toEqual(
70
+ `${v40}/methods/Content/content_metadata?sdk=py&e=${errorCode}`
71
+ )
72
+
73
+ // navigate to another method
74
+ await expect(page).toClick('h4', { text: 'Dashboard' })
75
+ await expect(page).toMatchElement('h2', {
76
+ text: 'Dashboard: Manage Dashboards',
77
+ })
78
+ await expect(page.url()).toEqual(`${v40}/methods/Dashboard?sdk=py`)
79
+ })
80
+ })
@@ -44,13 +44,20 @@ describe('Diff Scene', () => {
44
44
  await jestPuppeteer.resetBrowser()
45
45
  await page.setDefaultNavigationTimeout(120000)
46
46
  })
47
- it('loads the default scene (/diff/3.1)', async () => {
48
- await goToPage(`${BASE_URL}/diff/3.1`)
47
+
48
+ afterEach(async () => {
49
+ await page.evaluate(() => {
50
+ localStorage.clear()
51
+ })
52
+ })
53
+
54
+ it('loads the default scene (/3.1/diff)', async () => {
55
+ await goToPage(`${BASE_URL}/3.1/diff`)
49
56
  const body = await page.$('body')
50
57
 
51
58
  // "Base" input element
52
59
  {
53
- await body.click()
60
+ await body?.click()
54
61
  const baseInputElement = await page.$(baseInputSelector)
55
62
  expect(baseInputElement).not.toBeNull()
56
63
  const baseInputValue = await page.evaluate(
@@ -62,18 +69,18 @@ describe('Diff Scene', () => {
62
69
  const baseOptionsOnLoad = await page.$(globalOptionsSelector)
63
70
  expect(baseOptionsOnLoad).toBeNull()
64
71
 
65
- await baseInputElement.click()
72
+ await baseInputElement?.click()
66
73
  const baseOptionsOnClick = await page.$$(globalOptionsSelector)
67
74
  expect(baseOptionsOnClick).not.toHaveLength(0)
68
75
 
69
- await body.click()
76
+ await body?.click()
70
77
  const baseOptionsOnClose = await page.$(globalOptionsSelector)
71
78
  expect(baseOptionsOnClose).toBeNull()
72
79
  }
73
80
 
74
81
  // "Comparison" input element
75
82
  {
76
- await body.click()
83
+ await body?.click()
77
84
  const compInputElement = await page.$(compInputSelector)
78
85
  expect(compInputElement).not.toBeNull()
79
86
  const compInputValue = await page.evaluate(
@@ -85,11 +92,11 @@ describe('Diff Scene', () => {
85
92
  const compOptionsOnLoad = await page.$(globalOptionsSelector)
86
93
  expect(compOptionsOnLoad).toBeNull()
87
94
 
88
- await compInputElement.click()
95
+ await compInputElement?.click()
89
96
  const compOptionsOnClick = await page.$$(globalOptionsSelector)
90
97
  expect(compOptionsOnClick).not.toHaveLength(0)
91
98
 
92
- await body.click()
99
+ await body?.click()
93
100
  const compOptionsOnClose = await page.$(globalOptionsSelector)
94
101
  expect(compOptionsOnClose).toBeNull()
95
102
  }
@@ -106,9 +113,8 @@ describe('Diff Scene', () => {
106
113
  }
107
114
  })
108
115
 
109
- it('loads a comparison scene (/diff/3.1/4.0) and navigates from it', async () => {
110
- await goToPage(`${BASE_URL}/diff/3.1/4.0`)
111
-
116
+ it('loads a comparison scene (/3.1/diff/4.0) and navigates from it', async () => {
117
+ await goToPage(`${BASE_URL}/3.1/diff/4.0`)
112
118
  // "Base" input element
113
119
  {
114
120
  const baseInputElement = await page.$(baseInputSelector)
@@ -176,18 +182,20 @@ describe('Diff Scene', () => {
176
182
  const methodLink = await page.$(`${resultCardsSelector} a[role=link]`)
177
183
  expect(methodLink).not.toBeNull()
178
184
  const methodText = await page.evaluate((e) => e.innerText, methodLink)
179
- expect(methodText).toMatch(`delete_board_item for 4.0`)
185
+ expect(methodText).toMatch(`delete_alert for 4.0`)
180
186
 
181
187
  // Click and validate destination
182
- await methodLink.click()
188
+ await methodLink?.click()
183
189
  await page.waitForSelector(`div[class*=MethodBadge]`, { timeout: 5000 })
184
190
  const compUrl = page.url()
185
- expect(compUrl).toEqual(`${BASE_URL}/4.0/methods/Board/delete_board_item`)
191
+ expect(compUrl).toEqual(
192
+ `${BASE_URL}/4.0/methods/Alert/delete_alert?sdk=py`
193
+ )
186
194
  }
187
195
  })
188
196
 
189
197
  it('updates when a comparison is chosen or switched', async () => {
190
- await goToPage(`${BASE_URL}/diff/3.1`)
198
+ await goToPage(`${BASE_URL}/3.1/diff`)
191
199
 
192
200
  // "Base" input element
193
201
  const baseInputElement = await page.$(baseInputSelector)
@@ -198,14 +206,14 @@ describe('Diff Scene', () => {
198
206
  expect(compInputElement).not.toBeNull()
199
207
 
200
208
  // Click comparison input
201
- await compInputElement.click()
209
+ await compInputElement?.click()
202
210
  const compOptionsOnClick = await page.$$(globalOptionsSelector)
203
211
  expect(compOptionsOnClick).not.toHaveLength(0)
204
212
  expect(compOptionsOnClick).not.toHaveLength(1)
205
213
 
206
214
  // Find an option containing the text 4.0
207
215
  const option40Index = await page.$$eval(globalOptionsSelector, (els) =>
208
- els.findIndex((el) => el.textContent.match(/4\.0/))
216
+ els.findIndex((el) => el?.textContent?.match(/4\.0/))
209
217
  )
210
218
  const option40 = compOptionsOnClick[option40Index]
211
219
  expect(option40).not.toBeUndefined()
@@ -217,7 +225,7 @@ describe('Diff Scene', () => {
217
225
  // Check the URL
218
226
  // Would like to do this earlier, but not sure what to wait on
219
227
  const compUrl = page.url()
220
- expect(compUrl).toEqual(`${BASE_URL}/diff/3.1/4.0`)
228
+ expect(compUrl).toEqual(`${BASE_URL}/3.1/diff/4.0?sdk=py`)
221
229
 
222
230
  // Check the results
223
231
  const diffResultCards = await page.$$(resultCardsSelector)
@@ -239,13 +247,13 @@ describe('Diff Scene', () => {
239
247
  switchButtonElement
240
248
  )
241
249
  expect(switchButtonDisabled).toEqual(false)
242
- await switchButtonElement.click()
250
+ await switchButtonElement?.click()
243
251
 
244
252
  // A more precise timing mechanism would be better: https://github.com/puppeteer/puppeteer/issues/5328
245
253
  await page.waitForTimeout(150)
246
254
 
247
255
  const switchUrl = page.url()
248
- expect(switchUrl).toEqual(`${BASE_URL}/diff/4.0/3.1`)
256
+ expect(switchUrl).toEqual(`${BASE_URL}/4.0/diff/3.1?sdk=py`)
249
257
 
250
258
  // Check the results again, even though they should be the same
251
259
  const diff40to31Page1Methods = await Promise.all(
package/e2e/e2e.spec.ts CHANGED
@@ -25,21 +25,25 @@
25
25
  */
26
26
  import '@testing-library/jest-dom'
27
27
 
28
- import { goToPage, pageReload, BASE_URL } from './helpers'
28
+ import { goToPage, pageReload, v40Url as v40 } from './helpers'
29
29
 
30
30
  // https://github.com/smooth-code/jest-puppeteer/tree/master/packages/expect-puppeteer
31
31
  // https://github.com/puppeteer/puppeteer/blob/main/docs/api.md
32
32
 
33
33
  jest.setTimeout(120000)
34
34
 
35
- const v40 = `${BASE_URL}/4.0`
36
-
37
35
  describe('API Explorer', () => {
38
36
  beforeEach(async () => {
39
37
  await jestPuppeteer.resetBrowser()
40
38
  await page.setDefaultNavigationTimeout(120000)
41
39
  })
42
40
 
41
+ afterEach(async () => {
42
+ await page.evaluate(() => {
43
+ localStorage.clear()
44
+ })
45
+ })
46
+
43
47
  describe('general', () => {
44
48
  beforeEach(async () => {
45
49
  await goToPage(v40)
@@ -55,7 +59,7 @@ describe('API Explorer', () => {
55
59
  expect(page).toClick('h3', { text: 'Get All Dashboards' }),
56
60
  ])
57
61
  await expect(page.url()).toEqual(
58
- `${v40}/methods/Dashboard/all_dashboards`
62
+ `${v40}/methods/Dashboard/all_dashboards?sdk=py`
59
63
  )
60
64
 
61
65
  // title
@@ -213,6 +217,30 @@ describe('API Explorer', () => {
213
217
  await expect(page).toMatchElement('h2', { text: 'Query' })
214
218
  await expect(page).toMatchElement('button', { text: 'Query' })
215
219
  })
220
+
221
+ it('redirects error routes to the correct method page', async () => {
222
+ const errorCode = 400
223
+ await goToPage(
224
+ `${v40}/err/${errorCode}/get/content_metadata/:content_metadata_id`
225
+ )
226
+
227
+ // confirm method scene loaded
228
+ await expect(page).toMatchElement('h2', { text: 'Get Content Metadata' })
229
+
230
+ // confirm url and query param are set correctly
231
+ await expect(page.url()).toEqual(
232
+ `${v40}/methods/Content/content_metadata?sdk=py&e=${errorCode}`
233
+ )
234
+
235
+ // confirm correct response tab is selected
236
+ await expect(page).toMatchElement('button[aria-selected=true]', {
237
+ text: '400: Bad Request',
238
+ })
239
+ // confirm error detail md file was fetched
240
+ await expect(page).toMatchElement('h2', {
241
+ text: `API Response ${errorCode} for `,
242
+ })
243
+ })
216
244
  })
217
245
 
218
246
  describe('outbound navigation', () => {
@@ -228,7 +256,7 @@ describe('API Explorer', () => {
228
256
  // page.waitForNavigation({timeout:5000}),
229
257
  // exampleLink.click()
230
258
  // ])
231
- await exampleLink.click()
259
+ await exampleLink?.click()
232
260
  await page.waitForTimeout(150)
233
261
 
234
262
  const body = await page.$('body')
@@ -245,6 +273,12 @@ describe('API Explorer', () => {
245
273
  await goToPage(v40)
246
274
  })
247
275
 
276
+ afterEach(async () => {
277
+ await page.evaluate(() => {
278
+ localStorage.clear()
279
+ })
280
+ })
281
+
248
282
  it('searches methods', async () => {
249
283
  await expect(page).toFill('input[aria-label="Search"]', 'get workspace')
250
284
  // TODO: find a better way to avoid the scenario where L215 executes before search returns
@@ -255,7 +289,9 @@ describe('API Explorer', () => {
255
289
  await expect(page).toMatchElement('button', { text: 'Types (0)' })
256
290
  await expect(page).toClick('a', { text: 'Get Workspace' })
257
291
  await expect(page).toMatchElement('h2', { text: 'Get Workspace' })
258
- await expect(page.url()).toEqual(`${v40}/methods/Workspace/workspace`)
292
+ await expect(page.url()).toEqual(
293
+ `${v40}/methods/Workspace/workspace?sdk=py&s=get+workspace`
294
+ )
259
295
  })
260
296
 
261
297
  it('searches types', async () => {
@@ -267,7 +303,9 @@ describe('API Explorer', () => {
267
303
  await expect(page).toClick('button', { text: 'Types (1)' })
268
304
  await expect(page).toClick('a', { text: 'WriteTheme' })
269
305
  await expect(page).toMatchElement('h2', { text: 'WriteTheme' })
270
- await expect(page.url()).toEqual(`${v40}/types/Theme/WriteTheme`)
306
+ await expect(page.url()).toEqual(
307
+ `${v40}/types/Theme/WriteTheme?sdk=py&s=writetheme`
308
+ )
271
309
  })
272
310
  })
273
311
  })
@@ -50,7 +50,6 @@ var ApiExplorer = _ref => {
50
50
  declarationsLodeUrl = "".concat(_lodeUtils.apixFilesHost, "/declarationsIndex.json"),
51
51
  headless = false
52
52
  } = _ref;
53
- (0, _state.useSettingStoreState)();
54
53
  (0, _state.useLodesStoreState)();
55
54
  var {
56
55
  working,
@@ -61,15 +60,20 @@ var ApiExplorer = _ref => {
61
60
  var {
62
61
  initLodesAction
63
62
  } = (0, _state.useLodeActions)();
63
+ var {
64
+ initialized
65
+ } = (0, _state.useSettingStoreState)();
64
66
  var {
65
67
  initSettingsAction,
66
- setSearchPatternAction
68
+ setSearchPatternAction,
69
+ setSdkLanguageAction
67
70
  } = (0, _state.useSettingActions)();
68
71
  var {
69
72
  initSpecsAction,
70
73
  setCurrentSpecAction
71
74
  } = (0, _state.useSpecActions)();
72
75
  var location = (0, _reactRouterDom.useLocation)();
76
+ (0, _utils.useGlobalStoreSync)();
73
77
  var [hasNavigation, setHasNavigation] = (0, _react.useState)(true);
74
78
 
75
79
  var toggleNavigation = target => setHasNavigation(target || !hasNavigation);
@@ -97,17 +101,25 @@ var ApiExplorer = _ref => {
97
101
 
98
102
  var maybeSpec = (_location$pathname = location.pathname) === null || _location$pathname === void 0 ? void 0 : _location$pathname.split('/')[1];
99
103
 
100
- if (spec && maybeSpec && maybeSpec !== _utils.diffPath && maybeSpec !== spec.key) {
104
+ if (spec && maybeSpec && maybeSpec !== spec.key) {
101
105
  setCurrentSpecAction({
102
106
  currentSpecKey: maybeSpec
103
107
  });
104
108
  }
105
109
  }, [location.pathname, spec]);
106
110
  (0, _react.useEffect)(() => {
111
+ if (!initialized) return;
107
112
  var searchParams = new URLSearchParams(location.search);
108
113
  var searchPattern = searchParams.get('s') || '';
114
+ var sdkParam = searchParams.get('sdk') || 'all';
115
+ var {
116
+ language: sdkLanguage
117
+ } = (0, _utils.findSdk)(sdkParam);
109
118
  setSearchPatternAction({
110
- searchPattern: searchPattern
119
+ searchPattern
120
+ });
121
+ setSdkLanguageAction({
122
+ sdkLanguage
111
123
  });
112
124
  }, [location.search]);
113
125
  (0, _react.useEffect)(() => {
@@ -124,7 +136,7 @@ var ApiExplorer = _ref => {
124
136
  var themeOverrides = adaptor.themeOverrides();
125
137
  var neededSpec = (_location$pathname2 = location.pathname) === null || _location$pathname2 === void 0 ? void 0 : _location$pathname2.split('/')[1];
126
138
 
127
- if (!neededSpec || neededSpec === _utils.diffPath) {
139
+ if (!neededSpec) {
128
140
  neededSpec = spec === null || spec === void 0 ? void 0 : spec.key;
129
141
  }
130
142
 
@@ -182,7 +194,6 @@ var ApiExplorer = _ref => {
182
194
  })), _react.default.createElement(_routes.AppRouter, {
183
195
  specKey: spec.key,
184
196
  api: spec.api,
185
- specs: specs,
186
197
  toggleNavigation: toggleNavigation
187
198
  }))))), !headless && _react.default.createElement(BodyOverride, null));
188
199
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ApiExplorer.tsx"],"names":["BodyOverride","createGlobalStyle","ApiExplorer","adaptor","examplesLodeUrl","declarationsLodeUrl","apixFilesHost","headless","working","description","specs","selectSpecs","spec","selectCurrentSpec","initLodesAction","initSettingsAction","setSearchPatternAction","initSpecsAction","setCurrentSpecAction","location","hasNavigation","setHasNavigation","toggleNavigation","target","hasNavigationToggle","e","origin","window","data","action","currentHasNavigation","specKey","maybeSpec","pathname","split","diffPath","key","currentSpecKey","searchParams","URLSearchParams","search","searchPattern","get","addEventListener","removeEventListener","themeOverrides","neededSpec","loadGoogleFonts","themeCustomizations","logError","bind","overflow","HEADER_TOGGLE_LABEL","api","AsideBorder","Aside","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
+ {"version":3,"sources":["../src/ApiExplorer.tsx"],"names":["BodyOverride","createGlobalStyle","ApiExplorer","adaptor","examplesLodeUrl","declarationsLodeUrl","apixFilesHost","headless","working","description","specs","selectSpecs","spec","selectCurrentSpec","initLodesAction","initialized","initSettingsAction","setSearchPatternAction","setSdkLanguageAction","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","sdkParam","language","sdkLanguage","addEventListener","removeEventListener","themeOverrides","neededSpec","loadGoogleFonts","themeCustomizations","logError","bind","overflow","HEADER_TOGGLE_LABEL","api","AsideBorder","Aside","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 useLodeActions,\n useLodesStoreState,\n useSpecActions,\n useSpecStoreState,\n selectSpecs,\n selectCurrentSpec,\n useSettingStoreState,\n} from './state'\nimport { getSpecKey, findSdk, useGlobalStoreSync } 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 useLodesStoreState()\n const { working, description } = useSpecStoreState()\n const specs = useSelector(selectSpecs)\n const spec = useSelector(selectCurrentSpec)\n const { initLodesAction } = useLodeActions()\n const { initialized } = useSettingStoreState()\n const { initSettingsAction, setSearchPatternAction, setSdkLanguageAction } =\n useSettingActions()\n const { initSpecsAction, setCurrentSpecAction } = useSpecActions()\n\n const location = useLocation()\n useGlobalStoreSync()\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 !== spec.key) {\n setCurrentSpecAction({ currentSpecKey: maybeSpec })\n }\n }, [location.pathname, spec])\n\n useEffect(() => {\n if (!initialized) return\n const searchParams = new URLSearchParams(location.search)\n const searchPattern = searchParams.get('s') || ''\n const sdkParam = searchParams.get('sdk') || 'all'\n const { language: sdkLanguage } = findSdk(sdkParam)\n setSearchPatternAction({ searchPattern })\n setSdkLanguageAction({ sdkLanguage })\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) {\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 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"}
@@ -27,7 +27,9 @@ var DocMarkdown = _ref => {
27
27
  specKey
28
28
  } = _ref;
29
29
  var searchPattern = (0, _reactRedux.useSelector)(_state.selectSearchPattern);
30
- var navigate = (0, _utils.useNavigation)();
30
+ var {
31
+ navigate
32
+ } = (0, _utils.useNavigation)();
31
33
 
32
34
  var linkClickHandler = (pathname, url) => {
33
35
  if (pathname.startsWith("/".concat(specKey))) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/DocMarkdown/DocMarkdown.tsx"],"names":["DocMarkdown","source","specKey","searchPattern","selectSearchPattern","navigate","linkClickHandler","pathname","url","startsWith","adaptor","openBrowserWindow","transformURL","bind"],"mappings":";;;;;;;AA2BA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAOO,IAAMA,WAAiC,GAAG,QAAyB;AAAA,MAAxB;AAAEC,IAAAA,MAAF;AAAUC,IAAAA;AAAV,GAAwB;AACxE,MAAMC,aAAa,GAAG,6BAAYC,0BAAZ,CAAtB;AACA,MAAMC,QAAQ,GAAG,2BAAjB;;AAEA,MAAMC,gBAAgB,GAAG,CAACC,QAAD,EAAmBC,GAAnB,KAAmC;AAC1D,QAAID,QAAQ,CAACE,UAAT,YAAwBP,OAAxB,EAAJ,EAAwC;AACtCG,MAAAA,QAAQ,CAACE,QAAD,CAAR;AACD,KAFD,MAEO,IAAIC,GAAG,CAACC,UAAJ,YAAmBP,OAAnB,EAAJ,EAAmC;AACxCG,MAAAA,QAAQ,CAACG,GAAD,CAAR;AACD,KAFM,MAEA,IAAIA,GAAG,CAACC,UAAJ,CAAe,UAAf,CAAJ,EAAgC;AACrC,UAAMC,OAAO,GAAG,oCAAhB;AACAA,MAAAA,OAAO,CAACC,iBAAR,CAA0BH,GAA1B;AACD;AACF,GATD;;AAUA,SACE,6BAAC,oBAAD;AACE,IAAA,MAAM,EAAEP,MADV;AAEE,IAAA,OAAO,EAAEE,aAFX;AAGE,IAAA,gBAAgB,EAAEG,gBAHpB;AAIE,IAAA,gBAAgB,EAAEM,qBAAaC,IAAb,CAAkB,IAAlB,EAAwBX,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
+ {"version":3,"sources":["../../../src/components/DocMarkdown/DocMarkdown.tsx"],"names":["DocMarkdown","source","specKey","searchPattern","selectSearchPattern","navigate","linkClickHandler","pathname","url","startsWith","adaptor","openBrowserWindow","transformURL","bind"],"mappings":";;;;;;;AA2BA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAOO,IAAMA,WAAiC,GAAG,QAAyB;AAAA,MAAxB;AAAEC,IAAAA,MAAF;AAAUC,IAAAA;AAAV,GAAwB;AACxE,MAAMC,aAAa,GAAG,6BAAYC,0BAAZ,CAAtB;AACA,MAAM;AAAEC,IAAAA;AAAF,MAAe,2BAArB;;AAEA,MAAMC,gBAAgB,GAAG,CAACC,QAAD,EAAmBC,GAAnB,KAAmC;AAC1D,QAAID,QAAQ,CAACE,UAAT,YAAwBP,OAAxB,EAAJ,EAAwC;AACtCG,MAAAA,QAAQ,CAACE,QAAD,CAAR;AACD,KAFD,MAEO,IAAIC,GAAG,CAACC,UAAJ,YAAmBP,OAAnB,EAAJ,EAAmC;AACxCG,MAAAA,QAAQ,CAACG,GAAD,CAAR;AACD,KAFM,MAEA,IAAIA,GAAG,CAACC,UAAJ,CAAe,UAAf,CAAJ,EAAgC;AACrC,UAAMC,OAAO,GAAG,oCAAhB;AACAA,MAAAA,OAAO,CAACC,iBAAR,CAA0BH,GAA1B;AACD;AACF,GATD;;AAUA,SACE,6BAAC,oBAAD;AACE,IAAA,MAAM,EAAEP,MADV;AAEE,IAAA,OAAO,EAAEE,aAFX;AAGE,IAAA,gBAAgB,EAAEG,gBAHpB;AAIE,IAAA,gBAAgB,EAAEM,qBAAaC,IAAb,CAAkB,IAAlB,EAAwBX,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"}
@@ -5,34 +5,29 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.DocDeclarations = void 0;
7
7
 
8
- var _components = require("@looker/components");
9
-
10
8
  var _react = _interopRequireDefault(require("react"));
11
9
 
10
+ var _components = require("@looker/components");
11
+
12
12
  var _DocCode = require("../DocCode");
13
13
 
14
14
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
15
 
16
- 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); }
17
-
18
16
  var DocDeclarations = _ref => {
19
17
  var {
20
18
  declarations
21
19
  } = _ref;
22
- var tabs = (0, _components.useTabs)();
23
- return _react.default.createElement(_react.default.Fragment, null, _react.default.createElement(_components.TabList, tabs, Object.keys(declarations).map(language => _react.default.createElement(_components.Tab, {
24
- key: language
25
- }, language))), _react.default.createElement(_components.TabPanels, _extends({}, tabs, {
26
- pt: "0"
27
- }), Object.entries(declarations).map(_ref2 => {
20
+ return _react.default.createElement(_components.Tabs2, null, Object.entries(declarations).map(_ref2 => {
28
21
  var [language, code] = _ref2;
29
- return _react.default.createElement(_components.TabPanel, {
30
- key: language
22
+ return _react.default.createElement(_components.Tab2, {
23
+ key: language,
24
+ id: language,
25
+ label: language
31
26
  }, _react.default.createElement(_DocCode.DocCode, {
32
- language: language,
33
- code: code
27
+ code: code,
28
+ language: language
34
29
  }));
35
- })));
30
+ }));
36
31
  };
37
32
 
38
33
  exports.DocDeclarations = DocDeclarations;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/DocSDKs/DocDeclarations.tsx"],"names":["DocDeclarations","declarations","tabs","Object","keys","map","language","entries","code"],"mappings":";;;;;;;AAyBA;;AAGA;;AACA;;;;;;AAUO,IAAMA,eAAyC,GAAG,QAAsB;AAAA,MAArB;AAAEC,IAAAA;AAAF,GAAqB;AAC7E,MAAMC,IAAI,GAAG,0BAAb;AAEA,SACE,4DACE,6BAAC,mBAAD,EAAaA,IAAb,EACGC,MAAM,CAACC,IAAP,CAAYH,YAAZ,EAA0BI,GAA1B,CAA+BC,QAAD,IAC7B,6BAAC,eAAD;AAAK,IAAA,GAAG,EAAEA;AAAV,KAAqBA,QAArB,CADD,CADH,CADF,EAME,6BAAC,qBAAD,eAAeJ,IAAf;AAAqB,IAAA,EAAE,EAAC;AAAxB,MACGC,MAAM,CAACI,OAAP,CAAeN,YAAf,EAA6BI,GAA7B,CAAiC;AAAA,QAAC,CAACC,QAAD,EAAWE,IAAX,CAAD;AAAA,WAChC,6BAAC,oBAAD;AAAU,MAAA,GAAG,EAAEF;AAAf,OACE,6BAAC,gBAAD;AAAS,MAAA,QAAQ,EAAEA,QAAnB;AAA6B,MAAA,IAAI,EAAEE;AAAnC,MADF,CADgC;AAAA,GAAjC,CADH,CANF,CADF;AAgBD,CAnBM","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 */\nimport { Tab, TabList, TabPanel, TabPanels, useTabs } from '@looker/components'\nimport type { KeyedCollection } from '@looker/sdk-codegen'\nimport type { FC } from 'react'\nimport React from 'react'\nimport { DocCode } from '../DocCode'\n\ninterface DocDeclarationsProps {\n declarations: KeyedCollection<string>\n}\n\n/**\n * Renders all provided declarations\n * @param declarations A collection of SDK declarations in various languages\n */\nexport const DocDeclarations: FC<DocDeclarationsProps> = ({ declarations }) => {\n const tabs = useTabs()\n\n return (\n <>\n <TabList {...tabs}>\n {Object.keys(declarations).map((language) => (\n <Tab key={language}>{language}</Tab>\n ))}\n </TabList>\n <TabPanels {...tabs} pt=\"0\">\n {Object.entries(declarations).map(([language, code]) => (\n <TabPanel key={language}>\n <DocCode language={language} code={code} />\n </TabPanel>\n ))}\n </TabPanels>\n </>\n )\n}\n"],"file":"DocDeclarations.js"}
1
+ {"version":3,"sources":["../../../src/components/DocSDKs/DocDeclarations.tsx"],"names":["DocDeclarations","declarations","Object","entries","map","language","code"],"mappings":";;;;;;;AAyBA;;AACA;;AAGA;;;;AAUO,IAAMA,eAAyC,GAAG;AAAA,MAAC;AAAEC,IAAAA;AAAF,GAAD;AAAA,SACvD,6BAAC,iBAAD,QACGC,MAAM,CAACC,OAAP,CAAeF,YAAf,EAA6BG,GAA7B,CAAiC;AAAA,QAAC,CAACC,QAAD,EAAWC,IAAX,CAAD;AAAA,WAChC,6BAAC,gBAAD;AAAM,MAAA,GAAG,EAAED,QAAX;AAAqB,MAAA,EAAE,EAAEA,QAAzB;AAAmC,MAAA,KAAK,EAAEA;AAA1C,OACE,6BAAC,gBAAD;AAAS,MAAA,IAAI,EAAEC,IAAf;AAAqB,MAAA,QAAQ,EAAED;AAA/B,MADF,CADgC;AAAA,GAAjC,CADH,CADuD;AAAA,CAAlD","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 */\nimport React from 'react'\nimport { Tab2, Tabs2 } from '@looker/components'\nimport type { KeyedCollection } from '@looker/sdk-codegen'\nimport type { FC } from 'react'\nimport { DocCode } from '../DocCode'\n\ninterface DocDeclarationsProps {\n declarations: KeyedCollection<string>\n}\n\n/**\n * Renders all provided declarations\n * @param declarations A collection of SDK declarations in various languages\n */\nexport const DocDeclarations: FC<DocDeclarationsProps> = ({ declarations }) => (\n <Tabs2>\n {Object.entries(declarations).map(([language, code]) => (\n <Tab2 key={language} id={language} label={language}>\n <DocCode code={code} language={language} />\n </Tab2>\n ))}\n </Tabs2>\n)\n"],"file":"DocDeclarations.js"}
@@ -24,7 +24,9 @@ var ApiSpecSelector = _ref => {
24
24
  spec
25
25
  } = _ref;
26
26
  var location = (0, _reactRouterDom.useLocation)();
27
- var navigate = (0, _utils.useNavigation)();
27
+ var {
28
+ navigate
29
+ } = (0, _utils.useNavigation)();
28
30
  var specs = (0, _reactRedux.useSelector)(_state.selectSpecs);
29
31
  var options = Object.entries(specs).map(_ref2 => {
30
32
  var [key, spec] = _ref2;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/SelectorContainer/ApiSpecSelector.tsx"],"names":["ApiSpecSelector","spec","location","navigate","specs","selectSpecs","options","Object","entries","map","key","value","label","description","status","handleChange","specKey","matchPath","pathname","replace"],"mappings":";;;;;;;AA2BA;;AACA;;AACA;;AAEA;;AACA;;AAEA;;;;AAMO,IAAMA,eAAyC,GAAG,QAAc;AAAA,MAAb;AAAEC,IAAAA;AAAF,GAAa;AACrE,MAAMC,QAAQ,GAAG,kCAAjB;AACA,MAAMC,QAAQ,GAAG,2BAAjB;AACA,MAAMC,KAAK,GAAG,6BAAYC,kBAAZ,CAAd;AACA,MAAMC,OAAO,GAAGC,MAAM,CAACC,OAAP,CAAeJ,KAAf,EAAsBK,GAAtB,CAA0B;AAAA,QAAC,CAACC,GAAD,EAAMT,IAAN,CAAD;AAAA,WAAkB;AAC1DU,MAAAA,KAAK,EAAED,GADmD;AAE1DE,MAAAA,KAAK,EAAEF,GAFmD;AAG1DG,MAAAA,WAAW,EAAEZ,IAAI,CAACa;AAHwC,KAAlB;AAAA,GAA1B,CAAhB;;AAMA,MAAMC,YAAY,GAAIC,OAAD,IAAqB;AACxC,QAAMC,SAAS,GAAGf,QAAQ,CAACgB,QAAT,CAAkBC,OAAlB,YAA8BlB,IAAI,CAACS,GAAnC,cAA8CM,OAA9C,EAAlB;AACAb,IAAAA,QAAQ,CAACc,SAAD,CAAR;AACD,GAHD;;AAKA,SACE,6BAAC,kBAAD;AACE,IAAA,KAAK,EAAC,OADR;AAEE,kBAAW,eAFb;AAGE,IAAA,YAAY,EAAEhB,IAAI,CAACS,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
+ {"version":3,"sources":["../../../src/components/SelectorContainer/ApiSpecSelector.tsx"],"names":["ApiSpecSelector","spec","location","navigate","specs","selectSpecs","options","Object","entries","map","key","value","label","description","status","handleChange","specKey","matchPath","pathname","replace"],"mappings":";;;;;;;AA2BA;;AACA;;AACA;;AAEA;;AACA;;AAEA;;;;AAMO,IAAMA,eAAyC,GAAG,QAAc;AAAA,MAAb;AAAEC,IAAAA;AAAF,GAAa;AACrE,MAAMC,QAAQ,GAAG,kCAAjB;AACA,MAAM;AAAEC,IAAAA;AAAF,MAAe,2BAArB;AACA,MAAMC,KAAK,GAAG,6BAAYC,kBAAZ,CAAd;AACA,MAAMC,OAAO,GAAGC,MAAM,CAACC,OAAP,CAAeJ,KAAf,EAAsBK,GAAtB,CAA0B;AAAA,QAAC,CAACC,GAAD,EAAMT,IAAN,CAAD;AAAA,WAAkB;AAC1DU,MAAAA,KAAK,EAAED,GADmD;AAE1DE,MAAAA,KAAK,EAAEF,GAFmD;AAG1DG,MAAAA,WAAW,EAAEZ,IAAI,CAACa;AAHwC,KAAlB;AAAA,GAA1B,CAAhB;;AAMA,MAAMC,YAAY,GAAIC,OAAD,IAAqB;AACxC,QAAMC,SAAS,GAAGf,QAAQ,CAACgB,QAAT,CAAkBC,OAAlB,YAA8BlB,IAAI,CAACS,GAAnC,cAA8CM,OAA9C,EAAlB;AACAb,IAAAA,QAAQ,CAACc,SAAD,CAAR;AACD,GAHD;;AAKA,SACE,6BAAC,kBAAD;AACE,IAAA,KAAK,EAAC,OADR;AAEE,kBAAW,eAFb;AAGE,IAAA,YAAY,EAAEhB,IAAI,CAACS,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"}