flipper-ui 0.26.13 → 0.26.15
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/core/Checkbox.js +1 -1
- package/core/ExpansionPanel.d.ts +9 -2
- package/core/ExpansionPanel.js +40 -2
- package/core/TextField.d.ts +10 -1
- package/core/TextField.js +22 -2
- package/core/types.d.ts +3 -0
- package/package.json +1 -1
- package/stories/ExpansionPanel.stories.js +53 -2
package/core/Checkbox.js
CHANGED
|
@@ -54,7 +54,7 @@ var Checkbox = function Checkbox(props) {
|
|
|
54
54
|
}));
|
|
55
55
|
};
|
|
56
56
|
var renderControl = function renderControl(props) {
|
|
57
|
-
return type === 'checkbox' ? renderCheckbox(props) : renderSwitch();
|
|
57
|
+
return type === 'checkbox' ? renderCheckbox(props) : renderSwitch(props);
|
|
58
58
|
};
|
|
59
59
|
var renderLabel = function renderLabel() {
|
|
60
60
|
return typeof props.label === 'string' && props.dense ? /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
|
package/core/ExpansionPanel.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import React, { ReactNode } from 'react';
|
|
2
2
|
import { PaperProps } from './Paper';
|
|
3
|
-
|
|
3
|
+
import { HTMLElementWithDataCy } from './types';
|
|
4
|
+
export interface ExpansionPanelProps extends PaperProps {
|
|
4
5
|
actions?: ReactNode;
|
|
5
6
|
defaultExpanded?: boolean;
|
|
6
7
|
details?: ReactNode;
|
|
@@ -11,10 +12,16 @@ interface ExpansionPanelProps extends PaperProps {
|
|
|
11
12
|
summaryStyle?: object;
|
|
12
13
|
detailsStyle?: object;
|
|
13
14
|
actionsStyle?: object;
|
|
15
|
+
editStyle?: React.CSSProperties;
|
|
16
|
+
headerProps?: HTMLElementWithDataCy<HTMLDivElement>;
|
|
14
17
|
helperIcon?: React.ReactNode;
|
|
18
|
+
editable?: boolean;
|
|
19
|
+
editing?: boolean;
|
|
15
20
|
helperButtonPosition?: 'left' | 'right';
|
|
16
21
|
onHelperClick?: () => void;
|
|
22
|
+
onEditClick?: () => void;
|
|
23
|
+
onSaveClick?: () => void;
|
|
17
24
|
onChange?: (event?: React.ChangeEvent<Record<string, unknown>>, expanded?: boolean) => void;
|
|
18
25
|
}
|
|
19
|
-
declare const ExpansionPanel: ({ actions, details, expandIcon, margin, padding, style, summary, summaryStyle, detailsStyle, actionsStyle, onHelperClick, helperIcon, helperButtonPosition, ...otherProps }: ExpansionPanelProps) => JSX.Element;
|
|
26
|
+
declare const ExpansionPanel: ({ actions, details, expandIcon, margin, padding, style, summary, summaryStyle, detailsStyle, actionsStyle, editStyle, onHelperClick, onEditClick, onSaveClick, helperIcon, editable, editing, headerProps, helperButtonPosition, ...otherProps }: ExpansionPanelProps) => JSX.Element;
|
|
20
27
|
export default ExpansionPanel;
|
package/core/ExpansionPanel.js
CHANGED
|
@@ -16,7 +16,7 @@ var _ExpansionPanelSummary = _interopRequireDefault(require("@material-ui/core/E
|
|
|
16
16
|
var _react = _interopRequireDefault(require("react"));
|
|
17
17
|
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
18
18
|
var _TextField = require("./TextField");
|
|
19
|
-
var _excluded = ["actions", "details", "expandIcon", "margin", "padding", "style", "summary", "summaryStyle", "detailsStyle", "actionsStyle", "onHelperClick", "helperIcon", "helperButtonPosition"];
|
|
19
|
+
var _excluded = ["actions", "details", "expandIcon", "margin", "padding", "style", "summary", "summaryStyle", "detailsStyle", "actionsStyle", "editStyle", "onHelperClick", "onEditClick", "onSaveClick", "helperIcon", "editable", "editing", "headerProps", "helperButtonPosition"];
|
|
20
20
|
var _templateObject;
|
|
21
21
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
22
22
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
@@ -32,21 +32,59 @@ var ExpansionPanel = function ExpansionPanel(_ref) {
|
|
|
32
32
|
summaryStyle = _ref.summaryStyle,
|
|
33
33
|
detailsStyle = _ref.detailsStyle,
|
|
34
34
|
actionsStyle = _ref.actionsStyle,
|
|
35
|
+
editStyle = _ref.editStyle,
|
|
35
36
|
onHelperClick = _ref.onHelperClick,
|
|
37
|
+
onEditClick = _ref.onEditClick,
|
|
38
|
+
onSaveClick = _ref.onSaveClick,
|
|
36
39
|
helperIcon = _ref.helperIcon,
|
|
40
|
+
editable = _ref.editable,
|
|
41
|
+
editing = _ref.editing,
|
|
42
|
+
headerProps = _ref.headerProps,
|
|
37
43
|
_ref$helperButtonPosi = _ref.helperButtonPosition,
|
|
38
44
|
helperButtonPosition = _ref$helperButtonPosi === void 0 ? 'right' : _ref$helperButtonPosi,
|
|
39
45
|
otherProps = (0, _objectWithoutProperties2["default"])(_ref, _excluded);
|
|
46
|
+
if (editable) {
|
|
47
|
+
if (!onSaveClick) {
|
|
48
|
+
throw new Error('onSaveClick is required when editable is true');
|
|
49
|
+
}
|
|
50
|
+
if (!onEditClick) {
|
|
51
|
+
throw new Error('onEditClick is required when editable is true');
|
|
52
|
+
}
|
|
53
|
+
}
|
|
40
54
|
var handleClick = function handleClick(event) {
|
|
41
55
|
if (onHelperClick) {
|
|
42
56
|
event.stopPropagation();
|
|
43
57
|
onHelperClick();
|
|
44
58
|
}
|
|
45
59
|
};
|
|
60
|
+
var handleEditClick = function handleEditClick(event) {
|
|
61
|
+
if (onEditClick) {
|
|
62
|
+
event.stopPropagation();
|
|
63
|
+
onEditClick();
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
var handleSaveClick = function handleSaveClick(event) {
|
|
67
|
+
if (onSaveClick) {
|
|
68
|
+
event.stopPropagation();
|
|
69
|
+
onSaveClick();
|
|
70
|
+
}
|
|
71
|
+
};
|
|
46
72
|
var renderHelper = /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, onHelperClick && /*#__PURE__*/_react["default"].createElement(_TextField.HelperBox, {
|
|
47
73
|
helperIcon: helperIcon,
|
|
48
74
|
onHelperClick: handleClick
|
|
49
75
|
}));
|
|
76
|
+
var renderEdit = /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, editable && /*#__PURE__*/_react["default"].createElement(_TextField.EditBox, {
|
|
77
|
+
editing: !!editing,
|
|
78
|
+
style: editStyle,
|
|
79
|
+
onEditClick: handleEditClick,
|
|
80
|
+
onSaveClick: handleSaveClick,
|
|
81
|
+
saveButtonProps: {
|
|
82
|
+
'data-cy': 'save-button'
|
|
83
|
+
},
|
|
84
|
+
editButtonProps: {
|
|
85
|
+
'data-cy': 'edit-button'
|
|
86
|
+
}
|
|
87
|
+
}));
|
|
50
88
|
return /*#__PURE__*/_react["default"].createElement(_ExpansionPanel["default"], (0, _extends2["default"])({}, otherProps, {
|
|
51
89
|
style: _objectSpread({
|
|
52
90
|
margin: margin,
|
|
@@ -55,7 +93,7 @@ var ExpansionPanel = function ExpansionPanel(_ref) {
|
|
|
55
93
|
}), summary && /*#__PURE__*/_react["default"].createElement(_ExpansionPanelSummary["default"], {
|
|
56
94
|
expandIcon: expandIcon,
|
|
57
95
|
style: summaryStyle
|
|
58
|
-
}, /*#__PURE__*/_react["default"].createElement(ExpansionPanelHeaderWrapper,
|
|
96
|
+
}, /*#__PURE__*/_react["default"].createElement(ExpansionPanelHeaderWrapper, headerProps, helperButtonPosition === 'left' && renderHelper, summary, renderEdit, helperButtonPosition === 'right' && renderHelper)), details && /*#__PURE__*/_react["default"].createElement(_ExpansionPanelDetails["default"], {
|
|
59
97
|
style: detailsStyle
|
|
60
98
|
}, details), actions && /*#__PURE__*/_react["default"].createElement(_ExpansionPanelActions["default"], {
|
|
61
99
|
style: actionsStyle
|
package/core/TextField.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React, { ChangeEvent, KeyboardEvent, FocusEvent, ReactNode, MouseEvent } from 'react';
|
|
2
|
-
import { DefaultProps } from './types';
|
|
2
|
+
import { DefaultProps, HTMLElementWithDataCy } from './types';
|
|
3
3
|
export interface TextFieldProps extends DefaultProps {
|
|
4
4
|
autoComplete?: string;
|
|
5
5
|
autoFocus?: boolean;
|
|
@@ -26,6 +26,7 @@ export interface TextFieldProps extends DefaultProps {
|
|
|
26
26
|
rowsMax?: string | number;
|
|
27
27
|
helperText?: ReactNode;
|
|
28
28
|
helperIcon?: ReactNode;
|
|
29
|
+
showEdit?: boolean;
|
|
29
30
|
hasClear?: boolean;
|
|
30
31
|
onClear?: () => void;
|
|
31
32
|
onHelperClick?: () => void;
|
|
@@ -38,9 +39,17 @@ export interface TextFieldProps extends DefaultProps {
|
|
|
38
39
|
interface IHelperProps extends Pick<TextFieldProps, 'helperIcon'> {
|
|
39
40
|
onHelperClick: (event: MouseEvent<HTMLButtonElement>) => void;
|
|
40
41
|
}
|
|
42
|
+
interface IEditProps extends Pick<TextFieldProps, 'showEdit' | 'style'> {
|
|
43
|
+
editing: boolean;
|
|
44
|
+
onEditClick: (event: MouseEvent<HTMLButtonElement>) => void;
|
|
45
|
+
onSaveClick: (event: MouseEvent<HTMLButtonElement>) => void;
|
|
46
|
+
editButtonProps?: Partial<Omit<HTMLElementWithDataCy<HTMLButtonElement>, 'color'>>;
|
|
47
|
+
saveButtonProps?: Partial<Omit<HTMLElementWithDataCy<HTMLButtonElement>, 'color'>>;
|
|
48
|
+
}
|
|
41
49
|
export declare const TextFieldWrapper: import("styled-components").StyledComponent<"div", any, {}, never>;
|
|
42
50
|
export declare const StaticTextFieldWrapper: import("styled-components").StyledComponent<"div", any, {}, never>;
|
|
43
51
|
export declare const useStyles: (props?: any) => Record<"input" | "outlinedInput" | "outlinedLabel" | "outlinedMultiline" | "iconOutlined", string>;
|
|
44
52
|
export declare const HelperBox: (props: IHelperProps) => JSX.Element;
|
|
53
|
+
export declare const EditBox: (props: IEditProps) => JSX.Element;
|
|
45
54
|
declare const TextField: ({ margin, padding, style, error, variant, InputLabelProps, InputProps, SelectProps, autoComplete, onHelperClick, helperIcon, fullWidth, hasClear, onClear, ...otherProps }: TextFieldProps) => JSX.Element;
|
|
46
55
|
export default TextField;
|
package/core/TextField.js
CHANGED
|
@@ -4,10 +4,10 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.useStyles = exports["default"] = exports.TextFieldWrapper = exports.StaticTextFieldWrapper = exports.HelperBox = void 0;
|
|
8
|
-
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
7
|
+
exports.useStyles = exports["default"] = exports.TextFieldWrapper = exports.StaticTextFieldWrapper = exports.HelperBox = exports.EditBox = void 0;
|
|
9
8
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
10
9
|
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
10
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
11
11
|
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
|
|
12
12
|
var _InputAdornment = _interopRequireDefault(require("@material-ui/core/InputAdornment"));
|
|
13
13
|
var _TextField = _interopRequireDefault(require("@material-ui/core/TextField"));
|
|
@@ -16,6 +16,8 @@ var _styles = require("@material-ui/core/styles");
|
|
|
16
16
|
var _react = _interopRequireDefault(require("react"));
|
|
17
17
|
var _Clear = _interopRequireDefault(require("@material-ui/icons/Clear"));
|
|
18
18
|
var _Help = _interopRequireDefault(require("@material-ui/icons/Help"));
|
|
19
|
+
var _Edit = _interopRequireDefault(require("@material-ui/icons/Edit"));
|
|
20
|
+
var _Save = _interopRequireDefault(require("@material-ui/icons/Save"));
|
|
19
21
|
var _IconButton2 = _interopRequireDefault(require("./IconButton"));
|
|
20
22
|
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
21
23
|
var _excluded = ["margin", "padding", "style", "error", "variant", "InputLabelProps", "InputProps", "SelectProps", "autoComplete", "onHelperClick", "helperIcon", "fullWidth", "hasClear", "onClear"];
|
|
@@ -59,6 +61,24 @@ var HelperBox = function HelperBox(props) {
|
|
|
59
61
|
})));
|
|
60
62
|
};
|
|
61
63
|
exports.HelperBox = HelperBox;
|
|
64
|
+
var EditBox = function EditBox(props) {
|
|
65
|
+
if (props.editing) {
|
|
66
|
+
return /*#__PURE__*/_react["default"].createElement(_IconButton2["default"], (0, _extends2["default"])({}, props.saveButtonProps, {
|
|
67
|
+
padding: "6px 2px",
|
|
68
|
+
onClick: props.onSaveClick
|
|
69
|
+
}), /*#__PURE__*/_react["default"].createElement(_Save["default"], {
|
|
70
|
+
fontSize: "small"
|
|
71
|
+
}));
|
|
72
|
+
} else {
|
|
73
|
+
return /*#__PURE__*/_react["default"].createElement(_IconButton2["default"], (0, _extends2["default"])({}, props.editButtonProps, {
|
|
74
|
+
padding: "6px 2px",
|
|
75
|
+
onClick: props.onEditClick
|
|
76
|
+
}), /*#__PURE__*/_react["default"].createElement(_Edit["default"], {
|
|
77
|
+
fontSize: "small"
|
|
78
|
+
}));
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
exports.EditBox = EditBox;
|
|
62
82
|
var renderEndAdornment = function renderEndAdornment(onClear) {
|
|
63
83
|
return /*#__PURE__*/_react["default"].createElement(_InputAdornment["default"], {
|
|
64
84
|
position: "end"
|
package/core/types.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -4,19 +4,62 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports["default"] = exports.Disabled = exports.Default = void 0;
|
|
7
|
+
exports["default"] = exports.WithEditable = exports.Disabled = exports.Default = void 0;
|
|
8
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
9
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
8
10
|
var _react = _interopRequireDefault(require("react"));
|
|
9
11
|
var _ExpansionPanel = _interopRequireDefault(require("../core/ExpansionPanel"));
|
|
10
12
|
var _Typography = _interopRequireDefault(require("../core/Typography"));
|
|
11
13
|
var _ExpandMore = _interopRequireDefault(require("@material-ui/icons/ExpandMore"));
|
|
12
14
|
var _Button = _interopRequireDefault(require("../core/Button"));
|
|
15
|
+
var _TextField = _interopRequireDefault(require("../core/TextField"));
|
|
13
16
|
var _default = {
|
|
14
17
|
title: 'ExpansionPanel',
|
|
15
18
|
component: _ExpansionPanel["default"]
|
|
16
19
|
};
|
|
17
20
|
exports["default"] = _default;
|
|
18
21
|
var Template = function Template(args) {
|
|
19
|
-
|
|
22
|
+
var _React$useState = _react["default"].useState(args.editing),
|
|
23
|
+
_React$useState2 = (0, _slicedToArray2["default"])(_React$useState, 2),
|
|
24
|
+
editing = _React$useState2[0],
|
|
25
|
+
setEditing = _React$useState2[1];
|
|
26
|
+
var _React$useState3 = _react["default"].useState(args.details),
|
|
27
|
+
_React$useState4 = (0, _slicedToArray2["default"])(_React$useState3, 2),
|
|
28
|
+
details = _React$useState4[0],
|
|
29
|
+
setDetails = _React$useState4[1];
|
|
30
|
+
var inputRef = _react["default"].useRef(null);
|
|
31
|
+
var handleEditClick = function handleEditClick() {
|
|
32
|
+
setEditing(true);
|
|
33
|
+
};
|
|
34
|
+
var handleSaveClick = function handleSaveClick() {
|
|
35
|
+
var _inputRef$current;
|
|
36
|
+
setDetails((_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 ? void 0 : _inputRef$current.value);
|
|
37
|
+
setEditing(false);
|
|
38
|
+
};
|
|
39
|
+
var handleKeyDown = function handleKeyDown(event) {
|
|
40
|
+
if (event.key === 'Enter') {
|
|
41
|
+
handleSaveClick();
|
|
42
|
+
}
|
|
43
|
+
if (event.key === 'Escape') {
|
|
44
|
+
setEditing(false);
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
var renderDetails = function renderDetails() {
|
|
48
|
+
if (editing) {
|
|
49
|
+
return /*#__PURE__*/_react["default"].createElement(_TextField["default"], {
|
|
50
|
+
autoFocus: true,
|
|
51
|
+
inputRef: inputRef,
|
|
52
|
+
onKeyDown: handleKeyDown
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
return details;
|
|
56
|
+
};
|
|
57
|
+
return /*#__PURE__*/_react["default"].createElement(_ExpansionPanel["default"], (0, _extends2["default"])({}, args, {
|
|
58
|
+
editing: editing,
|
|
59
|
+
onEditClick: handleEditClick,
|
|
60
|
+
onSaveClick: handleSaveClick,
|
|
61
|
+
details: renderDetails()
|
|
62
|
+
}));
|
|
20
63
|
};
|
|
21
64
|
var Default = Template.bind({});
|
|
22
65
|
exports.Default = Default;
|
|
@@ -42,4 +85,12 @@ Disabled.args = {
|
|
|
42
85
|
summary: 'Dormammu',
|
|
43
86
|
details: 'I have come to bargain',
|
|
44
87
|
expandIcon: /*#__PURE__*/_react["default"].createElement(_ExpandMore["default"], null)
|
|
88
|
+
};
|
|
89
|
+
var WithEditable = Template.bind({});
|
|
90
|
+
exports.WithEditable = WithEditable;
|
|
91
|
+
WithEditable.args = {
|
|
92
|
+
editable: true,
|
|
93
|
+
summary: 'Editable Expansion Panel',
|
|
94
|
+
details: 'This is an editable expansion panel',
|
|
95
|
+
expandIcon: /*#__PURE__*/_react["default"].createElement(_ExpandMore["default"], null)
|
|
45
96
|
};
|