@zohodesk/hooks
Version:
Unified Component Library - Hooks
108 lines (100 loc) • 2.75 kB
JavaScript
import React from 'react';
import * as constants from "./constants";
function selectSearchReducer(state, action) {
let initialState = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
list: [],
selected: '',
filteredOptions: [],
searchString: ''
};
let stateJson = initialState;
const actionType = action.type;
const {
data
} = action;
let val = {};
switch (actionType) {
case constants.SELECT:
val = handleSelect(data);
stateJson = { ...state,
...val
};
return stateJson;
case constants.UPDATE_FILTERED_OPTIONS:
val = updateFilteredOptions(data);
stateJson = { ...state,
...val
};
return stateJson;
case constants.SEARCH:
val = handleSearch(data);
stateJson = { ...state,
...val
};
return stateJson;
default:
return stateJson;
}
}
;
export default selectSearchReducer;
export function updateFilteredOptions(_ref) {
let {
selected,
list
} = _ref;
let filteredOptions = [];
list.map(obj => {
if (isArrayContainsOption(obj, list)) {
filteredOptions.push(obj);
}
});
return {
filteredOptions
};
}
export function handleSearch(_ref2) {
let {
searchString,
searchKey = 'value',
selected,
list
} = _ref2;
let newState = {
searchString,
filteredOptions: []
};
const searchStr = searchString.toLowerCase();
list.map(obj => {
const text = obj[searchKey] && obj[searchKey].toLowerCase();
if (isArrayContainsOption(obj, list) && isArrayContainsOption(obj, list) && text.indexOf(searchStr) !== -1) {
newState.filteredOptions.push(obj);
}
});
return newState;
}
export function handleSelect(_ref3) {
let {
option,
filteredOptions,
selected,
list,
searchKey = 'value'
} = _ref3;
let newState = {};
newState.selected = option[searchKey]; //newState.filteredOptions = filterOptionsArray(option, filteredOptions);
//console.log(option,filteredOptions,selected,newState);
return newState;
}
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 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;
}