feat(input-iban): add IsNotCountryIBAN validator
Co-authored-by: andrei19021 <andrei.ionita.1902@gmail.com>
This commit is contained in:
parent
81532583f1
commit
c8e73457ac
20 changed files with 299 additions and 2 deletions
5
.changeset/two-buses-glow.md
Normal file
5
.changeset/two-buses-glow.md
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
'@lion/input-iban': minor
|
||||
---
|
||||
|
||||
add country blacklisting validator
|
||||
|
|
@ -90,3 +90,25 @@ export const countryRestrictions = () => html`
|
|||
<small>Demo instructions: you can use NL20 INGB 0001 2345 67</small>
|
||||
`;
|
||||
```
|
||||
|
||||
### Blacklisted Country
|
||||
|
||||
By default, we validate the input to ensure the IBAN is valid.
|
||||
To get the default feedback message for this default validator, use `loadDefaultFeedbackMessages` from `@lion/form-core`.
|
||||
|
||||
In the example below, we show how to use an additional validator that blocks IBANs from certain countries.
|
||||
|
||||
```js preview-story
|
||||
export const blacklistedCountry = () => html`
|
||||
<lion-input-iban
|
||||
.modelValue=${'RO89RZBR6997372848645577'}
|
||||
.validators=${([new IsNotCountryIBAN('RO')], [new IsNotCountryIBAN('ES')])}
|
||||
name="iban"
|
||||
label="IBAN"
|
||||
></lion-input-iban>
|
||||
<br />
|
||||
<small
|
||||
>Demo instructions: Try <code>RO 89 RZBR 6997 3728 4864 5577</code> and watch it fail</small
|
||||
>
|
||||
`;
|
||||
```
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
export { LionInputIban } from './src/LionInputIban.js';
|
||||
export { formatIBAN } from './src/formatters.js';
|
||||
export { parseIBAN } from './src/parsers.js';
|
||||
export { IsIBAN, IsCountryIBAN } from './src/validators.js';
|
||||
export { IsIBAN, IsCountryIBAN, IsNotCountryIBAN } from './src/validators.js';
|
||||
|
|
|
|||
|
|
@ -153,3 +153,39 @@ export class IsCountryIBAN extends IsIBAN {
|
|||
return localize.msg('lion-validate+iban:error.IsCountryIBAN', data);
|
||||
}
|
||||
}
|
||||
|
||||
export class IsNotCountryIBAN extends IsIBAN {
|
||||
static get validatorName() {
|
||||
return 'IsNotCountryIBAN';
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {?} [value]
|
||||
* @returns {Boolean}
|
||||
*/
|
||||
execute(value) {
|
||||
const notIBAN = super.execute(value);
|
||||
if (value.slice(0, 2) === this.param) {
|
||||
return true;
|
||||
}
|
||||
if (notIBAN) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {object} [data]
|
||||
* @param {*} [data.modelValue]
|
||||
* @param {string} [data.fieldName]
|
||||
* @param {*} [data.params]
|
||||
* @param {string} [data.type]
|
||||
* @param {Object.<string,?>} [data.config]
|
||||
* @param {string} [data.name]
|
||||
* @returns {Promise<string|Node>}
|
||||
*/
|
||||
static async getMessage(data) {
|
||||
await loadTranslations();
|
||||
return localize.msg('lion-validate+iban:error.IsNotCountryIBAN', data);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import { expect } from '@open-wc/testing';
|
||||
|
||||
import { IsIBAN, IsCountryIBAN } from '../src/validators.js';
|
||||
import { IsIBAN, IsCountryIBAN, IsNotCountryIBAN } from '../src/validators.js';
|
||||
|
||||
import '../lion-input-iban.js';
|
||||
|
||||
|
|
@ -19,4 +19,13 @@ describe('IBAN validation', () => {
|
|||
expect(nlValidator.execute('DE89370400440532013000')).to.be.true;
|
||||
expect(nlValidator.execute('foo')).to.be.true;
|
||||
});
|
||||
|
||||
it('provides IsNotCountryIBAN to prevent IBANs from specific countries', () => {
|
||||
const nlValidator = new IsNotCountryIBAN('NL');
|
||||
const deValidator = new IsNotCountryIBAN('DE');
|
||||
expect(nlValidator.execute('NL17INGB0002822608')).to.be.true;
|
||||
expect(deValidator.execute('DE89370400440532013000')).to.be.true;
|
||||
expect(nlValidator.execute('DE89370400440532013000')).to.be.false;
|
||||
expect(deValidator.execute('NL17INGB0002822608')).to.be.false;
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -16,5 +16,20 @@ export default {
|
|||
'RO {Румънски}\n' +
|
||||
'other {{params}}\n' +
|
||||
'} {fieldName}.',
|
||||
IsNotCountryIBAN:
|
||||
'{params, select,\n' +
|
||||
'AT {Австрийски}\n' +
|
||||
'BE {Белгийски}\n' +
|
||||
'CZ {Чешки}\n' +
|
||||
'DE {Немски}\n' +
|
||||
'ES {Испански}\n' +
|
||||
'FR {Френски}\n' +
|
||||
'HU {Унгарски}\n' +
|
||||
'IT {Италиански}\n' +
|
||||
'NL {Нидерландски}\n' +
|
||||
'PL {Полски}\n' +
|
||||
'RO {Румънски}\n' +
|
||||
'other {{params}}\n' +
|
||||
'} {fieldName} не е позволено.',
|
||||
},
|
||||
};
|
||||
|
|
|
|||
|
|
@ -16,5 +16,20 @@ export default {
|
|||
'RO {Rumun}\n' +
|
||||
'other {{params}}\n' +
|
||||
'} {fieldName}.',
|
||||
IsNotCountryIBAN:
|
||||
'{params, select,\n' +
|
||||
'AT {Rakušan}\n' +
|
||||
'BE {Belgičan}\n' +
|
||||
'CZ {Čech}\n' +
|
||||
'DE {Němec}\n' +
|
||||
'ES {Španěl}\n' +
|
||||
'FR {Francouz}\n' +
|
||||
'HU {Maďar}\n' +
|
||||
'IT {Ital}\n' +
|
||||
'NL {Holanďan}\n' +
|
||||
'PL {Polák}\n' +
|
||||
'RO {Rumun}\n' +
|
||||
'other {{params}}\n' +
|
||||
'} {fieldName} není povoleno.',
|
||||
},
|
||||
};
|
||||
|
|
|
|||
|
|
@ -16,5 +16,20 @@ export default {
|
|||
'RO {Rumänisch}\n' +
|
||||
'other {{params}}\n' +
|
||||
'} {fieldName} ein.',
|
||||
IsNotCountryIBAN:
|
||||
'{params, select,\n' +
|
||||
'AT {Österreichisch}\n' +
|
||||
'BE {Belgisch}\n' +
|
||||
'CZ {Tschechisch}\n' +
|
||||
'DE {Deutsch}\n' +
|
||||
'ES {Spanisch}\n' +
|
||||
'FR {Französisch}\n' +
|
||||
'HU {Ungarisch}\n' +
|
||||
'IT {Italienisch}\n' +
|
||||
'NL {Niederländisch}\n' +
|
||||
'PL {Polnisch}\n' +
|
||||
'RO {Rumänisch}\n' +
|
||||
'other {{params}}\n' +
|
||||
'} {fieldName} ist nicht erlaubt.',
|
||||
},
|
||||
};
|
||||
|
|
|
|||
|
|
@ -17,4 +17,19 @@ export default {
|
|||
'other {{params}}\n' +
|
||||
'} {fieldName}.',
|
||||
},
|
||||
IsNotCountryIBAN:
|
||||
'{params, select,\n' +
|
||||
'AT {Austrian}\n' +
|
||||
'BE {Belgian}\n' +
|
||||
'CZ {Czech}\n' +
|
||||
'DE {German}\n' +
|
||||
'ES {Spanish}\n' +
|
||||
'FR {French}\n' +
|
||||
'HU {Hungarian}\n' +
|
||||
'IT {Italian}\n' +
|
||||
'NL {Dutch}\n' +
|
||||
'PL {Polish}\n' +
|
||||
'RO {Romanian}\n' +
|
||||
'other {{params}}\n' +
|
||||
'} {fieldName} is not allowed.',
|
||||
};
|
||||
|
|
|
|||
|
|
@ -16,5 +16,20 @@ export default {
|
|||
'RO {Rumano}\n' +
|
||||
'other {{params}}\n' +
|
||||
'}.',
|
||||
IsNotCountryIBAN:
|
||||
'{fieldName} {params, select,\n' +
|
||||
'AT {Austriaco}\n' +
|
||||
'BE {Belga}\n' +
|
||||
'CZ {Checo}\n' +
|
||||
'DE {Alemán}\n' +
|
||||
'ES {Español}\n' +
|
||||
'FR {Francés}\n' +
|
||||
'HU {Húngaro}\n' +
|
||||
'IT {Italiano}\n' +
|
||||
'NL {Neerlandés}\n' +
|
||||
'PL {Polaco}\n' +
|
||||
'RO {Rumano}\n' +
|
||||
'other {{params}}\n' +
|
||||
'} no se permite.',
|
||||
},
|
||||
};
|
||||
|
|
|
|||
|
|
@ -16,5 +16,20 @@ export default {
|
|||
'RO {roumain}\n' +
|
||||
'other {{params}}\n' +
|
||||
'} valide.',
|
||||
IsNotCountryIBAN:
|
||||
'{fieldName} {params, select,\n' +
|
||||
'AT {autrichien}\n' +
|
||||
'BE {belge}\n' +
|
||||
'CZ {tchèque}\n' +
|
||||
'DE {allemand}\n' +
|
||||
'ES {espagnol}\n' +
|
||||
'FR {français}\n' +
|
||||
'HU {hongrois}\n' +
|
||||
'IT {italien}\n' +
|
||||
'NL {néerlandais}\n' +
|
||||
'PL {polonais}\n' +
|
||||
'RO {roumain}\n' +
|
||||
'other {{params}}\n' +
|
||||
"} n'est pas autorisé.",
|
||||
},
|
||||
};
|
||||
|
|
|
|||
|
|
@ -16,5 +16,20 @@ export default {
|
|||
'RO {Román}\n' +
|
||||
'other {{params}}\n' +
|
||||
'} {fieldName} értéket.',
|
||||
IsNotCountryIBAN:
|
||||
'{params, select,\n' +
|
||||
'AT {Osztrák}\n' +
|
||||
'BE {Belga}\n' +
|
||||
'CZ {Cseh}\n' +
|
||||
'DE {Német}\n' +
|
||||
'ES {Spanyol}\n' +
|
||||
'FR {Francia}\n' +
|
||||
'HU {Magyar}\n' +
|
||||
'IT {Olasz}\n' +
|
||||
'NL {Holland}\n' +
|
||||
'PL {Lengyel}\n' +
|
||||
'RO {Román}\n' +
|
||||
'other {{params}}\n' +
|
||||
'} {fieldName} nem engedélyezett',
|
||||
},
|
||||
};
|
||||
|
|
|
|||
|
|
@ -16,5 +16,20 @@ export default {
|
|||
'RO {Rumeno}\n' +
|
||||
'other {{params}}\n' +
|
||||
'}.',
|
||||
IsNotCountryIBAN:
|
||||
'{fieldName} {params, select,\n' +
|
||||
'AT {Austriaco}\n' +
|
||||
'BE {Belga}\n' +
|
||||
'CZ {Ceco}\n' +
|
||||
'DE {Tedesco}\n' +
|
||||
'ES {Spagnolo}\n' +
|
||||
'FR {Francese}\n' +
|
||||
'HU {Ungherese}\n' +
|
||||
'IT {Italiano}\n' +
|
||||
'NL {Olandese}\n' +
|
||||
'PL {Polacco}\n' +
|
||||
'RO {Rumeno}\n' +
|
||||
'other {{params}}\n' +
|
||||
'} non è permesso',
|
||||
},
|
||||
};
|
||||
|
|
|
|||
|
|
@ -16,5 +16,20 @@ export default {
|
|||
'RO {Roemeense}\n' +
|
||||
'other {{params}}\n' +
|
||||
'} {fieldName} in.',
|
||||
IsNotCountryIBAN:
|
||||
'{params, select,\n' +
|
||||
'AT {Oostenrijkse}\n' +
|
||||
'BE {Belgische}\n' +
|
||||
'CZ {Tsjechische}\n' +
|
||||
'DE {Duitse}\n' +
|
||||
'ES {Spaanse}\n' +
|
||||
'FR {Franse}\n' +
|
||||
'HU {Hongaarse}\n' +
|
||||
'IT {Italiaanse}\n' +
|
||||
'NL {Nederlandse}\n' +
|
||||
'PL {Poolse}\n' +
|
||||
'RO {Roemeense}\n' +
|
||||
'other {{params}}\n' +
|
||||
'} {fieldName} is niet toegestaan',
|
||||
},
|
||||
};
|
||||
|
|
|
|||
|
|
@ -16,5 +16,20 @@ export default {
|
|||
'RO {Rumuński}\n' +
|
||||
'other {{params}}\n' +
|
||||
'} {fieldName}.',
|
||||
IsNotCountryIBAN:
|
||||
'{params, select,\n' +
|
||||
'AT {Austriacki}\n' +
|
||||
'BE {Belgijski}\n' +
|
||||
'CZ {Czeski}\n' +
|
||||
'DE {Niemiecki}\n' +
|
||||
'ES {Hiszpański}\n' +
|
||||
'FR {Francuski}\n' +
|
||||
'HU {Węgierski}\n' +
|
||||
'IT {Włoski}\n' +
|
||||
'NL {Holenderski}\n' +
|
||||
'PL {Polski}\n' +
|
||||
'RO {Rumuński}\n' +
|
||||
'other {{params}}\n' +
|
||||
'} {fieldName} nie jest dozwolone',
|
||||
},
|
||||
};
|
||||
|
|
|
|||
|
|
@ -16,5 +16,20 @@ export default {
|
|||
'RO {românesc}\n' +
|
||||
'other {{params}}\n' +
|
||||
'} valid(ă).',
|
||||
IsNotCountryIBAN:
|
||||
'{fieldName} {params, select,\n' +
|
||||
'AT {austriac}\n' +
|
||||
'BE {belgian}\n' +
|
||||
'CZ {ceh}\n' +
|
||||
'DE {german}\n' +
|
||||
'ES {spaniol}\n' +
|
||||
'FR {francez}\n' +
|
||||
'HU {maghiar}\n' +
|
||||
'IT {italian}\n' +
|
||||
'NL {olandez}\n' +
|
||||
'PL {polonez}\n' +
|
||||
'RO {românesc}\n' +
|
||||
'other {{params}}\n' +
|
||||
'} nu este permis',
|
||||
},
|
||||
};
|
||||
|
|
|
|||
|
|
@ -16,5 +16,20 @@ export default {
|
|||
'RO {Румынский}\n' +
|
||||
'other {{params}}\n' +
|
||||
'} {fieldName}.',
|
||||
IsNotCountryIBAN:
|
||||
'{params, select,\n' +
|
||||
'AT {Австрийский}\n' +
|
||||
'BE {Бельгийский}\n' +
|
||||
'CZ {Чешский}\n' +
|
||||
'DE {Немецкий}\n' +
|
||||
'ES {Испанский}\n' +
|
||||
'FR {Французский}\n' +
|
||||
'HU {Венгерский}\n' +
|
||||
'IT {Итальянский}\n' +
|
||||
'NL {Нидерландский}\n' +
|
||||
'PL {Польский}\n' +
|
||||
'RO {Румынский}\n' +
|
||||
'other {{params}}\n' +
|
||||
'} {fieldName} не допускается',
|
||||
},
|
||||
};
|
||||
|
|
|
|||
|
|
@ -16,5 +16,20 @@ export default {
|
|||
'RO {rumunský}\n' +
|
||||
'other {{params}}\n' +
|
||||
'} kód {fieldName}.',
|
||||
IsNotCountryIBAN:
|
||||
'{params, select,\n' +
|
||||
'AT {rakúsky}\n' +
|
||||
'BE {belgický}\n' +
|
||||
'CZ {český}\n' +
|
||||
'DE {nemecký}\n' +
|
||||
'ES {španielsky}\n' +
|
||||
'FR {francúzsky}\n' +
|
||||
'HU {maďarský}\n' +
|
||||
'IT {taliansky}\n' +
|
||||
'NL {holandský}\n' +
|
||||
'PL {poľský}\n' +
|
||||
'RO {rumunský}\n' +
|
||||
'other {{params}}\n' +
|
||||
'} {fieldName} nie je povolené',
|
||||
},
|
||||
};
|
||||
|
|
|
|||
|
|
@ -16,5 +16,20 @@ export default {
|
|||
'RO {румунська}\n' +
|
||||
'other {{params}}\n' +
|
||||
'} {fieldName}.',
|
||||
IsNotCountryIBAN:
|
||||
'{params, select,\n' +
|
||||
'AT {австрійський}\n' +
|
||||
'BE {бельгійський}\n' +
|
||||
'CZ {чеський}\n' +
|
||||
'DE {німецький}\n' +
|
||||
'ES {іспанський}\n' +
|
||||
'FR {французький}\n' +
|
||||
'HU {угорський}\n' +
|
||||
'IT {італійський}\n' +
|
||||
'NL {голландський}\n' +
|
||||
'PL {польський}\n' +
|
||||
'RO {румунська}\n' +
|
||||
'other {{params}}\n' +
|
||||
'} {fieldName} не дозволено',
|
||||
},
|
||||
};
|
||||
|
|
|
|||
|
|
@ -16,5 +16,20 @@ export default {
|
|||
'RO {罗马尼亚}\n' +
|
||||
'另一个 {{params}}\n' +
|
||||
'} {fieldName}。',
|
||||
IsNotCountryIBAN:
|
||||
'{params, select,\n' +
|
||||
'AT {奥}\n' +
|
||||
'BE {比利时的}\n' +
|
||||
'CZ {捷克}\n' +
|
||||
'DE {德语}\n' +
|
||||
'ES {西班牙语}\n' +
|
||||
'FR {法国}\n' +
|
||||
'HU {匈牙利}\n' +
|
||||
'IT {意大利}\n' +
|
||||
'NL {荷兰人}\n' +
|
||||
'PL {抛光}\n' +
|
||||
'RO {罗马尼亚}\n' +
|
||||
'另一个 {{params}}\n' +
|
||||
'} {fieldName} 不允許',
|
||||
},
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in a new issue