@looker/api-explorer 0.9.22 → 0.9.27

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 (353) hide show
  1. package/CHANGELOG.md +126 -0
  2. package/e2e/e2e.spec.ts +1 -1
  3. package/lib/ApiExplorer.d.ts +4 -43
  4. package/lib/ApiExplorer.js +71 -93
  5. package/lib/ApiExplorer.js.map +1 -1
  6. package/lib/App.d.ts +1 -0
  7. package/lib/App.js +29 -0
  8. package/lib/App.js.map +1 -0
  9. package/lib/StandaloneApiExplorer.js +36 -53
  10. package/lib/StandaloneApiExplorer.js.map +1 -1
  11. package/lib/components/Banner/Banner.d.ts +8 -0
  12. package/lib/components/Banner/Banner.js +70 -0
  13. package/lib/components/Banner/Banner.js.map +1 -0
  14. package/lib/components/Banner/index.d.ts +1 -0
  15. package/lib/components/Banner/index.js +14 -0
  16. package/lib/components/Banner/index.js.map +1 -0
  17. package/lib/components/DocMarkdown/DocMarkdown.js +5 -5
  18. package/lib/components/DocMarkdown/DocMarkdown.js.map +1 -1
  19. package/lib/components/DocSDKs/DocSDKs.js +3 -3
  20. package/lib/components/DocSDKs/DocSDKs.js.map +1 -1
  21. package/lib/components/DocSdkUsage/DocSdkUsage.js +3 -6
  22. package/lib/components/DocSdkUsage/DocSdkUsage.js.map +1 -1
  23. package/lib/components/DocSource/DocSource.js +5 -7
  24. package/lib/components/DocSource/DocSource.js.map +1 -1
  25. package/lib/components/ErrorBoundary/components/SomethingWentWrong/components/SomethingWentWrongGraphic/SomethingWentWrongGraphic.d.ts +1 -1
  26. package/lib/components/ErrorBoundary/components/SomethingWentWrong/components/SomethingWentWrongGraphic/SomethingWentWrongGraphic.js +152 -8
  27. package/lib/components/ErrorBoundary/components/SomethingWentWrong/components/SomethingWentWrongGraphic/SomethingWentWrongGraphic.js.map +1 -1
  28. package/lib/components/ExploreType/ExploreType.js +3 -5
  29. package/lib/components/ExploreType/ExploreType.js.map +1 -1
  30. package/lib/components/Header/Header.d.ts +2 -5
  31. package/lib/components/Header/Header.js +1 -5
  32. package/lib/components/Header/Header.js.map +1 -1
  33. package/lib/components/SelectorContainer/ApiSpecSelector.d.ts +2 -5
  34. package/lib/components/SelectorContainer/ApiSpecSelector.js +5 -5
  35. package/lib/components/SelectorContainer/ApiSpecSelector.js.map +1 -1
  36. package/lib/components/SelectorContainer/SdkLanguageSelector.js +1 -1
  37. package/lib/components/SelectorContainer/SdkLanguageSelector.js.map +1 -1
  38. package/lib/components/SelectorContainer/SelectorContainer.d.ts +2 -5
  39. package/lib/components/SelectorContainer/SelectorContainer.js +3 -7
  40. package/lib/components/SelectorContainer/SelectorContainer.js.map +1 -1
  41. package/lib/components/SideNav/SideNav.d.ts +2 -5
  42. package/lib/components/SideNav/SideNav.js +1 -1
  43. package/lib/components/SideNav/SideNav.js.map +1 -1
  44. package/lib/components/common/Loader.d.ts +1 -1
  45. package/lib/components/common/Loader.js.map +1 -1
  46. package/lib/components/index.d.ts +1 -0
  47. package/lib/components/index.js +8 -0
  48. package/lib/components/index.js.map +1 -1
  49. package/lib/esm/ApiExplorer.js +71 -92
  50. package/lib/esm/ApiExplorer.js.map +1 -1
  51. package/lib/esm/App.js +19 -0
  52. package/lib/esm/App.js.map +1 -0
  53. package/lib/esm/StandaloneApiExplorer.js +36 -53
  54. package/lib/esm/StandaloneApiExplorer.js.map +1 -1
  55. package/lib/esm/components/Banner/Banner.js +54 -0
  56. package/lib/esm/components/Banner/Banner.js.map +1 -0
  57. package/lib/esm/components/Banner/index.js +2 -0
  58. package/lib/esm/{test-utils/envAdaptor.js.map → components/Banner/index.js.map} +1 -1
  59. package/lib/esm/components/DocMarkdown/DocMarkdown.js +3 -3
  60. package/lib/esm/components/DocMarkdown/DocMarkdown.js.map +1 -1
  61. package/lib/esm/components/DocSDKs/DocSDKs.js +2 -2
  62. package/lib/esm/components/DocSDKs/DocSDKs.js.map +1 -1
  63. package/lib/esm/components/DocSdkUsage/DocSdkUsage.js +5 -7
  64. package/lib/esm/components/DocSdkUsage/DocSdkUsage.js.map +1 -1
  65. package/lib/esm/components/DocSource/DocSource.js +4 -5
  66. package/lib/esm/components/DocSource/DocSource.js.map +1 -1
  67. package/lib/esm/components/ErrorBoundary/components/SomethingWentWrong/components/SomethingWentWrongGraphic/SomethingWentWrongGraphic.js +153 -6
  68. package/lib/esm/components/ErrorBoundary/components/SomethingWentWrong/components/SomethingWentWrongGraphic/SomethingWentWrongGraphic.js.map +1 -1
  69. package/lib/esm/components/ExploreType/ExploreType.js +3 -4
  70. package/lib/esm/components/ExploreType/ExploreType.js.map +1 -1
  71. package/lib/esm/components/Header/Header.js +1 -5
  72. package/lib/esm/components/Header/Header.js.map +1 -1
  73. package/lib/esm/components/SelectorContainer/ApiSpecSelector.js +4 -5
  74. package/lib/esm/components/SelectorContainer/ApiSpecSelector.js.map +1 -1
  75. package/lib/esm/components/SelectorContainer/SdkLanguageSelector.js +2 -2
  76. package/lib/esm/components/SelectorContainer/SdkLanguageSelector.js.map +1 -1
  77. package/lib/esm/components/SelectorContainer/SelectorContainer.js +3 -7
  78. package/lib/esm/components/SelectorContainer/SelectorContainer.js.map +1 -1
  79. package/lib/esm/components/SideNav/SideNav.js +2 -2
  80. package/lib/esm/components/SideNav/SideNav.js.map +1 -1
  81. package/lib/esm/components/common/Loader.js.map +1 -1
  82. package/lib/esm/components/index.js +1 -0
  83. package/lib/esm/components/index.js.map +1 -1
  84. package/lib/esm/index.js +5 -18
  85. package/lib/esm/index.js.map +1 -1
  86. package/lib/esm/routes/AppRouter.js +3 -7
  87. package/lib/esm/routes/AppRouter.js.map +1 -1
  88. package/lib/esm/scenes/DiffScene/DiffScene.js +43 -99
  89. package/lib/esm/scenes/DiffScene/DiffScene.js.map +1 -1
  90. package/lib/esm/scenes/DiffScene/DocDiff/DiffItem.js +9 -13
  91. package/lib/esm/scenes/DiffScene/DocDiff/DiffItem.js.map +1 -1
  92. package/lib/esm/scenes/DiffScene/DocDiff/DocDiff.js +2 -2
  93. package/lib/esm/scenes/DiffScene/DocDiff/DocDiff.js.map +1 -1
  94. package/lib/esm/scenes/MethodScene/MethodScene.js +12 -15
  95. package/lib/esm/scenes/MethodScene/MethodScene.js.map +1 -1
  96. package/lib/esm/state/index.js +2 -0
  97. package/lib/esm/state/index.js.map +1 -1
  98. package/lib/esm/state/lodes/index.js +3 -0
  99. package/lib/{test-utils/envAdaptor.js.map → esm/state/lodes/index.js.map} +1 -1
  100. package/lib/esm/state/lodes/sagas.js +25 -0
  101. package/lib/esm/state/lodes/sagas.js.map +1 -0
  102. package/lib/esm/state/lodes/selectors.js +5 -0
  103. package/lib/esm/state/lodes/selectors.js.map +1 -0
  104. package/lib/esm/state/lodes/slice.js +30 -0
  105. package/lib/esm/state/lodes/slice.js.map +1 -0
  106. package/lib/esm/state/settings/sagas.js +28 -16
  107. package/lib/esm/state/settings/sagas.js.map +1 -1
  108. package/lib/esm/state/settings/selectors.js +5 -5
  109. package/lib/esm/state/settings/selectors.js.map +1 -1
  110. package/lib/esm/state/settings/slice.js +8 -8
  111. package/lib/esm/state/settings/slice.js.map +1 -1
  112. package/lib/esm/state/specs/index.js +3 -0
  113. package/lib/esm/state/specs/index.js.map +1 -0
  114. package/lib/esm/state/specs/sagas.js +58 -0
  115. package/lib/esm/state/specs/sagas.js.map +1 -0
  116. package/lib/esm/state/specs/selectors.js +8 -0
  117. package/lib/esm/state/specs/selectors.js.map +1 -0
  118. package/lib/esm/state/specs/slice.js +55 -0
  119. package/lib/esm/state/specs/slice.js.map +1 -0
  120. package/lib/esm/state/store.js +57 -3
  121. package/lib/esm/state/store.js.map +1 -1
  122. package/lib/esm/test-utils/index.js +1 -2
  123. package/lib/esm/test-utils/index.js.map +1 -1
  124. package/lib/esm/test-utils/lodes.js +12 -0
  125. package/lib/esm/test-utils/lodes.js.map +1 -0
  126. package/lib/esm/test-utils/redux.js +16 -9
  127. package/lib/esm/test-utils/redux.js.map +1 -1
  128. package/lib/esm/utils/adaptorUtils.js +101 -0
  129. package/lib/esm/utils/adaptorUtils.js.map +1 -0
  130. package/lib/esm/utils/apixAdaptor.js +48 -0
  131. package/lib/esm/utils/apixAdaptor.js.map +1 -0
  132. package/lib/esm/utils/index.js +3 -2
  133. package/lib/esm/utils/index.js.map +1 -1
  134. package/lib/esm/utils/lodeUtils.js +3 -7
  135. package/lib/esm/utils/lodeUtils.js.map +1 -1
  136. package/lib/esm/utils/path.js +27 -2
  137. package/lib/esm/utils/path.js.map +1 -1
  138. package/lib/index.d.ts +5 -1
  139. package/lib/index.js +59 -17
  140. package/lib/index.js.map +1 -1
  141. package/lib/routes/AppRouter.d.ts +1 -5
  142. package/lib/routes/AppRouter.js +3 -7
  143. package/lib/routes/AppRouter.js.map +1 -1
  144. package/lib/scenes/DiffScene/DiffScene.js +45 -100
  145. package/lib/scenes/DiffScene/DiffScene.js.map +1 -1
  146. package/lib/scenes/DiffScene/DocDiff/DiffItem.js +9 -13
  147. package/lib/scenes/DiffScene/DocDiff/DiffItem.js.map +1 -1
  148. package/lib/scenes/DiffScene/DocDiff/DocDiff.js +2 -2
  149. package/lib/scenes/DiffScene/DocDiff/DocDiff.js.map +1 -1
  150. package/lib/scenes/MethodScene/MethodScene.d.ts +0 -4
  151. package/lib/scenes/MethodScene/MethodScene.js +11 -13
  152. package/lib/scenes/MethodScene/MethodScene.js.map +1 -1
  153. package/lib/state/index.d.ts +2 -0
  154. package/lib/state/index.js +26 -0
  155. package/lib/state/index.js.map +1 -1
  156. package/lib/state/lodes/index.d.ts +2 -0
  157. package/lib/state/lodes/index.js +32 -0
  158. package/lib/state/lodes/index.js.map +1 -0
  159. package/lib/state/lodes/sagas.d.ts +1 -0
  160. package/lib/state/lodes/sagas.js +34 -0
  161. package/lib/state/lodes/sagas.js.map +1 -0
  162. package/lib/state/lodes/selectors.d.ts +3 -0
  163. package/lib/state/lodes/selectors.js +17 -0
  164. package/lib/state/lodes/selectors.js.map +1 -0
  165. package/lib/state/lodes/slice.d.ts +29 -0
  166. package/lib/state/lodes/slice.js +45 -0
  167. package/lib/state/lodes/slice.js.map +1 -0
  168. package/lib/state/settings/sagas.js +28 -15
  169. package/lib/state/settings/sagas.js.map +1 -1
  170. package/lib/state/settings/selectors.d.ts +1 -1
  171. package/lib/state/settings/selectors.js +5 -5
  172. package/lib/state/settings/selectors.js.map +1 -1
  173. package/lib/state/settings/slice.d.ts +14 -14
  174. package/lib/state/settings/slice.js +13 -13
  175. package/lib/state/settings/slice.js.map +1 -1
  176. package/lib/state/specs/index.d.ts +2 -0
  177. package/lib/state/specs/index.js +32 -0
  178. package/lib/state/specs/index.js.map +1 -0
  179. package/lib/state/specs/sagas.d.ts +1 -0
  180. package/lib/state/specs/sagas.js +67 -0
  181. package/lib/state/specs/sagas.js.map +1 -0
  182. package/lib/state/specs/selectors.d.ts +4 -0
  183. package/lib/state/specs/selectors.js +20 -0
  184. package/lib/state/specs/selectors.js.map +1 -0
  185. package/lib/state/specs/slice.d.ts +49 -0
  186. package/lib/state/specs/slice.js +70 -0
  187. package/lib/state/specs/slice.js.map +1 -0
  188. package/lib/state/store.d.ts +6 -0
  189. package/lib/state/store.js +60 -2
  190. package/lib/state/store.js.map +1 -1
  191. package/lib/test-data/declarations.d.ts +2 -0
  192. package/lib/test-data/declarations.js +24 -0
  193. package/lib/test-data/declarations.js.map +1 -0
  194. package/lib/test-data/examples.d.ts +2 -0
  195. package/lib/test-data/index.d.ts +3 -0
  196. package/lib/test-data/index.js +29 -36
  197. package/lib/test-data/index.js.map +1 -1
  198. package/lib/test-data/specs.d.ts +10 -0
  199. package/lib/test-data/specs.js +6 -6
  200. package/lib/test-data/specs.js.map +1 -1
  201. package/lib/test-utils/index.d.ts +1 -2
  202. package/lib/test-utils/index.js +12 -28
  203. package/lib/test-utils/index.js.map +1 -1
  204. package/lib/test-utils/lodes.d.ts +4 -0
  205. package/lib/test-utils/lodes.js +23 -0
  206. package/lib/test-utils/lodes.js.map +1 -0
  207. package/lib/test-utils/redux.d.ts +4 -1
  208. package/lib/test-utils/redux.js +18 -9
  209. package/lib/test-utils/redux.js.map +1 -1
  210. package/lib/utils/adaptorUtils.d.ts +30 -0
  211. package/lib/utils/adaptorUtils.js +124 -0
  212. package/lib/utils/adaptorUtils.js.map +1 -0
  213. package/lib/utils/apixAdaptor.d.ts +15 -0
  214. package/lib/utils/apixAdaptor.js +67 -0
  215. package/lib/utils/apixAdaptor.js.map +1 -0
  216. package/lib/utils/index.d.ts +3 -2
  217. package/lib/utils/index.js +30 -39
  218. package/lib/utils/index.js.map +1 -1
  219. package/lib/utils/lodeUtils.d.ts +2 -2
  220. package/lib/utils/lodeUtils.js +3 -7
  221. package/lib/utils/lodeUtils.js.map +1 -1
  222. package/lib/utils/path.d.ts +3 -0
  223. package/lib/utils/path.js +32 -2
  224. package/lib/utils/path.js.map +1 -1
  225. package/package.json +11 -10
  226. package/public/Looker.3.1.json +1343 -412
  227. package/public/Looker.4.0.json +3305 -661
  228. package/src/ApiExplorer.tsx +114 -144
  229. package/src/{index.tsx → App.tsx} +0 -0
  230. package/src/StandaloneApiExplorer.tsx +38 -61
  231. package/src/components/Banner/Banner.spec.tsx +99 -0
  232. package/src/components/Banner/Banner.tsx +87 -0
  233. package/src/{reducers → components/Banner}/index.ts +1 -1
  234. package/src/components/DocMarkdown/DocMarkdown.tsx +3 -3
  235. package/src/components/DocSDKs/DocSDKs.tsx +4 -5
  236. package/src/components/DocSdkUsage/DocSdkUsage.spec.tsx +2 -2
  237. package/src/components/DocSdkUsage/DocSdkUsage.tsx +5 -5
  238. package/src/components/DocSource/DocSource.tsx +4 -3
  239. package/src/components/ErrorBoundary/components/SomethingWentWrong/SomethingWentWrong.spec.tsx +1 -1
  240. package/src/components/ErrorBoundary/components/SomethingWentWrong/components/SomethingWentWrongGraphic/SomethingWentWrongGraphic.tsx +170 -6
  241. package/src/components/ExploreType/ExploreType.spec.tsx +0 -23
  242. package/src/components/ExploreType/ExploreType.tsx +5 -6
  243. package/src/components/ExploreType/exploreUtils.spec.tsx +1 -1
  244. package/src/components/Header/Header.spec.tsx +9 -30
  245. package/src/components/Header/Header.tsx +3 -10
  246. package/src/components/SelectorContainer/ApiSpecSelector.spec.tsx +31 -44
  247. package/src/components/SelectorContainer/ApiSpecSelector.tsx +6 -12
  248. package/src/components/SelectorContainer/SdkLanguageSelector.spec.tsx +3 -5
  249. package/src/components/SelectorContainer/SdkLanguageSelector.tsx +2 -2
  250. package/src/components/SelectorContainer/SelectorContainer.spec.tsx +7 -26
  251. package/src/components/SelectorContainer/SelectorContainer.tsx +4 -10
  252. package/src/components/SideNav/SideNav.spec.tsx +12 -45
  253. package/src/components/SideNav/SideNav.tsx +3 -9
  254. package/src/components/common/Loader.tsx +1 -1
  255. package/src/components/index.ts +1 -0
  256. package/src/{reducers/spec/index.ts → index.ts} +4 -2
  257. package/src/routes/AppRouter.tsx +26 -37
  258. package/src/scenes/DiffScene/DiffScene.tsx +47 -84
  259. package/src/scenes/DiffScene/DocDiff/DiffItem.spec.tsx +9 -16
  260. package/src/scenes/DiffScene/DocDiff/DiffItem.tsx +11 -12
  261. package/src/scenes/DiffScene/DocDiff/DocDiff.tsx +2 -2
  262. package/src/scenes/MethodScene/MethodScene.tsx +12 -18
  263. package/src/state/index.ts +2 -0
  264. package/src/{context → state/lodes}/index.ts +2 -1
  265. package/src/state/lodes/sagas.spec.ts +92 -0
  266. package/src/state/lodes/sagas.ts +51 -0
  267. package/src/state/lodes/selectors.spec.ts +42 -0
  268. package/src/{reducers/spec/actions.spec.ts → state/lodes/selectors.ts} +9 -11
  269. package/src/{test-utils/render_with_lode.tsx → state/lodes/slice.ts} +37 -37
  270. package/src/state/settings/sagas.spec.ts +25 -21
  271. package/src/state/settings/sagas.ts +16 -16
  272. package/src/state/settings/selectors.spec.ts +1 -5
  273. package/src/state/settings/selectors.ts +5 -5
  274. package/src/state/settings/slice.ts +12 -7
  275. package/src/{context/lode → state/specs}/index.ts +2 -1
  276. package/src/state/specs/sagas.spec.ts +135 -0
  277. package/src/state/specs/sagas.ts +81 -0
  278. package/src/{test-utils/envAdaptor.ts → state/specs/selectors.ts} +10 -4
  279. package/src/state/specs/slice.ts +109 -0
  280. package/src/state/store.ts +65 -2
  281. package/src/{context/lode/LodeContext.ts → test-data/declarations.ts} +17 -14
  282. package/src/test-data/index.ts +2 -8
  283. package/src/test-data/specs.ts +6 -6
  284. package/src/test-utils/index.ts +1 -5
  285. package/src/{reducers/spec/reducer.spec.ts → test-utils/lodes.tsx} +16 -19
  286. package/src/test-utils/redux.tsx +31 -8
  287. package/src/utils/adaptorUtils.ts +181 -0
  288. package/src/utils/apixAdaptor.ts +72 -0
  289. package/src/utils/index.ts +3 -8
  290. package/src/utils/lodeUtils.ts +4 -6
  291. package/src/utils/path.ts +25 -2
  292. package/webpack.dev.config.js +3 -0
  293. package/webpack.prod.config.js +4 -0
  294. package/lib/context/index.d.ts +0 -1
  295. package/lib/context/index.js +0 -20
  296. package/lib/context/index.js.map +0 -1
  297. package/lib/context/lode/LodeContext.d.ts +0 -9
  298. package/lib/context/lode/LodeContext.js +0 -21
  299. package/lib/context/lode/LodeContext.js.map +0 -1
  300. package/lib/context/lode/index.d.ts +0 -1
  301. package/lib/context/lode/index.js +0 -20
  302. package/lib/context/lode/index.js.map +0 -1
  303. package/lib/esm/context/index.js +0 -2
  304. package/lib/esm/context/index.js.map +0 -1
  305. package/lib/esm/context/lode/LodeContext.js +0 -11
  306. package/lib/esm/context/lode/LodeContext.js.map +0 -1
  307. package/lib/esm/context/lode/index.js +0 -2
  308. package/lib/esm/context/lode/index.js.map +0 -1
  309. package/lib/esm/reducers/index.js +0 -2
  310. package/lib/esm/reducers/index.js.map +0 -1
  311. package/lib/esm/reducers/spec/actions.js +0 -19
  312. package/lib/esm/reducers/spec/actions.js.map +0 -1
  313. package/lib/esm/reducers/spec/index.js +0 -4
  314. package/lib/esm/reducers/spec/index.js.map +0 -1
  315. package/lib/esm/reducers/spec/reducer.js +0 -62
  316. package/lib/esm/reducers/spec/reducer.js.map +0 -1
  317. package/lib/esm/reducers/spec/utils.js +0 -74
  318. package/lib/esm/reducers/spec/utils.js.map +0 -1
  319. package/lib/esm/test-utils/envAdaptor.js +0 -5
  320. package/lib/esm/test-utils/render_with_lode.js +0 -19
  321. package/lib/esm/test-utils/render_with_lode.js.map +0 -1
  322. package/lib/esm/utils/envAdaptor.js +0 -84
  323. package/lib/esm/utils/envAdaptor.js.map +0 -1
  324. package/lib/reducers/index.d.ts +0 -1
  325. package/lib/reducers/index.js +0 -19
  326. package/lib/reducers/index.js.map +0 -1
  327. package/lib/reducers/spec/actions.d.ts +0 -20
  328. package/lib/reducers/spec/actions.js +0 -31
  329. package/lib/reducers/spec/actions.js.map +0 -1
  330. package/lib/reducers/spec/index.d.ts +0 -3
  331. package/lib/reducers/spec/index.js +0 -45
  332. package/lib/reducers/spec/index.js.map +0 -1
  333. package/lib/reducers/spec/reducer.d.ts +0 -7
  334. package/lib/reducers/spec/reducer.js +0 -73
  335. package/lib/reducers/spec/reducer.js.map +0 -1
  336. package/lib/reducers/spec/utils.d.ts +0 -7
  337. package/lib/reducers/spec/utils.js +0 -91
  338. package/lib/reducers/spec/utils.js.map +0 -1
  339. package/lib/test-utils/envAdaptor.d.ts +0 -2
  340. package/lib/test-utils/envAdaptor.js +0 -15
  341. package/lib/test-utils/render_with_lode.d.ts +0 -7
  342. package/lib/test-utils/render_with_lode.js +0 -36
  343. package/lib/test-utils/render_with_lode.js.map +0 -1
  344. package/lib/utils/envAdaptor.d.ts +0 -31
  345. package/lib/utils/envAdaptor.js +0 -106
  346. package/lib/utils/envAdaptor.js.map +0 -1
  347. package/src/components/ErrorBoundary/components/SomethingWentWrong/components/SomethingWentWrongGraphic/somethingWentWrong.svg +0 -45
  348. package/src/reducers/spec/actions.ts +0 -62
  349. package/src/reducers/spec/reducer.ts +0 -69
  350. package/src/reducers/spec/utils.spec.ts +0 -138
  351. package/src/reducers/spec/utils.ts +0 -123
  352. package/src/utils/envAdaptor.spec.ts +0 -50
  353. package/src/utils/envAdaptor.ts +0 -147
