From 80881013e1ce82abc9e287a8224a526af2f5035d Mon Sep 17 00:00:00 2001 From: Brock Anderson Date: Thu, 26 Sep 2024 17:47:49 -0700 Subject: [PATCH] aded an event bus for admin-caused report changes. updated the dashboard widgets to listen for those changes, and to refresh accordingly. --- .../dashboard/RecentlySubmittedReports.vue | 19 +++++++- .../dashboard/RecentlyViewedReports.vue | 19 +++++++- .../src/components/reports/ReportActions.vue | 31 ++++++++++--- .../reports/ReportAdminActionHistoryPanel.vue | 7 ++- .../src/services/reportChangeService.ts | 46 +++++++++++++++++++ admin-frontend/src/types/events.ts | 3 ++ .../src/v1/services/admin-report-service.ts | 34 ++++++++++---- 7 files changed, 142 insertions(+), 17 deletions(-) create mode 100644 admin-frontend/src/services/reportChangeService.ts create mode 100644 admin-frontend/src/types/events.ts diff --git a/admin-frontend/src/components/dashboard/RecentlySubmittedReports.vue b/admin-frontend/src/components/dashboard/RecentlySubmittedReports.vue index 9f2396d9..f1d0a30f 100644 --- a/admin-frontend/src/components/dashboard/RecentlySubmittedReports.vue +++ b/admin-frontend/src/components/dashboard/RecentlySubmittedReports.vue @@ -26,7 +26,11 @@ import { import ReportsWidget from './ReportsWidget.vue'; import ApiService from '../../services/apiService'; import { formatIsoDateTimeAsLocalDate } from '../../utils/date'; -import { ref } from 'vue'; +import { ref, onMounted, onUnmounted } from 'vue'; +import { + ReportChangeService, + ReportChangedEventPayload, +} from '../../services/reportChangeService'; const pageSize = 5; const reportsWidget = ref(); @@ -56,6 +60,19 @@ const headers = [ }, ]; +onMounted(() => { + ReportChangeService.listen(onAnyReportChanged); +}); + +onUnmounted(() => { + ReportChangeService.unlisten(onAnyReportChanged); +}); + +function onAnyReportChanged(payload: ReportChangedEventPayload) { + console.log(`recentlySubmittedReports - onAnyReportChanged`); + refresh(); +} + async function getRecentlySubmittedReports(): Promise { const filter: ReportFilterType = []; const sort: IReportSearchSort = [{ update_date: 'desc' }]; diff --git a/admin-frontend/src/components/dashboard/RecentlyViewedReports.vue b/admin-frontend/src/components/dashboard/RecentlyViewedReports.vue index 091ec5c4..874bc01a 100644 --- a/admin-frontend/src/components/dashboard/RecentlyViewedReports.vue +++ b/admin-frontend/src/components/dashboard/RecentlyViewedReports.vue @@ -26,7 +26,11 @@ import { import ReportsWidget from './ReportsWidget.vue'; import ApiService from '../../services/apiService'; import { formatIsoDateTimeAsLocalDate } from '../../utils/date'; -import { ref } from 'vue'; +import { ref, onMounted, onUnmounted } from 'vue'; +import { + ReportChangeService, + ReportChangedEventPayload, +} from '../../services/reportChangeService'; const pageSize = 5; const reportsWidget = ref(); @@ -52,6 +56,19 @@ const headers = [ }, ]; +onMounted(() => { + ReportChangeService.listen(onAnyReportChanged); +}); + +onUnmounted(() => { + ReportChangeService.unlisten(onAnyReportChanged); +}); + +function onAnyReportChanged(payload: ReportChangedEventPayload) { + console.log(`recentlyViewedReports - onAnyReportChanged`); + refresh(); +} + async function refresh() { await reportsWidget.value?.refresh(); } diff --git a/admin-frontend/src/components/reports/ReportActions.vue b/admin-frontend/src/components/reports/ReportActions.vue index 4d97f8bc..c7090776 100644 --- a/admin-frontend/src/components/reports/ReportActions.vue +++ b/admin-frontend/src/components/reports/ReportActions.vue @@ -29,7 +29,7 @@ -
+
(); -const emits = defineEmits(['onLockStatusChanged']); const isLoadingPdf = ref(false); const isLoadingAdminActionHistory = ref(false); @@ -77,9 +80,20 @@ const reportAdminActionHistory = ref( const confirmDialog = ref(); onMounted(() => { - reset(); + ReportChangeService.listen(onAnyReportChanged); }); +onUnmounted(() => { + ReportChangeService.unlisten(onAnyReportChanged); +}); + +function onAnyReportChanged(payload: ReportChangedEventPayload) { + if (payload.reportId == props.report?.report_id) { + console.log(`reportActions (${payload.reportId}) - onAnyReportChanged`); + reset(); + } +} + async function lockUnlockReport(reportId: string, makeUnlocked: boolean) { const lockText = makeUnlocked ? 'unlock' : 'lock'; const isConfirmed = await confirmDialog.value?.open( @@ -92,7 +106,9 @@ async function lockUnlockReport(reportId: string, makeUnlocked: boolean) { ); if (isConfirmed) { await ApiService.lockUnlockReport(reportId, makeUnlocked); - emits('onLockStatusChanged'); + + //report_unlock_date and admin_last_access_date will have changed + ReportChangeService.reportChanged(reportId); } } @@ -104,6 +120,9 @@ async function viewReportInNewTab(reportId: string) { isLoadingPdf.value = true; try { const pdfAsBlob = await ApiService.getPdfReportAsBlob(reportId); + + //admin_last_access_date will have changed + ReportChangeService.reportChanged(reportId); const objectUrl = URL.createObjectURL(pdfAsBlob); window.open(objectUrl); } catch (e) { @@ -123,6 +142,7 @@ async function openAdminActionHistory(reportId: string) { } async function fetchAdminActionHistory(reportId: string) { + console.log('fetchingAdminActionHistory'); isLoadingAdminActionHistory.value = true; hadErrorLoadingAdminActionHistory.value = false; try { @@ -144,7 +164,6 @@ function reset() {