redux-resource-plugins
Version:
Official plugins for Redux Resource
90 lines (73 loc) • 2.5 kB
JavaScript
;
exports.__esModule = true;
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
const actionTypes = {
SELECT_RESOURCES: 'SELECT_RESOURCES',
DESELECT_RESOURCES: 'DESELECT_RESOURCES',
CLEAR_SELECTED_RESOURCES: 'CLEAR_SELECTED_RESOURCES'
};
const initialState = {
selectedIds: []
};
function selectResources(resourceType, resources) {
return {
type: actionTypes.SELECT_RESOURCES,
resourceType,
resources
};
}
function deselectResources(resourceType, resources) {
return {
type: actionTypes.DESELECT_RESOURCES,
resourceType,
resources
};
}
function clearSelectedResources(resourceType) {
return {
type: actionTypes.CLEAR_SELECTED_RESOURCES,
resourceType
};
}
function selection(resourceType) {
return function (state, action) {
// Ignore actions that were dispatched for another resource type
const typeToUse = action.resourceType || action.resourceName;
if (typeToUse !== resourceType) {
return state;
}
let selectedIds, resourceIds;
const resources = action.resources || [];
if (action.type === actionTypes.SELECT_RESOURCES) {
selectedIds = [...state.selectedIds] || [];
resourceIds = resources.map(r => typeof r === 'object' ? r.id : r);
const selectedIdsSet = new Set(selectedIds);
resourceIds.forEach(id => {
if (!selectedIdsSet.has(id)) {
selectedIds.push(id);
}
});
return _extends({}, state, {
selectedIds
});
} else if (action.type === actionTypes.DESELECT_RESOURCES) {
selectedIds = [...state.selectedIds] || [];
resourceIds = resources.map(r => typeof r === 'object' ? r.id : r);
const resourceIdsSet = new Set(resourceIds);
return _extends({}, state, {
selectedIds: selectedIds.filter(id => !resourceIdsSet.has(id))
});
} else if (action.type === actionTypes.CLEAR_SELECTED_RESOURCES) {
return _extends({}, state, {
selectedIds: []
});
}
return state;
};
}
selection.actionTypes = actionTypes;
selection.selectResources = selectResources;
selection.deselectResources = deselectResources;
selection.clearSelectedResources = clearSelectedResources;
selection.initialState = initialState;
exports.default = selection;