diff --git a/packages/twenty-front/src/modules/settings/data-model/objects/forms/components/SettingsDataModelObjectAboutForm.tsx b/packages/twenty-front/src/modules/settings/data-model/objects/forms/components/SettingsDataModelObjectAboutForm.tsx index 800a7ef51..86f128896 100644 --- a/packages/twenty-front/src/modules/settings/data-model/objects/forms/components/SettingsDataModelObjectAboutForm.tsx +++ b/packages/twenty-front/src/modules/settings/data-model/objects/forms/components/SettingsDataModelObjectAboutForm.tsx @@ -11,9 +11,7 @@ import styled from '@emotion/styled'; import { useLingui } from '@lingui/react/macro'; import { plural } from 'pluralize'; import { Controller, useFormContext } from 'react-hook-form'; -import { isDefined } from 'twenty-shared/utils'; -import { StringKeyOf } from 'type-fest'; -import { computeMetadataNameFromLabel } from '~/pages/settings/data-model/utils/compute-metadata-name-from-label.utils'; +import { capitalize, isDefined } from 'twenty-shared/utils'; import { AppTooltip, IconInfoCircle, @@ -21,6 +19,8 @@ import { TooltipDelay, } from 'twenty-ui/display'; import { Card } from 'twenty-ui/layout'; +import { StringKeyOf } from 'type-fest'; +import { computeMetadataNameFromLabel } from '~/pages/settings/data-model/utils/compute-metadata-name-from-label.utils'; type SettingsDataModelObjectAboutFormProps = { disableEdition?: boolean; @@ -155,8 +155,8 @@ export const SettingsDataModelObjectAboutForm = ({ placeholder={'Listing'} value={value} onChange={(value) => { - onChange(value); - fillLabelPlural(value); + onChange(capitalize(value)); + fillLabelPlural(capitalize(value)); if (isLabelSyncedWithName === true) { fillNameSingularFromLabelSingular(value); } @@ -186,7 +186,7 @@ export const SettingsDataModelObjectAboutForm = ({ placeholder={t`Listings`} value={value} onChange={(value) => { - onChange(value); + onChange(capitalize(value)); if (isLabelSyncedWithName === true) { fillNamePluralFromLabelPlural(value); } diff --git a/packages/twenty-server/src/engine/core-modules/billing/stripe/services/stripe-checkout.service.ts b/packages/twenty-server/src/engine/core-modules/billing/stripe/services/stripe-checkout.service.ts index dfd7f6730..4e71d4c29 100644 --- a/packages/twenty-server/src/engine/core-modules/billing/stripe/services/stripe-checkout.service.ts +++ b/packages/twenty-server/src/engine/core-modules/billing/stripe/services/stripe-checkout.service.ts @@ -2,8 +2,8 @@ import { Injectable, Logger } from '@nestjs/common'; -import { isDefined } from 'class-validator'; import Stripe from 'stripe'; +import { isDefined } from 'twenty-shared/utils'; import { BillingPlanKey } from 'src/engine/core-modules/billing/enums/billing-plan-key.enum'; import { StripeSDKService } from 'src/engine/core-modules/billing/stripe/stripe-sdk/services/stripe-sdk.service'; diff --git a/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.service.ts b/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.service.ts index 694ead311..11eff1f97 100644 --- a/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.service.ts @@ -4,8 +4,8 @@ import { InjectRepository } from '@nestjs/typeorm'; import { i18n } from '@lingui/core'; import { Query, QueryOptions } from '@ptc-org/nestjs-query-core'; import { TypeOrmQueryService } from '@ptc-org/nestjs-query-typeorm'; -import { isDefined } from 'class-validator'; import { APP_LOCALES, SOURCE_LOCALE } from 'twenty-shared/translations'; +import { capitalize, isDefined } from 'twenty-shared/utils'; import { FindManyOptions, FindOneOptions, In, Not, Repository } from 'typeorm'; import { ObjectMetadataStandardIdToIdMap } from 'src/engine/metadata-modules/object-metadata/interfaces/object-metadata-standard-id-to-id-map'; @@ -89,6 +89,13 @@ export class ObjectMetadataService extends TypeOrmQueryService { + const { update } = input; + + if (isDefined(update.labelSingular)) { + update.labelSingular = capitalize(update.labelSingular); + } + + if (isDefined(update.labelPlural)) { + update.labelPlural = capitalize(update.labelPlural); + } + + input.update = update; + validateObjectMetadataInputNamesOrThrow(input.update); const existingObjectMetadata = await this.objectMetadataRepository.findOne({