@solidstarters/solid-core 1.2.67 → 1.2.68

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/dist/dtos/create-field-metadata.dto.d.ts +1 -0
  2. package/dist/dtos/create-field-metadata.dto.d.ts.map +1 -1
  3. package/dist/dtos/create-field-metadata.dto.js +7 -1
  4. package/dist/dtos/create-field-metadata.dto.js.map +1 -1
  5. package/dist/entities/field-metadata.entity.d.ts +1 -0
  6. package/dist/entities/field-metadata.entity.d.ts.map +1 -1
  7. package/dist/entities/field-metadata.entity.js +5 -1
  8. package/dist/entities/field-metadata.entity.js.map +1 -1
  9. package/dist/helpers/field-crud-managers/SelectionDynamicFieldCrudManager.d.ts +1 -0
  10. package/dist/helpers/field-crud-managers/SelectionDynamicFieldCrudManager.d.ts.map +1 -1
  11. package/dist/helpers/field-crud-managers/SelectionDynamicFieldCrudManager.js +15 -1
  12. package/dist/helpers/field-crud-managers/SelectionDynamicFieldCrudManager.js.map +1 -1
  13. package/dist/helpers/field-crud-managers/SelectionStaticFieldCrudManager.d.ts +2 -1
  14. package/dist/helpers/field-crud-managers/SelectionStaticFieldCrudManager.d.ts.map +1 -1
  15. package/dist/helpers/field-crud-managers/SelectionStaticFieldCrudManager.js +16 -2
  16. package/dist/helpers/field-crud-managers/SelectionStaticFieldCrudManager.js.map +1 -1
  17. package/dist/seeders/seed-data/solid-core-metadata.json +14 -0
  18. package/dist/services/crud.service.js +2 -2
  19. package/dist/services/crud.service.js.map +1 -1
  20. package/dist/services/field-metadata.service.d.ts.map +1 -1
  21. package/dist/services/field-metadata.service.js +4 -2
  22. package/dist/services/field-metadata.service.js.map +1 -1
  23. package/dist/tsconfig.tsbuildinfo +1 -1
  24. package/package.json +1 -1
  25. package/src/dtos/create-field-metadata.dto.ts +5 -0
  26. package/src/entities/field-metadata.entity.ts +3 -0
  27. package/src/helpers/field-crud-managers/SelectionDynamicFieldCrudManager.ts +24 -0
  28. package/src/helpers/field-crud-managers/SelectionStaticFieldCrudManager.ts +25 -3
  29. package/src/seeders/seed-data/solid-core-metadata.json +14 -0
  30. package/src/services/crud.service.ts +2 -2
  31. package/src/services/field-metadata.service.ts +4 -2
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@solidstarters/solid-core",
3
- "version": "1.2.67",
3
+ "version": "1.2.68",
4
4
  "description": "This module is a NestJS module containing all the required core providers required by a Solid application",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -409,4 +409,9 @@ export class CreateFieldMetadataDto {
409
409
  @IsOptional()
410
410
  @IsBoolean()
411
411
  enableAuditTracking?: boolean;
412
+
413
+ @IsOptional()
414
+ @ApiProperty({ description: 'Is MultiSelect Field', })
415
+ @IsBoolean()
416
+ isMultiSelect: boolean;
412
417
  }
@@ -155,4 +155,7 @@ export class FieldMetadata extends CommonEntity {
155
155
 
156
156
  @Column({ name: 'enable_audit_tracking', default: false })
157
157
  enableAuditTracking: boolean;
158
+
159
+ @Column({ name: "is_multiSelect", default: false })
160
+ isMultiSelect: boolean;
158
161
  }
@@ -10,6 +10,7 @@ export interface SelectionDynamicFieldOptions {
10
10
  selectionDynamicProviderCtxt: any;
11
11
  fieldName: string;
12
12
  discoveryService: DiscoveryService;
13
+ isMultiSelect: boolean | undefined | null;
13
14
  }
14
15
 
