@atlaskit/editor-plugin-card 2.6.2 → 2.6.3

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 (27) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/cjs/toolbar.js +1 -0
  3. package/dist/cjs/ui/{EditToolbarButton.js → EditToolbarButton/EditToolbarButtonPresentation.js} +15 -65
  4. package/dist/cjs/ui/EditToolbarButton/index.js +286 -0
  5. package/dist/cjs/ui/EditToolbarButton/types.js +5 -0
  6. package/dist/cjs/ui/useFetchDatasourceDataInfo.js +75 -0
  7. package/dist/es2019/toolbar.js +1 -0
  8. package/dist/es2019/ui/{EditToolbarButton.js → EditToolbarButton/EditToolbarButtonPresentation.js} +14 -67
  9. package/dist/es2019/ui/EditToolbarButton/index.js +278 -0
  10. package/dist/es2019/ui/EditToolbarButton/types.js +1 -0
  11. package/dist/es2019/ui/useFetchDatasourceDataInfo.js +41 -0
  12. package/dist/esm/toolbar.js +1 -0
  13. package/dist/esm/ui/EditToolbarButton/EditToolbarButtonPresentation.js +116 -0
  14. package/dist/esm/ui/{EditToolbarButton.js → EditToolbarButton/index.js} +116 -4
  15. package/dist/esm/ui/EditToolbarButton/types.js +1 -0
  16. package/dist/esm/ui/useFetchDatasourceDataInfo.js +67 -0
  17. package/dist/types/ui/EditToolbarButton/EditToolbarButtonPresentation.d.ts +9 -0
  18. package/dist/types/ui/EditToolbarButton/index.d.ts +3 -0
  19. package/dist/types/ui/EditToolbarButton/types.d.ts +29 -0
  20. package/dist/types/ui/useFetchDatasourceDataInfo.d.ts +10 -0
  21. package/dist/types-ts4.5/ui/EditToolbarButton/EditToolbarButtonPresentation.d.ts +9 -0
  22. package/dist/types-ts4.5/ui/EditToolbarButton/index.d.ts +3 -0
  23. package/dist/types-ts4.5/ui/EditToolbarButton/types.d.ts +29 -0
  24. package/dist/types-ts4.5/ui/useFetchDatasourceDataInfo.d.ts +10 -0
  25. package/package.json +4 -1
  26. package/dist/types/ui/EditToolbarButton.d.ts +0 -18
  27. package/dist/types-ts4.5/ui/EditToolbarButton.d.ts +0 -18
