ing
This commit is contained in:
		
							parent
							
								
									a8422cad14
								
							
						
					
					
						commit
						d98827fbba
					
				@ -35,9 +35,9 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
<p-dialog header="Export as CSV" [(visible)]="displayExportCSV" [modal]="true" [responsive]="true" [width]="350"
 | 
					<p-dialog header="Export as CSV" [(visible)]="displayExportCSV" [modal]="true" [responsive]="true" [width]="350"
 | 
				
			||||||
  [minWidth]="200" [minY]="70" [closable]="false">
 | 
					  [minWidth]="200" [minY]="70" [closable]="false">
 | 
				
			||||||
  <app-menu-export-csv></app-menu-export-csv>
 | 
					  <app-menu-export-csv #exportCSV></app-menu-export-csv>
 | 
				
			||||||
  <p-footer>
 | 
					  <p-footer>
 | 
				
			||||||
    <button type="button" pButton icon="pi pi-check" (click)="displayExportCSV=false" label="Yes"></button>
 | 
					    <button type="button" pButton icon="pi pi-check" (click)="exportCSV.export(); displayExportCSV=false;" label="Yes"></button>
 | 
				
			||||||
    <button type="button" pButton icon="pi pi-close" (click)="displayExportCSV=false" label="No" class="ui-button-secondary"></button>
 | 
					    <button type="button" pButton icon="pi pi-close" (click)="displayExportCSV=false" label="No" class="ui-button-secondary"></button>
 | 
				
			||||||
  </p-footer>
 | 
					  </p-footer>
 | 
				
			||||||
</p-dialog>
 | 
					</p-dialog>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,15 +1,51 @@
 | 
				
			|||||||
