@unicef-polymer/etools-unicef
Version:
eTools UNICEF library of reusable components
79 lines (78 loc) • 2.92 kB
JavaScript
import { EtoolsFilterTypes } from './etools-filters';
export const isJsonStrMatch = (a, b) => {
return JSON.stringify(a) === JSON.stringify(b);
};
let selectedValueTypeByFilterKey;
export function setselectedValueTypeByFilterKey(val) {
selectedValueTypeByFilterKey = val;
}
export const getSelectedFiltersFromUrlParams = (params) => {
const selectedFilters = {};
for (const filterKey in params) {
if (params[filterKey]) {
if (selectedValueTypeByFilterKey &&
selectedValueTypeByFilterKey[filterKey] === 'Array' &&
!Array.isArray(params[filterKey])) {
selectedFilters[filterKey] = params[filterKey].split(',');
}
else if (selectedValueTypeByFilterKey && selectedValueTypeByFilterKey[filterKey] === 'boolean') {
selectedFilters[filterKey] = params[filterKey] === 'true';
}
else {
selectedFilters[filterKey] = params[filterKey];
}
}
}
return selectedFilters;
};
export const updateFiltersSelectedValues = (params, filters) => {
const availableFilters = [...filters];
if (!Object.keys(params).length) {
clearSelectedValuesInFilters(filters);
}
const selectedFilters = getSelectedFiltersFromUrlParams(params);
for (const fKey in selectedFilters) {
if (fKey) {
const selectedValue = selectedFilters[fKey];
if (selectedValue) {
const filter = availableFilters.find((f) => f.filterKey === fKey);
if (filter) {
if (filter.type === EtoolsFilterTypes.DropdownMulti && typeof selectedValue === 'string') {
filter.selectedValue = selectedValue.split(',');
}
else {
filter.selectedValue = selectedValue instanceof Array ? [...selectedValue] : selectedValue;
}
filter.selected = true;
}
}
}
}
return availableFilters;
};
export function clearSelectedValuesInFilters(filters) {
filters.forEach((f) => {
f.selectedValue = getFilterEmptyValue(f.type);
});
}
export function getFilterEmptyValue(filterType) {
switch (filterType) {
case EtoolsFilterTypes.Search:
return '';
case EtoolsFilterTypes.Toggle:
return false;
case EtoolsFilterTypes.Date:
case EtoolsFilterTypes.Dropdown:
return null;
case EtoolsFilterTypes.DropdownMulti:
return [];
}
}
export const updateFilterSelectionOptions = (filters, fKey, options) => {
const filter = filters.find((f) => f.filterKey === fKey);
if (filter && options) {
if (!isJsonStrMatch(filter.selectionOptions, options)) {
filter.selectionOptions = [...options];
}
}
};