UNPKG

@arcgis/map-components

Version:
58 lines (57 loc) 2.88 kB
import { AccessorController } from '@arcgis/lumina/controllers/accessor'; import { Nil } from '@arcgis/components-utils'; import { default as Accessor } from '@arcgis/core/core/Accessor'; import { default as Evented } from '@arcgis/core/core/Evented'; import { default as ArcgisMap } from '@arcgis/core/Map'; import { default as MapView } from '@arcgis/core/views/MapView'; import { default as SceneView } from '@arcgis/core/views/SceneView'; import { default as LinkChartView } from '@arcgis/core/views/LinkChartView'; import { ViewControllerUses } from './useView'; import { LitElement, EventEmitter } from '@arcgis/lumina'; type ViewModelControllerRequires<Props, ViewModel extends ViewModelInstance> = LitElement & Pick<ViewModel, keyof Props & keyof ViewModel> & ViewModelControllerUses<ViewModel>; type ViewModelInstance = Accessor & Partial<Evented> & { state?: string; view?: LinkChartView | MapView | Nil | SceneView; map?: ArcgisMap | Nil; }; export interface ViewModelControllerUses<ViewModel extends ViewModelInstance> extends ViewControllerUses<NonNullable<ViewModelInstance["view"]>> { state?: ViewModel["state"]; icon?: string; label?: string; arcgisPropertyChange: EventEmitter<{ name: string; }> | undefined; autoDestroyDisabled: boolean; destroy: () => Promise<void>; } /** * A controller for a mapping component that: * - loads the viewModel * - initializes the viewModel with the component's properties * - does two-way binding between view model and component properties * - re-emits the viewModel's events on the component * - type-checks everything ✨ * * Documentation: * https://qawebgis.esri.com/components/lumina/transition-from-widgets#useviewmodel-controller * * TEST: add test cases for this controller */ export declare const makeViewModelController: <Props, ViewModel extends ViewModelInstance, OmitProps extends string = never>(loadViewModel: ((props?: Omit<Props, "view">) => ViewModel) | (new (props?: Omit<Props, "view">) => ViewModel), _options?: { /** * Don't expose the following ViewModels's properties on the component. * You can also bind the property to \@State rather than \@Prop if you * wish to use it internally only: * * @example * \@State() timeZone = this.viewModel.timeZone; */ omitProps: OmitProps[]; }) => (component: ViewModelControllerRequires<Omit<Props, OmitProps>, ViewModel>) => ViewModel; export declare class ViewModelController<Props, ViewModel extends ViewModelInstance> extends AccessorController<Props, ViewModel, ViewModelControllerUses<ViewModel>> { #private; constructor(component: ViewModelControllerRequires<Props, ViewModel>, loadViewModel: ((props?: Omit<Props, "view">) => ViewModel) | (new (props?: Omit<Props, "view">) => ViewModel)); hostLoad(): void; hostDestroy(): void; } export {};