UNPKG

@spotinst/spinnaker-deck

Version:

Spinnaker-Deck service, forked with support to Spotinst

92 lines (80 loc) 5.01 kB
import { StateParams, StateService, UIRouter } from '@uirouter/core'; import { IQService, IRootScopeService, IScope } from 'angular'; import { ImageReader } from 'core/image/image.reader'; import { InstanceTypeService, InstanceWriter } from 'core/instance'; import { PageTitleService } from 'core/pageTitle'; import { ExecutionDetailsSectionService } from 'core/pipeline/details/executionDetailsSection.service'; import { CacheInitializerService } from '../cache/cacheInitializer.service'; import { ProviderServiceDelegate } from '../cloudProvider/providerService.delegate'; import { ClusterService } from '../cluster/cluster.service'; import { InsightFilterStateModel } from '../insight/insightFilterState.model'; import { OverrideRegistry } from '../overrideRegistry/override.registry'; import { ManualJudgmentService } from '../pipeline/config/stages/manualJudgment/manualJudgment.service'; import { ExecutionService } from '../pipeline/service/execution.service'; import { InfrastructureSearchService } from '../search/infrastructure/infrastructureSearch.service'; import { SecurityGroupReader } from '../securityGroup/securityGroupReader.service'; import { ServerGroupWriter } from '../serverGroup/serverGroupWriter.service'; import { StateEvents } from './state.events'; import IInjectorService = angular.auto.IInjectorService; export abstract class ReactInject { protected $injector: IInjectorService; public abstract initialize($injector: IInjectorService): void; } // prettier-ignore export class CoreReactInject extends ReactInject { // weird service because we wrap it private wrappedState: StateService; public get $state() { if (!this.wrappedState) { this.wrappedState = this.createStateService(); } return this.wrappedState; } // Services public get $q() { return this.$injector.get('$q') as IQService; } public get $rootScope() { return this.$injector.get('$rootScope') as IScope; } public get $stateParams() { return this.$injector.get('$stateParams') as StateParams; } public get $uiRouter() { return this.$injector.get('$uiRouter') as UIRouter; } public get cacheInitializer() { return this.$injector.get('cacheInitializer') as CacheInitializerService; } public get clusterService() { return this.$injector.get('clusterService') as ClusterService; } public get executionDetailsSectionService() { return this.$injector.get('executionDetailsSectionService') as ExecutionDetailsSectionService; } public get executionService() { return this.$injector.get('executionService') as ExecutionService; } public get imageReader() { return this.$injector.get('imageReader') as ImageReader; } public get infrastructureSearchService() { return this.$injector.get('infrastructureSearchService') as InfrastructureSearchService; } public get insightFilterStateModel() { return this.$injector.get('insightFilterStateModel') as InsightFilterStateModel; } public get instanceTypeService() { return this.$injector.get('instanceTypeService') as InstanceTypeService; } public get instanceWriter() { return this.$injector.get('instanceWriter') as InstanceWriter; } public get manualJudgmentService() { return this.$injector.get('manualJudgmentService') as ManualJudgmentService; } public get overrideRegistry() { return this.$injector.get('overrideRegistry') as OverrideRegistry; } public get pageTitleService() { return this.$injector.get('pageTitleService') as PageTitleService; } public get providerServiceDelegate() { return this.$injector.get('providerServiceDelegate') as ProviderServiceDelegate; } public get securityGroupReader() { return this.$injector.get('securityGroupReader') as SecurityGroupReader; } public get serverGroupWriter() { return this.$injector.get('serverGroupWriter') as ServerGroupWriter; } public get stateEvents() { return this.$injector.get('stateEvents') as StateEvents; } private createStateService(): StateService { const wrappedState = Object.create(this.$injector.get('$state')) as StateService; const $rootScope = this.$injector.get('$rootScope') as IRootScopeService; const $q = this.$injector.get('$q') as IQService; const originalGo = wrappedState.go; // Calls $state.go() inside the angularjs digest // I forget exactly what this does, but it fixes some angularjs-y digest cycle problem we had once wrappedState.go = function () { const args = arguments; const deferred = Object.create($q.defer()); const { promise } = deferred; promise.transition = null; promise.catch(() => {}); $rootScope.$applyAsync(() => { const originalPromise = originalGo.apply(this, args); promise.transition = originalPromise.transition; originalPromise.then(deferred.resolve, deferred.reject); }); return promise; }; return wrappedState; } public initialize($injector: IInjectorService) { this.$injector = $injector; } } export const ReactInjector: CoreReactInject = new CoreReactInject();