import * as React from '@theia/core/shared/react'; import { BoardUserField } from '../../../common/protocol'; import { nls } from '@theia/core/lib/common'; export const UserFieldsComponent = ({ initialBoardUserFields, updateUserFields, cancel, accept, }: { initialBoardUserFields: BoardUserField[]; updateUserFields: (userFields: BoardUserField[]) => void; cancel: () => void; accept: () => Promise; }): React.ReactElement => { const [boardUserFields, setBoardUserFields] = React.useState< BoardUserField[] >(initialBoardUserFields); const [uploadButtonDisabled, setUploadButtonDisabled] = React.useState(true); const firstInputElement = React.useRef(null); React.useEffect(() => { setBoardUserFields(initialBoardUserFields); }, [initialBoardUserFields]); const updateUserField = (index: number) => (e: React.ChangeEvent) => { const newBoardUserFields = [...boardUserFields]; newBoardUserFields[index].value = e.target.value; setBoardUserFields(newBoardUserFields); }; const allFieldsHaveValues = (userFields: BoardUserField[]): boolean => { return ( userFields && userFields.length > 0 && userFields .map((field: BoardUserField): boolean => { return field.value.length > 0; }) .reduce((previous: boolean, current: boolean): boolean => { return previous && current; }) ); }; React.useEffect(() => { updateUserFields(boardUserFields); setUploadButtonDisabled(!allFieldsHaveValues(boardUserFields)); if (firstInputElement.current) { firstInputElement.current.focus(); } }, [boardUserFields, updateUserFields]); return (
{boardUserFields.map((field, index) => { return (
); })}
); };