47 lines
1009 B
TypeScript
47 lines
1009 B
TypeScript
export interface StorageValue {
|
|
id: string;
|
|
}
|
|
|
|
export class DataStorage<T extends StorageValue> {
|
|
constructor(private storageKey: string) {}
|
|
|
|
private readValues(): T[] {
|
|
const objects = JSON.parse(window.localStorage.getItem(this.storageKey) || "[]");
|
|
if (!Array.isArray(objects)) {
|
|
return Object.values(objects);
|
|
}
|
|
return objects;
|
|
}
|
|
|
|
private writeValues(values: T[]) {
|
|
window.localStorage.setItem(this.storageKey, JSON.stringify(values));
|
|
}
|
|
|
|
getAll(): T[] {
|
|
return this.readValues();
|
|
}
|
|
|
|
add(value: T): boolean {
|
|
const values = this.readValues();
|
|
for (const v of values) {
|
|
if (v.id == value.id) {
|
|
return false;
|
|
}
|
|
}
|
|
values.push(value);
|
|
this.writeValues(values);
|
|
return true;
|
|
}
|
|
|
|
remove(id: string) {
|
|
const values = this.readValues();
|
|
for (let i = 0; i < values.length; i++) {
|
|
if (values[i].id == id) {
|
|
values.splice(i, 1);
|
|
this.writeValues(values);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|