Skip to content

Commit de284b1

Browse files
committed
Merge branch 'main' into lifecycle-write
2 parents d6ae3d8 + 9511948 commit de284b1

33 files changed

+386
-376
lines changed

package-lock.json

Lines changed: 164 additions & 172 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,19 @@
99
"@mui/material": "^6.3.0",
1010
"@mui/x-date-pickers": "^7.23.1",
1111
"@reduxjs/toolkit": "^2.5.0",
12-
"@types/dompurify": "^3.0.5",
13-
"@types/react-router-dom": "^5.3.3",
12+
"@types/dompurify": "^3.2.0",
1413
"array-move": "^4.0.0",
1514
"axios": "^1.7.9",
1615
"bourbon": "^7.3.0",
1716
"classnames": "^2.5.1",
1817
"date-fns": "^3.6.0",
19-
"dompurify": "^3.1.7",
18+
"dompurify": "^3.2.3",
2019
"font-awesome": "^4.7.0",
2120
"formik": "^2.4.6",
2221
"http-proxy-middleware": "^3.0.3",
23-
"i18next": "^23.16.4",
22+
"i18next": "^24.2.0",
2423
"i18next-browser-languagedetector": "^8.0.2",
25-
"i18next-http-backend": "^2.6.1",
24+
"i18next-http-backend": "^3.0.1",
2625
"lodash": "^4.17.21",
2726
"moment": "^2.30.1",
2827
"moment-timezone": "^0.5.46",
@@ -35,7 +34,7 @@
3534
"react-icons": "^5.3.0",
3635
"react-js-cron": "^5.0.1",
3736
"react-redux": "^9.2.0",
38-
"react-router-dom": "^6.27.0",
37+
"react-router": "^7.1.1",
3938
"react-select": "^5.8.0",
4039
"redux": "^5.0.1",
4140
"redux-persist": "^6.0.0",

src/App.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import React, { useEffect } from "react";
2-
import { HashRouter, Navigate, Route, Routes } from "react-router-dom";
2+
import { HashRouter, Navigate, Route, Routes } from "react-router";
33
import "./App.scss";
44
import Events from "./components/events/Events";
55
import Recordings from "./components/recordings/Recordings";

src/components/About.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import NavBar from "./NavBar";
44
import Footer from "./Footer";
55
import MainNav from "./shared/MainNav";
66
import { useTranslation } from "react-i18next";
7-
import { Link, useLocation } from "react-router-dom";
7+
import { Link, useLocation } from "react-router";
88
import cn from "classnames";
99
import axios from 'axios';
1010
import i18n from "../i18n/i18n";

src/components/Footer.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import {
44
getUserInformation,
55
} from "../selectors/userInfoSelectors";
66
import { useAppSelector } from "../store";
7-
import { Link } from "react-router-dom";
7+
import { Link } from "react-router";
88
import { useTranslation } from "react-i18next";
99
import { Tooltip } from "./shared/Tooltip";
1010

src/components/Header.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import React, { useEffect, useState } from "react";
22
import { useTranslation } from "react-i18next";
3-
import { Link } from "react-router-dom";
3+
import { Link } from "react-router";
44
import i18n from "../i18n/i18n";
55
import languages from "../i18n/languages";
66
import opencastLogo from "../img/opencast-white.svg?url";

src/components/configuration/Themes.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import React, { useEffect, useState } from "react";
22
import { useTranslation } from "react-i18next";
33
import MainNav from "../shared/MainNav";
4-
import { Link } from "react-router-dom";
4+
import { Link } from "react-router";
55
import cn from "classnames";
66
import TableFilters from "../shared/TableFilters";
77
import Table from "../shared/Table";

src/components/events/Events.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import React, { useEffect, useState } from "react";
22
import { useTranslation } from "react-i18next";
33
import cn from "classnames";
4-
import { Link, useLocation } from "react-router-dom";
4+
import { Link, useLocation } from "react-router";
55
import TableFilters from "../shared/TableFilters";
66
import MainNav from "../shared/MainNav";
77
import Stats from "../shared/Stats";

src/components/events/Series.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import React, { useEffect, useState } from "react";
22
import MainNav from "../shared/MainNav";
33
import { useTranslation } from "react-i18next";
44
import cn from "classnames";
5-
import { Link, useLocation } from "react-router-dom";
5+
import { Link, useLocation } from "react-router";
66
import TableFilters from "../shared/TableFilters";
77
import Table from "../shared/Table";
88
import Notifications from "../shared/Notifications";

