import * as React from "react"; import { Trigger } from "../versions"; interface IProps { name: string; description: string; triggers: Trigger[]; setValues(value: Trigger[]): void; errorMessage?: string; errorMessages: Map; } function TriggerSettings(props: IProps): React.JSX.Element { const { name, triggers, description, setValues, errorMessage } = props; const onClickAddButton = () => { setValues([{ value: "TODO...", type: "string" }, ...triggers]); }; const onClickRemoveButton = (index: number) => { return () => { const newTriggers = triggers .slice(0, index) .concat(triggers.slice(index + 1)); setValues(newTriggers); }; }; const onChangeType = (index: number) => { return (e: React.ChangeEvent) => { if (e.target.value === "regex" || e.target.value === "string") { const value = triggers[index].value; const newTriggers = [...triggers]; newTriggers[index] = { type: e.target.value as Trigger["type"], value }; setValues(newTriggers); } }; } const onChangeValue = (index: number) => { return (e: React.ChangeEvent) => { const type = triggers[index].type; const newTriggers = [...triggers]; newTriggers[index] = { type, value: decodeHiddenCharacters(e.target.value) }; setValues(newTriggers); }; }; return ( <>
{name}
{description}
{props.errorMessages.get("triggerWords") !== undefined && (
{errorMessage}
)}
{triggers.map((trigger: Trigger, index: number) => (
{(props.errorMessages.get(`triggers.${index}.value`) !== undefined || props.errorMessages.get(`triggers.${index}.type`) !== undefined) && (
{props.errorMessages.get(`triggers.${index}.value`) !== undefined && ( {props.errorMessages.get(`triggers.${index}.value`)} )} {props.errorMessages.get(`triggers.${index}.type`) !== undefined && ( {props.errorMessages.get(`triggers.${index}.type`)} )}
)}
))} ); } function encodeHiddenCharacters(value: string) { return value.replace("\t", "\\t").replace("\n", "\\n"); } function decodeHiddenCharacters(value: string) { return value.replace("\\t", "\t").replace("\\n", "\n"); } export default TriggerSettings;