mirror of
https://github.com/weaveworks/scope.git
synced 2026-03-05 03:01:11 +00:00
46 lines
1.3 KiB
JavaScript
46 lines
1.3 KiB
JavaScript
import { createSelector } from 'reselect';
|
|
import { createMapSelector } from 'reselect-map';
|
|
import { fromJS, List as makeList } from 'immutable';
|
|
|
|
|
|
const extractNodeNetworksValue = (node) => {
|
|
if (node.has('metadata')) {
|
|
const networks = node.get('metadata')
|
|
.find(field => field.get('id') === 'docker_container_networks');
|
|
return networks && networks.get('value');
|
|
}
|
|
return null;
|
|
};
|
|
|
|
// TODO: Move this setting of networks as toplevel node field to backend,
|
|
// to not rely on field IDs here. should be determined by topology implementer.
|
|
export const nodeNetworksSelector = createMapSelector(
|
|
[
|
|
state => state.get('nodes').map(extractNodeNetworksValue),
|
|
],
|
|
(networksValue) => {
|
|
if (!networksValue) {
|
|
return makeList();
|
|
}
|
|
return fromJS(networksValue.split(', ').map(network => ({
|
|
id: network, label: network, colorKey: network
|
|
})));
|
|
}
|
|
);
|
|
|
|
export const availableNetworksSelector = createSelector(
|
|
[
|
|
nodeNetworksSelector
|
|
],
|
|
networksMap => networksMap.toList().flatten(true).toSet().toList()
|
|
.sortBy(m => m.get('label'))
|
|
);
|
|
|
|
export const selectedNetworkNodesIdsSelector = createSelector(
|
|
[
|
|
state => state.get('networkNodes'),
|
|
state => state.get('selectedNetwork'),
|
|
],
|
|
(networkNodes, selectedNetwork) => networkNodes.get(selectedNetwork)
|
|
);
|