@@ -4,8 +4,11 @@ import { useI18n } from 'vue-i18n';
44import { dayjsKey } from ' @/keys' ;
55import { PhCaretLeft , PhCaretRight } from ' @phosphor-icons/vue' ;
66import { TimeFormatted } from ' @/models' ;
7+ import { useUserStore } from ' @/stores/user-store' ;
8+ import { getStartOfWeek , getEndOfWeek } from ' @/utils' ;
79
810const dj = inject (dayjsKey );
11+ const userStore = useUserStore ();
912
1013const props = defineProps <{
1114 onDateChange: (dateObj : TimeFormatted ) => void ,
@@ -21,24 +24,34 @@ const { t } = useI18n();
2124const dateInputRef = ref <HTMLInputElement >();
2225
2326// Computed values for accessibility
27+ // Access language setting to trigger recomputation when locale changes
2428const currentWeekLabel = computed (() => {
29+ void userStore .data .settings .language ;
2530 const startDate = dj (props .activeDateRange .start ).format (' L' );
2631 const endDate = dj (props .activeDateRange .end ).format (' L' );
2732 return startDate + ' – ' + endDate ;
2833});
2934
3035const previousWeekLabel = computed (() => {
36+ void userStore .data .settings .language ;
3137 const prevStart = dj (props .activeDateRange .start ).subtract (7 , ' day' ).format (' L' );
3238 const prevEnd = dj (props .activeDateRange .start ).subtract (1 , ' day' ).format (' L' );
3339 return t (' label.previousWeek' ) + ' : ' + prevStart + ' – ' + prevEnd ;
3440});
3541
3642const nextWeekLabel = computed (() => {
43+ void userStore .data .settings .language ;
3744 const nextStart = dj (props .activeDateRange .end ).add (1 , ' day' ).format (' L' );
3845 const nextEnd = dj (props .activeDateRange .end ).add (7 , ' day' ).format (' L' );
3946 return t (' label.nextWeek' ) + ' : ' + nextStart + ' – ' + nextEnd ;
4047});
4148
49+ // Week picker button display text
50+ const weekPickerButtonText = computed (() => {
51+ void userStore .data .settings .language ;
52+ return ` ${dj (props .activeDateRange .start ).format (' MMMM DD' )} – ${dj (props .activeDateRange .end ).format (' MMMM DD' )} ` ;
53+ });
54+
4255function onPreviousWeekButtonClicked() {
4356 props .onDateChange ({
4457 start: dj (props .activeDateRange .start ).subtract (7 , ' day' ).toString (),
@@ -63,12 +76,13 @@ function onDateSelected(event: Event) {
6376
6477 if (target .value ) {
6578 const selectedDate = dj (target .value );
66- const startOfWeek = selectedDate .startOf (' week' );
67- const endOfWeek = selectedDate .endOf (' week' );
79+ const startOfWeekSetting = userStore .data .settings .startOfWeek ?? 7 ;
80+ const weekStart = getStartOfWeek (selectedDate , startOfWeekSetting );
81+ const weekEnd = getEndOfWeek (selectedDate , startOfWeekSetting );
6882
6983 props .onDateChange ({
70- start: startOfWeek .format (' YYYY-MM-DD' ),
71- end: endOfWeek .format (' YYYY-MM-DD' ),
84+ start: weekStart .format (' YYYY-MM-DD' ),
85+ end: weekEnd .format (' YYYY-MM-DD' ),
7286 });
7387 }
7488}
@@ -116,7 +130,7 @@ function onKeyDown(event: KeyboardEvent) {
116130 :aria-label =" t('label.selectWeek') + ': ' + currentWeekLabel"
117131 :title =" t('label.selectWeek')"
118132 >
119- {{ dj(activeDateRange.start).format('MMMM DD') }} – {{ dj(activeDateRange.end).format('MMMM DD') }}
133+ {{ weekPickerButtonText }}
120134 </button >
121135
122136 <button
0 commit comments