@atlaskit/dropdown-menu 10.1.8 → 11.0.2
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 +148 -0
- package/__perf__/default.tsx +1 -1
- package/__perf__/dropdown-menu.tsx +216 -0
- package/codemods/11.0.0-lite-mode.tsx +39 -0
- package/codemods/__tests__/11.0.0-lite-mode.test.tsx +48 -0
- package/codemods/__tests__/convert-position.test.tsx +88 -0
- package/codemods/__tests__/convert-triggerType.test.tsx +100 -0
- package/codemods/__tests__/deprecate-items.test.tsx +108 -0
- package/codemods/__tests__/deprecate-onItemActivated.test.tsx +108 -0
- package/codemods/__tests__/deprecate-onPositioned.test.tsx +108 -0
- package/codemods/__tests__/deprecate-shouldFitContainer.tsx +108 -0
- package/codemods/__tests__/rename-imports.tsx +136 -0
- package/codemods/__tests__/replace-position-to-placement.test.tsx +84 -0
- package/codemods/__tests__/replace-shouldAllowMultipleLine.test.tsx +122 -0
- package/codemods/__tests__/update-component-callsites.tsx +66 -0
- package/codemods/migrates/convert-trigger-type.tsx +57 -0
- package/codemods/migrates/deprecate-items.tsx +9 -0
- package/codemods/migrates/deprecate-onItemActivated.tsx +9 -0
- package/codemods/migrates/deprecate-onPositioned.tsx +9 -0
- package/codemods/migrates/deprecate-shouldFitContainer.tsx +9 -0
- package/codemods/migrates/rename-imports.tsx +22 -0
- package/codemods/migrates/replace-position-to-placement.tsx +38 -0
- package/codemods/migrates/replace-shouldAllowMultiline.tsx +47 -0
- package/codemods/migrates/update-component-callsites.tsx +13 -0
- package/codemods/utils/convert-position.tsx +24 -0
- package/codemods/utils/create-rename-import.tsx +41 -0
- package/codemods/utils/create-update-callsite.tsx +32 -0
- package/dist/cjs/checkbox/dropdown-item-checkbox-group.js +31 -0
- package/dist/cjs/checkbox/dropdown-item-checkbox.js +108 -0
- package/dist/cjs/dropdown-menu-item-group.js +22 -0
- package/dist/cjs/dropdown-menu-item.js +67 -0
- package/dist/cjs/dropdown-menu.js +194 -0
- package/dist/cjs/index.js +21 -29
- package/dist/cjs/{components/item/DropdownItemRadio.js → internal/components/focus-manager.js} +40 -9
- package/dist/cjs/internal/components/menu-wrapper.js +68 -0
- package/dist/cjs/internal/context/checkbox-group-context.js +14 -0
- package/dist/cjs/internal/context/selection-store.js +76 -0
- package/dist/cjs/internal/hooks/use-checkbox-state.js +68 -0
- package/dist/cjs/internal/hooks/use-radio-state.js +84 -0
- package/dist/cjs/internal/hooks/use-register-item-with-focus-manager.js +29 -0
- package/dist/cjs/internal/utils/get-icon-colors.js +25 -0
- package/dist/cjs/internal/utils/handle-focus.js +58 -0
- package/dist/cjs/internal/utils/is-checkbox-item.js +11 -0
- package/dist/cjs/internal/utils/is-radio-item.js +11 -0
- package/dist/cjs/internal/utils/is-voice-over-supported.js +23 -0
- package/dist/cjs/internal/utils/reset-options-in-group.js +23 -0
- package/dist/cjs/radio/dropdown-item-radio-group.js +89 -0
- package/dist/cjs/radio/dropdown-item-radio.js +108 -0
- package/dist/cjs/version.json +1 -1
- package/dist/es2019/checkbox/dropdown-item-checkbox-group.js +21 -0
- package/dist/es2019/checkbox/dropdown-item-checkbox.js +67 -0
- package/dist/es2019/dropdown-menu-item-group.js +11 -0
- package/dist/es2019/dropdown-menu-item.js +49 -0
- package/dist/es2019/dropdown-menu.js +151 -0
- package/dist/es2019/index.js +7 -11
- package/dist/es2019/internal/components/focus-manager.js +40 -0
- package/dist/es2019/internal/components/menu-wrapper.js +44 -0
- package/dist/es2019/internal/context/checkbox-group-context.js +6 -0
- package/dist/es2019/internal/context/selection-store.js +54 -0
- package/dist/es2019/internal/hooks/use-checkbox-state.js +45 -0
- package/dist/es2019/internal/hooks/use-radio-state.js +56 -0
- package/dist/es2019/internal/hooks/use-register-item-with-focus-manager.js +19 -0
- package/dist/es2019/internal/utils/get-icon-colors.js +17 -0
- package/dist/es2019/internal/utils/handle-focus.js +48 -0
- package/dist/es2019/internal/utils/is-checkbox-item.js +4 -0
- package/dist/es2019/internal/utils/is-radio-item.js +4 -0
- package/dist/es2019/internal/utils/is-voice-over-supported.js +11 -0
- package/dist/es2019/internal/utils/reset-options-in-group.js +7 -0
- package/dist/es2019/radio/dropdown-item-radio-group.js +56 -0
- package/dist/es2019/radio/dropdown-item-radio.js +67 -0
- package/dist/es2019/version.json +1 -1
- package/dist/esm/checkbox/dropdown-item-checkbox-group.js +19 -0
- package/dist/esm/checkbox/dropdown-item-checkbox.js +81 -0
- package/dist/esm/dropdown-menu-item-group.js +11 -0
- package/dist/esm/dropdown-menu-item.js +52 -0
- package/dist/esm/dropdown-menu.js +168 -0
- package/dist/esm/index.js +7 -11
- package/dist/esm/internal/components/focus-manager.js +39 -0
- package/dist/esm/internal/components/menu-wrapper.js +45 -0
- package/dist/esm/internal/context/checkbox-group-context.js +6 -0
- package/dist/esm/internal/context/selection-store.js +58 -0
- package/dist/esm/internal/hooks/use-checkbox-state.js +55 -0
- package/dist/esm/internal/hooks/use-radio-state.js +70 -0
- package/dist/esm/internal/hooks/use-register-item-with-focus-manager.js +19 -0
- package/dist/esm/internal/utils/get-icon-colors.js +17 -0
- package/dist/esm/internal/utils/handle-focus.js +47 -0
- package/dist/esm/internal/utils/is-checkbox-item.js +4 -0
- package/dist/esm/internal/utils/is-radio-item.js +4 -0
- package/dist/esm/internal/utils/is-voice-over-supported.js +15 -0
- package/dist/esm/internal/utils/reset-options-in-group.js +13 -0
- package/dist/esm/radio/dropdown-item-radio-group.js +66 -0
- package/dist/esm/radio/dropdown-item-radio.js +81 -0
- package/dist/esm/version.json +1 -1
- package/dist/types/checkbox/dropdown-item-checkbox-group.d.ts +16 -0
- package/dist/types/checkbox/dropdown-item-checkbox.d.ts +13 -0
- package/dist/types/dropdown-menu-item-group.d.ts +11 -0
- package/dist/types/dropdown-menu-item.d.ts +13 -0
- package/dist/types/dropdown-menu.d.ts +13 -0
- package/dist/types/index.d.ts +8 -10
- package/dist/types/internal/components/focus-manager.d.ts +19 -0
- package/dist/types/internal/components/menu-wrapper.d.ts +11 -0
- package/dist/types/internal/context/checkbox-group-context.d.ts +5 -0
- package/dist/types/internal/context/selection-store.d.ts +27 -0
- package/dist/types/internal/hooks/use-checkbox-state.d.ts +14 -0
- package/dist/types/internal/hooks/use-radio-state.d.ts +9 -0
- package/dist/types/internal/hooks/use-register-item-with-focus-manager.d.ts +4 -0
- package/dist/types/internal/utils/get-icon-colors.d.ts +8 -0
- package/dist/types/internal/utils/handle-focus.d.ts +2 -0
- package/dist/types/internal/utils/is-checkbox-item.d.ts +1 -0
- package/dist/types/internal/utils/is-radio-item.d.ts +1 -0
- package/dist/types/internal/utils/is-voice-over-supported.d.ts +2 -0
- package/dist/types/internal/utils/reset-options-in-group.d.ts +4 -0
- package/dist/types/radio/dropdown-item-radio-group.d.ts +25 -0
- package/dist/types/radio/dropdown-item-radio.d.ts +13 -0
- package/dist/types/types.d.ts +254 -79
- package/package.json +39 -23
- package/dist/cjs/components/DropdownMenu.js +0 -230
- package/dist/cjs/components/DropdownMenuStateless.js +0 -523
- package/dist/cjs/components/context/DropdownItemClickManager.js +0 -72
- package/dist/cjs/components/context/DropdownItemFocusManager.js +0 -178
- package/dist/cjs/components/context/DropdownItemSelectionCache.js +0 -131
- package/dist/cjs/components/context/DropdownItemSelectionManager.js +0 -185
- package/dist/cjs/components/group/DropdownItemGroup.js +0 -61
- package/dist/cjs/components/group/DropdownItemGroupCheckbox.js +0 -16
- package/dist/cjs/components/group/DropdownItemGroupRadio.js +0 -16
- package/dist/cjs/components/group/ert-group-selection.js +0 -8
- package/dist/cjs/components/hoc/withItemSelectionManager.js +0 -66
- package/dist/cjs/components/hoc/withToggleInteraction.js +0 -175
- package/dist/cjs/components/item/DropdownItem.js +0 -19
- package/dist/cjs/components/item/DropdownItemCheckbox.js +0 -28
- package/dist/cjs/components/item/ert-item-checkbox.js +0 -8
- package/dist/cjs/components/item/ert-item-radio.js +0 -8
- package/dist/cjs/components/item/ert-item.js +0 -8
- package/dist/cjs/styled/WidthConstrainer.js +0 -21
- package/dist/cjs/util/contextNamespace.js +0 -19
- package/dist/cjs/util/getDisplayName.js +0 -14
- package/dist/cjs/util/keys.js +0 -18
- package/dist/cjs/util/safeContextCall.js +0 -27
- package/dist/cjs/util/supportsVoiceover.js +0 -17
- package/dist/es2019/components/DropdownMenu.js +0 -156
- package/dist/es2019/components/DropdownMenuStateless.js +0 -459
- package/dist/es2019/components/context/DropdownItemClickManager.js +0 -31
- package/dist/es2019/components/context/DropdownItemFocusManager.js +0 -134
- package/dist/es2019/components/context/DropdownItemSelectionCache.js +0 -68
- package/dist/es2019/components/context/DropdownItemSelectionManager.js +0 -140
- package/dist/es2019/components/group/DropdownItemGroup.js +0 -17
- package/dist/es2019/components/group/DropdownItemGroupCheckbox.js +0 -3
- package/dist/es2019/components/group/DropdownItemGroupRadio.js +0 -3
- package/dist/es2019/components/group/ert-group-selection.js +0 -1
- package/dist/es2019/components/hoc/withItemSelectionManager.js +0 -20
- package/dist/es2019/components/hoc/withToggleInteraction.js +0 -119
- package/dist/es2019/components/item/DropdownItem.js +0 -3
- package/dist/es2019/components/item/DropdownItemCheckbox.js +0 -5
- package/dist/es2019/components/item/DropdownItemRadio.js +0 -5
- package/dist/es2019/components/item/ert-item-checkbox.js +0 -1
- package/dist/es2019/components/item/ert-item-radio.js +0 -1
- package/dist/es2019/components/item/ert-item.js +0 -1
- package/dist/es2019/styled/WidthConstrainer.js +0 -6
- package/dist/es2019/util/contextNamespace.js +0 -6
- package/dist/es2019/util/getDisplayName.js +0 -4
- package/dist/es2019/util/keys.js +0 -6
- package/dist/es2019/util/safeContextCall.js +0 -10
- package/dist/es2019/util/supportsVoiceover.js +0 -5
- package/dist/esm/components/DropdownMenu.js +0 -215
- package/dist/esm/components/DropdownMenuStateless.js +0 -516
- package/dist/esm/components/context/DropdownItemClickManager.js +0 -59
- package/dist/esm/components/context/DropdownItemFocusManager.js +0 -164
- package/dist/esm/components/context/DropdownItemSelectionCache.js +0 -113
- package/dist/esm/components/context/DropdownItemSelectionManager.js +0 -174
- package/dist/esm/components/group/DropdownItemGroup.js +0 -43
- package/dist/esm/components/group/DropdownItemGroupCheckbox.js +0 -3
- package/dist/esm/components/group/DropdownItemGroupRadio.js +0 -3
- package/dist/esm/components/group/ert-group-selection.js +0 -1
- package/dist/esm/components/hoc/withItemSelectionManager.js +0 -47
- package/dist/esm/components/hoc/withToggleInteraction.js +0 -155
- package/dist/esm/components/item/DropdownItem.js +0 -3
- package/dist/esm/components/item/DropdownItemCheckbox.js +0 -7
- package/dist/esm/components/item/DropdownItemRadio.js +0 -7
- package/dist/esm/components/item/ert-item-checkbox.js +0 -1
- package/dist/esm/components/item/ert-item-radio.js +0 -1
- package/dist/esm/components/item/ert-item.js +0 -1
- package/dist/esm/styled/WidthConstrainer.js +0 -9
- package/dist/esm/util/contextNamespace.js +0 -8
- package/dist/esm/util/getDisplayName.js +0 -6
- package/dist/esm/util/keys.js +0 -6
- package/dist/esm/util/safeContextCall.js +0 -18
- package/dist/esm/util/supportsVoiceover.js +0 -9
- package/dist/types/components/DropdownMenu.d.ts +0 -36
- package/dist/types/components/DropdownMenuStateless.d.ts +0 -82
- package/dist/types/components/context/DropdownItemClickManager.d.ts +0 -19
- package/dist/types/components/context/DropdownItemFocusManager.d.ts +0 -35
- package/dist/types/components/context/DropdownItemSelectionCache.d.ts +0 -31
- package/dist/types/components/context/DropdownItemSelectionManager.d.ts +0 -34
- package/dist/types/components/group/DropdownItemGroup.d.ts +0 -12
- package/dist/types/components/group/DropdownItemGroupCheckbox.d.ts +0 -55
- package/dist/types/components/group/DropdownItemGroupRadio.d.ts +0 -55
- package/dist/types/components/group/ert-group-selection.d.ts +0 -6
- package/dist/types/components/hoc/withItemSelectionManager.d.ts +0 -63
- package/dist/types/components/hoc/withToggleInteraction.d.ts +0 -98
- package/dist/types/components/item/DropdownItem.d.ts +0 -65
- package/dist/types/components/item/DropdownItemCheckbox.d.ts +0 -80
- package/dist/types/components/item/DropdownItemRadio.d.ts +0 -80
- package/dist/types/components/item/ert-item-checkbox.d.ts +0 -2
- package/dist/types/components/item/ert-item-radio.d.ts +0 -2
- package/dist/types/components/item/ert-item.d.ts +0 -2
- package/dist/types/styled/WidthConstrainer.d.ts +0 -7
- package/dist/types/util/contextNamespace.d.ts +0 -4
- package/dist/types/util/getDisplayName.d.ts +0 -3
- package/dist/types/util/keys.d.ts +0 -6
- package/dist/types/util/safeContextCall.d.ts +0 -6
- package/dist/types/util/supportsVoiceover.d.ts +0 -2
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = void 0;
|
|
9
|
+
|
|
10
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
11
|
+
|
|
12
|
+
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
13
|
+
|
|
14
|
+
var _react = _interopRequireDefault(require("react"));
|
|
15
|
+
|
|
16
|
+
var _buttonItem = _interopRequireDefault(require("@atlaskit/menu/button-item"));
|
|
17
|
+
|
|
18
|
+
var _linkItem = _interopRequireDefault(require("@atlaskit/menu/link-item"));
|
|
19
|
+
|
|
20
|
+
var _useRegisterItemWithFocusManager = _interopRequireDefault(require("./internal/hooks/use-register-item-with-focus-manager"));
|
|
21
|
+
|
|
22
|
+
var _excluded = ["elemBefore", "elemAfter", "href", "shouldTitleWrap", "shouldDescriptionWrap"];
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* __Dropdown menu item__
|
|
26
|
+
*
|
|
27
|
+
* A dropdown item populates the dropdown menu with items. Every item should be inside a dropdown item group.
|
|
28
|
+
*
|
|
29
|
+
* - [Examples](https://atlassian.design/components/dropdown-item/examples)
|
|
30
|
+
* - [Code](https://atlassian.design/components/dropdown-item/code)
|
|
31
|
+
* - [Usage](https://atlassian.design/components/dropdown-item/usage)
|
|
32
|
+
*/
|
|
33
|
+
var DropdownMenuItem = function DropdownMenuItem(props) {
|
|
34
|
+
var elemBefore = props.elemBefore,
|
|
35
|
+
elemAfter = props.elemAfter,
|
|
36
|
+
href = props.href,
|
|
37
|
+
_props$shouldTitleWra = props.shouldTitleWrap,
|
|
38
|
+
shouldTitleWrap = _props$shouldTitleWra === void 0 ? true : _props$shouldTitleWra,
|
|
39
|
+
_props$shouldDescript = props.shouldDescriptionWrap,
|
|
40
|
+
shouldDescriptionWrap = _props$shouldDescript === void 0 ? true : _props$shouldDescript,
|
|
41
|
+
rest = (0, _objectWithoutProperties2.default)(props, _excluded);
|
|
42
|
+
var itemRef = (0, _useRegisterItemWithFocusManager.default)();
|
|
43
|
+
|
|
44
|
+
if (href) {
|
|
45
|
+
return /*#__PURE__*/_react.default.createElement(_linkItem.default, (0, _extends2.default)({
|
|
46
|
+
href: href,
|
|
47
|
+
iconBefore: elemBefore,
|
|
48
|
+
iconAfter: elemAfter,
|
|
49
|
+
role: "menuitem",
|
|
50
|
+
ref: itemRef,
|
|
51
|
+
shouldTitleWrap: shouldTitleWrap,
|
|
52
|
+
shouldDescriptionWrap: shouldDescriptionWrap
|
|
53
|
+
}, rest));
|
|
54
|
+
} else {
|
|
55
|
+
return /*#__PURE__*/_react.default.createElement(_buttonItem.default, (0, _extends2.default)({
|
|
56
|
+
role: "menuitem",
|
|
57
|
+
iconBefore: elemBefore,
|
|
58
|
+
iconAfter: elemAfter,
|
|
59
|
+
ref: itemRef,
|
|
60
|
+
shouldTitleWrap: shouldTitleWrap,
|
|
61
|
+
shouldDescriptionWrap: shouldDescriptionWrap
|
|
62
|
+
}, rest));
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
var _default = DropdownMenuItem;
|
|
67
|
+
exports.default = _default;
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = void 0;
|
|
9
|
+
|
|
10
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
11
|
+
|
|
12
|
+
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
13
|
+
|
|
14
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
15
|
+
|
|
16
|
+
var _react = require("react");
|
|
17
|
+
|
|
18
|
+
var _core = require("@emotion/core");
|
|
19
|
+
|
|
20
|
+
var _standardButton = _interopRequireDefault(require("@atlaskit/button/standard-button"));
|
|
21
|
+
|
|
22
|
+
var _keycodes = require("@atlaskit/ds-lib/keycodes");
|
|
23
|
+
|
|
24
|
+
var _noop = _interopRequireDefault(require("@atlaskit/ds-lib/noop"));
|
|
25
|
+
|
|
26
|
+
var _useControlled = _interopRequireDefault(require("@atlaskit/ds-lib/use-controlled"));
|
|
27
|
+
|
|
28
|
+
var _useFocusEvent = _interopRequireDefault(require("@atlaskit/ds-lib/use-focus-event"));
|
|
29
|
+
|
|
30
|
+
var _useKeydownEvent = _interopRequireDefault(require("@atlaskit/ds-lib/use-keydown-event"));
|
|
31
|
+
|
|
32
|
+
var _chevronDown = _interopRequireDefault(require("@atlaskit/icon/glyph/chevron-down"));
|
|
33
|
+
|
|
34
|
+
var _popup = _interopRequireDefault(require("@atlaskit/popup"));
|
|
35
|
+
|
|
36
|
+
var _spinner = _interopRequireDefault(require("@atlaskit/spinner"));
|
|
37
|
+
|
|
38
|
+
var _constants = require("@atlaskit/theme/constants");
|
|
39
|
+
|
|
40
|
+
var _visuallyHidden = _interopRequireDefault(require("@atlaskit/visually-hidden"));
|
|
41
|
+
|
|
42
|
+
var _focusManager = _interopRequireDefault(require("./internal/components/focus-manager"));
|
|
43
|
+
|
|
44
|
+
var _menuWrapper = _interopRequireDefault(require("./internal/components/menu-wrapper"));
|
|
45
|
+
|
|
46
|
+
var _selectionStore = _interopRequireDefault(require("./internal/context/selection-store"));
|
|
47
|
+
|
|
48
|
+
var _excluded = ["ref"];
|
|
49
|
+
var gridSize = (0, _constants.gridSize)();
|
|
50
|
+
var spinnerContainerStyles = (0, _core.css)({
|
|
51
|
+
display: 'flex',
|
|
52
|
+
minWidth: "".concat(gridSize * 20, "px"),
|
|
53
|
+
padding: "".concat(gridSize * 2.5, "px"),
|
|
54
|
+
justifyContent: 'center'
|
|
55
|
+
});
|
|
56
|
+
var MAX_HEIGHT = "calc(100vh - ".concat(gridSize * 2, "px)");
|
|
57
|
+
/**
|
|
58
|
+
* __Dropdown menu__
|
|
59
|
+
*
|
|
60
|
+
* A dropdown menu displays a list of actions or options to a user.
|
|
61
|
+
*
|
|
62
|
+
* - [Examples](https://atlassian.design/components/dropdown-menu/examples)
|
|
63
|
+
* - [Code](https://atlassian.design/components/dropdown-menu/code)
|
|
64
|
+
* - [Usage](https://atlassian.design/components/dropdown-menu/usage)
|
|
65
|
+
*/
|
|
66
|
+
|
|
67
|
+
var DropdownMenu = function DropdownMenu(props) {
|
|
68
|
+
var _props$defaultOpen = props.defaultOpen,
|
|
69
|
+
defaultOpen = _props$defaultOpen === void 0 ? false : _props$defaultOpen,
|
|
70
|
+
isOpen = props.isOpen,
|
|
71
|
+
_props$onOpenChange = props.onOpenChange,
|
|
72
|
+
onOpenChange = _props$onOpenChange === void 0 ? _noop.default : _props$onOpenChange,
|
|
73
|
+
children = props.children,
|
|
74
|
+
_props$placement = props.placement,
|
|
75
|
+
placement = _props$placement === void 0 ? 'bottom-start' : _props$placement,
|
|
76
|
+
Trigger = props.trigger,
|
|
77
|
+
_props$shouldFlip = props.shouldFlip,
|
|
78
|
+
shouldFlip = _props$shouldFlip === void 0 ? true : _props$shouldFlip,
|
|
79
|
+
_props$isLoading = props.isLoading,
|
|
80
|
+
isLoading = _props$isLoading === void 0 ? false : _props$isLoading,
|
|
81
|
+
_props$autoFocus = props.autoFocus,
|
|
82
|
+
autoFocus = _props$autoFocus === void 0 ? false : _props$autoFocus,
|
|
83
|
+
testId = props.testId,
|
|
84
|
+
_props$statusLabel = props.statusLabel,
|
|
85
|
+
statusLabel = _props$statusLabel === void 0 ? 'Loading' : _props$statusLabel;
|
|
86
|
+
|
|
87
|
+
var _useControlledState = (0, _useControlled.default)(isOpen, function () {
|
|
88
|
+
return defaultOpen;
|
|
89
|
+
}),
|
|
90
|
+
_useControlledState2 = (0, _slicedToArray2.default)(_useControlledState, 2),
|
|
91
|
+
isLocalOpen = _useControlledState2[0],
|
|
92
|
+
setLocalIsOpen = _useControlledState2[1];
|
|
93
|
+
|
|
94
|
+
var _useState = (0, _react.useState)(false),
|
|
95
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
96
|
+
isTriggeredUsingKeyboard = _useState2[0],
|
|
97
|
+
setTriggeredUsingKeyboard = _useState2[1];
|
|
98
|
+
|
|
99
|
+
var handleTriggerClicked = (0, _react.useCallback)(function (event) {
|
|
100
|
+
var newValue = !isLocalOpen;
|
|
101
|
+
var clientX = event.clientX,
|
|
102
|
+
clientY = event.clientY,
|
|
103
|
+
type = event.type;
|
|
104
|
+
|
|
105
|
+
if (type === 'keydown') {
|
|
106
|
+
setTriggeredUsingKeyboard(true);
|
|
107
|
+
} else if (clientX === 0 || clientY === 0) {
|
|
108
|
+
// Hitting enter/space is registered as a click
|
|
109
|
+
// with both clientX and clientY === 0
|
|
110
|
+
setTriggeredUsingKeyboard(true);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
setLocalIsOpen(newValue);
|
|
114
|
+
onOpenChange({
|
|
115
|
+
isOpen: newValue,
|
|
116
|
+
event: event
|
|
117
|
+
});
|
|
118
|
+
}, [onOpenChange, isLocalOpen, setLocalIsOpen]);
|
|
119
|
+
var handleOnClose = (0, _react.useCallback)(function () {
|
|
120
|
+
var newValue = false;
|
|
121
|
+
setLocalIsOpen(newValue);
|
|
122
|
+
onOpenChange({
|
|
123
|
+
isOpen: newValue
|
|
124
|
+
});
|
|
125
|
+
}, [onOpenChange, setLocalIsOpen]);
|
|
126
|
+
|
|
127
|
+
var _useFocus = (0, _useFocusEvent.default)(),
|
|
128
|
+
isFocused = _useFocus.isFocused,
|
|
129
|
+
bindFocus = _useFocus.bindFocus;
|
|
130
|
+
|
|
131
|
+
var handleDownArrow = function handleDownArrow(e) {
|
|
132
|
+
if (e.key === _keycodes.KEY_DOWN) {
|
|
133
|
+
// prevent page scroll
|
|
134
|
+
e.preventDefault();
|
|
135
|
+
handleTriggerClicked(e);
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
(0, _useKeydownEvent.default)(handleDownArrow, isFocused);
|
|
140
|
+
|
|
141
|
+
var renderTrigger = function renderTrigger(triggerProps) {
|
|
142
|
+
if (typeof Trigger === 'function') {
|
|
143
|
+
var ref = triggerProps.ref,
|
|
144
|
+
providedProps = (0, _objectWithoutProperties2.default)(triggerProps, _excluded);
|
|
145
|
+
return (0, _core.jsx)(Trigger, (0, _extends2.default)({}, providedProps, bindFocus, {
|
|
146
|
+
triggerRef: ref,
|
|
147
|
+
isSelected: isLocalOpen,
|
|
148
|
+
onClick: handleTriggerClicked,
|
|
149
|
+
testId: testId && "".concat(testId, "--trigger")
|
|
150
|
+
}));
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
return (0, _core.jsx)(_standardButton.default, (0, _extends2.default)({}, triggerProps, bindFocus, {
|
|
154
|
+
isSelected: isLocalOpen,
|
|
155
|
+
iconAfter: (0, _core.jsx)(_chevronDown.default, {
|
|
156
|
+
size: "medium",
|
|
157
|
+
label: "expand"
|
|
158
|
+
}),
|
|
159
|
+
onClick: handleTriggerClicked,
|
|
160
|
+
testId: testId && "".concat(testId, "--trigger")
|
|
161
|
+
}), Trigger);
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
var fallbackPlacements = ['bottom', 'bottom-end', 'right-start', 'left-start', 'auto'];
|
|
165
|
+
return (0, _core.jsx)(_selectionStore.default, null, (0, _core.jsx)(_popup.default, {
|
|
166
|
+
shouldFlip: shouldFlip,
|
|
167
|
+
isOpen: isLocalOpen,
|
|
168
|
+
onClose: handleOnClose,
|
|
169
|
+
zIndex: _constants.layers.modal(),
|
|
170
|
+
placement: placement,
|
|
171
|
+
fallbackPlacements: fallbackPlacements,
|
|
172
|
+
testId: testId && "".concat(testId, "--content"),
|
|
173
|
+
trigger: renderTrigger,
|
|
174
|
+
shouldUseCaptureOnOutsideClick: true,
|
|
175
|
+
content: function content(_ref) {
|
|
176
|
+
var setInitialFocusRef = _ref.setInitialFocusRef;
|
|
177
|
+
return (0, _core.jsx)(_focusManager.default, null, (0, _core.jsx)(_menuWrapper.default, {
|
|
178
|
+
maxHeight: MAX_HEIGHT,
|
|
179
|
+
maxWidth: 800,
|
|
180
|
+
onClose: handleOnClose,
|
|
181
|
+
setInitialFocusRef: isTriggeredUsingKeyboard || autoFocus ? setInitialFocusRef : undefined
|
|
182
|
+
}, isLoading ? (0, _core.jsx)("div", {
|
|
183
|
+
css: spinnerContainerStyles
|
|
184
|
+
}, (0, _core.jsx)(_spinner.default, {
|
|
185
|
+
size: "small"
|
|
186
|
+
}), (0, _core.jsx)(_visuallyHidden.default, {
|
|
187
|
+
role: "status"
|
|
188
|
+
}, statusLabel)) : children));
|
|
189
|
+
}
|
|
190
|
+
}));
|
|
191
|
+
};
|
|
192
|
+
|
|
193
|
+
var _default = DropdownMenu;
|
|
194
|
+
exports.default = _default;
|
package/dist/cjs/index.js
CHANGED
|
@@ -5,67 +5,59 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
Object.defineProperty(exports, "
|
|
8
|
+
Object.defineProperty(exports, "DropdownItem", {
|
|
9
9
|
enumerable: true,
|
|
10
10
|
get: function get() {
|
|
11
|
-
return
|
|
11
|
+
return _dropdownMenuItem.default;
|
|
12
12
|
}
|
|
13
13
|
});
|
|
14
|
-
Object.defineProperty(exports, "
|
|
14
|
+
Object.defineProperty(exports, "DropdownItemCheckbox", {
|
|
15
15
|
enumerable: true,
|
|
16
16
|
get: function get() {
|
|
17
|
-
return
|
|
17
|
+
return _dropdownItemCheckbox.default;
|
|
18
18
|
}
|
|
19
19
|
});
|
|
20
|
-
Object.defineProperty(exports, "
|
|
20
|
+
Object.defineProperty(exports, "DropdownItemCheckboxGroup", {
|
|
21
21
|
enumerable: true,
|
|
22
22
|
get: function get() {
|
|
23
|
-
return
|
|
23
|
+
return _dropdownItemCheckboxGroup.default;
|
|
24
24
|
}
|
|
25
25
|
});
|
|
26
|
-
Object.defineProperty(exports, "
|
|
27
|
-
enumerable: true,
|
|
28
|
-
get: function get() {
|
|
29
|
-
return _DropdownItemRadio.default;
|
|
30
|
-
}
|
|
31
|
-
});
|
|
32
|
-
Object.defineProperty(exports, "DropdownItemCheckbox", {
|
|
26
|
+
Object.defineProperty(exports, "DropdownItemGroup", {
|
|
33
27
|
enumerable: true,
|
|
34
28
|
get: function get() {
|
|
35
|
-
return
|
|
29
|
+
return _dropdownMenuItemGroup.default;
|
|
36
30
|
}
|
|
37
31
|
});
|
|
38
|
-
Object.defineProperty(exports, "
|
|
32
|
+
Object.defineProperty(exports, "DropdownItemRadio", {
|
|
39
33
|
enumerable: true,
|
|
40
34
|
get: function get() {
|
|
41
|
-
return
|
|
35
|
+
return _dropdownItemRadio.default;
|
|
42
36
|
}
|
|
43
37
|
});
|
|
44
|
-
Object.defineProperty(exports, "
|
|
38
|
+
Object.defineProperty(exports, "DropdownItemRadioGroup", {
|
|
45
39
|
enumerable: true,
|
|
46
40
|
get: function get() {
|
|
47
|
-
return
|
|
41
|
+
return _dropdownItemRadioGroup.default;
|
|
48
42
|
}
|
|
49
43
|
});
|
|
50
|
-
Object.defineProperty(exports, "
|
|
44
|
+
Object.defineProperty(exports, "default", {
|
|
51
45
|
enumerable: true,
|
|
52
46
|
get: function get() {
|
|
53
|
-
return
|
|
47
|
+
return _dropdownMenu.default;
|
|
54
48
|
}
|
|
55
49
|
});
|
|
56
50
|
|
|
57
|
-
var
|
|
58
|
-
|
|
59
|
-
var _DropdownMenuStateless = _interopRequireDefault(require("./components/DropdownMenuStateless"));
|
|
51
|
+
var _dropdownMenu = _interopRequireDefault(require("./dropdown-menu"));
|
|
60
52
|
|
|
61
|
-
var
|
|
53
|
+
var _dropdownMenuItemGroup = _interopRequireDefault(require("./dropdown-menu-item-group"));
|
|
62
54
|
|
|
63
|
-
var
|
|
55
|
+
var _dropdownMenuItem = _interopRequireDefault(require("./dropdown-menu-item"));
|
|
64
56
|
|
|
65
|
-
var
|
|
57
|
+
var _dropdownItemCheckbox = _interopRequireDefault(require("./checkbox/dropdown-item-checkbox"));
|
|
66
58
|
|
|
67
|
-
var
|
|
59
|
+
var _dropdownItemCheckboxGroup = _interopRequireDefault(require("./checkbox/dropdown-item-checkbox-group"));
|
|
68
60
|
|
|
69
|
-
var
|
|
61
|
+
var _dropdownItemRadio = _interopRequireDefault(require("./radio/dropdown-item-radio"));
|
|
70
62
|
|
|
71
|
-
var
|
|
63
|
+
var _dropdownItemRadioGroup = _interopRequireDefault(require("./radio/dropdown-item-radio-group"));
|
package/dist/cjs/{components/item/DropdownItemRadio.js → internal/components/focus-manager.js}
RENAMED
|
@@ -7,22 +7,53 @@ var _typeof = require("@babel/runtime/helpers/typeof");
|
|
|
7
7
|
Object.defineProperty(exports, "__esModule", {
|
|
8
8
|
value: true
|
|
9
9
|
});
|
|
10
|
-
exports.default = void 0;
|
|
10
|
+
exports.default = exports.FocusManagerContext = void 0;
|
|
11
11
|
|
|
12
|
-
var
|
|
12
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
13
13
|
|
|
14
|
-
var
|
|
14
|
+
var _useKeydownEvent = _interopRequireDefault(require("@atlaskit/ds-lib/use-keydown-event"));
|
|
15
15
|
|
|
16
|
-
var
|
|
17
|
-
|
|
18
|
-
var _withToggleInteraction = _interopRequireDefault(require("../hoc/withToggleInteraction"));
|
|
16
|
+
var _handleFocus = _interopRequireDefault(require("../utils/handle-focus"));
|
|
19
17
|
|
|
20
18
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
21
19
|
|
|
22
20
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
23
21
|
|
|
24
|
-
|
|
25
|
-
|
|
22
|
+
/**
|
|
23
|
+
*
|
|
24
|
+
*
|
|
25
|
+
* Context provider which maintains the list of focusable elements and a method to
|
|
26
|
+
* register new menu items.
|
|
27
|
+
* This list drives the keyboard navgation of the menu.
|
|
28
|
+
*
|
|
29
|
+
*/
|
|
30
|
+
var FocusManagerContext = /*#__PURE__*/(0, _react.createContext)({
|
|
31
|
+
menuItemRefs: [],
|
|
32
|
+
registerRef: function registerRef(ref) {}
|
|
26
33
|
});
|
|
27
|
-
|
|
34
|
+
/**
|
|
35
|
+
* Focus manager logic
|
|
36
|
+
*/
|
|
37
|
+
|
|
38
|
+
exports.FocusManagerContext = FocusManagerContext;
|
|
39
|
+
|
|
40
|
+
var FocusManager = function FocusManager(_ref) {
|
|
41
|
+
var children = _ref.children;
|
|
42
|
+
var menuItemRefs = (0, _react.useRef)([]);
|
|
43
|
+
var registerRef = (0, _react.useCallback)(function (ref) {
|
|
44
|
+
if (ref && !menuItemRefs.current.includes(ref)) {
|
|
45
|
+
menuItemRefs.current.push(ref);
|
|
46
|
+
}
|
|
47
|
+
}, []);
|
|
48
|
+
(0, _useKeydownEvent.default)((0, _handleFocus.default)(menuItemRefs.current));
|
|
49
|
+
var contextValue = {
|
|
50
|
+
menuItemRefs: menuItemRefs.current,
|
|
51
|
+
registerRef: registerRef
|
|
52
|
+
};
|
|
53
|
+
return /*#__PURE__*/_react.default.createElement(FocusManagerContext.Provider, {
|
|
54
|
+
value: contextValue
|
|
55
|
+
}, children);
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
var _default = FocusManager;
|
|
28
59
|
exports.default = _default;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
6
|
+
|
|
7
|
+
Object.defineProperty(exports, "__esModule", {
|
|
8
|
+
value: true
|
|
9
|
+
});
|
|
10
|
+
exports.default = void 0;
|
|
11
|
+
|
|
12
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
13
|
+
|
|
14
|
+
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
15
|
+
|
|
16
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
17
|
+
|
|
18
|
+
var _menuGroup = _interopRequireDefault(require("@atlaskit/menu/menu-group"));
|
|
19
|
+
|
|
20
|
+
var _focusManager = require("../components/focus-manager");
|
|
21
|
+
|
|
22
|
+
var _isCheckboxItem = _interopRequireDefault(require("../utils/is-checkbox-item"));
|
|
23
|
+
|
|
24
|
+
var _isRadioItem = _interopRequireDefault(require("../utils/is-radio-item"));
|
|
25
|
+
|
|
26
|
+
var _excluded = ["onClose", "setInitialFocusRef"];
|
|
27
|
+
|
|
28
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
29
|
+
|
|
30
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
*
|
|
34
|
+
* MenuWrapper wraps all the menu items.
|
|
35
|
+
* It handles the logic to close the menu when a MenuItem is clicked, but leaves it open
|
|
36
|
+
* if a CheckboxItem or RadioItem is clicked.
|
|
37
|
+
* It also sets focus to the first menu item when opened.
|
|
38
|
+
*/
|
|
39
|
+
var MenuWrapper = function MenuWrapper(_ref) {
|
|
40
|
+
var onClose = _ref.onClose,
|
|
41
|
+
setInitialFocusRef = _ref.setInitialFocusRef,
|
|
42
|
+
props = (0, _objectWithoutProperties2.default)(_ref, _excluded);
|
|
43
|
+
|
|
44
|
+
var _useContext = (0, _react.useContext)(_focusManager.FocusManagerContext),
|
|
45
|
+
menuItemRefs = _useContext.menuItemRefs;
|
|
46
|
+
|
|
47
|
+
var closeOnMenuItemClick = function closeOnMenuItemClick(e) {
|
|
48
|
+
var isTargetMenuItemOrDecendant = menuItemRefs.some(function (menuItem) {
|
|
49
|
+
var isCheckboxOrRadio = (0, _isCheckboxItem.default)(menuItem) || (0, _isRadioItem.default)(menuItem);
|
|
50
|
+
return menuItem.contains(e.target) && !isCheckboxOrRadio;
|
|
51
|
+
}); // Close menu if the click is triggered from a MenuItem or
|
|
52
|
+
// its decendant. Don't close the menu if the click is triggered
|
|
53
|
+
// from a MenuItemRadio or MenuItemCheckbox so that the user can
|
|
54
|
+
// select multiple items.
|
|
55
|
+
|
|
56
|
+
if (isTargetMenuItemOrDecendant && onClose) {
|
|
57
|
+
onClose();
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
setInitialFocusRef && setInitialFocusRef(menuItemRefs[0]);
|
|
62
|
+
return /*#__PURE__*/_react.default.createElement(_menuGroup.default, (0, _extends2.default)({
|
|
63
|
+
onClick: closeOnMenuItemClick
|
|
64
|
+
}, props));
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
var _default = MenuWrapper;
|
|
68
|
+
exports.default = _default;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.CheckboxGroupContext = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = require("react");
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Holds the unique identifier for the checkbox group.
|
|
12
|
+
*/
|
|
13
|
+
var CheckboxGroupContext = /*#__PURE__*/(0, _react.createContext)('');
|
|
14
|
+
exports.CheckboxGroupContext = CheckboxGroupContext;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
6
|
+
|
|
7
|
+
Object.defineProperty(exports, "__esModule", {
|
|
8
|
+
value: true
|
|
9
|
+
});
|
|
10
|
+
exports.default = exports.SelectionStoreContext = void 0;
|
|
11
|
+
|
|
12
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
13
|
+
|
|
14
|
+
var _noop = _interopRequireDefault(require("@atlaskit/ds-lib/noop"));
|
|
15
|
+
|
|
16
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
17
|
+
|
|
18
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
*
|
|
22
|
+
* SelectionStoreContext maintains the state of the selected items
|
|
23
|
+
* and getter setters.
|
|
24
|
+
*
|
|
25
|
+
*/
|
|
26
|
+
var SelectionStoreContext = /*#__PURE__*/(0, _react.createContext)({
|
|
27
|
+
setItemState: _noop.default,
|
|
28
|
+
getItemState: function getItemState() {
|
|
29
|
+
return undefined;
|
|
30
|
+
},
|
|
31
|
+
setGroupState: _noop.default,
|
|
32
|
+
getGroupState: function getGroupState() {
|
|
33
|
+
return {};
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
exports.SelectionStoreContext = SelectionStoreContext;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Selection store will persist data as long as it remains mounted.
|
|
40
|
+
* It handles the uncontrolled story for dropdown menu when the menu
|
|
41
|
+
* items can be mounted/unmounted depending if the menu is open or closed.
|
|
42
|
+
*/
|
|
43
|
+
var SelectionStore = function SelectionStore(props) {
|
|
44
|
+
var children = props.children;
|
|
45
|
+
var store = (0, _react.useRef)({});
|
|
46
|
+
var context = (0, _react.useMemo)(function () {
|
|
47
|
+
return {
|
|
48
|
+
setItemState: function setItemState(group, id, value) {
|
|
49
|
+
if (!store.current[group]) {
|
|
50
|
+
store.current[group] = {};
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
store.current[group][id] = value;
|
|
54
|
+
},
|
|
55
|
+
getItemState: function getItemState(group, id) {
|
|
56
|
+
if (!store.current[group]) {
|
|
57
|
+
return undefined;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
return store.current[group][id];
|
|
61
|
+
},
|
|
62
|
+
setGroupState: function setGroupState(group, value) {
|
|
63
|
+
store.current[group] = value;
|
|
64
|
+
},
|
|
65
|
+
getGroupState: function getGroupState(group) {
|
|
66
|
+
return store.current[group] || {};
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
}, []);
|
|
70
|
+
return /*#__PURE__*/_react.default.createElement(SelectionStoreContext.Provider, {
|
|
71
|
+
value: context
|
|
72
|
+
}, children);
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
var _default = SelectionStore;
|
|
76
|
+
exports.default = _default;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = void 0;
|
|
9
|
+
|
|
10
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
11
|
+
|
|
12
|
+
var _react = require("react");
|
|
13
|
+
|
|
14
|
+
var _checkboxGroupContext = require("../context/checkbox-group-context");
|
|
15
|
+
|
|
16
|
+
var _selectionStore = require("../context/selection-store");
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Custom hook to handle checkbox state for dropdown menu.
|
|
20
|
+
* It works in tandem with the selection store context when the
|
|
21
|
+
* component is uncontrolled.
|
|
22
|
+
*/
|
|
23
|
+
var useCheckboxState = function useCheckboxState(_ref) {
|
|
24
|
+
var isSelected = _ref.isSelected,
|
|
25
|
+
id = _ref.id,
|
|
26
|
+
defaultSelected = _ref.defaultSelected;
|
|
27
|
+
|
|
28
|
+
var _useContext = (0, _react.useContext)(_selectionStore.SelectionStoreContext),
|
|
29
|
+
setItemState = _useContext.setItemState,
|
|
30
|
+
getItemState = _useContext.getItemState;
|
|
31
|
+
|
|
32
|
+
var groupId = (0, _react.useContext)(_checkboxGroupContext.CheckboxGroupContext);
|
|
33
|
+
var persistedIsSelected = getItemState(groupId, id);
|
|
34
|
+
|
|
35
|
+
var _useState = (0, _react.useState)( // Initial state is set depending on value being defined or not.
|
|
36
|
+
// This state is only utilised if the checkbox is uncontrolled.
|
|
37
|
+
function () {
|
|
38
|
+
return persistedIsSelected !== undefined ? persistedIsSelected : defaultSelected || false;
|
|
39
|
+
}),
|
|
40
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
41
|
+
localIsSelected = _useState2[0],
|
|
42
|
+
setLocalIsSelected = _useState2[1];
|
|
43
|
+
|
|
44
|
+
var setLocalState = (0, _react.useCallback)(function (newValue) {
|
|
45
|
+
var nextValue = newValue(persistedIsSelected);
|
|
46
|
+
setLocalIsSelected(nextValue);
|
|
47
|
+
setItemState(groupId, id, nextValue);
|
|
48
|
+
}, [setItemState, persistedIsSelected, groupId, id]); // Checkbox is controlled - do nothing!
|
|
49
|
+
|
|
50
|
+
if (typeof isSelected === 'boolean') {
|
|
51
|
+
return [isSelected, function () {
|
|
52
|
+
return false;
|
|
53
|
+
}];
|
|
54
|
+
} // Checkbox is going through its first render pass!
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
if (persistedIsSelected === undefined) {
|
|
58
|
+
// Set the item so we have this state to access next time the checkbox renders (either by mounting or re-rendering!)
|
|
59
|
+
setItemState(groupId, id, defaultSelected || false);
|
|
60
|
+
} // Return the value and setter!
|
|
61
|
+
// Remember this flow is only returned if the checkbox is uncontrolled.
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
return [localIsSelected, setLocalState];
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
var _default = useCheckboxState;
|
|
68
|
+
exports.default = _default;
|