From d1a4273fb2f0c2b69e166cace3729fdb02b310ab Mon Sep 17 00:00:00 2001 From: Koha9 Date: Sat, 29 Nov 2025 12:35:27 +0900 Subject: [PATCH] Squashed 'sample-front-end/' changes from 9f02555..0e20813 0e20813 feat: Add eye icon for visibility toggles git-subtree-dir: sample-front-end git-subtree-split: 0e208135b924170bcd757c693265a5cc1b620ac3 --- App.tsx | 52 ++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 42 insertions(+), 10 deletions(-) diff --git a/App.tsx b/App.tsx index acd91d7..4d5d785 100644 --- a/App.tsx +++ b/App.tsx @@ -17,7 +17,7 @@ import { SYNC_BANNER_PADDING_X, SYNC_BANNER_PADDING_Y, SYNC_BANNER_MIN_WIDTH } f import ServerPanel from './components/ServerPanel'; import StrategySelector from './components/StrategySelector'; import ConnectionModal from './components/ConnectionModal'; -import { ArrowLeftRight, ShieldCheck, X, Server, ServerOff, Clock } from 'lucide-react'; +import { ArrowLeftRight, ShieldCheck, X, Server, ServerOff, Clock, Eye, EyeOff } from 'lucide-react'; interface Toast { id: number; @@ -383,12 +383,24 @@ const App: React.FC = () => { // Helper: Calculate Next Run Info const getScheduleDisplayInfo = (settings: ScheduleSettings) => { + const result = { + label: 'Schedule', + value: 'Not configured', + active: false, + autoWatch: settings.autoWatch + }; + if (settings.mode === ScheduleMode.DISABLED) { - return { label: 'Auto-Sync', value: 'Disabled', active: false }; + result.label = 'Auto-Sync'; + result.value = 'Disabled'; + return result; } if (settings.mode === ScheduleMode.CRON) { - return { label: 'Cron Schedule', value: settings.cronExpression || 'Pending...', active: true }; + result.label = 'Cron Schedule'; + result.value = settings.cronExpression || 'Pending...'; + result.active = true; + return result; } const now = new Date(); @@ -415,7 +427,11 @@ const App: React.FC = () => { const [h, m] = settings.weeklyTime.split(':').map(Number); const activeDays = [...settings.weeklyDays].sort(); - if (activeDays.length === 0) return { label: 'Weekly Schedule', value: 'No days selected', active: false }; + if (activeDays.length === 0) { + result.label = 'Weekly Schedule'; + result.value = 'No days selected'; + return result; + } // Check rest of today if (activeDays.includes(now.getDay())) { @@ -451,10 +467,13 @@ const App: React.FC = () => { else if (isTomorrow) dateStr = 'Tomorrow'; else dateStr = days[nextRun.getDay()]; - return { label: `${settings.mode === ScheduleMode.DAILY ? 'Daily' : 'Weekly'} Schedule`, value: `${dateStr} at ${timeStr}`, active: true }; + result.label = `${settings.mode === ScheduleMode.DAILY ? 'Daily' : 'Weekly'} Schedule`; + result.value = `${dateStr} at ${timeStr}`; + result.active = true; + return result; } - return { label: 'Schedule', value: 'Not configured', active: false }; + return result; }; const scheduleInfo = getScheduleDisplayInfo(scheduleSettings); @@ -541,9 +560,22 @@ const App: React.FC = () => { {scheduleInfo.label} -
- {scheduleInfo.active && } - {scheduleInfo.value} +
+ {/* Schedule Part */} +
+ {scheduleInfo.active && } + {scheduleInfo.value} +
+ + {/* Watch Part */} + | +
+ {scheduleInfo.autoWatch ? : } + WATCH +
@@ -669,4 +701,4 @@ const App: React.FC = () => { ); }; -export default App; +export default App; \ No newline at end of file