UNPKG

@selfcommunity/react-ui

Version:

React UI Components to integrate a Community created with SelfCommunity Platform.

173 lines (172 loc) • 11.7 kB
"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;