@arcgis/core 5.2.0-next.21 → 5.2.0-next.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Graphic.d.ts +1 -0
- package/assets/esri/core/workers/RemoteClient.js +1 -1
- package/assets/esri/core/workers/chunks/{eccbddaec4be44c86f79.js → 1040bce57ea63a6dbca4.js} +2 -2
- package/assets/esri/core/workers/chunks/1a7c0a1dc6ecc93ea03a.js +1 -0
- package/assets/esri/core/workers/chunks/292498a9c7d462d215c6.js +1 -0
- package/assets/esri/core/workers/chunks/2d6d01913096f7cb5ff8.js +1 -0
- package/assets/esri/core/workers/chunks/30298f84bd414f9dea64.js +1 -0
- package/assets/esri/core/workers/chunks/353c67da4b25c29360db.js +2 -0
- package/assets/esri/core/workers/chunks/3b4fc67f6cb7393fbd97.js +1 -0
- package/assets/esri/core/workers/chunks/47948c72bc01bd173c20.js +2 -0
- package/assets/esri/core/workers/chunks/{f0519b06987471456b69.js → 502464c4eab7667f6566.js} +1 -1
- package/assets/esri/core/workers/chunks/{d7acbc2ddff4cee8a465.js → 5ee887fc6e1e0e70e02f.js} +1 -1
- package/assets/esri/core/workers/chunks/6c0c77de1934f35dc45f.js +1 -0
- package/assets/esri/core/workers/chunks/{f7f820483e45c05ab9e4.js → 75df436e6e9773bdcfc2.js} +1 -1
- package/assets/esri/core/workers/chunks/780519b60aa674a61a74.js +1 -0
- package/assets/esri/core/workers/chunks/7dbaa089c7472825b80c.js +1 -0
- package/assets/esri/core/workers/chunks/7dec8c453fdee1968d12.js +1 -0
- package/assets/esri/core/workers/chunks/{a2247f4c3116efb16c4f.js → 7e23de8d9b2d938808f6.js} +1 -1
- package/assets/esri/core/workers/chunks/7e4093f42795ba2f8cfd.js +1 -0
- package/assets/esri/core/workers/chunks/{6649acaceab00ad30e7f.js → 8ba3e0462a9bdaae5f40.js} +1 -1
- package/assets/esri/core/workers/chunks/928b18e13e015330d44b.js +1 -0
- package/assets/esri/core/workers/chunks/9434c76ad39c936dba90.js +1 -0
- package/assets/esri/core/workers/chunks/{909e67dee8c30e391d69.js → a8310f55de4749f973d0.js} +1 -1
- package/assets/esri/core/workers/chunks/{ac16016964be3b684e98.js → aded4e704e09a28edc8f.js} +1 -1
- package/assets/esri/core/workers/chunks/{7175f0c6a6e56b685d20.js → b419fd36337e76e2d4a3.js} +6 -6
- package/assets/esri/core/workers/chunks/{05d597dd117766beadd8.js → b91a15522692781560b4.js} +1 -1
- package/assets/esri/core/workers/chunks/c86d388d216adbb15a05.js +1 -0
- package/assets/esri/core/workers/chunks/{f1ff33584680d8718400.js → c9ce408675dae6a0edd1.js} +1 -1
- package/assets/esri/core/workers/chunks/{0b522e05668bef729b1b.js → ceb5bd9f2afaa2ea0808.js} +1 -1
- package/assets/esri/core/workers/chunks/d07068c44d560e4ce02e.js +1 -0
- package/assets/esri/core/workers/chunks/{da47fdffb5969694a2ae.js → d41eed41916ed0422059.js} +1 -1
- package/assets/esri/core/workers/chunks/{19493c9c7e1d2ac0f80f.js → d4e0346209fabc58f929.js} +1 -1
- package/assets/esri/core/workers/chunks/{b375abfb2a2d9c63e20a.js → db90fb8ac96579259566.js} +1 -1
- package/assets/esri/core/workers/chunks/{44b30bce8e9a75b9e1b3.js → dd0acd0f8b96839b4f24.js} +2 -2
- package/assets/esri/core/workers/chunks/{5809e70a8e57e9b05959.js → dd795c95cdc3812b5b49.js} +1 -1
- package/assets/esri/core/workers/chunks/f7344d855f1092383abe.js +1 -0
- package/assets/esri/core/workers/chunks/{2dbd88566abac030e965.js → f859c53432f258af77e3.js} +2 -2
- package/assets/esri/core/workers/chunks/{ecbf84a1f42e6188faab.js → fd629872b5c07853f695.js} +1 -1
- package/assets/esri/libs/parquet/pkg/bundle_bg.wasm +0 -0
- package/assets/esri/themes/base/widgets/_BatchAttributeForm.scss +5 -1
- package/assets/esri/themes/dark/main.css +1 -1
- package/assets/esri/themes/light/main.css +1 -1
- package/assets/esri/themes/light/view.css +1 -1
- package/chunks/GaussianSplat.glsl.js +4 -4
- package/chunks/GaussianSplatShadow.glsl.js +1 -1
- package/config.d.ts +9 -2
- package/config.js +1 -1
- package/core/date.js +1 -1
- package/form/FormTemplate.d.ts +15 -20
- package/form/elements/AttachmentElement.d.ts +38 -11
- package/form/elements/Element.d.ts +9 -6
- package/form/elements/FieldElement.d.ts +0 -1
- package/form/elements/GroupElement.d.ts +4 -6
- package/form/elements/RelationshipElement.d.ts +8 -8
- package/form/elements/inputs/attachments/AttachmentInput.d.ts +34 -18
- package/form/elements/inputs/attachments/AudioInput.d.ts +4 -3
- package/form/elements/inputs/attachments/DocumentInput.d.ts +2 -6
- package/form/elements/inputs/attachments/ImageInput.d.ts +4 -3
- package/form/elements/inputs/attachments/Input.d.ts +6 -3
- package/form/elements/inputs/attachments/SignatureInput.d.ts +3 -3
- package/form/elements/inputs/attachments/VideoInput.d.ts +4 -3
- package/form/elements.d.ts +6 -12
- package/form/types.d.ts +0 -4
- package/kernel.js +1 -1
- package/layers/AnnotationFeatureLayer.d.ts +2 -1
- package/layers/DimensionFeatureLayer.d.ts +2 -1
- package/layers/OrientedImageryLayer.d.ts +20 -2
- package/layers/OrientedImageryLayer.js +1 -1
- package/layers/ParquetLayer.js +1 -1
- package/layers/graphics/sources/ParquetSource.js +1 -1
- package/layers/graphics/sources/geojson/GeoJSONSourceWorker.js +1 -1
- package/layers/graphics/sources/geojson/geojson.js +1 -1
- package/layers/graphics/sources/parquet/FileProvider.js +1 -1
- package/layers/graphics/sources/parquet/PortalParquetLayerFileProvider.js +1 -1
- package/layers/graphics/sources/parquet/fileProviderChangedError.js +2 -0
- package/layers/graphics/sources/support/ParquetSourceWorker.js +1 -1
- package/layers/mixins/EditBusLayer.js +1 -1
- package/layers/orientedImagery/core/utils.js +1 -1
- package/layers/orientedImagery/types.d.ts +4 -1
- package/layers/support/RasterBandInfo.js +1 -1
- package/layers/types.d.ts +1 -0
- package/package.json +3 -3
- package/rest/support/AttachmentQuery.d.ts +13 -1
- package/rest/support/AttachmentQuery.js +1 -1
- package/rest/support/OutDistance.d.ts +5 -1
- package/rest/support/PrintParameters.d.ts +2 -1
- package/rest/support/Query.d.ts +2 -0
- package/support/basemapUtils.js +1 -1
- package/support/revision.js +1 -1
- package/symbols/SimpleMarkerSymbol.d.ts +2 -2
- package/views/2d/engine/AFeatureContainer.js +1 -1
- package/views/2d/engine/webgl/AttributeStoreView.js +1 -1
- package/views/2d/engine/webgl/mesh/templates/shapingUtils.js +1 -1
- package/views/2d/engine/webgl/shaderGraph/graph/ShaderGraphContext.js +1 -1
- package/views/2d/engine/webgl/shaderGraph/graph/glsl.js +1 -1
- package/views/2d/engine/webgl/shaderGraph/techniques/animated/AnimatedMarkerMeshWriter.js +1 -1
- package/views/2d/engine/webgl/shaderGraph/techniques/pieChart/PieChartMeshWriter.js +1 -1
- package/views/2d/engine/webgl/shaderGraph/techniques/pieChart/PieChartShader.js +1 -1
- package/views/2d/engine/webgl/shaderGraph/techniques/pieChart/PieChartTechnique.js +1 -1
- package/views/2d/engine/webgl/shaderGraph/techniques/text/TextShader.js +1 -1
- package/views/2d/engine/webgl/shaders/sources/shaderRepository.js +1 -1
- package/views/2d/layers/features/FeatureContainer.js +1 -1
- package/views/2d/layers/features/schema/processor/symbols/SymbolSchema.js +1 -1
- package/views/2d/layers/features/sources/strategies/ParquetTileLoadStrategy.js +1 -1
- package/views/2d/layers/support/annodime/DimensionInfo.js +1 -1
- package/views/2d/layers/support/annodime/cimAnnotations.js +1 -1
- package/views/3d/analysis/LineOfSight/LineOfSightReshapeTool3D.js +1 -1
- package/views/3d/analysis/LineOfSight/LineOfSightTool2.js +1 -1
- package/views/3d/analysis/ShadowCastAnalysisView3D.js +1 -1
- package/views/3d/analysis/Viewshed/ViewshedComputedData.js +1 -1
- package/views/3d/analysis/Viewshed/ViewshedSnappingController.js +1 -1
- package/views/3d/analysis/Viewshed/ViewshedSubTool.js +1 -1
- package/views/3d/interactive/editingTools/reshape/ReshapeOperation.js +1 -1
- package/views/3d/interactive/editingTools/reshape/ReshapeTool3D.js +1 -1
- package/views/3d/layers/GaussianSplatLayerView3D.js +1 -1
- package/views/3d/layers/GaussianSplatLayerViewPerformanceInfo.js +1 -1
- package/views/3d/layers/graphics/tessellationUtils.js +1 -1
- package/views/3d/state/controllers/PinchAndPanControllerGlobal.js +1 -1
- package/views/3d/state/controllers/PinchAndPanControllerLocal.js +1 -1
- package/views/3d/state/utils/navigationUtils.js +1 -1
- package/views/3d/support/gaussianSplatting/GaussianSplatAtlasPages.js +1 -1
- package/views/3d/support/gaussianSplatting/GaussianSplatDataStore.js +1 -1
- package/views/3d/support/gaussianSplatting/GaussianSplatHeaderTexture.js +2 -0
- package/views/3d/support/gaussianSplatting/GaussianSplatTextureAtlas.js +1 -1
- package/views/3d/webgl-engine/core/shaderLibrary/output/Emissions.glsl.js +4 -4
- package/views/3d/webgl-engine/core/shaderLibrary/util/GaussianSplatTextureFetch.glsl.js +13 -12
- package/views/3d/webgl-engine/effects/glow/Glow.js +1 -1
- package/views/3d/webgl-engine/lib/GaussianSplatRenderNode.js +1 -1
- package/views/3d/webgl-engine/lib/GaussianSplatShadowRenderNode.js +1 -1
- package/views/3d/webgl-engine/lib/Renderer.js +1 -1
- package/views/3d/webgl-engine/lib/ShadowAccumulator.js +1 -1
- package/views/3d/webgl-engine/shaders/OutputColorHighlightOLID.glsl.js +1 -1
- package/views/PopupView.d.ts +3 -0
- package/views/View2D.d.ts +2 -2
- package/views/layers/AnnotationFeatureLayerView.d.ts +9 -1
- package/views/layers/DimensionFeatureLayerView.d.ts +9 -1
- package/views/layers/FeatureLikeLayerView.js +1 -1
- package/widgets/BasemapGallery.js +1 -1
- package/widgets/BatchAttributeForm/attachmentUtils.js +1 -1
- package/widgets/BatchAttributeForm/batchAttributeFormUtils.js +1 -1
- package/widgets/BatchAttributeForm/css.js +1 -1
- package/widgets/BatchAttributeForm/inputs/AttachmentElementInput.js +1 -1
- package/widgets/BatchAttributeForm/templates/support/createBatchFormTemplate.js +1 -1
- package/widgets/BatchAttributeForm/types.d.ts +0 -7
- package/widgets/BatchAttributeForm.d.ts +7 -9
- package/widgets/BatchAttributeForm.js +1 -1
- package/widgets/Editor/CreateFeaturesWorkflow.js +1 -1
- package/widgets/Editor/EditorViewModel.d.ts +12 -2
- package/widgets/Editor/EditorViewModel.js +1 -1
- package/widgets/Editor/UpdateRecordWorkflow.js +1 -1
- package/widgets/Editor/UpdateWorkflow.js +1 -1
- package/widgets/Editor/compatibilityAdapters.js +2 -0
- package/widgets/Editor/components/PendingFeatureList.js +1 -1
- package/widgets/Editor/components/UpdateFeaturePanelContent.js +1 -1
- package/widgets/Editor/legacy/AddAssociationWorkflow.js +2 -0
- package/widgets/Editor/legacy/AddAssociationWorkflowData.js +2 -0
- package/widgets/Editor/legacy/CreateFeaturesWorkflow.js +2 -0
- package/widgets/Editor/legacy/CreateFeaturesWorkflowData.js +2 -0
- package/widgets/Editor/legacy/MergeFeaturesWorkflow.js +2 -0
- package/widgets/Editor/legacy/MergeFeaturesWorkflowData.js +2 -0
- package/widgets/Editor/legacy/SplitFeatureWorkflow.js +2 -0
- package/widgets/Editor/legacy/SplitFeatureWorkflowData.js +2 -0
- package/widgets/Editor/legacy/UpdateFeatureWorkflow.js +2 -0
- package/widgets/Editor/legacy/UpdateFeatureWorkflowData.js +2 -0
- package/widgets/Editor/legacy/UpdateFeaturesWorkflow.js +2 -0
- package/widgets/Editor/legacy/UpdateFeaturesWorkflowData.js +2 -0
- package/widgets/Editor/legacy/UpdateRecordWorkflow.js +2 -0
- package/widgets/Editor/legacy/UpdateRecordWorkflowData.js +2 -0
- package/widgets/Editor/legacy/UpdateWorkflow.js +2 -0
- package/widgets/Editor/legacy/UpdateWorkflowData.js +2 -0
- package/widgets/Editor/legacy/Workflow.js +2 -0
- package/widgets/Editor/legacy/workflowUtils.js +2 -0
- package/widgets/Editor/types.d.ts +12 -0
- package/widgets/Editor/workflowUtils.js +1 -1
- package/widgets/Editor.js +1 -1
- package/widgets/FeatureForm/FeatureFormViewModel.d.ts +16 -12
- package/widgets/FeatureForm/FeatureFormViewModel.js +1 -1
- package/widgets/FeatureForm.d.ts +14 -16
- package/widgets/FeatureTable/FeatureTableViewModel.d.ts +2 -1
- package/widgets/FeatureTable/Grid/Grid.js +1 -1
- package/widgets/FeatureTable/Grid/GridViewModel.d.ts +3 -0
- package/widgets/FeatureTable/Grid/GridViewModel.js +1 -1
- package/widgets/FeatureTable/Grid/types.d.ts +20 -0
- package/widgets/FeatureTable.d.ts +14 -2
- package/widgets/FeatureTable.js +1 -1
- package/widgets/OrientedImageryViewer/components/ImageLocationWidget.js +1 -1
- package/widgets/OrientedImageryViewer/components/ImageViewerViewModel.js +1 -1
- package/widgets/OrientedImageryViewer/navigation/queries.js +1 -1
- package/widgets/OrientedImageryViewer/navigation/utils.js +1 -1
- package/widgets/OrientedImageryViewer/support/panConstraint.js +1 -1
- package/widgets/OrientedImageryViewer.js +1 -1
- package/widgets/ShadowCast/ShadowCastViewModel.js +1 -1
- package/assets/esri/core/workers/chunks/057d288d795b853295f1.js +0 -2
- package/assets/esri/core/workers/chunks/26aa8190ac439f634c5b.js +0 -1
- package/assets/esri/core/workers/chunks/3192586ec7fc73ed1165.js +0 -1
- package/assets/esri/core/workers/chunks/33866e6e6de1bab64599.js +0 -1
- package/assets/esri/core/workers/chunks/360fd810d70d21c092d9.js +0 -1
- package/assets/esri/core/workers/chunks/3e89f487c5851c954d8b.js +0 -1
- package/assets/esri/core/workers/chunks/5aa375b0c6a205134703.js +0 -1
- package/assets/esri/core/workers/chunks/5f0bc019add4aff3130c.js +0 -1
- package/assets/esri/core/workers/chunks/630ad47857de3cf726d1.js +0 -1
- package/assets/esri/core/workers/chunks/754f7ed62afc4e0a1972.js +0 -2
- package/assets/esri/core/workers/chunks/7ee76504e7fea389a1c9.js +0 -1
- package/assets/esri/core/workers/chunks/8331e04ebe0a54b04ab6.js +0 -1
- package/assets/esri/core/workers/chunks/8c64c6b8d7376a9d1c91.js +0 -1
- package/assets/esri/core/workers/chunks/c30ca771dd3f7198142b.js +0 -1
- package/assets/esri/core/workers/chunks/e5fcd8e7a4a660ef6ad6.js +0 -1
- package/assets/esri/core/workers/chunks/f47319d36f1527277923.js +0 -1
- package/assets/esri/core/workers/chunks/ff00ac01f0baaecaa890.js +0 -1
- /package/assets/esri/core/workers/chunks/{eccbddaec4be44c86f79.js.LICENSE.txt → 1040bce57ea63a6dbca4.js.LICENSE.txt} +0 -0
- /package/assets/esri/core/workers/chunks/{057d288d795b853295f1.js.LICENSE.txt → 353c67da4b25c29360db.js.LICENSE.txt} +0 -0
- /package/assets/esri/core/workers/chunks/{44b30bce8e9a75b9e1b3.js.LICENSE.txt → 47948c72bc01bd173c20.js.LICENSE.txt} +0 -0
- /package/assets/esri/core/workers/chunks/{754f7ed62afc4e0a1972.js.LICENSE.txt → dd0acd0f8b96839b4f24.js.LICENSE.txt} +0 -0
- /package/assets/esri/core/workers/chunks/{2dbd88566abac030e965.js.LICENSE.txt → f859c53432f258af77e3.js.LICENSE.txt} +0 -0
|
@@ -16,10 +16,10 @@ import type { AssociationProperties } from "../../rest/networks/support/Associat
|
|
|
16
16
|
|
|
17
17
|
export interface FeatureFormViewModelProperties extends Partial<Pick<FeatureFormViewModel, "editType" | "feature" | "layer" | "map">> {
|
|
18
18
|
/**
|
|
19
|
-
* The [Association]
|
|
19
|
+
* The [Association](https://developers.arcgis.com/javascript/latest/references/core/rest/networks/support/Association/) that the selected [feature](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureForm/FeatureFormViewModel/#feature) is involved in.
|
|
20
20
|
* The association is provided by the [activeAssociationInput](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureForm/FeatureFormViewModel/#activeAssociationInput) of the previous Editor workflow.
|
|
21
21
|
*
|
|
22
|
-
* This property is null until the user has drilled into an associated feature in the Editor
|
|
22
|
+
* This property is null until the user has drilled into an associated feature in the [Editor](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-editor/).
|
|
23
23
|
*/
|
|
24
24
|
activeAssociation?: AssociationProperties | null;
|
|
25
25
|
/**
|
|
@@ -27,9 +27,12 @@ export interface FeatureFormViewModelProperties extends Partial<Pick<FeatureForm
|
|
|
27
27
|
*
|
|
28
28
|
* The [FormTemplate](https://developers.arcgis.com/javascript/latest/references/core/form/FormTemplate/) is where you configure how the form should display and set any associated properties for the form, e.g. title, description, field elements, etc.
|
|
29
29
|
*
|
|
30
|
+
* > [!NOTE]
|
|
31
|
+
* >
|
|
32
|
+
* > It is recommended to set the `formTemplate` property on the layer itself so that it can be accessed by other widgets and components that also reference the same layer, such as the [Editor](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-editor/). In addition, it can also be set on the [Editor's `layerInfo`](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-editor/#layerInfos/). If a template is set on the `layerInfo`, it will take precedence over a template set directly on the layer.
|
|
33
|
+
*
|
|
30
34
|
* @since 4.16
|
|
31
35
|
* @see [Sample - Update Feature Attributes](https://developers.arcgis.com/javascript/latest/sample-code/editing-groupedfeatureform/)
|
|
32
|
-
* @see [Sample - Advanced Attribute Editing](https://developers.arcgis.com/javascript/latest/sample-code/editing-featureform-fieldvisibility/)
|
|
33
36
|
*/
|
|
34
37
|
formTemplate?: FormTemplateProperties | null;
|
|
35
38
|
/**
|
|
@@ -108,9 +111,7 @@ export type FeatureFormViewModelState = "disabled" | "ready";
|
|
|
108
111
|
* >
|
|
109
112
|
* > **Known Limitations**
|
|
110
113
|
* >
|
|
111
|
-
* >
|
|
112
|
-
* > [AttributeInspector](https://developers.arcgis.com/javascript/3/jsapi/attributeinspector-amd.html)
|
|
113
|
-
* > widget. There is currently no support for editing attachments or related records solely within this widget, although it is possible to edit attachments and relationship data via the [Editor](https://developers.arcgis.com/javascript/latest/references/core/widgets/Editor/) widget. Please refer to the [Editor](https://developers.arcgis.com/javascript/latest/references/core/widgets/Editor/) documentation for any known limitations regarding this.
|
|
114
|
+
* > There is currently no support for editing attachments or related records through [FeatureForm](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-feature-form/), although it is possible to edit attachments and relationship data via the [Editor](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-editor/). Please refer to the [Editor](https://developers.arcgis.com/javascript/latest/references/core/widgets/Editor/) documentation for any known limitations regarding this.
|
|
114
115
|
*
|
|
115
116
|
* @since 4.9
|
|
116
117
|
* @see [Programming patterns: Widget viewModel pattern](https://developers.arcgis.com/javascript/latest/programming-patterns/#widget-viewmodel-pattern)
|
|
@@ -134,18 +135,18 @@ export default class FeatureFormViewModel extends FeatureFormViewModelSuperclass
|
|
|
134
135
|
"@eventTypes": FeatureFormViewModelEvents;
|
|
135
136
|
constructor(properties?: FeatureFormViewModelProperties);
|
|
136
137
|
/**
|
|
137
|
-
* The [Association]
|
|
138
|
+
* The [Association](https://developers.arcgis.com/javascript/latest/references/core/rest/networks/support/Association/) that the selected [feature](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureForm/FeatureFormViewModel/#feature) is involved in.
|
|
138
139
|
* The association is provided by the [activeAssociationInput](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureForm/FeatureFormViewModel/#activeAssociationInput) of the previous Editor workflow.
|
|
139
140
|
*
|
|
140
|
-
* This property is null until the user has drilled into an associated feature in the Editor
|
|
141
|
+
* This property is null until the user has drilled into an associated feature in the [Editor](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-editor/).
|
|
141
142
|
*/
|
|
142
143
|
get activeAssociation(): Association | null | undefined;
|
|
143
144
|
set activeAssociation(value: AssociationProperties | null | undefined);
|
|
144
145
|
/**
|
|
145
|
-
* The [UtilityNetworkAssociationInput]
|
|
146
|
-
* association data for the active workflow and selected association type in the Editor
|
|
146
|
+
* The [UtilityNetworkAssociationInput](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureForm/UtilityNetworkAssociationInput/) providing
|
|
147
|
+
* association data for the active workflow and selected association type in the [Editor](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-editor/).
|
|
147
148
|
*
|
|
148
|
-
* This property is null until an association type is selected in the Editor
|
|
149
|
+
* This property is null until an association type is selected in the [Editor](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-editor/).
|
|
149
150
|
*/
|
|
150
151
|
get activeAssociationInput(): UtilityNetworkAssociationInput | null | undefined;
|
|
151
152
|
/**
|
|
@@ -202,9 +203,12 @@ export default class FeatureFormViewModel extends FeatureFormViewModelSuperclass
|
|
|
202
203
|
*
|
|
203
204
|
* The [FormTemplate](https://developers.arcgis.com/javascript/latest/references/core/form/FormTemplate/) is where you configure how the form should display and set any associated properties for the form, e.g. title, description, field elements, etc.
|
|
204
205
|
*
|
|
206
|
+
* > [!NOTE]
|
|
207
|
+
* >
|
|
208
|
+
* > It is recommended to set the `formTemplate` property on the layer itself so that it can be accessed by other widgets and components that also reference the same layer, such as the [Editor](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-editor/). In addition, it can also be set on the [Editor's `layerInfo`](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-editor/#layerInfos/). If a template is set on the `layerInfo`, it will take precedence over a template set directly on the layer.
|
|
209
|
+
*
|
|
205
210
|
* @since 4.16
|
|
206
211
|
* @see [Sample - Update Feature Attributes](https://developers.arcgis.com/javascript/latest/sample-code/editing-groupedfeatureform/)
|
|
207
|
-
* @see [Sample - Advanced Attribute Editing](https://developers.arcgis.com/javascript/latest/sample-code/editing-featureform-fieldvisibility/)
|
|
208
212
|
*/
|
|
209
213
|
get formTemplate(): FormTemplate | null | undefined;
|
|
210
214
|
set formTemplate(value: FormTemplateProperties | null | undefined);
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
|
|
2
|
-
import{__decorate as e}from"tslib";import t from"../../Graphic.js";import{EventedAccessor as n}from"../../core/Evented.js";import{abortHandle as s}from"../../core/handleUtils.js";import i from"../../core/Logger.js";import{destroyMaybe as o}from"../../core/maybe.js";import{EsriPromiseMixin as r}from"../../core/Promise.js";import{debounce as a}from"../../core/promiseUtils.js";import{watch as l,syncAndInitial as u,whenOnce as p,on as c}from"../../core/reactiveUtils.js";import{templateHasKey as h}from"../../core/string.js";import{property as d,subclass as f}from"../../core/accessorSupport/decorators.js";import{UpdatingHandles as m}from"../../core/support/UpdatingHandles.js";import y from"../../form/FormTemplate.js";import{isUtilityNetworkAssociationsElement as g,isGroupElement as _,isFieldElement as v,isRelationshipElement as I,isTextElement as x}from"../../form/support/formUtils.js";import E from"../../layers/support/ContingentValue.js";import{isEditableLayer as C}from"../../layers/support/editableLayers.js";import F from"../../layers/support/LayerContingentValuesCache.js";import b from"../../rest/networks/support/Association.js";import{utc as V,unknown as A,system as w}from"../../time/constants.js";import{flattenAssociationInputs as j,flattenFieldInputs as T,isGroupInput as M,flattenRelationshipInputs as k,parseFormTemplateString as N,isRelationshipInput as S,isFieldInput as L,isTextElementInput as R,getNormalizedFeatureTypeInfo as U,valueIsValidContingentValue as Z}from"./featureFormUtils.js";import H from"./FieldInput.js";import{FormExpressionsManager as P}from"./FormExpressionsManager.js";import O from"./GroupInput.js";import W from"./RelationshipInput.js";import G from"./TextElementInput.js";import{createFormExpressionArcadeExecutor as $}from"../support/forms/expressions/FormExpressionArcadeExecutor.js";const D=new t({attributes:{}}),z={field:["editableExpression","requiredExpression","valueExpression","visibilityExpression"],group:["visibilityExpression"],relationship:["editableExpression","visibilityExpression"],text:["visibilityExpression"],utilityNetworkAssociations:["editableExpression","visibilityExpression"]},J="#JSAPI_CONTINGENT_VALUE_EMPTY_HASH",B="#JSAPI_CONTINGENT_VALUE_ANY_HASH",K="#JSAPI_CONTINGENT_VALUE_NULL_HASH";let Y=class extends(r(n)){constructor(e){super(e),this._lifecycleAbortController=new AbortController,this._expressionExecutorsInUse=new Set,this._expressionExecutorLookup=new Map,this._expressionsManager=null,this._contingentValuesCache=null,this._featureClone=D.clone(),this._initialFeature=D.clone(),this._timeZone=null,this._updatingHandles=new m,this.activeAssociation=null,this.editType="NA",this.contingencyConstraintViolations=new Map,this.disabled=!1,this.highlightHelper=null,this.inputs=[],this.map=null,this.callbacks=null,this.strict=!1,this.pendingSubtypeChoice=null,this._updateInputs=a(async()=>{this._stopExpressions();const{_featureClone:e,_initialFeature:t,editType:n,formTemplate:s,inputs:i,layer:o,timeZone:r}=this;if(!o)return;const a={editType:n,feature:e,initialFeature:t,layer:o,timeZone:r},l=i.slice(),u=s?.elements&&s.elements.length>0?await this._updateInputsUsingFormElements(l,s.elements,a):this._updateInputsUsingLayerFields(l,o?.fields,a);this.inputs=u,this._startExpressions()})}initialize(){const e=l(()=>[this.layer,!!this.layer?.loaded,this.formTemplate,this._initialFeature,this.timeZone,this.editType],([e,t])=>{null!=e&&(t?this._updatingHandles.consumePromise(this._updateInputs()):e.load().catch(()=>{}))},u),t=l(()=>this._arcadeContextInfo,e=>{null!=this._expressionsManager&&(this._expressionsManager.arcadeContextInfo=e,this._evaluateExpressions(e=>e.evaluateAll()))}),n=l(()=>this.layer,e=>{const t="subtype-sublayer"===e?.type?e.parent:"feature"===e?.type?e:null;t&&this.addResolvingPromise(F.createLoadedLayerContingentValuesCache(t,{signal:this._lifecycleAbortController.signal}).then(e=>{this._contingentValuesCache=e,this.notifyChange("fieldsWithContingentValues")}))},{initial:!0});this.addHandles([e,t,n,s(this._lifecycleAbortController)])}destroy(){this.feature=null,this.layer=null,this._contingentValuesCache=o(this._contingentValuesCache),this.highlightHelper?.removeAll(),this._updatingHandles.destroy()}get _expressionInfosLookup(){return new Map(this.formTemplate?.expressionInfos?.map(e=>[e.name,e]))}get activeAssociationInput(){return this.allAssociationInputs.find(e=>e.uid===this.associationId)}get activeRelationshipInput(){return this.allRelationshipInputs.find(e=>e.relationshipId===this.relationshipId||e.activeCategory||e.showAllEnabled)}get _arcadeContextInfo(){const{_initialFeature:e,editType:t,layer:n,map:s,spatialReference:i,timeZone:o}=this;return{layer:C(n)?n:null,originalFeature:e,editType:t,map:s,spatialReference:i,timeZone:o}}get associationId(){return this._get("associationId")}set associationId(e){null==e&&this.activeAssociationInput?.viewModel&&(this.activeAssociationInput.associatedLayer=null,this.activeAssociationInput.viewModel.activeAssociationType=null),this._set("associationId",e)}get associatedLayer(){return this.activeAssociationInput?.associatedLayer}set associatedLayer(e){this.activeAssociationInput&&(this.activeAssociationInput.associatedLayer=e)}get allAssociationInputs(){return j(this.inputs)}get allFieldInputs(){return T(this.inputs)}get allGroupInputs(){return this.inputs.filter(M)}get allRelationshipInputs(){return k(this.inputs)}get _layerFieldsByName(){return new Map(this.layer?.fields.map(e=>[e.name,e]))}get feature(){return this._get("feature")}set feature(e){const t=this._get("feature");e!==t&&(this._featureClone=e?.clone()??D.clone(),this._expressionsManager&&(this._expressionsManager.feature=this._featureClone),e?(this._resetFieldInputValues(this._featureClone),this.allRelationshipInputs.forEach(t=>t.feature=e)):(this.inputs.forEach(e=>e.destroy()),this.inputs.length=0),t!==e&&(this.pendingSubtypeChoice=null),this.contingencyConstraintViolations.clear(),this._set("feature",e),this._initialFeature=this._featureClone.clone())}get fieldsWithContingentValues(){if(null==this._contingentValuesCache)return new Set;const e=this._contingentValuesCache.fieldGroups.flatMap(e=>e.fields);return new Set(e)}get formTemplate(){return this.layer&&"formTemplate"in this.layer?this.layer.formTemplate:null}set formTemplate(e){this._overrideIfSome("formTemplate",e)}get formDescription(){const{formTemplate:e,layer:t}=this;return e?.description&&t?N({attributes:this.getValues(),label:e.description,layer:t,timeZone:this.timeZone}):null}get formTitle(){const{formTemplate:e,layer:t}=this;return e?.title&&t?N({attributes:this.getValues(),label:e.title,layer:t,timeZone:this.timeZone}):null}get formHeaderVisible(){const{activeRelationshipInput:e,activeAssociationInput:t,formDescription:n,formTitle:s}=this;return!(e||t||!n&&!s)}get joinedContingentValues(){return this._joinContingentValues()}get layer(){const e=this._initialFeature;return e?.sourceLayer&&"applyEdits"in e.sourceLayer?e.sourceLayer:null}set layer(e){this._override("layer",e)}get relationshipId(){return this._get("relationshipId")}set relationshipId(e){const t=this.allRelationshipInputs;if(null!=e&&e===this.relationshipId||t.forEach(e=>{e.showAllEnabled=!1,e.activeCategory=null}),null!=e){const n=t.find(t=>t.relationshipId===e);n&&(n.showAllEnabled=!0)}this._set("relationshipId",e)}get spatialReference(){return this.layer?.spatialReference??null}set spatialReference(e){this._override("spatialReference",e)}get state(){return this.layer?.loaded?"ready":"disabled"}get submittable(){return!!this.valid||this.allFieldInputs.filter(e=>!e.valid).every(({submittable:e})=>e)}get timeZone(){const{layer:e}=this;if(e&&"datesInUnknownTimezone"in e&&e.datesInUnknownTimezone)return V;const t=e&&"preferredTimeZone"in e&&e.preferredTimeZone;return this._timeZone===A?t||V:this._timeZone||w}set timeZone(e){this._timeZone=e}get updating(){return this._updatingHandles.updating}get valid(){const e=this.allFieldInputs;return e.length>0&&e.every(({valid:e})=>e)}findField(e){return this.allFieldInputs.find(t=>t.name===e)}findGroup(e){return this.allGroupInputs.find(t=>t.id===e)}getFieldValueOptionsForField(e,t){const n=this.findField(e);if(!n)return[[],[],[]];const s="coded-value"===n.domain?.type?n.domain.codedValues.map(({name:e,code:t})=>({name:e,value:t})):[],i=null==n.value||s.some(e=>e.value===n.value)?[]:[{name:`${n.value}`,value:n.value}],o=this.fieldsWithContingentValues.has(e)?this._getContingentValueOptionsForField(e,t):[];if(o.length>0){const e=new Set(o.map(e=>e.value));return[o,s.filter(t=>!e.has(t.value)),i]}return[s,[],i]}getValue(e){const t=this.layer?.getField(e);if(null!=t)return this._featureClone.getAttribute(t.name)??null}setValue(e,t){const{_featureClone:n,strict:s}=this,i=this.findField(e);t=""===t?null:t,i&&n.getAttribute(e)!==t&&(i.value=t,s&&!i.valid||(this._afterValueChange(i),this._evaluateExpressions(t=>t.evaluateInvalidated([e]))))}getValues(){return{...this._featureClone.attributes}}overrideInitialFeature(e){this._initialFeature=e}submit(){const e=this.allFieldInputs,t=new Set(e.filter(e=>e.valid).map(({name:e})=>e)),n=e.filter(e=>!e.valid).map(({name:e})=>e),s=this.getValues();if(this.validateContingencyConstraints(s,{includeIncompleteViolations:!0}).length>0)for(const[i,o]of this.contingencyConstraintViolations.entries())"error"===o.type&&(t.delete(i),n.push(i));this.notifyChange("submittable"),this.notifyChange("valid"),this.emit("submit",{valid:[...t],invalid:n,values:s})}validateContingencyConstraints(e,t){const{_contingentValuesCache:n}=this,s=new Map;if(this.contingencyConstraintViolations=s,null==n)return[];const{invalid:i,incomplete:o}=n.validateContingencyConstraints(e),r=[...i,...t?.includeIncompleteViolations?o:[]];for(const a of r)for(const e of a.fieldGroup.fields)s.set(e,a);return r}notifyFeatureGeometryChanged(){const{feature:e,_featureClone:t}=this;e&&(t.geometry=e.geometry,this._evaluateExpressions(e=>e.evaluateInvalidatedByGeometry()))}applySubtypeDefaults(e){const{defaultValues:t}=e,{allFieldInputs:n}=this;for(const{name:s}of n){const e=t[s];null!=e&&this.setValue(s,e)}}_emitChangeEvent({name:e,valid:t,value:n}){this.emit("value-change",{layer:this.layer,feature:this.feature,fieldName:e,value:n,valid:t})}_evaluateExpressions(e){const t=this._expressionsManager;null!=t&&this._updatingHandles.consumePromise(e(t).finally(()=>this._afterExpressionsEvaluated()))}async _updateInputsUsingFormElements(e,t,n){const s=new Map;for(const r of e)if(M(r)){s.set(r.element,r);for(const e of r.inputs)e.element&&s.set(e.element,e)}else r.element&&s.set(r.element,r);const i=new Map,o=await this._updateInputsUsingFormElementsRecursive({existingInputsByElement:s,updatedElements:t.filter(e=>this._isSupportedElement(e)),sharedInitializationProperties:n,group:null,newExpressionExecutorPromises:i});for(const[r,a]of s.entries())s.delete(r),a.destroy();return await Promise.all(Array.from(i.values())),o}async _updateInputsUsingFormElementsRecursive(e){const{existingInputsByElement:t,updatedElements:n,sharedInitializationProperties:s,group:i,newExpressionExecutorPromises:o}=e,r=[];for(const a of n){const e=t.has(a),n=e?t.get(a):g(a)?await this._makeUtilityNetworkAssociationInputFromElement(a,s,i):this._makeInputFromElement(a,s,i);if(n){if(r.push(n),await p(()=>!n.updating),this._assignExpressionExecutors(n,a,o),e)if(t.delete(a),M(n)){const{feature:e,timeZone:t}=s;n.set({feature:e,timeZone:t})}else if(S(n)){const e=this.relationshipId===a.relationshipId;n.set(s),n.set({map:this.map,showAllEnabled:e})}else g(n)?(n.set(s),n.set({map:this.map})):n.set(s);if(_(a)){const e=a.elements.filter(e=>this._isSupportedElement(e));n.inputs=await this._updateInputsUsingFormElementsRecursive({existingInputsByElement:t,updatedElements:e,sharedInitializationProperties:s,group:n,newExpressionExecutorPromises:o})}}}return r}_updateInputsUsingLayerFields(e,t,n){if(!Array.isArray(t))return i.getLogger(this).warn(this.declaredClass,"No attribute fields found."),[];const s=new Map;for(const i of e)if(M(i)){for(const e of i.inputs)e.destroy();i.inputs.length=0,i.destroy()}else S(i)?i.destroy():L(i)&&(null!==i.element?i.destroy():s.set(i.field,i));const o=[];for(const i of t){const e=n.feature?.getAttribute(i.name)??null,t=s.get(i)??new H({field:i,preservesValueWhenHidden:this.formTemplate?.preserveFieldValuesWhenHidden});o.push(t.set({...n,value:e})),s.delete(i)}for(const[i,r]of s.entries())s.delete(i),r.destroy();return o}_resetFieldInputValues(e){for(const t of this.allFieldInputs)t.value=e.getAttribute(t.name)??null}_makeInputFromElement(e,t,n){return _(e)?q(e,t):v(e)?this._makeFieldInputFromElement(e,t,n):I(e)?this._makeRelationshipInputFromElement(e,t,n):g(e)?this._makeUtilityNetworkAssociationInputFromElement(e,t,n):x(e)?Q(e,t):g(e)?this._makeUtilityNetworkAssociationInputFromElement(e,t,n):e}_makeFieldInputFromElement(e,t,n){const{editType:s,feature:i,initialFeature:o,layer:r,timeZone:a}=t,{fieldName:l}=e,u=l&&this._layerFieldsByName.get(l);return u?new H({editType:s,element:e,field:u,value:i?.getAttribute(e.fieldName)??null,feature:i,initialFeature:o,layer:r,group:n,preservesValueWhenHidden:this.formTemplate?.preserveFieldValuesWhenHidden,timeZone:a}):null}_makeRelationshipInputFromElement(e,t,n=null){const{map:s}=this,{feature:i,layer:o,timeZone:r}=t,a=new W({element:e,feature:i,group:n,layer:o,map:s,timeZone:r});return a.addHandles(c(()=>a.relatedLayer,"edits",()=>this._evaluateExpressions(e=>e.evaluateAsyncExpressions()))),a}async _makeUtilityNetworkAssociationInputFromElement(e,t,n=null){const{map:s}=this,{feature:i,layer:o,timeZone:r}=t;return new(0,(await import("./UtilityNetworkAssociationInput.js")).default)({element:e,feature:i,group:n,layer:o,map:s,timeZone:r})}_assignExpressionExecutors(e,t,n){const s=z[t.type],i=[];for(const o of s){const s=`${o}Executor`;if(e[s]){this._useExecutor(e[s]);continue}const r=t[o];if(null!=r&&""!==r){const t=this._expressionInfosLookup.get(r)?.expression??r;i.push(this._getOrCreateExecutorForExpression(t,n).then(t=>{e[s]=this._useExecutor(t)}))}}return R(e)&&i.push(...this._assignTextElementExpressionExecutors(e,n)),i}_assignTextElementExpressionExecutors(e,t){const{_expressionInfosLookup:n}=this,s=[];for(const o of e.expressionsUsed){const r=n.get(o);null!=r?s.push(this._getOrCreateExecutorForExpression(r.expression,t).then(t=>e.setExpressionExecutor(o,this._useExecutor(t)))):i.getLogger(this).error("feature-form:expression-not-found",`Could not find expressionInfo object with name '${o}'`)}for(const i of e.fieldsUsed){const n=`return $feature['${i}'];`;s.push(this._getOrCreateExecutorForExpression(n,t).then(t=>e.setFieldExecutor(i,this._useExecutor(t))))}return s}async _getOrCreateExecutorForExpression(e,t){const{_expressionExecutorLookup:n}=this;if(n.has(e))return n.get(e);if(t.has(e))return t.get(e);const s=$(e,this.layer);t.set(e,s);const i=await s;return n.set(e,i),i}_createExpressionsManager(e){const{_arcadeContextInfo:t,_featureClone:n,allFieldInputs:s,formTemplate:i}=this;this._expressionsManager=new P({executors:e,feature:n,arcadeContextInfo:t,fieldInputs:s,preserveFieldValuesWhenHidden:!0===i?.preserveFieldValuesWhenHidden})}_startExpressions(){if(0===this._expressionExecutorsInUse.size)return;const e=Array.from(this._expressionExecutorsInUse);this._createExpressionsManager(e),this._evaluateExpressions(e=>e.evaluateAll())}_stopExpressions(){this._expressionsManager=o(this._expressionsManager),this._expressionExecutorsInUse.clear()}_useExecutor(e){return this._expressionExecutorsInUse.add(e),e}_afterValueChange(e){const{name:t,value:n}=e,{_featureClone:s,formTemplate:i,layer:o}=this;if(!o)return;const r=s.getAttribute(t);s.setAttribute(t,n);const{typeFieldName:a,types:l}=U(o);if((e.isSubtypeField||t===a)&&n!==r){if("subtype-sublayer"===o.type){const e=o.parent?.findSublayerForFeature(s);e&&(this.feature&&(this.feature.sourceLayer=e),s.sourceLayer=e,this._initialFeature.sourceLayer=e)}const e=new Set;for(const t of l)if(t.domains&&"object"==typeof t.domains)for(const n of Object.keys(t.domains))e.add(n);for(const t of e){const e=this.findField(t);e&&e.notifyChange("domain")}this.notifyChange("joinedContingentValues")}if(null!=i){const{description:e,title:n}=i;n&&h(n,t)&&this.notifyChange("formTitle"),e&&h(e,t)&&this.notifyChange("formDescription")}this._emitChangeEvent(e)}_afterExpressionsEvaluated(){const{_featureClone:e}=this;for(const t of this.allFieldInputs)t.value!==e.getAttribute(t.name)&&this._afterValueChange(t)}_joinContingentValues(){const e=this._contingentValuesCache;if(null==e)return[];const{typeFieldName:t}=U(this.layer),n=t?this.getValue(t):null,s=[];for(const r of e.fieldGroups){const{contingencies:e,fields:t,name:i}=r,o=[];for(const s of e)s.isRetired||null!=s.subtype&&s.subtype.code!==n||o.push({values:s.values});o.length>0&&s.push({name:i,fields:t,contingencies:o})}const[i,o]=this._generateJoinPlan(s);return[...i.flatMap(e=>this._joinFieldGroupContingencies(e)),...o.flatMap(e=>e.contingencies)]}_generateJoinPlan(e){const t=new Map,n=[],s=new Set;for(const l of e)for(const e of l.fields)if(t.has(e)){const i=t.get(e),o=l,r=[i.name,o.name].sort().join("|");if(s.has(r))continue;n.push([i,o]),s.add(r),t.set(e,o)}else t.set(e,l);const i=new Set(n.flat()),o=new Set(e);for(const l of i)o.delete(l);const r=new Map,a=new Map;for(const l of new Set(n.flat())){const e=Symbol(l.name);r.set(e,new Set([l])),a.set(l,e)}for(const[l,u]of n){const e=a.get(l),t=a.get(u);if(e===t)continue;const n=r.get(e),s=r.get(t);for(const i of s)n.add(i),a.set(i,e);r.delete(t)}return[[...r.values()].map(e=>[...e]),[...o]]}_joinFieldGroupContingencies(e){const t=e.slice(),n=t.shift();let s=t.shift(),i=this._generateJoinKey(n.fields,s.fields),o=new Set([...n.fields,...s.fields]),r=new Map;for(const l of n.contingencies){const[e]=this._hashContingency(l,i.codedValueFields,!0);r.has(e)?r.get(e)?.push(l):r.set(e,[l])}for(;t.length>0;){const e=new Map,n=t.shift(),a=this._generateJoinKey(o,n.fields);for(const t of s.contingencies){const[n,s]=this._hashContingency(t,i.codedValueFields),o=s?this._findMatchingContingenciesWithAnyHashMask(r,n):r.get(n);if(r.has(B)&&o?.push(...this._findMatchingContingenciesContainingAny(t,r.get(B),i.codedValueFields)),null!=o)for(const r of o){const n=i.rangeFields.length>0?this._joinContingenciesWithRangeDomains(r,t,i.rangeFields):this._joinContingencies(r,t);if(null==n)break;const[s]=this._hashContingency(n,a.codedValueFields,!0);e.has(s)?e.get(s)?.push(n):e.set(s,[n])}}r=e,s=n,i=a,o=new Set([...o,...s.fields])}const a=[];for(const l of s.contingencies){const[e,t]=this._hashContingency(l,i.codedValueFields),n=t?this._findMatchingContingenciesWithAnyHashMask(r,e):r.get(e);if(r.has(B)&&n.push(...this._findMatchingContingenciesContainingAny(l,r.get(B),i.codedValueFields)),null!=n)for(const s of n){const e=i.rangeFields.length>0?this._joinContingenciesWithRangeDomains(s,l,i.rangeFields):this._joinContingencies(s,l);null!=e&&a.push(e)}}return a}_joinContingencies(e,t){const n={values:{...e.values,...t.values}};for(const[s,i]of Object.entries(n.values))"any"===i.objectType&&null!=e.values[s]&&(n.values[s]=e.values[s]);return n}_joinContingenciesWithRangeDomains(e,t,n){const s=this._joinContingencies(e,t);for(const i of n){const n=e.values[i],o=t.values[i],{leftIsNull:r,rightIsNull:a,bothAreNull:l,leftIsAny:u,rightIsAny:p,bothAreAny:c,leftIsRange:h,rightIsRange:d}=this._compareObjectTypes(n.objectType,o.objectType);if(l||c)continue;if(r&&p||a&&u){s.values[i]=new E({objectType:"null"});continue}if(r&&d||a&&h)return null;u?(n.minValue=-1/0,n.maxValue=1/0):p&&(o.minValue=-1/0,o.maxValue=1/0);const f=Math.max(n.minValue,o.minValue),m=Math.min(n.maxValue,o.maxValue);if(f>m)return null;s.values[i]=new E({objectType:"range",minValue:f,maxValue:m})}return s}_findMatchingContingenciesContainingAny(e,t,n){return t.filter(t=>n.every(n=>{const s=t.values[n],i=e.values[n];return"any"===s.objectType||"any"===i.objectType||s.codedValue?.code===i.codedValue?.code}))}_findMatchingContingenciesWithAnyHashMask(e,t){const n=new RegExp(`${t}$`),s=[];for(const[i,o]of e){if(i===B)break;n.test(i)&&s.push(...o)}return s}_generateJoinKey(e,t){const n=Array.isArray(e)?new Set(e):e,s=Array.isArray(t)?new Set(t):t,i=n.size<s.size?n:s,o=i===n?s:n,{feature:r}=this,a=new Set,l=new Set;for(const u of i)if(o.has(u)){const e=this.layer?.getFieldDomain(u,{feature:r??void 0,excludeImpliedDomains:!0});if(null==e)continue;switch(e.type){case"coded-value":a.add(u);break;case"range":l.add(u)}}return{codedValueFields:[...a],rangeFields:[...l]}}_contingencyIsValid(e,t){const n={};for(const{name:s,value:i}of this.allFieldInputs)this.fieldsWithContingentValues.has(s)&&null!=i&&s!==e&&(n[s]=i);return Object.entries(n).every(([e,n])=>!t.values.hasOwnProperty(e)||Z(n,t.values[e]))}_getContingentValueOptionsForField(e,t){const n=this.joinedContingentValues.slice(),s=new Map,i={code:"",name:t??"No value"};for(const o of n){const t=o.values[e];if("code"===t?.objectType||"null"===t?.objectType){const{code:n,name:r}=t.codedValue&&"null"!==t.objectType?t.codedValue:i;!s.has(n)&&this._contingencyIsValid(e,o)&&s.set(n,{name:r,value:n})}}return[...s.values()]}_hashContingency(e,t,n=!1){if(t.length<1)return[J,!1];const s=[];let i=!1;for(const o of t){const t=e.values[o];if("any"===t.objectType){if(n)return[B,!0];i=!0,s.push(`${o}:.*`)}else"null"===t.objectType?s.push(`${o}:${K}`):s.push(`${o}:${t.codedValue?.code}`)}return[s.sort().join("&"),i]}_compareObjectTypes(e,t){return{leftIsNull:"null"===e,rightIsNull:"null"===t,bothAreNull:"null"===e&&"null"===t,leftIsAny:"any"===e,rightIsAny:"any"===t,bothAreAny:"any"===e&&"any"===t,leftIsRange:"range"===e,rightIsRange:"range"===t}}_isSupportedElement(e){return"field"===e.type||"group"===e.type||"relationship"===e.type||"text"===e.type||"utilityNetworkAssociations"===e.type||(i.getLogger(this).warn("form-info::unsupported-element-type","Only element types 'field', 'group' and 'relationship' are supported",`Element ${e.label} has unsupported type '${e.type}'`),!1)}get test(){return{featureClone:this._featureClone}}};function q(e,t){const{feature:n,layer:s}=t;return new O({element:e,inputs:[],feature:n,layer:s})}function Q(e,t,n=null){const{feature:s,layer:i,timeZone:o}=t;return new G({element:e,feature:s,group:n,layer:i,timeZone:o})}e([d()],Y.prototype,"_expressionInfosLookup",null),e([d()],Y.prototype,"_featureClone",void 0),e([d()],Y.prototype,"_initialFeature",void 0),e([d()],Y.prototype,"_timeZone",void 0),e([d({type:b})],Y.prototype,"activeAssociation",void 0),e([d()],Y.prototype,"activeAssociationInput",null),e([d()],Y.prototype,"activeRelationshipInput",null),e([d()],Y.prototype,"_arcadeContextInfo",null),e([d()],Y.prototype,"associationId",null),e([d()],Y.prototype,"associatedLayer",null),e([d()],Y.prototype,"allAssociationInputs",null),e([d()],Y.prototype,"allFieldInputs",null),e([d()],Y.prototype,"allGroupInputs",null),e([d()],Y.prototype,"allRelationshipInputs",null),e([d()],Y.prototype,"_layerFieldsByName",null),e([d()],Y.prototype,"editType",void 0),e([d()],Y.prototype,"contingencyConstraintViolations",void 0),e([d()],Y.prototype,"disabled",void 0),e([d()],Y.prototype,"feature",null),e([d()],Y.prototype,"fieldsWithContingentValues",null),e([d({type:y})],Y.prototype,"formTemplate",null),e([d()],Y.prototype,"formDescription",null),e([d()],Y.prototype,"formTitle",null),e([d()],Y.prototype,"formHeaderVisible",null),e([d()],Y.prototype,"highlightHelper",void 0),e([d()],Y.prototype,"inputs",void 0),e([d()],Y.prototype,"joinedContingentValues",null),e([d()],Y.prototype,"layer",null),e([d()],Y.prototype,"map",void 0),e([d()],Y.prototype,"callbacks",void 0),e([d()],Y.prototype,"relationshipId",null),e([d()],Y.prototype,"spatialReference",null),e([d()],Y.prototype,"state",null),e([d()],Y.prototype,"strict",void 0),e([d()],Y.prototype,"submittable",null),e([d()],Y.prototype,"timeZone",null),e([d()],Y.prototype,"updating",null),e([d()],Y.prototype,"valid",null),e([d()],Y.prototype,"pendingSubtypeChoice",void 0),e([d()],Y.prototype,"getValues",null),e([d()],Y.prototype,"submit",null),e([d()],Y.prototype,"test",null),Y=e([f("esri.widgets.FeatureForm.FeatureFormViewModel")],Y);const X=Y;export{X as default};
|
|
2
|
+
import{__decorate as e}from"tslib";import t from"../../Graphic.js";import{EventedAccessor as n}from"../../core/Evented.js";import{abortHandle as s}from"../../core/handleUtils.js";import i from"../../core/Logger.js";import{destroyMaybe as o}from"../../core/maybe.js";import{EsriPromiseMixin as r}from"../../core/Promise.js";import{debounce as a}from"../../core/promiseUtils.js";import{watch as l,syncAndInitial as u,whenOnce as p,on as c}from"../../core/reactiveUtils.js";import{templateHasKey as h}from"../../core/string.js";import{property as d,subclass as f}from"../../core/accessorSupport/decorators.js";import{UpdatingHandles as m}from"../../core/support/UpdatingHandles.js";import y from"../../form/FormTemplate.js";import{isUtilityNetworkAssociationsElement as g,isGroupElement as _,isFieldElement as v,isRelationshipElement as I,isTextElement as x}from"../../form/support/formUtils.js";import E from"../../layers/support/ContingentValue.js";import{isEditableLayer as C}from"../../layers/support/editableLayers.js";import F from"../../layers/support/LayerContingentValuesCache.js";import b from"../../rest/networks/support/Association.js";import{utc as A,unknown as V,system as w}from"../../time/constants.js";import{flattenAssociationInputs as j,flattenFieldInputs as T,isGroupInput as M,flattenRelationshipInputs as k,parseFormTemplateString as N,isRelationshipInput as S,isFieldInput as L,isTextElementInput as R,getNormalizedFeatureTypeInfo as U,valueIsValidContingentValue as Z}from"./featureFormUtils.js";import H from"./FieldInput.js";import{FormExpressionsManager as P}from"./FormExpressionsManager.js";import O from"./GroupInput.js";import W from"./RelationshipInput.js";import G from"./TextElementInput.js";import{createFormExpressionArcadeExecutor as $}from"../support/forms/expressions/FormExpressionArcadeExecutor.js";const D=new t({attributes:{}}),z={field:["editableExpression","requiredExpression","valueExpression","visibilityExpression"],group:["visibilityExpression"],relationship:["editableExpression","visibilityExpression"],text:["visibilityExpression"],utilityNetworkAssociations:["editableExpression","visibilityExpression"]},J="#JSAPI_CONTINGENT_VALUE_EMPTY_HASH",B="#JSAPI_CONTINGENT_VALUE_ANY_HASH",K="#JSAPI_CONTINGENT_VALUE_NULL_HASH";let Y=class extends(r(n)){constructor(e){super(e),this._lifecycleAbortController=new AbortController,this._expressionExecutorsInUse=new Set,this._expressionExecutorLookup=new Map,this._expressionsManager=null,this._contingentValuesCache=null,this._featureClone=D.clone(),this._initialFeature=D.clone(),this._timeZone=null,this._updatingHandles=new m,this.activeAssociation=null,this.editType="NA",this.contingencyConstraintViolations=new Map,this.disabled=!1,this.highlightHelper=null,this.inputs=[],this.map=null,this.callbacks=null,this.strict=!1,this.pendingSubtypeChoice=null,this._updateInputs=a(async()=>{this._stopExpressions();const{_featureClone:e,_initialFeature:t,editType:n,formTemplate:s,inputs:i,layer:o,timeZone:r}=this;if(!o)return;const a={editType:n,feature:e,initialFeature:t,layer:o,timeZone:r},l=i.slice(),u=s?.elements&&s.elements.length>0?await this._updateInputsUsingFormElements(l,s.elements,a):this._updateInputsUsingLayerFields(l,o?.fields,a);this.inputs=u,this._startExpressions()})}initialize(){const e=l(()=>[this.layer,!!this.layer?.loaded,this.formTemplate,this._initialFeature,this.timeZone,this.editType],([e,t])=>{null!=e&&(t?this._updatingHandles.consumePromise(this._updateInputs()):e.load().catch(()=>{}))},u),t=l(()=>this._arcadeContextInfo,e=>{null!=this._expressionsManager&&(this._expressionsManager.arcadeContextInfo=e,this._evaluateExpressions(e=>e.evaluateAll()))}),n=l(()=>this.layer,e=>{const t="subtype-sublayer"===e?.type?e.parent:"feature"===e?.type?e:null;t&&this.addResolvingPromise(F.createLoadedLayerContingentValuesCache(t,{signal:this._lifecycleAbortController.signal}).then(e=>{this._contingentValuesCache=e,this.notifyChange("fieldsWithContingentValues")}))},{initial:!0});this.addHandles([e,t,n,s(this._lifecycleAbortController)])}destroy(){this.feature=null,this.layer=null,this._contingentValuesCache=o(this._contingentValuesCache),this.highlightHelper?.removeAll(),this._updatingHandles.destroy()}get _expressionInfosLookup(){return new Map(this.formTemplate?.expressionInfos?.map(e=>[e.name,e]))}get activeAssociationInput(){return this.allAssociationInputs.find(e=>e.uid===this.associationId)}get activeAssociationsInput(){return this.activeAssociationInput}get activeRelationshipInput(){return this.allRelationshipInputs.find(e=>e.relationshipId===this.relationshipId||e.activeCategory||e.showAllEnabled)}get _arcadeContextInfo(){const{_initialFeature:e,editType:t,layer:n,map:s,spatialReference:i,timeZone:o}=this;return{layer:C(n)?n:null,originalFeature:e,editType:t,map:s,spatialReference:i,timeZone:o}}get activeAssociationType(){return this.activeAssociationInput?.activeAssociationType}get associationId(){return this._get("associationId")}set associationId(e){null==e&&this.activeAssociationInput?.viewModel&&(this.activeAssociationInput.associatedLayer=null,this.activeAssociationInput.viewModel.activeAssociationType=null),this._set("associationId",e)}get associatedLayer(){return this.activeAssociationInput?.associatedLayer}set associatedLayer(e){this.activeAssociationInput&&(this.activeAssociationInput.associatedLayer=e)}get allAssociationInputs(){return j(this.inputs)}get allFieldInputs(){return T(this.inputs)}get allGroupInputs(){return this.inputs.filter(M)}get allRelationshipInputs(){return k(this.inputs)}get _layerFieldsByName(){return new Map(this.layer?.fields.map(e=>[e.name,e]))}get feature(){return this._get("feature")}set feature(e){const t=this._get("feature");e!==t&&(this._featureClone=e?.clone()??D.clone(),this._expressionsManager&&(this._expressionsManager.feature=this._featureClone),e?(this._resetFieldInputValues(this._featureClone),this.allRelationshipInputs.forEach(t=>t.feature=e)):(this.inputs.forEach(e=>e.destroy()),this.inputs.length=0),t!==e&&(this.pendingSubtypeChoice=null),this.contingencyConstraintViolations.clear(),this._set("feature",e),this._initialFeature=this._featureClone.clone())}get fieldsWithContingentValues(){if(null==this._contingentValuesCache)return new Set;const e=this._contingentValuesCache.fieldGroups.flatMap(e=>e.fields);return new Set(e)}get formTemplate(){return this.layer&&"formTemplate"in this.layer?this.layer.formTemplate:null}set formTemplate(e){this._overrideIfSome("formTemplate",e)}get formDescription(){const{formTemplate:e,layer:t}=this;return e?.description&&t?N({attributes:this.getValues(),label:e.description,layer:t,timeZone:this.timeZone}):null}get formTitle(){const{formTemplate:e,layer:t}=this;return e?.title&&t?N({attributes:this.getValues(),label:e.title,layer:t,timeZone:this.timeZone}):null}get formHeaderVisible(){const{activeRelationshipInput:e,activeAssociationInput:t,formDescription:n,formTitle:s}=this;return!(e||t||!n&&!s)}get joinedContingentValues(){return this._joinContingentValues()}get layer(){const e=this._initialFeature;return e?.sourceLayer&&"applyEdits"in e.sourceLayer?e.sourceLayer:null}set layer(e){this._override("layer",e)}get relationshipId(){return this._get("relationshipId")}set relationshipId(e){const t=this.allRelationshipInputs;if(null!=e&&e===this.relationshipId||t.forEach(e=>{e.showAllEnabled=!1,e.activeCategory=null}),null!=e){const n=t.find(t=>t.relationshipId===e);n&&(n.showAllEnabled=!0)}this._set("relationshipId",e)}get spatialReference(){return this.layer?.spatialReference??null}set spatialReference(e){this._override("spatialReference",e)}get state(){return this.layer?.loaded?"ready":"disabled"}get submittable(){return!!this.valid||this.allFieldInputs.filter(e=>!e.valid).every(({submittable:e})=>e)}get timeZone(){const{layer:e}=this;if(e&&"datesInUnknownTimezone"in e&&e.datesInUnknownTimezone)return A;const t=e&&"preferredTimeZone"in e&&e.preferredTimeZone;return this._timeZone===V?t||A:this._timeZone||w}set timeZone(e){this._timeZone=e}get updating(){return this._updatingHandles.updating}get valid(){const e=this.allFieldInputs;return e.length>0&&e.every(({valid:e})=>e)}findField(e){return this.allFieldInputs.find(t=>t.name===e)}findGroup(e){return this.allGroupInputs.find(t=>t.id===e)}getFieldValueOptionsForField(e,t){const n=this.findField(e);if(!n)return[[],[],[]];const s="coded-value"===n.domain?.type?n.domain.codedValues.map(({name:e,code:t})=>({name:e,value:t})):[],i=null==n.value||s.some(e=>e.value===n.value)?[]:[{name:`${n.value}`,value:n.value}],o=this.fieldsWithContingentValues.has(e)?this._getContingentValueOptionsForField(e,t):[];if(o.length>0){const e=new Set(o.map(e=>e.value));return[o,s.filter(t=>!e.has(t.value)),i]}return[s,[],i]}getValue(e){const t=this.layer?.getField(e);if(null!=t)return this._featureClone.getAttribute(t.name)??null}setValue(e,t){const{_featureClone:n,strict:s}=this,i=this.findField(e);t=""===t?null:t,i&&n.getAttribute(e)!==t&&(i.value=t,s&&!i.valid||(this._afterValueChange(i),this._evaluateExpressions(t=>t.evaluateInvalidated([e]))))}getValues(){return{...this._featureClone.attributes}}overrideInitialFeature(e){this._initialFeature=e}submit(){const e=this.allFieldInputs,t=new Set(e.filter(e=>e.valid).map(({name:e})=>e)),n=e.filter(e=>!e.valid).map(({name:e})=>e),s=this.getValues();if(this.validateContingencyConstraints(s,{includeIncompleteViolations:!0}).length>0)for(const[i,o]of this.contingencyConstraintViolations.entries())"error"===o.type&&(t.delete(i),n.push(i));this.notifyChange("submittable"),this.notifyChange("valid"),this.emit("submit",{valid:[...t],invalid:n,values:s})}validateContingencyConstraints(e,t){const{_contingentValuesCache:n}=this,s=new Map;if(this.contingencyConstraintViolations=s,null==n)return[];const{invalid:i,incomplete:o}=n.validateContingencyConstraints(e),r=[...i,...t?.includeIncompleteViolations?o:[]];for(const a of r)for(const e of a.fieldGroup.fields)s.set(e,a);return r}notifyFeatureGeometryChanged(){const{feature:e,_featureClone:t}=this;e&&(t.geometry=e.geometry,this._evaluateExpressions(e=>e.evaluateInvalidatedByGeometry()))}applySubtypeDefaults(e){const{defaultValues:t}=e,{allFieldInputs:n}=this;for(const{name:s}of n){const e=t[s];null!=e&&this.setValue(s,e)}}_emitChangeEvent({name:e,valid:t,value:n}){this.emit("value-change",{layer:this.layer,feature:this.feature,fieldName:e,value:n,valid:t})}_evaluateExpressions(e){const t=this._expressionsManager;null!=t&&this._updatingHandles.consumePromise(e(t).finally(()=>this._afterExpressionsEvaluated()))}async _updateInputsUsingFormElements(e,t,n){const s=new Map;for(const r of e)if(M(r)){s.set(r.element,r);for(const e of r.inputs)e.element&&s.set(e.element,e)}else r.element&&s.set(r.element,r);const i=new Map,o=await this._updateInputsUsingFormElementsRecursive({existingInputsByElement:s,updatedElements:t.filter(e=>this._isSupportedElement(e)),sharedInitializationProperties:n,group:null,newExpressionExecutorPromises:i});for(const[r,a]of s.entries())s.delete(r),a.destroy();return await Promise.all(Array.from(i.values())),o}async _updateInputsUsingFormElementsRecursive(e){const{existingInputsByElement:t,updatedElements:n,sharedInitializationProperties:s,group:i,newExpressionExecutorPromises:o}=e,r=[];for(const a of n){const e=t.has(a),n=e?t.get(a):g(a)?await this._makeUtilityNetworkAssociationInputFromElement(a,s,i):this._makeInputFromElement(a,s,i);if(n){if(r.push(n),await p(()=>!n.updating),this._assignExpressionExecutors(n,a,o),e)if(t.delete(a),M(n)){const{feature:e,timeZone:t}=s;n.set({feature:e,timeZone:t})}else if(S(n)){const e=this.relationshipId===a.relationshipId;n.set(s),n.set({map:this.map,showAllEnabled:e})}else g(n)?(n.set(s),n.set({map:this.map})):n.set(s);if(_(a)){const e=a.elements.filter(e=>this._isSupportedElement(e));n.inputs=await this._updateInputsUsingFormElementsRecursive({existingInputsByElement:t,updatedElements:e,sharedInitializationProperties:s,group:n,newExpressionExecutorPromises:o})}}}return r}_updateInputsUsingLayerFields(e,t,n){if(!Array.isArray(t))return i.getLogger(this).warn(this.declaredClass,"No attribute fields found."),[];const s=new Map;for(const i of e)if(M(i)){for(const e of i.inputs)e.destroy();i.inputs.length=0,i.destroy()}else S(i)?i.destroy():L(i)&&(null!==i.element?i.destroy():s.set(i.field,i));const o=[];for(const i of t){const e=n.feature?.getAttribute(i.name)??null,t=s.get(i)??new H({field:i,preservesValueWhenHidden:this.formTemplate?.preserveFieldValuesWhenHidden});o.push(t.set({...n,value:e})),s.delete(i)}for(const[i,r]of s.entries())s.delete(i),r.destroy();return o}_resetFieldInputValues(e){for(const t of this.allFieldInputs)t.value=e.getAttribute(t.name)??null}_makeInputFromElement(e,t,n){return _(e)?q(e,t):v(e)?this._makeFieldInputFromElement(e,t,n):I(e)?this._makeRelationshipInputFromElement(e,t,n):g(e)?this._makeUtilityNetworkAssociationInputFromElement(e,t,n):x(e)?Q(e,t):g(e)?this._makeUtilityNetworkAssociationInputFromElement(e,t,n):e}_makeFieldInputFromElement(e,t,n){const{editType:s,feature:i,initialFeature:o,layer:r,timeZone:a}=t,{fieldName:l}=e,u=l&&this._layerFieldsByName.get(l);return u?new H({editType:s,element:e,field:u,value:i?.getAttribute(e.fieldName)??null,feature:i,initialFeature:o,layer:r,group:n,preservesValueWhenHidden:this.formTemplate?.preserveFieldValuesWhenHidden,timeZone:a}):null}_makeRelationshipInputFromElement(e,t,n=null){const{map:s}=this,{feature:i,layer:o,timeZone:r}=t,a=new W({element:e,feature:i,group:n,layer:o,map:s,timeZone:r});return a.addHandles(c(()=>a.relatedLayer,"edits",()=>this._evaluateExpressions(e=>e.evaluateAsyncExpressions()))),a}async _makeUtilityNetworkAssociationInputFromElement(e,t,n=null){const{map:s}=this,{feature:i,layer:o,timeZone:r}=t;return new(0,(await import("./UtilityNetworkAssociationInput.js")).default)({element:e,feature:i,group:n,layer:o,map:s,timeZone:r})}_assignExpressionExecutors(e,t,n){const s=z[t.type],i=[];for(const o of s){const s=`${o}Executor`;if(e[s]){this._useExecutor(e[s]);continue}const r=t[o];if(null!=r&&""!==r){const t=this._expressionInfosLookup.get(r)?.expression??r;i.push(this._getOrCreateExecutorForExpression(t,n).then(t=>{e[s]=this._useExecutor(t)}))}}return R(e)&&i.push(...this._assignTextElementExpressionExecutors(e,n)),i}_assignTextElementExpressionExecutors(e,t){const{_expressionInfosLookup:n}=this,s=[];for(const o of e.expressionsUsed){const r=n.get(o);null!=r?s.push(this._getOrCreateExecutorForExpression(r.expression,t).then(t=>e.setExpressionExecutor(o,this._useExecutor(t)))):i.getLogger(this).error("feature-form:expression-not-found",`Could not find expressionInfo object with name '${o}'`)}for(const i of e.fieldsUsed){const n=`return $feature['${i}'];`;s.push(this._getOrCreateExecutorForExpression(n,t).then(t=>e.setFieldExecutor(i,this._useExecutor(t))))}return s}async _getOrCreateExecutorForExpression(e,t){const{_expressionExecutorLookup:n}=this;if(n.has(e))return n.get(e);if(t.has(e))return t.get(e);const s=$(e,this.layer);t.set(e,s);const i=await s;return n.set(e,i),i}_createExpressionsManager(e){const{_arcadeContextInfo:t,_featureClone:n,allFieldInputs:s,formTemplate:i}=this;this._expressionsManager=new P({executors:e,feature:n,arcadeContextInfo:t,fieldInputs:s,preserveFieldValuesWhenHidden:!0===i?.preserveFieldValuesWhenHidden})}_startExpressions(){if(0===this._expressionExecutorsInUse.size)return;const e=Array.from(this._expressionExecutorsInUse);this._createExpressionsManager(e),this._evaluateExpressions(e=>e.evaluateAll())}_stopExpressions(){this._expressionsManager=o(this._expressionsManager),this._expressionExecutorsInUse.clear()}_useExecutor(e){return this._expressionExecutorsInUse.add(e),e}_afterValueChange(e){const{name:t,value:n}=e,{_featureClone:s,formTemplate:i,layer:o}=this;if(!o)return;const r=s.getAttribute(t);s.setAttribute(t,n);const{typeFieldName:a,types:l}=U(o);if((e.isSubtypeField||t===a)&&n!==r){if("subtype-sublayer"===o.type){const e=o.parent?.findSublayerForFeature(s);e&&(this.feature&&(this.feature.sourceLayer=e),s.sourceLayer=e,this._initialFeature.sourceLayer=e)}const e=new Set;for(const t of l)if(t.domains&&"object"==typeof t.domains)for(const n of Object.keys(t.domains))e.add(n);for(const t of e){const e=this.findField(t);e&&e.notifyChange("domain")}this.notifyChange("joinedContingentValues")}if(null!=i){const{description:e,title:n}=i;n&&h(n,t)&&this.notifyChange("formTitle"),e&&h(e,t)&&this.notifyChange("formDescription")}this._emitChangeEvent(e)}_afterExpressionsEvaluated(){const{_featureClone:e}=this;for(const t of this.allFieldInputs)t.value!==e.getAttribute(t.name)&&this._afterValueChange(t)}_joinContingentValues(){const e=this._contingentValuesCache;if(null==e)return[];const{typeFieldName:t}=U(this.layer),n=t?this.getValue(t):null,s=[];for(const r of e.fieldGroups){const{contingencies:e,fields:t,name:i}=r,o=[];for(const s of e)s.isRetired||null!=s.subtype&&s.subtype.code!==n||o.push({values:s.values});o.length>0&&s.push({name:i,fields:t,contingencies:o})}const[i,o]=this._generateJoinPlan(s);return[...i.flatMap(e=>this._joinFieldGroupContingencies(e)),...o.flatMap(e=>e.contingencies)]}_generateJoinPlan(e){const t=new Map,n=[],s=new Set;for(const l of e)for(const e of l.fields)if(t.has(e)){const i=t.get(e),o=l,r=[i.name,o.name].sort().join("|");if(s.has(r))continue;n.push([i,o]),s.add(r),t.set(e,o)}else t.set(e,l);const i=new Set(n.flat()),o=new Set(e);for(const l of i)o.delete(l);const r=new Map,a=new Map;for(const l of new Set(n.flat())){const e=Symbol(l.name);r.set(e,new Set([l])),a.set(l,e)}for(const[l,u]of n){const e=a.get(l),t=a.get(u);if(e===t)continue;const n=r.get(e),s=r.get(t);for(const i of s)n.add(i),a.set(i,e);r.delete(t)}return[[...r.values()].map(e=>[...e]),[...o]]}_joinFieldGroupContingencies(e){const t=e.slice(),n=t.shift();let s=t.shift(),i=this._generateJoinKey(n.fields,s.fields),o=new Set([...n.fields,...s.fields]),r=new Map;for(const l of n.contingencies){const[e]=this._hashContingency(l,i.codedValueFields,!0);r.has(e)?r.get(e)?.push(l):r.set(e,[l])}for(;t.length>0;){const e=new Map,n=t.shift(),a=this._generateJoinKey(o,n.fields);for(const t of s.contingencies){const[n,s]=this._hashContingency(t,i.codedValueFields),o=s?this._findMatchingContingenciesWithAnyHashMask(r,n):r.get(n);if(r.has(B)&&o?.push(...this._findMatchingContingenciesContainingAny(t,r.get(B),i.codedValueFields)),null!=o)for(const r of o){const n=i.rangeFields.length>0?this._joinContingenciesWithRangeDomains(r,t,i.rangeFields):this._joinContingencies(r,t);if(null==n)break;const[s]=this._hashContingency(n,a.codedValueFields,!0);e.has(s)?e.get(s)?.push(n):e.set(s,[n])}}r=e,s=n,i=a,o=new Set([...o,...s.fields])}const a=[];for(const l of s.contingencies){const[e,t]=this._hashContingency(l,i.codedValueFields),n=t?this._findMatchingContingenciesWithAnyHashMask(r,e):r.get(e);if(r.has(B)&&n.push(...this._findMatchingContingenciesContainingAny(l,r.get(B),i.codedValueFields)),null!=n)for(const s of n){const e=i.rangeFields.length>0?this._joinContingenciesWithRangeDomains(s,l,i.rangeFields):this._joinContingencies(s,l);null!=e&&a.push(e)}}return a}_joinContingencies(e,t){const n={values:{...e.values,...t.values}};for(const[s,i]of Object.entries(n.values))"any"===i.objectType&&null!=e.values[s]&&(n.values[s]=e.values[s]);return n}_joinContingenciesWithRangeDomains(e,t,n){const s=this._joinContingencies(e,t);for(const i of n){const n=e.values[i],o=t.values[i],{leftIsNull:r,rightIsNull:a,bothAreNull:l,leftIsAny:u,rightIsAny:p,bothAreAny:c,leftIsRange:h,rightIsRange:d}=this._compareObjectTypes(n.objectType,o.objectType);if(l||c)continue;if(r&&p||a&&u){s.values[i]=new E({objectType:"null"});continue}if(r&&d||a&&h)return null;u?(n.minValue=-1/0,n.maxValue=1/0):p&&(o.minValue=-1/0,o.maxValue=1/0);const f=Math.max(n.minValue,o.minValue),m=Math.min(n.maxValue,o.maxValue);if(f>m)return null;s.values[i]=new E({objectType:"range",minValue:f,maxValue:m})}return s}_findMatchingContingenciesContainingAny(e,t,n){return t.filter(t=>n.every(n=>{const s=t.values[n],i=e.values[n];return"any"===s.objectType||"any"===i.objectType||s.codedValue?.code===i.codedValue?.code}))}_findMatchingContingenciesWithAnyHashMask(e,t){const n=new RegExp(`${t}$`),s=[];for(const[i,o]of e){if(i===B)break;n.test(i)&&s.push(...o)}return s}_generateJoinKey(e,t){const n=Array.isArray(e)?new Set(e):e,s=Array.isArray(t)?new Set(t):t,i=n.size<s.size?n:s,o=i===n?s:n,{feature:r}=this,a=new Set,l=new Set;for(const u of i)if(o.has(u)){const e=this.layer?.getFieldDomain(u,{feature:r??void 0,excludeImpliedDomains:!0});if(null==e)continue;switch(e.type){case"coded-value":a.add(u);break;case"range":l.add(u)}}return{codedValueFields:[...a],rangeFields:[...l]}}_contingencyIsValid(e,t){const n={};for(const{name:s,value:i}of this.allFieldInputs)this.fieldsWithContingentValues.has(s)&&null!=i&&s!==e&&(n[s]=i);return Object.entries(n).every(([e,n])=>!t.values.hasOwnProperty(e)||Z(n,t.values[e]))}_getContingentValueOptionsForField(e,t){const n=this.joinedContingentValues.slice(),s=new Map,i={code:"",name:t??"No value"};for(const o of n){const t=o.values[e];if("code"===t?.objectType||"null"===t?.objectType){const{code:n,name:r}=t.codedValue&&"null"!==t.objectType?t.codedValue:i;!s.has(n)&&this._contingencyIsValid(e,o)&&s.set(n,{name:r,value:n})}}return[...s.values()]}_hashContingency(e,t,n=!1){if(t.length<1)return[J,!1];const s=[];let i=!1;for(const o of t){const t=e.values[o];if("any"===t.objectType){if(n)return[B,!0];i=!0,s.push(`${o}:.*`)}else"null"===t.objectType?s.push(`${o}:${K}`):s.push(`${o}:${t.codedValue?.code}`)}return[s.sort().join("&"),i]}_compareObjectTypes(e,t){return{leftIsNull:"null"===e,rightIsNull:"null"===t,bothAreNull:"null"===e&&"null"===t,leftIsAny:"any"===e,rightIsAny:"any"===t,bothAreAny:"any"===e&&"any"===t,leftIsRange:"range"===e,rightIsRange:"range"===t}}_isSupportedElement(e){return"field"===e.type||"group"===e.type||"relationship"===e.type||"text"===e.type||"utilityNetworkAssociations"===e.type||(i.getLogger(this).warn("form-info::unsupported-element-type","Only element types 'field', 'group' and 'relationship' are supported",`Element ${e.label} has unsupported type '${e.type}'`),!1)}get test(){return{featureClone:this._featureClone}}};function q(e,t){const{feature:n,layer:s}=t;return new O({element:e,inputs:[],feature:n,layer:s})}function Q(e,t,n=null){const{feature:s,layer:i,timeZone:o}=t;return new G({element:e,feature:s,group:n,layer:i,timeZone:o})}e([d()],Y.prototype,"_expressionInfosLookup",null),e([d()],Y.prototype,"_featureClone",void 0),e([d()],Y.prototype,"_initialFeature",void 0),e([d()],Y.prototype,"_timeZone",void 0),e([d({type:b})],Y.prototype,"activeAssociation",void 0),e([d()],Y.prototype,"activeAssociationInput",null),e([d()],Y.prototype,"activeAssociationsInput",null),e([d()],Y.prototype,"activeRelationshipInput",null),e([d()],Y.prototype,"_arcadeContextInfo",null),e([d()],Y.prototype,"activeAssociationType",null),e([d()],Y.prototype,"associationId",null),e([d()],Y.prototype,"associatedLayer",null),e([d()],Y.prototype,"allAssociationInputs",null),e([d()],Y.prototype,"allFieldInputs",null),e([d()],Y.prototype,"allGroupInputs",null),e([d()],Y.prototype,"allRelationshipInputs",null),e([d()],Y.prototype,"_layerFieldsByName",null),e([d()],Y.prototype,"editType",void 0),e([d()],Y.prototype,"contingencyConstraintViolations",void 0),e([d()],Y.prototype,"disabled",void 0),e([d()],Y.prototype,"feature",null),e([d()],Y.prototype,"fieldsWithContingentValues",null),e([d({type:y})],Y.prototype,"formTemplate",null),e([d()],Y.prototype,"formDescription",null),e([d()],Y.prototype,"formTitle",null),e([d()],Y.prototype,"formHeaderVisible",null),e([d()],Y.prototype,"highlightHelper",void 0),e([d()],Y.prototype,"inputs",void 0),e([d()],Y.prototype,"joinedContingentValues",null),e([d()],Y.prototype,"layer",null),e([d()],Y.prototype,"map",void 0),e([d()],Y.prototype,"callbacks",void 0),e([d()],Y.prototype,"relationshipId",null),e([d()],Y.prototype,"spatialReference",null),e([d()],Y.prototype,"state",null),e([d()],Y.prototype,"strict",void 0),e([d()],Y.prototype,"submittable",null),e([d()],Y.prototype,"timeZone",null),e([d()],Y.prototype,"updating",null),e([d()],Y.prototype,"valid",null),e([d()],Y.prototype,"pendingSubtypeChoice",void 0),e([d()],Y.prototype,"getValues",null),e([d()],Y.prototype,"submit",null),e([d()],Y.prototype,"test",null),Y=e([f("esri.widgets.FeatureForm.FeatureFormViewModel")],Y);const X=Y;export{X as default};
|
package/widgets/FeatureForm.d.ts
CHANGED
|
@@ -18,9 +18,12 @@ export interface FeatureFormProperties extends WidgetProperties, Partial<Pick<Fe
|
|
|
18
18
|
*
|
|
19
19
|
* The [FormTemplate](https://developers.arcgis.com/javascript/latest/references/core/form/FormTemplate/) is used to configure how the form should display and set any associated properties for the form, e.g. title, description, field elements, etc.
|
|
20
20
|
*
|
|
21
|
+
* * > [!NOTE]
|
|
22
|
+
* >
|
|
23
|
+
* > It is recommended to set the `formTemplate` property on the layer itself so that it can be accessed by other widgets and components that also reference the same layer, such as the [Editor](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-editor/). In addition, it can also be set on the [Editor's `layerInfo`](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-editor/#layerInfos/). If a template is set on the `layerInfo`, it will take precedence over a template set directly on the layer.
|
|
24
|
+
*
|
|
21
25
|
* @since 4.16
|
|
22
26
|
* @see [Sample - Update Feature Attributes](https://developers.arcgis.com/javascript/latest/sample-code/editing-groupedfeatureform/)
|
|
23
|
-
* @see [Sample - Advanced Attribute Editing](https://developers.arcgis.com/javascript/latest/sample-code/editing-featureform-fieldvisibility/)
|
|
24
27
|
* @example
|
|
25
28
|
* // Create the Form template and pass in elements
|
|
26
29
|
* const formTemplate = new FormTemplate({
|
|
@@ -32,8 +35,7 @@ export interface FeatureFormProperties extends WidgetProperties, Partial<Pick<Fe
|
|
|
32
35
|
* // Add a new feature form with grouped fields
|
|
33
36
|
* const form = new FeatureForm({
|
|
34
37
|
* container: "form",
|
|
35
|
-
* groupDisplay: "sequential"
|
|
36
|
-
* formTemplate: formTemplate // set it to template created above
|
|
38
|
+
* groupDisplay: "sequential" // only display one group at a time
|
|
37
39
|
* });
|
|
38
40
|
*/
|
|
39
41
|
formTemplate?: FormTemplateProperties | null;
|
|
@@ -87,15 +89,12 @@ export interface FeatureFormEvents extends FeatureFormViewModelEvents {}
|
|
|
87
89
|
* >
|
|
88
90
|
* > **Known Limitations**
|
|
89
91
|
* >
|
|
90
|
-
* >
|
|
91
|
-
* > [
|
|
92
|
-
* > widget. There is currently no support for editing attachments or related records solely within this widget, although it is possible to edit attachments and relationship data via the [Editor](https://developers.arcgis.com/javascript/latest/references/core/widgets/Editor/) widget. Please refer to the [Editor](https://developers.arcgis.com/javascript/latest/references/core/widgets/Editor/) documentation for any known limitations regarding this.
|
|
92
|
+
* > * There is currently no support for editing attachments or related records through [FeatureForm](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-feature-form/), although it is possible to edit attachments and relationship data via the [Editor](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-editor/).
|
|
93
|
+
* > * Please refer to the [Editor](https://developers.arcgis.com/javascript/latest/references/core/widgets/Editor/) documentation for any known limitations regarding this.
|
|
93
94
|
*
|
|
94
95
|
* @deprecated since version 5.0. Use the [Feature Form](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-feature-form/) component instead. For information on widget deprecation, read about [Esri's move to web components](https://developers.arcgis.com/javascript/latest/components-transition-plan/).
|
|
95
96
|
* @since 4.9
|
|
96
97
|
* @see [Sample - Update Feature Attributes](https://developers.arcgis.com/javascript/latest/sample-code/editing-groupedfeatureform/)
|
|
97
|
-
* @see [Sample - Update FeatureLayer using ApplyEdits](https://developers.arcgis.com/javascript/latest/sample-code/editing-applyedits/)
|
|
98
|
-
* @see [Sample - Advanced Attribute Editing](https://developers.arcgis.com/javascript/latest/sample-code/editing-featureform-fieldvisibility/)
|
|
99
98
|
* @see [FeatureFormViewModel](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureForm/FeatureFormViewModel/)
|
|
100
99
|
* @see [FormTemplate](https://developers.arcgis.com/javascript/latest/references/core/form/FormTemplate/)
|
|
101
100
|
* @see [DefaultUI](https://developers.arcgis.com/javascript/latest/references/core/views/ui/DefaultUI/)
|
|
@@ -105,8 +104,7 @@ export interface FeatureFormEvents extends FeatureFormViewModelEvents {}
|
|
|
105
104
|
* const featureForm = new FeatureForm({
|
|
106
105
|
* container: "formDiv",
|
|
107
106
|
* map: map, // Required if using Arcade expressions that use the global $map variable
|
|
108
|
-
* feature: graphic
|
|
109
|
-
* formTemplate: template
|
|
107
|
+
* feature: graphic
|
|
110
108
|
* });
|
|
111
109
|
*/
|
|
112
110
|
export default class FeatureForm extends Widget {
|
|
@@ -122,9 +120,7 @@ export default class FeatureForm extends Widget {
|
|
|
122
120
|
* const featureForm = new FeatureForm({
|
|
123
121
|
* container: "formDiv", // HTML div
|
|
124
122
|
* map: map, // Required if using Arcade expressions that use the global $map variable
|
|
125
|
-
* feature: graphic
|
|
126
|
-
* // Specify the form's template for how it is configured
|
|
127
|
-
* formTemplate: template
|
|
123
|
+
* feature: graphic // Pass in feature
|
|
128
124
|
* });
|
|
129
125
|
*/
|
|
130
126
|
constructor(properties?: FeatureFormProperties);
|
|
@@ -158,9 +154,12 @@ export default class FeatureForm extends Widget {
|
|
|
158
154
|
*
|
|
159
155
|
* The [FormTemplate](https://developers.arcgis.com/javascript/latest/references/core/form/FormTemplate/) is used to configure how the form should display and set any associated properties for the form, e.g. title, description, field elements, etc.
|
|
160
156
|
*
|
|
157
|
+
* * > [!NOTE]
|
|
158
|
+
* >
|
|
159
|
+
* > It is recommended to set the `formTemplate` property on the layer itself so that it can be accessed by other widgets and components that also reference the same layer, such as the [Editor](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-editor/). In addition, it can also be set on the [Editor's `layerInfo`](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-editor/#layerInfos/). If a template is set on the `layerInfo`, it will take precedence over a template set directly on the layer.
|
|
160
|
+
*
|
|
161
161
|
* @since 4.16
|
|
162
162
|
* @see [Sample - Update Feature Attributes](https://developers.arcgis.com/javascript/latest/sample-code/editing-groupedfeatureform/)
|
|
163
|
-
* @see [Sample - Advanced Attribute Editing](https://developers.arcgis.com/javascript/latest/sample-code/editing-featureform-fieldvisibility/)
|
|
164
163
|
* @example
|
|
165
164
|
* // Create the Form template and pass in elements
|
|
166
165
|
* const formTemplate = new FormTemplate({
|
|
@@ -172,8 +171,7 @@ export default class FeatureForm extends Widget {
|
|
|
172
171
|
* // Add a new feature form with grouped fields
|
|
173
172
|
* const form = new FeatureForm({
|
|
174
173
|
* container: "form",
|
|
175
|
-
* groupDisplay: "sequential"
|
|
176
|
-
* formTemplate: formTemplate // set it to template created above
|
|
174
|
+
* groupDisplay: "sequential" // only display one group at a time
|
|
177
175
|
* });
|
|
178
176
|
*/
|
|
179
177
|
get formTemplate(): FormTemplate | null | undefined;
|
|
@@ -20,6 +20,7 @@ import type { FieldValue } from "../../layers/support/fieldUtils.js";
|
|
|
20
20
|
import type { TimeZone } from "../../time/types.js";
|
|
21
21
|
import type { MapViewOrSceneView } from "../../views/MapViewOrSceneView.js";
|
|
22
22
|
import type { ObjectId } from "../../views/types.js";
|
|
23
|
+
import type { GridViewModelProperties } from "./Grid/GridViewModel.js";
|
|
23
24
|
import type { DiscardPendingEditsParameters, FeatureStoreEdits, FeatureTableState, GridMultiSortPriority, GridSupportedColumns, TableInteractionCellClickEvent, TableInteractionCellDblclickEvent, TableInteractionCellKeydownEvent, TableInteractionCellPointeroverEvent, TableInteractionColumnReorderEvent, TableInteractionCellPointeroutEvent, TableMenuConfig } from "./Grid/types.js";
|
|
24
25
|
import type { ColumnSortOrder, FeatureTableSupportedColumn as SupportedColumn, FeatureTableSupportedFilters as SupportedFilters, FeatureTableSupportedLayer, ActionColumnConfig, FeatureStoreItem } from "./support/types.js";
|
|
25
26
|
import type { AttributeTableTemplateProperties } from "../../tables/AttributeTableTemplate.js";
|
|
@@ -32,7 +33,7 @@ import type { ExtentProperties } from "../../geometry/Extent.js";
|
|
|
32
33
|
import type { TableTemplateProperties } from "./support/TableTemplate.js";
|
|
33
34
|
import type { TimeExtentProperties } from "../../time/TimeExtent.js";
|
|
34
35
|
|
|
35
|
-
export interface FeatureTableViewModelProperties extends Partial<Pick<FeatureTableViewModel, "actionColumnConfig" | "attachmentsEnabled" | "autoRefreshEnabled" | "autoSaveEnabled" | "columnPerformanceModeEnabled" | "columnReorderingEnabled" | "definitionExpression" | "editingEnabled" | "filterByLayerScaleRange" | "filterBySelectionEnabled" | "filterByViewExtent" | "highlightEnabled" | "initialSize" | "layer" | "layers" | "maxSize" | "menuConfig" | "multipleSelectionEnabled" | "multipleSortPriority" | "multiSortEnabled" | "outFields" | "pageIndex" | "pageSize" | "paginationEnabled" | "relatedRecordsEnabled" | "returnGeometryEnabled" | "returnMEnabled" | "returnZEnabled" | "selectionManager" | "syncTemplateOnChangesEnabled" | "syncViewSelection" | "tableController" | "tableParent" | "timeZone" | "view">> {
|
|
36
|
+
export interface FeatureTableViewModelProperties extends GridViewModelProperties, Partial<Pick<FeatureTableViewModel, "actionColumnConfig" | "attachmentsEnabled" | "autoRefreshEnabled" | "autoSaveEnabled" | "columnPerformanceModeEnabled" | "columnReorderingEnabled" | "definitionExpression" | "editingEnabled" | "filterByLayerScaleRange" | "filterBySelectionEnabled" | "filterByViewExtent" | "highlightEnabled" | "initialSize" | "layer" | "layers" | "maxSize" | "menuConfig" | "multipleSelectionEnabled" | "multipleSortPriority" | "multiSortEnabled" | "outFields" | "pageIndex" | "pageSize" | "paginationEnabled" | "relatedRecordsEnabled" | "returnGeometryEnabled" | "returnMEnabled" | "returnZEnabled" | "selectionManager" | "syncTemplateOnChangesEnabled" | "syncViewSelection" | "tableController" | "tableParent" | "timeZone" | "view">> {
|
|
36
37
|
/**
|
|
37
38
|
* Use this property to configure how columns display within the table in regard to visibility, column order, and sorting.
|
|
38
39
|
*
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
|
|
2
|
-
import{__decorate as e}from"tslib";import"@vaadin/grid/vaadin-grid.js";import"@vaadin/grid/vaadin-grid-column-group.js";import"@vaadin/grid/vaadin-grid-selection-column.js";import"@vaadin/grid/vaadin-grid-sorter.js";import{isSome as t}from"../../../core/arrayUtils.js";import{on as i}from"../../../core/events.js";import{assertIsSome as r}from"../../../core/maybe.js";import{on as o,sync as n,watch as l}from"../../../core/reactiveUtils.js";import{renderingSanitizer as s}from"../../../core/sanitizerUtils.js";import{property as d,subclass as a}from"../../../core/accessorSupport/decorators.js";import h from"../../Widget.js";import u from"./GridViewModel.js";import{globalCss as g}from"../../support/globalCss.js";import{messageBundle as m,tsx as c}from"../../support/widget.js";const p="esri-grid",v={base:p,content:`${p}__content`,grid:`${p}__grid`,noDataMessage:`${p}__no-data-message`},_={sort:["Enter"," "]};let f=class extends h{constructor(e,t){super(e,t),this._columnElements=[],this._grid=null,this.itemIdPath="objectId",this.messages=null,this.selectionColumnEnabled=!0,this.viewModel=new u,this._onSelectedItemsChange=this._onSelectedItemsChange.bind(this)}initialize(){this.addHandles([this.columns.on("before-changes",()=>this.renderNow()),this.columns.on("change",()=>this.onColumnChange()),o(()=>this.highlightIds,"before-add",({target:e})=>{!this.effectiveMultipleSelectionEnabled&&e.length&&e.removeAll()},n),this.rowHighlightIds.on("change",()=>this.generateCellPartNames()),l(()=>this.effectiveSize,()=>this._updateGridSize()),l(()=>[this.isEditing,this.store?.hasPendingEdits],()=>{this.generateCellPartNames(),this.requestContentUpdate()}),l(()=>this.store?.state,(e,t)=>{"ready"!==e||"loaded"!==t&&"error"!==t||this.refreshPageCache()}),o(()=>this._table,"scroll",()=>this.viewModel.closeColumnMenus()),i(window,"resize",()=>this._updateColumnBorderStyles()),o(()=>this._table,"scrollend",()=>{this.paginationEnabled||(this.pageIndex=this.getVirtualPageIndex()),this._updateColumnBorderStyles()}),l(()=>this.effectiveMultipleSelectionEnabled,e=>{!e&&this.highlightIds.length>1&&this.highlightIds.removeAll()},n)])}destroy(){this.resetColumns(),this.columns.destroyed||this.columns.destroy()}resetColumns(){this.columns.drain(e=>!e.destroyed&&e.destroy())}get _columnRendering(){return this.columnPerformanceModeEnabled?"lazy":"eager"}get _selectedItems(){const{highlightIds:e,store:t}=this;return e.toArray().map(e=>t?.getItemByObjectId(e)??{objectId:e})}get _gridIsDisabled(){return 0===this.viewModel.allVisibleColumns.length||this.hasInvalidColumnConfiguration}get _noDataMessage(){return s.sanitize(this.noDataMessage)}get _table(){return this._grid?.$?.table}get cellPartNameGenerator(){return this.viewModel.cellPartNameGenerator}set cellPartNameGenerator(e){this.viewModel.cellPartNameGenerator=e}get columns(){return this.viewModel.columns}set columns(e){this.viewModel.columns=e}get columnPerformanceModeEnabled(){return this.viewModel.columnPerformanceModeEnabled}set columnPerformanceModeEnabled(e){this.viewModel.columnPerformanceModeEnabled=e}get columnReorderingEnabled(){return this.viewModel.columnReorderingEnabled}set columnReorderingEnabled(e){this.viewModel.columnReorderingEnabled=e}get dataProvider(){return this.viewModel.dataProvider}set dataProvider(e){this.viewModel.dataProvider=e}get editingEnabled(){return this.viewModel.editingEnabled}set editingEnabled(e){this.viewModel.editingEnabled=e}get effectiveMultipleSelectionEnabled(){return this.viewModel.effectiveMultipleSelectionEnabled}get effectiveSize(){return this.viewModel.effectiveSize}get groupColumns(){return this.viewModel.groupColumns}get hasInvalidColumnConfiguration(){return this.viewModel.hasInvalidColumnConfiguration}get highlightIds(){return this.viewModel.highlightIds}set highlightIds(e){this.viewModel.highlightIds=e}get temporaryHighlightId(){return this.viewModel.temporaryHighlightId}set temporaryHighlightId(e){this.viewModel.temporaryHighlightId=e}get isEditing(){return this.viewModel.isEditing}get isReady(){return!!this._grid}get label(){return this.messages?.widgetLabel??""}set label(e){this._overrideIfSome("label",e)}get multipleSelectionEnabled(){return this.viewModel.multipleSelectionEnabled}set multipleSelectionEnabled(e){this.viewModel.multipleSelectionEnabled=e}get multipleSelectionEnabledOverride(){return this.viewModel.multipleSelectionEnabledOverride}set multipleSelectionEnabledOverride(e){this.viewModel.multipleSelectionEnabledOverride=e}get multiSortEnabled(){return this.viewModel.multiSortEnabled}set multiSortEnabled(e){this.viewModel.multiSortEnabled=e}get noDataMessage(){return this.viewModel.noDataMessage}set noDataMessage(e){this.viewModel.noDataMessage=e}get pageIndex(){return this.viewModel.pageIndex}set pageIndex(e){this.viewModel.pageIndex=e}get multipleSortPriority(){return this.viewModel.multipleSortPriority}set multipleSortPriority(e){this.viewModel.multipleSortPriority=e}get pageSize(){return this.viewModel.pageSize}set pageSize(e){this.viewModel.pageSize=e}get paginationEnabled(){return this.viewModel.paginationEnabled}set paginationEnabled(e){this.viewModel.paginationEnabled=e}get rowDetailsRenderer(){return this.viewModel.rowDetailsRenderer}set rowDetailsRenderer(e){this.viewModel.rowDetailsRenderer=e}get rowHighlightIds(){return this.viewModel.rowHighlightIds}set rowHighlightIds(e){this.viewModel.rowHighlightIds=e}get size(){return this.viewModel.size}get sortOrders(){return this._grid?._sorters?this._grid._sorters.filter(e=>!!e&&e.path).map(({direction:e,path:t})=>({direction:e,path:t})):[]}get store(){return this.viewModel.store}get state(){return this.viewModel.state}addSorter(e){this._grid?.__updateSorter(e,!1,!1),this.notifyChange("sortOrders")}getColumnProps(e,t){const{id:i}=this,{autoWidth:r,direction:o,fieldName:n,flexGrow:l,frozen:s,frozenToEnd:d,hidden:a,label:h,resizable:u,textAlign:g,width:m}=e,c=`${i}_${n}_${t}`,{renderFunction:p,footerRenderFunction:v,headerRenderFunction:_}=e,f=v?(e,t)=>v({root:e,column:t}):void 0,y=_?(e,t)=>_({root:e,column:t}):void 0,C=p?(e,t,i)=>p({root:e,column:t,rowData:i}):void 0;let b="";return e.direction&&(b+=" direction"),e.invalid&&(b+=" invalid"),{footerRenderer:f,headerRenderer:y,renderer:C,autoWidth:r,direction:o,flexGrow:l,frozen:s,frozenToEnd:d,headerPartName:b,key:c,resizable:u,bind:this,"data-fieldName":n,header:h,hidden:this.hasInvalidColumnConfiguration||a,path:n,"text-align":g,width:"number"==typeof m?`${m}px`:m,afterCreate:this._afterColumnCreate,afterRemoved:this._afterColumnRemoved}}clearSelection(){this._clearSelection(),this.scheduleRender()}clearSort(){let e=!1;if(this._grid){if(this._grid._sorters?.length&&(this._grid._sorters.forEach(e=>{e._order=null,e.direction=null}),e=!0),this.columns.length){this.columns.some(e=>!!e.direction)&&(this.columns.forEach(e=>e.direction=null),e=!0)}e&&(this.notifyChange("sortOrders"),this.scheduleRender())}}findColumn(e){return this.viewModel.findColumn(e)}generateCellPartNames(){this._grid?.generateCellPartNames()}getFirstVisibleRowIndex(){return this._grid?._firstVisibleIndex||0}getVirtualPageIndex(){return Math.floor(this.getFirstVisibleRowIndex()/this.pageSize)}getLastVisibleRowIndex(){return this._grid?._lastVisibleIndex||0}getVisibleItemsCount(){return this._grid?._visibleItemsCount||0}getRowContainingNode(e){try{return this._grid?._getRowContainingNode(e)}catch{return null}}getSlotElementByName(e){return this._grid?.shadowRoot?.querySelector(`slot[name='${e}']`)??null}hasSorter(e){return this._grid?._sorters?.includes(e)||!1}hideColumn(e){this.viewModel.hideColumn(e)}recalculateColumnWidths(){this._grid?.recalculateColumnWidths()}async reset(){this._clearSelection(),this.store?.reset(),this.scrollToTop()}refreshPageCache(){this._grid?.clearCache(),this.temporaryHighlightId=void 0}requestContentUpdate(){this._grid?.requestContentUpdate(),this.temporaryHighlightId=void 0}selectRows(e){const{itemIdPath:t}=this,i=e?.filter(e=>!this.highlightIds.includes(e[t])),r=i.map(e=>e[t]);r.length&&(this.effectiveMultipleSelectionEnabled||(this.highlightIds.removeAll(),r.splice(1)),this.highlightIds.addMany(r))}deselectRows(e){const{itemIdPath:t}=this,i=e?.map(e=>e[t])||[];i.length&&this.highlightIds.removeMany(i)}showColumn(e){this.viewModel.showColumn(e)}sort({path:e,direction:t}){this.viewModel.sortColumn(e,t),this.notifyChange("sortOrders")}scrollToIndex(e){0!==this.size&&(this._grid?.isConnected&&this._grid?.scrollToIndex(e),this.temporaryHighlightId=void 0)}scrollToTop(){this.scrollToIndex(0)}scrollToBottom(){this.scrollToIndex(1/0)}scrollLeft(e){const{_table:t}=this;t&&(t.scrollLeft=e)}toggleColumnVisibility(e){this.viewModel.toggleColumnVisibility(e)}onColumnChange(){this._columnElements.forEach(e=>this._applyRenderersToColumnElement(e)),this.requestContentUpdate()}render(){return c("div",{bind:this,class:this.classes(v.base,g.widget)},c("div",{bind:this,class:v.content},this._renderGrid()))}_renderGrid(){return c("vaadin-grid",{afterCreate:this._afterGridCreate,afterUpdate:this._afterGridUpdate,bind:this,cellPartNameGenerator:this.cellPartNameGenerator,class:v.grid,columnRendering:this._columnRendering,columnReorderingAllowed:this.columnReorderingEnabled,dataProvider:this.dataProvider,disabled:this._gridIsDisabled,id:`${this.id}_grid`,itemIdPath:this.itemIdPath,multiSort:this.multiSortEnabled,multiSortPriority:this.multipleSortPriority,pageSize:this.pageSize,ref:"grid",rowDetailsRenderer:this.rowDetailsRenderer,selectedItems:this._selectedItems,size:this.effectiveSize},this._renderAllColumns(),this._renderEmptyState())}_renderAllColumns(){return"disabled"!==this.state&&this.columns.length?[this._renderSelectionColumn(),this._renderColumns()]:null}_renderSelectionColumn(){return c("vaadin-grid-selection-column",{_selectAllHidden:!0,autoWidth:!1,bind:this,dragSelect:!0,frozen:!0,hidden:this.hasInvalidColumnConfiguration||!this.selectionColumnEnabled,selectAll:!1,sortable:!1,textAlign:"center"})}_renderColumns(){return this.columns.toArray().map((e,t)=>"columns"in e?this._renderGroupColumn(e,t):this._renderColumn(e,t)).filter(t)}_renderColumn(e,t){const i=this.getColumnProps(e,t);if(!i.hidden)return c("vaadin-grid-column",{...i})}_renderGroupColumn(e,t){const i=this.getColumnProps(e,t);return i.hidden||!e.effectiveVisible?null:c("vaadin-grid-column-group",{...i},e.visibleChildColumns.map(e=>c("vaadin-grid-column",{...this.getColumnProps(e,t)})))}_renderEmptyState(){const e=this.viewModel;if("loaded"===e.state&&!e.isQueryingOrSyncing)return c("div",{class:v.noDataMessage,slot:"empty-state"},this._noDataMessage??this.messages.noDataFound)}_afterGridCreate(e){const t=this._grid=e;customElements.whenDefined("vaadin-grid").then(()=>{this._addGridEventListeners()}),t.__updateSorter=(e,i,r)=>{const o=t._sorters,n=!o.includes(e),{multiSort:l,multiSortOnShiftClick:s,multiSortPriority:d}=t,a=o.filter(t=>t!==e),h=l&&(!s||!r)||s&&i;e._order=null,e.direction?h?null!=e._initialOrder?(n?o[e._initialOrder]=e:o.splice(e._initialOrder,0,e),e._initialOrder=null):"append"===d&&n?t._sorters=[...a,e]:"prepend"===d&&(t._sorters=[e,...a]):(e.direction||s)&&(t._sorters=e.direction?[e]:[],a.forEach(e=>{e._order=null,e.direction=null})):n||(t._sorters=[...a])},t.__removeSorters=e=>{if(0===e.length)return;const i=new Set(e.filter(e=>!e.direction));t._sorters=t._sorters.filter(e=>!i.has(e)),t.__applySorters()}}_afterGridUpdate(e){this._grid||(this._grid=e)}_afterColumnCreate(e){this._columnElements.push(e)}_afterColumnRemoved(e){const t=this._columnElements.indexOf(e,0);t>-1&&this._columnElements.splice(t,1)}_updateGridSize(){this._grid&&(this._grid.size=this.effectiveSize,this.scheduleRender())}_addGridEventListeners(){const e=this._grid;r(e),this.addHandles([i(e,["click","dblclick","keydown","pointerover","pointerout"],e=>this._onGridInteraction(e)),i(e,["pointerover","pointerout","cell-focus"],e=>this._onTransientGridInteraction(e)),i(e,"selected-items-changed",this._onSelectedItemsChange),i(e,"sorter-changed",()=>{this.notifyChange("sortOrders"),this._updateColumnBorderStyles()}),i(e,"column-resize",e=>{const t=e.detail.resizedColumn,i=t.getAttribute("data-fieldName"),r=this.findColumn(i);r?.set({width:t.width}),this._updateColumnBorderStyles()}),i(e,"column-reorder",()=>this._onColumnOrderChange())])}_onGridInteraction(e){const t=this._grid;if(r(t),("pointerover"===e.type||"pointerout"===e.type)&&e.relatedTarget!==t){const{target:t,relatedTarget:i}=e;if(!this._isGridCellContentNode(t)||!this._isGridCellContentNode(i))return}let i=null;try{i=t.getEventContext(e)}catch(a){}if(!i)return;const{column:o,index:n,item:l,section:s}=i;if(!s)return;if("header"===s&&"keydown"===e.type&&o?.path){const t=e.key;_.sort.includes(t)&&this.findColumn(o.path)?.sort()}const d=`cell-${e.type}`;this.emit(d,{type:d,context:i,index:n,item:l,native:e,path:o?.path??void 0})}_onTransientGridInteraction(e){if("pointerout"===e.type)return void(this.temporaryHighlightId=void 0);const t=this._grid;if(t)try{this.temporaryHighlightId=t.getEventContext(e)?.item?.objectId??void 0}catch{this.temporaryHighlightId=void 0}}_isGridCellContentNode(e){return!!(e&&e instanceof HTMLElement&&"vaadin-grid-cell-content"===e.localName)}_onColumnOrderChange(){const e=this._grid;r(e);const t=e._getColumnsInOrder(0),i=[],o=(this.viewModel.groupColumns.length?e._getColumnsInOrder(1):t).map(e=>e.getAttribute("data-fieldName"));t?.forEach(e=>{const t=e.getAttribute("data-fieldName");if(null!=t){const e=this.findColumn(t);i.push(t),e&&"columns"in e&&e.columns?.length&&e.columns.sort((e,t)=>o.indexOf(e.fieldName)>o.indexOf(t.fieldName)?1:-1)}}),this.columns.sort((e,t)=>i.indexOf(e.fieldName)>i.indexOf(t.fieldName)?1:-1),this.notifyChange("sortOrders"),this.emit("column-reorder",{type:"column-reorder"})}_clearSelection(){this.highlightIds.removeAll(),this.temporaryHighlightId=void 0}_onSelectedItemsChange(e){const{highlightIds:t,itemIdPath:i}=this,r=e.detail.value.map(e=>e[i]),o=r.filter(e=>!t.includes(e));if(!this.effectiveMultipleSelectionEnabled&&o.length&&t.length)t.removeAll(),t.add(o[0]);else{const e=t.filter(e=>!r.includes(e));t.removeMany(e),t.addMany(o)}}_applyRenderersToColumnElement(e){const t=e?.path,i=null!=t?this.findColumn(t):void 0;if(i)try{const{renderFunction:t,footerRenderFunction:r,headerRenderFunction:o}=i;t&&"renderer"in e&&(e.renderer=(e,i,r)=>t({root:e,column:i,rowData:r})),r&&(e.footerRenderer=(e,t)=>r({root:e,column:t})),o&&(e.headerRenderer=(e,t)=>o({root:e,column:t}))}catch(r){}}_updateColumnBorderStyles(){try{this._grid?._updateFirstAndLastColumn()}catch(e){}}};e([d()],f.prototype,"_columnElements",void 0),e([d()],f.prototype,"_columnRendering",null),e([d()],f.prototype,"_selectedItems",null),e([d()],f.prototype,"_grid",void 0),e([d()],f.prototype,"_gridIsDisabled",null),e([d()],f.prototype,"_noDataMessage",null),e([d()],f.prototype,"_table",null),e([d()],f.prototype,"cellPartNameGenerator",null),e([d()],f.prototype,"columns",null),e([d()],f.prototype,"columnPerformanceModeEnabled",null),e([d()],f.prototype,"columnReorderingEnabled",null),e([d()],f.prototype,"dataProvider",null),e([d()],f.prototype,"editingEnabled",null),e([d()],f.prototype,"effectiveMultipleSelectionEnabled",null),e([d()],f.prototype,"effectiveSize",null),e([d()],f.prototype,"groupColumns",null),e([d()],f.prototype,"hasInvalidColumnConfiguration",null),e([d()],f.prototype,"highlightIds",null),e([d()],f.prototype,"temporaryHighlightId",null),e([d()],f.prototype,"isEditing",null),e([d()],f.prototype,"isReady",null),e([d()],f.prototype,"itemIdPath",void 0),e([d()],f.prototype,"label",null),e([d(),m("esri/widgets/FeatureTable/t9n/FeatureTable")],f.prototype,"messages",void 0),e([d()],f.prototype,"multipleSelectionEnabled",null),e([d()],f.prototype,"multipleSelectionEnabledOverride",null),e([d()],f.prototype,"multiSortEnabled",null),e([d()],f.prototype,"noDataMessage",null),e([d()],f.prototype,"pageIndex",null),e([d()],f.prototype,"multipleSortPriority",null),e([d()],f.prototype,"pageSize",null),e([d()],f.prototype,"paginationEnabled",null),e([d()],f.prototype,"rowDetailsRenderer",null),e([d()],f.prototype,"rowHighlightIds",null),e([d()],f.prototype,"selectionColumnEnabled",void 0),e([d()],f.prototype,"size",null),e([d({readOnly:!0})],f.prototype,"sortOrders",null),e([d()],f.prototype,"store",null),e([d()],f.prototype,"state",null),e([d()],f.prototype,"viewModel",void 0),f=e([a("esri.widgets.FeatureTable.Grid.Grid")],f);const y=f;export{y as default};
|
|
2
|
+
import{__decorate as e}from"tslib";import"@vaadin/grid/vaadin-grid.js";import"@vaadin/grid/vaadin-grid-column-group.js";import"@vaadin/grid/vaadin-grid-selection-column.js";import"@vaadin/grid/vaadin-grid-sorter.js";import{isSome as t}from"../../../core/arrayUtils.js";import{on as i}from"../../../core/events.js";import{assertIsSome as r}from"../../../core/maybe.js";import{on as o,sync as n,watch as l}from"../../../core/reactiveUtils.js";import{renderingSanitizer as s}from"../../../core/sanitizerUtils.js";import{property as d,subclass as a}from"../../../core/accessorSupport/decorators.js";import h from"../../Widget.js";import u from"./GridViewModel.js";import{globalCss as g}from"../../support/globalCss.js";import{messageBundle as c,tsx as m}from"../../support/widget.js";const p="esri-grid",v={base:p,content:`${p}__content`,grid:`${p}__grid`,noDataMessage:`${p}__no-data-message`},_={sort:["Enter"," "]};let f=class extends h{constructor(e,t){super(e,t),this._columnElements=[],this._grid=null,this.itemIdPath="objectId",this.messages=null,this.selectionColumnEnabled=!0,this.viewModel=new u,this._onSelectedItemsChange=this._onSelectedItemsChange.bind(this)}initialize(){this.addHandles([this.columns.on("before-changes",()=>this.renderNow()),this.columns.on("change",()=>this.onColumnChange()),o(()=>this.highlightIds,"before-add",({target:e})=>{!this.effectiveMultipleSelectionEnabled&&e.length&&e.removeAll()},n),this.rowHighlightIds.on("change",()=>this.generateCellPartNames()),l(()=>this.effectiveSize,()=>this._updateGridSize()),l(()=>[this.isEditing,this.store?.hasPendingEdits],()=>{this.generateCellPartNames(),this.requestContentUpdate()}),l(()=>this.store?.state,(e,t)=>{"ready"!==e||"loaded"!==t&&"error"!==t||this.refreshPageCache()}),o(()=>this._table,"scroll",()=>this.viewModel.closeColumnMenus()),i(window,"resize",()=>this._updateColumnBorderStyles()),o(()=>this._table,"scrollend",()=>{this.paginationEnabled||(this.pageIndex=this.getVirtualPageIndex()),this._updateColumnBorderStyles()}),l(()=>this.effectiveMultipleSelectionEnabled,e=>{!e&&this.highlightIds.length>1&&this.highlightIds.removeAll()},n)])}destroy(){this.resetColumns(),this.columns.destroyed||this.columns.destroy()}resetColumns(){this.columns.drain(e=>!e.destroyed&&e.destroy())}get _columnRendering(){return this.columnPerformanceModeEnabled?"lazy":"eager"}get _selectedItems(){const{highlightIds:e,store:t}=this;return e.toArray().map(e=>t?.getItemByObjectId(e)??{objectId:e})}get _gridIsDisabled(){return 0===this.viewModel.allVisibleColumns.length||this.hasInvalidColumnConfiguration}get _noDataMessage(){return s.sanitize(this.noDataMessage)}get _table(){return this._grid?.$?.table}get cellPartNameGenerator(){return this.viewModel.cellPartNameGenerator}set cellPartNameGenerator(e){this.viewModel.cellPartNameGenerator=e}get columns(){return this.viewModel.columns}set columns(e){this.viewModel.columns=e}get columnPerformanceModeEnabled(){return this.viewModel.columnPerformanceModeEnabled}set columnPerformanceModeEnabled(e){this.viewModel.columnPerformanceModeEnabled=e}get columnReorderingEnabled(){return this.viewModel.columnReorderingEnabled}set columnReorderingEnabled(e){this.viewModel.columnReorderingEnabled=e}get dataProvider(){return this.viewModel.dataProvider}set dataProvider(e){this.viewModel.dataProvider=e}get direction(){return this.viewModel.direction}set direction(e){this.viewModel.direction=e}get editingEnabled(){return this.viewModel.editingEnabled}set editingEnabled(e){this.viewModel.editingEnabled=e}get effectiveMultipleSelectionEnabled(){return this.viewModel.effectiveMultipleSelectionEnabled}get effectiveSize(){return this.viewModel.effectiveSize}get groupColumns(){return this.viewModel.groupColumns}get hasInvalidColumnConfiguration(){return this.viewModel.hasInvalidColumnConfiguration}get highlightIds(){return this.viewModel.highlightIds}set highlightIds(e){this.viewModel.highlightIds=e}get temporaryHighlightId(){return this.viewModel.temporaryHighlightId}set temporaryHighlightId(e){this.viewModel.temporaryHighlightId=e}get isEditing(){return this.viewModel.isEditing}get isReady(){return!!this._grid}get label(){return this.messages?.widgetLabel??""}set label(e){this._overrideIfSome("label",e)}get multipleSelectionEnabled(){return this.viewModel.multipleSelectionEnabled}set multipleSelectionEnabled(e){this.viewModel.multipleSelectionEnabled=e}get multipleSelectionEnabledOverride(){return this.viewModel.multipleSelectionEnabledOverride}set multipleSelectionEnabledOverride(e){this.viewModel.multipleSelectionEnabledOverride=e}get multiSortEnabled(){return this.viewModel.multiSortEnabled}set multiSortEnabled(e){this.viewModel.multiSortEnabled=e}get noDataMessage(){return this.viewModel.noDataMessage}set noDataMessage(e){this.viewModel.noDataMessage=e}get pageIndex(){return this.viewModel.pageIndex}set pageIndex(e){this.viewModel.pageIndex=e}get multipleSortPriority(){return this.viewModel.multipleSortPriority}set multipleSortPriority(e){this.viewModel.multipleSortPriority=e}get pageSize(){return this.viewModel.pageSize}set pageSize(e){this.viewModel.pageSize=e}get paginationEnabled(){return this.viewModel.paginationEnabled}set paginationEnabled(e){this.viewModel.paginationEnabled=e}get rowDetailsRenderer(){return this.viewModel.rowDetailsRenderer}set rowDetailsRenderer(e){this.viewModel.rowDetailsRenderer=e}get rowHighlightIds(){return this.viewModel.rowHighlightIds}set rowHighlightIds(e){this.viewModel.rowHighlightIds=e}get size(){return this.viewModel.size}get sortOrders(){return this._grid?._sorters?this._grid._sorters.filter(e=>!!e&&e.path).map(({direction:e,path:t})=>({direction:e,path:t})):[]}get store(){return this.viewModel.store}get state(){return this.viewModel.state}addSorter(e){this._grid?.__updateSorter(e,!1,!1),this.notifyChange("sortOrders")}getColumnProps(e,t){const{id:i}=this,{autoWidth:r,direction:o,fieldName:n,flexGrow:l,frozen:s,frozenToEnd:d,hidden:a,label:h,resizable:u,textAlign:g,width:c}=e,m=`${i}_${n}_${t}`,{renderFunction:p,footerRenderFunction:v,headerRenderFunction:_}=e,f=v?(e,t)=>v({root:e,column:t}):void 0,y=_?(e,t)=>_({root:e,column:t}):void 0,C=p?(e,t,i)=>p({root:e,column:t,rowData:i}):void 0;let b="";return e.direction&&(b+=" direction"),e.invalid&&(b+=" invalid"),{footerRenderer:f,headerRenderer:y,renderer:C,autoWidth:r,direction:o,flexGrow:l,frozen:s,frozenToEnd:d,headerPartName:b,key:m,resizable:u,bind:this,"data-fieldName":n,header:h,hidden:this.hasInvalidColumnConfiguration||a,path:n,"text-align":g,width:"number"==typeof c?`${c}px`:c,afterCreate:this._afterColumnCreate,afterRemoved:this._afterColumnRemoved}}clearSelection(){this._clearSelection(),this.scheduleRender()}clearSort(){let e=!1;if(this._grid){if(this._grid._sorters?.length&&(this._grid._sorters.forEach(e=>{e._order=null,e.direction=null}),e=!0),this.columns.length){this.columns.some(e=>!!e.direction)&&(this.columns.forEach(e=>e.direction=null),e=!0)}e&&(this.notifyChange("sortOrders"),this.scheduleRender())}}findColumn(e){return this.viewModel.findColumn(e)}generateCellPartNames(){this._grid?.generateCellPartNames()}getFirstVisibleRowIndex(){return this._grid?._firstVisibleIndex||0}getVirtualPageIndex(){return Math.floor(this.getFirstVisibleRowIndex()/this.pageSize)}getLastVisibleRowIndex(){return this._grid?._lastVisibleIndex||0}getVisibleItemsCount(){return this._grid?._visibleItemsCount||0}getRowContainingNode(e){try{return this._grid?._getRowContainingNode(e)}catch{return null}}getSlotElementByName(e){return this._grid?.shadowRoot?.querySelector(`slot[name='${e}']`)??null}hasSorter(e){return this._grid?._sorters?.includes(e)||!1}hideColumn(e){this.viewModel.hideColumn(e)}recalculateColumnWidths(){this._grid?.recalculateColumnWidths()}async reset(){this._clearSelection(),this.store?.reset(),this.scrollToTop()}refreshPageCache(){this._grid?.clearCache(),this.temporaryHighlightId=void 0}requestContentUpdate(){this._grid?.requestContentUpdate(),this.temporaryHighlightId=void 0}selectRows(e){const{itemIdPath:t}=this,i=e?.filter(e=>!this.highlightIds.includes(e[t])),r=i.map(e=>e[t]);r.length&&(this.effectiveMultipleSelectionEnabled||(this.highlightIds.removeAll(),r.splice(1)),this.highlightIds.addMany(r))}deselectRows(e){const{itemIdPath:t}=this,i=e?.map(e=>e[t])||[];i.length&&this.highlightIds.removeMany(i)}showColumn(e){this.viewModel.showColumn(e)}sort({path:e,direction:t}){this.viewModel.sortColumn(e,t),this.notifyChange("sortOrders")}scrollToIndex(e){0!==this.size&&(this._grid?.isConnected&&this._grid?.scrollToIndex(e),this.temporaryHighlightId=void 0)}scrollToTop(){this.scrollToIndex(0)}scrollToBottom(){this.scrollToIndex(1/0)}scrollLeft(e){const{_table:t}=this;t&&(t.scrollLeft=e)}toggleColumnVisibility(e){this.viewModel.toggleColumnVisibility(e)}onColumnChange(){this._columnElements.forEach(e=>this._applyRenderersToColumnElement(e)),this.requestContentUpdate()}render(){return m("div",{bind:this,class:this.classes(v.base,g.widget)},m("div",{bind:this,class:v.content},this._renderGrid()))}_renderGrid(){return m("vaadin-grid",{afterCreate:this._afterGridCreate,afterUpdate:this._afterGridUpdate,bind:this,cellPartNameGenerator:this.cellPartNameGenerator,class:v.grid,columnRendering:this._columnRendering,columnReorderingAllowed:this.columnReorderingEnabled,dataProvider:this.dataProvider,dir:this.direction,disabled:this._gridIsDisabled,id:`${this.id}_grid`,itemIdPath:this.itemIdPath,multiSort:this.multiSortEnabled,multiSortPriority:this.multipleSortPriority,pageSize:this.pageSize,ref:"grid",rowDetailsRenderer:this.rowDetailsRenderer,selectedItems:this._selectedItems,size:this.effectiveSize},this._renderAllColumns(),this._renderEmptyState())}_renderAllColumns(){return"disabled"!==this.state&&this.columns.length?[this._renderSelectionColumn(),this._renderColumns()]:null}_renderSelectionColumn(){return m("vaadin-grid-selection-column",{_selectAllHidden:!0,autoWidth:!1,bind:this,dragSelect:!0,frozen:!0,hidden:this.hasInvalidColumnConfiguration||!this.selectionColumnEnabled,selectAll:!1,sortable:!1,textAlign:"center"})}_renderColumns(){return this.columns.toArray().map((e,t)=>"columns"in e?this._renderGroupColumn(e,t):this._renderColumn(e,t)).filter(t)}_renderColumn(e,t){const i=this.getColumnProps(e,t);if(!i.hidden)return m("vaadin-grid-column",{...i})}_renderGroupColumn(e,t){const i=this.getColumnProps(e,t);return i.hidden||!e.effectiveVisible?null:m("vaadin-grid-column-group",{...i},e.visibleChildColumns.map(e=>m("vaadin-grid-column",{...this.getColumnProps(e,t)})))}_renderEmptyState(){const e=this.viewModel;if("loaded"===e.state&&!e.isQueryingOrSyncing)return m("div",{class:v.noDataMessage,slot:"empty-state"},this._noDataMessage??this.messages.noDataFound)}_afterGridCreate(e){const t=this._grid=e;customElements.whenDefined("vaadin-grid").then(()=>{this._addGridEventListeners()}),t.__updateSorter=(e,i,r)=>{const o=t._sorters,n=!o.includes(e),{multiSort:l,multiSortOnShiftClick:s,multiSortPriority:d}=t,a=o.filter(t=>t!==e),h=l&&(!s||!r)||s&&i;e._order=null,e.direction?h?null!=e._initialOrder?(n?o[e._initialOrder]=e:o.splice(e._initialOrder,0,e),e._initialOrder=null):"append"===d&&n?t._sorters=[...a,e]:"prepend"===d&&(t._sorters=[e,...a]):(e.direction||s)&&(t._sorters=e.direction?[e]:[],a.forEach(e=>{e._order=null,e.direction=null})):n||(t._sorters=[...a])},t.__removeSorters=e=>{if(0===e.length)return;const i=new Set(e.filter(e=>!e.direction));t._sorters=t._sorters.filter(e=>!i.has(e)),t.__applySorters()}}_afterGridUpdate(e){this._grid||(this._grid=e)}_afterColumnCreate(e){this._columnElements.push(e)}_afterColumnRemoved(e){const t=this._columnElements.indexOf(e,0);t>-1&&this._columnElements.splice(t,1)}_updateGridSize(){this._grid&&(this._grid.size=this.effectiveSize,this.scheduleRender())}_addGridEventListeners(){const e=this._grid;r(e),this.addHandles([i(e,["click","dblclick","keydown","pointerover","pointerout"],e=>this._onGridInteraction(e)),i(e,["pointerover","pointerout","cell-focus"],e=>this._onTransientGridInteraction(e)),i(e,"selected-items-changed",this._onSelectedItemsChange),i(e,"sorter-changed",()=>{this.notifyChange("sortOrders"),this._updateColumnBorderStyles()}),i(e,"column-resize",e=>{const t=e.detail.resizedColumn,i=t.getAttribute("data-fieldName"),r=this.findColumn(i);r?.set({width:t.width}),this._updateColumnBorderStyles()}),i(e,"column-reorder",()=>this._onColumnOrderChange())])}_onGridInteraction(e){const t=this._grid;if(r(t),("pointerover"===e.type||"pointerout"===e.type)&&e.relatedTarget!==t){const{target:t,relatedTarget:i}=e;if(!this._isGridCellContentNode(t)||!this._isGridCellContentNode(i))return}let i=null;try{i=t.getEventContext(e)}catch(a){}if(!i)return;const{column:o,index:n,item:l,section:s}=i;if(!s)return;if("header"===s&&"keydown"===e.type&&o?.path){const t=e.key;_.sort.includes(t)&&this.findColumn(o.path)?.sort()}const d=`cell-${e.type}`;this.emit(d,{type:d,context:i,index:n,item:l,native:e,path:o?.path??void 0})}_onTransientGridInteraction(e){if("pointerout"===e.type)return void(this.temporaryHighlightId=void 0);const t=this._grid;if(t)try{this.temporaryHighlightId=t.getEventContext(e)?.item?.objectId??void 0}catch{this.temporaryHighlightId=void 0}}_isGridCellContentNode(e){return!!(e&&e instanceof HTMLElement&&"vaadin-grid-cell-content"===e.localName)}_onColumnOrderChange(){const e=this._grid;r(e);const t=e._getColumnsInOrder(0),i=[],o=(this.viewModel.groupColumns.length?e._getColumnsInOrder(1):t).map(e=>e.getAttribute("data-fieldName"));t?.forEach(e=>{const t=e.getAttribute("data-fieldName");if(null!=t){const e=this.findColumn(t);i.push(t),e&&"columns"in e&&e.columns?.length&&e.columns.sort((e,t)=>o.indexOf(e.fieldName)>o.indexOf(t.fieldName)?1:-1)}}),this.columns.sort((e,t)=>i.indexOf(e.fieldName)>i.indexOf(t.fieldName)?1:-1),this.notifyChange("sortOrders"),this.emit("column-reorder",{type:"column-reorder"})}_clearSelection(){this.highlightIds.removeAll(),this.temporaryHighlightId=void 0}_onSelectedItemsChange(e){const{highlightIds:t,itemIdPath:i}=this,r=e.detail.value.map(e=>e[i]),o=r.filter(e=>!t.includes(e));if(!this.effectiveMultipleSelectionEnabled&&o.length&&t.length)t.removeAll(),t.add(o[0]);else{const e=t.filter(e=>!r.includes(e));t.removeMany(e),t.addMany(o)}}_applyRenderersToColumnElement(e){const t=e?.path,i=null!=t?this.findColumn(t):void 0;if(i)try{const{renderFunction:t,footerRenderFunction:r,headerRenderFunction:o}=i;t&&"renderer"in e&&(e.renderer=(e,i,r)=>t({root:e,column:i,rowData:r})),r&&(e.footerRenderer=(e,t)=>r({root:e,column:t})),o&&(e.headerRenderer=(e,t)=>o({root:e,column:t}))}catch(r){}}_updateColumnBorderStyles(){try{this._grid?._updateFirstAndLastColumn()}catch(e){}}};e([d()],f.prototype,"_columnElements",void 0),e([d()],f.prototype,"_columnRendering",null),e([d()],f.prototype,"_selectedItems",null),e([d()],f.prototype,"_grid",void 0),e([d()],f.prototype,"_gridIsDisabled",null),e([d()],f.prototype,"_noDataMessage",null),e([d()],f.prototype,"_table",null),e([d()],f.prototype,"cellPartNameGenerator",null),e([d()],f.prototype,"columns",null),e([d()],f.prototype,"columnPerformanceModeEnabled",null),e([d()],f.prototype,"columnReorderingEnabled",null),e([d()],f.prototype,"dataProvider",null),e([d()],f.prototype,"direction",null),e([d()],f.prototype,"editingEnabled",null),e([d()],f.prototype,"effectiveMultipleSelectionEnabled",null),e([d()],f.prototype,"effectiveSize",null),e([d()],f.prototype,"groupColumns",null),e([d()],f.prototype,"hasInvalidColumnConfiguration",null),e([d()],f.prototype,"highlightIds",null),e([d()],f.prototype,"temporaryHighlightId",null),e([d()],f.prototype,"isEditing",null),e([d()],f.prototype,"isReady",null),e([d()],f.prototype,"itemIdPath",void 0),e([d()],f.prototype,"label",null),e([d(),c("esri/widgets/FeatureTable/t9n/FeatureTable")],f.prototype,"messages",void 0),e([d()],f.prototype,"multipleSelectionEnabled",null),e([d()],f.prototype,"multipleSelectionEnabledOverride",null),e([d()],f.prototype,"multiSortEnabled",null),e([d()],f.prototype,"noDataMessage",null),e([d()],f.prototype,"pageIndex",null),e([d()],f.prototype,"multipleSortPriority",null),e([d()],f.prototype,"pageSize",null),e([d()],f.prototype,"paginationEnabled",null),e([d()],f.prototype,"rowDetailsRenderer",null),e([d()],f.prototype,"rowHighlightIds",null),e([d()],f.prototype,"selectionColumnEnabled",void 0),e([d()],f.prototype,"size",null),e([d({readOnly:!0})],f.prototype,"sortOrders",null),e([d()],f.prototype,"store",null),e([d()],f.prototype,"state",null),e([d()],f.prototype,"viewModel",void 0),f=e([a("esri.widgets.FeatureTable.Grid.Grid")],f);const y=f;export{y as default};
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import type { EventedAccessor } from "../../../core/Evented.js";
|
|
2
2
|
|
|
3
|
+
/** @since 5.0 */
|
|
4
|
+
export interface GridViewModelProperties {}
|
|
5
|
+
|
|
3
6
|
/**
|
|
4
7
|
* @deprecated Not for direct use. See [FeatureTableViewModel](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/FeatureTableViewModel/).
|
|
5
8
|
* @since 5.0
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
|
|
2
|
-
import{__decorate as e}from"tslib";import t from"../../../core/Collection.js";import{referenceSetter as i}from"../../../core/collectionUtils.js";import{EventedAccessor as n}from"../../../core/Evented.js";import{property as l,subclass as o}from"../../../core/accessorSupport/decorators.js";import{isGroupColumn as r}from"../support/columnUtils.js";import{uniqueColumnNames as s}from"../support/tableUtils.js";let d=class extends n{constructor(e){super(e),this.actionColumnConfig=null,this.cellPartNameGenerator=(e,t)=>{const i=t.item.objectId;let n="";t?.item&&this.rowHighlightIds.includes(i)&&(n+=" highlight");const l=this.findColumn(e?.path);if(!l)return n;if(l.invalid&&(n+=" invalid"),l.textWrap&&(n+=" text-wrap"),"editInfo"in l&&l.editInfo&&l.editInfo.rowData?.index===t.index&&(n+=" editing"),l.tableHasPendingEdits&&(l.itemHasPendingEdits(i,l.fieldName)&&(n+=" pending-edit"),l.tableHasInvalidPendingEdits)){const e=l.itemHasInvalidPendingEdits(i);l.itemHasInvalidPendingEdits(i,l.fieldName)?n+=" pending-edit-invalid":e||(n+=" pending-edit-other")}return n},this.columnPerformanceModeEnabled=!0,this.columnReorderingEnabled=!0,this.columns=new t,this.dataProvider=async(e,t)=>{const{store:i}=this;if(!t)return;t(await i.fetchItems(e))},this.multipleSelectionEnabled=!0,this.multipleSelectionEnabledOverride=null,this.multiSortEnabled=!1,this.multipleSortPriority="prepend",this.noDataMessage=null,this.rowDetailsRenderer=null,this.store=null}get actionColumn(){return this.allColumns.find(e=>e.fieldName===s.action)}get allColumns(){return this.columns.toArray().flatMap(e=>[e,...r(e)&&e.columns?.length?e.columns:[]])}get allColumnsVisible(){return this.allColumns.length===this.allVisibleColumns.length}get allVisibleColumns(){return this.allColumns.filter(e=>e.effectiveVisible)}get columnMenuIsOpen(){return this.allColumns.some(e=>e.menuIsOpen)}get editingEnabled(){return this.store.editingEnabled}set editingEnabled(e){this.store.editingEnabled=e}get editableColumns(){return this.allColumns.filter(e=>"editable"in e)}get effectiveSize(){const{filterBySelectionEnabled:e,highlightIds:t,objectIds:i,pageSize:n,size:l}=this;if(0===l)return 0;if(this.paginationEnabled){const o=this.pageCount===this.pageIndex+1&&l%n||n;return e?Math.min(t.length,o):i.length?Math.min(i.length,o):o}return e?t.length:i.length?i.length:l}get filterBySelectionEnabled(){return!!this._get("filterBySelectionEnabled")}set filterBySelectionEnabled(e){this._set("filterBySelectionEnabled",e)}get groupColumns(){return this.columns.toArray().filter(e=>r(e))}get hasInvalidColumnConfiguration(){return this.visibleColumns.every(e=>e.frozen||e.frozenToEnd)}get highlightIds(){return this._get("highlightIds")||new t}set highlightIds(e){let n=Array.isArray(e)?new t(e):e;this.effectiveMultipleSelectionEnabled||(n=n.slice(0,1)),this._set("highlightIds",i(n,this._get("highlightIds"),t))}get isEditing(){return this.editableColumns.some(e=>e.editInfo)}get isQuerying(){return this.store.isQuerying}get isQueryingOrSyncing(){return this.isQuerying||this.isSyncing}get isSyncing(){return this.store.isSyncing}get maxSize(){return this.store.maxSize}set maxSize(e){this.store.maxSize=e}get effectiveMultipleSelectionEnabled(){return!1!==this.multipleSelectionEnabledOverride&&this.multipleSelectionEnabled}get objectIds(){return this._get("objectIds")??new t}set objectIds(e){this._set("objectIds",i(e,this._get("objectIds"),t))}get pageCount(){return this.store.pageCount}get pageIndex(){return this.store.pageIndex}set pageIndex(e){this.store.pageIndex=e}get pageSize(){return this.store.pageSize}set pageSize(e){this.store.pageSize=e}get paginationEnabled(){return this.store.paginationEnabled}set paginationEnabled(e){this.store.paginationEnabled=e}get rowHighlightIds(){return this._get("rowHighlightIds")||new t}set rowHighlightIds(e){this._set("rowHighlightIds",i(e,this._get("rowHighlightIds"),t))}get size(){return this.store.effectiveSize}get state(){return this.store.state}get temporaryHighlightId(){return this.store.temporaryHighlightId}set temporaryHighlightId(e){this.store.temporaryHighlightId=e}get visibleColumns(){return this.columns.toArray().filter(e=>e.effectiveVisible)}clearSelection(){this.highlightIds.removeAll()}closeColumnMenus(){this.allColumns.forEach(e=>e.closeMenu())}findColumn(e){return this.allColumns.find(t=>t.fieldName===e)}hideAllColumns(){this.allColumns.forEach(e=>e.hidden||=!0)}hideColumn(e){const t=this.findColumn(e);!1===t?.hidden&&(t.hidden=!0)}async refresh(){await this.store.refresh(),await this.store.load()}showAllColumns(){this.allColumns.forEach(e=>{e.hidden&&(e.hidden=!1)})}showColumn(e){const t=this.findColumn(e);t?.hidden&&(t.hidden=!1)}sortColumn(e,t){if(!e)return;const i=this.findColumn(e);i&&(i.direction=t)}toggleColumnVisibility(e){const t=this.findColumn(e);t&&(t.hidden=!t.hidden)}};e([l()],d.prototype,"actionColumn",null),e([l()],d.prototype,"actionColumnConfig",void 0),e([l()],d.prototype,"allColumns",null),e([l()],d.prototype,"allColumnsVisible",null),e([l()],d.prototype,"allVisibleColumns",null),e([l()],d.prototype,"cellPartNameGenerator",void 0),e([l()],d.prototype,"columnMenuIsOpen",null),e([l()],d.prototype,"columnPerformanceModeEnabled",void 0),e([l()],d.prototype,"columnReorderingEnabled",void 0),e([l()],d.prototype,"columns",void 0),e([l()],d.prototype,"dataProvider",void 0),e([l()],d.prototype,"editingEnabled",null),e([l()],d.prototype,"editableColumns",null),e([l()],d.prototype,"effectiveSize",null),e([l()],d.prototype,"filterBySelectionEnabled",null),e([l()],d.prototype,"groupColumns",null),e([l()],d.prototype,"hasInvalidColumnConfiguration",null),e([l()],d.prototype,"highlightIds",null),e([l()],d.prototype,"isEditing",null),e([l()],d.prototype,"isQuerying",null),e([l()],d.prototype,"isQueryingOrSyncing",null),e([l()],d.prototype,"isSyncing",null),e([l()],d.prototype,"maxSize",null),e([l()],d.prototype,"multipleSelectionEnabled",void 0),e([l()],d.prototype,"multipleSelectionEnabledOverride",void 0),e([l()],d.prototype,"effectiveMultipleSelectionEnabled",null),e([l()],d.prototype,"multiSortEnabled",void 0),e([l()],d.prototype,"multipleSortPriority",void 0),e([l()],d.prototype,"noDataMessage",void 0),e([l()],d.prototype,"objectIds",null),e([l()],d.prototype,"pageCount",null),e([l()],d.prototype,"pageIndex",null),e([l()],d.prototype,"pageSize",null),e([l()],d.prototype,"paginationEnabled",null),e([l()],d.prototype,"rowHighlightIds",null),e([l()],d.prototype,"rowDetailsRenderer",void 0),e([l()],d.prototype,"size",null),e([l()],d.prototype,"store",void 0),e([l({readOnly:!0})],d.prototype,"state",null),e([l()],d.prototype,"temporaryHighlightId",null),e([l()],d.prototype,"visibleColumns",null),d=e([o("esri.widgets.FeatureTable.Grid.GridViewModel")],d);const a=d;export{a as default};
|
|
2
|
+
import{__decorate as e}from"tslib";import t from"../../../core/Collection.js";import{referenceSetter as i}from"../../../core/collectionUtils.js";import{EventedAccessor as n}from"../../../core/Evented.js";import{property as l,subclass as o}from"../../../core/accessorSupport/decorators.js";import{isGroupColumn as r}from"../support/columnUtils.js";import{uniqueColumnNames as s}from"../support/tableUtils.js";let d=class extends n{constructor(e){super(e),this.actionColumnConfig=null,this.cellPartNameGenerator=(e,t)=>{const i=t.item.objectId;let n="";t?.item&&this.rowHighlightIds.includes(i)&&(n+=" highlight");const l=this.findColumn(e?.path);if(!l)return n;if(l.invalid&&(n+=" invalid"),l.textWrap&&(n+=" text-wrap"),"editInfo"in l&&l.editInfo&&l.editInfo.rowData?.index===t.index&&(n+=" editing"),l.tableHasPendingEdits&&(l.itemHasPendingEdits(i,l.fieldName)&&(n+=" pending-edit"),l.tableHasInvalidPendingEdits)){const e=l.itemHasInvalidPendingEdits(i);l.itemHasInvalidPendingEdits(i,l.fieldName)?n+=" pending-edit-invalid":e||(n+=" pending-edit-other")}return n},this.columnPerformanceModeEnabled=!0,this.columnReorderingEnabled=!0,this.columns=new t,this.dataProvider=async(e,t)=>{const{store:i}=this;if(!t)return;t(await i.fetchItems(e))},this.direction=void 0,this.multipleSelectionEnabled=!0,this.multipleSelectionEnabledOverride=null,this.multiSortEnabled=!1,this.multipleSortPriority="prepend",this.noDataMessage=null,this.rowDetailsRenderer=null,this.store=null}get actionColumn(){return this.allColumns.find(e=>e.fieldName===s.action)}get allColumns(){return this.columns.toArray().flatMap(e=>[e,...r(e)&&e.columns?.length?e.columns:[]])}get allColumnsVisible(){return this.allColumns.length===this.allVisibleColumns.length}get allVisibleColumns(){return this.allColumns.filter(e=>e.effectiveVisible)}get columnMenuIsOpen(){return this.allColumns.some(e=>e.menuIsOpen)}get editingEnabled(){return this.store.editingEnabled}set editingEnabled(e){this.store.editingEnabled=e}get editableColumns(){return this.allColumns.filter(e=>"editable"in e)}get effectiveSize(){const{filterBySelectionEnabled:e,highlightIds:t,objectIds:i,pageSize:n,size:l}=this;if(0===l)return 0;if(this.paginationEnabled){const o=this.pageCount===this.pageIndex+1&&l%n||n;return e?Math.min(t.length,o):i.length?Math.min(i.length,o):o}return e?t.length:i.length?i.length:l}get filterBySelectionEnabled(){return!!this._get("filterBySelectionEnabled")}set filterBySelectionEnabled(e){this._set("filterBySelectionEnabled",e)}get groupColumns(){return this.columns.toArray().filter(e=>r(e))}get hasInvalidColumnConfiguration(){return this.visibleColumns.every(e=>e.frozen||e.frozenToEnd)}get highlightIds(){return this._get("highlightIds")||new t}set highlightIds(e){let n=Array.isArray(e)?new t(e):e;this.effectiveMultipleSelectionEnabled||(n=n.slice(0,1)),this._set("highlightIds",i(n,this._get("highlightIds"),t))}get isEditing(){return this.editableColumns.some(e=>e.editInfo)}get isQuerying(){return this.store.isQuerying}get isQueryingOrSyncing(){return this.isQuerying||this.isSyncing}get isSyncing(){return this.store.isSyncing}get maxSize(){return this.store.maxSize}set maxSize(e){this.store.maxSize=e}get effectiveMultipleSelectionEnabled(){return!1!==this.multipleSelectionEnabledOverride&&this.multipleSelectionEnabled}get objectIds(){return this._get("objectIds")??new t}set objectIds(e){this._set("objectIds",i(e,this._get("objectIds"),t))}get pageCount(){return this.store.pageCount}get pageIndex(){return this.store.pageIndex}set pageIndex(e){this.store.pageIndex=e}get pageSize(){return this.store.pageSize}set pageSize(e){this.store.pageSize=e}get paginationEnabled(){return this.store.paginationEnabled}set paginationEnabled(e){this.store.paginationEnabled=e}get rowHighlightIds(){return this._get("rowHighlightIds")||new t}set rowHighlightIds(e){this._set("rowHighlightIds",i(e,this._get("rowHighlightIds"),t))}get size(){return this.store.effectiveSize}get state(){return this.store.state}get temporaryHighlightId(){return this.store.temporaryHighlightId}set temporaryHighlightId(e){this.store.temporaryHighlightId=e}get visibleColumns(){return this.columns.toArray().filter(e=>e.effectiveVisible)}clearSelection(){this.highlightIds.removeAll()}closeColumnMenus(){this.allColumns.forEach(e=>e.closeMenu())}findColumn(e){return this.allColumns.find(t=>t.fieldName===e)}hideAllColumns(){this.allColumns.forEach(e=>e.hidden||=!0)}hideColumn(e){const t=this.findColumn(e);!1===t?.hidden&&(t.hidden=!0)}async refresh(){await this.store.refresh(),await this.store.load()}showAllColumns(){this.allColumns.forEach(e=>{e.hidden&&(e.hidden=!1)})}showColumn(e){const t=this.findColumn(e);t?.hidden&&(t.hidden=!1)}sortColumn(e,t){if(!e)return;const i=this.findColumn(e);i&&(i.direction=t)}toggleColumnVisibility(e){const t=this.findColumn(e);t&&(t.hidden=!t.hidden)}};e([l()],d.prototype,"actionColumn",null),e([l()],d.prototype,"actionColumnConfig",void 0),e([l()],d.prototype,"allColumns",null),e([l()],d.prototype,"allColumnsVisible",null),e([l()],d.prototype,"allVisibleColumns",null),e([l()],d.prototype,"cellPartNameGenerator",void 0),e([l()],d.prototype,"columnMenuIsOpen",null),e([l()],d.prototype,"columnPerformanceModeEnabled",void 0),e([l()],d.prototype,"columnReorderingEnabled",void 0),e([l()],d.prototype,"columns",void 0),e([l()],d.prototype,"dataProvider",void 0),e([l()],d.prototype,"direction",void 0),e([l()],d.prototype,"editingEnabled",null),e([l()],d.prototype,"editableColumns",null),e([l()],d.prototype,"effectiveSize",null),e([l()],d.prototype,"filterBySelectionEnabled",null),e([l()],d.prototype,"groupColumns",null),e([l()],d.prototype,"hasInvalidColumnConfiguration",null),e([l()],d.prototype,"highlightIds",null),e([l()],d.prototype,"isEditing",null),e([l()],d.prototype,"isQuerying",null),e([l()],d.prototype,"isQueryingOrSyncing",null),e([l()],d.prototype,"isSyncing",null),e([l()],d.prototype,"maxSize",null),e([l()],d.prototype,"multipleSelectionEnabled",void 0),e([l()],d.prototype,"multipleSelectionEnabledOverride",void 0),e([l()],d.prototype,"effectiveMultipleSelectionEnabled",null),e([l()],d.prototype,"multiSortEnabled",void 0),e([l()],d.prototype,"multipleSortPriority",void 0),e([l()],d.prototype,"noDataMessage",void 0),e([l()],d.prototype,"objectIds",null),e([l()],d.prototype,"pageCount",null),e([l()],d.prototype,"pageIndex",null),e([l()],d.prototype,"pageSize",null),e([l()],d.prototype,"paginationEnabled",null),e([l()],d.prototype,"rowHighlightIds",null),e([l()],d.prototype,"rowDetailsRenderer",void 0),e([l()],d.prototype,"size",null),e([l()],d.prototype,"store",void 0),e([l({readOnly:!0})],d.prototype,"state",null),e([l()],d.prototype,"temporaryHighlightId",null),e([l()],d.prototype,"visibleColumns",null),d=e([o("esri.widgets.FeatureTable.Grid.GridViewModel")],d);const a=d;export{a as default};
|
|
@@ -168,6 +168,26 @@ export interface TableMenuConfig {
|
|
|
168
168
|
open?: boolean;
|
|
169
169
|
}
|
|
170
170
|
|
|
171
|
+
/**
|
|
172
|
+
* The configuration for the table's column visibility menu.
|
|
173
|
+
*
|
|
174
|
+
* @internal
|
|
175
|
+
*/
|
|
176
|
+
export interface TableColumnVisibilityMenuConfig {
|
|
177
|
+
/**
|
|
178
|
+
* Indicates frozen columns should be excluded from the menu's user interface and toggling actions.
|
|
179
|
+
*
|
|
180
|
+
* @internal
|
|
181
|
+
*/
|
|
182
|
+
frozenColumnsExcluded?: boolean;
|
|
183
|
+
/**
|
|
184
|
+
* Determines where the menu's popover will be positioned relative to the menu's action.
|
|
185
|
+
*
|
|
186
|
+
* @internal
|
|
187
|
+
*/
|
|
188
|
+
placement?: "auto" | "auto-start" | "auto-end" | "top" | "top-start" | "top-end" | "bottom" | "bottom-start" | "bottom-end" | "right" | "right-start" | "right-end" | "left" | "left-start" | "left-end" | "leading-start" | "leading" | "leading-end" | "trailing-end" | "trailing" | "trailing-start";
|
|
189
|
+
}
|
|
190
|
+
|
|
171
191
|
/**
|
|
172
192
|
* The configuration for an individual menu item within the table menu.
|
|
173
193
|
*
|
|
@@ -23,7 +23,7 @@ import type { MapViewOrSceneView } from "../views/MapViewOrSceneView.js";
|
|
|
23
23
|
import type { ObjectId } from "../views/types.js";
|
|
24
24
|
import type { WidgetProperties } from "./Widget.js";
|
|
25
25
|
import type { FeatureTableViewModelEvents, FeatureTableViewModelProperties } from "./FeatureTable/FeatureTableViewModel.js";
|
|
26
|
-
import type { Direction, DiscardPendingEditsParameters, FeatureStoreEdits, FeatureTableState, GridMultiSortPriority, GridSupportedColumns, TableMenuConfig } from "./FeatureTable/Grid/types.js";
|
|
26
|
+
import type { Direction, DiscardPendingEditsParameters, FeatureStoreEdits, FeatureTableState, GridMultiSortPriority, GridSupportedColumns, TableMenuConfig, TableColumnVisibilityMenuConfig } from "./FeatureTable/Grid/types.js";
|
|
27
27
|
import type { ActionColumnConfig, ColumnSortOrder, FeatureStoreItem, FeatureTableSupportedColumn, FeatureTableSupportedFilters, FeatureTableSupportedLayer } from "./FeatureTable/support/types.js";
|
|
28
28
|
import type { AttributeTableTemplateProperties } from "../tables/AttributeTableTemplate.js";
|
|
29
29
|
import type { MeshProperties } from "../geometry/Mesh.js";
|
|
@@ -36,7 +36,7 @@ import type { TableTemplateProperties } from "./FeatureTable/support/TableTempla
|
|
|
36
36
|
import type { TimeExtentProperties } from "../time/TimeExtent.js";
|
|
37
37
|
import type { VisibleElementsProperties } from "./FeatureTable/VisibleElements.js";
|
|
38
38
|
|
|
39
|
-
export interface FeatureTableProperties extends WidgetProperties, Partial<Pick<FeatureTable, "actionColumnConfig" | "attachmentsEnabled" | "attachmentsViewOptions" | "autoRefreshEnabled" | "autoSaveEnabled" | "closed" | "collapsed" | "columnPerformanceModeEnabled" | "columnReorderingEnabled" | "definitionExpression" | "description" | "disabled" | "editingEnabled" | "filterByLayerScaleRange" | "filterBySelectionEnabled" | "filterByViewExtent" | "highlightEnabled" | "initialSize" | "layer" | "layers" | "maxSize" | "menuConfig" | "multipleSelectionEnabled" | "multipleSortPriority" | "multiSortEnabled" | "navigationScale" | "noDataMessage" | "outFields" | "pageSize" | "paginationEnabled" | "relatedRecordsEnabled" | "returnGeometryEnabled" | "returnMEnabled" | "returnZEnabled" | "selectionManager" | "syncTemplateOnChangesEnabled" | "syncViewSelection" | "syncWithViewSelectionManager" | "timeZone" | "title" | "view">> {
|
|
39
|
+
export interface FeatureTableProperties extends WidgetProperties, Partial<Pick<FeatureTable, "actionColumnConfig" | "attachmentsEnabled" | "attachmentsViewOptions" | "autoRefreshEnabled" | "autoSaveEnabled" | "closed" | "collapsed" | "columnPerformanceModeEnabled" | "columnReorderingEnabled" | "columnVisibilityMenuConfig" | "definitionExpression" | "description" | "direction" | "disabled" | "editingEnabled" | "filterByLayerScaleRange" | "filterBySelectionEnabled" | "filterByViewExtent" | "highlightEnabled" | "initialSize" | "layer" | "layers" | "maxSize" | "menuConfig" | "multipleSelectionEnabled" | "multipleSortPriority" | "multiSortEnabled" | "navigationScale" | "noDataMessage" | "outFields" | "pageSize" | "paginationEnabled" | "relatedRecordsEnabled" | "returnGeometryEnabled" | "returnMEnabled" | "returnZEnabled" | "selectionManager" | "syncTemplateOnChangesEnabled" | "syncViewSelection" | "syncWithViewSelectionManager" | "timeZone" | "title" | "view">> {
|
|
40
40
|
/**
|
|
41
41
|
* Use this property to configure how columns display within the table in regard to visibility, column order, and sorting.
|
|
42
42
|
*
|
|
@@ -848,6 +848,12 @@ export default class FeatureTable extends Widget<FeatureTableProperties> {
|
|
|
848
848
|
* By default fields such as `CreationDate`, `Creator`, `EditDate`, `Editor`, and `GlobalID` do not show. If these fields are needed, set them via [TableTemplate.columnTemplates](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/support/TableTemplate/#columnTemplates). In this scenario, it is also necessary to set the column template's `visible` property to `true`.
|
|
849
849
|
*/
|
|
850
850
|
get columns(): Collection<FeatureTableSupportedColumn>;
|
|
851
|
+
/**
|
|
852
|
+
* The configuration object for the table's column visibility menu.
|
|
853
|
+
*
|
|
854
|
+
* @internal
|
|
855
|
+
*/
|
|
856
|
+
accessor columnVisibilityMenuConfig: TableColumnVisibilityMenuConfig | null | undefined;
|
|
851
857
|
/**
|
|
852
858
|
* The ID or node representing the DOM element containing the widget.
|
|
853
859
|
* Take note that this property can only be set once. The snippets below provide some examples for setting this.
|
|
@@ -940,6 +946,12 @@ export default class FeatureTable extends Widget<FeatureTableProperties> {
|
|
|
940
946
|
* @since 4.30
|
|
941
947
|
*/
|
|
942
948
|
accessor description: FeatureTableDescriptionFunction | string | null | undefined;
|
|
949
|
+
/**
|
|
950
|
+
* Controls the direction on the grid element.
|
|
951
|
+
*
|
|
952
|
+
* @internal
|
|
953
|
+
*/
|
|
954
|
+
accessor direction: "ltr" | "rtl" | undefined;
|
|
943
955
|
/**
|
|
944
956
|
* Indicates whether the table is disabled. When disabled, the table will not display any data or allow interaction. This is purely a visual override and does not prevent the table from attempting to render data. This property has no effect on the current [state](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/#state) property value.
|
|
945
957
|
*
|