From 20013cf712758613f0a7d5603d47c70d9f574b41 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Fri, 29 Apr 2022 21:37:09 -0500 Subject: [PATCH] ProfileField: basic styling --- .../ui/components/profile_fields_panel.tsx | 82 ++++++++++++++++--- 1 file changed, 71 insertions(+), 11 deletions(-) diff --git a/app/soapbox/features/ui/components/profile_fields_panel.tsx b/app/soapbox/features/ui/components/profile_fields_panel.tsx index effc5eeda..01e0c55af 100644 --- a/app/soapbox/features/ui/components/profile_fields_panel.tsx +++ b/app/soapbox/features/ui/components/profile_fields_panel.tsx @@ -1,11 +1,74 @@ -'use strict'; - +import classNames from 'classnames'; import React from 'react'; -import { FormattedMessage } from 'react-intl'; +import { defineMessages, useIntl, FormattedMessage, FormatDateOptions } from 'react-intl'; -import { Widget, Stack } from 'soapbox/components/ui'; +import { Widget, Stack, Icon, Text } from 'soapbox/components/ui'; +import BundleContainer from 'soapbox/features/ui/containers/bundle_container'; +import { CryptoAddress } from 'soapbox/features/ui/util/async-components'; -import type { Account } from 'soapbox/types/entities'; +import type { Account, Field } from 'soapbox/types/entities'; + +const getTicker = (value: string): string => (value.match(/\$([a-zA-Z]*)/i) || [])[1]; +const isTicker = (value: string): boolean => Boolean(getTicker(value)); + +const messages = defineMessages({ + linkVerifiedOn: { id: 'account.link_verified_on', defaultMessage: 'Ownership of this link was checked on {date}' }, + account_locked: { id: 'account.locked_info', defaultMessage: 'This account privacy status is set to locked. The owner manually reviews who can follow them.' }, + deactivated: { id: 'account.deactivated', defaultMessage: 'Deactivated' }, + bot: { id: 'account.badges.bot', defaultMessage: 'Bot' }, +}); + +const dateFormatOptions: FormatDateOptions = { + month: 'short', + day: 'numeric', + year: 'numeric', + hour12: false, + hour: '2-digit', + minute: '2-digit', +}; + +interface IProfileField { + field: Field, +} + +/** Renders a single profile field. */ +const ProfileField: React.FC = ({ field }) => { + const intl = useIntl(); + + if (isTicker(field.name)) { + return ( + + {Component => ( + + )} + + ); + } + + return ( +
+
+ +
+ +
+ {field.verified_at && ( + + + + )} + + +
+
+ ); +}; interface IProfileFieldsPanel { account: Account, @@ -15,12 +78,9 @@ interface IProfileFieldsPanel { const ProfileFieldsPanel: React.FC = ({ account }) => { return ( }> - - {account.fields.map(field => ( -
- {field.name_emojified}
- {field.value_emojified} -
+ + {account.fields.map((field, i) => ( + ))}