@@ -1,11 +1,8 @@
1
- import type { FC, Dispatch } from 'react';
2
- import type { SpecItem, SpecList } from '@looker/sdk-codegen';
3
- import type { SpecAction } from '../../reducers';
1
+ import type { FC } from 'react';
2
+ import type { SpecItem } from '@looker/sdk-codegen';
4
3
  interface SideNavProps {
5
4
  headless?: boolean;
6
- specs: SpecList;
7
5
  spec: SpecItem;
8
- specDispatch: Dispatch<SpecAction>;
9
6
  }
10
7
  export declare const SideNav: FC<SideNavProps>;
11
8
  export {};
@@ -75,7 +75,7 @@ var SideNav = _ref => {
75
75
  var searchCriteria = (0, _reactRedux.useSelector)(_state.selectSearchCriteria);
76
76
  var {
77
77
  setSearchPatternAction
78
- } = (0, _state.useActions)();
78
+ } = (0, _state.useSettingActions)();
79
79
  var [pattern, setSearchPattern] = (0, _react.useState)('');
80
80
  var debouncedPattern = (0, _searchUtils.useDebounce)(pattern, 250);
81
81
  var [sideNavState, setSideNavState] = (0, _react.useState)(() => {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/SideNav/SideNav.tsx"],"names":["SideNav","headless","spec","history","location","specKey","key","tabNames","pathParts","pathname","split","sideNavTab","defaultIndex","indexOf","onTabChange","index","parts","push","join","tabs","onChange","searchCriteria","selectSearchCriteria","setSearchPatternAction","pattern","setSearchPattern","debouncedPattern","sideNavState","setSideNavState","tags","api","typeTags","methodCount","typeCount","types","searchResults","undefined","handleInputChange","value","results","newTags","newTypes","newTypeTags","search","searchPattern","selectedIndex","onSelectTab","size","headlessOffset","menuH","height","HEADER_REM"],"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, Dispatch } from 'react'\nimport React, { useEffect, useState } from 'react'\nimport { useHistory, useLocation } from 'react-router-dom'\nimport {\n TabList,\n Tab,\n TabPanel,\n TabPanels,\n useTabs,\n InputSearch,\n} from '@looker/components'\nimport type {\n SpecItem,\n SpecList,\n ISearchResult,\n ApiModel,\n TagList,\n TypeTagList,\n} from '@looker/sdk-codegen'\nimport { criteriaToSet, tagTypes } from '@looker/sdk-codegen'\nimport { useSelector } from 'react-redux'\n\nimport type { SpecAction } from '../../reducers'\nimport { useWindowSize } from '../../utils'\nimport { HEADER_REM } from '../Header'\nimport { selectSearchCriteria, useActions } from '../../state'\nimport { SideNavMethodTags } from './SideNavMethodTags'\nimport { SideNavTypeTags } from './SideNavTypeTags'\nimport { useDebounce, countMethods, countTypes } from './searchUtils'\nimport { SearchMessage } from './SearchMessage'\n\ninterface SideNavState {\n tags: TagList\n typeTags: TypeTagList\n methodCount: number\n typeCount: number\n searchResults?: ISearchResult\n}\n\ninterface SideNavProps {\n headless?: boolean\n /** Specs to choose from */\n specs: SpecList\n /** Current selected spec */\n spec: SpecItem\n /** Spec state setter */\n specDispatch: Dispatch<SpecAction>\n}\n\nexport const SideNav: FC<SideNavProps> = ({ headless = false, spec }) => {\n const history = useHistory()\n const location = useLocation()\n const specKey = spec.key\n const tabNames = ['methods', 'types']\n const pathParts = location.pathname.split('/')\n const sideNavTab = pathParts[1] === 'diff' ? pathParts[3] : pathParts[2]\n let defaultIndex = tabNames.indexOf(sideNavTab)\n if (defaultIndex < 0) {\n defaultIndex = tabNames.indexOf('methods')\n }\n const onTabChange = (index: number) => {\n const parts = location.pathname.split('/')\n if (parts[1] === 'diff') {\n if (parts[3] !== tabNames[index]) {\n parts[3] = tabNames[index]\n history.push(parts.join('/'))\n }\n } else {\n if (parts[2] !== tabNames[index]) {\n parts[2] = tabNames[index]\n history.push(parts.join('/'))\n }\n }\n }\n const tabs = useTabs({ defaultIndex, onChange: onTabChange })\n const searchCriteria = useSelector(selectSearchCriteria)\n const { setSearchPatternAction } = useActions()\n\n const [pattern, setSearchPattern] = useState('')\n const debouncedPattern = useDebounce(pattern, 250)\n const [sideNavState, setSideNavState] = useState<SideNavState>(() => ({\n tags: spec?.api?.tags || {},\n typeTags: spec?.api?.typeTags || {},\n methodCount: countMethods(spec?.api?.tags || {}),\n typeCount: countTypes(spec?.api?.types || {}),\n searchResults: undefined,\n }))\n const { tags, typeTags, methodCount, typeCount, searchResults } = sideNavState\n\n const handleInputChange = (value: string) => {\n setSearchPattern(value)\n }\n\n useEffect(() => {\n let results\n let newTags\n let newTypes\n let newTypeTags\n const api = spec.api || ({} as ApiModel)\n\n if (debouncedPattern && api.search) {\n results = api.search(pattern, criteriaToSet(searchCriteria))\n newTags = results.tags\n newTypes = results.types\n newTypeTags = tagTypes(api, results.types)\n } else {\n newTags = api.tags || {}\n newTypes = api.types || {}\n newTypeTags = api.typeTags || {}\n }\n\n setSideNavState({\n tags: newTags,\n typeTags: newTypeTags,\n typeCount: countTypes(newTypes),\n methodCount: countMethods(newTags),\n searchResults: results,\n })\n setSearchPatternAction({ searchPattern: debouncedPattern })\n }, [\n debouncedPattern,\n specKey,\n spec,\n setSearchPatternAction,\n pattern,\n searchCriteria,\n ])\n\n useEffect(() => {\n const { selectedIndex, onSelectTab } = tabs\n if (defaultIndex !== selectedIndex) {\n onSelectTab(defaultIndex)\n }\n }, [defaultIndex, tabs])\n\n const size = useWindowSize()\n const headlessOffset = headless ? 200 : 120\n const menuH = size.height - 16 * HEADER_REM - headlessOffset\n\n return (\n <nav>\n <InputSearch\n pl=\"large\"\n pr=\"large\"\n pb=\"large\"\n pt={headless ? 'u3' : 'large'}\n aria-label=\"Search\"\n onChange={handleInputChange}\n placeholder=\"Search\"\n value={pattern}\n isClearable\n />\n <SearchMessage search={searchResults} />\n <TabList {...tabs} distribute>\n <Tab>Methods ({methodCount})</Tab>\n <Tab>Types ({typeCount})</Tab>\n </TabList>\n <TabPanels {...tabs} pt=\"xsmall\" height={`${menuH}px`} overflow=\"auto\">\n <TabPanel>\n <SideNavMethodTags\n tags={tags}\n specKey={specKey}\n defaultOpen={!!searchResults}\n />\n </TabPanel>\n <TabPanel>\n <SideNavTypeTags\n tags={typeTags}\n specKey={specKey}\n defaultOpen={!!searchResults}\n />\n </TabPanel>\n </TabPanels>\n </nav>\n )\n}\n"],"file":"SideNav.js"}
1
+ {"version":3,"sources":["../../../src/components/SideNav/SideNav.tsx"],"names":["SideNav","headless","spec","history","location","specKey","key","tabNames","pathParts","pathname","split","sideNavTab","defaultIndex","indexOf","onTabChange","index","parts","push","join","tabs","onChange","searchCriteria","selectSearchCriteria","setSearchPatternAction","pattern","setSearchPattern","debouncedPattern","sideNavState","setSideNavState","tags","api","typeTags","methodCount","typeCount","types","searchResults","undefined","handleInputChange","value","results","newTags","newTypes","newTypeTags","search","searchPattern","selectedIndex","onSelectTab","size","headlessOffset","menuH","height","HEADER_REM"],"mappings":"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","sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2021 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\n\nimport type { FC } from 'react'\nimport React, { useEffect, useState } from 'react'\nimport { useHistory, useLocation } from 'react-router-dom'\nimport {\n TabList,\n Tab,\n TabPanel,\n TabPanels,\n useTabs,\n InputSearch,\n} from '@looker/components'\nimport type {\n SpecItem,\n ISearchResult,\n ApiModel,\n TagList,\n TypeTagList,\n} from '@looker/sdk-codegen'\nimport { criteriaToSet, tagTypes } from '@looker/sdk-codegen'\nimport { useSelector } from 'react-redux'\n\nimport { useWindowSize } from '../../utils'\nimport { HEADER_REM } from '../Header'\nimport { selectSearchCriteria, useSettingActions } from '../../state'\nimport { SideNavMethodTags } from './SideNavMethodTags'\nimport { SideNavTypeTags } from './SideNavTypeTags'\nimport { useDebounce, countMethods, countTypes } from './searchUtils'\nimport { SearchMessage } from './SearchMessage'\n\ninterface SideNavState {\n tags: TagList\n typeTags: TypeTagList\n methodCount: number\n typeCount: number\n searchResults?: ISearchResult\n}\n\ninterface SideNavProps {\n headless?: boolean\n /** Current selected spec */\n spec: SpecItem\n}\n\nexport const SideNav: FC<SideNavProps> = ({ headless = false, spec }) => {\n const history = useHistory()\n const location = useLocation()\n const specKey = spec.key\n const tabNames = ['methods', 'types']\n const pathParts = location.pathname.split('/')\n const sideNavTab = pathParts[1] === 'diff' ? pathParts[3] : pathParts[2]\n let defaultIndex = tabNames.indexOf(sideNavTab)\n if (defaultIndex < 0) {\n defaultIndex = tabNames.indexOf('methods')\n }\n const onTabChange = (index: number) => {\n const parts = location.pathname.split('/')\n if (parts[1] === 'diff') {\n if (parts[3] !== tabNames[index]) {\n parts[3] = tabNames[index]\n history.push(parts.join('/'))\n }\n } else {\n if (parts[2] !== tabNames[index]) {\n parts[2] = tabNames[index]\n history.push(parts.join('/'))\n }\n }\n }\n const tabs = useTabs({ defaultIndex, onChange: onTabChange })\n const searchCriteria = useSelector(selectSearchCriteria)\n const { setSearchPatternAction } = useSettingActions()\n\n const [pattern, setSearchPattern] = useState('')\n const debouncedPattern = useDebounce(pattern, 250)\n const [sideNavState, setSideNavState] = useState<SideNavState>(() => ({\n tags: spec?.api?.tags || {},\n typeTags: spec?.api?.typeTags || {},\n methodCount: countMethods(spec?.api?.tags || {}),\n typeCount: countTypes(spec?.api?.types || {}),\n searchResults: undefined,\n }))\n const { tags, typeTags, methodCount, typeCount, searchResults } = sideNavState\n\n const handleInputChange = (value: string) => {\n setSearchPattern(value)\n }\n\n useEffect(() => {\n let results\n let newTags\n let newTypes\n let newTypeTags\n const api = spec.api || ({} as ApiModel)\n\n if (debouncedPattern && api.search) {\n results = api.search(pattern, criteriaToSet(searchCriteria))\n newTags = results.tags\n newTypes = results.types\n newTypeTags = tagTypes(api, results.types)\n } else {\n newTags = api.tags || {}\n newTypes = api.types || {}\n newTypeTags = api.typeTags || {}\n }\n\n setSideNavState({\n tags: newTags,\n typeTags: newTypeTags,\n typeCount: countTypes(newTypes),\n methodCount: countMethods(newTags),\n searchResults: results,\n })\n setSearchPatternAction({ searchPattern: debouncedPattern })\n }, [\n debouncedPattern,\n specKey,\n spec,\n setSearchPatternAction,\n pattern,\n searchCriteria,\n ])\n\n useEffect(() => {\n const { selectedIndex, onSelectTab } = tabs\n if (defaultIndex !== selectedIndex) {\n onSelectTab(defaultIndex)\n }\n }, [defaultIndex, tabs])\n\n const size = useWindowSize()\n const headlessOffset = headless ? 200 : 120\n const menuH = size.height - 16 * HEADER_REM - headlessOffset\n\n return (\n <nav>\n <InputSearch\n pl=\"large\"\n pr=\"large\"\n pb=\"large\"\n pt={headless ? 'u3' : 'large'}\n aria-label=\"Search\"\n onChange={handleInputChange}\n placeholder=\"Search\"\n value={pattern}\n isClearable\n />\n <SearchMessage search={searchResults} />\n <TabList {...tabs} distribute>\n <Tab>Methods ({methodCount})</Tab>\n <Tab>Types ({typeCount})</Tab>\n </TabList>\n <TabPanels {...tabs} pt=\"xsmall\" height={`${menuH}px`} overflow=\"auto\">\n <TabPanel>\n <SideNavMethodTags\n tags={tags}\n specKey={specKey}\n defaultOpen={!!searchResults}\n />\n </TabPanel>\n <TabPanel>\n <SideNavTypeTags\n tags={typeTags}\n specKey={specKey}\n defaultOpen={!!searchResults}\n />\n </TabPanel>\n </TabPanels>\n </nav>\n )\n}\n"],"file":"SideNav.js"}
@@ -1,5 +1,5 @@
1
1
  import type { FC } from 'react';
