@looker/api-explorer 0.9.26 → 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.
- package/CHANGELOG.md +47 -1
- package/e2e/e2e.spec.ts +1 -1
- package/lib/ApiExplorer.d.ts +2 -6
- package/lib/ApiExplorer.js +53 -74
- package/lib/ApiExplorer.js.map +1 -1
- package/lib/StandaloneApiExplorer.js +35 -47
- package/lib/StandaloneApiExplorer.js.map +1 -1
- package/lib/components/Banner/Banner.d.ts +8 -0
- package/lib/components/Banner/Banner.js +70 -0
- package/lib/components/Banner/Banner.js.map +1 -0
- package/lib/components/Banner/index.d.ts +1 -0
- package/lib/components/Banner/index.js +14 -0
- package/lib/components/Banner/index.js.map +1 -0
- package/lib/components/DocSDKs/DocSDKs.js +3 -3
- package/lib/components/DocSDKs/DocSDKs.js.map +1 -1
- package/lib/components/ExploreType/ExploreType.js +3 -5
- package/lib/components/ExploreType/ExploreType.js.map +1 -1
- package/lib/components/Header/Header.d.ts +2 -5
- package/lib/components/Header/Header.js +1 -5
- package/lib/components/Header/Header.js.map +1 -1
- package/lib/components/SelectorContainer/ApiSpecSelector.d.ts +2 -5
- package/lib/components/SelectorContainer/ApiSpecSelector.js +5 -5
- package/lib/components/SelectorContainer/ApiSpecSelector.js.map +1 -1
- package/lib/components/SelectorContainer/SelectorContainer.d.ts +2 -5
- package/lib/components/SelectorContainer/SelectorContainer.js +3 -7
- package/lib/components/SelectorContainer/SelectorContainer.js.map +1 -1
- package/lib/components/SideNav/SideNav.d.ts +2 -5
- package/lib/components/SideNav/SideNav.js.map +1 -1
- package/lib/components/index.d.ts +1 -0
- package/lib/components/index.js +8 -0
- package/lib/components/index.js.map +1 -1
- package/lib/esm/ApiExplorer.js +54 -74
- package/lib/esm/ApiExplorer.js.map +1 -1
- package/lib/esm/StandaloneApiExplorer.js +34 -48
- package/lib/esm/StandaloneApiExplorer.js.map +1 -1
- package/lib/esm/components/Banner/Banner.js +54 -0
- package/lib/esm/components/Banner/Banner.js.map +1 -0
- package/lib/esm/components/Banner/index.js +2 -0
- package/lib/esm/components/Banner/index.js.map +1 -0
- package/lib/esm/components/DocSDKs/DocSDKs.js +2 -2
- package/lib/esm/components/DocSDKs/DocSDKs.js.map +1 -1
- package/lib/esm/components/ExploreType/ExploreType.js +3 -4
- package/lib/esm/components/ExploreType/ExploreType.js.map +1 -1
- package/lib/esm/components/Header/Header.js +1 -5
- package/lib/esm/components/Header/Header.js.map +1 -1
- package/lib/esm/components/SelectorContainer/ApiSpecSelector.js +4 -5
- package/lib/esm/components/SelectorContainer/ApiSpecSelector.js.map +1 -1
- package/lib/esm/components/SelectorContainer/SelectorContainer.js +3 -7
- package/lib/esm/components/SelectorContainer/SelectorContainer.js.map +1 -1
- package/lib/esm/components/SideNav/SideNav.js.map +1 -1
- package/lib/esm/components/index.js +1 -0
- package/lib/esm/components/index.js.map +1 -1
- package/lib/esm/index.js +1 -0
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/routes/AppRouter.js +3 -7
- package/lib/esm/routes/AppRouter.js.map +1 -1
- package/lib/esm/scenes/DiffScene/DiffScene.js +43 -99
- package/lib/esm/scenes/DiffScene/DiffScene.js.map +1 -1
- package/lib/esm/scenes/DiffScene/DocDiff/DiffItem.js +9 -13
- package/lib/esm/scenes/DiffScene/DocDiff/DiffItem.js.map +1 -1
- package/lib/esm/scenes/DiffScene/DocDiff/DocDiff.js +2 -2
- package/lib/esm/scenes/DiffScene/DocDiff/DocDiff.js.map +1 -1
- package/lib/esm/scenes/MethodScene/MethodScene.js +4 -5
- package/lib/esm/scenes/MethodScene/MethodScene.js.map +1 -1
- package/lib/esm/state/index.js +1 -0
- package/lib/esm/state/index.js.map +1 -1
- package/lib/esm/state/specs/index.js +3 -0
- package/lib/esm/state/specs/index.js.map +1 -0
- package/lib/esm/state/specs/sagas.js +58 -0
- package/lib/esm/state/specs/sagas.js.map +1 -0
- package/lib/esm/state/specs/selectors.js +8 -0
- package/lib/esm/state/specs/selectors.js.map +1 -0
- package/lib/esm/state/specs/slice.js +55 -0
- package/lib/esm/state/specs/slice.js.map +1 -0
- package/lib/esm/state/store.js +53 -2
- package/lib/esm/state/store.js.map +1 -1
- package/lib/esm/test-utils/redux.js +9 -5
- package/lib/esm/test-utils/redux.js.map +1 -1
- package/lib/esm/utils/adaptorUtils.js +101 -0
- package/lib/esm/utils/adaptorUtils.js.map +1 -0
- package/lib/esm/utils/apixAdaptor.js +48 -0
- package/lib/esm/utils/apixAdaptor.js.map +1 -0
- package/lib/esm/utils/index.js +3 -1
- package/lib/esm/utils/index.js.map +1 -1
- package/lib/esm/utils/path.js +27 -2
- package/lib/esm/utils/path.js.map +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.js +13 -0
- package/lib/index.js.map +1 -1
- package/lib/routes/AppRouter.d.ts +1 -5
- package/lib/routes/AppRouter.js +3 -7
- package/lib/routes/AppRouter.js.map +1 -1
- package/lib/scenes/DiffScene/DiffScene.js +45 -100
- package/lib/scenes/DiffScene/DiffScene.js.map +1 -1
- package/lib/scenes/DiffScene/DocDiff/DiffItem.js +9 -13
- package/lib/scenes/DiffScene/DocDiff/DiffItem.js.map +1 -1
- package/lib/scenes/DiffScene/DocDiff/DocDiff.js +2 -2
- package/lib/scenes/DiffScene/DocDiff/DocDiff.js.map +1 -1
- package/lib/scenes/MethodScene/MethodScene.d.ts +0 -4
- package/lib/scenes/MethodScene/MethodScene.js +5 -5
- package/lib/scenes/MethodScene/MethodScene.js.map +1 -1
- package/lib/state/index.d.ts +1 -0
- package/lib/state/index.js +13 -0
- package/lib/state/index.js.map +1 -1
- package/lib/state/settings/selectors.d.ts +1 -1
- package/lib/state/settings/slice.d.ts +1 -1
- package/lib/state/specs/index.d.ts +2 -0
- package/lib/state/specs/index.js +32 -0
- package/lib/state/specs/index.js.map +1 -0
- package/lib/state/specs/sagas.d.ts +1 -0
- package/lib/state/specs/sagas.js +67 -0
- package/lib/state/specs/sagas.js.map +1 -0
- package/lib/state/specs/selectors.d.ts +4 -0
- package/lib/state/specs/selectors.js +20 -0
- package/lib/state/specs/selectors.js.map +1 -0
- package/lib/state/specs/slice.d.ts +49 -0
- package/lib/state/specs/slice.js +70 -0
- package/lib/state/specs/slice.js.map +1 -0
- package/lib/state/store.d.ts +3 -0
- package/lib/state/store.js +56 -2
- package/lib/state/store.js.map +1 -1
- package/lib/test-data/declarations.d.ts +2 -0
- package/lib/test-data/examples.d.ts +2 -0
- package/lib/test-data/index.d.ts +3 -0
- package/lib/test-data/index.js +12 -42
- package/lib/test-data/index.js.map +1 -1
- package/lib/test-data/specs.d.ts +10 -0
- package/lib/test-data/specs.js +6 -6
- package/lib/test-data/specs.js.map +1 -1
- package/lib/test-utils/redux.d.ts +2 -1
- package/lib/test-utils/redux.js +9 -4
- package/lib/test-utils/redux.js.map +1 -1
- package/lib/utils/adaptorUtils.d.ts +30 -0
- package/lib/utils/adaptorUtils.js +124 -0
- package/lib/utils/adaptorUtils.js.map +1 -0
- package/lib/utils/apixAdaptor.d.ts +15 -0
- package/lib/utils/apixAdaptor.js +67 -0
- package/lib/utils/apixAdaptor.js.map +1 -0
- package/lib/utils/index.d.ts +3 -1
- package/lib/utils/index.js +45 -30
- package/lib/utils/index.js.map +1 -1
- package/lib/utils/path.d.ts +3 -0
- package/lib/utils/path.js +32 -2
- package/lib/utils/path.js.map +1 -1
- package/package.json +10 -10
- package/src/ApiExplorer.tsx +47 -74
- package/src/StandaloneApiExplorer.tsx +37 -52
- package/src/components/Banner/Banner.spec.tsx +99 -0
- package/src/components/Banner/Banner.tsx +87 -0
- package/src/{reducers → components/Banner}/index.ts +1 -1
- package/src/components/DocSDKs/DocSDKs.tsx +4 -5
- package/src/components/ExploreType/ExploreType.spec.tsx +0 -23
- package/src/components/ExploreType/ExploreType.tsx +5 -6
- package/src/components/ExploreType/exploreUtils.spec.tsx +1 -1
- package/src/components/Header/Header.spec.tsx +9 -30
- package/src/components/Header/Header.tsx +3 -10
- package/src/components/SelectorContainer/ApiSpecSelector.spec.tsx +31 -44
- package/src/components/SelectorContainer/ApiSpecSelector.tsx +6 -12
- package/src/components/SelectorContainer/SelectorContainer.spec.tsx +7 -26
- package/src/components/SelectorContainer/SelectorContainer.tsx +4 -10
- package/src/components/SideNav/SideNav.spec.tsx +12 -45
- package/src/components/SideNav/SideNav.tsx +1 -7
- package/src/components/index.ts +1 -0
- package/src/index.ts +1 -0
- package/src/routes/AppRouter.tsx +25 -37
- package/src/scenes/DiffScene/DiffScene.tsx +47 -84
- package/src/scenes/DiffScene/DocDiff/DiffItem.spec.tsx +9 -16
- package/src/scenes/DiffScene/DocDiff/DiffItem.tsx +11 -12
- package/src/scenes/DiffScene/DocDiff/DocDiff.tsx +2 -2
- package/src/scenes/MethodScene/MethodScene.tsx +4 -10
- package/src/state/index.ts +1 -0
- package/src/{reducers/spec → state/specs}/index.ts +2 -3
- package/src/state/specs/sagas.spec.ts +135 -0
- package/src/state/specs/sagas.ts +81 -0
- package/src/{reducers/spec/actions.spec.ts → state/specs/selectors.ts} +12 -11
- package/src/state/specs/slice.ts +109 -0
- package/src/state/store.ts +58 -0
- package/src/test-data/index.ts +1 -8
- package/src/test-data/specs.ts +6 -6
- package/src/test-utils/redux.tsx +15 -4
- package/src/utils/adaptorUtils.ts +181 -0
- package/src/utils/apixAdaptor.ts +72 -0
- package/src/utils/index.ts +3 -7
- package/src/utils/path.ts +25 -2
- package/lib/esm/reducers/index.js +0 -2
- package/lib/esm/reducers/index.js.map +0 -1
- package/lib/esm/reducers/spec/actions.js +0 -19
- package/lib/esm/reducers/spec/actions.js.map +0 -1
- package/lib/esm/reducers/spec/index.js +0 -4
- package/lib/esm/reducers/spec/index.js.map +0 -1
- package/lib/esm/reducers/spec/reducer.js +0 -62
- package/lib/esm/reducers/spec/reducer.js.map +0 -1
- package/lib/esm/reducers/spec/utils.js +0 -74
- package/lib/esm/reducers/spec/utils.js.map +0 -1
- package/lib/reducers/index.d.ts +0 -1
- package/lib/reducers/index.js +0 -19
- package/lib/reducers/index.js.map +0 -1
- package/lib/reducers/spec/actions.d.ts +0 -20
- package/lib/reducers/spec/actions.js +0 -31
- package/lib/reducers/spec/actions.js.map +0 -1
- package/lib/reducers/spec/index.d.ts +0 -3
- package/lib/reducers/spec/index.js +0 -45
- package/lib/reducers/spec/index.js.map +0 -1
- package/lib/reducers/spec/reducer.d.ts +0 -7
- package/lib/reducers/spec/reducer.js +0 -73
- package/lib/reducers/spec/reducer.js.map +0 -1
- package/lib/reducers/spec/utils.d.ts +0 -7
- package/lib/reducers/spec/utils.js +0 -91
- package/lib/reducers/spec/utils.js.map +0 -1
- package/src/reducers/spec/actions.ts +0 -62
- package/src/reducers/spec/reducer.spec.ts +0 -44
- package/src/reducers/spec/reducer.ts +0 -69
- package/src/reducers/spec/utils.spec.ts +0 -138
- package/src/reducers/spec/utils.ts +0 -123
package/lib/esm/ApiExplorer.js
CHANGED
|
@@ -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, {
|
|
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 {
|
|
24
|
-
import {
|
|
25
|
-
import {
|
|
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
|
-
|
|
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
|
-
|
|
54
|
-
|
|
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
|
-
|
|
85
|
-
|
|
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
|
-
|
|
104
|
-
|
|
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
|
-
}, !
|
|
117
|
-
message:
|
|
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(
|
|
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
|
-
|
|
144
|
+
ml: "large",
|
|
145
|
+
mr: "large"
|
|
162
146
|
}))), hasNavigation && React.createElement(SideNav, {
|
|
163
147
|
headless: headless,
|
|
164
|
-
|
|
165
|
-
|
|
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:", ";"],
|
|
159
|
+
})(["width:", ";"], _ref2 => {
|
|
180
160
|
var {
|
|
181
161
|
isOpen,
|
|
182
162
|
headless
|
|
183
|
-
} =
|
|
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 {
|
|
6
|
+
import { initRunItSdk, RunItProvider } from '@looker/run-it';
|
|
7
|
+
import { OAuthScene } from '@looker/extension-utils';
|
|
7
8
|
import { Provider } from 'react-redux';
|
|
8
|
-
import {
|
|
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
|
|
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
|
-
|
|
42
|
-
|
|
43
|
-
var
|
|
44
|
-
var
|
|
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
|
-
|
|
47
|
-
|
|
48
|
-
|
|
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
|
-
|
|
53
|
-
|
|
28
|
+
|
|
29
|
+
return function login() {
|
|
30
|
+
return _ref2.apply(this, arguments);
|
|
31
|
+
};
|
|
32
|
+
}();
|
|
33
|
+
|
|
34
|
+
if (canLogin) {
|
|
35
|
+
login();
|
|
54
36
|
}
|
|
55
|
-
}, [
|
|
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
|
-
},
|
|
61
|
-
|
|
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","
|
|
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 @@
|
|
|
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
|
|
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","
|
|
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 {
|
|
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
|
|
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)
|