From a4e5e486f58beab63e38eea7d15203f8413649a8 Mon Sep 17 00:00:00 2001
From: Marie <51697796+ijreilly@users.noreply.github.com>
Date: Tue, 4 Jun 2024 13:02:38 +0200
Subject: [PATCH] Fix boolean field in table view (#5728)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Boolean field was not working in display (unfocused) mode.
Before fix
https://github.com/twentyhq/twenty/assets/51697796/831c34a7-b91c-4df9-81d8-ced01cc7b9b6
After fix
https://github.com/twentyhq/twenty/assets/51697796/b5103f39-64c1-4ace-ab32-353aba364471
---
.../record-field/components/FieldDisplay.tsx | 4 +++
.../components/BooleanFieldDisplay.tsx | 8 +++++
.../display/components/BooleanDisplay.tsx | 36 +++++++++++++++++++
.../field/input/components/BooleanInput.tsx | 19 ++--------
4 files changed, 51 insertions(+), 16 deletions(-)
create mode 100644 packages/twenty-front/src/modules/object-record/record-field/meta-types/display/components/BooleanFieldDisplay.tsx
create mode 100644 packages/twenty-front/src/modules/ui/field/display/components/BooleanDisplay.tsx
diff --git a/packages/twenty-front/src/modules/object-record/record-field/components/FieldDisplay.tsx b/packages/twenty-front/src/modules/object-record/record-field/components/FieldDisplay.tsx
index 738c35ac2..454cdb949 100644
--- a/packages/twenty-front/src/modules/object-record/record-field/components/FieldDisplay.tsx
+++ b/packages/twenty-front/src/modules/object-record/record-field/components/FieldDisplay.tsx
@@ -1,6 +1,8 @@
import { useContext } from 'react';
+import { BooleanFieldDisplay } from '@/object-record/record-field/meta-types/display/components/BooleanFieldDisplay';
import { LinksFieldDisplay } from '@/object-record/record-field/meta-types/display/components/LinksFieldDisplay';
+import { isFieldBoolean } from '@/object-record/record-field/types/guards/isFieldBoolean';
import { isFieldDisplayedAsPhone } from '@/object-record/record-field/types/guards/isFieldDisplayedAsPhone';
import { isFieldLinks } from '@/object-record/record-field/types/guards/isFieldLinks';
@@ -81,5 +83,7 @@ export const FieldDisplay = () => {
) : isFieldRawJson(fieldDefinition) ? (
+ ) : isFieldBoolean(fieldDefinition) ? (
+
) : null;
};
diff --git a/packages/twenty-front/src/modules/object-record/record-field/meta-types/display/components/BooleanFieldDisplay.tsx b/packages/twenty-front/src/modules/object-record/record-field/meta-types/display/components/BooleanFieldDisplay.tsx
new file mode 100644
index 000000000..5c8dcac5e
--- /dev/null
+++ b/packages/twenty-front/src/modules/object-record/record-field/meta-types/display/components/BooleanFieldDisplay.tsx
@@ -0,0 +1,8 @@
+import { useBooleanField } from '@/object-record/record-field/meta-types/hooks/useBooleanField';
+import { BooleanDisplay } from '@/ui/field/display/components/BooleanDisplay';
+
+export const BooleanFieldDisplay = () => {
+ const { fieldValue } = useBooleanField();
+
+ return ;
+};
diff --git a/packages/twenty-front/src/modules/ui/field/display/components/BooleanDisplay.tsx b/packages/twenty-front/src/modules/ui/field/display/components/BooleanDisplay.tsx
new file mode 100644
index 000000000..47911a936
--- /dev/null
+++ b/packages/twenty-front/src/modules/ui/field/display/components/BooleanDisplay.tsx
@@ -0,0 +1,36 @@
+import { useTheme } from '@emotion/react';
+import styled from '@emotion/styled';
+import { IconCheck, IconX } from 'twenty-ui';
+
+import { isDefined } from '~/utils/isDefined';
+
+const StyledBooleanFieldValue = styled.div`
+ margin-left: ${({ theme }) => theme.spacing(1)};
+`;
+
+type BooleanDisplayProps = {
+ value: boolean | null;
+};
+
+export const BooleanDisplay = ({ value }: BooleanDisplayProps) => {
+ const theme = useTheme();
+
+ return (
+ <>
+ {isDefined(value) ? (
+ <>
+ {value ? (
+
+ ) : (
+
+ )}
+
+ {value ? 'True' : 'False'}
+
+ >
+ ) : (
+ <>>
+ )}
+ >
+ );
+};
diff --git a/packages/twenty-front/src/modules/ui/field/input/components/BooleanInput.tsx b/packages/twenty-front/src/modules/ui/field/input/components/BooleanInput.tsx
index 348c89d78..30d33eecd 100644
--- a/packages/twenty-front/src/modules/ui/field/input/components/BooleanInput.tsx
+++ b/packages/twenty-front/src/modules/ui/field/input/components/BooleanInput.tsx
@@ -1,7 +1,7 @@
import { useEffect, useState } from 'react';
-import { useTheme } from '@emotion/react';
import styled from '@emotion/styled';
-import { IconCheck, IconX } from 'twenty-ui';
+
+import { BooleanDisplay } from '@/ui/field/display/components/BooleanDisplay';
const StyledEditableBooleanFieldContainer = styled.div`
align-items: center;
@@ -12,10 +12,6 @@ const StyledEditableBooleanFieldContainer = styled.div`
width: 100%;
`;
-const StyledEditableBooleanFieldValue = styled.div`
- margin-left: ${({ theme }) => theme.spacing(1)};
-`;
-
type BooleanInputProps = {
value: boolean;
onToggle?: (newValue: boolean) => void;
@@ -40,21 +36,12 @@ export const BooleanInput = ({
onToggle?.(!internalValue);
};
- const theme = useTheme();
-
return (
- {internalValue ? (
-
- ) : (
-
- )}
-
- {internalValue ? 'True' : 'False'}
-
+
);
};