@looker/api-explorer 0.9.25 → 0.9.28

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 (214) hide show
  1. package/CHANGELOG.md +75 -0
  2. package/e2e/e2e.spec.ts +1 -1
  3. package/lib/ApiExplorer.d.ts +2 -6
  4. package/lib/ApiExplorer.js +53 -74
  5. package/lib/ApiExplorer.js.map +1 -1
  6. package/lib/StandaloneApiExplorer.js +35 -47
  7. package/lib/StandaloneApiExplorer.js.map +1 -1
  8. package/lib/components/Banner/Banner.d.ts +8 -0
  9. package/lib/components/Banner/Banner.js +70 -0
  10. package/lib/components/Banner/Banner.js.map +1 -0
  11. package/lib/components/Banner/index.d.ts +1 -0
  12. package/lib/components/Banner/index.js +14 -0
  13. package/lib/components/Banner/index.js.map +1 -0
  14. package/lib/components/DocSDKs/DocSDKs.js +3 -3
  15. package/lib/components/DocSDKs/DocSDKs.js.map +1 -1
  16. package/lib/components/ExploreType/ExploreType.js +3 -5
  17. package/lib/components/ExploreType/ExploreType.js.map +1 -1
  18. package/lib/components/Header/Header.d.ts +2 -5
  19. package/lib/components/Header/Header.js +1 -5
  20. package/lib/components/Header/Header.js.map +1 -1
  21. package/lib/components/SelectorContainer/ApiSpecSelector.d.ts +2 -5
  22. package/lib/components/SelectorContainer/ApiSpecSelector.js +5 -5
  23. package/lib/components/SelectorContainer/ApiSpecSelector.js.map +1 -1
  24. package/lib/components/SelectorContainer/SelectorContainer.d.ts +2 -5
  25. package/lib/components/SelectorContainer/SelectorContainer.js +3 -7
  26. package/lib/components/SelectorContainer/SelectorContainer.js.map +1 -1
  27. package/lib/components/SideNav/SideNav.d.ts +2 -5
  28. package/lib/components/SideNav/SideNav.js.map +1 -1
  29. package/lib/components/index.d.ts +1 -0
  30. package/lib/components/index.js +8 -0
  31. package/lib/components/index.js.map +1 -1
  32. package/lib/esm/ApiExplorer.js +54 -74
  33. package/lib/esm/ApiExplorer.js.map +1 -1
  34. package/lib/esm/StandaloneApiExplorer.js +34 -48
  35. package/lib/esm/StandaloneApiExplorer.js.map +1 -1
  36. package/lib/esm/components/Banner/Banner.js +54 -0
  37. package/lib/esm/components/Banner/Banner.js.map +1 -0
  38. package/lib/esm/components/Banner/index.js +2 -0
  39. package/lib/esm/components/Banner/index.js.map +1 -0
  40. package/lib/esm/components/DocSDKs/DocSDKs.js +2 -2
  41. package/lib/esm/components/DocSDKs/DocSDKs.js.map +1 -1
  42. package/lib/esm/components/ExploreType/ExploreType.js +3 -4
  43. package/lib/esm/components/ExploreType/ExploreType.js.map +1 -1
  44. package/lib/esm/components/Header/Header.js +1 -5
  45. package/lib/esm/components/Header/Header.js.map +1 -1
  46. package/lib/esm/components/SelectorContainer/ApiSpecSelector.js +4 -5
  47. package/lib/esm/components/SelectorContainer/ApiSpecSelector.js.map +1 -1
  48. package/lib/esm/components/SelectorContainer/SelectorContainer.js +3 -7
  49. package/lib/esm/components/SelectorContainer/SelectorContainer.js.map +1 -1
  50. package/lib/esm/components/SideNav/SideNav.js.map +1 -1
  51. package/lib/esm/components/index.js +1 -0
  52. package/lib/esm/components/index.js.map +1 -1
  53. package/lib/esm/index.js +1 -0
  54. package/lib/esm/index.js.map +1 -1
  55. package/lib/esm/routes/AppRouter.js +3 -7
  56. package/lib/esm/routes/AppRouter.js.map +1 -1
  57. package/lib/esm/scenes/DiffScene/DiffScene.js +43 -99
  58. package/lib/esm/scenes/DiffScene/DiffScene.js.map +1 -1
  59. package/lib/esm/scenes/DiffScene/DocDiff/DiffItem.js +9 -13
  60. package/lib/esm/scenes/DiffScene/DocDiff/DiffItem.js.map +1 -1
  61. package/lib/esm/scenes/DiffScene/DocDiff/DocDiff.js +2 -2
  62. package/lib/esm/scenes/DiffScene/DocDiff/DocDiff.js.map +1 -1
  63. package/lib/esm/scenes/MethodScene/MethodScene.js +4 -5
  64. package/lib/esm/scenes/MethodScene/MethodScene.js.map +1 -1
  65. package/lib/esm/state/index.js +1 -0
  66. package/lib/esm/state/index.js.map +1 -1
  67. package/lib/esm/state/specs/index.js +3 -0
  68. package/lib/esm/state/specs/index.js.map +1 -0
  69. package/lib/esm/state/specs/sagas.js +58 -0
  70. package/lib/esm/state/specs/sagas.js.map +1 -0
  71. package/lib/esm/state/specs/selectors.js +8 -0
  72. package/lib/esm/state/specs/selectors.js.map +1 -0
  73. package/lib/esm/state/specs/slice.js +55 -0
  74. package/lib/esm/state/specs/slice.js.map +1 -0
  75. package/lib/esm/state/store.js +53 -2
  76. package/lib/esm/state/store.js.map +1 -1
  77. package/lib/esm/test-utils/redux.js +9 -5
  78. package/lib/esm/test-utils/redux.js.map +1 -1
  79. package/lib/esm/utils/adaptorUtils.js +101 -0
  80. package/lib/esm/utils/adaptorUtils.js.map +1 -0
  81. package/lib/esm/utils/apixAdaptor.js +48 -0
  82. package/lib/esm/utils/apixAdaptor.js.map +1 -0
  83. package/lib/esm/utils/index.js +3 -1
  84. package/lib/esm/utils/index.js.map +1 -1
  85. package/lib/esm/utils/path.js +27 -2
  86. package/lib/esm/utils/path.js.map +1 -1
  87. package/lib/index.d.ts +1 -0
  88. package/lib/index.js +13 -0
  89. package/lib/index.js.map +1 -1
  90. package/lib/routes/AppRouter.d.ts +1 -5
  91. package/lib/routes/AppRouter.js +3 -7
  92. package/lib/routes/AppRouter.js.map +1 -1
  93. package/lib/scenes/DiffScene/DiffScene.js +45 -100
  94. package/lib/scenes/DiffScene/DiffScene.js.map +1 -1
  95. package/lib/scenes/DiffScene/DocDiff/DiffItem.js +9 -13
  96. package/lib/scenes/DiffScene/DocDiff/DiffItem.js.map +1 -1
  97. package/lib/scenes/DiffScene/DocDiff/DocDiff.js +2 -2
  98. package/lib/scenes/DiffScene/DocDiff/DocDiff.js.map +1 -1
  99. package/lib/scenes/MethodScene/MethodScene.d.ts +0 -4
  100. package/lib/scenes/MethodScene/MethodScene.js +5 -5
  101. package/lib/scenes/MethodScene/MethodScene.js.map +1 -1
  102. package/lib/state/index.d.ts +1 -0
  103. package/lib/state/index.js +13 -0
  104. package/lib/state/index.js.map +1 -1
  105. package/lib/state/settings/selectors.d.ts +1 -1
  106. package/lib/state/settings/slice.d.ts +1 -1
  107. package/lib/state/specs/index.d.ts +2 -0
  108. package/lib/state/specs/index.js +32 -0
  109. package/lib/state/specs/index.js.map +1 -0
  110. package/lib/state/specs/sagas.d.ts +1 -0
  111. package/lib/state/specs/sagas.js +67 -0
  112. package/lib/state/specs/sagas.js.map +1 -0
  113. package/lib/state/specs/selectors.d.ts +4 -0
  114. package/lib/state/specs/selectors.js +20 -0
  115. package/lib/state/specs/selectors.js.map +1 -0
  116. package/lib/state/specs/slice.d.ts +49 -0
  117. package/lib/state/specs/slice.js +70 -0
  118. package/lib/state/specs/slice.js.map +1 -0
  119. package/lib/state/store.d.ts +3 -0
  120. package/lib/state/store.js +56 -2
  121. package/lib/state/store.js.map +1 -1
  122. package/lib/test-data/declarations.d.ts +2 -0
  123. package/lib/test-data/examples.d.ts +2 -0
  124. package/lib/test-data/index.d.ts +3 -0
  125. package/lib/test-data/index.js +12 -42
  126. package/lib/test-data/index.js.map +1 -1
  127. package/lib/test-data/specs.d.ts +10 -0
  128. package/lib/test-data/specs.js +6 -6
  129. package/lib/test-data/specs.js.map +1 -1
  130. package/lib/test-utils/redux.d.ts +2 -1
  131. package/lib/test-utils/redux.js +9 -4
  132. package/lib/test-utils/redux.js.map +1 -1
  133. package/lib/utils/adaptorUtils.d.ts +30 -0
  134. package/lib/utils/adaptorUtils.js +124 -0
  135. package/lib/utils/adaptorUtils.js.map +1 -0
  136. package/lib/utils/apixAdaptor.d.ts +15 -0
  137. package/lib/utils/apixAdaptor.js +67 -0
  138. package/lib/utils/apixAdaptor.js.map +1 -0
  139. package/lib/utils/index.d.ts +3 -1
  140. package/lib/utils/index.js +45 -30
  141. package/lib/utils/index.js.map +1 -1
  142. package/lib/utils/path.d.ts +3 -0
  143. package/lib/utils/path.js +32 -2
  144. package/lib/utils/path.js.map +1 -1
  145. package/package.json +10 -10
  146. package/src/ApiExplorer.tsx +47 -74
  147. package/src/StandaloneApiExplorer.tsx +37 -52
  148. package/src/components/Banner/Banner.spec.tsx +99 -0
  149. package/src/components/Banner/Banner.tsx +87 -0
  150. package/src/{reducers → components/Banner}/index.ts +1 -1
  151. package/src/components/DocSDKs/DocSDKs.tsx +4 -5
  152. package/src/components/ExploreType/ExploreType.spec.tsx +0 -23
  153. package/src/components/ExploreType/ExploreType.tsx +5 -6
  154. package/src/components/ExploreType/exploreUtils.spec.tsx +1 -1
  155. package/src/components/Header/Header.spec.tsx +9 -30
  156. package/src/components/Header/Header.tsx +3 -10
  157. package/src/components/SelectorContainer/ApiSpecSelector.spec.tsx +31 -44
  158. package/src/components/SelectorContainer/ApiSpecSelector.tsx +6 -12
  159. package/src/components/SelectorContainer/SelectorContainer.spec.tsx +7 -26
  160. package/src/components/SelectorContainer/SelectorContainer.tsx +4 -10
  161. package/src/components/SideNav/SideNav.spec.tsx +12 -45
  162. package/src/components/SideNav/SideNav.tsx +1 -7
  163. package/src/components/index.ts +1 -0
  164. package/src/index.ts +1 -0
  165. package/src/routes/AppRouter.tsx +25 -37
  166. package/src/scenes/DiffScene/DiffScene.tsx +47 -84
  167. package/src/scenes/DiffScene/DocDiff/DiffItem.spec.tsx +9 -16
  168. package/src/scenes/DiffScene/DocDiff/DiffItem.tsx +11 -12
  169. package/src/scenes/DiffScene/DocDiff/DocDiff.tsx +2 -2
  170. package/src/scenes/MethodScene/MethodScene.tsx +4 -10
  171. package/src/state/index.ts +1 -0
  172. package/src/{reducers/spec → state/specs}/index.ts +2 -3
  173. package/src/state/specs/sagas.spec.ts +135 -0
  174. package/src/state/specs/sagas.ts +81 -0
  175. package/src/{reducers/spec/actions.spec.ts → state/specs/selectors.ts} +12 -11
  176. package/src/state/specs/slice.ts +109 -0
  177. package/src/state/store.ts +58 -0
  178. package/src/test-data/index.ts +1 -8
  179. package/src/test-data/specs.ts +6 -6
  180. package/src/test-utils/redux.tsx +15 -4
  181. package/src/utils/adaptorUtils.ts +181 -0
  182. package/src/utils/apixAdaptor.ts +72 -0
  183. package/src/utils/index.ts +3 -7
  184. package/src/utils/path.ts +25 -2
  185. package/lib/esm/reducers/index.js +0 -2
  186. package/lib/esm/reducers/index.js.map +0 -1
  187. package/lib/esm/reducers/spec/actions.js +0 -19
  188. package/lib/esm/reducers/spec/actions.js.map +0 -1
  189. package/lib/esm/reducers/spec/index.js +0 -4
  190. package/lib/esm/reducers/spec/index.js.map +0 -1
  191. package/lib/esm/reducers/spec/reducer.js +0 -62
  192. package/lib/esm/reducers/spec/reducer.js.map +0 -1
  193. package/lib/esm/reducers/spec/utils.js +0 -74
  194. package/lib/esm/reducers/spec/utils.js.map +0 -1
  195. package/lib/reducers/index.d.ts +0 -1
  196. package/lib/reducers/index.js +0 -19
  197. package/lib/reducers/index.js.map +0 -1
  198. package/lib/reducers/spec/actions.d.ts +0 -20
  199. package/lib/reducers/spec/actions.js +0 -31
  200. package/lib/reducers/spec/actions.js.map +0 -1
  201. package/lib/reducers/spec/index.d.ts +0 -3
  202. package/lib/reducers/spec/index.js +0 -45
  203. package/lib/reducers/spec/index.js.map +0 -1
  204. package/lib/reducers/spec/reducer.d.ts +0 -7
  205. package/lib/reducers/spec/reducer.js +0 -73
  206. package/lib/reducers/spec/reducer.js.map +0 -1
  207. package/lib/reducers/spec/utils.d.ts +0 -7
  208. package/lib/reducers/spec/utils.js +0 -91
  209. package/lib/reducers/spec/utils.js.map +0 -1
  210. package/src/reducers/spec/actions.ts +0 -62
  211. package/src/reducers/spec/reducer.spec.ts +0 -44
  212. package/src/reducers/spec/reducer.ts +0 -69
  213. package/src/reducers/spec/utils.spec.ts +0 -138
  214. package/src/reducers/spec/utils.ts +0 -123
