@atlaskit/link-datasource 1.12.4 → 1.13.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 (61) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/cjs/analytics/constants.js +1 -1
  3. package/dist/cjs/ui/jira-issues-modal/basic-filters/hooks/useFilterOptions.js +34 -12
  4. package/dist/cjs/ui/jira-issues-modal/basic-filters/ui/async-popup-select/dropdownIndicator.js +39 -0
  5. package/dist/cjs/ui/jira-issues-modal/basic-filters/ui/async-popup-select/index.js +51 -20
  6. package/dist/cjs/ui/jira-issues-modal/basic-filters/ui/async-popup-select/trigger.js +2 -0
  7. package/dist/cjs/ui/jira-issues-modal/basic-filters/ui/index.js +1 -0
  8. package/dist/cjs/ui/jira-issues-modal/basic-filters/utils/isClauseTooComplex.js +93 -0
  9. package/dist/cjs/ui/jira-issues-modal/basic-filters/utils/isQueryTooComplex.js +146 -0
  10. package/dist/cjs/ui/jira-issues-modal/jira-search-container/buildJQL.js +3 -2
  11. package/dist/cjs/ui/jira-issues-modal/jira-search-container/index.js +21 -8
  12. package/dist/cjs/ui/jira-issues-modal/jira-search-container/messages.js +5 -0
  13. package/dist/cjs/ui/jira-issues-modal/mode-switcher/index.js +28 -16
  14. package/dist/es2019/analytics/constants.js +1 -1
  15. package/dist/es2019/ui/jira-issues-modal/basic-filters/hooks/useFilterOptions.js +14 -2
  16. package/dist/es2019/ui/jira-issues-modal/basic-filters/ui/async-popup-select/dropdownIndicator.js +34 -0
  17. package/dist/es2019/ui/jira-issues-modal/basic-filters/ui/async-popup-select/index.js +25 -10
  18. package/dist/es2019/ui/jira-issues-modal/basic-filters/ui/async-popup-select/trigger.js +2 -0
  19. package/dist/es2019/ui/jira-issues-modal/basic-filters/ui/index.js +1 -0
  20. package/dist/es2019/ui/jira-issues-modal/basic-filters/utils/isClauseTooComplex.js +77 -0
  21. package/dist/es2019/ui/jira-issues-modal/basic-filters/utils/isQueryTooComplex.js +105 -0
  22. package/dist/es2019/ui/jira-issues-modal/jira-search-container/buildJQL.js +2 -1
  23. package/dist/es2019/ui/jira-issues-modal/jira-search-container/index.js +13 -3
  24. package/dist/es2019/ui/jira-issues-modal/jira-search-container/messages.js +5 -0
  25. package/dist/es2019/ui/jira-issues-modal/mode-switcher/index.js +19 -9
  26. package/dist/esm/analytics/constants.js +1 -1
  27. package/dist/esm/ui/jira-issues-modal/basic-filters/hooks/useFilterOptions.js +35 -13
  28. package/dist/esm/ui/jira-issues-modal/basic-filters/ui/async-popup-select/dropdownIndicator.js +32 -0
  29. package/dist/esm/ui/jira-issues-modal/basic-filters/ui/async-popup-select/index.js +52 -21
  30. package/dist/esm/ui/jira-issues-modal/basic-filters/ui/async-popup-select/trigger.js +2 -0
  31. package/dist/esm/ui/jira-issues-modal/basic-filters/ui/index.js +1 -0
  32. package/dist/esm/ui/jira-issues-modal/basic-filters/utils/isClauseTooComplex.js +86 -0
  33. package/dist/esm/ui/jira-issues-modal/basic-filters/utils/isQueryTooComplex.js +140 -0
  34. package/dist/esm/ui/jira-issues-modal/jira-search-container/buildJQL.js +2 -1
  35. package/dist/esm/ui/jira-issues-modal/jira-search-container/index.js +21 -8
  36. package/dist/esm/ui/jira-issues-modal/jira-search-container/messages.js +5 -0
  37. package/dist/esm/ui/jira-issues-modal/mode-switcher/index.js +29 -17
  38. package/dist/types/ui/jira-issues-modal/basic-filters/ui/async-popup-select/dropdownIndicator.d.ts +5 -0
  39. package/dist/types/ui/jira-issues-modal/basic-filters/ui/async-popup-select/index.d.ts +2 -1
  40. package/dist/types/ui/jira-issues-modal/basic-filters/ui/async-popup-select/trigger.d.ts +1 -0
  41. package/dist/types/ui/jira-issues-modal/basic-filters/utils/isClauseTooComplex.d.ts +2 -0
  42. package/dist/types/ui/jira-issues-modal/basic-filters/utils/isQueryTooComplex.d.ts +1 -0
  43. package/dist/types/ui/jira-issues-modal/jira-search-container/buildJQL.d.ts +1 -0
  44. package/dist/types/ui/jira-issues-modal/jira-search-container/index.d.ts +1 -0
  45. package/dist/types/ui/jira-issues-modal/jira-search-container/messages.d.ts +5 -0
  46. package/dist/types/ui/jira-issues-modal/mode-switcher/index.d.ts +2 -0
  47. package/dist/types-ts4.5/ui/jira-issues-modal/basic-filters/ui/async-popup-select/dropdownIndicator.d.ts +5 -0
  48. package/dist/types-ts4.5/ui/jira-issues-modal/basic-filters/ui/async-popup-select/index.d.ts +2 -1
  49. package/dist/types-ts4.5/ui/jira-issues-modal/basic-filters/ui/async-popup-select/trigger.d.ts +1 -0
  50. package/dist/types-ts4.5/ui/jira-issues-modal/basic-filters/utils/isClauseTooComplex.d.ts +2 -0
  51. package/dist/types-ts4.5/ui/jira-issues-modal/basic-filters/utils/isQueryTooComplex.d.ts +1 -0
  52. package/dist/types-ts4.5/ui/jira-issues-modal/jira-search-container/buildJQL.d.ts +1 -0
  53. package/dist/types-ts4.5/ui/jira-issues-modal/jira-search-container/index.d.ts +1 -0
  54. package/dist/types-ts4.5/ui/jira-issues-modal/jira-search-container/messages.d.ts +5 -0
  55. package/dist/types-ts4.5/ui/jira-issues-modal/mode-switcher/index.d.ts +2 -0
  56. package/package.json +1 -2
  57. package/dist/cjs/ui/jira-issues-modal/basic-filters/hooks/useIsComplexQuery.js +0 -12
  58. package/dist/es2019/ui/jira-issues-modal/basic-filters/hooks/useIsComplexQuery.js +0 -6
  59. package/dist/esm/ui/jira-issues-modal/basic-filters/hooks/useIsComplexQuery.js +0 -6
  60. package/dist/types/ui/jira-issues-modal/basic-filters/hooks/useIsComplexQuery.d.ts +0 -3
  61. package/dist/types-ts4.5/ui/jira-issues-modal/basic-filters/hooks/useIsComplexQuery.d.ts +0 -3
