From 22f11ff6e3f7cf0c32b826f3ae333bb9dc233b11 Mon Sep 17 00:00:00 2001 From: dukenv0307 Date: Tue, 4 Jul 2023 16:55:03 +0700 Subject: [PATCH 1/4] display not found page if cannot create task --- src/pages/tasks/NewTaskPage.js | 101 ++++++++++++++++++--------------- 1 file changed, 56 insertions(+), 45 deletions(-) diff --git a/src/pages/tasks/NewTaskPage.js b/src/pages/tasks/NewTaskPage.js index f1c04a82bb0a..f69ac83a89ff 100644 --- a/src/pages/tasks/NewTaskPage.js +++ b/src/pages/tasks/NewTaskPage.js @@ -1,4 +1,4 @@ -import React, {useEffect} from 'react'; +import React, {useEffect, useMemo} from 'react'; import {View} from 'react-native'; import {withOnyx} from 'react-native-onyx'; import _ from 'underscore'; @@ -18,7 +18,9 @@ import MenuItem from '../../components/MenuItem'; import reportPropTypes from '../reportPropTypes'; import * as TaskUtils from '../../libs/actions/Task'; import * as OptionsListUtils from '../../libs/OptionsListUtils'; +import * as ReportUtils from '../../libs/ReportUtils'; import FormAlertWithSubmitButton from '../../components/FormAlertWithSubmitButton'; +import FullPageNotFoundView from '../../components/BlockingViews/FullPageNotFoundView'; const propTypes = { /** Task Creation Data */ @@ -72,6 +74,8 @@ function NewTaskPage(props) { const [errorMessage, setErrorMessage] = React.useState(''); const [parentReport, setParentReport] = React.useState({}); + const isAllowedToCreateTask = useMemo(() => _.isEmpty(parentReport) || ReportUtils.isAllowedToComment(parentReport), [parentReport]); + useEffect(() => { setErrorMessage(''); @@ -138,52 +142,59 @@ function NewTaskPage(props) { return ( - TaskUtils.dismissModalAndClearOutTaskInfo()} - shouldShowBackButton - onBackButtonPress={() => Navigation.goBack(ROUTES.NEW_TASK_DETAILS)} - /> - - - Navigation.navigate(ROUTES.NEW_TASK_TITLE)} - shouldShowRightIcon - /> - Navigation.navigate(ROUTES.NEW_TASK_DESCRIPTION)} - shouldShowRightIcon - /> - Navigation.navigate(ROUTES.NEW_TASK_ASSIGNEE)} - shouldShowRightIcon - /> - Navigation.navigate(ROUTES.NEW_TASK_SHARE_DESTINATION)} - shouldShowRightIcon + TaskUtils.dismissModalAndClearOutTaskInfo()} + > + TaskUtils.dismissModalAndClearOutTaskInfo()} + shouldShowBackButton + onBackButtonPress={() => { + Navigation.goBack(ROUTES.NEW_TASK_DETAILS); + }} + /> + + + Navigation.navigate(ROUTES.NEW_TASK_TITLE)} + shouldShowRightIcon + /> + Navigation.navigate(ROUTES.NEW_TASK_DESCRIPTION)} + shouldShowRightIcon + /> + Navigation.navigate(ROUTES.NEW_TASK_ASSIGNEE)} + shouldShowRightIcon + /> + Navigation.navigate(ROUTES.NEW_TASK_SHARE_DESTINATION)} + shouldShowRightIcon + /> + + onSubmit()} + enabledWhenOffline + buttonText={props.translate('newTaskPage.confirmTask')} + containerStyles={[styles.mh0, styles.mt5, styles.flex1, styles.ph5]} /> - onSubmit()} - enabledWhenOffline - buttonText={props.translate('newTaskPage.confirmTask')} - containerStyles={[styles.mh0, styles.mt5, styles.flex1, styles.ph5]} - /> - + ); } From 0f29cfc376a940741354acfb7b2d04e42f376fc4 Mon Sep 17 00:00:00 2001 From: dukenv0307 Date: Tue, 4 Jul 2023 17:24:56 +0700 Subject: [PATCH 2/4] exclude the reports that cannot create task --- .../TaskShareDestinationSelectorModal.js | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/src/pages/tasks/TaskShareDestinationSelectorModal.js b/src/pages/tasks/TaskShareDestinationSelectorModal.js index 329f4a410ccf..7fbe0627863d 100644 --- a/src/pages/tasks/TaskShareDestinationSelectorModal.js +++ b/src/pages/tasks/TaskShareDestinationSelectorModal.js @@ -1,5 +1,6 @@ /* eslint-disable es/no-optional-chaining */ -import React, {useState, useEffect} from 'react'; +import React, {useState, useEffect, useMemo} from 'react'; +import _ from 'underscore'; import {View} from 'react-native'; import PropTypes from 'prop-types'; import {withOnyx} from 'react-native-onyx'; @@ -16,6 +17,7 @@ import compose from '../../libs/compose'; import personalDetailsPropType from '../personalDetailsPropType'; import reportPropTypes from '../reportPropTypes'; import * as TaskUtils from '../../libs/actions/Task'; +import * as ReportUtils from '../../libs/ReportUtils'; import ROUTES from '../../ROUTES'; const propTypes = { @@ -46,17 +48,28 @@ function TaskShareDestinationSelectorModal(props) { const [filteredPersonalDetails, setFilteredPersonalDetails] = useState([]); const [filteredUserToInvite, setFilteredUserToInvite] = useState(null); + const reportFilters = useMemo(() => { + const reports = {}; + _.keys(props.reports).forEach((reportKey) => { + if (!ReportUtils.isAllowedToComment(props.reports[reportKey])) { + return; + } + reports[reportKey] = props.reports[reportKey]; + }); + return reports; + }, [props.reports]); + useEffect(() => { - const results = OptionsListUtils.getShareDestinationOptions(props.reports, props.personalDetails, props.betas, '', [], CONST.EXPENSIFY_EMAILS, true); + const results = OptionsListUtils.getShareDestinationOptions(reportFilters, props.personalDetails, props.betas, '', [], CONST.EXPENSIFY_EMAILS, true); setFilteredUserToInvite(results.userToInvite); setFilteredRecentReports(results.recentReports); setFilteredPersonalDetails(results.personalDetails); - }, [props]); + }, [props, reportFilters]); useEffect(() => { const {recentReports, personalDetails, userToInvite} = OptionsListUtils.getShareDestinationOptions( - props.reports, + reportFilters, props.personalDetails, props.betas, searchValue.trim(), @@ -70,7 +83,7 @@ function TaskShareDestinationSelectorModal(props) { setFilteredUserToInvite(userToInvite); setFilteredRecentReports(recentReports); setFilteredPersonalDetails(personalDetails); - }, [props, searchValue]); + }, [props, searchValue, reportFilters]); const onChangeText = (newSearchTerm = '') => { setSearchValue(newSearchTerm); From 9ea6f88fd8cfbd1457f99cc924d42f10abaf2186 Mon Sep 17 00:00:00 2001 From: dukenv0307 Date: Wed, 5 Jul 2023 14:47:39 +0700 Subject: [PATCH 3/4] rename variable --- src/pages/tasks/TaskShareDestinationSelectorModal.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/pages/tasks/TaskShareDestinationSelectorModal.js b/src/pages/tasks/TaskShareDestinationSelectorModal.js index 7fbe0627863d..851e3e1e1400 100644 --- a/src/pages/tasks/TaskShareDestinationSelectorModal.js +++ b/src/pages/tasks/TaskShareDestinationSelectorModal.js @@ -48,7 +48,8 @@ function TaskShareDestinationSelectorModal(props) { const [filteredPersonalDetails, setFilteredPersonalDetails] = useState([]); const [filteredUserToInvite, setFilteredUserToInvite] = useState(null); - const reportFilters = useMemo(() => { + // Exclude the reports that have permission as `Admins only` before get share destination options + const filteredReports = useMemo(() => { const reports = {}; _.keys(props.reports).forEach((reportKey) => { if (!ReportUtils.isAllowedToComment(props.reports[reportKey])) { @@ -60,16 +61,16 @@ function TaskShareDestinationSelectorModal(props) { }, [props.reports]); useEffect(() => { - const results = OptionsListUtils.getShareDestinationOptions(reportFilters, props.personalDetails, props.betas, '', [], CONST.EXPENSIFY_EMAILS, true); + const results = OptionsListUtils.getShareDestinationOptions(filteredReports, props.personalDetails, props.betas, '', [], CONST.EXPENSIFY_EMAILS, true); setFilteredUserToInvite(results.userToInvite); setFilteredRecentReports(results.recentReports); setFilteredPersonalDetails(results.personalDetails); - }, [props, reportFilters]); + }, [props, filteredReports]); useEffect(() => { const {recentReports, personalDetails, userToInvite} = OptionsListUtils.getShareDestinationOptions( - reportFilters, + filteredReports, props.personalDetails, props.betas, searchValue.trim(), @@ -83,7 +84,7 @@ function TaskShareDestinationSelectorModal(props) { setFilteredUserToInvite(userToInvite); setFilteredRecentReports(recentReports); setFilteredPersonalDetails(personalDetails); - }, [props, searchValue, reportFilters]); + }, [props, searchValue, filteredReports]); const onChangeText = (newSearchTerm = '') => { setSearchValue(newSearchTerm); From f8de055784b4c9cb0eca4518871eea23da377ec7 Mon Sep 17 00:00:00 2001 From: dukenv0307 <129500732+dukenv0307@users.noreply.github.com> Date: Wed, 5 Jul 2023 15:18:53 +0700 Subject: [PATCH 4/4] Update src/pages/tasks/TaskShareDestinationSelectorModal.js Co-authored-by: Sobit Neupane <073bct543.sobit@pcampus.edu.np> --- src/pages/tasks/TaskShareDestinationSelectorModal.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/tasks/TaskShareDestinationSelectorModal.js b/src/pages/tasks/TaskShareDestinationSelectorModal.js index 851e3e1e1400..60201d8b21e6 100644 --- a/src/pages/tasks/TaskShareDestinationSelectorModal.js +++ b/src/pages/tasks/TaskShareDestinationSelectorModal.js @@ -48,7 +48,7 @@ function TaskShareDestinationSelectorModal(props) { const [filteredPersonalDetails, setFilteredPersonalDetails] = useState([]); const [filteredUserToInvite, setFilteredUserToInvite] = useState(null); - // Exclude the reports that have permission as `Admins only` before get share destination options + // Filter out all the reports where user is not allowed to create task const filteredReports = useMemo(() => { const reports = {}; _.keys(props.reports).forEach((reportKey) => {