@@ -4,13 +4,15 @@ import { widgetKey } from '../../shared/widgetKey'
4
4
import type { ClockSettingStore } from '../../electron/store'
5
5
6
6
function App ( ) {
7
- const timeRef = useRef ( null )
8
- const dateRef = useRef ( null )
7
+ const timeRefs = useRef ( [ ] )
8
+ const dateRefs = useRef ( [ ] )
9
9
10
- const [ setting , setSetting ] = useState < ClockSettingStore > ( null )
10
+ const [ settings , setSettings ] = useState < ClockSettingStore [ ] > ( [ ] )
11
11
12
12
useEffect ( ( ) => {
13
- setSetting ( window . store . get ( widgetKey . Clock ) )
13
+ const clockSettings = window . store . get ( widgetKey . Clock )
14
+ setSettings ( clockSettings )
15
+
14
16
const handleColorSchemeChange = ( e ) => {
15
17
document . documentElement . classList . remove ( 'dark' )
16
18
if ( e . matches ) {
@@ -23,7 +25,8 @@ function App() {
23
25
)
24
26
25
27
window . ipcRenderer . on ( 'updated-setting' , ( ) => {
26
- setSetting ( window . store . get ( widgetKey . Clock ) )
28
+ const updatedSettings = window . store . get ( widgetKey . Clock )
29
+ setSettings ( updatedSettings )
27
30
} )
28
31
29
32
handleColorSchemeChange ( colorSchemeMediaQuery )
@@ -39,76 +42,83 @@ function App() {
39
42
)
40
43
41
44
window . ipcRenderer . removeListener ( 'updated-setting' , ( ) => {
42
- setSetting ( window . store . get ( widgetKey . Clock ) )
45
+ const updatedSettings = window . store . get ( widgetKey . Clock )
46
+ setSettings ( updatedSettings )
43
47
} )
44
48
}
45
49
} , [ ] )
46
50
47
51
useEffect ( ( ) => {
48
52
const updateClock = ( ) => {
49
53
const now = new Date ( )
50
- const options : Intl . DateTimeFormatOptions = {
51
- timeZone : setting ?. timeZone ?. value || 'Asia/Tehran' ,
52
- hour12 : false ,
53
- hour : 'numeric' ,
54
- minute : '2-digit' ,
55
- }
56
-
57
- if ( setting ?. showSecond ) {
58
- options . second = '2-digit'
59
- }
60
-
61
- let timeString = new Intl . DateTimeFormat ( 'en-US' , options ) . format ( now )
62
-
63
- const [ hours , ...rest ] = timeString . split ( ':' )
64
- const formattedHours = hours === '24' ? '00' : hours . padStart ( 2 , '0' )
65
- timeString = [ formattedHours , ...rest ] . join ( ':' )
66
54
67
- if ( timeRef . current ) {
68
- timeRef . current . textContent = timeString
69
- }
70
-
71
- if (
72
- now . getHours ( ) === 0 &&
73
- now . getMinutes ( ) === 0 &&
74
- now . getSeconds ( ) === 0
75
- ) {
76
- dateRef . current . textContent = moment ( )
77
- . locale ( 'fa' )
78
- . format ( 'dddd jD jMMMM jYYYY' )
79
- }
55
+ settings . forEach ( ( setting , index ) => {
56
+ const options : Intl . DateTimeFormatOptions = {
57
+ timeZone : setting ?. timeZone ?. value || 'Asia/Tehran' ,
58
+ hour12 : false ,
59
+ hour : 'numeric' ,
60
+ minute : '2-digit' ,
61
+ }
62
+
63
+ if ( setting ?. showSecond ) {
64
+ options . second = '2-digit'
65
+ }
66
+
67
+ let timeString = new Intl . DateTimeFormat ( 'en-US' , options ) . format ( now )
68
+
69
+ const [ hours , ...rest ] = timeString . split ( ':' )
70
+ const formattedHours = hours === '24' ? '00' : hours . padStart ( 2 , '0' )
71
+ timeString = [ formattedHours , ...rest ] . join ( ':' )
72
+
73
+ if ( timeRefs . current [ index ] ) {
74
+ timeRefs . current [ index ] . textContent = timeString
75
+ }
76
+
77
+ if (
78
+ now . getHours ( ) === 0 &&
79
+ now . getMinutes ( ) === 0 &&
80
+ now . getSeconds ( ) === 0
81
+ ) {
82
+ dateRefs . current [ index ] . textContent = moment ( )
83
+ . locale ( 'fa' )
84
+ . format ( 'dddd jD jMMMM jYYYY' )
85
+ }
86
+ } )
80
87
}
81
88
82
- if ( setting ?. enable ) {
89
+ if ( settings . length > 0 ) {
83
90
updateClock ( )
84
91
85
92
const timerId = setInterval ( updateClock , 1000 )
86
93
return ( ) => clearInterval ( timerId )
87
94
}
88
- } , [ setting ] )
95
+ } , [ settings ] )
96
+
89
97
return (
90
98
< div className = "h-screen w-screen overflow-hidden bg-[#33333330]" >
91
- < div className = "moveable px-0 h-full" >
92
- < div className = "flex h-full items-center text-center justify-center px-2" >
93
- < div className = "text-6xl flex-col font-bold text-gray-600 text-gray-trasnparent dark:text-[#eee] font-mono relative w-60 overflow-clip px-2 font-[digital7]" >
94
- < div ref = { timeRef } > 00:00:00</ div >
95
- < div
96
- className = { 'font-[vazir] text-sm flex flex-col gap-1' }
97
- ref = { dateRef }
98
- >
99
- < div >
100
- { setting ?. showTimeZone && (
101
- < span > { setting ?. timeZone ?. label } </ span >
102
- ) }
103
- </ div >
104
- < div >
105
- { setting ?. showDate &&
106
- moment ( ) . locale ( 'fa' ) . format ( 'dddd jD jMMMM jYYYY' ) }
99
+ { settings . map ( ( setting , index ) => (
100
+ < div key = { index } className = "moveable px-0 h-full" >
101
+ < div className = "flex h-full items-center text-center justify-center px-2" >
102
+ < div className = "text-6xl flex-col font-bold text-gray-600 text-gray-trasnparent dark:text-[#eee] font-mono relative w-60 overflow-clip px-2 font-[digital7]" >
103
+ < div ref = { ( el ) => ( timeRefs . current [ index ] = el ) } > 00:00:00</ div >
104
+ < div
105
+ className = { 'font-[vazir] text-sm flex flex-col gap-1' }
106
+ ref = { ( el ) => ( dateRefs . current [ index ] = el ) }
107
+ >
108
+ < div >
109
+ { setting ?. showTimeZone && (
110
+ < span > { setting ?. timeZone ?. label } </ span >
111
+ ) }
112
+ </ div >
113
+ < div >
114
+ { setting ?. showDate &&
115
+ moment ( ) . locale ( 'fa' ) . format ( 'dddd jD jMMMM jYYYY' ) }
116
+ </ div >
107
117
</ div >
108
118
</ div >
109
119
</ div >
110
120
</ div >
111
- </ div >
121
+ ) ) }
112
122
</ div >
113
123
)
114
124
}
0 commit comments