mirror of https://github.com/artf/grapesjs.git
2 changed files with 176 additions and 93 deletions
@ -1,93 +0,0 @@ |
|||||
export default { |
|
||||
// Prefix identifier that will be used inside storing and loading
|
|
||||
// @deprecated
|
|
||||
id: 'gjs-', |
|
||||
|
|
||||
// Default storage type. Available: local | remote
|
|
||||
type: 'local', |
|
||||
|
|
||||
// Enable/Disable autosaving
|
|
||||
autosave: true, |
|
||||
|
|
||||
// Enable/Disable autoload of data on editor init
|
|
||||
autoload: true, |
|
||||
|
|
||||
/** |
|
||||
* In case the `remote` storage is selected, and this options is enabled, the project |
|
||||
* will be stored on the `local` storage in case the remote one fails. |
|
||||
* The local data are cleared on every sucessful remote save. When the remote storage |
|
||||
* fails (eg. network issue) and the editor is reloaded, a dialog with the possibility to |
|
||||
* recovery previous data will be shown. |
|
||||
* @example |
|
||||
* // Enable recovery with default confirm dialog
|
|
||||
* recovery: true, |
|
||||
* // Enable recovery with a custom dialog
|
|
||||
* recovery: (accept, cancel, editor) => { |
|
||||
* confirm('Recover data?') ? accept() : cancel(); |
|
||||
* }, |
|
||||
*/ |
|
||||
recovery: false, |
|
||||
|
|
||||
// If autosave enabled, indicates how many steps (general changes to structure)
|
|
||||
// need to be done before save. Useful with remoteStorage to reduce remote calls
|
|
||||
stepsBeforeSave: 1, |
|
||||
|
|
||||
/** |
|
||||
* Callback triggered before the store call (can be asynchronous). |
|
||||
* This can be used to enrich the project data to store. |
|
||||
*/ |
|
||||
onStore: data => data, |
|
||||
|
|
||||
/** |
|
||||
* Callback triggered after the load call (can be asynchronous). |
|
||||
*/ |
|
||||
onLoad: data => data, |
|
||||
|
|
||||
// Default storage options
|
|
||||
options: { |
|
||||
local: { |
|
||||
key: 'gjsProject', |
|
||||
|
|
||||
// If enabled, checks if browser supports LocalStorage
|
|
||||
checkLocal: true, |
|
||||
}, |
|
||||
remote: { |
|
||||
// Custom headers
|
|
||||
headers: {}, |
|
||||
|
|
||||
// Endpoint URL where to store data project
|
|
||||
urlStore: '', |
|
||||
|
|
||||
// Endpoint URL where to load data project
|
|
||||
urlLoad: '', |
|
||||
|
|
||||
// set contentType paramater of $.ajax
|
|
||||
// true: application/json; charset=utf-8'
|
|
||||
// false: 'x-www-form-urlencoded'
|
|
||||
contentTypeJson: true, |
|
||||
|
|
||||
// Pass custom options to fetch API (remote storage)
|
|
||||
// You can pass a simple object: { someOption: 'someValue' }
|
|
||||
// or a function which returns and object to add:
|
|
||||
// currentOpts => {
|
|
||||
// return currentOpts.method === 'POST' ? { method: 'PATCH' } : {};
|
|
||||
// }
|
|
||||
fetchOptions: '', |
|
||||
|
|
||||
credentials: 'include', |
|
||||
|
|
||||
/** |
|
||||
* The remote storage sends the project data as a body of the request. |
|
||||
* You can use this method to update the body before the store call in order to align |
|
||||
* with your API requirements. |
|
||||
*/ |
|
||||
onStore: data => data, |
|
||||
|
|
||||
/** |
|
||||
* The remote storage loads the project data directly from the request response. |
|
||||
* You can use this method to properly extract the project data from the response. |
|
||||
*/ |
|
||||
onLoad: result => result, |
|
||||
}, |
|
||||
}, |
|
||||
}; |
|
||||
@ -0,0 +1,176 @@ |
|||||
|
import Editor from '../../editor'; |
||||
|
|
||||
|
type AnyObject = Record<string, any>; |
||||
|
|
||||
|
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 interface RemoteStorageConfig { |
||||
|
/** |
||||
|
* Custom headers. |
||||
|
* @default {} |
||||
|
*/ |
||||
|
headers?: AnyObject; |
||||
|
|
||||
|
/** |
||||
|
* Endpoint URL where to store data project. |
||||
|
*/ |
||||
|
urlStore?: string; |
||||
|
|
||||
|
/** |
||||
|
* Endpoint URL where to load data project. |
||||
|
*/ |
||||
|
urlLoad?: string; |
||||
|
|
||||
|
/** |
||||
|
* Use JSON contentType. |
||||
|
* @default true |
||||
|
*/ |
||||
|
contentTypeJson?: boolean; |
||||
|
|
||||
|
/** |
||||
|
* Credentials option for the fetch API. |
||||
|
* @default 'include' |
||||
|
*/ |
||||
|
credentials?: RequestCredentials; |
||||
|
|
||||
|
/** |
||||
|
* Pass custom options to fetch API (remote storage) |
||||
|
* You can pass a simple object: { someOption: 'someValue' } |
||||
|
* or a function which returns and object to add: |
||||
|
* @example |
||||
|
* fetchOptions: currentOpts => { |
||||
|
* return currentOpts.method === 'POST' ? { method: 'PATCH' } : {}; |
||||
|
* }, |
||||
|
*/ |
||||
|
fetchOptions?: string | ((opts: AnyObject) => object); |
||||
|
|
||||
|
/** |
||||
|
* The remote storage sends the project data as a body of the request. |
||||
|
* You can use this method to update the body before the store call in order to align |
||||
|
* with your API requirements. |
||||
|
* @default data => data |
||||
|
*/ |
||||
|
onStore?: (data: AnyObject, editor: Editor) => AnyObject; |
||||
|
|
||||
|
/** |
||||
|
* The remote storage loads the project data directly from the request response. |
||||
|
* You can use this method to properly extract the project data from the response. |
||||
|
* @default data => data |
||||
|
*/ |
||||
|
onLoad?: (data: AnyObject, editor: Editor) => AnyObject; |
||||
|
} |
||||
|
|
||||
|
export interface StorageManagerConfig { |
||||
|
/** |
||||
|
* Prefix identifier that will be used inside storing and loading. |
||||
|
* @default 'gjs-' |
||||
|
* @deprecated |
||||
|
*/ |
||||
|
id?: string; |
||||
|
|
||||
|
/** |
||||
|
* Default storage type. |
||||
|
* Available by default: 'local' | 'remote' |
||||
|
* @default 'local' |
||||
|
*/ |
||||
|
type?: string; |
||||
|
|
||||
|
/** |
||||
|
* Enable/disable autosaving. |
||||
|
* @default true |
||||
|
*/ |
||||
|
autosave?: boolean; |
||||
|
|
||||
|
/** |
||||
|
* Enable/disable autoload of data on editor init. |
||||
|
* @default true |
||||
|
*/ |
||||
|
autoload?: boolean; |
||||
|
|
||||
|
/** |
||||
|
* If autosave enabled, indicates how many steps (general changes to structure) |
||||
|
* need to be done before save. Useful with remoteStorage to reduce remote calls |
||||
|
* @default 1 |
||||
|
*/ |
||||
|
stepsBeforeSave?: number; |
||||
|
|
||||
|
/** |
||||
|
* In case the `remote` storage is selected, and this options is enabled, the project |
||||
|
* will be stored on the `local` storage in case the remote one fails. |
||||
|
* The local data are cleared on every sucessful remote save. When the remote storage |
||||
|
* fails (eg. network issue) and the editor is reloaded, a dialog with the possibility to |
||||
|
* recovery previous data will be shown. |
||||
|
* @default false |
||||
|
* @example |
||||
|
* // Enable recovery with default confirm dialog
|
||||
|
* recovery: true, |
||||
|
* // Enable recovery with a custom dialog
|
||||
|
* recovery: (accept, cancel, editor) => { |
||||
|
* confirm('Recover data?') ? accept() : cancel(); |
||||
|
* }, |
||||
|
*/ |
||||
|
recovery?: boolean | ((accept: Function, cancel: Function, editor: Editor) => void); |
||||
|
|
||||
|
/** |
||||
|
* Callback triggered before the store call (can be asynchronous). |
||||
|
* This can be used to enrich the project data to store. |
||||
|
* @default data => data |
||||
|
*/ |
||||
|
onStore?: (data: any, editor: Editor) => any; |
||||
|
|
||||
|
/** |
||||
|
* Callback triggered after the load call (can be asynchronous). |
||||
|
* @default data => data |
||||
|
*/ |
||||
|
onLoad?: (data: any, editor: Editor) => any; |
||||
|
|
||||
|
/** |
||||
|
* Default storage options. |
||||
|
*/ |
||||
|
options?: { |
||||
|
local?: LocalStorageConfig; |
||||
|
remote?: RemoteStorageConfig; |
||||
|
[key: string]: any; |
||||
|
}; |
||||
|
} |
||||
|
|
||||
|
const config: StorageManagerConfig = { |
||||
|
id: 'gjs-', |
||||
|
type: 'local', |
||||
|
autosave: true, |
||||
|
autoload: true, |
||||
|
stepsBeforeSave: 1, |
||||
|
recovery: false, |
||||
|
onStore: data => data, |
||||
|
onLoad: data => data, |
||||
|
options: { |
||||
|
local: { |
||||
|
key: 'gjsProject', |
||||
|
checkLocal: true, |
||||
|
}, |
||||
|
remote: { |
||||
|
headers: {}, |
||||
|
urlStore: '', |
||||
|
urlLoad: '', |
||||
|
contentTypeJson: true, |
||||
|
fetchOptions: '', |
||||
|
credentials: 'include', |
||||
|
onStore: data => data, |
||||
|
onLoad: result => result, |
||||
|
}, |
||||
|
}, |
||||
|
}; |
||||
|
|
||||
|
export default config; |
||||
Loading…
Reference in new issue