diff --git a/packages/twenty-front/src/hooks/useNavigateSettings.ts b/packages/twenty-front/src/hooks/useNavigateSettings.ts index 291524bf63..7889399da4 100644 --- a/packages/twenty-front/src/hooks/useNavigateSettings.ts +++ b/packages/twenty-front/src/hooks/useNavigateSettings.ts @@ -15,10 +15,11 @@ export const useNavigateSettings = () => { replace?: boolean; state?: any; }, + hash?: string, ) => { openSettingsMenu(); - const path = getSettingsPath(to, params, queryParams); + const path = getSettingsPath(to, params, queryParams, hash); return navigate(path, options); }; }; diff --git a/packages/twenty-front/src/pages/settings/admin-panel/SettingsAdminApplicationRegistrationDangerZone.tsx b/packages/twenty-front/src/pages/settings/admin-panel/SettingsAdminApplicationRegistrationDangerZone.tsx index bd4fd7d1d3..17525b624f 100644 --- a/packages/twenty-front/src/pages/settings/admin-panel/SettingsAdminApplicationRegistrationDangerZone.tsx +++ b/packages/twenty-front/src/pages/settings/admin-panel/SettingsAdminApplicationRegistrationDangerZone.tsx @@ -9,12 +9,12 @@ import { isNonEmptyString } from '@sniptt/guards'; import { useState } from 'react'; import { SettingsPath } from 'twenty-shared/types'; import { + AppTooltip, H1Title, H1TitleFontColor, H2Title, IconShare, IconTrash, - AppTooltip, TooltipDelay, } from 'twenty-ui/display'; import { Button } from 'twenty-ui/input'; @@ -50,8 +50,10 @@ const StyledDangerButtonGroup = styled.div` export const SettingsAdminApplicationRegistrationDangerZone = ({ registration, + fromAdmin = false, }: { registration: ApplicationRegistration; + fromAdmin?: boolean; }) => { const { t } = useLingui(); const navigate = useNavigateSettings(); @@ -97,7 +99,28 @@ export const SettingsAdminApplicationRegistrationDangerZone = ({ await deleteRegistration({ variables: { id: applicationRegistrationId }, }); - navigate(SettingsPath.Applications); + + if (fromAdmin) { + navigate( + SettingsPath.AdminPanel, + undefined, + undefined, + undefined, + '#app', + ); + } else { + navigate( + SettingsPath.Applications, + undefined, + undefined, + undefined, + '#developer', + ); + } + + enqueueSuccessSnackBar({ + message: t`App deleted successfully`, + }); } catch { enqueueErrorSnackBar({ message: t`Error deleting app`, 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 d6dc485ffb..588226436f 100644 --- a/packages/twenty-front/src/pages/settings/admin-panel/SettingsAdminApplicationRegistrationDetail.tsx +++ b/packages/twenty-front/src/pages/settings/admin-panel/SettingsAdminApplicationRegistrationDetail.tsx @@ -82,7 +82,7 @@ export const SettingsAdminApplicationRegistrationDetail = () => { return ( ); } diff --git a/packages/twenty-front/src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx b/packages/twenty-front/src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx index 0b0ac05d7f..770752634e 100644 --- a/packages/twenty-front/src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx +++ b/packages/twenty-front/src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx @@ -8,15 +8,15 @@ import { SettingsAdminApplicationRegistrationGeneralToggles } from '~/pages/sett export const SettingsApplicationRegistrationGeneralTab = ({ registration, - displayAdminToggles, + fromAdmin, }: { registration: ApplicationRegistration; - displayAdminToggles?: boolean; + fromAdmin?: boolean; }) => { return ( <> - {displayAdminToggles && ( + {fromAdmin && ( @@ -26,6 +26,7 @@ export const SettingsApplicationRegistrationGeneralTab = ({ /> ); diff --git a/packages/twenty-front/src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx b/packages/twenty-front/src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx index d24fc74a02..9bc88c5c42 100644 --- a/packages/twenty-front/src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx +++ b/packages/twenty-front/src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx @@ -65,48 +65,48 @@ export const SettingsAvailableApplicationDetailContentTab = ({ } } - return Array.from(groupMap.values()).map((group) => { - const appObject = objects.find( - (obj) => obj.universalIdentifier === group.objectUniversalIdentifier, - ); - - if (isDefined(appObject)) { - return { - key: appObject.nameSingular, - labelPlural: appObject.labelPlural, - icon: appObject.icon ?? undefined, - fieldsCount: group.count, - tagItem: { applicationId }, - }; - } - - const standardObjectName = findObjectNameByUniversalIdentifier( - group.objectUniversalIdentifier, - ); - - const objectMetadataItem = isDefined(standardObjectName) - ? objectMetadataItems.find( - (item) => item.nameSingular === standardObjectName, - ) - : undefined; - - if (!isDefined(objectMetadataItem)) { - throw new Error( - `Could not resolve object for universalIdentifier: ${group.objectUniversalIdentifier}`, + return Array.from(groupMap.values()) + .map((group) => { + const appObject = objects.find( + (obj) => obj.universalIdentifier === group.objectUniversalIdentifier, ); - } - return { - key: objectMetadataItem.nameSingular, - labelPlural: objectMetadataItem.labelPlural, - icon: objectMetadataItem.icon ?? undefined, - fieldsCount: group.count, - link: getSettingsPath(SettingsPath.ObjectDetail, { - objectNamePlural: objectMetadataItem.namePlural, - }), - tagItem: {}, - }; - }); + if (isDefined(appObject)) { + return { + key: appObject.nameSingular, + labelPlural: appObject.labelPlural, + icon: appObject.icon ?? undefined, + fieldsCount: group.count, + tagItem: { applicationId }, + }; + } + + const standardObjectName = findObjectNameByUniversalIdentifier( + group.objectUniversalIdentifier, + ); + + const objectMetadataItem = isDefined(standardObjectName) + ? objectMetadataItems.find( + (item) => item.nameSingular === standardObjectName, + ) + : undefined; + + if (!isDefined(objectMetadataItem)) { + return; + } + + return { + key: objectMetadataItem.nameSingular, + labelPlural: objectMetadataItem.labelPlural, + icon: objectMetadataItem.icon ?? undefined, + fieldsCount: group.count, + link: getSettingsPath(SettingsPath.ObjectDetail, { + objectNamePlural: objectMetadataItem.namePlural, + }), + tagItem: {}, + }; + }) + .filter(isDefined); }, [fields, objectMetadataItems, objects, applicationId]); const roles = content?.roles ?? [];