@@ -1,57 +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
10
  import { registerEnvAdaptor, unregisterEnvAdaptor } from '@looker/extension-utils';
23
- import { oAuthPath } from './utils';
24
- import { Header, SideNav, ErrorBoundary, Loader, SelectorContainer, HEADER_TOGGLE_LABEL } from './components';
25
- import { specReducer, initDefaultSpecState, updateSpecApi } from './reducers';
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 { useSettingActions, useSettingStoreState, useLodeActions, useLodesStoreState } from './state';
16
+ import { useSettingActions, useSettingStoreState, useLodeActions, useLodesStoreState, useSpecActions, useSpecStoreState, selectSpecs, selectCurrentSpec } from './state';
17
+ import { getSpecKey, diffPath } from './utils';
29
18
  var BodyOverride = createGlobalStyle(_templateObject || (_templateObject = _taggedTemplateLiteral([" html { height: 100%; overflow: hidden; } "])));
30
19
  export var ApiExplorer = _ref => {
20
+ var _location$pathname2;
21
+
31
22
  var {
32
- specs,
33
23
  adaptor,
34
- setVersionsUrl,
35
24
  examplesLodeUrl = 'https://raw.githubusercontent.com/looker-open-source/sdk-codegen/main/examplesIndex.json',
36
25
  declarationsLodeUrl = "".concat(apixFilesHost, "/declarationsIndex.json"),
37
26
  headless = false
38
27
  } = _ref;
39
- var {
40
- initialized
41
- } = useSettingStoreState();
28
+ useSettingStoreState();
42
29
  useLodesStoreState();
30
+ var {
31
+ working,
32
+ description
33
+ } = useSpecStoreState();
34
+ var specs = useSelector(selectSpecs);
35
+ var spec = useSelector(selectCurrentSpec);
43
36
  var {
44
37
  initLodesAction
45
38
  } = useLodeActions();
46
39
  var {
47
40
  initSettingsAction
48
41
  } = useSettingActions();
49
- var location = useLocation();
50
- var oauthReturn = location.pathname === "/".concat(oAuthPath);
51
- var [specState, specDispatch] = useReducer(specReducer, initDefaultSpecState(specs, location));
52
42
  var {
53
- spec
54
- } = specState;
43
+ initSpecsAction,
44
+ setCurrentSpecAction
45
+ } = useSpecActions();
46
+ var location = useLocation();
55
47
  var [hasNavigation, setHasNavigation] = useState(true);
