UNPKG

@trimblemaps/content-db

Version:

An isomorphic indexeddb wrapper for storing/retrieving TrimbleMaps content (ie places & place-sets)

107 lines (89 loc) 2.79 kB
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); } }