51 lines
1.2 KiB
TypeScript
51 lines
1.2 KiB
TypeScript
import {Mod} from '../core.mod';
|
|
import {service} from '../../infrastructure/Dectorators/Components';
|
|
|
|
export interface IChromaStateService {
|
|
states: Array<any>;
|
|
addState(name: string, state: IState);
|
|
stateProvider: ng.ui.IStateProvider;
|
|
}
|
|
|
|
interface IState extends ng.ui.IState {
|
|
display: any;
|
|
icon: any;
|
|
subView: boolean;
|
|
}
|
|
|
|
@service(Mod, 'chromaState')
|
|
export class ChromaStateService implements ng.IServiceProvider {
|
|
|
|
public stateProvider: ng.ui.IStateProvider;
|
|
public states: Array<any> = new Array<any>();
|
|
|
|
public setStateProvider($stateProvider: ng.ui.IStateProvider) {
|
|
this.stateProvider = $stateProvider;
|
|
}
|
|
|
|
|
|
public $get(): IChromaStateService {
|
|
return {
|
|
stateProvider: this.stateProvider,
|
|
states: this.states,
|
|
addState: (name: string, state: IState) => {
|
|
let added = false;
|
|
this.states.forEach((s) => {
|
|
if (s.name === name) {
|
|
added = true;
|
|
}
|
|
});
|
|
if (!added) {
|
|
this.states.push({
|
|
name: name,
|
|
display: state.display,
|
|
icon: state.icon,
|
|
subView: state.subView
|
|
});
|
|
this.stateProvider.state(name, state);
|
|
}
|
|
}
|
|
};
|
|
}
|
|
}
|