diff --git a/src/common/lib/index.ts b/src/common/lib/index.ts index 8ed060a3..b477bafc 100644 --- a/src/common/lib/index.ts +++ b/src/common/lib/index.ts @@ -1,4 +1,4 @@ -export { default as truncate } from "./truncate"; +export * from "./string"; export { default as formatWithCommas } from "./formatWithCommas"; export * from "./converters"; export * from "./navigation"; diff --git a/src/common/lib/string.ts b/src/common/lib/string.ts new file mode 100644 index 00000000..a84cce88 --- /dev/null +++ b/src/common/lib/string.ts @@ -0,0 +1,13 @@ +import { NETWORK } from "../constants"; + +export const truncate = (input: string, maxLength: number) => { + if (!input) return ""; + + if (input.length <= maxLength) { + return input; + } + return input.substring(0, maxLength - 3) + "..."; +}; + +export const isAccountId = (input: string): boolean => + input.endsWith(`.${NETWORK}`); diff --git a/src/common/lib/truncate.ts b/src/common/lib/truncate.ts deleted file mode 100644 index 5bf0ee9f..00000000 --- a/src/common/lib/truncate.ts +++ /dev/null @@ -1,10 +0,0 @@ -const truncate = (input: string, maxLength: number) => { - if (!input) return ""; - - if (input.length <= maxLength) { - return input; - } - return input.substring(0, maxLength - 3) + "..."; -}; - -export default truncate; diff --git a/src/modules/profile/components/ProfileLink.tsx b/src/modules/account/components/AccountProfileLink.tsx similarity index 52% rename from src/modules/profile/components/ProfileLink.tsx rename to src/modules/account/components/AccountProfileLink.tsx index 63f99cc1..05150572 100644 --- a/src/modules/profile/components/ProfileLink.tsx +++ b/src/modules/account/components/AccountProfileLink.tsx @@ -6,11 +6,13 @@ import { cn } from "@/common/ui/utils"; import { AccountAvatar } from "@/modules/core"; import routesPath from "@/modules/core/routes"; -export type ProfileLinkProps = ByAccountId & { className?: string }; +export type AccountProfileLinkProps = ByAccountId & { + classNames?: { root?: string; avatar?: string; name?: string }; +}; -export const ProfileLink: React.FC = ({ +export const AccountProfileLink: React.FC = ({ accountId, - className, + classNames, }) => { const { data: account } = potlock.useAccount({ accountId }); const { name } = account?.near_social_profile_data ?? {}; @@ -19,11 +21,17 @@ export const ProfileLink: React.FC = ({ - + - + {name ?? accountId} diff --git a/src/modules/account/index.ts b/src/modules/account/index.ts new file mode 100644 index 00000000..90075f3e --- /dev/null +++ b/src/modules/account/index.ts @@ -0,0 +1 @@ +export * from "./components/AccountProfileLink"; diff --git a/src/modules/donation/components/DonationConfirmation.tsx b/src/modules/donation/components/DonationConfirmation.tsx index 7ddc2c83..98dac8b0 100644 --- a/src/modules/donation/components/DonationConfirmation.tsx +++ b/src/modules/donation/components/DonationConfirmation.tsx @@ -18,7 +18,7 @@ import { } from "@/common/ui/components"; import { CheckboxField } from "@/common/ui/form-fields"; import { cn } from "@/common/ui/utils"; -import { ProfileLink } from "@/modules/profile"; +import { AccountProfileLink } from "@/modules/account"; import { TokenTotalValue } from "@/modules/token"; import { DonationSummaryBreakdown } from "./breakdowns"; @@ -96,7 +96,7 @@ export const DonationConfirmation: React.FC = ({ {`Remove ${protocolFeePercent}% Protocol Fees`} {protocolFeeRecipientAccountId && ( - )} @@ -120,7 +120,7 @@ export const DonationConfirmation: React.FC = ({ {`Remove ${chefFeePercent}% Chef Fees`} {pot?.chef?.id && ( - + )} } diff --git a/src/modules/pot-editor/components/PotEditorPreview.tsx b/src/modules/pot-editor/components/PotEditorPreview.tsx index 53445c43..3ef94692 100644 --- a/src/modules/pot-editor/components/PotEditorPreview.tsx +++ b/src/modules/pot-editor/components/PotEditorPreview.tsx @@ -1,10 +1,11 @@ import { useMemo } from "react"; import { Pencil } from "lucide-react"; -import { entries, isStrictEqual, omit, pick, piped, prop } from "remeda"; +import { entries, isStrictEqual, omit, piped, prop } from "remeda"; import { walletApi } from "@/common/api/near"; import { ByPotId, potlock } from "@/common/api/potlock"; +import { isAccountId } from "@/common/lib"; import { Button, DataLoadingPlaceholder, @@ -12,6 +13,7 @@ import { } from "@/common/ui/components"; import { cn } from "@/common/ui/utils"; import { AccessControlList } from "@/modules/access-control"; +import { AccountProfileLink } from "@/modules/account"; import { AccountOption } from "@/modules/core"; import { POT_EDITOR_FIELDS } from "../constants"; @@ -40,7 +42,14 @@ const PotEditorPreviewSection: React.FC = ({ {subheading ? `${heading} (${subheading})` : heading} - {{children}} + {typeof children === "string" && isAccountId(children) ? ( + + ) : ( + {children} + )} ) : null} @@ -89,7 +98,7 @@ export const PotEditorPreview: React.FC = ({ ); return ( -
+
diff --git a/src/modules/pot-editor/utils/normalization.ts b/src/modules/pot-editor/utils/normalization.ts index 3fdbd462..25e88062 100644 --- a/src/modules/pot-editor/utils/normalization.ts +++ b/src/modules/pot-editor/utils/normalization.ts @@ -8,7 +8,7 @@ import { prop, } from "remeda"; -import { Pot } from "@/common/api/potlock"; +import { Account, Pot } from "@/common/api/potlock"; import { LISTS_CONTRACT_ID, NEAR_TOKEN_DENOM, @@ -186,7 +186,15 @@ export const potIndexedFieldToString = ( return value; } else if (Array.isArray(value)) { return value.filter(isNonNullish).join(", "); - } else return null; + } else { + switch (key) { + case "chef": + return (value as Account).id; + + default: + return value.toString(); + } + } } default: diff --git a/src/modules/profile/components/FeedCard.tsx b/src/modules/profile/components/FeedCard.tsx index 3bef50b3..1125d3bd 100644 --- a/src/modules/profile/components/FeedCard.tsx +++ b/src/modules/profile/components/FeedCard.tsx @@ -7,7 +7,7 @@ import { useRouter } from "next/navigation"; import ReactMarkdown from "react-markdown"; import { fetchTimeByBlockHeight } from "@/common/api/near-social"; -import truncate from "@/common/lib/truncate"; +import { truncate } from "@/common/lib"; import { fetchSocialImages } from "@/common/services/near-socialdb"; import FeedCardOptionsSelect from "./FeedCardOptionsSelect"; diff --git a/src/modules/profile/components/Info.tsx b/src/modules/profile/components/Info.tsx index 6a066c25..49ed7585 100644 --- a/src/modules/profile/components/Info.tsx +++ b/src/modules/profile/components/Info.tsx @@ -6,9 +6,9 @@ import { CopyToClipboard } from "react-copy-to-clipboard"; import CheckIcon from "@/common/assets/svgs/CheckIcon"; import ReferrerIcon from "@/common/assets/svgs/ReferrerIcon"; import { DEFAULT_URL } from "@/common/constants"; -import truncate from "@/common/lib/truncate"; +import { truncate } from "@/common/lib"; import { Button, ClipboardCopyButton } from "@/common/ui/components"; -import { useAuth } from "@/modules/auth/hooks/useAuth"; +import { useAuth } from "@/modules/auth"; import useWallet from "@/modules/auth/hooks/useWallet"; import routesPath from "@/modules/core/routes"; @@ -16,7 +16,7 @@ import DonationsInfo from "./DonationsInfo"; import FollowButton from "./FollowButton"; import Linktree from "./Linktree"; import ProfileTags from "./ProfileTags"; -import useProfileData from "../hooks/data"; +import { useProfileData } from "../hooks/data"; type Props = { accountId: string; diff --git a/src/modules/profile/index.ts b/src/modules/profile/index.ts index be7a6287..aef259af 100644 --- a/src/modules/profile/index.ts +++ b/src/modules/profile/index.ts @@ -1,5 +1,4 @@ export * from "./components/FeedCard"; -export * from "./components/ProfileLink"; export * from "./components/ProfileLayout"; export { profilesModel, navModel } from "./models"; export { default as useProfileData } from "./hooks/data";