Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x | /**
* Copyright (c) Siemens 2016 - 2025
* SPDX-License-Identifier: MIT
*/
import { inject, Injectable } from '@angular/core';
import {
createModalConfig,
ModalDependencyInjectionOptions,
ModalOptions,
SiModalService
} from '@siemens/element-ng/modal';
import { Observable } from 'rxjs';
import { SiColumnSelectionDialogComponent } from './si-column-selection-dialog.component';
import {
ColumnSelectionDialogResult,
SiColumnSelectionDialogConfig
} from './si-column-selection-dialog.types';
@Injectable({ providedIn: 'root' })
export class SiColumnSelectionDialogService {
private modalService = inject(SiModalService);
/**
* Opens a column selection dialog.
*
* Despite other dialogs,
* this dialog informs the consumer not ONLY with clicking `submit` or `cancel`,
* but also with changing the place or visibility of a dialog row
* thanks to the `instant` type of emitted event.
*
* {@label WITH_OBJECT}
*/
showColumnSelectionDialog(
dialogConfig: SiColumnSelectionDialogConfig,
diOptions?: ModalDependencyInjectionOptions
): Observable<ColumnSelectionDialogResult> {
return new Observable<ColumnSelectionDialogResult>(subscriber => {
const config: ModalOptions<any> = createModalConfig(dialogConfig);
Object.assign(config, diOptions);
config.class += ' modal-dialog-scrollable';
config.keyboard = true;
const modalRef = this.modalService.show<SiColumnSelectionDialogComponent>(
SiColumnSelectionDialogComponent,
config
);
const subscription = modalRef.hidden.subscribe(
(confirmationResult: ColumnSelectionDialogResult | undefined) => {
const keepModalOpen =
confirmationResult?.type === 'instant' || confirmationResult?.type === 'restoreDefault';
confirmationResult ??= { type: 'cancel', columns: modalRef.content.backupColumns };
subscriber.next(confirmationResult);
if (!keepModalOpen) {
subscription.unsubscribe();
subscriber.complete();
}
}
);
return () => {
Iif (!subscription.closed) {
subscription.unsubscribe();
modalRef.detach();
}
};
});
}
}
|