56
48
 
57
49
  var toggleNavigation = target => setHasNavigation(target || !hasNavigation);
@@ -61,15 +53,30 @@ export var ApiExplorer = _ref => {
61
53
  setHasNavigation(currentHasNavigation => !currentHasNavigation);
62
54
  }
63
55
  }, []);
56
+ registerEnvAdaptor(adaptor);
64
57
  useEffect(() => {
65
- registerEnvAdaptor(adaptor);
66
58
  initSettingsAction();
67
59
  initLodesAction({
68
60
  examplesLodeUrl,
69
61
  declarationsLodeUrl
70
62
  });
63
+ var specKey = getSpecKey(location);
64
+ initSpecsAction({
65
+ specKey
66
+ });
71
67
  return () => unregisterEnvAdaptor();
72
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]);
73
80
  useEffect(() => {
74
81
  if (headless) {
75
82
  window.addEventListener('message', hasNavigationToggle);
@@ -81,51 +88,30 @@ export var ApiExplorer = _ref => {
81
88
  }
82
89
  };
83
90
  }, [headless, hasNavigationToggle]);
84
- useEffect(() => {
85
- var loadSpec = function () {
86
- var _ref2 = _asyncToGenerator(function* () {
87
- if (!spec.api) {
88
- try {
89
- var newSpec = _objectSpread({}, spec);
90
-
91
- var api = yield fallbackFetch(newSpec, funFetch);
92
-
93
- if (api) {
94
- spec.api = api;
95
- specDispatch(updateSpecApi(spec.key, api));
96
- }
97
- } catch (error) {
98
- console.error(error);
99
- }
100
- }
101
- });
91
+ var themeOverrides = adaptor.themeOverrides();
92
+ var neededSpec = (_location$pathname2 = location.pathname) === null || _location$pathname2 === void 0 ? void 0 : _location$pathname2.split('/')[1];
102
93
 
103
- return function loadSpec() {
104
- return _ref2.apply(this, arguments);
105
- };
106
- }();
94
+ if (!neededSpec || neededSpec === diffPath) {
95
+ neededSpec = spec === null || spec === void 0 ? void 0 : spec.key;
96
+ }
107
97
 
108
- if (!oauthReturn) {
109
- loadSpec();
110
- }
111
- }, [spec, location]);
112
- var themeOverrides = adaptor.themeOverrides();
113
98
  return React.createElement(React.Fragment, null, React.createElement(ComponentsProvider, {
114
99
  loadGoogleFonts: themeOverrides.loadGoogleFonts,
115
100
  themeCustomizations: themeOverrides.themeCustomizations
116
- }, !initialized ? React.createElement(Loader, {
117
- message: "Initializing",
101
+ }, working || !neededSpec || neededSpec !== spec.key ? React.createElement(Loader, {
102
+ message: description,
118
103
  themeOverrides: themeOverrides
119
104
  }) : React.createElement(ErrorBoundary, {
120
105
  logError: adaptor.logError.bind(adaptor)
121
- }, React.createElement(Page, {
106
+ }, React.createElement(Banner, {
107
+ adaptor: adaptor,
108
+ specs: specs
109
+ }), React.createElement(Page, {
122
110
  style: {
123
111
  overflow: 'hidden'
124
112
  }
125
113
  }, !headless && React.createElement(Header, {
126
- specs: specs,
127
114
  spec: spec,
128
- specDispatch: specDispatch,
129
115
  toggleNavigation: toggleNavigation
130
116
  }), React.createElement(Layout, {
131
117
  hasAside: true,
@@ -154,33 +140,27 @@ export var ApiExplorer = _ref => {
154
140
  mb: "u3",
155
141
  appearance: "light"
156
142
  }), React.createElement(SelectorContainer, {
157
- ml: "large",
158
- mr: "large",
159
- specs: specs,
160
143
  spec: spec,
161
- specDispatch: specDispatch
144
+ ml: "large",
145
+ mr: "large"
162
146
  }))), hasNavigation && React.createElement(SideNav, {
163
147
  headless: headless,
164
- specs: specs,
165
- spec: spec,
166
- specDispatch: specDispatch
167
- })), oauthReturn && React.createElement(OAuthScene, null), !oauthReturn && spec.api && React.createElement(AppRouter, {
168
- api: spec.api,
148
+ spec: spec
149
+ })), React.createElement(AppRouter, {
169
150
  specKey: spec.key,
151
+ api: spec.api,
170
152
  specs: specs,
171
- toggleNavigation: toggleNavigation,
172
- adaptor: adaptor,
173
- setVersionsUrl: setVersionsUrl
153
+ toggleNavigation: toggleNavigation
174
154
  }))))), !headless && React.createElement(BodyOverride, null));