2
- import type { ThemeOverrides } from '../../utils';
2
+ import type { ThemeOverrides } from '@looker/extension-utils';
3
3
  export interface LoaderProps {
4
4
  themeOverrides: ThemeOverrides;
5
5
  message?: string;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/common/Loader.tsx"],"names":["Loader","themeOverrides","message"],"mappings":";;;;;;;AA0BA;;AACA;;;;AAcO,IAAMA,MAAuB,GAAG;AAAA,MAAC;AACtCC,IAAAA,cADsC;AAEtCC,IAAAA,OAAO,GAAG;AAF4B,GAAD;AAAA,SAIrC,6BAAC,8BAAD,EAAwBD,cAAxB,EACE,6BAAC,gBAAD;AAAM,IAAA,aAAa,EAAC,QAApB;AAA6B,IAAA,cAAc,EAAC,QAA5C;AAAqD,IAAA,EAAE,EAAC;AAAxD,KACE,6BAAC,oBAAD;AAAU,IAAA,SAAS,EAAC;AAApB,KACE,6BAAC,4BAAD;AAAkB,IAAA,IAAI,EAAC;AAAvB,IADF,CADF,EAIE,6BAAC,oBAAD;AAAU,IAAA,EAAE,EAAC,OAAb;AAAqB,IAAA,SAAS,EAAC;AAA/B,KACE,6BAAC,mBAAD;AAAS,IAAA,KAAK,EAAC,KAAf;AAAqB,IAAA,EAAE,EAAC;AAAxB,KACGC,OADH,CADF,CAJF,CADF,CAJqC;AAAA,CAAhC","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 type { FC } from 'react'\nimport React from 'react'\nimport {\n ComponentsProvider,\n Flex,\n FlexItem,\n Heading,\n ProgressCircular,\n} from '@looker/components'\nimport type { ThemeOverrides } from '../../utils'\n\nexport interface LoaderProps {\n themeOverrides: ThemeOverrides\n message?: string\n}\n\nexport const Loader: FC<LoaderProps> = ({\n themeOverrides,\n message = 'Loading API Specifications',\n}) => (\n <ComponentsProvider {...themeOverrides}>\n <Flex flexDirection=\"column\" justifyContent=\"center\" mt=\"25%\">\n <FlexItem alignSelf=\"center\">\n <ProgressCircular size=\"large\" />\n </FlexItem>\n <FlexItem mt=\"large\" alignSelf=\"center\">\n <Heading color=\"key\" as=\"h2\">\n {message}\n </Heading>\n </FlexItem>\n </Flex>\n </ComponentsProvider>\n)\n"],"file":"Loader.js"}
