Moved map and token changes to observable
This commit is contained in:
parent
09bbb45ec6
commit
768b68dbe8
@ -136,9 +136,6 @@ export function MapDataProvider({ children }) {
|
|||||||
.slice(0, cacheDeleteCount)
|
.slice(0, cacheDeleteCount)
|
||||||
.map((map) => map.id);
|
.map((map) => map.id);
|
||||||
database.table("maps").where("id").anyOf(idsToDelete).delete();
|
database.table("maps").where("id").anyOf(idsToDelete).delete();
|
||||||
setMaps((prevMaps) => {
|
|
||||||
return prevMaps.filter((map) => !idsToDelete.includes(map.id));
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}, [database, userId]);
|
}, [database, userId]);
|
||||||
|
|
||||||
@ -179,14 +176,6 @@ export function MapDataProvider({ children }) {
|
|||||||
async (id) => {
|
async (id) => {
|
||||||
const state = { ...defaultMapState, mapId: id };
|
const state = { ...defaultMapState, mapId: id };
|
||||||
await database.table("states").put(state);
|
await database.table("states").put(state);
|
||||||
setMapStates((prevMapStates) => {
|
|
||||||
const newStates = [...prevMapStates];
|
|
||||||
const i = newStates.findIndex((state) => state.mapId === id);
|
|
||||||
if (i > -1) {
|
|
||||||
newStates[i] = state;
|
|
||||||
}
|
|
||||||
return newStates;
|
|
||||||
});
|
|
||||||
return state;
|
return state;
|
||||||
},
|
},
|
||||||
[database]
|
[database]
|
||||||
@ -202,14 +191,6 @@ export function MapDataProvider({ children }) {
|
|||||||
const map = (await getMapFromDB(id)) || {};
|
const map = (await getMapFromDB(id)) || {};
|
||||||
await database.table("maps").put({ ...map, id, ...update });
|
await database.table("maps").put({ ...map, id, ...update });
|
||||||
}
|
}
|
||||||
setMaps((prevMaps) => {
|
|
||||||
const newMaps = [...prevMaps];
|
|
||||||
const i = newMaps.findIndex((map) => map.id === id);
|
|
||||||
if (i > -1) {
|
|
||||||
newMaps[i] = { ...newMaps[i], ...update };
|
|
||||||
}
|
|
||||||
return newMaps;
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
[database, getMapFromDB]
|
[database, getMapFromDB]
|
||||||
);
|
);
|
||||||
@ -219,16 +200,6 @@ export function MapDataProvider({ children }) {
|
|||||||
await Promise.all(
|
await Promise.all(
|
||||||
ids.map((id) => database.table("maps").update(id, update))
|
ids.map((id) => database.table("maps").update(id, update))
|
||||||
);
|
);
|
||||||
setMaps((prevMaps) => {
|
|
||||||
const newMaps = [...prevMaps];
|
|
||||||
for (let id of ids) {
|
|
||||||
const i = newMaps.findIndex((map) => map.id === id);
|
|
||||||
if (i > -1) {
|
|
||||||
newMaps[i] = { ...newMaps[i], ...update };
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return newMaps;
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
[database]
|
[database]
|
||||||
);
|
);
|
||||||
@ -236,14 +207,6 @@ export function MapDataProvider({ children }) {
|
|||||||
const updateMapState = useCallback(
|
const updateMapState = useCallback(
|
||||||
async (id, update) => {
|
async (id, update) => {
|
||||||
await database.table("states").update(id, update);
|
await database.table("states").update(id, update);
|
||||||
setMapStates((prevMapStates) => {
|
|
||||||
const newStates = [...prevMapStates];
|
|
||||||
const i = newStates.findIndex((state) => state.mapId === id);
|
|
||||||
if (i > -1) {
|
|
||||||
newStates[i] = { ...newStates[i], ...update };
|
|
||||||
}
|
|
||||||
return newStates;
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
[database]
|
[database]
|
||||||
);
|
);
|
||||||
@ -256,16 +219,6 @@ export function MapDataProvider({ children }) {
|
|||||||
const putMap = useCallback(
|
const putMap = useCallback(
|
||||||
async (map) => {
|
async (map) => {
|
||||||
await database.table("maps").put(map);
|
await database.table("maps").put(map);
|
||||||
setMaps((prevMaps) => {
|
|
||||||
const newMaps = [...prevMaps];
|
|
||||||
const i = newMaps.findIndex((m) => m.id === map.id);
|
|
||||||
if (i > -1) {
|
|
||||||
newMaps[i] = { ...newMaps[i], ...map };
|
|
||||||
} else {
|
|
||||||
newMaps.unshift(map);
|
|
||||||
}
|
|
||||||
return newMaps;
|
|
||||||
});
|
|
||||||
if (map.owner !== userId) {
|
if (map.owner !== userId) {
|
||||||
await updateCache();
|
await updateCache();
|
||||||
}
|
}
|
||||||
@ -288,6 +241,16 @@ export function MapDataProvider({ children }) {
|
|||||||
const state = { ...defaultMapState, mapId: map.id };
|
const state = { ...defaultMapState, mapId: map.id };
|
||||||
setMaps((prevMaps) => [map, ...prevMaps]);
|
setMaps((prevMaps) => [map, ...prevMaps]);
|
||||||
setMapStates((prevStates) => [state, ...prevStates]);
|
setMapStates((prevStates) => [state, ...prevStates]);
|
||||||
|
} else if (change.type === 2) {
|
||||||
|
const map = change.obj;
|
||||||
|
setMaps((prevMaps) => {
|
||||||
|
const newMaps = [...prevMaps];
|
||||||
|
const i = newMaps.findIndex((m) => m.id === map.id);
|
||||||
|
if (i > -1) {
|
||||||
|
newMaps[i] = map;
|
||||||
|
}
|
||||||
|
return newMaps;
|
||||||
|
});
|
||||||
} else if (change.type === 3) {
|
} else if (change.type === 3) {
|
||||||
// Deleted
|
// Deleted
|
||||||
const id = change.key;
|
const id = change.key;
|
||||||
@ -303,6 +266,20 @@ export function MapDataProvider({ children }) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (change.table === "states") {
|
||||||
|
if (change.type === 2) {
|
||||||
|
// Update map state
|
||||||
|
const state = change.obj;
|
||||||
|
setMapStates((prevMapStates) => {
|
||||||
|
const newStates = [...prevMapStates];
|
||||||
|
const i = newStates.findIndex((s) => s.mapId === state.mapId);
|
||||||
|
if (i > -1) {
|
||||||
|
newStates[i] = state;
|
||||||
|
}
|
||||||
|
return newStates;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -106,9 +106,6 @@ export function TokenDataProvider({ children }) {
|
|||||||
.slice(0, cacheDeleteCount)
|
.slice(0, cacheDeleteCount)
|
||||||
.map((token) => token.id);
|
.map((token) => token.id);
|
||||||
database.table("tokens").where("id").anyOf(idsToDelete).delete();
|
database.table("tokens").where("id").anyOf(idsToDelete).delete();
|
||||||
setTokens((prevTokens) => {
|
|
||||||
return prevTokens.filter((token) => !idsToDelete.includes(token.id));
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}, [database, userId]);
|
}, [database, userId]);
|
||||||
|
|
||||||
@ -140,14 +137,6 @@ export function TokenDataProvider({ children }) {
|
|||||||
async (id, update) => {
|
async (id, update) => {
|
||||||
const change = { ...update, lastModified: Date.now() };
|
const change = { ...update, lastModified: Date.now() };
|
||||||
await database.table("tokens").update(id, change);
|
await database.table("tokens").update(id, change);
|
||||||
setTokens((prevTokens) => {
|
|
||||||
const newTokens = [...prevTokens];
|
|
||||||
const i = newTokens.findIndex((token) => token.id === id);
|
|
||||||
if (i > -1) {
|
|
||||||
newTokens[i] = { ...newTokens[i], ...change };
|
|
||||||
}
|
|
||||||
return newTokens;
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
[database]
|
[database]
|
||||||
);
|
);
|
||||||
@ -158,16 +147,6 @@ export function TokenDataProvider({ children }) {
|
|||||||
await Promise.all(
|
await Promise.all(
|
||||||
ids.map((id) => database.table("tokens").update(id, change))
|
ids.map((id) => database.table("tokens").update(id, change))
|
||||||
);
|
);
|
||||||
setTokens((prevTokens) => {
|
|
||||||
const newTokens = [...prevTokens];
|
|
||||||
for (let id of ids) {
|
|
||||||
const i = newTokens.findIndex((token) => token.id === id);
|
|
||||||
if (i > -1) {
|
|
||||||
newTokens[i] = { ...newTokens[i], ...change };
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return newTokens;
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
[database]
|
[database]
|
||||||
);
|
);
|
||||||
@ -175,16 +154,6 @@ export function TokenDataProvider({ children }) {
|
|||||||
const putToken = useCallback(
|
const putToken = useCallback(
|
||||||
async (token) => {
|
async (token) => {
|
||||||
await database.table("tokens").put(token);
|
await database.table("tokens").put(token);
|
||||||
setTokens((prevTokens) => {
|
|
||||||
const newTokens = [...prevTokens];
|
|
||||||
const i = newTokens.findIndex((t) => t.id === token.id);
|
|
||||||
if (i > -1) {
|
|
||||||
newTokens[i] = { ...newTokens[i], ...token };
|
|
||||||
} else {
|
|
||||||
newTokens.unshift(token);
|
|
||||||
}
|
|
||||||
return newTokens;
|
|
||||||
});
|
|
||||||
if (token.owner !== userId) {
|
if (token.owner !== userId) {
|
||||||
await updateCache();
|
await updateCache();
|
||||||
}
|
}
|
||||||
@ -227,13 +196,24 @@ export function TokenDataProvider({ children }) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
function handleMapChanges(changes) {
|
function handleTokenChanges(changes) {
|
||||||
for (let change of changes) {
|
for (let change of changes) {
|
||||||
if (change.table === "tokens") {
|
if (change.table === "tokens") {
|
||||||
if (change.type === 1) {
|
if (change.type === 1) {
|
||||||
// Created
|
// Created
|
||||||
const token = change.obj;
|
const token = change.obj;
|
||||||
setTokens((prevTokens) => [token, ...prevTokens]);
|
setTokens((prevTokens) => [token, ...prevTokens]);
|
||||||
|
} else if (change.type === 2) {
|
||||||
|
// Updated
|
||||||
|
const token = change.obj;
|
||||||
|
setTokens((prevTokens) => {
|
||||||
|
const newTokens = [...prevTokens];
|
||||||
|
const i = newTokens.findIndex((t) => t.id === token.id);
|
||||||
|
if (i > -1) {
|
||||||
|
newTokens[i] = token;
|
||||||
|
}
|
||||||
|
return newTokens;
|
||||||
|
});
|
||||||
} else if (change.type === 3) {
|
} else if (change.type === 3) {
|
||||||
// Deleted
|
// Deleted
|
||||||
const id = change.key;
|
const id = change.key;
|
||||||
@ -246,10 +226,10 @@ export function TokenDataProvider({ children }) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
database.on("changes", handleMapChanges);
|
database.on("changes", handleTokenChanges);
|
||||||
|
|
||||||
return () => {
|
return () => {
|
||||||
database.on("changes").unsubscribe(handleMapChanges);
|
database.on("changes").unsubscribe(handleTokenChanges);
|
||||||
};
|
};
|
||||||
}, [database, databaseStatus]);
|
}, [database, databaseStatus]);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user