175
155
  };
176
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
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","registerEnvAdaptor","unregisterEnvAdaptor","oAuthPath","Header","SideNav","ErrorBoundary","Loader","SelectorContainer","HEADER_TOGGLE_LABEL","specReducer","initDefaultSpecState","updateSpecApi","AppRouter","apixFilesHost","useSettingActions","useSettingStoreState","useLodeActions","useLodesStoreState","BodyOverride","ApiExplorer","specs","adaptor","setVersionsUrl","examplesLodeUrl","declarationsLodeUrl","headless","initialized","initLodesAction","initSettingsAction","location","oauthReturn","pathname","specState","specDispatch","spec","hasNavigation","setHasNavigation","toggleNavigation","target","hasNavigationToggle","e","origin","window","data","action","currentHasNavigation","addEventListener","removeEventListener","loadSpec","api","newSpec","key","error","console","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 type { IEnvironmentAdaptor } from '@looker/extension-utils'\nimport {\n registerEnvAdaptor,\n unregisterEnvAdaptor,\n} from '@looker/extension-utils'\nimport { oAuthPath } 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 {\n useSettingActions,\n useSettingStoreState,\n useLodeActions,\n useLodesStoreState,\n} from './state'\n\nexport interface ApiExplorerProps {\n specs: SpecList\n adaptor: IEnvironmentAdaptor\n setVersionsUrl: RunItSetter\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 specs,\n adaptor,\n setVersionsUrl,\n examplesLodeUrl = 'https://raw.githubusercontent.com/looker-open-source/sdk-codegen/main/examplesIndex.json',\n declarationsLodeUrl = `${apixFilesHost}/declarationsIndex.json`,\n headless = false,\n}) => {\n const { initialized } = useSettingStoreState()\n useLodesStoreState()\n const { initLodesAction } = useLodeActions()\n const { initSettingsAction } = useSettingActions()\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 [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(adaptor)\n initSettingsAction()\n initLodesAction({ examplesLodeUrl, declarationsLodeUrl })\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 const themeOverrides = adaptor.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={adaptor.logError.bind(adaptor)}>\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 adaptor={adaptor}\n setVersionsUrl={setVersionsUrl}\n />\n )}\n </Layout>\n </Page>\n </ErrorBoundary>\n )}\n </ComponentsProvider>\n {!headless && <BodyOverride />}\n </>\n )\n}\n\nconst AsideBorder = styled(Aside)<{\n isOpen: boolean\n headless: boolean\n}>`\n width: ${({ isOpen, headless }) =>\n isOpen ? '20rem' : headless ? '2.75rem' : '0rem'};\n`\n"],"file":"ApiExplorer.js"}
1
+ {"version":3,"sources":["../../src/ApiExplorer.tsx"],"names":["React","useState","useEffect","useCallback","styled","createGlobalStyle","Aside","ComponentsProvider","Divider","Heading","IconButton","Layout","Page","Space","FirstPage","LastPage","registerEnvAdaptor","unregisterEnvAdaptor","useSelector","useLocation","Header","SideNav","ErrorBoundary","SelectorContainer","HEADER_TOGGLE_LABEL","Loader","Banner","AppRouter","apixFilesHost","useSettingActions","useSettingStoreState","useLodeActions","useLodesStoreState","useSpecActions","useSpecStoreState","selectSpecs","selectCurrentSpec","getSpecKey","diffPath","BodyOverride","ApiExplorer","adaptor","examplesLodeUrl","declarationsLodeUrl","headless","working","description","specs","spec","initLodesAction","initSettingsAction","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"}
@@ -3,67 +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, loadSpecsFromVersions, RunItConfigKey, RunItNoConfig, initRunItSdk } 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 { BrowserAdaptor } from '@looker/extension-utils';
9
+ import { useLocation } from 'react-router';
9
10
  import { ApiExplorer } from './ApiExplorer';
10
11
  import { store } from './state';
12
+ import { oAuthPath, ApixAdaptor } from './utils';
11
13
  import { Loader } from './components';
12
- var browserAdaptor = new BrowserAdaptor(initRunItSdk());
13
-
14
- var loadVersions = function () {
15
- var _ref = _asyncToGenerator(function* (current) {
16
- var data = yield browserAdaptor.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]);
37
+ }, []);
38
+ var {
39
+ looker_url
40
+ } = sdk.authSession.settings.getStoredConfig();
56
41
  return React.createElement(Provider, {
57
42
  store: store
58
43
  }, React.createElement(RunItProvider, {
59
44
  basePath: "/api/4.0"
60
- }, React.createElement(React.Fragment, null, specs ? React.createElement(ApiExplorer, {
61
- specs: specs,
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, {
62
51
  adaptor: browserAdaptor,
63
- headless: headless,
64
- setVersionsUrl: setCurrentVersionsUrl
65
- }) : React.createElement(Loader, {
66
- themeOverrides: browserAdaptor.themeOverrides()
52
+ headless: headless
67
53
  }))));
68
54
  };
