Roadmap to becoming a developer in 2022
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

106 lines
3.7 KiB

import { useEffect, useState } from 'react';
import { httpGet } from '../lib/http';
import { useAuth } from '../hooks/use-auth';
import { pageProgressMessage } from '../stores/page';
import { useToast } from '../hooks/use-toast';
import { type UserTeamItem } from './TeamDropdown/TeamDropdown';
export function TeamsList() {
const [teamList, setTeamList] = useState<UserTeamItem[]>([]);
const user = useAuth();
const toast = useToast();
async function getAllTeam() {
const { response, error } = await httpGet<UserTeamItem[]>(
`${import.meta.env.PUBLIC_API_URL}/v1-get-user-teams`
);
if (error || !response) {
toast.error(error?.message || 'Something went wrong');
return;
}
setTeamList(response);
}
useEffect(() => {
getAllTeam().finally(() => {
pageProgressMessage.set('');
});
}, []);
return (
<div className="relative mx-auto max-w-[500px]">
<div className="w-full px-2 py-2">
<div className={'mb-8 hidden md:block'}>
<h2 className={'text-3xl font-bold sm:text-4xl'}>Teams</h2>
<p className="mt-2 text-gray-400">
Here are the teams you are part of
</p>
</div>
<ul className="mb-3 flex flex-col gap-1">
<li>
<a
className="flex w-full cursor-pointer items-center justify-between gap-2 truncate rounded border p-2 text-sm font-medium hover:border-gray-300 hover:bg-gray-50"
href="/account"
>
<span className="flex flex-grow items-center gap-2">
<img
src={
user?.avatar
? `${import.meta.env.PUBLIC_AVATAR_BASE_URL}/${
user?.avatar
}`
: '/images/default-avatar.png'
}
alt={user?.name || ''}
className="h-6 w-6 rounded-full"
/>
<span className="truncate">Personal Account</span>
</span>
<span>&rarr;</span>
</a>
</li>
{teamList.map((team) => {
let pageLink = '';
if (team.status === 'invited') {
pageLink = `/respond-invite?i=${team.memberId}`;
} else if (team.status === 'joined') {
pageLink = `/team/activity?t=${team._id}`;
}
return (
<li key={team._id}>
<a
className="flex w-full cursor-pointer items-center justify-between gap-2 rounded border p-2 text-sm font-medium hover:border-gray-300 hover:bg-gray-50"
href={pageLink}
>
<span className="flex flex-grow items-center gap-2">
<img
src={
team.avatar
? `${import.meta.env.PUBLIC_AVATAR_BASE_URL}/${
team.avatar
}`
: '/images/default-avatar.png'
}
alt={team.name || ''}
className="h-6 w-6 rounded-full"
/>
<span className="truncate">{team.name}</span>
</span>
<span>&rarr;</span>
</a>
</li>
);
})}
</ul>
<a
className="inline-flex w-full items-center justify-center rounded-lg bg-black p-2 py-3 text-sm font-medium text-white outline-none focus:ring-2 focus:ring-black focus:ring-offset-1 disabled:bg-gray-400"
href="/team/new"
>
<span className="mr-2">+</span>
<span>New Team</span>
</a>
</div>
</div>
);
}