1
+ {"version":3,"sources":["../../../src/components/common/Loader.tsx"],"names":["Loader","themeOverrides","message"],"mappings":";;;;;;;AA0BA;;AACA;;;;AAcO,IAAMA,MAAuB,GAAG;AAAA,MAAC;AACtCC,IAAAA,cADsC;AAEtCC,IAAAA,OAAO,GAAG;AAF4B,GAAD;AAAA,SAIrC,6BAAC,8BAAD,EAAwBD,cAAxB,EACE,6BAAC,gBAAD;AAAM,IAAA,aAAa,EAAC,QAApB;AAA6B,IAAA,cAAc,EAAC,QAA5C;AAAqD,IAAA,EAAE,EAAC;AAAxD,KACE,6BAAC,oBAAD;AAAU,IAAA,SAAS,EAAC;AAApB,KACE,6BAAC,4BAAD;AAAkB,IAAA,IAAI,EAAC;AAAvB,IADF,CADF,EAIE,6BAAC,oBAAD;AAAU,IAAA,EAAE,EAAC,OAAb;AAAqB,IAAA,SAAS,EAAC;AAA/B,KACE,6BAAC,mBAAD;AAAS,IAAA,KAAK,EAAC,KAAf;AAAqB,IAAA,EAAE,EAAC;AAAxB,KACGC,OADH,CADF,CAJF,CADF,CAJqC;AAAA,CAAhC","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 type { FC } from 'react'\nimport React from 'react'\nimport {\n ComponentsProvider,\n Flex,\n FlexItem,\n Heading,\n ProgressCircular,\n} from '@looker/components'\nimport type { ThemeOverrides } from '@looker/extension-utils'\n\nexport interface LoaderProps {\n themeOverrides: ThemeOverrides\n message?: string\n}\n\nexport const Loader: FC<LoaderProps> = ({\n themeOverrides,\n message = 'Loading API Specifications',\n}) => (\n <ComponentsProvider {...themeOverrides}>\n <Flex flexDirection=\"column\" justifyContent=\"center\" mt=\"25%\">\n <FlexItem alignSelf=\"center\">\n <ProgressCircular size=\"large\" />\n </FlexItem>\n <FlexItem mt=\"large\" alignSelf=\"center\">\n <Heading color=\"key\" as=\"h2\">\n {message}\n </Heading>\n </FlexItem>\n </Flex>\n </ComponentsProvider>\n)\n"],"file":"Loader.js"}
@@ -20,3 +20,4 @@ export { DocTypeSummary } from './DocTypeSummary';
20
20
  export { Link } from './Link';
