@gitlab/ui
Version:
GitLab UI Components
78 lines (63 loc) • 2.98 kB
JavaScript
import { Vue } from '../vue';
import { PROP_NAME, DEFAULT_BREAKPOINT } from '../constants/config';
import { cloneDeep } from './clone-deep';
import { memoize } from './memoize';
// --- Constants ---
const VueProto = Vue.prototype;
// --- Getter methods ---
// All methods return a deep clone (immutable) copy of the config value,
// to prevent mutation of the user config object
// Get the current config
const getConfig = () => {
const bvConfig = VueProto[PROP_NAME];
return bvConfig ? bvConfig.getConfig() : {};
};
// Method to grab a config value based on a dotted/array notation key
const getConfigValue = function (key) {
let defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;
const bvConfig = VueProto[PROP_NAME];
return bvConfig ? bvConfig.getConfigValue(key, defaultValue) : cloneDeep(defaultValue);
};
// Method to grab a config value for a particular component
const getComponentConfig = function (key) {
let propKey = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
let defaultValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;
// Return the particular config value for key if specified,
// otherwise we return the full config (or an empty object if not found)
return propKey ? getConfigValue(`${key}.${propKey}`, defaultValue) : getConfigValue(key, {});
};
// Get all breakpoint names
const getBreakpoints = () => getConfigValue('breakpoints', DEFAULT_BREAKPOINT);
// Private method for caching breakpoint names
const _getBreakpointsCached = memoize(() => getBreakpoints());
// Get all breakpoint names (cached)
const getBreakpointsCached = () => cloneDeep(_getBreakpointsCached());
// Get breakpoints with the smallest breakpoint set as ''
// Useful for components that create breakpoint specific props
const getBreakpointsUp = () => {
const breakpoints = getBreakpoints();
breakpoints[0] = '';
return breakpoints;
};
// Get breakpoints with the smallest breakpoint set as '' (cached)
// Useful for components that create breakpoint specific props
const getBreakpointsUpCached = memoize(() => {
const breakpoints = getBreakpointsCached();
breakpoints[0] = '';
return breakpoints;
});
// Get breakpoints with the largest breakpoint set as ''
const getBreakpointsDown = () => {
const breakpoints = getBreakpoints();
breakpoints[breakpoints.length - 1] = '';
return breakpoints;
};
// Get breakpoints with the largest breakpoint set as '' (cached)
// Useful for components that create breakpoint specific props
/* istanbul ignore next: we don't use this method anywhere, yet */
const getBreakpointsDownCached = () => {
const breakpoints = getBreakpointsCached();
breakpoints[breakpoints.length - 1] = '';
return breakpoints;
};
export { getBreakpoints, getBreakpointsCached, getBreakpointsDown, getBreakpointsDownCached, getBreakpointsUp, getBreakpointsUpCached, getComponentConfig, getConfig, getConfigValue };