diff --git a/src/App.tsx b/src/App.tsx index e8df44e..ef269a5 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -31,7 +31,7 @@ import ListTags from './pages/tags/List'; import ListUsers from './pages/users/List'; import NavItems from './components/NavItems'; import NotFound from './pages/NotFound'; -import ReadApp from './pages/apps/Read'; +import {ReadApp} from './pages/apps/app_detail'; import ReadGroup from './pages/groups/Read'; import ReadTag from './pages/tags/Read'; import ReadUser from './pages/users/Read'; diff --git a/src/pages/apps/app_detail/app_header.tsx b/src/pages/apps/app_detail/app_header.tsx new file mode 100644 index 0000000..5440ec1 --- /dev/null +++ b/src/pages/apps/app_detail/app_header.tsx @@ -0,0 +1,76 @@ +import {Grid, Paper, Typography, Box, Chip, Stack, Tooltip} from '@mui/material'; +import {grey} from '@mui/material/colors'; +import CreateUpdateApp from '../CreateUpdate'; +import DeleteApp from '../Delete'; +import {App} from '../../../api/apiSchemas'; +import {useNavigate} from 'react-router-dom'; + +import TagIcon from '@mui/icons-material/LocalOffer'; +import {useCurrentUser} from '../../../authentication'; +import {MoveTooltip} from '.'; + +interface AppHeaderProps { + app: App; + moveTooltip: MoveTooltip; +} + +const AppHeader: React.FC = ({app, moveTooltip}) => { + const currentUser = useCurrentUser(); + const navigate = useNavigate(); + + const classNames = `app-detail-header app-detail-header ${app.name}`; + + return ( + + + + {app.name} + + + {app.description} + + {app.active_app_tags ? ( + + {app.active_app_tags.map((tagMap) => ( + navigate(`/tags/${tagMap.active_tag!.name}`)} + icon={} + sx={{ + margin: '2px', + marginTop: '5px', + bgcolor: tagMap.active_tag!.enabled ? 'primary' : grey[500], + }} + /> + ))} + + ) : null} + + +
+ +
+
+ +
+ +
+
+
+
+
+ ); +}; + +export default AppHeader; diff --git a/src/pages/apps/Read.tsx b/src/pages/apps/app_detail/index.tsx similarity index 88% rename from src/pages/apps/Read.tsx rename to src/pages/apps/app_detail/index.tsx index 118ba49..7eadba4 100644 --- a/src/pages/apps/Read.tsx +++ b/src/pages/apps/app_detail/index.tsx @@ -19,22 +19,19 @@ import TableRow from '@mui/material/TableRow'; import Tooltip from '@mui/material/Tooltip'; import Typography from '@mui/material/Typography'; -import TagIcon from '@mui/icons-material/LocalOffer'; +import Ending from '../../../components/Ending'; +import {groupBy, displayUserName} from '../../../helpers'; +import {isAccessAdmin, isAppOwnerGroupOwner} from '../../../authorization'; +import {useGetAppById} from '../../../api/apiComponents'; +import {App, OktaUserGroupMember} from '../../../api/apiSchemas'; -import {grey} from '@mui/material/colors'; - -import Ending from '../../components/Ending'; -import {groupBy, displayUserName} from '../../helpers'; -import {isAccessAdmin, isAppOwnerGroupOwner} from '../../authorization'; -import {useGetAppById} from '../../api/apiComponents'; -import {App, OktaUserGroupMember} from '../../api/apiSchemas'; - -import {useCurrentUser} from '../../authentication'; -import CreateUpdateGroup from '../groups/CreateUpdate'; -import CreateUpdateApp from './CreateUpdate'; -import DeleteApp from './Delete'; -import NotFound from '../NotFound'; -import Loading from '../../components/Loading'; +import {useCurrentUser} from '../../../authentication'; +import CreateUpdateGroup from '../../groups/CreateUpdate'; +import CreateUpdateApp from '../CreateUpdate'; +import DeleteApp from '../Delete'; +import NotFound from '../../NotFound'; +import Loading from '../../../components/Loading'; +import AppHeader from './app_header'; function sortGroupMembers( [aUserId, aUsers]: [string, Array], @@ -51,7 +48,16 @@ function groupMemberships( return groupBy(memberships ?? [], 'active_user.id'); } -export default function ReadApp() { +export type Modifier = { + name: string; + options: {}; +}; + +export type MoveTooltip = { + modifiers: Modifier[]; +}; + +export const ReadApp = () => { const currentUser = useCurrentUser(); const {id} = useParams(); @@ -71,61 +77,13 @@ export default function ReadApp() { const app = data ?? ({} as App); - const moveTooltip = {modifiers: [{name: 'offset', options: {offset: [0, -10]}}]}; + const moveTooltip: MoveTooltip = {modifiers: [{name: 'offset', options: {offset: [0, -10]}}]}; return ( - - - - {app.name} - - - {app.description} - - {app.active_app_tags ? ( - - {app.active_app_tags.map((tagMap) => ( - navigate(`/tags/${tagMap.active_tag!.name}`)} - icon={} - sx={{ - margin: '2px', - marginTop: '5px', - bgcolor: tagMap.active_tag!.enabled ? 'primary' : grey[500], - }} - /> - ))} - - ) : null} - - -
- -
-
- -
- -
-
-
-
-
+ {isAccessAdmin(currentUser) || isAppOwnerGroupOwner(currentUser, app.id ?? '') ? (
); -} +};