dtable-utils
Version:
dtable common utils
77 lines (74 loc) • 3.36 kB
JavaScript
import { DEPARTMENT_SELECT_RANGE_MAP } from '../../constants/column.js';
import { FILTER_PREDICATE_TYPE } from '../../constants/filter/filter-predicate.js';
import { isCurrentUserDepartmentAndSub, isSpecificDepartment, isCurrentUserDepartment } from '../core.js';
/**
* Filter department-single-select
* @param {number} departmentId
* @param {string} filter_predicate
* @param {number|array} filter_term department id or department ids
* @param {object} userDepartmentIdsMap
* @returns bool
*/
var departmentSingleSelectFilter = function departmentSingleSelectFilter(departmentId, _ref, userDepartmentIdsMap) {
var filter_predicate = _ref.filter_predicate,
filter_term = _ref.filter_term;
switch (filter_predicate) {
case FILTER_PREDICATE_TYPE.IS:
{
if (!filter_term) return true;
if (filter_term === DEPARTMENT_SELECT_RANGE_MAP.CURRENT_USER_DEPARTMENT) {
return isCurrentUserDepartment(departmentId, userDepartmentIdsMap);
}
if (filter_term === DEPARTMENT_SELECT_RANGE_MAP.CURRENT_USER_DEPARTMENT_AND_SUB) {
return isCurrentUserDepartmentAndSub(departmentId, userDepartmentIdsMap);
}
return departmentId === filter_term;
}
case FILTER_PREDICATE_TYPE.IS_NOT:
{
if (!filter_term) return true;
if (filter_term === DEPARTMENT_SELECT_RANGE_MAP.CURRENT_USER_DEPARTMENT) {
return !isCurrentUserDepartment(departmentId, userDepartmentIdsMap);
}
if (filter_term === DEPARTMENT_SELECT_RANGE_MAP.CURRENT_USER_DEPARTMENT_AND_SUB) {
return !isCurrentUserDepartmentAndSub(departmentId, userDepartmentIdsMap);
}
return departmentId !== filter_term;
}
case FILTER_PREDICATE_TYPE.IS_ANY_OF:
{
if (filter_term.length === 0) return true;
if (filter_term.includes(DEPARTMENT_SELECT_RANGE_MAP.CURRENT_USER_DEPARTMENT_AND_SUB)) {
return isCurrentUserDepartmentAndSub(departmentId, userDepartmentIdsMap) || isSpecificDepartment(departmentId, filter_term);
}
if (filter_term.includes(DEPARTMENT_SELECT_RANGE_MAP.CURRENT_USER_DEPARTMENT)) {
return isCurrentUserDepartment(departmentId, userDepartmentIdsMap) || isSpecificDepartment(departmentId, filter_term);
}
return isSpecificDepartment(departmentId, filter_term);
}
case FILTER_PREDICATE_TYPE.IS_NONE_OF:
{
if (filter_term.length === 0) return true;
if (filter_term.includes(DEPARTMENT_SELECT_RANGE_MAP.CURRENT_USER_DEPARTMENT_AND_SUB)) {
return !isCurrentUserDepartmentAndSub(departmentId, userDepartmentIdsMap) && !isSpecificDepartment(departmentId, filter_term);
}
if (filter_term.includes(DEPARTMENT_SELECT_RANGE_MAP.CURRENT_USER_DEPARTMENT)) {
return !isCurrentUserDepartment(departmentId, userDepartmentIdsMap) && !isSpecificDepartment(departmentId, filter_term);
}
return !isSpecificDepartment(departmentId, filter_term);
}
case FILTER_PREDICATE_TYPE.EMPTY:
{
return !departmentId || typeof departmentId !== 'number';
}
case FILTER_PREDICATE_TYPE.NOT_EMPTY:
{
return !!(departmentId && typeof departmentId === 'number');
}
default:
{
return false;
}
}
};
export { departmentSingleSelectFilter };