mirror of
https://github.com/gpxstudio/gpx.studio.git
synced 2025-09-01 08:12:32 +00:00
group filestate updates
This commit is contained in:
@@ -110,16 +110,16 @@ function dexieStore<T>(querier: () => T | Promise<T>, initial?: T): Readable<T>
|
|||||||
export type GPXFileWithStatistics = { file: GPXFile, statistics: GPXStatistics };
|
export type GPXFileWithStatistics = { file: GPXFile, statistics: GPXStatistics };
|
||||||
|
|
||||||
// Wrap Dexie live queries in a Svelte store to avoid triggering the query for every subscriber, also takes care of the conversion to a GPXFile object
|
// Wrap Dexie live queries in a Svelte store to avoid triggering the query for every subscriber, also takes care of the conversion to a GPXFile object
|
||||||
function dexieGPXFileStore(querier: () => GPXFile | undefined | Promise<GPXFile | undefined>): Readable<GPXFileWithStatistics> & { destroy: () => void } {
|
function dexieGPXFileStore(id: string): Readable<GPXFileWithStatistics> & { destroy: () => void } {
|
||||||
let store = writable<GPXFileWithStatistics>(undefined);
|
let store = writable<GPXFileWithStatistics>(undefined);
|
||||||
let query = liveQuery(querier).subscribe(value => {
|
let query = liveQuery(() => db.files.get(id)).subscribe(value => {
|
||||||
if (value !== undefined) {
|
if (value !== undefined) {
|
||||||
let gpx = new GPXFile(value);
|
let gpx = new GPXFile(value);
|
||||||
let statistics = gpx.getStatistics();
|
let statistics = gpx.getStatistics();
|
||||||
if (!fileState.has(gpx._data.id)) { // Update the map bounds for new files
|
if (!fileState.has(id)) { // Update the map bounds for new files
|
||||||
updateTargetMapBounds(statistics.global.bounds);
|
updateTargetMapBounds(statistics.global.bounds);
|
||||||
}
|
}
|
||||||
fileState.set(gpx._data.id, gpx);
|
fileState.set(id, gpx);
|
||||||
store.set({
|
store.set({
|
||||||
file: gpx,
|
file: gpx,
|
||||||
statistics
|
statistics
|
||||||
@@ -128,7 +128,10 @@ function dexieGPXFileStore(querier: () => GPXFile | undefined | Promise<GPXFile
|
|||||||
});
|
});
|
||||||
return {
|
return {
|
||||||
subscribe: store.subscribe,
|
subscribe: store.subscribe,
|
||||||
destroy: query.unsubscribe
|
destroy: () => {
|
||||||
|
fileState.delete(id);
|
||||||
|
query.unsubscribe();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -183,12 +186,11 @@ liveQuery(() => db.fileids.toArray()).subscribe(dbFileIds => {
|
|||||||
if (newFiles.length > 0 || deletedFiles.length > 0) {
|
if (newFiles.length > 0 || deletedFiles.length > 0) {
|
||||||
fileObservers.update($files => {
|
fileObservers.update($files => {
|
||||||
newFiles.forEach(id => {
|
newFiles.forEach(id => {
|
||||||
$files.set(id, dexieGPXFileStore(() => db.files.get(id)));
|
$files.set(id, dexieGPXFileStore(id));
|
||||||
});
|
});
|
||||||
deletedFiles.forEach(id => {
|
deletedFiles.forEach(id => {
|
||||||
$files.get(id)?.destroy();
|
$files.get(id)?.destroy();
|
||||||
$files.delete(id);
|
$files.delete(id);
|
||||||
fileState.delete(id);
|
|
||||||
});
|
});
|
||||||
return $files;
|
return $files;
|
||||||
});
|
});
|
||||||
@@ -260,7 +262,7 @@ function applyPatch(patch: Patch[]) {
|
|||||||
|
|
||||||
// Get the file ids of the files that have changed in the patch
|
// Get the file ids of the files that have changed in the patch
|
||||||
function getChangedFileIds(patch: Patch[]): string[] {
|
function getChangedFileIds(patch: Patch[]): string[] {
|
||||||
let changedFileIds = new Set();
|
let changedFileIds = new Set<string>();
|
||||||
for (let p of patch) {
|
for (let p of patch) {
|
||||||
changedFileIds.add(p.path[0]);
|
changedFileIds.add(p.path[0]);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user