1518 extensibility front add an application section in settings (#15056)
Protected by IS_APPLICATION_ENABLED featureFlag Add `Application` section in settings <img width="301" height="137" alt="image" src="https://github.com/user-attachments/assets/ee53bdd2-36f6-45c6-8646-17b1e08abf00" /> A `settings/applications` route listing all installed applications <img width="661" height="428" alt="image" src="https://github.com/user-attachments/assets/69d534c4-4e9e-452a-a3d9-ded0223bb457" /> Introduce a new Tag for application managed items <img width="885" height="759" alt="image" src="https://github.com/user-attachments/assets/19767be5-61e5-4bd2-a51d-54ed9bfb1923" /> A `settings/applications/<application_id>` details setting page listing all objects, serverlessFunctions and agents created by the application: <img width="917" height="778" alt="image" src="https://github.com/user-attachments/assets/7fc056a6-1d73-4242-b2eb-6f8955d8597d" /> A `settings/applications/<application_id>/<serverless_function_id>` <img width="905" height="652" alt="image" src="https://github.com/user-attachments/assets/56ca0021-26bf-42cb-9abf-34879f16050a" /> Add trigger tab in serverless function details (readonly for now) <img width="899" height="724" alt="image" src="https://github.com/user-attachments/assets/5eeefa35-f2a4-4fd8-a640-7b5c5891f226" /> Set object, serverless and agent setting detail pages readonly for managed items <img width="1075" height="859" alt="image" src="https://github.com/user-attachments/assets/57c73d69-4980-47a2-b752-8dc5ab494530" /> <img width="648" height="582" alt="image" src="https://github.com/user-attachments/assets/5ad5f3f7-3bc3-4e40-870a-4981c6492524" /> <img width="982" height="692" alt="image" src="https://github.com/user-attachments/assets/7ad756c4-5d33-4a0a-9eb8-416c040362b9" /> <img width="1077" height="647" alt="image" src="https://github.com/user-attachments/assets/e086b9f5-4062-4d10-82a9-4023de3cad3f" />
This commit is contained in:
@@ -5,7 +5,7 @@ import { SettingsProtectedRouteWrapper } from '@/settings/components/SettingsPro
|
||||
import { SettingsSkeletonLoader } from '@/settings/components/SettingsSkeletonLoader';
|
||||
import { SettingPublicDomain } from '@/settings/domains/components/SettingPublicDomain';
|
||||
import { SettingsPath } from 'twenty-shared/types';
|
||||
import { PermissionFlagType } from '~/generated/graphql';
|
||||
import { FeatureFlagKey, PermissionFlagType } from '~/generated/graphql';
|
||||
|
||||
const SettingsGraphQLPlayground = lazy(() =>
|
||||
import(
|
||||
@@ -105,12 +105,6 @@ const SettingsDevelopersApiKeysNew = lazy(() =>
|
||||
})),
|
||||
);
|
||||
|
||||
const SettingsServerlessFunctions = lazy(() =>
|
||||
import(
|
||||
'~/pages/settings/serverless-functions/SettingsServerlessFunctions'
|
||||
).then((module) => ({ default: module.SettingsServerlessFunctions })),
|
||||
);
|
||||
|
||||
const SettingsServerlessFunctionDetail = lazy(() =>
|
||||
import(
|
||||
'~/pages/settings/serverless-functions/SettingsServerlessFunctionDetail'
|
||||
@@ -119,14 +113,6 @@ const SettingsServerlessFunctionDetail = lazy(() =>
|
||||
})),
|
||||
);
|
||||
|
||||
const SettingsServerlessFunctionsNew = lazy(() =>
|
||||
import(
|
||||
'~/pages/settings/serverless-functions/SettingsServerlessFunctionsNew'
|
||||
).then((module) => ({
|
||||
default: module.SettingsServerlessFunctionsNew,
|
||||
})),
|
||||
);
|
||||
|
||||
const SettingsWorkspace = lazy(() =>
|
||||
import('~/pages/settings/SettingsWorkspace').then((module) => ({
|
||||
default: module.SettingsWorkspace,
|
||||
@@ -157,6 +143,22 @@ const SettingsAI = lazy(() =>
|
||||
})),
|
||||
);
|
||||
|
||||
const SettingsApplications = lazy(() =>
|
||||
import('~/pages/settings/applications/SettingsApplications').then(
|
||||
(module) => ({
|
||||
default: module.SettingsApplications,
|
||||
}),
|
||||
),
|
||||
);
|
||||
|
||||
const SettingsApplicationDetails = lazy(() =>
|
||||
import('~/pages/settings/applications/SettingsApplicationDetails').then(
|
||||
(module) => ({
|
||||
default: module.SettingsApplicationDetails,
|
||||
}),
|
||||
),
|
||||
);
|
||||
|
||||
const SettingsAgentForm = lazy(() =>
|
||||
import('~/pages/settings/ai/SettingsAgentForm').then((module) => ({
|
||||
default: module.SettingsAgentForm,
|
||||
@@ -399,10 +401,7 @@ type SettingsRoutesProps = {
|
||||
isAdminPageEnabled?: boolean;
|
||||
};
|
||||
|
||||
export const SettingsRoutes = ({
|
||||
isFunctionSettingsEnabled,
|
||||
isAdminPageEnabled,
|
||||
}: SettingsRoutesProps) => (
|
||||
export const SettingsRoutes = ({ isAdminPageEnabled }: SettingsRoutesProps) => (
|
||||
<Suspense fallback={<SettingsSkeletonLoader />}>
|
||||
<Routes>
|
||||
<Route path={SettingsPath.ProfilePage} element={<SettingsProfile />} />
|
||||
@@ -590,22 +589,27 @@ export const SettingsRoutes = ({
|
||||
element={<SettingsIntegrationMCP />}
|
||||
/>
|
||||
</Route>
|
||||
{isFunctionSettingsEnabled && (
|
||||
<>
|
||||
<Route
|
||||
path={SettingsPath.ServerlessFunctions}
|
||||
element={<SettingsServerlessFunctions />}
|
||||
|
||||
<Route
|
||||
element={
|
||||
<SettingsProtectedRouteWrapper
|
||||
requiredFeatureFlag={FeatureFlagKey.IS_APPLICATION_ENABLED}
|
||||
/>
|
||||
<Route
|
||||
path={SettingsPath.NewServerlessFunction}
|
||||
element={<SettingsServerlessFunctionsNew />}
|
||||
/>
|
||||
<Route
|
||||
path={SettingsPath.ServerlessFunctionDetail}
|
||||
element={<SettingsServerlessFunctionDetail />}
|
||||
/>
|
||||
</>
|
||||
)}
|
||||
}
|
||||
>
|
||||
<Route
|
||||
path={SettingsPath.Applications}
|
||||
element={<SettingsApplications />}
|
||||
/>
|
||||
<Route
|
||||
path={SettingsPath.ApplicationDetail}
|
||||
element={<SettingsApplicationDetails />}
|
||||
/>
|
||||
<Route
|
||||
path={SettingsPath.ApplicationServerlessFunctionDetail}
|
||||
element={<SettingsServerlessFunctionDetail />}
|
||||
/>
|
||||
</Route>
|
||||
|
||||
<Route
|
||||
element={
|
||||
|
||||
Reference in New Issue
Block a user