@pingux/astro 1.2.0-alpha.0 → 1.2.0-alpha.12
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/lib/cjs/components/Breadcrumbs/BreadcrumbItem.js +3 -0
- package/lib/cjs/components/Breadcrumbs/Breadcrumbs.js +24 -14
- package/lib/cjs/components/Breadcrumbs/Breadcrumbs.test.js +9 -0
- package/lib/cjs/components/Button/Button.js +5 -2
- package/lib/cjs/components/Button/Button.stories.js +71 -17
- package/lib/cjs/components/Button/Button.test.js +26 -0
- package/lib/cjs/components/CopyText/CopyButton.js +9 -2
- package/lib/cjs/components/EnvironmentBreadcrumb/EnvironmentBreadcrumb.js +338 -0
- package/lib/cjs/components/EnvironmentBreadcrumb/EnvironmentBreadcrumb.stories.js +295 -0
- package/lib/cjs/components/EnvironmentBreadcrumb/EnvironmentBreadcrumb.test.js +287 -0
- package/lib/cjs/components/EnvironmentBreadcrumb/index.js +18 -0
- package/lib/cjs/components/HelpHint/HelpHint.js +24 -6
- package/lib/cjs/components/HelpHint/HelpHint.stories.js +57 -0
- package/lib/cjs/components/HelpHint/HelpHint.test.js +80 -0
- package/lib/cjs/components/Messages/Messages.reducer.js +2 -1
- package/lib/cjs/components/Messages/Messages.stories.js +10 -10
- package/lib/cjs/components/Messages/Messages.test.js +15 -1
- package/lib/cjs/components/Messages/index.js +21 -2
- package/lib/cjs/components/MultivaluesField/MultivaluesField.js +3 -1
- package/lib/cjs/components/NumberField/NumberField.js +3 -1
- package/lib/cjs/components/NumberField/NumberField.test.js +7 -0
- package/lib/cjs/components/OverlayPanel/OverlayPanel.js +2 -16
- package/lib/cjs/components/OverlayPanel/OverlayPanel.test.js +44 -0
- package/lib/cjs/components/SearchField/SearchField.stories.js +1 -15
- package/lib/cjs/components/TextAreaField/TextAreaField.js +1 -1
- package/lib/cjs/components/TextAreaField/TextAreaField.stories.js +1 -54
- package/lib/cjs/components/TextField/TextField.stories.js +79 -2
- package/lib/cjs/hooks/useAriaLabelWarning/useAriaLabelWarning.js +2 -1
- package/lib/cjs/index.js +10 -0
- package/lib/cjs/styles/variants/boxes.js +13 -0
- package/lib/cjs/styles/variants/buttons.js +101 -2
- package/lib/cjs/styles/variants/text.js +23 -0
- package/lib/components/Breadcrumbs/BreadcrumbItem.js +4 -1
- package/lib/components/Breadcrumbs/Breadcrumbs.js +24 -15
- package/lib/components/Breadcrumbs/Breadcrumbs.test.js +9 -0
- package/lib/components/Button/Button.js +6 -3
- package/lib/components/Button/Button.stories.js +53 -5
- package/lib/components/Button/Button.test.js +20 -0
- package/lib/components/CopyText/CopyButton.js +7 -2
- package/lib/components/EnvironmentBreadcrumb/EnvironmentBreadcrumb.js +296 -0
- package/lib/components/EnvironmentBreadcrumb/EnvironmentBreadcrumb.stories.js +256 -0
- package/lib/components/EnvironmentBreadcrumb/EnvironmentBreadcrumb.test.js +246 -0
- package/lib/components/EnvironmentBreadcrumb/index.js +1 -0
- package/lib/components/HelpHint/HelpHint.js +25 -5
- package/lib/components/HelpHint/HelpHint.stories.js +34 -0
- package/lib/components/HelpHint/HelpHint.test.js +58 -0
- package/lib/components/Messages/Messages.reducer.js +1 -1
- package/lib/components/Messages/Messages.stories.js +1 -1
- package/lib/components/Messages/Messages.test.js +11 -1
- package/lib/components/Messages/index.js +2 -1
- package/lib/components/MultivaluesField/MultivaluesField.js +3 -1
- package/lib/components/NumberField/NumberField.js +2 -1
- package/lib/components/NumberField/NumberField.test.js +7 -0
- package/lib/components/OverlayPanel/OverlayPanel.js +3 -16
- package/lib/components/OverlayPanel/OverlayPanel.test.js +38 -0
- package/lib/components/SearchField/SearchField.stories.js +0 -11
- package/lib/components/TextAreaField/TextAreaField.js +1 -1
- package/lib/components/TextAreaField/TextAreaField.stories.js +0 -43
- package/lib/components/TextField/TextField.stories.js +72 -0
- package/lib/hooks/useAriaLabelWarning/useAriaLabelWarning.js +2 -1
- package/lib/index.js +1 -0
- package/lib/styles/variants/boxes.js +13 -0
- package/lib/styles/variants/buttons.js +101 -2
- package/lib/styles/variants/text.js +23 -0
- package/package.json +2 -2
@@ -12,9 +12,13 @@ _Object$defineProperty(exports, "__esModule", {
|
|
12
12
|
|
13
13
|
exports["default"] = void 0;
|
14
14
|
|
15
|
+
var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
|
16
|
+
|
15
17
|
var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
|
16
18
|
|
17
|
-
var
|
19
|
+
var _filter = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/filter"));
|
20
|
+
|
21
|
+
var _isArray = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/array/is-array"));
|
18
22
|
|
19
23
|
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/objectWithoutProperties"));
|
20
24
|
|
@@ -45,7 +49,11 @@ var Breadcrumbs = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
45
49
|
icon = props.icon,
|
46
50
|
iconProps = props.iconProps,
|
47
51
|
onAction = props.onAction,
|
48
|
-
others = (0, _objectWithoutProperties2["default"])(props, ["children", "icon", "iconProps", "onAction"]);
|
52
|
+
others = (0, _objectWithoutProperties2["default"])(props, ["children", "icon", "iconProps", "onAction"]); // the following filters undefined values passed as a child
|
53
|
+
|
54
|
+
var filteredChildren = (0, _isArray["default"])(children) ? (0, _filter["default"])(children).call(children, function (child) {
|
55
|
+
return child;
|
56
|
+
}) : children;
|
49
57
|
|
50
58
|
var _useBreadcrumbs = (0, _breadcrumbs.useBreadcrumbs)(props),
|
51
59
|
wrapperProps = _useBreadcrumbs.navProps;
|
@@ -57,26 +65,28 @@ var Breadcrumbs = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
57
65
|
(0, _react.useImperativeHandle)(ref, function () {
|
58
66
|
return breadcrumbsRef.current;
|
59
67
|
});
|
60
|
-
|
61
|
-
|
62
|
-
display: "flex",
|
63
|
-
flexDirection: "row",
|
64
|
-
alignItems: "center",
|
65
|
-
sx: {
|
66
|
-
overflow: 'auto'
|
67
|
-
}
|
68
|
-
}, (0, _utils.mergeProps)(wrapperProps, others)), (0, _map["default"])(children).call(children, function (child, idx) {
|
68
|
+
var createBreadcrumb = (0, _react.useCallback)(function (child, idx) {
|
69
|
+
var isCurrentItem = (0, _isArray["default"])(filteredChildren) && filteredChildren.length > 1 ? idx === children.length - 1 : true;
|
69
70
|
return (0, _react2.jsx)(_react.Fragment, {
|
70
71
|
key: "fragment-".concat(child.key)
|
71
72
|
}, (0, _react2.jsx)(_BreadcrumbItem["default"], (0, _extends2["default"])({
|
72
73
|
"data-id": child['data-id'],
|
73
|
-
isCurrent:
|
74
|
+
isCurrent: isCurrentItem,
|
74
75
|
onAction: onAction,
|
75
76
|
actionKey: child.key
|
76
|
-
}, child.props), child.props.children), icon &&
|
77
|
+
}, child.props), child.props.children), icon && !isCurrentItem && (0, _react2.jsx)(_index.Icon, (0, _extends2["default"])({
|
77
78
|
icon: icon
|
78
79
|
}, iconProps)));
|
79
|
-
})
|
80
|
+
}, [children.length, filteredChildren, icon, iconProps, onAction]);
|
81
|
+
return (0, _react2.jsx)(_index.Box, (0, _extends2["default"])({
|
82
|
+
ref: breadcrumbsRef,
|
83
|
+
display: "flex",
|
84
|
+
flexDirection: "row",
|
85
|
+
alignItems: "center",
|
86
|
+
sx: {
|
87
|
+
overflow: 'auto'
|
88
|
+
}
|
89
|
+
}, (0, _utils.mergeProps)(wrapperProps, others)), (0, _isArray["default"])(filteredChildren) ? (0, _map["default"])(filteredChildren).call(filteredChildren, createBreadcrumb) : createBreadcrumb(children));
|
80
90
|
});
|
81
91
|
Breadcrumbs.propTypes = {
|
82
92
|
/** The icon to render in between each node. */
|
@@ -109,4 +109,13 @@ test('Item accepts a data-id and the data-id can be found in the DOM', function
|
|
109
109
|
|
110
110
|
expect(item).toBeInTheDocument();
|
111
111
|
expect(item).toHaveAttribute('data-id', testItemsArr[0]);
|
112
|
+
});
|
113
|
+
test('will render correctly with single child item', function () {
|
114
|
+
(0, _testWrapper.render)((0, _react2.jsx)(_Breadcrumbs["default"], (0, _utils.mergeProps)(defaultProps), (0, _react2.jsx)(_collections.Item, {
|
115
|
+
key: testItemsArr[0],
|
116
|
+
"data-id": testItemsArr[0],
|
117
|
+
isCurrent: true
|
118
|
+
}, testItemsArr[0])));
|
119
|
+
expect(_testWrapper.screen.getByTestId(testId)).toBeInTheDocument();
|
120
|
+
expect(_testWrapper.screen.getByText(testItemsArr[0])).toBeInTheDocument();
|
112
121
|
});
|
@@ -71,7 +71,8 @@ var Button = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
71
71
|
onPressChange = props.onPressChange,
|
72
72
|
onPressUp = props.onPressUp,
|
73
73
|
children = props.children,
|
74
|
-
|
74
|
+
variant = props.variant,
|
75
|
+
others = (0, _objectWithoutProperties2["default"])(props, ["className", "isDisabled", "isLoading", "onHoverStart", "onHoverChange", "onHoverEnd", "onPress", "onPressStart", "onPressEnd", "onPressChange", "onPressUp", "children", "variant"]);
|
75
76
|
var buttonRef = (0, _react.useRef)();
|
76
77
|
(0, _hooks.usePropWarning)(props, 'disabled', 'isDisabled');
|
77
78
|
/* istanbul ignore next */
|
@@ -103,6 +104,7 @@ var Button = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
103
104
|
classNames = _useStatusClasses.classNames;
|
104
105
|
|
105
106
|
var ariaLabel = props['aria-label'];
|
107
|
+
(0, _hooks.useAriaLabelWarning)('Button', ariaLabel, variant === 'filter');
|
106
108
|
return (0, _react2.jsx)(_themeUi.Button, (0, _extends2["default"])({
|
107
109
|
"aria-label": ariaLabel,
|
108
110
|
ref: buttonRef,
|
@@ -113,7 +115,8 @@ var Button = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
113
115
|
display: 'flex',
|
114
116
|
justifyContent: 'center',
|
115
117
|
alignItems: 'center'
|
116
|
-
}
|
118
|
+
},
|
119
|
+
variant: variant
|
117
120
|
}, others, (0, _utils.mergeProps)(hoverProps, focusProps, buttonProps)), isLoading ? (0, _react2.jsx)("span", {
|
118
121
|
style: {
|
119
122
|
visibility: 'hidden'
|
@@ -8,22 +8,24 @@ _Object$defineProperty(exports, "__esModule", {
|
|
8
8
|
value: true
|
9
9
|
});
|
10
10
|
|
11
|
-
exports.InlineButton = exports.TextButton = exports.TextIconButton = exports.Disabled = exports.Default = exports["default"] = void 0;
|
11
|
+
exports.FilterButton = exports.ColorBlockButton = exports.InlineButton = exports.TextButton = exports.TextIconButton = exports.Disabled = exports.Default = exports["default"] = void 0;
|
12
12
|
|
13
|
-
var
|
13
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
|
14
14
|
|
15
|
-
var
|
15
|
+
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/objectWithoutProperties"));
|
16
16
|
|
17
|
-
var
|
17
|
+
var _react = _interopRequireDefault(require("react"));
|
18
18
|
|
19
|
-
var
|
19
|
+
var _AddCircleIcon = _interopRequireDefault(require("mdi-react/AddCircleIcon"));
|
20
20
|
|
21
|
-
var
|
21
|
+
var _CreateIcon = _interopRequireDefault(require("mdi-react/CreateIcon"));
|
22
22
|
|
23
|
-
var
|
23
|
+
var _FilterIcon = _interopRequireDefault(require("mdi-react/FilterIcon"));
|
24
24
|
|
25
25
|
var _variants = require("../../utils/devUtils/constants/variants");
|
26
26
|
|
27
|
+
var _index = require("../../index");
|
28
|
+
|
27
29
|
var _react2 = require("@emotion/react");
|
28
30
|
|
29
31
|
// removing the iconButton variants from this story.
|
@@ -35,7 +37,7 @@ delete variants.INVERTED; // add designer approved variants for devs to use here
|
|
35
37
|
var variantOptions = ['critical', 'danger', 'default', 'inline', 'link', 'primary', 'success', 'text'];
|
36
38
|
var _default = {
|
37
39
|
title: 'Button',
|
38
|
-
component:
|
40
|
+
component: _index.Button,
|
39
41
|
argTypes: {
|
40
42
|
variant: {
|
41
43
|
control: {
|
@@ -56,18 +58,25 @@ var _default = {
|
|
56
58
|
type: 'text'
|
57
59
|
}
|
58
60
|
}
|
61
|
+
},
|
62
|
+
parameters: {
|
63
|
+
docs: {
|
64
|
+
source: {
|
65
|
+
type: 'code'
|
66
|
+
}
|
67
|
+
}
|
59
68
|
}
|
60
69
|
};
|
61
70
|
exports["default"] = _default;
|
62
71
|
|
63
72
|
var Default = function Default(args) {
|
64
|
-
return (0, _react2.jsx)(
|
73
|
+
return (0, _react2.jsx)(_index.Button, args);
|
65
74
|
};
|
66
75
|
|
67
76
|
exports.Default = Default;
|
68
77
|
|
69
78
|
var Disabled = function Disabled() {
|
70
|
-
return (0, _react2.jsx)(
|
79
|
+
return (0, _react2.jsx)(_index.Button, {
|
71
80
|
isDisabled: true
|
72
81
|
}, "Button Text");
|
73
82
|
};
|
@@ -75,12 +84,12 @@ var Disabled = function Disabled() {
|
|
75
84
|
exports.Disabled = Disabled;
|
76
85
|
|
77
86
|
var TextIconButton = function TextIconButton() {
|
78
|
-
return (0, _react2.jsx)(
|
87
|
+
return (0, _react2.jsx)(_index.Button, {
|
79
88
|
mb: "sm"
|
80
|
-
}, (0, _react2.jsx)(
|
89
|
+
}, (0, _react2.jsx)(_index.Box, {
|
81
90
|
isRow: true,
|
82
91
|
alignItems: "center"
|
83
|
-
}, (0, _react2.jsx)(
|
92
|
+
}, (0, _react2.jsx)(_index.Icon, {
|
84
93
|
icon: _AddCircleIcon["default"],
|
85
94
|
mr: "sm",
|
86
95
|
color: "active",
|
@@ -91,11 +100,11 @@ var TextIconButton = function TextIconButton() {
|
|
91
100
|
exports.TextIconButton = TextIconButton;
|
92
101
|
|
93
102
|
var TextButton = function TextButton() {
|
94
|
-
return (0, _react2.jsx)(
|
103
|
+
return (0, _react2.jsx)(_index.Button, {
|
95
104
|
mb: "sm",
|
96
105
|
variant: "text",
|
97
106
|
"aria-label": "Add option"
|
98
|
-
}, (0, _react2.jsx)(
|
107
|
+
}, (0, _react2.jsx)(_index.Text, {
|
99
108
|
variant: "label",
|
100
109
|
color: "active"
|
101
110
|
}, " + Add Option"));
|
@@ -104,10 +113,55 @@ var TextButton = function TextButton() {
|
|
104
113
|
exports.TextButton = TextButton;
|
105
114
|
|
106
115
|
var InlineButton = function InlineButton() {
|
107
|
-
return (0, _react2.jsx)(
|
116
|
+
return (0, _react2.jsx)(_index.Button, {
|
108
117
|
mb: "sm",
|
109
118
|
variant: "inline"
|
110
119
|
}, "Inline");
|
111
120
|
};
|
112
121
|
|
113
|
-
exports.InlineButton = InlineButton;
|
122
|
+
exports.InlineButton = InlineButton;
|
123
|
+
|
124
|
+
var ColorBlockButton = function ColorBlockButton(args) {
|
125
|
+
// Change `isConfigured` property in storybook controls
|
126
|
+
var isConfigured = args.isConfigured,
|
127
|
+
props = (0, _objectWithoutProperties2["default"])(args, ["isConfigured"]);
|
128
|
+
return (0, _react2.jsx)(_index.Button, (0, _extends2["default"])({}, props, {
|
129
|
+
variant: "colorBlock",
|
130
|
+
className: isConfigured ? 'is-configured' : ''
|
131
|
+
}), (0, _react2.jsx)(_index.Box, null, (0, _react2.jsx)(_index.Text, {
|
132
|
+
variant: "buttonTitle"
|
133
|
+
}, "Title"), (0, _react2.jsx)(_index.Text, {
|
134
|
+
variant: "buttonSubtitle"
|
135
|
+
}, "Info")), (0, _react2.jsx)(_index.Icon, {
|
136
|
+
icon: _CreateIcon["default"]
|
137
|
+
}));
|
138
|
+
};
|
139
|
+
|
140
|
+
exports.ColorBlockButton = ColorBlockButton;
|
141
|
+
ColorBlockButton.story = {
|
142
|
+
argTypes: {
|
143
|
+
isConfigured: {
|
144
|
+
control: {
|
145
|
+
type: 'boolean'
|
146
|
+
},
|
147
|
+
defaultValue: false
|
148
|
+
}
|
149
|
+
}
|
150
|
+
};
|
151
|
+
|
152
|
+
var FilterButton = function FilterButton() {
|
153
|
+
return (0, _react2.jsx)(_index.Box, {
|
154
|
+
p: "xx",
|
155
|
+
isRow: true,
|
156
|
+
gap: "md"
|
157
|
+
}, (0, _react2.jsx)(_index.SearchField, {
|
158
|
+
"aria-label": "search items"
|
159
|
+
}), (0, _react2.jsx)(_index.Button, {
|
160
|
+
variant: "filter",
|
161
|
+
"aria-label": "filter button"
|
162
|
+
}, (0, _react2.jsx)(_index.Icon, {
|
163
|
+
icon: _FilterIcon["default"]
|
164
|
+
})));
|
165
|
+
};
|
166
|
+
|
167
|
+
exports.FilterButton = FilterButton;
|
@@ -122,4 +122,30 @@ test('button renders children when not loading', function () {
|
|
122
122
|
expect(childWrapper).toBeInTheDocument();
|
123
123
|
expect(childWrapper).toBeVisible();
|
124
124
|
expect(_testWrapper.screen.queryByRole('progressbar')).not.toBeInTheDocument();
|
125
|
+
});
|
126
|
+
test('color block button renders in default state', function () {
|
127
|
+
getComponent({
|
128
|
+
variant: 'colorBlock'
|
129
|
+
});
|
130
|
+
|
131
|
+
var button = _testWrapper.screen.getByRole('button');
|
132
|
+
|
133
|
+
expect(button).toBeInTheDocument();
|
134
|
+
expect(button).not.toHaveClass('is-configured');
|
135
|
+
|
136
|
+
_userEvent["default"].tab();
|
137
|
+
|
138
|
+
expect(button).toHaveClass('is-focused');
|
139
|
+
expect(button).toHaveFocus();
|
140
|
+
});
|
141
|
+
test('color block button renders in configured state', function () {
|
142
|
+
getComponent({
|
143
|
+
variant: 'colorBlock',
|
144
|
+
className: 'is-configured'
|
145
|
+
});
|
146
|
+
|
147
|
+
var button = _testWrapper.screen.getByRole('button');
|
148
|
+
|
149
|
+
expect(button).toBeInTheDocument();
|
150
|
+
expect(button).toHaveClass('is-configured');
|
125
151
|
});
|
@@ -18,6 +18,10 @@ var _react = _interopRequireWildcard(require("react"));
|
|
18
18
|
|
19
19
|
var _ContentCopyIcon = _interopRequireDefault(require("mdi-react/ContentCopyIcon"));
|
20
20
|
|
21
|
+
var _lodash = require("lodash");
|
22
|
+
|
23
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
24
|
+
|
21
25
|
var _Icon = _interopRequireDefault(require("../Icon"));
|
22
26
|
|
23
27
|
var _IconButton = _interopRequireDefault(require("../IconButton"));
|
@@ -29,10 +33,13 @@ var CopyButton = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
29
33
|
ref: ref,
|
30
34
|
"aria-label": "copy",
|
31
35
|
variant: "buttons.copy"
|
32
|
-
}, props), (0, _react2.jsx)(_Icon["default"], {
|
36
|
+
}, (0, _lodash.omit)(props, 'iconProps')), (0, _react2.jsx)(_Icon["default"], (0, _extends2["default"])({
|
33
37
|
icon: _ContentCopyIcon["default"],
|
34
38
|
size: 15
|
35
|
-
}));
|
39
|
+
}, props === null || props === void 0 ? void 0 : props.iconProps)));
|
36
40
|
});
|
41
|
+
CopyButton.propTypes = {
|
42
|
+
iconProps: _propTypes["default"].shape({})
|
43
|
+
};
|
37
44
|
var _default = CopyButton;
|
38
45
|
exports["default"] = _default;
|
@@ -0,0 +1,338 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _interopRequireWildcard = require("@babel/runtime-corejs3/helpers/interopRequireWildcard");
|
4
|
+
|
5
|
+
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
|
6
|
+
|
7
|
+
var _Object$defineProperty2 = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
|
8
|
+
|
9
|
+
_Object$defineProperty2(exports, "__esModule", {
|
10
|
+
value: true
|
11
|
+
});
|
12
|
+
|
13
|
+
exports["default"] = void 0;
|
14
|
+
|
15
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/define-property"));
|
16
|
+
|
17
|
+
var _defineProperties = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/define-properties"));
|
18
|
+
|
19
|
+
var _getOwnPropertyDescriptors = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors"));
|
20
|
+
|
21
|
+
var _getOwnPropertyDescriptor = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor"));
|
22
|
+
|
23
|
+
var _getOwnPropertySymbols = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols"));
|
24
|
+
|
25
|
+
var _keys = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/keys"));
|
26
|
+
|
27
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
|
28
|
+
|
29
|
+
var _forEach = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/for-each"));
|
30
|
+
|
31
|
+
var _filter = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/filter"));
|
32
|
+
|
33
|
+
var _defineProperty3 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
|
34
|
+
|
35
|
+
var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
|
36
|
+
|
37
|
+
var _from = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/array/from"));
|
38
|
+
|
39
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/slicedToArray"));
|
40
|
+
|
41
|
+
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/objectWithoutProperties"));
|
42
|
+
|
43
|
+
var _react = _interopRequireWildcard(require("react"));
|
44
|
+
|
45
|
+
var _i18n = require("@react-aria/i18n");
|
46
|
+
|
47
|
+
var _ChevronRightIcon = _interopRequireDefault(require("mdi-react/ChevronRightIcon"));
|
48
|
+
|
49
|
+
var _HomeIcon = _interopRequireDefault(require("mdi-react/HomeIcon"));
|
50
|
+
|
51
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
52
|
+
|
53
|
+
var _overlays = require("@react-stately/overlays");
|
54
|
+
|
55
|
+
var _overlays2 = require("@react-aria/overlays");
|
56
|
+
|
57
|
+
var _ArrowDropUpIcon = _interopRequireDefault(require("mdi-react/ArrowDropUpIcon"));
|
58
|
+
|
59
|
+
var _ArrowDropDownIcon = _interopRequireDefault(require("mdi-react/ArrowDropDownIcon"));
|
60
|
+
|
61
|
+
var _focus = require("@react-aria/focus");
|
62
|
+
|
63
|
+
var _list = require("@react-stately/list");
|
64
|
+
|
65
|
+
var _ListBox = _interopRequireDefault(require("../ListBox"));
|
66
|
+
|
67
|
+
var _isIterable = require("../../utils/devUtils/props/isIterable");
|
68
|
+
|
69
|
+
var _index = require("../../index");
|
70
|
+
|
71
|
+
var _react2 = require("@emotion/react");
|
72
|
+
|
73
|
+
function ownKeys(object, enumerableOnly) { var keys = (0, _keys["default"])(object); if (_getOwnPropertySymbols["default"]) { var symbols = (0, _getOwnPropertySymbols["default"])(object); if (enumerableOnly) symbols = (0, _filter["default"])(symbols).call(symbols, function (sym) { return (0, _getOwnPropertyDescriptor["default"])(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
|
74
|
+
|
75
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { var _context2; (0, _forEach["default"])(_context2 = ownKeys(Object(source), true)).call(_context2, function (key) { (0, _defineProperty3["default"])(target, key, source[key]); }); } else if (_getOwnPropertyDescriptors["default"]) { (0, _defineProperties["default"])(target, (0, _getOwnPropertyDescriptors["default"])(source)); } else { var _context3; (0, _forEach["default"])(_context3 = ownKeys(Object(source))).call(_context3, function (key) { (0, _defineProperty2["default"])(target, key, (0, _getOwnPropertyDescriptor["default"])(source, key)); }); } } return target; }
|
76
|
+
|
77
|
+
/** The Environment Picker with Search and Sections support */
|
78
|
+
var EnvironmentBreadcrumb = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
79
|
+
var children = props.children,
|
80
|
+
imperativeDisabledKeys = props.disabledKeys,
|
81
|
+
emptySearchText = props.emptySearchText,
|
82
|
+
items = props.items,
|
83
|
+
imperativeItemsFilter = props.itemsFilter,
|
84
|
+
onNamePress = props.onNamePress,
|
85
|
+
imperativeOnPopoverClose = props.onPopoverClose,
|
86
|
+
imperativeOnPopoverOpen = props.onPopoverOpen,
|
87
|
+
onSelectionChange = props.onSelectionChange,
|
88
|
+
name = props.name,
|
89
|
+
searchProps = props.searchProps,
|
90
|
+
selectedItem = props.selectedItem,
|
91
|
+
others = (0, _objectWithoutProperties2["default"])(props, ["children", "disabledKeys", "emptySearchText", "items", "itemsFilter", "onNamePress", "onPopoverClose", "onPopoverOpen", "onSelectionChange", "name", "searchProps", "selectedItem"]);
|
92
|
+
|
93
|
+
var _useState = (0, _react.useState)(''),
|
94
|
+
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
95
|
+
searchValue = _useState2[0],
|
96
|
+
setSearchValue = _useState2[1];
|
97
|
+
|
98
|
+
var breadcrumbsRef = (0, _react.useRef)();
|
99
|
+
|
100
|
+
var overlayRef = _react["default"].useRef();
|
101
|
+
|
102
|
+
var triggerRef = _react["default"].useRef();
|
103
|
+
|
104
|
+
var scrollBoxRef = _react["default"].useRef();
|
105
|
+
/* istanbul ignore next */
|
106
|
+
|
107
|
+
|
108
|
+
(0, _react.useImperativeHandle)(ref, function () {
|
109
|
+
return breadcrumbsRef.current;
|
110
|
+
});
|
111
|
+
|
112
|
+
var _useFilter = (0, _i18n.useFilter)({
|
113
|
+
sensitivity: 'base'
|
114
|
+
}),
|
115
|
+
contains = _useFilter.contains;
|
116
|
+
|
117
|
+
var filterNodesWithChildren = function filterNodesWithChildren(iterableNode) {
|
118
|
+
var nodeArr = (0, _from["default"])(iterableNode); // with this function we are filtering child items if they have sections
|
119
|
+
// we can't filter items because if it would be a section - we can't change childNodes
|
120
|
+
// eslint-disable-next-line array-callback-return,consistent-return
|
121
|
+
|
122
|
+
var filteredSections = (0, _map["default"])(nodeArr).call(nodeArr, function f(nodeItem) {
|
123
|
+
if ((nodeItem === null || nodeItem === void 0 ? void 0 : nodeItem.type) === 'item') {
|
124
|
+
var _nodeItem$value;
|
125
|
+
|
126
|
+
return contains(nodeItem === null || nodeItem === void 0 ? void 0 : (_nodeItem$value = nodeItem.value) === null || _nodeItem$value === void 0 ? void 0 : _nodeItem$value.name, searchValue) ? nodeItem : null;
|
127
|
+
}
|
128
|
+
|
129
|
+
if ((nodeItem === null || nodeItem === void 0 ? void 0 : nodeItem.type) === 'section') {
|
130
|
+
var _context;
|
131
|
+
|
132
|
+
return _objectSpread(_objectSpread({}, nodeItem), {}, {
|
133
|
+
childNodes: (0, _filter["default"])(_context = (0, _from["default"])(nodeItem.childNodes)).call(_context, f)
|
134
|
+
});
|
135
|
+
}
|
136
|
+
}); // we are filtering null items here since we were not able to filter them in previous function
|
137
|
+
|
138
|
+
return (0, _filter["default"])(filteredSections).call(filteredSections, function (item) {
|
139
|
+
return item;
|
140
|
+
});
|
141
|
+
};
|
142
|
+
|
143
|
+
var popoverState = (0, _overlays.useOverlayTriggerState)({});
|
144
|
+
var handlePopoverClose = (0, _react.useCallback)(function () {
|
145
|
+
if (imperativeOnPopoverClose) {
|
146
|
+
imperativeOnPopoverClose();
|
147
|
+
}
|
148
|
+
|
149
|
+
setSearchValue('');
|
150
|
+
popoverState.close();
|
151
|
+
}, [imperativeOnPopoverClose, popoverState]);
|
152
|
+
var handleSelectionChange = (0, _react.useCallback)(function (selectedItemSet) {
|
153
|
+
var _selectedItemSet = (0, _slicedToArray2["default"])(selectedItemSet, 1),
|
154
|
+
selectedItemKey = _selectedItemSet[0];
|
155
|
+
|
156
|
+
onSelectionChange(selectedItemKey);
|
157
|
+
handlePopoverClose();
|
158
|
+
}, [handlePopoverClose, onSelectionChange]);
|
159
|
+
var listBoxProps = {
|
160
|
+
children: children,
|
161
|
+
disabledKeys: imperativeDisabledKeys,
|
162
|
+
items: items,
|
163
|
+
filter: imperativeItemsFilter || filterNodesWithChildren,
|
164
|
+
onSelectionChange: handleSelectionChange,
|
165
|
+
selectedKeys: [],
|
166
|
+
selectionMode: 'single',
|
167
|
+
disallowEmptySelection: false
|
168
|
+
};
|
169
|
+
var listBoxState = (0, _list.useListState)(listBoxProps); // this function is recursively going through the children to see
|
170
|
+
// whether there are some items so that means that the array isn't empty
|
171
|
+
|
172
|
+
var checkIfListEmpty = (0, _react.useCallback)(function () {
|
173
|
+
// from the beginning we are assuming that the list is empty
|
174
|
+
// variable is not isListEmpty because checks below if(isListHasItems) is clearer
|
175
|
+
// to read than if(!isListEmpty) IMO
|
176
|
+
var isListHasItems = false; // eslint-disable-next-line consistent-return
|
177
|
+
|
178
|
+
(function f(listState) {
|
179
|
+
var _listState$collection;
|
180
|
+
|
181
|
+
// if the list has items - we don't need to go deeper into the recursion
|
182
|
+
if (isListHasItems) {
|
183
|
+
return;
|
184
|
+
} // here we are checking where are listItems array is stored
|
185
|
+
|
186
|
+
|
187
|
+
var listItemsArr = (listState === null || listState === void 0 ? void 0 : (_listState$collection = listState.collection) === null || _listState$collection === void 0 ? void 0 : _listState$collection.iterable) || (listState === null || listState === void 0 ? void 0 : listState.childNodes);
|
188
|
+
|
189
|
+
if ((listItemsArr === null || listItemsArr === void 0 ? void 0 : listItemsArr.length) > 0) {
|
190
|
+
// if there are a few listItems we are checking their types (can be sections) - if we have
|
191
|
+
// a few of 'items' type - we know that the list is not empty
|
192
|
+
if (listItemsArr[0].type === 'item') {
|
193
|
+
isListHasItems = true;
|
194
|
+
} else {
|
195
|
+
// this path will be taken if there are a few 'sections'
|
196
|
+
// - we need to go check them recursively
|
197
|
+
(0, _forEach["default"])(listItemsArr).call(listItemsArr, function (item) {
|
198
|
+
return f(item);
|
199
|
+
});
|
200
|
+
}
|
201
|
+
}
|
202
|
+
})(listBoxState);
|
203
|
+
|
204
|
+
return !isListHasItems;
|
205
|
+
}, [listBoxState]);
|
206
|
+
|
207
|
+
var _useOverlayTrigger = (0, _overlays2.useOverlayTrigger)({
|
208
|
+
type: 'listbox'
|
209
|
+
}, popoverState, triggerRef),
|
210
|
+
triggerProps = _useOverlayTrigger.triggerProps,
|
211
|
+
overlayProps = _useOverlayTrigger.overlayProps;
|
212
|
+
|
213
|
+
var handlePopoverOpen = function handlePopoverOpen() {
|
214
|
+
if (imperativeOnPopoverOpen) {
|
215
|
+
imperativeOnPopoverOpen();
|
216
|
+
}
|
217
|
+
|
218
|
+
popoverState.open();
|
219
|
+
};
|
220
|
+
|
221
|
+
var _useOverlayPosition = (0, _overlays2.useOverlayPosition)({
|
222
|
+
isOpen: popoverState.isOpen,
|
223
|
+
offset: 6,
|
224
|
+
onClose: handlePopoverClose,
|
225
|
+
overlayRef: overlayRef,
|
226
|
+
scrollRef: scrollBoxRef,
|
227
|
+
shouldUpdatePosition: true,
|
228
|
+
targetRef: triggerRef
|
229
|
+
}),
|
230
|
+
positionProps = _useOverlayPosition.overlayProps;
|
231
|
+
|
232
|
+
var EmptyListState = (0, _react2.jsx)(_index.Text, {
|
233
|
+
py: 10,
|
234
|
+
px: 15
|
235
|
+
}, emptySearchText);
|
236
|
+
var ItemsSelect = (0, _react2.jsx)(_react["default"].Fragment, null, (0, _react2.jsx)(_index.Button, (0, _extends2["default"])({}, triggerProps, {
|
237
|
+
onPress: handlePopoverOpen,
|
238
|
+
ref: triggerRef,
|
239
|
+
variant: "environmentBreadcrumb.current",
|
240
|
+
"aria-label": "".concat(typeof selectedItem === 'string' ? selectedItem : 'Selected Item')
|
241
|
+
}), selectedItem, (0, _react2.jsx)(_index.Icon, {
|
242
|
+
icon: popoverState.isOpen ? _ArrowDropUpIcon["default"] : _ArrowDropDownIcon["default"]
|
243
|
+
})), (0, _react2.jsx)(_index.PopoverContainer, (0, _extends2["default"])({}, overlayProps, positionProps, {
|
244
|
+
ref: overlayRef,
|
245
|
+
isOpen: popoverState.isOpen,
|
246
|
+
scrollRef: scrollBoxRef,
|
247
|
+
onClose: handlePopoverClose,
|
248
|
+
hasNoArrow: true,
|
249
|
+
isDismissable: true,
|
250
|
+
p: 10
|
251
|
+
}), (0, _react2.jsx)(_focus.FocusScope, {
|
252
|
+
restoreFocus: true,
|
253
|
+
autoFocus: true,
|
254
|
+
contain: true
|
255
|
+
}, (0, _react2.jsx)(_index.ScrollBox, {
|
256
|
+
ref: scrollBoxRef
|
257
|
+
}, (0, _react2.jsx)(_index.SearchField, (0, _extends2["default"])({
|
258
|
+
placeholder: "Search",
|
259
|
+
"aria-label": "Items Search",
|
260
|
+
"data-testid": "Environment-Breadcrumb-Search",
|
261
|
+
containerProps: {
|
262
|
+
// this one is needed to cancel default scrollBox items behavior
|
263
|
+
sx: {
|
264
|
+
overflow: 'visible'
|
265
|
+
}
|
266
|
+
},
|
267
|
+
onChange: setSearchValue
|
268
|
+
}, searchProps)), checkIfListEmpty() ? EmptyListState : (0, _react2.jsx)(_ListBox["default"], {
|
269
|
+
state: listBoxState,
|
270
|
+
"aria-label": "Items List"
|
271
|
+
})))));
|
272
|
+
var handleOnAction = (0, _react.useCallback)(function (actionKey) {
|
273
|
+
if (actionKey === 'name' && onNamePress) {
|
274
|
+
onNamePress();
|
275
|
+
}
|
276
|
+
}, [onNamePress]);
|
277
|
+
return (0, _react2.jsx)(_index.Breadcrumbs, (0, _extends2["default"])({
|
278
|
+
icon: _ChevronRightIcon["default"],
|
279
|
+
ref: breadcrumbsRef,
|
280
|
+
onAction: handleOnAction,
|
281
|
+
iconProps: {
|
282
|
+
color: 'neutral.70',
|
283
|
+
mx: 10
|
284
|
+
}
|
285
|
+
}, others), (0, _react2.jsx)(_index.Item, {
|
286
|
+
key: "name",
|
287
|
+
variant: "environmentBreadcrumb.current",
|
288
|
+
"data-testid": "name",
|
289
|
+
"aria-label": name
|
290
|
+
}, (0, _react2.jsx)(_index.Icon, {
|
291
|
+
icon: _HomeIcon["default"],
|
292
|
+
mr: 7
|
293
|
+
}), name), selectedItem && (0, _react2.jsx)(_index.Item, {
|
294
|
+
key: "itemsSelect",
|
295
|
+
elementType: "Fragment"
|
296
|
+
}, ItemsSelect));
|
297
|
+
});
|
298
|
+
var _default = EnvironmentBreadcrumb;
|
299
|
+
exports["default"] = _default;
|
300
|
+
EnvironmentBreadcrumb.propTypes = {
|
301
|
+
/** Callback function that fires when the selected key changes. */
|
302
|
+
onSelectionChange: _propTypes["default"].func,
|
303
|
+
|
304
|
+
/** Current environment */
|
305
|
+
selectedItem: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].node]),
|
306
|
+
|
307
|
+
/** Displayed name */
|
308
|
+
name: _propTypes["default"].string,
|
309
|
+
|
310
|
+
/** Callback function that fires when name pressed */
|
311
|
+
onNamePress: _propTypes["default"].func,
|
312
|
+
|
313
|
+
/** The list of environments. */
|
314
|
+
items: _isIterable.isIterableProp,
|
315
|
+
|
316
|
+
/** Filter function to generate a filtered list of nodes.
|
317
|
+
* (nodes: Iterable<Node>) => Iterable<Node>
|
318
|
+
* */
|
319
|
+
itemsFilter: _propTypes["default"].func,
|
320
|
+
|
321
|
+
/** Callback function that fires when the dropdown is opened. */
|
322
|
+
onPopoverOpen: _propTypes["default"].func,
|
323
|
+
|
324
|
+
/** Callback function that fires when the dropdown is closed. */
|
325
|
+
onPopoverClose: _propTypes["default"].func,
|
326
|
+
|
327
|
+
/** Props object that is spread directly into the SearchField element. */
|
328
|
+
searchProps: _propTypes["default"].shape({}),
|
329
|
+
|
330
|
+
/** Array of keys to disable within the options list. */
|
331
|
+
disabledKeys: _propTypes["default"].arrayOf(_propTypes["default"].string),
|
332
|
+
|
333
|
+
/** Text that will be shown if no search results found. */
|
334
|
+
emptySearchText: _propTypes["default"].string
|
335
|
+
};
|
336
|
+
EnvironmentBreadcrumb.defaultProps = {
|
337
|
+
emptySearchText: 'No Search Result'
|
338
|
+
};
|