get rid of singleton usage in view resolver (#13990)

addressing -
https://github.com/twentyhq/twenty/pull/13895#pullrequestreview-3133235956

will be addressing performance issue in another follow-up -- need to get
the strategy straight
This commit is contained in:
nitin
2025-08-20 12:04:41 +02:00
committed by GitHub
parent 00478152e0
commit 69649e97d4
3 changed files with 18 additions and 6 deletions
@@ -232,7 +232,7 @@ msgstr "タイムラインに表示される集計/フィルタされたイベ
#: src/engine/workspace-manager/standard-objects-prefill-data/views/custom-all.view.ts
#: src/engine/workspace-manager/standard-objects-prefill-data/views/companies-all.view.ts
msgid "All {objectLabelPlural}"
msgstr "{objectLabelPlural}すべて"
msgstr ""
#. js-lingui-id: hehnjM
#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts
@@ -9,9 +9,9 @@ import {
Resolver,
} from '@nestjs/graphql';
import { i18n } from '@lingui/core';
import { isDefined } from 'twenty-shared/utils';
import { I18nService } from 'src/engine/core-modules/i18n/i18n.service';
import { type I18nContext } from 'src/engine/core-modules/i18n/types/i18n-context.type';
import { generateMessageId } from 'src/engine/core-modules/i18n/utils/generateMessageId';
import { CreateViewInput } from 'src/engine/core-modules/view/dtos/inputs/create-view.input';
@@ -28,7 +28,10 @@ import { resolveObjectMetadataStandardOverride } from 'src/engine/metadata-modul
@UseFilters(ViewGraphqlApiExceptionFilter)
@UseGuards(WorkspaceAuthGuard)
export class ViewResolver {
constructor(private readonly viewService: ViewService) {}
constructor(
private readonly viewService: ViewService,
private readonly i18nService: I18nService,
) {}
@ResolveField(() => String)
async name(
@@ -57,8 +60,12 @@ export class ViewResolver {
);
const messageId = generateMessageId(view.name);
const translatedTemplate = i18n._(messageId, {
objectLabelPlural: translatedObjectLabel,
const translatedTemplate = this.i18nService.translateMessage({
messageId,
values: {
objectLabelPlural: translatedObjectLabel,
},
locale: context.req.locale,
});
if (translatedTemplate !== messageId) {
@@ -74,7 +81,10 @@ export class ViewResolver {
}
const messageId = generateMessageId(view.name);
const translatedMessage = i18n._(messageId);
const translatedMessage = this.i18nService.translateMessage({
messageId,
locale: context.req.locale,
});
return translatedMessage !== messageId ? translatedMessage : view.name;
}
@@ -2,6 +2,7 @@ import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { AuthModule } from 'src/engine/core-modules/auth/auth.module';
import { I18nModule } from 'src/engine/core-modules/i18n/i18n.module';
import { ViewFieldController } from 'src/engine/core-modules/view/controllers/view-field.controller';
import { ViewFilterGroupController } from 'src/engine/core-modules/view/controllers/view-filter-group.controller';
import { ViewFilterController } from 'src/engine/core-modules/view/controllers/view-filter.controller';
@@ -36,6 +37,7 @@ import { WorkspaceCacheStorageModule } from 'src/engine/workspace-cache-storage/
'core',
),
AuthModule,
I18nModule,
WorkspaceCacheStorageModule,
WorkspaceMetadataCacheModule,
],