@@ -1,11 +1,12 @@
1
1
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
2
  /** @jsx jsx */
3
- import React, { useCallback, useMemo, useState } from 'react';
3
+ import React, { useCallback, useEffect, useMemo, useState } from 'react';
4
4
  import { css, jsx } from '@emotion/react';
5
5
  import { useIntl } from 'react-intl-next';
6
6
  import { getBooleanFF } from '@atlaskit/platform-feature-flags';
7
7
  import { useDatasourceAnalyticsEvents } from '../../../analytics';
8
8
  import { BasicFilters } from '../basic-filters';
9
+ import { isQueryTooComplex } from '../basic-filters/utils/isQueryTooComplex';
9
10
  import { BasicSearchInput } from '../basic-search-input';
10
11
  import { JiraJQLEditor } from '../jql-editor';
11
12
  import { ModeSwitcher } from '../mode-switcher';
@@ -18,6 +19,7 @@ var inputContainerStyles = css({
18
19
  minHeight: '60px'
19
20
  });
20
21
  var DEFAULT_JQL_QUERY = 'created >= -30d order by created DESC';
22
+ export var ALLOWED_ORDER_BY_KEYS = ['key', 'summary', 'assignee', 'status', 'created'];
21
23
  var JiraSearchMethodSwitcher = ModeSwitcher;
