Skip to content

Commit

Permalink
[TC-1003] form schema (#541)
Browse files Browse the repository at this point in the history
* wip: schemas and fields

* fix: make variable names same as in constants.ts

---------

Co-authored-by: Leon <[email protected]>
  • Loading branch information
chelsea-EYDS and leon-ey authored Feb 27, 2025
1 parent f7b47ce commit fcffbd5
Show file tree
Hide file tree
Showing 3 changed files with 415 additions and 23 deletions.
14 changes: 12 additions & 2 deletions frontend/src/pages/intake-form/IntakeForm.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@ import { ExperienceRoles } from './pages/ExperienceRoles';
import { Skills } from './pages/Skills';
import { ReviewAndSubmit } from './pages/ReviewAndSubmit';
import { Complete } from './pages/Complete';
import { personalDetailsSchema, programSelectionSchema } from './validation';
import { personalDetails, programFields } from './fields';
import { useRoleContext } from '@/providers';
import { useKeycloak } from '@react-keycloak/web';
import {
experienceRolesSchema,
personalInfoSchema,
Expand All @@ -13,8 +17,9 @@ import {
} from './validation';
import { personalInfoFields, programFields } from './fields';
import { useKeycloak } from '@react-keycloak/web';

const IntakeForm = () => {

const { keycloak } = useKeycloak();
const { tokenParsed } = keycloak;

Expand All @@ -27,16 +32,21 @@ const IntakeForm = () => {
<Formik
initialValues={{
programFields,

personalDetails: {
...personalDetails,

personalInfoFields: {
...personalInfoFields,

firstName: tokenParsed.given_name,
lastName: tokenParsed.family_name,
},
// ...etc
}}
validationSchema={{
programSelectionSchema,
personalInfoSchema,
personalDetailsSchema,
experienceRolesSchema,
skillsSchema,
}}
Expand Down
275 changes: 261 additions & 14 deletions frontend/src/pages/intake-form/fields.ts
Original file line number Diff line number Diff line change
@@ -1,38 +1,285 @@
import { Program } from '@/common';
// common
import {
BcwsRoleInterface,
Languages,
Location,
PersonnelTool,
Program,
} from '@/common';

export interface ProgramFields {
program?: Program;
}
// program selection
// core team program selection
export const programFields: ProgramFields = {
program: undefined,
};

export interface PersonalInfoFields {
// acknowledgement for selected program stream(s)
export interface AcknowledgementEmcr {
expectations: boolean;
approvedBySupervisor: boolean;
}

export type AcknowledgementBcws = AcknowledgementEmcr & {
orientation: boolean;
willingnessStatement: boolean;
parQ: boolean;
};

export type AcknowledgementBoth = AcknowledgementEmcr & AcknowledgementBcws;

export const acknowledgementEmcr: AcknowledgementEmcr = {
expectations: false,
approvedBySupervisor: false,
};

export const acknowledgementBcws: AcknowledgementBcws = {
expectations: false,
approvedBySupervisor: false,
orientation: false,
willingnessStatement: false,
parQ: false,
};

export const acknowledgementBoth: AcknowledgementBoth = {
expectations: false,
approvedBySupervisor: false,
orientation: false,
willingnessStatement: false,
parQ: false,
};

// personal & employee information

// personal details

export interface PersonalDetails {
firstName: string;
lastName: string;
email: string;
// ...etc
primaryPhone: string;
secondaryPhone?: string;
homeLocation?: Location;
}
// personal info
export const personalInfoFields: PersonalInfoFields = {
export const personalDetails: PersonalDetails = {
firstName: '',
lastName: '',
primaryPhone: '',
secondaryPhone: '',
homeLocation: undefined,
};

// employment details

export interface EmploymentDetails {
jobTitle: string;
employeeId: string;
email: string;
workPhone: string;
ministry: string;
division: string;
paylistId: string;
purchaseCardHolder: boolean;
}

export const employmentDetails: EmploymentDetails = {
jobTitle: '',
employeeId: '',
email: '',
// ...etc
workPhone: '',
ministry: '',
division: '',
paylistId: '',
purchaseCardHolder: false,
};

// supervisor and liaison details, travel preferences

export interface SupervisorDetails {
supervisorFirstName: string;
supervisorLastName: string;
supervisorEmail: string;
supervisorPhone?: string;
}
export interface LiaisonDetails {
liaisonUnknown?: boolean;
liaisonFirstName?: string;
liaisonLastName?: string;
liaisonEmail?: string;
liaisonPhoneNumber?: string;
}
export interface TravelDetails {
travelPreferences: string;
}

export const supervisorDetails: SupervisorDetails = {
supervisorFirstName: '',
supervisorLastName: '',
supervisorEmail: '',
supervisorPhone: '',
};

export const liaisonDetails: LiaisonDetails = {
liaisonUnknown: false,
liaisonFirstName: '',
liaisonLastName: '',
liaisonEmail: '',
liaisonPhoneNumber: '',
};

export const travelDetails: TravelDetails = {
travelPreferences: '',
};

// emergency contact details

export interface EmergencyContactDetails {
emergencyContactFirstName: string;
emergencyContactLastName: string;
emergencyContactPhoneNumber: string;
emergencyContactRelationship: string;
}

export const emergencyContactDetails: EmergencyContactDetails = {
emergencyContactFirstName: '',
emergencyContactLastName: '',
emergencyContactPhoneNumber: '',
emergencyContactRelationship: '',
};

// experience & roles
// experience and section interests

// skills
// emcr section(s) interest

// review and submit
export interface GeneralEmergencyManagementExperience {
directExperience: boolean;
preocExperience: boolean;
peccExperience: boolean;
indigenousExperience: boolean;
}

export const generalEmergencyManagementExperience: GeneralEmergencyManagementExperience =
{
directExperience: false,
preocExperience: false,
peccExperience: false,
indigenousExperience: false,
};

export interface SectionChoiceEmcr {
firstChoiceFunction: string;
secondChoiceFunction?: string;
thirdChoiceFunction?: string;
}

export const sectionChoiceEmcr: SectionChoiceEmcr = {
firstChoiceFunction: '',
secondChoiceFunction: '',
thirdChoiceFunction: '',
};

export interface SectionInterestEmcr {
advancePlanningUnit?: boolean;
deputyDirector?: boolean;
ess?: boolean;
finance?: boolean;
firstNationsBranch?: boolean;
liaison?: boolean;
logistics?: boolean;
operations?: boolean;
planning?: boolean;
recovery?: boolean;
}

export const sectionInterestEmcr: SectionInterestEmcr = {
advancePlanningUnit: false,
deputyDirector: false,
ess: false,
finance: false,
firstNationsBranch: false,
liaison: false,
logistics: false,
operations: false,
planning: false,
recovery: false,
};

// bcws section(s) & role(s) interest

export interface SectionChoiceBcws {
firstChoiceSection: string;
secondChoiceSection?: string;
thirdChoiceSection?: string;
}

export const sectionChoiceBcws: SectionChoiceBcws = {
firstChoiceSection: '',
secondChoiceSection: '',
thirdChoiceSection: '',
};

export interface SectionRolesBcws {
planning?: BcwsRoleInterface[];
logistics?: BcwsRoleInterface[];
finance?: BcwsRoleInterface[];
operations?: BcwsRoleInterface[];
command?: BcwsRoleInterface[];
aviation?: BcwsRoleInterface[];
}

export const sectionRolesBcws: SectionRolesBcws = {
planning: [],
logistics: [],
finance: [],
operations: [],
command: [],
aviation: [],
};

// other skills & qualifications

export interface LanguageSkills {
languages?: Languages[];
}

export const languageSkills: LanguageSkills = {
languages: [],
};

export interface SoftwareSkills {
tools?: PersonnelTool[];
}

export const softwareSkills: SoftwareSkills = {
tools: [],
};

export interface OtherCertifications {
highestOfaCompleted?: string;
driverLicenseQualifications?: string[];
certifiedPfa: string;
otherCertifications?: string[];
}

export const otherCertifications: OtherCertifications = {
highestOfaCompleted: '',
driverLicenseQualifications: [],
certifiedPfa: '',
otherCertifications: [],
};

// review & submit

export interface ReviewAndSubmit {
acknowledgeSubmit: boolean;
}

export const reviewAndSubmit: ReviewAndSubmit = {
acknowledgeSubmit: false,
};

// form interface
export interface IntakeFormInterface {
programFields: ProgramFields
personalInfoFields: PersonalInfoFields

programFields: ProgramFields;
personalDetails: PersonalDetails;
}
Loading

0 comments on commit fcffbd5

Please sign in to comment.