mirror of https://github.com/artf/grapesjs.git
nocodeframeworkdrag-and-dropsite-buildersite-generatortemplate-builderui-builderweb-builderweb-builder-frameworkwebsite-builderno-codepage-builder
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
1.0 KiB
43 lines
1.0 KiB
import { hasWin } from '../../utils/mixins';
|
|
import IStorage, { ProjectData } from './IStorage';
|
|
|
|
export interface LocalStorageConfig {
|
|
/**
|
|
* Local key identifier of the project.
|
|
* @default 'gjsProject'
|
|
*/
|
|
key?: string;
|
|
|
|
/**
|
|
* If enabled, checks if browser supports LocalStorage.
|
|
* @default true
|
|
*/
|
|
checkLocal?: boolean;
|
|
}
|
|
|
|
export default class LocalStorage implements IStorage<LocalStorageConfig> {
|
|
async store(data: ProjectData, opts: LocalStorageConfig = {}) {
|
|
if (this.hasLocal(opts, true)) {
|
|
localStorage.setItem(opts.key!, JSON.stringify(data));
|
|
}
|
|
}
|
|
|
|
async load(opts: LocalStorageConfig = {}) {
|
|
let result = {};
|
|
|
|
if (this.hasLocal(opts, true)) {
|
|
result = JSON.parse(localStorage.getItem(opts.key!) || '{}');
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
hasLocal(opts: LocalStorageConfig = {}, thr?: boolean) {
|
|
if (opts.checkLocal && (!hasWin() || !localStorage)) {
|
|
if (thr) throw new Error('localStorage not available');
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
}
|
|
|