21
21
  export { ErrorBoundary } from './ErrorBoundary';
22
22
  export { SelectorContainer } from './SelectorContainer';
23
+ export { Banner } from './Banner';
@@ -159,6 +159,12 @@ Object.defineProperty(exports, "SelectorContainer", {
159
159
  return _SelectorContainer.SelectorContainer;
160
160
  }
161
161
  });
162
+ Object.defineProperty(exports, "Banner", {
163
+ enumerable: true,
164
+ get: function get() {
165
+ return _Banner.Banner;
166
+ }
167
+ });
162
168
 
163
169
  var _common = require("./common");
164
170
 
@@ -203,4 +209,6 @@ var _Link = require("./Link");
203
209
  var _ErrorBoundary = require("./ErrorBoundary");
204
210
 
205
211
  var _SelectorContainer = require("./SelectorContainer");
212
+
213
+ var _Banner = require("./Banner");
206
214
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyBA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA","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 */\nexport { ApixSection, Loader } from './common'\nexport { DocActivityType } from './DocActivityType'\nexport { DocCode } from './DocCode'\nexport { DocMethodSummary, DocSummaryStatus } from './DocMethodSummary'\nexport { DocMarkdown } from './DocMarkdown'\nexport { DocPseudo } from './DocPseudo'\nexport { DocRateLimited } from './DocRateLimited'\nexport { DocReferences } from './DocReferences'\nexport { DocResponses } from './DocResponses'\nexport { DocSDKs } from './DocSDKs'\nexport { DocSdkUsage } from './DocSdkUsage'\nexport { DocSource } from './DocSource'\nexport { DocStatus } from './DocStatus'\nexport { DocTitle } from './DocTitle'\nexport { Header, HEADER_TOGGLE_LABEL } from './Header'\nexport { SideNav } from './SideNav'\nexport { ExploreType, ExploreProperty } from './ExploreType'\nexport { DocSchema } from './DocSchema'\nexport { DocTypeSummary } from './DocTypeSummary'\nexport { Link } from './Link'\nexport { ErrorBoundary } from './ErrorBoundary'\nexport { SelectorContainer } from './SelectorContainer'\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../../src/components/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyBA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA","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 */\nexport { ApixSection, Loader } from './common'\nexport { DocActivityType } from './DocActivityType'\nexport { DocCode } from './DocCode'\nexport { DocMethodSummary, DocSummaryStatus } from './DocMethodSummary'\nexport { DocMarkdown } from './DocMarkdown'\nexport { DocPseudo } from './DocPseudo'\nexport { DocRateLimited } from './DocRateLimited'\nexport { DocReferences } from './DocReferences'\nexport { DocResponses } from './DocResponses'\nexport { DocSDKs } from './DocSDKs'\nexport { DocSdkUsage } from './DocSdkUsage'\nexport { DocSource } from './DocSource'\nexport { DocStatus } from './DocStatus'\nexport { DocTitle } from './DocTitle'\nexport { Header, HEADER_TOGGLE_LABEL } from './Header'\nexport { SideNav } from './SideNav'\nexport { ExploreType, ExploreProperty } from './ExploreType'\nexport { DocSchema } from './DocSchema'\nexport { DocTypeSummary } from './DocTypeSummary'\nexport { Link } from './Link'\nexport { ErrorBoundary } from './ErrorBoundary'\nexport { SelectorContainer } from './SelectorContainer'\nexport { Banner } from './Banner'\n"],"file":"index.js"}
@@ -1,55 +1,49 @@
1
1
  var _templateObject;
2
2
 
3
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
4
-
5
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
6
-
7
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
8
-
9
- function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
10
-
11
- function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
12
-
13
3
  function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
14
4
 
15
- import React, { useReducer, useState, useEffect, useCallback } from 'react';
16
- import { useLocation } from 'react-router';
5
+ import React, { useState, useEffect, useCallback } from 'react';
17
6
  import styled, { createGlobalStyle } from 'styled-components';
18
7
  import { Aside, ComponentsProvider, Divider, Heading, IconButton, Layout, Page, Space } from '@looker/components';
19
- import { funFetch, fallbackFetch, OAuthScene } from '@looker/run-it';
20
8
  import { FirstPage } from '@styled-icons/material/FirstPage';
21
9
  import { LastPage } from '@styled-icons/material/LastPage';
22
- import { LodeContext, defaultLodeContextValue } from './context';
23
- import { getLoded, oAuthPath, registerEnvAdaptor, unregisterEnvAdaptor } from './utils';
24
- import { Header, SideNav, ErrorBoundary, Loader, SelectorContainer, HEADER_TOGGLE_LABEL } from './components';
25
- import { specReducer, initDefaultSpecState, updateSpecApi } from './reducers';
10
+ import { registerEnvAdaptor, unregisterEnvAdaptor } from '@looker/extension-utils';
11
+ import { useSelector } from 'react-redux';
12
+ import { useLocation } from 'react-router-dom';
13
+ import { Header, SideNav, ErrorBoundary, SelectorContainer, HEADER_TOGGLE_LABEL, Loader, Banner } from './components';
26
14
  import { AppRouter } from './routes';
27
15
  import { apixFilesHost } from './utils/lodeUtils';
