import "./SearchForm.scss"; import React from "react"; import AddButton from "../ui/AddButton"; import DeleteButton from "../ui/DeleteButton"; import { FormSearch } from "../../../shared/SettingData"; interface Props { value: FormSearch; onChange: (value: FormSearch) => void; onBlur: () => void; } class SearchForm extends React.Component { public static defaultProps: Props = { value: FormSearch.fromJSON({ default: "", engines: [] }), onChange: () => {}, onBlur: () => {}, }; render() { const value = this.props.value.toJSON(); return (
Name
URL
Default
{value.engines.map((engine, index) => { return (
); })}
); } // eslint-disable-next-line max-statements bindValue(e: any) { const value = this.props.value.toJSON(); const name = e.target.name; const index = Number(e.target.getAttribute("data-index")); const next: typeof value = { default: value.default, engines: value.engines.slice(), }; if (name === "name") { next.engines[index][0] = e.target.value; next.default = value.engines[index][0]; } else if (name === "url") { next.engines[index][1] = e.target.value; } else if (name === "default") { next.default = value.engines[index][0]; } else if (name === "add") { next.engines.push(["", ""]); } else if (name === "delete" && value.engines.length > 1) { next.engines.splice(index, 1); if (value.engines[index][0] === value.default) { const nextIndex = Math.min(index, next.engines.length - 1); next.default = next.engines[nextIndex][0]; } } this.props.onChange(FormSearch.fromJSON(next)); if (name === "delete" || name === "default") { this.props.onBlur(); } } } export default SearchForm;