import React, { Component } from "react"; import styled from "styled-components"; type PropsType = { label?: string; values: string[]; setValues: (x: string[]) => void; width?: string; disabled?: boolean; }; type StateType = {}; export default class InputArray extends Component { dict2arr = (dict: Record) => { let arr = []; for (let key in dict) { arr.push(`${key}: ${dict[key]}`); } return arr; }; renderDeleteButton = (values: string[], i: number) => { if (!this.props.disabled) { return ( { let v = [...values]; v.splice(i, 1); this.props.setValues(v); }} > cancel ); } }; renderInputList = (values: string[]) => { return ( <> {values.map((value: string, i: number) => { return ( { let v = [...values]; v[i] = e.target.value; this.props.setValues(v); }} disabled={this.props.disabled} /> {this.renderDeleteButton(values, i)} ); })} ); }; render() { let { values } = this.props; if (!Array.isArray(values)) { values = this.dict2arr(values); } return ( {values.length === 0 ? <> : this.renderInputList(values)} { let v = [...values]; v.push(""); this.props.setValues(v); }} > add Add Row ); } } const AddRowButton = styled.div` display: flex; align-items: center; margin-top: 5px; width: 270px; font-size: 13px; color: #aaaabb; height: 30px; border-radius: 3px; cursor: pointer; background: #ffffff11; :hover { background: #ffffff22; } > i { color: #ffffff44; font-size: 16px; margin-left: 8px; margin-right: 10px; display: flex; align-items: center; justify-content: center; } `; const DeleteButton = styled.div` width: 15px; height: 15px; display: flex; align-items: center; margin-left: 8px; margin-top: -3px; justify-content: center; > i { font-size: 17px; color: #ffffff44; display: flex; align-items: center; justify-content: center; cursor: pointer; :hover { color: #ffffff88; } } `; const InputWrapper = styled.div` display: flex; align-items: center; `; const Input = styled.input` outline: none; border: none; margin-bottom: 5px; font-size: 13px; background: #ffffff11; border: 1px solid #ffffff55; border-radius: 3px; width: ${(props: { disabled?: boolean; width: string }) => props.width ? props.width : "270px"}; color: ${(props: { disabled?: boolean; width: string }) => props.disabled ? "#ffffff44" : "white"}; padding: 5px 10px; height: 35px; `; const Label = styled.div` color: #ffffff; margin-bottom: 10px; `; const StyledInputArray = styled.div` margin-bottom: 15px; margin-top: 22px; `;