mirror of
https://github.com/cpvalente/ontime.git
synced 2026-08-20 06:29:07 +00:00
refactor: prevent stale data in collapsed groups
This commit is contained in:
committed by
Carlos Valente
parent
48fe6a980c
commit
c1a4f04d37
@@ -187,6 +187,36 @@ export default function Rundown({ data }: RundownProps) {
|
|||||||
[order, entries, setSelectedEvents],
|
[order, entries, setSelectedEvents],
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks whether a block is collapsed
|
||||||
|
*/
|
||||||
|
const getIsCollapsed = useCallback(
|
||||||
|
(blockId: EntryId): boolean => {
|
||||||
|
return Boolean(collapsedGroups.find((id) => id === blockId));
|
||||||
|
},
|
||||||
|
[collapsedGroups],
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handles logic for collapsing groups
|
||||||
|
*/
|
||||||
|
const handleCollapseGroup = useCallback(
|
||||||
|
(collapsed: boolean, groupId: EntryId) => {
|
||||||
|
setCollapsedGroups((prev) => {
|
||||||
|
const isCollapsed = getIsCollapsed(groupId);
|
||||||
|
if (collapsed && !isCollapsed) {
|
||||||
|
const newSet = new Set(prev).add(groupId);
|
||||||
|
return [...newSet];
|
||||||
|
}
|
||||||
|
if (!collapsed && isCollapsed) {
|
||||||
|
return [...prev].filter((id) => id !== groupId);
|
||||||
|
}
|
||||||
|
return prev;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
[getIsCollapsed, setCollapsedGroups],
|
||||||
|
);
|
||||||
|
|
||||||
const moveEntry = useCallback(
|
const moveEntry = useCallback(
|
||||||
(cursor: EntryId | null, direction: 'up' | 'down') => {
|
(cursor: EntryId | null, direction: 'up' | 'down') => {
|
||||||
if (sortableData.length < 2 || cursor == null) {
|
if (sortableData.length < 2 || cursor == null) {
|
||||||
@@ -207,7 +237,7 @@ export default function Rundown({ data }: RundownProps) {
|
|||||||
|
|
||||||
reorderEntry(cursor, destinationId, order as 'before' | 'after' | 'insert');
|
reorderEntry(cursor, destinationId, order as 'before' | 'after' | 'insert');
|
||||||
},
|
},
|
||||||
[sortableData, reorderEntry],
|
[sortableData, entries, reorderEntry, handleCollapseGroup],
|
||||||
);
|
);
|
||||||
|
|
||||||
// shortcuts
|
// shortcuts
|
||||||
@@ -256,36 +286,6 @@ export default function Rundown({ data }: RundownProps) {
|
|||||||
setSelectedEvents({ id: featureData.selectedEventId, selectMode: 'click', index });
|
setSelectedEvents({ id: featureData.selectedEventId, selectMode: 'click', index });
|
||||||
}, [appMode, featureData.selectedEventId, order, setSelectedEvents]);
|
}, [appMode, featureData.selectedEventId, order, setSelectedEvents]);
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks whether a block is collapsed
|
|
||||||
*/
|
|
||||||
const getIsCollapsed = useCallback(
|
|
||||||
(blockId: EntryId): boolean => {
|
|
||||||
return Boolean(collapsedGroups.find((id) => id === blockId));
|
|
||||||
},
|
|
||||||
[collapsedGroups],
|
|
||||||
);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handles logic for collapsing groups
|
|
||||||
*/
|
|
||||||
const handleCollapseGroup = useCallback(
|
|
||||||
(collapsed: boolean, groupId: EntryId) => {
|
|
||||||
setCollapsedGroups((prev) => {
|
|
||||||
const isCollapsed = getIsCollapsed(groupId);
|
|
||||||
if (collapsed && !isCollapsed) {
|
|
||||||
const newSet = new Set(prev).add(groupId);
|
|
||||||
return [...newSet];
|
|
||||||
}
|
|
||||||
if (!collapsed && isCollapsed) {
|
|
||||||
return [...prev].filter((id) => id !== groupId);
|
|
||||||
}
|
|
||||||
return prev;
|
|
||||||
});
|
|
||||||
},
|
|
||||||
[getIsCollapsed, setCollapsedGroups],
|
|
||||||
);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* On drag end, we reorder the events
|
* On drag end, we reorder the events
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user