@zohodesk/hooks
Version:
Unified Component Library - Hooks
136 lines (133 loc) • 3.62 kB
JavaScript
export function addOption(_ref) {
let {
option,
list,
filteredOptions
} = _ref;
// NEED TO CHECK OPTION IS ALREADY AVAILABLE
let newState = {
list,
filteredOptions
};
newState.list.push(option);
newState.filteredOptions.push(option);
return newState;
} // export function getAllOptions(state) {
// return state.list;
// }
// export function getFilteredOptions(state) {
// return state && state.filteredOptions;
// }
// export function getselectedOptions(state) {
// return state.selectedOptions;
// }
export function updateFilteredOptions(_ref2) {
let {
selectedOptions,
list
} = _ref2;
let filteredOptions = [];
list.map(obj => {
if (!isArrayContainsOption(obj, selectedOptions)) {
filteredOptions.push(obj);
}
});
return {
filteredOptions
};
}
export function isArrayContainsOption(obj, array) {
let key = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'value';
// NEED TO UPDATE THE OBJECT COMPARISON
// return array.filter((item) => JSON.stringify(item) === JSON.stringify(obj)).length > 0;
return array.filter(item => item[key] === obj[key]).length > 0;
}
export function filterOptionsArray(obj, array) {
let key = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'value';
// NEED TO UPDATE THE OBJECT COMPARISON
// return array.filter((item) => JSON.stringify(item) !== JSON.stringify(obj));
return array.filter(item => item[key] !== obj[key]);
} // export function searchFilter(str, key = 'value', state) {
// state.searchString = str;
// const searchStr = str.toLowerCase();
// const data = [];
// state.list.map((obj) => {
// const text = obj[key] && obj[key].toLowerCase();
// if (isArrayContainsOption(obj, state.list) && !isArrayContainsOption(obj, state.selectedOptions) && text.indexOf(searchStr) !== -1) {
// data.push(obj);
// }
// });
// state.filteredOptions = data;
// return state;
// }
// Updated
export function handleSearch(_ref3) {
let {
searchString,
searchKey = 'value',
selectedOptions,
list
} = _ref3;
let newState = {
searchString,
filteredOptions: []
};
const searchStr = searchString.toLowerCase();
list.map(obj => {
const text = obj[searchKey] && obj[searchKey].toLowerCase();
if (isArrayContainsOption(obj, list) && !isArrayContainsOption(obj, selectedOptions) && text.indexOf(searchStr) !== -1) {
newState.filteredOptions.push(obj);
}
});
return newState;
}
export function handleSelect(_ref4) {
let {
option,
filteredOptions,
selectedOptions
} = _ref4;
let newState = {
selectedOptions
};
newState.selectedOptions.push(option);
newState.filteredOptions = filterOptionsArray(option, filteredOptions);
return newState;
}
export function handleRemove(_ref5) {
let {
option,
selectedOptions,
list
} = _ref5;
let newState = {};
newState.selectedOptions = filterOptionsArray(option, selectedOptions);
newState.filteredOptions = list.filter(opt => !isArrayContainsOption(opt, newState.selectedOptions));
return newState;
}
export function handleSelectAll(_ref6) {
let {
list,
selectedOptions
} = _ref6;
let newState = {
selectedOptions,
filteredOptions: []
};
list.map(obj => {
if (!isArrayContainsOption(obj, selectedOptions)) {
newState.selectedOptions.push(obj);
}
});
return newState;
}
export function handleRemoveAll(_ref7) {
let {
list
} = _ref7;
let newState = {
selectedOptions: [],
filteredOptions: list
};
return newState;
}