diff --git a/api/src/app.controller.ts b/api/src/app.controller.ts index b6aec36..22b27b5 100644 --- a/api/src/app.controller.ts +++ b/api/src/app.controller.ts @@ -7,10 +7,12 @@ import { import { FeatureFlagValue } from '@azure/app-configuration'; import { Public } from '@noahspan/noahspan-modules'; import { Person } from '@microsoft/microsoft-graph-types'; +import { AppService } from './app.service'; @Controller() export class AppController { constructor( + private readonly appService: AppService, private readonly appConfigService: AppConfigService, private readonly msGraphService: MsGraphService ) {} @@ -66,9 +68,10 @@ export class AppController { @Query('search') search: any ): Promise { try { + const accessToken: string = headers.authorization.replace('Bearer ', ''); const personSearchResults: Person[] = - await getPersonSearshResults(search); - + await this.appService.getPersonSearchResults(accessToken, search); + console.log(personSearchResults); return personSearchResults; } catch (error) { return error; diff --git a/api/src/app.service.ts b/api/src/app.service.ts index 975acd0..75b8c72 100644 --- a/api/src/app.service.ts +++ b/api/src/app.service.ts @@ -10,18 +10,35 @@ export class AppService { return 'Hello World!'; } - async getPersonSearchResults(accessToken: string): Person[] { - const graphToken: string = await this.msGraphService.getMsGraphAuth( - accessToken, - ['user.read'] - ); - console.log(graphToken); - const client: MsGraphClient = - await this.msGraphService.getMsGraphClientDelegated(graphToken); - const results: any = await client.api(`me/people/?$search=${search}`).get(); - console.log(results); - const personResults: Person[] = results.values ? results.values : []; + async getPersonSearchResults( + accessToken: string, + search: string + ): Promise { + try { + const graphToken: string = await this.msGraphService.getMsGraphAuth( + accessToken, + ['user.read'] + ); + const client: MsGraphClient = + await this.msGraphService.getMsGraphClientDelegated(graphToken); + const results: any = await client + .api(`me/people/?$search=${search}`) + .get(); + let personResults: Person[]; - return personResults; + if (results.value) { + personResults = results.value.filter((result: Person) => { + if (result.userPrincipalName !== null) { + return result; + } + }); + } else { + personResults = []; + } + + return personResults; + } catch (error) { + throw new Error(error); + } } } diff --git a/app/package.json b/app/package.json index 5a03cbb..1ae382e 100644 --- a/app/package.json +++ b/app/package.json @@ -16,7 +16,7 @@ "@fortawesome/free-regular-svg-icons": "^6.5.2", "@fortawesome/free-solid-svg-icons": "^6.5.2", "@fortawesome/react-fontawesome": "^0.2.2", - "@noahspan/noahspan-components": "^0.4.5", + "@noahspan/noahspan-components": "^0.4.9", "axios": "^1.7.2", "framer-motion": "^11.1.7", "react": "^18.2.0", diff --git a/app/src/components/pilotForm/PilotForm.tsx b/app/src/components/pilotForm/PilotForm.tsx index 5f87f83..169e799 100644 --- a/app/src/components/pilotForm/PilotForm.tsx +++ b/app/src/components/pilotForm/PilotForm.tsx @@ -4,33 +4,42 @@ import { Accordion, AccordionBody, AccordionHeader, + Button, ChevronDownIcon, ChevronUpIcon, DatePicker, + Drawer, + DrawerBody, + DrawerHeader, + DrawerFooter, Input, Option, PeoplePicker, - Select + Select, + Typography } from '@noahspan/noahspan-components'; import PilotFormCertificates from '../pilotFormCertificates/PilotFormCertificates'; import PilotFormEndorsements from '../pilotFormEndorsements/PilotFormEndorsements'; -// import { Person } from '@microsoft/microsoft-graph-types'; +import { Person } from '@microsoft/microsoft-graph-types'; import { AxiosInstance, AxiosResponse } from 'axios'; import { useHttpClient } from '../../hooks/httpClient/UseHttpClient'; import { useAccessToken } from '../../hooks/accessToken/UseAcessToken'; -const PilotForm: React.FC = () => { +interface PilotFormProps { + isDrawerOpen: boolean; + onOpenCloseDrawer: () => void; +} + +const PilotForm: React.FC = ({ + isDrawerOpen, + onOpenCloseDrawer +}: PilotFormProps) => { const httpClient: AxiosInstance = useHttpClient(); - const [open, setOpen] = useState(0); - const [peoplePickerResults, setPeoplePickerResults] = useState([]); + const [peoplePickerResults, setPeoplePickerResults] = useState([]); const [isPeoplePickerLoading, setIsPeoplePickerLoading] = useState(false); const { getAccessToken } = useAccessToken(); - const handleOpen = (value: number) => { - setOpen(open === value ? 0 : value); - }; const methods = useForm(); - const { control, handleSubmit } = methods; const onSubmit = (data: unknown) => { console.log(data); @@ -42,6 +51,8 @@ const PilotForm: React.FC = () => { setIsPeoplePickerLoading(true); try { + methods.setValue('name', event.target.value); + const searchString: string = event.target.value; const accessToken: string = await getAccessToken(); const response: AxiosResponse = await httpClient.get( @@ -62,24 +73,33 @@ const PilotForm: React.FC = () => { }; return ( - -
- : } - > - handleOpen(1)}>Info - + + + + +
+
+ Info +
+
( + control={methods.control} + render={({ field: { disabled, value } }) => ( handlePeoplePickerOnChange(event), + value: value }} loading={isPeoplePickerLoading} /> @@ -89,115 +109,115 @@ const PilotForm: React.FC = () => {
( - - )} + control={methods.control} + render={({ field }) => } />
( - - )} + control={methods.control} + render={({ field }) => } />
( - - )} + control={methods.control} + render={({ field }) => } />
( - - )} - /> -
-
- - - : } - > - handleOpen(2)}> - Certificates - - - - - - : } - > - handleOpen(3)}> - Endorsements - - - - - - : } - > - handleOpen(4)}> - Medical - - -
-
- ( - + )} />
+
+ } + /> +
+
+ } + /> +
+
+ Certificates +
+
+ +
+ Endorsements +
+
+ +
+ Medical +
+
+
+ { + return ( + + ); + }} + /> +
} />
-
-
- - + + +
+
+ +
+
+ +
+
+
+ + + ); }; diff --git a/app/src/components/pilotFormCertificates/PilotFormCertificates.tsx b/app/src/components/pilotFormCertificates/PilotFormCertificates.tsx index bd1c1f1..560cff1 100644 --- a/app/src/components/pilotFormCertificates/PilotFormCertificates.tsx +++ b/app/src/components/pilotFormCertificates/PilotFormCertificates.tsx @@ -59,7 +59,7 @@ const PilotFormCertificates: React.FC = ({ { + render={({ field }) => { return ; }} /> @@ -68,7 +68,7 @@ const PilotFormCertificates: React.FC = ({ { + render={({ field }) => { return ; }} /> diff --git a/app/src/components/pilotFormEndorsements/PilotFormEndorsements.tsx b/app/src/components/pilotFormEndorsements/PilotFormEndorsements.tsx index 50b4fa7..2917329 100644 --- a/app/src/components/pilotFormEndorsements/PilotFormEndorsements.tsx +++ b/app/src/components/pilotFormEndorsements/PilotFormEndorsements.tsx @@ -23,7 +23,7 @@ const PilotFormEndorsements: React.FC = ({ }); return ( -
+
{fields.map((field, index) => { return ( <> @@ -35,16 +35,16 @@ const PilotFormEndorsements: React.FC = ({ render={({ field }) => { return ( @@ -52,15 +52,6 @@ const PilotFormEndorsements: React.FC = ({ }} />
-
- { - return ; - }} - /> -
= () => { const [isDrawerOpen, setIsDrawerOpen] = useState(false); @@ -30,37 +22,11 @@ const Pilots: React.FC = () => { Add Pilot - - - - - - - -
-
- -
-
- -
-
-
-
+
); diff --git a/package-lock.json b/package-lock.json index b0ba1f5..9bdb70c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -74,7 +74,7 @@ "@fortawesome/free-regular-svg-icons": "^6.5.2", "@fortawesome/free-solid-svg-icons": "^6.5.2", "@fortawesome/react-fontawesome": "^0.2.2", - "@noahspan/noahspan-components": "^0.4.5", + "@noahspan/noahspan-components": "^0.4.9", "axios": "^1.7.2", "framer-motion": "^11.1.7", "react": "^18.2.0", @@ -3004,8 +3004,7 @@ "node_modules/@microsoft/microsoft-graph-types": { "version": "2.40.0", "resolved": "https://registry.npmjs.org/@microsoft/microsoft-graph-types/-/microsoft-graph-types-2.40.0.tgz", - "integrity": "sha512-1fcPVrB/NkbNcGNfCy+Cgnvwxt6/sbIEEFgZHFBJ670zYLegENYJF8qMo7x3LqBjWX2/Eneq5BVVRCLTmlJN+g==", - "dev": true + "integrity": "sha512-1fcPVrB/NkbNcGNfCy+Cgnvwxt6/sbIEEFgZHFBJ670zYLegENYJF8qMo7x3LqBjWX2/Eneq5BVVRCLTmlJN+g==" }, "node_modules/@motionone/animation": { "version": "10.18.0", @@ -3386,9 +3385,9 @@ "link": true }, "node_modules/@noahspan/noahspan-components": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/@noahspan/noahspan-components/-/noahspan-components-0.4.5.tgz", - "integrity": "sha512-OT2b0foCAhmoSBVlvwE/CCLuho+vii2LfCLWQxF+jZZH9/cA50uxkriJ0t25psNVhbKzsHurqcw9KkBPojJBUA==", + "version": "0.4.9", + "resolved": "https://registry.npmjs.org/@noahspan/noahspan-components/-/noahspan-components-0.4.9.tgz", + "integrity": "sha512-Cr+cQZkCjY2JQokQrhbgCTXdD4vzFHRL4t9D5sutdouHFJAsW+vx1Qj35EyZ1quOwaisLbmMc/UqJgZldcFPaw==", "dependencies": { "@fortawesome/fontawesome-svg-core": "^6.5.2", "@fortawesome/free-brands-svg-icons": "^6.5.2", @@ -3396,6 +3395,7 @@ "@fortawesome/free-solid-svg-icons": "^6.5.2", "@fortawesome/react-fontawesome": "^0.2.0", "@material-tailwind/react": "^2.1.9", + "@microsoft/microsoft-graph-types": "^2.40.0", "@tanstack/react-table": "^8.17.3", "date-fns": "^3.6.0", "framer-motion": "^11.1.9",