Skip to content

Commit 690d34d

Browse files
authored
Merge pull request #1512 from rocket-admin/backend_table_settings_rework
Add new fields and enum for table settings: list_fields, list_per_page, ordering, and ordering_field
2 parents cbc5281 + f208767 commit 690d34d

3 files changed

Lines changed: 145 additions & 88 deletions

File tree

backend/src/entities/table-settings/common-table-settings/table-settings.entity.ts

Lines changed: 78 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -4,77 +4,107 @@ import { ConnectionEntity } from '../../connection/connection.entity.js';
44
import { CustomFieldsEntity } from '../../custom-field/custom-fields.entity.js';
55
import { TableActionEntity } from '../../table-actions/table-actions-module/table-action.entity.js';
66
import { TableWidgetEntity } from '../../widget/table-widget.entity.js';
7+
import { QueryOrderingEnum } from '../../../enums/query-ordering.enum.js';
78

89
@Entity('tableSettings')
910
@Unique(['connection_id', 'table_name'])
1011
export class TableSettingsEntity {
11-
@PrimaryGeneratedColumn('uuid')
12-
id: string;
12+
@PrimaryGeneratedColumn('uuid')
13+
id: string;
1314

14-
@Column({ default: null })
15-
table_name: string;
15+
@Column({ default: null })
16+
table_name: string;
1617

17-
@Column({ default: null })
18-
display_name: string;
18+
@Column({ default: null })
19+
display_name: string;
1920

20-
@Column('varchar', { array: true, default: {} })
21-
search_fields: string[];
21+
@Column('varchar', { array: true, default: {} })
22+
search_fields: string[];
2223

23-
@Column('varchar', { array: true, default: {} })
24-
excluded_fields: string[];
24+
@Column('varchar', { array: true, default: {} })
25+
excluded_fields: string[];
2526

26-
@Column('varchar', { array: true, default: {} })
27-
identification_fields: string[];
27+
@Column('varchar', { array: true, default: {} })
28+
list_fields: string[];
2829

29-
@Column({ default: null })
30-
identity_column: string;
30+
@Column('varchar', { array: true, default: {} })
31+
identification_fields: string[];
3132

32-
@Column('varchar', { array: true, default: {} })
33-
readonly_fields: string[];
33+
@Column('int', { default: null })
34+
list_per_page: number;
3435

35-
@Column('varchar', { array: true, default: {} })
36-
sortable_by: string[];
36+
@Column('enum', {
37+
nullable: true,
38+
enum: QueryOrderingEnum,
39+
default: null,
40+
})
41+
ordering!: QueryOrderingEnum;
3742

38-
@Column('varchar', { array: true, default: {} })
39-
autocomplete_columns: string[];
43+
@Column('varchar', { default: null })
44+
ordering_field: string;
4045

41-
@Column('varchar', { array: true, default: null })
42-
columns_view: string[];
46+
@Column({ default: null })
47+
identity_column: string;
4348

44-
@Column({ default: true, type: 'boolean' })
45-
can_delete: boolean;
49+
@Column('varchar', { array: true, default: {} })
50+
readonly_fields: string[];
4651

47-
@Column({ default: true, type: 'boolean' })
48-
can_update: boolean;
52+
@Column('varchar', { array: true, default: {} })
53+
sortable_by: string[];
4954

50-
@Column({ default: true, type: 'boolean' })
51-
can_add: boolean;
55+
@Column('varchar', { array: true, default: {} })
56+
autocomplete_columns: string[];
5257

53-
@Column({ default: true, type: 'boolean' })
54-
allow_csv_export: boolean;
58+
@Column('varchar', { array: true, default: null })
59+
columns_view: string[];
5560

56-
@Column({ default: true, type: 'boolean' })
57-
allow_csv_import: boolean;
61+
@Column({ default: true, type: 'boolean' })
62+
can_delete: boolean;
5863

59-
@Column('varchar', { array: true, default: null })
60-
sensitive_fields: string[];
64+
@Column({ default: true, type: 'boolean' })
65+
can_update: boolean;
6166

62-
@Column('varchar', { default: null })
63-
icon: string;
67+
@Column({ default: true, type: 'boolean' })
68+
can_add: boolean;
6469

65-
@Transform(({ value: connection }) => connection.id)
66-
@ManyToOne((_) => ConnectionEntity, (connection) => connection.settings, {
67-
onDelete: 'CASCADE',
68-
})
69-
@JoinColumn()
70-
connection_id: Relation<ConnectionEntity>;
70+
@Column({ default: true, type: 'boolean' })
71+
allow_csv_export: boolean;
7172

72-
@OneToMany((_) => CustomFieldsEntity, (fields) => fields.settings)
73-
custom_fields: Relation<CustomFieldsEntity>[];
73+
@Column({ default: true, type: 'boolean' })
74+
allow_csv_import: boolean;
7475

75-
@OneToMany((_) => TableWidgetEntity, (table_widgets) => table_widgets.settings)
76-
table_widgets: Relation<TableWidgetEntity>[];
76+
@Column('varchar', { array: true, default: null })
77+
sensitive_fields: string[];
7778

78-
@OneToMany((_) => TableActionEntity, (table_actions) => table_actions.settings)
79-
table_actions: Relation<TableActionEntity>[];
79+
@Column('varchar', { default: null })
80+
icon: string;
81+
82+
@Transform(({ value: connection }) => connection.id)
83+
@ManyToOne(
84+
(_) => ConnectionEntity,
85+
(connection) => connection.settings,
86+
{
87+
onDelete: 'CASCADE',
88+
},
89+
)
90+
@JoinColumn()
91+
connection_id: Relation<ConnectionEntity>;
92+
93+
@OneToMany(
94+
(_) => CustomFieldsEntity,
95+
(fields) => fields.settings,
96+
)
97+
custom_fields: Relation<CustomFieldsEntity>[];
98+
99+
@OneToMany(
100+
(_) => TableWidgetEntity,
101+
(table_widgets) => table_widgets.settings,
102+
)
103+
table_widgets: Relation<TableWidgetEntity>[];
104+
105+
@OneToMany(
106+
(_) => TableActionEntity,
107+
(table_actions) => table_actions.settings,
108+
)
109+
table_actions: Relation<TableActionEntity>[];
80110
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { MigrationInterface, QueryRunner } from 'typeorm';
2+
3+
export class RestoreFieldsInCommonTableSettings1768987695763 implements MigrationInterface {
4+
name = 'RestoreFieldsInCommonTableSettings1768987695763';
5+
6+
public async up(queryRunner: QueryRunner): Promise<void> {
7+
await queryRunner.query(
8+
`ALTER TABLE "tableSettings" ADD "list_fields" character varying array NOT NULL DEFAULT '{}'`,
9+
);
10+
await queryRunner.query(`ALTER TABLE "tableSettings" ADD "list_per_page" integer`);
11+
await queryRunner.query(`CREATE TYPE "public"."tableSettings_ordering_enum" AS ENUM('ASC', 'DESC')`);
12+
await queryRunner.query(`ALTER TABLE "tableSettings" ADD "ordering" "public"."tableSettings_ordering_enum"`);
13+
await queryRunner.query(`ALTER TABLE "tableSettings" ADD "ordering_field" character varying`);
14+
}
15+
16+
public async down(queryRunner: QueryRunner): Promise<void> {
17+
await queryRunner.query(`ALTER TABLE "tableSettings" DROP COLUMN "ordering_field"`);
18+
await queryRunner.query(`ALTER TABLE "tableSettings" DROP COLUMN "ordering"`);
19+
await queryRunner.query(`DROP TYPE "public"."tableSettings_ordering_enum"`);
20+
await queryRunner.query(`ALTER TABLE "tableSettings" DROP COLUMN "list_per_page"`);
21+
await queryRunner.query(`ALTER TABLE "tableSettings" DROP COLUMN "list_fields"`);
22+
}
23+
}

shared-code/src/helpers/data-structures-builders/table-settings.ds.builder.ts

Lines changed: 44 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -2,51 +2,55 @@ import { TableSettingsDS } from '../../data-access-layer/shared/data-structures/
22
import { QueryOrderingEnum } from '../../shared/enums/query-ordering.enum.js';
33

44
type CommonTableSettingsInput = {
5-
table_name: string;
6-
display_name: string;
7-
search_fields: string[];
8-
excluded_fields: string[];
9-
identification_fields: string[];
10-
identity_column: string;
11-
readonly_fields: string[];
12-
sortable_by: string[];
13-
autocomplete_columns: string[];
14-
columns_view: string[];
15-
can_delete: boolean;
16-
can_update: boolean;
17-
can_add: boolean;
18-
sensitive_fields: string[];
5+
table_name: string;
6+
display_name: string;
7+
search_fields: string[];
8+
excluded_fields: string[];
9+
identification_fields: string[];
10+
identity_column: string;
11+
readonly_fields: string[];
12+
sortable_by: string[];
13+
autocomplete_columns: string[];
14+
columns_view: string[];
15+
can_delete: boolean;
16+
can_update: boolean;
17+
can_add: boolean;
18+
sensitive_fields: string[];
19+
ordering: QueryOrderingEnum;
20+
ordering_field: string;
21+
list_per_page: number;
22+
list_fields: string[];
1923
};
2024

2125
type PersonalTableSettingsInput = {
22-
ordering: QueryOrderingEnum;
23-
ordering_field: string;
24-
list_per_page: number;
25-
list_fields: string[];
26+
ordering: QueryOrderingEnum;
27+
ordering_field: string;
28+
list_per_page: number;
29+
list_fields: string[];
2630
};
2731

2832
export function buildDAOsTableSettingsDs(
29-
commonTableSettings: CommonTableSettingsInput | null,
30-
personalTableSettings: PersonalTableSettingsInput | null,
33+
commonTableSettings: CommonTableSettingsInput | null,
34+
personalTableSettings: PersonalTableSettingsInput | null,
3135
): TableSettingsDS {
32-
return {
33-
table_name: commonTableSettings?.table_name,
34-
display_name: commonTableSettings?.display_name,
35-
search_fields: commonTableSettings?.search_fields,
36-
excluded_fields: commonTableSettings?.excluded_fields,
37-
list_fields: personalTableSettings?.list_fields || [],
38-
identification_fields: commonTableSettings?.identification_fields,
39-
list_per_page: personalTableSettings?.list_per_page,
40-
ordering: personalTableSettings?.ordering,
41-
ordering_field: personalTableSettings?.ordering_field,
42-
identity_column: commonTableSettings?.identity_column,
43-
readonly_fields: commonTableSettings?.readonly_fields,
44-
sortable_by: commonTableSettings?.sortable_by,
45-
autocomplete_columns: commonTableSettings?.autocomplete_columns,
46-
columns_view: commonTableSettings?.columns_view,
47-
can_delete: commonTableSettings?.can_delete,
48-
can_update: commonTableSettings?.can_update,
49-
can_add: commonTableSettings?.can_add,
50-
sensitive_fields: commonTableSettings?.sensitive_fields,
51-
};
36+
return {
37+
table_name: commonTableSettings?.table_name,
38+
display_name: commonTableSettings?.display_name,
39+
search_fields: commonTableSettings?.search_fields,
40+
excluded_fields: commonTableSettings?.excluded_fields,
41+
list_fields: personalTableSettings?.list_fields || commonTableSettings?.list_fields || [],
42+
identification_fields: commonTableSettings?.identification_fields,
43+
list_per_page: personalTableSettings?.list_per_page || commonTableSettings?.list_per_page,
44+
ordering: personalTableSettings?.ordering || commonTableSettings?.ordering,
45+
ordering_field: personalTableSettings?.ordering_field || commonTableSettings?.ordering_field,
46+
identity_column: commonTableSettings?.identity_column,
47+
readonly_fields: commonTableSettings?.readonly_fields,
48+
sortable_by: commonTableSettings?.sortable_by,
49+
autocomplete_columns: commonTableSettings?.autocomplete_columns,
50+
columns_view: commonTableSettings?.columns_view,
51+
can_delete: commonTableSettings?.can_delete,
52+
can_update: commonTableSettings?.can_update,
53+
can_add: commonTableSettings?.can_add,
54+
sensitive_fields: commonTableSettings?.sensitive_fields,
55+
};
5256
}

0 commit comments

Comments
 (0)