import React, { HTMLProps, useMemo, useState } from "react"; import { FormControl, Grid, Input, InputLabel, Typography, FormHelperText, TextField, FormGroup, FormControlLabel, Checkbox, FormLabel, Button } from "@material-ui/core"; import { KeyboardDatePicker as DatePicker } from "@material-ui/pickers"; import { CompanyForm } from "@/forms/company"; import { StudentForm } from "@/forms/student"; import { sampleStudent } from "@/provider/dummy/student"; import { Course, Internship, InternshipType, internshipTypeLabels } from "@/data"; import { Nullable } from "@/helpers"; import moment, { Moment } from "moment"; import { computeWorkingHours } from "@/utils/date"; import { Autocomplete } from "@material-ui/lab"; import { formFieldProps } from "@/forms/helpers"; import { emptyInternship } from "@/provider/dummy/internship"; export type InternshipFormProps = {} export type InternshipFormSectionProps = { internship: Nullable, onChange: (internship: Nullable) => void, } export const InternshipTypeItem = ({ type, ...props }: { type: InternshipType } & HTMLProps) => { const info = internshipTypeLabels[type]; return ( { info.label } { info.description && { info.description } } ) } const InternshipProgramForm = ({ internship, onChange }: InternshipFormSectionProps) => { const fieldProps = formFieldProps(internship, onChange); const course = internship.intern?.course as Course; return ( } getOptionLabel={ (option: InternshipType) => internshipTypeLabels[option].label } renderOption={ (option: InternshipType) => } options={ Object.values(InternshipType) as InternshipType[] } disableClearable { ...fieldProps("type", (event, value) => value) as any } /> { internship.type === InternshipType.Other && } Realizowane punkty programu praktyk (minimum 3) { course.possibleProgramEntries.map(entry => { return ( } /> ) }) } ) } const InternshipDurationForm = ({ internship }: InternshipFormSectionProps) => { const [startDate, setStartDate] = useState(internship.startDate); const [endDate, setEndDate] = useState(internship.endDate); const [overrideHours, setHoursOverride] = useState(null) const [workingHours, setWorkingHours] = useState(40) const computedHours = useMemo(() => startDate && endDate && computeWorkingHours(startDate, endDate, workingHours / 5), [startDate, endDate, workingHours]); const hours = useMemo(() => overrideHours !== null ? overrideHours : computedHours || null, [overrideHours, computedHours]); const weeks = useMemo(() => hours !== null ? Math.floor(hours / 40) : null, [ hours ]); return ( Wymiar etatu setWorkingHours(parseInt(ev.target.value) || 0) } fullWidth /> Liczba godzin w tygodniu roboczym Łączna liczba godzin setHoursOverride(parseInt(ev.target.value) || 0) } fullWidth /> Liczba tygodni Wyliczona automatycznie ); } export const InternshipForm: React.FunctionComponent = props => { const [internship, setInternship] = useState>({ ...emptyInternship, intern: sampleStudent }) return ( Dane osoby odbywającej praktykę Rodzaj i program praktyki Czas trwania praktyki Miejsce odbywania praktyki Wyślij ) }