From 8c6bd89bafcd3f4123365f36f36f49d83f4352d8 Mon Sep 17 00:00:00 2001 From: Fawad Ali Date: Tue, 20 Apr 2021 19:22:50 +0200 Subject: [PATCH] feat(app): support for importing with LHCb loader --- .../app/sections/atlas/atlas.component.html | 2 +- .../src/app/sections/cms/cms.component.html | 2 +- .../src/app/sections/lhcb/lhcb.component.html | 2 +- .../src/app/sections/lhcb/lhcb.component.ts | 41 ++++++++++++------- .../io-options-dialog.component.html | 14 +++---- .../io-options-dialog.component.ts | 26 ++++++++---- .../io-options/io-options.component.ts | 4 +- .../components/ui-menu/ui-menu.component.html | 2 +- .../components/ui-menu/ui-menu.component.ts | 2 +- .../phoenix-ui-components/src/index.ts | 2 +- .../src/services/index.ts | 1 + 11 files changed, 61 insertions(+), 37 deletions(-) diff --git a/packages/phoenix-ng/projects/phoenix-app/src/app/sections/atlas/atlas.component.html b/packages/phoenix-ng/projects/phoenix-app/src/app/sections/atlas/atlas.component.html index 2b72a9997..e78112cf3 100644 --- a/packages/phoenix-ng/projects/phoenix-app/src/app/sections/atlas/atlas.component.html +++ b/packages/phoenix-ng/projects/phoenix-app/src/app/sections/atlas/atlas.component.html @@ -1,6 +1,6 @@ - + - + - + res.json()) + .then((eventData) => { + this.loadEventData(eventData); + }); this.eventDisplay.getLoadingManager().addLoadListenerWithCheck(() => { this.loaded = true; }); } - private loadEventData() { - this.http - .get('assets/files/lhcb/00191749_0005296728.json') - .subscribe((data: any) => { - this.loader.process(data); - const eventData = this.loader.getEventData(); - this.eventDisplay.buildEventDataFromJSON(eventData); - }); + handleLHCbJSONImport(files: FileList) { + const reader = new FileReader(); + reader.onload = () => { + this.loadEventData(JSON.parse(reader.result.toString())); + }; + reader.readAsText(files[0]); + } + + private loadEventData(data: any) { + this.loader.process(data); + const eventData = this.loader.getEventData(); + this.eventDisplay.buildEventDataFromJSON(eventData); } } diff --git a/packages/phoenix-ng/projects/phoenix-ui-components/src/components/ui-menu/io-options/io-options-dialog/io-options-dialog.component.html b/packages/phoenix-ng/projects/phoenix-ui-components/src/components/ui-menu/io-options/io-options-dialog/io-options-dialog.component.html index e3da8629b..d5b7de587 100644 --- a/packages/phoenix-ng/projects/phoenix-ui-components/src/components/ui-menu/io-options/io-options-dialog/io-options-dialog.component.html +++ b/packages/phoenix-ng/projects/phoenix-ui-components/src/components/ui-menu/io-options/io-options-dialog/io-options-dialog.component.html @@ -1,28 +1,28 @@

Import and export options

