dtable-utils
Version:
dtable common utils
126 lines (119 loc) • 6.39 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
var column = require('../../constants/column.js');
var filterPredicate = require('../../constants/filter/filter-predicate.js');
var core = require('../core.js');
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var _toConsumableArray__default = /*#__PURE__*/_interopDefaultLegacy(_toConsumableArray);
/**
* Filter multiple-select
* @param {array} departmentIds e.g. [ 14, ... ]
* @param {string} filter_predicate
* @param {array} filter_term department ids
* @param {object} userDepartmentIdsMap
* @returns bool
*/
var departmentMultipleSelectFilter = function departmentMultipleSelectFilter(departmentIds, _ref, userDepartmentIdsMap) {
var filter_predicate = _ref.filter_predicate,
filter_term = _ref.filter_term;
switch (filter_predicate) {
case filterPredicate.FILTER_PREDICATE_TYPE.HAS_ANY_OF:
{
if (filter_term.length === 0) return true;
if (!Array.isArray(departmentIds)) return false;
// CURRENT_USER_DEPARTMENT is a subset of CURRENT_USER_DEPARTMENT_AND_SUB, so it is necessary to first determine CURRENT_USER_DEPARTMENT_AND_SUB.
if (filter_term.includes(column.DEPARTMENT_SELECT_RANGE_MAP.CURRENT_USER_DEPARTMENT_AND_SUB)) {
return departmentIds.some(function (id) {
return core.isCurrentUserDepartmentAndSub(id, userDepartmentIdsMap) || core.isSpecificDepartment(id, filter_term);
});
}
if (filter_term.includes(column.DEPARTMENT_SELECT_RANGE_MAP.CURRENT_USER_DEPARTMENT)) {
return departmentIds.some(function (id) {
return core.isCurrentUserDepartment(id, userDepartmentIdsMap) || core.isSpecificDepartment(id, filter_term);
});
}
return departmentIds.some(function (id) {
return core.isSpecificDepartment(id, filter_term);
});
}
case filterPredicate.FILTER_PREDICATE_TYPE.HAS_ALL_OF:
{
if (filter_term.length === 0) return true;
if (!Array.isArray(departmentIds)) return false;
var _ref2 = userDepartmentIdsMap || {},
current_user_department_and_sub_ids = _ref2.current_user_department_and_sub_ids,
current_user_department_ids = _ref2.current_user_department_ids;
if (filter_term.includes(column.DEPARTMENT_SELECT_RANGE_MAP.CURRENT_USER_DEPARTMENT_AND_SUB)) {
if (Array.isArray(current_user_department_and_sub_ids) && !current_user_department_and_sub_ids.every(function (id) {
return departmentIds.includes(id);
})) return false;
} else if (filter_term.includes(column.DEPARTMENT_SELECT_RANGE_MAP.CURRENT_USER_DEPARTMENT)) {
if (Array.isArray(current_user_department_ids) && !current_user_department_ids.every(function (id) {
return departmentIds.includes(id);
})) return false;
}
return filter_term.every(function (id) {
return id === column.DEPARTMENT_SELECT_RANGE_MAP.CURRENT_USER_DEPARTMENT || id === column.DEPARTMENT_SELECT_RANGE_MAP.CURRENT_USER_DEPARTMENT_AND_SUB || core.isSpecificDepartment(id, departmentIds);
});
}
case filterPredicate.FILTER_PREDICATE_TYPE.HAS_NONE_OF:
{
if (filter_term.length === 0 || !Array.isArray(departmentIds) || departmentIds.length === 0) {
return true;
}
if (filter_term.includes(column.DEPARTMENT_SELECT_RANGE_MAP.CURRENT_USER_DEPARTMENT_AND_SUB)) {
return departmentIds.every(function (id) {
return !core.isCurrentUserDepartmentAndSub(id, userDepartmentIdsMap) && !core.isSpecificDepartment(id, filter_term);
});
}
if (filter_term.includes(column.DEPARTMENT_SELECT_RANGE_MAP.CURRENT_USER_DEPARTMENT)) {
return departmentIds.every(function (id) {
return !core.isCurrentUserDepartment(id, userDepartmentIdsMap) && !core.isSpecificDepartment(id, filter_term);
});
}
return filter_term.every(function (departmentId) {
return !core.isSpecificDepartment(departmentId, departmentIds);
});
}
case filterPredicate.FILTER_PREDICATE_TYPE.IS_EXACTLY:
{
if (filter_term.length === 0) return true;
if (!Array.isArray(departmentIds)) return false;
var normalizedFilterTerm = filter_term.slice(0);
if (filter_term.includes(column.DEPARTMENT_SELECT_RANGE_MAP.CURRENT_USER_DEPARTMENT_AND_SUB)) {
var index = normalizedFilterTerm.indexOf(column.DEPARTMENT_SELECT_RANGE_MAP.CURRENT_USER_DEPARTMENT_AND_SUB);
var _ref3 = userDepartmentIdsMap || {},
_current_user_department_and_sub_ids = _ref3.current_user_department_and_sub_ids;
if (Array.isArray(_current_user_department_and_sub_ids)) {
normalizedFilterTerm.splice.apply(normalizedFilterTerm, [index, 1].concat(_toConsumableArray__default["default"](_current_user_department_and_sub_ids)));
}
}
if (filter_term.includes(column.DEPARTMENT_SELECT_RANGE_MAP.CURRENT_USER_DEPARTMENT)) {
var _index = normalizedFilterTerm.indexOf(column.DEPARTMENT_SELECT_RANGE_MAP.CURRENT_USER_DEPARTMENT);
var _ref4 = userDepartmentIdsMap || {},
_current_user_department_ids = _ref4.current_user_department_ids;
if (Array.isArray(_current_user_department_ids)) {
normalizedFilterTerm.splice.apply(normalizedFilterTerm, [_index, 1].concat(_toConsumableArray__default["default"](_current_user_department_ids)));
}
}
var uniqueArr = function uniqueArr(arr) {
return _toConsumableArray__default["default"](new Set(arr)).sort();
};
return uniqueArr(departmentIds).toString() === uniqueArr(normalizedFilterTerm).toString();
}
case filterPredicate.FILTER_PREDICATE_TYPE.EMPTY:
{
return !Array.isArray(departmentIds) || departmentIds.length === 0;
}
case filterPredicate.FILTER_PREDICATE_TYPE.NOT_EMPTY:
{
return Array.isArray(departmentIds) && departmentIds.length > 0;
}
default:
{
return false;
}
}
};
exports.departmentMultipleSelectFilter = departmentMultipleSelectFilter;