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 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"], {
@@ -1,6 +1,7 @@
1
1
  import React, { ReactNode } from 'react';
2
2
  import { PaperProps } from './Paper';
3
- interface ExpansionPanelProps extends PaperProps {
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;
@@ -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, null, helperButtonPosition === 'left' && renderHelper, summary, helperButtonPosition === 'right' && renderHelper)), details && /*#__PURE__*/_react["default"].createElement(_ExpansionPanelDetails["default"], {
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
@@ -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
@@ -8,3 +8,6 @@ export interface DefaultProps {
8
8
  name?: string;
9
9
  id?: string;
10
10
  }
11
+ export interface HTMLElementWithDataCy<T> extends React.HTMLAttributes<T> {
12
+ 'data-cy': string;
13
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "flipper-ui",
3
- "version": "0.26.13",
3
+ "version": "0.26.15",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "homepage": "https://flipper-ui.ngi.com.br/",
@@ -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
- return /*#__PURE__*/_react["default"].createElement(_ExpansionPanel["default"], args);
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
  };