@trimblemaps/content-db
Version:
An isomorphic indexeddb wrapper for storing/retrieving TrimbleMaps content (ie places & place-sets)
107 lines (89 loc) • 2.79 kB
text/typescript
import db from './leveldb';
import { IPlaceSet } from './models';
export class PlacesStore {
placesetKey = 'places';
constructor(keyPrefix = '') {
this.placesetKey = encodeURI(keyPrefix + this.placesetKey);
}
getAll = () => {
return this.getSetKeys()
.then((setKeys: IPlaceSet[]) => {
const gets = setKeys.map((set: any) => db.get(`${this.placesetKey}_${set.Id}`));
return Promise.all(gets);
});
}
get = (id: number) => {
return this.getAll()
.then((sets: IPlaceSet[]) => {
return sets.find(i => i.Id === id);
});
}
getSetKeys = () => {
return db.get(this.placesetKey);
}
getPlaceSetIndex = () => {
return db.get(this.placesetKey);
}
find = (q: string) => {
return this.getAll()
.then((sets: IPlaceSet[]) => {
return sets.find(i => i.Name === q);
});
}
put = (placeSets: IPlaceSet[]) => {
const setKeys = placeSets.map((placeSet: IPlaceSet) => {
return placeSet;
});
const puts = placeSets.map((placeSet: IPlaceSet) => {
return {type: 'put', key: `${this.placesetKey}_${placeSet.Id}`, value: placeSet};
});
return db.put(this.placesetKey, setKeys).then(() => db.batch(puts));
}
deletePlaceSet = (id: number) => {
return db.del(`${this.placesetKey}_${id}`);
}
putPlaceSets = (placeSets: IPlaceSet[]) => {
const puts = placeSets.map((placeSet: IPlaceSet) => {
return {type: 'put', key: `${this.placesetKey}_${placeSet.Id}`, value: placeSet};
});
return db.batch(puts);
}
putPlaceSetKeys = (placeSets: IPlaceSet[]) => {
const setKeys = placeSets.map(placeSet => {
const { Id, ModifiedOn: Timestamp } = placeSet;
return {key:`${this.placesetKey}_${Id}`, Id, Timestamp, Index: 0, ServerTimestamp: 0, HumanTime: new Date(Timestamp/10000)}
})
return db.put(this.placesetKey, setKeys);
}
findModifiedSetId = (sets, newSet) => {
const set = sets.find(set => {
if (set.Id === newSet.Id && newSet.ModifiedOn > set.ModifiedOn) {
return true;
}
return;
});
if (set) {
return set.Id;
} else {
return;
}
}
getBySetId = (id: number) => {
return db.get(`${this.placesetKey}_${id}`)
}
updatePlaceSetIndex = (setId: number, placeSet: IPlaceSet) => {
return this.getPlaceSetIndex()
.then((setKeys: IPlaceSet[]) => {
const foundIndex = setKeys.findIndex(x => x.Id === setId);
if (foundIndex !== -1) {
setKeys[foundIndex] = placeSet
} else { // add new placeSet
setKeys.push(placeSet);
}
return db.put(this.placesetKey, setKeys);
});
}
putPlaceSet = (placeSet: IPlaceSet) => {
return db.put(`${this.placesetKey}_${placeSet.Id}`, placeSet);
}
}