This commit is contained in:
2026-03-26 15:39:58 +03:30
parent e89c3a1b16
commit 93215a7366
3 changed files with 86 additions and 18 deletions
@@ -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 }));