diff --git a/apps/web/src/components/LabelIcon.tsx b/apps/web/src/components/LabelIcon.tsx new file mode 100644 index 00000000..fe7cd52b --- /dev/null +++ b/apps/web/src/components/LabelIcon.tsx @@ -0,0 +1,12 @@ +const LabelIcon = ({ colourCode }: { colourCode: string | null }) => ( + +); + +export default LabelIcon; diff --git a/apps/web/src/utils/helpers.ts b/apps/web/src/utils/helpers.ts index 19d11c15..a38590df 100644 --- a/apps/web/src/utils/helpers.ts +++ b/apps/web/src/utils/helpers.ts @@ -28,3 +28,17 @@ export const getInitialsFromName = (name: string) => { .map((namePart) => namePart.charAt(0).toUpperCase()) .join(""); }; + +export const formatMemberDisplayName = ( + name: string | null, + email: string | null, +) => { + if (name) return name; + if (!email) return ""; + + const localPart = email.split("@")[0]; + + if (!localPart) return ""; + + return localPart.replace(/[_-]/g, "."); +}; diff --git a/apps/web/src/views/board/components/Filters.tsx b/apps/web/src/views/board/components/Filters.tsx index 0d045e6a..162a2fde 100644 --- a/apps/web/src/views/board/components/Filters.tsx +++ b/apps/web/src/views/board/components/Filters.tsx @@ -9,7 +9,8 @@ import { IoFilterOutline } from "react-icons/io5"; import Avatar from "~/components/Avatar"; import Button from "~/components/Button"; import CheckboxDropdown from "~/components/CheckboxDropdown"; -import { formatToArray } from "~/utils/helpers"; +import LabelIcon from "~/components/LabelIcon"; +import { formatMemberDisplayName, formatToArray } from "~/utils/helpers"; import { getPublicUrl } from "~/utils/supabase/getPublicUrl"; interface BoardData { @@ -58,17 +59,6 @@ interface BoardData { }[]; } -const LabelIcon = ({ colourCode }: { colourCode: string | null }) => ( - -); - const Filters = ({ position = "right", boardData, @@ -95,7 +85,10 @@ const Filters = ({ const formattedMembers = boardData?.workspace?.members?.map((member) => ({ key: member.publicId, - value: member.user?.name ?? "", + value: formatMemberDisplayName( + member.user?.name ?? null, + member.user?.email ?? null, + ), selected: !!router.query.members?.includes(member.publicId), leftIcon: ( ({ key: label.publicId, value: label.name, - selected: labelPublicIds.includes(label.publicId), + leftIcon: , })) ?? []; const formattedLists = @@ -86,8 +90,20 @@ export function NewCardForm({ listPublicId }: NewCardFormProps) { const formattedMembers = boardData?.workspace?.members.map((member) => ({ key: member.publicId, - value: member.user?.name ?? "", - selected: memberPublicIds.includes(member.publicId), + value: formatMemberDisplayName( + member.user?.name ?? null, + member.user?.email ?? null, + ), + leftIcon: ( + + ), })) ?? []; const onSubmit = (data: NewCardInput) => { diff --git a/apps/web/src/views/card/components/LabelSelector.tsx b/apps/web/src/views/card/components/LabelSelector.tsx index 8861cae9..a568ca0c 100644 --- a/apps/web/src/views/card/components/LabelSelector.tsx +++ b/apps/web/src/views/card/components/LabelSelector.tsx @@ -1,12 +1,11 @@ -import { Fragment } from "react"; -import { api } from "~/utils/api"; import { Menu, Transition } from "@headlessui/react"; -import { HiMiniPlus } from "react-icons/hi2"; +import { Fragment } from "react"; import { useForm } from "react-hook-form"; +import { HiEllipsisHorizontal, HiMiniPlus } from "react-icons/hi2"; +import LabelIcon from "~/components/LabelIcon"; import { useModal } from "~/providers/modal"; - -import { HiEllipsisHorizontal } from "react-icons/hi2"; +import { api } from "~/utils/api"; interface LabelSelectorProps { cardPublicId: string; @@ -37,7 +36,7 @@ export default function LabelSelector({ const { register, handleSubmit, setValue, watch } = useForm({ values: Object.fromEntries( - labels?.map((label) => [label.publicId, label.selected]) ?? [], + labels.map((label) => [label.publicId, label.selected]) ?? [], ), }); @@ -100,7 +99,7 @@ export default function LabelSelector({
- {labels?.map((label) => ( + {labels.map((label) => ( {() => (
- +
+ + + + +
+