fix: record group issues (#8854)
This PR is fixing the following issues with record groups: - [x] [Backend] - Only update view groups when a field is edited if this one already has view groups - [x] [Backend] - Editing a Select field metadata option brake view groups - [x] [Frontend] - Changing the group by field from one to another brake record group and doesn't remove the previous ones - [x] [Frontend & Backend] - Mark `kanbanFieldMetadataId` as deprecated in favour of `viewGroups.fieldMetadataId` Also the following has been checked: - [x] Properly displayed a table with only one view groups - [x] Properly displayed a table without view groups
This commit is contained in:
@ -1,6 +1,6 @@
|
||||
import { Injectable } from '@nestjs/common';
|
||||
|
||||
import { In } from 'typeorm';
|
||||
import { EntityManager, In } from 'typeorm';
|
||||
|
||||
import {
|
||||
FieldMetadataComplexOption,
|
||||
@ -27,6 +27,7 @@ export class FieldMetadataRelatedRecordsService {
|
||||
public async updateRelatedViewGroups(
|
||||
oldFieldMetadata: FieldMetadataEntity,
|
||||
newFieldMetadata: FieldMetadataEntity,
|
||||
transactionManager?: EntityManager,
|
||||
) {
|
||||
if (
|
||||
!isSelectFieldMetadataType(newFieldMetadata.type) ||
|
||||
@ -49,6 +50,10 @@ export class FieldMetadataRelatedRecordsService {
|
||||
);
|
||||
|
||||
for (const view of views) {
|
||||
if (view.viewGroups.length === 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const maxPosition = view.viewGroups.reduce(
|
||||
(max, viewGroup) => Math.max(max, viewGroup.position),
|
||||
0,
|
||||
@ -64,7 +69,7 @@ export class FieldMetadataRelatedRecordsService {
|
||||
}),
|
||||
);
|
||||
|
||||
await viewGroupRepository.insert(viewGroupsToCreate);
|
||||
await viewGroupRepository.insert(viewGroupsToCreate, transactionManager);
|
||||
|
||||
for (const { old: oldOption, new: newOption } of updated) {
|
||||
const viewGroup = view.viewGroups.find(
|
||||
@ -82,15 +87,19 @@ export class FieldMetadataRelatedRecordsService {
|
||||
{
|
||||
fieldValue: newOption.value,
|
||||
},
|
||||
transactionManager,
|
||||
);
|
||||
}
|
||||
|
||||
const valuesToDelete = deleted.map((option) => option.value);
|
||||
|
||||
await viewGroupRepository.delete({
|
||||
fieldMetadataId: newFieldMetadata.id,
|
||||
fieldValue: In(valuesToDelete),
|
||||
});
|
||||
await viewGroupRepository.delete(
|
||||
{
|
||||
fieldMetadataId: newFieldMetadata.id,
|
||||
fieldValue: In(valuesToDelete),
|
||||
},
|
||||
transactionManager,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@ -143,7 +152,9 @@ export class FieldMetadataRelatedRecordsService {
|
||||
|
||||
return await viewRepository.find({
|
||||
where: {
|
||||
kanbanFieldMetadataId: fieldMetadata.id,
|
||||
viewGroups: {
|
||||
fieldMetadataId: fieldMetadata.id,
|
||||
},
|
||||
},
|
||||
relations: ['viewGroups'],
|
||||
});
|
||||
|
||||
@ -87,6 +87,9 @@ export class ViewWorkspaceEntity extends BaseWorkspaceEntity {
|
||||
label: 'kanbanfieldMetadataId',
|
||||
description: 'View Kanban column field',
|
||||
})
|
||||
/**
|
||||
* @deprecated Use `viewGroups.fieldMetadataId` instead
|
||||
*/
|
||||
kanbanFieldMetadataId: string;
|
||||
|
||||
@WorkspaceField({
|
||||
|
||||
Reference in New Issue
Block a user