@arcgis/map-components
Version:
ArcGIS Map Components
58 lines (57 loc) • 2.88 kB
TypeScript
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 {};