github.com/replicatedhq/ship@v0.55.0/web/init/src/redux/data/applicationSettings/reducer.js (about) 1 import { constants } from "./actions"; 2 import keyBy from "lodash/keyBy"; 3 import sortBy from "lodash/sortBy"; 4 import map from "lodash/map"; 5 import some from "lodash/some"; 6 import isEmpty from "lodash/isEmpty"; 7 import { Utilities } from "../../../utilities/utilities"; 8 import { ConfigService } from "../../../services/ConfigService"; 9 10 const applicationSettingsState = { 11 settingsFields: {}, 12 settingsFieldsList: [], 13 appSidebarSubItems: [], 14 configErrors: [], 15 version: null 16 }; 17 18 function isAtLeastOneItemVisible(field) { 19 return some(field.items, (item) => { 20 if (!isEmpty(item)) { 21 return ConfigService.isVisible(field.items, item); 22 } 23 }); 24 } 25 26 export function settingsData(state = applicationSettingsState, action) { 27 switch (action.type) { 28 case constants.RECEIVE_APPLICATION_SETTINGS: 29 const resBody = Object.assign({}, action.payload.Groups); 30 const orderedFields = sortBy(resBody, "position"); 31 const settingsFields = keyBy(orderedFields, "name"); 32 33 const appSidebarSubItems = map(settingsFields, (field) => { 34 if (!isAtLeastOneItemVisible(field)) return; 35 const { title, name } = field; 36 const label = title === "" ? Utilities.toTitleCase(name.replace("-", " ")) : title; 37 38 return { 39 id: name, 40 label, 41 }; 42 }); 43 44 return Object.assign({}, state, { 45 settingsFields, 46 settingsFieldsList: map(settingsFields, "name"), 47 version: action.payload.Version, 48 appSidebarSubItems, 49 }); 50 case constants.SET_CONFIG_ERRORS: 51 const errors = Object.assign({}, action.payload); 52 53 const errorsArr = map(errors, (error) => { 54 const { message, name} = error; 55 return { 56 message, 57 fieldName: name, 58 }; 59 }); 60 61 return Object.assign({}, state, { 62 configErrors: errorsArr 63 }); 64 default: 65 return state; 66 } 67 }