UNPKG

@livelike/react-native

Version:

LiveLike React Native package

76 lines (75 loc) 1.99 kB
"use strict"; 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