UNPKG

@zohodesk/hooks

Version:

Unified Component Library - Hooks

108 lines (100 loc) 2.75 kB
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; }