/* * Copyright 2019 Esri * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ import BuildingSceneLayer from "esri/layers/BuildingSceneLayer"; import BuildingComponentSublayer from "esri/layers/buildingSublayers/BuildingComponentSublayer"; import BuildingGroupSublayer from "esri/layers/buildingSublayers/BuildingGroupSublayer"; import { renderers } from "./visualVariables"; import AppState from "../AppState"; export function updateSubLayersSymbolLayer (buildingLayer: BuildingSceneLayer, propertyPath: string[], value: any) { buildingLayer.when(function() { buildingLayer.allSublayers.forEach(function(layer) { if (layer instanceof BuildingComponentSublayer && (layer.renderer as any).clone) { const renderer = (layer.renderer as any).clone(); let parentProp = renderer.symbol.symbolLayers.getItemAt(0); propertyPath.forEach(function (prop, i) { if (i === (propertyPath.length - 1)) { parentProp[prop] = value; } else { parentProp = parentProp[prop]; } }); layer.renderer = renderer; } }); }); } export function updateSubLayers(buildingLayer: BuildingSceneLayer, propertyPath: string[], value: any) { buildingLayer.when(function() { buildingLayer.allSublayers.forEach(function(layer) { let parentProp = layer; propertyPath.forEach(function (prop, i) { if (i === (propertyPath.length - 1)) { parentProp[prop] = value; } else { parentProp = parentProp[prop]; } }); }); }); } export function goThroughSubLayers(buildingLayer: BuildingSceneLayer, callback: (sublayers: BuildingComponentSublayer | BuildingGroupSublayer) => void) { buildingLayer.when(function() { buildingLayer.allSublayers.forEach(function(layer) { callback(layer); }); }); } export function getVisualVarsFromAppState(appState: AppState, layerName: string, propertyName: string) { const defaultProps = renderers[layerName]["default"][propertyName]; const customPage = renderers[layerName][appState.pageLocation] ? renderers[layerName][appState.pageLocation][propertyName] : undefined; if (customPage !== undefined) { return customPage; } return defaultProps; }