Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 4x 4x 4x 4x 4x 4x 4x 4x 2x | import { Alert } from "@mui/material";
import Redirect from "components/Redirect";
import PrivateFeedback from "features/profile/view/leaveReference/formSteps/PrivateFeedback";
import SubmitReference from "features/profile/view/leaveReference/formSteps/submit/SubmitReference";
import Text from "features/profile/view/leaveReference/formSteps/Text";
import { useTranslation } from "i18n";
import { GLOBAL, PROFILE } from "i18n/namespaces";
import { useState } from "react";
import { leaveReferenceBaseRoute, ReferenceStep } from "routes";
import DidStay from "./formSteps/DidStay";
import ThankYouReference from "./formSteps/submit/ThankYouReference";
export type ReferenceContextFormData = {
didStay?: boolean;
text: string;
wasAppropriate: string;
rating?: number;
privateText?: string;
};
export interface ReferenceStepProps {
referenceData: ReferenceContextFormData;
setReferenceValues: (values: ReferenceContextFormData) => void;
referenceType: string;
hostRequestId?: number;
}
interface ReferenceRouteParams {
referenceType: string;
userId: number;
hostRequestId?: number;
step: ReferenceStep;
}
export default function ReferenceForm({
referenceType,
userId,
hostRequestId,
step,
}: ReferenceRouteParams) {
const { t } = useTranslation([GLOBAL, PROFILE]);
const [referenceData, setReferenceData] = useState<ReferenceContextFormData>({
didStay: undefined,
text: "",
wasAppropriate: "",
rating: undefined,
});
const setReferenceValues = (values: ReferenceContextFormData) => {
setReferenceData((prevData) => ({
...prevData,
...values,
}));
};
const isDidStaySkipped =
referenceData.didStay === undefined &&
step !== "did-stay" &&
referenceType !== "friend";
const isPrivateFeedbackSkipped =
referenceData.wasAppropriate === "" &&
step !== "private-feedback" &&
step !== "did-stay";
const redirectTo =
referenceType === "friend"
? `${leaveReferenceBaseRoute}/${referenceType}/${userId}`
: `${leaveReferenceBaseRoute}/${referenceType}/${userId}/${hostRequestId}`;
if (isDidStaySkipped || isPrivateFeedbackSkipped) {
return <Redirect to={redirectTo} />;
}
switch (step) {
case "did-stay":
return (
<DidStay
referenceData={referenceData}
setReferenceValues={setReferenceValues}
referenceType={referenceType}
hostRequestId={hostRequestId}
/>
);
case "private-feedback":
return (
<PrivateFeedback
referenceData={referenceData}
setReferenceValues={setReferenceValues}
referenceType={referenceType}
hostRequestId={hostRequestId}
/>
);
case "reference":
return (
<Text
referenceData={referenceData}
setReferenceValues={setReferenceValues}
referenceType={referenceType}
hostRequestId={hostRequestId}
/>
);
case "submit":
return (
<SubmitReference
referenceData={referenceData}
referenceType={referenceType}
hostRequestId={hostRequestId}
userId={userId}
/>
);
case "thank-you":
return <ThankYouReference />;
default:
return (
<Alert severity="error">
{t("profile:leave_reference.invalid_step")}
</Alert>
);
}
}
|