From bed859f7374dfd572024e0ef52320553601973f5 Mon Sep 17 00:00:00 2001 From: Dario Piotrowicz Date: Thu, 16 Feb 2023 12:54:19 +0000 Subject: [PATCH] create reusable StatusAccountCard component --- frontend/src/components/Status/index.tsx | 14 ++------- .../StatusAccountCard/StatusAccountCard.tsx | 29 +++++++++++++++++ frontend/src/components/avatar/index.tsx | 31 ++++++++++--------- frontend/src/dummyData/accounts.ts | 4 +-- .../routes/(admin)/oauth/authorize/index.tsx | 1 + .../[accountId]/[statusId]/index.tsx | 26 ++-------------- 6 files changed, 54 insertions(+), 51 deletions(-) create mode 100644 frontend/src/components/StatusAccountCard/StatusAccountCard.tsx diff --git a/frontend/src/components/Status/index.tsx b/frontend/src/components/Status/index.tsx index 1ef3698..1f15919 100644 --- a/frontend/src/components/Status/index.tsx +++ b/frontend/src/components/Status/index.tsx @@ -1,12 +1,12 @@ import { component$, $, useStyles$ } from '@builder.io/qwik' import { Link, useNavigate } from '@builder.io/qwik-city' import { formatTimeAgo } from '~/utils/dateTime' -import { Avatar } from '../avatar' import type { Account, MastodonStatus } from '~/types' import styles from '../../utils/innerHtmlContent.scss?inline' import { MediaGallery } from '../MediaGallery.tsx' import { useAccountUrl } from '~/utils/useAccountUrl' import { getDisplayNameElement } from '~/utils/getDisplayNameElement' +import { StatusAccountCard } from '../StatusAccountCard/StatusAccountCard' type Props = { status: MastodonStatus @@ -29,17 +29,7 @@ export default component$((props: Props) => {
-
- -
-
- - {getDisplayNameElement(status.account)} - -
-
@{status.account.username}
-
-
+
diff --git a/frontend/src/components/StatusAccountCard/StatusAccountCard.tsx b/frontend/src/components/StatusAccountCard/StatusAccountCard.tsx new file mode 100644 index 0000000..abeed9c --- /dev/null +++ b/frontend/src/components/StatusAccountCard/StatusAccountCard.tsx @@ -0,0 +1,29 @@ +import { component$ } from '@builder.io/qwik' +import { Link } from '@builder.io/qwik-city' +import { type MastodonStatus } from '~/types' +import { getDisplayNameElement } from '~/utils/getDisplayNameElement' +import { useAccountUrl } from '~/utils/useAccountUrl' +import { Avatar, type AvatarDetails } from '../avatar' + +export const StatusAccountCard = component$<{ + status: MastodonStatus + subText: 'username' | 'acct' + secondaryAvatar?: AvatarDetails | null +}>(({ status, subText, secondaryAvatar }) => { + const accountUrl = useAccountUrl(status.account) + + return ( + +
+ +
+
{getDisplayNameElement(status.account)}
+
+ @{subText === 'username' ? status.account.username : status.account.acct} +
+ + ) +}) diff --git a/frontend/src/components/avatar/index.tsx b/frontend/src/components/avatar/index.tsx index 6611c0d..99febe7 100644 --- a/frontend/src/components/avatar/index.tsx +++ b/frontend/src/components/avatar/index.tsx @@ -1,32 +1,35 @@ import { component$ } from '@builder.io/qwik' +import { Link } from '@builder.io/qwik-city' import type { Account } from '~/types' import { useAccountUrl } from '~/utils/useAccountUrl' -type AvatarDetails = Partial> & Pick +export type AvatarDetails = Partial> & Pick type Props = { primary: AvatarDetails secondary: AvatarDetails | null + withLinks?: boolean } -export const Avatar = component$(({ primary, secondary }) => { +export const Avatar = component$(({ primary, secondary, withLinks }) => { const primaryUrl = useAccountUrl(primary) const secondaryUrl = useAccountUrl(secondary) + // eslint-disable-next-line qwik/single-jsx-root + const primaryImg = {`Avatar + + const secondaryImg = ( + {`Avatar + ) + return (
- - {`Avatar - - {secondary && ( - - {`Avatar - - )} + {withLinks ? {primaryImg} : primaryImg} + {secondary && (withLinks ? {secondaryImg} : secondaryImg)}
) }) diff --git a/frontend/src/dummyData/accounts.ts b/frontend/src/dummyData/accounts.ts index 3989770..cd929b7 100644 --- a/frontend/src/dummyData/accounts.ts +++ b/frontend/src/dummyData/accounts.ts @@ -5,8 +5,8 @@ export const george = generateDummyAccount({ username: 'george', acct: 'george_george@dummy.users.wildebeest.com', display_name: 'George :verified: 👍', - avatar: getAvatarUrl(805), - avatar_static: getAvatarUrl(805), + avatar: getAvatarUrl(837), + avatar_static: getAvatarUrl(837), }) export const zak = generateDummyAccount({ diff --git a/frontend/src/routes/(admin)/oauth/authorize/index.tsx b/frontend/src/routes/(admin)/oauth/authorize/index.tsx index 2f0b3f3..f209bb6 100644 --- a/frontend/src/routes/(admin)/oauth/authorize/index.tsx +++ b/frontend/src/routes/(admin)/oauth/authorize/index.tsx @@ -87,6 +87,7 @@ export default component$(() => { url: url.toString(), }} secondary={null} + withLinks={true} />

Signed in as:

diff --git a/frontend/src/routes/(frontend)/[accountId]/[statusId]/index.tsx b/frontend/src/routes/(frontend)/[accountId]/[statusId]/index.tsx index cb68843..bdad675 100644 --- a/frontend/src/routes/(frontend)/[accountId]/[statusId]/index.tsx +++ b/frontend/src/routes/(frontend)/[accountId]/[statusId]/index.tsx @@ -5,17 +5,15 @@ import { formatDateTime } from '~/utils/dateTime' import { formatRoundedNumber } from '~/utils/numbers' import * as statusAPI from 'wildebeest/functions/api/v1/statuses/[id]' import * as contextAPI from 'wildebeest/functions/api/v1/statuses/[id]/context' -import { DocumentHead, Link, loader$ } from '@builder.io/qwik-city' +import { DocumentHead, loader$ } from '@builder.io/qwik-city' import StickyHeader from '~/components/StickyHeader/StickyHeader' -import { Avatar } from '~/components/avatar' import { MediaGallery } from '~/components/MediaGallery.tsx' import { getNotFoundHtml } from '~/utils/getNotFoundHtml/getNotFoundHtml' import { getErrorHtml } from '~/utils/getErrorHtml/getErrorHtml' import styles from '../../../../utils/innerHtmlContent.scss?inline' import { getTextContent } from 'wildebeest/backend/src/activitypub/objects' import { getDocumentHead } from '~/utils/getDocumentHead' -import { useAccountUrl } from '~/utils/useAccountUrl' -import { getDisplayNameElement } from '~/utils/getDisplayNameElement' +import { StatusAccountCard } from '~/components/StatusAccountCard/StatusAccountCard' export const statusLoader = loader$< { DATABASE: D1Database }, @@ -57,7 +55,7 @@ export default component$(() => { <>
- +
@@ -73,24 +71,6 @@ export default component$(() => { ) }) -export const AccountCard = component$<{ status: MastodonStatus }>(({ status }) => { - const accountUrl = useAccountUrl(status.account) - - return ( -
- -
-
- - {getDisplayNameElement(status.account)} - -
-
@{status.account.acct}
-
-
- ) -}) - export const InfoTray = component$<{ status: MastodonStatus }>(({ status }) => { return (