static setChildVisibility(map) { // console.log('setChildVisibility'); const groups = LayerSwitcher.getGroupsAndLayers(map, function (l) { return (l.getLayers && !l.get('combine') && !LayerSwitcher.isBaseGroup(l)); }); groups.forEach(function (group) { // console.log(group.get('title')); var groupVisible = group.getVisible(); var groupIndeterminate = group.get('indeterminate'); group.getLayers().getArray().forEach(function (l) { // console.log('>', l.get('title')); l.set('indeterminate', false); if ((!groupVisible || groupIndeterminate) && l.getVisible()) { l.set('indeterminate', true); } }); }); }
static setGroupVisibility(map) { // Get a list of groups, with the deepest first const groups = LayerSwitcher.getGroupsAndLayers(map, function (l) { return (l.getLayers && !l.get('combine') && !LayerSwitcher.isBaseGroup(l)); }).reverse(); // console.log(groups.map(g => g.get('title'))); groups.forEach(function (group) { // TODO Can we use getLayersArray, is it public in the esm build? let descendantVisibility = group.getLayersArray().map(function (l) { let state = l.getVisible(); // console.log('>', l.get('title'), state); return state; }); // console.log(descendantVisibility); if (descendantVisibility.every(function (v) {return v === true})) { group.setVisible(true); group.set('indeterminate', false); } else if (descendantVisibility.every(function (v) {return v === false})) { group.setVisible(false); group.set('indeterminate', false); } else { group.setVisible(true); group.set('indeterminate', true); } } ); }