tripleo-ui/src/js/selectors/environmentConfiguration.js

65 lines
2.0 KiB
JavaScript

/**
* Copyright 2017 Red Hat Inc.
*
* 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 { createSelector } from 'reselect';
import { List } from 'immutable';
const topics = state => state.environmentConfiguration.topics;
const environmentGroups = state =>
state.environmentConfiguration.environmentGroups;
export const getEnvironments = state =>
state.environmentConfiguration.environments.sortBy(e =>
e.title.toLowerCase()
);
export const getEnvironment = (state, environmentFileName) =>
state.environmentConfiguration.environments.get(environmentFileName);
export const getEnabledEnvironments = createSelector(
getEnvironments,
environments => environments.filter(environment => environment.get('enabled'))
);
export const getEnvironmentConfigurationSummary = createSelector(
getEnabledEnvironments,
environments => {
const titlesList = environments.reduce(
(titlesList, environment) => titlesList.push(environment.get('title')),
List()
);
return titlesList.toArray().join(', ');
}
);
/**
* Returns Map of Topics with nested Environment Groups and Environments
*/
export const getTopicsTree = createSelector(
[topics, environmentGroups, getEnvironments],
(topics, environmentGroups, environments) =>
topics.map(topic =>
topic.update('environment_groups', envGroups =>
envGroups.map(envGroup =>
environmentGroups
.get(envGroup)
.update('environments', envs =>
environments.filter((p, k) => envs.includes(k))
)
)
)
)
);