phx-react
Version:
PHX REACT
96 lines • 6.29 kB
JavaScript
;
exports.__esModule = true;
exports.PHXDateRangePicker = void 0;
var tslib_1 = require("tslib");
var solid_1 = require("@heroicons/react/20/solid");
var date_fns_1 = require("date-fns");
var react_1 = tslib_1.__importStar(require("react"));
var Calendar_1 = tslib_1.__importDefault(require("./components/Calendar"));
var utils_1 = require("./utils");
var ErrorMessage_1 = tslib_1.__importDefault(require("../../commons/ErrorMessage"));
function classNames() {
var classes = [];
for (var _i = 0; _i < arguments.length; _i++) {
classes[_i] = arguments[_i];
}
return classes.filter(Boolean).join(' ');
}
function PHXDateRangePicker(_a) {
var className = _a.className, defaultValue = _a.defaultValue, disabled = _a.disabled, disabledDate = _a.disabledDate, error = _a.error, errorType = _a.errorType, label = _a.label, max = _a.max, min = _a.min, onChange = _a.onChange, position_component = _a.position_component, _b = _a.origin, origin = _b === void 0 ? 'bottom-left' : _b, _c = _a.isFullWidth, isFullWidth = _c === void 0 ? false : _c;
var message = function (type) {
var errorMessage = '';
switch (type) {
case 'required-field':
errorMessage = 'Vui lòng nhập thông tin';
break;
default:
break;
}
return errorMessage;
};
var inputRef = (0, react_1.useRef)(null);
var calendarRef = (0, react_1.useRef)(null);
var _d = (0, react_1.useState)(false), isCalendarVisible = _d[0], setIsCalendarVisible = _d[1];
var handleToggleCalendar = function () {
setIsCalendarVisible(true);
};
(0, react_1.useEffect)(function () {
var handleClickOutside = function (event) {
if (calendarRef.current &&
!calendarRef.current.contains(event.target) &&
inputRef.current &&
!inputRef.current.contains(event.target)) {
setIsCalendarVisible(false);
}
};
document.addEventListener('mousedown', handleClickOutside);
return function () {
document.removeEventListener('mousedown', handleClickOutside);
};
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
(0, react_1.useEffect)(function () {
if (defaultValue) {
var endDate = new Date();
var startDate = (0, date_fns_1.subDays)(endDate, defaultValue - 1);
var formattedStartDate = (0, date_fns_1.format)(startDate, 'dd-MM-yyyy');
var formattedEndDate = (0, date_fns_1.format)(endDate, 'dd-MM-yyyy');
var parsedStartDate = (0, date_fns_1.parse)(formattedStartDate, 'dd-MM-yyyy', new Date());
var parsedEndDate = (0, date_fns_1.parse)(formattedEndDate, 'dd-MM-yyyy', new Date());
handleResult(parsedStartDate, parsedEndDate);
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [defaultValue]);
var _e = (0, react_1.useState)('Ngày hôm nay'), viewResult = _e[0], setViewResult = _e[1];
var handleResult = function (startDate, endDate) {
if (!startDate || !endDate) {
return;
}
var startDateResult = (0, date_fns_1.format)(startDate, 'yyyy/MM/dd');
var endDateResult = (0, date_fns_1.format)(endDate, 'yyyy/MM/dd');
if (onChange && startDateResult && endDateResult) {
onChange({ startDate: startDateResult, endDate: endDateResult });
}
var viewDate = (0, utils_1.formatViewResult)(startDate, endDate);
setViewResult(viewDate);
setIsCalendarVisible(false);
};
var handleCancel = function () {
setIsCalendarVisible(false);
};
return (react_1["default"].createElement("div", { className: className },
label && react_1["default"].createElement("label", { className: 'mb-1 block text-xs font-normal text-gray-700' }, label),
react_1["default"].createElement("div", { className: 'relative' },
react_1["default"].createElement("button", { disabled: disabled, className: classNames("bg-white px-2.5 py-1.5 relative flex items-center justify-center text-xs rounded-lg font-normal text-gray-900 shadow-sm border border-gray-300 hover:border-gray-400 ".concat(isCalendarVisible
? '!shadow-[0rem_0.125rem_0.1rem_0rem_#0004_inset] !border-b-gray-300 !bg-gray-100 pb-[0.3rem] pt-[0.45rem]'
: ''), 'before:transtion-opacity shadow-[inset_0_1px_theme(colors.white/0.07),0_0.12px_0_theme(colors.gray.900/0.5)] group relative isolate flex items-center justify-center overflow-hidden transition duration-300 ease-[cubic-bezier(0.4,0.36,0,1)] before:pointer-events-none before:absolute before:inset-0 before:-z-10 before:bg-gradient-to-b before:from-white/20 before:opacity-50 before:duration-300 before:ease-[cubic-bezier(0.4,0.36,0,1)] after:pointer-events-none after:absolute after:inset-0 after:-z-10 after:bg-gradient-to-b after:from-white/10 after:from-[46%] after:to-[54%] after:mix-blend-overlay hover:before:opacity-100', isFullWidth ? 'w-full' : '', className), onClick: handleToggleCalendar, ref: inputRef, type: 'button' },
react_1["default"].createElement(solid_1.CalendarDaysIcon, { className: 'mr-1 h-4 w-4 text-gray-500' }),
viewResult),
error && errorType ? react_1["default"].createElement(ErrorMessage_1["default"], { message: message(errorType) }) : null,
react_1["default"].createElement("div", { ref: calendarRef, className: position_component === 'left'
? classNames('left-30 absolute right-[8px] top-10 z-50', isCalendarVisible ? '' : 'hidden')
: classNames('absolute z-50', origin === 'top-left' && '-top-60 left-0', origin === 'top-right' && '-top-60 right-0', origin === 'bottom-left' && 'left-0 top-10', origin === 'bottom-right' && 'right-0 top-10', isCalendarVisible ? '' : 'hidden') },
react_1["default"].createElement(Calendar_1["default"], { defaultDate: defaultValue, disabledDate: disabledDate, handleCancel: handleCancel, handleResult: handleResult, max: max, min: min })))));
}
exports.PHXDateRangePicker = PHXDateRangePicker;
//# sourceMappingURL=DatePicker.js.map