Optimisation to tile rendering
This commit is contained in:
parent
fa8d081079
commit
4bfe49f454
@ -9,7 +9,7 @@ import { getGroupItems } from "../../helpers/group";
|
|||||||
|
|
||||||
import { useGroup } from "../../contexts/GroupContext";
|
import { useGroup } from "../../contexts/GroupContext";
|
||||||
|
|
||||||
function MapTiles({ maps, onMapEdit, onMapSelect, subgroup }) {
|
function MapTiles({ mapsById, onMapEdit, onMapSelect, subgroup }) {
|
||||||
const {
|
const {
|
||||||
selectedGroupIds,
|
selectedGroupIds,
|
||||||
selectMode,
|
selectMode,
|
||||||
@ -19,7 +19,7 @@ function MapTiles({ maps, onMapEdit, onMapSelect, subgroup }) {
|
|||||||
|
|
||||||
function renderTile(group) {
|
function renderTile(group) {
|
||||||
if (group.type === "item") {
|
if (group.type === "item") {
|
||||||
const map = maps.find((map) => map.id === group.id);
|
const map = mapsById[group.id];
|
||||||
const isSelected = selectedGroupIds.includes(group.id);
|
const isSelected = selectedGroupIds.includes(group.id);
|
||||||
const canEdit =
|
const canEdit =
|
||||||
isSelected && selectMode === "single" && selectedGroupIds.length === 1;
|
isSelected && selectMode === "single" && selectedGroupIds.length === 1;
|
||||||
@ -44,7 +44,7 @@ function MapTiles({ maps, onMapEdit, onMapSelect, subgroup }) {
|
|||||||
<MapTileGroup
|
<MapTileGroup
|
||||||
key={group.id}
|
key={group.id}
|
||||||
group={group}
|
group={group}
|
||||||
maps={items.map((item) => maps.find((map) => map.id === item.id))}
|
maps={items.map((item) => mapsById[item.id])}
|
||||||
isSelected={isSelected}
|
isSelected={isSelected}
|
||||||
onSelect={onGroupSelect}
|
onSelect={onGroupSelect}
|
||||||
onDoubleClick={() => canOpen && onGroupOpen(group.id)}
|
onDoubleClick={() => canOpen && onGroupOpen(group.id)}
|
||||||
|
@ -10,7 +10,7 @@ import { getGroupItems } from "../../helpers/group";
|
|||||||
|
|
||||||
import { useGroup } from "../../contexts/GroupContext";
|
import { useGroup } from "../../contexts/GroupContext";
|
||||||
|
|
||||||
function TokenTiles({ tokens, onTokenEdit, subgroup }) {
|
function TokenTiles({ tokensById, onTokenEdit, subgroup }) {
|
||||||
const {
|
const {
|
||||||
selectedGroupIds,
|
selectedGroupIds,
|
||||||
selectMode,
|
selectMode,
|
||||||
@ -20,7 +20,7 @@ function TokenTiles({ tokens, onTokenEdit, subgroup }) {
|
|||||||
|
|
||||||
function renderTile(group) {
|
function renderTile(group) {
|
||||||
if (group.type === "item") {
|
if (group.type === "item") {
|
||||||
const token = tokens.find((token) => token.id === group.id);
|
const token = tokensById[group.id];
|
||||||
const isSelected = selectedGroupIds.includes(group.id);
|
const isSelected = selectedGroupIds.includes(group.id);
|
||||||
const canEdit =
|
const canEdit =
|
||||||
isSelected && selectMode === "single" && selectedGroupIds.length === 1;
|
isSelected && selectMode === "single" && selectedGroupIds.length === 1;
|
||||||
@ -48,9 +48,7 @@ function TokenTiles({ tokens, onTokenEdit, subgroup }) {
|
|||||||
<TokenTileGroup
|
<TokenTileGroup
|
||||||
key={group.id}
|
key={group.id}
|
||||||
group={group}
|
group={group}
|
||||||
tokens={items.map((item) =>
|
tokens={items.map((item) => tokensById[item.id])}
|
||||||
tokens.find((token) => token.id === item.id)
|
|
||||||
)}
|
|
||||||
isSelected={isSelected}
|
isSelected={isSelected}
|
||||||
onSelect={onGroupSelect}
|
onSelect={onGroupSelect}
|
||||||
onDoubleClick={() => canOpen && onGroupOpen(group.id)}
|
onDoubleClick={() => canOpen && onGroupOpen(group.id)}
|
||||||
|
@ -221,6 +221,16 @@ export function MapDataProvider({ children }) {
|
|||||||
};
|
};
|
||||||
}, [database, databaseStatus]);
|
}, [database, databaseStatus]);
|
||||||
|
|
||||||
|
const [mapsById, setMapsById] = useState({});
|
||||||
|
useEffect(() => {
|
||||||
|
setMapsById(
|
||||||
|
maps.reduce((obj, map) => {
|
||||||
|
obj[map.id] = map;
|
||||||
|
return obj;
|
||||||
|
}, {})
|
||||||
|
);
|
||||||
|
}, [maps]);
|
||||||
|
|
||||||
const value = {
|
const value = {
|
||||||
maps,
|
maps,
|
||||||
mapStates,
|
mapStates,
|
||||||
@ -234,6 +244,7 @@ export function MapDataProvider({ children }) {
|
|||||||
mapsLoading,
|
mapsLoading,
|
||||||
getMapState,
|
getMapState,
|
||||||
updateMapGroups,
|
updateMapGroups,
|
||||||
|
mapsById,
|
||||||
};
|
};
|
||||||
return (
|
return (
|
||||||
<MapDataContext.Provider value={value}>{children}</MapDataContext.Provider>
|
<MapDataContext.Provider value={value}>{children}</MapDataContext.Provider>
|
||||||
|
@ -169,10 +169,15 @@ export function TokenDataProvider({ children }) {
|
|||||||
};
|
};
|
||||||
}, [database, databaseStatus]);
|
}, [database, databaseStatus]);
|
||||||
|
|
||||||
const tokensById = tokens.reduce((obj, token) => {
|
const [tokensById, setTokensById] = useState({});
|
||||||
obj[token.id] = token;
|
useEffect(() => {
|
||||||
return obj;
|
setTokensById(
|
||||||
}, {});
|
tokens.reduce((obj, token) => {
|
||||||
|
obj[token.id] = token;
|
||||||
|
return obj;
|
||||||
|
}, {})
|
||||||
|
);
|
||||||
|
}, [tokens]);
|
||||||
|
|
||||||
const value = {
|
const value = {
|
||||||
tokens,
|
tokens,
|
||||||
|
@ -52,6 +52,7 @@ function SelectMapModal({
|
|||||||
updateMapGroups,
|
updateMapGroups,
|
||||||
updateMap,
|
updateMap,
|
||||||
updateMapState,
|
updateMapState,
|
||||||
|
mapsById,
|
||||||
} = useMapData();
|
} = useMapData();
|
||||||
const { addAssets } = useAssets();
|
const { addAssets } = useAssets();
|
||||||
|
|
||||||
@ -214,6 +215,7 @@ function SelectMapModal({
|
|||||||
handleWidth
|
handleWidth
|
||||||
handleHeight
|
handleHeight
|
||||||
onResize={handleModalResize}
|
onResize={handleModalResize}
|
||||||
|
refreshMode="debounce"
|
||||||
>
|
>
|
||||||
<GroupProvider
|
<GroupProvider
|
||||||
groups={mapGroups}
|
groups={mapGroups}
|
||||||
@ -240,7 +242,7 @@ function SelectMapModal({
|
|||||||
>
|
>
|
||||||
<TilesContainer>
|
<TilesContainer>
|
||||||
<MapTiles
|
<MapTiles
|
||||||
maps={maps}
|
mapsById={mapsById}
|
||||||
onMapEdit={setEditingMapId}
|
onMapEdit={setEditingMapId}
|
||||||
onMapSelect={handleMapSelect}
|
onMapSelect={handleMapSelect}
|
||||||
/>
|
/>
|
||||||
@ -254,7 +256,7 @@ function SelectMapModal({
|
|||||||
>
|
>
|
||||||
<TilesOverlay modalSize={modalSize}>
|
<TilesOverlay modalSize={modalSize}>
|
||||||
<MapTiles
|
<MapTiles
|
||||||
maps={maps}
|
mapsById={mapsById}
|
||||||
onMapEdit={setEditingMapId}
|
onMapEdit={setEditingMapId}
|
||||||
onMapSelect={handleMapSelect}
|
onMapSelect={handleMapSelect}
|
||||||
subgroup
|
subgroup
|
||||||
|
@ -215,6 +215,7 @@ function SelectTokensModal({ isOpen, onRequestClose, onMapTokensStateCreate }) {
|
|||||||
handleWidth
|
handleWidth
|
||||||
handleHeight
|
handleHeight
|
||||||
onResize={handleModalResize}
|
onResize={handleModalResize}
|
||||||
|
refreshMode="debounce"
|
||||||
>
|
>
|
||||||
<GroupProvider
|
<GroupProvider
|
||||||
groups={tokenGroups}
|
groups={tokenGroups}
|
||||||
@ -243,7 +244,7 @@ function SelectTokensModal({ isOpen, onRequestClose, onMapTokensStateCreate }) {
|
|||||||
>
|
>
|
||||||
<TilesContainer>
|
<TilesContainer>
|
||||||
<TokenTiles
|
<TokenTiles
|
||||||
tokens={tokens}
|
tokensById={tokensById}
|
||||||
onTokenEdit={setEditingTokenId}
|
onTokenEdit={setEditingTokenId}
|
||||||
/>
|
/>
|
||||||
</TilesContainer>
|
</TilesContainer>
|
||||||
@ -256,7 +257,7 @@ function SelectTokensModal({ isOpen, onRequestClose, onMapTokensStateCreate }) {
|
|||||||
>
|
>
|
||||||
<TilesOverlay modalSize={modalSize}>
|
<TilesOverlay modalSize={modalSize}>
|
||||||
<TokenTiles
|
<TokenTiles
|
||||||
tokens={tokens}
|
tokensById={tokensById}
|
||||||
onTokenEdit={setEditingTokenId}
|
onTokenEdit={setEditingTokenId}
|
||||||
subgroup
|
subgroup
|
||||||
/>
|
/>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user