diff --git a/packages/twenty-front/src/modules/activities/components/ActivityRichTextEditor.tsx b/packages/twenty-front/src/modules/activities/components/ActivityRichTextEditor.tsx
index 112a9694f..791cbe38a 100644
--- a/packages/twenty-front/src/modules/activities/components/ActivityRichTextEditor.tsx
+++ b/packages/twenty-front/src/modules/activities/components/ActivityRichTextEditor.tsx
@@ -8,14 +8,18 @@ import { useUploadAttachmentFile } from '@/activities/files/hooks/useUploadAttac
import { useUpsertActivity } from '@/activities/hooks/useUpsertActivity';
import { canCreateActivityState } from '@/activities/states/canCreateActivityState';
import { ActivityEditorHotkeyScope } from '@/activities/types/ActivityEditorHotkeyScope';
+import { contextStoreCurrentViewTypeComponentState } from '@/context-store/states/contextStoreCurrentViewTypeComponentState';
import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
import { modifyRecordFromCache } from '@/object-record/cache/utils/modifyRecordFromCache';
+import { isFieldValueReadOnly } from '@/object-record/record-field/utils/isFieldValueReadOnly';
import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState';
+import { useHasObjectReadOnlyPermission } from '@/settings/roles/hooks/useHasObjectReadOnlyPermission';
import { usePreviousHotkeyScope } from '@/ui/utilities/hotkey/hooks/usePreviousHotkeyScope';
import { useScopedHotkeys } from '@/ui/utilities/hotkey/hooks/useScopedHotkeys';
import { AppHotkeyScope } from '@/ui/utilities/hotkey/types/AppHotkeyScope';
import { isNonTextWritingKey } from '@/ui/utilities/hotkey/utils/isNonTextWritingKey';
+import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2';
import { Key } from 'ts-key-enum';
import { isDefined } from 'twenty-shared';
import { useDebouncedCallback } from 'use-debounce';
@@ -52,6 +56,19 @@ export const ActivityRichTextEditor = ({
objectNameSingular: activityObjectNameSingular,
});
+ const contextStoreCurrentViewType = useRecoilComponentValueV2(
+ contextStoreCurrentViewTypeComponentState,
+ );
+
+ const hasObjectReadOnlyPermission = useHasObjectReadOnlyPermission();
+
+ const isReadOnly = isFieldValueReadOnly({
+ objectNameSingular: activityObjectNameSingular,
+ hasObjectReadOnlyPermission,
+ contextStoreCurrentViewType,
+ isRecordDeleted: activityInStore?.deletedAt !== null,
+ });
+
const {
goBackToPreviousHotkeyScope,
setHotkeyScopeAndMemorizePreviousScope,
@@ -62,6 +79,8 @@ export const ActivityRichTextEditor = ({
});
const persistBodyDebounced = useDebouncedCallback((blocknote: string) => {
+ if (isReadOnly) return;
+
const input = {
bodyV2: {
blocknote,
@@ -301,6 +320,7 @@ export const ActivityRichTextEditor = ({
onBlur={handlerBlockEditorBlur}
onChange={handleEditorChange}
editor={editor}
+ readonly={isReadOnly}
/>
>
);
diff --git a/packages/twenty-front/src/modules/ui/layout/show-page/components/ShowPageActivityContainer.tsx b/packages/twenty-front/src/modules/ui/layout/show-page/components/ShowPageActivityContainer.tsx
index bedc34414..a20c2a61a 100644
--- a/packages/twenty-front/src/modules/ui/layout/show-page/components/ShowPageActivityContainer.tsx
+++ b/packages/twenty-front/src/modules/ui/layout/show-page/components/ShowPageActivityContainer.tsx
@@ -51,6 +51,11 @@ export const ShowPageActivityContainer = ({
isNewViewableRecordLoadingState,
);
+ const activityObjectNameSingular =
+ targetableObject.targetObjectNameSingular as
+ | CoreObjectNameSingular.Note
+ | CoreObjectNameSingular.Task;
+
return !isNewViewableRecordLoading ? (
}>