@spaced-out/ui-design-system
Version:
Sense UI components library
171 lines (170 loc) • 6.18 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.WeekdayPicker = exports.WEEKDAY_PICKER_SIZE = void 0;
var React = _interopRequireWildcard(require("react"));
var _classify = _interopRequireDefault(require("../../utils/classify"));
var _qa = require("../../utils/qa");
var _Button = require("../Button");
var _WeekdayPickerModule = _interopRequireDefault(require("./WeekdayPicker.module.css"));
var _jsxRuntime = require("react/jsx-runtime");
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
const DEFAULT_WEEKDAYS = [{
key: 'sun',
label: 'S'
}, {
key: 'mon',
label: 'M'
}, {
key: 'tue',
label: 'T'
}, {
key: 'wed',
label: 'W'
}, {
key: 'thu',
label: 'T'
}, {
key: 'fri',
label: 'F'
}, {
key: 'sat',
label: 'S'
}];
const WEEKEND_KEYS = ['sat', 'sun'];
const WEEKDAY_PICKER_SIZE = exports.WEEKDAY_PICKER_SIZE = Object.freeze({
small: 'small',
medium: 'medium'
});
const DayButton = _ref => {
let {
day,
isSelected,
isDisabled,
onClick,
classNames,
size,
readOnly,
testId
} = _ref;
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Button.UnstyledButton, {
className: (0, _classify.default)(_WeekdayPickerModule.default.weekdayButton, {
[_WeekdayPickerModule.default.weekdayButtonMedium]: size === WEEKDAY_PICKER_SIZE.medium,
[_WeekdayPickerModule.default.weekdayButtonSmall]: size === WEEKDAY_PICKER_SIZE.small,
[_WeekdayPickerModule.default.weekdayButtonSelected]: isSelected,
...(classNames?.selectedButton && {
[classNames.selectedButton]: isSelected
}),
[_WeekdayPickerModule.default.weekdayButtonDisabled]: isDisabled
}, classNames?.button),
onClick: onClick,
disabled: isDisabled,
"aria-label": `Select ${day.label}`,
tabIndex: isDisabled || readOnly ? -1 : 0,
role: "checkbox",
testId: (0, _qa.generateTestId)({
base: testId,
slot: 'day-button',
index: day.key
}),
children: [day.secondaryLabel && /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
className: (0, _classify.default)(_WeekdayPickerModule.default.secondaryLabel, {
[_WeekdayPickerModule.default.secondaryLabelSelected]: isSelected,
[_WeekdayPickerModule.default.secondaryLabelDisabled]: isDisabled
}),
children: day.secondaryLabel
}), day.label]
}, day.key);
};
const WeekdayPicker = exports.WeekdayPicker = /*#__PURE__*/React.forwardRef((_ref2, ref) => {
let {
size = 'medium',
selectedWeekDays = [],
disabledWeekDays = [],
hiddenWeekDays = [],
customDayLabels = DEFAULT_WEEKDAYS,
onChange,
readOnly = false,
classNames = {},
showWeekends = true,
ariaLabel = 'Select weekdays',
label,
helperText,
disableMultiSelect = false,
testId
} = _ref2;
const [selectedDays, setSelectedDays] = React.useState(selectedWeekDays);
const handleDayToggle = (day, event) => {
if (readOnly || disabledWeekDays.includes(day.key)) {
return;
}
let updatedSelectedDays = selectedDays;
if (disableMultiSelect) {
if (selectedDays.some(selected => selected.key === day.key)) {
updatedSelectedDays = [];
} else {
updatedSelectedDays = [day];
}
} else {
const isSelected = selectedDays.some(selected => selected.key === day.key);
if (isSelected) {
updatedSelectedDays = selectedDays.filter(selected => selected.key !== day.key);
} else {
updatedSelectedDays = [...selectedDays, day];
}
}
setSelectedDays(updatedSelectedDays);
onChange?.(updatedSelectedDays, event);
};
return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
"data-testid": (0, _qa.generateTestId)({
base: testId,
slot: 'wrapper'
}),
ref: ref,
className: (0, _classify.default)(_WeekdayPickerModule.default.weekdayPickerContainer, classNames.wrapper, {
[_WeekdayPickerModule.default.weekdayReadOnly]: readOnly
}),
"aria-label": ariaLabel,
role: "group",
children: [!!label && /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
className: (0, _classify.default)(_WeekdayPickerModule.default.weekdayLabel, classNames.label),
children: label
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
className: _WeekdayPickerModule.default.weekdayPickerDays,
children: customDayLabels.map(day => {
const isWeekend = WEEKEND_KEYS.includes(day.key);
const isHidden = hiddenWeekDays.includes(day.key);
if (!showWeekends && isWeekend || isHidden) {
return null;
}
const isSelected = selectedDays.some(selected => selected.key === day.key);
const isDisabled = disabledWeekDays.includes(day.key);
return /*#__PURE__*/(0, _jsxRuntime.jsx)(DayButton, {
day: day,
isSelected: isSelected,
isDisabled: isDisabled,
onClick: event => {
if (isDisabled) {
event.preventDefault();
} else {
handleDayToggle(day, event);
}
},
classNames: {
button: classNames.button,
selectedButton: classNames.selectedButton
},
size: size,
readOnly: readOnly,
testId: testId
}, day.key);
})
}), !!helperText && /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
className: (0, _classify.default)(_WeekdayPickerModule.default.weekdayHelperText, classNames.helperText),
children: helperText
})]
});
});