import { Component, } from '@angular/core';
 | 
					import { Component, OnInit, AfterContentInit, OnDestroy, } from '@angular/core';
 | 
				
			||||||
 | 
					import { Store, select } from '@ngrx/store';
 | 
				
			||||||
 | 
					import { take } from 'rxjs/operators';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import * as AppStore from '../../store';
 | 
				
			||||||
 | 
					import { TargetDisplayType } from '../../core/type';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const { saveSvgAsPng, svgAsDataUri } = require('save-svg-as-png');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@Component({
 | 
					@Component({
 | 
				
			||||||
  selector: 'app-menu-export-csv',
 | 
					  selector: 'app-menu-export-csv',
 | 
				
			||||||
  templateUrl: './export-csv.component.html',
 | 
					  templateUrl: './export-csv.component.html',
 | 
				
			||||||
  styleUrls: ['./export-csv.component.scss'],
 | 
					  styleUrls: ['./export-csv.component.scss'],
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
export class ExportCSVComponent {
 | 
					export class ExportCSVComponent implements OnInit, AfterContentInit, OnDestroy {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  constructor(
 | 
					  constructor(
 | 
				
			||||||
 | 
					    private store: Store<any>,
 | 
				
			||||||
  ) {
 | 
					  ) {
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  ngOnInit(): void {
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  ngAfterContentInit(): void {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  ngOnDestroy(): void {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  export() {
 | 
				
			||||||
 | 
					    this.store.pipe(
 | 
				
			||||||
 | 
					      take(1),
 | 
				
			||||||
 | 
					      select((state) => {
 | 
				
			||||||
 | 
					        const targetDisplayType = AppStore.TargetSelector.TargetSelector.selectTargetDisplayType(state);
 | 
				
			||||||
 | 
					        const targetDisplayElementRef = AppStore.TargetSelector.TargetSelector.selectTargetDisplayElementRef(state);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (TargetDisplayType.MAP !== targetDisplayType) {
 | 
				
			||||||
 | 
					          return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // svgAsDataUri(targetDisplayElementRef.nativeElement, {}, function (uri) {
 | 
				
			||||||
 | 
					        //   console.log(`uri: ${uri}`);
 | 
				
			||||||
 | 
					        // });
 | 
				
			||||||
 | 
					        saveSvgAsPng(targetDisplayElementRef.nativeElement, 'diagram.png', { backgroundColor: '#ffffff' });
 | 
				
			||||||
 | 
					      }),
 | 
				
			||||||
 | 
					    ).subscribe();
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -106,6 +106,7 @@ export class MapComponent implements OnInit, AfterContentInit, OnDestroy {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  @ViewChild('displayTarget') set displayTarget(content: ElementRef) {
 | 
					  @ViewChild('displayTarget') set displayTarget(content: ElementRef) {
 | 
				
			||||||
    this.displayTargetRef = content;
 | 
					    this.displayTargetRef = content;
 | 
				
			||||||
 | 
					    this.store.dispatch(new TargetStore.ChangeTargetDisplayElementRef({ targetDisplayElementRef: content }));
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  private displayTargetRef: ElementRef;
 | 
					  private displayTargetRef: ElementRef;
 | 
				
			||||||
@ -260,6 +261,8 @@ export class MapComponent implements OnInit, AfterContentInit, OnDestroy {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ngOnDestroy(): void {
 | 
					  ngOnDestroy(): void {
 | 
				
			||||||
 | 
					    this.store.dispatch(new TargetStore.ChangeTargetDisplayElementRef({ targetDisplayElementRef: null }));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (null !== this.targetSubscription) {
 | 
					    if (null !== this.targetSubscription) {
 | 
				
			||||||
      this.targetSubscription.unsubscribe();
 | 
					      this.targetSubscription.unsubscribe();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -1,3 +1,4 @@
 | 
				
			|||||||
 | 
					import { ElementRef } from '@angular/core';
 | 
				
			||||||
import { Action } from '@ngrx/store';
 | 
					import { Action } from '@ngrx/store';
 | 
				
			||||||
import { Host, Port, Service } from '@overflow/model/discovery';
 | 
					import { Host, Port, Service } from '@overflow/model/discovery';
 | 
				
			||||||
import { TargetDisplayType } from '../../../core/type';
 | 
					import { TargetDisplayType } from '../../../core/type';
 | 
				
			||||||
@ -10,6 +11,7 @@ export enum ActionType {
 | 
				
			|||||||
  ChangeTargetDisplayType = '[app.target] ChangeTargetDisplayType',
 | 
					  ChangeTargetDisplayType = '[app.target] ChangeTargetDisplayType',
 | 
				
			||||||
  RefreshTargetDisplay = '[app.target] RefreshTargetDisplay',
 | 
					  RefreshTargetDisplay = '[app.target] RefreshTargetDisplay',
 | 
				
			||||||
  ChangeSelectedTarget = '[app.target] ChangeSelectedTarget',
 | 
					  ChangeSelectedTarget = '[app.target] ChangeSelectedTarget',
 | 
				
			||||||
 | 
					  ChangeTargetDisplayElementRef = '[app.target] ChangeTargetDisplayElementRef',
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export class SetHosts implements Action {
 | 
					export class SetHosts implements Action {
 | 
				
			||||||
@ -48,6 +50,12 @@ export class ChangeSelectedTarget implements Action {
 | 
				
			|||||||
  constructor(public payload: { group: string, target: Host | Port | Service }) { }
 | 
					  constructor(public payload: { group: string, target: Host | Port | Service }) { }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export class ChangeTargetDisplayElementRef implements Action {
 | 
				
			||||||
 | 
					  readonly type = ActionType.ChangeTargetDisplayElementRef;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  constructor(public payload: { targetDisplayElementRef: ElementRef }) { }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export type Actions =
 | 
					export type Actions =
 | 
				
			||||||
  | SetHosts
 | 
					  | SetHosts
 | 
				
			||||||
  | SetPorts
 | 
					  | SetPorts
 | 
				
			||||||
@ -55,5 +63,6 @@ export type Actions =
 | 
				
			|||||||
  | ChangeTargetDisplayType
 | 
					  | ChangeTargetDisplayType
 | 
				
			||||||
  | RefreshTargetDisplay
 | 
					  | RefreshTargetDisplay
 | 
				
			||||||
  | ChangeSelectedTarget
 | 
					  | ChangeSelectedTarget
 | 
				
			||||||
 | 
					  | ChangeTargetDisplayElementRef
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ;
 | 
					  ;
 | 
				
			||||||
 | 
				
			|||||||
@ -52,6 +52,13 @@ export function reducer(state: State = initialState, action: Actions): State {
 | 
				
			|||||||
      };
 | 
					      };
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    case ActionType.ChangeTargetDisplayElementRef: {
 | 
				
			||||||
 | 
					      return {
 | 
				
			||||||
 | 
					        ...state,
 | 
				
			||||||
 | 
					        targetDisplayElementRef: action.payload.targetDisplayElementRef,
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    default: {
 | 
					    default: {
 | 
				
			||||||
      return state;
 | 
					      return state;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -1,3 +1,4 @@
 | 
				
			|||||||
 | 
					import { ElementRef } from '@angular/core';
 | 
				
			||||||
import { Selector, createSelector } from '@ngrx/store';
 | 
					import { Selector, createSelector } from '@ngrx/store';
 | 
				
			||||||
import { Host, Port, Service } from '@overflow/model/discovery';
 | 
					import { Host, Port, Service } from '@overflow/model/discovery';
 | 
				
			||||||
import { TargetDisplayType } from '../../../core/type';
 | 
					import { TargetDisplayType } from '../../../core/type';
 | 
				
			||||||
@ -13,6 +14,7 @@ export interface State {
 | 
				
			|||||||
    group: string;
 | 
					    group: string;
 | 
				
			||||||
    target: Host | Port | Service;
 | 
					    target: Host | Port | Service;
 | 
				
			||||||
  } | null;
 | 
					  } | null;
 | 
				
			||||||
 | 
					  targetDisplayElementRef: ElementRef;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const initialState: State = {
 | 
					export const initialState: State = {
 | 
				
			||||||
@ -23,6 +25,7 @@ export const initialState: State = {
 | 
				
			|||||||
  targetDisplayType: TargetDisplayType.NONE,
 | 
					  targetDisplayType: TargetDisplayType.NONE,
 | 
				
			||||||
  refreshTargetDisplay: false,
 | 
					  refreshTargetDisplay: false,
 | 
				
			||||||
  selectedTarget: null,
 | 
					  selectedTarget: null,
 | 
				
			||||||
 | 
					  targetDisplayElementRef: null,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export function getSelectors<S>(selector: Selector<any, State>) {
 | 
					export function getSelectors<S>(selector: Selector<any, State>) {
 | 
				
			||||||
@ -33,5 +36,6 @@ export function getSelectors<S>(selector: Selector<any, State>) {
 | 
				
			|||||||
    selectTargetDisplayType: createSelector(selector, (state: State) => state.targetDisplayType),
 | 
					    selectTargetDisplayType: createSelector(selector, (state: State) => state.targetDisplayType),
 | 
				
			||||||
    selectRefreshTargetDisplay: createSelector(selector, (state: State) => state.refreshTargetDisplay),
 | 
					    selectRefreshTargetDisplay: createSelector(selector, (state: State) => state.refreshTargetDisplay),
 | 
				
			||||||
    selectSelectedTarget: createSelector(selector, (state: State) => state.selectedTarget),
 | 
					    selectSelectedTarget: createSelector(selector, (state: State) => state.selectedTarget),
 | 
				
			||||||
 | 
					    selectTargetDisplayElementRef: createSelector(selector, (state: State) => state.targetDisplayElementRef),
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user