@spaced-out/ui-design-system
Version:
Sense UI components library
148 lines (147 loc) • 5.47 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 _Button = require("../Button");
var _WeekdayPickerModule = _interopRequireDefault(require("./WeekdayPicker.module.css"));
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,
className,
size,
readOnly
} = _ref;
return /*#__PURE__*/React.createElement(_Button.UnstyledButton, {
key: day.key,
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,
[_WeekdayPickerModule.default.weekdayButtonDisabled]: isDisabled
}, className),
onClick: onClick,
disabled: isDisabled,
"aria-label": `Select ${day.label}`,
tabIndex: isDisabled || readOnly ? -1 : 0,
role: "checkbox"
}, day.secondaryLabel && /*#__PURE__*/React.createElement("div", {
className: (0, _classify.default)(_WeekdayPickerModule.default.secondaryLabel, {
[_WeekdayPickerModule.default.secondaryLabelSelected]: isSelected,
[_WeekdayPickerModule.default.secondaryLabelDisabled]: isDisabled
})
}, day.secondaryLabel), day.label);
};
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
} = _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__*/React.createElement("div", {
"data-testid": "Weekday-Picker",
ref: ref,
className: (0, _classify.default)(_WeekdayPickerModule.default.weekdayPickerContainer, classNames.wrapper, {
[_WeekdayPickerModule.default.weekdayReadOnly]: readOnly
}),
"aria-label": ariaLabel,
role: "group"
}, !!label && /*#__PURE__*/React.createElement("div", {
className: (0, _classify.default)(_WeekdayPickerModule.default.weekdayLabel, classNames.label)
}, label), /*#__PURE__*/React.createElement("div", {
className: _WeekdayPickerModule.default.weekdayPickerDays
}, 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__*/React.createElement(DayButton, {
key: day.key,
day: day,
isSelected: isSelected,
isDisabled: isDisabled,
onClick: event => {
if (isDisabled) {
event.preventDefault();
} else {
handleDayToggle(day, event);
}
},
className: classNames.button,
size: size,
readOnly: readOnly
});
})), !!helperText && /*#__PURE__*/React.createElement("div", {
className: (0, _classify.default)(_WeekdayPickerModule.default.weekdayHelperText, classNames.helperText)
}, helperText));
});