Fix/opportunities board (#2610)

* WIP

* wip

* update pipelineStepId

* rename pipeline stage to pipeline step

* rename pipelineProgress to Opportunity

* fix UUID type not queried

* fix boardColumnTotal

* fix micros

* fixing filters, sorts and fields

* wip

* wip

* Fix opportunity board re-render

---------

Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>
Co-authored-by: bosiraphael <raphael.bosi@gmail.com>
This commit is contained in:
Charles Bochet
2023-11-21 01:24:25 +01:00
committed by GitHub
parent a33d4c8b8d
commit 09533e286b
36 changed files with 364 additions and 277 deletions

View File

@ -1,47 +1,34 @@
import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
import { MainIdentifierMapper } from '@/ui/object/field/types/MainIdentifierMapper';
import { AvatarType } from '@/users/components/Avatar';
import { Nullable } from '~/types/Nullable';
export const useObjectMainIdentifier = (
objectMetadataItem?: Nullable<ObjectMetadataItem>,
) => {
if (!objectMetadataItem) {
return {
mainIdentifierMapper: undefined,
mainIdentifierFieldMetadataId: undefined,
basePathToShowPage: undefined,
};
return {};
}
const mainIdentifierMapper: MainIdentifierMapper = (record: any) => {
if (objectMetadataItem.nameSingular === 'company') {
return {
id: record.id,
name: record.name,
avatarUrl: record.avatarUrl,
avatarType: 'squared',
record: record,
};
}
if (objectMetadataItem.nameSingular === 'workspaceMember') {
return {
id: record.id,
name: record.name.firstName + ' ' + record.name.lastName,
avatarUrl: record.avatarUrl,
avatarType: 'rounded',
record: record,
};
}
return {
id: record.id,
name: record.name,
avatarUrl: record.avatarUrl,
avatarType: 'rounded',
record: record,
};
};
const labelIdentifierFieldPaths = ['person', 'workspaceMember'].includes(
objectMetadataItem.nameSingular,
)
? ['name.firstName', 'name.lastName']
: ['name'];
const imageIdentifierFormat: AvatarType = ['company'].includes(
objectMetadataItem.nameSingular,
)
? 'squared'
: 'rounded';
const imageIdentifierUrlPrefix = ['company'].includes(
objectMetadataItem.nameSingular,
)
? 'https://favicon.twenty.com/'
: '';
const imageIdentifierUrlField = ['company'].includes(
objectMetadataItem.nameSingular,
)
? 'domainName'
: 'avatarUrl';
const mainIdentifierFieldMetadataId = objectMetadataItem.fields.find(
({ name }) => name === 'name',
@ -50,7 +37,10 @@ export const useObjectMainIdentifier = (
const basePathToShowPage = `/object/${objectMetadataItem.nameSingular}/`;
return {
mainIdentifierMapper,
labelIdentifierFieldPaths,
imageIdentifierUrlField,
imageIdentifierUrlPrefix,
imageIdentifierFormat,
mainIdentifierFieldMetadataId,
basePathToShowPage,
};

View File

@ -1,8 +1,7 @@
import { parseFieldRelationType } from '@/object-metadata/utils/parseFieldRelationType';
import { FieldMetadata } from '@/ui/object/field/types/FieldMetadata';
import { MainIdentifierMapper } from '@/ui/object/field/types/MainIdentifierMapper';
import { ColumnDefinition } from '@/ui/object/record-table/types/ColumnDefinition';
import { getLogoUrlFromDomainName } from '~/utils';
import { AvatarType } from '@/users/components/Avatar';
import { FieldMetadataItem } from '../types/FieldMetadataItem';
@ -18,34 +17,26 @@ export const formatFieldMetadataItemAsColumnDefinition = ({
const relationObjectMetadataItem =
field.toRelationMetadata?.fromObjectMetadata;
const mainIdentifierMapper: MainIdentifierMapper = (record: any) => {
if (relationObjectMetadataItem?.nameSingular === 'company') {
return {
id: record.id,
name: record.name,
avatarUrl: getLogoUrlFromDomainName(record.domainName),
avatarType: 'squared',
record: record,
};
}
if (relationObjectMetadataItem?.nameSingular === 'workspaceMember') {
return {
id: record.id,
name: record.name.firstName + ' ' + record.name.lastName,
avatarUrl: record.avatarUrl,
avatarType: 'rounded',
record: record,
};
}
return {
id: record.id,
name: record.name,
avatarUrl: record.avatarUrl,
avatarType: 'rounded',
record: record,
};
};
const labelIdentifierFieldPaths = ['person', 'workspaceMember'].includes(
relationObjectMetadataItem?.nameSingular ?? '',
)
? ['name.firstName', 'name.lastName']
: ['name'];
const imageIdentifierFormat: AvatarType = ['company'].includes(
relationObjectMetadataItem?.nameSingular ?? '',
)
? 'squared'
: 'rounded';
const imageIdentifierUrlPrefix = ['company'].includes(
relationObjectMetadataItem?.nameSingular ?? '',
)
? 'https://favicon.twenty.com/'
: '';
const imageIdentifierUrlField = ['company'].includes(
relationObjectMetadataItem?.nameSingular ?? '',
)
? 'domainName'
: 'avatarUrl';
return {
position,
@ -56,11 +47,15 @@ export const formatFieldMetadataItemAsColumnDefinition = ({
metadata: {
fieldName: field.name,
placeHolder: field.label,
mainIdentifierMapper: mainIdentifierMapper,
labelIdentifierFieldPaths,
imageIdentifierUrlField,
imageIdentifierUrlPrefix,
imageIdentifierFormat,
relationType: parseFieldRelationType(field),
searchFields: ['name'],
objectMetadataNamePlural: relationObjectMetadataItem?.namePlural,
objectMetadataNameSingular: relationObjectMetadataItem?.nameSingular,
objectMetadataNamePlural: relationObjectMetadataItem?.namePlural ?? '',
objectMetadataNameSingular:
relationObjectMetadataItem?.nameSingular ?? '',
},
iconName: field.icon ?? 'Icon123',
isVisible: true,