feat: rename RICH_TEXT_V2 → RICH_TEXT in codebase (keep DB value) (#18628)
## Summary - Renames the `FieldMetadataType` enum key from `RICH_TEXT_V2` to `RICH_TEXT` across the entire codebase, while keeping the underlying string value as `'RICH_TEXT_V2'` to maintain PostgreSQL database compatibility - Renames all related types, guards, hooks, components, and files from `*RichTextV2*` / `*rich-text-v2*` to `*RichText*` / `*rich-text*` (e.g. `FormRichTextV2FieldInput` → `FormRichTextFieldInput`, `isFieldRichTextV2` → `isFieldRichText`) - Updates generated files (GraphQL schema, SDK types) to use the new key while preserving the `RICH_TEXT_V2` string value for DB/API layer - Updates i18n locale files, test snapshots, and integration tests to reflect the rename ## Context The legacy `RICH_TEXT` (V1) field type was deprecated and migrated to `TEXT` in a previous PR (#18623). With V1 gone, the `RICH_TEXT_V2` naming is no longer necessary — `RICH_TEXT` is now the canonical name. The DB enum value stays `'RICH_TEXT_V2'` to avoid confusion with the just-deprecated V1 type and to prevent a database migration. ## Test plan - [x] `twenty-server` typecheck passes - [x] `twenty-front` typecheck passes (only pre-existing Apollo client errors remain) - [x] `twenty-server` lint passes - [x] `twenty-front` lint passes - [x] `twenty-shared` build passes - [ ] CI passes Made with [Cursor](https://cursor.com)
This commit is contained in:
+1
-1
@@ -65,7 +65,7 @@ export const useFieldListFieldMetadataItems = ({
|
||||
)
|
||||
.filter(
|
||||
(fieldMetadataItem) =>
|
||||
fieldMetadataItem.type !== FieldMetadataType.RICH_TEXT_V2,
|
||||
fieldMetadataItem.type !== FieldMetadataType.RICH_TEXT,
|
||||
),
|
||||
(fieldMetadataItem) =>
|
||||
fieldMetadataItem.type === FieldMetadataType.RELATION ||
|
||||
|
||||
+4
-4
@@ -10,7 +10,7 @@ import { LinksFieldDisplay } from '@/object-record/record-field/ui/meta-types/di
|
||||
import { PhonesFieldDisplay } from '@/object-record/record-field/ui/meta-types/display/components/PhonesFieldDisplay';
|
||||
import { RatingFieldDisplay } from '@/object-record/record-field/ui/meta-types/display/components/RatingFieldDisplay';
|
||||
import { RelationFromManyFieldDisplay } from '@/object-record/record-field/ui/meta-types/display/components/RelationFromManyFieldDisplay';
|
||||
import { RichTextV2FieldDisplay } from '@/object-record/record-field/ui/meta-types/display/components/RichTextV2FieldDisplay';
|
||||
import { RichTextFieldDisplay } from '@/object-record/record-field/ui/meta-types/display/components/RichTextFieldDisplay';
|
||||
import { isFieldIdentifierDisplay } from '@/object-record/record-field/ui/meta-types/display/utils/isFieldIdentifierDisplay';
|
||||
import { isFieldActor } from '@/object-record/record-field/ui/types/guards/isFieldActor';
|
||||
import { isFieldArray } from '@/object-record/record-field/ui/types/guards/isFieldArray';
|
||||
@@ -20,7 +20,7 @@ import { isFieldFiles } from '@/object-record/record-field/ui/types/guards/isFie
|
||||
import { isFieldLinks } from '@/object-record/record-field/ui/types/guards/isFieldLinks';
|
||||
import { isFieldPhones } from '@/object-record/record-field/ui/types/guards/isFieldPhones';
|
||||
import { isFieldRating } from '@/object-record/record-field/ui/types/guards/isFieldRating';
|
||||
import { isFieldRichTextV2 } from '@/object-record/record-field/ui/types/guards/isFieldRichTextV2';
|
||||
import { isFieldRichText } from '@/object-record/record-field/ui/types/guards/isFieldRichText';
|
||||
|
||||
import { MorphRelationManyToOneFieldDisplay } from '@/object-record/record-field/ui/meta-types/display/components/MorphRelationManyToOneFieldDisplay';
|
||||
import { MorphRelationOneToManyFieldDisplay } from '@/object-record/record-field/ui/meta-types/display/components/MorphRelationOneToManyFieldDisplay';
|
||||
@@ -110,8 +110,8 @@ export const FieldDisplay = () => {
|
||||
<BooleanFieldDisplay />
|
||||
) : isFieldRating(fieldDefinition) ? (
|
||||
<RatingFieldDisplay readonly={isRecordFieldReadOnly} />
|
||||
) : isFieldRichTextV2(fieldDefinition) ? (
|
||||
<RichTextV2FieldDisplay />
|
||||
) : isFieldRichText(fieldDefinition) ? (
|
||||
<RichTextFieldDisplay />
|
||||
) : isFieldActor(fieldDefinition) ? (
|
||||
<ActorFieldDisplay />
|
||||
) : isFieldArray(fieldDefinition) ? (
|
||||
|
||||
+2
-2
@@ -36,7 +36,7 @@ import { isFieldRating } from '@/object-record/record-field/ui/types/guards/isFi
|
||||
import { isFieldRawJson } from '@/object-record/record-field/ui/types/guards/isFieldRawJson';
|
||||
import { isFieldRelationManyToOne } from '@/object-record/record-field/ui/types/guards/isFieldRelationManyToOne';
|
||||
import { isFieldRelationOneToMany } from '@/object-record/record-field/ui/types/guards/isFieldRelationOneToMany';
|
||||
import { isFieldRichTextV2 } from '@/object-record/record-field/ui/types/guards/isFieldRichTextV2';
|
||||
import { isFieldRichText } from '@/object-record/record-field/ui/types/guards/isFieldRichText';
|
||||
import { isFieldSelect } from '@/object-record/record-field/ui/types/guards/isFieldSelect';
|
||||
import { FieldContext } from '@/object-record/record-field/ui/contexts/FieldContext';
|
||||
import { BooleanFieldInput } from '@/object-record/record-field/ui/meta-types/input/components/BooleanFieldInput';
|
||||
@@ -94,7 +94,7 @@ export const FieldInput = () => {
|
||||
<RawJsonFieldInput />
|
||||
) : isFieldArray(fieldDefinition) ? (
|
||||
<ArrayFieldInput />
|
||||
) : isFieldRichTextV2(fieldDefinition) ? (
|
||||
) : isFieldRichText(fieldDefinition) ? (
|
||||
<RichTextFieldInput />
|
||||
) : (
|
||||
<></>
|
||||
|
||||
+6
-6
@@ -13,7 +13,7 @@ import { FormNumberFieldInput } from '@/object-record/record-field/ui/form-types
|
||||
import { FormPhoneFieldInput } from '@/object-record/record-field/ui/form-types/components/FormPhoneFieldInput';
|
||||
import { FormRawJsonFieldInput } from '@/object-record/record-field/ui/form-types/components/FormRawJsonFieldInput';
|
||||
import { FormRelationToOneFieldInput } from '@/object-record/record-field/ui/form-types/components/FormRelationToOneFieldInput';
|
||||
import { FormRichTextV2FieldInput } from '@/object-record/record-field/ui/form-types/components/FormRichTextV2FieldInput';
|
||||
import { FormRichTextFieldInput } from '@/object-record/record-field/ui/form-types/components/FormRichTextFieldInput';
|
||||
import { FormSelectFieldInput } from '@/object-record/record-field/ui/form-types/components/FormSelectFieldInput';
|
||||
import { FormTextFieldInput } from '@/object-record/record-field/ui/form-types/components/FormTextFieldInput';
|
||||
import { FormUuidFieldInput } from '@/object-record/record-field/ui/form-types/components/FormUuidFieldInput';
|
||||
@@ -30,7 +30,7 @@ import {
|
||||
type FieldPhonesValue,
|
||||
type FieldRelationToOneValue,
|
||||
type FieldRelationValue,
|
||||
type FieldRichTextV2Value,
|
||||
type FieldRichTextValue,
|
||||
type FormFieldCurrencyValue,
|
||||
} from '@/object-record/record-field/ui/types/FieldMetadata';
|
||||
import { isFieldAddress } from '@/object-record/record-field/ui/types/guards/isFieldAddress';
|
||||
@@ -48,7 +48,7 @@ import { isFieldNumber } from '@/object-record/record-field/ui/types/guards/isFi
|
||||
import { isFieldPhones } from '@/object-record/record-field/ui/types/guards/isFieldPhones';
|
||||
import { isFieldRawJson } from '@/object-record/record-field/ui/types/guards/isFieldRawJson';
|
||||
import { isFieldRelationManyToOne } from '@/object-record/record-field/ui/types/guards/isFieldRelationManyToOne';
|
||||
import { isFieldRichTextV2 } from '@/object-record/record-field/ui/types/guards/isFieldRichTextV2';
|
||||
import { isFieldRichText } from '@/object-record/record-field/ui/types/guards/isFieldRichText';
|
||||
import { isFieldSelect } from '@/object-record/record-field/ui/types/guards/isFieldSelect';
|
||||
import { isFieldText } from '@/object-record/record-field/ui/types/guards/isFieldText';
|
||||
import { isFieldUuid } from '@/object-record/record-field/ui/types/guards/isFieldUuid';
|
||||
@@ -220,10 +220,10 @@ export const FormFieldInput = ({
|
||||
VariablePicker={VariablePicker}
|
||||
readonly={readonly}
|
||||
/>
|
||||
) : isFieldRichTextV2(field) ? (
|
||||
<FormRichTextV2FieldInput
|
||||
) : isFieldRichText(field) ? (
|
||||
<FormRichTextFieldInput
|
||||
label={field.label}
|
||||
defaultValue={defaultValue as FieldRichTextV2Value | undefined}
|
||||
defaultValue={defaultValue as FieldRichTextValue | undefined}
|
||||
onChange={onChange}
|
||||
VariablePicker={VariablePicker}
|
||||
readonly={readonly}
|
||||
|
||||
+10
-10
@@ -1,22 +1,22 @@
|
||||
import { FormAdvancedTextFieldInput } from '@/object-record/record-field/ui/form-types/components/FormAdvancedTextFieldInput';
|
||||
import { type VariablePickerComponent } from '@/object-record/record-field/ui/form-types/types/VariablePickerComponent';
|
||||
import { type FieldRichTextV2Value } from '@/object-record/record-field/ui/types/FieldMetadata';
|
||||
import { type FieldRichTextValue } from '@/object-record/record-field/ui/types/FieldMetadata';
|
||||
|
||||
type FormRichTextV2FieldInputProps = {
|
||||
type FormRichTextFieldInputProps = {
|
||||
label?: string;
|
||||
error?: string;
|
||||
hint?: string;
|
||||
defaultValue: FieldRichTextV2Value | undefined;
|
||||
onChange: (value: FieldRichTextV2Value) => void;
|
||||
defaultValue: FieldRichTextValue | undefined;
|
||||
onChange: (value: FieldRichTextValue) => void;
|
||||
onBlur?: () => void;
|
||||
readonly?: boolean;
|
||||
placeholder?: string;
|
||||
VariablePicker?: VariablePickerComponent;
|
||||
};
|
||||
|
||||
const RICH_TEXT_V2_EDITOR_MIN_HEIGHT = 340;
|
||||
const RICH_TEXT_EDITOR_MIN_HEIGHT = 340;
|
||||
|
||||
const RICH_TEXT_V2_EDITOR_MAX_WIDTH = 600;
|
||||
const RICH_TEXT_EDITOR_MAX_WIDTH = 600;
|
||||
|
||||
const mapTipTapToBlockNote = (tiptapJson: string): string => {
|
||||
try {
|
||||
@@ -30,7 +30,7 @@ const mapTipTapToBlockNote = (tiptapJson: string): string => {
|
||||
}
|
||||
};
|
||||
|
||||
export const FormRichTextV2FieldInput = ({
|
||||
export const FormRichTextFieldInput = ({
|
||||
label,
|
||||
error,
|
||||
hint,
|
||||
@@ -39,7 +39,7 @@ export const FormRichTextV2FieldInput = ({
|
||||
onChange,
|
||||
readonly,
|
||||
VariablePicker,
|
||||
}: FormRichTextV2FieldInputProps) => {
|
||||
}: FormRichTextFieldInputProps) => {
|
||||
const handleChange = (value: string) => {
|
||||
onChange({
|
||||
blocknote: mapTipTapToBlockNote(value),
|
||||
@@ -57,8 +57,8 @@ export const FormRichTextV2FieldInput = ({
|
||||
onChange={handleChange}
|
||||
readonly={readonly}
|
||||
VariablePicker={VariablePicker}
|
||||
minHeight={RICH_TEXT_V2_EDITOR_MIN_HEIGHT}
|
||||
maxWidth={RICH_TEXT_V2_EDITOR_MAX_WIDTH}
|
||||
minHeight={RICH_TEXT_EDITOR_MIN_HEIGHT}
|
||||
maxWidth={RICH_TEXT_EDITOR_MAX_WIDTH}
|
||||
/>
|
||||
);
|
||||
};
|
||||
+5
-5
@@ -1,4 +1,4 @@
|
||||
import { FormRichTextV2FieldInput } from '@/object-record/record-field/ui/form-types/components/FormRichTextV2FieldInput';
|
||||
import { FormRichTextFieldInput } from '@/object-record/record-field/ui/form-types/components/FormRichTextFieldInput';
|
||||
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
||||
import {
|
||||
expect,
|
||||
@@ -12,9 +12,9 @@ import { getUserDevice } from 'twenty-ui/utilities';
|
||||
import { WorkflowStepDecorator } from '~/testing/decorators/WorkflowStepDecorator';
|
||||
import { MOCKED_STEP_ID } from '~/testing/mock-data/workflow';
|
||||
|
||||
const meta: Meta<typeof FormRichTextV2FieldInput> = {
|
||||
title: 'UI/Data/Field/Form/Input/FormRichTextV2FieldInput',
|
||||
component: FormRichTextV2FieldInput,
|
||||
const meta: Meta<typeof FormRichTextFieldInput> = {
|
||||
title: 'UI/Data/Field/Form/Input/FormRichTextFieldInput',
|
||||
component: FormRichTextFieldInput,
|
||||
args: {},
|
||||
argTypes: {},
|
||||
decorators: [WorkflowStepDecorator],
|
||||
@@ -22,7 +22,7 @@ const meta: Meta<typeof FormRichTextV2FieldInput> = {
|
||||
|
||||
export default meta;
|
||||
|
||||
type Story = StoryObj<typeof FormRichTextV2FieldInput>;
|
||||
type Story = StoryObj<typeof FormRichTextFieldInput>;
|
||||
|
||||
export const Default: Story = {
|
||||
args: {
|
||||
+6
-6
@@ -49,8 +49,8 @@ import { isFieldRating } from '@/object-record/record-field/ui/types/guards/isFi
|
||||
import { isFieldRatingValue } from '@/object-record/record-field/ui/types/guards/isFieldRatingValue';
|
||||
import { isFieldRelationManyToOne } from '@/object-record/record-field/ui/types/guards/isFieldRelationManyToOne';
|
||||
import { isFieldRelationManyToOneValue } from '@/object-record/record-field/ui/types/guards/isFieldRelationManyToOneValue';
|
||||
import { isFieldRichTextV2 } from '@/object-record/record-field/ui/types/guards/isFieldRichTextV2';
|
||||
import { isFieldRichTextV2Value } from '@/object-record/record-field/ui/types/guards/isFieldRichTextValueV2';
|
||||
import { isFieldRichText } from '@/object-record/record-field/ui/types/guards/isFieldRichText';
|
||||
import { isFieldRichTextValue } from '@/object-record/record-field/ui/types/guards/isFieldRichTextValue';
|
||||
import { isFieldText } from '@/object-record/record-field/ui/types/guards/isFieldText';
|
||||
import { isFieldTextValue } from '@/object-record/record-field/ui/types/guards/isFieldTextValue';
|
||||
import { useUpsertRecordsInStore } from '@/object-record/record-store/hooks/useUpsertRecordsInStore';
|
||||
@@ -143,9 +143,9 @@ export const usePersistField = ({
|
||||
const fieldIsRawJson =
|
||||
isFieldRawJson(fieldDefinition) && isFieldRawJsonValue(valueToPersist);
|
||||
|
||||
const fieldIsRichTextV2 =
|
||||
isFieldRichTextV2(fieldDefinition) &&
|
||||
isFieldRichTextV2Value(valueToPersist);
|
||||
const fieldIsRichText =
|
||||
isFieldRichText(fieldDefinition) &&
|
||||
isFieldRichTextValue(valueToPersist);
|
||||
|
||||
const fieldIsArray =
|
||||
isFieldArray(fieldDefinition) && isFieldArrayValue(valueToPersist);
|
||||
@@ -179,7 +179,7 @@ export const usePersistField = ({
|
||||
fieldIsRawJson ||
|
||||
fieldIsArray ||
|
||||
fieldIsFiles ||
|
||||
fieldIsRichTextV2;
|
||||
fieldIsRichText;
|
||||
|
||||
if (isValuePersistable) {
|
||||
const fieldName = fieldDefinition.metadata.fieldName;
|
||||
|
||||
+3
-3
@@ -1,11 +1,11 @@
|
||||
import { useRichTextV2FieldDisplay } from '@/object-record/record-field/ui/meta-types/hooks/useRichTextV2FieldDisplay';
|
||||
import { useRichTextFieldDisplay } from '@/object-record/record-field/ui/meta-types/hooks/useRichTextFieldDisplay';
|
||||
import { getFirstNonEmptyLineOfRichText } from '@/blocknote-editor/utils/getFirstNonEmptyLineOfRichText';
|
||||
import type { PartialBlock } from '@blocknote/core';
|
||||
import { isNonEmptyString } from '@sniptt/guards';
|
||||
import { isDefined, parseJson } from 'twenty-shared/utils';
|
||||
|
||||
export const RichTextV2FieldDisplay = () => {
|
||||
const { fieldValue } = useRichTextV2FieldDisplay();
|
||||
export const RichTextFieldDisplay = () => {
|
||||
const { fieldValue } = useRichTextFieldDisplay();
|
||||
|
||||
const blocks =
|
||||
isDefined(fieldValue) && isNonEmptyString(fieldValue.blocknote)
|
||||
+6
-6
@@ -1,24 +1,24 @@
|
||||
import { useContext } from 'react';
|
||||
|
||||
import { type FieldRichTextV2Value } from '@/object-record/record-field/ui/types/FieldMetadata';
|
||||
import { type FieldRichTextValue } from '@/object-record/record-field/ui/types/FieldMetadata';
|
||||
import { assertFieldMetadata } from '@/object-record/record-field/ui/types/guards/assertFieldMetadata';
|
||||
import { isFieldRichTextV2 } from '@/object-record/record-field/ui/types/guards/isFieldRichTextV2';
|
||||
import { isFieldRichText } from '@/object-record/record-field/ui/types/guards/isFieldRichText';
|
||||
import { useRecordFieldValue } from '@/object-record/record-store/hooks/useRecordFieldValue';
|
||||
import { FieldMetadataType } from '~/generated-metadata/graphql';
|
||||
import { FieldContext } from '@/object-record/record-field/ui/contexts/FieldContext';
|
||||
|
||||
export const useRichTextV2FieldDisplay = () => {
|
||||
export const useRichTextFieldDisplay = () => {
|
||||
const { recordId, fieldDefinition } = useContext(FieldContext);
|
||||
|
||||
assertFieldMetadata(
|
||||
FieldMetadataType.RICH_TEXT_V2,
|
||||
isFieldRichTextV2,
|
||||
FieldMetadataType.RICH_TEXT,
|
||||
isFieldRichText,
|
||||
fieldDefinition,
|
||||
);
|
||||
|
||||
const fieldName = fieldDefinition.metadata.fieldName;
|
||||
|
||||
const fieldValue = useRecordFieldValue<FieldRichTextV2Value | undefined>(
|
||||
const fieldValue = useRecordFieldValue<FieldRichTextValue | undefined>(
|
||||
recordId,
|
||||
fieldName,
|
||||
fieldDefinition,
|
||||
+2
-2
@@ -7,7 +7,7 @@ import { RecordFieldComponentInstanceContext } from '@/object-record/record-fiel
|
||||
import { FieldContext } from '@/object-record/record-field/ui/contexts/FieldContext';
|
||||
import { FieldInputEventContext } from '@/object-record/record-field/ui/contexts/FieldInputEventContext';
|
||||
|
||||
import { type FieldRichTextV2Metadata } from '@/object-record/record-field/ui/types/FieldMetadata';
|
||||
import { type FieldRichTextMetadata } from '@/object-record/record-field/ui/types/FieldMetadata';
|
||||
import { useAvailableComponentInstanceIdOrThrow } from '@/ui/utilities/state/component-state/hooks/useAvailableComponentInstanceIdOrThrow';
|
||||
import { styled } from '@linaria/react';
|
||||
import { Suspense, lazy, useContext, useRef } from 'react';
|
||||
@@ -59,7 +59,7 @@ export const RichTextFieldInput = () => {
|
||||
id: recordId,
|
||||
targetObjectNameSingular: (
|
||||
fieldDefinition as {
|
||||
metadata: FieldRichTextV2Metadata;
|
||||
metadata: FieldRichTextMetadata;
|
||||
}
|
||||
).metadata.objectMetadataNameSingular as
|
||||
| CoreObjectNameSingular.Note
|
||||
|
||||
+1
-1
@@ -65,7 +65,7 @@ const RichTextFieldInputWithContext = () => {
|
||||
fieldDefinition: {
|
||||
fieldMetadataId: 'richText',
|
||||
label: 'Rich Text',
|
||||
type: FieldMetadataType.RICH_TEXT_V2,
|
||||
type: FieldMetadataType.RICH_TEXT,
|
||||
iconName: 'IconRichText',
|
||||
metadata: {
|
||||
fieldName: 'richText',
|
||||
|
||||
+3
-3
@@ -131,7 +131,7 @@ export type FieldRawJsonMetadata = BaseFieldMetadata & {
|
||||
settings?: null;
|
||||
};
|
||||
|
||||
export type FieldRichTextV2Metadata = BaseFieldMetadata & {
|
||||
export type FieldRichTextMetadata = BaseFieldMetadata & {
|
||||
settings?: null;
|
||||
};
|
||||
|
||||
@@ -225,7 +225,7 @@ export type FieldMetadata =
|
||||
| FieldArrayMetadata
|
||||
| FieldTsVectorMetadata
|
||||
| FieldRawJsonMetadata
|
||||
| FieldRichTextV2Metadata;
|
||||
| FieldRichTextMetadata;
|
||||
|
||||
export type FieldTextValue = string;
|
||||
export type FieldUUidValue = string; // TODO: can we replace with a template literal type, or maybe overkill ?
|
||||
@@ -279,7 +279,7 @@ export type FieldRelationValue<
|
||||
export type Json = ZodHelperLiteral | { [key: string]: Json } | Json[];
|
||||
export type FieldJsonValue = Record<string, Json> | Json[] | null;
|
||||
|
||||
export type FieldRichTextV2Value = {
|
||||
export type FieldRichTextValue = {
|
||||
blocknote: string | null;
|
||||
markdown: string | null;
|
||||
};
|
||||
|
||||
+3
-3
@@ -24,7 +24,7 @@ import {
|
||||
type FieldRatingMetadata,
|
||||
type FieldRawJsonMetadata,
|
||||
type FieldRelationMetadata,
|
||||
type FieldRichTextV2Metadata,
|
||||
type FieldRichTextMetadata,
|
||||
type FieldSelectMetadata,
|
||||
type FieldTextMetadata,
|
||||
type FieldUuidMetadata,
|
||||
@@ -74,8 +74,8 @@ type AssertFieldMetadataFunction = <
|
||||
? FieldAddressMetadata
|
||||
: E extends 'RAW_JSON'
|
||||
? FieldRawJsonMetadata
|
||||
: E extends 'RICH_TEXT_V2'
|
||||
? FieldRichTextV2Metadata
|
||||
: E extends 'RICH_TEXT'
|
||||
? FieldRichTextMetadata
|
||||
: E extends 'ACTOR'
|
||||
? FieldActorMetadata
|
||||
: E extends 'ARRAY'
|
||||
|
||||
+4
-4
@@ -3,10 +3,10 @@ import { FieldMetadataType } from '~/generated-metadata/graphql';
|
||||
import { type FieldDefinition } from '@/object-record/record-field/ui/types/FieldDefinition';
|
||||
import {
|
||||
type FieldMetadata,
|
||||
type FieldRichTextV2Metadata,
|
||||
type FieldRichTextMetadata,
|
||||
} from '@/object-record/record-field/ui/types/FieldMetadata';
|
||||
|
||||
export const isFieldRichTextV2 = (
|
||||
export const isFieldRichText = (
|
||||
field: Pick<FieldDefinition<FieldMetadata>, 'type'>,
|
||||
): field is FieldDefinition<FieldRichTextV2Metadata> =>
|
||||
field.type === FieldMetadataType.RICH_TEXT_V2;
|
||||
): field is FieldDefinition<FieldRichTextMetadata> =>
|
||||
field.type === FieldMetadataType.RICH_TEXT;
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
import { type FieldRichTextValue } from '@/object-record/record-field/ui/types/FieldMetadata';
|
||||
import { z } from 'zod';
|
||||
|
||||
export const richTextSchema: z.ZodType<FieldRichTextValue> = z.object({
|
||||
blocknote: z.string().nullable(),
|
||||
markdown: z.string().nullable(),
|
||||
});
|
||||
|
||||
export const isFieldRichTextValue = (
|
||||
fieldValue: unknown,
|
||||
): fieldValue is FieldRichTextValue =>
|
||||
richTextSchema.safeParse(fieldValue).success;
|
||||
-12
@@ -1,12 +0,0 @@
|
||||
import { type FieldRichTextV2Value } from '@/object-record/record-field/ui/types/FieldMetadata';
|
||||
import { z } from 'zod';
|
||||
|
||||
export const richTextV2Schema: z.ZodType<FieldRichTextV2Value> = z.object({
|
||||
blocknote: z.string().nullable(),
|
||||
markdown: z.string().nullable(),
|
||||
});
|
||||
|
||||
export const isFieldRichTextV2Value = (
|
||||
fieldValue: unknown,
|
||||
): fieldValue is FieldRichTextV2Value =>
|
||||
richTextV2Schema.safeParse(fieldValue).success;
|
||||
+4
-4
@@ -32,8 +32,8 @@ import { isFieldPosition } from '@/object-record/record-field/ui/types/guards/is
|
||||
import { isFieldRating } from '@/object-record/record-field/ui/types/guards/isFieldRating';
|
||||
import { isFieldRawJson } from '@/object-record/record-field/ui/types/guards/isFieldRawJson';
|
||||
import { isFieldRelation } from '@/object-record/record-field/ui/types/guards/isFieldRelation';
|
||||
import { isFieldRichTextV2 } from '@/object-record/record-field/ui/types/guards/isFieldRichTextV2';
|
||||
import { isFieldRichTextV2Value } from '@/object-record/record-field/ui/types/guards/isFieldRichTextValueV2';
|
||||
import { isFieldRichText } from '@/object-record/record-field/ui/types/guards/isFieldRichText';
|
||||
import { isFieldRichTextValue } from '@/object-record/record-field/ui/types/guards/isFieldRichTextValue';
|
||||
import { isFieldSelect } from '@/object-record/record-field/ui/types/guards/isFieldSelect';
|
||||
import { isFieldSelectValue } from '@/object-record/record-field/ui/types/guards/isFieldSelectValue';
|
||||
import { isFieldText } from '@/object-record/record-field/ui/types/guards/isFieldText';
|
||||
@@ -177,9 +177,9 @@ export const isFieldValueEmpty = ({
|
||||
return false;
|
||||
}
|
||||
|
||||
if (isFieldRichTextV2(fieldDefinition)) {
|
||||
if (isFieldRichText(fieldDefinition)) {
|
||||
return (
|
||||
!isFieldRichTextV2Value(fieldValue) || isValueEmpty(fieldValue?.markdown)
|
||||
!isFieldRichTextValue(fieldValue) || isValueEmpty(fieldValue?.markdown)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
+5
-5
@@ -22,7 +22,7 @@ import {
|
||||
type RatingFilter,
|
||||
type RawJsonFilter,
|
||||
type RecordGqlOperationFilter,
|
||||
type RichTextV2Filter,
|
||||
type RichTextFilter,
|
||||
type SelectFilter,
|
||||
type StringFilter,
|
||||
type TSVectorFilter,
|
||||
@@ -40,7 +40,7 @@ import {
|
||||
isMatchingMultiSelectFilter,
|
||||
isMatchingRatingFilter,
|
||||
isMatchingRawJsonFilter,
|
||||
isMatchingRichTextV2Filter,
|
||||
isMatchingRichTextFilter,
|
||||
isMatchingSelectFilter,
|
||||
isMatchingStringFilter,
|
||||
isMatchingTSVectorFilter,
|
||||
@@ -235,9 +235,9 @@ export const isRecordMatchingFilter = ({
|
||||
value: record[filterKey],
|
||||
});
|
||||
}
|
||||
case FieldMetadataType.RICH_TEXT_V2: {
|
||||
return isMatchingRichTextV2Filter({
|
||||
richTextV2Filter: filterValue as RichTextV2Filter,
|
||||
case FieldMetadataType.RICH_TEXT: {
|
||||
return isMatchingRichTextFilter({
|
||||
richTextFilter: filterValue as RichTextFilter,
|
||||
value: record[filterKey],
|
||||
});
|
||||
}
|
||||
|
||||
+1
-1
@@ -375,7 +375,7 @@ const SUPPORTED_COMPOSITE_FIELD_TYPES: FieldMetadataType[] = [
|
||||
FieldMetadataType.EMAILS,
|
||||
FieldMetadataType.PHONES,
|
||||
FieldMetadataType.ACTOR,
|
||||
FieldMetadataType.RICH_TEXT_V2,
|
||||
FieldMetadataType.RICH_TEXT,
|
||||
];
|
||||
|
||||
const computeValueFromSubFieldType = ({
|
||||
|
||||
+1
-1
@@ -48,7 +48,7 @@ export const useBuildSpreadsheetImportFields = () => {
|
||||
case FieldMetadataType.FULL_NAME:
|
||||
case FieldMetadataType.LINKS:
|
||||
case FieldMetadataType.PHONES:
|
||||
case FieldMetadataType.RICH_TEXT_V2:
|
||||
case FieldMetadataType.RICH_TEXT:
|
||||
return handleCompositeFields({
|
||||
fieldMetadataItem,
|
||||
fieldType: fieldMetadataItem.type,
|
||||
|
||||
+1
-1
@@ -251,7 +251,7 @@ describe('buildRecordFromImportedStructuredRow', () => {
|
||||
universalIdentifier: '16',
|
||||
name: 'richTextField',
|
||||
label: 'Rich Text Field',
|
||||
type: FieldMetadataType.RICH_TEXT_V2,
|
||||
type: FieldMetadataType.RICH_TEXT,
|
||||
isNullable: true,
|
||||
isActive: true,
|
||||
isCustom: false,
|
||||
|
||||
+2
-2
@@ -196,7 +196,7 @@ export const buildRecordFromImportedStructuredRow = ({
|
||||
additionalPhones: phoneArrayJSONSchema.parse,
|
||||
},
|
||||
|
||||
[FieldMetadataType.RICH_TEXT_V2]: {
|
||||
[FieldMetadataType.RICH_TEXT]: {
|
||||
blocknote: castToString,
|
||||
markdown: castToString,
|
||||
},
|
||||
@@ -222,7 +222,7 @@ export const buildRecordFromImportedStructuredRow = ({
|
||||
case FieldMetadataType.CURRENCY:
|
||||
case FieldMetadataType.ADDRESS:
|
||||
case FieldMetadataType.LINKS:
|
||||
case FieldMetadataType.RICH_TEXT_V2:
|
||||
case FieldMetadataType.RICH_TEXT:
|
||||
case FieldMetadataType.EMAILS:
|
||||
case FieldMetadataType.FULL_NAME: {
|
||||
const compositeData = buildCompositeFieldRecord(
|
||||
|
||||
@@ -95,7 +95,7 @@ export const generateEmptyFieldValue = ({
|
||||
case FieldMetadataType.RAW_JSON: {
|
||||
return null;
|
||||
}
|
||||
case FieldMetadataType.RICH_TEXT_V2: {
|
||||
case FieldMetadataType.RICH_TEXT: {
|
||||
return {
|
||||
blocknote: null,
|
||||
markdown: null,
|
||||
|
||||
Reference in New Issue
Block a user