@atlaskit/link-datasource 0.14.4
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 +233 -0
- package/README.md +3 -0
- package/dist/cjs/hooks/useDatasourceTableState.js +133 -0
- package/dist/cjs/index.js +19 -0
- package/dist/cjs/services/getAvailableJiraSites.js +65 -0
- package/dist/cjs/services/makeGetJqlAutocompleteData.js +66 -0
- package/dist/cjs/services/makeGetJqlSuggestionsData.js +55 -0
- package/dist/cjs/ui/issue-like-table/column-picker/index.js +93 -0
- package/dist/cjs/ui/issue-like-table/column-picker/types.js +5 -0
- package/dist/cjs/ui/issue-like-table/draggable-table-heading.js +182 -0
- package/dist/cjs/ui/issue-like-table/empty-state/index.js +127 -0
- package/dist/cjs/ui/issue-like-table/empty-state/priority.js +28 -0
- package/dist/cjs/ui/issue-like-table/empty-state/type.js +51 -0
- package/dist/cjs/ui/issue-like-table/empty-state/types.js +5 -0
- package/dist/cjs/ui/issue-like-table/index.js +300 -0
- package/dist/cjs/ui/issue-like-table/render-type/boolean/index.js +30 -0
- package/dist/cjs/ui/issue-like-table/render-type/boolean/messages.js +20 -0
- package/dist/cjs/ui/issue-like-table/render-type/date-time/index.js +47 -0
- package/dist/cjs/ui/issue-like-table/render-type/icon/index.js +34 -0
- package/dist/cjs/ui/issue-like-table/render-type/index.js +63 -0
- package/dist/cjs/ui/issue-like-table/render-type/link/index.js +56 -0
- package/dist/cjs/ui/issue-like-table/render-type/number/index.js +24 -0
- package/dist/cjs/ui/issue-like-table/render-type/status/index.js +28 -0
- package/dist/cjs/ui/issue-like-table/render-type/tag/index.js +27 -0
- package/dist/cjs/ui/issue-like-table/render-type/text/index.js +23 -0
- package/dist/cjs/ui/issue-like-table/render-type/user/index.js +36 -0
- package/dist/cjs/ui/issue-like-table/render-type/user/messages.js +15 -0
- package/dist/cjs/ui/issue-like-table/styled.js +12 -0
- package/dist/cjs/ui/issue-like-table/types.js +5 -0
- package/dist/cjs/ui/issue-like-table/useIsOnScreen.js +32 -0
- package/dist/cjs/ui/jira-issues/modal/basic-search-input/index.js +52 -0
- package/dist/cjs/ui/jira-issues/modal/basic-search-input/messages.js +15 -0
- package/dist/cjs/ui/jira-issues/modal/index.js +267 -0
- package/dist/cjs/ui/jira-issues/modal/jira-search-container/buildJQL.js +27 -0
- package/dist/cjs/ui/jira-issues/modal/jira-search-container/index.js +116 -0
- package/dist/cjs/ui/jira-issues/modal/jira-search-container/messages.js +15 -0
- package/dist/cjs/ui/jira-issues/modal/jql-editor/index.js +41 -0
- package/dist/cjs/ui/jira-issues/modal/messages.js +45 -0
- package/dist/cjs/ui/jira-issues/modal/mode-switcher/index.js +97 -0
- package/dist/cjs/ui/jira-issues/modal/site-selector/index.js +55 -0
- package/dist/cjs/ui/jira-issues/modal/site-selector/messages.js +20 -0
- package/dist/cjs/ui/jira-issues/table-footer/index.js +68 -0
- package/dist/cjs/ui/jira-issues/table-footer/messages.js +25 -0
- package/dist/cjs/ui/jira-issues/table-footer/sync-info/index.js +79 -0
- package/dist/cjs/ui/jira-issues/table-footer/sync-info/messages.js +20 -0
- package/dist/cjs/ui/jira-issues/tableView.js +64 -0
- package/dist/cjs/ui/jira-issues/types.js +5 -0
- package/dist/cjs/version.json +5 -0
- package/dist/es2019/hooks/useDatasourceTableState.js +77 -0
- package/dist/es2019/index.js +2 -0
- package/dist/es2019/services/getAvailableJiraSites.js +20 -0
- package/dist/es2019/services/makeGetJqlAutocompleteData.js +19 -0
- package/dist/es2019/services/makeGetJqlSuggestionsData.js +11 -0
- package/dist/es2019/ui/issue-like-table/column-picker/index.js +77 -0
- package/dist/es2019/ui/issue-like-table/column-picker/types.js +1 -0
- package/dist/es2019/ui/issue-like-table/draggable-table-heading.js +166 -0
- package/dist/es2019/ui/issue-like-table/empty-state/index.js +113 -0
- package/dist/es2019/ui/issue-like-table/empty-state/priority.js +32 -0
- package/dist/es2019/ui/issue-like-table/empty-state/type.js +46 -0
- package/dist/es2019/ui/issue-like-table/empty-state/types.js +1 -0
- package/dist/es2019/ui/issue-like-table/index.js +259 -0
- package/dist/es2019/ui/issue-like-table/render-type/boolean/index.js +21 -0
- package/dist/es2019/ui/issue-like-table/render-type/boolean/messages.js +13 -0
- package/dist/es2019/ui/issue-like-table/render-type/date-time/index.js +37 -0
- package/dist/es2019/ui/issue-like-table/render-type/icon/index.js +27 -0
- package/dist/es2019/ui/issue-like-table/render-type/index.js +55 -0
- package/dist/es2019/ui/issue-like-table/render-type/link/index.js +38 -0
- package/dist/es2019/ui/issue-like-table/render-type/number/index.js +15 -0
- package/dist/es2019/ui/issue-like-table/render-type/status/index.js +19 -0
- package/dist/es2019/ui/issue-like-table/render-type/tag/index.js +18 -0
- package/dist/es2019/ui/issue-like-table/render-type/text/index.js +14 -0
- package/dist/es2019/ui/issue-like-table/render-type/user/index.js +29 -0
- package/dist/es2019/ui/issue-like-table/render-type/user/messages.js +8 -0
- package/dist/es2019/ui/issue-like-table/styled.js +6 -0
- package/dist/es2019/ui/issue-like-table/types.js +1 -0
- package/dist/es2019/ui/issue-like-table/useIsOnScreen.js +17 -0
- package/dist/es2019/ui/jira-issues/modal/basic-search-input/index.js +42 -0
- package/dist/es2019/ui/jira-issues/modal/basic-search-input/messages.js +8 -0
- package/dist/es2019/ui/jira-issues/modal/index.js +227 -0
- package/dist/es2019/ui/jira-issues/modal/jira-search-container/buildJQL.js +20 -0
- package/dist/es2019/ui/jira-issues/modal/jira-search-container/index.js +90 -0
- package/dist/es2019/ui/jira-issues/modal/jira-search-container/messages.js +8 -0
- package/dist/es2019/ui/jira-issues/modal/jql-editor/index.js +33 -0
- package/dist/es2019/ui/jira-issues/modal/messages.js +38 -0
- package/dist/es2019/ui/jira-issues/modal/mode-switcher/index.js +90 -0
- package/dist/es2019/ui/jira-issues/modal/site-selector/index.js +43 -0
- package/dist/es2019/ui/jira-issues/modal/site-selector/messages.js +13 -0
- package/dist/es2019/ui/jira-issues/table-footer/index.js +78 -0
- package/dist/es2019/ui/jira-issues/table-footer/messages.js +18 -0
- package/dist/es2019/ui/jira-issues/table-footer/sync-info/index.js +59 -0
- package/dist/es2019/ui/jira-issues/table-footer/sync-info/messages.js +13 -0
- package/dist/es2019/ui/jira-issues/tableView.js +57 -0
- package/dist/es2019/ui/jira-issues/types.js +1 -0
- package/dist/es2019/version.json +5 -0
- package/dist/esm/hooks/useDatasourceTableState.js +125 -0
- package/dist/esm/index.js +2 -0
- package/dist/esm/services/getAvailableJiraSites.js +57 -0
- package/dist/esm/services/makeGetJqlAutocompleteData.js +58 -0
- package/dist/esm/services/makeGetJqlSuggestionsData.js +47 -0
- package/dist/esm/ui/issue-like-table/column-picker/index.js +85 -0
- package/dist/esm/ui/issue-like-table/column-picker/types.js +1 -0
- package/dist/esm/ui/issue-like-table/draggable-table-heading.js +173 -0
- package/dist/esm/ui/issue-like-table/empty-state/index.js +118 -0
- package/dist/esm/ui/issue-like-table/empty-state/priority.js +20 -0
- package/dist/esm/ui/issue-like-table/empty-state/type.js +43 -0
- package/dist/esm/ui/issue-like-table/empty-state/types.js +1 -0
- package/dist/esm/ui/issue-like-table/index.js +292 -0
- package/dist/esm/ui/issue-like-table/render-type/boolean/index.js +21 -0
- package/dist/esm/ui/issue-like-table/render-type/boolean/messages.js +13 -0
- package/dist/esm/ui/issue-like-table/render-type/date-time/index.js +38 -0
- package/dist/esm/ui/issue-like-table/render-type/icon/index.js +25 -0
- package/dist/esm/ui/issue-like-table/render-type/index.js +55 -0
- package/dist/esm/ui/issue-like-table/render-type/link/index.js +44 -0
- package/dist/esm/ui/issue-like-table/render-type/number/index.js +15 -0
- package/dist/esm/ui/issue-like-table/render-type/status/index.js +19 -0
- package/dist/esm/ui/issue-like-table/render-type/tag/index.js +18 -0
- package/dist/esm/ui/issue-like-table/render-type/text/index.js +14 -0
- package/dist/esm/ui/issue-like-table/render-type/user/index.js +27 -0
- package/dist/esm/ui/issue-like-table/render-type/user/messages.js +8 -0
- package/dist/esm/ui/issue-like-table/styled.js +4 -0
- package/dist/esm/ui/issue-like-table/types.js +1 -0
- package/dist/esm/ui/issue-like-table/useIsOnScreen.js +25 -0
- package/dist/esm/ui/jira-issues/modal/basic-search-input/index.js +43 -0
- package/dist/esm/ui/jira-issues/modal/basic-search-input/messages.js +8 -0
- package/dist/esm/ui/jira-issues/modal/index.js +255 -0
- package/dist/esm/ui/jira-issues/modal/jira-search-container/buildJQL.js +20 -0
- package/dist/esm/ui/jira-issues/modal/jira-search-container/index.js +104 -0
- package/dist/esm/ui/jira-issues/modal/jira-search-container/messages.js +8 -0
- package/dist/esm/ui/jira-issues/modal/jql-editor/index.js +31 -0
- package/dist/esm/ui/jira-issues/modal/messages.js +38 -0
- package/dist/esm/ui/jira-issues/modal/mode-switcher/index.js +88 -0
- package/dist/esm/ui/jira-issues/modal/site-selector/index.js +44 -0
- package/dist/esm/ui/jira-issues/modal/site-selector/messages.js +13 -0
- package/dist/esm/ui/jira-issues/table-footer/index.js +60 -0
- package/dist/esm/ui/jira-issues/table-footer/messages.js +18 -0
- package/dist/esm/ui/jira-issues/table-footer/sync-info/index.js +68 -0
- package/dist/esm/ui/jira-issues/table-footer/sync-info/messages.js +13 -0
- package/dist/esm/ui/jira-issues/tableView.js +55 -0
- package/dist/esm/ui/jira-issues/types.js +1 -0
- package/dist/esm/version.json +5 -0
- package/dist/types/hooks/useDatasourceTableState.d.ts +13 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/services/getAvailableJiraSites.d.ts +6 -0
- package/dist/types/services/makeGetJqlAutocompleteData.d.ts +6 -0
- package/dist/types/services/makeGetJqlSuggestionsData.d.ts +5 -0
- package/dist/types/ui/issue-like-table/column-picker/index.d.ts +3 -0
- package/dist/types/ui/issue-like-table/column-picker/types.d.ts +6 -0
- package/dist/types/ui/issue-like-table/draggable-table-heading.d.ts +12 -0
- package/dist/types/ui/issue-like-table/empty-state/index.d.ts +6 -0
- package/dist/types/ui/issue-like-table/empty-state/priority.d.ts +6 -0
- package/dist/types/ui/issue-like-table/empty-state/type.d.ts +6 -0
- package/dist/types/ui/issue-like-table/empty-state/types.d.ts +2 -0
- package/dist/types/ui/issue-like-table/index.d.ts +15 -0
- package/dist/types/ui/issue-like-table/render-type/boolean/index.d.ts +8 -0
- package/dist/types/ui/issue-like-table/render-type/boolean/messages.d.ts +12 -0
- package/dist/types/ui/issue-like-table/render-type/date-time/index.d.ts +10 -0
- package/dist/types/ui/issue-like-table/render-type/icon/index.d.ts +8 -0
- package/dist/types/ui/issue-like-table/render-type/index.d.ts +2 -0
- package/dist/types/ui/issue-like-table/render-type/link/index.d.ts +8 -0
- package/dist/types/ui/issue-like-table/render-type/number/index.d.ts +8 -0
- package/dist/types/ui/issue-like-table/render-type/status/index.d.ts +8 -0
- package/dist/types/ui/issue-like-table/render-type/tag/index.d.ts +9 -0
- package/dist/types/ui/issue-like-table/render-type/text/index.d.ts +8 -0
- package/dist/types/ui/issue-like-table/render-type/user/index.d.ts +11 -0
- package/dist/types/ui/issue-like-table/render-type/user/messages.d.ts +7 -0
- package/dist/types/ui/issue-like-table/styled.d.ts +5 -0
- package/dist/types/ui/issue-like-table/types.d.ts +38 -0
- package/dist/types/ui/issue-like-table/useIsOnScreen.d.ts +1 -0
- package/dist/types/ui/jira-issues/modal/basic-search-input/index.d.ts +12 -0
- package/dist/types/ui/jira-issues/modal/basic-search-input/messages.d.ts +7 -0
- package/dist/types/ui/jira-issues/modal/index.d.ts +13 -0
- package/dist/types/ui/jira-issues/modal/jira-search-container/buildJQL.d.ts +7 -0
- package/dist/types/ui/jira-issues/modal/jira-search-container/index.d.ts +7 -0
- package/dist/types/ui/jira-issues/modal/jira-search-container/messages.d.ts +7 -0
- package/dist/types/ui/jira-issues/modal/jql-editor/index.d.ts +8 -0
- package/dist/types/ui/jira-issues/modal/messages.d.ts +37 -0
- package/dist/types/ui/jira-issues/modal/mode-switcher/index.d.ts +12 -0
- package/dist/types/ui/jira-issues/modal/site-selector/index.d.ts +10 -0
- package/dist/types/ui/jira-issues/modal/site-selector/messages.d.ts +12 -0
- package/dist/types/ui/jira-issues/table-footer/index.d.ts +7 -0
- package/dist/types/ui/jira-issues/table-footer/messages.d.ts +17 -0
- package/dist/types/ui/jira-issues/table-footer/sync-info/index.d.ts +4 -0
- package/dist/types/ui/jira-issues/table-footer/sync-info/messages.d.ts +12 -0
- package/dist/types/ui/jira-issues/tableView.d.ts +3 -0
- package/dist/types/ui/jira-issues/types.d.ts +14 -0
- package/dist/types-ts4.5/hooks/useDatasourceTableState.d.ts +13 -0
- package/dist/types-ts4.5/index.d.ts +2 -0
- package/dist/types-ts4.5/services/getAvailableJiraSites.d.ts +6 -0
- package/dist/types-ts4.5/services/makeGetJqlAutocompleteData.d.ts +6 -0
- package/dist/types-ts4.5/services/makeGetJqlSuggestionsData.d.ts +5 -0
- package/dist/types-ts4.5/ui/issue-like-table/column-picker/index.d.ts +3 -0
- package/dist/types-ts4.5/ui/issue-like-table/column-picker/types.d.ts +6 -0
- package/dist/types-ts4.5/ui/issue-like-table/draggable-table-heading.d.ts +12 -0
- package/dist/types-ts4.5/ui/issue-like-table/empty-state/index.d.ts +6 -0
- package/dist/types-ts4.5/ui/issue-like-table/empty-state/priority.d.ts +6 -0
- package/dist/types-ts4.5/ui/issue-like-table/empty-state/type.d.ts +6 -0
- package/dist/types-ts4.5/ui/issue-like-table/empty-state/types.d.ts +2 -0
- package/dist/types-ts4.5/ui/issue-like-table/index.d.ts +15 -0
- package/dist/types-ts4.5/ui/issue-like-table/render-type/boolean/index.d.ts +8 -0
- package/dist/types-ts4.5/ui/issue-like-table/render-type/boolean/messages.d.ts +12 -0
- package/dist/types-ts4.5/ui/issue-like-table/render-type/date-time/index.d.ts +10 -0
- package/dist/types-ts4.5/ui/issue-like-table/render-type/icon/index.d.ts +8 -0
- package/dist/types-ts4.5/ui/issue-like-table/render-type/index.d.ts +2 -0
- package/dist/types-ts4.5/ui/issue-like-table/render-type/link/index.d.ts +8 -0
- package/dist/types-ts4.5/ui/issue-like-table/render-type/number/index.d.ts +8 -0
- package/dist/types-ts4.5/ui/issue-like-table/render-type/status/index.d.ts +8 -0
- package/dist/types-ts4.5/ui/issue-like-table/render-type/tag/index.d.ts +9 -0
- package/dist/types-ts4.5/ui/issue-like-table/render-type/text/index.d.ts +8 -0
- package/dist/types-ts4.5/ui/issue-like-table/render-type/user/index.d.ts +11 -0
- package/dist/types-ts4.5/ui/issue-like-table/render-type/user/messages.d.ts +7 -0
- package/dist/types-ts4.5/ui/issue-like-table/styled.d.ts +5 -0
- package/dist/types-ts4.5/ui/issue-like-table/types.d.ts +38 -0
- package/dist/types-ts4.5/ui/issue-like-table/useIsOnScreen.d.ts +1 -0
- package/dist/types-ts4.5/ui/jira-issues/modal/basic-search-input/index.d.ts +12 -0
- package/dist/types-ts4.5/ui/jira-issues/modal/basic-search-input/messages.d.ts +7 -0
- package/dist/types-ts4.5/ui/jira-issues/modal/index.d.ts +13 -0
- package/dist/types-ts4.5/ui/jira-issues/modal/jira-search-container/buildJQL.d.ts +7 -0
- package/dist/types-ts4.5/ui/jira-issues/modal/jira-search-container/index.d.ts +7 -0
- package/dist/types-ts4.5/ui/jira-issues/modal/jira-search-container/messages.d.ts +7 -0
- package/dist/types-ts4.5/ui/jira-issues/modal/jql-editor/index.d.ts +8 -0
- package/dist/types-ts4.5/ui/jira-issues/modal/messages.d.ts +37 -0
- package/dist/types-ts4.5/ui/jira-issues/modal/mode-switcher/index.d.ts +12 -0
- package/dist/types-ts4.5/ui/jira-issues/modal/site-selector/index.d.ts +10 -0
- package/dist/types-ts4.5/ui/jira-issues/modal/site-selector/messages.d.ts +12 -0
- package/dist/types-ts4.5/ui/jira-issues/table-footer/index.d.ts +7 -0
- package/dist/types-ts4.5/ui/jira-issues/table-footer/messages.d.ts +17 -0
- package/dist/types-ts4.5/ui/jira-issues/table-footer/sync-info/index.d.ts +4 -0
- package/dist/types-ts4.5/ui/jira-issues/table-footer/sync-info/messages.d.ts +12 -0
- package/dist/types-ts4.5/ui/jira-issues/tableView.d.ts +3 -0
- package/dist/types-ts4.5/ui/jira-issues/types.d.ts +14 -0
- package/examples-helpers/buildIssueLikeTable.tsx +88 -0
- package/examples-helpers/buildJiraIssuesTable.tsx +31 -0
- package/examples-helpers/images.json +4 -0
- package/examples-helpers/mockAutocompleteData.ts +54 -0
- package/examples-helpers/mockJiraAvailableSites.ts +27 -0
- package/examples-helpers/mockJiraData.ts +546 -0
- package/examples-helpers/mockJqlSmartLinkData.ts +72 -0
- package/examples-helpers/mockSmartLinkData.ts +67 -0
- package/examples-helpers/mockSuggestionData.ts +17 -0
- package/examples-helpers/setupDatasourcesMocks.ts +199 -0
- package/examples-helpers/setupModalExampleMocks.ts +32 -0
- package/examples-helpers/smartLinkCustomClient.ts +26 -0
- package/package.json +118 -0
- package/report.api.md +98 -0
- package/tmp/api-report-tmp.d.ts +64 -0
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.modalMessages = void 0;
|
|
7
|
+
var _reactIntlNext = require("react-intl-next");
|
|
8
|
+
var modalMessages = (0, _reactIntlNext.defineMessages)({
|
|
9
|
+
cancelButtonText: {
|
|
10
|
+
id: 'linkDataSource.jira-issues.configmodal.cancelButtonText',
|
|
11
|
+
description: 'Button text to close the modal with no changes being made',
|
|
12
|
+
defaultMessage: 'Cancel'
|
|
13
|
+
},
|
|
14
|
+
insertIssuesButtonText: {
|
|
15
|
+
id: 'linkDataSource.jira-issues.configmodal.insertIssuesButtonText',
|
|
16
|
+
description: 'Button text to insert the displayed content',
|
|
17
|
+
defaultMessage: 'Insert issues'
|
|
18
|
+
},
|
|
19
|
+
insertIssuesTitle: {
|
|
20
|
+
id: 'linkDataSource.jira-issues.configmodal.insertIssuesTitle',
|
|
21
|
+
description: 'Title for the Jira Issues Datasource config modal',
|
|
22
|
+
defaultMessage: 'Insert Jira issues'
|
|
23
|
+
},
|
|
24
|
+
insertIssuesTitleManySites: {
|
|
25
|
+
id: 'linkDataSource.jira-issues.configmodal.insertIssuesTitleManySites',
|
|
26
|
+
description: 'Title for the Jira Issues Datasource config modal when multiple sites are available',
|
|
27
|
+
defaultMessage: 'Insert Jira issues from {siteName}'
|
|
28
|
+
},
|
|
29
|
+
issueViewModeLabel: {
|
|
30
|
+
id: 'linkDataSource.jira-issues.configmodal.issueViewModeLabel',
|
|
31
|
+
description: 'Label for toggle to enable a view mode showing issues in a table list view',
|
|
32
|
+
defaultMessage: 'Issue view'
|
|
33
|
+
},
|
|
34
|
+
countViewModeLabel: {
|
|
35
|
+
id: 'linkDataSource.jira-issues.configmodal.countViewModeLabel',
|
|
36
|
+
description: 'Label for toggle to enable a view mode showing issues in as a total count',
|
|
37
|
+
defaultMessage: 'Count view'
|
|
38
|
+
},
|
|
39
|
+
issuesCountSmartCardPlaceholderText: {
|
|
40
|
+
id: 'linkDataSource.jira-issues.configmodal.issues',
|
|
41
|
+
description: 'Placeholder text that will be placed next to a count of jira issues',
|
|
42
|
+
defaultMessage: '### Issues'
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
exports.modalMessages = modalMessages;
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.ModeSwitcher = void 0;
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
var _react2 = require("@emotion/react");
|
|
10
|
+
var _colors = require("@atlaskit/theme/colors");
|
|
11
|
+
/** @jsx jsx */
|
|
12
|
+
|
|
13
|
+
var modeSwitcherStyles = (0, _react2.css)({
|
|
14
|
+
alignItems: 'center',
|
|
15
|
+
background: "var(--ds-background-neutral, ".concat(_colors.N20, ")"),
|
|
16
|
+
borderRadius: "var(--ds-space-050, 4px)",
|
|
17
|
+
boxSizing: 'border-box',
|
|
18
|
+
display: 'inline-flex',
|
|
19
|
+
gap: "var(--ds-space-050, 4px)",
|
|
20
|
+
lineHeight: "var(--ds-space-200, 16px)",
|
|
21
|
+
padding: "var(--ds-space-075, 6px)",
|
|
22
|
+
'&:disabled': {
|
|
23
|
+
opacity: '0.5'
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
var compactModeSwitcherStyles = (0, _react2.css)({
|
|
27
|
+
padding: "var(--ds-space-050, 4px)",
|
|
28
|
+
gap: "var(--ds-space-025, 2px)"
|
|
29
|
+
});
|
|
30
|
+
var modeInputStyles = (0, _react2.css)({
|
|
31
|
+
display: 'none'
|
|
32
|
+
});
|
|
33
|
+
var modeSwitcherLabelStyles = (0, _react2.css)({
|
|
34
|
+
color: "var(--ds-text-subtlest, ".concat(_colors.N700, ")"),
|
|
35
|
+
fontSize: "var(--ds-space-150, 12px)",
|
|
36
|
+
fontWeight: '600',
|
|
37
|
+
textTransform: 'uppercase',
|
|
38
|
+
padding: "var(--ds-space-050, 4px)",
|
|
39
|
+
borderRadius: "var(--ds-space-050, 4px)",
|
|
40
|
+
':hover': {
|
|
41
|
+
cursor: 'pointer',
|
|
42
|
+
backgroundColor: "var(--ds-background-neutral-subtle-hovered, ".concat(_colors.N30A, ")")
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
var modeSwitcherLabelSelectedStyles = (0, _react2.css)({
|
|
46
|
+
backgroundColor: "var(--ds-background-input-pressed, ".concat(_colors.N0, ")"),
|
|
47
|
+
borderRadius: "var(--ds-space-050, 4px)",
|
|
48
|
+
boxShadow: "var(--ds-shadow-overflow, 0px 0px 1px rgba(9, 30, 66, 0.12), 0px 0px 8px rgba(9, 30, 66, 0.16))",
|
|
49
|
+
':hover': {
|
|
50
|
+
cursor: 'pointer',
|
|
51
|
+
backgroundColor: "var(--ds-background-input-pressed, ".concat(_colors.N0, ")")
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
var modeSwitcherLabelDisabledStyles = (0, _react2.css)({
|
|
55
|
+
':hover': {
|
|
56
|
+
cursor: 'not-allowed'
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
var compactModeSwitcherLabelStyles = (0, _react2.css)({
|
|
60
|
+
padding: "var(--ds-space-025, 2px)".concat(" ", "var(--ds-space-050, 4px)")
|
|
61
|
+
});
|
|
62
|
+
var ModeSwitcher = function ModeSwitcher(props) {
|
|
63
|
+
var _options$;
|
|
64
|
+
var isCompact = props.isCompact,
|
|
65
|
+
isDisabled = props.isDisabled,
|
|
66
|
+
onOptionValueChange = props.onOptionValueChange,
|
|
67
|
+
options = props.options,
|
|
68
|
+
_props$selectedOption = props.selectedOptionValue,
|
|
69
|
+
selectedOptionValue = _props$selectedOption === void 0 ? (_options$ = options[0]) === null || _options$ === void 0 ? void 0 : _options$.value : _props$selectedOption;
|
|
70
|
+
var handleModeChange = function handleModeChange(event) {
|
|
71
|
+
onOptionValueChange(event.currentTarget.value);
|
|
72
|
+
};
|
|
73
|
+
return options.length > 0 ? (0, _react2.jsx)("fieldset", {
|
|
74
|
+
css: [modeSwitcherStyles, isCompact && compactModeSwitcherStyles],
|
|
75
|
+
"data-testid": "mode-toggle-container",
|
|
76
|
+
disabled: isDisabled
|
|
77
|
+
}, options.map(function (_ref) {
|
|
78
|
+
var value = _ref.value,
|
|
79
|
+
label = _ref.label;
|
|
80
|
+
var isSelected = value === selectedOptionValue;
|
|
81
|
+
return (0, _react2.jsx)("label", {
|
|
82
|
+
key: value,
|
|
83
|
+
css: [modeSwitcherLabelStyles, isCompact && compactModeSwitcherLabelStyles, isSelected && modeSwitcherLabelSelectedStyles, isDisabled && modeSwitcherLabelDisabledStyles],
|
|
84
|
+
"data-testid": "mode-toggle-".concat(value)
|
|
85
|
+
}, label, (0, _react2.jsx)("input", {
|
|
86
|
+
"aria-checked": isSelected,
|
|
87
|
+
"aria-disabled": isDisabled,
|
|
88
|
+
checked: isSelected,
|
|
89
|
+
css: modeInputStyles,
|
|
90
|
+
disabled: isDisabled,
|
|
91
|
+
onChange: handleModeChange,
|
|
92
|
+
type: "radio",
|
|
93
|
+
value: value
|
|
94
|
+
}));
|
|
95
|
+
})) : null;
|
|
96
|
+
};
|
|
97
|
+
exports.ModeSwitcher = ModeSwitcher;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.JiraSiteSelector = void 0;
|
|
9
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
10
|
+
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
11
|
+
var _react = require("@emotion/react");
|
|
12
|
+
var _reactIntlNext = require("react-intl-next");
|
|
13
|
+
var _standardButton = _interopRequireDefault(require("@atlaskit/button/standard-button"));
|
|
14
|
+
var _dropdownMenu = _interopRequireWildcard(require("@atlaskit/dropdown-menu"));
|
|
15
|
+
var _chevronDown = _interopRequireDefault(require("@atlaskit/icon/glyph/chevron-down"));
|
|
16
|
+
var _messages = require("./messages");
|
|
17
|
+
var _excluded = ["triggerRef"];
|
|
18
|
+
/** @jsx jsx */
|
|
19
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
20
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
21
|
+
var JiraSiteSelector = function JiraSiteSelector(props) {
|
|
22
|
+
var availableSites = props.availableSites,
|
|
23
|
+
onSiteSelection = props.onSiteSelection,
|
|
24
|
+
selectedJiraSite = props.selectedJiraSite,
|
|
25
|
+
testId = props.testId;
|
|
26
|
+
var intl = (0, _reactIntlNext.useIntl)();
|
|
27
|
+
return (0, _react.jsx)(_dropdownMenu.default, {
|
|
28
|
+
spacing: "compact",
|
|
29
|
+
testId: testId,
|
|
30
|
+
trigger: function trigger(_ref) {
|
|
31
|
+
var triggerRef = _ref.triggerRef,
|
|
32
|
+
props = (0, _objectWithoutProperties2.default)(_ref, _excluded);
|
|
33
|
+
return (0, _react.jsx)(_standardButton.default, (0, _extends2.default)({}, props, {
|
|
34
|
+
spacing: "none",
|
|
35
|
+
iconBefore: (0, _react.jsx)(_chevronDown.default, {
|
|
36
|
+
label: intl.formatMessage(_messages.siteSelectorMessages.dropdownChevronLabel)
|
|
37
|
+
}),
|
|
38
|
+
ref: triggerRef
|
|
39
|
+
}));
|
|
40
|
+
}
|
|
41
|
+
}, (0, _react.jsx)(_dropdownMenu.DropdownItemGroup, null, availableSites.map(function (availableSite) {
|
|
42
|
+
var displayName = availableSite.displayName,
|
|
43
|
+
cloudId = availableSite.cloudId;
|
|
44
|
+
var isSelected = displayName === (selectedJiraSite === null || selectedJiraSite === void 0 ? void 0 : selectedJiraSite.displayName);
|
|
45
|
+
return (0, _react.jsx)(_dropdownMenu.DropdownItem, {
|
|
46
|
+
isSelected: isSelected,
|
|
47
|
+
key: cloudId,
|
|
48
|
+
onClick: function onClick() {
|
|
49
|
+
return onSiteSelection(availableSite);
|
|
50
|
+
},
|
|
51
|
+
testId: testId && "".concat(testId, "--dropdown-item").concat(isSelected ? '__selected' : '')
|
|
52
|
+
}, displayName);
|
|
53
|
+
})));
|
|
54
|
+
};
|
|
55
|
+
exports.JiraSiteSelector = JiraSiteSelector;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.siteSelectorMessages = void 0;
|
|
7
|
+
var _reactIntlNext = require("react-intl-next");
|
|
8
|
+
var siteSelectorMessages = (0, _reactIntlNext.defineMessages)({
|
|
9
|
+
dropdownChevronLabel: {
|
|
10
|
+
id: 'linkDataSource.jira-issues.configmodal.dropdownChevronLabel',
|
|
11
|
+
description: 'Label for button that reveals more available site options to choose from',
|
|
12
|
+
defaultMessage: 'Pick jira site'
|
|
13
|
+
},
|
|
14
|
+
selectedJiraSiteLabel: {
|
|
15
|
+
id: 'linkDataSource.jira-issues.configmodal.selectedJiraSiteLabel',
|
|
16
|
+
description: 'Label for a check icon declaring which option is selected',
|
|
17
|
+
defaultMessage: '{siteName} is selected'
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
exports.siteSelectorMessages = siteSelectorMessages;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.TableFooter = void 0;
|
|
8
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
9
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
10
|
+
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
|
|
11
|
+
var _react = require("react");
|
|
12
|
+
var _react2 = require("@emotion/react");
|
|
13
|
+
var _styled = _interopRequireDefault(require("@emotion/styled"));
|
|
14
|
+
var _reactIntlNext = require("react-intl-next");
|
|
15
|
+
var _button = _interopRequireDefault(require("@atlaskit/button"));
|
|
16
|
+
var _heading = _interopRequireDefault(require("@atlaskit/heading"));
|
|
17
|
+
var _refresh = _interopRequireDefault(require("@atlaskit/icon/glyph/refresh"));
|
|
18
|
+
var _colors = require("@atlaskit/theme/colors");
|
|
19
|
+
var _messages = require("./messages");
|
|
20
|
+
var _syncInfo = require("./sync-info");
|
|
21
|
+
var _templateObject, _templateObject2, _templateObject3, _templateObject4;
|
|
22
|
+
/** @jsx jsx */
|
|
23
|
+
var FooterWrapper = _styled.default.div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n display: flex;\n justify-content: space-between;\n width: 100%;\n padding: ", " 0;\n position: sticky;\n bottom: 0;\n background: ", ";\n border-top-style: solid;\n border-top-color: ", ";\n margin-top: -2px;\n align-self: center;\n"])), "var(--ds-space-250, 20px)", "var(--ds-background-input, ".concat(_colors.N0, ")"), "var(--ds-background-neutral, ".concat(_colors.N40, ")"));
|
|
24
|
+
var IssueCounterWrapper = _styled.default.div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["\n margin-left: 10px;\n display: flex;\n align-self: center;\n color: ", ";\n"])), "var(--ds-text-accent-gray, ".concat(_colors.N800, ")"));
|
|
25
|
+
var SyncWrapper = _styled.default.div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2.default)(["\n display: flex;\n align-items: center;\n color: ", ";\n"])), "var(--ds-text-accent-gray, ".concat(_colors.N90, ")"));
|
|
26
|
+
var SyncTextWrapper = _styled.default.div(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2.default)(["\n margin-right: 5px;\n"])));
|
|
27
|
+
var TableFooter = function TableFooter(_ref) {
|
|
28
|
+
var issueCount = _ref.issueCount,
|
|
29
|
+
onRefresh = _ref.onRefresh,
|
|
30
|
+
isLoading = _ref.isLoading;
|
|
31
|
+
var intl = (0, _reactIntlNext.useIntl)();
|
|
32
|
+
var _useState = (0, _react.useState)(new Date()),
|
|
33
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
34
|
+
lastSyncTime = _useState2[0],
|
|
35
|
+
setLastSyncTime = _useState2[1];
|
|
36
|
+
var showIssueCount = issueCount && issueCount > 0 ? true : issueCount === 0 ? !isLoading : false;
|
|
37
|
+
(0, _react.useEffect)(function () {
|
|
38
|
+
if (isLoading) {
|
|
39
|
+
setLastSyncTime(new Date());
|
|
40
|
+
}
|
|
41
|
+
}, [isLoading]);
|
|
42
|
+
|
|
43
|
+
// If only one of the two is passed in, still show the other one (Note: We keep the div encapsulating the one not shown to
|
|
44
|
+
// ensure correct positioning since 'justify-content: space-between' is used).
|
|
45
|
+
return onRefresh || showIssueCount ? (0, _react2.jsx)(FooterWrapper, {
|
|
46
|
+
"data-testid": "table-footer"
|
|
47
|
+
}, (0, _react2.jsx)(IssueCounterWrapper, null, showIssueCount && (0, _react2.jsx)(_heading.default, {
|
|
48
|
+
testId: "issue-count",
|
|
49
|
+
level: 'h400'
|
|
50
|
+
}, (0, _react2.jsx)(_reactIntlNext.FormattedMessage, (0, _extends2.default)({}, _messages.footerMessages.issueText, {
|
|
51
|
+
values: {
|
|
52
|
+
issueCount: issueCount
|
|
53
|
+
}
|
|
54
|
+
})))), (0, _react2.jsx)(SyncWrapper, null, onRefresh && (0, _react2.jsx)(_react.Fragment, null, (0, _react2.jsx)(SyncTextWrapper, {
|
|
55
|
+
"data-testid": "sync-text"
|
|
56
|
+
}, isLoading ? (0, _react2.jsx)(_reactIntlNext.FormattedMessage, _messages.footerMessages.loadingText) : (0, _react2.jsx)(_syncInfo.SyncInfo, {
|
|
57
|
+
lastSyncTime: lastSyncTime
|
|
58
|
+
})), (0, _react2.jsx)(_button.default, {
|
|
59
|
+
onClick: onRefresh,
|
|
60
|
+
appearance: "subtle",
|
|
61
|
+
iconBefore: (0, _react2.jsx)(_refresh.default, {
|
|
62
|
+
label: intl.formatMessage(_messages.footerMessages.refreshLabel)
|
|
63
|
+
}),
|
|
64
|
+
isDisabled: isLoading,
|
|
65
|
+
testId: "refresh-button"
|
|
66
|
+
})))) : null;
|
|
67
|
+
};
|
|
68
|
+
exports.TableFooter = TableFooter;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.footerMessages = void 0;
|
|
7
|
+
var _reactIntlNext = require("react-intl-next");
|
|
8
|
+
var footerMessages = (0, _reactIntlNext.defineMessages)({
|
|
9
|
+
issueText: {
|
|
10
|
+
id: 'linkDataSource.jira-issues.table-footer.issue',
|
|
11
|
+
description: 'Text that appears after issue count number if there is only 1 issue.',
|
|
12
|
+
defaultMessage: '{issueCount} {issueCount, plural, one {issue} other {issues}}'
|
|
13
|
+
},
|
|
14
|
+
loadingText: {
|
|
15
|
+
id: 'linkDataSource.jira-issues.table-footer.loading',
|
|
16
|
+
description: 'Text that appears when table is loading.',
|
|
17
|
+
defaultMessage: 'Loading...'
|
|
18
|
+
},
|
|
19
|
+
refreshLabel: {
|
|
20
|
+
id: 'linkDataSource.jira-issues.table-footer.refresh',
|
|
21
|
+
description: 'Label for refresh icon',
|
|
22
|
+
defaultMessage: 'Refresh'
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
exports.footerMessages = footerMessages;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.SyncInfo = void 0;
|
|
9
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
10
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
11
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
12
|
+
var _reactIntlNext = require("react-intl-next");
|
|
13
|
+
var _messages = require("./messages");
|
|
14
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
15
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
16
|
+
var SECONDS_IN_MIN = 60;
|
|
17
|
+
var SECONDS_IN_HR = SECONDS_IN_MIN * 60;
|
|
18
|
+
var SECONDS_IN_DAY = SECONDS_IN_HR * 24;
|
|
19
|
+
var WithUpdatedLabel = function WithUpdatedLabel(formattedDate) {
|
|
20
|
+
var i18nMessage = formattedDate ? _messages.messages.overOneMinuteText : _messages.messages.underOneMinuteText;
|
|
21
|
+
return /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, (0, _extends2.default)({}, i18nMessage, {
|
|
22
|
+
values: {
|
|
23
|
+
date: formattedDate
|
|
24
|
+
}
|
|
25
|
+
}));
|
|
26
|
+
};
|
|
27
|
+
var SyncInfo = function SyncInfo(_ref) {
|
|
28
|
+
var lastSyncTime = _ref.lastSyncTime;
|
|
29
|
+
var calculateTimeDiff = (0, _react.useCallback)(function () {
|
|
30
|
+
return Math.floor((Date.now() - lastSyncTime.getTime()) / 1000);
|
|
31
|
+
}, [lastSyncTime]);
|
|
32
|
+
var _useState = (0, _react.useState)(calculateTimeDiff()),
|
|
33
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
34
|
+
secondsSinceUpdate = _useState2[0],
|
|
35
|
+
setSecondsSinceUpdate = _useState2[1];
|
|
36
|
+
var totalDays = Math.floor(secondsSinceUpdate / SECONDS_IN_DAY);
|
|
37
|
+
var totalHours = Math.floor(secondsSinceUpdate / SECONDS_IN_HR);
|
|
38
|
+
var totalMinutes = Math.floor(secondsSinceUpdate / SECONDS_IN_MIN);
|
|
39
|
+
(0, _react.useEffect)(function () {
|
|
40
|
+
setSecondsSinceUpdate(calculateTimeDiff());
|
|
41
|
+
var interval = setInterval(function () {
|
|
42
|
+
return setSecondsSinceUpdate(calculateTimeDiff());
|
|
43
|
+
}, 1000);
|
|
44
|
+
return function () {
|
|
45
|
+
return clearInterval(interval);
|
|
46
|
+
};
|
|
47
|
+
}, [lastSyncTime, calculateTimeDiff]);
|
|
48
|
+
if (totalMinutes >= 1 && totalMinutes < 60) {
|
|
49
|
+
return /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedRelativeTime, {
|
|
50
|
+
value: -totalMinutes,
|
|
51
|
+
style: "long",
|
|
52
|
+
unit: "minute"
|
|
53
|
+
}, WithUpdatedLabel);
|
|
54
|
+
}
|
|
55
|
+
if (totalHours >= 1 && totalHours < 24) {
|
|
56
|
+
return /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedRelativeTime, {
|
|
57
|
+
value: -totalHours,
|
|
58
|
+
style: "long",
|
|
59
|
+
unit: "hour"
|
|
60
|
+
}, WithUpdatedLabel);
|
|
61
|
+
}
|
|
62
|
+
if (totalDays >= 1 && totalDays < 8) {
|
|
63
|
+
return /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedRelativeTime, {
|
|
64
|
+
value: -totalDays,
|
|
65
|
+
style: "long",
|
|
66
|
+
unit: "day"
|
|
67
|
+
}, WithUpdatedLabel);
|
|
68
|
+
}
|
|
69
|
+
if (totalDays >= 8) {
|
|
70
|
+
return /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedDate, {
|
|
71
|
+
year: "numeric",
|
|
72
|
+
month: "short",
|
|
73
|
+
day: "2-digit",
|
|
74
|
+
value: lastSyncTime
|
|
75
|
+
}, WithUpdatedLabel);
|
|
76
|
+
}
|
|
77
|
+
return WithUpdatedLabel();
|
|
78
|
+
};
|
|
79
|
+
exports.SyncInfo = SyncInfo;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.messages = void 0;
|
|
7
|
+
var _reactIntlNext = require("react-intl-next");
|
|
8
|
+
var messages = (0, _reactIntlNext.defineMessages)({
|
|
9
|
+
underOneMinuteText: {
|
|
10
|
+
id: 'linkDataSource.jira-issues.table-footer.date_formatter.under_one_minute',
|
|
11
|
+
defaultMessage: 'Synced just now',
|
|
12
|
+
description: 'A text to indicate the last data fetch time was under a minute.'
|
|
13
|
+
},
|
|
14
|
+
overOneMinuteText: {
|
|
15
|
+
id: 'linkDataSource.jira-issues.table-footer.date_formatter.under_over_minute',
|
|
16
|
+
defaultMessage: 'Synced {date}',
|
|
17
|
+
description: 'A text to indicate the last data fetch time was over a minute.'
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
exports.messages = messages;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.JiraIssuesTableView = void 0;
|
|
8
|
+
var _react = require("react");
|
|
9
|
+
var _react2 = require("@emotion/react");
|
|
10
|
+
var _spinner = _interopRequireDefault(require("@atlaskit/spinner"));
|
|
11
|
+
var _useDatasourceTableState = require("../../hooks/useDatasourceTableState");
|
|
12
|
+
var _issueLikeTable = require("../issue-like-table");
|
|
13
|
+
var _tableFooter = require("./table-footer");
|
|
14
|
+
/** @jsx jsx */
|
|
15
|
+
|
|
16
|
+
var TableViewWrapperStyles = (0, _react2.css)({
|
|
17
|
+
display: 'flex',
|
|
18
|
+
flexDirection: 'column',
|
|
19
|
+
width: '100%',
|
|
20
|
+
height: '100%',
|
|
21
|
+
position: 'relative',
|
|
22
|
+
padding: "var(--ds-space-200, 16px)",
|
|
23
|
+
paddingBottom: 0,
|
|
24
|
+
boxSizing: 'border-box'
|
|
25
|
+
});
|
|
26
|
+
var JiraIssuesTableView = function JiraIssuesTableView(_ref) {
|
|
27
|
+
var datasourceId = _ref.datasourceId,
|
|
28
|
+
parameters = _ref.parameters,
|
|
29
|
+
visibleColumnKeys = _ref.visibleColumnKeys,
|
|
30
|
+
onVisibleColumnKeysChange = _ref.onVisibleColumnKeysChange;
|
|
31
|
+
var _useDatasourceTableSt = (0, _useDatasourceTableState.useDatasourceTableState)(datasourceId, parameters),
|
|
32
|
+
reset = _useDatasourceTableSt.reset,
|
|
33
|
+
status = _useDatasourceTableSt.status,
|
|
34
|
+
onNextPage = _useDatasourceTableSt.onNextPage,
|
|
35
|
+
responseItems = _useDatasourceTableSt.responseItems,
|
|
36
|
+
hasNextPage = _useDatasourceTableSt.hasNextPage,
|
|
37
|
+
columns = _useDatasourceTableSt.columns,
|
|
38
|
+
defaultVisibleColumnKeys = _useDatasourceTableSt.defaultVisibleColumnKeys,
|
|
39
|
+
totalIssueCount = _useDatasourceTableSt.totalIssueCount;
|
|
40
|
+
(0, _react.useEffect)(function () {
|
|
41
|
+
if (onVisibleColumnKeysChange && (visibleColumnKeys || []).length === 0 && defaultVisibleColumnKeys.length > 0) {
|
|
42
|
+
onVisibleColumnKeysChange(defaultVisibleColumnKeys);
|
|
43
|
+
}
|
|
44
|
+
}, [visibleColumnKeys, defaultVisibleColumnKeys, onVisibleColumnKeysChange]);
|
|
45
|
+
return columns.length > 0 ? (0, _react2.jsx)("div", {
|
|
46
|
+
css: TableViewWrapperStyles
|
|
47
|
+
}, (0, _react2.jsx)(_issueLikeTable.IssueLikeDataTableView, {
|
|
48
|
+
testId: 'jira-issues-table-view',
|
|
49
|
+
hasNextPage: hasNextPage,
|
|
50
|
+
items: responseItems,
|
|
51
|
+
onNextPage: onNextPage,
|
|
52
|
+
status: status,
|
|
53
|
+
columns: columns,
|
|
54
|
+
visibleColumnKeys: visibleColumnKeys || defaultVisibleColumnKeys,
|
|
55
|
+
onVisibleColumnKeysChange: onVisibleColumnKeysChange
|
|
56
|
+
}), (0, _react2.jsx)(_tableFooter.TableFooter, {
|
|
57
|
+
issueCount: totalIssueCount,
|
|
58
|
+
onRefresh: reset,
|
|
59
|
+
isLoading: status === 'loading'
|
|
60
|
+
})) : (0, _react2.jsx)(_spinner.default, {
|
|
61
|
+
testId: 'jira-issues-table-view-spinner'
|
|
62
|
+
});
|
|
63
|
+
};
|
|
64
|
+
exports.JiraIssuesTableView = JiraIssuesTableView;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { useCallback, useEffect, useState } from 'react';
|
|
2
|
+
import { useDatasourceClientExtension } from '@atlaskit/link-client-extension';
|
|
3
|
+
export const useDatasourceTableState = (datasourceId, parameters, fields) => {
|
|
4
|
+
const [defaultVisibleColumnKeys, setDefaultVisibleColumnKeys] = useState([]);
|
|
5
|
+
const [status, setStatus] = useState('empty');
|
|
6
|
+
const [responseItems, setResponseItems] = useState([]);
|
|
7
|
+
const [hasNextPage, setHasNextPage] = useState(true);
|
|
8
|
+
const [nextCursor, setNextCursor] = useState(undefined);
|
|
9
|
+
const [columns, setColumns] = useState([]);
|
|
10
|
+
const [totalIssueCount, setTotalIssueCount] = useState(undefined);
|
|
11
|
+
const {
|
|
12
|
+
getDatasourceData,
|
|
13
|
+
getDatasourceDetails
|
|
14
|
+
} = useDatasourceClientExtension();
|
|
15
|
+
const loadDatasourceDetails = useCallback(async ({
|
|
16
|
+
cloudId,
|
|
17
|
+
value: parameterValue,
|
|
18
|
+
type: parameterType
|
|
19
|
+
}) => {
|
|
20
|
+
const result = await getDatasourceDetails(datasourceId, {
|
|
21
|
+
[parameterType]: parameterValue,
|
|
22
|
+
cloudId
|
|
23
|
+
});
|
|
24
|
+
setColumns(result.schema.properties);
|
|
25
|
+
setDefaultVisibleColumnKeys(result.schema.defaultProperties);
|
|
26
|
+
}, [datasourceId, getDatasourceDetails]);
|
|
27
|
+
useEffect(() => {
|
|
28
|
+
if (parameters) {
|
|
29
|
+
void loadDatasourceDetails(parameters);
|
|
30
|
+
}
|
|
31
|
+
}, [loadDatasourceDetails, parameters]);
|
|
32
|
+
const onNextPage = useCallback(async () => {
|
|
33
|
+
if (!parameters) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
const {
|
|
37
|
+
cloudId,
|
|
38
|
+
value: parameterValue,
|
|
39
|
+
type: parameterType
|
|
40
|
+
} = parameters;
|
|
41
|
+
setStatus('loading');
|
|
42
|
+
const {
|
|
43
|
+
data,
|
|
44
|
+
nextPageCursor,
|
|
45
|
+
totalIssues
|
|
46
|
+
} = await getDatasourceData(datasourceId, {
|
|
47
|
+
parameters: {
|
|
48
|
+
cloudId,
|
|
49
|
+
[parameterType]: parameterValue
|
|
50
|
+
},
|
|
51
|
+
pageSize: 10,
|
|
52
|
+
pageCursor: nextCursor,
|
|
53
|
+
fields
|
|
54
|
+
});
|
|
55
|
+
setTotalIssueCount(totalIssues);
|
|
56
|
+
setNextCursor(nextPageCursor);
|
|
57
|
+
setResponseItems(currentResponseItems => [...currentResponseItems, ...data]);
|
|
58
|
+
setStatus('resolved');
|
|
59
|
+
setHasNextPage(Boolean(nextPageCursor));
|
|
60
|
+
}, [parameters, getDatasourceData, datasourceId, nextCursor, fields]);
|
|
61
|
+
const reset = useCallback(() => {
|
|
62
|
+
setStatus('empty');
|
|
63
|
+
setResponseItems([]);
|
|
64
|
+
setHasNextPage(true);
|
|
65
|
+
setTotalIssueCount(undefined);
|
|
66
|
+
}, []);
|
|
67
|
+
return {
|
|
68
|
+
status,
|
|
69
|
+
onNextPage,
|
|
70
|
+
responseItems,
|
|
71
|
+
reset,
|
|
72
|
+
hasNextPage,
|
|
73
|
+
columns,
|
|
74
|
+
defaultVisibleColumnKeys,
|
|
75
|
+
totalIssueCount
|
|
76
|
+
};
|
|
77
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export const getAvailableJiraSites = async () => {
|
|
2
|
+
const requestConfig = {
|
|
3
|
+
method: 'POST',
|
|
4
|
+
credentials: 'include',
|
|
5
|
+
headers: {
|
|
6
|
+
Accept: 'application/json',
|
|
7
|
+
'Cache-Control': 'no-cache',
|
|
8
|
+
'Content-Type': 'application/json'
|
|
9
|
+
},
|
|
10
|
+
body: JSON.stringify({
|
|
11
|
+
products: ['jira-software.ondemand', 'jira-core.ondemand', 'jira-incident-manager.ondemand', 'jira-product-discovery', 'jira-servicedesk.ondemand']
|
|
12
|
+
})
|
|
13
|
+
};
|
|
14
|
+
const response = await fetch(`/gateway/api/available-sites`, requestConfig);
|
|
15
|
+
if (response.ok) {
|
|
16
|
+
const res = await response.json();
|
|
17
|
+
return res.sites;
|
|
18
|
+
}
|
|
19
|
+
throw new Error((await response.text()) || 'Something went wrong');
|
|
20
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export const makeGetJqlAutocompleteData = cloudId => async url => {
|
|
2
|
+
const response = await fetch(`/gateway/api/ex/jira/${cloudId}/${url}`, {
|
|
3
|
+
method: 'POST',
|
|
4
|
+
headers: {
|
|
5
|
+
'content-type': 'application/json'
|
|
6
|
+
},
|
|
7
|
+
body: JSON.stringify({
|
|
8
|
+
includeCollapsedFields: true
|
|
9
|
+
})
|
|
10
|
+
});
|
|
11
|
+
if (response.ok) {
|
|
12
|
+
const data = await response.json();
|
|
13
|
+
return {
|
|
14
|
+
jqlFields: data.visibleFieldNames,
|
|
15
|
+
jqlFunctions: data.visibleFunctionNames
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
throw new Error((await response.text()) || 'Something went wrong');
|
|
19
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export const makeGetJqlSuggestionsData = cloudId => async url => {
|
|
2
|
+
const response = await fetch(`/gateway/api/ex/jira/${cloudId}/${url}`, {
|
|
3
|
+
headers: {
|
|
4
|
+
'content-type': 'application/json'
|
|
5
|
+
}
|
|
6
|
+
});
|
|
7
|
+
if (response.ok) {
|
|
8
|
+
return response.json();
|
|
9
|
+
}
|
|
10
|
+
throw new Error((await response.text()) || 'Something went wrong');
|
|
11
|
+
};
|