diff --git a/ui/v2.5/src/utils/data.ts b/ui/v2.5/src/utils/data.ts index 19ba59092..7fc08d3f4 100644 --- a/ui/v2.5/src/utils/data.ts +++ b/ui/v2.5/src/utils/data.ts @@ -5,7 +5,28 @@ interface ITypename { __typename?: string; } -export function withoutTypename(o: T) { - const { __typename, ...ret } = o; - return ret; +const hasTypename = (value: unknown): value is ITypename => + !!(value as ITypename)?.__typename; + +const processNoneObjValue = (value: unknown): unknown => + Array.isArray(value) + ? value.map((v) => + hasTypename(v) ? withoutTypename(v) : processNoneObjValue(v) + ) + : value; + +export function withoutTypename( + o: T +): Omit { + const { __typename, ...data } = o; + + return Object.entries(data).reduce( + (ret, [key, value]) => ({ + ...ret, + [key]: hasTypename(value) + ? withoutTypename(value) + : processNoneObjValue(value), + }), + {} as Omit + ); }