|
@@ -1,12 +1,12 @@
|
|
|
import { SubstrateEvent } from '../../generated/indexer'
|
|
|
import {
|
|
|
- IPropertyIdWithName,
|
|
|
IClassEntity,
|
|
|
IProperty,
|
|
|
IBatchOperation,
|
|
|
ICreateEntityOperation,
|
|
|
IEntity,
|
|
|
IReference,
|
|
|
+ IPropertyWithId,
|
|
|
} from '../types'
|
|
|
import Debug from 'debug'
|
|
|
|
|
@@ -20,18 +20,23 @@ function stringIfyEntityId(event: SubstrateEvent): string {
|
|
|
return entityId.value as string
|
|
|
}
|
|
|
|
|
|
-function setProperties<T>({ extrinsic, blockNumber }: SubstrateEvent, propNamesWithId: IPropertyIdWithName): T {
|
|
|
+function setProperties<T>({ extrinsic, blockNumber }: SubstrateEvent, propNamesWithId: IPropertyWithId): T {
|
|
|
if (extrinsic === undefined) throw Error('Undefined extrinsic')
|
|
|
|
|
|
const { 3: newPropertyValues } = extrinsic!.args
|
|
|
const properties: { [key: string]: any; reference?: IReference } = {}
|
|
|
|
|
|
for (const [k, v] of Object.entries(newPropertyValues.value)) {
|
|
|
- const propertyName = propNamesWithId[k]
|
|
|
+ const prop = propNamesWithId[k]
|
|
|
const singlePropVal = createType('InputPropertyValue', v as any).asType('Single')
|
|
|
- properties[propertyName] = singlePropVal.isOfType('Reference')
|
|
|
- ? { entityId: singlePropVal.asType('Reference').toJSON(), existing: true }
|
|
|
- : singlePropVal.value.toJSON()
|
|
|
+
|
|
|
+ if (singlePropVal.isOfType('Reference')) {
|
|
|
+ properties[prop.name] = { entityId: singlePropVal.asType('Reference').toJSON(), existing: true }
|
|
|
+ } else {
|
|
|
+ const val = singlePropVal.value.toJSON()
|
|
|
+ if (typeof val !== prop.type && !prop.required) properties[prop.name] = undefined
|
|
|
+ else properties[prop.name] = val
|
|
|
+ }
|
|
|
}
|
|
|
properties.version = blockNumber
|
|
|
|
|
@@ -54,16 +59,18 @@ function getClassEntity(event: SubstrateEvent): IClassEntity {
|
|
|
* @param properties
|
|
|
* @param propertyNamesWithId
|
|
|
*/
|
|
|
-function setEntityPropertyValues<T>(properties: IProperty[], propertyNamesWithId: IPropertyIdWithName): T {
|
|
|
+function setEntityPropertyValues<T>(properties: IProperty[], propertyNamesWithId: IPropertyWithId): T {
|
|
|
const entityProperties: { [key: string]: any; reference?: IReference } = {}
|
|
|
|
|
|
for (const [propId, propName] of Object.entries(propertyNamesWithId)) {
|
|
|
// get the property value by id
|
|
|
const p = properties.find((p) => p.id === propId)
|
|
|
if (!p) continue
|
|
|
- entityProperties[propName] = p.reference ? p.reference : p.value
|
|
|
+
|
|
|
+ if (typeof p.value !== propName.type && !propName.required) entityProperties[propName.name] = undefined
|
|
|
+ else entityProperties[propName.name] = p.reference ? p.reference : p.value
|
|
|
}
|
|
|
- // debug(`Entity properties ${JSON.stringify(entityProperties)}`)
|
|
|
+ debug(`Entity properties: ${JSON.stringify(entityProperties)}`)
|
|
|
return entityProperties as T
|
|
|
}
|
|
|
|