diff --git a/src/components/common/AchievementItem.tsx b/src/components/common/AchievementItem.tsx index 6295e613..ebe62ed8 100644 --- a/src/components/common/AchievementItem.tsx +++ b/src/components/common/AchievementItem.tsx @@ -36,7 +36,7 @@ export const AchievementItem: React.FC<{ group: AchievementSection["groups"][number] layoutId: string size?: number - characterId?: number + characterId?: string isOwner: boolean }> = ({ group, layoutId, size, characterId, isOwner }) => { const date = useDate() @@ -95,6 +95,11 @@ export const AchievementItem: React.FC<{ position="middle-start" color="red" className="inline-flex max-w-full justify-center items-center" + styles={() => ({ + indicator: { + "z-index": "1", + }, + })} > {group.info.title} diff --git a/src/components/common/AchievementModal.tsx b/src/components/common/AchievementModal.tsx index 341e8ae7..a33ddecc 100644 --- a/src/components/common/AchievementModal.tsx +++ b/src/components/common/AchievementModal.tsx @@ -9,6 +9,7 @@ import { useRouter } from "next/router" import { BlockchainIcon } from "~/components/icons/BlockchainIcon" import { useDate } from "~/hooks/useDate" import { useTranslation } from "next-i18next" +import { cn } from "~/lib/utils" export const AchievementModal: React.FC<{ opened: boolean @@ -16,7 +17,7 @@ export const AchievementModal: React.FC<{ group: AchievementSection["groups"][number] layoutId: string isOwner: boolean - characterId?: number + characterId?: string }> = ({ opened, setOpened, group, layoutId, isOwner, characterId }) => { const date = useDate() const { t } = useTranslation("common") @@ -33,7 +34,6 @@ export const AchievementModal: React.FC<{ ? group.items.filter((item) => item.status === "COMMING").pop() : null - const router = useRouter() const mintAchievement = useMintAchievement() const mint = async (tokenId: number) => { @@ -146,7 +146,7 @@ export const AchievementModal: React.FC<{
item.status === "MINTED").length + group.items.findLastIndex((item) => item.status === "MINTED") + 1 } color="var(--theme-color)" size="sm" @@ -176,31 +176,36 @@ export const AchievementModal: React.FC<{ })} > {group.items.map((item) => { + const icon = ( + <> +
+ +
+ {item.status === "MINTABLE" && isOwner && ( + + )} + + ) return ( -
- -
- {item.status === "MINTABLE" && isOwner && ( - - )} - - } - completedIcon={} + icon={icon} + completedIcon={icon} label={ item.info.attributes.find( (attr) => attr.trait_type === "tier", diff --git a/src/models/site.model.ts b/src/models/site.model.ts index 8f658caf..19ebc0f9 100644 --- a/src/models/site.model.ts +++ b/src/models/site.model.ts @@ -627,7 +627,7 @@ export type AchievementSection = { }[] } -export async function getAchievements(characterId: number) { +export async function getAchievements(characterId: string) { const crossbellAchievements = (await indexer.getAchievements(characterId)) ?.list as AchievementSection[] | undefined const xLogAchievements: AchievementSection[] = [ @@ -703,7 +703,7 @@ export async function getAchievements(characterId: number) { } export async function mintAchievement(input: { - characterId: number + characterId: string achievementId: number }) { return indexer.mintAchievement(input.characterId, input.achievementId) diff --git a/src/pages/dashboard/[subdomain]/achievements.tsx b/src/pages/dashboard/[subdomain]/achievements.tsx index 435c105f..0cb1e129 100644 --- a/src/pages/dashboard/[subdomain]/achievements.tsx +++ b/src/pages/dashboard/[subdomain]/achievements.tsx @@ -1,14 +1,13 @@ import { DashboardLayout } from "~/components/dashboard/DashboardLayout" import { DashboardMain } from "~/components/dashboard/DashboardMain" import type { ReactElement } from "react" -import { useGetAchievements } from "~/queries/site" -import { useDate } from "~/hooks/useDate" -import { useTranslation } from "next-i18next" +import { useGetAchievements, useGetSite } from "~/queries/site" import { getServerSideProps as getLayoutServerSideProps } from "~/components/dashboard/DashboardLayout.server" import { GetServerSideProps } from "next" import { serverSidePropsHandler } from "~/lib/server-side-props" import { useAccountState } from "@crossbell/connect-kit" import { AchievementItem } from "~/components/common/AchievementItem" +import { useRouter } from "next/router" export const getServerSideProps: GetServerSideProps = serverSidePropsHandler( async (ctx) => { @@ -23,13 +22,11 @@ export const getServerSideProps: GetServerSideProps = serverSidePropsHandler( ) export default function AchievementsPage() { - const date = useDate() - const { t } = useTranslation("dashboard") + const router = useRouter() + const subdomain = router.query.subdomain as string + const site = useGetSite(subdomain) - const currentCharacterId = useAccountState( - (s) => s.computed.account?.characterId, - ) - const achievement = useGetAchievements(currentCharacterId || 0) + const achievement = useGetAchievements(site.data?.metadata?.proof) return ( @@ -52,7 +49,7 @@ export default function AchievementsPage() { key={group.info.name} layoutId="achievements" size={80} - characterId={currentCharacterId} + characterId={site.data?.metadata?.proof} isOwner={true} /> ))} diff --git a/src/queries/site.ts b/src/queries/site.ts index 5dae0626..e331ed3f 100644 --- a/src/queries/site.ts +++ b/src/queries/site.ts @@ -384,7 +384,7 @@ export const useGetTips = ( }) } -export const useGetAchievements = (characterId: number) => { +export const useGetAchievements = (characterId?: string) => { return useQuery(["getAchievements", characterId], async () => { if (!characterId) { return null