diff --git a/manager-dashboard/app/views/NewProject/BasicProjectInfoForm/index.tsx b/manager-dashboard/app/views/NewProject/BasicProjectInfoForm/index.tsx new file mode 100644 index 000000000..648f5d3ef --- /dev/null +++ b/manager-dashboard/app/views/NewProject/BasicProjectInfoForm/index.tsx @@ -0,0 +1,202 @@ +import React from 'react'; +import { EntriesAsList, ObjectError, SetBaseValueArg } from '@togglecorp/toggle-form'; +import TextInput from '#components/TextInput'; +import { generateProjectName, PartialProjectFormType } from '#views/NewProject/utils'; +import { labelSelector, valueSelector } from '#utils/common'; +import NumberInput from '#components/NumberInput'; +import TextArea from '#components/TextArea'; +import ImageInput from '#components/ImageInput'; +import SelectInput from '#components/SelectInput'; +import useProjectOptions from '#views/NewProject/useProjectOptions'; +import styles from '#views/NewProject/styles.css'; + +export interface Props { + className?: string; + submissionPending: boolean; + value: T; + setValue: (value: SetBaseValueArg, doNotReset?: boolean) => void; + setFieldValue: (...entries: EntriesAsList) => void; + error: ObjectError | undefined; +} + +function BasicProjectInfoForm(props: Props) { + const { + submissionPending, + value, + setValue, + setFieldValue, + error, + } = props; + + const { + teamOptions, + tutorialOptions, + teamsPending, + tutorialsPending, + organisationOptions, + organisationsPending, + } = useProjectOptions(value?.projectType); + + React.useEffect(() => { + setFieldValue(tutorialOptions?.[0]?.value, 'tutorialId'); + }, [setFieldValue, value?.projectType, tutorialOptions]); + + const setFieldValueAndGenerateName = React.useCallback( + (...entries: EntriesAsList) => { + // NOTE: we need to use setFieldValue to set error on change + setFieldValue(...entries); + + setValue((oldValue) => { + const name = generateProjectName( + oldValue.projectTopic, + oldValue.projectNumber, + oldValue.projectRegion, + oldValue.requestingOrganisation, + ); + return { + ...oldValue, + name, + }; + }, true); + }, + [setFieldValue, setValue], + ); + return ( + + <> +
+ + +
+
+ + +
+