import React, { FunctionComponent, Fragment, ReactNode, ChangeEvent, useState, useEffect } from "react"; import * as style from "./style.module.css"; export interface EditableTextProps { value: string class?: string editIconClass?: string onChange?: (value: string) => void render?: (value: string) => ReactNode } const EditableText: FunctionComponent = ({ onChange, value, render, ...props }) => { const [ internalValue, setInternalValue ] = useState(value); const [ editMode, setEditMode ] = useState(false); useEffect(() => { setInternalValue(value); }, [value]) const onEditIconClick = () => { setEditMode(true); }; const onValidateButtonClick = () => { setEditMode(false); if (internalValue === value) return; if (onChange) onChange(internalValue); } const onValueChange = (evt: ChangeEvent) => { const currentTarget = evt.currentTarget as HTMLInputElement; setInternalValue(currentTarget.value); }; return (
{ editMode ?
✔️
: { render ? render(internalValue) : {internalValue} } 🖋️ }
); }; export default EditableText;