Disable activities creation for custom objects

This commit is contained in:
Charles Bochet
2023-11-24 17:33:08 +01:00
parent cefac8435b
commit 0c56989cb1
10 changed files with 36 additions and 35 deletions

View File

@ -47,7 +47,8 @@ export const ActivityBodyEditor = ({
}, [updateOneObject, activity.id]); }, [updateOneObject, activity.id]);
const editor: BlockNoteEditor | null = useBlockNote({ const editor: BlockNoteEditor | null = useBlockNote({
initialContent: activity.body ? JSON.parse(activity.body) : undefined, initialContent:
activity.body !== '{}' ? JSON.parse(activity.body) : undefined,
editorDOMAttributes: { class: 'editor' }, editorDOMAttributes: { class: 'editor' },
onEditorContentChange: (editor) => { onEditorContentChange: (editor) => {
debounceOnChange(JSON.stringify(editor.topLevelBlocks) ?? ''); debounceOnChange(JSON.stringify(editor.topLevelBlocks) ?? '');

View File

@ -49,7 +49,7 @@ export const Notes = ({ entity }: { entity: ActivityTargetableEntity }) => {
const openCreateActivity = useOpenCreateActivityDrawer(); const openCreateActivity = useOpenCreateActivityDrawer();
if (notes?.length === 0) { if (notes?.length === 0 && entity.type !== 'Custom') {
return ( return (
<StyledTaskGroupEmptyContainer> <StyledTaskGroupEmptyContainer>
<StyledEmptyTaskGroupTitle>No note yet</StyledEmptyTaskGroupTitle> <StyledEmptyTaskGroupTitle>No note yet</StyledEmptyTaskGroupTitle>

View File

@ -66,6 +66,10 @@ export const TaskGroups = ({ entity, showAddButton }: TaskGroupsProps) => {
TasksRecoilScopeContext, TasksRecoilScopeContext,
); );
if (entity?.type === 'Custom') {
return <></>;
}
if ( if (
(activeTabId !== 'done' && (activeTabId !== 'done' &&
todayOrPreviousTasks?.length === 0 && todayOrPreviousTasks?.length === 0 &&

View File

@ -1,6 +1,5 @@
import { useTheme } from '@emotion/react'; import { useTheme } from '@emotion/react';
import styled from '@emotion/styled'; import styled from '@emotion/styled';
import { isNonEmptyString } from '@sniptt/guards';
import { ActivityTargetChips } from '@/activities/components/ActivityTargetChips'; import { ActivityTargetChips } from '@/activities/components/ActivityTargetChips';
import { useOpenActivityRightDrawer } from '@/activities/hooks/useOpenActivityRightDrawer'; import { useOpenActivityRightDrawer } from '@/activities/hooks/useOpenActivityRightDrawer';
@ -72,8 +71,7 @@ export const TaskRow = ({
const theme = useTheme(); const theme = useTheme();
const openActivityRightDrawer = useOpenActivityRightDrawer(); const openActivityRightDrawer = useOpenActivityRightDrawer();
const body = JSON.parse(isNonEmptyString(task.body) ? task.body : '{}')[0] const body = JSON.parse(task.body)[0]?.content[0]?.text;
?.content[0]?.text;
const { completeTask } = useCompleteTask(task); const { completeTask } = useCompleteTask(task);
const activityTargetIds = const activityTargetIds =

View File

@ -70,7 +70,7 @@ export const Timeline = ({ entity }: { entity: ActivityTargetableEntity }) => {
const openCreateActivity = useOpenCreateActivityDrawer(); const openCreateActivity = useOpenCreateActivityDrawer();
if (loading) { if (loading || entity.type === 'Custom') {
return <></>; return <></>;
} }

View File

@ -1,4 +1,4 @@
export type ActivityTargetableEntityType = 'Person' | 'Company'; export type ActivityTargetableEntityType = 'Person' | 'Company' | 'Custom';
export type ActivityTargetableEntity = { export type ActivityTargetableEntity = {
id: string; id: string;

View File

@ -238,7 +238,7 @@ export const RecordShowPage = () => {
? 'Company' ? 'Company'
: objectMetadataItem?.nameSingular === 'person' : objectMetadataItem?.nameSingular === 'person'
? 'Person' ? 'Person'
: 'Person', : 'Custom',
}} }}
timeline timeline
tasks tasks

View File

@ -5,13 +5,7 @@ import { useRecoilCallback, useRecoilValue, useSetRecoilState } from 'recoil';
import { useFavorites } from '@/favorites/hooks/useFavorites'; import { useFavorites } from '@/favorites/hooks/useFavorites';
import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
import { useDeleteOneObjectRecord } from '@/object-record/hooks/useDeleteOneObjectRecord'; import { useDeleteOneObjectRecord } from '@/object-record/hooks/useDeleteOneObjectRecord';
import { import { IconHeart, IconHeartOff, IconTrash } from '@/ui/display/icon';
IconCheckbox,
IconHeart,
IconHeartOff,
IconNotes,
IconTrash,
} from '@/ui/display/icon';
import { actionBarEntriesState } from '@/ui/navigation/action-bar/states/actionBarEntriesState'; import { actionBarEntriesState } from '@/ui/navigation/action-bar/states/actionBarEntriesState';
import { contextMenuEntriesState } from '@/ui/navigation/context-menu/states/contextMenuEntriesState'; import { contextMenuEntriesState } from '@/ui/navigation/context-menu/states/contextMenuEntriesState';
import { useRecordTable } from '@/ui/object/record-table/hooks/useRecordTable'; import { useRecordTable } from '@/ui/object/record-table/hooks/useRecordTable';
@ -91,16 +85,16 @@ export const useRecordTableContextMenuEntries = () => {
!!favorites?.find((favorite) => favorite.recordId === selectedRowId); !!favorites?.find((favorite) => favorite.recordId === selectedRowId);
const contextMenuEntries = [ const contextMenuEntries = [
{ // {
label: 'New task', // label: 'New task',
Icon: IconCheckbox, // Icon: IconCheckbox,
onClick: () => {}, // onClick: () => {},
}, // },
{ // {
label: 'New note', // label: 'New note',
Icon: IconNotes, // Icon: IconNotes,
onClick: () => {}, // onClick: () => {},
}, // },
{ {
label: isFavorite ? 'Remove from favorites' : 'Add to favorites', label: isFavorite ? 'Remove from favorites' : 'Add to favorites',
Icon: isFavorite ? IconHeartOff : IconHeart, Icon: isFavorite ? IconHeartOff : IconHeart,
@ -129,16 +123,16 @@ export const useRecordTableContextMenuEntries = () => {
setActionBarEntries: useRecoilCallback(() => () => { setActionBarEntries: useRecoilCallback(() => () => {
setActionBarEntriesState([ setActionBarEntriesState([
{ // {
label: 'Task', // label: 'Task',
Icon: IconCheckbox, // Icon: IconCheckbox,
onClick: () => {}, // onClick: () => {},
}, // },
{ // {
label: 'Note', // label: 'Note',
Icon: IconNotes, // Icon: IconNotes,
onClick: () => {}, // onClick: () => {},
}, // },
{ {
label: 'Delete', label: 'Delete',
Icon: IconTrash, Icon: IconTrash,

View File

@ -56,18 +56,21 @@ export const ShowPageRightContainer = ({
title: 'Timeline', title: 'Timeline',
Icon: IconTimelineEvent, Icon: IconTimelineEvent,
hide: !timeline, hide: !timeline,
disabled: entity.type === 'Custom',
}, },
{ {
id: 'tasks', id: 'tasks',
title: 'Tasks', title: 'Tasks',
Icon: IconCheckbox, Icon: IconCheckbox,
hide: !tasks, hide: !tasks,
disabled: entity.type === 'Custom',
}, },
{ {
id: 'notes', id: 'notes',
title: 'Notes', title: 'Notes',
Icon: IconNotes, Icon: IconNotes,
hide: !notes, hide: !notes,
disabled: entity.type === 'Custom',
}, },
{ {
id: 'emails', id: 'emails',

View File

@ -198,6 +198,7 @@ export const SettingsObjectNewFieldStep2 = () => {
FieldMetadataType.Currency, FieldMetadataType.Currency,
FieldMetadataType.Email, FieldMetadataType.Email,
FieldMetadataType.Enum, FieldMetadataType.Enum,
FieldMetadataType.Numeric,
FieldMetadataType.FullName, FieldMetadataType.FullName,
FieldMetadataType.Link, FieldMetadataType.Link,
FieldMetadataType.Phone, FieldMetadataType.Phone,