From ebc1a7d2b72b61dccdb3cb0dda9e9f79de1af57b Mon Sep 17 00:00:00 2001 From: Vinicius Porto do Sacramento Date: Wed, 25 Sep 2024 16:20:49 -0300 Subject: [PATCH] feat: cadre page wip --- apps/commune-governance/next-env.d.ts | 2 +- .../cadre/_components/cadre-members-list.tsx | 40 +++++ .../cadre/_components/cadre-requests-list.tsx | 154 ++++++++++++++++++ .../_components/cadre-section-container.tsx | 13 ++ .../src/app/cadre/_components/index.ts | 3 + .../commune-governance/src/app/cadre/page.tsx | 32 ++++ .../src/app/components/balance-section.tsx | 3 +- apps/commune-governance/src/app/layout.tsx | 1 + packages/providers/src/context/commune.tsx | 4 +- packages/types/types.ts | 13 +- packages/ui/src/components/loading.tsx | 5 +- packages/ui/src/data.ts | 1 + 12 files changed, 257 insertions(+), 14 deletions(-) create mode 100644 apps/commune-governance/src/app/cadre/_components/cadre-members-list.tsx create mode 100644 apps/commune-governance/src/app/cadre/_components/cadre-requests-list.tsx create mode 100644 apps/commune-governance/src/app/cadre/_components/cadre-section-container.tsx create mode 100644 apps/commune-governance/src/app/cadre/_components/index.ts create mode 100644 apps/commune-governance/src/app/cadre/page.tsx diff --git a/apps/commune-governance/next-env.d.ts b/apps/commune-governance/next-env.d.ts index 40c3d680..4f11a03d 100644 --- a/apps/commune-governance/next-env.d.ts +++ b/apps/commune-governance/next-env.d.ts @@ -2,4 +2,4 @@ /// // NOTE: This file should not be edited -// see https://nextjs.org/docs/app/building-your-application/configuring/typescript for more information. +// see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/apps/commune-governance/src/app/cadre/_components/cadre-members-list.tsx b/apps/commune-governance/src/app/cadre/_components/cadre-members-list.tsx new file mode 100644 index 00000000..6363acfe --- /dev/null +++ b/apps/commune-governance/src/app/cadre/_components/cadre-members-list.tsx @@ -0,0 +1,40 @@ +const people = [ + { + name: 'timo33', + role: '12/08/2024', + }, + { + name: '__honza__', + role: '12/08/2024', + }, + { + name: 'steinerkelvin', + role: '12/08/2024', + }, + { + name: 'jairo.mp4', + role: '12/08/2024', + }, + { + name: ' fam7925', + role: '12/08/2024', + } +] + +export const CadreMembersList = () => { + return ( +
+ {people.map((person) => ( +
+
+

{person.name}

+

{person.role}

+
+
+ ))} +
+ ) +} \ No newline at end of file diff --git a/apps/commune-governance/src/app/cadre/_components/cadre-requests-list.tsx b/apps/commune-governance/src/app/cadre/_components/cadre-requests-list.tsx new file mode 100644 index 00000000..9095d488 --- /dev/null +++ b/apps/commune-governance/src/app/cadre/_components/cadre-requests-list.tsx @@ -0,0 +1,154 @@ +import { Loading } from "@commune-ts/ui" +import Image from "next/image"; + +type Status = "UNVOTED" | "FOR" | "AGAINST" | null + +const people = [ + { + id: 123, + discordId: "ed.sdr", + requestDate: '12/09/2024', + reason: "Your opinion is fine, it's okay to be wrong! We call it skill issue!", + votesFor: 80, + status: "UNVOTED", + loading: false, + + }, + { + id: 123, + discordId: "vinicius.sacramento", + requestDate: '12/09/2024', + reason: "What if?", + votesFor: 80, + status: "UNVOTED", + loading: true, + }, + { + id: 123, + discordId: "Jack.and.the.huge.beanstalk", + requestDate: '12/09/2024', + reason: "I have some crazy beans on my pocket, would you like to smoke some?", + votesFor: 25, + status: "AGAINST", + loading: false, + }, + { + id: 123, + discordId: "lord.pureza", + requestDate: '12/09/2024', + reason: "I'm Pureza. If you keep doing this, I will show you the Squidward Tentacles' nose!", + votesFor: 99, + status: "FOR", + loading: false, + }, +] + +const handleStatusColors = (status: "FOR" | "AGAINST" | "UNVOTED" | null) => { + const statusColors = { + FOR: "text-green-400 ring-green-400/20", + AGAINST: "text-red-400 ring-red-400/20", + UNVOTED: "text-gray-400 ring-gray-400/20" + } + + return statusColors[status ?? "UNVOTED"] +} + +function handlePercentages( + favorablePercent: number | null, +): JSX.Element | null { + if (favorablePercent === null) return null; + + const againstPercent = 100 - favorablePercent; + if (Number.isNaN(favorablePercent)) { + return ( +
+

+ – % +

+
+ ); + } + return ( +
+
+ {favorablePercent.toFixed(0)}% + favorable arrow up icon +
+
+ {againstPercent.toFixed(0)}% + against arrow down icon +
+
+ ); +} + +export const CadreRequestsList = () => { + return ( + + ) +} diff --git a/apps/commune-governance/src/app/cadre/_components/cadre-section-container.tsx b/apps/commune-governance/src/app/cadre/_components/cadre-section-container.tsx new file mode 100644 index 00000000..12e41d79 --- /dev/null +++ b/apps/commune-governance/src/app/cadre/_components/cadre-section-container.tsx @@ -0,0 +1,13 @@ + + +export const CadreSectionContainer = ({ children }: { children: React.ReactNode }) => { + return ( +
+
+
+ {children} +
+
+
+ ) +} \ No newline at end of file diff --git a/apps/commune-governance/src/app/cadre/_components/index.ts b/apps/commune-governance/src/app/cadre/_components/index.ts new file mode 100644 index 00000000..5f61bab1 --- /dev/null +++ b/apps/commune-governance/src/app/cadre/_components/index.ts @@ -0,0 +1,3 @@ +export { CadreMembersList } from './cadre-members-list' +export { CadreRequestsList } from './cadre-requests-list' +export { CadreSectionContainer } from './cadre-section-container' diff --git a/apps/commune-governance/src/app/cadre/page.tsx b/apps/commune-governance/src/app/cadre/page.tsx new file mode 100644 index 00000000..a2e67617 --- /dev/null +++ b/apps/commune-governance/src/app/cadre/page.tsx @@ -0,0 +1,32 @@ +import Link from "next/link"; +import { ArrowLeftIcon } from "@heroicons/react/20/solid"; +import { CadreSectionContainer, CadreMembersList, CadreRequestsList } from "./_components"; + +export default function CadrePage() { + return ( +
+ + + Go Back to Proposals List + + + +
+

Cadre Requests

+
+ +
+ + +
+

Cadre Members Discord Id's

+
+ +
+
+ ) +} + diff --git a/apps/commune-governance/src/app/components/balance-section.tsx b/apps/commune-governance/src/app/components/balance-section.tsx index d80e1ed8..6a98bff1 100644 --- a/apps/commune-governance/src/app/components/balance-section.tsx +++ b/apps/commune-governance/src/app/components/balance-section.tsx @@ -13,7 +13,6 @@ export function BalanceSection({ }): JSX.Element { const { isInitialized, - // eslint-disable-next-line @typescript-eslint/unbound-method handleWalletModal, daoTreasury, balance, @@ -108,7 +107,7 @@ export function BalanceSection({
{!isInitialized || - (selectedAccount?.meta.name && userStakeWeight == null) ? ( + (selectedAccount?.meta.name && userStakeWeight == null) ? (

Loading... COMAI diff --git a/apps/commune-governance/src/app/layout.tsx b/apps/commune-governance/src/app/layout.tsx index a280e897..b461285c 100644 --- a/apps/commune-governance/src/app/layout.tsx +++ b/apps/commune-governance/src/app/layout.tsx @@ -43,6 +43,7 @@ export default function RootLayout({ navigationLinks={[ { name: "Homepage", href: links.landing_page, external: true }, { name: "Join Community", href: links.discord, external: true }, + { name: "Cadre", href: links.cadre, external: false }, ]} /> {children} diff --git a/packages/providers/src/context/commune.tsx b/packages/providers/src/context/commune.tsx index f8a06649..b8b5a546 100644 --- a/packages/providers/src/context/commune.tsx +++ b/packages/providers/src/context/commune.tsx @@ -63,7 +63,7 @@ interface CommuneContextType { selectedAccount: InjectedAccountWithMeta | null; setSelectedAccount: (arg: InjectedAccountWithMeta | null) => void; - handleWalletModal(state?: boolean): void; + handleWalletModal: (state?: boolean) => void; openWalletModal: boolean; addStake: (stake: Stake) => Promise; @@ -222,7 +222,7 @@ export function CommuneProvider({ } } - function handleWalletModal(state?: boolean): void { + const handleWalletModal = (state?: boolean): void => { setOpenWalletModal(state || !openWalletModal); } diff --git a/packages/types/types.ts b/packages/types/types.ts index e991ae52..4652aa95 100644 --- a/packages/types/types.ts +++ b/packages/types/types.ts @@ -3,10 +3,10 @@ import type { ApiDecoration } from "@polkadot/api/types"; import type { Header } from "@polkadot/types/interfaces"; import type { Codec, IU8a } from "@polkadot/types/types"; import type { Enum, Tagged } from "rustie"; -import { Variant } from "rustie/dist/enum"; -import { z } from "zod"; +import type { Variant } from "rustie/dist/enum"; +import type { z } from "zod"; -import { +import type { CUSTOM_METADATA_SCHEMA, DAO_APPLICATIONS_SCHEMA, DAO_METADATA_SCHEMA, @@ -93,11 +93,11 @@ export interface StakeFromData { perAddr: Map; } -export type VoteWithStake = { +export interface VoteWithStake { address: SS58Address; stake: bigint; vote: "In Favor" | "Against"; -}; +} export interface LastBlock { blockHeader: Header; @@ -242,8 +242,7 @@ export interface UnrewardedProposal { // == Field Params == -export interface SubspaceModule - extends z.infer {} +export type SubspaceModule = z.infer export type OptionalProperties = keyof T extends infer K ? K extends keyof T diff --git a/packages/ui/src/components/loading.tsx b/packages/ui/src/components/loading.tsx index a33870ff..4e3a9607 100644 --- a/packages/ui/src/components/loading.tsx +++ b/packages/ui/src/components/loading.tsx @@ -1,11 +1,12 @@ import { cn } from ".."; -export function Loading(): JSX.Element { +export function Loading(props: { className?: string }): JSX.Element { + const { className } = props; return (