Skip to content

Commit 631c90e

Browse files
committed
Merge branch 'unsaved-changes-warning-series-details' of Arnei/opencast-admin-interface into develop
Pull request #1313 Add unsaved changes warning in series details
2 parents 33ae7c8 + 4d2eed7 commit 631c90e

2 files changed

Lines changed: 16 additions & 2 deletions

File tree

src/components/events/partials/modals/SeriesDetails.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import DetailsTobiraTab from "../ModalTabsAndPages/DetailsTobiraTab";
2828
import ButtonLikeAnchor from "../../../shared/ButtonLikeAnchor";
2929
import { removeNotificationWizardTobira } from "../../../../slices/notificationSlice";
3030
import { ParseKeys } from "i18next";
31+
import { FormikProps } from "formik";
3132

3233
/**
3334
* This component manages the tabs of the series details modal
@@ -36,10 +37,12 @@ const SeriesDetails = ({
3637
seriesId,
3738
policyChanged,
3839
setPolicyChanged,
40+
formikRef,
3941
}: {
4042
seriesId: string
4143
policyChanged: boolean
4244
setPolicyChanged: (policyChanged: boolean) => void
45+
formikRef: React.RefObject<FormikProps<any> | null>
4346
}) => {
4447
const { t } = useTranslation();
4548
const dispatch = useAppDispatch();
@@ -137,6 +140,7 @@ const SeriesDetails = ({
137140
updateResource={updateSeriesMetadata}
138141
editAccessRole="ROLE_UI_SERIES_DETAILS_METADATA_EDIT"
139142
header={tabs[page].tabNameTranslation}
143+
formikRef={formikRef}
140144
/>
141145
)}
142146
{page === 1 && (
@@ -145,6 +149,7 @@ const SeriesDetails = ({
145149
metadata={extendedMetadata}
146150
updateResource={updateExtendedSeriesMetadata}
147151
editAccessRole="ROLE_UI_SERIES_DETAILS_METADATA_EDIT"
152+
formikRef={formikRef}
148153
/>
149154
)}
150155
{page === 2 && (

src/components/events/partials/modals/SeriesDetailsModal.tsx

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
import React, { useState } from "react";
1+
import React, { useRef, useState } from "react";
22
import { useTranslation } from "react-i18next";
33
import SeriesDetails from "./SeriesDetails";
44
import { removeNotificationWizardForm } from "../../../../slices/notificationSlice";
55
import { useAppDispatch } from "../../../../store";
66
import { Modal, ModalHandle } from "../../../shared/modals/Modal";
7+
import { FormikProps } from "formik";
78

89
/**
910
* This component renders the modal for displaying series details
@@ -22,13 +23,20 @@ const SeriesDetailsModal = ({
2223

2324
// tracks, whether the policies are different to the initial value
2425
const [policyChanged, setPolicyChanged] = useState(false);
26+
const formikRef = useRef<FormikProps<any>>(null);
2527

2628
const confirmUnsaved = () => {
2729
return window.confirm(t("CONFIRMATIONS.WARNINGS.UNSAVED_CHANGES"));
2830
};
2931

3032
const close = () => {
31-
if (!policyChanged || confirmUnsaved()) {
33+
let isUnsavedChanges = false;
34+
isUnsavedChanges = policyChanged;
35+
if (formikRef.current && formikRef.current.dirty !== undefined && formikRef.current.dirty) {
36+
isUnsavedChanges = true;
37+
}
38+
39+
if (!isUnsavedChanges || confirmUnsaved()) {
3240
setPolicyChanged(false);
3341
dispatch(removeNotificationWizardForm());
3442
return true;
@@ -47,6 +55,7 @@ const SeriesDetailsModal = ({
4755
seriesId={seriesId}
4856
policyChanged={policyChanged}
4957
setPolicyChanged={value => setPolicyChanged(value)}
58+
formikRef={formikRef}
5059
/>
5160
</Modal>
5261
);

0 commit comments

Comments
 (0)