@@ -0,0 +1,278 @@
1
+ /** @jsx jsx */
2
+ import { useCallback, useMemo, useRef, useState } from 'react';
3
+
4
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled -- Ignored via go/DSP-18766
5
+ import { css, jsx } from '@emotion/react';
6
+ import { FormattedMessage } from 'react-intl-next';
7
+ import { linkToolbarMessages, cardMessages as messages } from '@atlaskit/editor-common/messages';
8
+ import { FloatingToolbarButton as Button, FloatingToolbarSeparator as Separator } from '@atlaskit/editor-common/ui';
9
+ import { ArrowKeyNavigationType, DropdownContainer as UiDropdown } from '@atlaskit/editor-common/ui-menu';
10
+ import ExpandIcon from '@atlaskit/icon/glyph/chevron-down';
11
+ import { ButtonItem } from '@atlaskit/menu';
12
+ import { fg } from '@atlaskit/platform-feature-flags';
13
+ import { Flex } from '@atlaskit/primitives';
14
+ import { editDatasource } from '../../ui/EditDatasourceButton';
15
+ import { focusEditorView, isDatasourceConfigEditable } from '../../utils';
16
+ import { CardContextProvider } from '../CardContextProvider';
17
+ import { useFetchDatasourceDataInfo } from '../useFetchDatasourceDataInfo';
18
+ import { useFetchDatasourceInfo } from '../useFetchDatasourceInfo';
19
+ import EditToolbarButtonPresentation from './EditToolbarButtonPresentation';
20
+ const dropdownExpandContainer = css({
21
+ margin: `0px ${"var(--ds-space-negative-050, -4px)"}`
22
+ });
23
+ const EditToolbarButtonWithCardContext = props => {
24
+ var _response$datasourceI;
25
+ const {
26
+ cardContext,
27
+ currentAppearance,
28
+ editorAnalyticsApi,
29
+ editorView,
30
+ intl,
31
+ onLinkEditClick,
32
+ url
33
+ } = props;
34
+ const {
35
+ extensionKey,
36
+ ...response
37
+ } = useFetchDatasourceInfo({
38
+ isRegularCardNode: true,
39
+ url,
40
+ cardContext
41
+ });
42
+ const datasourceId = (_response$datasourceI = response.datasourceId) !== null && _response$datasourceI !== void 0 ? _response$datasourceI : props.datasourceId;
43
+ const [isOpen, setIsOpen] = useState(false);
44
+ const containerRef = useRef();
45
+ const toggleOpen = () => setIsOpen(open => !open);
46
+ const onClose = () => setIsOpen(false);
47
+ const onEditLink = useCallback(() => {
48
+ if (editorView) {
49
+ onLinkEditClick(editorView.state, editorView.dispatch);
50
+ focusEditorView(editorView);
51
+ }
52
+ }, [editorView, onLinkEditClick]);
53
+ const editVariant = useMemo(() => {
54
+ const hasUrl = url !== null && url !== undefined;
55
+ if (!datasourceId || !isDatasourceConfigEditable(datasourceId)) {
56
+ if (hasUrl) {
57
+ return 'edit-link';
58
+ }
59
+ return 'none';
60
+ }
61
+ if (hasUrl) {
62
+ var _cardContext$store, _urlState$error;
63
+ const urlState = cardContext === null || cardContext === void 0 ? void 0 : (_cardContext$store = cardContext.store) === null || _cardContext$store === void 0 ? void 0 : _cardContext$store.getState()[url];
64
+ if ((urlState === null || urlState === void 0 ? void 0 : (_urlState$error = urlState.error) === null || _urlState$error === void 0 ? void 0 : _urlState$error.kind) === 'fatal') {
65
+ return 'edit-link';
66
+ }
67
+ return 'edit-dropdown';
68
+ } else {
69
+ return 'edit-datasource';
70
+ }
71
+ }, [cardContext === null || cardContext === void 0 ? void 0 : cardContext.store, datasourceId, url]);
72
+ const onEditDatasource = useCallback(() => {
73
+ if (editorView && datasourceId) {
74
+ editDatasource(datasourceId, editorAnalyticsApi, currentAppearance, extensionKey)(editorView.state, editorView.dispatch);
75
+ focusEditorView(editorView);
76
+ }
77
+ }, [currentAppearance, datasourceId, editorAnalyticsApi, editorView, extensionKey]);
78
+ switch (editVariant) {
79
+ case 'edit-link':
80
+ {
81
+ return jsx(Flex, {
82
+ gap: "space.050"
83
+ }, jsx(Button, {
84
+ testId: "edit-link",
85
+ onClick: onEditLink
86
+ }, jsx(FormattedMessage, linkToolbarMessages.editLink)), jsx(Separator, null));
87
+ }
88
+ case 'edit-datasource':
89
+ {
90
+ return jsx(Flex, {
91
+ gap: "space.050"
92
+ }, jsx(Button, {
93
+ testId: "edit-datasource",
94
+ tooltipContent: intl.formatMessage(linkToolbarMessages.editDatasourceStandaloneTooltip),
95
+ onClick: onEditDatasource
96
+ }, jsx(FormattedMessage, linkToolbarMessages.editDatasourceStandalone)), jsx(Separator, null));
97
+ }
98
+ case 'edit-dropdown':
99
+ {
100
+ const trigger = jsx(Flex, {
101
+ gap: "space.050"
102
+ }, jsx(Button, {
103
+ testId: "edit-dropdown-trigger",
104
+ iconAfter: jsx("span", {
105
+ css: dropdownExpandContainer
106
+ }, jsx(ExpandIcon, {
107
+ label: intl.formatMessage(messages.editDropdownTriggerTitle)
108
+ })),
109
+ onClick: toggleOpen,
110
+ selected: isOpen,
111
+ disabled: false,
112
+ ariaHasPopup: true
113
+ }, jsx(FormattedMessage, messages.editDropdownTriggerTitle)), jsx(Separator, null));
114
+ return jsx(Flex, {
115
+ ref: containerRef
116
+ }, jsx(UiDropdown, {
117
+ mountTo: containerRef.current,
118
+ isOpen: isOpen,
119
+ handleClickOutside: onClose,
120
+ handleEscapeKeydown: onClose,
121
+ trigger: trigger,
122
+ scrollableElement: containerRef.current,
123
+ arrowKeyNavigationProviderOptions: {
124
+ type: ArrowKeyNavigationType.MENU
125
+ }
126
+ }, jsx(ButtonItem, {
127
+ key: "edit.link",
128
+ onClick: onEditLink,
129
+ testId: "edit-dropdown-edit-link-item"
130
+ }, jsx(FormattedMessage, messages.editDropdownEditLinkTitle)), jsx(ButtonItem, {
131
+ key: "edit.datasource",
132
+ onClick: onEditDatasource,
133
+ testId: "edit-dropdown-edit-datasource-item"
134
+ }, jsx(FormattedMessage, messages.editDropdownEditDatasourceTitle))));
135
+ }
136
+ case 'none':
137
+ default:
138
+ return null;
139
+ }
140
+ };
141
+ const EditToolbarButtonWithUrl = props => {
142
+ const {
143
+ cardContext,
144
+ currentAppearance,
145
+ editorAnalyticsApi,
146
+ editorView,
147
+ intl,
148
+ onLinkEditClick,
149
+ url
150
+ } = props;
151
+ const {
152
+ extensionKey,
153
+ datasourceId
154
+ } = useFetchDatasourceInfo({
155
+ isRegularCardNode: true,
156
+ url,
157
+ cardContext
158
+ });
159
+ const editVariant = useMemo(() => {
160
+ var _cardContext$store2, _urlState$error2;
161
+ if (!datasourceId || !isDatasourceConfigEditable(datasourceId)) {
162
+ return 'edit-link';
163
+ }
164
+ const urlState = cardContext === null || cardContext === void 0 ? void 0 : (_cardContext$store2 = cardContext.store) === null || _cardContext$store2 === void 0 ? void 0 : _cardContext$store2.getState()[url];
165
+ if ((urlState === null || urlState === void 0 ? void 0 : (_urlState$error2 = urlState.error) === null || _urlState$error2 === void 0 ? void 0 : _urlState$error2.kind) === 'fatal') {
166
+ return 'edit-link';
167
+ }
168
+ return 'edit-dropdown';
169
+ }, [cardContext === null || cardContext === void 0 ? void 0 : cardContext.store, datasourceId, url]);
170
+ return jsx(EditToolbarButtonPresentation, {
171
+ datasourceId: datasourceId,
172
+ currentAppearance: currentAppearance,
173
+ editorAnalyticsApi: editorAnalyticsApi,
174
+ editVariant: editVariant,
175
+ editorView: editorView,
176
+ extensionKey: extensionKey,
177
+ onLinkEditClick: onLinkEditClick,
178
+ intl: intl
179
+ });
180
+ };
181
+ const EditToolbarButtonWithDatasourceId = props => {
182
+ const {
183
+ currentAppearance,
184
+ editorAnalyticsApi,
185
+ editorView,
186
+ intl,
187
+ onLinkEditClick,
188
+ datasourceId,
189
+ node
190
+ } = props;
191
+ const fetchData = useMemo(() => {
192
+ try {
193
+ var _attrs$datasource$vie, _attrs$datasource$vie2;
194
+ const attrs = node.attrs;
195
+ const parameters = attrs.datasource.parameters;
196
+ const visibleColumnKeys = (_attrs$datasource$vie = attrs.datasource.views[0]) === null || _attrs$datasource$vie === void 0 ? void 0 : (_attrs$datasource$vie2 = _attrs$datasource$vie.properties) === null || _attrs$datasource$vie2 === void 0 ? void 0 : _attrs$datasource$vie2.columns.map(c => c.key);
197
+ return {
198
+ parameters,
199
+ visibleColumnKeys
200
+ };
201
+ } catch (e) {
202
+ // eslint-disable-next-line no-console
203
+ console.error(e);
204
+ }
205
+ }, [node.attrs]);
206
+ const {
207
+ extensionKey
208
+ } = useFetchDatasourceDataInfo({
209
+ datasourceId,
210
+ parameters: fetchData === null || fetchData === void 0 ? void 0 : fetchData.parameters,
211
+ visibleColumnKeys: fetchData === null || fetchData === void 0 ? void 0 : fetchData.visibleColumnKeys
212
+ });
213
+ const editVariant = useMemo(() => {
214
+ if (!datasourceId || !isDatasourceConfigEditable(datasourceId)) {
215
+ return 'none';
216
+ }
217
+ return 'edit-datasource';
218
+ }, [datasourceId]);
219
+ return jsx(EditToolbarButtonPresentation, {
220
+ datasourceId: datasourceId,
221
+ currentAppearance: currentAppearance,
222
+ editorAnalyticsApi: editorAnalyticsApi,
223
+ editVariant: editVariant,
224
+ editorView: editorView,
225
+ extensionKey: extensionKey,
226
+ onLinkEditClick: onLinkEditClick,
227
+ intl: intl
228
+ });
229
+ };
230
+ export const EditToolbarButton = props => {
231
+ const {
232
+ currentAppearance,
233
+ datasourceId,
234
+ editorAnalyticsApi,
235
+ editorView,
236
+ intl,
237
+ onLinkEditClick,
238
+ url
239
+ } = props;
240
+ return jsx(CardContextProvider, null, ({
241
+ cardContext
242
+ }) => {
243
+ if (fg('enable_datasource_nourl_edit_dropdown_datafetch')) {
244
+ if (props.url) {
245
+ return jsx(EditToolbarButtonWithUrl, {
246
+ url: props.url,
247
+ intl: intl,
248
+ editorAnalyticsApi: editorAnalyticsApi,
249
+ editorView: editorView,
250
+ cardContext: cardContext,
251
+ onLinkEditClick: onLinkEditClick,
252
+ currentAppearance: currentAppearance
253
+ });
254
+ }
255
+ if (props.datasourceId && props.node) {
256
+ return jsx(EditToolbarButtonWithDatasourceId, {
257
+ datasourceId: props.datasourceId,
258
+ node: props.node,
259
+ intl: intl,
260
+ editorAnalyticsApi: editorAnalyticsApi,
261
+ editorView: editorView,
262
+ onLinkEditClick: onLinkEditClick,
263
+ currentAppearance: currentAppearance
264
+ });
265
+ }
266
+ }
267
+ return jsx(EditToolbarButtonWithCardContext, {
268
+ datasourceId: datasourceId,
269
+ url: url,
270
+ intl: intl,
271
+ editorAnalyticsApi: editorAnalyticsApi,
272
+ editorView: editorView,
273
+ cardContext: cardContext,
274
+ onLinkEditClick: onLinkEditClick,
275
+ currentAppearance: currentAppearance
276
+ });
277
+ });
278
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,41 @@
1
+ /** @jsx jsx */
2
+ import { useEffect, useState } from 'react';
3
+ import { DEFAULT_GET_DATASOURCE_DATA_PAGE_SIZE, useDatasourceClientExtension } from '@atlaskit/link-client-extension';
4
+ export const useFetchDatasourceDataInfo = ({
5
+ datasourceId,
6
+ parameters,
7
+ visibleColumnKeys
8
+ }) => {
9
+ const [extensionKey, setExtensionKey] = useState(undefined);
10
+ const {
11
+ getDatasourceData
12
+ } = useDatasourceClientExtension();
13
+ useEffect(() => {
14
+ const fetchDatasource = async () => {
15
+ try {
16
+ if (!datasourceId || !parameters || !visibleColumnKeys) {
17
+ return;
18
+ }
19
+ const datasourceDataRequest = {
20
+ parameters,
21
+ pageSize: DEFAULT_GET_DATASOURCE_DATA_PAGE_SIZE,
22
+ pageCursor: undefined,
23
+ fields: visibleColumnKeys,
24
+ includeSchema: true
25
+ };
26
+ const {
27
+ meta
28
+ } = await getDatasourceData(datasourceId, datasourceDataRequest, false);
29
+ setExtensionKey(meta.extensionKey);
30
+ } catch (e) {
31
+ // eslint-disable-next-line no-console
32
+ console.error(e);
33
+ setExtensionKey(undefined);
34
+ }
35
+ };
36
+ void fetchDatasource();
37
+ }, [getDatasourceData, visibleColumnKeys, parameters, datasourceId]);
38
+ return {
39
+ extensionKey
40
+ };
41
+ };
@@ -466,6 +466,7 @@ var getDatasourceButtonGroup = function getDatasourceButtonGroup(metadata, intl,
466
466
  render: function render(editorView) {
467
467
  return /*#__PURE__*/React.createElement(EditToolbarButton, {
468
468
  datasourceId: datasourceId,
469
+ node: node,
469
470
  key: "edit-toolbar-item",
470
471
  url: metadata.url,
471
472
  intl: intl,
@@ -0,0 +1,116 @@
1
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
+ /** @jsx jsx */
3
+ import { useCallback, useRef, useState } from 'react';
4
+
5
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled -- Ignored via go/DSP-18766
6
+ import { css, jsx } from '@emotion/react';
7
+ import { FormattedMessage } from 'react-intl-next';
8
+ import { linkToolbarMessages, cardMessages as messages } from '@atlaskit/editor-common/messages';
9
+ import { FloatingToolbarButton as Button, FloatingToolbarSeparator as Separator } from '@atlaskit/editor-common/ui';
10
+ import { ArrowKeyNavigationType, DropdownContainer as UiDropdown } from '@atlaskit/editor-common/ui-menu';
11
+ import ExpandIcon from '@atlaskit/icon/glyph/chevron-down';
12
+ import { ButtonItem } from '@atlaskit/menu';
13
+ import { Flex } from '@atlaskit/primitives';
14
+ import { focusEditorView } from '../../utils';
15
+ import { editDatasource } from '../EditDatasourceButton';
16
+ var dropdownExpandContainer = css({
17
+ margin: "0px ".concat("var(--ds-space-negative-050, -4px)")
18
+ });
19
+ var EditToolbarButtonPresentation = function EditToolbarButtonPresentation(_ref) {
20
+ var datasourceId = _ref.datasourceId,
21
+ currentAppearance = _ref.currentAppearance,
22
+ editorAnalyticsApi = _ref.editorAnalyticsApi,
23
+ editVariant = _ref.editVariant,
24
+ editorView = _ref.editorView,
25
+ extensionKey = _ref.extensionKey,
26
+ onLinkEditClick = _ref.onLinkEditClick,
27
+ intl = _ref.intl;
28
+ var _useState = useState(false),
29
+ _useState2 = _slicedToArray(_useState, 2),
30
+ isOpen = _useState2[0],
31
+ setIsOpen = _useState2[1];
32
+ var containerRef = useRef();
33
+ var toggleOpen = function toggleOpen() {
34
+ return setIsOpen(function (open) {
35
+ return !open;
36
+ });
37
+ };
38
+ var onClose = function onClose() {
39
+ return setIsOpen(false);
40
+ };
41
+ var onEditLink = useCallback(function () {
42
+ if (editorView) {
43
+ onLinkEditClick(editorView.state, editorView.dispatch);
44
+ focusEditorView(editorView);
45
+ }
46
+ }, [editorView, onLinkEditClick]);
47
+ var onEditDatasource = useCallback(function () {
48
+ if (editorView && datasourceId) {
49
+ editDatasource(datasourceId, editorAnalyticsApi, currentAppearance, extensionKey)(editorView.state, editorView.dispatch);
50
+ focusEditorView(editorView);
51
+ }
52
+ }, [currentAppearance, datasourceId, editorAnalyticsApi, editorView, extensionKey]);
53
+ switch (editVariant) {
54
+ case 'edit-link':
55
+ {
56
+ return jsx(Flex, {
57
+ gap: "space.050"
58
+ }, jsx(Button, {
59
+ testId: "edit-link",
60
+ onClick: onEditLink
61
+ }, jsx(FormattedMessage, linkToolbarMessages.editLink)), jsx(Separator, null));
62
+ }
63
+ case 'edit-datasource':
64
+ {
65
+ return jsx(Flex, {
66
+ gap: "space.050"
67
+ }, jsx(Button, {
68
+ testId: "edit-datasource",
69
+ tooltipContent: intl.formatMessage(linkToolbarMessages.editDatasourceStandaloneTooltip),
70
+ onClick: onEditDatasource
71
+ }, jsx(FormattedMessage, linkToolbarMessages.editDatasourceStandalone)), jsx(Separator, null));
72
+ }
73
+ case 'edit-dropdown':
74
+ {
75
+ var trigger = jsx(Flex, {
76
+ gap: "space.050"
77
+ }, jsx(Button, {
78
+ testId: "edit-dropdown-trigger",
79
+ iconAfter: jsx("span", {
80
+ css: dropdownExpandContainer
81
+ }, jsx(ExpandIcon, {
82
+ label: intl.formatMessage(messages.editDropdownTriggerTitle)
83
+ })),
84
+ onClick: toggleOpen,
85
+ selected: isOpen,
86
+ disabled: false,
87
+ ariaHasPopup: true
88
+ }, jsx(FormattedMessage, messages.editDropdownTriggerTitle)), jsx(Separator, null));
89
+ return jsx(Flex, {
90
+ ref: containerRef
91
+ }, jsx(UiDropdown, {
92
+ mountTo: containerRef.current,
93
+ isOpen: isOpen,
94
+ handleClickOutside: onClose,
95
+ handleEscapeKeydown: onClose,
96
+ trigger: trigger,
97
+ scrollableElement: containerRef.current,
98
+ arrowKeyNavigationProviderOptions: {
99
+ type: ArrowKeyNavigationType.MENU
100
+ }
101
+ }, jsx(ButtonItem, {
102
+ key: "edit.link",
103
+ onClick: onEditLink,
104
+ testId: "edit-dropdown-edit-link-item"
105
+ }, jsx(FormattedMessage, messages.editDropdownEditLinkTitle)), jsx(ButtonItem, {
106
+ key: "edit.datasource",
107
+ onClick: onEditDatasource,
108
+ testId: "edit-dropdown-edit-datasource-item"
109
+ }, jsx(FormattedMessage, messages.editDropdownEditDatasourceTitle))));
110
+ }
111
+ case 'none':
112
+ default:
113
+ return null;
114
+ }
115
+ };
116
+ export default EditToolbarButtonPresentation;
@@ -12,11 +12,14 @@ import { FloatingToolbarButton as Button, FloatingToolbarSeparator as Separator
12
12
  import { ArrowKeyNavigationType, DropdownContainer as UiDropdown } from '@atlaskit/editor-common/ui-menu';
13
13
  import ExpandIcon from '@atlaskit/icon/glyph/chevron-down';
14
14
  import { ButtonItem } from '@atlaskit/menu';
15
+ import { fg } from '@atlaskit/platform-feature-flags';
15
16
  import { Flex } from '@atlaskit/primitives';
16
- import { editDatasource } from '../ui/EditDatasourceButton';
17
- import { focusEditorView, isDatasourceConfigEditable } from '../utils';
18
- import { CardContextProvider } from './CardContextProvider';
19
- import { useFetchDatasourceInfo } from './useFetchDatasourceInfo';
17
+ import { editDatasource } from '../../ui/EditDatasourceButton';
18
+ import { focusEditorView, isDatasourceConfigEditable } from '../../utils';
19
+ import { CardContextProvider } from '../CardContextProvider';
20
+ import { useFetchDatasourceDataInfo } from '../useFetchDatasourceDataInfo';
21
+ import { useFetchDatasourceInfo } from '../useFetchDatasourceInfo';
22
+ import EditToolbarButtonPresentation from './EditToolbarButtonPresentation';
20
23
  var dropdownExpandContainer = css({
21
24
  margin: "0px ".concat("var(--ds-space-negative-050, -4px)")
22
25
  });
@@ -144,6 +147,91 @@ var EditToolbarButtonWithCardContext = function EditToolbarButtonWithCardContext
144
147
  return null;
145
148
  }
146
149
  };
150
+ var EditToolbarButtonWithUrl = function EditToolbarButtonWithUrl(props) {
151
+ var cardContext = props.cardContext,
152
+ currentAppearance = props.currentAppearance,
153
+ editorAnalyticsApi = props.editorAnalyticsApi,
154
+ editorView = props.editorView,
155
+ intl = props.intl,
156
+ onLinkEditClick = props.onLinkEditClick,
157
+ url = props.url;
158
+ var _useFetchDatasourceIn2 = useFetchDatasourceInfo({
159
+ isRegularCardNode: true,
160
+ url: url,
161
+ cardContext: cardContext
162
+ }),
163
+ extensionKey = _useFetchDatasourceIn2.extensionKey,
164
+ datasourceId = _useFetchDatasourceIn2.datasourceId;
165
+ var editVariant = useMemo(function () {
166
+ var _cardContext$store2, _urlState$error2;
167
+ if (!datasourceId || !isDatasourceConfigEditable(datasourceId)) {
168
+ return 'edit-link';
169
+ }
170
+ var urlState = cardContext === null || cardContext === void 0 || (_cardContext$store2 = cardContext.store) === null || _cardContext$store2 === void 0 ? void 0 : _cardContext$store2.getState()[url];
171
+ if ((urlState === null || urlState === void 0 || (_urlState$error2 = urlState.error) === null || _urlState$error2 === void 0 ? void 0 : _urlState$error2.kind) === 'fatal') {
172
+ return 'edit-link';
173
+ }
174
+ return 'edit-dropdown';
175
+ }, [cardContext === null || cardContext === void 0 ? void 0 : cardContext.store, datasourceId, url]);
176
+ return jsx(EditToolbarButtonPresentation, {
177
+ datasourceId: datasourceId,
178
+ currentAppearance: currentAppearance,
179
+ editorAnalyticsApi: editorAnalyticsApi,
180
+ editVariant: editVariant,
181
+ editorView: editorView,
182
+ extensionKey: extensionKey,
183
+ onLinkEditClick: onLinkEditClick,
184
+ intl: intl
185
+ });
186
+ };
187
+ var EditToolbarButtonWithDatasourceId = function EditToolbarButtonWithDatasourceId(props) {
188
+ var currentAppearance = props.currentAppearance,
189
+ editorAnalyticsApi = props.editorAnalyticsApi,
190
+ editorView = props.editorView,
191
+ intl = props.intl,
192
+ onLinkEditClick = props.onLinkEditClick,
193
+ datasourceId = props.datasourceId,
194
+ node = props.node;
195
+ var fetchData = useMemo(function () {
196
+ try {
197
+ var _attrs$datasource$vie;
198
+ var attrs = node.attrs;
199
+ var parameters = attrs.datasource.parameters;
200
+ var visibleColumnKeys = (_attrs$datasource$vie = attrs.datasource.views[0]) === null || _attrs$datasource$vie === void 0 || (_attrs$datasource$vie = _attrs$datasource$vie.properties) === null || _attrs$datasource$vie === void 0 ? void 0 : _attrs$datasource$vie.columns.map(function (c) {
201
+ return c.key;
202
+ });
203
+ return {
204
+ parameters: parameters,
205
+ visibleColumnKeys: visibleColumnKeys
206
+ };
207
+ } catch (e) {
208
+ // eslint-disable-next-line no-console
209
+ console.error(e);
210
+ }
211
+ }, [node.attrs]);
212
+ var _useFetchDatasourceDa = useFetchDatasourceDataInfo({
213
+ datasourceId: datasourceId,
214
+ parameters: fetchData === null || fetchData === void 0 ? void 0 : fetchData.parameters,
215
+ visibleColumnKeys: fetchData === null || fetchData === void 0 ? void 0 : fetchData.visibleColumnKeys
216
+ }),
217
+ extensionKey = _useFetchDatasourceDa.extensionKey;
218
+ var editVariant = useMemo(function () {
219
+ if (!datasourceId || !isDatasourceConfigEditable(datasourceId)) {
220
+ return 'none';
221
+ }
222
+ return 'edit-datasource';
223
+ }, [datasourceId]);
224
+ return jsx(EditToolbarButtonPresentation, {
225
+ datasourceId: datasourceId,
226
+ currentAppearance: currentAppearance,
227
+ editorAnalyticsApi: editorAnalyticsApi,
228
+ editVariant: editVariant,
229
+ editorView: editorView,
230
+ extensionKey: extensionKey,
231
+ onLinkEditClick: onLinkEditClick,
232
+ intl: intl
233
+ });
234
+ };
147
235
  export var EditToolbarButton = function EditToolbarButton(props) {
148
236
  var currentAppearance = props.currentAppearance,
149
237
  datasourceId = props.datasourceId,
@@ -154,6 +242,30 @@ export var EditToolbarButton = function EditToolbarButton(props) {
154
242
  url = props.url;
155
243
  return jsx(CardContextProvider, null, function (_ref) {
156
244
  var cardContext = _ref.cardContext;
245
+ if (fg('enable_datasource_nourl_edit_dropdown_datafetch')) {
246
+ if (props.url) {
247
+ return jsx(EditToolbarButtonWithUrl, {
248
+ url: props.url,
249
+ intl: intl,
250
+ editorAnalyticsApi: editorAnalyticsApi,
251
+ editorView: editorView,
252
+ cardContext: cardContext,
253
+ onLinkEditClick: onLinkEditClick,
254
+ currentAppearance: currentAppearance
255
+ });
256
+ }
257
+ if (props.datasourceId && props.node) {
258
+ return jsx(EditToolbarButtonWithDatasourceId, {
259
+ datasourceId: props.datasourceId,
260
+ node: props.node,
261
+ intl: intl,
262
+ editorAnalyticsApi: editorAnalyticsApi,
263
+ editorView: editorView,
264
+ onLinkEditClick: onLinkEditClick,
265
+ currentAppearance: currentAppearance
266
+ });
267
+ }
268
+ }
157
269
  return jsx(EditToolbarButtonWithCardContext, {
158
270
  datasourceId: datasourceId,
159
271
  url: url,
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,67 @@
1
+ import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
4
+ /** @jsx jsx */
5
+ import { useEffect, useState } from 'react';
6
+ import { DEFAULT_GET_DATASOURCE_DATA_PAGE_SIZE, useDatasourceClientExtension } from '@atlaskit/link-client-extension';
7
+ export var useFetchDatasourceDataInfo = function useFetchDatasourceDataInfo(_ref) {
8
+ var datasourceId = _ref.datasourceId,
9
+ parameters = _ref.parameters,
10
+ visibleColumnKeys = _ref.visibleColumnKeys;
11
+ var _useState = useState(undefined),
12
+ _useState2 = _slicedToArray(_useState, 2),
13
+ extensionKey = _useState2[0],
14
+ setExtensionKey = _useState2[1];
15
+ var _useDatasourceClientE = useDatasourceClientExtension(),
16
+ getDatasourceData = _useDatasourceClientE.getDatasourceData;
17
+ useEffect(function () {
18
+ var fetchDatasource = /*#__PURE__*/function () {
19
+ var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
20
+ var datasourceDataRequest, _yield$getDatasourceD, meta;
21
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
22
+ while (1) switch (_context.prev = _context.next) {
23
+ case 0:
24
+ _context.prev = 0;
25
+ if (!(!datasourceId || !parameters || !visibleColumnKeys)) {
26
+ _context.next = 3;
27
+ break;
28
+ }
29
+ return _context.abrupt("return");
30
+ case 3:
31
+ datasourceDataRequest = {
32
+ parameters: parameters,
33
+ pageSize: DEFAULT_GET_DATASOURCE_DATA_PAGE_SIZE,
34
+ pageCursor: undefined,
35
+ fields: visibleColumnKeys,
36
+ includeSchema: true
37
+ };
38
+ _context.next = 6;
39
+ return getDatasourceData(datasourceId, datasourceDataRequest, false);
40
+ case 6:
41
+ _yield$getDatasourceD = _context.sent;
42
+ meta = _yield$getDatasourceD.meta;
43
+ setExtensionKey(meta.extensionKey);
44
+ _context.next = 15;
45
+ break;
46
+ case 11:
47
+ _context.prev = 11;
48
+ _context.t0 = _context["catch"](0);
49
+ // eslint-disable-next-line no-console
50
+ console.error(_context.t0);
51
+ setExtensionKey(undefined);
52
+ case 15:
53
+ case "end":
54
+ return _context.stop();
55
+ }
56
+ }, _callee, null, [[0, 11]]);
57
+ }));
58
+ return function fetchDatasource() {
59
+ return _ref2.apply(this, arguments);
60
+ };
61
+ }();
62
+ void fetchDatasource();
63
+ }, [getDatasourceData, visibleColumnKeys, parameters, datasourceId]);
64
+ return {
65
+ extensionKey: extensionKey
66
+ };
67
+ };
@@ -0,0 +1,9 @@
1
+ import { jsx } from '@emotion/react';
2
+ import type { EditDatasourceToolbarButtonWithCommonProps, EditVariant } from './types';
3
+ interface EditToolbarPresentationProps extends EditDatasourceToolbarButtonWithCommonProps {
4
+ extensionKey?: string;
5
+ datasourceId?: string;
6
+ editVariant: EditVariant;
7
+ }
8
+ declare const EditToolbarButtonPresentation: ({ datasourceId, currentAppearance, editorAnalyticsApi, editVariant, editorView, extensionKey, onLinkEditClick, intl, }: EditToolbarPresentationProps) => jsx.JSX.Element | null;
9
+ export default EditToolbarButtonPresentation;
@@ -0,0 +1,3 @@
1
+ import { jsx } from '@emotion/react';
2
+ import type { EditDatasourceToolbarButtonProps } from './types';
3
+ export declare const EditToolbarButton: (props: EditDatasourceToolbarButtonProps) => jsx.JSX.Element;