15
16
  export class SelectionDynamicFieldCrudManager implements FieldCrudManager {
@@ -19,8 +20,31 @@ export class SelectionDynamicFieldCrudManager implements FieldCrudManager {
19
20
 
20
21
  async validate(dto: any): Promise<ValidationError[]> {
21
22
  const fieldValue: any = dto[this.options.fieldName];
23
+ const isMultiSelect = this.options?.isMultiSelect;
24
+
25
+ // return this.applyValidations(fieldValue);
26
+ // Handle multi-select scenario
27
+ if (isMultiSelect) {
28
+ let values: any[];
29
+
30
+ try {
31
+ // Try to parse the field value, which should be a JSON stringified array
32
+ values = JSON.parse(fieldValue);
33
+ } catch {
34
+ // If parsing fails, fallback to a single value
35
+ values = [fieldValue];
36
+ }
37
+
38
+ // Apply validations to each value asynchronously
39
+ const allErrors = await Promise.all(values.map(value => this.applyValidations(value)));
40
+
41
+ // Flatten the array of errors and return
42
+ return allErrors.flat();
43
+ } else {
44
+ // For non-multi-select, apply validations to the single field value
22
45
  return this.applyValidations(fieldValue);
23
46
  }
47
+ }
24
48
 
25
49
  private async applyValidations(fieldValue: any): Promise<ValidationError[]> {
26
50
  const errors: ValidationError[] = [];
@@ -7,6 +7,7 @@ export interface SelectionStaticFieldOptions {
7
7
  selectionValueType: SelectionValueType;
8
8
  required: boolean | undefined | null;
9
9
  fieldName: string;
10
+ isMultiSelect: boolean | undefined | null;
10
11
  }
11
12
 
12
13
  export class SelectionStaticFieldCrudManager implements FieldCrudManager {
@@ -14,9 +15,30 @@ export class SelectionStaticFieldCrudManager implements FieldCrudManager {
14
15
  constructor(private readonly options: SelectionStaticFieldOptions) {
15
16
  }
16
17
 
17
- validate(dto: any): ValidationError[] {
18
- const fieldValue: any = dto[this.options.fieldName];
19
- return this.applyValidations(fieldValue);
18
+ async validate(dto: any): Promise<ValidationError[]> {
19
+ const fieldValue: any = dto[this.options.fieldName];
20
+ // return this.applyValidations(fieldValue);
21
+ const isMultiSelect = this.options?.isMultiSelect;
22
+ if (isMultiSelect) {
23
+ let values: any[];
24
+
25
+ try {
26
+ // Try to parse the field value, which should be a JSON stringified array
27
+ values = JSON.parse(fieldValue);
28
+ } catch {
29
+ // If parsing fails, fallback to a single value
30
+ values = [fieldValue];
31
+ }
32
+
33
+ // Apply validations to each value asynchronously
34
+ const allErrors = await Promise.all(values.map(value => this.applyValidations(value)));
35
+
36
+ // Flatten the array of errors and return
37
+ return allErrors.flat();
38
+ } else {
39
+ // For non-multi-select, apply validations to the single field value
40
+ return this.applyValidations(fieldValue);
41
+ }
20
42
  }
21
43
 
22
44
  private applyValidations(fieldValue: any): ValidationError[] {
@@ -910,6 +910,20 @@
910
910
  "encrypt": false,
911
911
  "columnName": "relation_join_table_name",
912
912
  "isSystem": true
913
+ },
914
+ {
915
+ "name": "isMultiSelect",
916
+ "displayName": "Is MultiSelect",
917
+ "type": "boolean",
918
+ "ormType": "boolean",
919
+ "defaultValue": "false",
920
+ "required": false,
921
+ "unique": false,
922
+ "index": false,
923
+ "private": false,
924
+ "encrypt": false,
925
+ "columnName": "is_multiSelect",
926
+ "isSystem": true
913
927
  }
914
928
  ]
915
929
  },
@@ -366,7 +366,7 @@ export class CRUDService<T> { // Add two generic value i.e Person,CreatePersonDt
366
366
  // Validation against the selectionStatic values. No transformation is required
367
367
  // If the value is not in the selectionStatic values, then throw
368
368
  // Also validate against the selectionType
369
- const options = { ...commonOptions, selectionStaticValues: fieldMetadata.selectionStaticValues, selectionValueType: fieldMetadata.selectionValueType as SelectionValueType };
369
+ const options = { ...commonOptions, selectionStaticValues: fieldMetadata.selectionStaticValues, selectionValueType: fieldMetadata.selectionValueType as SelectionValueType, isMultiSelect: fieldMetadata.isMultiSelect};
370
370
  return new SelectionStaticFieldCrudManager(options);
371
371
  }
372
372
  case SolidFieldType.selectionDynamic: {// [HOLD]
@@ -375,7 +375,7 @@ export class CRUDService<T> { // Add two generic value i.e Person,CreatePersonDt
375
375
  // dataSource: string; // The name of the selection provider
376
376
  // filterSchema : json // This is a custom json object that every data source will handle accordingly. We could validate the query against the selection provider
377
377
  // values : string[]; // The values returned by the selection provider
378
- const options = { ...commonOptions, selectionDynamicProvider: fieldMetadata.selectionDynamicProvider, selectionDynamicProviderCtxt: fieldMetadata.selectionDynamicProviderCtxt, selectionValueType: fieldMetadata.selectionValueType as SelectionValueType, discoveryService: this.discoveryService };
378
+ const options = { ...commonOptions, selectionDynamicProvider: fieldMetadata.selectionDynamicProvider, selectionDynamicProviderCtxt: fieldMetadata.selectionDynamicProviderCtxt, selectionValueType: fieldMetadata.selectionValueType as SelectionValueType, discoveryService: this.discoveryService, isMultiSelect: fieldMetadata.isMultiSelect};
379
379
  return new SelectionDynamicFieldCrudManager(options);
380
380
  }
381
381
  case SolidFieldType.uuid: {
@@ -866,7 +866,8 @@ export class FieldMetadataService {
866
866
  "encryptionType",
867
867
  "decryptWhen",
868
868
  "columnName",
869
- "enableAuditTracking"
869
+ "enableAuditTracking",
870
+ "isMultiSelect"
870
871
  ];
871
872
 
872
873
  case SolidFieldType.selectionDynamic:
@@ -889,7 +890,8 @@ export class FieldMetadataService {
889
890
  "decryptWhen",
890
891
  "columnName",
891
892
  "isUserKey",
892
- "enableAuditTracking"
893
+ "enableAuditTracking",
894
+ "isMultiSelect"
893
895
  ];
894
896
  case SolidFieldType.computed:
895
897
  return [