react-film
Version:
React component for showing carousel just like a film strip
56 lines (51 loc) • 5.66 kB
JavaScript
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
import PropTypes from 'prop-types';
import React, { useCallback } from 'react';
import useIndex from './hooks/useIndex';
import useScrollTo from './hooks/useScrollTo';
var Dot = function Dot(_ref) {
var ariaLabel = _ref['aria-label'],
itemIndex = _ref.itemIndex;
var _useIndex = useIndex(),
_useIndex2 = _slicedToArray(_useIndex, 1),
index = _useIndex2[0];
var scrollTo = useScrollTo();
var checked = index === itemIndex;
var handleChange = useCallback(function () {
return scrollTo(function () {
return itemIndex;
});
}, [itemIndex, scrollTo]);
var handleKeyPress = useCallback(function (event) {
var keyCode = event.keyCode; // 13 is ENTER, 32 is SPACEBAR.
// eslint-disable-next-line no-magic-numbers
if (keyCode === 13 || keyCode === 32) {
event.preventDefault();
event.stopPropagation();
handleChange();
}
}, [handleChange]);
return /*#__PURE__*/React.createElement("li", {
className: "react-film__dot"
}, /*#__PURE__*/React.createElement("input", {
"aria-label": ariaLabel,
"aria-pressed": checked,
checked: checked,
className: "react-film__dot__input",
onChange: handleChange,
onKeyPress: handleKeyPress,
role: "button",
type: "checkbox"
}), /*#__PURE__*/React.createElement("div", {
className: "react-film__dot__handle"
}));
};
Dot.defaultProps = {
'aria-label': undefined
};
Dot.propTypes = {
'aria-label': PropTypes.string,
itemIndex: PropTypes.number.isRequired
};
export default Dot;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Eb3QuanMiXSwibmFtZXMiOlsiUHJvcFR5cGVzIiwiUmVhY3QiLCJ1c2VDYWxsYmFjayIsInVzZUluZGV4IiwidXNlU2Nyb2xsVG8iLCJEb3QiLCJhcmlhTGFiZWwiLCJpdGVtSW5kZXgiLCJpbmRleCIsInNjcm9sbFRvIiwiY2hlY2tlZCIsImhhbmRsZUNoYW5nZSIsImhhbmRsZUtleVByZXNzIiwiZXZlbnQiLCJrZXlDb2RlIiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJkZWZhdWx0UHJvcHMiLCJ1bmRlZmluZWQiLCJwcm9wVHlwZXMiLCJzdHJpbmciLCJudW1iZXIiLCJpc1JlcXVpcmVkIl0sIm1hcHBpbmdzIjoiO0FBQUEsT0FBT0EsU0FBUCxNQUFzQixZQUF0QjtBQUNBLE9BQU9DLEtBQVAsSUFBZ0JDLFdBQWhCLFFBQW1DLE9BQW5DO0FBRUEsT0FBT0MsUUFBUCxNQUFxQixrQkFBckI7QUFDQSxPQUFPQyxXQUFQLE1BQXdCLHFCQUF4Qjs7QUFFQSxJQUFNQyxHQUFHLEdBQUcsU0FBTkEsR0FBTSxPQUE0QztBQUFBLE1BQTNCQyxTQUEyQixRQUF6QyxZQUF5QztBQUFBLE1BQWhCQyxTQUFnQixRQUFoQkEsU0FBZ0I7O0FBQ3RELGtCQUFnQkosUUFBUSxFQUF4QjtBQUFBO0FBQUEsTUFBT0ssS0FBUDs7QUFDQSxNQUFNQyxRQUFRLEdBQUdMLFdBQVcsRUFBNUI7QUFFQSxNQUFNTSxPQUFPLEdBQUdGLEtBQUssS0FBS0QsU0FBMUI7QUFDQSxNQUFNSSxZQUFZLEdBQUdULFdBQVcsQ0FBQztBQUFBLFdBQU1PLFFBQVEsQ0FBQztBQUFBLGFBQU1GLFNBQU47QUFBQSxLQUFELENBQWQ7QUFBQSxHQUFELEVBQWtDLENBQUNBLFNBQUQsRUFBWUUsUUFBWixDQUFsQyxDQUFoQztBQUVBLE1BQU1HLGNBQWMsR0FBR1YsV0FBVyxDQUNoQyxVQUFBVyxLQUFLLEVBQUk7QUFDUCxRQUFRQyxPQUFSLEdBQW9CRCxLQUFwQixDQUFRQyxPQUFSLENBRE8sQ0FHUDtBQUNBOztBQUNBLFFBQUlBLE9BQU8sS0FBSyxFQUFaLElBQWtCQSxPQUFPLEtBQUssRUFBbEMsRUFBc0M7QUFDcENELE1BQUFBLEtBQUssQ0FBQ0UsY0FBTjtBQUNBRixNQUFBQSxLQUFLLENBQUNHLGVBQU47QUFDQUwsTUFBQUEsWUFBWTtBQUNiO0FBQ0YsR0FYK0IsRUFZaEMsQ0FBQ0EsWUFBRCxDQVpnQyxDQUFsQztBQWVBLHNCQUNFO0FBQUksSUFBQSxTQUFTLEVBQUM7QUFBZCxrQkFDRTtBQUNFLGtCQUFZTCxTQURkO0FBRUUsb0JBQWNJLE9BRmhCO0FBR0UsSUFBQSxPQUFPLEVBQUVBLE9BSFg7QUFJRSxJQUFBLFNBQVMsRUFBQyx3QkFKWjtBQUtFLElBQUEsUUFBUSxFQUFFQyxZQUxaO0FBTUUsSUFBQSxVQUFVLEVBQUVDLGNBTmQ7QUFPRSxJQUFBLElBQUksRUFBQyxRQVBQO0FBUUUsSUFBQSxJQUFJLEVBQUM7QUFSUCxJQURGLGVBV0U7QUFBSyxJQUFBLFNBQVMsRUFBQztBQUFmLElBWEYsQ0FERjtBQWVELENBckNEOztBQXVDQVAsR0FBRyxDQUFDWSxZQUFKLEdBQW1CO0FBQ2pCLGdCQUFjQztBQURHLENBQW5CO0FBSUFiLEdBQUcsQ0FBQ2MsU0FBSixHQUFnQjtBQUNkLGdCQUFjbkIsU0FBUyxDQUFDb0IsTUFEVjtBQUVkYixFQUFBQSxTQUFTLEVBQUVQLFNBQVMsQ0FBQ3FCLE1BQVYsQ0FBaUJDO0FBRmQsQ0FBaEI7QUFLQSxlQUFlakIsR0FBZiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB1c2VJbmRleCBmcm9tICcuL2hvb2tzL3VzZUluZGV4JztcbmltcG9ydCB1c2VTY3JvbGxUbyBmcm9tICcuL2hvb2tzL3VzZVNjcm9sbFRvJztcblxuY29uc3QgRG90ID0gKHsgJ2FyaWEtbGFiZWwnOiBhcmlhTGFiZWwsIGl0ZW1JbmRleCB9KSA9PiB7XG4gIGNvbnN0IFtpbmRleF0gPSB1c2VJbmRleCgpO1xuICBjb25zdCBzY3JvbGxUbyA9IHVzZVNjcm9sbFRvKCk7XG5cbiAgY29uc3QgY2hlY2tlZCA9IGluZGV4ID09PSBpdGVtSW5kZXg7XG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IHVzZUNhbGxiYWNrKCgpID0+IHNjcm9sbFRvKCgpID0+IGl0ZW1JbmRleCksIFtpdGVtSW5kZXgsIHNjcm9sbFRvXSk7XG5cbiAgY29uc3QgaGFuZGxlS2V5UHJlc3MgPSB1c2VDYWxsYmFjayhcbiAgICBldmVudCA9PiB7XG4gICAgICBjb25zdCB7IGtleUNvZGUgfSA9IGV2ZW50O1xuXG4gICAgICAvLyAxMyBpcyBFTlRFUiwgMzIgaXMgU1BBQ0VCQVIuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbWFnaWMtbnVtYmVyc1xuICAgICAgaWYgKGtleUNvZGUgPT09IDEzIHx8IGtleUNvZGUgPT09IDMyKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBoYW5kbGVDaGFuZ2UoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtoYW5kbGVDaGFuZ2VdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8bGkgY2xhc3NOYW1lPVwicmVhY3QtZmlsbV9fZG90XCI+XG4gICAgICA8aW5wdXRcbiAgICAgICAgYXJpYS1sYWJlbD17YXJpYUxhYmVsfVxuICAgICAgICBhcmlhLXByZXNzZWQ9e2NoZWNrZWR9XG4gICAgICAgIGNoZWNrZWQ9e2NoZWNrZWR9XG4gICAgICAgIGNsYXNzTmFtZT1cInJlYWN0LWZpbG1fX2RvdF9faW5wdXRcIlxuICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgICBvbktleVByZXNzPXtoYW5kbGVLZXlQcmVzc31cbiAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAvPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJyZWFjdC1maWxtX19kb3RfX2hhbmRsZVwiIC8+XG4gICAgPC9saT5cbiAgKTtcbn07XG5cbkRvdC5kZWZhdWx0UHJvcHMgPSB7XG4gICdhcmlhLWxhYmVsJzogdW5kZWZpbmVkXG59O1xuXG5Eb3QucHJvcFR5cGVzID0ge1xuICAnYXJpYS1sYWJlbCc6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGl0ZW1JbmRleDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkXG59O1xuXG5leHBvcnQgZGVmYXVsdCBEb3Q7XG4iXX0=