-
+
Import
Event data
diff --git a/packages/phoenix-ng/projects/phoenix-ui-components/src/components/ui-menu/io-options/io-options-dialog/io-options-dialog.component.ts b/packages/phoenix-ng/projects/phoenix-ui-components/src/components/ui-menu/io-options/io-options-dialog/io-options-dialog.component.ts index 68681c925..61e89fcd1 100644 --- a/packages/phoenix-ng/projects/phoenix-ui-components/src/components/ui-menu/io-options/io-options-dialog/io-options-dialog.component.ts +++ b/packages/phoenix-ng/projects/phoenix-ui-components/src/components/ui-menu/io-options/io-options-dialog/io-options-dialog.component.ts @@ -16,9 +16,9 @@ import { }) export class IOOptionsDialogComponent implements OnInit { @Input() - eventDataFormats: EventDataImportOption[] = [EventDataFormat.JSON]; + eventDataImportOptions: EventDataImportOption[] = [EventDataFormat.JSON]; - eventDataFormatsWithHandler: ImportOption[]; + eventDataOptionsWithHandler: ImportOption[]; private supportedEventDataFormats = [ new ImportOption( @@ -51,22 +51,34 @@ export class IOOptionsDialogComponent implements OnInit { ) {} ngOnInit() { - this.eventDataFormatsWithHandler = this.supportedEventDataFormats.filter( + this.eventDataOptionsWithHandler = this.supportedEventDataFormats.filter( (eventDataFormat) => - this.eventDataFormats.includes( + this.eventDataImportOptions.includes( eventDataFormat.format as EventDataFormat ) ); - this.eventDataFormats.forEach((eventDataImportOption) => { + this.eventDataImportOptions.forEach((eventDataImportOption) => { if (eventDataImportOption instanceof ImportOption) { - this.eventDataFormatsWithHandler.push(eventDataImportOption); + const importHandler = eventDataImportOption.handler.bind(this); + eventDataImportOption.handler = (files: FileList) => { + importHandler(files); + this.onClose(); + }; + this.eventDataOptionsWithHandler.push(eventDataImportOption); } }); } getSupportedEventDataFormats() { - return this.eventDataFormats + return this.eventDataImportOptions + .map((format) => { + if (format instanceof ImportOption) { + return format.format; + } + + return format; + }) .filter((format) => format !== 'ZIP') .join(', '); } diff --git a/packages/phoenix-ng/projects/phoenix-ui-components/src/components/ui-menu/io-options/io-options.component.ts b/packages/phoenix-ng/projects/phoenix-ui-components/src/components/ui-menu/io-options/io-options.component.ts index f3a856aab..17b035a8f 100644 --- a/packages/phoenix-ng/projects/phoenix-ui-components/src/components/ui-menu/io-options/io-options.component.ts +++ b/packages/phoenix-ng/projects/phoenix-ui-components/src/components/ui-menu/io-options/io-options.component.ts @@ -10,7 +10,7 @@ import { IOOptionsDialogComponent } from './io-options-dialog/io-options-dialog. }) export class IoOptionsComponent { @Input() - eventDataFormats: EventDataImportOption[] = []; + eventDataImportOptions: EventDataImportOption[] = []; constructor(private dialog: MatDialog) {} @@ -18,6 +18,6 @@ export class IoOptionsComponent { const dialogRef = this.dialog.open(IOOptionsDialogComponent, { panelClass: 'dialog', }); - dialogRef.componentInstance.eventDataFormats = this.eventDataFormats; + dialogRef.componentInstance.eventDataImportOptions = this.eventDataImportOptions; } } diff --git a/packages/phoenix-ng/projects/phoenix-ui-components/src/components/ui-menu/ui-menu.component.html b/packages/phoenix-ng/projects/phoenix-ui-components/src/components/ui-menu/ui-menu.component.html index bb7d0f543..6ecdafec7 100644 --- a/packages/phoenix-ng/projects/phoenix-ui-components/src/components/ui-menu/ui-menu.component.html +++ b/packages/phoenix-ng/projects/phoenix-ui-components/src/components/ui-menu/ui-menu.component.html @@ -15,7 +15,7 @@ - + diff --git a/packages/phoenix-ng/projects/phoenix-ui-components/src/components/ui-menu/ui-menu.component.ts b/packages/phoenix-ng/projects/phoenix-ui-components/src/components/ui-menu/ui-menu.component.ts index e976c6dca..6c877200d 100644 --- a/packages/phoenix-ng/projects/phoenix-ui-components/src/components/ui-menu/ui-menu.component.ts +++ b/packages/phoenix-ng/projects/phoenix-ui-components/src/components/ui-menu/ui-menu.component.ts @@ -8,7 +8,7 @@ import { EventDataImportOption } from '../../services/extras/event-data-import'; }) export class UiMenuComponent { @Input() - eventDataFormats: EventDataImportOption[] = []; + eventDataImportOptions: EventDataImportOption[] = []; hideUIMenu: boolean = false; } diff --git a/packages/phoenix-ng/projects/phoenix-ui-components/src/index.ts b/packages/phoenix-ng/projects/phoenix-ui-components/src/index.ts index f45a9cacc..5c1c28de7 100644 --- a/packages/phoenix-ng/projects/phoenix-ui-components/src/index.ts +++ b/packages/phoenix-ng/projects/phoenix-ui-components/src/index.ts @@ -1,6 +1,6 @@ export * from './components/nav/nav.component'; export * from './components/phoenix-menu/index'; export * from './components/ui-menu/index'; -export * from './services/index'; export * from './components/loader/loader.component'; export * from './components/phoenix-ui.module'; +export * from './services/index'; diff --git a/packages/phoenix-ng/projects/phoenix-ui-components/src/services/index.ts b/packages/phoenix-ng/projects/phoenix-ui-components/src/services/index.ts index 4b9e548c0..c9a63a395 100644 --- a/packages/phoenix-ng/projects/phoenix-ui-components/src/services/index.ts +++ b/packages/phoenix-ng/projects/phoenix-ui-components/src/services/index.ts @@ -1 +1,2 @@ export * from './event-display.service'; +export * from './extras/event-data-import';