mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Make BaseStore abstract (#1431)
* make BaseStore abstract so that implementers are forced to decide how to store data Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
parent
4079214dc1
commit
4b56ab7c61
@ -1,11 +1,13 @@
|
|||||||
import { Store } from "@k8slens/extensions";
|
import { Store } from "@k8slens/extensions";
|
||||||
import { toJS } from "mobx"
|
import { toJS } from "mobx"
|
||||||
|
|
||||||
export type TelemetryPreferencesModel = {
|
export type TelemetryPreferencesModel = {
|
||||||
enabled: boolean;
|
enabled: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export class TelemetryPreferencesStore extends Store.ExtensionStore<TelemetryPreferencesModel> {
|
export class TelemetryPreferencesStore extends Store.ExtensionStore<TelemetryPreferencesModel> {
|
||||||
|
enabled = true;
|
||||||
|
|
||||||
private constructor() {
|
private constructor() {
|
||||||
super({
|
super({
|
||||||
configName: "preferences-store",
|
configName: "preferences-store",
|
||||||
@ -15,17 +17,13 @@ export class TelemetryPreferencesStore extends Store.ExtensionStore<TelemetryPre
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
get enabled() {
|
protected fromStore({ enabled }: TelemetryPreferencesModel): void {
|
||||||
return this.data.enabled
|
this.enabled = enabled
|
||||||
}
|
|
||||||
|
|
||||||
set enabled(v: boolean) {
|
|
||||||
this.data.enabled = v
|
|
||||||
}
|
}
|
||||||
|
|
||||||
toJSON(): TelemetryPreferencesModel {
|
toJSON(): TelemetryPreferencesModel {
|
||||||
return toJS({
|
return toJS({
|
||||||
enabled: this.data.enabled
|
enabled: this.enabled
|
||||||
}, {
|
}, {
|
||||||
recurseEverything: true
|
recurseEverything: true
|
||||||
})
|
})
|
||||||
|
|||||||
@ -15,7 +15,10 @@ export interface BaseStoreParams<T = any> extends ConfOptions<T> {
|
|||||||
syncOptions?: IReactionOptions;
|
syncOptions?: IReactionOptions;
|
||||||
}
|
}
|
||||||
|
|
||||||
export class BaseStore<T = any> extends Singleton {
|
/**
|
||||||
|
* Note: T should only contain base JSON serializable types.
|
||||||
|
*/
|
||||||
|
export abstract class BaseStore<T = any> extends Singleton {
|
||||||
protected storeConfig: Config<T>;
|
protected storeConfig: Config<T>;
|
||||||
protected syncDisposers: Function[] = [];
|
protected syncDisposers: Function[] = [];
|
||||||
|
|
||||||
@ -146,16 +149,19 @@ export class BaseStore<T = any> extends Singleton {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@action
|
/**
|
||||||
protected fromStore(data: T) {
|
* fromStore is called internally when a child class syncs with the file
|
||||||
if (!data) return;
|
* system.
|
||||||
this.data = data;
|
* @param data the parsed information read from the stored JSON file
|
||||||
}
|
*/
|
||||||
|
protected abstract fromStore(data: T): void;
|
||||||
|
|
||||||
// todo: use "serializr" ?
|
/**
|
||||||
toJSON(): T {
|
* toJSON is called when syncing the store to the filesystem. It should
|
||||||
return toJS(this.data, {
|
* produce a JSON serializable object representaion of the current state.
|
||||||
recurseEverything: true,
|
*
|
||||||
})
|
* It is recommended that a round trip is valid. Namely, calling
|
||||||
}
|
* `this.fromStore(this.toJSON())` shouldn't change the state.
|
||||||
|
*/
|
||||||
|
abstract toJSON(): T;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,17 +2,17 @@ import { BaseStore } from "../common/base-store"
|
|||||||
import * as path from "path"
|
import * as path from "path"
|
||||||
import { LensExtension } from "./lens-extension"
|
import { LensExtension } from "./lens-extension"
|
||||||
|
|
||||||
export class ExtensionStore<T = any> extends BaseStore<T> {
|
export abstract class ExtensionStore<T> extends BaseStore<T> {
|
||||||
protected extension: LensExtension
|
protected extension: LensExtension
|
||||||
|
|
||||||
async loadExtension(extension: LensExtension) {
|
async loadExtension(extension: LensExtension) {
|
||||||
this.extension = extension
|
this.extension = extension
|
||||||
await super.load()
|
return super.load()
|
||||||
}
|
}
|
||||||
|
|
||||||
async load() {
|
async load() {
|
||||||
if (!this.extension) { return }
|
if (!this.extension) { return }
|
||||||
await super.load()
|
return super.load()
|
||||||
}
|
}
|
||||||
|
|
||||||
protected cwd() {
|
protected cwd() {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user