69
55
  //# sourceMappingURL=StandaloneApiExplorer.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/StandaloneApiExplorer.tsx"],"names":["React","useEffect","useState","RunItProvider","loadSpecsFromVersions","RunItConfigKey","RunItNoConfig","initRunItSdk","Provider","BrowserAdaptor","ApiExplorer","store","Loader","browserAdaptor","loadVersions","current","data","localStorageGetItem","config","JSON","parse","url","base_url","response","fetchResult","console","error","StandaloneApiExplorer","headless","versionsUrl","specs","setSpecs","currentVersionsUrl","setCurrentVersionsUrl","then","result","undefined","themeOverrides"],"mappings":";;;;AA2BA,OAAOA,KAAP,IAAgBC,SAAhB,EAA2BC,QAA3B,QAA2C,OAA3C;AACA,SACEC,aADF,EAEEC,qBAFF,EAGEC,cAHF,EAIEC,aAJF,EAKEC,YALF,QAMO,gBANP;AAQA,SAASC,QAAT,QAAyB,aAAzB;AACA,SAASC,cAAT,QAA+B,yBAA/B;AAEA,SAASC,WAAT,QAA4B,eAA5B;AACA,SAASC,KAAT,QAAsB,SAAtB;AACA,SAASC,MAAT,QAAuB,cAAvB;AAOA,IAAMC,cAAc,GAAG,IAAIJ,cAAJ,CAAmBF,YAAY,EAA/B,CAAvB;;AAEA,IAAMO,YAAY;AAAA,+BAAG,WAAOC,OAAP,EAA2B;AAC9C,QAAMC,IAAI,SAASH,cAAc,CAACI,mBAAf,CAAmCZ,cAAnC,CAAnB;AACA,QAAMa,MAAM,GAAGF,IAAI,GAAGG,IAAI,CAACC,KAAL,CAAWJ,IAAX,CAAH,GAAsBV,aAAzC;AACA,QAAIe,GAAG,GAAGH,MAAM,CAACI,QAAP,aAAqBJ,MAAM,CAACI,QAA5B,iBAAkDP,OAA5D;AACA,QAAIQ,QAAQ,SAASnB,qBAAqB,CAACiB,GAAD,CAA1C;;AACA,QAAIE,QAAQ,CAACC,WAAb,EAA0B;AACxBC,MAAAA,OAAO,CAACC,KAAR,wBACkBX,OADlB,qBACoCM,GADpC,qBACkDE,QAAQ,CAACC,WAD3D;AAIAH,MAAAA,GAAG,GAAGN,OAAN;AACAQ,MAAAA,QAAQ,SAASnB,qBAAqB,CAACiB,GAAD,CAAtC;AACD;;AACD,WAAO;AAAEA,MAAAA,GAAF;AAAOE,MAAAA;AAAP,KAAP;AACD,GAdiB;;AAAA,kBAAZT,YAAY;AAAA;AAAA;AAAA,GAAlB;;AAgBA,OAAO,IAAMa,qBAAqD,GAAG,SAG/D;AAAA,MAHgE;AACpEC,IAAAA,QAAQ,GAAG,KADyD;AAEpEC,IAAAA,WAAW,GAAG;AAFsD,GAGhE;AACJ,MAAM,CAACC,KAAD,EAAQC,QAAR,IAAoB7B,QAAQ,EAAlC;AACA,MAAM,CAAC8B,kBAAD,EAAqBC,qBAArB,IACJ/B,QAAQ,CAAS2B,WAAT,CADV;AAGA5B,EAAAA,SAAS,CAAC,MAAM;AACd,QAAI+B,kBAAJ,EAAwB;AACtBlB,MAAAA,YAAY,CAACkB,kBAAD,CAAZ,CAAiCE,IAAjC,CAAuCC,MAAD,IAAY;AAChDF,QAAAA,qBAAqB,CAACE,MAAM,CAACd,GAAR,CAArB;AACA,YAAME,QAAQ,GAAGY,MAAM,CAACZ,QAAxB;AACAQ,QAAAA,QAAQ,CAACR,QAAQ,CAACO,KAAV,CAAR;AACD,OAJD;AAKD,KAND,MAMO;AACLC,MAAAA,QAAQ,CAACK,SAAD,CAAR;AACD;AACF,GAVQ,EAUN,CAACP,WAAD,EAAcG,kBAAd,CAVM,CAAT;AAYA,SACE,oBAAC,QAAD;AAAU,IAAA,KAAK,EAAErB;AAAjB,KACE,oBAAC,aAAD;AAAe,IAAA,QAAQ,EAAC;AAAxB,KACE,0CACGmB,KAAK,GACJ,oBAAC,WAAD;AACE,IAAA,KAAK,EAAEA,KADT;AAEE,IAAA,OAAO,EAAEjB,cAFX;AAGE,IAAA,QAAQ,EAAEe,QAHZ;AAIE,IAAA,cAAc,EAAEK;AAJlB,IADI,GAQJ,oBAAC,MAAD;AAAQ,IAAA,cAAc,EAAEpB,cAAc,CAACwB,cAAf;AAAxB,IATJ,CADF,CADF,CADF;AAkBD,CAtCM","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 {\n RunItProvider,\n loadSpecsFromVersions,\n RunItConfigKey,\n RunItNoConfig,\n initRunItSdk,\n} from '@looker/run-it'\nimport type { SpecList } from '@looker/sdk-codegen'\nimport { Provider } from 'react-redux'\nimport { BrowserAdaptor } from '@looker/extension-utils'\n\nimport { ApiExplorer } from './ApiExplorer'\nimport { store } from './state'\nimport { Loader } from './components'\n\nexport interface StandaloneApiExplorerProps {\n headless?: boolean\n versionsUrl: string\n}\n\nconst browserAdaptor = new BrowserAdaptor(initRunItSdk())\n\nconst loadVersions = async (current: string) => {\n const data = await browserAdaptor.localStorageGetItem(RunItConfigKey)\n const config = data ? JSON.parse(data) : RunItNoConfig\n let url = config.base_url ? `${config.base_url}/versions` : current\n let response = await loadSpecsFromVersions(url)\n if (response.fetchResult) {\n console.error(\n `Reverting to ${current} due to ${url} error: ${response.fetchResult}`\n )\n // The stored server location has an error so default to current\n url = current\n response = await loadSpecsFromVersions(url)\n }\n return { url, response }\n}\n\nexport const StandaloneApiExplorer: FC<StandaloneApiExplorerProps> = ({\n headless = false,\n versionsUrl = '',\n}) => {\n const [specs, setSpecs] = useState<SpecList | undefined>()\n const [currentVersionsUrl, setCurrentVersionsUrl] =\n useState<string>(versionsUrl)\n\n useEffect(() => {\n if (currentVersionsUrl) {\n loadVersions(currentVersionsUrl).then((result) => {\n setCurrentVersionsUrl(result.url)\n const response = result.response\n setSpecs(response.specs)\n })\n } else {\n setSpecs(undefined)\n }\n }, [versionsUrl, currentVersionsUrl])\n\n return (\n <Provider store={store}>\n <RunItProvider basePath=\"/api/4.0\">\n <>\n {specs ? (\n <ApiExplorer\n specs={specs}\n adaptor={browserAdaptor}\n headless={headless}\n setVersionsUrl={setCurrentVersionsUrl}\n />\n ) : (\n <Loader themeOverrides={browserAdaptor.themeOverrides()} />\n )}\n </>\n </RunItProvider>\n </Provider>\n )\n}\n"],"file":"StandaloneApiExplorer.js"}
