Skip to content

Commit

Permalink
fix: mismatch target/recipient origin error
Browse files Browse the repository at this point in the history
  • Loading branch information
kevinperaza committed Mar 21, 2024
1 parent f8ca7d1 commit d670f62
Show file tree
Hide file tree
Showing 5 changed files with 47 additions and 36 deletions.
13 changes: 5 additions & 8 deletions src/elements/CardExpirationDateElement.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import React, { FC, ForwardedRef, RefObject, useRef } from 'react';
import React, { FC, ForwardedRef, MutableRefObject, useRef } from 'react';
import type {
CardExpirationDateElement as ICardExpirationDateElement,
CreateCardExpirationDateElementOptions,
Expand Down Expand Up @@ -30,12 +30,12 @@ interface CardExpirationDateElementProps {
style?: ElementStyle;
validateOnChange?: boolean;
value?: CardExpirationDateValue<'static'> | string;
valueRef?: RefObject<ICardExpirationDateElement>;
valueRef?: MutableRefObject<ICardExpirationDateElement>;
}

const CardExpirationDateElementC: FC<
CardExpirationDateElementProps & {
elementRef?: ForwardedRef<ICardExpirationDateElement>;
elementRef?: ForwardedRef<ICardExpirationDateElement | null>;
}
> = ({
'aria-label': ariaLabel,
Expand Down Expand Up @@ -80,13 +80,10 @@ const CardExpirationDateElementC: FC<
value,
},
bt,
elementRef
elementRef,
valueRef
);

if (valueRef?.current) {
element?.setValueRef(valueRef.current);
}

useListener('ready', element, onReady);
useListener('change', element, onChange);
useListener('focus', element, onFocus);
Expand Down
15 changes: 7 additions & 8 deletions src/elements/CardNumberElement.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import React, { FC, useRef, ForwardedRef, RefObject } from 'react';
import React, { FC, useRef, ForwardedRef, MutableRefObject } from 'react';
import type {
CardNumberElement as ICardNumberElement,
CreateCardNumberElementOptions,
Expand Down Expand Up @@ -34,7 +34,7 @@ interface CardNumberElementProps {
style?: ElementStyle;
validateOnChange?: boolean;
value?: string;
valueRef?: RefObject<ICardNumberElement>;
valueRef?: MutableRefObject<ICardNumberElement | null>;
}

const CardNumberElementC: FC<
Expand Down Expand Up @@ -66,7 +66,9 @@ const CardNumberElementC: FC<
const wrapperRef = useRef<HTMLDivElement>(null);
const element = useElement<
ICardNumberElement,
CreateCardNumberElementOptions
CreateCardNumberElementOptions & {
valueRef?: MutableRefObject<ICardNumberElement | null>;
}
>(
id,
'cardNumber',
Expand All @@ -88,13 +90,10 @@ const CardNumberElementC: FC<
value,
},
bt,
elementRef
elementRef,
valueRef
);

if (valueRef?.current) {
element?.setValueRef(valueRef.current);
}

useListener('ready', element, onReady);
useListener('change', element, onChange);
useListener('focus', element, onFocus);
Expand Down
11 changes: 4 additions & 7 deletions src/elements/CardVerificationCodeElement.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import React, { FC, useRef, ForwardedRef, RefObject } from 'react';
import React, { FC, useRef, ForwardedRef, MutableRefObject } from 'react';
import type {
CardVerificationCodeElement as ICardVerificationCodeElement,
CreateCardVerificationCodeElementOptions,
Expand Down Expand Up @@ -34,7 +34,7 @@ interface CardVerificationCodeElementProps {
style?: ElementStyle;
validateOnChange?: boolean;
value?: string;
valueRef?: RefObject<ICardVerificationCodeElement>;
valueRef?: MutableRefObject<ICardVerificationCodeElement | null>;
}

const CardVerificationCodeElementC: FC<
Expand Down Expand Up @@ -86,13 +86,10 @@ const CardVerificationCodeElementC: FC<
value,
},
bt,
elementRef
elementRef,
valueRef
);

if (valueRef?.current) {
element?.setValueRef(valueRef.current);
}

useListener('ready', element, onReady);
useListener('change', element, onChange);
useListener('focus', element, onFocus);
Expand Down
11 changes: 4 additions & 7 deletions src/elements/TextElement.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import React, { FC, useRef, ForwardedRef, RefObject } from 'react';
import React, { FC, useRef, ForwardedRef, MutableRefObject } from 'react';
import type {
TextElement as ITextElement,
CreateTextElementOptions,
Expand Down Expand Up @@ -29,7 +29,7 @@ interface BaseTextElementProps {
transform?: RegExp | [RegExp, string?];
validation?: RegExp;
value?: string;
valueRef?: RefObject<ITextElement>;
valueRef?: MutableRefObject<ITextElement | null>;
}

interface MaskedTextElementProps extends BaseTextElementProps {
Expand Down Expand Up @@ -90,13 +90,10 @@ const TextElementC: FC<
value,
},
bt,
elementRef
elementRef,
valueRef
);

if (valueRef?.current) {
element?.setValueRef(valueRef.current);
}

useListener('ready', element, onReady);
useListener('change', element, onChange);
useListener('focus', element, onFocus);
Expand Down
33 changes: 27 additions & 6 deletions src/elements/useElement.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,24 @@
import React, { ForwardedRef, useEffect, useRef, useState } from 'react';
import React, {
ForwardedRef,
MutableRefObject,
useEffect,
useRef,
useState,
} from 'react';
import type {
BaseElement,
ElementType,
} from '@basis-theory/basis-theory-js/types/elements';
import { BasisTheoryReact } from '../core';
import { useBasisTheoryValue } from './useBasisTheoryValue';

type ElementWithSetValueRef = BaseElement<any, any> & {
setValueRef: (element: BaseElement<any, any>) => void;
};

const elementHasSetValueRef = (val: unknown): val is ElementWithSetValueRef =>
Boolean((val as ElementWithSetValueRef).setValueRef);

const shallowDifference = <
A extends Record<string, unknown>,
B extends Record<string, unknown>
Expand Down Expand Up @@ -51,7 +64,8 @@ const useElement = <
wrapperRef: React.RefObject<HTMLDivElement>,
options: Options,
btFromProps?: BasisTheoryReact,
ref?: ForwardedRef<Element>
ref?: ForwardedRef<Element>,
targetValueRef?: MutableRefObject<Element | null>
): Element | undefined => {
const bt = useBasisTheoryValue(btFromProps);
const [lastOptions, setLastOptions] = useState<Options>();
Expand All @@ -75,11 +89,18 @@ const useElement = <
ref.current = newElement;
}

newElement.mount(`#${id}`).catch((mountError) => {
setLastOptions(() => {
throw mountError;
(async () => {
await newElement.mount(`#${id}`).catch((mountError) => {
setLastOptions(() => {
throw mountError;
});
});
});

if (elementHasSetValueRef(newElement) && targetValueRef?.current) {
newElement.setValueRef(targetValueRef.current);
}
})();

bt.indexElement(id, newElement);
setLastOptions(options);
}
Expand Down

0 comments on commit d670f62

Please sign in to comment.