@atlaskit/link-datasource 1.11.1 → 1.12.1

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 (114) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/cjs/analytics/constants.js +1 -1
  3. package/dist/cjs/services/mocks.js +134 -0
  4. package/dist/cjs/services/useBasicFilterAGG.js +119 -0
  5. package/dist/cjs/services/utils.js +8 -0
  6. package/dist/cjs/ui/assets-modal/modal/index.js +2 -2
  7. package/dist/cjs/ui/datasource-table-view/datasourceTableView.js +5 -1
  8. package/dist/cjs/ui/issue-like-table/draggable-table-heading.js +109 -5
  9. package/dist/cjs/ui/issue-like-table/index.js +109 -95
  10. package/dist/cjs/ui/jira-issues-modal/basic-filters/mocks/fieldValuesEmptyResponse.js +20 -0
  11. package/dist/cjs/ui/jira-issues-modal/basic-filters/mocks/fieldValuesExpectedResponseForAssignees.js +155 -0
  12. package/dist/cjs/ui/jira-issues-modal/basic-filters/mocks/fieldValuesStandardResponseForProjects.js +82 -0
  13. package/dist/cjs/ui/jira-issues-modal/basic-filters/mocks/fieldValuesStandardResponseForStatuses.js +87 -0
  14. package/dist/cjs/ui/jira-issues-modal/basic-filters/mocks/fieldValuesStandardResponseForTypes.js +97 -0
  15. package/dist/cjs/ui/jira-issues-modal/basic-filters/mocks/hydrateJqlEmptyResponse.js +18 -0
  16. package/dist/cjs/ui/jira-issues-modal/basic-filters/mocks/hydrateJqlStandardResponse.js +111 -0
  17. package/dist/cjs/ui/jira-issues-modal/basic-filters/types.js +15 -0
  18. package/dist/cjs/ui/jira-issues-modal/basic-filters/ui/async-popup-select/formatOptionLabel.js +0 -1
  19. package/dist/cjs/ui/jira-issues-modal/basic-filters/utils/transformers.js +97 -0
  20. package/dist/cjs/ui/jira-issues-modal/modal/index.js +16 -5
  21. package/dist/es2019/analytics/constants.js +1 -1
  22. package/dist/es2019/services/mocks.js +128 -0
  23. package/dist/es2019/services/useBasicFilterAGG.js +72 -0
  24. package/dist/es2019/services/utils.js +113 -0
  25. package/dist/es2019/ui/assets-modal/modal/index.js +2 -2
  26. package/dist/es2019/ui/datasource-table-view/datasourceTableView.js +5 -1
  27. package/dist/es2019/ui/issue-like-table/draggable-table-heading.js +113 -5
  28. package/dist/es2019/ui/issue-like-table/index.js +82 -72
  29. package/dist/es2019/ui/jira-issues-modal/basic-filters/mocks/fieldValuesEmptyResponse.js +14 -0
  30. package/dist/es2019/ui/jira-issues-modal/basic-filters/mocks/fieldValuesExpectedResponseForAssignees.js +149 -0
  31. package/dist/es2019/ui/jira-issues-modal/basic-filters/mocks/fieldValuesStandardResponseForProjects.js +76 -0
  32. package/dist/es2019/ui/jira-issues-modal/basic-filters/mocks/fieldValuesStandardResponseForStatuses.js +81 -0
  33. package/dist/es2019/ui/jira-issues-modal/basic-filters/mocks/fieldValuesStandardResponseForTypes.js +91 -0
  34. package/dist/es2019/ui/jira-issues-modal/basic-filters/mocks/hydrateJqlEmptyResponse.js +12 -0
  35. package/dist/es2019/ui/jira-issues-modal/basic-filters/mocks/hydrateJqlStandardResponse.js +105 -0
  36. package/dist/es2019/ui/jira-issues-modal/basic-filters/types.js +9 -0
  37. package/dist/es2019/ui/jira-issues-modal/basic-filters/ui/async-popup-select/formatOptionLabel.js +0 -1
  38. package/dist/es2019/ui/jira-issues-modal/basic-filters/utils/transformers.js +91 -0
  39. package/dist/es2019/ui/jira-issues-modal/modal/index.js +15 -4
  40. package/dist/esm/analytics/constants.js +1 -1
  41. package/dist/esm/services/mocks.js +128 -0
  42. package/dist/esm/services/useBasicFilterAGG.js +112 -0
  43. package/dist/esm/services/utils.js +2 -0
  44. package/dist/esm/ui/assets-modal/modal/index.js +2 -2
  45. package/dist/esm/ui/datasource-table-view/datasourceTableView.js +5 -1
  46. package/dist/esm/ui/issue-like-table/draggable-table-heading.js +109 -5
  47. package/dist/esm/ui/issue-like-table/index.js +108 -94
  48. package/dist/esm/ui/jira-issues-modal/basic-filters/mocks/fieldValuesEmptyResponse.js +14 -0
  49. package/dist/esm/ui/jira-issues-modal/basic-filters/mocks/fieldValuesExpectedResponseForAssignees.js +149 -0
  50. package/dist/esm/ui/jira-issues-modal/basic-filters/mocks/fieldValuesStandardResponseForProjects.js +76 -0
  51. package/dist/esm/ui/jira-issues-modal/basic-filters/mocks/fieldValuesStandardResponseForStatuses.js +81 -0
  52. package/dist/esm/ui/jira-issues-modal/basic-filters/mocks/fieldValuesStandardResponseForTypes.js +91 -0
  53. package/dist/esm/ui/jira-issues-modal/basic-filters/mocks/hydrateJqlEmptyResponse.js +12 -0
  54. package/dist/esm/ui/jira-issues-modal/basic-filters/mocks/hydrateJqlStandardResponse.js +105 -0
  55. package/dist/esm/ui/jira-issues-modal/basic-filters/types.js +9 -0
  56. package/dist/esm/ui/jira-issues-modal/basic-filters/ui/async-popup-select/formatOptionLabel.js +0 -1
  57. package/dist/esm/ui/jira-issues-modal/basic-filters/utils/transformers.js +89 -0
  58. package/dist/esm/ui/jira-issues-modal/modal/index.js +17 -6
  59. package/dist/types/services/mocks.d.ts +3 -0
  60. package/dist/types/services/useBasicFilterAGG.d.ts +5 -0
  61. package/dist/types/services/utils.d.ts +2 -0
  62. package/dist/types/ui/datasource-table-view/types.d.ts +4 -0
  63. package/dist/types/ui/issue-like-table/draggable-table-heading.d.ts +3 -2
  64. package/dist/types/ui/issue-like-table/index.d.ts +5 -3
  65. package/dist/types/ui/issue-like-table/types.d.ts +5 -0
  66. package/dist/types/ui/jira-issues-modal/basic-filters/hooks/useFieldValues.d.ts +1 -1
  67. package/dist/types/ui/jira-issues-modal/basic-filters/mocks/fieldValuesEmptyResponse.d.ts +3 -0
  68. package/dist/types/ui/jira-issues-modal/basic-filters/mocks/fieldValuesExpectedResponseForAssignees.d.ts +17 -0
  69. package/dist/types/ui/jira-issues-modal/basic-filters/mocks/fieldValuesStandardResponseForProjects.d.ts +8 -0
  70. package/dist/types/ui/jira-issues-modal/basic-filters/mocks/fieldValuesStandardResponseForStatuses.d.ts +8 -0
  71. package/dist/types/ui/jira-issues-modal/basic-filters/mocks/fieldValuesStandardResponseForTypes.d.ts +8 -0
  72. package/dist/types/ui/jira-issues-modal/basic-filters/mocks/hydrateJqlEmptyResponse.d.ts +3 -0
  73. package/dist/types/ui/jira-issues-modal/basic-filters/mocks/hydrateJqlStandardResponse.d.ts +29 -0
  74. package/dist/types/ui/jira-issues-modal/basic-filters/types.d.ts +93 -0
  75. package/dist/types/ui/jira-issues-modal/basic-filters/ui/async-popup-select/control.d.ts +1 -1
  76. package/dist/types/ui/jira-issues-modal/basic-filters/ui/async-popup-select/formatOptionLabel.d.ts +1 -1
  77. package/dist/types/ui/jira-issues-modal/basic-filters/ui/async-popup-select/index.d.ts +1 -1
  78. package/dist/types/ui/jira-issues-modal/basic-filters/ui/async-popup-select/trigger.d.ts +1 -1
  79. package/dist/types/ui/jira-issues-modal/basic-filters/utils/transformers.d.ts +8 -0
  80. package/dist/types/ui/jira-issues-modal/jira-search-container/buildJQL.d.ts +1 -1
  81. package/dist/types/ui/jira-issues-modal/types.d.ts +4 -0
  82. package/dist/types-ts4.5/services/mocks.d.ts +3 -0
  83. package/dist/types-ts4.5/services/useBasicFilterAGG.d.ts +5 -0
  84. package/dist/types-ts4.5/services/utils.d.ts +2 -0
  85. package/dist/types-ts4.5/ui/datasource-table-view/types.d.ts +4 -0
  86. package/dist/types-ts4.5/ui/issue-like-table/draggable-table-heading.d.ts +3 -2
  87. package/dist/types-ts4.5/ui/issue-like-table/index.d.ts +5 -3
  88. package/dist/types-ts4.5/ui/issue-like-table/types.d.ts +5 -0
  89. package/dist/types-ts4.5/ui/jira-issues-modal/basic-filters/hooks/useFieldValues.d.ts +1 -1
  90. package/dist/types-ts4.5/ui/jira-issues-modal/basic-filters/mocks/fieldValuesEmptyResponse.d.ts +3 -0
  91. package/dist/types-ts4.5/ui/jira-issues-modal/basic-filters/mocks/fieldValuesExpectedResponseForAssignees.d.ts +17 -0
  92. package/dist/types-ts4.5/ui/jira-issues-modal/basic-filters/mocks/fieldValuesStandardResponseForProjects.d.ts +8 -0
  93. package/dist/types-ts4.5/ui/jira-issues-modal/basic-filters/mocks/fieldValuesStandardResponseForStatuses.d.ts +8 -0
  94. package/dist/types-ts4.5/ui/jira-issues-modal/basic-filters/mocks/fieldValuesStandardResponseForTypes.d.ts +8 -0
  95. package/dist/types-ts4.5/ui/jira-issues-modal/basic-filters/mocks/hydrateJqlEmptyResponse.d.ts +3 -0
  96. package/dist/types-ts4.5/ui/jira-issues-modal/basic-filters/mocks/hydrateJqlStandardResponse.d.ts +29 -0
  97. package/dist/types-ts4.5/ui/jira-issues-modal/basic-filters/types.d.ts +93 -0
  98. package/dist/types-ts4.5/ui/jira-issues-modal/basic-filters/ui/async-popup-select/control.d.ts +1 -1
  99. package/dist/types-ts4.5/ui/jira-issues-modal/basic-filters/ui/async-popup-select/formatOptionLabel.d.ts +1 -1
  100. package/dist/types-ts4.5/ui/jira-issues-modal/basic-filters/ui/async-popup-select/index.d.ts +1 -1
  101. package/dist/types-ts4.5/ui/jira-issues-modal/basic-filters/ui/async-popup-select/trigger.d.ts +1 -1
  102. package/dist/types-ts4.5/ui/jira-issues-modal/basic-filters/utils/transformers.d.ts +8 -0
  103. package/dist/types-ts4.5/ui/jira-issues-modal/jira-search-container/buildJQL.d.ts +1 -1
  104. package/dist/types-ts4.5/ui/jira-issues-modal/types.d.ts +4 -0
  105. package/examples-helpers/buildIssueLikeTable.tsx +15 -1
  106. package/examples-helpers/buildJiraIssuesTable.tsx +15 -1
  107. package/package.json +6 -6
  108. package/report.api.md +11 -0
  109. package/tmp/api-report-tmp.d.ts +11 -0
  110. package/dist/cjs/ui/jira-issues-modal/basic-filters/ui/async-popup-select/types.js +0 -5
  111. package/dist/es2019/ui/jira-issues-modal/basic-filters/ui/async-popup-select/types.js +0 -1
  112. package/dist/esm/ui/jira-issues-modal/basic-filters/ui/async-popup-select/types.js +0 -1
  113. package/dist/types/ui/jira-issues-modal/basic-filters/ui/async-popup-select/types.d.ts +0 -23
  114. package/dist/types-ts4.5/ui/jira-issues-modal/basic-filters/ui/async-popup-select/types.d.ts +0 -23
