mirror of https://github.com/buster-so/buster.git
add additional routes
This commit is contained in:
parent
96dfae1b22
commit
d8594d19d0
|
@ -733,6 +733,7 @@
|
||||||
},
|
},
|
||||||
"node_modules/@clack/prompts/node_modules/is-unicode-supported": {
|
"node_modules/@clack/prompts/node_modules/is-unicode-supported": {
|
||||||
"version": "1.3.0",
|
"version": "1.3.0",
|
||||||
|
"extraneous": true,
|
||||||
"inBundle": true,
|
"inBundle": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"engines": {
|
"engines": {
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
"@dnd-kit/core": "^6.3.1",
|
"@dnd-kit/core": "^6.3.1",
|
||||||
"@dnd-kit/modifiers": "^9.0.0",
|
"@dnd-kit/modifiers": "^9.0.0",
|
||||||
"@dnd-kit/sortable": "^10.0.0",
|
"@dnd-kit/sortable": "^10.0.0",
|
||||||
"@faker-js/faker": "^9.3.0",
|
"@faker-js/faker": "^9.4.0",
|
||||||
"@fluentui/react-context-selector": "^9.1.71",
|
"@fluentui/react-context-selector": "^9.1.71",
|
||||||
"@manufac/echarts-simple-transform": "^2.0.11",
|
"@manufac/echarts-simple-transform": "^2.0.11",
|
||||||
"@million/lint": "^1.0.14",
|
"@million/lint": "^1.0.14",
|
||||||
|
@ -25,11 +25,11 @@
|
||||||
"@supabase/auth-helpers-nextjs": "^0.10.0",
|
"@supabase/auth-helpers-nextjs": "^0.10.0",
|
||||||
"@supabase/auth-helpers-react": "^0.5.0",
|
"@supabase/auth-helpers-react": "^0.5.0",
|
||||||
"@supabase/ssr": "^0.5.2",
|
"@supabase/ssr": "^0.5.2",
|
||||||
"@supabase/supabase-js": "^2.47.10",
|
"@supabase/supabase-js": "^2.47.14",
|
||||||
"@tanstack/react-query": "^5.62.16",
|
"@tanstack/react-query": "^5.64.1",
|
||||||
"@vercel/speed-insights": "^1.1.0",
|
"@vercel/speed-insights": "^1.1.0",
|
||||||
"ahooks": "^3.8.4",
|
"ahooks": "^3.8.4",
|
||||||
"antd": "^5.23.0",
|
"antd": "^5.23.1",
|
||||||
"antd-style": "^3.7.1",
|
"antd-style": "^3.7.1",
|
||||||
"axios": "^1.7.9",
|
"axios": "^1.7.9",
|
||||||
"canvas-confetti": "^1.9.3",
|
"canvas-confetti": "^1.9.3",
|
||||||
|
@ -56,7 +56,7 @@
|
||||||
"echarts-stat": "^1.2.0",
|
"echarts-stat": "^1.2.0",
|
||||||
"email-validator": "^2.0.4",
|
"email-validator": "^2.0.4",
|
||||||
"font-color-contrast": "^11.1.0",
|
"font-color-contrast": "^11.1.0",
|
||||||
"framer-motion": "^11.16.0",
|
"framer-motion": "^11.18.0",
|
||||||
"html2canvas": "^1.4.1",
|
"html2canvas": "^1.4.1",
|
||||||
"immer": "^10.1.1",
|
"immer": "^10.1.1",
|
||||||
"js-cookie": "^3.0.5",
|
"js-cookie": "^3.0.5",
|
||||||
|
@ -70,12 +70,12 @@
|
||||||
"next": "14.2.22",
|
"next": "14.2.22",
|
||||||
"next-themes": "^0.4.4",
|
"next-themes": "^0.4.4",
|
||||||
"next-transpile-modules": "^10.0.1",
|
"next-transpile-modules": "^10.0.1",
|
||||||
"papaparse": "^5.4.1",
|
"papaparse": "^5.5.1",
|
||||||
"patternomaly": "^1.3.2",
|
"patternomaly": "^1.3.2",
|
||||||
"pluralize": "^8.0.0",
|
"pluralize": "^8.0.0",
|
||||||
"posthog-js": "^1.204.0",
|
"posthog-js": "^1.206.1",
|
||||||
"prettier": "^3.4.2",
|
"prettier": "^3.4.2",
|
||||||
"prettier-plugin-tailwindcss": "^0.6.9",
|
"prettier-plugin-tailwindcss": "^0.6.10",
|
||||||
"rc-virtual-list": "^3.17.0",
|
"rc-virtual-list": "^3.17.0",
|
||||||
"react": "^18",
|
"react": "^18",
|
||||||
"react-chartjs-2": "^5.3.0",
|
"react-chartjs-2": "^5.3.0",
|
||||||
|
@ -99,7 +99,7 @@
|
||||||
"sql-language-server": "^1.7.1",
|
"sql-language-server": "^1.7.1",
|
||||||
"tailwind-merge": "^2.6.0",
|
"tailwind-merge": "^2.6.0",
|
||||||
"utility-types": "^3.11.0",
|
"utility-types": "^3.11.0",
|
||||||
"uuid": "^11.0.4"
|
"uuid": "^11.0.5"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/canvas-confetti": "^1.9.0",
|
"@types/canvas-confetti": "^1.9.0",
|
||||||
|
@ -119,10 +119,10 @@
|
||||||
"eslint": "^8",
|
"eslint": "^8",
|
||||||
"eslint-config-next": "14.2.3",
|
"eslint-config-next": "14.2.3",
|
||||||
"eslint-config-prettier": "^9.1.0",
|
"eslint-config-prettier": "^9.1.0",
|
||||||
"eslint-plugin-prettier": "^5.2.1",
|
"eslint-plugin-prettier": "^5.2.2",
|
||||||
"monaco-editor-webpack-plugin": "^7.1.0",
|
"monaco-editor-webpack-plugin": "^7.1.0",
|
||||||
"postcss": "~8",
|
"postcss": "~8",
|
||||||
"sass": "^1.83.1",
|
"sass": "^1.83.4",
|
||||||
"tailwindcss": "^3.4.17",
|
"tailwindcss": "^3.4.17",
|
||||||
"typescript": "^5"
|
"typescript": "^5"
|
||||||
},
|
},
|
||||||
|
|
|
@ -7,7 +7,7 @@ import { BusterRoutes, createBusterRoute } from '@/routes';
|
||||||
import { Menu, MenuProps } from 'antd';
|
import { Menu, MenuProps } from 'antd';
|
||||||
import { createStyles } from 'antd-style';
|
import { createStyles } from 'antd-style';
|
||||||
import Link from 'next/link';
|
import Link from 'next/link';
|
||||||
import React, { useContext } from 'react';
|
import React, { useContext, useMemo } from 'react';
|
||||||
import { Text } from '@/components';
|
import { Text } from '@/components';
|
||||||
import { SignOutButton } from './SignOutButton';
|
import { SignOutButton } from './SignOutButton';
|
||||||
import { useMemoizedFn } from 'ahooks';
|
import { useMemoizedFn } from 'ahooks';
|
||||||
|
@ -164,6 +164,64 @@ const accountItems: MenuItem[] = [
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
|
const permissionsAndSecurityItems: MenuItem[] = [
|
||||||
|
{
|
||||||
|
key: BusterRoutes.APP_SETTINGS_USERS,
|
||||||
|
label: (
|
||||||
|
<Link
|
||||||
|
href={createBusterRoute({
|
||||||
|
route: BusterRoutes.APP_SETTINGS_USERS
|
||||||
|
})}>
|
||||||
|
Users
|
||||||
|
</Link>
|
||||||
|
)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: BusterRoutes.APP_SETTINGS_DATASETS,
|
||||||
|
label: (
|
||||||
|
<Link
|
||||||
|
href={createBusterRoute({
|
||||||
|
route: BusterRoutes.APP_SETTINGS_DATASETS
|
||||||
|
})}>
|
||||||
|
Datasets
|
||||||
|
</Link>
|
||||||
|
)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: BusterRoutes.APP_SETTINGS_DATASET_GROUPS,
|
||||||
|
label: (
|
||||||
|
<Link
|
||||||
|
href={createBusterRoute({
|
||||||
|
route: BusterRoutes.APP_SETTINGS_DATASET_GROUPS
|
||||||
|
})}>
|
||||||
|
Dataset Groups
|
||||||
|
</Link>
|
||||||
|
)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: BusterRoutes.APP_SETTINGS_ATTRIBUTES,
|
||||||
|
label: (
|
||||||
|
<Link
|
||||||
|
href={createBusterRoute({
|
||||||
|
route: BusterRoutes.APP_SETTINGS_ATTRIBUTES
|
||||||
|
})}>
|
||||||
|
Attributes
|
||||||
|
</Link>
|
||||||
|
)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: BusterRoutes.APP_SETTINGS_SECURITY,
|
||||||
|
label: (
|
||||||
|
<Link
|
||||||
|
href={createBusterRoute({
|
||||||
|
route: BusterRoutes.APP_SETTINGS_SECURITY
|
||||||
|
})}>
|
||||||
|
Security
|
||||||
|
</Link>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
const useStyles = createStyles(({ token, css }) => {
|
const useStyles = createStyles(({ token, css }) => {
|
||||||
return {
|
return {
|
||||||
menuHeader: css`
|
menuHeader: css`
|
||||||
|
@ -181,63 +239,75 @@ const useStyles = createStyles(({ token, css }) => {
|
||||||
export const AppSidebarSettings: React.FC<{
|
export const AppSidebarSettings: React.FC<{
|
||||||
className?: string;
|
className?: string;
|
||||||
signOut: () => void;
|
signOut: () => void;
|
||||||
}> = ({ signOut }) => {
|
}> = React.memo(({ signOut }) => {
|
||||||
|
const { styles, cx } = useStyles();
|
||||||
const { openInfoMessage } = useBusterNotifications();
|
const { openInfoMessage } = useBusterNotifications();
|
||||||
const currentRoute = useAppLayoutContextSelector((s) => s.currentRoute);
|
const currentRoute = useAppLayoutContextSelector((s) => s.currentRoute);
|
||||||
const { styles, cx } = useStyles();
|
|
||||||
const userTeams = useUserConfigContextSelector((state) => state.userTeams);
|
const userTeams = useUserConfigContextSelector((state) => state.userTeams);
|
||||||
|
|
||||||
const onAddTeam = useMemoizedFn(() => {
|
const onAddTeam = useMemoizedFn(() => {
|
||||||
openInfoMessage('Adding team is not currently supported');
|
openInfoMessage('Adding team is not currently supported');
|
||||||
});
|
});
|
||||||
|
|
||||||
const teamsList: MenuItem[] = [
|
const teamsList: MenuItem[] = useMemo(
|
||||||
...userTeams.map((team) => ({
|
() => [
|
||||||
key: createBusterRoute({
|
...userTeams.map((team) => ({
|
||||||
route: BusterRoutes.SETTINGS_TEAM_ID,
|
key: createBusterRoute({
|
||||||
teamId: team.id
|
route: BusterRoutes.SETTINGS_TEAM_ID,
|
||||||
}),
|
teamId: team.id
|
||||||
label: (
|
}),
|
||||||
<Link
|
label: (
|
||||||
href={createBusterRoute({
|
<Link
|
||||||
route: BusterRoutes.SETTINGS_TEAM_ID,
|
href={createBusterRoute({
|
||||||
teamId: team.id
|
route: BusterRoutes.SETTINGS_TEAM_ID,
|
||||||
})}>
|
teamId: team.id
|
||||||
{team.name}
|
})}>
|
||||||
</Link>
|
{team.name}
|
||||||
)
|
</Link>
|
||||||
})),
|
)
|
||||||
{
|
})),
|
||||||
key: 'addteam',
|
{
|
||||||
label: (
|
key: 'addteam',
|
||||||
<div onClick={onAddTeam} className={cx(styles.addButton, 'flex items-center space-x-1')}>
|
label: (
|
||||||
<AppMaterialIcons size={16} className="-ml-1" icon="add" />
|
<div onClick={onAddTeam} className={cx(styles.addButton, 'flex items-center space-x-1')}>
|
||||||
<Text className="!text-inherit">Add team</Text>
|
<AppMaterialIcons size={16} className="-ml-1" icon="add" />
|
||||||
</div>
|
<Text className="!text-inherit">Add team</Text>
|
||||||
)
|
</div>
|
||||||
}
|
)
|
||||||
];
|
}
|
||||||
|
],
|
||||||
|
[userTeams, onAddTeam, styles.addButton, cx]
|
||||||
|
);
|
||||||
|
|
||||||
const menus = [
|
const menus = useMemo(
|
||||||
{
|
() => [
|
||||||
key: 'workspace',
|
{
|
||||||
label: 'Workspace',
|
key: 'myaccount',
|
||||||
icon: <AppMaterialIcons size={16} icon="apartment" />,
|
label: 'Account',
|
||||||
children: workSpaceItems
|
icon: <AppMaterialIcons icon="account_circle" fill />,
|
||||||
},
|
children: accountItems
|
||||||
{
|
},
|
||||||
key: 'myaccount',
|
{
|
||||||
label: 'My Account',
|
key: 'workspace',
|
||||||
icon: <AppMaterialIcons icon="account_circle" />,
|
label: 'Workspace',
|
||||||
children: accountItems
|
icon: <AppMaterialIcons size={16} icon="apartment" />,
|
||||||
},
|
children: workSpaceItems
|
||||||
{
|
},
|
||||||
key: 'teams',
|
{
|
||||||
label: 'Teams',
|
key: 'permissionsandsecurity',
|
||||||
icon: <AppMaterialIcons icon="groups" />,
|
label: 'Permissions & Security',
|
||||||
children: teamsList
|
icon: <AppMaterialIcons size={16} icon="lock" />,
|
||||||
}
|
children: permissionsAndSecurityItems
|
||||||
];
|
}
|
||||||
|
// {
|
||||||
|
// key: 'teams',
|
||||||
|
// label: 'Teams',
|
||||||
|
// icon: <AppMaterialIcons icon="groups" />,
|
||||||
|
// children: teamsList
|
||||||
|
// }
|
||||||
|
],
|
||||||
|
[workSpaceItems, permissionsAndSecurityItems, accountItems, teamsList]
|
||||||
|
);
|
||||||
|
|
||||||
const allKeys = menus.map((menu) => menu.key);
|
const allKeys = menus.map((menu) => menu.key);
|
||||||
|
|
||||||
|
@ -264,4 +334,5 @@ export const AppSidebarSettings: React.FC<{
|
||||||
<SignOutButton signOut={signOut} />
|
<SignOutButton signOut={signOut} />
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
};
|
});
|
||||||
|
AppSidebarSettings.displayName = 'AppSidebarSettings';
|
||||||
|
|
|
@ -9,7 +9,6 @@ export enum BusterAppRoutes {
|
||||||
APP_DASHBOARD_ID = '/app/dashboards/:dashboardId',
|
APP_DASHBOARD_ID = '/app/dashboards/:dashboardId',
|
||||||
APP_DASHBOARD_THREADS = '/app/dashboards/:dashboardId/metrics',
|
APP_DASHBOARD_THREADS = '/app/dashboards/:dashboardId/metrics',
|
||||||
APP_DASHBOARD_THREADS_ID = '/app/dashboards/:dashboardId/metrics/:threadId',
|
APP_DASHBOARD_THREADS_ID = '/app/dashboards/:dashboardId/metrics/:threadId',
|
||||||
|
|
||||||
APP_LOGS = '/app/logs',
|
APP_LOGS = '/app/logs',
|
||||||
APP_DATASETS = '/app/datasets',
|
APP_DATASETS = '/app/datasets',
|
||||||
APP_DATASETS_ID = '/app/datasets/:datasetId',
|
APP_DATASETS_ID = '/app/datasets/:datasetId',
|
||||||
|
@ -35,6 +34,14 @@ export enum BusterAppRoutes {
|
||||||
SETTINGS_PREFERENCES = '/app/settings/preferences',
|
SETTINGS_PREFERENCES = '/app/settings/preferences',
|
||||||
SETTINGS_NOTIFICATIONS = '/app/settings/notifications',
|
SETTINGS_NOTIFICATIONS = '/app/settings/notifications',
|
||||||
SETTINGS_TEAM_ID = '/app/settings/team/:teamId',
|
SETTINGS_TEAM_ID = '/app/settings/team/:teamId',
|
||||||
|
APP_SETTINGS_USERS = '/app/settings/users',
|
||||||
|
APP_SETTINGS_USERS_ID = '/app/settings/users/:userId',
|
||||||
|
APP_SETTINGS_DATASETS = '/app/settings/datasets',
|
||||||
|
APP_SETTINGS_DATASETS_ID = '/app/settings/datasets/:datasetId',
|
||||||
|
APP_SETTINGS_DATASET_GROUPS = '/app/settings/dataset-groups',
|
||||||
|
APP_SETTINGS_DATASET_GROUPS_ID = '/app/settings/dataset-groups/:datasetGroupId',
|
||||||
|
APP_SETTINGS_ATTRIBUTES = '/app/settings/attributes',
|
||||||
|
APP_SETTINGS_SECURITY = '/app/settings/security',
|
||||||
NEW_USER = '/app/new-user'
|
NEW_USER = '/app/new-user'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -106,4 +113,23 @@ export type BusterAppRoutesWithArgs = {
|
||||||
threadId: string;
|
threadId: string;
|
||||||
};
|
};
|
||||||
[BusterAppRoutes.NEW_USER]: { route: BusterAppRoutes.NEW_USER };
|
[BusterAppRoutes.NEW_USER]: { route: BusterAppRoutes.NEW_USER };
|
||||||
|
[BusterAppRoutes.APP_SETTINGS_USERS]: { route: BusterAppRoutes.APP_SETTINGS_USERS };
|
||||||
|
[BusterAppRoutes.APP_SETTINGS_USERS_ID]: {
|
||||||
|
route: BusterAppRoutes.APP_SETTINGS_USERS_ID;
|
||||||
|
userId: string;
|
||||||
|
};
|
||||||
|
[BusterAppRoutes.APP_SETTINGS_DATASETS]: { route: BusterAppRoutes.APP_SETTINGS_DATASETS };
|
||||||
|
[BusterAppRoutes.APP_SETTINGS_DATASETS_ID]: {
|
||||||
|
route: BusterAppRoutes.APP_SETTINGS_DATASETS_ID;
|
||||||
|
datasetId: string;
|
||||||
|
};
|
||||||
|
[BusterAppRoutes.APP_SETTINGS_DATASET_GROUPS]: {
|
||||||
|
route: BusterAppRoutes.APP_SETTINGS_DATASET_GROUPS;
|
||||||
|
};
|
||||||
|
[BusterAppRoutes.APP_SETTINGS_DATASET_GROUPS_ID]: {
|
||||||
|
route: BusterAppRoutes.APP_SETTINGS_DATASET_GROUPS_ID;
|
||||||
|
datasetGroupId: string;
|
||||||
|
};
|
||||||
|
[BusterAppRoutes.APP_SETTINGS_ATTRIBUTES]: { route: BusterAppRoutes.APP_SETTINGS_ATTRIBUTES };
|
||||||
|
[BusterAppRoutes.APP_SETTINGS_SECURITY]: { route: BusterAppRoutes.APP_SETTINGS_SECURITY };
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue