UNPKG

kibana-with-account

Version:

kibana-with-account is develop based kibana project

95 lines (74 loc) 2.83 kB
define(function (require) { var _ = require('lodash'); var modules = require('ui/modules'); var urlParam = '_a'; function AppStateProvider(Private, $rootScope, getAppState) { var State = Private(require('ui/state_management/state')); var PersistedState = Private(require('ui/persisted_state/persisted_state')); var persistedStates; var eventUnsubscribers; _.class(AppState).inherits(State); function AppState(defaults) { persistedStates = {}; eventUnsubscribers = []; AppState.Super.call(this, urlParam, defaults); getAppState._set(this); } // if the url param is missing, write it back AppState.prototype._persistAcrossApps = false; AppState.prototype.destroy = function () { AppState.Super.prototype.destroy.call(this); getAppState._set(null); _.callEach(eventUnsubscribers); }; AppState.prototype.makeStateful = function (prop) { if (persistedStates[prop]) return persistedStates[prop]; var self = this; // set up the ui state persistedStates[prop] = new PersistedState(); // update the app state when the stateful instance changes var updateOnChange = function () { var replaceState = false; // TODO: debouncing logic self[prop] = persistedStates[prop].getChanges(); self.save(replaceState); }; var handlerOnChange = (method) => persistedStates[prop][method]('change', updateOnChange); handlerOnChange('on'); eventUnsubscribers.push(() => handlerOnChange('off')); // update the stateful object when the app state changes var persistOnChange = function (changes) { if (!changes) return; if (changes.indexOf(prop) !== -1) { persistedStates[prop].set(self[prop]); } }; var handlePersist = (method) => this[method]('fetch_with_changes', persistOnChange); handlePersist('on'); eventUnsubscribers.push(() => handlePersist('off')); // if the thing we're making stateful has an appState value, write to persisted state if (self[prop]) persistedStates[prop].setSilent(self[prop]); return persistedStates[prop]; }; return AppState; } modules.get('kibana/global_state') .factory('AppState', function (Private) { return Private(AppStateProvider); }) .service('getAppState', function ($location) { var currentAppState; function get() { return currentAppState; } // Checks to see if the appState might already exist, even if it hasn't been newed up get.previouslyStored = function () { var search = $location.search(); return search[urlParam] ? true : false; }; get._set = function (current) { currentAppState = current; }; return get; }); return AppStateProvider; });