From fc835eae559b08024c20ff2bb3e943281f9c577d Mon Sep 17 00:00:00 2001 From: Kalle <38327916+Sendouc@users.noreply.github.com> Date: Thu, 24 Feb 2022 09:37:41 +0200 Subject: [PATCH] Allow user to leave group Closes #749 --- app/components/play/GroupCard.tsx | 56 ++++++++++++++++++------------- app/models/LFGGroup.server.ts | 22 ++++++++++++ app/routes/play/looking.tsx | 48 +++++++++++++++++++------- 3 files changed, 90 insertions(+), 36 deletions(-) diff --git a/app/components/play/GroupCard.tsx b/app/components/play/GroupCard.tsx index 87f494ebf..50cb8ae8c 100644 --- a/app/components/play/GroupCard.tsx +++ b/app/components/play/GroupCard.tsx @@ -9,39 +9,47 @@ import { GroupMembers } from "./GroupMembers"; export function GroupCard({ group, - canTakeAction = false, - type, + action, + showAction, ranked, - lookingForMatch, isOwnGroup = false, }: { group: LookingLoaderDataGroup; - canTakeAction?: boolean; - type?: "LIKES_GIVEN" | "NEUTRAL" | "LIKES_RECEIVED"; + action: Exclude; + showAction: boolean; ranked?: boolean; - lookingForMatch: boolean; isOwnGroup?: boolean; }) { const fetcher = useFetcher(); const buttonText = () => { - if (isOwnGroup) return "Stop looking"; - if (type === "LIKES_GIVEN") return "Undo"; - if (type === "NEUTRAL") return "Let's play?"; - - return lookingForMatch ? "Match up" : "Group up"; - }; - const buttonValue = (): LookingActionSchema["_action"] => { - if (isOwnGroup) return "LOOK_AGAIN"; - if (type === "LIKES_GIVEN") return "UNLIKE"; - if (type === "NEUTRAL") return "LIKE"; - - return lookingForMatch ? "MATCH_UP" : "UNITE_GROUPS"; + switch (action) { + case "LEAVE_GROUP": + return "Leave group"; + case "LIKE": + return "Let's play?"; + case "UNLIKE": + return "Undo"; + case "UNITE_GROUPS": + return "Group up"; + case "MATCH_UP": + return "Match up"; + case "LOOK_AGAIN": + return "Stop looking"; + default: + throw new Error(`Invalid group action type: ${action}`); + } }; const buttonVariant = (): ButtonProps["variant"] => { - if (isOwnGroup) return "minimal-destructive"; - - return type === "LIKES_GIVEN" ? "destructive" : undefined; + switch (action) { + case "LEAVE_GROUP": + case "LOOK_AGAIN": + return "minimal-destructive"; + case "UNLIKE": + return "destructive"; + default: + return undefined; + } }; return ( @@ -60,14 +68,14 @@ export function GroupCard({ )} - {type === "LIKES_RECEIVED" && ( + {action === "UNITE_GROUPS" && ( )} - {canTakeAction && ( + {showAction && (