@@ -0,0 +1,128 @@
1
+ export var mockHydrateJqlResponse = {
2
+ data: {
3
+ jira: {
4
+ jqlBuilder: {
5
+ hydrateJqlQuery: {
6
+ fields: [{
7
+ jqlTerm: 'issuetype',
8
+ values: [{
9
+ values: [{
10
+ displayName: 'Category',
11
+ jqlTerm: 'Category',
12
+ issueTypes: [{
13
+ avatar: {
14
+ small: '/rest/api/2/universal_avatar/view/type/issuetype/avatar/16627?size=medium'
15
+ }
16
+ }]
17
+ }]
18
+ }, {
19
+ values: [{
20
+ displayName: '!disturbed',
21
+ jqlTerm: '"!disturbed"',
22
+ issueTypes: [{
23
+ avatar: {
24
+ small: '/rest/api/2/universal_avatar/view/type/issuetype/avatar/16640?size=medium'
25
+ }
26
+ }, {
27
+ avatar: {
28
+ small: '/rest/api/2/universal_avatar/view/type/issuetype/avatar/16628?size=medium'
29
+ }
30
+ }]
31
+ }]
32
+ }]
33
+ }, {
34
+ jqlTerm: 'project',
35
+ values: [{
36
+ values: [{
37
+ displayName: '(Deprecated) Koopa Troopas',
38
+ jqlTerm: '"(Deprecated) Koopa Troopas"',
39
+ project: {
40
+ avatar: {
41
+ small: 'https://hello.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/36328?size=small'
42
+ }
43
+ }
44
+ }]
45
+ }]
46
+ }, {
47
+ jqlTerm: 'assignee',
48
+ values: [{
49
+ values: [{
50
+ displayName: 'Nidhin Joseph',
51
+ jqlTerm: '70121:97052100-1513-42bc-a2f0-d77e71f0b7eb',
52
+ user: {
53
+ picture: 'https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/70121:97052100-1513-42bc-a2f0-d77e71f0b7eb/3d737224-7e8f-4e0c-888c-d5ff6044d484/128'
54
+ }
55
+ }]
56
+ }]
57
+ }, {
58
+ jqlTerm: 'status',
59
+ values: [{
60
+ values: [{
61
+ displayName: 'Done',
62
+ jqlTerm: 'Done',
63
+ statusCategory: {
64
+ colorName: 'GREEN'
65
+ }
66
+ }]
67
+ }]
68
+ }]
69
+ }
70
+ }
71
+ }
72
+ }
73
+ };
74
+ export var mockFieldValuesResponse = {
75
+ data: {
76
+ jira: {
77
+ jqlBuilder: {
78
+ fieldValues: {
79
+ totalCount: 4,
80
+ pageInfo: {
81
+ endCursor: 'YXJyYXljb25uZWN0aW9uOjM='
82
+ },
83
+ edges: [{
84
+ node: {
85
+ jqlTerm: '"My IT TEST"',
86
+ displayName: 'My IT TEST',
87
+ project: {
88
+ avatar: {
89
+ small: 'https://nmccormick2.jira-dev.com/rest/api/2/universal_avatar/view/type/project/avatar/10403?size=small'
90
+ }
91
+ }
92
+ }
93
+ }, {
94
+ node: {
95
+ jqlTerm: 'Test',
96
+ displayName: 'Test',
97
+ project: {
98
+ avatar: {
99
+ small: 'https://nmccormick2.jira-dev.com/rest/api/2/universal_avatar/view/type/project/avatar/10411?size=small'
100
+ }
101
+ }
102
+ }
103
+ }, {
104
+ node: {
105
+ jqlTerm: '"Test rights"',
106
+ displayName: 'Test rights',
107
+ project: {
108
+ avatar: {
109
+ small: 'https://nmccormick2.jira-dev.com/rest/api/2/universal_avatar/view/type/project/avatar/10405?size=small'
110
+ }
111
+ }
112
+ }
113
+ }, {
114
+ node: {
115
+ jqlTerm: 'Test2',
116
+ displayName: 'Test2',
117
+ project: {
118
+ avatar: {
119
+ small: 'https://nmccormick2.jira-dev.com/rest/api/2/universal_avatar/view/type/project/avatar/10410?size=small'
120
+ }
121
+ }
122
+ }
123
+ }]
124
+ }
125
+ }
126
+ }
127
+ }
128
+ };
@@ -0,0 +1,112 @@
1
+ import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
3
+ import { useCallback, useMemo } from 'react';
4
+ import { useSmartLinkContext } from '@atlaskit/link-provider';
5
+ import { getBaseUrl } from '@atlaskit/linking-common';
6
+ import { fieldValuesQuery, hydrateJQLQuery } from './utils';
7
+ var getGraphqlUrl = function getGraphqlUrl(envKey, baseUrlOverride) {
8
+ var baseUrl = baseUrlOverride || getBaseUrl(envKey);
9
+ return baseUrl ? "".concat(baseUrl, "/graphql") : '/gateway/api/graphql';
10
+ };
11
+ export var useBasicFilterAGG = function useBasicFilterAGG() {
12
+ var _useSmartLinkContext = useSmartLinkContext(),
13
+ client = _useSmartLinkContext.connections.client;
14
+ var gatewayGraphqlUrl = getGraphqlUrl(client.envKey, client.baseUrlOverride);
15
+ var aggHeaders = useMemo(function () {
16
+ return new Headers({
17
+ 'Content-Type': 'application/json',
18
+ 'X-ExperimentalApi': 'JiraJqlBuilder'
19
+ });
20
+ }, []);
21
+ var getHydratedJQL = useCallback( /*#__PURE__*/function () {
22
+ var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(cloudId, jql) {
23
+ var body, request, response;
24
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
25
+ while (1) switch (_context.prev = _context.next) {
26
+ case 0:
27
+ body = JSON.stringify({
28
+ variables: {
29
+ cloudId: cloudId,
30
+ jql: jql
31
+ },
32
+ operationName: 'hydrate',
33
+ query: hydrateJQLQuery
34
+ });
35
+ request = new Request(gatewayGraphqlUrl, {
36
+ method: 'POST',
37
+ headers: aggHeaders,
38
+ body: body
39
+ });
40
+ _context.prev = 2;
41
+ _context.next = 5;
42
+ return fetch(request);
43
+ case 5:
44
+ response = _context.sent;
45
+ return _context.abrupt("return", response.json());
46
+ case 9:
47
+ _context.prev = 9;
48
+ _context.t0 = _context["catch"](2);
49
+ throw new Error(_context.t0);
50
+ case 12:
51
+ case "end":
52
+ return _context.stop();
53
+ }
54
+ }, _callee, null, [[2, 9]]);
55
+ }));
56
+ return function (_x, _x2) {
57
+ return _ref.apply(this, arguments);
58
+ };
59
+ }(), [gatewayGraphqlUrl, aggHeaders]);
60
+ var getFieldValues = useCallback( /*#__PURE__*/function () {
61
+ var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(cloudId, jql, jqlTerm, searchString, pageCursor) {
62
+ var body, request, response;
63
+ return _regeneratorRuntime.wrap(function _callee2$(_context2) {
64
+ while (1) switch (_context2.prev = _context2.next) {
65
+ case 0:
66
+ body = JSON.stringify({
67
+ variables: {
68
+ cloudId: cloudId,
69
+ jql: jql,
70
+ first: 10,
71
+ jqlTerm: jqlTerm,
72
+ searchString: searchString,
73
+ after: pageCursor
74
+ },
75
+ operationName: 'fieldValues',
76
+ query: fieldValuesQuery
77
+ });
78
+ request = new Request(gatewayGraphqlUrl, {
79
+ method: 'POST',
80
+ headers: aggHeaders,
81
+ body: body
82
+ });
83
+ _context2.prev = 2;
84
+ _context2.next = 5;
85
+ return fetch(request);
86
+ case 5:
87
+ response = _context2.sent;
88
+ _context2.next = 8;
89
+ return response.json();
90
+ case 8:
91
+ return _context2.abrupt("return", _context2.sent);
92
+ case 11:
93
+ _context2.prev = 11;
94
+ _context2.t0 = _context2["catch"](2);
95
+ throw new Error(_context2.t0);
96
+ case 14:
97
+ case "end":
98
+ return _context2.stop();
99
+ }
100
+ }, _callee2, null, [[2, 11]]);
101
+ }));
102
+ return function (_x3, _x4, _x5, _x6, _x7) {
103
+ return _ref2.apply(this, arguments);
104
+ };
105
+ }(), [gatewayGraphqlUrl, aggHeaders]);
106
+ return useMemo(function () {
107
+ return {
108
+ getHydratedJQL: getHydratedJQL,
109
+ getFieldValues: getFieldValues
110
+ };
111
+ }, [getHydratedJQL, getFieldValues]);
112
+ };
@@ -0,0 +1,2 @@
1
+ export var hydrateJQLQuery = "query hydrate($cloudId: ID!, $jql: String!) {\n jira {\n jqlBuilder(cloudId: $cloudId) {\n hydrateJqlQuery(query: $jql) {\n ... on JiraJqlHydratedQuery {\n fields {\n ... on JiraJqlQueryHydratedField {\n jqlTerm\n values {\n ... on JiraJqlQueryHydratedValue {\n values {\n ... on JiraJqlProjectFieldValue {\n jqlTerm\n displayName\n project {\n avatar {\n small\n }\n }\n }\n ... on JiraJqlStatusFieldValue {\n jqlTerm\n displayName\n statusCategory {\n colorName\n }\n }\n ... on JiraJqlIssueTypeFieldValue {\n jqlTerm\n displayName\n issueTypes {\n avatar {\n small\n }\n }\n }\n ... on JiraJqlUserFieldValue {\n jqlTerm\n displayName\n user {\n picture\n }\n }\n ... on JiraJqlGroupFieldValue {\n jqlTerm\n displayName\n group {\n name\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n}";
2
+ export var fieldValuesQuery = "query fieldValues($cloudId: ID!, $first: Int = 10, $jqlTerm: String!, $jql: String!, $searchString: String!, $after: String, $projectOptions: JiraProjectOptions) {\n jira {\n jqlBuilder(cloudId: $cloudId) {\n fieldValues(\n first: $first\n jqlTerm: $jqlTerm\n jqlContext: $jql\n searchString: $searchString\n after: $after\n ) {\n totalCount\n pageInfo {\n endCursor\n }\n edges {\n node {\n jqlTerm\n displayName\n ... on JiraJqlProjectFieldValue {\n project {\n avatar {\n small\n }\n }\n }\n ... on JiraJqlIssueTypeFieldValue {\n issueTypes {\n avatar {\n small\n }\n }\n }\n ... on JiraJqlStatusFieldValue {\n statusCategory {\n colorName\n }\n }\n ... on JiraJqlUserFieldValue {\n user {\n picture\n }\n }\n ... on JiraJqlGroupFieldValue {\n group {\n name\n }\n }\n }\n }\n }\n }\n }\n}";
@@ -235,7 +235,7 @@ var PlainAssetsConfigModal = function PlainAssetsConfigModal(props) {
235
235
  return _regeneratorRuntime.wrap(function _callee$(_context) {
236
236
  while (1) switch (_context.prev = _context.next) {
237
237
  case 0:
238
- if (schemaId !== searchSchemaId || aql !== searchAql) {
238
+ if (schemaId !== searchSchemaId || aql !== searchAql || status === 'rejected') {
239
239
  searchCount.current++;
240
240
  if (schemaId !== searchSchemaId) {
241
241
  userInteractionActions.current.add(DatasourceAction.SCHEMA_UPDATED);
@@ -259,7 +259,7 @@ var PlainAssetsConfigModal = function PlainAssetsConfigModal(props) {
259
259
  return function (_x, _x2) {
260
260
  return _ref.apply(this, arguments);
261
261
  };
262
- }(), [aql, reset, schemaId]);
262
+ }(), [aql, reset, schemaId, status]);
263
263
  var renderModalTitleContent = useCallback(function () {
264
264
  if (workspaceError) {
265
265
  return undefined;
@@ -21,7 +21,9 @@ var DatasourceTableViewWithoutAnalytics = function DatasourceTableViewWithoutAna
21
21
  parameters = _ref.parameters,
22
22
  visibleColumnKeys = _ref.visibleColumnKeys,
23
23
  onVisibleColumnKeysChange = _ref.onVisibleColumnKeysChange,
24
- url = _ref.url;
24
+ url = _ref.url,
25
+ columnCustomSizes = _ref.columnCustomSizes,
26
+ onColumnResize = _ref.onColumnResize;
25
27
  var _useDatasourceTableSt = useDatasourceTableState({
26
28
  datasourceId: datasourceId,
27
29
  parameters: parameters,
@@ -129,6 +131,8 @@ var DatasourceTableViewWithoutAnalytics = function DatasourceTableViewWithoutAna
129
131
  columns: columns,
130
132
  visibleColumnKeys: visibleColumnKeys || defaultVisibleColumnKeys,
131
133
  onVisibleColumnKeysChange: onVisibleColumnKeysChange,
134
+ columnCustomSizes: columnCustomSizes,
135
+ onColumnResize: onColumnResize,
132
136
  scrollableContainerHeight: ScrollableContainerHeight,
133
137
  parentContainerRenderInstanceId: tableRenderInstanceId,
134
138
  extensionKey: extensionKey
@@ -7,10 +7,13 @@ import invariant from 'tiny-invariant';
7
7
  import { attachClosestEdge, extractClosestEdge } from '@atlaskit/pragmatic-drag-and-drop-hitbox/addon/closest-edge';
8
8
  import { DropIndicator } from '@atlaskit/pragmatic-drag-and-drop-react-indicator/box-without-terminal';
9
9
  import { draggable, dropTargetForElements, monitorForElements } from '@atlaskit/pragmatic-drag-and-drop/adapter/element';
10
+ import { cancelUnhandled } from '@atlaskit/pragmatic-drag-and-drop/addon/cancel-unhandled';
10
11
  import { combine } from '@atlaskit/pragmatic-drag-and-drop/util/combine';
12
+ import { disableNativeDragPreview } from '@atlaskit/pragmatic-drag-and-drop/util/disable-native-drag-preview';
11
13
  import { offsetFromPointer } from '@atlaskit/pragmatic-drag-and-drop/util/offset-from-pointer';
12
14
  import { setCustomNativeDragPreview } from '@atlaskit/pragmatic-drag-and-drop/util/set-custom-native-drag-preview';
13
15
  import { TableHeading } from './styled';
16
+ import { COLUMN_MIN_WIDTH } from './index';
14
17
  var tableHeadingStatusStyles = {
15
18
  idle: css({
16
19
  ':hover': {
@@ -36,6 +39,40 @@ var dropTargetStyles = css({
36
39
  var noPointerEventsStyles = css({
37
40
  pointerEvents: 'none'
38
41
  });
42
+ var resizerStyles = css({
43
+ '--local-hitbox-width': "var(--ds-space-300, 24px)",
44
+ width: 'var(--local-hitbox-width)',
45
+ cursor: 'col-resize',
46
+ flexGrow: '0',
47
+ position: 'absolute',
48
+ zIndex: 1,
49
+ // we want this to sit on top of adjacent column headers
50
+ right: 'calc(-1 * calc(var(--local-hitbox-width) / 2))',
51
+ top: 0,
52
+ '::before': {
53
+ opacity: 0,
54
+ '--local-line-width': "var(--ds-border-width, 2px)",
55
+ content: '""',
56
+ position: 'absolute',
57
+ background: "var(--ds-border-brand, #0052CC)",
58
+ width: 'var(--local-line-width)',
59
+ inset: 0,
60
+ left: "calc(50% - calc(var(--local-line-width) / 2))",
61
+ transition: 'opacity 0.2s ease'
62
+ },
63
+ ':hover::before': {
64
+ opacity: 1
65
+ }
66
+ });
67
+ var resizingStyles = css({
68
+ // turning off the resizing cursor as sometimes it can cause the cursor to flicker
69
+ // while resizing. The browser controls the cursor while dragging, but the browser
70
+ // can sometimes bug out.
71
+ cursor: 'unset',
72
+ '::before': {
73
+ opacity: 1
74
+ }
75
+ });
39
76
  var idleState = {
40
77
  type: 'idle'
41
78
  };
@@ -49,8 +86,10 @@ export var DraggableTableHeading = function DraggableTableHeading(_ref) {
49
86
  tableId = _ref.tableId,
50
87
  dndPreviewHeight = _ref.dndPreviewHeight,
51
88
  dragPreview = _ref.dragPreview,
52
- maxWidth = _ref.maxWidth;
53
- var ref = useRef(null);
89
+ width = _ref.width,
90
+ onWidthChange = _ref.onWidthChange;
91
+ var mainHeaderCellRef = useRef(null);
92
+ var columnResizeHandleRef = useRef(null);
54
93
  var _useState = useState(idleState),
55
94
  _useState2 = _slicedToArray(_useState, 2),
56
95
  state = _useState2[0],
@@ -65,7 +104,7 @@ export var DraggableTableHeading = function DraggableTableHeading(_ref) {
65
104
  setClosestEdge = _useState6[1];
66
105
  var dropTargetRef = useRef(null);
67
106
  useEffect(function () {
68
- var cell = ref.current;
107
+ var cell = mainHeaderCellRef.current;
69
108
  invariant(cell);
70
109
  return combine(draggable({
71
110
  element: cell,
@@ -168,15 +207,80 @@ export var DraggableTableHeading = function DraggableTableHeading(_ref) {
168
207
  }
169
208
  });
170
209
  }, [tableId]);
210
+
211
+ // Handling column resizing
212
+ useEffect(function () {
213
+ var resizeHandle = columnResizeHandleRef.current;
214
+ invariant(resizeHandle);
215
+ var mainHeaderCell = mainHeaderCellRef.current;
216
+ invariant(mainHeaderCell);
217
+ return draggable({
218
+ element: resizeHandle,
219
+ getInitialData: function getInitialData() {
220
+ // metadata related to currently dragging item (can be read by drop events etc)
221
+ return {
222
+ type: 'column-resize',
223
+ id: id,
224
+ index: index,
225
+ tableId: tableId
226
+ };
227
+ },
228
+ // Is called when dragging started
229
+ onGenerateDragPreview: function onGenerateDragPreview(_ref6) {
230
+ var nativeSetDragImage = _ref6.nativeSetDragImage;
231
+ // We don't show any preview, since column separator (handle) is moving with the cursor
232
+ disableNativeDragPreview({
233
+ nativeSetDragImage: nativeSetDragImage
234
+ });
235
+ // Block drag operations outside `@atlaskit/pragmatic-drag-and-drop`
236
+ cancelUnhandled.start();
237
+ setState({
238
+ type: 'resizing',
239
+ initialWidth: width
240
+ });
241
+ },
242
+ onDrag: function onDrag(_ref7) {
243
+ var location = _ref7.location;
244
+ var relativeDistanceX = location.current.input.clientX - location.initial.input.clientX;
245
+ invariant(state.type === 'resizing');
246
+ var initialWidth = state.initialWidth;
247
+
248
+ // Set the width of our header being resized
249
+ var proposedWidth = initialWidth + relativeDistanceX;
250
+ if (initialWidth >= COLUMN_MIN_WIDTH && proposedWidth < COLUMN_MIN_WIDTH) {
251
+ proposedWidth = COLUMN_MIN_WIDTH;
252
+ }
253
+
254
+ // We update width css directly live
255
+ mainHeaderCell.style.setProperty('width', "".concat(proposedWidth, "px"));
256
+ },
257
+ onDrop: function onDrop() {
258
+ cancelUnhandled.stop();
259
+ setState(idleState);
260
+ if (onWidthChange) {
261
+ // We use element's css value as a source of truth (compare to another Ref)
262
+ var currentWidthPx = mainHeaderCell.style.getPropertyValue('width');
263
+ onWidthChange(+currentWidthPx.slice(0, -2));
264
+ }
265
+ }
266
+ });
267
+ }, [id, index, onWidthChange, state, tableId, width]);
171
268
  return jsx(TableHeading, {
172
- ref: ref,
269
+ ref: mainHeaderCellRef,
173
270
  css: [tableHeadingStatusStyles[state.type]],
174
271
  "data-testid": "".concat(id, "-column-heading"),
175
272
  style: {
176
- maxWidth: maxWidth,
273
+ width: width,
177
274
  cursor: 'grab'
178
275
  }
179
276
  }, jsx("div", {
277
+ ref: columnResizeHandleRef,
278
+ css: [resizerStyles, state.type === 'resizing' && resizingStyles],
279
+ style: {
280
+ height: "".concat(dndPreviewHeight, "px")
281
+ },
282
+ "data-testid": "column-resize-handle"
283
+ }), jsx("div", {
180
284
  ref: dropTargetRef,
181
285
  css: [dropTargetStyles, isDraggingAnyColumn ? null : noPointerEventsStyles],
182
286
  style: {