Skip to content

Commit a3a232d

Browse files
ryan-williamsclaude
andcommitted
feat: use digit wildcards for time range hotkeys
Replace 11 hardcoded time range actions with 6 dynamic actions using use-kbd's digit wildcard capture feature (`\d+`). Type `3d` or `d3` for 3 days, `2w` or `w2` for 2 weeks, etc. Actions: - `time:hours` - `N h` or `h N` for N hours - `time:days` - `N d` or `d N` for N days - `time:weeks` - `N w` or `w N` for N weeks - `time:months` - `N m` or `m N` for N months - `time:all` - `f` for full history - `time:latest` - `l` for latest mode 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent dbe3d4b commit a3a232d

File tree

1 file changed

+8
-12
lines changed

1 file changed

+8
-12
lines changed

www/src/components/AwairChart.tsx

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -387,18 +387,14 @@ export const AwairChart = memo(function AwairChart(
387387
useAction('right:none', { label: 'Clear', group: 'Y-Axis Metrics', defaultBindings: ['shift+n'], handler: () => r.set('none') })
388388
useAction('right:autorange', { label: 'Toggle auto-range', group: 'Y-Axis Metrics', defaultBindings: ['shift+a'], handler: () => { if (r.val !== 'none') r.setAutoRange(!r.autoRange) } })
389389

390-
// Time ranges
391-
useAction('time:00-6h', { label: '6 hours', group: 'Time Range', defaultBindings: ['6'], keywords: ['6h', '6hr'], handler: () => handleTimeRangeClick(6) })
392-
useAction('time:01-12h', { label: '12 hours', group: 'Time Range', defaultBindings: ['ctrl+h'], keywords: ['12h', '12hr', 'half day'], handler: () => handleTimeRangeClick(12) })
393-
useAction('time:02-1d', { label: '1 day', group: 'Time Range', defaultBindings: ['1', 'd 1'], keywords: ['1d', '24h', 'day', 'today'], handler: () => handleTimeRangeClick(24) })
394-
useAction('time:03-3d', { label: '3 days', group: 'Time Range', defaultBindings: ['3', 'd 3'], keywords: ['3d', '72h'], handler: () => handleTimeRangeClick(24 * 3) })
395-
useAction('time:04-7d', { label: '1 week', group: 'Time Range', defaultBindings: ['7', 'w 1'], keywords: ['7d', '1w', 'week'], handler: () => handleTimeRangeClick(24 * 7) })
396-
useAction('time:05-14d', { label: '2 weeks', group: 'Time Range', defaultBindings: ['2', 'w 2'], keywords: ['14d', '2w', 'fortnight'], handler: () => handleTimeRangeClick(24 * 14) })
397-
useAction('time:06-31d', { label: '1 month', group: 'Time Range', defaultBindings: ['m 1'], keywords: ['31d', '1mo', '1m', 'month'], handler: () => handleTimeRangeClick(24 * 31) })
398-
useAction('time:07-62d', { label: '2 months', group: 'Time Range', defaultBindings: ['m 2'], keywords: ['62d', '2mo', '2m'], handler: () => handleTimeRangeClick(24 * 62) })
399-
useAction('time:08-92d', { label: '3 months', group: 'Time Range', defaultBindings: ['m 3'], keywords: ['92d', '3mo', '3m', 'quarter'], handler: () => handleTimeRangeClick(24 * 92) })
400-
useAction('time:09-all', { label: 'Full history', group: 'Time Range', defaultBindings: ['f'], keywords: ['all', 'everything', 'max', 'full'], handler: handleAllClick })
401-
useAction('time:10-latest', { label: 'Latest', group: 'Time Range', defaultBindings: ['l'], keywords: ['now', 'current', 'live'], handler: toggleLatestMode })
390+
// Time ranges - dynamic with digit wildcards
391+
useAction('time:hours', { label: 'N hours', group: 'Time Range', defaultBindings: ['\\d+ h', 'h \\d+'], keywords: ['hours'], handler: useCallback((_, captures) => handleTimeRangeClick(captures?.[0] ?? 1), [handleTimeRangeClick]) })
392+
useAction('time:days', { label: 'N days', group: 'Time Range', defaultBindings: ['\\d+ d', 'd \\d+'], keywords: ['days'], handler: useCallback((_, captures) => handleTimeRangeClick((captures?.[0] ?? 1) * 24), [handleTimeRangeClick]) })
393+
useAction('time:weeks', { label: 'N weeks', group: 'Time Range', defaultBindings: ['\\d+ w', 'w \\d+'], keywords: ['weeks'], handler: useCallback((_, captures) => handleTimeRangeClick((captures?.[0] ?? 1) * 24 * 7), [handleTimeRangeClick]) })
394+
useAction('time:months', { label: 'N months', group: 'Time Range', defaultBindings: ['\\d+ m', 'm \\d+'], keywords: ['months'], handler: useCallback((_, captures) => handleTimeRangeClick((captures?.[0] ?? 1) * 24 * 31), [handleTimeRangeClick]) })
395+
// Special time ranges (not digit-based)
396+
useAction('time:all', { label: 'Full history', group: 'Time Range', defaultBindings: ['f'], keywords: ['all', 'everything', 'max', 'full'], handler: handleAllClick })
397+
useAction('time:latest', { label: 'Latest', group: 'Time Range', defaultBindings: ['l'], keywords: ['now', 'current', 'live'], handler: toggleLatestMode })
402398

403399
// Devices
404400
useAction('device:gym', { label: 'Gym', group: 'Toggle devices on/off', defaultBindings: ['g'], handler: () => toggleDeviceByPattern('gym') })

0 commit comments

Comments
 (0)