From 5d2e9ccc679f17d9f85ffdd4103803f5e1e17829 Mon Sep 17 00:00:00 2001 From: "kasia.oczkowska" Date: Fri, 2 Feb 2024 12:11:58 +0000 Subject: [PATCH] feat: improve UI display depending on user persmissions --- .../AppConnectionContextMenu/index.jsx | 76 +++++++++----- .../src/components/AppConnections/index.jsx | 15 ++- .../web/src/components/AppFlows/index.jsx | 20 +++- packages/web/src/pages/Application/index.jsx | 98 ++++++++++++------- packages/web/src/pages/Applications/index.jsx | 12 ++- 5 files changed, 145 insertions(+), 76 deletions(-) diff --git a/packages/web/src/components/AppConnectionContextMenu/index.jsx b/packages/web/src/components/AppConnectionContextMenu/index.jsx index a544d005..fb94e4b3 100644 --- a/packages/web/src/components/AppConnectionContextMenu/index.jsx +++ b/packages/web/src/components/AppConnectionContextMenu/index.jsx @@ -8,6 +8,7 @@ import * as URLS from 'config/urls'; import useFormatMessage from 'hooks/useFormatMessage'; import { ConnectionPropType } from 'propTypes/propTypes'; import { useQueryClient } from '@tanstack/react-query'; +import Can from 'components/Can'; function ContextMenu(props) { const { @@ -44,34 +45,57 @@ function ContextMenu(props) { hideBackdrop={false} anchorEl={anchorEl} > - - {formatMessage('connection.viewFlows')} - - - - {formatMessage('connection.testConnection')} - - - + {(allowed) => ( + + {formatMessage('connection.viewFlows')} + )} - onClick={createActionHandler({ type: 'reconnect' })} - > - {formatMessage('connection.reconnect')} - + - - {formatMessage('connection.delete')} - + + {(allowed) => ( + + {formatMessage('connection.testConnection')} + + )} + + + + {(allowed) => ( + + {formatMessage('connection.reconnect')} + + )} + + + + {(allowed) => ( + + {formatMessage('connection.delete')} + + )} + ); } diff --git a/packages/web/src/components/AppConnections/index.jsx b/packages/web/src/components/AppConnections/index.jsx index da1e1280..32a71346 100644 --- a/packages/web/src/components/AppConnections/index.jsx +++ b/packages/web/src/components/AppConnections/index.jsx @@ -3,6 +3,7 @@ import PropTypes from 'prop-types'; import AppConnectionRow from 'components/AppConnectionRow'; import NoResultFound from 'components/NoResultFound'; +import Can from 'components/Can'; import useFormatMessage from 'hooks/useFormatMessage'; import * as URLS from 'config/urls'; import useAppConnections from 'hooks/useAppConnections'; @@ -16,11 +17,15 @@ function AppConnections(props) { if (!hasConnections) { return ( - + + {(allowed) => ( + + )} + ); } diff --git a/packages/web/src/components/AppFlows/index.jsx b/packages/web/src/components/AppFlows/index.jsx index ed984d2d..f715c7c7 100644 --- a/packages/web/src/components/AppFlows/index.jsx +++ b/packages/web/src/components/AppFlows/index.jsx @@ -5,6 +5,7 @@ import PaginationItem from '@mui/material/PaginationItem'; import * as URLS from 'config/urls'; import AppFlowRow from 'components/FlowRow'; +import Can from 'components/Can'; import NoResultFound from 'components/NoResultFound'; import useFormatMessage from 'hooks/useFormatMessage'; import useConnectionFlows from 'hooks/useConnectionFlows'; @@ -36,11 +37,20 @@ function AppFlows(props) { if (!hasFlows) { return ( - + + {(allowed) => ( + + )} + ); } diff --git a/packages/web/src/pages/Application/index.jsx b/packages/web/src/pages/Application/index.jsx index e3084fab..e8c4ec5e 100644 --- a/packages/web/src/pages/Application/index.jsx +++ b/packages/web/src/pages/Application/index.jsx @@ -30,6 +30,7 @@ import AppIcon from 'components/AppIcon'; import Container from 'components/Container'; import PageTitle from 'components/PageTitle'; import useApp from 'hooks/useApp'; +import Can from 'components/Can'; const ReconnectConnection = (props) => { const { application, onClose } = props; @@ -92,7 +93,7 @@ export default function Application() { } return options; - }, [appKey, appConfig?.data, currentUserAbility]); + }, [appKey, appConfig?.data, currentUserAbility, formatMessage]); if (loading) return null; @@ -118,37 +119,46 @@ export default function Application() { + {(allowed) => ( + } + disabled={!allowed} + > + {formatMessage('app.createFlow')} + )} - fullWidth - icon={} - disabled={!currentUserAbility.can('create', 'Flow')} - > - {formatMessage('app.createFlow')} - + } /> disabled) - } - options={connectionOptions} - /> + + {(allowed) => ( + disabled) + } + options={connectionOptions} + /> + )} + } /> @@ -169,17 +179,20 @@ export default function Application() { label={formatMessage('app.connections')} to={URLS.APP_CONNECTIONS(appKey)} value={URLS.APP_CONNECTIONS_PATTERN} - disabled={!app.supportsConnections} + disabled={ + !currentUserAbility.can('read', 'Connection') || + !app.supportsConnections + } component={Link} data-test="connections-tab" /> - @@ -187,14 +200,20 @@ export default function Application() { } + element={ + + + + } /> - } + element={ + + + + } /> - + + + } /> + + + } /> diff --git a/packages/web/src/pages/Applications/index.jsx b/packages/web/src/pages/Applications/index.jsx index ed5940bb..399e64c4 100644 --- a/packages/web/src/pages/Applications/index.jsx +++ b/packages/web/src/pages/Applications/index.jsx @@ -84,10 +84,14 @@ export default function Applications() { )} {!isLoading && !hasApps && ( - + + {(allowed) => ( + + )} + )} {!isLoading &&