From 381f3ba7d943d617d16a879af108b518d9d8b481 Mon Sep 17 00:00:00 2001 From: martmull Date: Thu, 16 Apr 2026 11:47:44 +0200 Subject: [PATCH] Fix app design 1/2 (#19735) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit comply with https://www.figma.com/design/xt8O9mFeLl46C5InWwoMrN/Twenty?node-id=96977-349627&m=dev ## After Capture d’écran 2026-04-16 à 09 40
37 Capture d’écran 2026-04-16 à 09 40
22 Capture d’écran 2026-04-16 à 09 39
11 Capture d’écran 2026-04-16 à 09 39
05 Capture d’écran 2026-04-16 à 09 39
02 Capture d’écran 2026-04-16 à 09 38
58 Capture d’écran 2026-04-16 à 09 38
55 Capture d’écran 2026-04-16 à 09 38
48 Capture d’écran 2026-04-16 à 09 37
40 Capture d’écran 2026-04-16 à 09 37
34 ## before Capture d’écran 2026-04-16 à 09 42
18 Capture d’écran 2026-04-16 à 09 42
16 Capture d’écran 2026-04-16 à 09 42
13 Capture d’écran 2026-04-16 à 09 42
07 Capture d’écran 2026-04-16 à 09 42
01 Capture d’écran 2026-04-16 à 09 41
56 Capture d’écran 2026-04-16 à 09 41
53 Capture d’écran 2026-04-16 à 09 41
43 Capture d’écran 2026-04-16 à 09 41
37 --- .../src/metadata/generated/schema.graphql | 8 + .../src/metadata/generated/schema.ts | 27 +- .../src/metadata/generated/types.ts | 992 +++++++++--------- .../src/generated-metadata/graphql.ts | 30 + .../modules/app/components/SettingsRoutes.tsx | 12 + .../queries/findOneApplicationSummary.ts | 9 + .../useIdentifyActiveNavigationMenuItems.ts | 5 +- .../components/EmailThreadComposer.tsx | 9 +- .../hooks/useFieldsWidgetEditorGroupsData.ts | 8 +- .../fields/hooks/useFieldsWidgetGroups.ts | 9 +- .../utils/buildDefaultFieldsWidgetGroups.ts | 2 - .../ai/components/SettingsAdminAI.tsx | 2 + .../apps/components/SettingsAdminApps.tsx | 110 +- .../SettingsEnterpriseFeatureGateCard.tsx | 9 +- .../settings/components/SettingsTableCard.tsx | 58 +- ...rmissionsObjectLevelRecordLevelSection.tsx | 20 +- .../components/SidePanelComposeEmailPage.tsx | 2 +- .../components/SubMenuTopBarContainer.tsx | 7 +- .../queries/getPublicWorkspaceDataById.ts | 11 + .../SettingsAccountsConfiguration.tsx | 5 - .../SettingsAdminAiProviderDetail.tsx | 6 +- ...ingsAdminApplicationRegistrationDetail.tsx | 73 +- ...inApplicationRegistrationDetailContent.tsx | 274 +++++ .../SettingsAdminConfigVariableDetails.tsx | 6 +- .../SettingsAdminIndicatorHealthStatus.tsx | 6 +- .../admin-panel/SettingsAdminQueueDetail.tsx | 4 +- .../SettingsAdminWorkspaceChatThread.tsx | 6 +- .../SettingsAdminWorkspaceDetail.tsx | 6 +- .../ai/components/SettingsAIUsageTab.tsx | 2 + ...SettingsApplicationRegistrationDetails.tsx | 38 +- .../applications/SettingsApplications.tsx | 3 - .../SettingsAvailableApplicationDetails.tsx | 1 - .../SettingsApplicationDetailTitle.tsx | 8 +- ...cationRegistrationConfigVariableDetail.tsx | 236 +++++ ...cationRegistrationConfigVariableStatus.tsx | 19 + ...SettingsApplicationRegistrationContent.tsx | 22 +- ...plicationRegistrationRedirectURIsInput.tsx | 95 ++ ...plicationRegistrationRedirectURIsTable.tsx | 74 ++ ...pplicationRegistrationShareLinkButtons.tsx | 86 ++ .../SettingsApplicationTableRow.tsx | 2 +- .../components/SettingsApplicationsTable.tsx | 86 +- .../SettingsApplicationDetailContentTab.tsx | 2 +- ...ttingsApplicationRegistrationConfigTab.tsx | 126 +++ ...ApplicationRegistrationDistributionTab.tsx | 171 +-- ...tingsApplicationRegistrationGeneralTab.tsx | 423 +------- ...ettingsApplicationRegistrationOAuthTab.tsx | 147 +-- .../tabs/SettingsApplicationsDeveloperTab.tsx | 145 ++- ...gsAvailableApplicationDetailContentTab.tsx | 4 +- .../__stories__/SettingsNewObject.stories.tsx | 6 +- .../components/OrganizationAdornment.tsx | 23 + .../settings/security/SettingsSecurity.tsx | 2 + ...plication-registration-variable.service.ts | 4 + ...application-registration-variable.input.ts | 4 + .../application-registration.resolver.ts | 1 - .../application-registration.service.ts | 52 +- .../application-tarball.service.ts | 15 +- .../drivers/local.driver.ts | 17 - .../dtos/public-workspace-data.dto.ts | 12 + .../workspace/services/workspace.service.ts | 6 + .../workspace/workspace.resolver.ts | 35 + .../twenty-shared/src/types/SettingsPath.ts | 1 + packages/twenty-ui/src/components/tag/Tag.tsx | 2 +- .../tag/__stories__/Tag.stories.tsx | 2 +- .../command-block/components/CommandBlock.tsx | 1 + .../display/icon/components/TablerIcons.ts | 3 + packages/twenty-ui/src/display/index.ts | 3 + 66 files changed, 2058 insertions(+), 1537 deletions(-) create mode 100644 packages/twenty-front/src/modules/applications/graphql/queries/findOneApplicationSummary.ts create mode 100644 packages/twenty-front/src/modules/workspace/graphql/queries/getPublicWorkspaceDataById.ts create mode 100644 packages/twenty-front/src/pages/settings/admin-panel/SettingsAdminApplicationRegistrationDetailContent.tsx create mode 100644 packages/twenty-front/src/pages/settings/applications/components/SettingsApplicationRegistrationConfigVariableDetail.tsx create mode 100644 packages/twenty-front/src/pages/settings/applications/components/SettingsApplicationRegistrationConfigVariableStatus.tsx create mode 100644 packages/twenty-front/src/pages/settings/applications/components/SettingsApplicationRegistrationRedirectURIsInput.tsx create mode 100644 packages/twenty-front/src/pages/settings/applications/components/SettingsApplicationRegistrationRedirectURIsTable.tsx create mode 100644 packages/twenty-front/src/pages/settings/applications/components/SettingsApplicationRegistrationShareLinkButtons.tsx create mode 100644 packages/twenty-front/src/pages/settings/applications/tabs/SettingsApplicationRegistrationConfigTab.tsx create mode 100644 packages/twenty-front/src/pages/settings/enterprise/components/OrganizationAdornment.tsx diff --git a/packages/twenty-client-sdk/src/metadata/generated/schema.graphql b/packages/twenty-client-sdk/src/metadata/generated/schema.graphql index 3f4564e3f4..cbe8f626a5 100644 --- a/packages/twenty-client-sdk/src/metadata/generated/schema.graphql +++ b/packages/twenty-client-sdk/src/metadata/generated/schema.graphql @@ -1732,6 +1732,12 @@ type PublicWorkspaceData { workspaceUrls: WorkspaceUrls! } +type PublicWorkspaceDataSummary { + id: UUID! + logo: String + displayName: String +} + type NativeModelCapabilities { webSearch: Boolean twitterSearch: Boolean @@ -3344,6 +3350,7 @@ type Query { currentUser: User! currentWorkspace: Workspace! getPublicWorkspaceDataByDomain(origin: String): PublicWorkspaceData! + getPublicWorkspaceDataById(id: UUID!): PublicWorkspaceDataSummary! getSSOIdentityProviders: [FindAvailableSSOIDP!]! getConnectedImapSmtpCaldavAccount(id: UUID!): ConnectedImapSmtpCaldavAccount! getAutoCompleteAddress(address: String!, token: String!, country: String, isFieldCity: Boolean): [AutocompleteResult!]! @@ -4599,6 +4606,7 @@ input UpdateApplicationRegistrationVariableInput { input UpdateApplicationRegistrationVariablePayload { value: String + resetValue: Boolean description: String } diff --git a/packages/twenty-client-sdk/src/metadata/generated/schema.ts b/packages/twenty-client-sdk/src/metadata/generated/schema.ts index 7592df05a8..cdffe51b9f 100644 --- a/packages/twenty-client-sdk/src/metadata/generated/schema.ts +++ b/packages/twenty-client-sdk/src/metadata/generated/schema.ts @@ -1430,6 +1430,13 @@ export interface PublicWorkspaceData { __typename: 'PublicWorkspaceData' } +export interface PublicWorkspaceDataSummary { + id: Scalars['UUID'] + logo?: Scalars['String'] + displayName?: Scalars['String'] + __typename: 'PublicWorkspaceDataSummary' +} + export interface NativeModelCapabilities { webSearch?: Scalars['Boolean'] twitterSearch?: Scalars['Boolean'] @@ -2905,6 +2912,7 @@ export interface Query { currentUser: User currentWorkspace: Workspace getPublicWorkspaceDataByDomain: PublicWorkspaceData + getPublicWorkspaceDataById: PublicWorkspaceDataSummary getSSOIdentityProviders: FindAvailableSSOIDP[] getConnectedImapSmtpCaldavAccount: ConnectedImapSmtpCaldavAccount getAutoCompleteAddress: AutocompleteResult[] @@ -4680,6 +4688,14 @@ export interface PublicWorkspaceDataGenqlSelection{ __scalar?: boolean | number } +export interface PublicWorkspaceDataSummaryGenqlSelection{ + id?: boolean | number + logo?: boolean | number + displayName?: boolean | number + __typename?: boolean | number + __scalar?: boolean | number +} + export interface NativeModelCapabilitiesGenqlSelection{ webSearch?: boolean | number twitterSearch?: boolean | number @@ -6274,6 +6290,7 @@ export interface QueryGenqlSelection{ currentUser?: UserGenqlSelection currentWorkspace?: WorkspaceGenqlSelection getPublicWorkspaceDataByDomain?: (PublicWorkspaceDataGenqlSelection & { __args?: {origin?: (Scalars['String'] | null)} }) + getPublicWorkspaceDataById?: (PublicWorkspaceDataSummaryGenqlSelection & { __args: {id: Scalars['UUID']} }) getSSOIdentityProviders?: FindAvailableSSOIDPGenqlSelection getConnectedImapSmtpCaldavAccount?: (ConnectedImapSmtpCaldavAccountGenqlSelection & { __args: {id: Scalars['UUID']} }) getAutoCompleteAddress?: (AutocompleteResultGenqlSelection & { __args: {address: Scalars['String'], token: Scalars['String'], country?: (Scalars['String'] | null), isFieldCity?: (Scalars['Boolean'] | null)} }) @@ -6859,7 +6876,7 @@ export interface CreateApplicationRegistrationVariableInput {applicationRegistra export interface UpdateApplicationRegistrationVariableInput {id: Scalars['String'],update: UpdateApplicationRegistrationVariablePayload} -export interface UpdateApplicationRegistrationVariablePayload {value?: (Scalars['String'] | null),description?: (Scalars['String'] | null)} +export interface UpdateApplicationRegistrationVariablePayload {value?: (Scalars['String'] | null),resetValue?: (Scalars['Boolean'] | null),description?: (Scalars['String'] | null)} export interface UpdateWorkspaceMemberSettingsInput {workspaceMemberId: Scalars['UUID'],update: Scalars['JSON']} @@ -7850,6 +7867,14 @@ export interface LogicFunctionLogsInput {applicationId?: (Scalars['UUID'] | null + const PublicWorkspaceDataSummary_possibleTypes: string[] = ['PublicWorkspaceDataSummary'] + export const isPublicWorkspaceDataSummary = (obj?: { __typename?: any } | null): obj is PublicWorkspaceDataSummary => { + if (!obj?.__typename) throw new Error('__typename is missing in "isPublicWorkspaceDataSummary"') + return PublicWorkspaceDataSummary_possibleTypes.includes(obj.__typename) + } + + + const NativeModelCapabilities_possibleTypes: string[] = ['NativeModelCapabilities'] export const isNativeModelCapabilities = (obj?: { __typename?: any } | null): obj is NativeModelCapabilities => { if (!obj?.__typename) throw new Error('__typename is missing in "isNativeModelCapabilities"') diff --git a/packages/twenty-client-sdk/src/metadata/generated/types.ts b/packages/twenty-client-sdk/src/metadata/generated/types.ts index a158ba7586..796b4c5128 100644 --- a/packages/twenty-client-sdk/src/metadata/generated/types.ts +++ b/packages/twenty-client-sdk/src/metadata/generated/types.ts @@ -52,46 +52,46 @@ export default { 168, 172, 173, - 179, - 184, - 187, - 195, + 180, + 185, + 188, 196, - 198, - 203, - 208, + 197, + 199, + 204, 209, - 221, - 238, - 253, - 292, + 210, + 222, + 239, + 254, 293, - 303, + 294, 304, - 340, + 305, 341, 342, 343, - 345, + 344, 346, 347, 348, 349, 350, 351, - 353, - 355, - 363, - 369, + 352, + 354, + 356, + 364, 370, 371, - 373, - 380, - 387, - 418, - 500, - 505, - 506 + 372, + 374, + 381, + 388, + 419, + 501, + 506, + 507 ], "types": { "BillingProductDTO": { @@ -789,10 +789,10 @@ export default { 3 ], "relation": [ - 237 + 238 ], "morphRelations": [ - 237 + 238 ], "object": [ 46 @@ -851,7 +851,7 @@ export default { 36 ], "objectMetadata": [ - 245, + 246, { "paging": [ 39, @@ -864,7 +864,7 @@ export default { } ], "indexFieldMetadatas": [ - 243, + 244, { "paging": [ 39, @@ -1109,7 +1109,7 @@ export default { 37 ], "fields": [ - 250, + 251, { "paging": [ 39, @@ -1122,7 +1122,7 @@ export default { } ], "indexMetadatas": [ - 248, + 249, { "paging": [ 39, @@ -1706,7 +1706,7 @@ export default { 131 ], "billingEntitlements": [ - 252 + 253 ], "hasValidEnterpriseKey": [ 6 @@ -1810,7 +1810,7 @@ export default { 20 ], "deletedWorkspaceMembers": [ - 236 + 237 ], "hasPassword": [ 6 @@ -1822,7 +1822,7 @@ export default { 17 ], "availableWorkspaces": [ - 235 + 236 ], "__typename": [ 1 @@ -3478,6 +3478,20 @@ export default { 1 ] }, + "PublicWorkspaceDataSummary": { + "id": [ + 3 + ], + "logo": [ + 1 + ], + "displayName": [ + 1 + ], + "__typename": [ + 1 + ] + }, "NativeModelCapabilities": { "webSearch": [ 6 @@ -3497,7 +3511,7 @@ export default { 1 ], "modelFamily": [ - 179 + 180 ], "modelFamilyLabel": [ 1 @@ -3512,7 +3526,7 @@ export default { 11 ], "nativeCapabilities": [ - 177 + 178 ], "isDeprecated": [ 6 @@ -3548,7 +3562,7 @@ export default { 1 ], "modelFamily": [ - 179 + 180 ], "modelFamilyLabel": [ 1 @@ -3598,7 +3612,7 @@ export default { }, "AdminAIModels": { "models": [ - 180 + 181 ], "defaultSmartModelId": [ 1 @@ -3626,7 +3640,7 @@ export default { }, "Support": { "supportDriver": [ - 184 + 185 ], "supportFrontChatId": [ 1 @@ -3652,7 +3666,7 @@ export default { }, "Captcha": { "provider": [ - 187 + 188 ], "siteKey": [ 1 @@ -3689,7 +3703,7 @@ export default { 158 ], "metadata": [ - 189 + 190 ], "__typename": [ 1 @@ -3717,10 +3731,10 @@ export default { 174 ], "billing": [ - 182 + 183 ], "aiModels": [ - 178 + 179 ], "signInPrefilled": [ 6 @@ -3741,25 +3755,25 @@ export default { 6 ], "support": [ - 183 + 184 ], "isAttachmentPreviewEnabled": [ 6 ], "sentry": [ - 185 - ], - "captcha": [ 186 ], + "captcha": [ + 187 + ], "api": [ - 188 + 189 ], "canManageFeatureFlags": [ 6 ], "publicFeatureFlags": [ - 190 + 191 ], "isMicrosoftMessagingEnabled": [ 6 @@ -3795,7 +3809,7 @@ export default { 6 ], "maintenance": [ - 191 + 192 ], "__typename": [ 1 @@ -3829,13 +3843,13 @@ export default { 6 ], "source": [ - 195 + 196 ], "isEnvOnly": [ 6 ], "type": [ - 196 + 197 ], "options": [ 15 @@ -3848,10 +3862,10 @@ export default { "ConfigVariableType": {}, "ConfigVariablesGroupData": { "variables": [ - 194 + 195 ], "name": [ - 198 + 199 ], "description": [ 1 @@ -3866,7 +3880,7 @@ export default { "ConfigVariablesGroup": {}, "ConfigVariables": { "groups": [ - 197 + 198 ], "__typename": [ 1 @@ -3891,7 +3905,7 @@ export default { 21 ], "results": [ - 200 + 201 ], "__typename": [ 1 @@ -3908,7 +3922,7 @@ export default { 15 ], "state": [ - 203 + 204 ], "timestamp": [ 11 @@ -3958,7 +3972,7 @@ export default { }, "QueueJobsResponse": { "jobs": [ - 202 + 203 ], "count": [ 11 @@ -3970,7 +3984,7 @@ export default { 6 ], "retentionConfig": [ - 204 + 205 ], "__typename": [ 1 @@ -3981,7 +3995,7 @@ export default { 21 ], "results": [ - 200 + 201 ], "__typename": [ 1 @@ -3989,13 +4003,13 @@ export default { }, "SystemHealthService": { "id": [ - 208 + 209 ], "label": [ 1 ], "status": [ - 209 + 210 ], "__typename": [ 1 @@ -4005,7 +4019,7 @@ export default { "AdminPanelHealthServiceStatus": {}, "SystemHealth": { "services": [ - 207 + 208 ], "__typename": [ 1 @@ -4030,7 +4044,7 @@ export default { 1 ], "status": [ - 209 + 210 ], "__typename": [ 1 @@ -4038,7 +4052,7 @@ export default { }, "AdminPanelHealthServiceData": { "id": [ - 208 + 209 ], "label": [ 1 @@ -4047,7 +4061,7 @@ export default { 1 ], "status": [ - 209 + 210 ], "errorMessage": [ 1 @@ -4056,7 +4070,7 @@ export default { 1 ], "queues": [ - 212 + 213 ], "__typename": [ 1 @@ -4141,7 +4155,7 @@ export default { 1 ], "data": [ - 217 + 218 ], "__typename": [ 1 @@ -4184,13 +4198,13 @@ export default { 11 ], "timeRange": [ - 221 + 222 ], "details": [ - 219 + 220 ], "data": [ - 218 + 219 ], "__typename": [ 1 @@ -4216,7 +4230,7 @@ export default { 1 ], "versionDistribution": [ - 222 + 223 ], "__typename": [ 1 @@ -4325,7 +4339,7 @@ export default { 173 ], "workspace": [ - 230 + 231 ], "__typename": [ 1 @@ -4394,7 +4408,7 @@ export default { 1 ], "sso": [ - 233 + 234 ], "__typename": [ 1 @@ -4402,10 +4416,10 @@ export default { }, "AvailableWorkspaces": { "availableWorkspacesForSignIn": [ - 234 + 235 ], "availableWorkspacesForSignUp": [ - 234 + 235 ], "__typename": [ 1 @@ -4433,7 +4447,7 @@ export default { }, "Relation": { "type": [ - 238 + 239 ], "sourceObjectMetadata": [ 46 @@ -4482,10 +4496,10 @@ export default { }, "IndexConnection": { "pageInfo": [ - 240 + 241 ], "edges": [ - 239 + 240 ], "__typename": [ 1 @@ -4504,10 +4518,10 @@ export default { }, "IndexIndexFieldMetadatasConnection": { "pageInfo": [ - 240 + 241 ], "edges": [ - 242 + 243 ], "__typename": [ 1 @@ -4526,10 +4540,10 @@ export default { }, "IndexObjectMetadataConnection": { "pageInfo": [ - 240 + 241 ], "edges": [ - 244 + 245 ], "__typename": [ 1 @@ -4548,10 +4562,10 @@ export default { }, "ObjectConnection": { "pageInfo": [ - 240 + 241 ], "edges": [ - 244 + 245 ], "__typename": [ 1 @@ -4559,10 +4573,10 @@ export default { }, "ObjectIndexMetadatasConnection": { "pageInfo": [ - 240 + 241 ], "edges": [ - 239 + 240 ], "__typename": [ 1 @@ -4581,10 +4595,10 @@ export default { }, "ObjectFieldsConnection": { "pageInfo": [ - 240 + 241 ], "edges": [ - 249 + 250 ], "__typename": [ 1 @@ -4592,10 +4606,10 @@ export default { }, "FieldConnection": { "pageInfo": [ - 240 + 241 ], "edges": [ - 249 + 250 ], "__typename": [ 1 @@ -4603,7 +4617,7 @@ export default { }, "BillingEntitlement": { "key": [ - 253 + 254 ], "value": [ 6 @@ -4641,7 +4655,7 @@ export default { 1 ], "records": [ - 254 + 255 ], "__typename": [ 1 @@ -4671,10 +4685,10 @@ export default { }, "ApplicationTokenPair": { "applicationAccessToken": [ - 257 + 258 ], "applicationRefreshToken": [ - 257 + 258 ], "__typename": [ 1 @@ -4721,7 +4735,7 @@ export default { 6 ], "applicationTokenPair": [ - 258 + 259 ], "__typename": [ 1 @@ -4769,10 +4783,10 @@ export default { }, "AuthTokenPair": { "accessOrWorkspaceAgnosticToken": [ - 257 + 258 ], "refreshToken": [ - 257 + 258 ], "__typename": [ 1 @@ -4780,10 +4794,10 @@ export default { }, "AvailableWorkspacesAndAccessTokens": { "tokens": [ - 265 + 266 ], "availableWorkspaces": [ - 235 + 236 ], "__typename": [ 1 @@ -4832,10 +4846,10 @@ export default { }, "SignUp": { "loginToken": [ - 257 + 258 ], "workspace": [ - 270 + 271 ], "__typename": [ 1 @@ -4843,7 +4857,7 @@ export default { }, "TransientToken": { "transientToken": [ - 257 + 258 ], "__typename": [ 1 @@ -4865,7 +4879,7 @@ export default { }, "VerifyEmailAndGetLoginToken": { "loginToken": [ - 257 + 258 ], "workspaceUrls": [ 159 @@ -4884,7 +4898,7 @@ export default { }, "AuthTokens": { "tokens": [ - 265 + 266 ], "__typename": [ 1 @@ -4892,7 +4906,7 @@ export default { }, "LoginToken": { "loginToken": [ - 257 + 258 ], "__typename": [ 1 @@ -4922,10 +4936,10 @@ export default { }, "Impersonate": { "loginToken": [ - 257 + 258 ], "workspace": [ - 270 + 271 ], "__typename": [ 1 @@ -4947,7 +4961,7 @@ export default { 1 ], "dailyUsage": [ - 281 + 282 ], "__typename": [ 1 @@ -4955,16 +4969,16 @@ export default { }, "UsageAnalytics": { "usageByUser": [ - 193 + 194 ], "usageByOperationType": [ - 193 + 194 ], "usageByModel": [ - 193 + 194 ], "timeSeries": [ - 281 + 282 ], "periodStart": [ 4 @@ -4973,7 +4987,7 @@ export default { 4 ], "userDailyUsage": [ - 282 + 283 ], "__typename": [ 1 @@ -5130,13 +5144,13 @@ export default { 1 ], "driver": [ - 292 - ], - "status": [ 293 ], + "status": [ + 294 + ], "verificationRecords": [ - 290 + 291 ], "verifiedAt": [ 4 @@ -5186,7 +5200,7 @@ export default { 1 ], "location": [ - 295 + 296 ], "__typename": [ 1 @@ -5214,13 +5228,13 @@ export default { }, "ImapSmtpCaldavConnectionParameters": { "IMAP": [ - 297 + 298 ], "SMTP": [ - 297 + 298 ], "CALDAV": [ - 297 + 298 ], "__typename": [ 1 @@ -5240,7 +5254,7 @@ export default { 3 ], "connectionParameters": [ - 298 + 299 ], "__typename": [ 1 @@ -5285,10 +5299,10 @@ export default { 3 ], "frontComponent": [ - 259 + 260 ], "engineComponentKey": [ - 303 + 304 ], "label": [ 1 @@ -5306,10 +5320,10 @@ export default { 6 ], "availabilityType": [ - 304 + 305 ], "payload": [ - 305 + 306 ], "hotKeys": [ 1 @@ -5337,10 +5351,10 @@ export default { "CommandMenuItemAvailabilityType": {}, "CommandMenuItemPayload": { "on_PathCommandMenuItemPayload": [ - 306 + 307 ], "on_ObjectMetadataCommandMenuItemPayload": [ - 307 + 308 ], "__typename": [ 1 @@ -5498,7 +5512,7 @@ export default { 1 ], "series": [ - 311 + 312 ], "xAxisLabel": [ 1 @@ -5547,7 +5561,7 @@ export default { 1 ], "data": [ - 313 + 314 ], "__typename": [ 1 @@ -5555,7 +5569,7 @@ export default { }, "LineChartData": { "series": [ - 314 + 315 ], "xAxisLabel": [ 1 @@ -5592,7 +5606,7 @@ export default { }, "PieChartData": { "data": [ - 316 + 317 ], "showLegend": [ 6 @@ -5659,7 +5673,7 @@ export default { 1 ], "connectionParameters": [ - 298 + 299 ], "lastSignedInAt": [ 4 @@ -5696,13 +5710,13 @@ export default { }, "PublicImapSmtpCaldavConnectionParameters": { "IMAP": [ - 320 + 321 ], "SMTP": [ - 320 + 321 ], "CALDAV": [ - 320 + 321 ], "__typename": [ 1 @@ -5743,7 +5757,7 @@ export default { 4 ], "connectionParameters": [ - 321 + 322 ], "__typename": [ 1 @@ -5799,13 +5813,13 @@ export default { }, "EventLogQueryResult": { "records": [ - 324 + 325 ], "totalCount": [ 21 ], "pageInfo": [ - 325 + 326 ], "__typename": [ 1 @@ -5904,7 +5918,7 @@ export default { 1 ], "parts": [ - 309 + 310 ], "processedAt": [ 4 @@ -5932,7 +5946,7 @@ export default { }, "AISystemPromptPreview": { "sections": [ - 330 + 331 ], "estimatedTokenCount": [ 21 @@ -5979,7 +5993,7 @@ export default { }, "AgentChatThreadEdge": { "node": [ - 328 + 329 ], "cursor": [ 40 @@ -5990,10 +6004,10 @@ export default { }, "AgentChatThreadConnection": { "pageInfo": [ - 240 + 241 ], "edges": [ - 335 + 336 ], "__typename": [ 1 @@ -6030,10 +6044,10 @@ export default { 3 ], "evaluations": [ - 337 + 338 ], "messages": [ - 329 + 330 ], "createdAt": [ 4 @@ -6050,19 +6064,19 @@ export default { 1 ], "syncStatus": [ - 340 - ], - "syncStage": [ 341 ], - "visibility": [ + "syncStage": [ 342 ], + "visibility": [ + 343 + ], "isContactAutoCreationEnabled": [ 6 ], "contactAutoCreationPolicy": [ - 343 + 344 ], "isSyncEnabled": [ 6 @@ -6098,22 +6112,22 @@ export default { 3 ], "visibility": [ - 345 + 346 ], "handle": [ 1 ], "type": [ - 346 + 347 ], "isContactAutoCreationEnabled": [ 6 ], "contactAutoCreationPolicy": [ - 347 + 348 ], "messageFolderImportPolicy": [ - 348 + 349 ], "excludeNonProfessionalEmails": [ 6 @@ -6122,7 +6136,7 @@ export default { 6 ], "pendingGroupEmailsAction": [ - 349 + 350 ], "isSyncEnabled": [ 6 @@ -6131,10 +6145,10 @@ export default { 4 ], "syncStatus": [ - 350 + 351 ], "syncStage": [ - 351 + 352 ], "syncStageStartedAt": [ 4 @@ -6185,7 +6199,7 @@ export default { 1 ], "pendingSyncAction": [ - 353 + 354 ], "messageChannelId": [ 3 @@ -6203,7 +6217,7 @@ export default { "MessageFolderPendingSyncAction": {}, "CollectionHash": { "collectionName": [ - 355 + 356 ], "hash": [ 1 @@ -6270,13 +6284,13 @@ export default { }, "MinimalMetadata": { "objectMetadataItems": [ - 356 - ], - "views": [ 357 ], + "views": [ + 358 + ], "collectionHashes": [ - 354 + 355 ], "__typename": [ 1 @@ -6442,7 +6456,7 @@ export default { 2, { "input": [ - 361, + 362, "GetApiKeyInput!" ] } @@ -6546,7 +6560,7 @@ export default { 32, { "input": [ - 362, + 363, "LogicFunctionIdInput!" ] } @@ -6558,7 +6572,7 @@ export default { 15, { "input": [ - 362, + 363, "LogicFunctionIdInput!" ] } @@ -6567,16 +6581,16 @@ export default { 1, { "input": [ - 362, + 363, "LogicFunctionIdInput!" ] } ], "commandMenuItems": [ - 302 + 303 ], "commandMenuItem": [ - 302, + 303, { "id": [ 3, @@ -6585,10 +6599,10 @@ export default { } ], "frontComponents": [ - 259 + 260 ], "frontComponent": [ - 259, + 260, { "id": [ 3, @@ -6597,7 +6611,7 @@ export default { } ], "objectRecordCounts": [ - 246 + 247 ], "object": [ 46, @@ -6609,7 +6623,7 @@ export default { } ], "objects": [ - 247, + 248, { "paging": [ 39, @@ -6631,7 +6645,7 @@ export default { } ], "indexMetadatas": [ - 241, + 242, { "paging": [ 39, @@ -6650,7 +6664,7 @@ export default { 25, { "input": [ - 364, + 365, "AgentIdInput!" ] } @@ -6659,7 +6673,7 @@ export default { 29 ], "getToolIndex": [ - 308 + 309 ], "getToolInputSchema": [ 15, @@ -6680,7 +6694,7 @@ export default { } ], "fields": [ - 251, + 252, { "paging": [ 39, @@ -6710,7 +6724,7 @@ export default { } ], "myMessageFolders": [ - 352, + 353, { "messageChannelId": [ 3 @@ -6718,7 +6732,7 @@ export default { } ], "myMessageChannels": [ - 344, + 345, { "connectedAccountId": [ 3 @@ -6726,10 +6740,10 @@ export default { } ], "myConnectedAccounts": [ - 319 + 320 ], "connectedAccountById": [ - 322, + 323, { "id": [ 3, @@ -6738,10 +6752,10 @@ export default { } ], "connectedAccounts": [ - 319 + 320 ], "myCalendarChannels": [ - 339, + 340, { "connectedAccountId": [ 3 @@ -6749,10 +6763,10 @@ export default { } ], "webhooks": [ - 359 + 360 ], "webhook": [ - 359, + 360, { "id": [ 3, @@ -6761,10 +6775,10 @@ export default { } ], "minimalMetadata": [ - 358 + 359 ], "chatThread": [ - 328, + 329, { "id": [ 3, @@ -6773,7 +6787,7 @@ export default { } ], "chatMessages": [ - 329, + 330, { "threadId": [ 3, @@ -6782,7 +6796,7 @@ export default { } ], "chatStreamCatchupChunks": [ - 332, + 333, { "threadId": [ 3, @@ -6791,13 +6805,13 @@ export default { } ], "getAISystemPromptPreview": [ - 331 + 332 ], "skills": [ - 327 + 328 ], "skill": [ - 327, + 328, { "id": [ 3, @@ -6806,24 +6820,24 @@ export default { } ], "chatThreads": [ - 336, + 337, { "paging": [ 39, "CursorPaging!" ], "filter": [ - 365, + 366, "AgentChatThreadFilter!" ], "sorting": [ - 368, + 369, "[AgentChatThreadSort!]!" ] } ], "agentTurns": [ - 338, + 339, { "agentId": [ 3, @@ -6832,43 +6846,43 @@ export default { } ], "eventLogs": [ - 326, + 327, { "input": [ - 372, + 373, "EventLogQueryInput!" ] } ], "pieChartData": [ - 317, + 318, { "input": [ - 376, + 377, "PieChartDataInput!" ] } ], "lineChartData": [ - 315, + 316, { "input": [ - 377, + 378, "LineChartDataInput!" ] } ], "barChartData": [ - 312, + 313, { "input": [ - 378, + 379, "BarChartDataInput!" ] } ], "checkUserExists": [ - 278, + 279, { "email": [ 1, @@ -6880,7 +6894,7 @@ export default { } ], "checkWorkspaceInviteHashIsValid": [ - 279, + 280, { "inviteHash": [ 1, @@ -6898,7 +6912,7 @@ export default { } ], "validatePasswordResetToken": [ - 273, + 274, { "passwordResetToken": [ 1, @@ -6907,7 +6921,7 @@ export default { } ], "findApplicationRegistrationByClientId": [ - 225, + 226, { "clientId": [ 1, @@ -6937,7 +6951,7 @@ export default { } ], "findApplicationRegistrationStats": [ - 223, + 224, { "id": [ 1, @@ -6977,11 +6991,20 @@ export default { ] } ], + "getPublicWorkspaceDataById": [ + 177, + { + "id": [ + 3, + "UUID!" + ] + } + ], "getSSOIdentityProviders": [ - 231 + 232 ], "getConnectedImapSmtpCaldavAccount": [ - 299, + 300, { "id": [ 3, @@ -6990,7 +7013,7 @@ export default { } ], "getAutoCompleteAddress": [ - 294, + 295, { "address": [ 1, @@ -7009,7 +7032,7 @@ export default { } ], "getAddressDetails": [ - 296, + 297, { "placeId": [ 1, @@ -7047,40 +7070,40 @@ export default { } ], "getConfigVariablesGrouped": [ - 199 + 200 ], "getSystemHealthStatus": [ - 210 + 211 ], "getIndicatorHealthStatus": [ - 213, + 214, { "indicatorId": [ - 208, + 209, "HealthIndicatorId!" ] } ], "getQueueMetrics": [ - 220, + 221, { "queueName": [ 1, "String!" ], "timeRange": [ - 221 + 222 ] } ], "versionInfo": [ - 211 + 212 ], "getAdminAiModels": [ - 181 + 182 ], "getDatabaseConfigVariable": [ - 194, + 195, { "key": [ 1, @@ -7089,14 +7112,14 @@ export default { } ], "getQueueJobs": [ - 205, + 206, { "queueName": [ 1, "String!" ], "state": [ - 203, + 204, "JobState!" ], "limit": [ @@ -7114,10 +7137,10 @@ export default { 15 ], "getModelsDevProviders": [ - 216 + 217 ], "getModelsDevSuggestions": [ - 215, + 216, { "providerType": [ 1, @@ -7126,7 +7149,7 @@ export default { } ], "getAdminAiUsageByWorkspace": [ - 193, + 194, { "periodStart": [ 4 @@ -7137,7 +7160,7 @@ export default { } ], "getMaintenanceMode": [ - 214 + 215 ], "workspaceLookupAdminPanel": [ 162, @@ -7176,27 +7199,27 @@ export default { } ], "getUsageAnalytics": [ - 283, + 284, { "input": [ - 379 + 380 ] } ], "getPostgresCredentials": [ - 301 + 302 ], "findManyPublicDomains": [ - 289 + 290 ], "getEmailingDomains": [ - 291 + 292 ], "findManyMarketplaceApps": [ - 287 + 288 ], "findMarketplaceAppDetail": [ - 288, + 289, { "universalIdentifier": [ 1, @@ -7232,7 +7255,7 @@ export default { }, "LogicFunctionIdInput": { "id": [ - 363 + 364 ], "__typename": [ 1 @@ -7249,16 +7272,16 @@ export default { }, "AgentChatThreadFilter": { "and": [ - 365 + 366 ], "or": [ - 365 + 366 ], "id": [ 42 ], "updatedAt": [ - 366 + 367 ], "__typename": [ 1 @@ -7296,10 +7319,10 @@ export default { 4 ], "between": [ - 367 + 368 ], "notBetween": [ - 367 + 368 ], "__typename": [ 1 @@ -7318,14 +7341,14 @@ export default { }, "AgentChatThreadSort": { "field": [ - 369 - ], - "direction": [ 370 ], - "nulls": [ + "direction": [ 371 ], + "nulls": [ + 372 + ], "__typename": [ 1 ] @@ -7335,10 +7358,10 @@ export default { "SortNulls": {}, "EventLogQueryInput": { "table": [ - 373 + 374 ], "filters": [ - 374 + 375 ], "first": [ 21 @@ -7359,7 +7382,7 @@ export default { 1 ], "dateRange": [ - 375 + 376 ], "recordId": [ 1 @@ -7426,7 +7449,7 @@ export default { 1 ], "operationTypes": [ - 380 + 381 ], "__typename": [ 1 @@ -7438,7 +7461,7 @@ export default { 6, { "input": [ - 382, + 383, "AddQuerySubscriptionInput!" ] } @@ -7447,7 +7470,7 @@ export default { 6, { "input": [ - 383, + 384, "RemoveQueryFromEventStreamInput!" ] } @@ -7456,7 +7479,7 @@ export default { 146, { "inputs": [ - 384, + 385, "[CreateNavigationMenuItemInput!]!" ] } @@ -7465,7 +7488,7 @@ export default { 146, { "input": [ - 384, + 385, "CreateNavigationMenuItemInput!" ] } @@ -7474,7 +7497,7 @@ export default { 146, { "inputs": [ - 385, + 386, "[UpdateOneNavigationMenuItemInput!]!" ] } @@ -7483,7 +7506,7 @@ export default { 146, { "input": [ - 385, + 386, "UpdateOneNavigationMenuItemInput!" ] } @@ -7510,7 +7533,7 @@ export default { 142, { "file": [ - 387, + 388, "Upload!" ] } @@ -7519,7 +7542,7 @@ export default { 142, { "file": [ - 387, + 388, "Upload!" ] } @@ -7528,7 +7551,7 @@ export default { 142, { "file": [ - 387, + 388, "Upload!" ] } @@ -7537,7 +7560,7 @@ export default { 142, { "file": [ - 387, + 388, "Upload!" ] } @@ -7546,7 +7569,7 @@ export default { 142, { "file": [ - 387, + 388, "Upload!" ] } @@ -7555,7 +7578,7 @@ export default { 142, { "file": [ - 387, + 388, "Upload!" ], "fieldMetadataId": [ @@ -7568,7 +7591,7 @@ export default { 142, { "file": [ - 387, + 388, "Upload!" ], "fieldMetadataUniversalIdentifier": [ @@ -7581,7 +7604,7 @@ export default { 52, { "input": [ - 388, + 389, "CreateViewFilterGroupInput!" ] } @@ -7594,7 +7617,7 @@ export default { "String!" ], "input": [ - 389, + 390, "UpdateViewFilterGroupInput!" ] } @@ -7621,7 +7644,7 @@ export default { 54, { "input": [ - 390, + 391, "CreateViewFilterInput!" ] } @@ -7630,7 +7653,7 @@ export default { 54, { "input": [ - 391, + 392, "UpdateViewFilterInput!" ] } @@ -7639,7 +7662,7 @@ export default { 54, { "input": [ - 393, + 394, "DeleteViewFilterInput!" ] } @@ -7648,7 +7671,7 @@ export default { 54, { "input": [ - 394, + 395, "DestroyViewFilterInput!" ] } @@ -7657,7 +7680,7 @@ export default { 60, { "input": [ - 395, + 396, "CreateViewInput!" ] } @@ -7670,7 +7693,7 @@ export default { "String!" ], "input": [ - 396, + 397, "UpdateViewInput!" ] } @@ -7697,7 +7720,7 @@ export default { 57, { "input": [ - 397, + 398, "CreateViewSortInput!" ] } @@ -7706,7 +7729,7 @@ export default { 57, { "input": [ - 398, + 399, "UpdateViewSortInput!" ] } @@ -7715,7 +7738,7 @@ export default { 6, { "input": [ - 400, + 401, "DeleteViewSortInput!" ] } @@ -7724,7 +7747,7 @@ export default { 6, { "input": [ - 401, + 402, "DestroyViewSortInput!" ] } @@ -7733,7 +7756,7 @@ export default { 50, { "input": [ - 402, + 403, "UpdateViewFieldInput!" ] } @@ -7742,7 +7765,7 @@ export default { 50, { "input": [ - 404, + 405, "CreateViewFieldInput!" ] } @@ -7751,7 +7774,7 @@ export default { 50, { "inputs": [ - 404, + 405, "[CreateViewFieldInput!]!" ] } @@ -7760,7 +7783,7 @@ export default { 50, { "input": [ - 405, + 406, "DeleteViewFieldInput!" ] } @@ -7769,7 +7792,7 @@ export default { 50, { "input": [ - 406, + 407, "DestroyViewFieldInput!" ] } @@ -7778,7 +7801,7 @@ export default { 59, { "input": [ - 407, + 408, "UpdateViewFieldGroupInput!" ] } @@ -7787,7 +7810,7 @@ export default { 59, { "input": [ - 409, + 410, "CreateViewFieldGroupInput!" ] } @@ -7796,7 +7819,7 @@ export default { 59, { "inputs": [ - 409, + 410, "[CreateViewFieldGroupInput!]!" ] } @@ -7805,7 +7828,7 @@ export default { 59, { "input": [ - 410, + 411, "DeleteViewFieldGroupInput!" ] } @@ -7814,7 +7837,7 @@ export default { 59, { "input": [ - 411, + 412, "DestroyViewFieldGroupInput!" ] } @@ -7823,7 +7846,7 @@ export default { 60, { "input": [ - 412, + 413, "UpsertFieldsWidgetInput!" ] } @@ -7832,7 +7855,7 @@ export default { 2, { "input": [ - 415, + 416, "CreateApiKeyInput!" ] } @@ -7841,7 +7864,7 @@ export default { 2, { "input": [ - 416, + 417, "UpdateApiKeyInput!" ] } @@ -7850,7 +7873,7 @@ export default { 2, { "input": [ - 417, + 418, "RevokeApiKeyInput!" ] } @@ -7892,7 +7915,7 @@ export default { 116, { "type": [ - 418, + 419, "AnalyticsType!" ], "name": [ @@ -8005,7 +8028,7 @@ export default { 141, { "input": [ - 419, + 420, "CreateApprovedAccessDomainInput!" ] } @@ -8014,7 +8037,7 @@ export default { 6, { "input": [ - 420, + 421, "DeleteApprovedAccessDomainInput!" ] } @@ -8023,7 +8046,7 @@ export default { 141, { "input": [ - 421, + 422, "ValidateApprovedAccessDomainInput!" ] } @@ -8032,7 +8055,7 @@ export default { 113, { "input": [ - 422, + 423, "CreatePageLayoutTabInput!" ] } @@ -8045,7 +8068,7 @@ export default { "String!" ], "input": [ - 423, + 424, "UpdatePageLayoutTabInput!" ] } @@ -8063,7 +8086,7 @@ export default { 114, { "input": [ - 424, + 425, "CreatePageLayoutInput!" ] } @@ -8076,7 +8099,7 @@ export default { "String!" ], "input": [ - 425, + 426, "UpdatePageLayoutInput!" ] } @@ -8098,7 +8121,7 @@ export default { "String!" ], "input": [ - 426, + 427, "UpdatePageLayoutWithTabsInput!" ] } @@ -8134,7 +8157,7 @@ export default { 75, { "input": [ - 430, + 431, "CreatePageLayoutWidgetInput!" ] } @@ -8147,7 +8170,7 @@ export default { "String!" ], "input": [ - 431, + 432, "UpdatePageLayoutWidgetInput!" ] } @@ -8165,7 +8188,7 @@ export default { 32, { "input": [ - 362, + 363, "LogicFunctionIdInput!" ] } @@ -8174,7 +8197,7 @@ export default { 32, { "input": [ - 432, + 433, "CreateLogicFunctionFromSourceInput!" ] } @@ -8183,7 +8206,7 @@ export default { 155, { "input": [ - 433, + 434, "ExecuteOneLogicFunctionInput!" ] } @@ -8192,31 +8215,31 @@ export default { 6, { "input": [ - 434, + 435, "UpdateLogicFunctionFromSourceInput!" ] } ], "createCommandMenuItem": [ - 302, + 303, { "input": [ - 436, + 437, "CreateCommandMenuItemInput!" ] } ], "updateCommandMenuItem": [ - 302, + 303, { "input": [ - 437, + 438, "UpdateCommandMenuItemInput!" ] } ], "deleteCommandMenuItem": [ - 302, + 303, { "id": [ 3, @@ -8225,25 +8248,25 @@ export default { } ], "createFrontComponent": [ - 259, + 260, { "input": [ - 438, + 439, "CreateFrontComponentInput!" ] } ], "updateFrontComponent": [ - 259, + 260, { "input": [ - 439, + 440, "UpdateFrontComponentInput!" ] } ], "deleteFrontComponent": [ - 259, + 260, { "id": [ 3, @@ -8255,7 +8278,7 @@ export default { 46, { "input": [ - 441, + 442, "CreateOneObjectInput!" ] } @@ -8264,7 +8287,7 @@ export default { 46, { "input": [ - 443, + 444, "DeleteOneObjectInput!" ] } @@ -8273,7 +8296,7 @@ export default { 46, { "input": [ - 444, + 445, "UpdateOneObjectInput!" ] } @@ -8282,7 +8305,7 @@ export default { 25, { "input": [ - 446, + 447, "CreateAgentInput!" ] } @@ -8291,7 +8314,7 @@ export default { 25, { "input": [ - 447, + 448, "UpdateAgentInput!" ] } @@ -8300,7 +8323,7 @@ export default { 25, { "input": [ - 364, + 365, "AgentIdInput!" ] } @@ -8322,7 +8345,7 @@ export default { 29, { "createRoleInput": [ - 448, + 449, "CreateRoleInput!" ] } @@ -8331,7 +8354,7 @@ export default { 29, { "updateRoleInput": [ - 449, + 450, "UpdateRoleInput!" ] } @@ -8349,7 +8372,7 @@ export default { 16, { "upsertObjectPermissionsInput": [ - 451, + 452, "UpsertObjectPermissionsInput!" ] } @@ -8358,7 +8381,7 @@ export default { 27, { "upsertPermissionFlagsInput": [ - 453, + 454, "UpsertPermissionFlagsInput!" ] } @@ -8367,16 +8390,16 @@ export default { 26, { "upsertFieldPermissionsInput": [ - 454, + 455, "UpsertFieldPermissionsInput!" ] } ], "upsertRowLevelPermissionPredicates": [ - 256, + 257, { "input": [ - 456, + 457, "UpsertRowLevelPermissionPredicatesInput!" ] } @@ -8407,7 +8430,7 @@ export default { 34, { "input": [ - 459, + 460, "CreateOneFieldMetadataInput!" ] } @@ -8416,7 +8439,7 @@ export default { 34, { "input": [ - 461, + 462, "UpdateOneFieldMetadataInput!" ] } @@ -8425,7 +8448,7 @@ export default { 34, { "input": [ - 463, + 464, "DeleteOneFieldInput!" ] } @@ -8434,7 +8457,7 @@ export default { 56, { "input": [ - 464, + 465, "CreateViewGroupInput!" ] } @@ -8443,7 +8466,7 @@ export default { 56, { "inputs": [ - 464, + 465, "[CreateViewGroupInput!]!" ] } @@ -8452,7 +8475,7 @@ export default { 56, { "input": [ - 465, + 466, "UpdateViewGroupInput!" ] } @@ -8461,7 +8484,7 @@ export default { 56, { "inputs": [ - 465, + 466, "[UpdateViewGroupInput!]!" ] } @@ -8470,7 +8493,7 @@ export default { 56, { "input": [ - 467, + 468, "DeleteViewGroupInput!" ] } @@ -8479,40 +8502,40 @@ export default { 56, { "input": [ - 468, + 469, "DestroyViewGroupInput!" ] } ], "updateMessageFolder": [ - 352, + 353, { "input": [ - 469, + 470, "UpdateMessageFolderInput!" ] } ], "updateMessageFolders": [ - 352, + 353, { "input": [ - 471, + 472, "UpdateMessageFoldersInput!" ] } ], "updateMessageChannel": [ - 344, + 345, { "input": [ - 472, + 473, "UpdateMessageChannelInput!" ] } ], "deleteConnectedAccount": [ - 319, + 320, { "id": [ 3, @@ -8521,34 +8544,34 @@ export default { } ], "updateCalendarChannel": [ - 339, + 340, { "input": [ - 474, + 475, "UpdateCalendarChannelInput!" ] } ], "createWebhook": [ - 359, + 360, { "input": [ - 476, + 477, "CreateWebhookInput!" ] } ], "updateWebhook": [ - 359, + 360, { "input": [ - 477, + 478, "UpdateWebhookInput!" ] } ], "deleteWebhook": [ - 359, + 360, { "id": [ 3, @@ -8557,10 +8580,10 @@ export default { } ], "createChatThread": [ - 328 + 329 ], "sendChatMessage": [ - 333, + 334, { "threadId": [ 3, @@ -8605,25 +8628,25 @@ export default { } ], "createSkill": [ - 327, + 328, { "input": [ - 479, + 480, "CreateSkillInput!" ] } ], "updateSkill": [ - 327, + 328, { "input": [ - 480, + 481, "UpdateSkillInput!" ] } ], "deleteSkill": [ - 327, + 328, { "id": [ 3, @@ -8632,7 +8655,7 @@ export default { } ], "activateSkill": [ - 327, + 328, { "id": [ 3, @@ -8641,7 +8664,7 @@ export default { } ], "deactivateSkill": [ - 327, + 328, { "id": [ 3, @@ -8650,7 +8673,7 @@ export default { } ], "evaluateAgentTurn": [ - 337, + 338, { "turnId": [ 3, @@ -8659,7 +8682,7 @@ export default { } ], "runEvaluationInput": [ - 338, + 339, { "agentId": [ 3, @@ -8672,7 +8695,7 @@ export default { } ], "duplicateDashboard": [ - 318, + 319, { "id": [ 3, @@ -8681,16 +8704,16 @@ export default { } ], "getAuthorizationUrlForSSO": [ - 268, + 269, { "input": [ - 481, + 482, "GetAuthorizationUrlForSSOInput!" ] } ], "getLoginTokenFromCredentials": [ - 277, + 278, { "email": [ 1, @@ -8716,7 +8739,7 @@ export default { } ], "signIn": [ - 266, + 267, { "email": [ 1, @@ -8738,7 +8761,7 @@ export default { } ], "verifyEmailAndGetLoginToken": [ - 274, + 275, { "emailVerificationToken": [ 1, @@ -8758,7 +8781,7 @@ export default { } ], "verifyEmailAndGetWorkspaceAgnosticToken": [ - 266, + 267, { "emailVerificationToken": [ 1, @@ -8774,7 +8797,7 @@ export default { } ], "getAuthTokensFromOTP": [ - 276, + 277, { "otp": [ 1, @@ -8794,7 +8817,7 @@ export default { } ], "signUp": [ - 266, + 267, { "email": [ 1, @@ -8816,7 +8839,7 @@ export default { } ], "signUpInWorkspace": [ - 271, + 272, { "email": [ 1, @@ -8847,13 +8870,13 @@ export default { } ], "signUpInNewWorkspace": [ - 271 - ], - "generateTransientToken": [ 272 ], + "generateTransientToken": [ + 273 + ], "getAuthTokensFromLoginToken": [ - 276, + 277, { "loginToken": [ 1, @@ -8866,7 +8889,7 @@ export default { } ], "authorizeApp": [ - 264, + 265, { "clientId": [ 1, @@ -8888,7 +8911,7 @@ export default { } ], "renewToken": [ - 276, + 277, { "appToken": [ 1, @@ -8897,7 +8920,7 @@ export default { } ], "generateApiKeyToken": [ - 275, + 276, { "apiKeyId": [ 3, @@ -8910,7 +8933,7 @@ export default { } ], "emailPasswordResetLink": [ - 267, + 268, { "email": [ 1, @@ -8922,7 +8945,7 @@ export default { } ], "updatePasswordViaResetToken": [ - 269, + 270, { "passwordResetToken": [ 1, @@ -8935,10 +8958,10 @@ export default { } ], "createApplicationRegistration": [ - 224, + 225, { "input": [ - 482, + 483, "CreateApplicationRegistrationInput!" ] } @@ -8947,7 +8970,7 @@ export default { 7, { "input": [ - 483, + 484, "UpdateApplicationRegistrationInput!" ] } @@ -8962,7 +8985,7 @@ export default { } ], "rotateApplicationRegistrationClientSecret": [ - 226, + 227, { "id": [ 1, @@ -8974,7 +8997,7 @@ export default { 5, { "input": [ - 485, + 486, "CreateApplicationRegistrationVariableInput!" ] } @@ -8983,7 +9006,7 @@ export default { 5, { "input": [ - 486, + 487, "UpdateApplicationRegistrationVariableInput!" ] } @@ -9001,7 +9024,7 @@ export default { 7, { "file": [ - 387, + 388, "Upload!" ], "universalIdentifier": [ @@ -9023,7 +9046,7 @@ export default { } ], "initiateOTPProvisioning": [ - 262, + 263, { "loginToken": [ 1, @@ -9036,10 +9059,10 @@ export default { } ], "initiateOTPProvisioningForAuthenticatedUser": [ - 262 + 263 ], "deleteTwoFactorAuthenticationMethod": [ - 261, + 262, { "twoFactorAuthenticationMethodId": [ 3, @@ -9048,7 +9071,7 @@ export default { } ], "verifyTwoFactorAuthenticationMethodForAuthenticatedUser": [ - 263, + 264, { "otp": [ 1, @@ -9072,7 +9095,7 @@ export default { 6, { "input": [ - 488, + 489, "UpdateWorkspaceMemberSettingsInput!" ] } @@ -9090,7 +9113,7 @@ export default { } ], "resendEmailVerificationToken": [ - 227, + 228, { "email": [ 1, @@ -9106,7 +9129,7 @@ export default { 66, { "data": [ - 489, + 490, "ActivateWorkspaceInput!" ] } @@ -9115,7 +9138,7 @@ export default { 66, { "data": [ - 490, + 491, "UpdateWorkspaceInput!" ] } @@ -9124,46 +9147,46 @@ export default { 66 ], "checkCustomDomainValidRecords": [ - 255 + 256 ], "createOIDCIdentityProvider": [ - 232, + 233, { "input": [ - 491, + 492, "SetupOIDCSsoInput!" ] } ], "createSAMLIdentityProvider": [ - 232, + 233, { "input": [ - 492, + 493, "SetupSAMLSsoInput!" ] } ], "deleteSSOIdentityProvider": [ - 228, + 229, { "input": [ - 493, + 494, "DeleteSsoInput!" ] } ], "editSSOIdentityProvider": [ - 229, + 230, { "input": [ - 494, + 495, "EditSsoInput!" ] } ], "impersonate": [ - 280, + 281, { "userId": [ 3, @@ -9176,16 +9199,16 @@ export default { } ], "sendEmail": [ - 323, + 324, { "input": [ - 495, + 496, "SendEmailInput!" ] } ], "startChannelSync": [ - 310, + 311, { "connectedAccountId": [ 3, @@ -9194,7 +9217,7 @@ export default { } ], "saveImapSmtpCaldavAccount": [ - 300, + 301, { "accountOwnerId": [ 3, @@ -9205,7 +9228,7 @@ export default { "String!" ], "connectionParameters": [ - 497, + 498, "EmailAccountConnectionParameters!" ], "id": [ @@ -9217,7 +9240,7 @@ export default { 157, { "input": [ - 499, + 500, "UpdateLabPublicFeatureFlagInput!" ] } @@ -9295,7 +9318,7 @@ export default { 6, { "role": [ - 500, + 501, "AiModelRole!" ], "modelId": [ @@ -9340,7 +9363,7 @@ export default { } ], "retryJobs": [ - 206, + 207, { "queueName": [ 1, @@ -9353,7 +9376,7 @@ export default { } ], "deleteJobs": [ - 201, + 202, { "queueName": [ 1, @@ -9433,13 +9456,13 @@ export default { 6 ], "enablePostgresProxy": [ - 301 + 302 ], "disablePostgresProxy": [ - 301 + 302 ], "createPublicDomain": [ - 289, + 290, { "domain": [ 1, @@ -9457,7 +9480,7 @@ export default { } ], "checkPublicDomainValidRecords": [ - 255, + 256, { "domain": [ 1, @@ -9466,14 +9489,14 @@ export default { } ], "createEmailingDomain": [ - 291, + 292, { "domain": [ 1, "String!" ], "driver": [ - 292, + 293, "EmailingDomainDriver!" ] } @@ -9488,7 +9511,7 @@ export default { } ], "verifyEmailingDomain": [ - 291, + 292, { "id": [ 1, @@ -9500,7 +9523,7 @@ export default { 68, { "input": [ - 501, + 502, "CreateOneAppTokenInput!" ] } @@ -9536,7 +9559,7 @@ export default { 6, { "workspaceMigration": [ - 503, + 504, "WorkspaceMigrationInput!" ] } @@ -9568,7 +9591,7 @@ export default { } ], "createDevelopmentApplication": [ - 284, + 285, { "universalIdentifier": [ 1, @@ -9581,7 +9604,7 @@ export default { } ], "generateApplicationToken": [ - 258, + 259, { "applicationId": [ 3, @@ -9590,7 +9613,7 @@ export default { } ], "syncApplication": [ - 285, + 286, { "manifest": [ 15, @@ -9599,10 +9622,10 @@ export default { } ], "uploadApplicationFile": [ - 286, + 287, { "file": [ - 387, + 388, "Upload!" ], "applicationUniversalIdentifier": [ @@ -9610,7 +9633,7 @@ export default { "String!" ], "fileFolder": [ - 506, + 507, "FileFolder!" ], "filePath": [ @@ -9633,7 +9656,7 @@ export default { } ], "renewApplicationToken": [ - 258, + 259, { "applicationRefreshToken": [ 1, @@ -9719,7 +9742,7 @@ export default { 3 ], "update": [ - 386 + 387 ], "__typename": [ 1 @@ -9826,7 +9849,7 @@ export default { 3 ], "update": [ - 392 + 393 ], "__typename": [ 1 @@ -9999,7 +10022,7 @@ export default { 3 ], "update": [ - 399 + 400 ], "__typename": [ 1 @@ -10034,7 +10057,7 @@ export default { 3 ], "update": [ - 403 + 404 ], "__typename": [ 1 @@ -10110,7 +10133,7 @@ export default { 3 ], "update": [ - 408 + 409 ], "__typename": [ 1 @@ -10174,10 +10197,10 @@ export default { 3 ], "groups": [ - 413 + 414 ], "fields": [ - 414 + 415 ], "__typename": [ 1 @@ -10197,7 +10220,7 @@ export default { 6 ], "fields": [ - 414 + 415 ], "__typename": [ 1 @@ -10366,7 +10389,7 @@ export default { 3 ], "tabs": [ - 427 + 428 ], "__typename": [ 1 @@ -10389,7 +10412,7 @@ export default { 79 ], "widgets": [ - 428 + 429 ], "__typename": [ 1 @@ -10412,7 +10435,7 @@ export default { 3 ], "gridPosition": [ - 429 + 430 ], "position": [ 15 @@ -10461,7 +10484,7 @@ export default { 3 ], "gridPosition": [ - 429 + 430 ], "position": [ 15 @@ -10487,7 +10510,7 @@ export default { 3 ], "gridPosition": [ - 429 + 430 ], "position": [ 15 @@ -10559,7 +10582,7 @@ export default { 3 ], "update": [ - 435 + 436 ], "__typename": [ 1 @@ -10611,7 +10634,7 @@ export default { 3 ], "engineComponentKey": [ - 303 + 304 ], "label": [ 1 @@ -10629,7 +10652,7 @@ export default { 6 ], "availabilityType": [ - 304 + 305 ], "hotKeys": [ 1 @@ -10667,13 +10690,13 @@ export default { 6 ], "availabilityType": [ - 304 + 305 ], "availabilityObjectMetadataId": [ 3 ], "engineComponentKey": [ - 303 + 304 ], "hotKeys": [ 1 @@ -10713,7 +10736,7 @@ export default { 3 ], "update": [ - 440 + 441 ], "__typename": [ 1 @@ -10732,7 +10755,7 @@ export default { }, "CreateOneObjectInput": { "object": [ - 442 + 443 ], "__typename": [ 1 @@ -10792,7 +10815,7 @@ export default { }, "UpdateOneObjectInput": { "update": [ - 445 + 446 ], "id": [ 3 @@ -10964,7 +10987,7 @@ export default { }, "UpdateRoleInput": { "update": [ - 450 + 451 ], "id": [ 3 @@ -11019,7 +11042,7 @@ export default { 3 ], "objectPermissions": [ - 452 + 453 ], "__typename": [ 1 @@ -11061,7 +11084,7 @@ export default { 3 ], "fieldPermissions": [ - 455 + 456 ], "__typename": [ 1 @@ -11092,10 +11115,10 @@ export default { 3 ], "predicates": [ - 457 + 458 ], "predicateGroups": [ - 458 + 459 ], "__typename": [ 1 @@ -11155,7 +11178,7 @@ export default { }, "CreateOneFieldMetadataInput": { "field": [ - 460 + 461 ], "__typename": [ 1 @@ -11228,7 +11251,7 @@ export default { 3 ], "update": [ - 462 + 463 ], "__typename": [ 1 @@ -11320,7 +11343,7 @@ export default { 3 ], "update": [ - 466 + 467 ], "__typename": [ 1 @@ -11364,7 +11387,7 @@ export default { 3 ], "update": [ - 470 + 471 ], "__typename": [ 1 @@ -11383,7 +11406,7 @@ export default { 3 ], "update": [ - 470 + 471 ], "__typename": [ 1 @@ -11394,7 +11417,7 @@ export default { 3 ], "update": [ - 473 + 474 ], "__typename": [ 1 @@ -11402,16 +11425,16 @@ export default { }, "UpdateMessageChannelInputUpdates": { "visibility": [ - 345 + 346 ], "isContactAutoCreationEnabled": [ 6 ], "contactAutoCreationPolicy": [ - 347 + 348 ], "messageFolderImportPolicy": [ - 348 + 349 ], "isSyncEnabled": [ 6 @@ -11431,7 +11454,7 @@ export default { 3 ], "update": [ - 475 + 476 ], "__typename": [ 1 @@ -11439,13 +11462,13 @@ export default { }, "UpdateCalendarChannelInputUpdates": { "visibility": [ - 342 + 343 ], "isContactAutoCreationEnabled": [ 6 ], "contactAutoCreationPolicy": [ - 343 + 344 ], "isSyncEnabled": [ 6 @@ -11479,7 +11502,7 @@ export default { 3 ], "update": [ - 478 + 479 ], "__typename": [ 1 @@ -11584,7 +11607,7 @@ export default { 1 ], "update": [ - 484 + 485 ], "__typename": [ 1 @@ -11632,7 +11655,7 @@ export default { 1 ], "update": [ - 487 + 488 ], "__typename": [ 1 @@ -11642,6 +11665,9 @@ export default { "value": [ 1 ], + "resetValue": [ + 6 + ], "description": [ 1 ], @@ -11824,7 +11850,7 @@ export default { 1 ], "files": [ - 496 + 497 ], "__typename": [ 1 @@ -11843,13 +11869,13 @@ export default { }, "EmailAccountConnectionParameters": { "IMAP": [ - 498 + 499 ], "SMTP": [ - 498 + 499 ], "CALDAV": [ - 498 + 499 ], "__typename": [ 1 @@ -11889,7 +11915,7 @@ export default { "AiModelRole": {}, "CreateOneAppTokenInput": { "appToken": [ - 502 + 503 ], "__typename": [ 1 @@ -11905,7 +11931,7 @@ export default { }, "WorkspaceMigrationInput": { "actions": [ - 504 + 505 ], "__typename": [ 1 @@ -11913,10 +11939,10 @@ export default { }, "WorkspaceMigrationDeleteActionInput": { "type": [ - 505 + 506 ], "metadataName": [ - 355 + 356 ], "universalIdentifier": [ 1 @@ -11938,16 +11964,16 @@ export default { } ], "logicFunctionLogs": [ - 260, + 261, { "input": [ - 508, + 509, "LogicFunctionLogsInput!" ] } ], "onAgentChatEvent": [ - 334, + 335, { "threadId": [ 3, diff --git a/packages/twenty-front/src/generated-metadata/graphql.ts b/packages/twenty-front/src/generated-metadata/graphql.ts index 94eb7569fb..3100ded575 100644 --- a/packages/twenty-front/src/generated-metadata/graphql.ts +++ b/packages/twenty-front/src/generated-metadata/graphql.ts @@ -4383,6 +4383,13 @@ export type PublicWorkspaceData = { workspaceUrls: WorkspaceUrls; }; +export type PublicWorkspaceDataSummary = { + __typename?: 'PublicWorkspaceDataSummary'; + displayName?: Maybe; + id: Scalars['UUID']; + logo?: Maybe; +}; + export type Query = { __typename?: 'Query'; adminPanelRecentUsers: Array; @@ -4460,6 +4467,7 @@ export type Query = { getPageLayouts: Array; getPostgresCredentials?: Maybe; getPublicWorkspaceDataByDomain: PublicWorkspaceData; + getPublicWorkspaceDataById: PublicWorkspaceDataSummary; getQueueJobs: QueueJobsResponse; getQueueMetrics: QueueMetricsData; getRoles: Array; @@ -4769,6 +4777,11 @@ export type QueryGetPublicWorkspaceDataByDomainArgs = { }; +export type QueryGetPublicWorkspaceDataByIdArgs = { + id: Scalars['UUID']; +}; + + export type QueryGetQueueJobsArgs = { limit?: InputMaybe; offset?: InputMaybe; @@ -5453,6 +5466,7 @@ export type UpdateApplicationRegistrationVariableInput = { export type UpdateApplicationRegistrationVariablePayload = { description?: InputMaybe; + resetValue?: InputMaybe; value?: InputMaybe; }; @@ -6716,6 +6730,13 @@ export type FindOneApplicationByUniversalIdentifierQueryVariables = Exact<{ export type FindOneApplicationByUniversalIdentifierQuery = { __typename?: 'Query', findOneApplication: { __typename?: 'Application', id: string, name: string, description?: string | null, version?: string | null, universalIdentifier: string, applicationRegistrationId?: string | null, canBeUninstalled: boolean, defaultRoleId?: string | null, settingsCustomTabFrontComponentId?: string | null, availablePackages: any, applicationRegistration?: { __typename?: 'ApplicationRegistrationSummary', id: string, latestAvailableVersion?: string | null, sourceType: ApplicationRegistrationSourceType, logoUrl?: string | null } | null, applicationVariables: Array<{ __typename?: 'ApplicationVariable', id: string, key: string, value: string, description: string, isSecret: boolean }>, agents: Array<{ __typename?: 'Agent', id: string, name: string, label: string, description?: string | null, icon?: string | null, prompt: string, modelId: string, responseFormat?: any | null, roleId?: string | null, isCustom: boolean, modelConfiguration?: any | null, evaluationInputs: Array, applicationId?: string | null, createdAt: string, updatedAt: string }>, objects: Array<{ __typename?: 'Object', id: string, universalIdentifier: string, nameSingular: string, namePlural: string, labelSingular: string, labelPlural: string, color?: string | null, description?: string | null, icon?: string | null, isCustom: boolean, isRemote: boolean, isActive: boolean, isSystem: boolean, isUIReadOnly: boolean, createdAt: string, updatedAt: string, labelIdentifierFieldMetadataId?: string | null, imageIdentifierFieldMetadataId?: string | null, applicationId: string, shortcut?: string | null, isLabelSyncedWithName: boolean, isSearchable: boolean, duplicateCriteria?: Array> | null, indexMetadataList: Array<{ __typename?: 'Index', id: string, createdAt: string, updatedAt: string, name: string, indexWhereClause?: string | null, indexType: IndexType, isUnique: boolean, isCustom?: boolean | null, indexFieldMetadataList: Array<{ __typename?: 'IndexField', id: string, fieldMetadataId: string, createdAt: string, updatedAt: string, order: number }> }>, fieldsList: Array<{ __typename?: 'Field', id: string, universalIdentifier: string, type: FieldMetadataType, name: string, label: string, description?: string | null, icon?: string | null, isCustom?: boolean | null, isActive?: boolean | null, isSystem?: boolean | null, isUIReadOnly?: boolean | null, isNullable?: boolean | null, isUnique?: boolean | null, createdAt: string, updatedAt: string, defaultValue?: any | null, options?: any | null, settings?: any | null, isLabelSyncedWithName?: boolean | null, morphId?: string | null, applicationId: string, relation?: { __typename?: 'Relation', type: RelationType, sourceObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, targetObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, sourceFieldMetadata: { __typename?: 'Field', id: string, name: string }, targetFieldMetadata: { __typename?: 'Field', id: string, name: string } } | null, morphRelations?: Array<{ __typename?: 'Relation', type: RelationType, sourceObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, targetObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, sourceFieldMetadata: { __typename?: 'Field', id: string, name: string }, targetFieldMetadata: { __typename?: 'Field', id: string, name: string } }> | null }> }>, logicFunctions: Array<{ __typename?: 'LogicFunction', id: string, name: string, description?: string | null, runtime: string, timeoutSeconds: number, sourceHandlerPath: string, handlerName: string, toolInputSchema?: any | null, isTool: boolean, cronTriggerSettings?: any | null, databaseEventTriggerSettings?: any | null, httpRouteTriggerSettings?: any | null, applicationId?: string | null, createdAt: string, updatedAt: string }> } }; +export type FindOneApplicationSummaryQueryVariables = Exact<{ + universalIdentifier: Scalars['UUID']; +}>; + + +export type FindOneApplicationSummaryQuery = { __typename?: 'Query', findOneApplication: { __typename?: 'Application', id: string } }; + export type AuthTokenFragmentFragment = { __typename?: 'AuthToken', token: string, expiresAt: string }; export type AuthTokenPairFragmentFragment = { __typename?: 'AuthTokenPair', accessOrWorkspaceAgnosticToken: { __typename?: 'AuthToken', token: string, expiresAt: string }, refreshToken: { __typename?: 'AuthToken', token: string, expiresAt: string } }; @@ -8567,6 +8588,13 @@ export type GetAiSystemPromptPreviewQueryVariables = Exact<{ [key: string]: neve export type GetAiSystemPromptPreviewQuery = { __typename?: 'Query', getAISystemPromptPreview: { __typename?: 'AISystemPromptPreview', estimatedTokenCount: number, sections: Array<{ __typename?: 'AISystemPromptSection', title: string, content: string, estimatedTokenCount: number }> } }; +export type GetPublicWorkspaceDataByIdQueryVariables = Exact<{ + id: Scalars['UUID']; +}>; + + +export type GetPublicWorkspaceDataByIdQuery = { __typename?: 'Query', getPublicWorkspaceDataById: { __typename?: 'PublicWorkspaceDataSummary', id: string, displayName?: string | null, logo?: string | null } }; + export type GetWorkspaceFromInviteHashQueryVariables = Exact<{ inviteHash: Scalars['String']; }>; @@ -8654,6 +8682,7 @@ export const TrackAnalyticsDocument = {"kind":"Document","definitions":[{"kind": export const FindManyApplicationsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"FindManyApplications"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"findManyApplications"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"version"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"applicationRegistrationId"}},{"kind":"Field","name":{"kind":"Name","value":"applicationRegistration"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"latestAvailableVersion"}},{"kind":"Field","name":{"kind":"Name","value":"sourceType"}}]}}]}}]}}]} as unknown as DocumentNode; export const FindOneApplicationDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"FindOneApplication"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"UUID"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"findOneApplication"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ApplicationFields"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AgentFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Agent"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"prompt"}},{"kind":"Field","name":{"kind":"Name","value":"modelId"}},{"kind":"Field","name":{"kind":"Name","value":"responseFormat"}},{"kind":"Field","name":{"kind":"Name","value":"roleId"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"modelConfiguration"}},{"kind":"Field","name":{"kind":"Name","value":"evaluationInputs"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ObjectMetadataFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Object"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}},{"kind":"Field","name":{"kind":"Name","value":"labelSingular"}},{"kind":"Field","name":{"kind":"Name","value":"labelPlural"}},{"kind":"Field","name":{"kind":"Name","value":"color"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"isRemote"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isSystem"}},{"kind":"Field","name":{"kind":"Name","value":"isUIReadOnly"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"labelIdentifierFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"imageIdentifierFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"shortcut"}},{"kind":"Field","name":{"kind":"Name","value":"isLabelSyncedWithName"}},{"kind":"Field","name":{"kind":"Name","value":"isSearchable"}},{"kind":"Field","name":{"kind":"Name","value":"duplicateCriteria"}},{"kind":"Field","name":{"kind":"Name","value":"indexMetadataList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"indexWhereClause"}},{"kind":"Field","name":{"kind":"Name","value":"indexType"}},{"kind":"Field","name":{"kind":"Name","value":"isUnique"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"indexFieldMetadataList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"fieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"order"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"fieldsList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isSystem"}},{"kind":"Field","name":{"kind":"Name","value":"isUIReadOnly"}},{"kind":"Field","name":{"kind":"Name","value":"isNullable"}},{"kind":"Field","name":{"kind":"Name","value":"isUnique"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"defaultValue"}},{"kind":"Field","name":{"kind":"Name","value":"options"}},{"kind":"Field","name":{"kind":"Name","value":"settings"}},{"kind":"Field","name":{"kind":"Name","value":"isLabelSyncedWithName"}},{"kind":"Field","name":{"kind":"Name","value":"morphId"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"relation"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"sourceObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"sourceFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"morphRelations"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"sourceObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"sourceFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"LogicFunctionFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"LogicFunction"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"runtime"}},{"kind":"Field","name":{"kind":"Name","value":"timeoutSeconds"}},{"kind":"Field","name":{"kind":"Name","value":"sourceHandlerPath"}},{"kind":"Field","name":{"kind":"Name","value":"handlerName"}},{"kind":"Field","name":{"kind":"Name","value":"toolInputSchema"}},{"kind":"Field","name":{"kind":"Name","value":"isTool"}},{"kind":"Field","name":{"kind":"Name","value":"cronTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"databaseEventTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"httpRouteTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ApplicationFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Application"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"version"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"applicationRegistrationId"}},{"kind":"Field","name":{"kind":"Name","value":"applicationRegistration"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"latestAvailableVersion"}},{"kind":"Field","name":{"kind":"Name","value":"sourceType"}},{"kind":"Field","name":{"kind":"Name","value":"logoUrl"}}]}},{"kind":"Field","name":{"kind":"Name","value":"canBeUninstalled"}},{"kind":"Field","name":{"kind":"Name","value":"defaultRoleId"}},{"kind":"Field","name":{"kind":"Name","value":"settingsCustomTabFrontComponentId"}},{"kind":"Field","name":{"kind":"Name","value":"availablePackages"}},{"kind":"Field","name":{"kind":"Name","value":"applicationVariables"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"key"}},{"kind":"Field","name":{"kind":"Name","value":"value"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"isSecret"}}]}},{"kind":"Field","name":{"kind":"Name","value":"agents"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AgentFields"}}]}},{"kind":"Field","name":{"kind":"Name","value":"objects"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ObjectMetadataFields"}}]}},{"kind":"Field","name":{"kind":"Name","value":"logicFunctions"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"LogicFunctionFields"}}]}}]}}]} as unknown as DocumentNode; export const FindOneApplicationByUniversalIdentifierDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"FindOneApplicationByUniversalIdentifier"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"universalIdentifier"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"UUID"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"findOneApplication"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"universalIdentifier"},"value":{"kind":"Variable","name":{"kind":"Name","value":"universalIdentifier"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ApplicationFields"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AgentFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Agent"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"prompt"}},{"kind":"Field","name":{"kind":"Name","value":"modelId"}},{"kind":"Field","name":{"kind":"Name","value":"responseFormat"}},{"kind":"Field","name":{"kind":"Name","value":"roleId"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"modelConfiguration"}},{"kind":"Field","name":{"kind":"Name","value":"evaluationInputs"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ObjectMetadataFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Object"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}},{"kind":"Field","name":{"kind":"Name","value":"labelSingular"}},{"kind":"Field","name":{"kind":"Name","value":"labelPlural"}},{"kind":"Field","name":{"kind":"Name","value":"color"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"isRemote"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isSystem"}},{"kind":"Field","name":{"kind":"Name","value":"isUIReadOnly"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"labelIdentifierFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"imageIdentifierFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"shortcut"}},{"kind":"Field","name":{"kind":"Name","value":"isLabelSyncedWithName"}},{"kind":"Field","name":{"kind":"Name","value":"isSearchable"}},{"kind":"Field","name":{"kind":"Name","value":"duplicateCriteria"}},{"kind":"Field","name":{"kind":"Name","value":"indexMetadataList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"indexWhereClause"}},{"kind":"Field","name":{"kind":"Name","value":"indexType"}},{"kind":"Field","name":{"kind":"Name","value":"isUnique"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"indexFieldMetadataList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"fieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"order"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"fieldsList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isSystem"}},{"kind":"Field","name":{"kind":"Name","value":"isUIReadOnly"}},{"kind":"Field","name":{"kind":"Name","value":"isNullable"}},{"kind":"Field","name":{"kind":"Name","value":"isUnique"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"defaultValue"}},{"kind":"Field","name":{"kind":"Name","value":"options"}},{"kind":"Field","name":{"kind":"Name","value":"settings"}},{"kind":"Field","name":{"kind":"Name","value":"isLabelSyncedWithName"}},{"kind":"Field","name":{"kind":"Name","value":"morphId"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"relation"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"sourceObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"sourceFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"morphRelations"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"sourceObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"sourceFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"LogicFunctionFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"LogicFunction"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"runtime"}},{"kind":"Field","name":{"kind":"Name","value":"timeoutSeconds"}},{"kind":"Field","name":{"kind":"Name","value":"sourceHandlerPath"}},{"kind":"Field","name":{"kind":"Name","value":"handlerName"}},{"kind":"Field","name":{"kind":"Name","value":"toolInputSchema"}},{"kind":"Field","name":{"kind":"Name","value":"isTool"}},{"kind":"Field","name":{"kind":"Name","value":"cronTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"databaseEventTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"httpRouteTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ApplicationFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Application"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"version"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"applicationRegistrationId"}},{"kind":"Field","name":{"kind":"Name","value":"applicationRegistration"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"latestAvailableVersion"}},{"kind":"Field","name":{"kind":"Name","value":"sourceType"}},{"kind":"Field","name":{"kind":"Name","value":"logoUrl"}}]}},{"kind":"Field","name":{"kind":"Name","value":"canBeUninstalled"}},{"kind":"Field","name":{"kind":"Name","value":"defaultRoleId"}},{"kind":"Field","name":{"kind":"Name","value":"settingsCustomTabFrontComponentId"}},{"kind":"Field","name":{"kind":"Name","value":"availablePackages"}},{"kind":"Field","name":{"kind":"Name","value":"applicationVariables"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"key"}},{"kind":"Field","name":{"kind":"Name","value":"value"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"isSecret"}}]}},{"kind":"Field","name":{"kind":"Name","value":"agents"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AgentFields"}}]}},{"kind":"Field","name":{"kind":"Name","value":"objects"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ObjectMetadataFields"}}]}},{"kind":"Field","name":{"kind":"Name","value":"logicFunctions"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"LogicFunctionFields"}}]}}]}}]} as unknown as DocumentNode; +export const FindOneApplicationSummaryDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"FindOneApplicationSummary"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"universalIdentifier"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"UUID"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"findOneApplication"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"universalIdentifier"},"value":{"kind":"Variable","name":{"kind":"Name","value":"universalIdentifier"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]} as unknown as DocumentNode; export const AuthorizeAppDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"authorizeApp"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"clientId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"codeChallenge"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"redirectUrl"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"state"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"authorizeApp"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"clientId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"clientId"}}},{"kind":"Argument","name":{"kind":"Name","value":"codeChallenge"},"value":{"kind":"Variable","name":{"kind":"Name","value":"codeChallenge"}}},{"kind":"Argument","name":{"kind":"Name","value":"redirectUrl"},"value":{"kind":"Variable","name":{"kind":"Name","value":"redirectUrl"}}},{"kind":"Argument","name":{"kind":"Name","value":"state"},"value":{"kind":"Variable","name":{"kind":"Name","value":"state"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"redirectUrl"}}]}}]}}]} as unknown as DocumentNode; export const EmailPasswordResetLinkDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"EmailPasswordResetLink"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"email"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"workspaceId"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"UUID"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"emailPasswordResetLink"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"email"},"value":{"kind":"Variable","name":{"kind":"Name","value":"email"}}},{"kind":"Argument","name":{"kind":"Name","value":"workspaceId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"workspaceId"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"success"}}]}}]}}]} as unknown as DocumentNode; export const GenerateApiKeyTokenDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"GenerateApiKeyToken"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"apiKeyId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"UUID"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"expiresAt"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"generateApiKeyToken"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"apiKeyId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"apiKeyId"}}},{"kind":"Argument","name":{"kind":"Name","value":"expiresAt"},"value":{"kind":"Variable","name":{"kind":"Name","value":"expiresAt"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"token"}}]}}]}}]} as unknown as DocumentNode; @@ -8908,4 +8937,5 @@ export const UpdateWorkspaceDocument = {"kind":"Document","definitions":[{"kind" export const UploadWorkspaceLogoDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"UploadWorkspaceLogo"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"file"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Upload"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"uploadWorkspaceLogo"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"file"},"value":{"kind":"Variable","name":{"kind":"Name","value":"file"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"url"}}]}}]}}]} as unknown as DocumentNode; export const CheckCustomDomainValidRecordsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CheckCustomDomainValidRecords"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"checkCustomDomainValidRecords"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"domain"}},{"kind":"Field","name":{"kind":"Name","value":"records"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"key"}},{"kind":"Field","name":{"kind":"Name","value":"value"}},{"kind":"Field","name":{"kind":"Name","value":"validationType"}},{"kind":"Field","name":{"kind":"Name","value":"status"}}]}}]}}]}}]} as unknown as DocumentNode; export const GetAiSystemPromptPreviewDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetAISystemPromptPreview"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"getAISystemPromptPreview"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"sections"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"content"}},{"kind":"Field","name":{"kind":"Name","value":"estimatedTokenCount"}}]}},{"kind":"Field","name":{"kind":"Name","value":"estimatedTokenCount"}}]}}]}}]} as unknown as DocumentNode; +export const GetPublicWorkspaceDataByIdDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetPublicWorkspaceDataById"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"UUID"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"getPublicWorkspaceDataById"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"displayName"}},{"kind":"Field","name":{"kind":"Name","value":"logo"}}]}}]}}]} as unknown as DocumentNode; export const GetWorkspaceFromInviteHashDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetWorkspaceFromInviteHash"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"inviteHash"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"findWorkspaceFromInviteHash"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"inviteHash"},"value":{"kind":"Variable","name":{"kind":"Name","value":"inviteHash"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"displayName"}},{"kind":"Field","name":{"kind":"Name","value":"logo"}},{"kind":"Field","name":{"kind":"Name","value":"allowImpersonation"}}]}}]}}]} as unknown as DocumentNode; \ No newline at end of file diff --git a/packages/twenty-front/src/modules/app/components/SettingsRoutes.tsx b/packages/twenty-front/src/modules/app/components/SettingsRoutes.tsx index 7f1e58d523..c933316895 100644 --- a/packages/twenty-front/src/modules/app/components/SettingsRoutes.tsx +++ b/packages/twenty-front/src/modules/app/components/SettingsRoutes.tsx @@ -204,6 +204,14 @@ const SettingsApplicationRegistrationDetails = lazy(() => })), ); +const SettingsApplicationRegistrationConfigVariableDetail = lazy(() => + import( + '~/pages/settings/applications/components/SettingsApplicationRegistrationConfigVariableDetail' + ).then((module) => ({ + default: module.SettingsApplicationRegistrationConfigVariableDetail, + })), +); + const SettingsAgentForm = lazy(() => import('~/pages/settings/ai/SettingsAgentForm').then((module) => ({ default: module.SettingsAgentForm, @@ -744,6 +752,10 @@ export const SettingsRoutes = ({ isAdminPageEnabled }: SettingsRoutesProps) => ( path={SettingsPath.ApplicationLogicFunctionDetail} element={} /> + } + /> { if (!isInSidePanel) { @@ -111,7 +106,7 @@ export const EmailThreadComposer = ({ if (isComposerOpen && composerState.canSend) { composerState.handleSend(); } - }, [isComposerOpen, composerState.canSend, composerState.handleSend]); + }, [isComposerOpen, composerState]); useHotkeysOnFocusedElement({ keys: ['ctrl+Enter,meta+Enter'], diff --git a/packages/twenty-front/src/modules/page-layout/widgets/fields/hooks/useFieldsWidgetEditorGroupsData.ts b/packages/twenty-front/src/modules/page-layout/widgets/fields/hooks/useFieldsWidgetEditorGroupsData.ts index 251a3dd0b7..1555d53db6 100644 --- a/packages/twenty-front/src/modules/page-layout/widgets/fields/hooks/useFieldsWidgetEditorGroupsData.ts +++ b/packages/twenty-front/src/modules/page-layout/widgets/fields/hooks/useFieldsWidgetEditorGroupsData.ts @@ -203,19 +203,13 @@ export const useFieldsWidgetEditorGroupsData = ({ return { groups: buildDefaultFieldsWidgetGroups({ fields: objectMetadataItem.fields, - objectNameSingular, labelIdentifierFieldMetadataItemId: labelIdentifierFieldMetadataItem?.id, }), ungroupedFields: [], editorMode: 'grouped' as const, }; - }, [ - objectMetadataItem, - objectNameSingular, - view, - labelIdentifierFieldMetadataItem, - ]); + }, [objectMetadataItem, view, labelIdentifierFieldMetadataItem]); return { ...result, diff --git a/packages/twenty-front/src/modules/page-layout/widgets/fields/hooks/useFieldsWidgetGroups.ts b/packages/twenty-front/src/modules/page-layout/widgets/fields/hooks/useFieldsWidgetGroups.ts index 5b56144416..2bd936e8e7 100644 --- a/packages/twenty-front/src/modules/page-layout/widgets/fields/hooks/useFieldsWidgetGroups.ts +++ b/packages/twenty-front/src/modules/page-layout/widgets/fields/hooks/useFieldsWidgetGroups.ts @@ -131,20 +131,13 @@ export const useFieldsWidgetGroups = ({ groups: filterDraftGroupsForDisplay( buildDefaultFieldsWidgetGroups({ fields: objectMetadataItem.fields, - objectNameSingular, labelIdentifierFieldMetadataItemId: labelIdentifierFieldMetadataItem?.id, }), ), displayMode: 'grouped', }; - }, [ - objectMetadataItem, - objectNameSingular, - labelIdentifierFieldMetadataItem, - view, - viewId, - ]); + }, [objectMetadataItem, labelIdentifierFieldMetadataItem, view, viewId]); return { groups, diff --git a/packages/twenty-front/src/modules/page-layout/widgets/fields/utils/buildDefaultFieldsWidgetGroups.ts b/packages/twenty-front/src/modules/page-layout/widgets/fields/utils/buildDefaultFieldsWidgetGroups.ts index 654125a2ad..e2cf1ff9ea 100644 --- a/packages/twenty-front/src/modules/page-layout/widgets/fields/utils/buildDefaultFieldsWidgetGroups.ts +++ b/packages/twenty-front/src/modules/page-layout/widgets/fields/utils/buildDefaultFieldsWidgetGroups.ts @@ -6,11 +6,9 @@ import { v4 as uuidv4 } from 'uuid'; export const buildDefaultFieldsWidgetGroups = ({ fields, - objectNameSingular, labelIdentifierFieldMetadataItemId, }: { fields: FieldMetadataItem[]; - objectNameSingular: string; labelIdentifierFieldMetadataItemId: string | undefined; }): FieldsWidgetGroup[] => { const eligibleFields = fields.filter((field) => diff --git a/packages/twenty-front/src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx b/packages/twenty-front/src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx index 7be739943b..f9d7c30912 100644 --- a/packages/twenty-front/src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx +++ b/packages/twenty-front/src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx @@ -348,7 +348,9 @@ export const SettingsAdminAI = () => { ) ) : ( )} diff --git a/packages/twenty-front/src/modules/settings/admin-panel/apps/components/SettingsAdminApps.tsx b/packages/twenty-front/src/modules/settings/admin-panel/apps/components/SettingsAdminApps.tsx index ad8efaea2b..76d4e75284 100644 --- a/packages/twenty-front/src/modules/settings/admin-panel/apps/components/SettingsAdminApps.tsx +++ b/packages/twenty-front/src/modules/settings/admin-panel/apps/components/SettingsAdminApps.tsx @@ -6,32 +6,34 @@ import { TableRow } from '@/ui/layout/table/components/TableRow'; import { useQuery } from '@apollo/client/react'; import { styled } from '@linaria/react'; import { t } from '@lingui/core/macro'; -import { useState } from 'react'; -import { getSettingsPath } from 'twenty-shared/utils'; +import { useContext, useState } from 'react'; +import { assertUnreachable, getSettingsPath } from 'twenty-shared/utils'; import { SettingsPath } from 'twenty-shared/types'; -import { H2Title, Status } from 'twenty-ui/display'; +import { + H2Title, + IconChevronRight, + OverflowingTextWithTooltip, +} from 'twenty-ui/display'; import { SearchInput } from 'twenty-ui/input'; import { Section } from 'twenty-ui/layout'; -import { UndecoratedLink } from 'twenty-ui/navigation'; -import { themeCssVariables } from 'twenty-ui/theme-constants'; +import { ThemeContext, themeCssVariables } from 'twenty-ui/theme-constants'; import { type ApplicationRegistrationFragmentFragment, + ApplicationRegistrationSourceType, FindAllApplicationRegistrationsDocument, } from '~/generated-metadata/graphql'; const StyledTableContainer = styled.div` + border-bottom: 1px solid ${themeCssVariables.border.color.light}; margin-top: ${themeCssVariables.spacing[3]}; `; -const StyledTableHeaderRowContainer = styled.div` - margin-bottom: ${themeCssVariables.spacing[2]}; -`; - -const TABLE_GRID = '1fr 1fr 100px 80px'; -const TABLE_GRID_MOBILE = '3fr 3fr 1fr 70px'; +const TABLE_GRID = '1fr 100px 100px 40px'; +const TABLE_GRID_MOBILE = '3fr 3fr 1fr 40px'; export const SettingsAdminApps = () => { const [searchQuery, setSearchQuery] = useState(''); + const { theme } = useContext(ThemeContext); const { data } = useQuery(FindAllApplicationRegistrationsDocument); @@ -51,6 +53,27 @@ export const SettingsAdminApps = () => { ); }); + const getFormattedSource = ( + registration: ApplicationRegistrationFragmentFragment, + ) => { + switch (registration.sourceType) { + case ApplicationRegistrationSourceType.TARBALL: { + return 'Tarball'; + } + case ApplicationRegistrationSourceType.NPM: { + return 'NPM'; + } + case ApplicationRegistrationSourceType.OAUTH_ONLY: { + return 'OAuth'; + } + case ApplicationRegistrationSourceType.LOCAL: { + return 'Local'; + } + default: + return assertUnreachable(registration.sourceType); + } + }; + return (
{ /> - - - {t`Name`} - {t`Source`} - {t`Listed`} - {t`Featured`} - - + + {t`Name`} + {t`Source`} + {t`Listed`} + + {filtered.map((registration) => ( - - - {registration.name} - - {registration.sourcePackage ?? registration.sourceType} - - - - - - - - - + + + + + {getFormattedSource(registration)} + + + {registration.isListed ? t`Yes` : t`No`} + + + + + ))}
diff --git a/packages/twenty-front/src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx b/packages/twenty-front/src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx index 8f6655308a..76d3003f1b 100644 --- a/packages/twenty-front/src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx +++ b/packages/twenty-front/src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx @@ -1,7 +1,6 @@ import { currentUserState } from '@/auth/states/currentUserState'; import { SettingsOptionCardContentButton } from '@/settings/components/SettingsOptions/SettingsOptionCardContentButton'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; -import { t } from '@lingui/core/macro'; import { SettingsPath } from 'twenty-shared/types'; import { IconArrowUp, IconLock } from 'twenty-ui/display'; import { Button } from 'twenty-ui/input'; @@ -9,9 +8,13 @@ import { Card } from 'twenty-ui/layout'; import { useNavigateSettings } from '~/hooks/useNavigateSettings'; export const SettingsEnterpriseFeatureGateCard = ({ + title, description, + buttonTitle, }: { + title: string; description: string; + buttonTitle: string; }) => { const currentUser = useAtomStateValue(currentUserState); const navigateSettings = useNavigateSettings(); @@ -22,12 +25,12 @@ export const SettingsEnterpriseFeatureGateCard = ({ void; }; -const StyledTableBody = styled.div` - display: flex; - flex-direction: column; - gap: ${themeCssVariables.spacing[2]}; - padding: ${themeCssVariables.spacing[2]} 0; -`; - type SettingsTableCardProps = { items: TableItem[]; rounded?: boolean; @@ -50,35 +42,27 @@ export const SettingsTableCard = ({ backgroundColor={themeCssVariables.background.secondary} > - - {items.map((item, index) => ( - ( + + - - {item.Icon && } - - - - {item.value} - - - ))} - + {item.Icon && } + + + + {item.value} + + + ))}
); diff --git a/packages/twenty-front/src/modules/settings/roles/role-permissions/object-level-permissions/record-level-permissions/components/SettingsRolePermissionsObjectLevelRecordLevelSection.tsx b/packages/twenty-front/src/modules/settings/roles/role-permissions/object-level-permissions/record-level-permissions/components/SettingsRolePermissionsObjectLevelRecordLevelSection.tsx index d275a2c91c..e99c5958ca 100644 --- a/packages/twenty-front/src/modules/settings/roles/role-permissions/object-level-permissions/record-level-permissions/components/SettingsRolePermissionsObjectLevelRecordLevelSection.tsx +++ b/packages/twenty-front/src/modules/settings/roles/role-permissions/object-level-permissions/record-level-permissions/components/SettingsRolePermissionsObjectLevelRecordLevelSection.tsx @@ -14,6 +14,7 @@ import { SettingsPath } from 'twenty-shared/types'; import { Button } from 'twenty-ui/input'; import { themeCssVariables } from 'twenty-ui/theme-constants'; import { useNavigateSettings } from '~/hooks/useNavigateSettings'; +import { OrganizationAdornment } from '~/pages/settings/enterprise/components/OrganizationAdornment'; const StyledContent = styled.div` padding-bottom: ${themeCssVariables.spacing[2]}; @@ -24,18 +25,6 @@ const StyledCardContainer = styled.div` overflow: hidden; `; -const StyledPillContainer = styled.span` - align-items: center; - background: ${themeCssVariables.background.secondary}; - border: 1px solid ${themeCssVariables.border.color.light}; - border-radius: 40px; - color: ${themeCssVariables.font.color.tertiary}; - display: inline-flex; - font-weight: ${themeCssVariables.font.weight.medium}; - gap: ${themeCssVariables.spacing[1]}; - padding: ${themeCssVariables.spacing[1]} ${themeCssVariables.spacing[2]}; -`; - type SettingsRolePermissionsObjectLevelRecordLevelSectionProps = { objectMetadataItem: EnrichedObjectMetadataItem; roleId: string; @@ -57,12 +46,7 @@ export const SettingsRolePermissionsObjectLevelRecordLevelSection = ({ - - {t`Organization`} - - } + adornment={} /> diff --git a/packages/twenty-front/src/modules/side-panel/pages/compose-email/components/SidePanelComposeEmailPage.tsx b/packages/twenty-front/src/modules/side-panel/pages/compose-email/components/SidePanelComposeEmailPage.tsx index 8d33382bac..8e50029ba6 100644 --- a/packages/twenty-front/src/modules/side-panel/pages/compose-email/components/SidePanelComposeEmailPage.tsx +++ b/packages/twenty-front/src/modules/side-panel/pages/compose-email/components/SidePanelComposeEmailPage.tsx @@ -58,7 +58,7 @@ export const SidePanelComposeEmailPage = () => { if (composerState.canSend) { composerState.handleSend(); } - }, [composerState.canSend, composerState.handleSend]); + }, [composerState]); useHotkeysOnFocusedElement({ keys: ['ctrl+Enter,meta+Enter'], diff --git a/packages/twenty-front/src/modules/ui/layout/page/components/SubMenuTopBarContainer.tsx b/packages/twenty-front/src/modules/ui/layout/page/components/SubMenuTopBarContainer.tsx index 35942f377b..878f94c6dd 100644 --- a/packages/twenty-front/src/modules/ui/layout/page/components/SubMenuTopBarContainer.tsx +++ b/packages/twenty-front/src/modules/ui/layout/page/components/SubMenuTopBarContainer.tsx @@ -17,6 +17,7 @@ type SubMenuTopBarContainerProps = { actionButton?: ReactNode; className?: string; links: BreadcrumbProps['links']; + tag?: JSX.Element; }; const StyledContainer = styled.div` @@ -25,10 +26,12 @@ const StyledContainer = styled.div` width: 100%; `; -const StyledTitle = styled.h3<{ reserveTitleSpace?: boolean }>` +const StyledTitle = styled.span<{ reserveTitleSpace?: boolean }>` color: ${themeCssVariables.font.color.primary}; + display: flex; font-size: ${themeCssVariables.font.size.lg}; font-weight: ${themeCssVariables.font.weight.semiBold}; + gap: ${themeCssVariables.spacing[2]}; line-height: 1.2; margin: ${themeCssVariables.spacing[8]} ${themeCssVariables.spacing[8]} ${themeCssVariables.spacing[2]}; @@ -39,6 +42,7 @@ const StyledTitle = styled.h3<{ reserveTitleSpace?: boolean }>` export const SubMenuTopBarContainer = ({ children, title, + tag, reserveTitleSpace, actionButton, className, @@ -54,6 +58,7 @@ export const SubMenuTopBarContainer = ({ {(isDefined(title) || reserveTitleSpace === true) && ( {title} + {tag} )} {children} diff --git a/packages/twenty-front/src/modules/workspace/graphql/queries/getPublicWorkspaceDataById.ts b/packages/twenty-front/src/modules/workspace/graphql/queries/getPublicWorkspaceDataById.ts new file mode 100644 index 0000000000..193ca1ab85 --- /dev/null +++ b/packages/twenty-front/src/modules/workspace/graphql/queries/getPublicWorkspaceDataById.ts @@ -0,0 +1,11 @@ +import { gql } from '@apollo/client'; + +export const GET_PUBLIC_WORKSPACE_DATA_BY_ID = gql` + query GetPublicWorkspaceDataById($id: UUID!) { + getPublicWorkspaceDataById(id: $id) { + id + displayName + logo + } + } +`; diff --git a/packages/twenty-front/src/pages/settings/accounts/SettingsAccountsConfiguration.tsx b/packages/twenty-front/src/pages/settings/accounts/SettingsAccountsConfiguration.tsx index bbca68df73..7b5c6a3c4e 100644 --- a/packages/twenty-front/src/pages/settings/accounts/SettingsAccountsConfiguration.tsx +++ b/packages/twenty-front/src/pages/settings/accounts/SettingsAccountsConfiguration.tsx @@ -1,14 +1,12 @@ import { useLingui } from '@lingui/react/macro'; import { useState } from 'react'; import { useNavigate, useParams } from 'react-router-dom'; -import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; import { type CalendarChannel } from '@/accounts/types/CalendarChannel'; import { type MessageChannel } from '@/accounts/types/MessageChannel'; import { SettingsPath } from 'twenty-shared/types'; import { GET_MY_CALENDAR_CHANNELS } from '@/settings/accounts/graphql/queries/getMyCalendarChannels'; import { GET_MY_MESSAGE_CHANNELS } from '@/settings/accounts/graphql/queries/getMyMessageChannels'; -import { settingsAccountsSelectedMessageChannelState } from '@/settings/accounts/states/settingsAccountsSelectedMessageChannelState'; import { useMutation, useQuery } from '@apollo/client/react'; import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar'; import { getSettingsPath, isDefined } from 'twenty-shared/utils'; @@ -32,9 +30,6 @@ export const SettingsAccountsConfiguration = () => { const [startChannelSyncMutation, { loading: isSubmitting }] = useMutation( StartChannelSyncDocument, ); - const setSettingsAccountsSelectedMessageChannel = useSetAtomState( - settingsAccountsSelectedMessageChannelState, - ); const [currentStep, setCurrentStep] = useState( diff --git a/packages/twenty-front/src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx b/packages/twenty-front/src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx index 2c29c0b299..df7fdd0187 100644 --- a/packages/twenty-front/src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx +++ b/packages/twenty-front/src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx @@ -298,11 +298,7 @@ export const SettingsAdminAiProviderDetail = () => { href: getSettingsPath(SettingsPath.AdminPanel), }, { - children: t`Admin Panel`, - href: getSettingsPath(SettingsPath.AdminPanel), - }, - { - children: t`AI`, + children: t`Admin Panel - AI`, href: AI_ADMIN_PATH, }, { diff --git a/packages/twenty-front/src/pages/settings/admin-panel/SettingsAdminApplicationRegistrationDetail.tsx b/packages/twenty-front/src/pages/settings/admin-panel/SettingsAdminApplicationRegistrationDetail.tsx index a4d46d59f7..9cfa511e98 100644 --- a/packages/twenty-front/src/pages/settings/admin-panel/SettingsAdminApplicationRegistrationDetail.tsx +++ b/packages/twenty-front/src/pages/settings/admin-panel/SettingsAdminApplicationRegistrationDetail.tsx @@ -1,13 +1,27 @@ import { useParams } from 'react-router-dom'; -import { useQuery } from '@apollo/client/react'; -import { FindOneAdminApplicationRegistrationDocument } from '~/generated-metadata/graphql'; -import type { ApplicationRegistrationData } from '~/pages/settings/applications/tabs/types/ApplicationRegistrationData'; +import { useMutation, useQuery } from '@apollo/client/react'; +import { + FindAllApplicationRegistrationsDocument, + FindOneAdminApplicationRegistrationDocument, + UpdateApplicationRegistrationDocument, +} from '~/generated-metadata/graphql'; import { getSettingsPath, isDefined } from 'twenty-shared/utils'; -import { SettingsApplicationRegistrationContent } from '~/pages/settings/applications/components/SettingsApplicationRegistrationContent'; import { SettingsPath } from 'twenty-shared/types'; import { useLingui } from '@lingui/react/macro'; import { SubMenuTopBarContainer } from '@/ui/layout/page/components/SubMenuTopBarContainer'; import { APPLICATION_REGISTRATION_ADMIN_PATH } from '@/settings/admin-panel/apps/constants/ApplicationRegistrationAdminPath'; +import { SettingsPageContainer } from '@/settings/components/SettingsPageContainer'; +import { SettingsAdminApplicationRegistrationDetailContent } from '~/pages/settings/admin-panel/SettingsAdminApplicationRegistrationDetailContent'; +import { SettingsOptionCardContentToggle } from '@/settings/components/SettingsOptions/SettingsOptionCardContentToggle'; +import { IconArrowBarToDown } from 'twenty-ui/display'; +import { Card, Section } from 'twenty-ui/layout'; +import { themeCssVariables } from 'twenty-ui/theme-constants'; +import { styled } from '@linaria/react'; + +const StyledToggleContainer = styled.div` + display: flex; + margin-top: ${themeCssVariables.spacing[4]}; +`; export const SettingsAdminApplicationRegistrationDetail = () => { const { t } = useLingui(); @@ -24,9 +38,17 @@ export const SettingsAdminApplicationRegistrationDetail = () => { }, ); - const registration = data?.findOneAdminApplicationRegistration as - | ApplicationRegistrationData - | undefined; + const [updateRegistration] = useMutation( + UpdateApplicationRegistrationDocument, + { + refetchQueries: [ + FindOneAdminApplicationRegistrationDocument, + FindAllApplicationRegistrationsDocument, + ], + }, + ); + + const registration = data?.findOneAdminApplicationRegistration; if (loading || !isDefined(registration)) { return null; @@ -41,20 +63,39 @@ export const SettingsAdminApplicationRegistrationDetail = () => { href: getSettingsPath(SettingsPath.AdminPanel), }, { - children: t`Admin Panel`, - href: getSettingsPath(SettingsPath.AdminPanel), - }, - { - children: t`App registrations`, + children: t`Admin Panel - Apps`, href: APPLICATION_REGISTRATION_ADMIN_PATH, }, { children: registration.name }, ]} > - + + +
+ + + + updateRegistration({ + variables: { + input: { + id: registration.id, + update: { isListed: checked }, + }, + }, + }) + } + /> + + +
+
); }; diff --git a/packages/twenty-front/src/pages/settings/admin-panel/SettingsAdminApplicationRegistrationDetailContent.tsx b/packages/twenty-front/src/pages/settings/admin-panel/SettingsAdminApplicationRegistrationDetailContent.tsx new file mode 100644 index 0000000000..fbdb31bb71 --- /dev/null +++ b/packages/twenty-front/src/pages/settings/admin-panel/SettingsAdminApplicationRegistrationDetailContent.tsx @@ -0,0 +1,274 @@ +import { + H2Title, + IconBox, + IconBrandDocker, + IconChartBar, + IconDownload, + IconStatusChange, + IconTag, + IconWorld, + IconGitBranch, +} from 'twenty-ui/display'; +import { Trans, useLingui } from '@lingui/react/macro'; +import { + SettingsTableCard, + type TableItem, +} from '@/settings/components/SettingsTableCard'; +import { + type ApplicationRegistration, + ApplicationRegistrationSourceType, + ApplicationRegistrationTarballUrlDocument, + FindApplicationRegistrationStatsDocument, + FindOneApplicationSummaryDocument, + GetPublicWorkspaceDataByIdDocument, +} from '~/generated-metadata/graphql'; +import { isNonEmptyString } from '@sniptt/guards'; +import { styled } from '@linaria/react'; +import { themeCssVariables } from 'twenty-ui/theme-constants'; +import { useQuery } from '@apollo/client/react'; +import { + AvatarOrIcon, + Chip, + ChipSize, + ChipVariant, + Tag, +} from 'twenty-ui/components'; +import { getSettingsPath, isDefined } from 'twenty-shared/utils'; +import { Section } from 'twenty-ui/layout'; +import { SettingsPath } from 'twenty-shared/types'; +import { SettingsApplicationRegistrationShareLinkButtons } from '~/pages/settings/applications/components/SettingsApplicationRegistrationShareLinkButtons'; + +const StyledSourceRow = styled.div` + align-items: center; + display: flex; + gap: ${themeCssVariables.spacing[1]}; +`; + +const StyledDownloadLink = styled.a` + color: ${themeCssVariables.font.color.tertiary}; + cursor: pointer; + text-decoration: underline; + &:hover { + color: ${themeCssVariables.font.color.primary}; + } +`; + +const StyledGeneralContainer = styled.div` + display: flex; + flex-direction: column; + gap: ${themeCssVariables.spacing[2]}; +`; + +export const SettingsAdminApplicationRegistrationDetailContent = ({ + registration, +}: { + registration: ApplicationRegistration; +}) => { + const { t } = useLingui(); + + const applicationRegistrationId = registration.id; + + const { data: tarballUrlData } = useQuery( + ApplicationRegistrationTarballUrlDocument, + { + variables: { id: applicationRegistrationId }, + skip: !applicationRegistrationId, + }, + ); + + const { data: applicationSummaryData } = useQuery( + FindOneApplicationSummaryDocument, + { + variables: { universalIdentifier: registration.universalIdentifier }, + skip: !registration.universalIdentifier, + }, + ); + + const isApplicationInstalled = isDefined( + applicationSummaryData?.findOneApplication, + ); + + const { data: ownerWorkspaceData } = useQuery( + GetPublicWorkspaceDataByIdDocument, + { + variables: { id: registration.ownerWorkspaceId ?? '' }, + skip: !registration.ownerWorkspaceId, + }, + ); + + const { data: statsData } = useQuery( + FindApplicationRegistrationStatsDocument, + { + variables: { id: applicationRegistrationId }, + skip: !applicationRegistrationId, + }, + ); + + const shareLink = getSettingsPath(SettingsPath.AvailableApplicationDetail, { + availableApplicationId: registration.universalIdentifier, + }); + + const ownerWorkspace = ownerWorkspaceData?.getPublicWorkspaceDataById; + + const generateItems = () => { + const items: TableItem[] = [ + { + Icon: IconWorld, + label: t`Universal ID`, + value: registration.universalIdentifier, + }, + ]; + + if (isDefined(ownerWorkspace?.displayName)) { + items.push({ + Icon: IconTag, + label: t`Owner`, + value: ( + + } + label={ownerWorkspace.displayName} + /> + ), + }); + } + + switch (registration.sourceType) { + case ApplicationRegistrationSourceType.NPM: + items.push({ + Icon: IconBox, + label: t`Package`, + value: 'NPM', + }); + break; + case ApplicationRegistrationSourceType.TARBALL: + items.push({ + Icon: IconBox, + label: t`Source`, + value: isNonEmptyString( + tarballUrlData?.applicationRegistrationTarballUrl, + ) ? ( + + Tarball + + Download + + + ) : ( + 'Tarball' + ), + }); + break; + case ApplicationRegistrationSourceType.LOCAL: + items.push({ + Icon: IconBox, + label: t`Source`, + value: 'Local', + }); + break; + case ApplicationRegistrationSourceType.OAUTH_ONLY: + items.push({ + Icon: IconBox, + label: t`Source`, + value: 'OAuth', + }); + break; + } + + if (isNonEmptyString(registration.latestAvailableVersion)) { + items.push({ + Icon: IconGitBranch, + label: t`Latest version`, + value: registration.latestAvailableVersion, + }); + } + + items.push({ + Icon: IconDownload, + label: t`Installed`, + value: isApplicationInstalled ? ( + + ) : ( + + ), + }); + + return items; + }; + + const stats = statsData?.findApplicationRegistrationStats; + + const hasStats = (stats?.activeInstalls ?? 0) > 0; + + const versionDistributionLabel = + stats?.versionDistribution + ?.map( + (entry: { version: string; count: number }) => + `${entry.version} (${entry.count})`, + ) + .join(', ') || '—'; + + const statsItems = [ + { + Icon: IconBrandDocker, + label: t`Active installs`, + value: stats?.activeInstalls ?? '—', + }, + { + Icon: IconStatusChange, + label: t`Most installed version`, + value: stats?.mostInstalledVersion ?? '—', + }, + { + Icon: IconChartBar, + label: t`Distribution`, + value: versionDistributionLabel, + }, + ]; + + return ( + <> +
+ + + + + +
+ {hasStats && ( +
+ + +
+ )} + + ); +}; diff --git a/packages/twenty-front/src/pages/settings/admin-panel/SettingsAdminConfigVariableDetails.tsx b/packages/twenty-front/src/pages/settings/admin-panel/SettingsAdminConfigVariableDetails.tsx index f377ed701f..d8d14b6cd2 100644 --- a/packages/twenty-front/src/pages/settings/admin-panel/SettingsAdminConfigVariableDetails.tsx +++ b/packages/twenty-front/src/pages/settings/admin-panel/SettingsAdminConfigVariableDetails.tsx @@ -128,11 +128,7 @@ export const SettingsAdminConfigVariableDetails = () => { href: getSettingsPath(SettingsPath.AdminPanel), }, { - children: t`Admin Panel`, - href: getSettingsPath(SettingsPath.AdminPanel), - }, - { - children: t`Config Variables`, + children: t`Admin Panel - Config`, href: getSettingsPath( SettingsPath.AdminPanel, undefined, diff --git a/packages/twenty-front/src/pages/settings/admin-panel/SettingsAdminIndicatorHealthStatus.tsx b/packages/twenty-front/src/pages/settings/admin-panel/SettingsAdminIndicatorHealthStatus.tsx index 04e7a106bc..dfe121bfd3 100644 --- a/packages/twenty-front/src/pages/settings/admin-panel/SettingsAdminIndicatorHealthStatus.tsx +++ b/packages/twenty-front/src/pages/settings/admin-panel/SettingsAdminIndicatorHealthStatus.tsx @@ -51,11 +51,7 @@ export const SettingsAdminIndicatorHealthStatus = () => { href: getSettingsPath(SettingsPath.AdminPanel), }, { - children: t`Admin Panel`, - href: getSettingsPath(SettingsPath.AdminPanel), - }, - { - children: t`Health Status`, + children: t`Admin Panel - Health`, href: getSettingsPath(SettingsPath.AdminPanelHealthStatus), }, { children: `${data?.getIndicatorHealthStatus?.label}` }, diff --git a/packages/twenty-front/src/pages/settings/admin-panel/SettingsAdminQueueDetail.tsx b/packages/twenty-front/src/pages/settings/admin-panel/SettingsAdminQueueDetail.tsx index dffa44181d..9385c34fd8 100644 --- a/packages/twenty-front/src/pages/settings/admin-panel/SettingsAdminQueueDetail.tsx +++ b/packages/twenty-front/src/pages/settings/admin-panel/SettingsAdminQueueDetail.tsx @@ -56,11 +56,11 @@ export const SettingsAdminQueueDetail = () => { title={t`Queue: ${queueName}`} links={[ { - children: t`Admin Panel`, + children: t`Other`, href: getSettingsPath(SettingsPath.AdminPanel), }, { - children: t`Health Status`, + children: t`Admin Panel - Health`, href: getSettingsPath(SettingsPath.AdminPanelHealthStatus), }, { diff --git a/packages/twenty-front/src/pages/settings/admin-panel/SettingsAdminWorkspaceChatThread.tsx b/packages/twenty-front/src/pages/settings/admin-panel/SettingsAdminWorkspaceChatThread.tsx index b002e522bd..395d285e33 100644 --- a/packages/twenty-front/src/pages/settings/admin-panel/SettingsAdminWorkspaceChatThread.tsx +++ b/packages/twenty-front/src/pages/settings/admin-panel/SettingsAdminWorkspaceChatThread.tsx @@ -44,11 +44,7 @@ export const SettingsAdminWorkspaceChatThread = () => { href: getSettingsPath(SettingsPath.AdminPanel), }, { - children: t`Admin Panel`, - href: getSettingsPath(SettingsPath.AdminPanel), - }, - { - children: t`AI`, + children: t`Admin Panel - AI`, href: AI_ADMIN_PATH, }, { diff --git a/packages/twenty-front/src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx b/packages/twenty-front/src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx index c7ec735e50..7f607d48ad 100644 --- a/packages/twenty-front/src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx +++ b/packages/twenty-front/src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx @@ -169,11 +169,7 @@ export const SettingsAdminWorkspaceDetail = () => { href: getSettingsPath(SettingsPath.AdminPanel), }, { - children: t`Admin Panel`, - href: getSettingsPath(SettingsPath.AdminPanel), - }, - { - children: t`AI`, + children: t`Admin Panel - AI`, href: AI_ADMIN_PATH, }, { diff --git a/packages/twenty-front/src/pages/settings/ai/components/SettingsAIUsageTab.tsx b/packages/twenty-front/src/pages/settings/ai/components/SettingsAIUsageTab.tsx index a345e5d853..ab6133a23d 100644 --- a/packages/twenty-front/src/pages/settings/ai/components/SettingsAIUsageTab.tsx +++ b/packages/twenty-front/src/pages/settings/ai/components/SettingsAIUsageTab.tsx @@ -50,7 +50,9 @@ export const SettingsAIUsageTab = () => { } />
); diff --git a/packages/twenty-front/src/pages/settings/applications/SettingsApplicationRegistrationDetails.tsx b/packages/twenty-front/src/pages/settings/applications/SettingsApplicationRegistrationDetails.tsx index 7a6202eb43..5b95f155ac 100644 --- a/packages/twenty-front/src/pages/settings/applications/SettingsApplicationRegistrationDetails.tsx +++ b/packages/twenty-front/src/pages/settings/applications/SettingsApplicationRegistrationDetails.tsx @@ -3,13 +3,10 @@ import { useQuery } from '@apollo/client/react'; import { useParams } from 'react-router-dom'; import { SettingsPath } from 'twenty-shared/types'; import { getSettingsPath, isDefined } from 'twenty-shared/utils'; -import { - FindApplicationRegistrationStatsDocument, - FindOneApplicationRegistrationDocument, -} from '~/generated-metadata/graphql'; -import { type ApplicationRegistrationData } from '~/pages/settings/applications/tabs/types/ApplicationRegistrationData'; +import { FindOneApplicationRegistrationDocument } from '~/generated-metadata/graphql'; import { SettingsApplicationRegistrationContent } from '~/pages/settings/applications/components/SettingsApplicationRegistrationContent'; import { useLingui } from '@lingui/react/macro'; +import { Tag } from 'twenty-ui/components'; export const SettingsApplicationRegistrationDetails = () => { const { t } = useLingui(); @@ -23,21 +20,7 @@ export const SettingsApplicationRegistrationDetails = () => { skip: !applicationRegistrationId, }); - const { data: statsData } = useQuery( - FindApplicationRegistrationStatsDocument, - { - variables: { id: applicationRegistrationId }, - skip: !applicationRegistrationId, - }, - ); - - const registration = data?.findOneApplicationRegistration as - | ApplicationRegistrationData - | undefined; - - const stats = statsData?.findApplicationRegistrationStats; - - const hasActiveInstalls = (stats?.activeInstalls ?? 0) > 0; + const registration = data?.findOneApplicationRegistration; if (loading || !isDefined(registration)) { return null; @@ -46,22 +29,25 @@ export const SettingsApplicationRegistrationDetails = () => { return ( } links={[ { children: t`Workspace`, href: getSettingsPath(SettingsPath.Workspace), }, { - children: t`Applications`, - href: getSettingsPath(SettingsPath.Applications), + children: t`Applications - Developer`, + href: getSettingsPath( + SettingsPath.Applications, + undefined, + undefined, + 'developer', + ), }, { children: registration.name }, ]} > - + ); }; diff --git a/packages/twenty-front/src/pages/settings/applications/SettingsApplications.tsx b/packages/twenty-front/src/pages/settings/applications/SettingsApplications.tsx index b4439da3e3..1240329ae4 100644 --- a/packages/twenty-front/src/pages/settings/applications/SettingsApplications.tsx +++ b/packages/twenty-front/src/pages/settings/applications/SettingsApplications.tsx @@ -9,13 +9,10 @@ import { useLingui } from '@lingui/react/macro'; import { SettingsPath } from 'twenty-shared/types'; import { getSettingsPath } from 'twenty-shared/utils'; import { IconApps, IconCode, IconDownload } from 'twenty-ui/display'; -import { useQuery } from '@apollo/client/react'; import { FeatureFlagKey, PermissionFlagType, - FindManyApplicationsDocument, } from '~/generated-metadata/graphql'; -import { SettingsApplicationsTable } from '~/pages/settings/applications/components/SettingsApplicationsTable'; import { SettingsApplicationsAvailableTab } from '~/pages/settings/applications/tabs/SettingsApplicationsAvailableTab'; import { SettingsApplicationsDeveloperTab } from '~/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab'; import { SettingsApplicationsInstalledTab } from '~/pages/settings/applications/tabs/SettingsApplicationsInstalledTab'; diff --git a/packages/twenty-front/src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx b/packages/twenty-front/src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx index 4700e4b0b5..52754bc316 100644 --- a/packages/twenty-front/src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx +++ b/packages/twenty-front/src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx @@ -222,7 +222,6 @@ export const SettingsAvailableApplicationDetails = () => { const sourceType = detail?.sourceType; const isNpmApp = sourceType === ApplicationRegistrationSourceType.NPM; const registrationId = detail?.id; - const sourcePackage = detail?.sourcePackage; const sourcePackageUrl = isNpmApp && detail?.sourcePackage ? `https://www.npmjs.com/package/${detail.sourcePackage}` diff --git a/packages/twenty-front/src/pages/settings/applications/components/SettingsApplicationDetailTitle.tsx b/packages/twenty-front/src/pages/settings/applications/components/SettingsApplicationDetailTitle.tsx index 66bc765fd9..0ac70d5712 100644 --- a/packages/twenty-front/src/pages/settings/applications/components/SettingsApplicationDetailTitle.tsx +++ b/packages/twenty-front/src/pages/settings/applications/components/SettingsApplicationDetailTitle.tsx @@ -88,9 +88,11 @@ const StyledUnlistedBanner = styled.div` color: ${themeCssVariables.font.color.secondary}; display: flex; font-size: ${themeCssVariables.font.size.md}; + font-weight: ${themeCssVariables.font.weight.regular}; gap: ${themeCssVariables.spacing[2]}; - margin-bottom: ${themeCssVariables.spacing[4]}; - padding: ${themeCssVariables.spacing[3]} ${themeCssVariables.spacing[4]}; + justify-content: center; + margin-bottom: ${themeCssVariables.spacing[8]}; + padding: ${themeCssVariables.spacing[3]}; `; export const SettingsApplicationDetailTitle = ({ @@ -104,7 +106,7 @@ export const SettingsApplicationDetailTitle = ({ {isUnlisted && ( - {t`This application is not listed on the marketplace. It was shared via a direct link.`} + {t`Application not listed on the marketplace. It was shared via a direct link`} )} diff --git a/packages/twenty-front/src/pages/settings/applications/components/SettingsApplicationRegistrationConfigVariableDetail.tsx b/packages/twenty-front/src/pages/settings/applications/components/SettingsApplicationRegistrationConfigVariableDetail.tsx new file mode 100644 index 0000000000..4bae095713 --- /dev/null +++ b/packages/twenty-front/src/pages/settings/applications/components/SettingsApplicationRegistrationConfigVariableDetail.tsx @@ -0,0 +1,236 @@ +import { useLingui } from '@lingui/react/macro'; +import { useParams } from 'react-router-dom'; +import { useState } from 'react'; +import { + FindApplicationRegistrationVariablesDocument, + FindOneApplicationRegistrationDocument, + UpdateApplicationRegistrationVariableDocument, +} from '~/generated-metadata/graphql'; +import { useMutation, useQuery } from '@apollo/client/react'; +import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar'; +import { isNonEmptyString } from '@sniptt/guards'; +import { SubMenuTopBarContainer } from '@/ui/layout/page/components/SubMenuTopBarContainer'; +import { getSettingsPath } from 'twenty-shared/utils'; +import { SettingsPath } from 'twenty-shared/types'; +import { Tag } from 'twenty-ui/components'; +import { styled } from '@linaria/react'; +import { H3Title, IconCheck, IconX } from 'twenty-ui/display'; +import { SettingsPageContainer } from '@/settings/components/SettingsPageContainer'; +import { themeCssVariables } from 'twenty-ui/theme-constants'; +import { Button } from 'twenty-ui/input'; +import { ConfirmationModal } from '@/ui/layout/modal/components/ConfirmationModal'; +import { TextInput } from '@/ui/input/components/TextInput'; +import { useModal } from '@/ui/layout/modal/hooks/useModal'; +import { SettingsApplicationRegistrationConfigVariableStatus } from '~/pages/settings/applications/components/SettingsApplicationRegistrationConfigVariableStatus'; +import { Section } from 'twenty-ui/layout'; + +const RESET_VARIABLE_MODAL_ID = + 'reset-application-registration-config-variable-modal'; + +const StyledRow = styled.div` + display: flex; + gap: ${themeCssVariables.spacing[2]}; +`; + +const StyledButtonContainer = styled.div` + align-items: center; + display: flex; + gap: ${themeCssVariables.spacing[1]}; + min-width: 200px; +`; + +export const SettingsApplicationRegistrationConfigVariableDetail = () => { + const { t } = useLingui(); + const { enqueueErrorSnackBar, enqueueSuccessSnackBar } = useSnackBar(); + const { variableKey } = useParams(); + const [value, setValue] = useState(''); + const [isEditing, setIsEditing] = useState(false); + const [isSubmitting, setIsSubmitting] = useState(false); + const { openModal } = useModal(); + + const { applicationRegistrationId = '' } = useParams<{ + applicationRegistrationId: string; + }>(); + + const { data: applicationRegistrationData } = useQuery( + FindOneApplicationRegistrationDocument, + { + variables: { id: applicationRegistrationId }, + skip: !applicationRegistrationId, + }, + ); + + const registration = + applicationRegistrationData?.findOneApplicationRegistration; + + const { data: variablesData } = useQuery( + FindApplicationRegistrationVariablesDocument, + { + variables: { applicationRegistrationId }, + skip: !applicationRegistrationId, + }, + ); + + const variable = ( + variablesData?.findApplicationRegistrationVariables ?? [] + ).find((variable) => variable.key === variableKey); + + const [updateVariable] = useMutation( + UpdateApplicationRegistrationVariableDocument, + { + refetchQueries: [FindApplicationRegistrationVariablesDocument], + }, + ); + + if (!variable || !registration) { + return null; + } + + const handleXButtonClick = () => { + if (!isEditing) { + openModal(RESET_VARIABLE_MODAL_ID); + return; + } + + setValue(''); + setIsEditing(false); + }; + + const handleSaveVariableValue = async ({ + resetValue, + }: { + resetValue?: boolean; + }) => { + const variableKey = variable.key; + + if (!isNonEmptyString(value) && !resetValue) { + return; + } + + try { + setIsSubmitting(true); + await updateVariable({ + variables: { + input: { + id: variable.id, + update: { + value, + resetValue, + }, + }, + }, + }); + enqueueSuccessSnackBar({ + message: t`Variable ${variableKey} updated`, + }); + } catch { + enqueueErrorSnackBar({ + message: t`Error updating variable`, + }); + } finally { + setIsSubmitting(false); + setValue(''); + setIsEditing(false); + } + }; + + const handleConfirmReset = async () => { + await handleSaveVariableValue({ resetValue: true }); + }; + + return ( + } + links={[ + { + children: t`Workspace`, + href: getSettingsPath(SettingsPath.Workspace), + }, + { + children: t`Applications - Developer`, + href: getSettingsPath( + SettingsPath.Applications, + undefined, + undefined, + 'developer', + ), + }, + { + children: t`${registration.name} - Config`, + href: getSettingsPath( + SettingsPath.ApplicationRegistrationDetail, + { applicationRegistrationId }, + undefined, + 'config', + ), + }, + { + children: variableKey, + }, + ]} + > + +
+ + {variable.key} + {variable.isRequired && ( + * + )} + + } + description={variable.description} + /> +
+ +
+ + { + setValue(value); + setIsEditing(true); + }} + fullWidth + /> + + +
+
+ + +
+ ); +}; diff --git a/packages/twenty-front/src/pages/settings/applications/components/SettingsApplicationRegistrationConfigVariableStatus.tsx b/packages/twenty-front/src/pages/settings/applications/components/SettingsApplicationRegistrationConfigVariableStatus.tsx new file mode 100644 index 0000000000..9512a2fbe5 --- /dev/null +++ b/packages/twenty-front/src/pages/settings/applications/components/SettingsApplicationRegistrationConfigVariableStatus.tsx @@ -0,0 +1,19 @@ +import { Status } from 'twenty-ui/display'; +import { type ApplicationRegistrationVariable } from '~/generated-metadata/graphql'; +import { useLingui } from '@lingui/react/macro'; + +export const SettingsApplicationRegistrationConfigVariableStatus = ({ + variable, +}: { + variable: ApplicationRegistrationVariable; +}) => { + const { t } = useLingui(); + + return variable.isFilled ? ( + + ) : variable.isRequired ? ( + + ) : ( + + ); +}; diff --git a/packages/twenty-front/src/pages/settings/applications/components/SettingsApplicationRegistrationContent.tsx b/packages/twenty-front/src/pages/settings/applications/components/SettingsApplicationRegistrationContent.tsx index 05831b7226..3c9488af14 100644 --- a/packages/twenty-front/src/pages/settings/applications/components/SettingsApplicationRegistrationContent.tsx +++ b/packages/twenty-front/src/pages/settings/applications/components/SettingsApplicationRegistrationContent.tsx @@ -3,23 +3,27 @@ import { TabList } from '@/ui/layout/tab-list/components/TabList'; import { activeTabIdComponentState } from '@/ui/layout/tab-list/states/activeTabIdComponentState'; import { useAtomComponentStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomComponentStateValue'; import { useLingui } from '@lingui/react/macro'; -import { IconInfoCircle, IconKey, IconWorld } from 'twenty-ui/display'; -import { type ApplicationRegistrationData } from '~/pages/settings/applications/tabs/types/ApplicationRegistrationData'; +import { + IconInfoCircle, + IconKey, + IconSettings, + IconWorld, +} from 'twenty-ui/display'; import { SettingsApplicationRegistrationGeneralTab } from '~/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab'; import { SettingsApplicationRegistrationOAuthTab } from '~/pages/settings/applications/tabs/SettingsApplicationRegistrationOAuthTab'; import { SettingsApplicationRegistrationDistributionTab } from '~/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab'; +import { type ApplicationRegistration } from '~/generated-metadata/graphql'; +import { SettingsApplicationRegistrationConfigTab } from '~/pages/settings/applications/tabs/SettingsApplicationRegistrationConfigTab'; const REGISTRATION_DETAIL_TAB_LIST_ID = 'application-registration-detail-tab-list'; type SettingsApplicationRegistrationContentProps = { - registration: ApplicationRegistrationData; - hasActiveInstalls: boolean; + registration: ApplicationRegistration; }; export const SettingsApplicationRegistrationContent = ({ registration, - hasActiveInstalls, }: SettingsApplicationRegistrationContentProps) => { const { t } = useLingui(); @@ -32,10 +36,17 @@ export const SettingsApplicationRegistrationContent = ({ { id: 'general', title: t`General`, Icon: IconInfoCircle }, { id: 'oauth', title: t`OAuth`, Icon: IconKey }, { id: 'distribution', title: t`Distribution`, Icon: IconWorld }, + { id: 'config', title: t`Config`, Icon: IconSettings }, ]; const renderActiveTabContent = () => { switch (activeTabId) { + case 'config': + return ( + + ); case 'oauth': return ( ); } diff --git a/packages/twenty-front/src/pages/settings/applications/components/SettingsApplicationRegistrationRedirectURIsInput.tsx b/packages/twenty-front/src/pages/settings/applications/components/SettingsApplicationRegistrationRedirectURIsInput.tsx new file mode 100644 index 0000000000..46e56595b9 --- /dev/null +++ b/packages/twenty-front/src/pages/settings/applications/components/SettingsApplicationRegistrationRedirectURIsInput.tsx @@ -0,0 +1,95 @@ +import { styled } from '@linaria/react'; +import { zodResolver } from '@hookform/resolvers/zod'; +import { useEffect } from 'react'; +import { Controller, useForm } from 'react-hook-form'; +import { z } from 'zod'; + +import { SettingsTextInput } from '@/ui/input/components/SettingsTextInput'; +import { useLingui } from '@lingui/react/macro'; +import { Button } from 'twenty-ui/input'; +import { themeCssVariables } from 'twenty-ui/theme-constants'; + +const StyledContainer = styled.div` + display: flex; + flex-direction: row; +`; + +const StyledLinkContainer = styled.div` + flex: 1; + margin-right: ${themeCssVariables.spacing[2]}; +`; + +type SettingsApplicationRegistrationRedirectURIsInputProps = { + updateRedirectUris: (newRedirectUris: string[]) => void; + redirectUris: string[]; +}; + +type FormInput = { + redirectUri: string; +}; + +export const SettingsApplicationRegistrationRedirectURIsInput = ({ + updateRedirectUris, + redirectUris, +}: SettingsApplicationRegistrationRedirectURIsInputProps) => { + const { t } = useLingui(); + + const validationSchema = (redirectUris: string[]) => + z + .object({ + redirectUri: z + .string() + .trim() + .min(1, 'URI is required') + .url(t`Please enter a valid URL`) + .refine( + (value) => !redirectUris.includes(value), + t`URI is already in redirect URIs list`, + ), + }) + .required(); + + const { reset, handleSubmit, control, formState } = useForm({ + mode: 'onSubmit', + resolver: zodResolver(validationSchema(redirectUris)), + defaultValues: { + redirectUri: '', + }, + }); + + const submit = handleSubmit((data) => { + updateRedirectUris([...redirectUris, data.redirectUri]); + }); + + const { isSubmitSuccessful } = formState; + + useEffect(() => { + if (isSubmitSuccessful) { + reset(); + } + }, [isSubmitSuccessful, reset]); + + return ( +
+ + + ( + + )} + /> + +