@selfcommunity/react-ui
Version:
React UI Components to integrate a Community created with SelfCommunity Platform.
173 lines (172 loc) • 11.7 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const jsx_runtime_1 = require("react/jsx-runtime");
const react_1 = require("react");
const material_1 = require("@mui/material");
const system_1 = require("@mui/system");
const classnames_1 = tslib_1.__importDefault(require("classnames"));
const material_2 = require("@mui/material");
const react_intl_1 = require("react-intl");
const constants_1 = require("./constants");
const x_date_pickers_1 = require("@mui/x-date-pickers");
const types_1 = require("@selfcommunity/types");
const AdapterDateFns_1 = require("@mui/x-date-pickers/AdapterDateFns");
const react_core_1 = require("@selfcommunity/react-core");
const it_1 = tslib_1.__importDefault(require("date-fns/locale/it"));
const en_US_1 = tslib_1.__importDefault(require("date-fns/locale/en-US"));
const api_services_1 = require("@selfcommunity/api-services");
const Errors_1 = require("../../constants/Errors");
const utils_1 = require("@selfcommunity/utils");
const course_1 = require("../../utils/course");
const hooks_1 = require("../EditCourse/hooks");
const messages = (0, react_intl_1.defineMessages)({
pickerPlaceholder: {
id: 'ui.lessonReleaseMenu.scheduled.picker.placeholder',
defaultMessage: 'ui.lessonReleaseMenu.scheduled.picker.placeholder'
},
pickerCancelMessage: {
id: 'ui.lessonReleaseMenu.scheduled.picker.cancel',
defaultMessage: 'ui.lessonReleaseMenu.scheduled.picker.cancel'
},
pickerClearMessage: {
id: 'ui.lessonReleaseMenu.scheduled.picker.clear',
defaultMessage: 'ui.lessonReleaseMenu.scheduled.picker.clear'
},
pickerOkMessage: {
id: 'ui.lessonReleaseMenu.scheduled.picker.ok',
defaultMessage: 'ui.lessonReleaseMenu.scheduled.picker.ok'
}
});
const classes = {
root: `${constants_1.PREFIX}-root`,
label: `${constants_1.PREFIX}-label`,
picker: `${constants_1.PREFIX}-picker`,
popoverRoot: `${constants_1.PREFIX}-popover-root`,
popoverContent: `${constants_1.PREFIX}-popover-content`,
popoverSelection: `${constants_1.PREFIX}-popover-selection`,
popoverAction: `${constants_1.PREFIX}-popover-action`
};
const Root = (0, material_1.styled)(material_2.FormControl, {
name: constants_1.PREFIX,
slot: 'Root',
overridesResolver: (_props, styles) => [styles.root]
})(() => ({}));
const PopoverRoot = (0, material_1.styled)(material_2.Popover, {
name: constants_1.PREFIX,
slot: 'PopoverRoot',
overridesResolver: (_props, styles) => styles.popoverRoot
})(() => ({}));
function LessonReleaseMenu(inProps) {
// PROPS
const props = (0, system_1.useThemeProps)({
props: inProps,
name: constants_1.PREFIX
});
const { className = null, course, section, onSuccess } = props, rest = tslib_1.__rest(props, ["className", "course", "section", "onSuccess"]);
// CONTEXT
const scContext = (0, react_core_1.useSCContext)();
// STATE
const [drippedAt, setDrippedAt] = (0, react_1.useState)(null);
const { delay, _unit } = (0, course_1.getDripDelayAndUnit)((section === null || section === void 0 ? void 0 : section.drip_delay) || 0);
const [dripDelay, setDripDelay] = (0, react_1.useState)(delay);
const [unit, setUnit] = (0, react_1.useState)(_unit);
const [anchorEl, setAnchorEl] = (0, react_1.useState)(null);
const [open, setOpen] = (0, react_1.useState)(false);
// HOOKS
const { isDisabled } = (0, hooks_1.useIsDisabled)();
//INTL
const intl = (0, react_intl_1.useIntl)();
const handleUnitChange = (e) => {
setUnit(e.target.value);
};
// EFFECTS
(0, react_1.useEffect)(() => {
if (section && section.dripped_at) {
setDrippedAt(new Date(section.dripped_at));
}
else {
setDrippedAt(null);
}
}, [section, setDrippedAt]);
(0, react_1.useEffect)(() => {
if (section) {
setDripDelay(delay);
}
}, [section, setDripDelay]);
// HANDLERS
const handleClick = (event) => {
setAnchorEl(event.currentTarget);
setOpen(true);
};
const handleClose = () => {
setOpen(false);
};
const handleValueChange = (e) => {
setDripDelay(e.target.value);
};
const handleSave = () => {
const _delay = unit === constants_1.unitType.DAYS ? dripDelay : dripDelay * 7;
api_services_1.CourseService.patchCourseSection(course.id, section.id, { drip_delay: _delay })
.then((data) => {
setOpen(false);
onSuccess(data);
})
.catch((e) => {
utils_1.Logger.error(Errors_1.SCOPE_SC_UI, e);
});
};
const handleUpdate = (value) => {
api_services_1.CourseService.patchCourseSection(course.id, section.id, { dripped_at: value ? value.toISOString() : null })
.then((data) => {
setOpen(false);
onSuccess(data);
})
.catch((e) => {
utils_1.Logger.error(Errors_1.SCOPE_SC_UI, e);
});
};
const placeholderStructured = dripDelay > 0
? intl.formatMessage({
id: `ui.lessonReleaseMenu.structured.label.${unit}`,
defaultMessage: `ui.lessonReleaseMenu.structured.label.${unit}`
}, { total: dripDelay })
: intl.formatMessage({
id: 'ui.lessonReleaseMenu.now.label',
defaultMessage: 'ui.lessonReleaseMenu.now.label'
});
return ((0, jsx_runtime_1.jsx)(Root, Object.assign({ className: (0, classnames_1.default)(className, classes.root) }, rest, { children: course && course.type === types_1.SCCourseTypologyType.SCHEDULED ? ((0, jsx_runtime_1.jsx)(x_date_pickers_1.LocalizationProvider, Object.assign({ dateAdapter: AdapterDateFns_1.AdapterDateFns, adapterLocale: scContext.settings.locale.default === 'it' ? it_1.default : en_US_1.default, localeText: {
okButtonLabel: `${intl.formatMessage(messages.pickerOkMessage)}`,
cancelButtonLabel: `${intl.formatMessage(messages.pickerCancelMessage)}`,
clearButtonLabel: `${intl.formatMessage(messages.pickerClearMessage)}`
} }, { children: (0, jsx_runtime_1.jsx)(x_date_pickers_1.MobileDateTimePicker, { className: classes.picker, disablePast: true, label: drippedAt && ((0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.lessonReleaseMenu.scheduled.picker.placeholder", defaultMessage: "ui.lessonReleaseMenu.scheduled.picker.placeholder" })), value: drippedAt, slots: {
//actionBar: PickerActionBar,
tabs: (props) => (0, jsx_runtime_1.jsx)(x_date_pickers_1.DateTimePickerTabs, Object.assign({}, props)),
textField: (params) => ((0, jsx_runtime_1.jsx)(material_2.TextField, Object.assign({}, params, { error: false, InputProps: Object.assign(Object.assign({}, params.InputProps), { placeholder: `${intl.formatMessage(messages.pickerPlaceholder)}`, endAdornment: ((0, jsx_runtime_1.jsx)(material_2.InputAdornment, Object.assign({ position: "end" }, { children: (0, jsx_runtime_1.jsx)(material_2.IconButton, Object.assign({ disabled: isDisabled }, { children: (0, jsx_runtime_1.jsx)(material_2.Icon, { children: "expand_more" }) })) }))) }) })))
}, slotProps: {
tabs: {
hidden: false
},
toolbar: {
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore,@typescript-eslint/ban-ts-comment
// @ts-ignore
toolbarTitle: ((0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.lessonReleaseMenu.scheduled.picker.placeholder", defaultMessage: "ui.lessonReleaseMenu.scheduled.picker.placeholder" }))
},
actionBar: {
actions: ['cancel', 'clear', 'accept']
}
}, onChange: (value) => setDrippedAt(value), onAccept: handleUpdate, onClear: () => setDrippedAt(null), disabled: isDisabled }) }))) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(material_2.TextField, { size: "small", value: placeholderStructured, onClick: isDisabled ? undefined : handleClick, InputProps: {
endAdornment: ((0, jsx_runtime_1.jsx)(material_2.InputAdornment, Object.assign({ position: "end" }, { children: (0, jsx_runtime_1.jsx)(material_2.IconButton, Object.assign({ onClick: handleClick, disabled: isDisabled }, { children: (0, jsx_runtime_1.jsx)(material_2.Icon, { children: "expand_more" }) })) })))
}, disabled: isDisabled }), (0, jsx_runtime_1.jsxs)(PopoverRoot, Object.assign({ className: classes.popoverRoot, open: open, anchorEl: anchorEl, onClose: handleClose, anchorOrigin: {
vertical: 'bottom',
horizontal: 'left'
}, transformOrigin: {
vertical: 'top',
horizontal: 'left'
} }, { children: [(0, jsx_runtime_1.jsx)(material_2.Typography, Object.assign({ variant: "h6" }, { children: (0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.lessonReleaseMenu.dialog.title", defaultMessage: "ui.lessonReleaseMenu.dialog.title" }) })), (0, jsx_runtime_1.jsxs)(material_2.Box, Object.assign({ className: classes.popoverContent }, { children: [(0, jsx_runtime_1.jsxs)(material_2.Box, Object.assign({ className: classes.popoverSelection }, { children: [(0, jsx_runtime_1.jsx)(material_2.TextField, { type: "number", value: dripDelay, onChange: handleValueChange, InputProps: {
inputProps: {
min: 0
}
} }), (0, jsx_runtime_1.jsx)(material_2.FormControl, { children: (0, jsx_runtime_1.jsxs)(material_2.RadioGroup, Object.assign({ value: unit, onChange: handleUnitChange }, { children: [(0, jsx_runtime_1.jsx)(material_2.FormControlLabel, { value: constants_1.unitType.DAYS, control: (0, jsx_runtime_1.jsx)(material_2.Radio, { size: "small" }), label: (0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.lessonReleaseMenu.dialog.days", defaultMessage: "ui.lessonReleaseMenu.dialog.days" }) }), (0, jsx_runtime_1.jsx)(material_2.FormControlLabel, { value: constants_1.unitType.WEEKS, control: (0, jsx_runtime_1.jsx)(material_2.Radio, { size: "small" }), label: (0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.lessonReleaseMenu.dialog.weeks", defaultMessage: "ui.lessonReleaseMenu.dialog.weeks" }) })] })) })] })), (0, jsx_runtime_1.jsx)(material_2.Typography, Object.assign({ variant: "body1" }, { children: dripDelay > 0 ? ((0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: `ui.lessonReleaseMenu.dialog.info.structured.${unit}`, defaultMessage: `ui.lessonReleaseMenu.dialog.info.structured.${unit}`, values: { total: dripDelay } })) : ((0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.lessonReleaseMenu.dialog.info.now", defaultMessage: "ui.lessonReleaseMenu.dialog.info.now" })) })), (0, jsx_runtime_1.jsx)(material_2.Button, Object.assign({ className: classes.popoverAction, variant: "contained", disabled: section.drip_delay === dripDelay, onClick: handleSave }, { children: (0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.lessonReleaseMenu.dialog.button.done", defaultMessage: "ui.lessonReleaseMenu.dialog.button.done" }) }))] }))] }))] })) })));
}
exports.default = LessonReleaseMenu;