From 00b91068c55f58ca2e09c65d6267934c1fc4a451 Mon Sep 17 00:00:00 2001 From: Mia Patrikios Date: Thu, 2 May 2024 12:09:15 -0400 Subject: [PATCH] Create decision form --- .../src/components/DecisionForm/index.tsx | 89 +++++++++++++++++++ .../applicant-tracking/src/types/decisions.ts | 18 ++++ package-lock.json | 60 ++++++++++++- package.json | 3 + 4 files changed, 168 insertions(+), 2 deletions(-) create mode 100644 apps/applicant-tracking/src/components/DecisionForm/index.tsx create mode 100644 apps/applicant-tracking/src/types/decisions.ts diff --git a/apps/applicant-tracking/src/components/DecisionForm/index.tsx b/apps/applicant-tracking/src/components/DecisionForm/index.tsx new file mode 100644 index 0000000..80077da --- /dev/null +++ b/apps/applicant-tracking/src/components/DecisionForm/index.tsx @@ -0,0 +1,89 @@ +import { + Box, + TextField, + RadioGroup, + Radio, + FormControlLabel, + FormControl, + FormLabel, + MenuItem, +} from '@mui/material'; +import React from 'react'; +import { DecisionFormData } from '../../types/decisions'; + +interface DecisionFormProps { + onChange: (formData: DecisionFormData) => void; +} + +export default function DecisionForm({ onChange }: DecisionFormProps) { + //create a state? + const [formData, setFormData] = React.useState({ + decision: 'Accepted', + reason: '', + role: 'Developer', + }); + + const handleChange = (event: React.ChangeEvent) => { + const { name, value } = event.target; + const newFormData = { ...formData, [name]: value }; + setFormData(newFormData); + onChange(newFormData); + }; + + return ( + + + Decision + + } + label="Accept" + /> + } + label="Reject" + /> + } + label="Waitlist" + /> + + + {/* reason field */} + + {/* /role field */} + + {' '} + Developer + Designer + + Learning Based Project + + Operations + + + ); +} diff --git a/apps/applicant-tracking/src/types/decisions.ts b/apps/applicant-tracking/src/types/decisions.ts new file mode 100644 index 0000000..db12d8a --- /dev/null +++ b/apps/applicant-tracking/src/types/decisions.ts @@ -0,0 +1,18 @@ +import { z } from 'zod'; + +export const zDecisionFormData = z.object({ + decision: z.union([ + z.literal('Accepted'), + z.literal('Rejected'), + z.literal('Waitlisted'), + ]), + reason: z.string().optional(), + role: z.union([ + z.literal('Developer'), + z.literal('Designer'), + z.literal('Learning Based Project'), + z.literal('Operations'), + ]), +}); + +export type DecisionFormData = z.infer; diff --git a/package-lock.json b/package-lock.json index 6c696fa..9210d6b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,6 +22,9 @@ "moment": "^2.30.1", "nx": "^17.1.3", "react-window": "^1.8.10" + }, + "devDependencies": { + "typescript": "^5.4.5" } }, "apps/admin-portal": { @@ -54,6 +57,19 @@ "typescript": "5.2.2" } }, + "apps/admin-portal/node_modules/typescript": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, "apps/applicant-tracking": { "version": "1.0.0", "dependencies": { @@ -85,6 +101,19 @@ "typescript": "5.2.2" } }, + "apps/applicant-tracking/node_modules/typescript": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, "apps/form-builder": { "version": "1.0.0", "dependencies": { @@ -116,6 +145,19 @@ "typescript": "5.2.2" } }, + "apps/form-builder/node_modules/typescript": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, "apps/member-portal": { "version": "1.0.0", "dependencies": { @@ -146,6 +188,19 @@ "typescript": "5.2.2" } }, + "apps/member-portal/node_modules/typescript": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, "node_modules/@aashutoshrathi/word-wrap": { "version": "1.2.6", "dev": true, @@ -9274,9 +9329,10 @@ } }, "node_modules/typescript": { - "version": "5.2.2", + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", "dev": true, - "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" diff --git a/package.json b/package.json index 8502479..2f70f1a 100644 --- a/package.json +++ b/package.json @@ -28,5 +28,8 @@ "moment": "^2.30.1", "nx": "^17.1.3", "react-window": "^1.8.10" + }, + "devDependencies": { + "typescript": "^5.4.5" } }