Feat/error boundaries (#2779)

* - Changed to objectNameSingular always defined
- Added ErrorCatchAll

* - Added mock mode for companies logged out
- Added a proper ErrorBoundary component

* Removed react-error-boundary

* Implemented proper ErrorBoundary

* Fixes

* Change strategy about mocks

---------

Co-authored-by: Charles Bochet <charles@twenty.com>
This commit is contained in:
Lucas Bordeau
2023-12-01 22:06:38 +01:00
committed by GitHub
parent a301f451f9
commit 74b077f3ca
75 changed files with 4213 additions and 674 deletions
@@ -67,7 +67,7 @@ export const ActivityComments = ({
const currentWorkspaceMember = useRecoilValue(currentWorkspaceMemberState);
const { records: comments } = useFindManyRecords({
objectNamePlural: 'comments',
objectNameSingular: 'comment',
filter: {
activityId: {
eq: activity?.id ?? '',
@@ -5,7 +5,7 @@ import { ActivityTargetableEntity } from '../../types/ActivityTargetableEntity';
export const useAttachments = (entity: ActivityTargetableEntity) => {
const { records: attachments } = useFindManyRecords({
objectNamePlural: 'attachments',
objectNameSingular: 'attachment',
filter: {
[entity.type === 'Company' ? 'companyId' : 'personId']: { eq: entity.id },
},
@@ -87,7 +87,7 @@ export const ActivityTargetInlineCellEditMode = ({
orderByField: 'createdAt',
mappingFunction: (record: any) => identifiersMapper?.(record, 'person'),
selectedIds: initialPeopleIds,
objectNamePlural: 'people',
objectNameSingular: 'person',
limit: 3,
});
@@ -102,7 +102,7 @@ export const ActivityTargetInlineCellEditMode = ({
orderByField: 'createdAt',
mappingFunction: (record: any) => identifiersMapper?.(record, 'company'),
selectedIds: initialCompanyIds,
objectNamePlural: 'companies',
objectNameSingular: 'company',
limit: 3,
});
@@ -28,7 +28,7 @@ export const ActivityTargetsInlineCell = ({
) ?? [];
const { records: activityTargets } = useFindManyRecords<ActivityTarget>({
objectNamePlural: 'activityTargets',
objectNameSingular: 'activityTarget',
filter: { id: { in: activityTargetIds } },
});
@@ -5,7 +5,7 @@ import { ActivityTargetableEntity } from '../../types/ActivityTargetableEntity';
export const useNotes = (entity: ActivityTargetableEntity) => {
const { records: activityTargets } = useFindManyRecords({
objectNamePlural: 'activityTargets',
objectNameSingular: 'activityTarget',
filter: {
[entity.type === 'Company' ? 'companyId' : 'personId']: { eq: entity.id },
},
@@ -23,7 +23,7 @@ export const useNotes = (entity: ActivityTargetableEntity) => {
const { records: notes } = useFindManyRecords({
skip: !activityTargets?.length,
objectNamePlural: 'activities',
objectNameSingular: 'activity',
filter,
orderBy,
});
@@ -82,7 +82,7 @@ export const TaskRow = ({
) ?? [];
const { records: activityTargets } = useFindManyRecords<ActivityTarget>({
objectNamePlural: 'activityTargets',
objectNameSingular: 'activityTarget',
filter: { id: { in: activityTargetIds } },
});
@@ -9,7 +9,7 @@ export const useCurrentUserTaskCount = () => {
const currentWorkspaceMember = useRecoilValue(currentWorkspaceMemberState);
const { records: tasks } = useFindManyRecords({
objectNamePlural: 'activities',
objectNameSingular: 'activity',
filter: {
type: { eq: 'Task' },
completedAt: { is: 'NULL' },
@@ -22,7 +22,7 @@ export const useTasks = (props?: UseTasksProps) => {
});
const { records: activityTargets } = useFindManyRecords({
objectNamePlural: 'activityTargets',
objectNameSingular: 'activityTarget',
filter: isDefined(entity)
? {
[entity?.type === 'Company' ? 'companyId' : 'personId']: {
@@ -33,7 +33,7 @@ export const useTasks = (props?: UseTasksProps) => {
});
const { records: completeTasksData } = useFindManyRecords({
objectNamePlural: 'activities',
objectNameSingular: 'activity',
skip: !entity && !selectedFilter,
filter: {
completedAt: { is: 'NOT_NULL' },
@@ -57,7 +57,7 @@ export const useTasks = (props?: UseTasksProps) => {
});
const { records: incompleteTaskData } = useFindManyRecords({
objectNamePlural: 'activities',
objectNameSingular: 'activity',
skip: !entity && !selectedFilter,
filter: {
completedAt: { is: 'NULL' },
@@ -49,7 +49,7 @@ const StyledEmptyTimelineSubTitle = styled.div`
export const Timeline = ({ entity }: { entity: ActivityTargetableEntity }) => {
const { records: activityTargets, loading } = useFindManyRecords({
objectNamePlural: 'activityTargets',
objectNameSingular: 'activityTarget',
filter: {
[entity.type === 'Company' ? 'companyId' : 'personId']: { eq: entity.id },
},
@@ -57,7 +57,7 @@ export const Timeline = ({ entity }: { entity: ActivityTargetableEntity }) => {
const { records: activities } = useFindManyRecords({
skip: !activityTargets?.length,
objectNamePlural: 'activities',
objectNameSingular: 'activity',
filter: {
id: {
in: activityTargets?.map((activityTarget) => activityTarget.activityId),