ai insight rework #2

This commit is contained in:
Alberto-Audrix committed 2026-10-01 13:23:45 +07:00
1 parent 9d76f54d33
commit e1987d6999
39 files changed
+2311 -830

No files matched your search

@@ -98,8 +98,8 @@ const DashboardCloseCycleControls: React.FC = () => {
message={
<p>
Permintaan tutup akan dikirim ke pusat dengan tanggal usulan{' '}
<strong>{formatDateId(proposedCloseDate)}</strong>. GM harus menyetujui sebelum
siklus ditutup. Anda masih bisa membatalkan selama status menunggu GM.
<strong>{formatDateId(proposedCloseDate)}</strong>. GM harus menyetujui sebelum siklus
ditutup. Anda masih bisa membatalkan selama status menunggu GM.
</p>
}
confirmLabel="Ya, ajukan tutup"
@@ -126,8 +126,8 @@ const DashboardCloseCycleControls: React.FC = () => {
title="Batalkan permintaan tutup?"
message={
<p>
Permintaan tutup ke pusat akan dibatalkan. Siklus tetap aktif dan dapat diajukan
tutup lagi nanti.
Permintaan tutup ke pusat akan dibatalkan. Siklus tetap aktif dan dapat diajukan tutup
lagi nanti.
</p>
}
confirmLabel="Ya, batalkan"
+1 -3
View File
@@ -34,9 +34,7 @@ const DashboardReportCtas: React.FC<DashboardReportCtasProps> = ({
{label(hasEndCycleSnapshot)} Akhir Siklus
</button>
</div>
{!cycleClosed && (
<p className="text-xs text-slate-500">Tersedia setelah siklus ditutup</p>
)}
{!cycleClosed && <p className="text-xs text-slate-500">Tersedia setelah siklus ditutup</p>}
</div>
);
@@ -121,10 +121,7 @@ const ReportPreviewOverlay: React.FC<Props> = ({ open, reportType, onClose }) =>
await exportElementToPdf(printRef.current, filename);
}, [payload, isEndCycle]);
const summary = useMemo(
() => (payload ? buildReportSummary(payload) : null),
[payload]
);
const summary = useMemo(() => (payload ? buildReportSummary(payload) : null), [payload]);
if (!open) return null;
@@ -2,35 +2,31 @@ import { fireEvent, render, screen, waitFor } from '@testing-library/react';
import { beforeEach, describe, expect, it, vi } from 'vitest';
import DashboardCloseCycleControls from '../DashboardCloseCycleControls.tsx';
const {
requestCloseMock,
cancelCloseRequestMock,
reloadMock,
farmState,
authState,
} = vi.hoisted(() => ({
requestCloseMock: vi.fn().mockResolvedValue({}),
cancelCloseRequestMock: vi.fn().mockResolvedValue({}),
reloadMock: vi.fn().mockResolvedValue(undefined),
farmState: {
selectedCycle: {
id: 5,
start_date: '2026-09-01',
end_date: null,
status: 'active',
proposed_end_date: null,
visible_through_date: '2026-09-10',
} as Record<string, unknown> | null,
},
authState: {
user: {
id: 1,
user_name: 'staff',
display_name: 'Staff',
status: 'active',
const { requestCloseMock, cancelCloseRequestMock, reloadMock, farmState, authState } = vi.hoisted(
() => ({
requestCloseMock: vi.fn().mockResolvedValue({}),
cancelCloseRequestMock: vi.fn().mockResolvedValue({}),
reloadMock: vi.fn().mockResolvedValue(undefined),
farmState: {
selectedCycle: {
id: 5,
start_date: '2026-09-01',
end_date: null,
status: 'active',
proposed_end_date: null,
visible_through_date: '2026-09-10',
} as Record<string, unknown> | null,
},
},
}));
authState: {
user: {
id: 1,
user_name: 'staff',
display_name: 'Staff',
status: 'active',
},
},
})
);
vi.mock('../../../services/apiClient.ts', () => ({
api: {