Skip to main content

Constants and Configuration

Use const

Always use const for values that should not be reassigned.

Avoid Literal Display Values

Never hard-code display strings, types, or labels directly in components. Use constants and i18n values instead.

Example:

// Bad
<Button>Submit</Button>

// Good
<Button>{t('buttons.submit')}</Button>

Multi-Value Constants

When a constant has multiple attributes, use an object map:

export const taxIdentificationType = {
ein: {label: 'EIN', value: 'ein'},
ssnItin: {label: 'SSN/ITIN', value: 'ssnItin'},
foreign: {label: 'Foreign', value: 'foreign'},
};

export const taxIdentificationTypeOptions = Object.values(taxIdentificationType);
export const taxIdentificationTypeValues = Object.keys(taxIdentificationType);

Error and Response Codes

Never compare status codes or messages directly. Use error or response codes:

export const ERROR_CODES = {
invalidToken: 'INVALID_TOKEN_ERR',
userNotVerified: 'USER_NOT_VERIFIED',
onlyCompanyAllowed: 'ONLY_COMPANY_ALLOWED',
};

Example usage:

if (errorCode === ERROR_CODES.invalidToken) {
return logout();
}

Paths and Route Builders

Use central route builders for paths:

export const AUTH_ROUTES = {
login: path(AUTH_ROOT, '/login'),
};

export const DASHBOARD_ROUTES = {
approval: (approvalId: string) => path(DASHBOARD_ROOT, `/approvals/${approvalId}`),
};

i18n Usage

All user-facing text should come from i18n values, including tabs and table headers.

Example:

const TABS = [
{id: 'summary', label: t('tabs.summary')},
{id: 'details', label: t('tabs.details')},
];

Frontend and Backend Constants

Frontend and backend constants do not need to match. The API should translate between them based on business rules.