lucid-ui
Version:
A UI component library from Xandr.
76 lines • 4.54 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.MeridiemType = void 0;
var react_1 = __importStar(require("react"));
var style_helpers_1 = require("../../util/style-helpers");
var ClockIcon_1 = __importDefault(require("../Icon/ClockIcon/ClockIcon"));
var TimeSelectHour_1 = __importDefault(require("./TimeSelectHour"));
var TimeSelectMeridiem_1 = __importDefault(require("./TimeSelectMeridiem"));
var TimeSelectMinute_1 = __importDefault(require("./TimeSelectMinute"));
var cx = style_helpers_1.lucidClassNames.bind('&-TimeSelect');
var MeridiemType;
(function (MeridiemType) {
MeridiemType["AM"] = "AM";
MeridiemType["PM"] = "PM";
})(MeridiemType || (MeridiemType = {}));
exports.MeridiemType = MeridiemType;
var TimeSelect = function (_a) {
var time = _a.time, is24HourClock = _a.is24HourClock, onChange = _a.onChange, isDisabled = _a.isDisabled;
var _b = (0, react_1.useState)(false), inputFocus = _b[0], setInputFocus = _b[1];
var minute = (0, react_1.useMemo)(function () { return time.getMinutes(); }, [time]);
var _c = (0, react_1.useMemo)(function () {
var hour = time.getHours();
if (is24HourClock) {
return { hour: hour };
}
var cleanedHour = hour === 0 || hour === 12 ? 12 : hour < 12 ? hour : hour - 12;
var cleanedMeridiem = hour < 12 ? MeridiemType.AM : MeridiemType.PM;
return { hour: cleanedHour, meridiem: cleanedMeridiem };
}, [time, is24HourClock]), hour = _c.hour, _d = _c.meridiem, meridiem = _d === void 0 ? MeridiemType.AM : _d;
var isAM = (0, react_1.useMemo)(function () { return meridiem === MeridiemType.AM; }, [meridiem]);
var isDisabledClass = isDisabled ? '&-time-disabled' : '';
var timeSelectorClass = isDisabled ? '&-isDisabled' : '';
var toggleInputFocus = function () { return setInputFocus(!inputFocus); };
return (react_1.default.createElement("div", { className: cx('&', timeSelectorClass), onFocus: toggleInputFocus, onBlur: toggleInputFocus },
react_1.default.createElement(TimeSelectHour_1.default, { hour: hour, time: time, is24HourClock: is24HourClock, isAM: isAM, isDisabled: isDisabled, onChange: onChange }),
react_1.default.createElement("span", { className: cx(isDisabledClass) }, ":"),
react_1.default.createElement(TimeSelectMinute_1.default, { minute: minute, time: time, isDisabled: isDisabled, onChange: onChange }),
!is24HourClock && (react_1.default.createElement(TimeSelectMeridiem_1.default, { hour: hour, meridiem: meridiem, time: time, isDisabled: isDisabled, onChange: onChange })),
react_1.default.createElement(ClockIcon_1.default, { className: cx('&-clock', { active: !isDisabled && inputFocus }), disabled: isDisabled })));
};
TimeSelect.peek = {
description: "A time selector that is tab-able.",
notes: {
overview: "\n\t\t\tA time selector that is tab-able. Hour/Minute/Meridiem are tied together. As a user scrolls\n\t\t\tup or down, the hours or minutes and meridiem will corresponding scroll.\n\t\t",
technicalRecommendations: "\n\t\t\tUser must provide value. This component will process and return the next values.\n\t\t\tFor use as a pluggable pure functional component.\n\t\t",
intendedUse: "\n\t\t\tHelp users select a time with less risk of typing incorrect data.\n\t\t",
},
categories: ['controls', 'selectors'],
};
TimeSelect.defaultProps = {
time: new Date(),
};
exports.default = TimeSelect;
//# sourceMappingURL=TimeSelect.js.map