1
+ {"version":3,"sources":["../../src/StandaloneApiExplorer.tsx"],"names":["React","useEffect","useState","initRunItSdk","RunItProvider","OAuthScene","Provider","useLocation","ApiExplorer","store","oAuthPath","ApixAdaptor","Loader","StandaloneApiExplorer","headless","browserAdaptor","window","origin","location","oauthReturn","pathname","sdk","canLogin","authSession","settings","authIsConfigured","isAuthenticated","login","looker_url","getStoredConfig","themeOverrides"],"mappings":";;;;AA2BA,OAAOA,KAAP,IAAgBC,SAAhB,EAA2BC,QAA3B,QAA2C,OAA3C;AACA,SAASC,YAAT,EAAuBC,aAAvB,QAA4C,gBAA5C;AAEA,SAASC,UAAT,QAA2B,yBAA3B;AACA,SAASC,QAAT,QAAyB,aAAzB;AACA,SAASC,WAAT,QAA4B,cAA5B;AAEA,SAASC,WAAT,QAA4B,eAA5B;AACA,SAASC,KAAT,QAAsB,SAAtB;AACA,SAASC,SAAT,EAAoBC,WAApB,QAAuC,SAAvC;AACA,SAASC,MAAT,QAAuB,cAAvB;AAOA,OAAO,IAAMC,qBAAqD,GAAG,QAE/D;AAAA,MAFgE;AACpEC,IAAAA,QAAQ,GAAG;AADyD,GAEhE;AACJ,MAAM,CAACC,cAAD,IAAmBb,QAAQ,CAC/B,IAAIS,WAAJ,CAAgBR,YAAY,EAA5B,EAAgCa,MAAM,CAACC,MAAvC,CAD+B,CAAjC;AAGA,MAAMC,QAAQ,GAAGX,WAAW,EAA5B;AACA,MAAMY,WAAW,GAAGD,QAAQ,CAACE,QAAT,gBAA0BV,SAA1B,CAApB;AACA,MAAMW,GAAG,GAAGN,cAAc,CAACM,GAA3B;AACA,MAAMC,QAAQ,GACXD,GAAG,CAACE,WAAJ,CAAgBC,QAAjB,CAAkDC,gBAAlD,MACA,CAACJ,GAAG,CAACE,WAAJ,CAAgBG,eAAhB,EADD,IAEA,CAACP,WAHH;AAKAlB,EAAAA,SAAS,CAAC,MAAM;AACd,QAAM0B,KAAK;AAAA,oCAAG;AAAA,qBAAkBZ,cAAc,CAACY,KAAf,EAAlB;AAAA,OAAH;;AAAA,sBAALA,KAAK;AAAA;AAAA;AAAA,OAAX;;AACA,QAAIL,QAAJ,EAAc;AACZK,MAAAA,KAAK;AACN;AACF,GALQ,EAKN,EALM,CAAT;AAOA,MAAM;AAAEC,IAAAA;AAAF,MACJP,GAAG,CAACE,WAAJ,CAAgBC,QADK,CAErBK,eAFqB,EAAvB;AAIA,SACE,oBAAC,QAAD;AAAU,IAAA,KAAK,EAAEpB;AAAjB,KACE,oBAAC,aAAD;AAAe,IAAA,QAAQ,EAAC;AAAxB,KACGa,QAAQ,GACP,oBAAC,MAAD;AACE,IAAA,cAAc,EAAEP,cAAc,CAACe,cAAf,EADlB;AAEE,IAAA,OAAO,8CAAuCF,UAAvC;AAFT,IADO,GAMP,0CACGT,WAAW,GACV,oBAAC,UAAD;AAAY,IAAA,OAAO,EAAEJ;AAArB,IADU,GAGV,oBAAC,WAAD;AAAa,IAAA,OAAO,EAAEA,cAAtB;AAAsC,IAAA,QAAQ,EAAED;AAAhD,IAJJ,CAPJ,CADF,CADF;AAoBD,CA7CM","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 { initRunItSdk, RunItProvider } from '@looker/run-it'\nimport type { OAuthConfigProvider } from '@looker/extension-utils'\nimport { OAuthScene } from '@looker/extension-utils'\nimport { Provider } from 'react-redux'\nimport { useLocation } from 'react-router'\n\nimport { ApiExplorer } from './ApiExplorer'\nimport { store } from './state'\nimport { oAuthPath, ApixAdaptor } from './utils'\nimport { Loader } from './components'\n\nexport interface StandaloneApiExplorerProps {\n headless?: boolean\n versionsUrl: string\n}\n\nexport const StandaloneApiExplorer: FC<StandaloneApiExplorerProps> = ({\n headless = false,\n}) => {\n const [browserAdaptor] = useState(\n new ApixAdaptor(initRunItSdk(), window.origin)\n )\n const location = useLocation()\n const oauthReturn = location.pathname === `/${oAuthPath}`\n const sdk = browserAdaptor.sdk\n const canLogin =\n (sdk.authSession.settings as OAuthConfigProvider).authIsConfigured() &&\n !sdk.authSession.isAuthenticated() &&\n !oauthReturn\n\n useEffect(() => {\n const login = async () => await browserAdaptor.login()\n if (canLogin) {\n login()\n }\n }, [])\n\n const { looker_url } = (\n sdk.authSession.settings as OAuthConfigProvider\n ).getStoredConfig()\n\n return (\n <Provider store={store}>\n <RunItProvider basePath=\"/api/4.0\">\n {canLogin ? (\n <Loader\n themeOverrides={browserAdaptor.themeOverrides()}\n message={`Configuration found. Logging into ${looker_url}`}\n />\n ) : (\n <>\n {oauthReturn ? (\n <OAuthScene adaptor={browserAdaptor} />\n ) : (\n <ApiExplorer adaptor={browserAdaptor} headless={headless} />\n )}\n </>\n )}\n </RunItProvider>\n </Provider>\n )\n}\n"],"file":"StandaloneApiExplorer.js"}
@@ -0,0 +1,54 @@
1
+ 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); } }
2
+
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
+
5
+ import { ButtonOutline, Link, MessageBar } from '@looker/components';
6
+ import React, { useState, useEffect } from 'react';
7
+ var LOCAL_STORAGE_KEY = 'api-40-ga-apix-banner';
8
+ var LOCAL_STORAGE_VALUE = 'dismissed';
9
+ export var Banner = _ref => {
10
+ var {
11
+ adaptor,
12
+ specs
13
+ } = _ref;
14
+ var [isOpen, setOpen] = useState(false);
15
+ useEffect(onLoad, []);
16
+
17
+ if (isOpen) {
18
+ return React.createElement(MessageBar, {
19
+ intent: "inform",
20
+ onPrimaryClick: onClose,
21
+ secondaryAction: React.createElement(Link, {
22
+ href: "https://developers.looker.com/api/advanced-usage/version-4-ga",
23
+ target: "_blank"
24
+ }, React.createElement(ButtonOutline, {
25
+ size: "small"
26
+ }, "Announcement"))
27
+ }, "API 4.0 moves from Beta to General Availability in Looker 22.4 with additions and possible breaking changes. Read the announcement to see how this affects you.");
28
+ } else {
29
+ return null;
30
+ }
31
+
32
+ function onLoad() {
33
+ function innerOnLoad() {
34
+ return _innerOnLoad.apply(this, arguments);
35
+ }
36
+
37
+ function _innerOnLoad() {
38
+ _innerOnLoad = _asyncToGenerator(function* () {
39
+ var is40Stable = specs['4.0'].status === 'stable' || specs['4.0'].status === 'current';
40
+ var wasDismissed = (yield adaptor.localStorageGetItem(LOCAL_STORAGE_KEY)) === LOCAL_STORAGE_VALUE;
41
+ setOpen(!is40Stable && !wasDismissed && adaptor.isExtension());
42
+ });
43
+ return _innerOnLoad.apply(this, arguments);
44
+ }
45
+
46
+ innerOnLoad();
47
+ }
48
+
49
+ function onClose() {
50
+ adaptor.localStorageSetItem(LOCAL_STORAGE_KEY, LOCAL_STORAGE_VALUE);
51
+ setOpen(false);
52
+ }
53
+ };
54
+ //# sourceMappingURL=Banner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/Banner/Banner.tsx"],"names":["ButtonOutline","Link","MessageBar","React","useState","useEffect","LOCAL_STORAGE_KEY","LOCAL_STORAGE_VALUE","Banner","adaptor","specs","isOpen","setOpen","onLoad","onClose","innerOnLoad","is40Stable","status","wasDismissed","localStorageGetItem","isExtension","localStorageSetItem"],"mappings":";;;;AAyBA,SAASA,aAAT,EAAwBC,IAAxB,EAA8BC,UAA9B,QAAgD,oBAAhD;AAIA,OAAOC,KAAP,IAAgBC,QAAhB,EAA0BC,SAA1B,QAA2C,OAA3C;AAEA,IAAMC,iBAAiB,GAAG,uBAA1B;AACA,IAAMC,mBAAmB,GAAG,WAA5B;AAOA,OAAO,IAAMC,MAAuB,GAAG,QAAwB;AAAA,MAAvB;AAAEC,IAAAA,OAAF;AAAWC,IAAAA;AAAX,GAAuB;AAC7D,MAAM,CAACC,MAAD,EAASC,OAAT,IAAoBR,QAAQ,CAAC,KAAD,CAAlC;AACAC,EAAAA,SAAS,CAACQ,MAAD,EAAS,EAAT,CAAT;;AAEA,MAAIF,MAAJ,EAAY;AACV,WACE,oBAAC,UAAD;AACE,MAAA,MAAM,EAAC,QADT;AAEE,MAAA,cAAc,EAAEG,OAFlB;AAGE,MAAA,eAAe,EACb,oBAAC,IAAD;AACE,QAAA,IAAI,EAAC,+DADP;AAEE,QAAA,MAAM,EAAC;AAFT,SAIE,oBAAC,aAAD;AAAe,QAAA,IAAI,EAAC;AAApB,wBAJF;AAJJ,yKADF;AAkBD,GAnBD,MAmBO;AACL,WAAO,IAAP;AACD;;AAED,WAASD,MAAT,GAAkB;AAAA,aAGDE,WAHC;AAAA;AAAA;;AAAA;AAAA,uCAGhB,aAA6B;AAG3B,YAAMC,UAAU,GACdN,KAAK,CAAC,KAAD,CAAL,CAAaO,MAAb,KAAwB,QAAxB,IAAoCP,KAAK,CAAC,KAAD,CAAL,CAAaO,MAAb,KAAwB,SAD9D;AAEA,YAAMC,YAAY,GAChB,OAAOT,OAAO,CAACU,mBAAR,CAA4Bb,iBAA5B,CAAP,MACAC,mBAFF;AAGAK,QAAAA,OAAO,CAAC,CAACI,UAAD,IAAe,CAACE,YAAhB,IAAgCT,OAAO,CAACW,WAAR,EAAjC,CAAP;AACD,OAZe;AAAA;AAAA;;AAahBL,IAAAA,WAAW;AACZ;;AAED,WAASD,OAAT,GAAmB;AACjBL,IAAAA,OAAO,CAACY,mBAAR,CAA4Bf,iBAA5B,EAA+CC,mBAA/C;AACAK,IAAAA,OAAO,CAAC,KAAD,CAAP;AACD;AACF,CA/CM","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 { ButtonOutline, Link, MessageBar } from '@looker/components'\nimport type { IEnvironmentAdaptor } from '@looker/extension-utils'\nimport type { SpecList } from '@looker/sdk-codegen'\nimport type { FC } from 'react'\nimport React, { useState, useEffect } from 'react'\n\nconst LOCAL_STORAGE_KEY = 'api-40-ga-apix-banner'\nconst LOCAL_STORAGE_VALUE = 'dismissed'\n\nexport interface BannerProps {\n adaptor: IEnvironmentAdaptor\n specs: SpecList\n}\n\nexport const Banner: FC<BannerProps> = ({ adaptor, specs }) => {\n const [isOpen, setOpen] = useState(false)\n useEffect(onLoad, [])\n\n if (isOpen) {\n return (\n <MessageBar\n intent=\"inform\"\n onPrimaryClick={onClose}\n secondaryAction={\n <Link\n href=\"https://developers.looker.com/api/advanced-usage/version-4-ga\"\n target=\"_blank\"\n >\n <ButtonOutline size=\"small\">Announcement</ButtonOutline>\n </Link>\n }\n >\n API 4.0 moves from Beta to General Availability in Looker 22.4 with\n additions and possible breaking changes. Read the announcement to see\n how this affects you.\n </MessageBar>\n )\n } else {\n return null\n }\n\n function onLoad() {\n // Following best practice with inner async function\n // https://github.com/facebook/react/issues/14326\n async function innerOnLoad() {\n // 4.0 is stable in Looker 22.4+. 4.0 is default or `current` in 22.4+.\n // Still check for `stable` just in case new version comes along.\n const is40Stable =\n specs['4.0'].status === 'stable' || specs['4.0'].status === 'current'\n const wasDismissed =\n (await adaptor.localStorageGetItem(LOCAL_STORAGE_KEY)) ===\n LOCAL_STORAGE_VALUE\n setOpen(!is40Stable && !wasDismissed && adaptor.isExtension())\n }\n innerOnLoad()\n }\n\n function onClose() {\n adaptor.localStorageSetItem(LOCAL_STORAGE_KEY, LOCAL_STORAGE_VALUE)\n setOpen(false)\n }\n}\n"],"file":"Banner.js"}
@@ -0,0 +1,2 @@
1
+ export { Banner } from './Banner';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/Banner/index.ts"],"names":["Banner"],"mappings":"AAyBA,SAASA,MAAT,QAAuB,UAAvB","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 { Banner } from './Banner'\n"],"file":"index.js"}
@@ -1,9 +1,9 @@
1
1
  import React, { useState, useEffect } from 'react';
