Skip to content

Commit 51cf5c7

Browse files
committed
#1512, refactor cutting validation
1 parent cda6ffc commit 51cf5c7

File tree

3 files changed

+17
-34
lines changed

3 files changed

+17
-34
lines changed

src/main/Save.tsx

+4-8
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,7 @@ import {
1414
selectSegments,
1515
selectTracks,
1616
setHasChanges as videoSetHasChanges,
17-
selectValidSegments,
18-
validateSegments,
17+
selectValidCutting,
1918
} from "../redux/videoSlice";
2019
import { postVideoInformation, selectStatus, selectError } from "../redux/workflowPostSlice";
2120

@@ -52,10 +51,7 @@ const Save: React.FC = () => {
5251
const metadataHasChanges = useAppSelector(metadataSelectHasChanges);
5352
const hasChanges = useAppSelector(selectHasChanges);
5453
const subtitleHasChanges = useAppSelector(selectSubtitleHasChanges);
55-
56-
const dispatch = useAppDispatch();
57-
dispatch(validateSegments());
58-
const validSegments = useAppSelector(selectValidSegments);
54+
const validCutting = useAppSelector(selectValidCutting);
5955

6056
const saveStyle = css({
6157
display: "flex",
@@ -80,7 +76,7 @@ const Save: React.FC = () => {
8076
} else {
8177
return (
8278
<>
83-
{validSegments ? <span>
79+
{validCutting ? <span>
8480
{t("save.info-text")}
8581
</span> : <ErrorBox>
8682
<span css={{ whiteSpace: "pre-line" }}>
@@ -90,7 +86,7 @@ const Save: React.FC = () => {
9086
}
9187
<div css={backOrContinueStyle}>
9288
<PageButton pageNumber={0} label={t("various.goBack-button")} Icon={LuChevronLeft} />
93-
{validSegments && <SaveButton />}
89+
{validCutting && <SaveButton />}
9490
</div>
9591
</>
9692
);

src/main/WorkflowSelection.tsx

+3-5
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { selectWorkflows, setSelectedWorkflowIndex } from "../redux/videoSlice";
88

99
import { PageButton } from "./Finish";
1010
import { LuChevronLeft, LuDatabase } from "react-icons/lu";
11-
import { selectValidSegments, validateSegments } from "../redux/videoSlice";
11+
import { selectValidCutting } from "../redux/videoSlice";
1212
import { selectStatus as saveSelectStatus, selectError as saveSelectError } from "../redux/workflowPostSlice";
1313
import { httpRequestState, Workflow } from "../types";
1414
import { SaveButton } from "./Save";
@@ -37,9 +37,7 @@ const WorkflowSelection: React.FC = () => {
3737

3838
const saveStatus = useAppSelector(saveSelectStatus);
3939
const saveError = useAppSelector(saveSelectError);
40-
41-
dispatch(validateSegments());
42-
const validSegments = useAppSelector(selectValidSegments);
40+
const validCutting = useAppSelector(selectValidCutting);
4341

4442
const workflowSelectionStyle = css({
4543
padding: "20px",
@@ -113,7 +111,7 @@ const WorkflowSelection: React.FC = () => {
113111

114112
// Fills the layout template with values based on how many workflows are available
115113
const renderSelection = () => {
116-
if (!validSegments) {
114+
if (!validCutting) {
117115
return (
118116
render(
119117
t("workflowSelection.saveAndProcess-text"),

src/redux/videoSlice.ts

+10-21
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { clamp, forEach } from "lodash";
1+
import { clamp } from "lodash";
22
import { createSlice, nanoid, createAsyncThunk, PayloadAction, createSelector } from "@reduxjs/toolkit";
33
import { client } from "../util/client";
44

@@ -20,7 +20,6 @@ export interface video {
2020
tracks: Track[],
2121
subtitlesFromOpencast: SubtitlesFromOpencast[],
2222
activeSegmentIndex: number, // Index of the segment that is currenlty hovered
23-
validSegments: boolean, // Whether the segment will result in a valid video edit
2423
selectedWorkflowId: string, // Id of the currently selected workflow
2524
aspectRatios: { width: number, height: number; }[], // Aspect ratios of every video
2625
hasChanges: boolean, // Did user make changes in cutting view since last save
@@ -56,7 +55,6 @@ export const initialState: video & httpRequestState = {
5655
tracks: [],
5756
subtitlesFromOpencast: [],
5857
activeSegmentIndex: 0,
59-
validSegments: true,
6058
selectedWorkflowId: "",
6159
previewTriggered: false,
6260
clickTriggered: false,
@@ -187,21 +185,6 @@ const videoSlice = createSlice({
187185
updateCurrentlyAt(state, jumpTarget);
188186
state.jumpTriggered = true;
189187
},
190-
validateSegments: state => {
191-
let allDeleted = true;
192-
193-
// Test if whole video has been deleted
194-
state.segments.forEach(segment => {
195-
if(!segment.deleted) {
196-
allDeleted = false;
197-
}
198-
})
199-
if(allDeleted) {
200-
state.validSegments = false;
201-
} else {
202-
state.validSegments = true;
203-
}
204-
},
205188
addSegment: (state, action: PayloadAction<video["segments"][0]>) => {
206189
state.segments.push(action.payload);
207190
},
@@ -381,7 +364,14 @@ const videoSlice = createSlice({
381364
selectCurrentlyAtInSeconds: state => state.currentlyAt / 1000,
382365
selectSegments: state => state.segments,
383366
selectActiveSegmentIndex: state => state.activeSegmentIndex,
384-
selectValidSegments: state => state.validSegments,
367+
selectValidCutting: state => {
368+
let validSegment = false;
369+
// Test if whole video hasn't been deleted
370+
state.segments.forEach(segment => {
371+
validSegment ||= !segment.deleted;
372+
})
373+
return validSegment;
374+
},
385375
selectIsCurrentSegmentAlive: state => !state.segments[state.activeSegmentIndex].deleted,
386376
selectSelectedWorkflowId: state => state.selectedWorkflowId,
387377
selectHasChanges: state => state.hasChanges,
@@ -564,7 +554,6 @@ export const {
564554
setJumpTriggered,
565555
jumpToPreviousSegment,
566556
jumpToNextSegment,
567-
validateSegments,
568557
} = videoSlice.actions;
569558

570559
export const selectVideos = createSelector(
@@ -585,7 +574,7 @@ export const {
585574
selectCurrentlyAtInSeconds,
586575
selectSegments,
587576
selectActiveSegmentIndex,
588-
selectValidSegments,
577+
selectValidCutting,
589578
selectIsCurrentSegmentAlive,
590579
selectSelectedWorkflowId,
591580
selectHasChanges,

0 commit comments

Comments
 (0)