Skip to content

Commit 6b558b8

Browse files
committed
use price widget config 'like' check
1 parent 682592f commit 6b558b8

File tree

2 files changed

+17
-3
lines changed

2 files changed

+17
-3
lines changed

packages/plugins/packages/aggregate-price/src/modules/price-widget/hooks/useParsePriceWidgetConfig.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ import { JSONPath } from 'jsonpath-plus'
66
import { DateTime } from 'luxon'
77
import { useMemo } from 'react'
88

9-
import { isPriceWidgetConfig, type PriceWidgetConfig } from '../models/index.ts'
9+
import { isPriceWidgetConfigLike, type PriceWidgetConfigFields } from '../models/index.ts'
1010
import { useApiCall } from './useApiCall.ts'
1111

12-
export interface ParsedPriceWidgetResult extends PriceWidgetConfig {
12+
export interface ParsedPriceWidgetResult extends PriceWidgetConfigFields {
1313
error?: Error
1414
name?: string
1515
price?: string
@@ -35,7 +35,7 @@ const normalizeTimestamp = (timestamp?: number | string) => {
3535

3636
export const useParsePriceWidgetConfig = (payload?: Payload) => {
3737
const priceWidgetConfig = useMemo(
38-
() => (payload ? assertEx(isPriceWidgetConfig(payload) ? (payload as PriceWidgetConfig) : null, () => 'Invalid payload') : undefined),
38+
() => (payload ? assertEx(isPriceWidgetConfigLike(payload) ? payload : null, () => 'Invalid payload') : undefined),
3939
[payload],
4040
)
4141

packages/plugins/packages/aggregate-price/src/modules/price-widget/models/PriceWidgetConfig.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,17 @@ export type PriceWidgetConfigFields = {
2121
export type PriceWidgetConfig = Payload<PriceWidgetConfigFields, PriceWidgetConfigSchema>
2222

2323
export const isPriceWidgetConfig = isPayloadOfSchemaType<PriceWidgetConfig>(PriceWidgetConfigSchema)
24+
25+
export const isPriceWidgetConfigLike = (obj: unknown): obj is PriceWidgetConfigFields => {
26+
if (typeof obj !== 'object' || obj === null) return false
27+
const o = obj as PriceWidgetConfigFields
28+
return (
29+
typeof o.currency === 'string'
30+
&& typeof o.decimals === 'number'
31+
&& Array.isArray(o.priceJsonPaths)
32+
&& o.priceJsonPaths.every(p => typeof p === 'string')
33+
&& typeof o.source === 'string'
34+
&& (o.buyLink === undefined || typeof o.buyLink === 'string')
35+
&& (o.iconSrc === undefined || typeof o.iconSrc === 'string')
36+
)
37+
}

0 commit comments

Comments
 (0)