@livelike/react-native
Version:
LiveLike React Native package
76 lines (75 loc) • 1.99 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useGifPicker = useGifPicker;
var _javascript = require("@livelike/javascript");
var _react = require("react");
const DEFAULT_GIF_STATE = {
gifImages: [],
isLoading: false,
error: null
};
function useGifPicker() {
const [{
gifImages,
isLoading,
error
}, setGifState] = (0, _react.useState)(DEFAULT_GIF_STATE);
let _loadNextGifImages;
const timeoutRef = (0, _react.useRef)(null);
const onGifSearchInputChange = (0, _react.useCallback)(function (gifSearchInput) {
let {
debounce
} = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
debounce: true
};
const searchGif = () => {
setGifState({
gifImages: [],
isLoading: true,
error: null
});
(0, _javascript.getGifs)({
search: gifSearchInput
}).then(res => {
res.results = res.results.filter((value, index, self) => index === self.findIndex(gif => gif.id === value.id));
return res;
}).then(res => {
setGifState({
gifImages: res.results,
isLoading: false,
error: null
});
_loadNextGifImages = res.next;
}).catch(error => {
setGifState({
gifImages: [],
isLoading: false,
error: error.message ?? 'Error fetching gif images'
});
});
};
if (timeoutRef.current) {
clearTimeout(timeoutRef.current);
}
timeoutRef.current = setTimeout(searchGif, !debounce ? 0 : 250);
}, [gifImages, isLoading, error]);
const loadNextGifImages = () => {
return _loadNextGifImages().then(res => {
setGifState({
gifImages: [...gifImages, ...res.value],
isLoading: false,
error: null
});
});
};
return {
isLoading,
gifImages,
loadNextGifImages,
onGifSearchInputChange,
error
};
}
//# sourceMappingURL=useGifPicker.js.map