feat: activity assignment + team view for owner/admin
db: activities.assigneeId column (string, optional) activity-actions: assigneeId saved on create (default: self), cleared on update validation: assigneeId added to activitySchema schema: assigneeId field on Activity type activity-form-sheet: Atanan Kişi dropdown for owner/admin with member list activity-team-view: new component — activities grouped by assignee, completion/edit/delete actions, overdue indicator, member avatars activities-client: Ekip tab (owner/admin only), members + currentUserId props activities page: fetches team memberships + user details, passes to client activity-email-actions: filter by assigneeId ?? createdBy for both me/team modes
This commit is contained in:
@@ -11,9 +11,9 @@ import { ActivitiesClient } from "@/components/activities/activities-client";
|
||||
|
||||
export default async function ActivitiesPage() {
|
||||
const ctx = await requireTenant();
|
||||
const { tablesDB } = createAdminClient();
|
||||
const { tablesDB, teams, users } = createAdminClient();
|
||||
|
||||
const [customers, properties, activitiesResult] = await Promise.all([
|
||||
const [customers, properties, activitiesResult, membershipsResult] = await Promise.all([
|
||||
listCustomers(ctx.tenantId),
|
||||
listProperties(ctx.tenantId),
|
||||
tablesDB.listRows({
|
||||
@@ -25,10 +25,22 @@ export default async function ActivitiesPage() {
|
||||
Query.limit(300),
|
||||
],
|
||||
}),
|
||||
teams.listMemberships(ctx.tenantId),
|
||||
]);
|
||||
|
||||
const activities = JSON.parse(JSON.stringify(activitiesResult.rows)) as Activity[];
|
||||
|
||||
const members = (
|
||||
await Promise.all(
|
||||
membershipsResult.memberships
|
||||
.filter((m) => m.userId && m.confirm)
|
||||
.map(async (m) => {
|
||||
const u = await users.get(m.userId).catch(() => null);
|
||||
return u ? { id: m.userId, name: u.name } : null;
|
||||
}),
|
||||
)
|
||||
).filter((m): m is { id: string; name: string } => m !== null);
|
||||
|
||||
return (
|
||||
<div className="flex flex-1 flex-col gap-4 p-4 md:p-6">
|
||||
<ActivitiesClient
|
||||
@@ -36,6 +48,8 @@ export default async function ActivitiesPage() {
|
||||
customers={customers}
|
||||
properties={properties}
|
||||
role={ctx.role}
|
||||
members={members}
|
||||
currentUserId={ctx.user.id}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user