UNPKG

@zohodesk/hooks

Version:

Unified Component Library - Hooks

106 lines (94 loc) 2.29 kB
import * as CONST from "./constants"; import isNextAvailable from "./utils/isNextAvailable"; import isPreviousAvailable from "./utils/isPreviousAvailable"; /** * @typedef item * @type object * @property {boolean} id - is Zoom * @property {boolean} isThumbnailViewOpen - is Item Loading. * @property {item} items - is Item Loading. * @property {string} selectedItemId - is Item Loading. * */ /** * @typedef state * @type object * @property {boolean} isZoom - is Zoom * @property {boolean} isThumbnailViewOpen - is Item Loading. * @property {item} items - is Item Loading. * @property {string} selectedItemId - is Item Loading. * */ export const init = { isZoom: false, isThumbnailViewOpen: false, items: [], selectedItemId: null }; /** * * @param {state} state * @param {object} action * @returns {object} */ export default function reducer(state, action) { switch (action.type) { case CONST.SELECT_ITEM: { const { selectedItemId } = action.data; return { ...state, selectedItemId }; } case CONST.NEXT_ITEM: { const { items, selectedItemId } = state; const selectedIndex = items.findIndex(item => item.id === selectedItemId); if (isNextAvailable(selectedIndex, items)) { return { ...state, selectedItemId: items[selectedIndex + 1].id }; } return state; } case CONST.PREVIOUS_ITEM: { const { items, selectedItemId } = state; const selectedIndex = items.findIndex(item => item.id == selectedItemId); if (isPreviousAvailable(selectedIndex, items)) { return { ...state, selectedItemId: items[selectedIndex - 1].id }; } return state; } case CONST.TOGGLE_THUMBNAIL_VIEW: { const { isThumbnailViewOpen } = state; return { ...state, isThumbnailViewOpen: !isThumbnailViewOpen }; } case CONST.TOGGLE_ZOOM_VIEW: { const { isZoom } = state; return { ...state, isZoom: !isZoom }; } default: return state; } }