diff --git a/client/dist.zip b/client/dist.zip index 0560848a89e5d8fae771c5c8a89fd8985f69ec20..3c991ea850adec2c924d16ba8a5e738844f7b59b 100644 Binary files a/client/dist.zip and b/client/dist.zip differ diff --git a/client/src/components/Card.tsx b/client/src/components/Card.tsx index 8cfe65dae042555128e375425e4130a84cf7ac30..5868fd867cf02a8b77b0daa5cde687b74f5117e1 100644 --- a/client/src/components/Card.tsx +++ b/client/src/components/Card.tsx @@ -1,18 +1,26 @@ import { JSX } from "solid-js" interface Props { - img?: string; - theme?: string; - children: JSX.Element; + img?: string + theme?: string + children: JSX.Element } export default function Cards(props: Props) { return ( - <div class={"bg-white border border-zinc-200 rounded-lg shadow transition" + props.theme}> - {(props.img != undefined) && <div class="rounded-t-lg w-full h-72 bg-cover bg-bottom" style={"background-image: url('" + props.img + "')"} ></div>} - <div class="p-5"> - {props.children} - </div> + <div + class={ + "rounded-lg border border-zinc-200 bg-white shadow transition" + + props.theme + } + > + {props.img !== undefined && ( + <div + class="h-72 w-full rounded-t-lg bg-cover bg-bottom" + style={"background-image: url('" + props.img + "')"} + ></div> + )} + <div class="p-5">{props.children}</div> </div> - ); + ) } diff --git a/client/src/components/ParticipantAdditionnalInfo.tsx b/client/src/components/ParticipantAdditionnalInfo.tsx index 8a2d6266f362a07d1010a43519a9505d0e72f716..2114e160701bf62aedc43c50fcec500cbf49d65d 100644 --- a/client/src/components/ParticipantAdditionnalInfo.tsx +++ b/client/src/components/ParticipantAdditionnalInfo.tsx @@ -85,18 +85,14 @@ export default function ParticipantAdditionnalInfo() { </p> <p> <span class="font-medium"> - Dietary Restrictions: - </span>{" "} + Dietary Restrictions:{" "} + </span> {user().dietary_restrictions} </p> <p> <span class="font-medium">Allergies:</span>{" "} {user().allergies} </p> - <p> - <span class="font-medium">Supper:</span>{" "} - {user().supper} - </p> </div> {/* Emergency Info */} @@ -141,37 +137,47 @@ export default function ParticipantAdditionnalInfo() { </h2> <p> <span class="font-medium">Study Proof:</span>{" "} - <DownloadPdf - base64={user().study_proof} - file_name={ - user().first_name + - "_" + - user().last_name + - "_study_proof.pdf" - } - /> + {user().study_proof === "" && "No study proof"} + {user().study_proof !== "" && ( + <DownloadPdf + base64={user().study_proof} + file_name={ + user().first_name + + "_" + + user().last_name + + "_study_proof.pdf" + } + /> + )} </p> <p> <span class="font-medium">Photo:</span>{" "} - <img - width="256" - height="256" - src={ - "data:image/png;base64," + user().photo - } - ></img> + {user().cv === "" && "No photo uploaded"} + {user().cv !== "" && ( + <img + width="256" + height="256" + src={ + "data:image/png;base64," + + user().photo + } + ></img> + )} </p> <p> <span class="font-medium">CV:</span>{" "} - <DownloadPdf - base64={user().cv} - file_name={ - user().first_name + - "_" + - user().last_name + - "_cv.pdf" - } - /> + {user().cv === "" && "No CV uploaded"} + {user().cv !== "" && ( + <DownloadPdf + base64={user().cv} + file_name={ + user().first_name + + "_" + + user().last_name + + "_cv.pdf" + } + /> + )} </p> <p> <span class="font-medium"> diff --git a/client/src/components/forms-component/YesNo.tsx b/client/src/components/forms-component/YesNo.tsx index b8d8b77c518bb8cb3dc3e356e4faac024627fbc4..5411de46443cde1907e55dd1f36e5d473f783b0b 100644 --- a/client/src/components/forms-component/YesNo.tsx +++ b/client/src/components/forms-component/YesNo.tsx @@ -6,7 +6,7 @@ import { t } from "../../stores/locale" type YesNoProps = { ref: (element: HTMLInputElement) => void name: string - value?: "yes" | "no" + value?: boolean onInput: JSX.EventHandler<HTMLInputElement, InputEvent> onChange: JSX.EventHandler<HTMLInputElement, Event> onBlur: JSX.EventHandler<HTMLInputElement, FocusEvent> @@ -49,7 +49,7 @@ export function YesNo(props: YesNoProps) { type="radio" id={`${props.name}-yes`} value="yes" - checked={props.value === "yes"} + checked={props.value} aria-invalid={!!props.error} aria-errormessage={`${props.name}-error`} /> @@ -64,7 +64,7 @@ export function YesNo(props: YesNoProps) { type="radio" id={`${props.name}-no`} value="no" - checked={props.value === "no"} + checked={!props.value} aria-invalid={!!props.error} aria-errormessage={`${props.name}-error`} /> diff --git a/client/src/components/forms/AdditionnalInfoForm.tsx b/client/src/components/forms/AdditionnalInfoForm.tsx index 97e15eddab4d79fa54e5435edd1134c133767b08..fb04a0ab5459823d673db471d3a6ff84c5e3bfbc 100644 --- a/client/src/components/forms/AdditionnalInfoForm.tsx +++ b/client/src/components/forms/AdditionnalInfoForm.tsx @@ -77,6 +77,7 @@ export function AdditionalInfoForm() { const id = localStorage.getItem("id") if (!id) return const response = await getParticipant(id) + console.log(response) if (!response.error) { const participant = response as ParticipantInfo setInfo(participant) @@ -104,7 +105,7 @@ export function AdditionalInfoForm() { {(field, props) => ( <YesNo {...props} - value={"no"} + value={field.value || false} error={field.error} label={t("additionalInfo.food")} required @@ -331,7 +332,7 @@ export function AdditionalInfoForm() { {(field, props) => ( <YesNo {...props} - value={"no"} + value={field.value || false} error={field.error} label={t("additionalInfo.hasMonthlyOpusCard")} required @@ -344,18 +345,22 @@ export function AdditionalInfoForm() { <FileInput {...props} error={field.error} + value={ + (typeof field.value !== "string" && field.value) || + undefined + } label={t("additionalInfo.studyProofLabel")} accept=".pdf" /> )} </Field> - {info() && ( + {info() && info()?.study_proof && ( <DownloadPdf - base64={info().study_proof} + base64={info()?.study_proof as unknown as string} file_name={ - info().first_name + + info()?.first_name + "_" + - info().last_name + + info()?.last_name + "_study_proof.pdf" } /> @@ -370,17 +375,21 @@ export function AdditionalInfoForm() { <FileInput {...props} error={field.error} + value={ + (typeof field.value !== "string" && field.value) || + undefined + } label={t("additionalInfo.photoLabel")} accept=".png" required /> )} </Field> - {info() && info().photo && ( + {info() && info()?.photo && ( <img width="256" height="256" - src={"data:image/png;base64," + info().photo} + src={"data:image/png;base64," + info()?.photo} ></img> )} @@ -393,6 +402,10 @@ export function AdditionalInfoForm() { <FileInput {...props} error={field.error} + value={ + (typeof field.value !== "string" && field.value) || + undefined + } label={t("additionalInfo.cvLabel")} accept=".pdf" required @@ -400,11 +413,11 @@ export function AdditionalInfoForm() { )} </Field> - {info() && ( + {info() && info()?.cv && ( <DownloadPdf - base64={info().cv as unknown as string} + base64={info()?.cv as unknown as string} file_name={ - info().first_name + "_" + info().last_name + "_cv.pdf" + info()?.first_name + "_" + info()?.last_name + "_cv.pdf" } /> )} @@ -413,7 +426,10 @@ export function AdditionalInfoForm() { {(field, props) => ( <TextInput {...props} - value={field.value || ""} + value={ + (typeof field.value !== "string" && field.value) || + undefined + } error={field.error} label="Commentaires" class="w-full"