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  }