From 486086c6780ceff5cac71203751d87ade6776a69 Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Wed, 19 Aug 2020 10:30:04 -0400 Subject: [PATCH] resolve pr comments Signed-off-by: Sebastian Malton --- .../editable-list/editable-list.scss | 4 +-- .../editable-list/editable-list.tsx | 36 ++++++++++++------- 2 files changed, 26 insertions(+), 14 deletions(-) diff --git a/src/renderer/components/editable-list/editable-list.scss b/src/renderer/components/editable-list/editable-list.scss index 9adcf489c0..95278a8700 100644 --- a/src/renderer/components/editable-list/editable-list.scss +++ b/src/renderer/components/editable-list/editable-list.scss @@ -1,9 +1,9 @@ .EditableList { - .EditableListContents { + .el-contents { display: grid; grid-template-columns: 1fr auto; - .ValueRemove { + .el-value-remove { .Icon { justify-content: unset; } diff --git a/src/renderer/components/editable-list/editable-list.tsx b/src/renderer/components/editable-list/editable-list.tsx index de537857e1..e402e82b19 100644 --- a/src/renderer/components/editable-list/editable-list.tsx +++ b/src/renderer/components/editable-list/editable-list.tsx @@ -5,6 +5,7 @@ import { Icon } from "../icon"; import { Input } from "../input"; import { observable } from "mobx"; import { observer } from "mobx-react"; +import { autobind } from "../../utils"; export interface Props { items: T[], @@ -14,37 +15,48 @@ export interface Props { // An optional prop used to convert T to a displayable string // defaults to `String` - display?: (item: T) => string, + renderItem?: (item: T, index: number) => React.ReactNode, +} + +const defaultProps: Partial> = { + placeholder: "Add new item...", + renderItem: (item: any, index: number) => {item} } @observer export class EditableList extends React.Component> { + static defaultProps = defaultProps as Props; @observable currentNewItem = ""; + @autobind() + onSubmit(val: string) { + const { add } = this.props + + if (val) { + add(val) + this.currentNewItem = "" + } + } + render() { - const { items, add, remove, display = String, placeholder = "Add new item..." } = this.props; + const { items, remove, renderItem, placeholder } = this.props; return (
-
+
{ - if (val) { - add(val); - } - this.currentNewItem = ""; - }} + onSubmit={this.onSubmit} placeholder={placeholder} onChange={val => this.currentNewItem = val} />
-
+
{ items .map((item, index) => [ - {display(item)}, -
+ {renderItem(item, index)}, +
remove(({ index, oldItem: item }))} />
])