22
24
  export var JiraSearchContainer = function JiraSearchContainer(props) {
23
25
  var isSearching = props.isSearching,
@@ -42,14 +44,18 @@ export var JiraSearchContainer = function JiraSearchContainer(props) {
42
44
  _useState6 = _slicedToArray(_useState5, 2),
43
45
  jql = _useState6[0],
44
46
  setJql = _useState6[1];
45
- var _useState7 = useState(),
47
+ var _useState7 = useState(false),
46
48
  _useState8 = _slicedToArray(_useState7, 2),
47
- orderKey = _useState8[0],
48
- setOrderKey = _useState8[1];
49
+ isComplexQuery = _useState8[0],
50
+ setIsComplexQuery = _useState8[1];
49
51
  var _useState9 = useState(),
50
52
  _useState10 = _slicedToArray(_useState9, 2),
51
- orderDirection = _useState10[0],
52
- setOrderDirection = _useState10[1];
53
+ orderKey = _useState10[0],
54
+ setOrderKey = _useState10[1];
55
+ var _useState11 = useState(),
56
+ _useState12 = _slicedToArray(_useState11, 2),
57
+ orderDirection = _useState12[0],
58
+ setOrderDirection = _useState12[1];
53
59
  var _useDatasourceAnalyti = useDatasourceAnalyticsEvents(),
54
60
  fireEvent = _useDatasourceAnalyti.fireEvent;
55
61
  var onSearchMethodChange = useCallback(function (searchMethod) {
@@ -76,7 +82,7 @@ export var JiraSearchContainer = function JiraSearchContainer(props) {
76
82
  var order = hasOrder ? (_fragments$at3 = fragments.at(-1)) === null || _fragments$at3 === void 0 ? void 0 : _fragments$at3.split(' ').at(-1) : undefined;
77
83
 
78
84
  // TODO: confirm if these are the only order keys we want to preserve - existing whiteboard logic
79
- if (key && ['key', 'summary', 'assignee', 'status'].includes(key)) {
85
+ if (key && ALLOWED_ORDER_BY_KEYS.includes(key)) {
80
86
  setOrderKey(key);
81
87
  setOrderDirection(order);
82
88
  }
@@ -86,6 +92,7 @@ export var JiraSearchContainer = function JiraSearchContainer(props) {
86
92
  onSearch({
87
93
  jql: jql
88
94
  }, currentSearchMethod);
95
+ setIsComplexQuery(isQueryTooComplex(jql));
89
96
  if (currentSearchMethod === 'basic') {
90
97
  fireEvent('ui.form.submitted.basicSearch', {});
91
98
  } else if (currentSearchMethod === 'jql') {
@@ -98,6 +105,10 @@ export var JiraSearchContainer = function JiraSearchContainer(props) {
98
105
  }
99
106
  return false;
100
107
  }, []);
108
+ useEffect(function () {
109
+ setIsComplexQuery(isQueryTooComplex(jql));
110
+ // eslint-disable-next-line react-hooks/exhaustive-deps
111
+ }, []);
101
112
  return jsx("div", {
102
113
  css: inputContainerStyles
103
114
  }, currentSearchMethod === 'basic' && jsx(React.Fragment, null, jsx(BasicSearchInput, {
@@ -122,7 +133,9 @@ export var JiraSearchContainer = function JiraSearchContainer(props) {
122
133
  value: 'jql'
123
134
  }, {
124
135
  label: formatMessage(modeSwitcherMessages.basicTextSearchLabel),
125
- value: 'basic'
136
+ value: 'basic',
137
+ disabled: isComplexQuery,
138
+ tooltipText: isComplexQuery ? formatMessage(modeSwitcherMessages.basicModeSwitchDisabledTooltipText) : ''
126
139
  }]
127
140
  }));
128
141
  };
@@ -4,5 +4,10 @@ export var modeSwitcherMessages = defineMessages({
4
4
  id: 'linkDataSource.jira-issues.configmodal.basicModeText',
5
5
  description: 'Display text for basic text search toggle button',
6
6
  defaultMessage: 'Basic'
7
+ },
8
+ basicModeSwitchDisabledTooltipText: {
9
+ id: 'linkDataSource.jira-issues.configmodal.basicModeSwitchDisabledTooltipText',
10
+ description: 'Display tooltip text when basic mode switch is disabled',
11
+ defaultMessage: "You can't switch to basic for this query."
7
12
  }
8
13
  });
@@ -1,7 +1,9 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
1
2
  /** @jsx jsx */
2
3
  import React from 'react';
3
4
  import { css, jsx } from '@emotion/react';
4
- import { N0, N20, N30A, N700 } from '@atlaskit/theme/colors';
5
+ import { N0, N20, N30A, N60, N700 } from '@atlaskit/theme/colors';
6
+ import Tooltip from '@atlaskit/tooltip';
5
7
  var modeSwitcherStyles = css({
6
8
  alignItems: 'center',
7
9
  background: "var(--ds-background-neutral, ".concat(N20, ")"),
@@ -44,8 +46,12 @@ var modeSwitcherLabelSelectedStyles = css({
44
46
  }
45
47
  });
46
48
  var modeSwitcherLabelDisabledStyles = css({
49
+ color: "var(--ds-text-disabled, ".concat(N60, ")")
50
+ });
51
+ var modeSwitcherDisabledStyles = css({
47
52
  ':hover': {
48
- cursor: 'not-allowed'
53
+ cursor: 'not-allowed',
54
+ background: 'transparent'
49
55
  }
50
56
  });
51
57
  var compactModeSwitcherLabelStyles = css({
@@ -68,21 +74,27 @@ export var ModeSwitcher = function ModeSwitcher(props) {
68
74
  disabled: isDisabled
69
75
  }, options.map(function (_ref) {
70
76
  var value = _ref.value,
71
- label = _ref.label;
77
+ label = _ref.label,
78
+ isOptionDisabled = _ref.disabled,
79
+ tooltipText = _ref.tooltipText;
72
80
  var isSelected = value === selectedOptionValue;
73
- return jsx("label", {
74
- key: value,
75
- css: [modeSwitcherLabelStyles, isCompact && compactModeSwitcherLabelStyles, isSelected && modeSwitcherLabelSelectedStyles, isDisabled && modeSwitcherLabelDisabledStyles],
76
- "data-testid": "mode-toggle-".concat(value)
77
- }, label, jsx("input", {
78
- "aria-checked": isSelected,
79
- "aria-disabled": isDisabled,
80
- checked: isSelected,
81
- css: modeInputStyles,
82
- disabled: isDisabled,
83
- onChange: handleModeChange,
84
- type: "radio",
85
- value: value
86
- }));
81
+ return jsx(Tooltip, {
82
+ content: tooltipText
83
+ }, function (tooltipProps) {
84
+ return jsx("label", _extends({}, tooltipProps, {
85
+ key: value,
86
+ css: [modeSwitcherLabelStyles, isCompact && compactModeSwitcherLabelStyles, isSelected && modeSwitcherLabelSelectedStyles, isDisabled && modeSwitcherDisabledStyles, isOptionDisabled && [modeSwitcherLabelDisabledStyles, modeSwitcherDisabledStyles]],
87
+ "data-testid": "mode-toggle-".concat(value)
88
+ }), label, jsx("input", {
89
+ "aria-checked": isSelected,
90
+ "aria-disabled": isOptionDisabled,
91
+ checked: isSelected,
92
+ css: modeInputStyles,
93
+ disabled: isOptionDisabled,
94
+ onChange: handleModeChange,
95
+ type: "radio",
96
+ value: value
97
+ }));
98
+ });
87
99
  })) : null;
88
100
  };
@@ -0,0 +1,5 @@
1
+ /// <reference types="react" />
2
+ import { DropdownIndicatorProps } from '@atlaskit/select';
3
+ import { SelectOption } from '../../types';
4
+ declare const CustomDropdownIndicator: (props: DropdownIndicatorProps<SelectOption, true>) => JSX.Element;
5
+ export default CustomDropdownIndicator;
@@ -5,6 +5,7 @@ export interface AsyncPopupSelectProps {
5
5
  cloudId: string;
6
6
  selection: SelectOption[];
7
7
  onSelectionChange?: (selection: SelectOption[]) => void;
8
+ isDisabled?: boolean;
8
9
  }
9
- declare const AsyncPopupSelect: ({ filterType, cloudId, selection, onSelectionChange, }: AsyncPopupSelectProps) => JSX.Element;
10
+ declare const AsyncPopupSelect: ({ filterType, cloudId, selection, onSelectionChange, isDisabled, }: AsyncPopupSelectProps) => JSX.Element;
10
11
  export default AsyncPopupSelect;
@@ -3,6 +3,7 @@ import { BasicFilterFieldType } from '../../types';
3
3
  export interface PopupTriggerProps {
4
4
  filterType: BasicFilterFieldType;
5
5
  isSelected?: boolean;
6
+ isDisabled?: boolean;
6
7
  onClick?: () => void;
7
8
  }
8
9
  declare const PopupTrigger: React.ForwardRefExoticComponent<PopupTriggerProps & React.RefAttributes<HTMLElement>>;
@@ -0,0 +1,2 @@
1
+ import { Clause } from '@atlaskit/jql-ast';
2
+ export declare const isClauseTooComplex: (clauses: Clause[], key: string) => boolean;
@@ -0,0 +1 @@
1
+ export declare const isQueryTooComplex: (jql: string) => boolean;
@@ -7,5 +7,6 @@ type BuildJQLInput = {
7
7
  [key in BasicFilterFieldType]?: SelectOption[];
8
8
  };
9
9
  };
10
+ export declare const fuzzyCharacter = "*";
10
11
  export declare const buildJQL: (input: BuildJQLInput) => string;
11
12
  export {};
@@ -1,6 +1,7 @@
1
1
  import { jsx } from '@emotion/react';
2
2
  import type { JiraSearchMethod } from '../../../common/types';
3
3
  import { JiraIssueDatasourceParameters, JiraIssueDatasourceParametersQuery } from '../types';
4
+ export declare const ALLOWED_ORDER_BY_KEYS: string[];
4
5
  export interface SearchContainerProps {
5
6
  isSearching?: boolean;
6
7
  onSearch: (query: JiraIssueDatasourceParametersQuery, searchMethod: JiraSearchMethod) => void;
@@ -4,4 +4,9 @@ export declare const modeSwitcherMessages: {
4
4
  description: string;
5
5
  defaultMessage: string;
6
6
  };
7
+ basicModeSwitchDisabledTooltipText: {
8
+ id: string;
9
+ description: string;
10
+ defaultMessage: string;
11
+ };
7
12
  };
@@ -5,6 +5,8 @@ export interface ModeSwitcherProps<T extends string = string> {
5
5
  options: {
6
6
  label: string;
7
7
  value: T;
8
+ disabled?: boolean;
9
+ tooltipText?: string;
8
10
  }[];
9
11
  onOptionValueChange: (selectedOptionValue: T) => void;
10
12
  selectedOptionValue?: string;
@@ -0,0 +1,5 @@
1
+ /// <reference types="react" />
2
+ import { DropdownIndicatorProps } from '@atlaskit/select';
3
+ import { SelectOption } from '../../types';
4
+ declare const CustomDropdownIndicator: (props: DropdownIndicatorProps<SelectOption, true>) => JSX.Element;
5
+ export default CustomDropdownIndicator;
@@ -5,6 +5,7 @@ export interface AsyncPopupSelectProps {
5
5
  cloudId: string;
6
6
  selection: SelectOption[];
7
7
  onSelectionChange?: (selection: SelectOption[]) => void;
8
+ isDisabled?: boolean;
8
9
  }
9
- declare const AsyncPopupSelect: ({ filterType, cloudId, selection, onSelectionChange, }: AsyncPopupSelectProps) => JSX.Element;
10
+ declare const AsyncPopupSelect: ({ filterType, cloudId, selection, onSelectionChange, isDisabled, }: AsyncPopupSelectProps) => JSX.Element;
10
11
  export default AsyncPopupSelect;
@@ -3,6 +3,7 @@ import { BasicFilterFieldType } from '../../types';
3
3
  export interface PopupTriggerProps {
4
4
  filterType: BasicFilterFieldType;
5
5
  isSelected?: boolean;
6
+ isDisabled?: boolean;
6
7
  onClick?: () => void;
7
8
  }
8
9
  declare const PopupTrigger: React.ForwardRefExoticComponent<PopupTriggerProps & React.RefAttributes<HTMLElement>>;
@@ -0,0 +1,2 @@
1
+ import { Clause } from '@atlaskit/jql-ast';
2
+ export declare const isClauseTooComplex: (clauses: Clause[], key: string) => boolean;
@@ -0,0 +1 @@
1
+ export declare const isQueryTooComplex: (jql: string) => boolean;
@@ -7,5 +7,6 @@ type BuildJQLInput = {
7
7
  [key in BasicFilterFieldType]?: SelectOption[];
8
8
  };
9
9
  };
10
+ export declare const fuzzyCharacter = "*";
10
11
  export declare const buildJQL: (input: BuildJQLInput) => string;
11
12
  export {};
@@ -1,6 +1,7 @@
1
1
  import { jsx } from '@emotion/react';
2
2
  import type { JiraSearchMethod } from '../../../common/types';
3
3
  import { JiraIssueDatasourceParameters, JiraIssueDatasourceParametersQuery } from '../types';
4
+ export declare const ALLOWED_ORDER_BY_KEYS: string[];
4
5
  export interface SearchContainerProps {
5
6
  isSearching?: boolean;
6
7
  onSearch: (query: JiraIssueDatasourceParametersQuery, searchMethod: JiraSearchMethod) => void;
@@ -4,4 +4,9 @@ export declare const modeSwitcherMessages: {
4
4
  description: string;
5
5
  defaultMessage: string;
6
6
  };
7
+ basicModeSwitchDisabledTooltipText: {
8
+ id: string;
9
+ description: string;
10
+ defaultMessage: string;
11
+ };
7
12
  };
@@ -5,6 +5,8 @@ export interface ModeSwitcherProps<T extends string = string> {
5
5
  options: {
6
6
  label: string;
7
7
  value: T;
8
+ disabled?: boolean;
9
+ tooltipText?: string;
8
10
  }[];
9
11
  onOptionValueChange: (selectedOptionValue: T) => void;
10
12
  selectedOptionValue?: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/link-datasource",
3
- "version": "1.12.4",
3
+ "version": "1.13.1",
4
4
  "description": "UI Components to support linking platform dataset feature",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/"
@@ -65,7 +65,6 @@
65
65
  "@atlaskit/tokens": "^1.28.0",
66
66
  "@atlaskit/tooltip": "^17.8.0",
67
67
  "@atlaskit/ufo": "^0.2.4",
68
- "@atlassianlabs/jql-ast": "^2.1.0",
69
68
  "@atlassianlabs/jql-editor": "^2.0.1",
70
69
  "@babel/runtime": "^7.0.0",
71
70
  "@emotion/react": "^11.7.1",
@@ -1,12 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.useIsComplexQuery = void 0;
7
- var useIsComplexQuery = exports.useIsComplexQuery = function useIsComplexQuery() {
8
- return {
9
- // https://product-fabric.atlassian.net/browse/EDM-8103
10
- isComplexQuery: false
11
- };
12
- };
@@ -1,6 +0,0 @@
1
- export const useIsComplexQuery = () => {
2
- return {
3
- // https://product-fabric.atlassian.net/browse/EDM-8103
4
- isComplexQuery: false
5
- };
6
- };
@@ -1,6 +0,0 @@
1
- export var useIsComplexQuery = function useIsComplexQuery() {
2
- return {
3
- // https://product-fabric.atlassian.net/browse/EDM-8103
4
- isComplexQuery: false
5
- };
6
- };
@@ -1,3 +0,0 @@
1
- export declare const useIsComplexQuery: () => {
2
- isComplexQuery: boolean;
3
- };
@@ -1,3 +0,0 @@
1
- export declare const useIsComplexQuery: () => {
2
- isComplexQuery: boolean;
3
- };