All files / app/payment/StoreInstrumentFieldset StoreInstrumentFieldset.tsx

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 8031x   31x 31x 31x   31x 31x                                 31x 46x 46x 46x 46x 46x                             31x               46x   46x             92x   46x 46x   46x 64x   46x                 31x  
import React, { FunctionComponent } from 'react';
 
import { withCheckout, CheckoutContextProps } from '../../checkout';
import { connectFormik, ConnectFormikProps } from '../../common/form';
import { Fieldset } from '../../ui/form';
 
import InstrumentStorageField from './InstrumentStorageField';
import InstrumentStoreAsDefaultField from './InstrumentStoreAsDefaultField';
 
interface StoreInstrumentFieldsetProps {
    isAccountInstrument?: boolean;
    instrumentId?: string;
}
 
interface WithStorageSettings {
    showSave: boolean;
    showSetAsDefault: boolean;
    setAsDefaultEnabled: boolean;
}
 
type WithFormValues = ConnectFormikProps<{ shouldSaveInstrument: boolean }>;
 
const StoreInstrumentFieldset: FunctionComponent<
    StoreInstrumentFieldsetProps & WithStorageSettings
> = ({
    showSave,
    showSetAsDefault,
    isAccountInstrument = false,
    setAsDefaultEnabled,
}) => (
    <Fieldset>
        { showSave && (
            <InstrumentStorageField isAccountInstrument={ isAccountInstrument } />
        ) }
 
        { showSetAsDefault && (
            <InstrumentStoreAsDefaultField
                disabled={ !setAsDefaultEnabled }
                isAccountInstrument={ isAccountInstrument }
            />
        ) }
    </Fieldset>
);
 
const mapToProps = (
    context: CheckoutContextProps,
    props: StoreInstrumentFieldsetProps & WithFormValues
): WithStorageSettings | null => {
    const {
        checkoutState: {
            data: { getInstruments },
        },
    } = context;
 
    const allInstruments = getInstruments();
 
    const {
        formik: {
            values: { shouldSaveInstrument: saveIsChecked },
        },
        instrumentId,
    } = props;
 
    const addingNewInstrument = !instrumentId;
    const hasAnyOtherInstruments = !!allInstruments && allInstruments.length > 0;
    const instrument =
        allInstruments &&
        allInstruments.find(({ bigpayToken }) => bigpayToken === instrumentId);
 
    return {
        ...props,
        showSave: addingNewInstrument,
        showSetAsDefault:
            (addingNewInstrument && hasAnyOtherInstruments) || Boolean(instrument && !instrument.defaultInstrument),
        setAsDefaultEnabled: !addingNewInstrument || saveIsChecked,
    };
};
 
export default connectFormik(withCheckout(mapToProps)(StoreInstrumentFieldset));