react-phone-number-input
Version:
Telephone number input React component
218 lines (203 loc) • 4.93 kB
JavaScript
import metadata from 'libphonenumber-js/min/metadata'
import _getPhoneInputWithCountryStateUpdateFromNewProps from './getPhoneInputWithCountryStateUpdateFromNewProps.js'
function getPhoneInputWithCountryStateUpdateFromNewProps(newProps, prevProps, state) {
return _getPhoneInputWithCountryStateUpdateFromNewProps(
{
...newProps,
metadata
},
{
...prevProps,
metadata
},
state
)
}
describe('getPhoneInputWithCountryStateUpdateFromNewProps', () => {
it('should get state update from new props (reset)', () => {
getPhoneInputWithCountryStateUpdateFromNewProps(
{
reset: true,
defaultCountry: 'RU'
},
{},
{}
).should.deep.equal({
phoneDigits: undefined,
value: undefined,
country: 'RU',
hasUserSelectedACountry: undefined
})
})
it('should get state update from new props (reset) (international)', () => {
getPhoneInputWithCountryStateUpdateFromNewProps(
{
reset: true,
international: true,
defaultCountry: 'RU'
},
{},
{}
).should.deep.equal({
phoneDigits: '+7',
value: undefined,
country: 'RU',
hasUserSelectedACountry: undefined
})
})
it('should get state update from new props (default country did not change)', () => {
expect(getPhoneInputWithCountryStateUpdateFromNewProps(
{
defaultCountry: 'RU'
},
{
defaultCountry: 'RU'
},
{}
)).to.be.undefined
})
it('should get state update from new props (default country changed) (no `value`)', () => {
getPhoneInputWithCountryStateUpdateFromNewProps(
{
defaultCountry: 'RU'
},
{
defaultCountry: 'US'
},
{}
).should.deep.equal({
country: 'RU',
phoneDigits: undefined,
value: undefined
})
})
it('should get state update from new props (default country changed) (no `value`) (new country not supported)', () => {
expect(getPhoneInputWithCountryStateUpdateFromNewProps(
{
defaultCountry: 'XX'
},
{
defaultCountry: 'US'
},
{}
)).to.be.undefined
})
it('should get state update from new props (default country changed) (`value` is intl prefix)', () => {
getPhoneInputWithCountryStateUpdateFromNewProps(
{
international: true,
defaultCountry: 'CA'
},
{
international: true,
defaultCountry: 'US'
},
{
value: '+1'
}
).should.deep.equal({
country: 'CA',
phoneDigits: '+1',
value: undefined
})
})
it('should get state update from new props (default country changed) (has `value`)', () => {
expect(getPhoneInputWithCountryStateUpdateFromNewProps(
{
value: '+78005553535',
defaultCountry: 'FR'
},
{
value: '+78005553535',
defaultCountry: 'RU'
},
{}
)).to.be.undefined
})
it('should get state update from new props (default country changed to `undefined`) (has `value`)', () => {
expect(getPhoneInputWithCountryStateUpdateFromNewProps(
{
value: undefined,
defaultCountry: 'FR'
},
{
value: undefined,
defaultCountry: undefined
},
{}
)).to.deep.equal({
country: 'FR',
phoneDigits: undefined,
value: undefined
})
})
it('should get state update from new props (`value` changed: undefined -> value)', () => {
getPhoneInputWithCountryStateUpdateFromNewProps(
{
value: '+78005553535',
defaultCountry: 'FR'
},
{
defaultCountry: 'US'
},
{}
).should.deep.equal({
country: 'RU',
phoneDigits: '+78005553535',
value: '+78005553535'
})
})
it('should get state update from new props (`value` changed: value -> undefined)', () => {
getPhoneInputWithCountryStateUpdateFromNewProps(
{
defaultCountry: 'RU'
},
{
value: '+78005553535',
defaultCountry: 'RU'
},
{
value: '+78005553535'
}
).should.deep.equal({
country: 'RU',
phoneDigits: undefined,
value: undefined,
hasUserSelectedACountry: undefined
})
})
// https://github.com/catamphetamine/react-phone-number-input/issues/377
it('should get state update from new props (`value` changed: undefined -> +78)', () => {
getPhoneInputWithCountryStateUpdateFromNewProps(
{ value: '+78' },
{},
{}
).should.deep.equal({
country: 'RU',
phoneDigits: '+78',
value: '+78'
})
})
it('should get state update from new props (`value` changed, but already displayed)', () => {
expect(getPhoneInputWithCountryStateUpdateFromNewProps(
{
value: '+78005553535'
},
{},
{
value: '+78005553535'
}
)).to.be.undefined
})
it('should get state update from new props (`value` did not change)', () => {
expect(getPhoneInputWithCountryStateUpdateFromNewProps(
{
value: '+78005553535'
},
{
value: '+78005553535'
},
{}
)).to.be.undefined
})
})