import type { StateService } from '@uirouter/core'; import type { IScope } from 'angular'; import type { IModalService } from 'angular-ui-bootstrap'; import React from 'react'; import { Button } from 'react-bootstrap'; import type { Application } from '../application'; import type { CacheInitializerService } from '../cache'; import type { OverrideRegistry } from '../overrideRegistry'; import { Overridable } from '../overrideRegistry'; import { ConfigureProjectModal } from '../projects'; import { ModalInjector, ReactInjector } from '../reactShims'; export interface IInsightMenuProps { createApp?: boolean; createProject?: boolean; refreshCaches?: boolean; } export interface IInsightMenuState { refreshingCache: boolean; } @Overridable('createInsightMenu') export class InsightMenu extends React.Component { public static defaultProps: IInsightMenuProps = { createApp: true, createProject: true, refreshCaches: true }; private $rootScope: IScope; private $uibModal: IModalService; private $state: StateService; private overrideRegistry: OverrideRegistry; private cacheInitializer: CacheInitializerService; constructor(props: IInsightMenuProps) { super(props); this.state = {} as IInsightMenuState; this.$state = ReactInjector.$state; this.$uibModal = ModalInjector.modalService; this.$rootScope = ReactInjector.$rootScope; this.overrideRegistry = ReactInjector.overrideRegistry; this.cacheInitializer = ReactInjector.cacheInitializer; } private createProject = () => ConfigureProjectModal.show() .then((result) => { this.$state.go('home.project.dashboard', { project: result.name }); }) .catch(() => {}); private createApplication = () => { this.$uibModal .open({ scope: this.$rootScope.$new(), templateUrl: this.overrideRegistry.getTemplate( 'createApplicationModal', require('../application/modal/newapplication.html'), ), resolve: { name: () => '', }, controller: this.overrideRegistry.getController('CreateApplicationModalCtrl'), controllerAs: 'newAppModal', }) .result.then(this.routeToApplication) .catch(() => {}); }; private routeToApplication = (app: Application) => { this.$state.go('home.applications.application', { application: app.name }); }; private refreshAllCaches = () => { if (this.state.refreshingCache) { return; } this.setState({ refreshingCache: true }); this.cacheInitializer.refreshCaches().then(() => { this.setState({ refreshingCache: false }); }); }; public render() { const { createApp, createProject, refreshCaches } = this.props; const refreshMarkup = this.state.refreshingCache ? ( Refreshing... ) : ( Refresh all caches ); return (
{createProject && ( )} {createApp && ( )} {refreshCaches && ( )}
); } }