Fixed sort for Currency type (#6333)
Fixes : #6056 - Refactored the logic to get order by query variables for field types - Added a case for Currency field type
This commit is contained in:
@ -0,0 +1,15 @@
|
|||||||
|
import { FieldMetadataType } from '~/generated-metadata/graphql';
|
||||||
|
|
||||||
|
export const SORTABLE_FIELD_METADATA_TYPES = [
|
||||||
|
FieldMetadataType.DateTime,
|
||||||
|
FieldMetadataType.Date,
|
||||||
|
FieldMetadataType.Number,
|
||||||
|
FieldMetadataType.Text,
|
||||||
|
FieldMetadataType.Boolean,
|
||||||
|
FieldMetadataType.Select,
|
||||||
|
FieldMetadataType.Phone,
|
||||||
|
FieldMetadataType.Email,
|
||||||
|
FieldMetadataType.FullName,
|
||||||
|
FieldMetadataType.Rating,
|
||||||
|
FieldMetadataType.Currency,
|
||||||
|
];
|
||||||
@ -1,6 +1,6 @@
|
|||||||
import { SortDefinition } from '@/object-record/object-sort-dropdown/types/SortDefinition';
|
import { SortDefinition } from '@/object-record/object-sort-dropdown/types/SortDefinition';
|
||||||
import { FieldMetadataType } from '~/generated-metadata/graphql';
|
|
||||||
|
|
||||||
|
import { SORTABLE_FIELD_METADATA_TYPES } from '@/object-metadata/constants/SortableFieldMetadataTypes';
|
||||||
import { ObjectMetadataItem } from '../types/ObjectMetadataItem';
|
import { ObjectMetadataItem } from '../types/ObjectMetadataItem';
|
||||||
|
|
||||||
export const formatFieldMetadataItemsAsSortDefinitions = ({
|
export const formatFieldMetadataItemsAsSortDefinitions = ({
|
||||||
@ -9,20 +9,7 @@ export const formatFieldMetadataItemsAsSortDefinitions = ({
|
|||||||
fields: Array<ObjectMetadataItem['fields'][0]>;
|
fields: Array<ObjectMetadataItem['fields'][0]>;
|
||||||
}): SortDefinition[] =>
|
}): SortDefinition[] =>
|
||||||
fields.reduce((acc, field) => {
|
fields.reduce((acc, field) => {
|
||||||
if (
|
if (!SORTABLE_FIELD_METADATA_TYPES.includes(field.type)) {
|
||||||
![
|
|
||||||
FieldMetadataType.DateTime,
|
|
||||||
FieldMetadataType.Date,
|
|
||||||
FieldMetadataType.Number,
|
|
||||||
FieldMetadataType.Text,
|
|
||||||
FieldMetadataType.Boolean,
|
|
||||||
FieldMetadataType.Select,
|
|
||||||
FieldMetadataType.Phone,
|
|
||||||
FieldMetadataType.Email,
|
|
||||||
FieldMetadataType.FullName,
|
|
||||||
FieldMetadataType.Rating,
|
|
||||||
].includes(field.type)
|
|
||||||
) {
|
|
||||||
return acc;
|
return acc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
|
import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
|
||||||
import { OrderBy } from '@/object-metadata/types/OrderBy';
|
import { OrderBy } from '@/object-metadata/types/OrderBy';
|
||||||
import { getLabelIdentifierFieldMetadataItem } from '@/object-metadata/utils/getLabelIdentifierFieldMetadataItem';
|
import { getLabelIdentifierFieldMetadataItem } from '@/object-metadata/utils/getLabelIdentifierFieldMetadataItem';
|
||||||
|
import { getOrderByForFieldMetadataType } from '@/object-metadata/utils/getOrderByForFieldMetadataType';
|
||||||
import { RecordGqlOperationOrderBy } from '@/object-record/graphql/types/RecordGqlOperationOrderBy';
|
import { RecordGqlOperationOrderBy } from '@/object-record/graphql/types/RecordGqlOperationOrderBy';
|
||||||
import { FieldMetadataType } from '~/generated-metadata/graphql';
|
|
||||||
import { isDefined } from '~/utils/isDefined';
|
import { isDefined } from '~/utils/isDefined';
|
||||||
|
|
||||||
export const getOrderByFieldForObjectMetadataItem = (
|
export const getOrderByFieldForObjectMetadataItem = (
|
||||||
@ -13,23 +13,10 @@ export const getOrderByFieldForObjectMetadataItem = (
|
|||||||
getLabelIdentifierFieldMetadataItem(objectMetadataItem);
|
getLabelIdentifierFieldMetadataItem(objectMetadataItem);
|
||||||
|
|
||||||
if (isDefined(labelIdentifierFieldMetadata)) {
|
if (isDefined(labelIdentifierFieldMetadata)) {
|
||||||
switch (labelIdentifierFieldMetadata.type) {
|
return getOrderByForFieldMetadataType(
|
||||||
case FieldMetadataType.FullName:
|
labelIdentifierFieldMetadata,
|
||||||
return [
|
orderBy,
|
||||||
{
|
);
|
||||||
[labelIdentifierFieldMetadata.name]: {
|
|
||||||
firstName: orderBy ?? 'AscNullsLast',
|
|
||||||
lastName: orderBy ?? 'AscNullsLast',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
];
|
|
||||||
default:
|
|
||||||
return [
|
|
||||||
{
|
|
||||||
[labelIdentifierFieldMetadata.name]: orderBy ?? 'AscNullsLast',
|
|
||||||
},
|
|
||||||
];
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
return [
|
return [
|
||||||
{
|
{
|
||||||
|
|||||||
@ -0,0 +1,35 @@
|
|||||||
|
import { FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem';
|
||||||
|
import { OrderBy } from '@/object-metadata/types/OrderBy';
|
||||||
|
import { RecordGqlOperationOrderBy } from '@/object-record/graphql/types/RecordGqlOperationOrderBy';
|
||||||
|
import { FieldMetadataType } from '~/generated-metadata/graphql';
|
||||||
|
|
||||||
|
export const getOrderByForFieldMetadataType = (
|
||||||
|
field: Pick<FieldMetadataItem, 'id' | 'name' | 'type'>,
|
||||||
|
direction: OrderBy | null | undefined,
|
||||||
|
): RecordGqlOperationOrderBy => {
|
||||||
|
switch (field.type) {
|
||||||
|
case FieldMetadataType.FullName:
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
[field.name]: {
|
||||||
|
firstName: direction ?? 'AscNullsLast',
|
||||||
|
lastName: direction ?? 'AscNullsLast',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
];
|
||||||
|
case FieldMetadataType.Currency:
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
[field.name]: {
|
||||||
|
amountMicros: direction ?? 'AscNullsLast',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
];
|
||||||
|
default:
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
[field.name]: direction ?? 'AscNullsLast',
|
||||||
|
},
|
||||||
|
];
|
||||||
|
}
|
||||||
|
};
|
||||||
@ -2,20 +2,23 @@ import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
|
|||||||
import { OrderBy } from '@/object-metadata/types/OrderBy';
|
import { OrderBy } from '@/object-metadata/types/OrderBy';
|
||||||
import { hasPositionField } from '@/object-metadata/utils/hasPositionField';
|
import { hasPositionField } from '@/object-metadata/utils/hasPositionField';
|
||||||
import { RecordGqlOperationOrderBy } from '@/object-record/graphql/types/RecordGqlOperationOrderBy';
|
import { RecordGqlOperationOrderBy } from '@/object-record/graphql/types/RecordGqlOperationOrderBy';
|
||||||
import { Field, FieldMetadataType } from '~/generated/graphql';
|
|
||||||
import { mapArrayToObject } from '~/utils/array/mapArrayToObject';
|
import { mapArrayToObject } from '~/utils/array/mapArrayToObject';
|
||||||
import { isDefined } from '~/utils/isDefined';
|
import { isDefined } from '~/utils/isDefined';
|
||||||
import { isUndefinedOrNull } from '~/utils/isUndefinedOrNull';
|
import { isUndefinedOrNull } from '~/utils/isUndefinedOrNull';
|
||||||
|
|
||||||
|
import { FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem';
|
||||||
|
import { getOrderByForFieldMetadataType } from '@/object-metadata/utils/getOrderByForFieldMetadataType';
|
||||||
import { Sort } from '../types/Sort';
|
import { Sort } from '../types/Sort';
|
||||||
|
|
||||||
export const turnSortsIntoOrderBy = (
|
export const turnSortsIntoOrderBy = (
|
||||||
objectMetadataItem: ObjectMetadataItem,
|
objectMetadataItem: ObjectMetadataItem,
|
||||||
sorts: Sort[],
|
sorts: Sort[],
|
||||||
): RecordGqlOperationOrderBy => {
|
): RecordGqlOperationOrderBy => {
|
||||||
const fields: Pick<Field, 'id' | 'name' | 'type'>[] =
|
const fields: Pick<FieldMetadataItem, 'id' | 'name' | 'type'>[] =
|
||||||
objectMetadataItem?.fields ?? [];
|
objectMetadataItem?.fields ?? [];
|
||||||
|
|
||||||
const fieldsById = mapArrayToObject(fields, ({ id }) => id);
|
const fieldsById = mapArrayToObject(fields, ({ id }) => id);
|
||||||
|
|
||||||
const sortsOrderBy = sorts
|
const sortsOrderBy = sorts
|
||||||
.map((sort) => {
|
.map((sort) => {
|
||||||
const correspondingField = fieldsById[sort.fieldMetadataId];
|
const correspondingField = fieldsById[sort.fieldMetadataId];
|
||||||
@ -32,26 +35,14 @@ export const turnSortsIntoOrderBy = (
|
|||||||
.filter(isDefined);
|
.filter(isDefined);
|
||||||
|
|
||||||
if (hasPositionField(objectMetadataItem)) {
|
if (hasPositionField(objectMetadataItem)) {
|
||||||
return [...sortsOrderBy, { position: 'AscNullsFirst' }];
|
const positionOrderBy = [
|
||||||
|
{
|
||||||
|
position: 'AscNullsFirst',
|
||||||
|
},
|
||||||
|
] satisfies RecordGqlOperationOrderBy;
|
||||||
|
|
||||||
|
return [...sortsOrderBy, ...positionOrderBy].flat();
|
||||||
}
|
}
|
||||||
|
|
||||||
return sortsOrderBy;
|
return sortsOrderBy.flat();
|
||||||
};
|
|
||||||
|
|
||||||
const getOrderByForFieldMetadataType = (
|
|
||||||
field: Pick<Field, 'id' | 'name' | 'type'>,
|
|
||||||
direction: OrderBy,
|
|
||||||
) => {
|
|
||||||
switch (field.type) {
|
|
||||||
case FieldMetadataType.FullName:
|
|
||||||
return {
|
|
||||||
[field.name]: {
|
|
||||||
firstName: direction,
|
|
||||||
lastName: direction,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
default:
|
|
||||||
return { [field.name]: direction };
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user