fix: crash when setting a default value for fixed-size arrays (#181)

This commit is contained in:
Victor Oliva
2026-08-26 11:31:41 +02:00
committed by GitHub
parent d31cc5edcf
commit d13ae9e728
2 changed files with 12 additions and 3 deletions

View File

@@ -4,6 +4,7 @@ import { byteArraysAreEqual } from "@/utils/byteArray"
import {
CodecComponentType,
CodecComponentValue,
NOTIN,
} from "@polkadot-api/react-builder"
import { state, useStateObservable } from "@react-rxjs/core"
import { Codec } from "polkadot-api"
@@ -142,6 +143,7 @@ const useCodecProps = (
if (!codec) return
const encodedValue = (() => {
if (componentValue.value.encoded) return componentValue.value.encoded
if (detectNotin(componentValue.value.decoded)) return null
try {
return codec.enc(componentValue.value.decoded)
} catch (_) {
@@ -224,3 +226,9 @@ const useCodecProps = (
}),
}
}
const detectNotin: <T>(x: T) => boolean = (x) => {
if (x === NOTIN) return true
return x != null && typeof x === "object"
? Object.values(x).some(detectNotin)
: false
}

View File

@@ -58,9 +58,10 @@ export const getDefaultValue = (innerVar: Var, depth = 0): any => {
case "struct":
return mapObject(innerVar.value, (v) => nextDefault(v))
case "array":
return new Array(innerVar.len)
.fill(0)
.map(() => nextDefault(innerVar.value))
return innerVar.value.type === "primitive" &&
innerVar.value.value === "u8"
? NOTIN
: new Array(innerVar.len).fill(0).map(() => nextDefault(innerVar.value))
case "tuple":
return innerVar.value.map(nextDefault)
case "enum": {