-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #58 from AndrewCK24/11-state-use-swr
- Loading branch information
Showing
75 changed files
with
1,526 additions
and
1,444 deletions.
There are no files selected for viewing
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
const NotificationsPage = () => { | ||
return ( | ||
<div> | ||
<h1>Notifications</h1> | ||
</div> | ||
); | ||
}; | ||
|
||
export default NotificationsPage; |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
"use client"; | ||
import { useTeam } from "@/hooks/use-data"; | ||
import { useRouter } from "next/navigation"; | ||
import TeamForm from "@/components/team/form"; | ||
|
||
const EditTeamPage = ({ params }) => { | ||
const router = useRouter(); | ||
const { teamId } = params; | ||
const { team, mutate } = useTeam(teamId); | ||
|
||
const onSubmit = async (formData) => { | ||
try { | ||
const res = await fetch(`/api/teams/${teamId}`, { | ||
method: "PATCH", | ||
headers: { "Content-Type": "application/json" }, | ||
body: JSON.stringify(formData), | ||
}); | ||
|
||
const teamData = await res.json(); | ||
mutate({ ...team, ...teamData }); | ||
return router.push(`/team/${teamId}?tab=about`); | ||
} catch (error) { | ||
console.error(error); | ||
// TODO: 改為彈出式警告 | ||
} | ||
}; | ||
|
||
return <TeamForm team={team} onSubmit={onSubmit} className="w-full" />; | ||
}; | ||
|
||
export default EditTeamPage; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
"use client"; | ||
import { useTeam, useTeamMembers } from "@/hooks/use-data"; | ||
import Lineup from "@/components/team/lineup"; | ||
|
||
const LineupPage = ({ params }) => { | ||
const { teamId } = params; | ||
const { team, mutate } = useTeam(teamId); | ||
const { members } = useTeamMembers(teamId); | ||
|
||
const handleSave = async (lineups) => { | ||
try { | ||
const response = await fetch(`/api/teams/${team._id}/lineup`, { | ||
method: "PATCH", | ||
headers: { | ||
"Content-Type": "application/json", | ||
}, | ||
body: JSON.stringify(lineups), | ||
}); | ||
const data = await response.json(); | ||
mutate({ ...team, lineup: data }, false); | ||
} catch (error) { | ||
console.log(error); | ||
} | ||
// if (isRecording) { | ||
// dispatch(matchActions.configMatchSet({ firstServe, lineup })); | ||
// router.push(`/match/${matchId}/confirm`); | ||
// } | ||
}; | ||
|
||
return <Lineup team={team} members={members} handleSave={handleSave} />; | ||
}; | ||
|
||
export default LineupPage; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
import TeamMatches from "@/components/team/matches"; | ||
|
||
const TeamMatchesPage = ({ params }) => { | ||
const { teamId } = params; | ||
|
||
return <TeamMatches teamId={teamId} className="w-full" />; | ||
}; | ||
|
||
export default TeamMatchesPage; |
35 changes: 35 additions & 0 deletions
35
app/(protected)/team/[teamId]/members/[memberId]/edit/page.jsx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
"use client"; | ||
import { useRouter } from "next/navigation"; | ||
import { useTeamMembers } from "@/hooks/use-data"; | ||
import MemberForm from "@/components/team/members/form"; | ||
|
||
const EditMemberPage = ({ params }) => { | ||
const router = useRouter(); | ||
const { teamId, memberId } = params; | ||
const { members, mutate } = useTeamMembers(teamId); | ||
const member = members?.find((member) => member._id === memberId) || {}; | ||
|
||
const onSubmit = async (formData) => { | ||
formData.team_id = teamId; | ||
try { | ||
const res = await fetch(`/api/members/${memberId}`, { | ||
method: "PUT", | ||
headers: { "Content-Type": "application/json" }, | ||
body: JSON.stringify(formData), | ||
}); | ||
const member = await res.json(); | ||
const memberIndex = members.findIndex( | ||
(member) => member._id === memberId | ||
); | ||
members[memberIndex] = member; | ||
mutate([...members], false); | ||
return router.push(`/team/${teamId}/members/${memberId}`); | ||
} catch (error) { | ||
console.error(error); | ||
} | ||
}; | ||
|
||
return <MemberForm member={member} onSubmit={onSubmit} className="w-full" />; | ||
}; | ||
|
||
export default EditMemberPage; |
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
import MembersInfo from "@/components/team/members/info"; | ||
|
||
const MemberPage = ({ params }) => { | ||
const { teamId, memberId } = params; | ||
|
||
return <MembersInfo teamId={teamId} memberId={memberId} className="w-full" />; | ||
}; | ||
|
||
export default MemberPage; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
"use client"; | ||
import { useRouter } from "next/navigation"; | ||
import { useTeamMembers } from "@/hooks/use-data"; | ||
import MemberForm from "@/components/team/members/form"; | ||
|
||
const MemberCreatePage = ({ params }) => { | ||
const router = useRouter(); | ||
const { teamId } = params; | ||
const { members, mutate } = useTeamMembers(teamId); | ||
|
||
const onSubmit = async (formData) => { | ||
formData.team_id = teamId; | ||
try { | ||
const res = await fetch("/api/members", { | ||
method: "POST", | ||
headers: { "Content-Type": "application/json" }, | ||
body: JSON.stringify(formData), | ||
}); | ||
const member = await res.json(); | ||
mutate([...members, member], false); | ||
return router.push(`/team/${teamId}/members/${member._id}`); | ||
} catch (error) { | ||
console.error(error); | ||
} | ||
}; | ||
|
||
return <MemberForm onSubmit={onSubmit} className="w-full" />; | ||
}; | ||
|
||
export default MemberCreatePage; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; | ||
import TeamHero from "@/components/team/hero"; | ||
import ConfirmInvitation from "@/components/team/confirmation"; | ||
import LatestMatch from "@/components/team/feeds/latest-match"; | ||
import TeamInfo from "@/components/team/info"; | ||
import TeamMembers from "@/components/team/members"; | ||
|
||
const TeamPage = ({ params, searchParams }) => { | ||
const { teamId } = params; | ||
const defaultTab = searchParams?.tab || "feeds"; | ||
|
||
return ( | ||
<Tabs defaultValue={defaultTab} className="relative w-full"> | ||
<ConfirmInvitation teamId={teamId} /> | ||
<TeamHero teamId={teamId} /> | ||
<TabsList className="sticky top-0 z-10 grid w-full grid-cols-3"> | ||
<TabsTrigger value="feeds">動態</TabsTrigger> | ||
<TabsTrigger value="about">關於</TabsTrigger> | ||
<TabsTrigger value="members">成員</TabsTrigger> | ||
</TabsList> | ||
<TabsContent value="feeds"> | ||
<LatestMatch teamId={teamId} /> | ||
</TabsContent> | ||
<TabsContent value="about"> | ||
<TeamInfo teamId={teamId} /> | ||
</TabsContent> | ||
<TabsContent value="members"> | ||
<TeamMembers teamId={teamId} /> | ||
</TabsContent> | ||
</Tabs> | ||
); | ||
}; | ||
|
||
export default TeamPage; |
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
Oops, something went wrong.
12dd89c
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Successfully deployed to the following URLs:
v-stats – ./
v-stats-andrewck24s-projects.vercel.app
v-stats-beta.vercel.app
v-stats-git-master-andrewck24s-projects.vercel.app