@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.
Files changed (245) hide show
  1. package/CHANGELOG.md +233 -0
  2. package/README.md +3 -0
  3. package/dist/cjs/hooks/useDatasourceTableState.js +133 -0
  4. package/dist/cjs/index.js +19 -0
  5. package/dist/cjs/services/getAvailableJiraSites.js +65 -0
  6. package/dist/cjs/services/makeGetJqlAutocompleteData.js +66 -0
  7. package/dist/cjs/services/makeGetJqlSuggestionsData.js +55 -0
  8. package/dist/cjs/ui/issue-like-table/column-picker/index.js +93 -0
  9. package/dist/cjs/ui/issue-like-table/column-picker/types.js +5 -0
  10. package/dist/cjs/ui/issue-like-table/draggable-table-heading.js +182 -0
  11. package/dist/cjs/ui/issue-like-table/empty-state/index.js +127 -0
  12. package/dist/cjs/ui/issue-like-table/empty-state/priority.js +28 -0
  13. package/dist/cjs/ui/issue-like-table/empty-state/type.js +51 -0
  14. package/dist/cjs/ui/issue-like-table/empty-state/types.js +5 -0
  15. package/dist/cjs/ui/issue-like-table/index.js +300 -0
  16. package/dist/cjs/ui/issue-like-table/render-type/boolean/index.js +30 -0
  17. package/dist/cjs/ui/issue-like-table/render-type/boolean/messages.js +20 -0
  18. package/dist/cjs/ui/issue-like-table/render-type/date-time/index.js +47 -0
  19. package/dist/cjs/ui/issue-like-table/render-type/icon/index.js +34 -0
  20. package/dist/cjs/ui/issue-like-table/render-type/index.js +63 -0
  21. package/dist/cjs/ui/issue-like-table/render-type/link/index.js +56 -0
  22. package/dist/cjs/ui/issue-like-table/render-type/number/index.js +24 -0
  23. package/dist/cjs/ui/issue-like-table/render-type/status/index.js +28 -0
  24. package/dist/cjs/ui/issue-like-table/render-type/tag/index.js +27 -0
  25. package/dist/cjs/ui/issue-like-table/render-type/text/index.js +23 -0
  26. package/dist/cjs/ui/issue-like-table/render-type/user/index.js +36 -0
  27. package/dist/cjs/ui/issue-like-table/render-type/user/messages.js +15 -0
  28. package/dist/cjs/ui/issue-like-table/styled.js +12 -0
  29. package/dist/cjs/ui/issue-like-table/types.js +5 -0
  30. package/dist/cjs/ui/issue-like-table/useIsOnScreen.js +32 -0
  31. package/dist/cjs/ui/jira-issues/modal/basic-search-input/index.js +52 -0
  32. package/dist/cjs/ui/jira-issues/modal/basic-search-input/messages.js +15 -0
  33. package/dist/cjs/ui/jira-issues/modal/index.js +267 -0
  34. package/dist/cjs/ui/jira-issues/modal/jira-search-container/buildJQL.js +27 -0
  35. package/dist/cjs/ui/jira-issues/modal/jira-search-container/index.js +116 -0
  36. package/dist/cjs/ui/jira-issues/modal/jira-search-container/messages.js +15 -0
  37. package/dist/cjs/ui/jira-issues/modal/jql-editor/index.js +41 -0
  38. package/dist/cjs/ui/jira-issues/modal/messages.js +45 -0
  39. package/dist/cjs/ui/jira-issues/modal/mode-switcher/index.js +97 -0
  40. package/dist/cjs/ui/jira-issues/modal/site-selector/index.js +55 -0
  41. package/dist/cjs/ui/jira-issues/modal/site-selector/messages.js +20 -0
  42. package/dist/cjs/ui/jira-issues/table-footer/index.js +68 -0
  43. package/dist/cjs/ui/jira-issues/table-footer/messages.js +25 -0
  44. package/dist/cjs/ui/jira-issues/table-footer/sync-info/index.js +79 -0
  45. package/dist/cjs/ui/jira-issues/table-footer/sync-info/messages.js +20 -0
  46. package/dist/cjs/ui/jira-issues/tableView.js +64 -0
  47. package/dist/cjs/ui/jira-issues/types.js +5 -0
  48. package/dist/cjs/version.json +5 -0
  49. package/dist/es2019/hooks/useDatasourceTableState.js +77 -0
  50. package/dist/es2019/index.js +2 -0
  51. package/dist/es2019/services/getAvailableJiraSites.js +20 -0
  52. package/dist/es2019/services/makeGetJqlAutocompleteData.js +19 -0
  53. package/dist/es2019/services/makeGetJqlSuggestionsData.js +11 -0
  54. package/dist/es2019/ui/issue-like-table/column-picker/index.js +77 -0
  55. package/dist/es2019/ui/issue-like-table/column-picker/types.js +1 -0
  56. package/dist/es2019/ui/issue-like-table/draggable-table-heading.js +166 -0
  57. package/dist/es2019/ui/issue-like-table/empty-state/index.js +113 -0
  58. package/dist/es2019/ui/issue-like-table/empty-state/priority.js +32 -0
  59. package/dist/es2019/ui/issue-like-table/empty-state/type.js +46 -0
  60. package/dist/es2019/ui/issue-like-table/empty-state/types.js +1 -0
  61. package/dist/es2019/ui/issue-like-table/index.js +259 -0
  62. package/dist/es2019/ui/issue-like-table/render-type/boolean/index.js +21 -0
  63. package/dist/es2019/ui/issue-like-table/render-type/boolean/messages.js +13 -0
  64. package/dist/es2019/ui/issue-like-table/render-type/date-time/index.js +37 -0
  65. package/dist/es2019/ui/issue-like-table/render-type/icon/index.js +27 -0
  66. package/dist/es2019/ui/issue-like-table/render-type/index.js +55 -0
  67. package/dist/es2019/ui/issue-like-table/render-type/link/index.js +38 -0
  68. package/dist/es2019/ui/issue-like-table/render-type/number/index.js +15 -0
  69. package/dist/es2019/ui/issue-like-table/render-type/status/index.js +19 -0
  70. package/dist/es2019/ui/issue-like-table/render-type/tag/index.js +18 -0
  71. package/dist/es2019/ui/issue-like-table/render-type/text/index.js +14 -0
  72. package/dist/es2019/ui/issue-like-table/render-type/user/index.js +29 -0
  73. package/dist/es2019/ui/issue-like-table/render-type/user/messages.js +8 -0
  74. package/dist/es2019/ui/issue-like-table/styled.js +6 -0
  75. package/dist/es2019/ui/issue-like-table/types.js +1 -0
  76. package/dist/es2019/ui/issue-like-table/useIsOnScreen.js +17 -0
  77. package/dist/es2019/ui/jira-issues/modal/basic-search-input/index.js +42 -0
  78. package/dist/es2019/ui/jira-issues/modal/basic-search-input/messages.js +8 -0
  79. package/dist/es2019/ui/jira-issues/modal/index.js +227 -0
  80. package/dist/es2019/ui/jira-issues/modal/jira-search-container/buildJQL.js +20 -0
  81. package/dist/es2019/ui/jira-issues/modal/jira-search-container/index.js +90 -0
  82. package/dist/es2019/ui/jira-issues/modal/jira-search-container/messages.js +8 -0
  83. package/dist/es2019/ui/jira-issues/modal/jql-editor/index.js +33 -0
  84. package/dist/es2019/ui/jira-issues/modal/messages.js +38 -0
  85. package/dist/es2019/ui/jira-issues/modal/mode-switcher/index.js +90 -0
  86. package/dist/es2019/ui/jira-issues/modal/site-selector/index.js +43 -0
  87. package/dist/es2019/ui/jira-issues/modal/site-selector/messages.js +13 -0
  88. package/dist/es2019/ui/jira-issues/table-footer/index.js +78 -0
  89. package/dist/es2019/ui/jira-issues/table-footer/messages.js +18 -0
  90. package/dist/es2019/ui/jira-issues/table-footer/sync-info/index.js +59 -0
  91. package/dist/es2019/ui/jira-issues/table-footer/sync-info/messages.js +13 -0
  92. package/dist/es2019/ui/jira-issues/tableView.js +57 -0
  93. package/dist/es2019/ui/jira-issues/types.js +1 -0
  94. package/dist/es2019/version.json +5 -0
  95. package/dist/esm/hooks/useDatasourceTableState.js +125 -0
  96. package/dist/esm/index.js +2 -0
  97. package/dist/esm/services/getAvailableJiraSites.js +57 -0
  98. package/dist/esm/services/makeGetJqlAutocompleteData.js +58 -0
  99. package/dist/esm/services/makeGetJqlSuggestionsData.js +47 -0
  100. package/dist/esm/ui/issue-like-table/column-picker/index.js +85 -0
  101. package/dist/esm/ui/issue-like-table/column-picker/types.js +1 -0
  102. package/dist/esm/ui/issue-like-table/draggable-table-heading.js +173 -0
  103. package/dist/esm/ui/issue-like-table/empty-state/index.js +118 -0
  104. package/dist/esm/ui/issue-like-table/empty-state/priority.js +20 -0
  105. package/dist/esm/ui/issue-like-table/empty-state/type.js +43 -0
  106. package/dist/esm/ui/issue-like-table/empty-state/types.js +1 -0
  107. package/dist/esm/ui/issue-like-table/index.js +292 -0
  108. package/dist/esm/ui/issue-like-table/render-type/boolean/index.js +21 -0
  109. package/dist/esm/ui/issue-like-table/render-type/boolean/messages.js +13 -0
  110. package/dist/esm/ui/issue-like-table/render-type/date-time/index.js +38 -0
  111. package/dist/esm/ui/issue-like-table/render-type/icon/index.js +25 -0
  112. package/dist/esm/ui/issue-like-table/render-type/index.js +55 -0
  113. package/dist/esm/ui/issue-like-table/render-type/link/index.js +44 -0
  114. package/dist/esm/ui/issue-like-table/render-type/number/index.js +15 -0
  115. package/dist/esm/ui/issue-like-table/render-type/status/index.js +19 -0
  116. package/dist/esm/ui/issue-like-table/render-type/tag/index.js +18 -0
  117. package/dist/esm/ui/issue-like-table/render-type/text/index.js +14 -0
  118. package/dist/esm/ui/issue-like-table/render-type/user/index.js +27 -0
  119. package/dist/esm/ui/issue-like-table/render-type/user/messages.js +8 -0
  120. package/dist/esm/ui/issue-like-table/styled.js +4 -0
  121. package/dist/esm/ui/issue-like-table/types.js +1 -0
  122. package/dist/esm/ui/issue-like-table/useIsOnScreen.js +25 -0
  123. package/dist/esm/ui/jira-issues/modal/basic-search-input/index.js +43 -0
  124. package/dist/esm/ui/jira-issues/modal/basic-search-input/messages.js +8 -0
  125. package/dist/esm/ui/jira-issues/modal/index.js +255 -0
  126. package/dist/esm/ui/jira-issues/modal/jira-search-container/buildJQL.js +20 -0
  127. package/dist/esm/ui/jira-issues/modal/jira-search-container/index.js +104 -0
  128. package/dist/esm/ui/jira-issues/modal/jira-search-container/messages.js +8 -0
  129. package/dist/esm/ui/jira-issues/modal/jql-editor/index.js +31 -0
  130. package/dist/esm/ui/jira-issues/modal/messages.js +38 -0
  131. package/dist/esm/ui/jira-issues/modal/mode-switcher/index.js +88 -0
  132. package/dist/esm/ui/jira-issues/modal/site-selector/index.js +44 -0
  133. package/dist/esm/ui/jira-issues/modal/site-selector/messages.js +13 -0
  134. package/dist/esm/ui/jira-issues/table-footer/index.js +60 -0
  135. package/dist/esm/ui/jira-issues/table-footer/messages.js +18 -0
  136. package/dist/esm/ui/jira-issues/table-footer/sync-info/index.js +68 -0
  137. package/dist/esm/ui/jira-issues/table-footer/sync-info/messages.js +13 -0
  138. package/dist/esm/ui/jira-issues/tableView.js +55 -0
  139. package/dist/esm/ui/jira-issues/types.js +1 -0
  140. package/dist/esm/version.json +5 -0
  141. package/dist/types/hooks/useDatasourceTableState.d.ts +13 -0
  142. package/dist/types/index.d.ts +2 -0
  143. package/dist/types/services/getAvailableJiraSites.d.ts +6 -0
  144. package/dist/types/services/makeGetJqlAutocompleteData.d.ts +6 -0
  145. package/dist/types/services/makeGetJqlSuggestionsData.d.ts +5 -0
  146. package/dist/types/ui/issue-like-table/column-picker/index.d.ts +3 -0
  147. package/dist/types/ui/issue-like-table/column-picker/types.d.ts +6 -0
  148. package/dist/types/ui/issue-like-table/draggable-table-heading.d.ts +12 -0
  149. package/dist/types/ui/issue-like-table/empty-state/index.d.ts +6 -0
  150. package/dist/types/ui/issue-like-table/empty-state/priority.d.ts +6 -0
  151. package/dist/types/ui/issue-like-table/empty-state/type.d.ts +6 -0
  152. package/dist/types/ui/issue-like-table/empty-state/types.d.ts +2 -0
  153. package/dist/types/ui/issue-like-table/index.d.ts +15 -0
  154. package/dist/types/ui/issue-like-table/render-type/boolean/index.d.ts +8 -0
  155. package/dist/types/ui/issue-like-table/render-type/boolean/messages.d.ts +12 -0
  156. package/dist/types/ui/issue-like-table/render-type/date-time/index.d.ts +10 -0
  157. package/dist/types/ui/issue-like-table/render-type/icon/index.d.ts +8 -0
  158. package/dist/types/ui/issue-like-table/render-type/index.d.ts +2 -0
  159. package/dist/types/ui/issue-like-table/render-type/link/index.d.ts +8 -0
  160. package/dist/types/ui/issue-like-table/render-type/number/index.d.ts +8 -0
  161. package/dist/types/ui/issue-like-table/render-type/status/index.d.ts +8 -0
  162. package/dist/types/ui/issue-like-table/render-type/tag/index.d.ts +9 -0
  163. package/dist/types/ui/issue-like-table/render-type/text/index.d.ts +8 -0
  164. package/dist/types/ui/issue-like-table/render-type/user/index.d.ts +11 -0
  165. package/dist/types/ui/issue-like-table/render-type/user/messages.d.ts +7 -0
  166. package/dist/types/ui/issue-like-table/styled.d.ts +5 -0
  167. package/dist/types/ui/issue-like-table/types.d.ts +38 -0
  168. package/dist/types/ui/issue-like-table/useIsOnScreen.d.ts +1 -0
  169. package/dist/types/ui/jira-issues/modal/basic-search-input/index.d.ts +12 -0
  170. package/dist/types/ui/jira-issues/modal/basic-search-input/messages.d.ts +7 -0
  171. package/dist/types/ui/jira-issues/modal/index.d.ts +13 -0
  172. package/dist/types/ui/jira-issues/modal/jira-search-container/buildJQL.d.ts +7 -0
  173. package/dist/types/ui/jira-issues/modal/jira-search-container/index.d.ts +7 -0
  174. package/dist/types/ui/jira-issues/modal/jira-search-container/messages.d.ts +7 -0
  175. package/dist/types/ui/jira-issues/modal/jql-editor/index.d.ts +8 -0
  176. package/dist/types/ui/jira-issues/modal/messages.d.ts +37 -0
  177. package/dist/types/ui/jira-issues/modal/mode-switcher/index.d.ts +12 -0
  178. package/dist/types/ui/jira-issues/modal/site-selector/index.d.ts +10 -0
  179. package/dist/types/ui/jira-issues/modal/site-selector/messages.d.ts +12 -0
  180. package/dist/types/ui/jira-issues/table-footer/index.d.ts +7 -0
  181. package/dist/types/ui/jira-issues/table-footer/messages.d.ts +17 -0
  182. package/dist/types/ui/jira-issues/table-footer/sync-info/index.d.ts +4 -0
  183. package/dist/types/ui/jira-issues/table-footer/sync-info/messages.d.ts +12 -0
  184. package/dist/types/ui/jira-issues/tableView.d.ts +3 -0
  185. package/dist/types/ui/jira-issues/types.d.ts +14 -0
  186. package/dist/types-ts4.5/hooks/useDatasourceTableState.d.ts +13 -0
  187. package/dist/types-ts4.5/index.d.ts +2 -0
  188. package/dist/types-ts4.5/services/getAvailableJiraSites.d.ts +6 -0
  189. package/dist/types-ts4.5/services/makeGetJqlAutocompleteData.d.ts +6 -0
  190. package/dist/types-ts4.5/services/makeGetJqlSuggestionsData.d.ts +5 -0
  191. package/dist/types-ts4.5/ui/issue-like-table/column-picker/index.d.ts +3 -0
  192. package/dist/types-ts4.5/ui/issue-like-table/column-picker/types.d.ts +6 -0
  193. package/dist/types-ts4.5/ui/issue-like-table/draggable-table-heading.d.ts +12 -0
  194. package/dist/types-ts4.5/ui/issue-like-table/empty-state/index.d.ts +6 -0
  195. package/dist/types-ts4.5/ui/issue-like-table/empty-state/priority.d.ts +6 -0
  196. package/dist/types-ts4.5/ui/issue-like-table/empty-state/type.d.ts +6 -0
  197. package/dist/types-ts4.5/ui/issue-like-table/empty-state/types.d.ts +2 -0
  198. package/dist/types-ts4.5/ui/issue-like-table/index.d.ts +15 -0
  199. package/dist/types-ts4.5/ui/issue-like-table/render-type/boolean/index.d.ts +8 -0
  200. package/dist/types-ts4.5/ui/issue-like-table/render-type/boolean/messages.d.ts +12 -0
  201. package/dist/types-ts4.5/ui/issue-like-table/render-type/date-time/index.d.ts +10 -0
  202. package/dist/types-ts4.5/ui/issue-like-table/render-type/icon/index.d.ts +8 -0
  203. package/dist/types-ts4.5/ui/issue-like-table/render-type/index.d.ts +2 -0
  204. package/dist/types-ts4.5/ui/issue-like-table/render-type/link/index.d.ts +8 -0
  205. package/dist/types-ts4.5/ui/issue-like-table/render-type/number/index.d.ts +8 -0
  206. package/dist/types-ts4.5/ui/issue-like-table/render-type/status/index.d.ts +8 -0
  207. package/dist/types-ts4.5/ui/issue-like-table/render-type/tag/index.d.ts +9 -0
  208. package/dist/types-ts4.5/ui/issue-like-table/render-type/text/index.d.ts +8 -0
  209. package/dist/types-ts4.5/ui/issue-like-table/render-type/user/index.d.ts +11 -0
  210. package/dist/types-ts4.5/ui/issue-like-table/render-type/user/messages.d.ts +7 -0
  211. package/dist/types-ts4.5/ui/issue-like-table/styled.d.ts +5 -0
  212. package/dist/types-ts4.5/ui/issue-like-table/types.d.ts +38 -0
  213. package/dist/types-ts4.5/ui/issue-like-table/useIsOnScreen.d.ts +1 -0
  214. package/dist/types-ts4.5/ui/jira-issues/modal/basic-search-input/index.d.ts +12 -0
  215. package/dist/types-ts4.5/ui/jira-issues/modal/basic-search-input/messages.d.ts +7 -0
  216. package/dist/types-ts4.5/ui/jira-issues/modal/index.d.ts +13 -0
  217. package/dist/types-ts4.5/ui/jira-issues/modal/jira-search-container/buildJQL.d.ts +7 -0
  218. package/dist/types-ts4.5/ui/jira-issues/modal/jira-search-container/index.d.ts +7 -0
  219. package/dist/types-ts4.5/ui/jira-issues/modal/jira-search-container/messages.d.ts +7 -0
  220. package/dist/types-ts4.5/ui/jira-issues/modal/jql-editor/index.d.ts +8 -0
  221. package/dist/types-ts4.5/ui/jira-issues/modal/messages.d.ts +37 -0
  222. package/dist/types-ts4.5/ui/jira-issues/modal/mode-switcher/index.d.ts +12 -0
  223. package/dist/types-ts4.5/ui/jira-issues/modal/site-selector/index.d.ts +10 -0
  224. package/dist/types-ts4.5/ui/jira-issues/modal/site-selector/messages.d.ts +12 -0
  225. package/dist/types-ts4.5/ui/jira-issues/table-footer/index.d.ts +7 -0
  226. package/dist/types-ts4.5/ui/jira-issues/table-footer/messages.d.ts +17 -0
  227. package/dist/types-ts4.5/ui/jira-issues/table-footer/sync-info/index.d.ts +4 -0
  228. package/dist/types-ts4.5/ui/jira-issues/table-footer/sync-info/messages.d.ts +12 -0
  229. package/dist/types-ts4.5/ui/jira-issues/tableView.d.ts +3 -0
  230. package/dist/types-ts4.5/ui/jira-issues/types.d.ts +14 -0
  231. package/examples-helpers/buildIssueLikeTable.tsx +88 -0
  232. package/examples-helpers/buildJiraIssuesTable.tsx +31 -0
  233. package/examples-helpers/images.json +4 -0
  234. package/examples-helpers/mockAutocompleteData.ts +54 -0
  235. package/examples-helpers/mockJiraAvailableSites.ts +27 -0
  236. package/examples-helpers/mockJiraData.ts +546 -0
  237. package/examples-helpers/mockJqlSmartLinkData.ts +72 -0
  238. package/examples-helpers/mockSmartLinkData.ts +67 -0
  239. package/examples-helpers/mockSuggestionData.ts +17 -0
  240. package/examples-helpers/setupDatasourcesMocks.ts +199 -0
  241. package/examples-helpers/setupModalExampleMocks.ts +32 -0
  242. package/examples-helpers/smartLinkCustomClient.ts +26 -0
  243. package/package.json +118 -0
  244. package/report.api.md +98 -0
  245. package/tmp/api-report-tmp.d.ts +64 -0
