@activecollab/components
Version:
ActiveCollab Components
72 lines • 2.72 kB
JavaScript
import _extends from "@babel/runtime/helpers/esm/extends";
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
const _excluded = ["mode", "selected", "min", "max", "onChange", "target", "triggerMode", "step"];
import React from "react";
import moment from "moment";
import { isValidTime } from "../../utils/timeUtils";
import { Select } from "../Select/Select";
import { SelectTrigger } from "../SelectTrigger";
const renderOption = option => {
return /*#__PURE__*/React.createElement("div", {
id: option.id
}, option.name);
};
export const SelectTime = _ref => {
let _ref$mode = _ref.mode,
mode = _ref$mode === void 0 ? "24" : _ref$mode,
selected = _ref.selected,
_ref$min = _ref.min,
min = _ref$min === void 0 ? "00:00" : _ref$min,
_ref$max = _ref.max,
max = _ref$max === void 0 ? "23:45" : _ref$max,
onChange = _ref.onChange,
target = _ref.target,
triggerMode = _ref.triggerMode,
_ref$step = _ref.step,
step = _ref$step === void 0 ? 15 : _ref$step,
rest = _objectWithoutPropertiesLoose(_ref, _excluded);
const generateTimeOptions = () => {
const minTime = moment(isValidTime(min) ? min : "00:00", "HH:mm");
const maxTime = moment(isValidTime(max) ? max : "23:45", "HH:mm");
const options = [];
const currentTime = minTime.clone();
while (currentTime.isSameOrBefore(maxTime)) {
options.push({
id: currentTime.format("HH:mm"),
name: currentTime.format(mode === "12" ? "hh:mm A" : "HH:mm")
});
currentTime.add(step, "minutes");
}
return options;
};
const timeOptions = generateTimeOptions();
const displaySelectedTime = moment(selected, "HH:mm").format(mode === "12" ? "hh:mm A" : "HH:mm");
const handleScrollToSelected = () => {
if (selected) {
setTimeout(() => {
var _document$getElementB;
const selectedItem = (_document$getElementB = document.getElementById(selected)) == null ? void 0 : _document$getElementB.parentElement;
selectedItem == null || selectedItem.scrollIntoView({
behavior: "smooth",
block: "center"
});
}, 50);
}
};
return /*#__PURE__*/React.createElement(Select, {
options: timeOptions,
disabledInternalSort: true,
selected: selected,
disableSearch: true,
keepSameOptionsOrder: true,
target: target ? target : /*#__PURE__*/React.createElement(SelectTrigger, _extends({
mode: triggerMode
}, rest), displaySelectedTime),
mode: "tiny",
renderOption: renderOption,
onChange: onChange,
forceCloseMenu: true,
onSelectOpen: handleScrollToSelected
});
};
//# sourceMappingURL=SelectTime.js.map