Skip to content

Commit a4af7d2

Browse files
committed
Merge branch 'fix/1253-selection-change' of EnsiyehE/opencast-admin-interface into develop
Pull request #1412 Fixing that the selection may change if events are modified in the background
2 parents ef8bf3a + d36a10e commit a4af7d2

File tree

3 files changed

+36
-3
lines changed

3 files changed

+36
-3
lines changed

src/components/shared/Table.tsx

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ import {
88
getTablePages,
99
getTablePagination,
1010
getTableSorting,
11-
getTableStatus,
11+
// getTableStatus,
12+
getTable,
1213
} from "../../selectors/tableSelectors";
1314
import {
1415
Row,
@@ -76,6 +77,7 @@ const Table = ({
7677
editTableViewModalRef.current?.close?.();
7778
};
7879

80+
7981
return (
8082
<>
8183
<Notifications context="above_table" />
@@ -135,12 +137,23 @@ const MultiSelect = ({ selectAllCheckboxRef }: { selectAllCheckboxRef: React.Ref
135137
const dispatch = useAppDispatch();
136138

137139
const multiSelect = useAppSelector(state => getMultiSelect(state));
140+
const table = useAppSelector(state => getTable(state));
141+
142+
const isNewEventAdded = table.flags?.events?.isNewEventAdded;
138143

139144
// Select or deselect all rows on a page
140145
const onChangeAllSelected = (e: React.ChangeEvent<HTMLInputElement>) => {
141146
const selected = e.target.checked;
142147
dispatch(changeAllSelected(selected));
143148
};
149+
useEffect(() => {
150+
if (isNewEventAdded && multiSelect) {
151+
if (selectAllCheckboxRef.current?.checked) {
152+
selectAllCheckboxRef.current.checked = false;
153+
}
154+
}
155+
// eslint-disable-next-line react-hooks/exhaustive-deps
156+
}, [isNewEventAdded, multiSelect]);
144157

145158
return (
146159
<>
@@ -218,7 +231,7 @@ const TableBody = ({ templateMap }: { templateMap: TemplateMap }) => {
218231

219232
const columnCount = useAppSelector(state => getTableColumns(state).length);
220233
const rowCount = useAppSelector(rowsSelectors.selectTotal);
221-
const status = useAppSelector(state => getTableStatus(state));
234+
// const status = useAppSelector(state => getTableStatus(state));
222235

223236
return (
224237
<>

src/slices/tableSlice.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ export type TableState = {
104104
rows: EntityState<Row, string>,
105105
maxLabel: string,
106106
pagination: Pagination,
107+
flags?: { [key in Resource]?: { isNewEventAdded?: boolean } };
107108
}
108109

109110
const rowsAdapter = createEntityAdapter<Row>();
@@ -179,6 +180,7 @@ const initialState: TableState = {
179180
totalItems: 0,
180181
directAccessibleNo: 3,
181182
},
183+
flags: {},
182184
};
183185

184186
const tableSlice = createSlice({
@@ -194,6 +196,7 @@ const tableSlice = createSlice({
194196
sortBy: TableState["sortBy"][Resource],
195197
reverse: TableState["reverse"][Resource],
196198
totalItems: TableState["pagination"]["totalItems"],
199+
flags?: { isNewEventAdded?: boolean },
197200
}>) {
198201
state.multiSelect[action.payload.resource] = action.payload.multiSelect;
199202
state.columns = action.payload.columns;
@@ -205,6 +208,18 @@ const tableSlice = createSlice({
205208
...state.pagination,
206209
totalItems: action.payload.totalItems,
207210
};
211+
if (action.payload.flags) {
212+
// Ensure state.flags exists
213+
state.flags ??= {};
214+
const resource = action.payload.resource;
215+
// Ensure flags object for this resource exists
216+
state.flags[resource] ??= {};
217+
// Merge the new flags
218+
state.flags[resource] = {
219+
...state.flags[resource],
220+
...action.payload.flags,
221+
};
222+
}
208223

209224
// Entity Adapter preparations
210225
const rows: Row[] = [];

src/thunks/tableThunks.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ export const loadEventsIntoTable = (): AppThunk => (dispatch, getState) => {
4545
const { events, table } = getState();
4646
const total = events.total;
4747
const pagination = table.pagination;
48+
let isNewEventAdded = false;
4849
// check which events are currently selected
4950
const resource = events.results.map(result => {
5051
const current = table.rows.entities[result.id];
@@ -55,6 +56,7 @@ export const loadEventsIntoTable = (): AppThunk => (dispatch, getState) => {
5556
selected: current.selected,
5657
};
5758
} else {
59+
isNewEventAdded = true;
5860
return {
5961
...result,
6062
selected: false,
@@ -73,8 +75,11 @@ export const loadEventsIntoTable = (): AppThunk => (dispatch, getState) => {
7375
sortBy: table.sortBy["events"],
7476
reverse: table.reverse["events"],
7577
totalItems: total,
78+
isNewEventAdded: isNewEventAdded,
79+
flags: {
80+
isNewEventAdded,
81+
},
7682
};
77-
7883
dispatch(loadResourceIntoTable(tableData));
7984
};
8085

0 commit comments

Comments
 (0)