Skip to content

Commit 6c708ce

Browse files
feat: add assign/unassign handlers and due date UI to ActivityPage
Import assignToActivity and unassignToActivity and implement async handlers that call those services and refresh data with fetchData (with error logging). Update activity ownership field access from assignedTo to assigned_to. Add FaCalendarAlt icon and a new UI card to display the activity due_date (formatted as dd/mm/yyyy or a fallback message). Signed-off-by: David Ericson <davidestudofcg@gmail.com>
1 parent 2e8549a commit 6c708ce

2 files changed

Lines changed: 35 additions & 8 deletions

File tree

frontend/src/pages/activity/ActivityPage.tsx

Lines changed: 34 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { useEffect, useState } from "react";
22
import { useNavigate, useParams } from "react-router-dom";
33
import type { ActivityWithRelations } from "../../types/Activity/Activity";
44
import { useAuthStore } from "../../stores/auth.store";
5-
import { deleteActivity, getActivityById } from "../../services/activity.service";
5+
import { assignToActivity, deleteActivity, getActivityById, unassignToActivity } from "../../services/activity.service";
66
import UpsertActivityModal from "../../components/modals/UpsertActivityModal";
77
import {
88
FaArchive,
@@ -12,7 +12,8 @@ import {
1212
FaUserMinus,
1313
FaUser,
1414
FaFolder,
15-
FaInfoCircle
15+
FaInfoCircle,
16+
FaCalendarAlt
1617
} from "react-icons/fa";
1718

1819
export default function ActivityPage() {
@@ -60,12 +61,22 @@ export default function ActivityPage() {
6061
setIsEditModalOpen(true);
6162
}
6263

63-
function handleAssignActivity() {
64-
console.log("assign");
64+
async function handleAssignActivity() {
65+
try {
66+
await assignToActivity(activityId);
67+
fetchData();
68+
} catch (err) {
69+
console.error(err);
70+
}
6571
}
6672

67-
function handleUnassignActivity() {
68-
console.log("unassign");
73+
async function handleUnassignActivity() {
74+
try {
75+
await unassignToActivity(activityId);
76+
fetchData();
77+
} catch (err) {
78+
console.error(err);
79+
}
6980
}
7081

7182
if (loading) {
@@ -163,12 +174,28 @@ export default function ActivityPage() {
163174
<div>
164175
<p className="text-sm text-slate-500 font-semibold uppercase tracking-wider">Designada a</p>
165176
<p className="text-lg font-bold text-slate-900">
166-
{activity.assignedTo?.name ?? "Ninguém designado"}
177+
{activity.assigned_to?.name ?? "Ninguém designado"}
167178
</p>
168179
</div>
169180
</div>
170181
</div>
171182

183+
<div className="bg-red-50 p-5 rounded-xl border border-red-200 flex items-center gap-4 mb-8">
184+
<div className="p-3 bg-red-100 text-red-600 rounded-lg">
185+
<FaCalendarAlt size={20} />
186+
</div>
187+
<div>
188+
<p className="text-sm text-red-600 font-semibold uppercase tracking-wider">
189+
Prazo Final de Entrega
190+
</p>
191+
<p className="text-lg font-bold text-red-700">
192+
{activity.due_date
193+
? new Date(activity.due_date).toISOString().split('T')[0].split('-').reverse().join('/')
194+
: 'Data não definida'}
195+
</p>
196+
</div>
197+
</div>
198+
172199
<div className="pt-8 border-t border-slate-200 flex flex-wrap gap-4">
173200
{userRole === 'admin' && user?.id === activity.project.owner_id && (
174201
<>

frontend/src/services/activity.service.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ export async function completeActivity(
4949
await apiAuth.patch(`/activities/${activityId}/complete`)
5050
}
5151

52-
export async function unassignActivity(
52+
export async function unassignToActivity(
5353
activityId: number
5454
): Promise<void> {
5555
await apiAuth.patch(`/activities/${activityId}/unassign`)

0 commit comments

Comments
 (0)