reflexy
Version:
Flexbox layout react components
42 lines (41 loc) • 1.56 kB
JavaScript
export const stringAndNumberConverter = {
fromAttribute: (_value) => {
const value = _value?.trim();
return value != null && value !== '' && Number.isSafeInteger(+value)
? +value
: value || undefined;
},
toAttribute: (value) => (value == null || value === '' ? null : value),
};
export const stringAndBooleanConverter = {
fromAttribute: (_value) => {
const value = _value?.trim();
return value === '' ? true : (value ?? undefined);
},
// eslint-disable-next-line no-nested-ternary
toAttribute: (value) => (value == null || value === false ? null : value === true ? '' : value),
};
export const numberAndBooleanConverter = {
fromAttribute: (_value) => {
const value = _value?.trim();
if (value == null)
return undefined;
if (value === '')
return true;
return Number.isFinite(+value) ? +value : !!value;
},
// eslint-disable-next-line no-nested-ternary
toAttribute: (value) => (value == null || value === false ? null : value === true ? '' : value),
};
export const numberAndStringAndBooleanConverter = {
fromAttribute: (_value) => {
const value = _value?.trim();
if (value == null)
return undefined;
if (value === '')
return true;
return Number.isFinite(+value) ? +value : !!value;
},
// eslint-disable-next-line no-nested-ternary
toAttribute: (value) => (value == null || value === false ? null : value === true ? '' : value),
};