src/components/events/partials/ModalTabsAndPages/EventDetailsSchedulingTab.tsx

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import React, { useEffect } from "react";
22
import cn from "classnames";
33
import _ from "lodash";
4-
import { DatePicker } from "@mui/x-date-pickers/DatePicker";
4+
import DatePicker from "react-datepicker";
55
import { Formik, FormikErrors, FormikProps } from "formik";
66
import { Field } from "../../../shared/Field";
77
import Notifications from "../../../shared/Notifications";
@@ -195,12 +195,12 @@ const EventDetailsSchedulingTab = ({
195195
: [];
196196

197197
return {
198-
scheduleStartDate: startDate.setHours(0, 0, 0).toString(),
198+
scheduleStartDate: startDate.toString(),
199199
scheduleStartHour: source.start.hour != null ? makeTwoDigits(source.start.hour) : "",
200200
scheduleStartMinute: source.start.minute != null ? makeTwoDigits(source.start.minute) : "",
201201
scheduleDurationHours: source.duration.hour != null ? makeTwoDigits(source.duration.hour) : "",
202202
scheduleDurationMinutes: source.duration.minute != null ? makeTwoDigits(source.duration.minute): "",
203-
scheduleEndDate: endDate.setHours(0, 0, 0).toString(),
203+
scheduleEndDate: endDate.toString(),
204204
scheduleEndHour: source.end.hour != null ? makeTwoDigits(source.end.hour): "",
205205
scheduleEndMinute: source.end.minute != null ? makeTwoDigits(source.end.minute): "",
206206
captureAgent: source.device.name,
@@ -286,8 +286,7 @@ const EventDetailsSchedulingTab = ({
286286
/* date picker for start date */
287287
<DatePicker
288288
name="scheduleStartDate"
289-
// tabIndex={1}
290-
value={new Date(formik.values.scheduleStartDate)}
289+
selected={new Date(formik.values.scheduleStartDate)}
291290
onChange={(value: Date | null) =>
292291
value && changeStartDate(
293292
value,
@@ -297,6 +296,14 @@ const EventDetailsSchedulingTab = ({
297296
checkConflictsWrapper
298297
)
299298
}
299+
showYearDropdown
300+
showMonthDropdown
301+
yearDropdownItemNumber={2}
302+
dateFormat="P"
303+
popperClassName="datepicker-custom"
304+
className="datepicker-custom-input"
305+
portalId="root"
306+
locale={currentLanguage?.dateLocale}
300307
/>
301308
) : (
302309
<>

src/components/events/partials/ModalTabsAndPages/NewSourcePage.tsx

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import React, { useEffect, useState } from "react";
22
import { useTranslation } from "react-i18next";
33
import cn from "classnames";
44
import Notifications from "../../../shared/Notifications";
5-
import { DatePicker } from "@mui/x-date-pickers/DatePicker";
5+
import DatePicker from "react-datepicker";
66
import {
77
getCurrentLanguageInformation,
88
getTimezoneOffset,
@@ -444,7 +444,7 @@ const Schedule = <T extends {
444444
<td>
445445
<DatePicker
446446
name="scheduleStartDate"
447-
value={typeof formik.values.scheduleStartDate === "string" ? parseISO(formik.values.scheduleStartDate): formik.values.scheduleStartDate}
447+
selected={typeof formik.values.scheduleStartDate === "string" ? parseISO(formik.values.scheduleStartDate): formik.values.scheduleStartDate}
448448
onChange={(value) => {
449449
if (formik.values.sourceMode === "SCHEDULE_MULTIPLE") {
450450
value && changeStartDateMultiple(
@@ -460,6 +460,14 @@ const Schedule = <T extends {
460460
);
461461
}
462462
}}
463+
showYearDropdown
464+
showMonthDropdown
465+
yearDropdownItemNumber={2}
466+
dateFormat="P"
467+
popperClassName="datepicker-custom"
468+
className="datepicker-custom-input"
469+
portalId="root"
470+
locale={currentLanguage?.dateLocale}
463471
/>
464472
</td>
465473
</tr>
@@ -474,14 +482,22 @@ const Schedule = <T extends {
474482
<td>
475483
<DatePicker
476484
name="scheduleEndDate"
477-
value={typeof formik.values.scheduleEndDate === "string" ? parseISO(formik.values.scheduleEndDate) : formik.values.scheduleEndDate}
485+
selected={typeof formik.values.scheduleEndDate === "string" ? parseISO(formik.values.scheduleEndDate) : formik.values.scheduleEndDate}
478486
onChange={(value) =>
479487
value && changeEndDateMultiple(
480488
value,
481489
formik.values,
482490
formik.setFieldValue
483491
)
484492
}
493+
showYearDropdown
494+
showMonthDropdown
495+
yearDropdownItemNumber={2}
496+
dateFormat="P"
497+
popperClassName="datepicker-custom"
498+
className="datepicker-custom-input"
499+
portalId="root"
500+
locale={currentLanguage?.dateLocale}
485501
/>
486502
</td>
487503
</tr>

src/components/events/partials/SeriesTitleCell.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import React from "react";
22
import { useTranslation } from "react-i18next";
33
import { loadEventsIntoTable } from "../../../thunks/tableThunks";
44
import { setSpecificEventFilter } from "../../../slices/tableFilterSlice";
5-
import { Link } from "react-router-dom";
5+
import { Link } from "react-router";
66
import { useAppDispatch } from "../../../store";
77
import { Tooltip } from "../../shared/Tooltip";
88
import { Series } from "../../../slices/seriesSlice";

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import {
2626
getModalWorkflowTabHierarchy,
2727
getModalPage,
2828
getEventDetailsTobiraDataError,
29+
getEventDetailsTobiraStatus,
2930
} from "../../../../selectors/eventDetailsSelectors";
3031
import { getUserInformation } from "../../../../selectors/userInfoSelectors";
3132
import EventDetailsStatisticsTab from "../ModalTabsAndPages/EventDetailsStatisticsTab";
@@ -84,6 +85,7 @@ const EventDetails = ({
8485
dispatch(fetchSchedulingInfo(eventId)).then();
8586
dispatch(fetchEventStatistics(eventId)).then();
8687
dispatch(fetchAssetUploadOptions()).then();
88+
dispatch(fetchEventDetailsTobira(eventId));
8789
// eslint-disable-next-line react-hooks/exhaustive-deps
8890
}, []);
8991

@@ -98,6 +100,7 @@ const EventDetails = ({
98100
const hasStatistics = useAppSelector(state => getHasStatistics(state));
99101
const isLoadingStatistics = useAppSelector(state => isFetchingStatistics(state));
100102
const captureAgents = useAppSelector(state => getRecordings(state));
103+
const tobiraStatus = useAppSelector(state => getEventDetailsTobiraStatus(state));
101104
const tobiraError = useAppSelector(state => getEventDetailsTobiraDataError(state));
102105

103106
const tabs = [
@@ -164,7 +167,7 @@ const EventDetails = ({
164167
accessRole: "ROLE_UI_EVENTS_DETAILS_COMMENTS_VIEW",
165168
name: "tobira",
166169
page: EventDetailsPage.Tobira,
167-
hidden: tobiraError?.message?.includes("503"),
170+
hidden: tobiraStatus === "failed" && tobiraError?.message?.includes("503"),
168171
},
169172
{
170173
tabNameTranslation: "EVENTS.EVENTS.DETAILS.TABS.STATISTICS",
@@ -178,9 +181,6 @@ const EventDetails = ({
178181

179182
const openTab = (tabNr: EventDetailsPage) => {
180183
dispatch(removeNotificationWizardForm());
181-
if (tabNr === EventDetailsPage.Tobira) {
182-
dispatch(fetchEventDetailsTobira(eventId));
183-
}
184184
dispatch(openModalTab(tabNr, "entry", "entry"))
185185
};
186186

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
getSeriesDetailsTheme,
99
getSeriesDetailsThemeNames,
1010
getSeriesDetailsTobiraDataError,
11+
getSeriesDetailsTobiraStatus,
1112
hasStatistics as seriesHasStatistics,
1213
} from "../../../../selectors/seriesDetailsSelectors";
1314
import { getOrgProperties, getUserInformation } from "../../../../selectors/userInfoSelectors";
@@ -20,6 +21,7 @@ import DetailsMetadataTab from "../ModalTabsAndPages/DetailsMetadataTab";
2021
import DetailsExtendedMetadataTab from "../ModalTabsAndPages/DetailsExtendedMetadataTab";
2122
import { useAppDispatch, useAppSelector } from "../../../../store";
2223
import {
24+
fetchSeriesDetailsTobira,
2325
fetchSeriesStatistics,
2426
setTobiraTabHierarchy,
2527
updateExtendedSeriesMetadata,
@@ -48,10 +50,12 @@ const SeriesDetails = ({
4850
const theme = useAppSelector(state => getSeriesDetailsTheme(state));
4951
const themeNames = useAppSelector(state => getSeriesDetailsThemeNames(state));
5052
const hasStatistics = useAppSelector(state => seriesHasStatistics(state));
53+
const tobiraStatus = useAppSelector(state => getSeriesDetailsTobiraStatus(state));
5154
const tobiraError = useAppSelector(state => getSeriesDetailsTobiraDataError(state));
5255

5356
useEffect(() => {
5457
dispatch(fetchSeriesStatistics(seriesId));
58+
dispatch(fetchSeriesDetailsTobira(seriesId));
5559
dispatch(setTobiraTabHierarchy("main"));
5660
// eslint-disable-next-line react-hooks/exhaustive-deps
5761
}, []);
@@ -90,7 +94,7 @@ const SeriesDetails = ({
9094
tabNameTranslation: "EVENTS.SERIES.DETAILS.TABS.TOBIRA",
9195
accessRole: "ROLE_UI_SERIES_DETAILS_TOBIRA_VIEW",
9296
name: "tobira",
93-
hidden: tobiraError?.message?.includes("503"),
97+
hidden: tobiraStatus === "failed" && tobiraError?.message?.includes("503"),
9498
},
9599
{
96100
tabNameTranslation: "EVENTS.SERIES.DETAILS.TABS.STATISTICS",

src/components/events/partials/wizards/NewSeriesWizard.tsx

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {
66
getSeriesExtendedMetadata,
77
getSeriesMetadata,
88
getSeriesTobiraPageError,
9+
getSeriesTobiraPageStatus,
910
} from "../../../../selectors/seriesSeletctor";
1011
import NewMetadataPage from "../ModalTabsAndPages/NewMetadataPage";
1112
import NewMetadataExtendedPage from "../ModalTabsAndPages/NewMetadataExtendedPage";
@@ -15,7 +16,7 @@ import { initialFormValuesNewSeries } from "../../../../configs/modalConfig";
1516
import { MetadataSchema, NewSeriesSchema } from "../../../../utils/validate";
1617
import { getInitialMetadataFieldValues } from "../../../../utils/resourceUtils";
1718
import { useAppDispatch, useAppSelector } from "../../../../store";
18-
import { TobiraPage, postNewSeries } from "../../../../slices/seriesSlice";
19+
import { TobiraPage, fetchSeriesDetailsTobiraNew, postNewSeries } from "../../../../slices/seriesSlice";
1920
import { MetadataCatalog } from "../../../../slices/eventSlice";
2021
import NewTobiraPage from "../ModalTabsAndPages/NewTobiraPage";
2122
import { getOrgProperties, getUserInformation } from "../../../../selectors/userInfoSelectors";
@@ -34,6 +35,7 @@ const NewSeriesWizard: React.FC<{
3435

3536
const metadataFields = useAppSelector(state => getSeriesMetadata(state));
3637
const extendedMetadata = useAppSelector(state => getSeriesExtendedMetadata(state));
38+
const tobiraStatus = useAppSelector(state => getSeriesTobiraPageStatus(state));
3739
const tobiraError = useAppSelector(state => getSeriesTobiraPageError(state));
3840
const user = useAppSelector(state => getUserInformation(state));
3941
const orgProperties = useAppSelector(state => getOrgProperties(state));
@@ -46,6 +48,13 @@ const NewSeriesWizard: React.FC<{
4648
const [snapshot, setSnapshot] = useState(initialValues);
4749
const [pageCompleted, setPageCompleted] = useState<{ [key: number]: boolean }>({});
4850

51+
useEffect(() => {
52+
// This should set off a web request that will intentionally fail, in order
53+
// to check if tobira is available at all
54+
dispatch(fetchSeriesDetailsTobiraNew(""));
55+
// eslint-disable-next-line react-hooks/exhaustive-deps
56+
}, []);
57+
4958
// Caption of steps used by Stepper
5059
const steps = [
5160
{
@@ -71,7 +80,7 @@ const NewSeriesWizard: React.FC<{
7180
{
7281
translation: "EVENTS.SERIES.NEW.TOBIRA.CAPTION",
7382
name: "tobira",
74-
hidden: !!tobiraError?.message?.includes("503"),
83+
hidden: !!(tobiraStatus === "failed" && tobiraError?.message?.includes("503")),
7584
},
7685
{
7786
translation: "EVENTS.SERIES.NEW.SUMMARY.CAPTION",

src/components/recordings/Recordings.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import React, { useEffect, useState } from "react";
22
import MainNav from "../shared/MainNav";
33
import { useTranslation } from "react-i18next";
4-
import { Link } from "react-router-dom";
4+
import { Link } from "react-router";
55
import cn from "classnames";
66
import TableFilters from "../shared/TableFilters";
77
import Table from "../shared/Table";

src/components/recordings/partials/RecordingsNameCell.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import React from "react";
22
import { useTranslation } from "react-i18next";
3-
import { Link } from "react-router-dom";
3+
import { Link } from "react-router";
44
import { setSpecificEventFilter } from "../../../slices/tableFilterSlice";
55
import { loadEventsIntoTable } from "../../../thunks/tableThunks";
66
import { useAppDispatch } from "../../../store";

src/components/shared/MainNav.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import React from "react";
22
import { useTranslation } from "react-i18next";
3-
import { Link, useNavigate } from "react-router-dom";
3+
import { Link, useNavigate } from "react-router";
44
import {
55
loadAclsIntoTable,
66
loadEventsIntoTable,

0 commit comments

Comments
 (0)