mirror of
https://github.com/Unleash/unleash.git
synced 2025-09-28 17:55:15 +02:00
feat: Unleash v7 ESM migration (#9877)
We're migrating to ESM, which will allow us to import the latest versions of our dependencies. Co-Authored-By: Christopher Kolstad <chriswk@getunleash.io>
This commit is contained in:
parent
c358a8ffd3
commit
abe160eb7d
@ -1,11 +1,13 @@
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
const directoryPath = path.join(`${__dirname}/..`, 'src/lib/openapi/spec');
|
||||
const indexPath = path.join(directoryPath, 'index.ts');
|
||||
import { readdir, writeFileSync } from 'node:fs';
|
||||
import { join, basename, dirname } from 'node:path';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
const __filename = fileURLToPath(import.meta.url);
|
||||
const __dirname = dirname(__filename);
|
||||
const directoryPath = join(`${__dirname}/..`, 'src/lib/openapi/spec');
|
||||
const indexPath = join(directoryPath, 'index.ts');
|
||||
|
||||
// Read files from the directory
|
||||
fs.readdir(directoryPath, (err, files) => {
|
||||
readdir(directoryPath, (err, files) => {
|
||||
if (err) {
|
||||
console.error('Could not list the directory.', err);
|
||||
process.exit(1);
|
||||
@ -13,16 +15,16 @@ fs.readdir(directoryPath, (err, files) => {
|
||||
|
||||
const exports = files
|
||||
.filter((file) => file.includes('schema.ts')) // Filter files by 'schema.ts'
|
||||
.map((file) => `export * from './${file.replace('.ts', '')}';`) // Create export statements
|
||||
.map((file) => `export * from './${file.replace('.ts', '.js')}';`) // Create export statements
|
||||
.join('\n');
|
||||
|
||||
// Append export statements to index.ts
|
||||
const script = path.basename(__filename);
|
||||
const script = basename(__filename);
|
||||
const message = `/**
|
||||
* Auto-generated file by ${script}. Do not edit.
|
||||
* To run it manually execute \`yarn schema:update\` or \`node ${path.basename(__dirname)}/${script}\`
|
||||
* To run it manually execute \`yarn schema:update\` or \`node ${basename(__dirname)}/${script}\`
|
||||
*/\n`;
|
||||
fs.writeFileSync(indexPath, `${message}${exports}\n${message}`, (err) => {
|
||||
writeFileSync(indexPath, `${message}${exports}\n${message}`, (err) => {
|
||||
if (err) {
|
||||
console.error('Could not append to file.', err);
|
||||
process.exit(1);
|
||||
|
935
.yarn/releases/yarn-4.7.0.cjs
vendored
935
.yarn/releases/yarn-4.7.0.cjs
vendored
File diff suppressed because one or more lines are too long
948
.yarn/releases/yarn-4.9.1.cjs
vendored
Executable file
948
.yarn/releases/yarn-4.9.1.cjs
vendored
Executable file
File diff suppressed because one or more lines are too long
@ -1,3 +1,3 @@
|
||||
nodeLinker: node-modules
|
||||
|
||||
yarnPath: .yarn/releases/yarn-4.7.0.cjs
|
||||
yarnPath: .yarn/releases/yarn-4.9.1.cjs
|
||||
|
18
biome.json
18
biome.json
@ -12,7 +12,22 @@
|
||||
"useExhaustiveDependencies": "off",
|
||||
"noUnusedImports": "warn",
|
||||
"useJsxKeyInIterable": "off",
|
||||
"useHookAtTopLevel": "error"
|
||||
"useHookAtTopLevel": "error",
|
||||
"useImportExtensions": {
|
||||
"level": "error",
|
||||
"options": {
|
||||
"suggestedExtensions": {
|
||||
"ts": {
|
||||
"module": "js",
|
||||
"component": "jsx"
|
||||
},
|
||||
"tsx": {
|
||||
"module": "js",
|
||||
"component": "tsx"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"complexity": {
|
||||
"noBannedTypes": "off",
|
||||
@ -52,6 +67,7 @@
|
||||
"website/build",
|
||||
"website/docs/generated",
|
||||
"website/global.js",
|
||||
"website",
|
||||
"setupJest.js",
|
||||
"dist",
|
||||
"build",
|
||||
|
935
frontend/.yarn/releases/yarn-4.7.0.cjs
vendored
935
frontend/.yarn/releases/yarn-4.7.0.cjs
vendored
File diff suppressed because one or more lines are too long
948
frontend/.yarn/releases/yarn-4.9.1.cjs
vendored
Executable file
948
frontend/.yarn/releases/yarn-4.9.1.cjs
vendored
Executable file
File diff suppressed because one or more lines are too long
@ -1,3 +1,3 @@
|
||||
nodeLinker: node-modules
|
||||
|
||||
yarnPath: .yarn/releases/yarn-4.7.0.cjs
|
||||
yarnPath: .yarn/releases/yarn-4.9.1.cjs
|
||||
|
@ -13,7 +13,7 @@ export default defineConfig({
|
||||
on(
|
||||
'file:preprocessor',
|
||||
vitePreprocessor({
|
||||
configFile: path.resolve(__dirname, './vite.config.mts'),
|
||||
configFile: path.resolve('./vite.config.mts'),
|
||||
mode: 'development',
|
||||
}),
|
||||
);
|
||||
|
@ -1,5 +1,5 @@
|
||||
///<reference path="../../global.d.ts" />
|
||||
import { TOPICS } from '../../../src/component/demo/demo-topics';
|
||||
import { TOPICS } from '../../../src/component/demo/demo-topics.js';
|
||||
|
||||
describe('demo', () => {
|
||||
const baseUrl = Cypress.config().baseUrl;
|
||||
|
@ -9,7 +9,7 @@ import {
|
||||
PA_USERS_GROUPS_ID,
|
||||
PA_USERS_GROUPS_TITLE_ID,
|
||||
//@ts-ignore
|
||||
} from '../../../src/utils/testIds';
|
||||
} from '../../../src/utils/testIds.js';
|
||||
|
||||
describe('project-access', () => {
|
||||
const baseUrl = Cypress.config().baseUrl;
|
||||
|
@ -13,8 +13,7 @@ import {
|
||||
addUserIdStrategyToFeature_UI,
|
||||
updateFlexibleRolloutStrategy_UI,
|
||||
do_login,
|
||||
//@ts-ignore
|
||||
} from './UI';
|
||||
} from './UI.ts';
|
||||
import {
|
||||
addUserToProject_API,
|
||||
createFeature_API,
|
||||
@ -24,8 +23,7 @@ import {
|
||||
deleteProject_API,
|
||||
updateUserPassword_API,
|
||||
createEnvironment_API,
|
||||
//@ts-ignore
|
||||
} from './API';
|
||||
} from './API.ts';
|
||||
|
||||
Cypress.on('window:before:load', (window) => {
|
||||
Object.defineProperty(window.navigator, 'language', { value: 'en' });
|
||||
|
@ -14,7 +14,7 @@
|
||||
// ***********************************************************
|
||||
|
||||
// Import commands.js using ES2015 syntax:
|
||||
import './commands';
|
||||
import './commands.js';
|
||||
|
||||
// Alternatively you can use CommonJS syntax:
|
||||
// require('./commands')
|
||||
|
@ -15,7 +15,7 @@
|
||||
|
||||
// Import commands.js using ES2015 syntax:
|
||||
// @ts-ignore
|
||||
import './commands';
|
||||
import './commands.js';
|
||||
|
||||
// Alternatively you can use CommonJS syntax:
|
||||
// require('./commands')
|
||||
|
@ -1,9 +1,10 @@
|
||||
require('pkginfo')(module, 'version');
|
||||
const path = require('path');
|
||||
|
||||
import path from 'node:path';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
const dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||
const { version } = module.exports;
|
||||
|
||||
module.exports = {
|
||||
publicFolder: path.join(__dirname, 'build'),
|
||||
publicFolder: path.join(dirname, 'build'),
|
||||
version,
|
||||
};
|
||||
|
2
frontend/mise.toml
Normal file
2
frontend/mise.toml
Normal file
@ -0,0 +1,2 @@
|
||||
[tools]
|
||||
node = "22"
|
@ -9,6 +9,7 @@
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
},
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"build": "yarn run lint:material:icons && vite build",
|
||||
"dev": "vite",
|
||||
@ -156,7 +157,7 @@
|
||||
"last 1 safari version"
|
||||
]
|
||||
},
|
||||
"packageManager": "yarn@4.7.0",
|
||||
"packageManager": "yarn@4.9.1",
|
||||
"dependencies": {
|
||||
"json-2-csv": "^5.5.5"
|
||||
}
|
||||
|
@ -14,16 +14,16 @@ import { useAuthUser } from 'hooks/api/getters/useAuth/useAuthUser';
|
||||
import { SplashPageRedirect } from 'component/splash/SplashPageRedirect/SplashPageRedirect';
|
||||
import useUiConfig from 'hooks/api/getters/useUiConfig/useUiConfig';
|
||||
|
||||
import MaintenanceBanner from './maintenance/MaintenanceBanner';
|
||||
import MaintenanceBanner from './maintenance/MaintenanceBanner.tsx';
|
||||
import { styled } from '@mui/material';
|
||||
import { InitialRedirect, useLastViewedPage } from './InitialRedirect';
|
||||
import { InternalBanners } from './banners/internalBanners/InternalBanners';
|
||||
import { ExternalBanners } from './banners/externalBanners/ExternalBanners';
|
||||
import { LicenseBanner } from './banners/internalBanners/LicenseBanner';
|
||||
import { Demo } from './demo/Demo';
|
||||
import { LoginRedirect } from './common/LoginRedirect/LoginRedirect';
|
||||
import { SecurityBanner } from './banners/internalBanners/SecurityBanner';
|
||||
import { MonthsOldVersionBanner } from './banners/internalBanners/MonthsOldVersionBanner';
|
||||
import { InitialRedirect, useLastViewedPage } from './InitialRedirect.tsx';
|
||||
import { InternalBanners } from './banners/internalBanners/InternalBanners.tsx';
|
||||
import { ExternalBanners } from './banners/externalBanners/ExternalBanners.tsx';
|
||||
import { LicenseBanner } from './banners/internalBanners/LicenseBanner.tsx';
|
||||
import { Demo } from './demo/Demo.tsx';
|
||||
import { LoginRedirect } from './common/LoginRedirect/LoginRedirect.tsx';
|
||||
import { SecurityBanner } from './banners/internalBanners/SecurityBanner.tsx';
|
||||
import { MonthsOldVersionBanner } from './banners/internalBanners/MonthsOldVersionBanner.tsx';
|
||||
|
||||
const StyledContainer = styled('div')(() => ({
|
||||
'& ul': {
|
||||
|
@ -2,7 +2,7 @@ import { useEffect } from 'react';
|
||||
import { type Location, Navigate } from 'react-router-dom';
|
||||
import useProjects from 'hooks/api/getters/useProjects/useProjects';
|
||||
import { useLastViewedProject } from 'hooks/useLastViewedProject';
|
||||
import Loader from './common/Loader/Loader';
|
||||
import Loader from './common/Loader/Loader.tsx';
|
||||
import { useLocalStorageState } from 'hooks/useLocalStorageState';
|
||||
import { useAuthUser } from 'hooks/api/getters/useAuth/useAuthUser';
|
||||
|
||||
|
@ -1,24 +1,24 @@
|
||||
import { Routes, Route } from 'react-router-dom';
|
||||
import { ApiTokenPage } from './apiToken/ApiTokenPage/ApiTokenPage';
|
||||
import { CreateApiToken } from './apiToken/CreateApiToken/CreateApiToken';
|
||||
import { AuthSettings } from './auth/AuthSettings';
|
||||
import { Billing } from './billing/Billing';
|
||||
import FlaggedBillingRedirect from './billing/FlaggedBillingRedirect/FlaggedBillingRedirect';
|
||||
import { CorsAdmin } from './cors';
|
||||
import { GroupsAdmin } from './groups/GroupsAdmin';
|
||||
import { InstanceAdmin } from './instance-admin/InstanceAdmin';
|
||||
import { InstancePrivacy } from './instance-privacy/InstancePrivacy';
|
||||
import { MaintenanceAdmin } from './maintenance';
|
||||
import { Network } from './network/Network';
|
||||
import { Roles } from './roles/Roles';
|
||||
import { ServiceAccounts } from './serviceAccounts/ServiceAccounts';
|
||||
import CreateUser from './users/CreateUser/CreateUser';
|
||||
import { InviteLink } from './users/InviteLink/InviteLink';
|
||||
import UsersAdmin from './users/UsersAdmin';
|
||||
import { ApiTokenPage } from './apiToken/ApiTokenPage/ApiTokenPage.tsx';
|
||||
import { CreateApiToken } from './apiToken/CreateApiToken/CreateApiToken.tsx';
|
||||
import { AuthSettings } from './auth/AuthSettings.tsx';
|
||||
import { Billing } from './billing/Billing.tsx';
|
||||
import FlaggedBillingRedirect from './billing/FlaggedBillingRedirect/FlaggedBillingRedirect.tsx';
|
||||
import { CorsAdmin } from './cors/index.js';
|
||||
import { GroupsAdmin } from './groups/GroupsAdmin.tsx';
|
||||
import { InstanceAdmin } from './instance-admin/InstanceAdmin.tsx';
|
||||
import { InstancePrivacy } from './instance-privacy/InstancePrivacy.tsx';
|
||||
import { MaintenanceAdmin } from './maintenance/index.js';
|
||||
import { Network } from './network/Network.tsx';
|
||||
import { Roles } from './roles/Roles.tsx';
|
||||
import { ServiceAccounts } from './serviceAccounts/ServiceAccounts.tsx';
|
||||
import CreateUser from './users/CreateUser/CreateUser.tsx';
|
||||
import { InviteLink } from './users/InviteLink/InviteLink.tsx';
|
||||
import UsersAdmin from './users/UsersAdmin.tsx';
|
||||
import NotFound from 'component/common/NotFound/NotFound';
|
||||
import { Banners } from './banners/Banners';
|
||||
import { License } from './license/License';
|
||||
import { AdminHome } from './AdminHome';
|
||||
import { Banners } from './banners/Banners.tsx';
|
||||
import { License } from './license/License.tsx';
|
||||
import { AdminHome } from './AdminHome.tsx';
|
||||
|
||||
export const Admin = () => {
|
||||
return (
|
||||
|
@ -1,3 +1,3 @@
|
||||
import { lazy } from 'react';
|
||||
|
||||
export const LazyAdmin = lazy(() => import('./LazyAdminExport'));
|
||||
export const LazyAdmin = lazy(() => import('./LazyAdminExport.tsx'));
|
||||
|
@ -2,6 +2,6 @@
|
||||
// that says we should only use named exports, because
|
||||
// it makes it harder to diverge from the name of the component when
|
||||
// importing it in other files.
|
||||
import { Admin } from './Admin';
|
||||
import { Admin } from './Admin.tsx';
|
||||
|
||||
export default Admin;
|
||||
|
@ -1,6 +1,6 @@
|
||||
import { Box, Button, styled } from '@mui/material';
|
||||
import Input from '../../../common/Input/Input';
|
||||
import GeneralSelect from '../../../common/GeneralSelect/GeneralSelect';
|
||||
import Input from '../../../common/Input/Input.tsx';
|
||||
import GeneralSelect from '../../../common/GeneralSelect/GeneralSelect.tsx';
|
||||
|
||||
export const StyledContainer = styled('div')(() => ({
|
||||
maxWidth: '400px',
|
||||
|
@ -1,4 +1,4 @@
|
||||
import { TokenType } from '../../../../../interfaces/token';
|
||||
import { TokenType } from '../../../../../interfaces/token.ts';
|
||||
import KeyboardArrowDownOutlined from '@mui/icons-material/KeyboardArrowDownOutlined';
|
||||
import type React from 'react';
|
||||
import {
|
||||
|
@ -1,9 +1,9 @@
|
||||
import { SelectProjectInput } from './SelectProjectInput/SelectProjectInput';
|
||||
import { TokenType } from '../../../../../interfaces/token';
|
||||
import { SelectProjectInput } from './SelectProjectInput/SelectProjectInput.tsx';
|
||||
import { TokenType } from '../../../../../interfaces/token.ts';
|
||||
import type React from 'react';
|
||||
import { StyledInputDescription } from '../ApiTokenForm.styles';
|
||||
import useProjects from 'hooks/api/getters/useProjects/useProjects';
|
||||
import type { ApiTokenFormErrorType } from '../useApiTokenForm';
|
||||
import type { ApiTokenFormErrorType } from '../useApiTokenForm.ts';
|
||||
import { useOptionalPathParam } from 'hooks/useOptionalPathParam';
|
||||
|
||||
interface IProjectSelectorProps {
|
||||
|
@ -5,7 +5,7 @@ import { render } from 'utils/testRenderer';
|
||||
import {
|
||||
type ISelectProjectInputProps,
|
||||
SelectProjectInput,
|
||||
} from './SelectProjectInput';
|
||||
} from './SelectProjectInput.tsx';
|
||||
import { testServerRoute, testServerSetup } from 'utils/testServer';
|
||||
|
||||
const onChange = vi.fn();
|
||||
|
@ -19,7 +19,7 @@ import type {
|
||||
import CheckBoxOutlineBlankIcon from '@mui/icons-material/CheckBoxOutlineBlank';
|
||||
import CheckBoxIcon from '@mui/icons-material/CheckBox';
|
||||
import type { IAutocompleteBoxOption } from 'component/common/AutocompleteBox/AutocompleteBox';
|
||||
import { SelectAllButton } from './SelectAllButton/SelectAllButton';
|
||||
import { SelectAllButton } from './SelectAllButton/SelectAllButton.tsx';
|
||||
import { ConditionallyRender } from 'component/common/ConditionallyRender/ConditionallyRender';
|
||||
|
||||
const ALL_PROJECTS = '*';
|
||||
|
@ -1,6 +1,6 @@
|
||||
import type React from 'react';
|
||||
import { StyledInput, StyledInputDescription } from '../ApiTokenForm.styles';
|
||||
import type { ApiTokenFormErrorType } from '../useApiTokenForm';
|
||||
import type { ApiTokenFormErrorType } from '../useApiTokenForm.ts';
|
||||
|
||||
interface ITokenInfoProps {
|
||||
tokenName: string;
|
||||
|
@ -8,7 +8,7 @@ import {
|
||||
CREATE_PROJECT_API_TOKEN,
|
||||
} from '@server/types/permissions';
|
||||
import { useHasRootAccess } from 'hooks/useHasAccess';
|
||||
import type { SelectOption } from './TokenTypeSelector/TokenTypeSelector';
|
||||
import type { SelectOption } from './TokenTypeSelector/TokenTypeSelector.jsx';
|
||||
|
||||
export type ApiTokenFormErrorType = 'tokenName' | 'projects';
|
||||
export const useApiTokenForm = (project?: string) => {
|
||||
|
@ -1,7 +1,7 @@
|
||||
import { render } from 'utils/testRenderer';
|
||||
import { screen } from '@testing-library/react';
|
||||
import userEvent from '@testing-library/user-event';
|
||||
import { ApiTokenIcon, isOrphanedToken } from './ApiTokenIcon';
|
||||
import { ApiTokenIcon, isOrphanedToken } from './ApiTokenIcon.tsx';
|
||||
|
||||
describe('isOrphanedToken', () => {
|
||||
it('should be true for wildcard tokens with secret indicating it is orphaned', () => {
|
||||
|
@ -1,7 +1,7 @@
|
||||
import { Alert, Typography } from '@mui/material';
|
||||
import { Link } from 'react-router-dom';
|
||||
import { Dialogue } from 'component/common/Dialogue/Dialogue';
|
||||
import { UserToken } from './UserToken/UserToken';
|
||||
import { UserToken } from './UserToken/UserToken.tsx';
|
||||
import { ConditionallyRender } from 'component/common/ConditionallyRender/ConditionallyRender';
|
||||
import { TokenType } from 'interfaces/token';
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
import { render } from 'utils/testRenderer';
|
||||
import { screen, waitFor } from '@testing-library/react';
|
||||
import { testServerRoute, testServerSetup } from 'utils/testServer';
|
||||
import { CreateApiToken } from './CreateApiToken';
|
||||
import { CreateApiToken } from './CreateApiToken.tsx';
|
||||
import {
|
||||
ADMIN,
|
||||
CREATE_CLIENT_API_TOKEN,
|
||||
|
@ -2,22 +2,22 @@ import { useState } from 'react';
|
||||
import { useNavigate } from 'react-router-dom';
|
||||
import { styled } from '@mui/material';
|
||||
import FormTemplate from 'component/common/FormTemplate/FormTemplate';
|
||||
import ApiTokenForm from '../ApiTokenForm/ApiTokenForm';
|
||||
import ApiTokenForm from '../ApiTokenForm/ApiTokenForm.tsx';
|
||||
import { CreateButton } from 'component/common/CreateButton/CreateButton';
|
||||
import useApiTokensApi from 'hooks/api/actions/useApiTokensApi/useApiTokensApi';
|
||||
import useUiConfig from 'hooks/api/getters/useUiConfig/useUiConfig';
|
||||
import useToast from 'hooks/useToast';
|
||||
import { useApiTokenForm } from 'component/admin/apiToken/ApiTokenForm/useApiTokenForm';
|
||||
import { ConfirmToken } from '../ConfirmToken/ConfirmToken';
|
||||
import { ConfirmToken } from '../ConfirmToken/ConfirmToken.tsx';
|
||||
import { scrollToTop } from 'component/common/util';
|
||||
import { formatUnknownError } from 'utils/formatUnknownError';
|
||||
import { usePageTitle } from 'hooks/usePageTitle';
|
||||
import { GO_BACK } from 'constants/navigate';
|
||||
import { useApiTokens } from 'hooks/api/getters/useApiTokens/useApiTokens';
|
||||
import { TokenInfo } from '../ApiTokenForm/TokenInfo/TokenInfo';
|
||||
import { TokenTypeSelector } from '../ApiTokenForm/TokenTypeSelector/TokenTypeSelector';
|
||||
import { ProjectSelector } from '../ApiTokenForm/ProjectSelector/ProjectSelector';
|
||||
import { EnvironmentSelector } from '../ApiTokenForm/EnvironmentSelector/EnvironmentSelector';
|
||||
import { TokenInfo } from '../ApiTokenForm/TokenInfo/TokenInfo.tsx';
|
||||
import { TokenTypeSelector } from '../ApiTokenForm/TokenTypeSelector/TokenTypeSelector.tsx';
|
||||
import { ProjectSelector } from '../ApiTokenForm/ProjectSelector/ProjectSelector.tsx';
|
||||
import { EnvironmentSelector } from '../ApiTokenForm/EnvironmentSelector/EnvironmentSelector.tsx';
|
||||
import {
|
||||
ADMIN,
|
||||
CREATE_CLIENT_API_TOKEN,
|
||||
|
@ -1,6 +1,6 @@
|
||||
import { render } from 'utils/testRenderer';
|
||||
import { screen } from '@testing-library/react';
|
||||
import { ProjectsList } from './ProjectsList';
|
||||
import { ProjectsList } from './ProjectsList.tsx';
|
||||
|
||||
describe('ProjectsList', () => {
|
||||
it('should prioritize new "projects" array over deprecated "project"', async () => {
|
||||
|
@ -1,11 +1,11 @@
|
||||
import {} from '@mui/material';
|
||||
import { PageContent } from 'component/common/PageContent/PageContent';
|
||||
import useUiConfig from 'hooks/api/getters/useUiConfig/useUiConfig';
|
||||
import { OidcAuth } from './OidcAuth/OidcAuth';
|
||||
import { SamlAuth } from './SamlAuth/SamlAuth';
|
||||
import { ScimSettings } from './ScimSettings/ScimSettings';
|
||||
import { PasswordAuth } from './PasswordAuth/PasswordAuth';
|
||||
import { GoogleAuth } from './GoogleAuth/GoogleAuth';
|
||||
import { OidcAuth } from './OidcAuth/OidcAuth.tsx';
|
||||
import { SamlAuth } from './SamlAuth/SamlAuth.tsx';
|
||||
import { ScimSettings } from './ScimSettings/ScimSettings.tsx';
|
||||
import { PasswordAuth } from './PasswordAuth/PasswordAuth.tsx';
|
||||
import { GoogleAuth } from './GoogleAuth/GoogleAuth.tsx';
|
||||
import { PermissionGuard } from 'component/common/PermissionGuard/PermissionGuard';
|
||||
import { ADMIN, UPDATE_AUTH_CONFIGURATION } from '@server/types/permissions';
|
||||
import { PremiumFeature } from 'component/common/PremiumFeature/PremiumFeature';
|
||||
|
@ -12,14 +12,14 @@ import {
|
||||
TextField,
|
||||
} from '@mui/material';
|
||||
import { Alert } from '@mui/material';
|
||||
import { AutoCreateForm } from '../AutoCreateForm/AutoCreateForm';
|
||||
import { AutoCreateForm } from '../AutoCreateForm/AutoCreateForm.tsx';
|
||||
import useUiConfig from 'hooks/api/getters/useUiConfig/useUiConfig';
|
||||
import useAuthSettingsApi from 'hooks/api/actions/useAuthSettingsApi/useAuthSettingsApi';
|
||||
import useAuthSettings from 'hooks/api/getters/useAuthSettings/useAuthSettings';
|
||||
import useToast from 'hooks/useToast';
|
||||
import { formatUnknownError } from 'utils/formatUnknownError';
|
||||
import { removeEmptyStringFields } from 'utils/removeEmptyStringFields';
|
||||
import { SsoGroupSettings } from '../SsoGroupSettings';
|
||||
import { SsoGroupSettings } from '../SsoGroupSettings.tsx';
|
||||
import type { IRole } from 'interfaces/role';
|
||||
import { ConditionallyRender } from 'component/common/ConditionallyRender/ConditionallyRender';
|
||||
|
||||
|
@ -11,7 +11,7 @@ import { formatUnknownError } from 'utils/formatUnknownError';
|
||||
import { useAdminCount } from 'hooks/api/getters/useAdminCount/useAdminCount';
|
||||
import { Link } from 'react-router-dom';
|
||||
import { useApiTokens } from 'hooks/api/getters/useApiTokens/useApiTokens';
|
||||
import { PasswordAuthDialog } from './PasswordAuthDialog';
|
||||
import { PasswordAuthDialog } from './PasswordAuthDialog.tsx';
|
||||
|
||||
export const PasswordAuth = () => {
|
||||
const { setToastData, setToastApiError } = useToast();
|
||||
|
@ -8,14 +8,14 @@ import {
|
||||
TextField,
|
||||
} from '@mui/material';
|
||||
import { Alert } from '@mui/material';
|
||||
import { AutoCreateForm } from '../AutoCreateForm/AutoCreateForm';
|
||||
import { AutoCreateForm } from '../AutoCreateForm/AutoCreateForm.tsx';
|
||||
import useToast from 'hooks/useToast';
|
||||
import useUiConfig from 'hooks/api/getters/useUiConfig/useUiConfig';
|
||||
import useAuthSettings from 'hooks/api/getters/useAuthSettings/useAuthSettings';
|
||||
import useAuthSettingsApi from 'hooks/api/actions/useAuthSettingsApi/useAuthSettingsApi';
|
||||
import { formatUnknownError } from 'utils/formatUnknownError';
|
||||
import { removeEmptyStringFields } from 'utils/removeEmptyStringFields';
|
||||
import { SsoGroupSettings } from '../SsoGroupSettings';
|
||||
import { SsoGroupSettings } from '../SsoGroupSettings.tsx';
|
||||
import type { IRole } from 'interfaces/role';
|
||||
import { ConditionallyRender } from 'component/common/ConditionallyRender/ConditionallyRender';
|
||||
|
||||
|
@ -1,15 +1,15 @@
|
||||
import { Button, FormControlLabel, Grid, Switch, styled } from '@mui/material';
|
||||
import { Alert } from '@mui/material';
|
||||
import useUiConfig from 'hooks/api/getters/useUiConfig/useUiConfig';
|
||||
import { ScimTokenGenerationDialog } from './ScimTokenGenerationDialog';
|
||||
import { ScimTokenDialog } from './ScimTokenDialog';
|
||||
import { ScimTokenGenerationDialog } from './ScimTokenGenerationDialog.tsx';
|
||||
import { ScimTokenDialog } from './ScimTokenDialog.tsx';
|
||||
import { ConditionallyRender } from 'component/common/ConditionallyRender/ConditionallyRender';
|
||||
import { useEffect, useState } from 'react';
|
||||
import { formatUnknownError } from 'utils/formatUnknownError';
|
||||
import useToast from 'hooks/useToast';
|
||||
import { useScimSettingsApi } from 'hooks/api/actions/useScimSettingsApi/useScimSettingsApi';
|
||||
import { useScimSettings } from 'hooks/api/getters/useScimSettings/useScimSettings';
|
||||
import { ScimDeleteEntityDialog } from './ScimDeleteUsersDialog';
|
||||
import { ScimDeleteEntityDialog } from './ScimDeleteUsersDialog.tsx';
|
||||
import useAdminUsersApi from 'hooks/api/actions/useAdminUsersApi/useAdminUsersApi';
|
||||
import { useGroupApi } from 'hooks/api/actions/useGroupApi/useGroupApi';
|
||||
|
||||
|
@ -11,7 +11,7 @@ import {
|
||||
type AddOrUpdateBanner,
|
||||
useBannersApi,
|
||||
} from 'hooks/api/actions/useBannersApi/useBannersApi';
|
||||
import { BannerForm } from './BannerForm';
|
||||
import { BannerForm } from './BannerForm.tsx';
|
||||
|
||||
const StyledForm = styled('form')(() => ({
|
||||
display: 'flex',
|
||||
|
@ -2,7 +2,7 @@ import { ADMIN } from 'component/providers/AccessProvider/permissions';
|
||||
import { PermissionGuard } from 'component/common/PermissionGuard/PermissionGuard';
|
||||
import useUiConfig from 'hooks/api/getters/useUiConfig/useUiConfig';
|
||||
import { PremiumFeature } from 'component/common/PremiumFeature/PremiumFeature';
|
||||
import { BannersTable } from './BannersTable/BannersTable';
|
||||
import { BannersTable } from './BannersTable/BannersTable.tsx';
|
||||
import { UPDATE_INSTANCE_BANNERS } from '@server/types/permissions';
|
||||
|
||||
export const Banners = () => {
|
||||
|
@ -19,10 +19,10 @@ import { useBanners } from 'hooks/api/getters/useBanners/useBanners';
|
||||
import { useBannersApi } from 'hooks/api/actions/useBannersApi/useBannersApi';
|
||||
import type { IInternalBanner } from 'interfaces/banner';
|
||||
import { Banner } from 'component/banners/Banner/Banner';
|
||||
import { BannersActionsCell } from './BannersActionsCell';
|
||||
import { BannerDeleteDialog } from './BannerDeleteDialog';
|
||||
import { BannersActionsCell } from './BannersActionsCell.tsx';
|
||||
import { BannerDeleteDialog } from './BannerDeleteDialog.tsx';
|
||||
import { ToggleCell } from 'component/common/Table/cells/ToggleCell/ToggleCell';
|
||||
import { BannerModal } from '../BannerModal/BannerModal';
|
||||
import { BannerModal } from '../BannerModal/BannerModal.tsx';
|
||||
|
||||
export const BannersTable = () => {
|
||||
const { setToastData, setToastApiError } = useToast();
|
||||
|
@ -5,8 +5,8 @@ import { ConditionallyRender } from 'component/common/ConditionallyRender/Condit
|
||||
import { PermissionGuard } from 'component/common/PermissionGuard/PermissionGuard';
|
||||
import { useInstanceStatus } from 'hooks/api/getters/useInstanceStatus/useInstanceStatus';
|
||||
import { Alert } from '@mui/material';
|
||||
import { BillingDashboard } from './BillingDashboard/BillingDashboard';
|
||||
import { BillingHistory } from './BillingHistory/BillingHistory';
|
||||
import { BillingDashboard } from './BillingDashboard/BillingDashboard.tsx';
|
||||
import { BillingHistory } from './BillingHistory/BillingHistory.tsx';
|
||||
import useInvoices from 'hooks/api/getters/useInvoices/useInvoices';
|
||||
|
||||
export const Billing = () => {
|
||||
|
@ -1,6 +1,6 @@
|
||||
import { Grid } from '@mui/material';
|
||||
import { BillingInformation } from './BillingInformation/BillingInformation';
|
||||
import { BillingPlan } from './BillingPlan/BillingPlan';
|
||||
import { BillingInformation } from './BillingInformation/BillingInformation.tsx';
|
||||
import { BillingPlan } from './BillingPlan/BillingPlan.tsx';
|
||||
|
||||
export const BillingDashboard = () => {
|
||||
return (
|
||||
|
@ -1,5 +1,5 @@
|
||||
import { Alert, Divider, Grid, styled, Typography } from '@mui/material';
|
||||
import { BillingInformationButton } from './BillingInformationButton/BillingInformationButton';
|
||||
import { BillingInformationButton } from './BillingInformationButton/BillingInformationButton.tsx';
|
||||
import { ConditionallyRender } from 'component/common/ConditionallyRender/ConditionallyRender';
|
||||
import { InstanceState } from 'interfaces/instance';
|
||||
import useUiConfig from 'hooks/api/getters/useUiConfig/useUiConfig';
|
||||
|
@ -1,7 +1,7 @@
|
||||
import { type IInstanceStatus, InstancePlan } from 'interfaces/instance';
|
||||
import { BillingDetailsPro } from './BillingDetailsPro';
|
||||
import { BillingDetailsPAYG } from './BillingDetailsPAYG';
|
||||
import { BillingDetailsEnterpriseConsumption } from './BillingDetailsEnterpriseConsumption';
|
||||
import { BillingDetailsPro } from './BillingDetailsPro.tsx';
|
||||
import { BillingDetailsPAYG } from './BillingDetailsPAYG.tsx';
|
||||
import { BillingDetailsEnterpriseConsumption } from './BillingDetailsEnterpriseConsumption.tsx';
|
||||
|
||||
interface IBillingDetailsProps {
|
||||
instanceStatus: IInstanceStatus;
|
||||
|
@ -2,7 +2,7 @@ import { Link } from 'react-router-dom';
|
||||
import { Divider, Grid, styled, Typography } from '@mui/material';
|
||||
import { GridRow } from 'component/common/GridRow/GridRow';
|
||||
import { GridCol } from 'component/common/GridCol/GridCol';
|
||||
import { GridColLink } from './GridColLink/GridColLink';
|
||||
import { GridColLink } from './GridColLink/GridColLink.tsx';
|
||||
import type { IInstanceStatus } from 'interfaces/instance';
|
||||
import { useUsers } from 'hooks/api/getters/useUsers/useUsers';
|
||||
import {
|
||||
@ -10,9 +10,9 @@ import {
|
||||
BILLING_PAYG_DEFAULT_MINIMUM_SEATS,
|
||||
BILLING_PAYG_SEAT_PRICE,
|
||||
BILLING_TRAFFIC_PRICE,
|
||||
} from './BillingPlan';
|
||||
} from './BillingPlan.tsx';
|
||||
import { ConditionallyRender } from 'component/common/ConditionallyRender/ConditionallyRender';
|
||||
import { useOverageCost } from './useOverageCost';
|
||||
import { useOverageCost } from './useOverageCost.ts';
|
||||
|
||||
const StyledInfoLabel = styled(Typography)(({ theme }) => ({
|
||||
fontSize: theme.fontSizes.smallBody,
|
||||
|
@ -3,7 +3,7 @@ import { Divider, Grid, styled, Typography } from '@mui/material';
|
||||
import CheckIcon from '@mui/icons-material/Check';
|
||||
import { GridRow } from 'component/common/GridRow/GridRow';
|
||||
import { GridCol } from 'component/common/GridCol/GridCol';
|
||||
import { GridColLink } from './GridColLink/GridColLink';
|
||||
import { GridColLink } from './GridColLink/GridColLink.tsx';
|
||||
import type { IInstanceStatus } from 'interfaces/instance';
|
||||
import { ConditionallyRender } from 'component/common/ConditionallyRender/ConditionallyRender';
|
||||
import { useUsers } from 'hooks/api/getters/useUsers/useUsers';
|
||||
@ -13,8 +13,8 @@ import {
|
||||
BILLING_PRO_BASE_PRICE,
|
||||
BILLING_PRO_SEAT_PRICE,
|
||||
BILLING_TRAFFIC_PRICE,
|
||||
} from './BillingPlan';
|
||||
import { useOverageCost } from './useOverageCost';
|
||||
} from './BillingPlan.tsx';
|
||||
import { useOverageCost } from './useOverageCost.ts';
|
||||
|
||||
const StyledInfoLabel = styled(Typography)(({ theme }) => ({
|
||||
fontSize: theme.fontSizes.smallBody,
|
||||
|
@ -6,7 +6,7 @@ import { trialHasExpired, isTrialInstance } from 'utils/instanceTrial';
|
||||
import { GridRow } from 'component/common/GridRow/GridRow';
|
||||
import { GridCol } from 'component/common/GridCol/GridCol';
|
||||
import { Badge } from 'component/common/Badge/Badge';
|
||||
import { BillingDetails } from './BillingDetails';
|
||||
import { BillingDetails } from './BillingDetails.tsx';
|
||||
import { useInstanceStatus } from 'hooks/api/getters/useInstanceStatus/useInstanceStatus';
|
||||
|
||||
export const BILLING_PRO_BASE_PRICE = 80;
|
||||
|
@ -5,7 +5,7 @@ import {
|
||||
calculateOverageCost,
|
||||
calculateTotalUsage,
|
||||
} from 'utils/traffic-calculations';
|
||||
import { BILLING_TRAFFIC_PRICE } from './BillingPlan';
|
||||
import { BILLING_TRAFFIC_PRICE } from './BillingPlan.jsx';
|
||||
import { useInstanceStatus } from 'hooks/api/getters/useInstanceStatus/useInstanceStatus';
|
||||
|
||||
export const useOverageCost = (includedTraffic: number) => {
|
||||
|
@ -1,4 +1,4 @@
|
||||
import { filterRoutesByPlanData } from './filterRoutesByPlanData';
|
||||
import { filterRoutesByPlanData } from './filterRoutesByPlanData.js';
|
||||
|
||||
describe('filterRoutesByPlanData - open souce routes', () => {
|
||||
test('open source - should show menu item if mode paid plan mode is not defined', () => {
|
||||
|
@ -1,7 +1,7 @@
|
||||
import FormTemplate from 'component/common/FormTemplate/FormTemplate';
|
||||
import { useNavigate } from 'react-router-dom';
|
||||
import { GroupForm } from '../GroupForm/GroupForm';
|
||||
import { useGroupForm } from '../hooks/useGroupForm';
|
||||
import { GroupForm } from '../GroupForm/GroupForm.tsx';
|
||||
import { useGroupForm } from '../hooks/useGroupForm.ts';
|
||||
import useUiConfig from 'hooks/api/getters/useUiConfig/useUiConfig';
|
||||
import useToast from 'hooks/useToast';
|
||||
import { useGroupApi } from 'hooks/api/actions/useGroupApi/useGroupApi';
|
||||
|
@ -1,7 +1,7 @@
|
||||
import FormTemplate from 'component/common/FormTemplate/FormTemplate';
|
||||
import { useNavigate } from 'react-router-dom';
|
||||
import { GroupForm } from '../GroupForm/GroupForm';
|
||||
import { useGroupForm } from '../hooks/useGroupForm';
|
||||
import { GroupForm } from '../GroupForm/GroupForm.tsx';
|
||||
import { useGroupForm } from '../hooks/useGroupForm.ts';
|
||||
import useUiConfig from 'hooks/api/getters/useUiConfig/useUiConfig';
|
||||
import useToast from 'hooks/useToast';
|
||||
import { useGroupApi } from 'hooks/api/actions/useGroupApi/useGroupApi';
|
||||
@ -14,7 +14,7 @@ import { UG_SAVE_BTN_ID } from 'utils/testIds';
|
||||
import { GO_BACK } from 'constants/navigate';
|
||||
import { useGroups } from 'hooks/api/getters/useGroups/useGroups';
|
||||
import type { IGroup } from 'interfaces/group';
|
||||
import { scimGroupTooltip } from '../group-constants';
|
||||
import { scimGroupTooltip } from '../group-constants.ts';
|
||||
import { useScimSettings } from 'hooks/api/getters/useScimSettings/useScimSettings';
|
||||
|
||||
export const EditGroupContainer = () => {
|
||||
|
@ -31,8 +31,8 @@ import { MainHeader } from 'component/common/MainHeader/MainHeader';
|
||||
import { useRequiredPathParam } from 'hooks/useRequiredPathParam';
|
||||
import { RemoveGroup } from 'component/admin/groups/RemoveGroup/RemoveGroup';
|
||||
import { ActionCell } from 'component/common/Table/cells/ActionCell/ActionCell';
|
||||
import { EditGroupUsers } from './EditGroupUsers/EditGroupUsers';
|
||||
import { RemoveGroupUser } from './RemoveGroupUser/RemoveGroupUser';
|
||||
import { EditGroupUsers } from './EditGroupUsers/EditGroupUsers.tsx';
|
||||
import { RemoveGroupUser } from './RemoveGroupUser/RemoveGroupUser.tsx';
|
||||
import { UserAvatar } from 'component/common/UserAvatar/UserAvatar';
|
||||
import ResponsiveButton from 'component/common/ResponsiveButton/ResponsiveButton';
|
||||
import {
|
||||
@ -42,7 +42,7 @@ import {
|
||||
UG_REMOVE_USER_BTN_ID,
|
||||
} from 'utils/testIds';
|
||||
import { useScimSettings } from 'hooks/api/getters/useScimSettings/useScimSettings';
|
||||
import { scimGroupTooltip } from '../group-constants';
|
||||
import { scimGroupTooltip } from '../group-constants.ts';
|
||||
|
||||
export const groupUsersPlaceholder: IGroupUser[] = Array(15).fill({
|
||||
name: 'Name of the user',
|
||||
|
@ -5,8 +5,8 @@ import { UG_DESC_ID, UG_NAME_ID } from 'utils/testIds';
|
||||
import Input from 'component/common/Input/Input';
|
||||
import type { IGroupUser } from 'interfaces/group';
|
||||
import { ConditionallyRender } from 'component/common/ConditionallyRender/ConditionallyRender';
|
||||
import { GroupFormUsersSelect } from './GroupFormUsersSelect/GroupFormUsersSelect';
|
||||
import { GroupFormUsersTable } from './GroupFormUsersTable/GroupFormUsersTable';
|
||||
import { GroupFormUsersSelect } from './GroupFormUsersSelect/GroupFormUsersSelect.tsx';
|
||||
import { GroupFormUsersTable } from './GroupFormUsersTable/GroupFormUsersTable.tsx';
|
||||
import { ItemList } from 'component/common/ItemList/ItemList';
|
||||
import useAuthSettings from 'hooks/api/getters/useAuthSettings/useAuthSettings';
|
||||
import { Link } from 'react-router-dom';
|
||||
|
@ -1,11 +1,11 @@
|
||||
import { Route, Routes } from 'react-router-dom';
|
||||
import { UG } from 'component/common/flags';
|
||||
import { PermissionGuard } from 'component/common/PermissionGuard/PermissionGuard';
|
||||
import { GroupsList } from './GroupsList/GroupsList';
|
||||
import { GroupsList } from './GroupsList/GroupsList.tsx';
|
||||
import { ADMIN } from '@server/types/permissions';
|
||||
import { CreateGroup } from './CreateGroup/CreateGroup';
|
||||
import { EditGroupContainer } from './EditGroup/EditGroup';
|
||||
import { Group } from './Group/Group';
|
||||
import { CreateGroup } from './CreateGroup/CreateGroup.tsx';
|
||||
import { EditGroupContainer } from './EditGroup/EditGroup.tsx';
|
||||
import { Group } from './Group/Group.tsx';
|
||||
import useUiConfig from 'hooks/api/getters/useUiConfig/useUiConfig';
|
||||
import { PremiumFeature } from 'component/common/PremiumFeature/PremiumFeature';
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
import { styled } from '@mui/material';
|
||||
import type { IGroup } from 'interfaces/group';
|
||||
import { Link } from 'react-router-dom';
|
||||
import { GroupCardActions } from './GroupCardActions';
|
||||
import { GroupCardActions } from './GroupCardActions.tsx';
|
||||
import { RoleBadge } from 'component/common/RoleBadge/RoleBadge';
|
||||
import { useScimSettings } from 'hooks/api/getters/useScimSettings/useScimSettings';
|
||||
import GroupsIcon from '@mui/icons-material/GroupsOutlined';
|
||||
@ -9,7 +9,7 @@ import { useSearchHighlightContext } from 'component/common/Table/SearchHighligh
|
||||
import { Highlighter } from 'component/common/Highlighter/Highlighter';
|
||||
import { Truncator } from 'component/common/Truncator/Truncator';
|
||||
import { Card } from 'component/common/Card/Card';
|
||||
import { GroupCardFooter } from './GroupCardFooter';
|
||||
import { GroupCardFooter } from './GroupCardFooter.tsx';
|
||||
|
||||
const StyledCardLink = styled(Link)(({ theme }) => ({
|
||||
color: 'inherit',
|
||||
|
@ -10,14 +10,14 @@ import { styled, useMediaQuery } from '@mui/material';
|
||||
import theme from 'themes/theme';
|
||||
import { SearchHighlightProvider } from 'component/common/Table/SearchHighlightContext/SearchHighlightContext';
|
||||
import { TablePlaceholder } from 'component/common/Table';
|
||||
import { GroupCard } from './GroupCard/GroupCard';
|
||||
import { GroupEmpty } from './GroupEmpty/GroupEmpty';
|
||||
import { GroupCard } from './GroupCard/GroupCard.tsx';
|
||||
import { GroupEmpty } from './GroupEmpty/GroupEmpty.tsx';
|
||||
import ResponsiveButton from 'component/common/ResponsiveButton/ResponsiveButton';
|
||||
import { ADMIN } from 'component/providers/AccessProvider/permissions';
|
||||
import Add from '@mui/icons-material/Add';
|
||||
import { NAVIGATE_TO_CREATE_GROUP } from 'utils/testIds';
|
||||
import { EditGroupUsers } from '../Group/EditGroupUsers/EditGroupUsers';
|
||||
import { RemoveGroup } from '../RemoveGroup/RemoveGroup';
|
||||
import { EditGroupUsers } from '../Group/EditGroupUsers/EditGroupUsers.tsx';
|
||||
import { RemoveGroup } from '../RemoveGroup/RemoveGroup.tsx';
|
||||
|
||||
const StyledGridContainer = styled('div')(({ theme }) => ({
|
||||
display: 'grid',
|
||||
|
@ -1,4 +1,4 @@
|
||||
import { InstanceStats } from './InstanceStats/InstanceStats';
|
||||
import { InstanceStats } from './InstanceStats/InstanceStats.tsx';
|
||||
|
||||
export const InstanceAdmin = () => {
|
||||
return (
|
||||
|
@ -10,9 +10,9 @@ import {
|
||||
import { Box } from '@mui/system';
|
||||
import type { FC } from 'react';
|
||||
import { useInstanceStats } from 'hooks/api/getters/useInstanceStats/useInstanceStats';
|
||||
import { formatApiPath } from '../../../../utils/formatPath';
|
||||
import { PageContent } from '../../../common/PageContent/PageContent';
|
||||
import { PageHeader } from '../../../common/PageHeader/PageHeader';
|
||||
import { formatApiPath } from '../../../../utils/formatPath.ts';
|
||||
import { PageContent } from '../../../common/PageContent/PageContent.tsx';
|
||||
import { PageHeader } from '../../../common/PageHeader/PageHeader.tsx';
|
||||
|
||||
export const InstanceStats: FC = () => {
|
||||
const { stats } = useInstanceStats();
|
||||
|
@ -2,7 +2,7 @@ import { PageContent } from 'component/common/PageContent/PageContent';
|
||||
import { PageHeader } from 'component/common/PageHeader/PageHeader';
|
||||
import { Box, styled } from '@mui/material';
|
||||
import useUiConfig from 'hooks/api/getters/useUiConfig/useUiConfig';
|
||||
import { InstancePrivacySection } from './InstancePrivacySection';
|
||||
import { InstancePrivacySection } from './InstancePrivacySection.tsx';
|
||||
import { useTelemetry } from 'hooks/api/getters/useTelemetry/useTelemetry';
|
||||
|
||||
interface IFeatureActivenessManagementInfo {
|
||||
|
@ -1,4 +1,4 @@
|
||||
import InvoiceList from './InvoiceList';
|
||||
import InvoiceList from './InvoiceList.tsx';
|
||||
import { ADMIN } from 'component/providers/AccessProvider/permissions';
|
||||
import { PermissionGuard } from 'component/common/PermissionGuard/PermissionGuard';
|
||||
|
||||
|
@ -4,8 +4,8 @@ import { PageContent } from 'component/common/PageContent/PageContent';
|
||||
import { PageHeader } from 'component/common/PageHeader/PageHeader';
|
||||
import { Box, styled } from '@mui/material';
|
||||
import useUiConfig from 'hooks/api/getters/useUiConfig/useUiConfig';
|
||||
import { MaintenanceTooltip } from './MaintenanceTooltip';
|
||||
import { MaintenanceToggle } from './MaintenanceToggle';
|
||||
import { MaintenanceTooltip } from './MaintenanceTooltip.tsx';
|
||||
import { MaintenanceToggle } from './MaintenanceToggle.tsx';
|
||||
import { UPDATE_MAINTENANCE_MODE } from '@server/types/permissions';
|
||||
|
||||
export const MaintenanceAdmin = () => (
|
||||
|
@ -6,19 +6,23 @@ import { TabLink } from 'component/common/TabNav/TabLink';
|
||||
import { PageContent } from 'component/common/PageContent/PageContent';
|
||||
import { useUiFlag } from 'hooks/useUiFlag';
|
||||
|
||||
const NetworkOverview = lazy(() => import('./NetworkOverview/NetworkOverview'));
|
||||
const NetworkConnectedEdges = lazy(
|
||||
() => import('./NetworkConnectedEdges/NetworkConnectedEdges'),
|
||||
const NetworkOverview = lazy(
|
||||
() => import('./NetworkOverview/NetworkOverview.tsx'),
|
||||
);
|
||||
const NetworkConnectedEdges = lazy(
|
||||
() => import('./NetworkConnectedEdges/NetworkConnectedEdges.tsx'),
|
||||
);
|
||||
const NetworkTraffic = lazy(
|
||||
() => import('./NetworkTraffic/NetworkTraffic.tsx'),
|
||||
);
|
||||
const NetworkTraffic = lazy(() => import('./NetworkTraffic/NetworkTraffic'));
|
||||
const NetworkTrafficUsage = lazy(
|
||||
() => import('./NetworkTrafficUsage/NetworkTrafficUsage'),
|
||||
() => import('./NetworkTrafficUsage/NetworkTrafficUsage.tsx'),
|
||||
);
|
||||
const BackendConnections = lazy(
|
||||
() => import('./NetworkTrafficUsage/BackendConnections'),
|
||||
() => import('./NetworkTrafficUsage/BackendConnections.tsx'),
|
||||
);
|
||||
const FrontendNetworkTrafficUsage = lazy(
|
||||
() => import('./NetworkTrafficUsage/FrontendNetworkTrafficUsage'),
|
||||
() => import('./NetworkTrafficUsage/FrontendNetworkTrafficUsage.tsx'),
|
||||
);
|
||||
|
||||
const tabs = [
|
||||
|
@ -12,7 +12,7 @@ import {
|
||||
} from '@mui/material';
|
||||
import { Badge } from 'component/common/Badge/Badge';
|
||||
import { HelpIcon } from 'component/common/HelpIcon/HelpIcon';
|
||||
import { NetworkConnectedEdgeInstanceLatency } from './NetworkConnectedEdgeInstanceLatency';
|
||||
import { NetworkConnectedEdgeInstanceLatency } from './NetworkConnectedEdgeInstanceLatency.tsx';
|
||||
|
||||
const StyledInstance = styled('div')(({ theme }) => ({
|
||||
width: '100%',
|
||||
|
@ -8,7 +8,7 @@ import { ReactComponent as LogoIconWhite } from 'assets/icons/logoWhiteBg.svg';
|
||||
import { ThemeMode } from 'component/common/ThemeMode/ThemeMode';
|
||||
import { useConnectedEdges } from 'hooks/api/getters/useConnectedEdges/useConnectedEdges';
|
||||
import type { ConnectedEdge } from 'interfaces/connectedEdge';
|
||||
import { NetworkConnectedEdgeInstance } from './NetworkConnectedEdgeInstance';
|
||||
import { NetworkConnectedEdgeInstance } from './NetworkConnectedEdgeInstance.tsx';
|
||||
|
||||
const UNLEASH = 'Unleash';
|
||||
|
||||
|
@ -11,7 +11,7 @@ import type {
|
||||
import { ReactComponent as LogoIcon } from 'assets/icons/logoBg.svg';
|
||||
import { ReactComponent as LogoIconWhite } from 'assets/icons/logoWhiteBg.svg';
|
||||
import { ThemeMode } from 'component/common/ThemeMode/ThemeMode';
|
||||
import { NetworkPrometheusAPIWarning } from '../NetworkPrometheusAPIWarning';
|
||||
import { NetworkPrometheusAPIWarning } from '../NetworkPrometheusAPIWarning.tsx';
|
||||
|
||||
const StyleUnleashContainer = styled('div')(({ theme }) => ({
|
||||
marginBottom: theme.spacing(18),
|
||||
|
@ -28,7 +28,7 @@ import { ConditionallyRender } from 'component/common/ConditionallyRender/Condit
|
||||
import { usePageTitle } from 'hooks/usePageTitle';
|
||||
import { unknownify } from 'utils/unknownify';
|
||||
import type { Theme } from '@mui/material/styles/createTheme';
|
||||
import { NetworkPrometheusAPIWarning } from '../NetworkPrometheusAPIWarning';
|
||||
import { NetworkPrometheusAPIWarning } from '../NetworkPrometheusAPIWarning.tsx';
|
||||
|
||||
const pointStyles = ['circle', 'rect', 'rectRounded', 'rectRot', 'triangle'];
|
||||
|
||||
|
@ -9,12 +9,12 @@ import {
|
||||
Tooltip as TooltipComponent,
|
||||
Typography,
|
||||
} from '@mui/material';
|
||||
import { PeriodSelector } from './PeriodSelector';
|
||||
import { PeriodSelector } from './PeriodSelector.tsx';
|
||||
import { Bar } from 'react-chartjs-2';
|
||||
import { customHighlightPlugin } from 'component/common/Chart/customHighlightPlugin';
|
||||
import { getChartLabel } from './chart-functions';
|
||||
import { useConsumptionStats } from './hooks/useStats';
|
||||
import { StyledBox, TopRow } from './SharedComponents';
|
||||
import { getChartLabel } from './chart-functions.ts';
|
||||
import { useConsumptionStats } from './hooks/useStats.ts';
|
||||
import { StyledBox, TopRow } from './SharedComponents.tsx';
|
||||
import {
|
||||
BarElement,
|
||||
CategoryScale,
|
||||
@ -25,7 +25,7 @@ import {
|
||||
Tooltip,
|
||||
} from 'chart.js';
|
||||
import annotationPlugin from 'chartjs-plugin-annotation';
|
||||
import { useChartDataSelection } from './hooks/useChartDataSelection';
|
||||
import { useChartDataSelection } from './hooks/useChartDataSelection.ts';
|
||||
import HelpOutline from '@mui/icons-material/HelpOutline';
|
||||
|
||||
const ConnectionExplanationBox = styled(Box)(({ theme }) => ({
|
||||
|
@ -16,11 +16,11 @@ import {
|
||||
import { Bar } from 'react-chartjs-2';
|
||||
import annotationPlugin from 'chartjs-plugin-annotation';
|
||||
import { customHighlightPlugin } from 'component/common/Chart/customHighlightPlugin';
|
||||
import { PeriodSelector } from './PeriodSelector';
|
||||
import { getChartLabel } from './chart-functions';
|
||||
import { useRequestsStats } from './hooks/useStats';
|
||||
import { StyledBox, TopRow } from './SharedComponents';
|
||||
import { useChartDataSelection } from './hooks/useChartDataSelection';
|
||||
import { PeriodSelector } from './PeriodSelector.tsx';
|
||||
import { getChartLabel } from './chart-functions.ts';
|
||||
import { useRequestsStats } from './hooks/useStats.ts';
|
||||
import { StyledBox, TopRow } from './SharedComponents.tsx';
|
||||
import { useChartDataSelection } from './hooks/useChartDataSelection.ts';
|
||||
|
||||
const FrontendNetworkTrafficUsage: FC = () => {
|
||||
usePageTitle('Network - Frontend Traffic Usage');
|
||||
|
@ -18,15 +18,15 @@ import {
|
||||
import { Bar } from 'react-chartjs-2';
|
||||
import annotationPlugin from 'chartjs-plugin-annotation';
|
||||
import { customHighlightPlugin } from 'component/common/Chart/customHighlightPlugin';
|
||||
import { PeriodSelector } from './PeriodSelector';
|
||||
import { PeriodSelector } from './PeriodSelector.tsx';
|
||||
import { useUiFlag } from 'hooks/useUiFlag';
|
||||
import { OverageInfo, RequestSummary } from './RequestSummary';
|
||||
import { currentMonth } from './dates';
|
||||
import { getChartLabel } from './chart-functions';
|
||||
import { useTrafficStats } from './hooks/useStats';
|
||||
import { BoldText, StyledBox, TopRow } from './SharedComponents';
|
||||
import { useChartDataSelection } from './hooks/useChartDataSelection';
|
||||
import { useTrafficBundles } from '../../../../hooks/api/getters/useTrafficBundles/useTrafficBundles';
|
||||
import { OverageInfo, RequestSummary } from './RequestSummary.tsx';
|
||||
import { currentMonth } from './dates.ts';
|
||||
import { getChartLabel } from './chart-functions.ts';
|
||||
import { useTrafficStats } from './hooks/useStats.ts';
|
||||
import { BoldText, StyledBox, TopRow } from './SharedComponents.tsx';
|
||||
import { useChartDataSelection } from './hooks/useChartDataSelection.ts';
|
||||
import { useTrafficBundles } from '../../../../hooks/api/getters/useTrafficBundles/useTrafficBundles.ts';
|
||||
|
||||
const TrafficInfoBoxes = styled('div')(({ theme }) => ({
|
||||
display: 'grid',
|
||||
|
@ -3,9 +3,9 @@ import ArrowDropDownIcon from '@mui/icons-material/ArrowDropDown';
|
||||
import ArrowDropUpIcon from '@mui/icons-material/ArrowDropUp';
|
||||
import { useRef, useState, type FC } from 'react';
|
||||
import { format } from 'date-fns';
|
||||
import type { ChartDataSelection } from './chart-data-selection';
|
||||
import { selectablePeriods } from './selectable-periods';
|
||||
import { parseMonthString } from './dates';
|
||||
import type { ChartDataSelection } from './chart-data-selection.ts';
|
||||
import { selectablePeriods } from './selectable-periods.ts';
|
||||
import { parseMonthString } from './dates.ts';
|
||||
|
||||
const dropdownWidth = '15rem';
|
||||
const dropdownInlinePadding = (theme: Theme) => theme.spacing(3);
|
||||
|
@ -3,8 +3,8 @@ import { Badge } from 'component/common/Badge/Badge';
|
||||
import { subMonths } from 'date-fns';
|
||||
import { useLocationSettings } from 'hooks/useLocationSettings';
|
||||
import type { FC } from 'react';
|
||||
import type { ChartDataSelection } from './chart-data-selection';
|
||||
import { parseMonthString } from './dates';
|
||||
import type { ChartDataSelection } from './chart-data-selection.ts';
|
||||
import { parseMonthString } from './dates.ts';
|
||||
|
||||
type Props = {
|
||||
period: ChartDataSelection;
|
||||
|
@ -1,6 +1,6 @@
|
||||
import { differenceInCalendarMonths } from 'date-fns';
|
||||
import type { TrafficUsageDataSegmentedCombinedSchema } from 'openapi';
|
||||
import { currentMonth } from './dates';
|
||||
import { currentMonth } from './dates.js';
|
||||
|
||||
export const averageTrafficPreviousMonths = (
|
||||
traffic: TrafficUsageDataSegmentedCombinedSchema,
|
||||
|
@ -1,4 +1,7 @@
|
||||
import { type ChartDataSelection, toDateRange } from './chart-data-selection';
|
||||
import {
|
||||
type ChartDataSelection,
|
||||
toDateRange,
|
||||
} from './chart-data-selection.js';
|
||||
|
||||
test('daily conversion', () => {
|
||||
const input: ChartDataSelection = {
|
||||
|
@ -1,5 +1,5 @@
|
||||
import { endOfMonth, format, startOfMonth, subMonths } from 'date-fns';
|
||||
import { parseMonthString } from './dates';
|
||||
import { parseMonthString } from './dates.js';
|
||||
|
||||
export type ChartDataSelection =
|
||||
| {
|
||||
|
@ -7,8 +7,8 @@ import {
|
||||
toConnectionChartData,
|
||||
toRequestChartData,
|
||||
toTrafficUsageChartData,
|
||||
} from './chart-functions';
|
||||
import { endpointsInfo } from './endpoint-info';
|
||||
} from './chart-functions.js';
|
||||
import { endpointsInfo } from './endpoint-info.js';
|
||||
|
||||
describe('toTrafficUsageChartData', () => {
|
||||
const dataPoint = (period: string, count: number) => ({
|
||||
|
@ -4,15 +4,15 @@ import type {
|
||||
MeteredRequestsSchema,
|
||||
TrafficUsageDataSegmentedCombinedSchema,
|
||||
} from 'openapi';
|
||||
import { endpointsInfo } from './endpoint-info';
|
||||
import { endpointsInfo } from './endpoint-info.js';
|
||||
import {
|
||||
addDays,
|
||||
addMonths,
|
||||
differenceInCalendarDays,
|
||||
differenceInCalendarMonths,
|
||||
} from 'date-fns';
|
||||
import { formatDay, formatMonth, parseDateString } from './dates';
|
||||
import type { ChartDataSelection } from './chart-data-selection';
|
||||
import { formatDay, formatMonth, parseDateString } from './dates.js';
|
||||
import type { ChartDataSelection } from './chart-data-selection.js';
|
||||
export type ChartDatasetType = ChartDataset<'bar'>;
|
||||
|
||||
export const toTrafficUsageChartData = (
|
||||
|
@ -1,10 +1,10 @@
|
||||
import { useMemo, useState } from 'react';
|
||||
import type { ChartDataSelection } from '../chart-data-selection';
|
||||
import { periodsRecord, selectablePeriods } from '../selectable-periods';
|
||||
import { createBarChartOptions } from '../bar-chart-options';
|
||||
import type { ChartDataSelection } from '../chart-data-selection.js';
|
||||
import { periodsRecord, selectablePeriods } from '../selectable-periods.js';
|
||||
import { createBarChartOptions } from '../bar-chart-options.js';
|
||||
import useTheme from '@mui/material/styles/useTheme';
|
||||
import { useLocationSettings } from 'hooks/useLocationSettings';
|
||||
import { parseMonthString } from '../dates';
|
||||
import { parseMonthString } from '../dates.js';
|
||||
|
||||
export const useChartDataSelection = (includedTraffic?: number) => {
|
||||
const theme = useTheme();
|
||||
|
@ -1,19 +1,22 @@
|
||||
import { type ChartDataSelection, toDateRange } from '../chart-data-selection';
|
||||
import {
|
||||
type ChartDataSelection,
|
||||
toDateRange,
|
||||
} from '../chart-data-selection.js';
|
||||
import { useTrafficSearch } from 'hooks/api/getters/useInstanceTrafficMetrics/useInstanceTrafficMetrics';
|
||||
import { currentDate } from '../dates';
|
||||
import { currentDate } from '../dates.js';
|
||||
import { useMemo } from 'react';
|
||||
import {
|
||||
toConnectionChartData,
|
||||
toRequestChartData,
|
||||
toTrafficUsageChartData,
|
||||
} from '../chart-functions';
|
||||
} from '../chart-functions.js';
|
||||
import {
|
||||
calculateEstimatedMonthlyCost,
|
||||
calculateOverageCost,
|
||||
calculateTotalUsage,
|
||||
} from 'utils/traffic-calculations';
|
||||
import { BILLING_TRAFFIC_PRICE } from '../../../billing/BillingDashboard/BillingPlan/BillingPlan';
|
||||
import { averageTrafficPreviousMonths } from '../average-traffic-previous-months';
|
||||
import { BILLING_TRAFFIC_PRICE } from '../../../billing/BillingDashboard/BillingPlan/BillingPlan.jsx';
|
||||
import { averageTrafficPreviousMonths } from '../average-traffic-previous-months.js';
|
||||
import { useConnectionsConsumption } from 'hooks/api/getters/useConnectionsConsumption/useConnectionsConsumption';
|
||||
import { useRequestsConsumption } from 'hooks/api/getters/useRequestsConsumption/useRequestsConsumption';
|
||||
import { useInstanceStatus } from 'hooks/api/getters/useInstanceStatus/useInstanceStatus';
|
||||
|
@ -1,4 +1,4 @@
|
||||
import { generateSelectablePeriodsFromDate } from './selectable-periods';
|
||||
import { generateSelectablePeriodsFromDate } from './selectable-periods.js';
|
||||
|
||||
test('marks months before May 2024 as unselectable', () => {
|
||||
const now = new Date('2025-01-01');
|
||||
|
@ -1,5 +1,5 @@
|
||||
import { getDaysInMonth, startOfMonth, subMonths } from 'date-fns';
|
||||
import { currentDate, formatMonth } from './dates';
|
||||
import { currentDate, formatMonth } from './dates.js';
|
||||
import { TRAFFIC_MEASUREMENT_START_DATE } from 'utils/traffic-calculations';
|
||||
|
||||
export type Period = {
|
||||
|
@ -1,11 +1,11 @@
|
||||
import { Alert, styled } from '@mui/material';
|
||||
import Input from 'component/common/Input/Input';
|
||||
import type { ICheckedPermissions } from 'interfaces/permissions';
|
||||
import type { IRoleFormErrors } from './useRoleForm';
|
||||
import type { IRoleFormErrors } from './useRoleForm.ts';
|
||||
import type { PredefinedRoleType } from 'interfaces/role';
|
||||
import { ROOT_ROLE_TYPE } from '@server/util/constants';
|
||||
import { ConditionallyRender } from 'component/common/ConditionallyRender/ConditionallyRender';
|
||||
import { RolePermissionCategories } from './RolePermissionCategories/RolePermissionCategories';
|
||||
import { RolePermissionCategories } from './RolePermissionCategories/RolePermissionCategories.tsx';
|
||||
|
||||
const StyledInputDescription = styled('p')(({ theme }) => ({
|
||||
display: 'flex',
|
||||
|
@ -16,11 +16,11 @@ import {
|
||||
toggleAllPermissions,
|
||||
togglePermission,
|
||||
} from 'utils/permissions';
|
||||
import { RolePermissionEnvironment } from './RolePermissionEnvironment';
|
||||
import { RolePermissionEnvironment } from './RolePermissionEnvironment.tsx';
|
||||
import { useMemo } from 'react';
|
||||
import { useUiFlag } from 'hooks/useUiFlag';
|
||||
import { RolePermissionProject } from './RolePermissionProject';
|
||||
import { RolePermissionCategoryAccordion } from './RolePermissionCategoryAccordion';
|
||||
import { RolePermissionProject } from './RolePermissionProject.tsx';
|
||||
import { RolePermissionCategoryAccordion } from './RolePermissionCategoryAccordion.tsx';
|
||||
|
||||
interface IPermissionCategoriesProps {
|
||||
type: PredefinedRoleType;
|
||||
|
@ -1,8 +1,8 @@
|
||||
import { useMemo } from 'react';
|
||||
import { styled, Typography } from '@mui/material';
|
||||
import type { ICheckedPermissions, IPermission } from 'interfaces/permissions';
|
||||
import { createProjectPermissionsStructure } from './createProjectPermissionsStructure';
|
||||
import { RolePermissionProjectItem } from './RolePermissionProjectItem';
|
||||
import { createProjectPermissionsStructure } from './createProjectPermissionsStructure.ts';
|
||||
import { RolePermissionProjectItem } from './RolePermissionProjectItem.tsx';
|
||||
|
||||
interface IEnvironmentPermissionAccordionProps {
|
||||
permissions: IPermission[];
|
||||
|
@ -1,5 +1,5 @@
|
||||
import { describe, it, expect } from 'vitest';
|
||||
import { createProjectPermissionsStructure } from './createProjectPermissionsStructure';
|
||||
import { createProjectPermissionsStructure } from './createProjectPermissionsStructure.js';
|
||||
|
||||
describe('createProjectPermissionsStructure', () => {
|
||||
it('returns an empty array when no permissions are given', () => {
|
||||
|
@ -1,5 +1,5 @@
|
||||
import { renderHook } from '@testing-library/react';
|
||||
import { useRoleForm } from './useRoleForm';
|
||||
import { useRoleForm } from './useRoleForm.js';
|
||||
import { test } from 'vitest';
|
||||
import { act } from 'react';
|
||||
|
||||
|
@ -1,9 +1,9 @@
|
||||
import { Button, styled } from '@mui/material';
|
||||
import { SidebarModal } from 'component/common/SidebarModal/SidebarModal';
|
||||
import { useRoleForm } from '../RoleForm/useRoleForm';
|
||||
import { useRoleForm } from '../RoleForm/useRoleForm.ts';
|
||||
import useUiConfig from 'hooks/api/getters/useUiConfig/useUiConfig';
|
||||
import FormTemplate from 'component/common/FormTemplate/FormTemplate';
|
||||
import { RoleForm } from '../RoleForm/RoleForm';
|
||||
import { RoleForm } from '../RoleForm/RoleForm.tsx';
|
||||
import { useRoles } from 'hooks/api/getters/useRoles/useRoles';
|
||||
import useToast from 'hooks/useToast';
|
||||
import { formatUnknownError } from 'utils/formatUnknownError';
|
||||
|
@ -3,7 +3,7 @@ import { PermissionGuard } from 'component/common/PermissionGuard/PermissionGuar
|
||||
import useUiConfig from 'hooks/api/getters/useUiConfig/useUiConfig';
|
||||
import { PremiumFeature } from 'component/common/PremiumFeature/PremiumFeature';
|
||||
import { READ_ROLE } from '@server/types/permissions';
|
||||
import { RolesPage } from './RolesPage';
|
||||
import { RolesPage } from './RolesPage.tsx';
|
||||
|
||||
export const Roles = () => {
|
||||
const { isEnterprise } = useUiConfig();
|
||||
|
@ -1,7 +1,7 @@
|
||||
import { useState } from 'react';
|
||||
import { ConditionallyRender } from 'component/common/ConditionallyRender/ConditionallyRender';
|
||||
import { ADMIN } from 'component/providers/AccessProvider/permissions';
|
||||
import { RolesTable } from './RolesTable/RolesTable';
|
||||
import { RolesTable } from './RolesTable/RolesTable.tsx';
|
||||
import { PageContent } from 'component/common/PageContent/PageContent';
|
||||
import { Tab, Tabs, styled, useMediaQuery } from '@mui/material';
|
||||
import { Route, Routes, useLocation } from 'react-router-dom';
|
||||
|
@ -1,6 +1,6 @@
|
||||
import type { IRole } from 'interfaces/role';
|
||||
import { RoleDeleteDialogRootRole } from './RoleDeleteDialogRootRole/RoleDeleteDialogRootRole';
|
||||
import { RoleDeleteDialogProjectRole } from './RoleDeleteDialogProjectRole/RoleDeleteDialogProjectRole';
|
||||
import { RoleDeleteDialogRootRole } from './RoleDeleteDialogRootRole/RoleDeleteDialogRootRole.tsx';
|
||||
import { RoleDeleteDialogProjectRole } from './RoleDeleteDialogProjectRole/RoleDeleteDialogProjectRole.tsx';
|
||||
import { CUSTOM_PROJECT_ROLE_TYPE } from 'constants/roles';
|
||||
|
||||
interface IRoleDeleteDialogProps {
|
||||
|
@ -3,7 +3,7 @@ import { ConditionallyRender } from 'component/common/ConditionallyRender/Condit
|
||||
import { Dialogue } from 'component/common/Dialogue/Dialogue';
|
||||
import type { IRole } from 'interfaces/role';
|
||||
import { useProjectRoleAccessUsage } from 'hooks/api/getters/useProjectRoleAccessUsage/useProjectRoleAccessUsage';
|
||||
import { RoleDeleteDialogProjectRoleTable } from './RoleDeleteDialogProjectRoleTable';
|
||||
import { RoleDeleteDialogProjectRoleTable } from './RoleDeleteDialogProjectRoleTable.tsx';
|
||||
|
||||
const StyledTableContainer = styled('div')(({ theme }) => ({
|
||||
marginTop: theme.spacing(1.5),
|
||||
|
@ -4,10 +4,10 @@ import { Dialogue } from 'component/common/Dialogue/Dialogue';
|
||||
import { useServiceAccounts } from 'hooks/api/getters/useServiceAccounts/useServiceAccounts';
|
||||
import { useUsers } from 'hooks/api/getters/useUsers/useUsers';
|
||||
import type { IRole } from 'interfaces/role';
|
||||
import { RoleDeleteDialogUsers } from './RoleDeleteDialogUsers';
|
||||
import { RoleDeleteDialogServiceAccounts } from './RoleDeleteDialogServiceAccounts';
|
||||
import { RoleDeleteDialogUsers } from './RoleDeleteDialogUsers.tsx';
|
||||
import { RoleDeleteDialogServiceAccounts } from './RoleDeleteDialogServiceAccounts.tsx';
|
||||
import { useGroups } from 'hooks/api/getters/useGroups/useGroups';
|
||||
import { RoleDeleteDialogGroups } from './RoleDeleteDialogGroups';
|
||||
import { RoleDeleteDialogGroups } from './RoleDeleteDialogGroups.tsx';
|
||||
|
||||
const StyledTableContainer = styled('div')(({ theme }) => ({
|
||||
marginTop: theme.spacing(1.5),
|
||||
|
@ -14,13 +14,13 @@ import { useConditionallyHiddenColumns } from 'hooks/useConditionallyHiddenColum
|
||||
import { useSearch } from 'hooks/useSearch';
|
||||
import { IconCell } from 'component/common/Table/cells/IconCell/IconCell';
|
||||
import SupervisedUserCircle from '@mui/icons-material/SupervisedUserCircle';
|
||||
import { RolesActionsCell } from './RolesActionsCell/RolesActionsCell';
|
||||
import { RolesCell } from './RolesCell/RolesCell';
|
||||
import { RoleDeleteDialog } from './RoleDeleteDialog/RoleDeleteDialog';
|
||||
import { RolesActionsCell } from './RolesActionsCell/RolesActionsCell.tsx';
|
||||
import { RolesCell } from './RolesCell/RolesCell.tsx';
|
||||
import { RoleDeleteDialog } from './RoleDeleteDialog/RoleDeleteDialog.tsx';
|
||||
import { useRolesApi } from 'hooks/api/actions/useRolesApi/useRolesApi';
|
||||
import { useRoles } from 'hooks/api/getters/useRoles/useRoles';
|
||||
import { RoleModal } from '../RoleModal/RoleModal';
|
||||
import { RolePermissionsCell } from './RolePermissionsCell/RolePermissionsCell';
|
||||
import { RoleModal } from '../RoleModal/RoleModal.tsx';
|
||||
import { RolePermissionsCell } from './RolePermissionsCell/RolePermissionsCell.tsx';
|
||||
import { ROOT_ROLE_TYPE } from '@server/util/constants';
|
||||
|
||||
interface IRolesTableProps {
|
||||
|
@ -1,6 +1,6 @@
|
||||
import { ADMIN } from 'component/providers/AccessProvider/permissions';
|
||||
import { PermissionGuard } from 'component/common/PermissionGuard/PermissionGuard';
|
||||
import { ServiceAccountsTable } from './ServiceAccountsTable/ServiceAccountsTable';
|
||||
import { ServiceAccountsTable } from './ServiceAccountsTable/ServiceAccountsTable.tsx';
|
||||
import useUiConfig from 'hooks/api/getters/useUiConfig/useUiConfig';
|
||||
import { PremiumFeature } from 'component/common/PremiumFeature/PremiumFeature';
|
||||
import { ConditionallyRender } from 'component/common/ConditionallyRender/ConditionallyRender';
|
||||
|
@ -2,7 +2,7 @@ import { Alert, styled } from '@mui/material';
|
||||
import { ConditionallyRender } from 'component/common/ConditionallyRender/ConditionallyRender';
|
||||
import { Dialogue } from 'component/common/Dialogue/Dialogue';
|
||||
import type { IServiceAccount } from 'interfaces/service-account';
|
||||
import { ServiceAccountTokens } from '../ServiceAccountModal/ServiceAccountTokens/ServiceAccountTokens';
|
||||
import { ServiceAccountTokens } from '../ServiceAccountModal/ServiceAccountTokens/ServiceAccountTokens.tsx';
|
||||
|
||||
const StyledTableContainer = styled('div')(({ theme }) => ({
|
||||
marginTop: theme.spacing(1.5),
|
||||
|
@ -30,7 +30,7 @@ import {
|
||||
} from 'component/user/Profile/PersonalAPITokensTab/CreatePersonalAPIToken/PersonalAPITokenForm/PersonalAPITokenForm';
|
||||
import { useServiceAccountTokensApi } from 'hooks/api/actions/useServiceAccountTokensApi/useServiceAccountTokensApi';
|
||||
import type { INewPersonalAPIToken } from 'interfaces/personalAPIToken';
|
||||
import { ServiceAccountTokens } from './ServiceAccountTokens/ServiceAccountTokens';
|
||||
import { ServiceAccountTokens } from './ServiceAccountTokens/ServiceAccountTokens.tsx';
|
||||
import type { IServiceAccount } from 'interfaces/service-account';
|
||||
import { RoleSelect } from 'component/common/RoleSelect/RoleSelect';
|
||||
import type { IRole } from 'interfaces/role';
|
||||
|
@ -30,7 +30,7 @@ import {
|
||||
useFlexLayout,
|
||||
} from 'react-table';
|
||||
import { sortTypes } from 'utils/sortTypes';
|
||||
import { ServiceAccountCreateTokenDialog } from './ServiceAccountCreateTokenDialog/ServiceAccountCreateTokenDialog';
|
||||
import { ServiceAccountCreateTokenDialog } from './ServiceAccountCreateTokenDialog/ServiceAccountCreateTokenDialog.tsx';
|
||||
import { ServiceAccountTokenDialog } from 'component/admin/serviceAccounts/ServiceAccountsTable/ServiceAccountTokenDialog/ServiceAccountTokenDialog';
|
||||
import { TimeAgoCell } from 'component/common/Table/cells/TimeAgoCell/TimeAgoCell';
|
||||
import { useConditionallyHiddenColumns } from 'hooks/useConditionallyHiddenColumns';
|
||||
|
@ -20,12 +20,12 @@ import { useConditionallyHiddenColumns } from 'hooks/useConditionallyHiddenColum
|
||||
import { useSearch } from 'hooks/useSearch';
|
||||
import { useServiceAccounts } from 'hooks/api/getters/useServiceAccounts/useServiceAccounts';
|
||||
import { useServiceAccountsApi } from 'hooks/api/actions/useServiceAccountsApi/useServiceAccountsApi';
|
||||
import { ServiceAccountModal } from './ServiceAccountModal/ServiceAccountModal';
|
||||
import { ServiceAccountDeleteDialog } from './ServiceAccountDeleteDialog/ServiceAccountDeleteDialog';
|
||||
import { ServiceAccountsActionsCell } from './ServiceAccountsActionsCell/ServiceAccountsActionsCell';
|
||||
import { ServiceAccountModal } from './ServiceAccountModal/ServiceAccountModal.tsx';
|
||||
import { ServiceAccountDeleteDialog } from './ServiceAccountDeleteDialog/ServiceAccountDeleteDialog.tsx';
|
||||
import { ServiceAccountsActionsCell } from './ServiceAccountsActionsCell/ServiceAccountsActionsCell.tsx';
|
||||
import type { INewPersonalAPIToken } from 'interfaces/personalAPIToken';
|
||||
import { ServiceAccountTokenDialog } from './ServiceAccountTokenDialog/ServiceAccountTokenDialog';
|
||||
import { ServiceAccountTokensCell } from './ServiceAccountTokensCell/ServiceAccountTokensCell';
|
||||
import { ServiceAccountTokenDialog } from './ServiceAccountTokenDialog/ServiceAccountTokenDialog.tsx';
|
||||
import { ServiceAccountTokensCell } from './ServiceAccountTokensCell/ServiceAccountTokensCell.tsx';
|
||||
import { TimeAgoCell } from 'component/common/Table/cells/TimeAgoCell/TimeAgoCell';
|
||||
import type { IServiceAccount } from 'interfaces/service-account';
|
||||
import { RoleCell } from 'component/common/Table/cells/RoleCell/RoleCell';
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user