optimizations using caching

This commit is contained in:
proddy
2025-10-24 16:24:55 +02:00
parent 28e1e46586
commit 43bb77b095

View File

@@ -1,4 +1,4 @@
import { useCallback, useContext, useEffect, useMemo, useState } from 'react'; import { memo, useCallback, useContext, useEffect, useMemo, useState } from 'react';
import { IconContext } from 'react-icons/lib'; import { IconContext } from 'react-icons/lib';
import { Link } from 'react-router'; import { Link } from 'react-router';
import { toast } from 'react-toastify'; import { toast } from 'react-toastify';
@@ -44,7 +44,7 @@ import {
} from './types'; } from './types';
import { deviceValueItemValidation } from './validators'; import { deviceValueItemValidation } from './validators';
const Dashboard = () => { const Dashboard = memo(() => {
const { LL } = useI18nContext(); const { LL } = useI18nContext();
const { me } = useContext(AuthenticatedContext); const { me } = useContext(AuthenticatedContext);
@@ -163,9 +163,14 @@ const Dashboard = () => {
} }
}); });
const nodeIds = useMemo(
() => data.nodes.map((item: DashboardItem) => item.id),
[data.nodes]
);
useEffect(() => { useEffect(() => {
showAll showAll
? tree.fns.onAddAll(data.nodes.map((item: DashboardItem) => item.id)) // expand tree ? tree.fns.onAddAll(nodeIds) // expand tree
: tree.fns.onRemoveAll(); // collapse tree : tree.fns.onRemoveAll(); // collapse tree
}, [parentNodes]); }, [parentNodes]);
@@ -195,7 +200,8 @@ const Dashboard = () => {
[LL] [LL]
); );
const showName = (di: DashboardItem) => { const showName = useCallback(
(di: DashboardItem) => {
if (di.id < 100) { if (di.id < 100) {
// if its a device (parent node) and has entities // if its a device (parent node) and has entities
if (di.nodes?.length) { if (di.nodes?.length) {
@@ -212,10 +218,14 @@ const Dashboard = () => {
return <span>{di.dv.id.slice(2)}</span>; return <span>{di.dv.id.slice(2)}</span>;
} }
return null; return null;
}; },
[showType]
);
const hasMask = (id: string, mask: number) => const hasMask = useCallback(
(parseInt(id.slice(0, 2), 16) & mask) === mask; (id: string, mask: number) => (parseInt(id.slice(0, 2), 16) & mask) === mask,
[]
);
const editDashboardValue = useCallback( const editDashboardValue = useCallback(
(di: DashboardItem) => { (di: DashboardItem) => {
@@ -237,6 +247,11 @@ const Dashboard = () => {
} }
}; };
const hasFavEntities = useMemo(
() => data.nodes.filter((item: DashboardItem) => item.id <= 90).length,
[data.nodes]
);
const renderContent = () => { const renderContent = () => {
if (!data) { if (!data) {
return ( return (
@@ -244,10 +259,6 @@ const Dashboard = () => {
); );
} }
const hasFavEntities = data.nodes.filter(
(item: DashboardItem) => item.id <= 90
).length;
return ( return (
<> <>
{!data.connected && ( {!data.connected && (
@@ -391,6 +402,6 @@ const Dashboard = () => {
)} )}
</SectionContent> </SectionContent>
); );
}; });
export default Dashboard; export default Dashboard;