mirror of
https://github.com/wailsapp/wails.git
synced 2025-05-03 04:29:35 +08:00
82 lines
1.7 KiB
JavaScript
82 lines
1.7 KiB
JavaScript
/*
|
|
_ __ _ __
|
|
| | / /___ _(_) /____
|
|
| | /| / / __ `/ / / ___/
|
|
| |/ |/ / /_/ / / (__ )
|
|
|__/|__/\__,_/_/_/____/
|
|
The lightweight framework for web-like apps
|
|
(c) Lea Anthony 2019-present
|
|
*/
|
|
/* jshint esversion: 6 */
|
|
|
|
/**
|
|
* Creates a new sync store with the given name and optional default value
|
|
*
|
|
* @export
|
|
* @param {string} name
|
|
* @param {*} optionalDefault
|
|
*/
|
|
export function New(name, optionalDefault) {
|
|
|
|
var data;
|
|
|
|
// Check we are initialised
|
|
if( !window.wails) {
|
|
throw Error('Wails is not initialised');
|
|
}
|
|
|
|
// Store for the callbacks
|
|
let callbacks = [];
|
|
|
|
// Subscribe to updates by providing a callback
|
|
this.subscribe = (callback) => {
|
|
callbacks.push(callback);
|
|
};
|
|
|
|
// sets the store data to the provided `newdata` value
|
|
this.set = (newdata) => {
|
|
|
|
data = newdata;
|
|
|
|
// Emit a notification to back end
|
|
window.wails.Events.Emit('wails:sync:store:updatedbyfrontend:'+name, JSON.stringify(data));
|
|
|
|
// Notify callbacks
|
|
callbacks.forEach( function(callback) {
|
|
callback(data);
|
|
});
|
|
};
|
|
|
|
// update mutates the value in the store by calling the
|
|
// provided method with the current value. The value returned
|
|
// by the updater function will be set as the new store value
|
|
this.update = (updater) => {
|
|
var newValue = updater(data);
|
|
this.set(newValue);
|
|
};
|
|
|
|
// Setup event callback
|
|
window.wails.Events.On('wails:sync:store:updatedbybackend:'+name, function(result) {
|
|
|
|
// Parse data
|
|
result = JSON.parse(result);
|
|
|
|
// Todo: Potential preprocessing?
|
|
|
|
// Save data
|
|
data = result;
|
|
|
|
// Notify callbacks
|
|
callbacks.forEach( function(callback) {
|
|
callback(data);
|
|
});
|
|
|
|
});
|
|
|
|
// Set to the optional default if set
|
|
if( optionalDefault ) {
|
|
this.set(optionalDefault);
|
|
}
|
|
|
|
return this;
|
|
} |