Infinite scrolling in relation picker menu (#12051)

https://github.com/user-attachments/assets/4be785e0-ea8a-4c8e-840e-6fa0a663d7ba

Closes #11938

---------

Co-authored-by: martmull <martmull@hotmail.fr>
This commit is contained in:
Abdul Rahman
2025-05-23 20:53:09 +05:30
committed by GitHub
parent 6ef9a3b4c9
commit af5762c8ba
37 changed files with 1867 additions and 562 deletions

View File

@ -23,42 +23,17 @@ export class SeederService {
private readonly workspaceDataSourceService: WorkspaceDataSourceService,
) {}
public async seedCustomObjects(
dataSourceId: string,
public async seedCustomObjectRecords(
workspaceId: string,
objectMetadataSeed: ObjectMetadataSeed,
// eslint-disable-next-line @typescript-eslint/no-explicit-any
objectRecordSeeds: Record<string, any>[],
): Promise<void> {
const createdObjectMetadata = await this.objectMetadataService.createOne({
...objectMetadataSeed,
dataSourceId,
) {
const { fieldMetadataSeeds, objectMetadata } = await this.getSeedMetadata(
workspaceId,
});
if (!createdObjectMetadata) {
throw new Error("Object metadata couldn't be created");
}
await this.fieldMetadataService.createMany(
objectMetadataSeed.fields.map((fieldMetadataSeed) => ({
...fieldMetadataSeed,
objectMetadataId: createdObjectMetadata.id,
workspaceId,
})),
objectMetadataSeed,
);
const objectMetadataAfterFieldCreation =
await this.objectMetadataService.findOneWithinWorkspace(workspaceId, {
where: { nameSingular: objectMetadataSeed.nameSingular },
});
if (!objectMetadataAfterFieldCreation) {
throw new Error(
"Object metadata couldn't be found after field creation.",
);
}
const schemaName =
this.workspaceDataSourceService.getSchemaName(workspaceId);
@ -67,24 +42,11 @@ export class SeederService {
const entityManager: EntityManager = mainDataSource.createEntityManager();
const filteredFieldMetadataSeeds = objectMetadataSeed.fields.filter(
(field) =>
objectMetadataAfterFieldCreation.fields.some(
(f) => f.name === field.name || f.name === `name`,
),
);
if (filteredFieldMetadataSeeds.length === 0) {
throw new Error('No fields found for seeding, check metadata file');
}
this.addNameFieldToFieldMetadataSeeds(filteredFieldMetadataSeeds);
const objectRecordSeedsAsSQLFlattenedSeeds = objectRecordSeeds.map(
(recordSeed) => {
const objectRecordSeedsAsSQLFlattenedSeeds = {};
for (const field of filteredFieldMetadataSeeds) {
for (const field of fieldMetadataSeeds) {
if (isCompositeFieldMetadataType(field.type)) {
const compositeFieldTypeDefinition = compositeTypeDefinitions.get(
field.type,
@ -165,7 +127,7 @@ export class SeederService {
.createQueryBuilder()
.insert()
.into(
`${schemaName}.${computeTableName(objectMetadataAfterFieldCreation.nameSingular, true)}`,
`${schemaName}.${computeTableName(objectMetadata.nameSingular, true)}`,
sqlColumnNames,
)
.orIgnore()
@ -174,6 +136,37 @@ export class SeederService {
.execute();
}
public async seedCustomObjects(
dataSourceId: string,
workspaceId: string,
objectMetadataSeed: ObjectMetadataSeed,
): Promise<void> {
const createdObjectMetadata = await this.objectMetadataService.createOne({
...objectMetadataSeed,
dataSourceId,
workspaceId,
});
if (!createdObjectMetadata) {
throw new Error("Object metadata couldn't be created");
}
await this.fieldMetadataService.createMany(
objectMetadataSeed.fields.map((fieldMetadataSeed) => ({
...fieldMetadataSeed,
objectMetadataId: createdObjectMetadata.id,
workspaceId,
})),
);
const { fieldMetadataSeeds } = await this.getSeedMetadata(
workspaceId,
objectMetadataSeed,
);
this.addNameFieldToFieldMetadataSeeds(fieldMetadataSeeds);
}
private addNameFieldToFieldMetadataSeeds(
arrayOfMetadataFields: Pick<CreateFieldInput, 'name' | 'type' | 'label'>[],
) {
@ -184,6 +177,34 @@ export class SeederService {
});
}
private async getSeedMetadata(
workspaceId: string,
objectMetadataSeed: ObjectMetadataSeed,
) {
const objectMetadata =
await this.objectMetadataService.findOneWithinWorkspace(workspaceId, {
where: { nameSingular: objectMetadataSeed.nameSingular },
});
if (!objectMetadata) {
throw new Error(
"Object metadata couldn't be found after field creation.",
);
}
const fieldMetadataSeeds = objectMetadataSeed.fields.filter((field) =>
objectMetadata.fields.some(
(f) => f.name === field.name || f.name === `name`,
),
);
if (fieldMetadataSeeds.length === 0) {
throw new Error('No fields found for seeding, check metadata file');
}
return { fieldMetadataSeeds, objectMetadata };
}
private turnCompositeSubFieldValueAsSQLValue(
fieldType: FieldMetadataType,
subFieldName: string,