Browse Source

UI: Fixed dynamic dialog after migration to Angular 20

pull/15013/head
Vladyslav_Prykhodko 8 months ago
committed by Vladyslav Prykhodko
parent
commit
774886d64a
  1. 7
      ui-ngx/src/app/shared/components/dialog/dynamic/dynamic-dialog.module.ts
  2. 45
      ui-ngx/src/app/shared/components/dialog/dynamic/dynamic-dialog.ts
  3. 43
      ui-ngx/src/app/shared/components/dialog/dynamic/dynamic-overlay.ts

7
ui-ngx/src/app/shared/components/dialog/dynamic/dynamic-dialog.module.ts

@ -14,9 +14,9 @@
/// limitations under the License. /// limitations under the License.
/// ///
import { OverlayModule } from '@angular/cdk/overlay'; import { Overlay, OverlayContainer, OverlayModule } from '@angular/cdk/overlay';
import { NgModule } from '@angular/core'; import { NgModule } from '@angular/core';
import { DEFAULT_DIALOG_CONFIG, DialogConfig, DialogModule } from '@angular/cdk/dialog'; import { DEFAULT_DIALOG_CONFIG, Dialog, DialogConfig, DialogModule } from '@angular/cdk/dialog';
import { MatDialogModule } from '@angular/material/dialog'; import { MatDialogModule } from '@angular/material/dialog';
import { DynamicDialog, DynamicMatDialog } from './dynamic-dialog'; import { DynamicDialog, DynamicMatDialog } from './dynamic-dialog';
import { DynamicOverlay } from './dynamic-overlay'; import { DynamicOverlay } from './dynamic-overlay';
@ -24,8 +24,11 @@ import { DynamicOverlayContainer } from './dynamic-overlay-container';
export const DYNAMIC_MAT_DIALOG_PROVIDERS = [ export const DYNAMIC_MAT_DIALOG_PROVIDERS = [
DynamicOverlayContainer, DynamicOverlayContainer,
{ provide: OverlayContainer, useExisting: DynamicOverlayContainer },
DynamicOverlay, DynamicOverlay,
{ provide: Overlay, useExisting: DynamicOverlay },
DynamicDialog, DynamicDialog,
{ provide: Dialog, useExisting: DynamicDialog },
DynamicMatDialog, DynamicMatDialog,
{ {
provide: DEFAULT_DIALOG_CONFIG, provide: DEFAULT_DIALOG_CONFIG,

45
ui-ngx/src/app/shared/components/dialog/dynamic/dynamic-dialog.ts

@ -14,18 +14,11 @@
/// limitations under the License. /// limitations under the License.
/// ///
import { Location } from "@angular/common"; import { inject, Injectable, TemplateRef } from '@angular/core';
import { Inject, Injectable, Injector, Optional, SkipSelf, TemplateRef } from '@angular/core'; import { MatDialog, MatDialogConfig, MatDialogRef } from '@angular/material/dialog';
import { import { DynamicOverlay } from './dynamic-overlay';
MAT_DIALOG_DEFAULT_OPTIONS, import { ComponentType } from '@angular/cdk/overlay';
MAT_DIALOG_SCROLL_STRATEGY, import { Dialog } from '@angular/cdk/dialog';
MatDialog,
MatDialogConfig, MatDialogRef
} from '@angular/material/dialog';
import { DynamicOverlay } from "./dynamic-overlay";
import { DynamicOverlayContainer } from '@shared/components/dialog/dynamic/dynamic-overlay-container';
import { ComponentType, ScrollStrategy } from '@angular/cdk/overlay';
import { DEFAULT_DIALOG_CONFIG, Dialog, DialogConfig } from '@angular/cdk/dialog';
export interface DynamicMatDialogConfig<D> extends MatDialogConfig<D> { export interface DynamicMatDialogConfig<D> extends MatDialogConfig<D> {
containerElement?: HTMLElement; containerElement?: HTMLElement;
@ -34,25 +27,12 @@ export interface DynamicMatDialogConfig<D> extends MatDialogConfig<D> {
@Injectable() @Injectable()
export class DynamicMatDialog extends MatDialog { export class DynamicMatDialog extends MatDialog {
private _customOverlay: DynamicOverlay; private _customOverlay = inject(DynamicOverlay);
constructor( _overlay: DynamicOverlay, public override open<T, D = any, R = any>(component: ComponentType<T> | TemplateRef<T>, config?: DynamicMatDialogConfig<D>): MatDialogRef<T, R> {
_injector: Injector,
@Optional() location: Location,
@Inject( MAT_DIALOG_DEFAULT_OPTIONS ) _defaultOptions: MatDialogConfig,
@Inject( MAT_DIALOG_SCROLL_STRATEGY ) _scrollStrategy: ScrollStrategy,
@Optional() @SkipSelf() _parentDialog:DynamicMatDialog,
_overlayContainer: DynamicOverlayContainer) {
super( _overlay, _injector, location, _defaultOptions, _scrollStrategy, _parentDialog, _overlayContainer );
this._dialog = _injector.get(DynamicDialog);
this._customOverlay = _overlay;
}
public open<T, D = any, R = any>(component: ComponentType<T> | TemplateRef<T>, config?: DynamicMatDialogConfig<D>): MatDialogRef<T, R> {
if (config?.containerElement) { if (config?.containerElement) {
config.containerElement.style.transform = 'translateZ(0)'; config.containerElement.style.transform = 'translateZ(0)';
this._customOverlay.setContainerElement( config.containerElement ); this._customOverlay.setContainerElement(config.containerElement);
} }
const ref = super.open(component, config); const ref = super.open(component, config);
if (config?.containerElement) { if (config?.containerElement) {
@ -73,13 +53,4 @@ export class DynamicMatDialog extends MatDialog {
@Injectable() @Injectable()
export class DynamicDialog extends Dialog { export class DynamicDialog extends Dialog {
constructor( _overlay: DynamicOverlay,
_injector: Injector,
@Inject( DEFAULT_DIALOG_CONFIG ) _defaultOptions: DialogConfig,
@Inject( MAT_DIALOG_SCROLL_STRATEGY ) _scrollStrategy: ScrollStrategy,
@Optional() @SkipSelf() _parentDialog: DynamicDialog,
_overlayContainer: DynamicOverlayContainer) {
super( _overlay, _injector, _defaultOptions, _parentDialog, _overlayContainer, _scrollStrategy );
}
} }

43
ui-ngx/src/app/shared/components/dialog/dynamic/dynamic-overlay.ts

@ -14,49 +14,16 @@
/// limitations under the License. /// limitations under the License.
/// ///
import { import { Overlay } from '@angular/cdk/overlay';
Overlay, import { inject, Injectable } from '@angular/core';
ScrollStrategyOptions,
OverlayKeyboardDispatcher, OverlayOutsideClickDispatcher, OverlayPositionBuilder
} from '@angular/cdk/overlay';
import { ComponentFactoryResolver, Inject, Injectable, Injector, NgZone, DOCUMENT } from '@angular/core';
import { DynamicOverlayContainer } from './dynamic-overlay-container'; import { DynamicOverlayContainer } from './dynamic-overlay-container';
import { Location } from '@angular/common';
import { Directionality } from '@angular/cdk/bidi';
@Injectable() @Injectable()
export class DynamicOverlay extends Overlay { export class DynamicOverlay extends Overlay {
private _dynamicOverlayContainer: DynamicOverlayContainer; private _dynamicOverlayContainer = inject(DynamicOverlayContainer);
constructor( scrollStrategies: ScrollStrategyOptions, public setContainerElement(containerElement: HTMLElement): void {
_overlayContainer: DynamicOverlayContainer, this._dynamicOverlayContainer.setContainerElement(containerElement);
_componentFactoryResolver: ComponentFactoryResolver,
_positionBuilder: OverlayPositionBuilder,
_keyboardDispatcher: OverlayKeyboardDispatcher,
_injector: Injector,
_ngZone: NgZone,
@Inject(DOCUMENT) document: Document,
_directionality: Directionality,
_location: Location,
_outsideClickDispatcher: OverlayOutsideClickDispatcher) {
super( scrollStrategies,
_overlayContainer,
_componentFactoryResolver,
_positionBuilder,
_keyboardDispatcher,
_injector,
_ngZone,
document,
_directionality,
_location,
_outsideClickDispatcher);
this._dynamicOverlayContainer = _overlayContainer;
}
public setContainerElement(containerElement:HTMLElement ): void {
this._dynamicOverlayContainer.setContainerElement( containerElement );
} }
} }

Loading…
Cancel
Save