Fleet UI: URL routes for dashboard platforms (#8689)

This commit is contained in:
RachelElysia
2022-11-17 10:45:35 -05:00
committed by GitHub
parent e7616dd422
commit 40d787aec9
17 changed files with 70 additions and 34 deletions
@@ -0,0 +1 @@
- New URL routes for dashboard platforms
@@ -32,7 +32,7 @@ export default (
iconName: "logo",
location: {
regex: new RegExp(`^${URL_PREFIX}/dashboard`),
pathname: PATHS.HOME,
pathname: PATHS.DASHBOARD,
},
},
];
+1 -1
View File
@@ -248,7 +248,7 @@ const PageOrComponent = ({
router,
}: IPageProps) => {
const doSomething = () => {
router.push(PATHS.HOME);
router.push(PATHS.DASHBOARD);
};
return (
+2 -2
View File
@@ -15,7 +15,7 @@ interface IApiOnlyUserProps {
const baseClass = "api-only-user";
const ApiOnlyUser = ({ router }: IApiOnlyUserProps): JSX.Element => {
const { LOGIN, HOME, LOGOUT } = paths;
const { LOGIN, DASHBOARD, LOGOUT } = paths;
const handleClick = () => router.push(LOGOUT);
useEffect(() => {
@@ -26,7 +26,7 @@ const ApiOnlyUser = ({ router }: IApiOnlyUserProps): JSX.Element => {
if (!user) {
router.push(LOGIN);
} else if (!user?.api_only) {
router.push(HOME);
router.push(DASHBOARD);
}
} catch (response) {
console.error(response);
@@ -34,10 +34,10 @@ const ConfirmInvitePage = ({
const [userErrors, setUserErrors] = useState<any>({});
useEffect(() => {
const { HOME } = paths;
const { DASHBOARD } = paths;
if (currentUser) {
return router.push(HOME);
return router.push(DASHBOARD);
}
}, [currentUser]);
@@ -32,21 +32,21 @@ const ConfirmSSOInvitePage = ({
const [errors, setErrors] = useState<{ [key: string]: string }>({});
useEffect(() => {
const { HOME } = paths;
const { DASHBOARD } = paths;
if (currentUser) {
return router.push(HOME);
return router.push(DASHBOARD);
}
}, [currentUser]);
const onSubmit = async (formData: any) => {
const { HOME } = paths;
const { DASHBOARD } = paths;
formData.sso_invite = true;
try {
await usersAPI.create(formData);
const { url } = await sessionsAPI.initializeSSO(HOME);
const { url } = await sessionsAPI.initializeSSO(DASHBOARD);
window.location.href = url;
} catch (response) {
const errorObject = formatErrorResponse(response);
+24 -2
View File
@@ -1,4 +1,5 @@
import React, { useContext, useState, useEffect } from "react";
import { InjectedRouter } from "react-router";
import { useQuery } from "react-query";
import { AppContext } from "context/app";
import { find } from "lodash";
@@ -56,7 +57,17 @@ const baseClass = "dashboard-page";
// Premium feature, Gb must be set between 1-100
const LOW_DISK_SPACE_GB = 32;
const DashboardPage = (): JSX.Element => {
interface IDashboardProps {
router: InjectedRouter; // v3
location: {
pathname: string;
};
}
const DashboardPage = ({
router,
location: { pathname },
}: IDashboardProps): JSX.Element => {
const {
config,
currentTeam,
@@ -114,6 +125,14 @@ const DashboardPage = (): JSX.Element => {
JSX.Element | string | null
>();
useEffect(() => {
const platformByPathname =
PLATFORM_DROPDOWN_OPTIONS?.find((platform) => platform.path === pathname)
?.value || "all";
setSelectedPlatform(platformByPathname);
}, [pathname]);
const canEnrollHosts =
isGlobalAdmin || isGlobalMaintainer || isTeamAdmin || isTeamMaintainer;
const canEnrollGlobalHosts = isGlobalAdmin || isGlobalMaintainer;
@@ -633,7 +652,10 @@ const DashboardPage = (): JSX.Element => {
options={PLATFORM_DROPDOWN_OPTIONS}
searchable={false}
onChange={(value: ISelectedPlatform) => {
setSelectedPlatform(value);
const selectedPlatformOption = PLATFORM_DROPDOWN_OPTIONS.find(
(platform) => platform.value === value
);
router.push(selectedPlatformOption?.path || paths.DASHBOARD);
}}
/>
</div>
+6 -6
View File
@@ -63,7 +63,7 @@ const LoginPage = ({ router, location }: ILoginPageProps) => {
const [errors, setErrors] = useState<{ [key: string]: string }>({});
useEffect(() => {
const { HOME } = paths;
const { DASHBOARD } = paths;
const getSSO = async () => {
try {
const { settings } = await sessionsAPI.ssoSettings();
@@ -79,7 +79,7 @@ const LoginPage = ({ router, location }: ILoginPageProps) => {
}
if (currentUser && !currentUser.force_password_reset) {
router?.push(HOME);
router?.push(DASHBOARD);
}
if (pageStatus && pageStatus in statusMessages) {
@@ -96,7 +96,7 @@ const LoginPage = ({ router, location }: ILoginPageProps) => {
};
const onSubmit = async (formData: ILoginData) => {
const { HOME, RESET_PASSWORD } = paths;
const { DASHBOARD, RESET_PASSWORD } = paths;
try {
const { user, available_teams, token } = await sessionsAPI.create(
@@ -114,7 +114,7 @@ const LoginPage = ({ router, location }: ILoginPageProps) => {
if (user.force_password_reset) {
return router.push(RESET_PASSWORD);
}
return router.push(redirectLocation || HOME);
return router.push(redirectLocation || DASHBOARD);
} catch (response) {
const errorObject = formatErrorResponse(response);
setErrors(errorObject);
@@ -123,8 +123,8 @@ const LoginPage = ({ router, location }: ILoginPageProps) => {
};
const ssoSignOn = async () => {
const { HOME } = paths;
let returnToAfterAuth = HOME;
const { DASHBOARD } = paths;
let returnToAfterAuth = DASHBOARD;
if (redirectLocation != null) {
returnToAfterAuth = redirectLocation;
}
@@ -29,7 +29,7 @@ const LoginPreviewPage = ({ router }: ILoginPreviewPageProps): JSX.Element => {
const [loginVisible, setLoginVisible] = useState(true);
const onSubmit = async (formData: ILoginData) => {
const { HOME } = paths;
const { DASHBOARD } = paths;
try {
const { user, available_teams, token } = await sessionsAPI.create(
@@ -42,7 +42,7 @@ const LoginPreviewPage = ({ router }: ILoginPreviewPageProps): JSX.Element => {
setAvailableTeams(available_teams);
setCurrentTeam(undefined);
return router.push(HOME);
return router.push(DASHBOARD);
} catch (response) {
console.error(response);
return false;
@@ -38,10 +38,10 @@ const RegistrationPage = ({ router }: IRegistrationPageProps) => {
const [showSetupError, setShowSetupError] = useState(false);
useEffect(() => {
const { HOME } = paths;
const { DASHBOARD } = paths;
if (currentUser) {
return router.push(HOME);
return router.push(DASHBOARD);
}
}, [currentUser]);
@@ -43,7 +43,7 @@ const ResetPasswordPage = ({ location, router }: IResetPasswordPageProps) => {
await usersAPI.performRequiredPasswordReset(new_password as string);
const config = await configAPI.loadAll();
setConfig(config);
return router.push(PATHS.HOME);
return router.push(PATHS.DASHBOARD);
} catch (response) {
const errorObject = formatErrorResponse(response);
setErrors(errorObject);
+1 -1
View File
@@ -13,7 +13,7 @@ const baseClass = "fleet-403";
const Fleet403 = () => (
<div className={baseClass}>
<header className="primary-header">
<Link to={PATHS.HOME}>
<Link to={PATHS.DASHBOARD}>
<img
className="primary-header__logo"
src={fleetLogoText}
+1 -1
View File
@@ -17,7 +17,7 @@ const baseClass = "fleet-404";
const Fleet404 = () => (
<div className={baseClass}>
<header className="primary-header">
<Link to={PATHS.HOME}>
<Link to={PATHS.DASHBOARD}>
<img
className="primary-header__logo"
src={fleetLogoText}
+1 -1
View File
@@ -16,7 +16,7 @@ const baseClass = "fleet-500";
const Fleet500 = () => (
<div className={baseClass}>
<header className="primary-header">
<Link to={PATHS.HOME}>
<Link to={PATHS.DASHBOARD}>
<img
className="primary-header__logo"
src={fleetLogoText}
+6 -2
View File
@@ -98,8 +98,12 @@ const routes = (
<Route path="email/change/:token" component={EmailTokenRedirect} />
<Route path="logout" component={LogoutPage} />
<Route component={CoreLayout}>
<IndexRedirect to={"dashboard"} />
<Route path="dashboard" component={DashboardPage} />
<IndexRedirect to={"/dashboard"} />
<Route path="dashboard" component={DashboardPage}>
<Route path="linux" component={DashboardPage} />
<Route path="mac" component={DashboardPage} />
<Route path="windows" component={DashboardPage} />
</Route>
<Route path="settings" component={AuthAnyAdminRoutes}>
<IndexRedirect to={"/dashboard"} />
<Route component={SettingsWrapper}>
+4 -1
View File
@@ -5,7 +5,10 @@ import URL_PREFIX from "./url_prefix";
export default {
ROOT: `${URL_PREFIX}/`,
HOME: `${URL_PREFIX}/dashboard`,
DASHBOARD: `${URL_PREFIX}/dashboard`,
DASHBOARD_LINUX: `${URL_PREFIX}/dashboard/linux`,
DASHBOARD_MAC: `${URL_PREFIX}/dashboard/mac`,
DASHBOARD_WINDOWS: `${URL_PREFIX}/dashboard/windows`,
ADMIN_USERS: `${URL_PREFIX}/settings/users`,
ADMIN_INTEGRATIONS: `${URL_PREFIX}/settings/integrations`,
ADMIN_TEAMS: `${URL_PREFIX}/settings/teams`,
+11 -5
View File
@@ -1,5 +1,6 @@
import URL_PREFIX from "router/url_prefix";
import { IOsqueryPlatform } from "interfaces/platform";
import paths from "router/paths";
const { origin } = global.window.location;
export const BASE_URL = `${origin}${URL_PREFIX}/api`;
@@ -167,11 +168,16 @@ export const PLATFORM_LABEL_DISPLAY_TYPES: Record<string, string> = {
"Ubuntu Linux": "platform",
};
export const PLATFORM_DROPDOWN_OPTIONS = [
{ label: "All", value: "all" },
{ label: "Windows", value: "windows" },
{ label: "Linux", value: "linux" },
{ label: "macOS", value: "darwin" },
interface IPlatformDropdownOptions {
label: "All" | "Windows" | "Linux" | "macOS";
value: "all" | "windows" | "linux" | "darwin";
path: string;
}
export const PLATFORM_DROPDOWN_OPTIONS: IPlatformDropdownOptions[] = [
{ label: "All", value: "all", path: paths.DASHBOARD },
{ label: "Windows", value: "windows", path: paths.DASHBOARD_WINDOWS },
{ label: "Linux", value: "linux", path: paths.DASHBOARD_LINUX },
{ label: "macOS", value: "darwin", path: paths.DASHBOARD_MAC },
];
export const PLATFORM_NAME_TO_LABEL_NAME = {