1- import React , { useCallback , useMemo , useState } from 'react' ;
1+ import React , {
2+ useCallback , useMemo , useState ,
3+ } from 'react' ;
4+ import PropTypes from 'prop-types' ;
25
36import { useDispatch , useSelector } from 'react-redux' ;
47
58import { useIntl } from '@edx/frontend-platform/i18n' ;
69
710import { RequestStatus } from '../../data/constants' ;
8- import { selectConfirmEmailStatus , selectShouldShowEmailConfirmation } from '../data/selectors' ;
11+ import { selectConfirmEmailStatus , selectContentCreationRateLimited , selectShouldShowEmailConfirmation } from '../data/selectors' ;
12+ import { hidePostEditor } from '../posts/data' ;
913import { sendAccountActivationEmail } from '../posts/data/thunks' ;
1014import postMessages from '../posts/post-actions-bar/messages' ;
1115import { Confirmation } from '.' ;
1216
13- const withEmailConfirmation = ( WrappedComponent ) => {
14- const EnhancedComponent = ( props ) => {
17+ const withPostingRestrictions = ( WrappedComponent ) => {
18+ const EnhancedComponent = ( { onCloseEditor , ... rest } ) => {
1519 const intl = useIntl ( ) ;
1620 const dispatch = useDispatch ( ) ;
1721 const [ isConfirming , setIsConfirming ] = useState ( false ) ;
1822 const shouldShowEmailConfirmation = useSelector ( selectShouldShowEmailConfirmation ) ;
23+ const contentCreationRateLimited = useSelector ( selectContentCreationRateLimited ) ;
1924 const confirmEmailStatus = useSelector ( selectConfirmEmailStatus ) ;
2025
2126 const openConfirmation = useCallback ( ( ) => {
@@ -24,7 +29,9 @@ const withEmailConfirmation = (WrappedComponent) => {
2429
2530 const closeConfirmation = useCallback ( ( ) => {
2631 setIsConfirming ( false ) ;
27- } , [ ] ) ;
32+ dispatch ( hidePostEditor ( ) ) ;
33+ onCloseEditor ?. ( ) ;
34+ } , [ onCloseEditor ] ) ;
2835
2936 const handleConfirmation = useCallback ( ( ) => {
3037 dispatch ( sendAccountActivationEmail ( ) ) ;
@@ -39,8 +46,9 @@ const withEmailConfirmation = (WrappedComponent) => {
3946 return (
4047 < >
4148 < WrappedComponent
42- { ...props }
43- openEmailConfirmation = { openConfirmation }
49+ { ...rest }
50+ onCloseEditor = { onCloseEditor }
51+ openRestrictionDialogue = { openConfirmation }
4452 />
4553 { shouldShowEmailConfirmation
4654 && (
@@ -57,11 +65,26 @@ const withEmailConfirmation = (WrappedComponent) => {
5765 confirmButtonVariant = "danger"
5866 />
5967 ) }
68+ { contentCreationRateLimited
69+ && (
70+ < Confirmation
71+ isOpen = { isConfirming }
72+ title = { intl . formatMessage ( postMessages . postLimitTitle ) }
73+ description = { intl . formatMessage ( postMessages . postLimitDescription ) }
74+ onClose = { closeConfirmation }
75+ closeButtonText = { intl . formatMessage ( postMessages . closeButton ) }
76+ closeButtonVariant = "danger"
77+ />
78+ ) }
6079 </ >
6180 ) ;
6281 } ;
6382
83+ EnhancedComponent . propTypes = {
84+ onCloseEditor : PropTypes . func ,
85+ } ;
86+
6487 return EnhancedComponent ;
6588} ;
6689
67- export default withEmailConfirmation ;
90+ export default withPostingRestrictions ;
0 commit comments