From 07d799793740f0ec6f981751d7a4289f00323748 Mon Sep 17 00:00:00 2001 From: houssemmimoun27 Date: Thu, 29 Jun 2023 14:28:51 +0100 Subject: [PATCH 01/12] feat(data): add results --- src/data/phase/dto.type.ts | 8 ++ src/data/phase/samhain.tsx | 201 +++++++++++++++++++++++++++++++++++++ 2 files changed, 209 insertions(+) diff --git a/src/data/phase/dto.type.ts b/src/data/phase/dto.type.ts index 9208c61f..33e004dc 100644 --- a/src/data/phase/dto.type.ts +++ b/src/data/phase/dto.type.ts @@ -40,6 +40,13 @@ export type ChallengeDTO = Readonly<{ challengeTasks: ChallengeTasks[] }> +export type ResultsDTO = Readonly<{ + rank: number + valoper: string + poap: string[] + know: number +}> + export type PhaseDTO = Readonly<{ number: number phaseName: string @@ -48,4 +55,5 @@ export type PhaseDTO = Readonly<{ phaseDuration?: Duration tasks: TaskDTO[] challenges?: ChallengeDTO[] + results: ResultsDTO[] }> diff --git a/src/data/phase/samhain.tsx b/src/data/phase/samhain.tsx index 3b358e94..35e6c1f8 100644 --- a/src/data/phase/samhain.tsx +++ b/src/data/phase/samhain.tsx @@ -843,5 +843,206 @@ export const samhain = ({ } ] } + ], + results: [ + { + rank: 1, + valoper: 'okp41u6vp630kpjpxqp2p6xwagtlkzq58tw3zadwrgu', + poap: [ + 'OKP4 Ontologist Apprentice', + 'OKP4 Governance Creator', + 'Dagda Servant', + 'OKP4 Law-Stone Builder', + 'OKP4 Objectarium Explorer', + 'OKP4 Young Druid' + ], + know: 30000 + }, + { + rank: 2, + valoper: 'okp41wy8ywt98sv5pmsg873rct4pxtw0ntxuwxdtzen', + poap: [ + 'OKP4 Ontologist Apprentice', + 'OKP4 Governance Creator', + 'OKP4 Law-Stone Builder', + 'OKP4 Objectarium Explorer', + 'OKP4 Young Druid' + ], + know: 30000 + }, + { + rank: 3, + valoper: 'okp41hkf8uj3yg9v2dwdq6ygapf7gyjnjvuamgz6m0g', + poap: ['OKP4 Law-Stone Builder', 'OKP4 Objectarium Explorer', 'OKP4 Young Druid'], + know: 0 + }, + { + rank: 3, + valoper: 'okp413pn0qmuxferwvjv0yzssedlkxff77ddtcwfefd', + poap: ['OKP4 Law-Stone Builder', 'OKP4 Objectarium Explorer', 'OKP4 Young Druid'], + know: 0 + }, + { + rank: 4, + valoper: 'okp41cvclz3u9zrpfvrhymds9pjp63x94wcujzlaaw0', + poap: ['OKP4 Objectarium Explorer', 'OKP4 Young Druid'], + know: 0 + }, + { + rank: 4, + valoper: 'okp413dgy7rtjjvvlkzu2upgtntdyzy4hnr6efarspq', + poap: ['OKP4 Objectarium Explorer', 'OKP4 Young Druid'], + know: 0 + }, + { + rank: 4, + valoper: 'okp41pa7ngqmqz5z4x88fd273kha89mtjkncnm5nwnx', + poap: ['OKP4 Objectarium Explorer', 'OKP4 Young Druid'], + know: 0 + }, + { + rank: 4, + valoper: 'okp41htsmzdnjf9zgrpnmyjzd04w3ql5mnq9xsaek64', + poap: ['OKP4 Objectarium Explorer', 'OKP4 Young Druid'], + know: 0 + }, + { + rank: 5, + valoper: 'okp41d26y0n0y84yj2r9gzeyudzd6v5c8z6m7wmryer', + poap: ['OKP4 Young Druid'], + know: 0 + }, + { + rank: 5, + valoper: 'okp414y9j2e7lqy0cr3nd5w73esuqtx07pse3ts5au4', + poap: ['OKP4 Young Druid'], + know: 0 + }, + { + rank: 5, + valoper: 'okp410t2s8nzagk3lf9ydkn0t3ur5f0qcsy3fx6wdsh', + poap: ['OKP4 Young Druid'], + know: 0 + }, + { + rank: 5, + valoper: 'okp41wr7xfnm65keadtnu2asucqur2w54vdvder0du0', + poap: ['OKP4 Young Druid'], + know: 0 + }, + { + rank: 5, + valoper: 'okp41482yd7n04xk3l77wkaq7hntyq0xlr4sjjyjafz', + poap: ['OKP4 Young Druid'], + know: 0 + }, + { + rank: 5, + valoper: 'okp414u09zxsxw752dfrzy7g4zxj6d4mprv4rmyv6lt', + poap: ['OKP4 Young Druid'], + know: 0 + }, + { + rank: 5, + valoper: 'okp4102yjeeher64ttnu27fcvd0ah774ywsrp3qst4e', + poap: ['OKP4 Young Druid'], + know: 0 + }, + { + rank: 5, + valoper: 'okp4127ey4un5zdfylq0a9fwgp8z27av5at0y8k0wrc', + poap: ['OKP4 Young Druid'], + know: 0 + }, + { + rank: 5, + valoper: 'okp41czkq2rg372tyrkdw2cpczgkd9k7x7zrgqcv8g6', + poap: ['OKP4 Young Druid'], + know: 0 + }, + { + rank: 5, + valoper: 'okp416ve0fkf8ew8hezevhmyfg8ftkuzrx37chest4z', + poap: ['OKP4 Young Druid'], + know: 0 + }, + { + rank: 5, + valoper: 'okp41qaqzdzme4apm3d6f2lrg6espuay3wa0s5dap3x', + poap: ['OKP4 Young Druid'], + know: 0 + }, + { + rank: 5, + valoper: 'okp41vplplzclfmlg7pyutnau7p0w40gv0lp7nucdy3', + poap: ['OKP4 Young Druid'], + know: 0 + }, + { + rank: 5, + valoper: 'okp41srjjchn57narjr7gjxntrtdkegrx96mr495a77', + poap: ['OKP4 Young Druid'], + know: 0 + }, + { + rank: 5, + valoper: 'okp41hxlrt94n2nj6acpvk60wz8wdr4tgn84sk5a7ln', + poap: ['OKP4 Young Druid'], + know: 0 + }, + { + rank: 5, + valoper: 'okp41s7pz4rc7sq4hj88ljcruvrh4v7hk28paf6dm30', + poap: ['OKP4 Young Druid'], + know: 0 + }, + { + rank: 5, + valoper: 'okp41qcual5kgmw3gqc9q22hlp0aluc3t7rnsvlux5l', + poap: ['OKP4 Young Druid'], + know: 0 + }, + { + rank: 5, + valoper: 'okp41k5pyrxxd3usuneeeh4gssqh7sw0f73kv09dxql', + poap: ['OKP4 Young Druid'], + know: 0 + }, + { + rank: 5, + valoper: 'okp41wr6s62fgs7asqjt3yy566rlrtakujc8r7l7nwr', + poap: ['OKP4 Young Druid'], + know: 0 + }, + { + rank: 5, + valoper: 'okp41mde8kzhdc80qdxsx20rf4jfxhfnwxk4a7u29mh', + poap: ['OKP4 Young Druid'], + know: 0 + }, + { + rank: 5, + valoper: 'okp41hy5f3vftpj8lm9y8f5k4p38w73xu73rdeg0y3m', + poap: ['OKP4 Young Druid'], + know: 0 + }, + { + rank: 5, + valoper: 'okp41m8f8qnr2h5mdwu8ntjjrtyjcac74tjs62xahqz', + poap: ['OKP4 Young Druid'], + know: 0 + }, + { + rank: 5, + valoper: 'okp41vmv0tle77ag7r4v2myktnlj6a94uhel0jaf5af', + poap: ['OKP4 Young Druid'], + know: 0 + }, + { + rank: 5, + valoper: 'okp41wknzm45q885vyp7ynr6ld0u0h2ah4mpv60lq58', + poap: ['OKP4 Young Druid'], + know: 0 + } ] }) From c1b3571963ad010f752cc3b2ec3f79c88e7e520f Mon Sep 17 00:00:00 2001 From: houssemmimoun27 Date: Thu, 29 Jun 2023 15:20:36 +0100 Subject: [PATCH 02/12] feat: implement results page --- src/components/index.ts | 3 + src/components/table/results/ResultsTable.tsx | 140 ++++++++++++++++++ src/data/phase/dto.type.ts | 2 +- src/pages/builders/results.tsx | 52 +++++++ src/routes.ts | 5 + 5 files changed, 201 insertions(+), 1 deletion(-) create mode 100644 src/components/table/results/ResultsTable.tsx create mode 100644 src/pages/builders/results.tsx diff --git a/src/components/index.ts b/src/components/index.ts index 65e8364a..d2f32877 100644 --- a/src/components/index.ts +++ b/src/components/index.ts @@ -12,6 +12,8 @@ const Podium = dynamic(async () => await import('@/components/podium/Podium')) const LeaderboardTable = dynamic(async () => await import('@/components/table/LeaderboardTable')) +const ResultsTable = dynamic(async () => await import('@/components/table/results/ResultsTable')) + const Countdown = dynamic(async () => await import('@/components/countdown/Countdown')) const Snackbar = dynamic(async () => await import('@/components/snackbar/Snackbar')) @@ -37,6 +39,7 @@ export { BaseCard, Podium, LeaderboardTable, + ResultsTable, Countdown, Snackbar, GoBackButton, diff --git a/src/components/table/results/ResultsTable.tsx b/src/components/table/results/ResultsTable.tsx new file mode 100644 index 00000000..6d5bb263 --- /dev/null +++ b/src/components/table/results/ResultsTable.tsx @@ -0,0 +1,140 @@ +import React, { useCallback, useState, useMemo } from 'react' +import classNames from 'classnames' +import Snackbar from '@/components/snackbar/Snackbar' +import { Search } from '@/components/search/Search' +import { Copy } from '@/components/copy/Copy' +import { useMediaType } from '@/hook/useMediaType' +import type { ResultsDTO } from '@/data/phase/dto.type' +import type { Column } from '@/components/table/table.type' + +export type ResultsTableProps = { + results?: ResultsDTO[] + onSearchChange: (value: string) => void +} + +const ResultsTable: React.FC = ({ results, onSearchChange }) => { + const [address, setAddress] = useState('') + const isMobileScreen = useMediaType('(max-width: 580px)') + + const handleCopyAddress = useCallback( + (address: string) => { + setAddress(address) + }, + [setAddress] + ) + + const columns: Column[] = useMemo( + () => + [ + { + label: 'Rank', + renderCell: (druid: ResultsDTO) => {druid.rank.toLocaleString()}, + width: isMobileScreen ? '18%' : '10%' + }, + { + label: 'Address', + renderCell: (druid: ResultsDTO) => ( +
+ {druid.valoper} + +
+ ), + width: isMobileScreen ? '50%' : '25%' + }, + { + label: 'Awarded POAP', + renderCell: (druid: ResultsDTO) => ( +
    + {druid.poap.map(x => ( +
  • {x}
  • + ))} +
+ ), + width: '35%', + hidden: isMobileScreen + }, + { + label: 'Awarded know', + renderCell: (druid: ResultsDTO) => {druid.know}, + width: isMobileScreen ? '32%' : '30%' + } + ].filter(column => !column.hidden), + [handleCopyAddress, isMobileScreen] + ) + + const handleSearchChange = useCallback( + (value: string) => { + onSearchChange(value) + }, + [onSearchChange] + ) + + const handleSnackbarClose = useCallback(() => { + setAddress('') + }, [setAddress]) + + return ( + <> +
+
+

RANKING

+ +
+
+ + + + {columns.map(({ label, width }, index) => ( + + ))} + + + + {results && results.length > 0 && ( + + {results.map((row, index) => { + const podiumClassname = classNames({ + gold: row.rank === 1, + silver: row.rank === 2, + bronze: row.rank === 3 + }) + return ( + + {columns.map((column, index) => { + const { renderCell } = column + return + })} + {!isMobileScreen && ( + + ) + })} + + )} + {!results?.length && ( + + + + )} + +
+ {label} +
{renderCell(row)} + )} +
+ No marks found... +
+
+
+ + + ) +} + +export default ResultsTable diff --git a/src/data/phase/dto.type.ts b/src/data/phase/dto.type.ts index 33e004dc..f3ece87c 100644 --- a/src/data/phase/dto.type.ts +++ b/src/data/phase/dto.type.ts @@ -55,5 +55,5 @@ export type PhaseDTO = Readonly<{ phaseDuration?: Duration tasks: TaskDTO[] challenges?: ChallengeDTO[] - results: ResultsDTO[] + results?: ResultsDTO[] }> diff --git a/src/pages/builders/results.tsx b/src/pages/builders/results.tsx new file mode 100644 index 00000000..84cca2c6 --- /dev/null +++ b/src/pages/builders/results.tsx @@ -0,0 +1,52 @@ +import React, { useMemo, useState, useCallback } from 'react' +import type { GetServerSideProps, NextPage } from 'next' +import type { Config } from '@/types/config.type' +import { config } from '@/lib/config' +import Phases from '@/data/phase' +import { ResultsTable } from '@/components/index' + +export type ResultsProps = Pick + +const Results: NextPage = props => { + const { phases } = props + const [query, setQuery] = useState('') + const results = useMemo( + () => + Phases(phases)[Phases(phases).length - 1].results?.filter( + row => + row.valoper.toLowerCase().includes(query.toLowerCase()) || + row.poap.find(item => item.toLowerCase().includes(query.toLowerCase())) + ), + [phases, query] + ) + + const handleSearchChange = useCallback((value: string): void => setQuery(value), []) + + return ( +
+
+
+

Results

+
+

Here you can consult the marks allocated to builders for the Samhain challenges.

+
+
+ +
+
+
+
+
+ ) +} + +export const getServerSideProps: GetServerSideProps = async () => ({ + props: { + ...config + } +}) + +export default Results diff --git a/src/routes.ts b/src/routes.ts index b4993889..444c2e8e 100644 --- a/src/routes.ts +++ b/src/routes.ts @@ -40,6 +40,11 @@ const validatorsProgramMenu: SubRoute[] = [ ] const buildersProgramMenu: SubRoute[] = [ + { + name: 'Results', + path: '/builders/results', + hash: '#results' + }, { name: 'Challenges', path: '/builders/challenges', From f261b26b96cd831dcfe47cfc0af51debcb0c012b Mon Sep 17 00:00:00 2001 From: houssemmimoun27 Date: Thu, 29 Jun 2023 15:26:22 +0100 Subject: [PATCH 03/12] style: improve style results page --- src/components/table/results/ResultsTable.tsx | 4 +- .../table/results/resultsTable.scss | 171 ++++++++++++++++++ src/styles.scss | 59 ++++++ 3 files changed, 232 insertions(+), 2 deletions(-) create mode 100644 src/components/table/results/resultsTable.scss diff --git a/src/components/table/results/ResultsTable.tsx b/src/components/table/results/ResultsTable.tsx index 6d5bb263..75114a86 100644 --- a/src/components/table/results/ResultsTable.tsx +++ b/src/components/table/results/ResultsTable.tsx @@ -45,8 +45,8 @@ const ResultsTable: React.FC = ({ results, onSearchChange }) label: 'Awarded POAP', renderCell: (druid: ResultsDTO) => (
    - {druid.poap.map(x => ( -
  • {x}
  • + {druid.poap.map(item => ( +
  • {item}
  • ))}
), diff --git a/src/components/table/results/resultsTable.scss b/src/components/table/results/resultsTable.scss new file mode 100644 index 00000000..58e4fc83 --- /dev/null +++ b/src/components/table/results/resultsTable.scss @@ -0,0 +1,171 @@ +$podium-colors: ('gold', 'silver', 'bronze'); + +.okp4-nemeton-web-results-table-main { + display: flex; + align-items: center; + flex-direction: column; + align-items: baseline; + + .okp4-nemeton-web-results-table-header-container { + display: flex; + align-items: center; + width: 100%; + + @media screen and (max-width: 1000px) { + flex-direction: column; + gap: 28px; + } + } + + .okp4-nemeton-web-results-table-content-container { + width: 100%; + margin-top: 20px; + min-height: 400px; + padding-left: 17px; + + table { + width: 100%; + border-spacing: 0 12px; + table-layout: fixed; + + tr { + height: 48px; + } + + th { + font-family: Gotham bold, sans-serif; + line-height: 24px; + font-size: 14px; + color: rgba(255, 255, 255, 0.6); + text-transform: uppercase; + text-align: start; + + &:first-child { + padding-left: 41px; + + @media screen and (max-width: 1000px) { + padding-left: unset; + } + } + } + + tbody { + tr { + font-family: Gotham light, sans-serif; + background: none; + border-radius: 6px; + position: relative; + transform: scale(1); + height: 48px; + + &.gold { + background: linear-gradient(90deg, $choco-100 0%, rgba(209, 193, 147, 0) 100%); + } + + &.silver { + background: linear-gradient(90deg, $white-200 0%, rgba(180, 184, 187, 0) 100%); + } + + &.bronze { + background: linear-gradient(90deg, $choco 0%, rgba(180, 150, 137, 0) 100%); + } + + &.gold, + &.silver, + &.bronze { + font-family: Gotham, sans-serif; + font-weight: 700; + background-attachment: fixed; + } + + .okp4-nemeton-web-results-table-podium-logo { + position: absolute; + width: 39px; + height: 39px; + background-repeat: no-repeat; + background-position: 0; + left: -14px; + top: -6px; + bottom: 0; + + @each $podium-color in $podium-colors { + &.#{$podium-color} { + background-image: url('/icons/#{$podium-color}-druid.svg'); + } + } + } + + .flex-cell, + a { + @include flex-rows-with-gap(8px); + align-items: center; + max-width: 95%; + + > img:first-of-type { + border-radius: 4px; + } + + .okp4-nemeton-web-copy-logo { + width: 100%; + } + } + + td { + font-size: 16px; + color: $white; + border: unset; + padding: 11px 0; + vertical-align: top; + + &:nth-child(2) { + font-family: Gotham light, sans-serif; + } + + &:nth-child(3) { + li { + font-family: 'Gotham light', sans-serif; + } + } + + &:first-child { + border-top-left-radius: 6px; + border-bottom-left-radius: 6px; + padding-left: 41px; + + @media screen and (max-width: 1000px) { + padding-left: 15px; + } + } + + &:last-child { + border-bottom-right-radius: 6px; + border-top-right-radius: 6px; + } + + span { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + } + + ul { + list-style: none; + padding: 0; + margin: 0; + + li { + color: $white; + font-size: 16px; + font-family: Gotham; + line-height: 24px; + margin: 0; + padding: 0; + } + } + } + } + } + } +} + diff --git a/src/styles.scss b/src/styles.scss index c4fd913d..c179b071 100644 --- a/src/styles.scss +++ b/src/styles.scss @@ -10,6 +10,7 @@ @import 'src/components/podium/podium.scss'; @import 'src/components/search/search.scss'; @import 'src/components/table/table.scss'; +@import 'src/components/table/results/resultsTable.scss'; @import 'src/components/countdown/countdown.scss'; @import 'src/components/accordion/accordion.scss'; @import 'src/components/contentBlock/contentBlock.scss'; @@ -572,6 +573,64 @@ main { font-family: Gotham bold, sans-serif; } } + + .okp4-nemeton-web-page-results-container { + padding: 0 83px; + + @media screen and (max-width: 1000px) { + padding: 0; + } + + p { + @media screen and (max-width: 1000px) { + text-align: center; + } + + @media screen and (min-width: 1001px) { + font-size: 31px; + line-height: 37px; + } + } + + .okp4-nemeton-web-page-results-main-container { + padding-top: 5px; + + @media screen and (min-width: 1000px) { + &:before { + content: ''; + position: absolute; + height: 100%; + width: 100%; + background-image: url('/image/nemeton-medium-reversed.webp'); + background-repeat: no-repeat; + background-size: cover; + left: 0; + } + } + + .okp4-nemeton-web-page-results-main-wrapper { + position: relative; + display: flex; + flex-direction: column; + background: $green; + border-radius: 20px 20px 0 0; + margin-top: 74px; + border-radius: 20px 20px 0px 0px; + padding: 40px 20px; + + @media screen and (max-width: 1000px) { + margin-top: 5px; + background: none; + padding: unset; + align-items: center; + } + + @media screen and (min-width: 1200px) { + padding: 75px 141px 75px 115px; + } + } + } + } } } From 4f640f947e68711536bf98d4fb3b8410c96387b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Vilcot?= Date: Fri, 30 Jun 2023 15:20:37 +0200 Subject: [PATCH 04/12] refactor(ui): split builder & validator table components --- src/components/index.ts | 12 +++++--- .../LeaderboardTable.tsx} | 30 +++++++++---------- .../leaderboardTable.scss} | 0 .../{ => validators}/LeaderboardTable.tsx | 4 +-- src/mixins.scss | 2 +- src/styles.scss | 12 ++++---- 6 files changed, 32 insertions(+), 28 deletions(-) rename src/components/table/{results/ResultsTable.tsx => builders/LeaderboardTable.tsx} (82%) rename src/components/table/{results/resultsTable.scss => builders/leaderboardTable.scss} (100%) rename src/components/table/{ => validators}/LeaderboardTable.tsx (98%) diff --git a/src/components/index.ts b/src/components/index.ts index d2f32877..6217cb42 100644 --- a/src/components/index.ts +++ b/src/components/index.ts @@ -10,9 +10,13 @@ const Accordion = dynamic(async () => await import('@/components/accordion/Accor const Podium = dynamic(async () => await import('@/components/podium/Podium')) -const LeaderboardTable = dynamic(async () => await import('@/components/table/LeaderboardTable')) +const ValidatorsLeaderboardTable = dynamic( + async () => await import('@/components/table/validators/LeaderboardTable') +) -const ResultsTable = dynamic(async () => await import('@/components/table/results/ResultsTable')) +const BuilderLeaderboardTable = dynamic( + async () => await import('@/components/table/builders/LeaderboardTable') +) const Countdown = dynamic(async () => await import('@/components/countdown/Countdown')) @@ -38,8 +42,8 @@ export { Accordion, BaseCard, Podium, - LeaderboardTable, - ResultsTable, + ValidatorsLeaderboardTable, + BuilderLeaderboardTable, Countdown, Snackbar, GoBackButton, diff --git a/src/components/table/results/ResultsTable.tsx b/src/components/table/builders/LeaderboardTable.tsx similarity index 82% rename from src/components/table/results/ResultsTable.tsx rename to src/components/table/builders/LeaderboardTable.tsx index 75114a86..f5d4152f 100644 --- a/src/components/table/results/ResultsTable.tsx +++ b/src/components/table/builders/LeaderboardTable.tsx @@ -4,15 +4,15 @@ import Snackbar from '@/components/snackbar/Snackbar' import { Search } from '@/components/search/Search' import { Copy } from '@/components/copy/Copy' import { useMediaType } from '@/hook/useMediaType' -import type { ResultsDTO } from '@/data/phase/dto.type' import type { Column } from '@/components/table/table.type' +import type { BuilderDescriptor, BuildersDescriptor } from '@/entity/builder' -export type ResultsTableProps = { - results?: ResultsDTO[] +export type LeaderboardTable = { + data: BuildersDescriptor onSearchChange: (value: string) => void } -const ResultsTable: React.FC = ({ results, onSearchChange }) => { +const LeaderboardTable: React.FC = ({ data, onSearchChange }) => { const [address, setAddress] = useState('') const isMobileScreen = useMediaType('(max-width: 580px)') @@ -23,17 +23,17 @@ const ResultsTable: React.FC = ({ results, onSearchChange }) [setAddress] ) - const columns: Column[] = useMemo( + const columns: Column[] = useMemo( () => [ { label: 'Rank', - renderCell: (druid: ResultsDTO) => {druid.rank.toLocaleString()}, + renderCell: (druid: BuilderDescriptor) => {druid.rank.toLocaleString()}, width: isMobileScreen ? '18%' : '10%' }, { label: 'Address', - renderCell: (druid: ResultsDTO) => ( + renderCell: (druid: BuilderDescriptor) => (
{druid.valoper} @@ -43,9 +43,9 @@ const ResultsTable: React.FC = ({ results, onSearchChange }) }, { label: 'Awarded POAP', - renderCell: (druid: ResultsDTO) => ( + renderCell: (druid: BuilderDescriptor) => (
    - {druid.poap.map(item => ( + {druid.earnings.poap.map(item => (
  • {item}
  • ))}
@@ -55,7 +55,7 @@ const ResultsTable: React.FC = ({ results, onSearchChange }) }, { label: 'Awarded know', - renderCell: (druid: ResultsDTO) => {druid.know}, + renderCell: (druid: BuilderDescriptor) => {druid.earnings.know}, width: isMobileScreen ? '32%' : '30%' } ].filter(column => !column.hidden), @@ -92,9 +92,9 @@ const ResultsTable: React.FC = ({ results, onSearchChange }) - {results && results.length > 0 && ( + {data.length > 0 && ( - {results.map((row, index) => { + {data.map((row, index) => { const podiumClassname = classNames({ gold: row.rank === 1, silver: row.rank === 2, @@ -116,10 +116,10 @@ const ResultsTable: React.FC = ({ results, onSearchChange }) })} )} - {!results?.length && ( + {!data.length && ( - No marks found... + No results found... )} @@ -137,4 +137,4 @@ const ResultsTable: React.FC = ({ results, onSearchChange }) ) } -export default ResultsTable +export default LeaderboardTable diff --git a/src/components/table/results/resultsTable.scss b/src/components/table/builders/leaderboardTable.scss similarity index 100% rename from src/components/table/results/resultsTable.scss rename to src/components/table/builders/leaderboardTable.scss diff --git a/src/components/table/LeaderboardTable.tsx b/src/components/table/validators/LeaderboardTable.tsx similarity index 98% rename from src/components/table/LeaderboardTable.tsx rename to src/components/table/validators/LeaderboardTable.tsx index 6d3cd815..2992e07d 100644 --- a/src/components/table/LeaderboardTable.tsx +++ b/src/components/table/validators/LeaderboardTable.tsx @@ -2,7 +2,7 @@ import { Skeleton } from '@mui/material' import classNames from 'classnames' import Image from 'next/image' import Link from 'next/link' -import hatDruidAnimationData from '../../../public/json/hat-druid.json' +import hatDruidAnimationData from '../../../../public/json/hat-druid.json' import React, { useCallback, useMemo, useState } from 'react' import { useMediaType } from '@/hook/useMediaType' import type { DruidDescriptor } from '@/entity/druid' @@ -10,7 +10,7 @@ import { Search } from '@/components/search/Search' import Snackbar from '@/components/snackbar/Snackbar' import LottieLoader from '@/components/loader/LottieLoader' import { Copy } from '@/components/copy/Copy' -import type { Column } from './table.type' +import type { Column } from '../table.type' export type LeaderboardTableProps = { data: DruidDescriptor[] diff --git a/src/mixins.scss b/src/mixins.scss index 117fa837..8e6b30ad 100644 --- a/src/mixins.scss +++ b/src/mixins.scss @@ -44,4 +44,4 @@ @mixin rotation-animation($degrees) { transform: rotate($degrees); transition: transform 0.1s linear; -} \ No newline at end of file +} diff --git a/src/styles.scss b/src/styles.scss index c179b071..b547fccd 100644 --- a/src/styles.scss +++ b/src/styles.scss @@ -10,7 +10,7 @@ @import 'src/components/podium/podium.scss'; @import 'src/components/search/search.scss'; @import 'src/components/table/table.scss'; -@import 'src/components/table/results/resultsTable.scss'; +@import 'src/components/table/builders/leaderboardTable.scss'; @import 'src/components/countdown/countdown.scss'; @import 'src/components/accordion/accordion.scss'; @import 'src/components/contentBlock/contentBlock.scss'; @@ -587,16 +587,16 @@ main { } @media screen and (min-width: 1001px) { - font-size: 31px; - line-height: 37px; - } + font-size: 31px; + line-height: 37px; + } } .okp4-nemeton-web-page-results-main-container { padding-top: 5px; @media screen and (min-width: 1000px) { - &:before { + &::before { content: ''; position: absolute; height: 100%; @@ -615,7 +615,7 @@ main { background: $green; border-radius: 20px 20px 0 0; margin-top: 74px; - border-radius: 20px 20px 0px 0px; + border-radius: 20px 20px 0 0; padding: 40px 20px; @media screen and (max-width: 1000px) { From c59f74432105bae0953fd980671f12b4895bb664 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Vilcot?= Date: Fri, 30 Jun 2023 15:22:13 +0200 Subject: [PATCH 05/12] feat(data): add builder dto types --- src/data/builder/dto.type.ts | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 src/data/builder/dto.type.ts diff --git a/src/data/builder/dto.type.ts b/src/data/builder/dto.type.ts new file mode 100644 index 00000000..56d794ca --- /dev/null +++ b/src/data/builder/dto.type.ts @@ -0,0 +1,14 @@ +type Valoper = string + +type BuilderIdentity = Readonly<{ + valoper: Valoper +}> + +type Builder = Readonly<{ + rank: number + poap: string[] + know: number +}> + +export type BuilderDTO = BuilderIdentity & Builder +export type BuildersDTO = BuilderDTO[] From 84fea1a1c27d8827c38caf201409d9838381261e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Vilcot?= Date: Fri, 30 Jun 2023 15:22:45 +0200 Subject: [PATCH 06/12] feat(entity): add builder entity --- src/entity/builder.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 src/entity/builder.ts diff --git a/src/entity/builder.ts b/src/entity/builder.ts new file mode 100644 index 00000000..ffe42823 --- /dev/null +++ b/src/entity/builder.ts @@ -0,0 +1,12 @@ +type Valoper = string + +export type BuilderDescriptor = Readonly<{ + rank: number + valoper: Valoper + earnings: { + poap: string[] + know: number + } +}> + +export type BuildersDescriptor = BuilderDescriptor[] From 729b384ae11b3888b89b8d297b2dde34a484a56e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Vilcot?= Date: Fri, 30 Jun 2023 15:23:12 +0200 Subject: [PATCH 07/12] feat(data): add builders data --- src/data/builder/builder.ts | 203 ++++++++++++++++++++++++++++++++++++ 1 file changed, 203 insertions(+) create mode 100644 src/data/builder/builder.ts diff --git a/src/data/builder/builder.ts b/src/data/builder/builder.ts new file mode 100644 index 00000000..5f7c05b1 --- /dev/null +++ b/src/data/builder/builder.ts @@ -0,0 +1,203 @@ +import type { BuildersDTO } from './dto.type' + +export const buildersData: BuildersDTO = [ + { + rank: 1, + valoper: 'okp41u6vp630kpjpxqp2p6xwagtlkzq58tw3zadwrgu', + poap: [ + 'OKP4 Ontologist Apprentice', + 'OKP4 Governance Creator', + 'Dagda Servant', + 'OKP4 Law-Stone Builder', + 'OKP4 Objectarium Explorer', + 'OKP4 Young Druid' + ], + know: 30000 + }, + { + rank: 2, + valoper: 'okp41wy8ywt98sv5pmsg873rct4pxtw0ntxuwxdtzen', + poap: [ + 'OKP4 Ontologist Apprentice', + 'OKP4 Governance Creator', + 'OKP4 Law-Stone Builder', + 'OKP4 Objectarium Explorer', + 'OKP4 Young Druid' + ], + know: 30000 + }, + { + rank: 3, + valoper: 'okp41hkf8uj3yg9v2dwdq6ygapf7gyjnjvuamgz6m0g', + poap: ['OKP4 Law-Stone Builder', 'OKP4 Objectarium Explorer', 'OKP4 Young Druid'], + know: 0 + }, + { + rank: 3, + valoper: 'okp413pn0qmuxferwvjv0yzssedlkxff77ddtcwfefd', + poap: ['OKP4 Law-Stone Builder', 'OKP4 Objectarium Explorer', 'OKP4 Young Druid'], + know: 0 + }, + { + rank: 4, + valoper: 'okp41cvclz3u9zrpfvrhymds9pjp63x94wcujzlaaw0', + poap: ['OKP4 Objectarium Explorer', 'OKP4 Young Druid'], + know: 0 + }, + { + rank: 4, + valoper: 'okp413dgy7rtjjvvlkzu2upgtntdyzy4hnr6efarspq', + poap: ['OKP4 Objectarium Explorer', 'OKP4 Young Druid'], + know: 0 + }, + { + rank: 4, + valoper: 'okp41pa7ngqmqz5z4x88fd273kha89mtjkncnm5nwnx', + poap: ['OKP4 Objectarium Explorer', 'OKP4 Young Druid'], + know: 0 + }, + { + rank: 4, + valoper: 'okp41htsmzdnjf9zgrpnmyjzd04w3ql5mnq9xsaek64', + poap: ['OKP4 Objectarium Explorer', 'OKP4 Young Druid'], + know: 0 + }, + { + rank: 5, + valoper: 'okp41d26y0n0y84yj2r9gzeyudzd6v5c8z6m7wmryer', + poap: ['OKP4 Young Druid'], + know: 0 + }, + { + rank: 5, + valoper: 'okp414y9j2e7lqy0cr3nd5w73esuqtx07pse3ts5au4', + poap: ['OKP4 Young Druid'], + know: 0 + }, + { + rank: 5, + valoper: 'okp410t2s8nzagk3lf9ydkn0t3ur5f0qcsy3fx6wdsh', + poap: ['OKP4 Young Druid'], + know: 0 + }, + { + rank: 5, + valoper: 'okp41wr7xfnm65keadtnu2asucqur2w54vdvder0du0', + poap: ['OKP4 Young Druid'], + know: 0 + }, + { + rank: 5, + valoper: 'okp41482yd7n04xk3l77wkaq7hntyq0xlr4sjjyjafz', + poap: ['OKP4 Young Druid'], + know: 0 + }, + { + rank: 5, + valoper: 'okp414u09zxsxw752dfrzy7g4zxj6d4mprv4rmyv6lt', + poap: ['OKP4 Young Druid'], + know: 0 + }, + { + rank: 5, + valoper: 'okp4102yjeeher64ttnu27fcvd0ah774ywsrp3qst4e', + poap: ['OKP4 Young Druid'], + know: 0 + }, + { + rank: 5, + valoper: 'okp4127ey4un5zdfylq0a9fwgp8z27av5at0y8k0wrc', + poap: ['OKP4 Young Druid'], + know: 0 + }, + { + rank: 5, + valoper: 'okp41czkq2rg372tyrkdw2cpczgkd9k7x7zrgqcv8g6', + poap: ['OKP4 Young Druid'], + know: 0 + }, + { + rank: 5, + valoper: 'okp416ve0fkf8ew8hezevhmyfg8ftkuzrx37chest4z', + poap: ['OKP4 Young Druid'], + know: 0 + }, + { + rank: 5, + valoper: 'okp41qaqzdzme4apm3d6f2lrg6espuay3wa0s5dap3x', + poap: ['OKP4 Young Druid'], + know: 0 + }, + { + rank: 5, + valoper: 'okp41vplplzclfmlg7pyutnau7p0w40gv0lp7nucdy3', + poap: ['OKP4 Young Druid'], + know: 0 + }, + { + rank: 5, + valoper: 'okp41srjjchn57narjr7gjxntrtdkegrx96mr495a77', + poap: ['OKP4 Young Druid'], + know: 0 + }, + { + rank: 5, + valoper: 'okp41hxlrt94n2nj6acpvk60wz8wdr4tgn84sk5a7ln', + poap: ['OKP4 Young Druid'], + know: 0 + }, + { + rank: 5, + valoper: 'okp41s7pz4rc7sq4hj88ljcruvrh4v7hk28paf6dm30', + poap: ['OKP4 Young Druid'], + know: 0 + }, + { + rank: 5, + valoper: 'okp41qcual5kgmw3gqc9q22hlp0aluc3t7rnsvlux5l', + poap: ['OKP4 Young Druid'], + know: 0 + }, + { + rank: 5, + valoper: 'okp41k5pyrxxd3usuneeeh4gssqh7sw0f73kv09dxql', + poap: ['OKP4 Young Druid'], + know: 0 + }, + { + rank: 5, + valoper: 'okp41wr6s62fgs7asqjt3yy566rlrtakujc8r7l7nwr', + poap: ['OKP4 Young Druid'], + know: 0 + }, + { + rank: 5, + valoper: 'okp41mde8kzhdc80qdxsx20rf4jfxhfnwxk4a7u29mh', + poap: ['OKP4 Young Druid'], + know: 0 + }, + { + rank: 5, + valoper: 'okp41hy5f3vftpj8lm9y8f5k4p38w73xu73rdeg0y3m', + poap: ['OKP4 Young Druid'], + know: 0 + }, + { + rank: 5, + valoper: 'okp41m8f8qnr2h5mdwu8ntjjrtyjcac74tjs62xahqz', + poap: ['OKP4 Young Druid'], + know: 0 + }, + { + rank: 5, + valoper: 'okp41vmv0tle77ag7r4v2myktnlj6a94uhel0jaf5af', + poap: ['OKP4 Young Druid'], + know: 0 + }, + { + rank: 5, + valoper: 'okp41wknzm45q885vyp7ynr6ld0u0h2ah4mpv60lq58', + poap: ['OKP4 Young Druid'], + know: 0 + } +] From ec0bb01fc439653bdd7744c2360e17e5ba494393 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Vilcot?= Date: Fri, 30 Jun 2023 15:23:30 +0200 Subject: [PATCH 08/12] feat(mapper): add builder mapper --- src/data/builder/mapper.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 src/data/builder/mapper.ts diff --git a/src/data/builder/mapper.ts b/src/data/builder/mapper.ts new file mode 100644 index 00000000..1aef3c81 --- /dev/null +++ b/src/data/builder/mapper.ts @@ -0,0 +1,11 @@ +import type { BuilderDescriptor } from '@/entity/builder' +import type { BuilderDTO } from './dto.type' + +export const mapBuilderDTOtoBuilderDescriptor = (builder: BuilderDTO): BuilderDescriptor => ({ + rank: builder.rank, + valoper: builder.valoper, + earnings: { + poap: builder.poap, + know: builder.know + } +}) From f2cc9e41f16e199d98899e0cf6e77b4059813042 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Vilcot?= Date: Fri, 30 Jun 2023 15:23:58 +0200 Subject: [PATCH 09/12] feat(data): remove builders data from phase --- src/data/phase/dto.type.ts | 8 -- src/data/phase/samhain.tsx | 201 ------------------------------------- 2 files changed, 209 deletions(-) diff --git a/src/data/phase/dto.type.ts b/src/data/phase/dto.type.ts index f3ece87c..9208c61f 100644 --- a/src/data/phase/dto.type.ts +++ b/src/data/phase/dto.type.ts @@ -40,13 +40,6 @@ export type ChallengeDTO = Readonly<{ challengeTasks: ChallengeTasks[] }> -export type ResultsDTO = Readonly<{ - rank: number - valoper: string - poap: string[] - know: number -}> - export type PhaseDTO = Readonly<{ number: number phaseName: string @@ -55,5 +48,4 @@ export type PhaseDTO = Readonly<{ phaseDuration?: Duration tasks: TaskDTO[] challenges?: ChallengeDTO[] - results?: ResultsDTO[] }> diff --git a/src/data/phase/samhain.tsx b/src/data/phase/samhain.tsx index 35e6c1f8..3b358e94 100644 --- a/src/data/phase/samhain.tsx +++ b/src/data/phase/samhain.tsx @@ -843,206 +843,5 @@ export const samhain = ({ } ] } - ], - results: [ - { - rank: 1, - valoper: 'okp41u6vp630kpjpxqp2p6xwagtlkzq58tw3zadwrgu', - poap: [ - 'OKP4 Ontologist Apprentice', - 'OKP4 Governance Creator', - 'Dagda Servant', - 'OKP4 Law-Stone Builder', - 'OKP4 Objectarium Explorer', - 'OKP4 Young Druid' - ], - know: 30000 - }, - { - rank: 2, - valoper: 'okp41wy8ywt98sv5pmsg873rct4pxtw0ntxuwxdtzen', - poap: [ - 'OKP4 Ontologist Apprentice', - 'OKP4 Governance Creator', - 'OKP4 Law-Stone Builder', - 'OKP4 Objectarium Explorer', - 'OKP4 Young Druid' - ], - know: 30000 - }, - { - rank: 3, - valoper: 'okp41hkf8uj3yg9v2dwdq6ygapf7gyjnjvuamgz6m0g', - poap: ['OKP4 Law-Stone Builder', 'OKP4 Objectarium Explorer', 'OKP4 Young Druid'], - know: 0 - }, - { - rank: 3, - valoper: 'okp413pn0qmuxferwvjv0yzssedlkxff77ddtcwfefd', - poap: ['OKP4 Law-Stone Builder', 'OKP4 Objectarium Explorer', 'OKP4 Young Druid'], - know: 0 - }, - { - rank: 4, - valoper: 'okp41cvclz3u9zrpfvrhymds9pjp63x94wcujzlaaw0', - poap: ['OKP4 Objectarium Explorer', 'OKP4 Young Druid'], - know: 0 - }, - { - rank: 4, - valoper: 'okp413dgy7rtjjvvlkzu2upgtntdyzy4hnr6efarspq', - poap: ['OKP4 Objectarium Explorer', 'OKP4 Young Druid'], - know: 0 - }, - { - rank: 4, - valoper: 'okp41pa7ngqmqz5z4x88fd273kha89mtjkncnm5nwnx', - poap: ['OKP4 Objectarium Explorer', 'OKP4 Young Druid'], - know: 0 - }, - { - rank: 4, - valoper: 'okp41htsmzdnjf9zgrpnmyjzd04w3ql5mnq9xsaek64', - poap: ['OKP4 Objectarium Explorer', 'OKP4 Young Druid'], - know: 0 - }, - { - rank: 5, - valoper: 'okp41d26y0n0y84yj2r9gzeyudzd6v5c8z6m7wmryer', - poap: ['OKP4 Young Druid'], - know: 0 - }, - { - rank: 5, - valoper: 'okp414y9j2e7lqy0cr3nd5w73esuqtx07pse3ts5au4', - poap: ['OKP4 Young Druid'], - know: 0 - }, - { - rank: 5, - valoper: 'okp410t2s8nzagk3lf9ydkn0t3ur5f0qcsy3fx6wdsh', - poap: ['OKP4 Young Druid'], - know: 0 - }, - { - rank: 5, - valoper: 'okp41wr7xfnm65keadtnu2asucqur2w54vdvder0du0', - poap: ['OKP4 Young Druid'], - know: 0 - }, - { - rank: 5, - valoper: 'okp41482yd7n04xk3l77wkaq7hntyq0xlr4sjjyjafz', - poap: ['OKP4 Young Druid'], - know: 0 - }, - { - rank: 5, - valoper: 'okp414u09zxsxw752dfrzy7g4zxj6d4mprv4rmyv6lt', - poap: ['OKP4 Young Druid'], - know: 0 - }, - { - rank: 5, - valoper: 'okp4102yjeeher64ttnu27fcvd0ah774ywsrp3qst4e', - poap: ['OKP4 Young Druid'], - know: 0 - }, - { - rank: 5, - valoper: 'okp4127ey4un5zdfylq0a9fwgp8z27av5at0y8k0wrc', - poap: ['OKP4 Young Druid'], - know: 0 - }, - { - rank: 5, - valoper: 'okp41czkq2rg372tyrkdw2cpczgkd9k7x7zrgqcv8g6', - poap: ['OKP4 Young Druid'], - know: 0 - }, - { - rank: 5, - valoper: 'okp416ve0fkf8ew8hezevhmyfg8ftkuzrx37chest4z', - poap: ['OKP4 Young Druid'], - know: 0 - }, - { - rank: 5, - valoper: 'okp41qaqzdzme4apm3d6f2lrg6espuay3wa0s5dap3x', - poap: ['OKP4 Young Druid'], - know: 0 - }, - { - rank: 5, - valoper: 'okp41vplplzclfmlg7pyutnau7p0w40gv0lp7nucdy3', - poap: ['OKP4 Young Druid'], - know: 0 - }, - { - rank: 5, - valoper: 'okp41srjjchn57narjr7gjxntrtdkegrx96mr495a77', - poap: ['OKP4 Young Druid'], - know: 0 - }, - { - rank: 5, - valoper: 'okp41hxlrt94n2nj6acpvk60wz8wdr4tgn84sk5a7ln', - poap: ['OKP4 Young Druid'], - know: 0 - }, - { - rank: 5, - valoper: 'okp41s7pz4rc7sq4hj88ljcruvrh4v7hk28paf6dm30', - poap: ['OKP4 Young Druid'], - know: 0 - }, - { - rank: 5, - valoper: 'okp41qcual5kgmw3gqc9q22hlp0aluc3t7rnsvlux5l', - poap: ['OKP4 Young Druid'], - know: 0 - }, - { - rank: 5, - valoper: 'okp41k5pyrxxd3usuneeeh4gssqh7sw0f73kv09dxql', - poap: ['OKP4 Young Druid'], - know: 0 - }, - { - rank: 5, - valoper: 'okp41wr6s62fgs7asqjt3yy566rlrtakujc8r7l7nwr', - poap: ['OKP4 Young Druid'], - know: 0 - }, - { - rank: 5, - valoper: 'okp41mde8kzhdc80qdxsx20rf4jfxhfnwxk4a7u29mh', - poap: ['OKP4 Young Druid'], - know: 0 - }, - { - rank: 5, - valoper: 'okp41hy5f3vftpj8lm9y8f5k4p38w73xu73rdeg0y3m', - poap: ['OKP4 Young Druid'], - know: 0 - }, - { - rank: 5, - valoper: 'okp41m8f8qnr2h5mdwu8ntjjrtyjcac74tjs62xahqz', - poap: ['OKP4 Young Druid'], - know: 0 - }, - { - rank: 5, - valoper: 'okp41vmv0tle77ag7r4v2myktnlj6a94uhel0jaf5af', - poap: ['OKP4 Young Druid'], - know: 0 - }, - { - rank: 5, - valoper: 'okp41wknzm45q885vyp7ynr6ld0u0h2ah4mpv60lq58', - poap: ['OKP4 Young Druid'], - know: 0 - } ] }) From 672f82123b571505a0ba94e40bcb4ae234e6c864 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Vilcot?= Date: Fri, 30 Jun 2023 15:24:37 +0200 Subject: [PATCH 10/12] refactor(ui): update results page accordingly --- src/pages/builders/results.tsx | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/src/pages/builders/results.tsx b/src/pages/builders/results.tsx index 84cca2c6..c7ea3d26 100644 --- a/src/pages/builders/results.tsx +++ b/src/pages/builders/results.tsx @@ -2,22 +2,24 @@ import React, { useMemo, useState, useCallback } from 'react' import type { GetServerSideProps, NextPage } from 'next' import type { Config } from '@/types/config.type' import { config } from '@/lib/config' -import Phases from '@/data/phase' -import { ResultsTable } from '@/components/index' +import { BuilderLeaderboardTable } from '@/components/index' +import { buildersData } from '@/data/builder/builder' +import { mapBuilderDTOtoBuilderDescriptor } from '@/data/builder/mapper' -export type ResultsProps = Pick +export type ResultsProps = Pick -const Results: NextPage = props => { - const { phases } = props +const Results: NextPage = () => { const [query, setQuery] = useState('') - const results = useMemo( + const builders = useMemo( () => - Phases(phases)[Phases(phases).length - 1].results?.filter( - row => - row.valoper.toLowerCase().includes(query.toLowerCase()) || - row.poap.find(item => item.toLowerCase().includes(query.toLowerCase())) - ), - [phases, query] + buildersData + .map(mapBuilderDTOtoBuilderDescriptor) + .filter( + row => + row.valoper.toLowerCase().includes(query.toLowerCase()) || + row.earnings.poap.find(item => item.toLowerCase().includes(query.toLowerCase())) + ), + [query] ) const handleSearchChange = useCallback((value: string): void => setQuery(value), []) @@ -31,10 +33,7 @@ const Results: NextPage = props => {

Here you can consult the marks allocated to builders for the Samhain challenges.

- +
From f992956d4a052df6781a7a4c0e9d7e1cf3cd96f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Vilcot?= Date: Fri, 30 Jun 2023 15:26:10 +0200 Subject: [PATCH 11/12] refactor(ui): update imports --- src/components/taskContentIcon/TaskContentIcon.tsx | 2 +- src/pages/validators/leaderboard.tsx | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/components/taskContentIcon/TaskContentIcon.tsx b/src/components/taskContentIcon/TaskContentIcon.tsx index 2e6fe2a0..f7365dd7 100644 --- a/src/components/taskContentIcon/TaskContentIcon.tsx +++ b/src/components/taskContentIcon/TaskContentIcon.tsx @@ -4,7 +4,7 @@ import ArticleIcon from '@mui/icons-material/Article' import GavelIcon from '@mui/icons-material/Gavel' import HelpIcon from '@mui/icons-material/Help' import MoneyIcon from '@mui/icons-material/Money' -import type { TaskContentId,ChallengeTaskContentId } from '@/data/phase/dto.type' +import type { TaskContentId, ChallengeTaskContentId } from '@/data/phase/dto.type' type TaskContentIconProps = { id: TaskContentId | ChallengeTaskContentId diff --git a/src/pages/validators/leaderboard.tsx b/src/pages/validators/leaderboard.tsx index bb10243a..c46c831b 100644 --- a/src/pages/validators/leaderboard.tsx +++ b/src/pages/validators/leaderboard.tsx @@ -2,7 +2,13 @@ import React, { useCallback, useEffect, useMemo, useState } from 'react' import type { GetServerSideProps, NextPage } from 'next' import InfiniteScroll from 'react-infinite-scroll-component' import type { BaseCardProps } from '@/components/card/base/BaseCard' -import { BaseCard, Podium, LeaderboardTable, Countdown, Snackbar } from '@/components/index' +import { + BaseCard, + Podium, + ValidatorsLeaderboardTable, + Countdown, + Snackbar +} from '@/components/index' import type { PodiumStep } from '@/components/podium/Podium' import { config } from '@/lib/config' import type { Config } from '@/types/config.type' @@ -202,7 +208,7 @@ const Leaderboard: NextPage = props => { scrollThreshold={0.91} style={{ overflow: 'unset' }} > - Date: Fri, 30 Jun 2023 15:29:25 +0200 Subject: [PATCH 12/12] fix: know formatting display --- src/components/index.ts | 4 ++-- src/components/table/builders/LeaderboardTable.tsx | 4 +++- src/pages/builders/results.tsx | 4 ++-- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/components/index.ts b/src/components/index.ts index 6217cb42..5fdc6ca9 100644 --- a/src/components/index.ts +++ b/src/components/index.ts @@ -14,7 +14,7 @@ const ValidatorsLeaderboardTable = dynamic( async () => await import('@/components/table/validators/LeaderboardTable') ) -const BuilderLeaderboardTable = dynamic( +const BuildersLeaderboardTable = dynamic( async () => await import('@/components/table/builders/LeaderboardTable') ) @@ -43,7 +43,7 @@ export { BaseCard, Podium, ValidatorsLeaderboardTable, - BuilderLeaderboardTable, + BuildersLeaderboardTable, Countdown, Snackbar, GoBackButton, diff --git a/src/components/table/builders/LeaderboardTable.tsx b/src/components/table/builders/LeaderboardTable.tsx index f5d4152f..a2d86cfb 100644 --- a/src/components/table/builders/LeaderboardTable.tsx +++ b/src/components/table/builders/LeaderboardTable.tsx @@ -55,7 +55,9 @@ const LeaderboardTable: React.FC = ({ data, onSearchChange }) }, { label: 'Awarded know', - renderCell: (druid: BuilderDescriptor) => {druid.earnings.know}, + renderCell: (druid: BuilderDescriptor) => ( + {druid.earnings.know.toLocaleString()} + ), width: isMobileScreen ? '32%' : '30%' } ].filter(column => !column.hidden), diff --git a/src/pages/builders/results.tsx b/src/pages/builders/results.tsx index c7ea3d26..9daf1638 100644 --- a/src/pages/builders/results.tsx +++ b/src/pages/builders/results.tsx @@ -2,7 +2,7 @@ import React, { useMemo, useState, useCallback } from 'react' import type { GetServerSideProps, NextPage } from 'next' import type { Config } from '@/types/config.type' import { config } from '@/lib/config' -import { BuilderLeaderboardTable } from '@/components/index' +import { BuildersLeaderboardTable } from '@/components/index' import { buildersData } from '@/data/builder/builder' import { mapBuilderDTOtoBuilderDescriptor } from '@/data/builder/mapper' @@ -33,7 +33,7 @@ const Results: NextPage = () => {

Here you can consult the marks allocated to builders for the Samhain challenges.

- +