aboutsummaryrefslogtreecommitdiffstats
path: root/sdnr/wt/odlux/framework/src/flux/store.ts
diff options
context:
space:
mode:
authorherbert <herbert.eiselt@highstreet-technologies.com>2019-12-14 01:05:47 +0100
committerHerbert Eiselt <herbert.eiselt@highstreet-technologies.com>2019-12-16 12:52:11 +0000
commite6d0d67fdbe3fc70c996c8df33bd65d3b151dfad (patch)
tree0d2da7d1da74c6ebca6b53039741617d35f65d96 /sdnr/wt/odlux/framework/src/flux/store.ts
parent6b98928b7b1b0ebc28d2ef286e8c932fca67c305 (diff)
update odlux and featureaggregator
v2 update odlux and featureaggregator bundles Issue-ID: SDNC-1008 Signed-off-by: herbert <herbert.eiselt@highstreet-technologies.com> Change-Id: I0018d7bfa3a0e6896c1b210b539a574af9808e22 Signed-off-by: herbert <herbert.eiselt@highstreet-technologies.com>
Diffstat (limited to 'sdnr/wt/odlux/framework/src/flux/store.ts')
-rw-r--r--sdnr/wt/odlux/framework/src/flux/store.ts98
1 files changed, 98 insertions, 0 deletions
diff --git a/sdnr/wt/odlux/framework/src/flux/store.ts b/sdnr/wt/odlux/framework/src/flux/store.ts
new file mode 100644
index 000000000..dd80ce7ba
--- /dev/null
+++ b/sdnr/wt/odlux/framework/src/flux/store.ts
@@ -0,0 +1,98 @@
+/**
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt odlux
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ */
+import { Event } from "../common/event"
+
+import { Action } from './action';
+import { IActionHandler } from './action';
+
+export interface Dispatch {
+ <TAction extends Action>(action: TAction): TAction;
+}
+
+export interface Enhancer<TStoreState> {
+ (store: Store<TStoreState>): Dispatch;
+}
+
+class InitialisationAction extends Action { };
+const initialisationAction = new InitialisationAction();
+
+export class Store<TStoreState> {
+
+ constructor(actionHandler: IActionHandler<TStoreState>, enhancer?: Enhancer<TStoreState>)
+ constructor(actionHandler: IActionHandler<TStoreState>, initialState: TStoreState, enhancer?: Enhancer<TStoreState>)
+ constructor(actionHandler: IActionHandler<TStoreState>, initialState?: TStoreState | Enhancer<TStoreState>, enhancer?: Enhancer<TStoreState>) {
+ if (typeof initialState === 'function') {
+ enhancer = initialState as Enhancer<TStoreState>;
+ initialState = undefined;
+ }
+
+ this._isDispatching = false;
+
+ this.changed = new Event<void>(); // sollten wir hier eventuell sogar den state mit übergeben ?
+
+ this._actionHandler = actionHandler;
+
+ this._state = initialState as TStoreState;
+ if (enhancer) this._dispatch = enhancer(this);
+
+ this._dispatch(initialisationAction);
+ }
+
+ public changed: Event<void>;
+
+ private _dispatch: Dispatch = <TAction extends Action>(payload: TAction): TAction => {
+ if (payload == null || !(payload instanceof Action)) {
+ throw new Error(
+ 'Actions must inherit from type Action. ' +
+ 'Use a custom middleware for async actions.'
+ );
+ }
+
+ if (this._isDispatching) {
+ throw new Error('ActionHandler may not dispatch actions.');
+ }
+
+ const oldState = this._state;
+ try {
+ this._isDispatching = true;
+ this._state = this._actionHandler(oldState, payload);
+ } finally {
+ this._isDispatching = false;
+ }
+
+ if (this._state !== oldState) {
+ this.changed.invoke();
+ }
+
+ return payload;
+ }
+
+ public get dispatch(): Dispatch {
+ return this._dispatch;
+ }
+
+ public get state() {
+ return this._state
+ }
+
+ private _state: TStoreState;
+ private _isDispatching: boolean;
+ private _actionHandler: IActionHandler<TStoreState>;
+
+}
+