react-carousel-query
Version:
A infinite carousel component made with react that handles the pagination for you.
137 lines (118 loc) • 2.73 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.createRenderHook = createRenderHook;
Object.defineProperty(exports, "cleanup", {
enumerable: true,
get: function () {
return _cleanup.cleanup;
}
});
Object.defineProperty(exports, "addCleanup", {
enumerable: true,
get: function () {
return _cleanup.addCleanup;
}
});
Object.defineProperty(exports, "removeCleanup", {
enumerable: true,
get: function () {
return _cleanup.removeCleanup;
}
});
Object.defineProperty(exports, "suppressErrorOutput", {
enumerable: true,
get: function () {
return _console.suppressErrorOutput;
}
});
var _asyncUtils = require("./asyncUtils");
var _cleanup = require("./cleanup");
var _console = require("./console");
function resultContainer() {
const results = [];
const resolvers = [];
const result = {
get all() {
return results.map(({
value,
error
}) => error != null ? error : value);
},
get current() {
var _results;
const {
value,
error
} = (_results = results[results.length - 1]) != null ? _results : {};
if (error) {
throw error;
}
return value;
},
get error() {
var _results2;
const {
error
} = (_results2 = results[results.length - 1]) != null ? _results2 : {};
return error;
}
};
const updateResult = (value, error) => {
results.push({
value,
error
});
resolvers.splice(0, resolvers.length).forEach(resolve => resolve());
};
return {
result,
addResolver: resolver => {
resolvers.push(resolver);
},
setValue: value => updateResult(value),
setError: error => updateResult(undefined, error)
};
}
function createRenderHook(createRenderer) {
const renderHook = (callback, options = {}) => {
const {
result,
setValue,
setError,
addResolver
} = resultContainer();
const renderProps = {
callback,
setValue,
setError
};
let hookProps = options.initialProps;
const {
render,
rerender,
unmount,
act,
...renderUtils
} = createRenderer(renderProps, options);
render(hookProps);
const rerenderHook = (newProps = hookProps) => {
hookProps = newProps;
rerender(hookProps);
};
const unmountHook = () => {
(0, _cleanup.removeCleanup)(unmountHook);
unmount();
};
(0, _cleanup.addCleanup)(unmountHook);
return {
result,
rerender: rerenderHook,
unmount: unmountHook,
...(0, _asyncUtils.asyncUtils)(act, addResolver),
...renderUtils
};
};
return renderHook;
}