2
2
  import { useSelector } from 'react-redux';
3
- import { Method } from '@looker/sdk-codegen';
4
3
  import { CollapserCard, getGenerators } from '@looker/run-it';
5
4
  import { DocCode } from '../DocCode';
6
5
  import { selectSdkLanguage } from '../../state';
6
+ import { isMethod } from '../../utils/path';
7
7
  import { noComment } from './utils';
8
8
  import { DocDeclarations } from './DocDeclarations';
9
9
 
@@ -13,7 +13,7 @@ var getDeclarations = (generators, sdkLanguage, item) => {
13
13
  var [language, gen] = _ref;
14
14
 
15
15
  if (sdkLanguage === 'All' || language === sdkLanguage) {
16
- var code = item instanceof Method ? gen.declareMethod('', item) : gen.declareType('', item);
16
+ var code = isMethod(item) ? gen.declareMethod('', item) : gen.declareType('', item);
17
17
  declarations[language] = code;
18
18
  }
19
19
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/DocSDKs/DocSDKs.tsx"],"names":["React","useState","useEffect","useSelector","Method","CollapserCard","getGenerators","DocCode","selectSdkLanguage","noComment","DocDeclarations","getDeclarations","generators","sdkLanguage","item","declarations","Object","entries","forEach","language","gen","code","declareMethod","declareType","DocSDKs","api","method","type","setItem","setDeclarations","header","setHeader","languages","keys","length","values"],"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 } from 'react'\nimport { useSelector } from 'react-redux'\nimport type {\n IMethod,\n IType,\n ApiModel,\n KeyedCollection,\n CodeGen,\n} from '@looker/sdk-codegen'\nimport { Method } from '@looker/sdk-codegen'\nimport { CollapserCard, getGenerators } from '@looker/run-it'\n\nimport { DocCode } from '../DocCode'\nimport { selectSdkLanguage } from '../../state'\nimport { noComment } from './utils'\nimport { DocDeclarations } from './DocDeclarations'\n\ninterface LanguageSDKProps {\n /** API spec */\n api: ApiModel\n /** An SDK method */\n method?: IMethod\n /** An SDK type */\n type?: IType\n}\n\nconst getDeclarations = (\n generators: KeyedCollection<CodeGen>,\n sdkLanguage: string,\n item: IMethod | IType\n) => {\n const declarations: KeyedCollection<string> = {}\n Object.entries(generators).forEach(([language, gen]) => {\n if (sdkLanguage === 'All' || language === sdkLanguage) {\n const code =\n item instanceof Method\n ? gen.declareMethod('', item as IMethod)\n : gen.declareType('', item as IType)\n declarations[language] = code\n }\n })\n return declarations\n}\n\n/**\n * Given a method or a type, it renders its SDK declaration in all supported languages.\n */\nexport const DocSDKs: FC<LanguageSDKProps> = ({ api, method, type }) => {\n const sdkLanguage = useSelector(selectSdkLanguage)\n const generators = getGenerators(api)\n const [item, setItem] = useState(method ? noComment(method) : type!)\n const [declarations, setDeclarations] = useState(\n getDeclarations(generators, sdkLanguage, item)\n )\n const [header, setHeader] = useState(`${sdkLanguage} Declaration`)\n\n useEffect(() => {\n setItem(method ? noComment(method) : type!)\n }, [method, type])\n\n useEffect(() => {\n const declarations = getDeclarations(generators, sdkLanguage, item)\n setDeclarations(declarations)\n const languages = Object.keys(declarations)\n if (languages.length > 1) {\n setHeader('Declarations')\n } else {\n setHeader(`${languages[0]} Declaration`)\n }\n }, [sdkLanguage, item])\n\n return (\n <CollapserCard heading={header} id=\"sdk declarations\">\n {Object.keys(declarations).length > 1 ? (\n <DocDeclarations declarations={declarations} />\n ) : (\n <DocCode\n language={Object.keys(declarations)[0]}\n code={Object.values(declarations)[0]}\n />\n )}\n </CollapserCard>\n )\n}\n"],"file":"DocSDKs.js"}
1
+ {"version":3,"sources":["../../../../src/components/DocSDKs/DocSDKs.tsx"],"names":["React","useState","useEffect","useSelector","CollapserCard","getGenerators","DocCode","selectSdkLanguage","isMethod","noComment","DocDeclarations","getDeclarations","generators","sdkLanguage","item","declarations","Object","entries","forEach","language","gen","code","declareMethod","declareType","DocSDKs","api","method","type","setItem","setDeclarations","header","setHeader","languages","keys","length","values"],"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 } from 'react'\nimport { useSelector } from 'react-redux'\nimport type {\n IMethod,\n IType,\n ApiModel,\n KeyedCollection,\n CodeGen,\n} from '@looker/sdk-codegen'\nimport { CollapserCard, getGenerators } from '@looker/run-it'\n\nimport { DocCode } from '../DocCode'\nimport { selectSdkLanguage } from '../../state'\nimport { isMethod } from '../../utils/path'\nimport { noComment } from './utils'\nimport { DocDeclarations } from './DocDeclarations'\n\ninterface LanguageSDKProps {\n /** API spec */\n api: ApiModel\n /** An SDK method */\n method?: IMethod\n /** An SDK type */\n type?: IType\n}\n\nconst getDeclarations = (\n generators: KeyedCollection<CodeGen>,\n sdkLanguage: string,\n item: IMethod | IType\n) => {\n const declarations: KeyedCollection<string> = {}\n Object.entries(generators).forEach(([language, gen]) => {\n if (sdkLanguage === 'All' || language === sdkLanguage) {\n const code = isMethod(item)\n ? gen.declareMethod('', item as IMethod)\n : gen.declareType('', item as IType)\n declarations[language] = code\n }\n })\n return declarations\n}\n\n/**\n * Given a method or a type, it renders its SDK declaration in all supported languages.\n */\nexport const DocSDKs: FC<LanguageSDKProps> = ({ api, method, type }) => {\n const sdkLanguage = useSelector(selectSdkLanguage)\n const generators = getGenerators(api)\n const [item, setItem] = useState(method ? noComment(method) : type!)\n const [declarations, setDeclarations] = useState(\n getDeclarations(generators, sdkLanguage, item)\n )\n const [header, setHeader] = useState(`${sdkLanguage} Declaration`)\n\n useEffect(() => {\n setItem(method ? noComment(method) : type!)\n }, [method, type])\n\n useEffect(() => {\n const declarations = getDeclarations(generators, sdkLanguage, item)\n setDeclarations(declarations)\n const languages = Object.keys(declarations)\n if (languages.length > 1) {\n setHeader('Declarations')\n } else {\n setHeader(`${languages[0]} Declaration`)\n }\n }, [sdkLanguage, item])\n\n return (\n <CollapserCard heading={header} id=\"sdk declarations\">\n {Object.keys(declarations).length > 1 ? (\n <DocDeclarations declarations={declarations} />\n ) : (\n <DocCode\n language={Object.keys(declarations)[0]}\n code={Object.values(declarations)[0]}\n />\n )}\n </CollapserCard>\n )\n}\n"],"file":"DocSDKs.js"}
@@ -1,9 +1,8 @@
1
1
  import React from 'react';
