Disable activities creation for custom objects
This commit is contained in:
@ -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) ?? '');
|
||||||
|
|||||||
@ -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>
|
||||||
|
|||||||
@ -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 &&
|
||||||
|
|||||||
@ -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 =
|
||||||
|
|||||||
@ -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 <></>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
@ -238,7 +238,7 @@ export const RecordShowPage = () => {
|
|||||||
? 'Company'
|
? 'Company'
|
||||||
: objectMetadataItem?.nameSingular === 'person'
|
: objectMetadataItem?.nameSingular === 'person'
|
||||||
? 'Person'
|
? 'Person'
|
||||||
: 'Person',
|
: 'Custom',
|
||||||
}}
|
}}
|
||||||
timeline
|
timeline
|
||||||
tasks
|
tasks
|
||||||
|
|||||||
@ -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,
|
||||||
|
|||||||
@ -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',
|
||||||
|
|||||||
@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user