UPDATE
This commit is contained in:
@@ -90,6 +90,11 @@ function mergeRowOrderAfterDrag(
|
||||
return result;
|
||||
}
|
||||
|
||||
function areStringArraysEqual(left: string[], right: string[]): boolean {
|
||||
if (left.length !== right.length) return false;
|
||||
return left.every((value, index) => value === right[index]);
|
||||
}
|
||||
|
||||
const FarmDashboardWrapper = () => {
|
||||
const t = useTranslations("farmDashboard");
|
||||
const { setSlotContent } = useContext(NavbarSlotContext);
|
||||
@@ -149,7 +154,10 @@ const FarmDashboardWrapper = () => {
|
||||
const [loading, setLoading] = useState(true);
|
||||
const [saving, setSaving] = useState(false);
|
||||
|
||||
const disabledSet = new Set(config.disabledCardIds);
|
||||
const disabledSet = useMemo(
|
||||
() => new Set(config.disabledCardIds),
|
||||
[config.disabledCardIds],
|
||||
);
|
||||
|
||||
const hasVisibleCard = useCallback(
|
||||
(rowId: string) => {
|
||||
@@ -160,7 +168,10 @@ const FarmDashboardWrapper = () => {
|
||||
[config.disabledCardIds],
|
||||
);
|
||||
|
||||
const visibleRowOrder = config.rowOrder.filter(hasVisibleCard);
|
||||
const visibleRowOrder = useMemo(
|
||||
() => config.rowOrder.filter(hasVisibleCard),
|
||||
[config.rowOrder, hasVisibleCard],
|
||||
);
|
||||
|
||||
const [containerRef, orderedRows, setOrderedRows] = useDragAndDrop(
|
||||
visibleRowOrder,
|
||||
@@ -198,18 +209,19 @@ const FarmDashboardWrapper = () => {
|
||||
}, []);
|
||||
|
||||
useEffect(() => {
|
||||
if (areStringArraysEqual(orderedRows, visibleRowOrder)) return;
|
||||
setOrderedRows(visibleRowOrder);
|
||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||
}, [visibleRowOrder]);
|
||||
}, [orderedRows, setOrderedRows, visibleRowOrder]);
|
||||
|
||||
useEffect(() => {
|
||||
if (loading) return;
|
||||
if (JSON.stringify(orderedRows) === JSON.stringify(visibleRowOrder)) return;
|
||||
if (areStringArraysEqual(orderedRows, visibleRowOrder)) return;
|
||||
const newRowOrder = mergeRowOrderAfterDrag(
|
||||
config.rowOrder,
|
||||
orderedRows,
|
||||
visibleRowOrder,
|
||||
);
|
||||
if (areStringArraysEqual(newRowOrder, config.rowOrder)) return;
|
||||
setConfig((prev) => ({ ...prev, rowOrder: newRowOrder }));
|
||||
setSaving(true);
|
||||
farmDashboardService
|
||||
@@ -217,8 +229,7 @@ const FarmDashboardWrapper = () => {
|
||||
.then((updated) => setConfig(updated))
|
||||
.catch(() => {})
|
||||
.finally(() => setSaving(false));
|
||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||
}, [orderedRows]);
|
||||
}, [config.rowOrder, loading, orderedRows, visibleRowOrder]);
|
||||
|
||||
const handleToggleDragReorder = useCallback((enabled: boolean) => {
|
||||
setConfig((prev) => ({ ...prev, enableDragReorder: enabled }));
|
||||
|
||||
Reference in New Issue
Block a user