@braineet/ui
Version:
Braineet design system
111 lines • 3.92 kB
JavaScript
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
import { useReducer } from 'react';
export var actions = {
INIT: 'INIT',
RESIZE_SCREEN: 'RESIZE_SCREEN',
EXPAND_SIDE_NAVIGATION: 'EXPAND_SIDE_NAVIGATION',
COLLAPSE_SIDE_NAVIGATION: 'COLLAPSE_SIDE_NAVIGATION',
TOGGLE_SIDE_NAVIGATION: 'TOGGLE_SIDE_NAVIGATION',
ON_CHANGE: 'ON_CHANGE'
};
export var defaultInitialState = {
initialized: false,
defaultExpanded: undefined,
expanded: undefined,
width: 0,
controlled: false
};
export var reducer = function reducer(state, action) {
var _action$size, _action$size2;
switch (action.type) {
case actions.INIT:
{
var _action$options, _action$options2;
var initState = _extends({}, state, {
initialized: true,
width: (action == null || (_action$options = action.options) == null ? void 0 : _action$options.width) || 0
});
if (state.controlled) return initState;
return _extends({}, initState, {
expanded: (state == null ? void 0 : state.defaultExpanded) !== undefined ? state == null ? void 0 : state.defaultExpanded : (action == null || (_action$options2 = action.options) == null ? void 0 : _action$options2.width) > 992
});
}
case actions.RESIZE_SCREEN:
if (state.controlled) return state;
return _extends({}, state, {
width: (action == null || (_action$size = action.size) == null ? void 0 : _action$size.width) || 0,
expanded: (action == null || (_action$size2 = action.size) == null ? void 0 : _action$size2.width) > 992
});
case actions.EXPAND_SIDE_NAVIGATION:
if (state.controlled) return state;
return _extends({}, state, {
expanded: true
});
case actions.COLLAPSE_SIDE_NAVIGATION:
if (state.controlled) return state;
return _extends({}, state, {
expanded: false
});
case actions.TOGGLE_SIDE_NAVIGATION:
if (state.controlled) return state;
return _extends({}, state, {
expanded: state.expanded !== undefined ? !state.expanded : false
});
case actions.ON_CHANGE:
return _extends({}, state, {
expanded: (action == null ? void 0 : action.expanded) || (state == null ? void 0 : state.expanded)
});
default:
return state;
}
};
export var createStore = function createStore(initialState) {
// eslint-disable-next-line react-hooks/rules-of-hooks
var _useReducer = useReducer(reducer, _extends({}, defaultInitialState, initialState, {
controlled: !!(initialState != null && initialState.expanded),
expanded: (initialState == null ? void 0 : initialState.defaultExpanded) || (initialState == null ? void 0 : initialState.expanded) || undefined
})),
state = _useReducer[0],
dispatch = _useReducer[1];
var onResize = function onResize(size) {
return dispatch({
type: actions.RESIZE_SCREEN,
size: size
});
};
var init = function init(options) {
return dispatch({
type: actions.INIT,
options: options
});
};
var expand = function expand() {
return dispatch({
type: actions.EXPAND_SIDE_NAVIGATION
});
};
var collapse = function collapse() {
return dispatch({
type: actions.COLLAPSE_SIDE_NAVIGATION
});
};
var toggle = function toggle() {
return dispatch({
type: actions.TOGGLE_SIDE_NAVIGATION
});
};
var onChange = function onChange(expanded) {
return dispatch({
type: actions.ON_CHANGE,
expanded: expanded
});
};
return [state, {
init: init,
onResize: onResize,
expand: expand,
collapse: collapse,
toggle: toggle,
onChange: onChange
}];
};