@@ -14,6 +14,7 @@ import { Calendar as PersianCalendar } from '@/components/ui/persian-calendar'
1414import { formatDateByLocale , formatDateShort , isDateDisabled } from '@/utils/datePickerUtils'
1515import { useIsMobile } from '@/hooks/use-mobile'
1616import { useTheme } from '@/components/common/theme-provider'
17+ import { DATE_PICKER_PREFERENCE_KEY , getDatePickerPreference , type DatePickerPreference } from '@/utils/userPreferenceStorage'
1718
1819export type DatePickerMode = 'single' | 'range'
1920
@@ -162,7 +163,8 @@ export function DatePicker({
162163 side,
163164} : DatePickerProps ) {
164165 const { t, i18n } = useTranslation ( )
165- const isPersianLocale = i18n . language === 'fa'
166+ const [ datePreference , setDatePreference ] = useState < DatePickerPreference > ( 'locale' )
167+ const isPersianCalendar = datePreference === 'persian' || ( datePreference === 'locale' && i18n . language === 'fa' )
166168 const isMobile = useIsMobile ( )
167169 const { resolvedTheme } = useTheme ( )
168170 const [ internalOpen , setInternalOpen ] = useState ( false )
@@ -197,6 +199,20 @@ export function DatePicker({
197199 }
198200 } , [ ] )
199201
202+ useEffect ( ( ) => {
203+ const storedPreference = getDatePickerPreference ( )
204+ setDatePreference ( storedPreference )
205+
206+ const handleStorageChange = ( event : StorageEvent ) => {
207+ if ( event . key === DATE_PICKER_PREFERENCE_KEY ) {
208+ setDatePreference ( getDatePickerPreference ( ) )
209+ }
210+ }
211+
212+ window . addEventListener ( 'storage' , handleStorageChange )
213+ return ( ) => window . removeEventListener ( 'storage' , handleStorageChange )
214+ } , [ ] )
215+
200216 const handleDateSelect = useCallback (
201217 ( selectedDate : Date | undefined ) => {
202218 if ( ! selectedDate ) {
@@ -285,9 +301,9 @@ export function DatePicker({
285301 if ( customFormatDate ) {
286302 return customFormatDate ( date )
287303 }
288- return formatDateByLocale ( date , isPersianLocale , showTime )
304+ return formatDateByLocale ( date , isPersianCalendar , showTime )
289305 } ,
290- [ customFormatDate , isPersianLocale , showTime ] ,
306+ [ customFormatDate , isPersianCalendar , showTime ] ,
291307 )
292308
293309 const dateDisabled = useCallback (
@@ -356,7 +372,7 @@ export function DatePicker({
356372 } }
357373 onEscapeKeyDown = { ( ) => setIsOpen ( false ) }
358374 >
359- { isPersianLocale ? (
375+ { isPersianCalendar ? (
360376 < PersianCalendar
361377 mode = "single"
362378 selected = { displayDate }
@@ -459,13 +475,13 @@ export function DatePicker({
459475 { formatDate ( displayRange . from ) } - { formatDate ( displayRange . to ) }
460476 </ span >
461477 < span className = "sm:hidden" >
462- { formatDateShort ( displayRange . from , isPersianLocale ) } - { formatDateShort ( displayRange . to , isPersianLocale ) }
478+ { formatDateShort ( displayRange . from , isPersianCalendar ) } - { formatDateShort ( displayRange . to , isPersianCalendar ) }
463479 </ span >
464480 </ span >
465481 ) : (
466482 < span className = "truncate" >
467483 < span className = "hidden sm:inline" > { formatDate ( displayRange . from ) } </ span >
468- < span className = "sm:hidden" > { formatDateShort ( displayRange . from , isPersianLocale ) } </ span >
484+ < span className = "sm:hidden" > { formatDateShort ( displayRange . from , isPersianCalendar ) } </ span >
469485 </ span >
470486 )
471487 ) : (
@@ -474,7 +490,7 @@ export function DatePicker({
474490 </ Button >
475491 </ PopoverTrigger >
476492 < PopoverContent className = "w-auto p-0" align = { align ? align : "start" } side = { side ? side : "bottom" } sideOffset = { 4 } collisionPadding = { 8 } >
477- { isPersianLocale ? (
493+ { isPersianCalendar ? (
478494 < PersianCalendar
479495 mode = "range"
480496 defaultMonth = { displayRange ?. from }
0 commit comments