28
- import { useActions, useSettingsStoreState } from './state';
29
- export var BodyOverride = createGlobalStyle(_templateObject || (_templateObject = _taggedTemplateLiteral([" html { height: 100%; overflow: hidden; } "])));
16
+ import { useSettingActions, useSettingStoreState, useLodeActions, useLodesStoreState, useSpecActions, useSpecStoreState, selectSpecs, selectCurrentSpec } from './state';
17
+ import { getSpecKey, diffPath } from './utils';
18
+ var BodyOverride = createGlobalStyle(_templateObject || (_templateObject = _taggedTemplateLiteral([" html { height: 100%; overflow: hidden; } "])));
19
+ export var ApiExplorer = _ref => {
20
+ var _location$pathname2;
30
21
 
31
- var ApiExplorer = _ref => {
32
22
  var {
33
- specs,
34
- envAdaptor,
35
- setVersionsUrl,
36
- exampleLodeUrl = 'https://raw.githubusercontent.com/looker-open-source/sdk-codegen/main/examplesIndex.json',
23
+ adaptor,
24
+ examplesLodeUrl = 'https://raw.githubusercontent.com/looker-open-source/sdk-codegen/main/examplesIndex.json',
37
25
  declarationsLodeUrl = "".concat(apixFilesHost, "/declarationsIndex.json"),
38
26
  headless = false
39
27
  } = _ref;
28
+ useSettingStoreState();
29
+ useLodesStoreState();
40
30
  var {
41
- initialized
42
- } = useSettingsStoreState();
31
+ working,
32
+ description
33
+ } = useSpecStoreState();
34
+ var specs = useSelector(selectSpecs);
35
+ var spec = useSelector(selectCurrentSpec);
43
36
  var {
44
- initAction
45
- } = useActions();
46
- var location = useLocation();
47
- var oauthReturn = location.pathname === "/".concat(oAuthPath);
48
- var [specState, specDispatch] = useReducer(specReducer, initDefaultSpecState(specs, location));
37
+ initLodesAction
38
+ } = useLodeActions();
49
39
  var {
50
- spec
51
- } = specState;
52
- var [lode, setLode] = useState(defaultLodeContextValue);
40
+ initSettingsAction
41
+ } = useSettingActions();
42
+ var {
43
+ initSpecsAction,
44
+ setCurrentSpecAction
45
+ } = useSpecActions();
46
+ var location = useLocation();
53
47
  var [hasNavigation, setHasNavigation] = useState(true);
54
48
 
55
49
  var toggleNavigation = target => setHasNavigation(target || !hasNavigation);
@@ -59,11 +53,30 @@ var ApiExplorer = _ref => {
59
53
  setHasNavigation(currentHasNavigation => !currentHasNavigation);
60
54
  }
61
55
  }, []);
56
+ registerEnvAdaptor(adaptor);
62
57
  useEffect(() => {
63
- registerEnvAdaptor(envAdaptor);
64
- initAction();
58
+ initSettingsAction();
59
+ initLodesAction({
60
+ examplesLodeUrl,
61
+ declarationsLodeUrl
62
+ });
63
+ var specKey = getSpecKey(location);
64
+ initSpecsAction({
65
+ specKey
66
+ });
65
67
  return () => unregisterEnvAdaptor();
66
68
  }, []);
69
+ useEffect(() => {
70
+ var _location$pathname;
71
+
72
+ var maybeSpec = (_location$pathname = location.pathname) === null || _location$pathname === void 0 ? void 0 : _location$pathname.split('/')[1];
73
+
74
+ if (spec && maybeSpec && maybeSpec !== diffPath && maybeSpec !== spec.key) {
75
+ setCurrentSpecAction({
76
+ currentSpecKey: maybeSpec
77
+ });
78
+ }
79
+ }, [location.pathname, spec]);
67
80
  useEffect(() => {
68
81
  if (headless) {
69
82
  window.addEventListener('message', hasNavigationToggle);
@@ -75,56 +88,30 @@ var ApiExplorer = _ref => {
75
88
  }
76
89
  };
77
90
  }, [headless, hasNavigationToggle]);
78
- useEffect(() => {
79
- var loadSpec = function () {
80
- var _ref2 = _asyncToGenerator(function* () {
81
- if (!spec.api) {
82
- try {
83
- var newSpec = _objectSpread({}, spec);
91
+ var themeOverrides = adaptor.themeOverrides();
92
+ var neededSpec = (_location$pathname2 = location.pathname) === null || _location$pathname2 === void 0 ? void 0 : _location$pathname2.split('/')[1];
84
93
 
85
- var api = yield fallbackFetch(newSpec, funFetch);
94
+ if (!neededSpec || neededSpec === diffPath) {
95
+ neededSpec = spec === null || spec === void 0 ? void 0 : spec.key;
96
+ }
86
97
 
87
- if (api) {
88
- spec.api = api;
89
- specDispatch(updateSpecApi(spec.key, api));
90
- }
91
- } catch (error) {
92
- console.error(error);
93
- }
94
- }
95
- });
96
-
97
- return function loadSpec() {
98
- return _ref2.apply(this, arguments);
99
- };
100
- }();
101
-
102
- if (!oauthReturn) {
103
- loadSpec();
104
- }
105
- }, [spec, location]);
106
- useEffect(() => {
107
- getLoded(exampleLodeUrl, declarationsLodeUrl).then(resp => setLode(resp));
108
- }, [exampleLodeUrl, declarationsLodeUrl]);
109
- var themeOverrides = envAdaptor.themeOverrides();
110
98
  return React.createElement(React.Fragment, null, React.createElement(ComponentsProvider, {
111
99
  loadGoogleFonts: themeOverrides.loadGoogleFonts,
112
100
  themeCustomizations: themeOverrides.themeCustomizations
113
- }, !initialized ? React.createElement(Loader, {
114
- message: "Initializing",
101
+ }, working || !neededSpec || neededSpec !== spec.key ? React.createElement(Loader, {
102
+ message: description,
115
103
  themeOverrides: themeOverrides
116
104
  }) : React.createElement(ErrorBoundary, {
117
- logError: envAdaptor.logError.bind(envAdaptor)
118
- }, React.createElement(LodeContext.Provider, {
119
- value: _objectSpread({}, lode)
120
- }, React.createElement(Page, {
105
+ logError: adaptor.logError.bind(adaptor)
106
+ }, React.createElement(Banner, {
107
+ adaptor: adaptor,
108
+ specs: specs
109
+ }), React.createElement(Page, {
121
110
  style: {
122
111
  overflow: 'hidden'
123
112
  }
124
113
  }, !headless && React.createElement(Header, {
125
- specs: specs,
126
114
  spec: spec,
127
- specDispatch: specDispatch,
128
115
  toggleNavigation: toggleNavigation
129
116
  }), React.createElement(Layout, {
130
117
  hasAside: true,
@@ -153,35 +140,27 @@ var ApiExplorer = _ref => {
153
140
  mb: "u3",
154
141
  appearance: "light"
155
142
  }), React.createElement(SelectorContainer, {
156
- ml: "large",
157
- mr: "large",
158
- specs: specs,
159
143
  spec: spec,
160
- specDispatch: specDispatch
144
+ ml: "large",
145
+ mr: "large"
161
146
  }))), hasNavigation && React.createElement(SideNav, {
162
147
  headless: headless,
163
- specs: specs,
164
- spec: spec,
165
- specDispatch: specDispatch
166
- })), oauthReturn && React.createElement(OAuthScene, null), !oauthReturn && spec.api && React.createElement(AppRouter, {
167
- api: spec.api,
148
+ spec: spec
149
+ })), React.createElement(AppRouter, {
168
150
  specKey: spec.key,
151
+ api: spec.api,
169
152
  specs: specs,
170
- toggleNavigation: toggleNavigation,
171
- envAdaptor: envAdaptor,
172
- setVersionsUrl: setVersionsUrl
173
- })))))), !headless && React.createElement(BodyOverride, null));
153
+ toggleNavigation: toggleNavigation
154
+ }))))), !headless && React.createElement(BodyOverride, null));
174
155
  };
