Aggregate count variations (#9304)
Closes https://github.com/twentyhq/private-issues/issues/222 --------- Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com> Co-authored-by: Weiko <corentin@twenty.com>
This commit is contained in:
@ -0,0 +1,15 @@
|
||||
import { FieldMetadataType } from 'src/types/FieldMetadataType';
|
||||
import { getSubfieldForAggregateOperation } from 'src/utils/aggregateOperations/getSubFieldForAggregateOperation.util';
|
||||
import { isCompositeFieldMetadataType } from 'src/utils/aggregateOperations/isCompositeFieldMetadataType.util';
|
||||
import { capitalize } from 'src/utils/strings/capitalize';
|
||||
|
||||
export const getColumnNameForAggregateOperation = (
|
||||
fieldName: string,
|
||||
fieldType: FieldMetadataType,
|
||||
) => {
|
||||
if (!isCompositeFieldMetadataType(fieldType)) {
|
||||
return fieldName;
|
||||
}
|
||||
|
||||
return `${fieldName}${capitalize(getSubfieldForAggregateOperation(fieldType) as string)}`;
|
||||
};
|
||||
@ -0,0 +1,29 @@
|
||||
import { FieldMetadataType } from 'src/types/FieldMetadataType';
|
||||
import { isCompositeFieldMetadataType } from 'src/utils/aggregateOperations/isCompositeFieldMetadataType.util';
|
||||
|
||||
export const getSubfieldForAggregateOperation = (
|
||||
fieldType: FieldMetadataType,
|
||||
) => {
|
||||
if (!isCompositeFieldMetadataType(fieldType)) {
|
||||
return undefined;
|
||||
} else {
|
||||
switch (fieldType) {
|
||||
case FieldMetadataType.CURRENCY:
|
||||
return 'amountMicros';
|
||||
case FieldMetadataType.FULL_NAME:
|
||||
return 'lastName';
|
||||
case FieldMetadataType.ADDRESS:
|
||||
return 'addressStreet1';
|
||||
case FieldMetadataType.LINKS:
|
||||
return 'primaryLinkLabel';
|
||||
case FieldMetadataType.ACTOR:
|
||||
return 'workspaceMemberId';
|
||||
case FieldMetadataType.EMAILS:
|
||||
return 'primaryEmail';
|
||||
case FieldMetadataType.PHONES:
|
||||
return 'primaryPhoneNumber';
|
||||
default:
|
||||
throw new Error(`Unsupported composite field type: ${fieldType}`);
|
||||
}
|
||||
}
|
||||
};
|
||||
@ -0,0 +1,3 @@
|
||||
export * from './getColumnNameForAggregateOperation.util';
|
||||
export * from './getSubFieldForAggregateOperation.util';
|
||||
|
||||
@ -0,0 +1,22 @@
|
||||
import { FieldMetadataType } from 'src/types/FieldMetadataType';
|
||||
|
||||
export const isCompositeFieldMetadataType = (
|
||||
type: FieldMetadataType,
|
||||
): type is
|
||||
| FieldMetadataType.CURRENCY
|
||||
| FieldMetadataType.FULL_NAME
|
||||
| FieldMetadataType.ADDRESS
|
||||
| FieldMetadataType.LINKS
|
||||
| FieldMetadataType.ACTOR
|
||||
| FieldMetadataType.EMAILS
|
||||
| FieldMetadataType.PHONES => {
|
||||
return [
|
||||
FieldMetadataType.CURRENCY,
|
||||
FieldMetadataType.FULL_NAME,
|
||||
FieldMetadataType.ADDRESS,
|
||||
FieldMetadataType.LINKS,
|
||||
FieldMetadataType.ACTOR,
|
||||
FieldMetadataType.EMAILS,
|
||||
FieldMetadataType.PHONES,
|
||||
].includes(type);
|
||||
};
|
||||
7
packages/twenty-shared/src/utils/strings/capitalize.ts
Normal file
7
packages/twenty-shared/src/utils/strings/capitalize.ts
Normal file
@ -0,0 +1,7 @@
|
||||
import { isNonEmptyString } from '@sniptt/guards';
|
||||
|
||||
export const capitalize = (stringToCapitalize: string) => {
|
||||
if (!isNonEmptyString(stringToCapitalize)) return '';
|
||||
|
||||
return stringToCapitalize[0].toUpperCase() + stringToCapitalize.slice(1);
|
||||
};
|
||||
Reference in New Issue
Block a user