@@ -0,0 +1,90 @@
1
+ /** @jsx jsx */
2
+ import React, { useState } from 'react';
3
+ import { css, jsx } from '@emotion/react';
4
+ import { useIntl } from 'react-intl-next';
5
+ import { BasicSearchInput } from '../basic-search-input';
6
+ import { JiraJQLEditor } from '../jql-editor';
7
+ import { ModeSwitcher } from '../mode-switcher';
8
+ import { buildJQL } from './buildJQL';
9
+ import { modeSwitcherMessages } from './messages';
10
+ const inputContainerStyles = css({
11
+ alignItems: 'baseline',
12
+ display: 'flex',
13
+ gap: "var(--ds-space-250, 20px)",
14
+ minHeight: '60px'
15
+ });
16
+ export const JiraSearchContainer = props => {
17
+ const {
18
+ parameters,
19
+ onSearch
20
+ } = props;
21
+ const {
22
+ cloudId,
23
+ value: initialJql
24
+ } = parameters || {};
25
+ const {
26
+ formatMessage
27
+ } = useIntl();
28
+ const basicModeValue = 'basic';
29
+ const jqlModeValue = 'jql';
30
+ const [basicSearchTerm, setBasicSearchTerm] = useState('');
31
+ const [currentSearchMode, setCurrentSearchMode] = useState(initialJql ? jqlModeValue : basicModeValue);
32
+ const [jql, setJql] = useState(initialJql || '');
33
+ const [orderKey, setOrderKey] = useState();
34
+ const [orderDirection, setOrderDirection] = useState();
35
+ const onSearchModeChange = searchMode => {
36
+ setCurrentSearchMode(searchMode);
37
+ };
38
+ const handleBasicSearchChange = e => {
39
+ const rawSearch = e.currentTarget.value;
40
+ setBasicSearchTerm(rawSearch);
41
+ setJql(buildJQL({
42
+ rawSearch,
43
+ orderDirection,
44
+ orderKey
45
+ }));
46
+ };
47
+ const onQueryChange = query => {
48
+ var _query$split$map$filt, _fragments$at, _fragments$at2, _fragments$at3;
49
+ // determine if order keys have been set so they can be saved and persisted when changes occur in basic search
50
+ const fragments = (_query$split$map$filt = query === null || query === void 0 ? void 0 : query.split(/(^| )(order by)( |$)/i).map(item => item.trim()).filter(Boolean)) !== null && _query$split$map$filt !== void 0 ? _query$split$map$filt : [];
51
+ const hasOrder = ((_fragments$at = fragments.at(-2)) === null || _fragments$at === void 0 ? void 0 : _fragments$at.toLowerCase()) === 'order by';
52
+ const key = hasOrder ? (_fragments$at2 = fragments.at(-1)) === null || _fragments$at2 === void 0 ? void 0 : _fragments$at2.split(' ').at(-2) : undefined;
53
+ const order = hasOrder ? (_fragments$at3 = fragments.at(-1)) === null || _fragments$at3 === void 0 ? void 0 : _fragments$at3.split(' ').at(-1) : undefined;
54
+
55
+ // TODO: confirm if these are the only order keys we want to preserve - existing whiteboard logic
56
+ if (key && ['key', 'summary', 'assignee', 'status'].includes(key)) {
57
+ setOrderKey(key);
58
+ setOrderDirection(order);
59
+ }
60
+ setJql(query);
61
+ };
62
+ const handleSearch = () => {
63
+ onSearch({
64
+ value: jql,
65
+ type: 'jql'
66
+ });
67
+ };
68
+ return jsx("div", {
69
+ css: inputContainerStyles
70
+ }, currentSearchMode === basicModeValue && jsx(BasicSearchInput, {
71
+ onChange: handleBasicSearchChange,
72
+ onSearch: handleSearch,
73
+ searchTerm: basicSearchTerm
74
+ }), currentSearchMode === jqlModeValue && jsx(JiraJQLEditor, {
75
+ cloudId: cloudId || '',
76
+ onChange: onQueryChange,
77
+ onSearch: handleSearch,
78
+ query: jql
79
+ }), jsx(ModeSwitcher, {
80
+ onOptionValueChange: onSearchModeChange,
81
+ selectedOptionValue: currentSearchMode,
82
+ options: [{
83
+ label: formatMessage(modeSwitcherMessages.basicTextSearchLabel),
84
+ value: basicModeValue
85
+ }, {
86
+ label: 'JQL',
87
+ value: jqlModeValue
88
+ }]
89
+ }));
90
+ };
@@ -0,0 +1,8 @@
1
+ import { defineMessages } from 'react-intl-next';
2
+ export const modeSwitcherMessages = defineMessages({
3
+ basicTextSearchLabel: {
4
+ id: 'linkDataSource.jira-issues.configmodal.basicModeText',
5
+ description: 'Display text for basic text search toggle button',
6
+ defaultMessage: 'Basic'
7
+ }
8
+ });
@@ -0,0 +1,33 @@
1
+ import React, { useEffect, useRef } from 'react';
2
+ import { JQLEditor } from '@atlassianlabs/jql-editor';
3
+ import { useAutocompleteProvider } from '@atlassianlabs/jql-editor-autocomplete-rest';
4
+ import { makeGetJqlAutocompleteData } from '../../../../services/makeGetJqlAutocompleteData';
5
+ import { makeGetJqlSuggestionsData } from '../../../../services/makeGetJqlSuggestionsData';
6
+ export const JiraJQLEditor = props => {
7
+ const {
8
+ cloudId,
9
+ onChange,
10
+ onSearch,
11
+ query
12
+ } = props;
13
+ const autocompleteProvider = useAutocompleteProvider('link-datasource', makeGetJqlAutocompleteData(cloudId), makeGetJqlSuggestionsData(cloudId));
14
+
15
+ // This is an expected (pretty strange imo) way of making sure text field is in focus when rendered
16
+ const inputRef = useRef({
17
+ focus: () => {}
18
+ });
19
+ useEffect(() => {
20
+ requestAnimationFrame(() => {
21
+ var _inputRef$current;
22
+ (_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 ? void 0 : _inputRef$current.focus();
23
+ });
24
+ }, []);
25
+ return /*#__PURE__*/React.createElement(JQLEditor, {
26
+ analyticsSource: "link-datasource",
27
+ autocompleteProvider: autocompleteProvider,
28
+ onSearch: onSearch,
29
+ onUpdate: onChange,
30
+ inputRef: inputRef,
31
+ query: query
32
+ });
33
+ };
@@ -0,0 +1,38 @@
1
+ import { defineMessages } from 'react-intl-next';
2
+ export const modalMessages = defineMessages({
3
+ cancelButtonText: {
4
+ id: 'linkDataSource.jira-issues.configmodal.cancelButtonText',
5
+ description: 'Button text to close the modal with no changes being made',
6
+ defaultMessage: 'Cancel'
7
+ },
8
+ insertIssuesButtonText: {
9
+ id: 'linkDataSource.jira-issues.configmodal.insertIssuesButtonText',
10
+ description: 'Button text to insert the displayed content',
11
+ defaultMessage: 'Insert issues'
12
+ },
13
+ insertIssuesTitle: {
14
+ id: 'linkDataSource.jira-issues.configmodal.insertIssuesTitle',
15
+ description: 'Title for the Jira Issues Datasource config modal',
16
+ defaultMessage: 'Insert Jira issues'
17
+ },
18
+ insertIssuesTitleManySites: {
19
+ id: 'linkDataSource.jira-issues.configmodal.insertIssuesTitleManySites',
20
+ description: 'Title for the Jira Issues Datasource config modal when multiple sites are available',
21
+ defaultMessage: 'Insert Jira issues from {siteName}'
22
+ },
23
+ issueViewModeLabel: {
24
+ id: 'linkDataSource.jira-issues.configmodal.issueViewModeLabel',
25
+ description: 'Label for toggle to enable a view mode showing issues in a table list view',
26
+ defaultMessage: 'Issue view'
27
+ },
28
+ countViewModeLabel: {
29
+ id: 'linkDataSource.jira-issues.configmodal.countViewModeLabel',
30
+ description: 'Label for toggle to enable a view mode showing issues in as a total count',
31
+ defaultMessage: 'Count view'
32
+ },
33
+ issuesCountSmartCardPlaceholderText: {
34
+ id: 'linkDataSource.jira-issues.configmodal.issues',
35
+ description: 'Placeholder text that will be placed next to a count of jira issues',
36
+ defaultMessage: '### Issues'
37
+ }
38
+ });
@@ -0,0 +1,90 @@
1
+ /** @jsx jsx */
2
+ import React from 'react';
3
+ import { css, jsx } from '@emotion/react';
4
+ import { N0, N20, N30A, N700 } from '@atlaskit/theme/colors';
5
+ const modeSwitcherStyles = css({
6
+ alignItems: 'center',
7
+ background: `var(--ds-background-neutral, ${N20})`,
8
+ borderRadius: "var(--ds-space-050, 4px)",
9
+ boxSizing: 'border-box',
10
+ display: 'inline-flex',
11
+ gap: "var(--ds-space-050, 4px)",
12
+ lineHeight: "var(--ds-space-200, 16px)",
13
+ padding: "var(--ds-space-075, 6px)",
14
+ '&:disabled': {
15
+ opacity: '0.5'
16
+ }
17
+ });
18
+ const compactModeSwitcherStyles = css({
19
+ padding: "var(--ds-space-050, 4px)",
20
+ gap: "var(--ds-space-025, 2px)"
21
+ });
22
+ const modeInputStyles = css({
23
+ display: 'none'
24
+ });
25
+ const modeSwitcherLabelStyles = css({
26
+ color: `var(--ds-text-subtlest, ${N700})`,
27
+ fontSize: "var(--ds-space-150, 12px)",
28
+ fontWeight: '600',
29
+ textTransform: 'uppercase',
30
+ padding: `${"var(--ds-space-050, 4px)"}`,
31
+ borderRadius: "var(--ds-space-050, 4px)",
32
+ ':hover': {
33
+ cursor: 'pointer',
34
+ backgroundColor: `var(--ds-background-neutral-subtle-hovered, ${N30A})`
35
+ }
36
+ });
37
+ const modeSwitcherLabelSelectedStyles = css({
38
+ backgroundColor: `var(--ds-background-input-pressed, ${N0})`,
39
+ borderRadius: "var(--ds-space-050, 4px)",
40
+ boxShadow: "var(--ds-shadow-overflow, 0px 0px 1px rgba(9, 30, 66, 0.12), 0px 0px 8px rgba(9, 30, 66, 0.16))",
41
+ ':hover': {
42
+ cursor: 'pointer',
43
+ backgroundColor: `var(--ds-background-input-pressed, ${N0})`
44
+ }
45
+ });
46
+ const modeSwitcherLabelDisabledStyles = css({
47
+ ':hover': {
48
+ cursor: 'not-allowed'
49
+ }
50
+ });
51
+ const compactModeSwitcherLabelStyles = css({
52
+ padding: `${"var(--ds-space-025, 2px)"} ${"var(--ds-space-050, 4px)"}`
53
+ });
54
+ export const ModeSwitcher = props => {
55
+ var _options$;
56
+ const {
57
+ isCompact,
58
+ isDisabled,
59
+ onOptionValueChange,
60
+ options,
61
+ selectedOptionValue = (_options$ = options[0]) === null || _options$ === void 0 ? void 0 : _options$.value
62
+ } = props;
63
+ const handleModeChange = event => {
64
+ onOptionValueChange(event.currentTarget.value);
65
+ };
66
+ return options.length > 0 ? jsx("fieldset", {
67
+ css: [modeSwitcherStyles, isCompact && compactModeSwitcherStyles],
68
+ "data-testid": "mode-toggle-container",
69
+ disabled: isDisabled
70
+ }, options.map(({
71
+ value,
72
+ label
73
+ }) => {
74
+ const isSelected = value === selectedOptionValue;
75
+ return jsx("label", {
76
+ key: value,
77
+ css: [modeSwitcherLabelStyles, isCompact && compactModeSwitcherLabelStyles, isSelected && modeSwitcherLabelSelectedStyles, isDisabled && modeSwitcherLabelDisabledStyles],
78
+ "data-testid": `mode-toggle-${value}`
79
+ }, label, jsx("input", {
80
+ "aria-checked": isSelected,
81
+ "aria-disabled": isDisabled,
82
+ checked: isSelected,
83
+ css: modeInputStyles,
84
+ disabled: isDisabled,
85
+ onChange: handleModeChange,
86
+ type: "radio",
87
+ value: value
88
+ }));
89
+ })) : null;
90
+ };
@@ -0,0 +1,43 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ /** @jsx jsx */
3
+ import { jsx } from '@emotion/react';
4
+ import { useIntl } from 'react-intl-next';
5
+ import Button from '@atlaskit/button/standard-button';
6
+ import DropdownMenu, { DropdownItem, DropdownItemGroup } from '@atlaskit/dropdown-menu';
7
+ import ChevronDownIcon from '@atlaskit/icon/glyph/chevron-down';
8
+ import { siteSelectorMessages } from './messages';
9
+ export const JiraSiteSelector = props => {
10
+ const {
11
+ availableSites,
12
+ onSiteSelection,
13
+ selectedJiraSite,
14
+ testId
15
+ } = props;
16
+ const intl = useIntl();
17
+ return jsx(DropdownMenu, {
18
+ spacing: "compact",
19
+ testId: testId,
20
+ trigger: ({
21
+ triggerRef,
22
+ ...props
23
+ }) => jsx(Button, _extends({}, props, {
24
+ spacing: "none",
25
+ iconBefore: jsx(ChevronDownIcon, {
26
+ label: intl.formatMessage(siteSelectorMessages.dropdownChevronLabel)
27
+ }),
28
+ ref: triggerRef
29
+ }))
30
+ }, jsx(DropdownItemGroup, null, availableSites.map(availableSite => {
31
+ const {
32
+ displayName,
33
+ cloudId
34
+ } = availableSite;
35
+ const isSelected = displayName === (selectedJiraSite === null || selectedJiraSite === void 0 ? void 0 : selectedJiraSite.displayName);
36
+ return jsx(DropdownItem, {
37
+ isSelected: isSelected,
38
+ key: cloudId,
39
+ onClick: () => onSiteSelection(availableSite),
40
+ testId: testId && `${testId}--dropdown-item${isSelected ? '__selected' : ''}`
41
+ }, displayName);
42
+ })));
43
+ };
@@ -0,0 +1,13 @@
1
+ import { defineMessages } from 'react-intl-next';
2
+ export const siteSelectorMessages = defineMessages({
3
+ dropdownChevronLabel: {
4
+ id: 'linkDataSource.jira-issues.configmodal.dropdownChevronLabel',
5
+ description: 'Label for button that reveals more available site options to choose from',
6
+ defaultMessage: 'Pick jira site'
7
+ },
8
+ selectedJiraSiteLabel: {
9
+ id: 'linkDataSource.jira-issues.configmodal.selectedJiraSiteLabel',
10
+ description: 'Label for a check icon declaring which option is selected',
11
+ defaultMessage: '{siteName} is selected'
12
+ }
13
+ });
@@ -0,0 +1,78 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ /** @jsx jsx */
3
+ import { Fragment, useEffect, useState } from 'react';
4
+ import { jsx } from '@emotion/react';
5
+ import styled from '@emotion/styled';
6
+ import { FormattedMessage, useIntl } from 'react-intl-next';
7
+ import Button from '@atlaskit/button';
8
+ import Heading from '@atlaskit/heading';
9
+ import RefreshIcon from '@atlaskit/icon/glyph/refresh';
10
+ import { N0, N40, N800, N90 } from '@atlaskit/theme/colors';
11
+ import { footerMessages } from './messages';
12
+ import { SyncInfo } from './sync-info';
13
+ const FooterWrapper = styled.div`
14
+ display: flex;
15
+ justify-content: space-between;
16
+ width: 100%;
17
+ padding: ${"var(--ds-space-250, 20px)"} 0;
18
+ position: sticky;
19
+ bottom: 0;
20
+ background: ${`var(--ds-background-input, ${N0})`};
21
+ border-top-style: solid;
22
+ border-top-color: ${`var(--ds-background-neutral, ${N40})`};
23
+ margin-top: -2px;
24
+ align-self: center;
25
+ `;
26
+ const IssueCounterWrapper = styled.div`
27
+ margin-left: 10px;
28
+ display: flex;
29
+ align-self: center;
30
+ color: ${`var(--ds-text-accent-gray, ${N800})`};
31
+ `;
32
+ const SyncWrapper = styled.div`
33
+ display: flex;
34
+ align-items: center;
35
+ color: ${`var(--ds-text-accent-gray, ${N90})`};
36
+ `;
37
+ const SyncTextWrapper = styled.div`
38
+ margin-right: 5px;
39
+ `;
40
+ export const TableFooter = ({
41
+ issueCount,
42
+ onRefresh,
43
+ isLoading
44
+ }) => {
45
+ const intl = useIntl();
46
+ const [lastSyncTime, setLastSyncTime] = useState(new Date());
47
+ const showIssueCount = issueCount && issueCount > 0 ? true : issueCount === 0 ? !isLoading : false;
48
+ useEffect(() => {
49
+ if (isLoading) {
50
+ setLastSyncTime(new Date());
51
+ }
52
+ }, [isLoading]);
53
+
54
+ // 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
55
+ // ensure correct positioning since 'justify-content: space-between' is used).
56
+ return onRefresh || showIssueCount ? jsx(FooterWrapper, {
57
+ "data-testid": "table-footer"
58
+ }, jsx(IssueCounterWrapper, null, showIssueCount && jsx(Heading, {
59
+ testId: "issue-count",
60
+ level: 'h400'
61
+ }, jsx(FormattedMessage, _extends({}, footerMessages.issueText, {
62
+ values: {
63
+ issueCount
64
+ }
65
+ })))), jsx(SyncWrapper, null, onRefresh && jsx(Fragment, null, jsx(SyncTextWrapper, {
66
+ "data-testid": "sync-text"
67
+ }, isLoading ? jsx(FormattedMessage, footerMessages.loadingText) : jsx(SyncInfo, {
68
+ lastSyncTime: lastSyncTime
69
+ })), jsx(Button, {
70
+ onClick: onRefresh,
71
+ appearance: "subtle",
72
+ iconBefore: jsx(RefreshIcon, {
73
+ label: intl.formatMessage(footerMessages.refreshLabel)
74
+ }),
75
+ isDisabled: isLoading,
76
+ testId: "refresh-button"
77
+ })))) : null;
78
+ };
@@ -0,0 +1,18 @@
1
+ import { defineMessages } from 'react-intl-next';
2
+ export const footerMessages = defineMessages({
3
+ issueText: {
4
+ id: 'linkDataSource.jira-issues.table-footer.issue',
5
+ description: 'Text that appears after issue count number if there is only 1 issue.',
6
+ defaultMessage: '{issueCount} {issueCount, plural, one {issue} other {issues}}'
7
+ },
8
+ loadingText: {
9
+ id: 'linkDataSource.jira-issues.table-footer.loading',
10
+ description: 'Text that appears when table is loading.',
11
+ defaultMessage: 'Loading...'
12
+ },
13
+ refreshLabel: {
14
+ id: 'linkDataSource.jira-issues.table-footer.refresh',
15
+ description: 'Label for refresh icon',
16
+ defaultMessage: 'Refresh'
17
+ }
18
+ });
@@ -0,0 +1,59 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import React, { useCallback, useEffect, useState } from 'react';
3
+ import { FormattedDate, FormattedMessage, FormattedRelativeTime } from 'react-intl-next';
4
+ import { messages } from './messages';
5
+ const SECONDS_IN_MIN = 60;
6
+ const SECONDS_IN_HR = SECONDS_IN_MIN * 60;
7
+ const SECONDS_IN_DAY = SECONDS_IN_HR * 24;
8
+ const WithUpdatedLabel = formattedDate => {
9
+ const i18nMessage = formattedDate ? messages.overOneMinuteText : messages.underOneMinuteText;
10
+ return /*#__PURE__*/React.createElement(FormattedMessage, _extends({}, i18nMessage, {
11
+ values: {
12
+ date: formattedDate
13
+ }
14
+ }));
15
+ };
16
+ export const SyncInfo = ({
17
+ lastSyncTime
18
+ }) => {
19
+ const calculateTimeDiff = useCallback(() => Math.floor((Date.now() - lastSyncTime.getTime()) / 1000), [lastSyncTime]);
20
+ const [secondsSinceUpdate, setSecondsSinceUpdate] = useState(calculateTimeDiff());
21
+ const totalDays = Math.floor(secondsSinceUpdate / SECONDS_IN_DAY);
22
+ const totalHours = Math.floor(secondsSinceUpdate / SECONDS_IN_HR);
23
+ const totalMinutes = Math.floor(secondsSinceUpdate / SECONDS_IN_MIN);
24
+ useEffect(() => {
25
+ setSecondsSinceUpdate(calculateTimeDiff());
26
+ const interval = setInterval(() => setSecondsSinceUpdate(calculateTimeDiff()), 1000);
27
+ return () => clearInterval(interval);
28
+ }, [lastSyncTime, calculateTimeDiff]);
29
+ if (totalMinutes >= 1 && totalMinutes < 60) {
30
+ return /*#__PURE__*/React.createElement(FormattedRelativeTime, {
31
+ value: -totalMinutes,
32
+ style: "long",
33
+ unit: "minute"
34
+ }, WithUpdatedLabel);
35
+ }
36
+ if (totalHours >= 1 && totalHours < 24) {
37
+ return /*#__PURE__*/React.createElement(FormattedRelativeTime, {
38
+ value: -totalHours,
39
+ style: "long",
40
+ unit: "hour"
41
+ }, WithUpdatedLabel);
42
+ }
43
+ if (totalDays >= 1 && totalDays < 8) {
44
+ return /*#__PURE__*/React.createElement(FormattedRelativeTime, {
45
+ value: -totalDays,
46
+ style: "long",
47
+ unit: "day"
48
+ }, WithUpdatedLabel);
49
+ }
50
+ if (totalDays >= 8) {
51
+ return /*#__PURE__*/React.createElement(FormattedDate, {
52
+ year: "numeric",
53
+ month: "short",
54
+ day: "2-digit",
55
+ value: lastSyncTime
56
+ }, WithUpdatedLabel);
57
+ }
58
+ return WithUpdatedLabel();
59
+ };
@@ -0,0 +1,13 @@
1
+ import { defineMessages } from 'react-intl-next';
2
+ export const messages = defineMessages({
3
+ underOneMinuteText: {
4
+ id: 'linkDataSource.jira-issues.table-footer.date_formatter.under_one_minute',
5
+ defaultMessage: 'Synced just now',
6
+ description: 'A text to indicate the last data fetch time was under a minute.'
7
+ },
8
+ overOneMinuteText: {
9
+ id: 'linkDataSource.jira-issues.table-footer.date_formatter.under_over_minute',
10
+ defaultMessage: 'Synced {date}',
11
+ description: 'A text to indicate the last data fetch time was over a minute.'
12
+ }
13
+ });
@@ -0,0 +1,57 @@
1
+ /** @jsx jsx */
2
+ import { useEffect } from 'react';
3
+ import { css, jsx } from '@emotion/react';
4
+ import Spinner from '@atlaskit/spinner';
5
+ import { useDatasourceTableState } from '../../hooks/useDatasourceTableState';
6
+ import { IssueLikeDataTableView } from '../issue-like-table';
7
+ import { TableFooter } from './table-footer';
8
+ const TableViewWrapperStyles = css({
9
+ display: 'flex',
10
+ flexDirection: 'column',
11
+ width: '100%',
12
+ height: '100%',
13
+ position: 'relative',
14
+ padding: "var(--ds-space-200, 16px)",
15
+ paddingBottom: 0,
16
+ boxSizing: 'border-box'
17
+ });
18
+ export const JiraIssuesTableView = ({
19
+ datasourceId,
20
+ parameters,
21
+ visibleColumnKeys,
22
+ onVisibleColumnKeysChange
23
+ }) => {
24
+ const {
25
+ reset,
26
+ status,
27
+ onNextPage,
28
+ responseItems,
29
+ hasNextPage,
30
+ columns,
31
+ defaultVisibleColumnKeys,
32
+ totalIssueCount
33
+ } = useDatasourceTableState(datasourceId, parameters);
34
+ useEffect(() => {
35
+ if (onVisibleColumnKeysChange && (visibleColumnKeys || []).length === 0 && defaultVisibleColumnKeys.length > 0) {
36
+ onVisibleColumnKeysChange(defaultVisibleColumnKeys);
37
+ }
38
+ }, [visibleColumnKeys, defaultVisibleColumnKeys, onVisibleColumnKeysChange]);
39
+ return columns.length > 0 ? jsx("div", {
40
+ css: TableViewWrapperStyles
41
+ }, jsx(IssueLikeDataTableView, {
42
+ testId: 'jira-issues-table-view',
43
+ hasNextPage: hasNextPage,
44
+ items: responseItems,
45
+ onNextPage: onNextPage,
46
+ status: status,
47
+ columns: columns,
48
+ visibleColumnKeys: visibleColumnKeys || defaultVisibleColumnKeys,
49
+ onVisibleColumnKeysChange: onVisibleColumnKeysChange
50
+ }), jsx(TableFooter, {
51
+ issueCount: totalIssueCount,
52
+ onRefresh: reset,
53
+ isLoading: status === 'loading'
54
+ })) : jsx(Spinner, {
55
+ testId: 'jira-issues-table-view-spinner'
56
+ });
57
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,5 @@
1
+ {
2
+ "name": "@atlaskit/link-datasource",
3
+ "version": "0.14.4",
4
+ "sideEffects": false
5
+ }