import React, { ReactNode } from 'react'; import { LocalizationProvider as MuiLocalizationProvider, MuiPickersAdapter } from '@mui/x-date-pickers'; import { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns'; import { AdapterDateFnsJalali } from '@mui/x-date-pickers/AdapterDateFnsJalali'; import { enUS, faIR } from 'date-fns/locale'; import { isNil, isString } from 'lodash'; import { useLocalization } from '../../../localization'; import { jalaliFaIR } from './JalaliFaIr'; export interface PickersLocalizationProviderProps { dateAdapter?: 'jalali' | 'gregorian' | MuiPickersAdapter; adapterLocale?: 'fa' | 'en' | TLocale; children?: ReactNode; } const PickersLocalizationProvider = (props: PickersLocalizationProviderProps) => { const { children, adapterLocale, dateAdapter } = props; const { translate, lang } = useLocalization(); const language = isString(adapterLocale) ? adapterLocale : lang; const _dateAdapter = React.useMemo(() => { if (isNil(dateAdapter)) { if (language === 'fa') { return AdapterDateFnsJalali; } return AdapterDateFns; } if (isString(dateAdapter)) { if (dateAdapter === 'jalali') { return AdapterDateFnsJalali; } return AdapterDateFns; } return dateAdapter; }, [dateAdapter, language]); const _adapterLocale = React.useMemo(() => { if (isNil(adapterLocale)) { if (language === 'fa') { if (dateAdapter === 'gregorian') { return faIR; } return jalaliFaIR; } return enUS; } if (adapterLocale === 'fa') { if (dateAdapter === 'gregorian') { return faIR; } return jalaliFaIR; } if (adapterLocale === 'en') { return enUS; } return adapterLocale; }, [adapterLocale, dateAdapter, language]); return ( translate('datePicker.fieldYearPlaceholder', params), fieldMonthPlaceholder: (params) => translate('datePicker.fieldMonthPlaceholder', params), fieldDayPlaceholder: (params) => translate('datePicker.fieldDayPlaceholder', params), fieldHoursPlaceholder: (params) => translate('datePicker.fieldHoursPlaceholder', params), fieldMinutesPlaceholder: (params) => translate('datePicker.fieldMinutesPlaceholder', params), fieldSecondsPlaceholder: (params) => translate('datePicker.fieldSecondsPlaceholder', params) }} > {children} ); }; export default PickersLocalizationProvider;