UNPKG

@selfcommunity/react-ui

Version:

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

80 lines (79 loc) 4.59 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const tslib_1 = require("tslib"); const jsx_runtime_1 = require("react/jsx-runtime"); const lab_1 = require("@mui/lab"); const material_1 = require("@mui/material"); const api_services_1 = require("@selfcommunity/api-services"); const react_1 = require("react"); const Errors_1 = require("../../constants/Errors"); const utils_1 = require("@selfcommunity/utils"); const react_intl_1 = require("react-intl"); const notistack_1 = require("notistack"); const constants_1 = require("./constants"); const pubsub_js_1 = tslib_1.__importDefault(require("pubsub-js")); const PubSub_1 = require("../../constants/PubSub"); const course_1 = require("../../types/course"); const classes = { requestButtonWrapper: `${constants_1.PREFIX}-request-button-wrapper` }; function RequestButton(props, ref) { // PROPS const { course, user, handleOpenDialog } = props; // STATES const [acceptLoading, setAcceptLoading] = (0, react_1.useState)(false); const [rejectLoading, setRejectLoading] = (0, react_1.useState)(false); // HOOKS const { enqueueSnackbar } = (0, notistack_1.useSnackbar)(); // HANDLERS const handleAccept = (0, react_1.useCallback)(() => { setAcceptLoading(true); const data = { users: [user.id] }; api_services_1.CourseService.inviteOrAcceptUsersToCourse(course.id, data) .then(() => { setAcceptLoading(false); pubsub_js_1.default.publish(`${PubSub_1.SCTopicType.COURSE}.${PubSub_1.SCCourseEventType.ADD_MEMBER}`, user); pubsub_js_1.default.publish(`${PubSub_1.SCTopicType.COURSE}.${PubSub_1.SCCourseEventType.REJECT_MEMBER}`, user); enqueueSnackbar((0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.editCourse.tab.requests.table.snackbar.accepted", defaultMessage: "ui.editCourse.tab.requests.table.snackbar.accepted" }), { variant: 'success', autoHideDuration: 3000 }); }) .catch((error) => { utils_1.Logger.error(Errors_1.SCOPE_SC_UI, error); enqueueSnackbar((0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.common.error.action", defaultMessage: "ui.common.error.action" }), { variant: 'error', autoHideDuration: 3000 }); }); }, [course, user, setAcceptLoading]); const handleReject = (0, react_1.useCallback)((userToReject) => { setRejectLoading(true); const params = { user: userToReject.id }; api_services_1.CourseService.leaveOrRemoveCourseRequest(course.id, params) .then(() => { setRejectLoading(false); pubsub_js_1.default.publish(`${PubSub_1.SCTopicType.COURSE}.${PubSub_1.SCCourseEventType.REJECT_MEMBER}`, userToReject); enqueueSnackbar((0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.editCourse.tab.requests.table.snackbar.rejected", defaultMessage: "ui.editCourse.tab.requests.table.snackbar.rejected" }), { variant: 'success', autoHideDuration: 3000 }); }) .catch((error) => { utils_1.Logger.error(Errors_1.SCOPE_SC_UI, error); enqueueSnackbar((0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.common.error.action", defaultMessage: "ui.common.error.action" }), { variant: 'error', autoHideDuration: 3000 }); }); }, [course, setRejectLoading]); (0, react_1.useImperativeHandle)(ref, () => ({ handleManageUser: (userToReject) => handleReject(userToReject) }), [handleReject]); return ((0, jsx_runtime_1.jsxs)(material_1.Stack, Object.assign({ className: classes.requestButtonWrapper }, { children: [(0, jsx_runtime_1.jsx)(lab_1.LoadingButton, Object.assign({ size: "small", color: "primary", variant: "outlined", onClick: handleAccept, loading: acceptLoading, disabled: acceptLoading }, { children: (0, jsx_runtime_1.jsx)(material_1.Icon, { children: "check" }) })), (0, jsx_runtime_1.jsx)(lab_1.LoadingButton, Object.assign({ size: "small", color: "inherit", variant: "outlined", onClick: () => handleOpenDialog({ tab: course_1.SCCourseEditTabType.REQUESTS, request: user }), loading: rejectLoading, disabled: rejectLoading }, { children: (0, jsx_runtime_1.jsx)(material_1.Icon, { children: "close" }) }))] }))); } exports.default = (0, react_1.memo)((0, react_1.forwardRef)(RequestButton));