import { DocValue } from 'fyo/core/types'; import { Doc } from 'fyo/model/doc'; import { ListsMap, ValidationMap } from 'fyo/model/types'; import { ValidationError } from 'fyo/utils/errors'; import { t } from 'fyo/utils/translation'; import { SelectOption } from 'schemas/types'; import { getCountryInfo } from 'utils/misc'; export default class SystemSettings extends Doc { validations: ValidationMap = { async displayPrecision(value: DocValue) { if ((value as number) >= 0 && (value as number) <= 9) { return; } throw new ValidationError( t`Display Precision should have a value between 0 and 9.` ); }, }; static lists: ListsMap = { locale() { const countryInfo = getCountryInfo(); return Object.keys(countryInfo) .filter((c) => !!countryInfo[c]?.locale) .map( (c) => ({ value: countryInfo[c]?.locale, label: `${c} (${countryInfo[c]?.locale})`, } as SelectOption) ); }, currency() { const countryInfo = getCountryInfo(); const currencies = Object.values(countryInfo) .map((ci) => ci?.currency as string) .filter(Boolean); return [...new Set(currencies)]; }, }; }