import { ComponentPortal } from "@angular/cdk/portal"; import { ComponentRef } from "@angular/core"; import { Observable } from "rxjs"; import { DashboardComponent } from "../../components/dashboard/dashboard.component"; import { IWidget } from "../../components/widget/types"; import { PizzagnaComponent } from "../../pizzagna/components/pizzagna/pizzagna.component"; import { IPizzagna } from "../../types"; export interface IComponentPortalBundle { portal: ComponentPortal; attached?: (componentRef: ComponentRef) => void; } export interface IConfiguratorSource { dashboardComponent: DashboardComponent; widget?: IWidget; previewPizzagnaComponent?: () => PizzagnaComponent; } export interface IConfigurator extends IConfiguratorSource { trySubmit?: WidgetUpdateOperation; portalBundle?: IComponentPortalBundle; } export interface IWidgetSelector extends IConfigurator { widgetSelectionComponentType: Function; } export interface IWidgetEditor extends IConfigurator { formPizzagna: IPizzagna; paths: Record; } export type WidgetUpdateOperation = (widget: IWidget, source: IConfiguratorSource) => Observable; export type WidgetRemovalOperation = (widgetId: string, source: IConfiguratorSource) => Observable;