From 35ccfbc2dfeb4f698c3c265e00045e04a422191d Mon Sep 17 00:00:00 2001 From: dudu0506 Date: Fri, 6 Sep 2024 10:24:56 +0800 Subject: [PATCH 1/2] feat: optimize ui --- public/bg.jpeg | Bin 0 -> 9511 bytes public/checked.png | Bin 646 -> 0 bytes public/selected.png | Bin 0 -> 211 bytes src/app/api/frames/images/route.ts | 4 +- src/app/polls/[id]/page.tsx | 6 +- src/components/PollCard.tsx | 205 ++++++++++++++++++++--------- src/constants/index.ts | 2 +- src/constants/theme.ts | 4 +- src/helpers/getPollTimeLeft.ts | 6 +- src/helpers/parsePollWithZod.ts | 3 +- src/locales/en/index.ts | 14 +- src/locales/zh-Hans/index.ts | 4 +- src/locales/zh-Hant/index.ts | 4 +- src/types/api.ts | 1 + 14 files changed, 170 insertions(+), 83 deletions(-) create mode 100644 public/bg.jpeg delete mode 100644 public/checked.png create mode 100644 public/selected.png diff --git a/public/bg.jpeg b/public/bg.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..5e3ef355ace2aecaddfdbc6fff90f41b12a1e94a GIT binary patch literal 9511 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 BMT`Id literal 0 HcmV?d00001 diff --git a/src/app/api/frames/images/route.ts b/src/app/api/frames/images/route.ts index a8bcd93..d2df3da 100644 --- a/src/app/api/frames/images/route.ts +++ b/src/app/api/frames/images/route.ts @@ -5,8 +5,8 @@ import { IMAGE_ZOOM_SCALE } from '@/constants'; const imagesWorker = createImagesWorker({ imageOptions: { sizes: { - '1.91:1': { width: 600 * IMAGE_ZOOM_SCALE, height: 400 * IMAGE_ZOOM_SCALE }, - '1:1': { width: 600 * IMAGE_ZOOM_SCALE, height: 400 * IMAGE_ZOOM_SCALE }, + '1.91:1': { width: 764 * IMAGE_ZOOM_SCALE, height: 400 * IMAGE_ZOOM_SCALE }, + '1:1': { width: 600 * IMAGE_ZOOM_SCALE, height: 600 * IMAGE_ZOOM_SCALE }, }, }, }); diff --git a/src/app/polls/[id]/page.tsx b/src/app/polls/[id]/page.tsx index 7be2908..598c767 100644 --- a/src/app/polls/[id]/page.tsx +++ b/src/app/polls/[id]/page.tsx @@ -6,6 +6,7 @@ import { RedirectProfile } from '@/components/RedirectProfile'; import { COMMON_APP_TITLE } from '@/constants'; import { env } from '@/constants/env'; import { IMAGE_QUERY_SCHEMA } from '@/constants/zod'; +import { getPoll } from '@/services/getPoll'; interface PageProps { params: { id: string }; @@ -17,8 +18,9 @@ export async function generateMetadata({ params, searchParams }: PageProps): Pro ...searchParams, id: params.id, }); - const ogImage = `${env.external.NEXT_PUBLIC_HOST}/firefly.png`; const metadata = await fetchMetadata(new URL(urlcat('/api/frames', queryData), env.external.NEXT_PUBLIC_HOST)); + const poll = await getPoll(queryData.id, queryData.source, queryData.profileId); + const ogImage = (metadata?.['of:image'] || `${env.external.NEXT_PUBLIC_HOST}/firefly.png`) as string; if (metadata) { // update this to support hey.xyz @@ -33,7 +35,7 @@ export async function generateMetadata({ params, searchParams }: PageProps): Pro other: { ...metadata }, openGraph: { title: COMMON_APP_TITLE, - description: 'Everything app for Web3 natives', + description: poll?.title || 'Everything app for Web3 natives', images: [ogImage], }, metadataBase: new URL(env.external.NEXT_PUBLIC_HOST), diff --git a/src/components/PollCard.tsx b/src/components/PollCard.tsx index 95a7387..9d89fc8 100644 --- a/src/components/PollCard.tsx +++ b/src/components/PollCard.tsx @@ -31,17 +31,32 @@ function VoteButton({ text, theme }: VoteButtonProps) { style={{ display: 'flex', alignItems: 'center', - justifyContent: 'center', - color: theme.optionTextColor, - height: 40 * IMAGE_ZOOM_SCALE, + color: theme.secondTextColor, + height: 20 * IMAGE_ZOOM_SCALE, width: '100%', - borderRadius: 10 * IMAGE_ZOOM_SCALE, - fontSize: 16 * IMAGE_ZOOM_SCALE, - fontWeight: 'bold', - backgroundColor: theme.optionBgColor, + fontSize: 18 * IMAGE_ZOOM_SCALE, }} > - {text} + +
+ {text} +
); } @@ -52,57 +67,64 @@ function VoteResult({ choice, theme, isMax }: VoteResultProps) { style={{ position: 'relative', display: 'flex', - height: 40 * IMAGE_ZOOM_SCALE, + height: 20 * IMAGE_ZOOM_SCALE, + backgroundColor: theme.optionBgColor, + borderRadius: 4 * IMAGE_ZOOM_SCALE, + fontSize: 12 * IMAGE_ZOOM_SCALE, + color: theme.secondTextColor, + overflow: 'hidden', }} >
- - {choice.name} {choice.is_select ? ( - // eslint-disable-next-line @next/next/no-img-element {choice.name} ) : null} - - - {choice.percent}% - + {choice.name} +
+ {choice.percent}%
); @@ -114,19 +136,21 @@ export function PollCard({ poll, locale, profileId }: PollCardProps) { const t = createFrameTranslator(locale); const maxPercent = Math.max(...choice_detail.map((choice) => choice.percent || 0)); + const showResult = is_end || choice_detail.some((choice) => choice.is_select); return (
- {choice_detail.map((choice, index) => - (!!profileId && is_end) || choice_detail.some((choice) => choice.is_select) ? ( - - ) : ( - - ), - )} +
+ {t`${vote_count} vote${vote_count !== 1 ? 'S' : ''}`} · {getPollTimeLeft(poll, locale)} +
+
+
+ {poll.title} +
+
+ {profileId ? ( +
+ {[0, 1, 2].map((index) => ( + + ))} +
+ ) : null}
+ {profileId ? ( +
+ {choice_detail.map((choice, index) => { + return showResult ? ( + + ) : ( + + ); + })} +
+ ) : null}
- - {profileId ? ( - - {t`${vote_count} vote${vote_count !== 1 ? 's' : ''}`} · {getPollTimeLeft(poll, locale)} - - ) : null} - - {t`via Firefly`} + {t`Via Firefly`}
); diff --git a/src/constants/index.ts b/src/constants/index.ts index a08bb30..c169995 100644 --- a/src/constants/index.ts +++ b/src/constants/index.ts @@ -11,7 +11,7 @@ export const MAX_CHARS_POLL_OPTION = 25; export const PER_USER_VOTE_LIMIT = 1; -export const COMMON_APP_TITLE = 'Firefly'; +export const COMMON_APP_TITLE = 'Polls via Firefly'; export const IS_PRODUCTION = env.external.NEXT_PUBLIC_VERCEL_ENV === VERCEL_NEV.Production; export const IS_DEVELOPMENT = env.external.NEXT_PUBLIC_VERCEL_ENV === VERCEL_NEV.Development; diff --git a/src/constants/theme.ts b/src/constants/theme.ts index 40001a6..757e8bf 100644 --- a/src/constants/theme.ts +++ b/src/constants/theme.ts @@ -7,10 +7,10 @@ export enum IMAGE_THEME { export const DARK_THEME: PollTheme = { titleColor: '#f5f5f5', - optionBgColor: '#ffffff21', + optionBgColor: 'rgba(172, 157, 246, 0.2)', optionTextColor: '#f5f5f5', optionSelectedTextColor: '#AC9DF6', - optionSelectedBgColor: '#ffffff21', + optionSelectedBgColor: '#AC9DF6', cardBgColor: '#181818', secondTextColor: '#ffffff', percentColor: '#FFFFFF70', diff --git a/src/helpers/getPollTimeLeft.ts b/src/helpers/getPollTimeLeft.ts index dd47fb1..bc4c6ec 100644 --- a/src/helpers/getPollTimeLeft.ts +++ b/src/helpers/getPollTimeLeft.ts @@ -14,17 +14,17 @@ export const getPollTimeLeft = (poll: Poll, locale: LOCALE) => { const days = Math.floor(timeLeft / (1000 * 60 * 60 * 24)); if (days >= 1) { - return t`${days} day${days > 1 ? 's' : ''} left`; + return t`${days} day${days > 1 ? 'S' : ''} left`; } const hours = Math.floor(timeLeft / (1000 * 60 * 60)); if (hours >= 1) { - return t`${hours} hour${hours > 1 ? 's' : ''} left`; + return t`${hours} hour${hours > 1 ? 'S' : ''} left`; } const minutes = Math.floor(timeLeft / (1000 * 60)); if (minutes >= 1) { - return t`${minutes} minute${minutes > 1 ? 's' : ''} left`; + return t`${minutes} minute${minutes > 1 ? 'S' : ''} left`; } return t`Less than a minute left`; diff --git a/src/helpers/parsePollWithZod.ts b/src/helpers/parsePollWithZod.ts index 349bce9..6d46f55 100644 --- a/src/helpers/parsePollWithZod.ts +++ b/src/helpers/parsePollWithZod.ts @@ -11,12 +11,13 @@ export const parsePollWithZod = (poll: Poll | null, locale: LOCALE, currentVoteI .object( { poll_id: z.string(), + title: z.string(), created_time: z.number().int().positive(), end_time: z.number().int().positive(), is_end: z.boolean(), vote_count: z.number().int().min(0), type: z.nativeEnum(POLL_CHOICE_TYPE), - multiple_count: z.number().int().min(0).optional().default(PER_USER_VOTE_LIMIT), + multiple_count: z.number().int().min(0).default(PER_USER_VOTE_LIMIT).catch(PER_USER_VOTE_LIMIT), choice_detail: z.array( z.object({ id: z.number().int().positive(), diff --git a/src/locales/en/index.ts b/src/locales/en/index.ts index 125cb8e..5325162 100644 --- a/src/locales/en/index.ts +++ b/src/locales/en/index.ts @@ -15,10 +15,10 @@ const locales = { 'No poll found': 'No poll found', 'No profile found': 'No profile found', Expired: 'Expired', - '_ day_ left': '{0} day{1} left', - '_ hour_ left': '{0} hour{1} left', - '_ minute_ left': '{0} minute{1} left', - 'Less than a minute left': 'Less than a minute left', + '_ day_ left': '{0} DAY{1} LEFT', + '_ hour_ left': '{0} HOUR{1} LEFT', + '_ minute_ left': '{0} MINUTE{1} LEFT', + 'Less than a minute left': 'LESS THAN A MINUTE LEFT', 'Please fill all fields': 'Please fill all fields', 'An error occurred: _': 'An error occurred: {0}', Question: 'Question', @@ -26,9 +26,9 @@ const locales = { 'Create Poll': 'Create Poll', 'Creating...': 'Creating...', 'Try again': 'Try again', - '_ vote_': '{0} Vote{1}', - 'via Firefly': 'via Firefly', - 'Final results': 'Final results', + '_ vote_': '{0} VOTE{1}', + 'Via Firefly': 'Via Firefly', + 'Final results': 'POLL HAS ENDED', 'Vote Now': 'Vote Now', 'Go to Firefly': 'Go to Firefly', 'Not supported frame client protocol': 'Not supported frame client protocol', diff --git a/src/locales/zh-Hans/index.ts b/src/locales/zh-Hans/index.ts index 904d620..59e4848 100644 --- a/src/locales/zh-Hans/index.ts +++ b/src/locales/zh-Hans/index.ts @@ -27,8 +27,8 @@ const locales = { 'Creating...': '创建中...', 'Try again': '重试', '_ vote_': '{0} 次投票', - 'via Firefly': '来自Firefly', - 'Final results': '最终结果', + 'Via Firefly': '来自Firefly', + 'Final results': '投票已结束', 'Vote Now': '立即投票', 'Go to Firefly': '前往Firefly', 'Not supported frame client protocol': '不支持的frame客户端协议', diff --git a/src/locales/zh-Hant/index.ts b/src/locales/zh-Hant/index.ts index 4774fa4..6afbe8f 100644 --- a/src/locales/zh-Hant/index.ts +++ b/src/locales/zh-Hant/index.ts @@ -27,8 +27,8 @@ const locales = { 'Creating...': '創建中...', 'Try again': '重試', '_ vote_': '{0} 次投票', - 'via Firefly': '來自Firefly', - 'Final results': '最終結果', + 'Via Firefly': '來自Firefly', + 'Final results': '投票已結束', 'Vote Now': '立即投票', 'Go to Firefly': '前往Firefly', 'Not supported frame client protocol': '不支持的frame客戶端協議', diff --git a/src/types/api.ts b/src/types/api.ts index 1951cfd..2c055b7 100644 --- a/src/types/api.ts +++ b/src/types/api.ts @@ -16,6 +16,7 @@ export interface ChoiceDetail { export interface Poll { poll_id: string; + title: string; created_time: number; end_time: number; is_end: boolean; From b071c2c500da3ea0f5db4bc529a466570fa598e7 Mon Sep 17 00:00:00 2001 From: dudu0506 Date: Mon, 9 Sep 2024 04:57:05 +0000 Subject: [PATCH 2/2] chore: prettier --- src/components/PollCard.tsx | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/components/PollCard.tsx b/src/components/PollCard.tsx index 9d89fc8..e55ae5e 100644 --- a/src/components/PollCard.tsx +++ b/src/components/PollCard.tsx @@ -185,15 +185,17 @@ export function PollCard({ poll, locale, profileId }: PollCardProps) { textAlign: 'center', }} > -
+
{poll.title}