mirror of
https://github.com/MetaFam/TheGame.git
synced 2026-01-13 16:37:58 -05:00
139 lines
4.3 KiB
TypeScript
139 lines
4.3 KiB
TypeScript
import {
|
|
AddIcon,
|
|
Box,
|
|
Button,
|
|
Modal,
|
|
ModalBody,
|
|
ModalCloseButton,
|
|
ModalContent,
|
|
ModalFooter,
|
|
ModalHeader,
|
|
ModalOverlay,
|
|
Text,
|
|
} from '@metafam/ds';
|
|
import React, { useState } from 'react';
|
|
import { FaArrowLeft } from 'react-icons/fa';
|
|
|
|
import { UnverifiedGuildForm } from '#components/Guild/UnverifiedGuildForm';
|
|
import { GuildSearchBar } from '#components/GuildSearchBar';
|
|
import { Player, useAddUnverifiedGuildMutation } from '#graphql/autogen/hasura-sdk';
|
|
|
|
import { GuildListingSmall, SmallGuild } from './GuildListing';
|
|
|
|
export const AddPlayerGuild: React.FC<{
|
|
isOpen: boolean;
|
|
onClose: () => void;
|
|
player: Player;
|
|
hydratePlayer: () => void;
|
|
}> = ({ isOpen, onClose, player, hydratePlayer }) => {
|
|
const [showGuildForm, setShowGuildForm] = useState(false);
|
|
const [showSearchForm, setShowSearchForm] = useState(true);
|
|
const [currentGuilds, setCurrentGuilds] = useState<SmallGuild[]>([]);
|
|
const [, addUnverifiedGuild] = useAddUnverifiedGuildMutation();
|
|
|
|
return (
|
|
<Modal {...{ isOpen, onClose }}>
|
|
<ModalOverlay />
|
|
<ModalContent>
|
|
{(!showSearchForm || currentGuilds.length > 0) && !showGuildForm && (
|
|
<Button
|
|
w={{ base: '50%', lg: '20%' }}
|
|
mt={6}
|
|
bg="#00000029"
|
|
color="#D59BD5"
|
|
_hover={{ bg: '#00000029' }}
|
|
leftIcon={<FaArrowLeft />}
|
|
onClick={() => setShowSearchForm(true)}
|
|
>
|
|
Back to search
|
|
</Button>
|
|
)}
|
|
<ModalHeader>
|
|
{!showSearchForm &&
|
|
currentGuilds.length > 0 &&
|
|
!showGuildForm &&
|
|
'New Guild Added!'}
|
|
{(showGuildForm || (!currentGuilds.length && !showSearchForm)) &&
|
|
'Create New Guild'}
|
|
{(showSearchForm || (!currentGuilds.length && !showGuildForm)) &&
|
|
'Search for a Guild'}
|
|
<Text
|
|
fontStyle="italic"
|
|
color="gray.400"
|
|
textAlign="center"
|
|
fontSize="md"
|
|
mt={3}
|
|
mb={10}
|
|
>
|
|
{currentGuilds.length > 0 &&
|
|
!showSearchForm &&
|
|
!showGuildForm &&
|
|
'Your membership has been added to your guild info.'}
|
|
{(showSearchForm || showGuildForm) && 'Add Guild Membership'}
|
|
</Text>
|
|
</ModalHeader>
|
|
<ModalCloseButton />
|
|
<ModalBody p={[0, 6]}>
|
|
{!showGuildForm &&
|
|
!showSearchForm &&
|
|
currentGuilds.length > 0 &&
|
|
currentGuilds.map((guild) => (
|
|
<Box w="50%" mx="auto">
|
|
<GuildListingSmall key={guild.id} {...guild} />
|
|
</Box>
|
|
))}
|
|
{showGuildForm && (
|
|
<UnverifiedGuildForm
|
|
onSubmit={async (...args) => {
|
|
const ret = await addUnverifiedGuild(...args);
|
|
if (ret.data) {
|
|
setCurrentGuilds([
|
|
...currentGuilds,
|
|
{
|
|
...ret.operation.variables,
|
|
id: ret.data.insert_guild?.returning[0].id,
|
|
},
|
|
]);
|
|
setShowGuildForm(false);
|
|
}
|
|
// if (!ret.error) onClose();
|
|
return ret;
|
|
}}
|
|
{...{ player, hydratePlayer }}
|
|
/>
|
|
)}
|
|
{showSearchForm && <GuildSearchBar {...{ player }} />}
|
|
{!showGuildForm && (
|
|
<Button
|
|
variant="outline"
|
|
w={{ base: '50%', lg: '20%' }}
|
|
mt={6}
|
|
ml={{ base: '20%', lg: '40%' }}
|
|
leftIcon={<AddIcon />}
|
|
onClick={() => {
|
|
setShowGuildForm(true);
|
|
setShowSearchForm(false);
|
|
}}
|
|
>
|
|
{currentGuilds.length > 0 ? 'Add another guild' : 'Add New Guild'}
|
|
</Button>
|
|
)}
|
|
</ModalBody>
|
|
{!currentGuilds.length && (
|
|
<ModalFooter mt={6} justifyContent="center">
|
|
<Button
|
|
variant="ghost"
|
|
onClick={onClose}
|
|
color="landing450"
|
|
_hover={{ bg: '#FFFFFF11' }}
|
|
_active={{ bg: '#FF000011' }}
|
|
>
|
|
Go Back to Profile
|
|
</Button>
|
|
</ModalFooter>
|
|
)}
|
|
</ModalContent>
|
|
</Modal>
|
|
);
|
|
};
|