123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- // @flow
-
- import { parseURLParams } from '../config';
- import { toState } from '../redux';
-
- import { DEFAULT_SERVER_URL } from './constants';
-
- /**
- * Returns the effective value of a configuration/preference/setting by applying
- * a precedence among the values specified by JWT, URL, settings,
- * and config.
- *
- * @param {Object|Function} stateful - The redux state object or
- * {@code getState} function.
- * @param {string} propertyName - The name of the
- * configuration/preference/setting (property) to retrieve.
- * @param {{
- * config: boolean,
- * jwt: boolean,
- * settings: boolean,
- * urlParams: boolean
- * }} [sources] - A set/structure of {@code boolean} flags indicating the
- * configuration/preference/setting sources to consider/retrieve values from.
- * @returns {any}
- */
- export function getPropertyValue(
- stateful: Object | Function,
- propertyName: string,
- sources?: Object
- ) {
- // Default values don't play nicely with partial objects and we want to make
- // the function easy to use without exhaustively defining all flags:
- sources = { // eslint-disable-line no-param-reassign
- // Defaults:
- config: true,
- jwt: true,
- settings: true,
- urlParams: true,
-
- ...sources
- };
-
- // Precedence: jwt -> urlParams -> settings -> config.
-
- const state = toState(stateful);
-
- // jwt
- if (sources.jwt) {
- const value = state['features/base/jwt'][propertyName];
-
- if (typeof value !== 'undefined') {
- return value[propertyName];
- }
- }
-
- // urlParams
- if (sources.urlParams) {
- const urlParams
- = parseURLParams(state['features/base/connection'].locationURL);
- const value = urlParams[`config.${propertyName}`];
-
- if (typeof value !== 'undefined') {
- return value;
- }
- }
-
- // settings
- if (sources.settings) {
- const value = state['features/base/settings'][propertyName];
-
- if (typeof value !== 'undefined') {
- return value;
- }
- }
-
- // config
- if (sources.config) {
- const value = state['features/base/config'][propertyName];
-
- if (typeof value !== 'undefined') {
- return value;
- }
- }
-
- return undefined;
- }
-
- /**
- * Gets the currently configured server URL.
- *
- * @param {Object|Function} stateful - The redux state object or
- * {@code getState} function.
- * @returns {string} - The currently configured server URL.
- */
- export function getServerURL(stateful: Object | Function) {
- const state = toState(stateful);
-
- return state['features/base/settings'].serverURL || DEFAULT_SERVER_URL;
- }
|