diff --git a/components/plus/PlusHomePage.tsx b/components/plus/PlusHomePage.tsx
index f636e22da..1c5552241 100644
--- a/components/plus/PlusHomePage.tsx
+++ b/components/plus/PlusHomePage.tsx
@@ -1,38 +1,93 @@
import { Box, Center, Divider, Flex, Stack } from "@chakra-ui/layout";
-import { Radio, RadioGroup } from "@chakra-ui/react";
+import {
+ Alert,
+ AlertDescription,
+ AlertTitle,
+ chakra,
+ Radio,
+ RadioGroup,
+} from "@chakra-ui/react";
import { Trans } from "@lingui/macro";
import SubText from "components/common/SubText";
import { useUser } from "hooks/common";
import { usePlus } from "hooks/plus";
+import { getFullUsername } from "lib/strings";
import { Fragment } from "react";
-import { Suggestions } from "services/plus";
+import { PlusStatuses, Suggestions } from "services/plus";
import Suggestion from "./Suggestion";
-import SuggestionVouchModal from "./SuggestionVouchModal";
+import SuggestionModal from "./SuggestionModal";
+import VouchModal from "./VouchModal";
export interface PlusHomePageProps {
suggestions: Suggestions;
+ statuses: PlusStatuses;
}
-const PlusHomePage = ({ suggestions }: PlusHomePageProps) => {
+const PlusHomePage = ({ suggestions, statuses }: PlusHomePageProps) => {
const [user] = useUser();
const {
plusStatusData,
suggestionsData,
ownSuggestion,
- suggestionsLoading,
suggestionCounts,
setSuggestionsFilter,
- } = usePlus(suggestions);
+ vouchedPlusStatusData,
+ } = usePlus({ suggestions, statuses });
return (
<>
- {plusStatusData && plusStatusData.membershipTier && (
-
)}
+ {plusStatusData &&
+ plusStatusData.canVouchFor &&
+ !plusStatusData.canVouchAgainAfter && (
+
+ )}
+ {plusStatusData &&
+ (plusStatusData.canVouchAgainAfter ||
+ plusStatusData.voucher ||
+ vouchedPlusStatusData) && (
+
+
+
+ Vouching status
+
+ {plusStatusData?.canVouchAgainAfter && (
+
+ Can vouch again after:{" "}
+ {new Date(
+ plusStatusData.canVouchAgainAfter
+ ).toLocaleDateString()}
+
+ )}
+ {plusStatusData?.voucher && (
+
+ Vouched for +{plusStatusData.vouchTier} by{" "}
+ {getFullUsername(plusStatusData.voucher)}
+
+ )}
+ {vouchedPlusStatusData && (
+
+ Vouched {getFullUsername(vouchedPlusStatusData.user)} to{" "}
+ +{vouchedPlusStatusData.vouchTier}
+
+ )}
+
+
+ )}
{
- {!suggestionsLoading &&
- suggestionCounts.ONE + suggestionCounts.TWO + suggestionCounts.THREE ===
- 0 ? (
+ {suggestionCounts.ONE + suggestionCounts.TWO + suggestionCounts.THREE ===
+ 0 ? (
No suggestions yet for this month
) : (
<>
diff --git a/components/plus/SuggestionVouchModal.tsx b/components/plus/SuggestionModal.tsx
similarity index 89%
rename from components/plus/SuggestionVouchModal.tsx
rename to components/plus/SuggestionModal.tsx
index b32459e2e..7f1b853ec 100644
--- a/components/plus/SuggestionVouchModal.tsx
+++ b/components/plus/SuggestionModal.tsx
@@ -26,18 +26,12 @@ import UserSelector from "components/common/UserSelector";
import useMutation from "hooks/useMutation";
interface Props {
- canVouch: boolean;
- canSuggest: boolean;
- userPlusMembershipTier?: number;
+ userPlusMembershipTier: number;
}
type FormData = z.infer;
-const SuggestionVouchModal: React.FC = ({
- canVouch,
- canSuggest,
- userPlusMembershipTier,
-}) => {
+const SuggestionModal: React.FC = ({ userPlusMembershipTier }) => {
const [isOpen, setIsOpen] = useState(false);
const { handleSubmit, errors, register, watch, control } = useForm({
resolver: zodResolver(suggestionFullSchema),
@@ -51,17 +45,6 @@ const SuggestionVouchModal: React.FC = ({
const watchDescription = watch("description", "");
- if (!canVouch && !canSuggest) return null;
-
- const getButtonText = () => {
- if (canSuggest && canVouch) return "Add new suggestion or vouch";
- if (canVouch) return "Vouch";
-
- return "Add new suggestion";
- };
-
- if (!userPlusMembershipTier) return null;
-
return (
<>
{isOpen && (
= ({
>
- Adding a new suggestion or vouch
+ Adding a new suggestion