From 4703c670843dea0074be89cb42dcbcb663b4068a Mon Sep 17 00:00:00 2001 From: jasquat Date: Wed, 12 Feb 2025 10:33:00 -0500 Subject: [PATCH] moved spiffuiv3 to v3 dir w/ burnettk --- spiffworkflow-frontend/src/App.tsx | 2 +- .../a-spiffui-v3/components/ComingSoon.tsx | 27 +++++ .../src/a-spiffui-v3/views/Login.tsx | 102 ++++++++++++++++++ .../views}/SpiffUIV3.tsx | 58 +++++----- 4 files changed, 159 insertions(+), 30 deletions(-) create mode 100644 spiffworkflow-frontend/src/a-spiffui-v3/components/ComingSoon.tsx create mode 100644 spiffworkflow-frontend/src/a-spiffui-v3/views/Login.tsx rename spiffworkflow-frontend/src/{routes => a-spiffui-v3/views}/SpiffUIV3.tsx (84%) diff --git a/spiffworkflow-frontend/src/App.tsx b/spiffworkflow-frontend/src/App.tsx index 7e2a2fe86..2c688353c 100644 --- a/spiffworkflow-frontend/src/App.tsx +++ b/spiffworkflow-frontend/src/App.tsx @@ -7,7 +7,7 @@ import { AbilityContext } from './contexts/Can'; import APIErrorProvider from './contexts/APIErrorContext'; import ContainerForExtensions from './ContainerForExtensions'; import PublicRoutes from './routes/PublicRoutes'; -import SpiffUIV3 from './routes/SpiffUIV3'; +import SpiffUIV3 from './a-spiffui-v3/views/SpiffUIV3'; const queryClient = new QueryClient(); diff --git a/spiffworkflow-frontend/src/a-spiffui-v3/components/ComingSoon.tsx b/spiffworkflow-frontend/src/a-spiffui-v3/components/ComingSoon.tsx new file mode 100644 index 000000000..11ebc6a0c --- /dev/null +++ b/spiffworkflow-frontend/src/a-spiffui-v3/components/ComingSoon.tsx @@ -0,0 +1,27 @@ +import React from 'react'; +import { Box, Typography, Link as MuiLink } from '@mui/material'; +import { Link } from 'react-router-dom'; + +function ComingSoon() { + return ( + + + Coming Soon + + This feature will be available soon. + + Go back home + + + ); +} + +export default ComingSoon; diff --git a/spiffworkflow-frontend/src/a-spiffui-v3/views/Login.tsx b/spiffworkflow-frontend/src/a-spiffui-v3/views/Login.tsx new file mode 100644 index 000000000..112d032b8 --- /dev/null +++ b/spiffworkflow-frontend/src/a-spiffui-v3/views/Login.tsx @@ -0,0 +1,102 @@ +import { ArrowForward } from '@mui/icons-material'; +import { useCallback, useEffect, useState } from 'react'; +import { CircularProgress, Button, Grid, Typography } from '@mui/material'; +import { useNavigate, useSearchParams } from 'react-router-dom'; +import { AuthenticationOption } from '../interfaces'; +import HttpService from '../services/HttpService'; +import UserService from '../services/UserService'; + +export default function Login() { + const navigate = useNavigate(); + const [searchParams] = useSearchParams(); + const [authenticationOptions, setAuthenticationOptions] = useState< + AuthenticationOption[] | null + >(null); + + const originalUrl = searchParams.get('original_url'); + const getOriginalUrl = useCallback(() => { + if (originalUrl === '/login') { + return '/'; + } + return originalUrl; + }, [originalUrl]); + + useEffect(() => { + HttpService.makeCallToBackend({ + path: '/authentication-options', + successCallback: setAuthenticationOptions, + }); + }, [getOriginalUrl]); + + const authenticationOptionButtons = () => { + if (!authenticationOptions) { + return null; + } + const buttons: any = []; + authenticationOptions.forEach((option: AuthenticationOption) => { + buttons.push( + , + ); + }); + return buttons; + }; + + const getLoadingIcon = () => { + const style = { margin: '50px 0 50px 50px' }; + return ( + + ); + }; + + const loginComponents = () => { + return ( +
+ + + + Log in to SpiffWorkflow + + + + {authenticationOptionButtons()} + + +
+ ); + }; + + if (UserService.isLoggedIn()) { + navigate('/'); + return null; + } + + if (authenticationOptions === null) { + return ( +
+ {getLoadingIcon()} +
+ ); + } + + if (authenticationOptions !== null) { + if (authenticationOptions.length === 1) { + UserService.doLogin(authenticationOptions[0], getOriginalUrl()); + return null; + } + return loginComponents(); + } + + return null; +} diff --git a/spiffworkflow-frontend/src/routes/SpiffUIV3.tsx b/spiffworkflow-frontend/src/a-spiffui-v3/views/SpiffUIV3.tsx similarity index 84% rename from spiffworkflow-frontend/src/routes/SpiffUIV3.tsx rename to spiffworkflow-frontend/src/a-spiffui-v3/views/SpiffUIV3.tsx index feb55b0e4..b5058fd1a 100644 --- a/spiffworkflow-frontend/src/routes/SpiffUIV3.tsx +++ b/spiffworkflow-frontend/src/a-spiffui-v3/views/SpiffUIV3.tsx @@ -12,40 +12,40 @@ import { } from '@mui/material'; import MenuIcon from '@mui/icons-material/Menu'; import { Route, Routes, useLocation } from 'react-router'; -import { createSpiffTheme } from '../a-spiffui-v3/assets/theme/SpiffTheme'; -import Homepage from '../a-spiffui-v3/views/Homepage'; -import '../a-spiffui-v3/assets/styles/transitions.css'; -import StartProcess from '../a-spiffui-v3/views/StartProcess/StartProcess'; -import Processes from '../a-spiffui-v3/views/StartProcess/Processes'; -import StartProcessInstance from '../a-spiffui-v3/views/StartProcess/StartProcessInstance'; -import SideNav from '../a-spiffui-v3/components/SideNav'; +import { createSpiffTheme } from '../assets/theme/SpiffTheme'; +import Homepage from './Homepage'; +import '../assets/styles/transitions.css'; +import StartProcess from './StartProcess/StartProcess'; +import Processes from './StartProcess/Processes'; +import StartProcessInstance from './StartProcess/StartProcessInstance'; +import SideNav from '../components/SideNav'; import LoginHandler from '../components/LoginHandler'; import Login from './Login'; -import InstancesStartedByMe from '../a-spiffui-v3/views/InstancesStartedByMe'; -import TaskShow from '../a-spiffui-v3/views/TaskShow/TaskShow'; -import ProcessInterstitialPage from '../a-spiffui-v3/views/TaskShow/ProcessInterstitialPage'; -import ProcessInstanceProgressPage from '../a-spiffui-v3/views/TaskShow/ProcessInstanceProgressPage'; +import InstancesStartedByMe from './InstancesStartedByMe'; +import TaskShow from './TaskShow/TaskShow'; +import ProcessInterstitialPage from './TaskShow/ProcessInterstitialPage'; +import ProcessInstanceProgressPage from './TaskShow/ProcessInstanceProgressPage'; import ErrorDisplay from '../components/ErrorDisplay'; -import About from '../a-spiffui-v3/views/About'; +import About from './About'; import useAPIError from '../hooks/UseApiError'; import ComingSoon from '../components/ComingSoon'; -import MessageListPage from '../a-spiffui-v3/views/MessageListPage'; -import DataStoreRoutes from '../a-spiffui-v3/views/DataStoreRoutes'; -import DataStoreNew from '../a-spiffui-v3/views/DataStoreNew'; -import DataStoreList from '../a-spiffui-v3/views/DataStoreList'; -import Configuration from '../a-spiffui-v3/views/Configuration'; -import AuthenticationList from '../a-spiffui-v3/views/AuthenticationList'; -import SecretList from '../a-spiffui-v3/views/SecretList'; -import SecretNew from '../a-spiffui-v3/views/SecretNew'; -import SecretShow from '../a-spiffui-v3/views/SecretShow'; -import ProcessModelShow from '../a-spiffui-v3/views/ProcessModelShow'; -import ProcessModelNew from '../a-spiffui-v3/views/ProcessModelNew'; -import ProcessModelEdit from '../a-spiffui-v3/views/ProcessModelEdit'; // Import the edited component -import ProcessModelEditDiagram from '../a-spiffui-v3/views/ProcessModelEditDiagram'; -import ReactFormEditor from '../a-spiffui-v3/views/ReactFormEditor'; // Import the new component -import ProcessInstanceRoutes from '../a-spiffui-v3/views/ProcessInstanceRoutes'; -import ProcessInstanceShortLink from '../a-spiffui-v3/views/ProcessInstanceShortLink'; -import ProcessInstanceList from '../a-spiffui-v3/views/ProcessInstanceList'; // Import the new component +import MessageListPage from './MessageListPage'; +import DataStoreRoutes from './DataStoreRoutes'; +import DataStoreNew from './DataStoreNew'; +import DataStoreList from './DataStoreList'; +import Configuration from './Configuration'; +import AuthenticationList from './AuthenticationList'; +import SecretList from './SecretList'; +import SecretNew from './SecretNew'; +import SecretShow from './SecretShow'; +import ProcessModelShow from './ProcessModelShow'; +import ProcessModelNew from './ProcessModelNew'; +import ProcessModelEdit from './ProcessModelEdit'; // Import the edited component +import ProcessModelEditDiagram from './ProcessModelEditDiagram'; +import ReactFormEditor from './ReactFormEditor'; // Import the new component +import ProcessInstanceRoutes from './ProcessInstanceRoutes'; +import ProcessInstanceShortLink from './ProcessInstanceShortLink'; +import ProcessInstanceList from './ProcessInstanceList'; // Import the new component const fadeIn = 'fadeIn'; const fadeOutImmediate = 'fadeOutImmediate';