@zohodesk/hooks
Version:
Unified Component Library - Hooks
106 lines (94 loc) • 2.29 kB
JavaScript
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;
}
}