feat: setup card assignees

This commit is contained in:
Henry
2024-03-05 22:47:19 +00:00
parent 99f7730185
commit d1dc5ec2be
6 changed files with 1141 additions and 2 deletions

View File

@@ -35,6 +35,7 @@ interface Card {
publicId: string;
title: string;
labels?: Label[];
members?: Member[];
}
interface Label {
@@ -47,6 +48,19 @@ interface LabelData {
colourCode: string;
}
interface Member {
member: MemberData;
}
interface MemberData {
publicId: string;
user: User;
}
interface User {
name: string;
}
interface FormValues {
boardId: string;
name: string;
@@ -222,9 +236,10 @@ export default function BoardPage() {
{...provided.dragHandleProps}
>
<div>{card.title}</div>
{card.labels?.length ? (
{(card.labels?.length ?? 0) ||
(card.members?.length ?? 0) ? (
<div className="mt-2 flex justify-end space-x-1">
{card.labels.map(({ label }) => (
{card.labels?.map(({ label }) => (
<span
key={label.publicId}
className="inline-flex w-fit items-center gap-x-1.5 rounded-full px-2 py-1 text-[10px] font-medium text-dark-1000 ring-1 ring-inset ring-dark-800"
@@ -240,6 +255,23 @@ export default function BoardPage() {
<div>{label.name}</div>
</span>
))}
{card.members?.map(({ member }) => (
<span
key={member.publicId}
className="inline-flex h-6 w-6 items-center justify-center rounded-full bg-gray-500"
>
<span className="text-[10px] font-medium leading-none text-white">
{member.user.name
.split(" ")
.map((namePart) =>
namePart
.charAt(0)
.toUpperCase(),
)
.join("")}
</span>
</span>
))}
</div>
) : null}
</Link>

View File

@@ -78,6 +78,26 @@ export const boardRouter = createTRPCRouter({
}
}
}
},
members: {
columns: {
workspaceMemberId: false,
cardId: false,
},
with: {
member: {
columns: {
publicId: true,
},
with: {
user: {
columns: {
name: true
}
}
}
}
}
}
}
}

View File

@@ -0,0 +1,8 @@
CREATE TABLE `card_workspace_members` (
`cardId` bigint NOT NULL,
`workspaceMemberId` bigint NOT NULL,
CONSTRAINT `card_workspace_members_cardId_workspaceMemberId` PRIMARY KEY(`cardId`,`workspaceMemberId`)
);
--> statement-breakpoint
-- ALTER TABLE `card_workspace_members` ADD CONSTRAINT `card_workspace_members_cardId_card_id_fk` FOREIGN KEY (`cardId`) REFERENCES `card`(`id`) ON DELETE no action ON UPDATE no action;--> statement-breakpoint
-- ALTER TABLE `card_workspace_members` ADD CONSTRAINT `card_workspace_members_workspaceMemberId_workspace_members_id_fk` FOREIGN KEY (`workspaceMemberId`) REFERENCES `workspace_members`(`id`) ON DELETE no action ON UPDATE no action;

File diff suppressed because it is too large Load Diff

View File

@@ -85,6 +85,13 @@
"when": 1709542143845,
"tag": "0011_familiar_aaron_stack",
"breakpoints": true
},
{
"idx": 12,
"version": "5",
"when": 1709676468112,
"tag": "0012_powerful_gressill",
"breakpoints": true
}
]
}

View File

@@ -139,6 +139,27 @@ export const cardToLabelsRelations = relations(cardsToLabels, ({ one }) => ({
}),
}));
export const cardToWorkspaceMembers = mySqlTable(
"card_workspace_members",
{
cardId: bigint("cardId", { mode: "number" }).notNull().references(() => cards.id),
workspaceMemberId: bigint("workspaceMemberId", { mode: "number" }).notNull().references(() => workspaceMembers.id),
}, (t) => ({
pk: primaryKey(t.cardId, t.workspaceMemberId),
}),
);
export const cardToWorkspaceMembersRelations = relations(cardToWorkspaceMembers, ({ one }) => ({
card: one(cards, {
fields: [cardToWorkspaceMembers.cardId],
references: [cards.id],
}),
member: one(workspaceMembers, {
fields: [cardToWorkspaceMembers.workspaceMemberId],
references: [workspaceMembers.id],
}),
}));
export const lists = mySqlTable(
"list",
{
@@ -212,6 +233,7 @@ export const cardsRelations = relations(cards, ({ one, many }) => ({
references: [users.id],
}),
labels: many(cardsToLabels),
members: many(cardToWorkspaceMembers),
import: one(imports, {
fields: [cards.importId],
references: [imports.id],