Cleanup - unused files / unused exports / duplicate exports
[ProtonMail-WebClient.git] / packages / components / payments / client-extensions / credit-card-type.ts
blobc3dfd7d71c180b766a5e1173f7c4d59ecdec0d99
1 import creditCardType from 'credit-card-type';
3 import { isNumber } from '@proton/shared/lib/helpers/validators';
5 const banks = require.context('@proton/styles/assets/img/credit-card-icons', true, /.svg$/);
7 type BanksMap = {
8     [bank: string]: () => string | undefined;
9 };
11 const banksMap = banks.keys().reduce<BanksMap>((acc, key) => {
12     acc[key] = () => banks(key);
13     return acc;
14 }, {});
16 export const getBankSvg = (type = '') => {
17     const key = `./cc-${type}.svg`;
19     if (!banksMap[key]) {
20         return;
21     }
23     return banksMap[key]();
26 export const isValidNumber = (v: string) => !v || isNumber(v);
28 const withGaps = (value = '', gaps: number[] = []) => {
29     return [...value].reduce((acc, digit, index) => {
30         if (gaps.includes(index)) {
31             return `${acc} ${digit}`;
32         }
33         return `${acc}${digit}`;
34     }, '');
37 export const formatCreditCardNumber = (value: string) => {
38     const [firstCreditCardType] = creditCardType(value);
39     const { type = '', niceType = '', gaps = [], code } = firstCreditCardType || {};
40     const bankIcon = getBankSvg(type);
41     const valueWithGaps = gaps.length ? withGaps(value, gaps) : value;
43     return {
44         valueWithGaps,
45         bankIcon,
46         niceType,
47         codeName: code?.name ?? 'CVV',
48     };