diff --git a/front/src/modules/ui/object/field/components/FieldDisplay.tsx b/front/src/modules/ui/object/field/components/FieldDisplay.tsx
index 091f78126..9c0d3b934 100644
--- a/front/src/modules/ui/object/field/components/FieldDisplay.tsx
+++ b/front/src/modules/ui/object/field/components/FieldDisplay.tsx
@@ -1,6 +1,8 @@
import { useContext } from 'react';
import { RelationFieldDisplay } from '@/ui/object/field/meta-types/display/components/RelationFieldDisplay';
+import { UuidFieldDisplay } from '@/ui/object/field/meta-types/display/components/UuidFieldDisplay';
+import { isFieldUuid } from '@/ui/object/field/types/guards/isFieldUuid';
import { FieldContext } from '../contexts/FieldContext';
import { ChipFieldDisplay } from '../meta-types/display/components/ChipFieldDisplay';
@@ -38,6 +40,8 @@ export const FieldDisplay = () => {
) : isFieldText(fieldDefinition) ? (
+ ) : isFieldUuid(fieldDefinition) ? (
+
) : isFieldEmail(fieldDefinition) ? (
) : isFieldDate(fieldDefinition) ? (
diff --git a/front/src/modules/ui/object/field/meta-types/display/components/UuidFieldDisplay.tsx b/front/src/modules/ui/object/field/meta-types/display/components/UuidFieldDisplay.tsx
new file mode 100644
index 000000000..6d7784be8
--- /dev/null
+++ b/front/src/modules/ui/object/field/meta-types/display/components/UuidFieldDisplay.tsx
@@ -0,0 +1,8 @@
+import { TextDisplay } from '@/ui/object/field/meta-types/display/content-display/components/TextDisplay';
+import { useUuidField } from '@/ui/object/field/meta-types/hooks/useUuidField';
+
+export const UuidFieldDisplay = () => {
+ const { fieldValue } = useUuidField();
+
+ return ;
+};
diff --git a/front/src/modules/ui/object/field/meta-types/hooks/useUuidField.ts b/front/src/modules/ui/object/field/meta-types/hooks/useUuidField.ts
new file mode 100644
index 000000000..913867fec
--- /dev/null
+++ b/front/src/modules/ui/object/field/meta-types/hooks/useUuidField.ts
@@ -0,0 +1,40 @@
+import { useContext } from 'react';
+import { useRecoilState } from 'recoil';
+
+import { isFieldUuid } from '@/ui/object/field/types/guards/isFieldUuid';
+
+import { FieldContext } from '../../contexts/FieldContext';
+import { useFieldInitialValue } from '../../hooks/useFieldInitialValue';
+import { entityFieldsFamilySelector } from '../../states/selectors/entityFieldsFamilySelector';
+import { assertFieldMetadata } from '../../types/guards/assertFieldMetadata';
+import { isFieldTextValue } from '../../types/guards/isFieldTextValue';
+
+export const useUuidField = () => {
+ const { entityId, fieldDefinition, hotkeyScope } = useContext(FieldContext);
+
+ assertFieldMetadata('UUID', isFieldUuid, fieldDefinition);
+
+ const fieldName = fieldDefinition.metadata.fieldName;
+
+ const [fieldValue, setFieldValue] = useRecoilState(
+ entityFieldsFamilySelector({
+ entityId: entityId,
+ fieldName: fieldName,
+ }),
+ );
+ const fieldTextValue = isFieldTextValue(fieldValue) ? fieldValue : '';
+
+ const fieldInitialValue = useFieldInitialValue();
+
+ const initialValue = fieldInitialValue?.isEmpty
+ ? ''
+ : fieldInitialValue?.value ?? fieldTextValue;
+
+ return {
+ fieldDefinition,
+ fieldValue: fieldTextValue,
+ initialValue,
+ setFieldValue,
+ hotkeyScope,
+ };
+};
diff --git a/front/src/modules/ui/object/field/states/selectors/isEntityFieldEmptyFamilySelector.ts b/front/src/modules/ui/object/field/states/selectors/isEntityFieldEmptyFamilySelector.ts
index 8b1f479ea..3f959634d 100644
--- a/front/src/modules/ui/object/field/states/selectors/isEntityFieldEmptyFamilySelector.ts
+++ b/front/src/modules/ui/object/field/states/selectors/isEntityFieldEmptyFamilySelector.ts
@@ -1,5 +1,6 @@
import { selectorFamily } from 'recoil';
+import { isFieldUuid } from '@/ui/object/field/types/guards/isFieldUuid';
import { assertNotNull } from '~/utils/assert';
import { FieldDefinition } from '../../types/FieldDefinition';
@@ -39,6 +40,7 @@ export const isEntityFieldEmptyFamilySelector = selectorFamily({
}) => {
return ({ get }) => {
if (
+ isFieldUuid(fieldDefinition) ||
isFieldText(fieldDefinition) ||
isFieldURL(fieldDefinition) ||
isFieldDate(fieldDefinition) ||
diff --git a/front/src/modules/ui/object/field/types/FieldMetadata.ts b/front/src/modules/ui/object/field/types/FieldMetadata.ts
index 3efcd46a1..d8e39a259 100644
--- a/front/src/modules/ui/object/field/types/FieldMetadata.ts
+++ b/front/src/modules/ui/object/field/types/FieldMetadata.ts
@@ -1,6 +1,11 @@
import { EntityForSelect } from '@/ui/input/relation-picker/types/EntityForSelect';
import { Entity } from '@/ui/input/relation-picker/types/EntityTypeForSelect';
+export type FieldUuidMetadata = {
+ placeHolder: string;
+ fieldName: string;
+};
+
export type FieldTextMetadata = {
placeHolder: string;
fieldName: string;
@@ -86,6 +91,7 @@ export type FieldBooleanMetadata = {
};
export type FieldMetadata =
+ | FieldUuidMetadata
| FieldTextMetadata
| FieldRelationMetadata
| FieldChipMetadata
@@ -103,6 +109,7 @@ export type FieldMetadata =
| FieldBooleanMetadata;
export type FieldTextValue = string;
+export type FieldUUidValue = string;
export type FieldChipValue = string;
export type FieldDateValue = string | null;
diff --git a/front/src/modules/ui/object/field/types/FieldType.ts b/front/src/modules/ui/object/field/types/FieldType.ts
index 431d8367f..cc42ee693 100644
--- a/front/src/modules/ui/object/field/types/FieldType.ts
+++ b/front/src/modules/ui/object/field/types/FieldType.ts
@@ -1,4 +1,5 @@
export type FieldType =
+ | 'UUID'
| 'TEXT'
| 'RELATION'
| 'CHIP'
diff --git a/front/src/modules/ui/object/field/types/guards/assertFieldMetadata.ts b/front/src/modules/ui/object/field/types/guards/assertFieldMetadata.ts
index dc094b207..ff3189c71 100644
--- a/front/src/modules/ui/object/field/types/guards/assertFieldMetadata.ts
+++ b/front/src/modules/ui/object/field/types/guards/assertFieldMetadata.ts
@@ -16,6 +16,7 @@ import {
FieldTextMetadata,
FieldURLMetadata,
FieldURLV2Metadata,
+ FieldUuidMetadata,
} from '../FieldMetadata';
import { FieldType } from '../FieldType';
@@ -23,6 +24,8 @@ type AssertFieldMetadataFunction = <
E extends FieldType,
T extends E extends 'TEXT'
? FieldTextMetadata
+ : E extends 'UUID'
+ ? FieldUuidMetadata
: E extends 'RELATION'
? FieldRelationMetadata
: E extends 'CHIP'
diff --git a/front/src/modules/ui/object/field/types/guards/isFieldUuid.ts b/front/src/modules/ui/object/field/types/guards/isFieldUuid.ts
new file mode 100644
index 000000000..b70efe0ea
--- /dev/null
+++ b/front/src/modules/ui/object/field/types/guards/isFieldUuid.ts
@@ -0,0 +1,6 @@
+import { FieldDefinition } from '../FieldDefinition';
+import { FieldMetadata, FieldUuidMetadata } from '../FieldMetadata';
+
+export const isFieldUuid = (
+ field: FieldDefinition,
+): field is FieldDefinition => field.type === 'UUID';