diff --git a/packages/api/src/listener/admin.agenda.ts b/packages/api/src/listener/admin.agenda.ts index c674d68e..22e0b2b9 100644 --- a/packages/api/src/listener/admin.agenda.ts +++ b/packages/api/src/listener/admin.agenda.ts @@ -38,7 +38,9 @@ router.on( const startNotice = await createNotice(ongoingAgenda, user); io.emit("chat.received", startNotice); - break; + + io.to("admin").emit("admin.agenda.statusUpdated", req); + return {}; } case "terminated": { const terminatedAgenda = await terminateAgenda(req.id, user); @@ -46,14 +48,16 @@ router.on( const terminateNotice = await createNotice(terminatedAgenda, user); io.emit("chat.received", terminateNotice); - break; + + io.to("admin").emit("admin.agenda.statusUpdated", { + ...req, + endAt: terminatedAgenda.endAt, + }); + return {}; } default: return {}; } - - io.to("admin").emit("admin.agenda.statusUpdated", req); - return {}; }, ); diff --git a/packages/interface/src/admin/agenda/client.ts b/packages/interface/src/admin/agenda/client.ts index 9abd3adb..08f8c6f8 100644 --- a/packages/interface/src/admin/agenda/client.ts +++ b/packages/interface/src/admin/agenda/client.ts @@ -28,6 +28,7 @@ export type RetrieveAllCb = z.infer; export const StatusUpdate = z.object({ id: z.number(), status: AgendaStatus, + endAt: z.string().optional(), }); export type StatusUpdate = z.infer; export const StatusUpdateCb = z.object({}); diff --git a/packages/interface/src/admin/agenda/server.ts b/packages/interface/src/admin/agenda/server.ts index 28c281a7..7e8bec9e 100644 --- a/packages/interface/src/admin/agenda/server.ts +++ b/packages/interface/src/admin/agenda/server.ts @@ -18,6 +18,7 @@ export type Created = z.infer; export const StatusUpdated = z.object({ id: z.number(), status: AgendaStatus, + endAt: z.string().optional(), }); export type StatusUpdated = z.infer; diff --git a/packages/web/src/components/molecules/AgendaCard/TerminatedAgendaCard.tsx b/packages/web/src/components/molecules/AgendaCard/TerminatedAgendaCard.tsx index db175807..f23369ba 100644 --- a/packages/web/src/components/molecules/AgendaCard/TerminatedAgendaCard.tsx +++ b/packages/web/src/components/molecules/AgendaCard/TerminatedAgendaCard.tsx @@ -8,8 +8,21 @@ import { OptionVoteResult } from "@biseo/web/components/molecules/OptionVoteResu import { VoteResult } from "@biseo/web/components/molecules/VoteResult"; import { VoteDetail } from "@biseo/web/components/molecules/VoteDetail"; import { VoteParticipate } from "@biseo/web/components/molecules/VoteParticipate"; -import { align, column, gap, justify, row, text, w } from "@biseo/web/styles"; -import { formatDateSimple } from "@biseo/web/utils/format"; +import { + align, + center, + column, + gap, + justify, + row, + text, + w, +} from "@biseo/web/styles"; +import { + formatDate, + formatDateSimple, + formatTime, +} from "@biseo/web/utils/format"; const agendaTags = { public: true, @@ -43,18 +56,20 @@ export const TerminatedAgendaCard: React.FC = ({ agenda }) => { {enabled ? (
-
-

{agenda.title}

-

- {formatDateSimple(agenda.endAt)} -

-
+

{agenda.title}

{agenda.content}

{agenda.resolution}

+
+ νˆ¬ν‘œ μΌμ‹œ + + {formatDate(agenda.endAt)} + {formatTime(agenda.endAt)} + +
void; retrieveAll: () => void; - statusUpdate: (id: number, status: AgendaStatus) => void; + statusUpdate: (id: number, status: AgendaStatus, endAt?: string) => void; updateAgenda: (agenda: AdminAgendaUpdate) => void; deleteAgenda: (id: number) => void; remindAgenda: (id: number) => void; @@ -39,11 +39,12 @@ export const useAdminAgenda = create(set => ({ // TODO: handle error } }, - statusUpdate: async (id, status) => { + statusUpdate: async (id, status, endAt) => { try { await socket.emitAsync("admin.agenda.statusUpdate", { id, status, + endAt, }); } catch { // TODO: handle error @@ -81,11 +82,11 @@ socket.on("admin.agenda.created", adminAgenda => { })); }); -socket.on("admin.agenda.statusUpdated", ({ id, status }) => { +socket.on("admin.agenda.statusUpdated", ({ id, status, endAt }) => { useAdminAgenda.setState(state => { const newAdminAgendas: AdminAgenda[] = state.adminAgendas.map(agenda => { if (agenda.id === id) { - return { ...agenda, status }; + return { ...agenda, status, endAt: endAt || "" }; } return agenda; });