@atlaskit/link-datasource 0.17.4 → 0.17.5

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 CHANGED
@@ -1,5 +1,11 @@
1
1
  # @atlaskit/link-datasource
2
2
 
3
+ ## 0.17.5
4
+
5
+ ### Patch Changes
6
+
7
+ - [`d417c0728a8`](https://bitbucket.org/atlassian/atlassian-frontend/commits/d417c0728a8) - Added logic to show selected options at the top of the column picker
8
+
3
9
  ## 0.17.4
4
10
 
5
11
  ### Patch Changes
@@ -7,6 +7,8 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.ColumnPicker = void 0;
8
8
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
9
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
10
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
11
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
12
  var _react = require("react");
11
13
  var _react2 = require("@emotion/react");
12
14
  var _standardButton = _interopRequireDefault(require("@atlaskit/button/standard-button"));
@@ -19,6 +21,10 @@ var ColumnPicker = function ColumnPicker(_ref) {
19
21
  var columns = _ref.columns,
20
22
  selectedColumnKeys = _ref.selectedColumnKeys,
21
23
  onSelectedColumnKeysChange = _ref.onSelectedColumnKeysChange;
24
+ var _useState = (0, _react.useState)([]),
25
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
26
+ allOptions = _useState2[0],
27
+ setAllOptions = _useState2[1];
22
28
  var mapColumnToOption = (0, _react.useCallback)(function (_ref2) {
23
29
  var key = _ref2.key,
24
30
  title = _ref2.title;
@@ -31,12 +37,11 @@ var ColumnPicker = function ColumnPicker(_ref) {
31
37
  var key = _ref3.key;
32
38
  return selectedColumnKeys.includes(key);
33
39
  }).map(mapColumnToOption);
34
- var allOptions = (0, _react.useMemo)(function () {
35
- return columns.filter(function (_ref4) {
36
- var title = _ref4.title,
37
- key = _ref4.key;
40
+ (0, _react.useEffect)(function () {
41
+ setAllOptions(columns.filter(function (_ref4) {
42
+ var title = _ref4.title;
38
43
  return title;
39
- }).map(mapColumnToOption);
44
+ }).map(mapColumnToOption));
40
45
  }, [columns, mapColumnToOption]);
41
46
  var handleChange = (0, _react.useCallback)(function (selectedOptions) {
42
47
  var selectedValues = selectedOptions.map(function (_ref5) {
@@ -56,6 +61,18 @@ var ColumnPicker = function ColumnPicker(_ref) {
56
61
  });
57
62
  onSelectedColumnKeysChange(selectedValues);
58
63
  }, [columns, onSelectedColumnKeysChange]);
64
+ var onPopupOpen = (0, _react.useCallback)(function () {
65
+ if (!allOptions.length) {
66
+ return;
67
+ }
68
+ var nonSelectedOptions = allOptions.filter(function (option) {
69
+ return !selectedOptions.find(function (selectedOption) {
70
+ return selectedOption.value === option.value;
71
+ });
72
+ });
73
+ var sortedOptions = [].concat((0, _toConsumableArray2.default)(selectedOptions), (0, _toConsumableArray2.default)(nonSelectedOptions));
74
+ sortedOptions.length > 0 && setAllOptions(sortedOptions);
75
+ }, [allOptions, selectedOptions]);
59
76
  return (0, _react2.jsx)(_select.PopupSelect, {
60
77
  classNamePrefix: 'column-picker-popup',
61
78
  testId: 'column-picker-popup',
@@ -64,6 +81,7 @@ var ColumnPicker = function ColumnPicker(_ref) {
64
81
  },
65
82
  options: allOptions,
66
83
  value: selectedOptions,
84
+ onOpen: onPopupOpen,
67
85
  closeMenuOnSelect: false,
68
86
  hideSelectedOptions: false,
69
87
  isMulti: true,
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/link-datasource",
3
- "version": "0.17.4",
3
+ "version": "0.17.5",
4
4
  "sideEffects": false
5
5
  }
@@ -1,6 +1,6 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
2
  /** @jsx jsx */
3
- import { useCallback, useMemo } from 'react';
3
+ import { useCallback, useEffect, useState } from 'react';
4
4
  import { jsx } from '@emotion/react';
5
5
  import Button from '@atlaskit/button/standard-button';
6
6
  import BoardIcon from '@atlaskit/icon/glyph/board';
@@ -11,6 +11,7 @@ export const ColumnPicker = ({
11
11
  selectedColumnKeys,
12
12
  onSelectedColumnKeysChange
13
13
  }) => {
14
+ const [allOptions, setAllOptions] = useState([]);
14
15
  const mapColumnToOption = useCallback(({
15
16
  key,
16
17
  title
@@ -21,11 +22,10 @@ export const ColumnPicker = ({
21
22
  const selectedOptions = columns.filter(({
22
23
  key
23
24
  }) => selectedColumnKeys.includes(key)).map(mapColumnToOption);
24
- const allOptions = useMemo(() => {
25
- return columns.filter(({
26
- title,
27
- key
28
- }) => title).map(mapColumnToOption);
25
+ useEffect(() => {
26
+ setAllOptions(columns.filter(({
27
+ title
28
+ }) => title).map(mapColumnToOption));
29
29
  }, [columns, mapColumnToOption]);
30
30
  const handleChange = useCallback(selectedOptions => {
31
31
  const selectedValues = selectedOptions.map(({
@@ -42,6 +42,14 @@ export const ColumnPicker = ({
42
42
  });
43
43
  onSelectedColumnKeysChange(selectedValues);
44
44
  }, [columns, onSelectedColumnKeysChange]);
45
+ const onPopupOpen = useCallback(() => {
46
+ if (!allOptions.length) {
47
+ return;
48
+ }
49
+ const nonSelectedOptions = allOptions.filter(option => !selectedOptions.find(selectedOption => selectedOption.value === option.value));
50
+ const sortedOptions = [...selectedOptions, ...nonSelectedOptions];
51
+ sortedOptions.length > 0 && setAllOptions(sortedOptions);
52
+ }, [allOptions, selectedOptions]);
45
53
  return jsx(PopupSelect, {
46
54
  classNamePrefix: 'column-picker-popup',
47
55
  testId: 'column-picker-popup',
@@ -50,6 +58,7 @@ export const ColumnPicker = ({
50
58
  },
51
59
  options: allOptions,
52
60
  value: selectedOptions,
61
+ onOpen: onPopupOpen,
53
62
  closeMenuOnSelect: false,
54
63
  hideSelectedOptions: false,
55
64
  isMulti: true,
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/link-datasource",
3
- "version": "0.17.4",
3
+ "version": "0.17.5",
4
4
  "sideEffects": false
5
5
  }
@@ -1,8 +1,10 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
2
  import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
3
+ import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
4
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
5
  var _excluded = ["isOpen"];
4
6
  /** @jsx jsx */
5
- import { useCallback, useMemo } from 'react';
7
+ import { useCallback, useEffect, useState } from 'react';
6
8
  import { jsx } from '@emotion/react';
7
9
  import Button from '@atlaskit/button/standard-button';
8
10
  import BoardIcon from '@atlaskit/icon/glyph/board';
@@ -12,6 +14,10 @@ export var ColumnPicker = function ColumnPicker(_ref) {
12
14
  var columns = _ref.columns,
13
15
  selectedColumnKeys = _ref.selectedColumnKeys,
14
16
  onSelectedColumnKeysChange = _ref.onSelectedColumnKeysChange;
17
+ var _useState = useState([]),
18
+ _useState2 = _slicedToArray(_useState, 2),
19
+ allOptions = _useState2[0],
20
+ setAllOptions = _useState2[1];
15
21
  var mapColumnToOption = useCallback(function (_ref2) {
16
22
  var key = _ref2.key,
17
23
  title = _ref2.title;
@@ -24,12 +30,11 @@ export var ColumnPicker = function ColumnPicker(_ref) {
24
30
  var key = _ref3.key;
25
31
  return selectedColumnKeys.includes(key);
26
32
  }).map(mapColumnToOption);
27
- var allOptions = useMemo(function () {
28
- return columns.filter(function (_ref4) {
29
- var title = _ref4.title,
30
- key = _ref4.key;
33
+ useEffect(function () {
34
+ setAllOptions(columns.filter(function (_ref4) {
35
+ var title = _ref4.title;
31
36
  return title;
32
- }).map(mapColumnToOption);
37
+ }).map(mapColumnToOption));
33
38
  }, [columns, mapColumnToOption]);
34
39
  var handleChange = useCallback(function (selectedOptions) {
35
40
  var selectedValues = selectedOptions.map(function (_ref5) {
@@ -49,6 +54,18 @@ export var ColumnPicker = function ColumnPicker(_ref) {
49
54
  });
50
55
  onSelectedColumnKeysChange(selectedValues);
51
56
  }, [columns, onSelectedColumnKeysChange]);
57
+ var onPopupOpen = useCallback(function () {
58
+ if (!allOptions.length) {
59
+ return;
60
+ }
61
+ var nonSelectedOptions = allOptions.filter(function (option) {
62
+ return !selectedOptions.find(function (selectedOption) {
63
+ return selectedOption.value === option.value;
64
+ });
65
+ });
66
+ var sortedOptions = [].concat(_toConsumableArray(selectedOptions), _toConsumableArray(nonSelectedOptions));
67
+ sortedOptions.length > 0 && setAllOptions(sortedOptions);
68
+ }, [allOptions, selectedOptions]);
52
69
  return jsx(PopupSelect, {
53
70
  classNamePrefix: 'column-picker-popup',
54
71
  testId: 'column-picker-popup',
@@ -57,6 +74,7 @@ export var ColumnPicker = function ColumnPicker(_ref) {
57
74
  },
58
75
  options: allOptions,
59
76
  value: selectedOptions,
77
+ onOpen: onPopupOpen,
60
78
  closeMenuOnSelect: false,
61
79
  hideSelectedOptions: false,
62
80
  isMulti: true,
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/link-datasource",
3
- "version": "0.17.4",
3
+ "version": "0.17.5",
4
4
  "sideEffects": false
5
5
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/link-datasource",
3
- "version": "0.17.4",
3
+ "version": "0.17.5",
4
4
  "description": "UI Components to support linking platform dataset feature",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/"