diff --git a/package-lock.json b/package-lock.json index 06e093ae..967f0b6f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -44,7 +44,7 @@ }, "peerDependencies": { "@map-colonies/mc-utils": ">=1.8.0", - "@map-colonies/types": "^1.3.5" + "@map-colonies/types": "1.6.0" } }, "node_modules/@ampproject/remapping": { @@ -1697,9 +1697,9 @@ } }, "node_modules/@map-colonies/types": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@map-colonies/types/-/types-1.3.5.tgz", - "integrity": "sha512-FLPn+EeWj+Me96o+uY2PauCA+FM9haRqVmHnvNOspapJk51orMuuizhMnYVcnHonwlsUHmwuBr9hdv/xoUaRlA==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@map-colonies/types/-/types-1.6.0.tgz", + "integrity": "sha512-51bHTX0K5L+vsKTi8KA25ie2OShZzJSM9CG1D/JYe6fO+w8owJCxZOZOZsxDmCCBacBzGpsiAnsCcyW3QQFQag==", "license": "ISC", "dependencies": { "@types/geojson": "^7946.0.16", @@ -15277,9 +15277,9 @@ } }, "@map-colonies/types": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@map-colonies/types/-/types-1.3.5.tgz", - "integrity": "sha512-FLPn+EeWj+Me96o+uY2PauCA+FM9haRqVmHnvNOspapJk51orMuuizhMnYVcnHonwlsUHmwuBr9hdv/xoUaRlA==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@map-colonies/types/-/types-1.6.0.tgz", + "integrity": "sha512-51bHTX0K5L+vsKTi8KA25ie2OShZzJSM9CG1D/JYe6fO+w8owJCxZOZOZsxDmCCBacBzGpsiAnsCcyW3QQFQag==", "requires": { "@types/geojson": "^7946.0.16", "@types/mime-types": "^2.1.1", diff --git a/package.json b/package.json index 69fbbcd3..ed560990 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ }, "peerDependencies": { "@map-colonies/mc-utils": ">=1.8.0", - "@map-colonies/types": "^1.3.5" + "@map-colonies/types": "1.6.0" }, "devDependencies": { "@commitlint/cli": "^11.0.0", diff --git a/src/models/common/decorators/fieldConfig/fieldConfig.decorator.ts b/src/models/common/decorators/fieldConfig/fieldConfig.decorator.ts index 46815fcf..8ced4cd7 100644 --- a/src/models/common/decorators/fieldConfig/fieldConfig.decorator.ts +++ b/src/models/common/decorators/fieldConfig/fieldConfig.decorator.ts @@ -37,6 +37,7 @@ export interface IFieldConfigInfo { isLifecycleEnvolved?: boolean; // is field might be changed during external processes, outside of the app's form. isCreateEssential?: boolean; // is field should participate in create process isUpdateEssential?: boolean; // is field should participate in update process + isMultiSelection?: boolean; // is multi selection field lookupTable?: string; // lookup table name where from comes allowed values (should participate in server-side validations) autocomplete?: { type: 'domain' | 'service'; diff --git a/src/models/layerMetadata/decorators/property/tsTypes.decorator.ts b/src/models/layerMetadata/decorators/property/tsTypes.decorator.ts index a06b9b9e..c9a61b06 100644 --- a/src/models/layerMetadata/decorators/property/tsTypes.decorator.ts +++ b/src/models/layerMetadata/decorators/property/tsTypes.decorator.ts @@ -97,12 +97,12 @@ export const TsTypes = { PRODUCTTYPE: { value: 'ProductType', type: PropertiesTypes.ENUM, - importFromPackage: '@map-colonies/mc-model-types', + importFromPackage: '@map-colonies/types', }, TRANSPARENCY: { value: 'Transparency', type: PropertiesTypes.ENUM, - importFromPackage: '@map-colonies/mc-model-types', + importFromPackage: '@map-colonies/types', }, TILE_OUTPUT_FORMAT: { value: 'TileOutputFormat', @@ -112,7 +112,7 @@ export const TsTypes = { RECORD_STATUS: { value: 'RecordStatus', type: PropertiesTypes.ENUM, - importFromPackage: '@map-colonies/mc-model-types', + importFromPackage: '@map-colonies/types', }, } satisfies Record; diff --git a/src/models/layerMetadata/index.ts b/src/models/layerMetadata/index.ts index 37e09c0a..e6bf6435 100644 --- a/src/models/layerMetadata/index.ts +++ b/src/models/layerMetadata/index.ts @@ -15,3 +15,4 @@ export * from './pycsw3DCatalogRecord'; export * from './pycswDEMCatalogRecord'; export * from './pycswVectorBestCatalogRecord'; export * from './pycswQuantizedMeshBestCatalogRecord'; +export * from './enums'; diff --git a/src/models/layerMetadata/layer3DMetadata.ts b/src/models/layerMetadata/layer3DMetadata.ts index 174aa1ae..ba10f797 100644 --- a/src/models/layerMetadata/layer3DMetadata.ts +++ b/src/models/layerMetadata/layer3DMetadata.ts @@ -855,6 +855,8 @@ export class Layer3DMetadata implements ILayer3DMetadata, IMetadataCommonModel { @fieldConfig({ category: FieldCategory.GENERAL, infoMsgCode: ['info-field-tooltip.region.tooltip', 'info-general-tooltip.required'], + isMultiSelection: true, + lookupTable: 'countries', validation: [ { errorMsgCode: 'validation-general.required', diff --git a/src/models/layerMetadata/layerDEMMetadata.ts b/src/models/layerMetadata/layerDEMMetadata.ts index 658f7eba..7fddb36e 100644 --- a/src/models/layerMetadata/layerDEMMetadata.ts +++ b/src/models/layerMetadata/layerDEMMetadata.ts @@ -392,6 +392,8 @@ export class LayerDemMetadata implements ILayerMetadata, IMetadataCommonModel { @fieldConfig({ category: FieldCategory.GENERAL, infoMsgCode: ['info-field-tooltip.region.tooltip', 'info-general-tooltip.required'], + isMultiSelection: true, + lookupTable: 'countries', validation: [ { errorMsgCode: 'validation-general.required', diff --git a/src/models/layerMetadata/layerRASTERMetadata.ts b/src/models/layerMetadata/layerRASTERMetadata.ts index 5159bb52..05b198af 100644 --- a/src/models/layerMetadata/layerRASTERMetadata.ts +++ b/src/models/layerMetadata/layerRASTERMetadata.ts @@ -550,6 +550,8 @@ export class LayerMetadata implements RasterLayerMetadata { @fieldConfig({ category: FieldCategory.GENERAL, isManuallyEditable: true, + isMultiSelection: true, + lookupTable: 'countries', infoMsgCode: ['info-field-tooltip.region.tooltip', 'info-general-tooltip.required'], validation: [ { @@ -1128,6 +1130,50 @@ export class LayerMetadata implements RasterLayerMetadata { //#endregion + public constructor() { + const DUMMY_VALUE_STRING = 'DUMMY_VALUE'; + const DUMMY_VALUE_NUMBER = 0; + const DUMMY_VALUE_TRANSPARENCY = Transparency.OPAQUE; + const DUMMY_VALUE_TILE_OUTPUT_FORMAT = TileOutputFormat.JPEG; + const DUMMY_VALUE_TILE_MIME_FORMAT = 'image/png'; + + this.classification = DUMMY_VALUE_STRING; + this.id = DUMMY_VALUE_STRING; + this.srs = DUMMY_VALUE_STRING; + this.productVersion = DUMMY_VALUE_STRING; + this.maxResolutionDeg = DUMMY_VALUE_NUMBER; + this.minResolutionDeg = DUMMY_VALUE_NUMBER; + this.rms = DUMMY_VALUE_NUMBER; + this.scale = DUMMY_VALUE_NUMBER; + this.creationDateUTC = new Date(); + this.ingestionDate = new Date(); + this.minHorizontalAccuracyCE90 = DUMMY_VALUE_NUMBER; + this.maxHorizontalAccuracyCE90 = DUMMY_VALUE_NUMBER; + this.region = [DUMMY_VALUE_STRING]; + this.sensors = [DUMMY_VALUE_STRING]; + this.imagingTimeBeginUTC = new Date(); + this.imagingTimeEndUTC = new Date(); + this.updateDateUTC = new Date(); + this.maxResolutionMeter = DUMMY_VALUE_NUMBER; + this.minResolutionMeter = DUMMY_VALUE_NUMBER; + this.productSubType = DUMMY_VALUE_STRING; + this.productBoundingBox = DUMMY_VALUE_STRING; + this.displayPath = DUMMY_VALUE_STRING; + this.transparency = DUMMY_VALUE_TRANSPARENCY; + this.tileMimeFormat = DUMMY_VALUE_TILE_MIME_FORMAT; + this.tileOutputFormat = DUMMY_VALUE_TILE_OUTPUT_FORMAT; + this.type = RecordType.RECORD_RASTER; + this.classification = DUMMY_VALUE_STRING; + this.productName = DUMMY_VALUE_STRING; + this.description = DUMMY_VALUE_STRING; + this.srsName = DUMMY_VALUE_STRING; + this.producerName = DUMMY_VALUE_STRING; + this.sensors = [DUMMY_VALUE_STRING]; + this.region = [DUMMY_VALUE_STRING]; + this.productId = DUMMY_VALUE_STRING; + this.productType = ProductType.ORTHOPHOTO; + } + public static getPyCSWMapping(prop: string): IPYCSWMapping | undefined { return getPyCSWMapping(new LayerMetadata(), prop); } diff --git a/src/models/layerMetadata/quantizedMeshBestMetadata.ts b/src/models/layerMetadata/quantizedMeshBestMetadata.ts index d0c4df5f..9db9e427 100644 --- a/src/models/layerMetadata/quantizedMeshBestMetadata.ts +++ b/src/models/layerMetadata/quantizedMeshBestMetadata.ts @@ -696,6 +696,8 @@ export class QuantizedMeshBestMetadata implements IQuantizedMeshBestMetadata, IM @fieldConfig({ category: FieldCategory.GENERAL, infoMsgCode: ['info-field-tooltip.region.tooltip', 'info-general-tooltip.required'], + isMultiSelection: true, + lookupTable: 'countries', validation: [ { errorMsgCode: 'validation-general.required', diff --git a/src/models/layerMetadata/vectorBestMetadata.ts b/src/models/layerMetadata/vectorBestMetadata.ts index 58476bfa..58e2107f 100644 --- a/src/models/layerMetadata/vectorBestMetadata.ts +++ b/src/models/layerMetadata/vectorBestMetadata.ts @@ -332,6 +332,8 @@ export class VectorBestMetadata implements IVectorBestMetadata { @fieldConfig({ category: FieldCategory.GENERAL, infoMsgCode: ['info-field-tooltip.region.tooltip', 'info-general-tooltip.required'], + isMultiSelection: true, + lookupTable: 'countries', validation: [ { errorMsgCode: 'validation-general.required',