import { Box } from "@awsui/components-react"; import React, { useEffect, useMemo } from "react"; import { useDispatch } from "react-redux"; import { useSelector } from "react-redux"; import { Redirect, useLocation, useRouteMatch } from "react-router"; import { AssessFileDashboard } from "../components/AssessFile/AssessFileDashboard"; import { PortingAssistantAppLayout } from "../components/PortingAssistantAppLayout"; import { PortingAssistantBreadcrumb } from "../components/PortingAssistantBreadcrumb"; import { pathValues } from "../constants/paths"; import { setInfo } from "../store/actions/tools"; import { RootState } from "../store/reducers"; import { selectCurrentProject, selectCurrentSolutionDetails, selectCurrentSourceFilePath } from "../store/selectors/solutionSelectors"; import { isFailed, isLoaded, isLoading } from "../utils/Loadable"; const AssessFileInternal: React.FC = () => { const dispatch = useDispatch(); const location = useLocation<{ solutionOnly?: boolean }>(); const currentSolutionDetails = useSelector((state: RootState) => selectCurrentSolutionDetails(state, location.pathname) ); const currentProject = useSelector((state: RootState) => selectCurrentProject(state, location.pathname)); const sourceFilePath = useSelector((state: RootState) => selectCurrentSourceFilePath(state, location.pathname)); const routeMatch = useRouteMatch({ path: route, exact: true, strict: true }); useEffect(() => { dispatch( setInfo({ heading: "Source file", mainContent: ( View incompatible API calls in the project source code, and the replacement suggestions. ), learnMoreLinks: [] }) ); }, [dispatch, location]); const isSolutionOnly = location.state?.solutionOnly === true; const breadcrumbWithCurrent = useMemo(() => { if ( currentSolutionDetails == null || currentProject == null || isLoading(currentProject) || isFailed(currentProject) || isLoading(currentSolutionDetails) || isFailed(currentSolutionDetails) || sourceFilePath == null ) { return []; } return [ ...breadcrumb, { text: currentSolutionDetails.data.solutionName, href: `/solutions/${encodeURIComponent(currentSolutionDetails.data.solutionFilePath)}` }, ...(isSolutionOnly ? [] : [ { text: currentProject.data.projectName || "", href: `/solutions/${encodeURIComponent( currentSolutionDetails.data.solutionFilePath )}/${encodeURIComponent(currentProject.data.projectFilePath)}` } ]), { text: window.electron.getFilename(sourceFilePath), href: `/solutions/${encodeURIComponent(currentSolutionDetails.data.solutionFilePath)}/${encodeURIComponent( currentProject.data.projectFilePath )}/${encodeURIComponent(sourceFilePath)}` } ]; }, [currentProject, currentSolutionDetails, isSolutionOnly, sourceFilePath]); if ( currentSolutionDetails == null || !isLoaded(currentSolutionDetails) || currentProject == null || sourceFilePath == null ) { if (routeMatch === null) { return ; } else { return ; } } return ( } breadcrumbs={} /> ); }; const breadcrumb = [ { text: "Porting Assistant for .NET", href: "/main" }, { text: "Assessed solutions", href: "/solutions" } ]; const route = pathValues; export const AssessFile = React.memo(AssessFileInternal);