@selfcommunity/react-ui
Version:
React UI Components to integrate a Community created with SelfCommunity Platform.
80 lines (79 loc) • 4.59 kB
JavaScript
"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));