Added option to prevent sending requests to twenty-icons (#16723)

Solution for #15891


https://github.com/user-attachments/assets/82ce5c4b-0a78-45a8-8196-413473887820

---------

Co-authored-by: Charles Bochet <charles@twenty.com>
This commit is contained in:
BOHEUS
2026-01-30 15:56:22 +00:00
committed by GitHub
parent cc1ca630fd
commit 2bcae523ac
34 changed files with 156 additions and 17 deletions
+1 -1
View File
@@ -25,7 +25,7 @@ const pagesCoverage = {
};
const performanceCoverage = {
branches: 35,
branches: 33,
statements: 60,
lines: 60,
functions: 45,
@@ -16,6 +16,7 @@ import { recordStoreFamilyState } from '@/object-record/record-store/states/reco
import { dateLocaleState } from '~/localization/states/dateLocaleState';
import { beautifyPastDateRelativeToNow } from '~/utils/date-utils';
import { isUndefinedOrNull } from '~/utils/isUndefinedOrNull';
import { allowRequestsToTwentyIconsState } from '@/client-config/states/allowRequestsToTwentyIcons';
const StyledTimelineItemContainer = styled.div`
color: ${({ theme }) => theme.font.color.primary};
@@ -92,6 +93,11 @@ export const EventRow = ({
mainObjectMetadataItem,
}: EventRowProps) => {
const currentWorkspaceMember = useRecoilValue(currentWorkspaceMemberState);
const allowRequestsToTwentyIcons = useRecoilValue(
allowRequestsToTwentyIconsState,
);
const { localeCatalog } = useRecoilValue(dateLocaleState);
const { recordId } = useContext(TimelineActivityContext);
@@ -120,6 +126,7 @@ export const EventRow = ({
const labelIdentifier = getObjectRecordIdentifier({
objectMetadataItem: mainObjectMetadataItem,
record: recordFromStore,
allowRequestsToTwentyIcons,
});
const authorFullName = getTimelineActivityAuthorFullName(
@@ -29,6 +29,7 @@ import { useCallback } from 'react';
import { useRecoilState, useSetRecoilState } from 'recoil';
import { clientConfigApiStatusState } from '@/client-config/states/clientConfigApiStatusState';
import { getClientConfig } from '@/client-config/utils/getClientConfig';
import { allowRequestsToTwentyIconsState } from '@/client-config/states/allowRequestsToTwentyIcons';
type UseClientConfigResult = {
data: { clientConfig: ClientConfig } | undefined;
@@ -110,6 +111,11 @@ export const useClientConfig = (): UseClientConfigResult => {
const setIsEmailingDomainsEnabled = useSetRecoilState(
isEmailingDomainsEnabledState,
);
const setAllowRequestsToTwentyIcons = useSetRecoilState(
allowRequestsToTwentyIconsState,
);
const setIsCloudflareIntegrationEnabled = useSetRecoilState(
isCloudflareIntegrationEnabledState,
);
@@ -188,6 +194,7 @@ export const useClientConfig = (): UseClientConfigResult => {
setCalendarBookingPageId(clientConfig?.calendarBookingPageId ?? null);
setIsImapSmtpCaldavEnabled(clientConfig?.isImapSmtpCaldavEnabled);
setIsEmailingDomainsEnabled(clientConfig?.isEmailingDomainsEnabled);
setAllowRequestsToTwentyIcons(clientConfig?.allowRequestsToTwentyIcons);
setIsCloudflareIntegrationEnabled(
clientConfig?.isCloudflareIntegrationEnabled,
);
@@ -230,6 +237,7 @@ export const useClientConfig = (): UseClientConfigResult => {
setMicrosoftMessagingEnabled,
setSentryConfig,
setSupportChat,
setAllowRequestsToTwentyIcons,
]);
return {
@@ -0,0 +1,6 @@
import { createState } from 'twenty-ui/utilities';
export const allowRequestsToTwentyIconsState = createState<boolean>({
key: 'allowRequestsToTwentyIcons',
defaultValue: true,
});
@@ -38,4 +38,5 @@ export type ClientConfig = {
signInPrefilled: boolean;
support: Support;
isTwoFactorAuthenticationEnabled: boolean;
allowRequestsToTwentyIcons: boolean;
};
@@ -3,6 +3,8 @@ import { CommandMenuContextRecordChipAvatars } from '@/command-menu/components/C
import { getSelectedRecordsContextText } from '@/command-menu/utils/getRecordContextText';
import { useFindManyRecordsSelectedInContextStore } from '@/context-store/hooks/useFindManyRecordsSelectedInContextStore';
import { useObjectMetadataItemById } from '@/object-metadata/hooks/useObjectMetadataItemById';
import { useRecoilValue } from 'recoil';
import { allowRequestsToTwentyIconsState } from '@/client-config/states/allowRequestsToTwentyIcons';
export const CommandMenuContextRecordsChip = ({
objectMetadataItemId,
@@ -14,6 +16,9 @@ export const CommandMenuContextRecordsChip = ({
const { objectMetadataItem } = useObjectMetadataItemById({
objectId: objectMetadataItemId,
});
const allowRequestsToTwentyIcons = useRecoilValue(
allowRequestsToTwentyIconsState,
);
const { records, loading, totalCount } =
useFindManyRecordsSelectedInContextStore({
@@ -39,6 +44,7 @@ export const CommandMenuContextRecordsChip = ({
objectMetadataItem,
records,
totalCount,
allowRequestsToTwentyIcons,
)}
Icons={Avatars}
/>
@@ -19,6 +19,7 @@ import { FieldMetadataType } from '~/generated-metadata/graphql';
import { dateLocaleState } from '~/localization/states/dateLocaleState';
import { beautifyPastDateRelativeToNow } from '~/utils/date-utils';
import { CommandMenuPageInfoLayout } from './CommandMenuPageInfoLayout';
import { allowRequestsToTwentyIconsState } from '@/client-config/states/allowRequestsToTwentyIcons';
export const CommandMenuRecordInfo = ({
commandMenuPageInstanceId,
@@ -29,6 +30,9 @@ export const CommandMenuRecordInfo = ({
viewableRecordNameSingularComponentState,
commandMenuPageInstanceId,
);
const allowRequestsToTwentyIcons = useRecoilValue(
allowRequestsToTwentyIconsState,
);
const viewableRecordId = useRecoilComponentValue(
viewableRecordIdComponentState,
@@ -50,6 +54,7 @@ export const CommandMenuRecordInfo = ({
const recordIdentifier = useRecoilValue(
recordStoreIdentifierFamilySelector({
recordId: objectRecordId,
allowRequestsToTwentyIcons,
}),
);
@@ -11,6 +11,7 @@ import styled from '@emotion/styled';
import { useMemo } from 'react';
import { useRecoilValue } from 'recoil';
import { isDefined } from 'twenty-shared/utils';
import { allowRequestsToTwentyIconsState } from '@/client-config/states/allowRequestsToTwentyIcons';
const StyledIconWrapper = styled.div`
background: ${({ theme }) => theme.background.primary};
@@ -25,6 +26,10 @@ export const useCommandMenuContextChips = () => {
commandMenuNavigationStackState,
);
const allowRequestsToTwentyIcons = useRecoilValue(
allowRequestsToTwentyIconsState,
);
const objectMetadataItems = useRecoilValue(objectMetadataItemsState);
const { navigateCommandMenuHistory } = useCommandMenuHistory();
@@ -44,6 +49,7 @@ export const useCommandMenuContextChips = () => {
const recordIdentifiers = useRecoilValue(
recordStoreIdentifiersFamilySelector({
recordIds: allRecordIds,
allowRequestsToTwentyIcons,
}),
);
const records = useRecoilValue(
@@ -6,8 +6,13 @@ export const getSelectedRecordsContextText = (
objectMetadataItem: ObjectMetadataItem,
records: ObjectRecord[],
totalCount: number,
allowRequestsToTwentyIcons: boolean,
) => {
return totalCount === 1
? getObjectRecordIdentifier({ objectMetadataItem, record: records[0] }).name
? getObjectRecordIdentifier({
objectMetadataItem,
record: records[0],
allowRequestsToTwentyIcons,
}).name
: `${totalCount} ${objectMetadataItem.labelPlural}`;
};
@@ -8,6 +8,7 @@ import { useMemo } from 'react';
import { useRecoilValue } from 'recoil';
import { FieldMetadataType } from '~/generated-metadata/graphql';
import { usePrefetchedFavoritesData } from './usePrefetchedFavoritesData';
import { allowRequestsToTwentyIconsState } from '@/client-config/states/allowRequestsToTwentyIcons';
export const useFavorites = () => {
const { favorites } = usePrefetchedFavoritesData();
@@ -19,8 +20,11 @@ export const useFavorites = () => {
useObjectMetadataItem({
objectNameSingular: CoreObjectNameSingular.Favorite,
});
const allowRequestsToTwentyIcons = useRecoilValue(
allowRequestsToTwentyIconsState,
);
const getObjectRecordIdentifierByNameSingular =
useGetObjectRecordIdentifierByNameSingular();
useGetObjectRecordIdentifierByNameSingular(allowRequestsToTwentyIcons);
const favoriteRelationFieldMetadataItems = useMemo(
() =>
@@ -4,11 +4,15 @@ import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadat
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
import { useRecoilValue } from 'recoil';
import { FieldMetadataType } from '~/generated-metadata/graphql';
import { allowRequestsToTwentyIconsState } from '@/client-config/states/allowRequestsToTwentyIcons';
export const useFavoritesMetadata = () => {
const objectMetadataItems = useRecoilValue(objectMetadataItemsState);
const allowRequestsToTwentyIcons = useRecoilValue(
allowRequestsToTwentyIconsState,
);
const getObjectRecordIdentifierByNameSingular =
useGetObjectRecordIdentifierByNameSingular();
useGetObjectRecordIdentifierByNameSingular(allowRequestsToTwentyIcons);
const { objectMetadataItem: favoriteObjectMetadataItem } =
useObjectMetadataItem({
@@ -10,6 +10,7 @@ import { useMemo } from 'react';
import { useRecoilValue } from 'recoil';
import { FieldMetadataType } from '~/generated-metadata/graphql';
import { usePrefetchedFavoritesData } from './usePrefetchedFavoritesData';
import { allowRequestsToTwentyIconsState } from '@/client-config/states/allowRequestsToTwentyIcons';
export const useWorkspaceFavorites = () => {
const { workspaceFavorites } = usePrefetchedFavoritesData();
@@ -19,8 +20,11 @@ export const useWorkspaceFavorites = () => {
useObjectMetadataItem({
objectNameSingular: CoreObjectNameSingular.Favorite,
});
const allowRequestsToTwentyIcons = useRecoilValue(
allowRequestsToTwentyIconsState,
);
const getObjectRecordIdentifierByNameSingular =
useGetObjectRecordIdentifierByNameSingular();
useGetObjectRecordIdentifierByNameSingular(allowRequestsToTwentyIcons);
const favoriteRelationFieldMetadataItems = useMemo(
() =>
@@ -4,16 +4,22 @@ import { useRecoilValue } from 'recoil';
import { PreComputedChipGeneratorsContext } from '@/object-metadata/contexts/PreComputedChipGeneratorsContext';
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
import { getRecordChipGenerators } from '@/object-record/utils/getRecordChipGenerators';
import { allowRequestsToTwentyIconsState } from '@/client-config/states/allowRequestsToTwentyIcons';
export const PreComputedChipGeneratorsProvider = ({
children,
}: React.PropsWithChildren) => {
const objectMetadataItems = useRecoilValue(objectMetadataItemsState);
const allowRequestsToTwentyIcons = useRecoilValue(
allowRequestsToTwentyIconsState,
);
const { chipGeneratorPerObjectPerField, identifierChipGeneratorPerObject } =
useMemo(() => {
return getRecordChipGenerators(objectMetadataItems);
}, [objectMetadataItems]);
return getRecordChipGenerators(
objectMetadataItems,
allowRequestsToTwentyIcons,
);
}, [allowRequestsToTwentyIcons, objectMetadataItems]);
return (
<>
@@ -19,7 +19,7 @@ describe('useGetObjectRecordIdentifierByNameSingular', () => {
setMetadataItems(generatedMockObjectMetadataItems);
return useGetObjectRecordIdentifierByNameSingular()(
return useGetObjectRecordIdentifierByNameSingular(true)(
record,
objectNameSingular,
);
@@ -13,6 +13,7 @@ describe('useMapToObjectRecordIdentifier', () => {
() => {
const { mapToObjectRecordIdentifier } = useMapToObjectRecordIdentifier({
objectNameSingular: 'person',
allowRequestsToTwentyIcons: true,
});
return mapToObjectRecordIdentifier({
@@ -4,7 +4,9 @@ import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadat
import { getObjectRecordIdentifier } from '@/object-metadata/utils/getObjectRecordIdentifier';
import { type ObjectRecordIdentifier } from '@/object-record/types/ObjectRecordIdentifier';
export const useGetObjectRecordIdentifierByNameSingular = () => {
export const useGetObjectRecordIdentifierByNameSingular = (
allowRequestsToTwentyIcons: boolean,
) => {
const objectMetadataItems = useRecoilValue(objectMetadataItemsState);
return (record: any, objectNameSingular: string): ObjectRecordIdentifier => {
@@ -21,6 +23,7 @@ export const useGetObjectRecordIdentifierByNameSingular = () => {
return getObjectRecordIdentifier({
objectMetadataItem,
record,
allowRequestsToTwentyIcons,
});
};
};
@@ -4,15 +4,21 @@ import { type ObjectRecord } from '@/object-record/types/ObjectRecord';
export const useMapToObjectRecordIdentifier = ({
objectNameSingular,
allowRequestsToTwentyIcons,
}: {
objectNameSingular: string;
allowRequestsToTwentyIcons: boolean;
}) => {
const { objectMetadataItem } = useObjectMetadataItem({
objectNameSingular,
});
const mapToObjectRecordIdentifier = (record: ObjectRecord) => {
return getObjectRecordIdentifier({ objectMetadataItem, record });
return getObjectRecordIdentifier({
objectMetadataItem,
record,
allowRequestsToTwentyIcons,
});
};
return { mapToObjectRecordIdentifier };
@@ -15,12 +15,16 @@ export const getAvatarUrl = (
objectNameSingular: string,
record: ObjectRecord,
imageIdentifierFieldMetadataItem: FieldMetadataItem | undefined,
allowRequestsToTwentyIcons?: boolean | undefined,
) => {
if (objectNameSingular === CoreObjectNameSingular.WorkspaceMember) {
return record.avatarUrl ?? undefined;
}
if (objectNameSingular === CoreObjectNameSingular.Company) {
if (
objectNameSingular === CoreObjectNameSingular.Company &&
allowRequestsToTwentyIcons === true
) {
return getLogoUrlFromDomainName(
getCompanyDomainName(record as Company) ?? '',
);
@@ -11,6 +11,7 @@ import { getLinkToShowPage } from './getLinkToShowPage';
export const getObjectRecordIdentifier = ({
objectMetadataItem,
record,
allowRequestsToTwentyIcons,
}: {
objectMetadataItem: Pick<
ObjectMetadataItem,
@@ -20,6 +21,7 @@ export const getObjectRecordIdentifier = ({
| 'imageIdentifierFieldMetadataId'
>;
record: ObjectRecord;
allowRequestsToTwentyIcons: boolean;
}): ObjectRecordIdentifier => {
const labelIdentifierFieldMetadataItem =
getLabelIdentifierFieldMetadataItem(objectMetadataItem);
@@ -40,6 +42,7 @@ export const getObjectRecordIdentifier = ({
objectMetadataItem.nameSingular,
record,
imageIdentifierFieldMetadata,
allowRequestsToTwentyIcons,
);
const linkToShowPage = getLinkToShowPage(
@@ -20,6 +20,8 @@ import {
jsonRelationFilterValueSchema,
} from 'twenty-shared/utils';
import { IconUserCircle } from 'twenty-ui/display';
import { useRecoilValue } from 'recoil';
import { allowRequestsToTwentyIconsState } from '@/client-config/states/allowRequestsToTwentyIcons';
export const EMPTY_FILTER_VALUE: string = JSON.stringify({
isCurrentWorkspaceMemberSelected: false,
@@ -41,6 +43,10 @@ export const ObjectFilterDropdownRecordSelect = ({
fieldMetadataItemUsedInDropdownComponentSelector,
);
const allowRequestsToTwentyIcons = useRecoilValue(
allowRequestsToTwentyIconsState,
);
const { objectFilterDropdownFilterValue } =
useObjectFilterDropdownFilterValue();
@@ -120,6 +126,7 @@ export const ObjectFilterDropdownRecordSelect = ({
selectedIds: selectedRecordIds,
objectNameSingular,
limit: 10,
allowRequestsToTwentyIcons,
});
const currentWorkspaceMemberSelectableItem: SelectableItem = {
@@ -14,6 +14,7 @@ import { useIsMobile } from '@/ui/utilities/responsive/hooks/useIsMobile';
import { useRecoilValue } from 'recoil';
import { isDefined } from 'twenty-shared/utils';
import { FieldMetadataType } from '~/generated-metadata/graphql';
import { allowRequestsToTwentyIconsState } from '@/client-config/states/allowRequestsToTwentyIcons';
type SummaryCardProps = {
objectNameSingular: string;
@@ -37,6 +38,9 @@ export const SummaryCard = ({
fieldName: 'createdAt',
}),
);
const allowRequestsToTwentyIcons = useRecoilValue(
allowRequestsToTwentyIconsState,
);
const { onUploadPicture, useUpdateOneObjectRecordMutation } =
useRecordShowContainerActions({
@@ -49,6 +53,7 @@ export const SummaryCard = ({
const recordIdentifier = useRecoilValue(
recordStoreIdentifierFamilySelector({
recordId: objectRecordId,
allowRequestsToTwentyIcons,
}),
);
@@ -8,7 +8,13 @@ import { uncapitalize } from 'twenty-shared/utils';
export const recordStoreIdentifierFamilySelector = selectorFamily({
key: 'recordStoreIdentifierFamilySelector',
get:
({ recordId }: { recordId: string }) =>
({
recordId,
allowRequestsToTwentyIcons,
}: {
recordId: string;
allowRequestsToTwentyIcons: boolean;
}) =>
({ get }) => {
const recordFromStore = get(recordStoreFamilyState(recordId));
const objectNameSingular = uncapitalize(
@@ -28,6 +34,7 @@ export const recordStoreIdentifierFamilySelector = selectorFamily({
return getObjectRecordIdentifier({
objectMetadataItem: objectMetadataItem,
record: recordFromStore,
allowRequestsToTwentyIcons,
});
},
});
@@ -8,7 +8,13 @@ import { isDefined, uncapitalize } from 'twenty-shared/utils';
export const recordStoreIdentifiersFamilySelector = selectorFamily({
key: 'recordStoreIdentifiersFamilySelector',
get:
({ recordIds }: { recordIds: string[] }) =>
({
recordIds,
allowRequestsToTwentyIcons,
}: {
recordIds: string[];
allowRequestsToTwentyIcons: boolean;
}) =>
({ get }) => {
const objectMetadataItems = get(objectMetadataItemsState);
@@ -30,6 +36,7 @@ export const recordStoreIdentifiersFamilySelector = selectorFamily({
return getObjectRecordIdentifier({
objectMetadataItem: objectMetadataItem,
record: recordFromStore,
allowRequestsToTwentyIcons,
});
})
.filter(isDefined);
@@ -18,6 +18,7 @@ export const useRecordsForSelect = ({
limit,
excludedRecordIds = [],
objectNameSingular,
allowRequestsToTwentyIcons,
}: {
searchFilterText: string;
sortOrder?: OrderBy;
@@ -25,9 +26,11 @@ export const useRecordsForSelect = ({
limit?: number;
excludedRecordIds?: string[];
objectNameSingular: string;
allowRequestsToTwentyIcons: boolean;
}) => {
const { mapToObjectRecordIdentifier } = useMapToObjectRecordIdentifier({
objectNameSingular,
allowRequestsToTwentyIcons,
});
const filters = [
@@ -16,6 +16,7 @@ import { FieldMetadataType } from '~/generated-metadata/graphql';
export const getRecordChipGenerators = (
objectMetadataItems: ObjectMetadataItem[],
allowRequestsToTwentyIcons?: boolean,
) => {
const chipGeneratorPerObjectPerField: ChipGeneratorPerObjectNameSingularPerFieldName =
{};
@@ -92,6 +93,7 @@ export const getRecordChipGenerators = (
objectMetadataItemToUse.nameSingular,
record,
imageIdentifierFieldMetadataToUse,
allowRequestsToTwentyIcons,
),
avatarType,
isLabelIdentifier,
@@ -12,6 +12,8 @@ import {
isDefined,
jsonRelationFilterValueSchema,
} from 'twenty-shared/utils';
import { useRecoilValue } from 'recoil';
import { allowRequestsToTwentyIconsState } from '@/client-config/states/allowRequestsToTwentyIcons';
type ObjectFilterDropdownRecordSelectProps = {
recordFilter: RecordFilter;
@@ -21,6 +23,10 @@ type ObjectFilterDropdownRecordSelectProps = {
export const useComputeRecordRelationFilterLabelValue = ({
recordFilter,
}: ObjectFilterDropdownRecordSelectProps) => {
const allowRequestsToTwentyIcons = useRecoilValue(
allowRequestsToTwentyIconsState,
);
const { objectMetadataItems } = useObjectMetadataItems();
const { getRecordFilterChipLabelValue } = useGetRecordFilterChipLabelValue();
@@ -69,6 +75,7 @@ export const useComputeRecordRelationFilterLabelValue = ({
selectedIds: selectedRecordIds,
objectNameSingular: relationObjectMetadataNameSingular,
limit: 10,
allowRequestsToTwentyIcons,
});
if (loading) {
@@ -56,5 +56,6 @@ export const mockedClientConfig: ClientConfig = {
isImapSmtpCaldavEnabled: false,
isTwoFactorAuthenticationEnabled: false,
isEmailingDomainsEnabled: false,
allowRequestsToTwentyIcons: true,
isCloudflareIntegrationEnabled: false,
};
+1
View File
@@ -83,3 +83,4 @@ FRONTEND_URL=http://localhost:3001
# ANALYTICS_ENABLED=
# CLICKHOUSE_URL=http://default:clickhousePassword@localhost:8123/twenty
# HTTP_TOOL_SAFE_MODE_ENABLED=true
# ALLOW_REQUESTS_TO_TWENTY_ICONS=true
@@ -98,6 +98,7 @@ describe('ClientConfigController', () => {
isImapSmtpCaldavEnabled: false,
calendarBookingPageId: undefined,
isTwoFactorAuthenticationEnabled: false,
allowRequestsToTwentyIcons: true,
isCloudflareIntegrationEnabled: false,
};
@@ -195,6 +195,9 @@ export class ClientConfig {
@Field(() => Boolean)
isImapSmtpCaldavEnabled: boolean;
@Field(() => Boolean)
allowRequestsToTwentyIcons: boolean;
@Field(() => String, { nullable: true })
calendarBookingPageId?: string;
@@ -195,6 +195,9 @@ export class ClientConfigService {
isImapSmtpCaldavEnabled: this.twentyConfigService.get(
'IS_IMAP_SMTP_CALDAV_ENABLED',
),
allowRequestsToTwentyIcons: this.twentyConfigService.get(
'ALLOW_REQUESTS_TO_TWENTY_ICONS',
),
calendarBookingPageId: isNonEmptyString(calendarBookingPageId)
? calendarBookingPageId
: undefined,
@@ -7,8 +7,8 @@ import {
} from 'src/engine/core-modules/__mocks__/mockFlatObjectMetadatas';
import { FileService } from 'src/engine/core-modules/file/services/file.service';
import { SearchService } from 'src/engine/core-modules/search/services/search.service';
import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service';
import { GlobalWorkspaceOrmManager } from 'src/engine/twenty-orm/global-workspace-datasource/global-workspace-orm.manager';
import { WorkspaceCacheStorageService } from 'src/engine/workspace-cache-storage/workspace-cache-storage.service';
describe('SearchService', () => {
let service: SearchService;
@@ -18,8 +18,8 @@ describe('SearchService', () => {
providers: [
SearchService,
{ provide: GlobalWorkspaceOrmManager, useValue: {} },
{ provide: WorkspaceCacheStorageService, useValue: {} },
{ provide: FileService, useValue: {} },
{ provide: TwentyConfigService, useValue: { get: () => false } },
],
}).compile();
@@ -33,6 +33,7 @@ import { SEARCH_VECTOR_FIELD } from 'src/engine/metadata-modules/search-field-me
import { GlobalWorkspaceOrmManager } from 'src/engine/twenty-orm/global-workspace-datasource/global-workspace-orm.manager';
import { type WorkspaceRepository } from 'src/engine/twenty-orm/repository/workspace.repository';
import { type RolePermissionConfig } from 'src/engine/twenty-orm/types/role-permission-config';
import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service';
type LastRanks = { tsRankCD: number; tsRank: number };
@@ -48,6 +49,7 @@ export class SearchService {
constructor(
private readonly globalWorkspaceOrmManager: GlobalWorkspaceOrmManager,
private readonly fileService: FileService,
private readonly twentyConfigService: TwentyConfigService,
) {}
async getAllRecordsWithObjectMetadataItems({
@@ -383,7 +385,10 @@ export class SearchService {
flatFieldMetadataMaps,
);
if (flatObjectMetadata.nameSingular === 'company') {
if (
flatObjectMetadata.nameSingular === 'company' &&
this.twentyConfigService.get('ALLOW_REQUESTS_TO_TWENTY_ICONS')
) {
return getLogoUrlFromDomainName(record.domainNamePrimaryLinkUrl) || '';
}
@@ -161,6 +161,14 @@ export class ConfigVariables {
})
IS_IMAP_SMTP_CALDAV_ENABLED = true;
@ConfigVariablesMetadata({
group: ConfigVariablesGroup.OTHER,
description:
"Enable or disable requests to twenty-icons to get companies' icons",
type: ConfigVariableType.BOOLEAN,
})
ALLOW_REQUESTS_TO_TWENTY_ICONS = true;
@ConfigVariablesMetadata({
group: ConfigVariablesGroup.MICROSOFT_AUTH,
description: 'Enable or disable Microsoft authentication',