2
2
  import { Code, Tree, TreeItem } from '@looker/components';
3
3
  import { TypeOfType, typeOfType } from '@looker/sdk-codegen';
4
- import { useLocation } from 'react-router';
4
+ import { useRouteMatch } from 'react-router-dom';
5
5
  import { Link } from '../Link';
6
- import { getSpecKey } from '../../reducers';
7
6
  import { buildPath } from '../../utils';
8
7
  import { ExploreProperty, pickType, pickTypeProps, typeIcon, typeLinkPrefix, typeLinkSuffix } from '.';
9
8
  export var ExploreTypeLink = _ref => {
@@ -11,7 +10,8 @@ export var ExploreTypeLink = _ref => {
11
10
  type,
12
11
  api
13
12
  } = _ref;
14
- var location = useLocation();
13
+ var match = useRouteMatch('/:specKey');
14
+ var specKey = match === null || match === void 0 ? void 0 : match.params.specKey;
15
15
  var picked = pickType(type);
16
16
  var name = picked.name;
17
17
  var prefix = typeLinkPrefix(type);
@@ -20,7 +20,6 @@ export var ExploreTypeLink = _ref => {
20
20
  if (typed === TypeOfType.Intrinsic) return React.createElement(Code, {
21
21
  fontSize: "small"
22
22
  }, type.jsonName);
23
- var specKey = getSpecKey(location);
24
23
  return React.createElement(React.Fragment, null, prefix, React.createElement(Link, {
25
24
  key: type.fullName,
26
25
  to: buildPath(api, type, specKey)