fix: add a post during active blackout dates fixed for all roles

This commit is contained in:
ayeshoali
2022-11-22 15:48:37 +05:00
committed by ayesha waris
parent 5c3d561152
commit b976e812dc
6 changed files with 89 additions and 10 deletions

View File

@@ -10,9 +10,12 @@ import { Button, useToggle } from '@edx/paragon';
import HTMLLoader from '../../../components/HTMLLoader';
import { ContentActions } from '../../../data/constants';
import { AlertBanner, DeleteConfirmation, EndorsedAlertBanner } from '../../common';
import { selectBlackoutDate } from '../../data/selectors';
import {
selectBlackoutDate, selectIsCourseAdmin,
selectIsCourseStaff, selectUserHasModerationPrivileges, selectUserIsGroupTa, selectUserIsStaff,
} from '../../data/selectors';
import { fetchThread } from '../../posts/data/thunks';
import { inBlackoutDateRange } from '../../utils';
import { handleAddPostForRoles, inBlackoutDateRange } from '../../utils';
import CommentIcons from '../comment-icons/CommentIcons';
import { selectCommentCurrentPage, selectCommentHasMorePages, selectCommentResponses } from '../data/selectors';
import { editComment, fetchCommentResponses, removeComment } from '../data/thunks';
@@ -39,6 +42,24 @@ function Comment({
const hasMorePages = useSelector(selectCommentHasMorePages(comment.id));
const currentPage = useSelector(selectCommentCurrentPage(comment.id));
const blackoutDateRange = useSelector(selectBlackoutDate);
const isUserAdmin = useSelector(selectUserIsStaff);
const userHasModerationPrivilages = useSelector(selectUserHasModerationPrivileges);
const isUserGroupTA = useSelector(selectUserIsGroupTa);
const isCourseAdmin = useSelector(selectIsCourseAdmin);
const isCourseStaff = useSelector(selectIsCourseStaff);
const hasPrivilege = handleAddPostForRoles(isUserAdmin, userHasModerationPrivilages,
isUserGroupTA, isCourseAdmin, isCourseStaff);
const handleAddComment = () => {
if ((!(inBlackoutDateRange(blackoutDateRange)))) {
return true;
}
if (hasPrivilege) {
return true;
}
return false;
};
useEffect(() => {
// If the comment has a parent comment, it won't have any children, so don't fetch them.
@@ -127,7 +148,7 @@ function Comment({
/>
) : (
<>
{(!isClosedPost && !inBlackoutDateRange(blackoutDateRange))
{(!isClosedPost && handleAddComment())
&& (
<Button
className="d-flex flex-grow mt-3 py-2 font-size-14"

View File

@@ -8,8 +8,11 @@ import { injectIntl, intlShape } from '@edx/frontend-platform/i18n';
import { Button } from '@edx/paragon';
import { DiscussionContext } from '../../common/context';
import { selectBlackoutDate } from '../../data/selectors';
import { inBlackoutDateRange } from '../../utils';
import {
selectBlackoutDate, selectIsCourseAdmin,
selectIsCourseStaff, selectUserHasModerationPrivileges, selectUserIsGroupTa, selectUserIsStaff,
} from '../../data/selectors';
import { handleAddPostForRoles, inBlackoutDateRange } from '../../utils';
import messages from '../messages';
import CommentEditor from './CommentEditor';
@@ -20,12 +23,29 @@ function ResponseEditor({
}) {
const { inContext } = useContext(DiscussionContext);
const [addingResponse, setAddingResponse] = useState(false);
const blackoutDateRange = useSelector(selectBlackoutDate);
const isUserAdmin = useSelector(selectUserIsStaff);
const userHasModerationPrivilages = useSelector(selectUserHasModerationPrivileges);
const isUserGroupTA = useSelector(selectUserIsGroupTa);
const isCourseAdmin = useSelector(selectIsCourseAdmin);
const isCourseStaff = useSelector(selectIsCourseStaff);
useEffect(() => {
setAddingResponse(false);
}, [postId]);
const blackoutDateRange = useSelector(selectBlackoutDate);
const hasPrivilege = handleAddPostForRoles(isUserAdmin, userHasModerationPrivilages,
isUserGroupTA, isCourseAdmin, isCourseStaff);
const handleAddResponse = () => {
if ((!(inBlackoutDateRange(blackoutDateRange)))) {
return true;
}
if (hasPrivilege) {
return true;
}
return false;
};
return addingResponse
? (
@@ -37,7 +57,7 @@ function ResponseEditor({
/>
</div>
)
: !inBlackoutDateRange(blackoutDateRange) && (
: handleAddResponse() && (
<div className={classNames({ 'mb-4': addWrappingDiv }, 'actions d-flex')}>
<Button
variant="primary"

View File

@@ -24,6 +24,10 @@ export const selectBlackoutDate = state => state.config.blackouts;
export const selectGroupAtSubsection = state => state.config.groupAtSubsection;
export const selectIsCourseAdmin = state => state.config.isCourseAdmin;
export const selectIsCourseStaff = state => state.config.isCourseStaff;
export const selectModerationSettings = state => ({
postCloseReasons: state.config.postCloseReasons,
editReasons: state.config.editReasons,

View File

@@ -14,6 +14,8 @@ const configSlice = createSlice({
groupAtSubsection: false,
hasModerationPrivileges: false,
isGroupTa: false,
isCourseAdmin: false,
isCourseStaff: false,
isUserAdmin: false,
learnersTabEnabled: false,
settings: {

View File

@@ -12,8 +12,13 @@ import { Close } from '@edx/paragon/icons';
import Search from '../../../components/Search';
import { RequestStatus } from '../../../data/constants';
import { selectBlackoutDate, selectconfigLoadingStatus } from '../../data/selectors';
import { inBlackoutDateRange, postMessageToParent } from '../../utils';
import {
selectBlackoutDate, selectconfigLoadingStatus,
selectIsCourseAdmin, selectIsCourseStaff,
selectUserHasModerationPrivileges, selectUserIsGroupTa,
selectUserIsStaff,
} from '../../data/selectors';
import { handleAddPostForRoles, inBlackoutDateRange, postMessageToParent } from '../../utils';
import { showPostEditor } from '../data';
import messages from './messages';
@@ -26,11 +31,29 @@ function PostActionsBar({
const dispatch = useDispatch();
const loadingStatus = useSelector(selectconfigLoadingStatus);
const blackoutDateRange = useSelector(selectBlackoutDate);
const isUserAdmin = useSelector(selectUserIsStaff);
const userHasModerationPrivilages = useSelector(selectUserHasModerationPrivileges);
const isUserGroupTA = useSelector(selectUserIsGroupTa);
const isCourseAdmin = useSelector(selectIsCourseAdmin);
const isCourseStaff = useSelector(selectIsCourseStaff);
const handleCloseInContext = () => {
postMessageToParent('learning.events.sidebar.close');
};
const hasPrivilege = handleAddPostForRoles(isUserAdmin, userHasModerationPrivilages,
isUserGroupTA, isCourseAdmin, isCourseStaff);
const handleAddPost = () => {
if (loadingStatus === RequestStatus.SUCCESSFUL && (!(inBlackoutDateRange(blackoutDateRange)))) {
return true;
}
if (hasPrivilege) {
return true;
}
return false;
};
return (
<div className={classNames('d-flex justify-content-end flex-grow-1', { 'py-1': !inContext })}>
{!inContext && <Search />}
@@ -39,7 +62,8 @@ function PostActionsBar({
{intl.formatMessage(messages.title)}
</h4>
)}
{(!inBlackoutDateRange(blackoutDateRange) && loadingStatus === RequestStatus.SUCCESSFUL) && (
{handleAddPost()
&& (
<>
{!inContext && <div className="border-right border-light-400 mx-3" />}
<Button

View File

@@ -281,3 +281,11 @@ export function inBlackoutDateRange(blackoutDateRanges) {
(blackoutDateRange) => dateInDateRange(now, new Date(blackoutDateRange.start), new Date(blackoutDateRange.end)),
);
}
export function handleAddPostForRoles(isUserAdmin, userHasModerationPrivilages, isUserGroupTA,
isCourseAdmin, isCourseStaff) {
if (isUserAdmin || userHasModerationPrivilages || isUserGroupTA || isCourseAdmin || isCourseStaff) {
return true;
}
return false;
}