175
-
176
- export var AsideBorder = styled(Aside).withConfig({
156
+ var AsideBorder = styled(Aside).withConfig({
177
157
  displayName: "ApiExplorer__AsideBorder",
178
158
  componentId: "sc-1ynh530-0"
179
- })(["width:", ";"], _ref3 => {
159
+ })(["width:", ";"], _ref2 => {
180
160
  var {
181
161
  isOpen,
182
162
  headless
183
- } = _ref3;
163
+ } = _ref2;
184
164
  return isOpen ? '20rem' : headless ? '2.75rem' : '0rem';
185
165
  });
186
- export default ApiExplorer;
187
166
  //# sourceMappingURL=ApiExplorer.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/ApiExplorer.tsx"],"names":["React","useReducer","useState","useEffect","useCallback","useLocation","styled","createGlobalStyle","Aside","ComponentsProvider","Divider","Heading","IconButton","Layout","Page","Space","funFetch","fallbackFetch","OAuthScene","FirstPage","LastPage","LodeContext","defaultLodeContextValue","getLoded","oAuthPath","registerEnvAdaptor","unregisterEnvAdaptor","Header","SideNav","ErrorBoundary","Loader","SelectorContainer","HEADER_TOGGLE_LABEL","specReducer","initDefaultSpecState","updateSpecApi","AppRouter","apixFilesHost","useActions","useSettingsStoreState","BodyOverride","ApiExplorer","specs","envAdaptor","setVersionsUrl","exampleLodeUrl","declarationsLodeUrl","headless","initialized","initAction","location","oauthReturn","pathname","specState","specDispatch","spec","lode","setLode","hasNavigation","setHasNavigation","toggleNavigation","target","hasNavigationToggle","e","origin","window","data","action","currentHasNavigation","addEventListener","removeEventListener","loadSpec","api","newSpec","key","error","console","then","resp","themeOverrides","loadGoogleFonts","themeCustomizations","logError","bind","overflow","AsideBorder","isOpen"],"mappings":"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","sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2021 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\n\nimport type { FC } from 'react'\nimport React, { useReducer, useState, useEffect, useCallback } from 'react'\nimport { useLocation } from 'react-router'\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 type { SpecList } from '@looker/sdk-codegen'\nimport type { RunItSetter } from '@looker/run-it'\nimport { funFetch, fallbackFetch, OAuthScene } from '@looker/run-it'\nimport { FirstPage } from '@styled-icons/material/FirstPage'\nimport { LastPage } from '@styled-icons/material/LastPage'\n\nimport { LodeContext, defaultLodeContextValue } from './context'\nimport type { IApixEnvAdaptor } from './utils'\nimport {\n getLoded,\n oAuthPath,\n registerEnvAdaptor,\n unregisterEnvAdaptor,\n} from './utils'\nimport {\n Header,\n SideNav,\n ErrorBoundary,\n Loader,\n SelectorContainer,\n HEADER_TOGGLE_LABEL,\n} from './components'\nimport { specReducer, initDefaultSpecState, updateSpecApi } from './reducers'\nimport { AppRouter } from './routes'\nimport { apixFilesHost } from './utils/lodeUtils'\nimport { useActions, useSettingsStoreState } from './state'\n\nexport interface ApiExplorerProps {\n specs: SpecList\n envAdaptor: IApixEnvAdaptor\n setVersionsUrl: RunItSetter\n exampleLodeUrl?: string\n declarationsLodeUrl?: string\n headless?: boolean\n}\n\nexport const BodyOverride = createGlobalStyle` html { height: 100%; overflow: hidden; } `\n\nconst ApiExplorer: FC<ApiExplorerProps> = ({\n specs,\n envAdaptor,\n setVersionsUrl,\n exampleLodeUrl = 'https://raw.githubusercontent.com/looker-open-source/sdk-codegen/main/examplesIndex.json',\n declarationsLodeUrl = `${apixFilesHost}/declarationsIndex.json`,\n headless = false,\n}) => {\n const { initialized } = useSettingsStoreState()\n const { initAction } = useActions()\n const location = useLocation()\n const oauthReturn = location.pathname === `/${oAuthPath}`\n const [specState, specDispatch] = useReducer(\n specReducer,\n initDefaultSpecState(specs, location)\n )\n const { spec } = specState\n\n const [lode, setLode] = useState(defaultLodeContextValue)\n\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 useEffect(() => {\n registerEnvAdaptor(envAdaptor)\n initAction()\n\n return () => unregisterEnvAdaptor()\n }, [])\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 useEffect(() => {\n const loadSpec = async () => {\n if (!spec.api) {\n try {\n const newSpec = { ...spec }\n const api = await fallbackFetch(newSpec, funFetch)\n if (api) {\n spec.api = api\n specDispatch(updateSpecApi(spec.key, api))\n }\n } catch (error) {\n console.error(error)\n }\n }\n }\n if (!oauthReturn) {\n loadSpec()\n }\n }, [spec, location])\n\n useEffect(() => {\n getLoded(exampleLodeUrl, declarationsLodeUrl).then((resp) => setLode(resp))\n }, [exampleLodeUrl, declarationsLodeUrl])\n\n const themeOverrides = envAdaptor.themeOverrides()\n\n return (\n <>\n <ComponentsProvider\n loadGoogleFonts={themeOverrides.loadGoogleFonts}\n themeCustomizations={themeOverrides.themeCustomizations}\n >\n {!initialized ? (\n <Loader message=\"Initializing\" themeOverrides={themeOverrides} />\n ) : (\n <ErrorBoundary logError={envAdaptor.logError.bind(envAdaptor)}>\n <LodeContext.Provider value={{ ...lode }}>\n <Page style={{ overflow: 'hidden' }}>\n {!headless && (\n <Header\n specs={specs}\n spec={spec}\n specDispatch={specDispatch}\n toggleNavigation={toggleNavigation}\n />\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 ml=\"large\"\n mr=\"large\"\n specs={specs}\n spec={spec}\n specDispatch={specDispatch}\n />\n </>\n )}\n </>\n )}\n {hasNavigation && (\n <SideNav\n headless={headless}\n specs={specs}\n spec={spec}\n specDispatch={specDispatch}\n />\n )}\n </AsideBorder>\n {oauthReturn && <OAuthScene />}\n {!oauthReturn && spec.api && (\n <AppRouter\n api={spec.api}\n specKey={spec.key}\n specs={specs}\n toggleNavigation={toggleNavigation}\n envAdaptor={envAdaptor}\n setVersionsUrl={setVersionsUrl}\n />\n )}\n </Layout>\n </Page>\n </LodeContext.Provider>\n </ErrorBoundary>\n )}\n </ComponentsProvider>\n {!headless && <BodyOverride />}\n </>\n )\n}\n\nexport const AsideBorder = styled(Aside)<{\n isOpen: boolean\n headless: boolean\n}>`\n width: ${({ isOpen, headless }) =>\n isOpen ? '20rem' : headless ? '2.75rem' : '0rem'};\n`\nexport default ApiExplorer\n"],"file":"ApiExplorer.js"}
1
+ {"version":3,"sources":["../../src/ApiExplorer.tsx"],"names":["React","useState","useEffect","useCallback","styled","createGlobalStyle","Aside","ComponentsProvider","Divider","Heading","IconButton","Layout","Page","Space","FirstPage","LastPage","registerEnvAdaptor","unregisterEnvAdaptor","useSelector","useLocation","Header","SideNav","ErrorBoundary","SelectorContainer","HEADER_TOGGLE_LABEL","Loader","Banner","AppRouter","apixFilesHost","useSettingActions","useSettingStoreState","useLodeActions","useLodesStoreState","useSpecActions","useSpecStoreState","selectSpecs","selectCurrentSpec","getSpecKey","diffPath","BodyOverride","ApiExplorer","adaptor","examplesLodeUrl","declarationsLodeUrl","headless","working","description","specs","spec","initLodesAction","initSettingsAction","initSpecsAction","setCurrentSpecAction","location","hasNavigation","setHasNavigation","toggleNavigation","target","hasNavigationToggle","e","origin","window","data","action","currentHasNavigation","specKey","maybeSpec","pathname","split","key","currentSpecKey","addEventListener","removeEventListener","themeOverrides","neededSpec","loadGoogleFonts","themeCustomizations","logError","bind","overflow","api","AsideBorder","isOpen"],"mappings":"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","sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2021 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\n\nimport type { FC } from 'react'\nimport React, { useState, useEffect, useCallback } from 'react'\nimport styled, { createGlobalStyle } from 'styled-components'\nimport {\n Aside,\n ComponentsProvider,\n Divider,\n Heading,\n IconButton,\n Layout,\n Page,\n Space,\n} from '@looker/components'\nimport { FirstPage } from '@styled-icons/material/FirstPage'\nimport { LastPage } from '@styled-icons/material/LastPage'\nimport {\n registerEnvAdaptor,\n unregisterEnvAdaptor,\n} from '@looker/extension-utils'\nimport { useSelector } from 'react-redux'\nimport { useLocation } from 'react-router-dom'\n\nimport type { IApixAdaptor } from './utils'\nimport {\n Header,\n SideNav,\n ErrorBoundary,\n SelectorContainer,\n HEADER_TOGGLE_LABEL,\n Loader,\n Banner,\n} from './components'\nimport { AppRouter } from './routes'\nimport { apixFilesHost } from './utils/lodeUtils'\nimport {\n useSettingActions,\n useSettingStoreState,\n useLodeActions,\n useLodesStoreState,\n useSpecActions,\n useSpecStoreState,\n selectSpecs,\n selectCurrentSpec,\n} from './state'\nimport { getSpecKey, diffPath } from './utils'\n\nexport interface ApiExplorerProps {\n adaptor: IApixAdaptor\n examplesLodeUrl?: string\n declarationsLodeUrl?: string\n headless?: boolean\n}\n\nconst BodyOverride = createGlobalStyle` html { height: 100%; overflow: hidden; } `\n\nexport const ApiExplorer: FC<ApiExplorerProps> = ({\n adaptor,\n examplesLodeUrl = 'https://raw.githubusercontent.com/looker-open-source/sdk-codegen/main/examplesIndex.json',\n declarationsLodeUrl = `${apixFilesHost}/declarationsIndex.json`,\n headless = false,\n}) => {\n useSettingStoreState()\n useLodesStoreState()\n const { working, description } = useSpecStoreState()\n const specs = useSelector(selectSpecs)\n const spec = useSelector(selectCurrentSpec)\n const { initLodesAction } = useLodeActions()\n const { initSettingsAction } = useSettingActions()\n const { initSpecsAction, setCurrentSpecAction } = useSpecActions()\n\n const location = useLocation()\n const [hasNavigation, setHasNavigation] = useState(true)\n const toggleNavigation = (target?: boolean) =>\n setHasNavigation(target || !hasNavigation)\n\n const hasNavigationToggle = useCallback((e: MessageEvent<any>) => {\n if (e.origin === window.origin && e.data.action === 'toggle_sidebar') {\n setHasNavigation((currentHasNavigation) => !currentHasNavigation)\n }\n }, [])\n\n registerEnvAdaptor(adaptor)\n\n useEffect(() => {\n initSettingsAction()\n initLodesAction({ examplesLodeUrl, declarationsLodeUrl })\n\n const specKey = getSpecKey(location)\n initSpecsAction({ specKey })\n return () => unregisterEnvAdaptor()\n }, [])\n\n useEffect(() => {\n const maybeSpec = location.pathname?.split('/')[1]\n if (spec && maybeSpec && maybeSpec !== diffPath && maybeSpec !== spec.key) {\n setCurrentSpecAction({ currentSpecKey: maybeSpec })\n }\n }, [location.pathname, spec])\n\n useEffect(() => {\n if (headless) {\n window.addEventListener('message', hasNavigationToggle)\n }\n return () => {\n if (headless) {\n window.removeEventListener('message', hasNavigationToggle)\n }\n }\n }, [headless, hasNavigationToggle])\n\n const themeOverrides = adaptor.themeOverrides()\n\n let neededSpec = location.pathname?.split('/')[1]\n if (!neededSpec || neededSpec === diffPath) {\n neededSpec = spec?.key\n }\n\n return (\n <>\n <ComponentsProvider\n loadGoogleFonts={themeOverrides.loadGoogleFonts}\n themeCustomizations={themeOverrides.themeCustomizations}\n >\n {working || !neededSpec || neededSpec !== spec.key ? (\n <Loader message={description} themeOverrides={themeOverrides} />\n ) : (\n <ErrorBoundary logError={adaptor.logError.bind(adaptor)}>\n <Banner adaptor={adaptor} specs={specs} />\n <Page style={{ overflow: 'hidden' }}>\n {!headless && (\n <Header spec={spec} toggleNavigation={toggleNavigation} />\n )}\n <Layout hasAside height=\"100%\">\n <AsideBorder\n borderRight\n isOpen={hasNavigation}\n headless={headless}\n >\n {headless && (\n <>\n <Space\n alignItems=\"center\"\n py=\"u3\"\n px={hasNavigation ? 'u5' : '0'}\n justifyContent={\n hasNavigation ? 'space-between' : 'center'\n }\n >\n {hasNavigation && (\n <Heading\n as=\"h2\"\n fontSize=\"xsmall\"\n fontWeight=\"bold\"\n color=\"text2\"\n >\n API DOCUMENTATION\n </Heading>\n )}\n <IconButton\n size=\"xsmall\"\n shape=\"round\"\n icon={hasNavigation ? <FirstPage /> : <LastPage />}\n label={HEADER_TOGGLE_LABEL}\n onClick={() => toggleNavigation()}\n />\n </Space>\n {hasNavigation && (\n <>\n <Divider mb=\"u3\" appearance=\"light\" />\n <SelectorContainer\n spec={spec}\n ml=\"large\"\n mr=\"large\"\n />\n </>\n )}\n </>\n )}\n {hasNavigation && <SideNav headless={headless} spec={spec} />}\n </AsideBorder>\n <AppRouter\n specKey={spec.key}\n api={spec.api!}\n specs={specs}\n toggleNavigation={toggleNavigation}\n />\n </Layout>\n </Page>\n </ErrorBoundary>\n )}\n </ComponentsProvider>\n {!headless && <BodyOverride />}\n </>\n )\n}\n\nconst AsideBorder = styled(Aside)<{\n isOpen: boolean\n headless: boolean\n}>`\n width: ${({ isOpen, headless }) =>\n isOpen ? '20rem' : headless ? '2.75rem' : '0rem'};\n`\n"],"file":"ApiExplorer.js"}
package/lib/esm/App.js ADDED
@@ -0,0 +1,19 @@
1
+ var _templateObject;
2
+
3
+ function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
4
+
5
+ import React from 'react';
6
+ import { BrowserRouter as Router } from 'react-router-dom';
7
+ import ReactDOM from 'react-dom';
8
+ import { createGlobalStyle } from 'styled-components';
9
+ import { StandaloneApiExplorer } from './StandaloneApiExplorer';
10
+ var BodyReset = createGlobalStyle(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n body {\n margin: 0;\n }\n"])));
11
+ var basename = window.LOOKER_DEV_PORTAL ? window.LOOKER_DEV_PORTAL.basename : undefined;
12
+ var versionsUrl = new URL('versions.json', window.location.origin).toString();
13
+ ReactDOM.render(React.createElement(Router, {
14
+ basename: basename
15
+ }, React.createElement(StandaloneApiExplorer, {
16
+ versionsUrl: versionsUrl,
17
+ headless: !!basename
18
+ }), React.createElement(BodyReset, null)), document.getElementById('container'));
19
+ //# sourceMappingURL=App.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/App.tsx"],"names":["React","BrowserRouter","Router","ReactDOM","createGlobalStyle","StandaloneApiExplorer","BodyReset","basename","window","LOOKER_DEV_PORTAL","undefined","versionsUrl","URL","location","origin","toString","render","document","getElementById"],"mappings":";;;;AA0BA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAASC,aAAa,IAAIC,MAA1B,QAAwC,kBAAxC;AACA,OAAOC,QAAP,MAAqB,WAArB;AACA,SAASC,iBAAT,QAAkC,mBAAlC;AACA,SAASC,qBAAT,QAAsC,yBAAtC;AAEA,IAAMC,SAAS,GAAGF,iBAAH,sGAAf;AAMA,IAAMG,QAAQ,GAAIC,MAAD,CAAgBC,iBAAhB,GACZD,MAAD,CAAgBC,iBAAhB,CAAkCF,QADrB,GAEbG,SAFJ;AAIA,IAAMC,WAAW,GAAG,IAAIC,GAAJ,CAClB,eADkB,EAEjBJ,MAAD,CAAgBK,QAAhB,CAAyBC,MAFP,EAGlBC,QAHkB,EAApB;AAKAZ,QAAQ,CAACa,MAAT,CACE,oBAAC,MAAD;AAAQ,EAAA,QAAQ,EAAET;AAAlB,GACE,oBAAC,qBAAD;AAAuB,EAAA,WAAW,EAAEI,WAApC;AAAiD,EAAA,QAAQ,EAAE,CAAC,CAACJ;AAA7D,EADF,EAEE,oBAAC,SAAD,OAFF,CADF,EAKEU,QAAQ,CAACC,cAAT,CAAwB,WAAxB,CALF","sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2021 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\n\nimport React from 'react'\nimport { BrowserRouter as Router } from 'react-router-dom'\nimport ReactDOM from 'react-dom'\nimport { createGlobalStyle } from 'styled-components'\nimport { StandaloneApiExplorer } from './StandaloneApiExplorer'\n\nconst BodyReset = createGlobalStyle`\n body {\n margin: 0;\n }\n`\n\nconst basename = (window as any).LOOKER_DEV_PORTAL\n ? (window as any).LOOKER_DEV_PORTAL.basename\n : undefined\n\nconst versionsUrl = new URL(\n 'versions.json',\n (window as any).location.origin\n).toString()\n\nReactDOM.render(\n <Router basename={basename}>\n <StandaloneApiExplorer versionsUrl={versionsUrl} headless={!!basename} />\n <BodyReset />\n </Router>,\n document.getElementById('container')\n)\n"],"file":"App.js"}
@@ -3,70 +3,53 @@ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try
3
3
  function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
4
4
 
5
5
  import React, { useEffect, useState } from 'react';
6
- import { RunItProvider, defaultConfigurator, initRunItSdk, loadSpecsFromVersions, RunItConfigKey, RunItNoConfig } from '@looker/run-it';
6
+ import { initRunItSdk, RunItProvider } from '@looker/run-it';
7
+ import { OAuthScene } from '@looker/extension-utils';
7
8
  import { Provider } from 'react-redux';
8
- import ApiExplorer from './ApiExplorer';
9
+ import { useLocation } from 'react-router';
10
+ import { ApiExplorer } from './ApiExplorer';
9
11
  import { store } from './state';
10
- import { StandaloneEnvAdaptor } from './utils';
12
+ import { oAuthPath, ApixAdaptor } from './utils';
11
13
  import { Loader } from './components';
12
- var standaloneEnvAdaptor = new StandaloneEnvAdaptor();
13
-
14
- var loadVersions = function () {
15
- var _ref = _asyncToGenerator(function* (current) {
16
- var data = yield standaloneEnvAdaptor.localStorageGetItem(RunItConfigKey);
17
- var config = data ? JSON.parse(data) : RunItNoConfig;
18
- var url = config.base_url ? "".concat(config.base_url, "/versions") : current;
19
- var response = yield loadSpecsFromVersions(url);
20
-
21
- if (response.fetchResult) {
22
- console.error("Reverting to ".concat(current, " due to ").concat(url, " error: ").concat(response.fetchResult));
23
- url = current;
24
- response = yield loadSpecsFromVersions(url);
25
- }
26
-
27
- return {
28
- url,
29
- response
30
- };
31
- });
32
-
33
- return function loadVersions(_x) {
34
- return _ref.apply(this, arguments);
35
- };
36
- }();
37
-
38
- export var StandaloneApiExplorer = _ref2 => {
14
+ export var StandaloneApiExplorer = _ref => {
39
15
  var {
40
- headless = false,
41
- versionsUrl = ''
42
- } = _ref2;
43
- var [specs, setSpecs] = useState();
44
- var [currentVersionsUrl, setCurrentVersionsUrl] = useState(versionsUrl);
16
+ headless = false
17
+ } = _ref;
18
+ var [browserAdaptor] = useState(new ApixAdaptor(initRunItSdk(), window.origin));
19
+ var location = useLocation();
20
+ var oauthReturn = location.pathname === "/".concat(oAuthPath);
21
+ var sdk = browserAdaptor.sdk;
22
+ var canLogin = sdk.authSession.settings.authIsConfigured() && !sdk.authSession.isAuthenticated() && !oauthReturn;
45
23
  useEffect(() => {
46
- if (currentVersionsUrl) {
47
- loadVersions(currentVersionsUrl).then(result => {
48
- setCurrentVersionsUrl(result.url);
49
- var response = result.response;
50
- setSpecs(response.specs);
24
+ var login = function () {
25
+ var _ref2 = _asyncToGenerator(function* () {
26
+ return yield browserAdaptor.login();
51
27
  });
52
- } else {
53
- setSpecs(undefined);
28
+
29
+ return function login() {
30
+ return _ref2.apply(this, arguments);
31
+ };
32
+ }();
33
+
34
+ if (canLogin) {
35
+ login();
54
36
  }
55
- }, [versionsUrl, currentVersionsUrl]);
56
- var chosenSdk = initRunItSdk(defaultConfigurator);
37
+ }, []);
38
+ var {
39
+ looker_url
40
+ } = sdk.authSession.settings.getStoredConfig();
57
41
  return React.createElement(Provider, {
58
42
  store: store
59
43
  }, React.createElement(RunItProvider, {
60
- sdk: chosenSdk,
61
- configurator: defaultConfigurator,
62
44
  basePath: "/api/4.0"
63
- }, React.createElement(React.Fragment, null, specs ? React.createElement(ApiExplorer, {
64
- specs: specs,
65
- envAdaptor: standaloneEnvAdaptor,
66
- headless: headless,
67
- setVersionsUrl: setCurrentVersionsUrl
68
- }) : React.createElement(Loader, {
69
- themeOverrides: standaloneEnvAdaptor.themeOverrides()
45
+ }, canLogin ? React.createElement(Loader, {
46
+ themeOverrides: browserAdaptor.themeOverrides(),
47
+ message: "Configuration found. Logging into ".concat(looker_url)
48
+ }) : React.createElement(React.Fragment, null, oauthReturn ? React.createElement(OAuthScene, {
49
+ adaptor: browserAdaptor
50
+ }) : React.createElement(ApiExplorer, {
51
+ adaptor: browserAdaptor,
52
+ headless: headless
70
53
  }))));
71
54
  };
72
55
  //# sourceMappingURL=StandaloneApiExplorer.js.map