feat(timers): Add timer sessions (#69)#71
Conversation
4fcafda to
1ecf73a
Compare
1ecf73a to
1d6edaa
Compare
There was a problem hiding this comment.
Pull request overview
Adds per-timer session tracking so the UI can display individual start/stop segments (and support removing a session) instead of only storing a single accumulated total.
Changes:
- Refactors timer storage model to include
activeSession+sessions[], and introducesuseTimerApifor timer mutations. - Updates timer/issue grouping and all timer UI components to use the new timer model + API.
- Adds a new
TimerSessionscomponent and corresponding i18n strings.
Reviewed changes
Copilot reviewed 22 out of 22 changed files in this pull request and generated 6 comments.
Show a summary per file
| File | Description |
|---|---|
| src/utils/groupTimers.ts | Updates grouping types to use the new Timer model. |
| src/utils/groupIssues.ts | Updates timer lookup logic for issue grouping using sessions/active session state. |
| src/lang/ru.json | Adds new timer session/remove-session UI strings. |
| src/lang/fr.json | Adds new timer session/remove-session UI strings. |
| src/lang/en.json | Adds new timer session/remove-session UI strings. |
| src/lang/de.json | Adds new timer session/remove-session UI strings. |
| src/hooks/useTimers.ts | Refactors timers to session-based data model; adds useTimerApi + migration updates. |
| src/components/timer/timer/TimerWrapper.tsx | Switches toggle behavior to call timerApi. |
| src/components/timer/timer/TimerToggleButton.tsx | Switches start/pause behavior to call timerApi and uses activeSession. |
| src/components/timer/timer/TimerSessions.tsx | New UI to list sessions and remove a session via dialog. |
| src/components/timer/timer/TimerRoot.tsx | Extends timer context to include timerApi and total elapsed time calculation. |
| src/components/timer/timer/TimerNameField.tsx | Uses timerApi.setName instead of controller methods. |
| src/components/timer/timer/TimerDoneButton.tsx | Uses total elapsed time from context and deletes via timerApi. |
| src/components/timer/timer/TimerCounter.tsx | Uses total elapsed time from context and overrides time via timerApi. |
| src/components/timer/timer/TimerContextMenu.tsx | Updates context menu actions to use timerApi and new active state. |
| src/components/timer/timer/index.ts | Renames exported UI namespace to TimerComponents (no default export). |
| src/components/timer/ProjectTimersGroup.tsx | Updates timer list rendering to TimerComponents and adds sessions display. |
| src/components/timer/CurrentIssueTimer.tsx | Updates to TimerComponents and new elapsed-time calculation helper. |
| src/components/time-entry/CreateTimeEntryModal.tsx | Adjusts timer prop type to the new Timer model. |
| src/components/issue/ProjectIssuesGroup.tsx | Removes onAddTimer prop wiring; relies on new timer API flow. |
| src/components/issue/IssueContextMenu.tsx | Uses timerApi and new timer model for start/pause/reset/add actions. |
| src/components/issue/Issue.tsx | Updates timer rendering to TimerComponents and uses timerApi for toggling/context menu. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 25 out of 25 changed files in this pull request and generated 7 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
## [2.0.0-beta.6](v2.0.0-beta.5...v2.0.0-beta.6) (2026-04-12) ### 🚀 Features * **timers:** Add timer sessions ([#69](#69)) ([#71](#71)) ([ed42990](ed42990)) ### 🩹 Fixes * **timer:** Fix timer name cursor focus ([dee98ec](dee98ec)) ### 🏡 Chore * **deps:** Update npm dependencies ([e966f7e](e966f7e)) * **security:** Set pnpm minimum release age to 1 days ([0d595c2](0d595c2)) ### 📖 Documentation * Update store screenshots ([cd60ec7](cd60ec7)) ### 📦 Builds * **deps-dev:** bump vite from 8.0.3 to 8.0.5 ([#70](#70)) ([aed8cdc](aed8cdc)) * **deps:** bump axios from 1.14.0 to 1.15.0 ([#72](#72)) ([057ad2c](057ad2c))
|
🎉 This PR is included in version 2.0.0-beta.6 🎉 The release is available on GitHub release Your semantic-release bot 📦🚀 |
## [2.0.0-beta.6](v2.0.0-beta.5...v2.0.0-beta.6) (2026-04-12) ### 🚀 Features * **timers:** Add timer sessions ([#69](#69)) ([#71](#71)) ([ed42990](ed42990)) ### 🩹 Fixes * **timer:** Fix timer name cursor focus ([dee98ec](dee98ec)) ### 🏡 Chore * **deps:** Update npm dependencies ([e966f7e](e966f7e)) * **security:** Set pnpm minimum release age to 1 days ([0d595c2](0d595c2)) ### 📖 Documentation * Update store screenshots ([cd60ec7](cd60ec7)) ### 📦 Builds * **deps-dev:** bump vite from 8.0.3 to 8.0.5 ([#70](#70)) ([aed8cdc](aed8cdc)) * **deps:** bump axios from 1.14.0 to 1.15.0 ([#72](#72)) ([057ad2c](057ad2c))
## [2.0.0](v1.21.2...v2.0.0) (2026-04-26) ### ⚠ BREAKING CHANGES * The next release should be a major version bump ### 🚀 Features * Add full-screen project sidebar (experimental) ([#64](#64)) ([2f4c065](2f4c065)) * Add issue status badge ([6c5e447](6c5e447)) * Add project info tooltip ([f2a1c80](f2a1c80)) * Add side panel entrypoint ([3731d5d](3731d5d)) * Allow to specify the rounding mode ([#49](#49)) ([2c0322b](2c0322b)) * Display custom field values for info tooltips ([2d2bef8](2d2bef8)) * Enhance issue grouping ([#38](#38)) ([e2a5a98](e2a5a98)) * Enhance search ([#51](#51)) ([770fa4b](770fa4b)), closes [#46](#46) * **filter:** Add issue status filter ([e7807e2](e7807e2)) * Multiple timers & timer tab ([bd55541](bd55541)), closes [#39](#39) * **settings:** Add option to show/hide issue done ratio ([bc9b6c3](bc9b6c3)) * **settings:** Add option to show/hide timer sessions ([6022751](6022751)) * **timers:** Add timer sessions ([#69](#69)) ([#71](#71)) ([ed42990](ed42990)) * **timers:** Group timers by project and sort them by newest first ([d66aa6a](d66aa6a)) ### 🩹 Fixes * Cleanup local issue data on reset to default data ([9a7adc1](9a7adc1)) * Display translated error message until redmine url is configured and remove errors toasts ([4c2d534](4c2d534)) * Enforce next release ([1d7d37c](1d7d37c)) * Fire toast after query reset ([f051446](f051446)) * Fix 0 value selection for select field ([35af5e4](35af5e4)) * Fix autoFetchPages for redmine paginated queries ([a925baa](a925baa)) * Fix broken persistent comments behavior ([6121441](6121441)) * Fix context menu dialog actions ([66cbc7a](66cbc7a)) * Fix default time entry activity ([0f316ae](0f316ae)) * Fix default time entry activity selection ([946c4b6](946c4b6)) * Fix eslint errors ([a245275](a245275)) * Fix install listener registration ([8b9b125](8b9b125)) * Fix legacy settings migrations ([1336e31](1336e31)) * Fix suspense settings provider ([#60](#60)) ([cfc47f3](cfc47f3)) * Handle issue priorities when no default is specified ([899c21a](899c21a)) * Implement legacy data migrations for issues and timers ([c2fd501](c2fd501)) * Prevent empty issues fetch request ([#65](#65)) ([6616c64](6616c64)) * Save persistent comments per timer instead of issue ([bff5fcf](bff5fcf)) * Skip failed mutations for multi create time spend entires ([a019c16](a019c16)) * **timer:** Close alert dialog on reset confirm ([9e51a23](9e51a23)) * **timer:** Fix timer name cursor focus ([dee98ec](dee98ec)) * **ui:** Display deleted issues as strike-through text ([90933a9](90933a9)) * **ui:** Enhance skeleton components ([d89a901](d89a901)) * **ui:** Fix dark mode for firefox options and sidepanel ([ba6b406](ba6b406)) * **ui:** Fix layout inconsistencies depending on style settings ([6cef7e3](6cef7e3)) * **ui:** Fix toaster styles inside shadow root ([0319a42](0319a42)) * **ui:** Improve combobox clear button position ([932d36d](932d36d)) * **ui:** Polished various ui elements ([c095c5c](c095c5c)) * **ui:** Truncate field labels ([e779018](e779018)) * Update min browser versions to match current requirements ([bd1e7d0](bd1e7d0)) ### 🔥 Performance * Add query client restoring gate instead of restoring twice ([30b9aeb](30b9aeb)) * Add react compiler and reduce unnecessary re-renders ([acb8551](acb8551)) * Improve performance by moving stuff to dedicated components ([f2f7fab](f2f7fab)) * Improving data loading and increasing page loading speed ([#52](#52)) ([6b22f6b](6b22f6b)) * Set NODE_ENV=production for release & pre-release builds ([4a922ff](4a922ff)) * Use react context for permissions management ([#63](#63)) ([23f25f0](23f25f0)) ### 🏡 Chore * Add docker compose for dev setup ([bb79a02](bb79a02)) * Add install buttons to github releases ([3c97a80](3c97a80)) * **deps:** Update dependencies ([2a3f1fb](2a3f1fb)) * **deps:** Update dependencies ([6f800bd](6f800bd)) * **deps:** Update npm dependencies ([0132802](0132802)) * **deps:** Update npm dependencies ([b0256f0](b0256f0)) * **deps:** Update npm dependencies ([e966f7e](e966f7e)) * Enforce next release version to v2.0.0 ([fade882](fade882)) * Fix eslint errors ([9ec1e07](9ec1e07)) * Introduced script to automate chrome store screenshot generation ([#67](#67)) ([c34baa2](c34baa2)) * **lint:** Fix htmlhint errors ([07604c3](07604c3)) * **security:** Set pnpm minimum release age to 1 days ([0d595c2](0d595c2)) * Update dependencies ([891fd66](891fd66)) * Update npm dependencies ([a9bb249](a9bb249)) * Update npm dependencies ([6c806b9](6c806b9)) * Update shadcn components ([4f9bb88](4f9bb88)) * Upgrade to typescript 6 and hardened ts config ([5e34a03](5e34a03)) * Upgrade to vite v8 ([8210cb5](8210cb5)) ### 🛠️ Refactors * Fix some warnings and errors from react-doctor ([c4d9c84](c4d9c84)) * Improve create time entry modal ([49f6eb6](49f6eb6)) * Move to tanstack form + zod (removed formik + yup) ([60b9e43](60b9e43)) * Refactor redmine api hooks ([6642499](6642499)) * Remove add notes settings option ([4c3733c](4c3733c)) * Run settings migration on extension update ([840f48d](840f48d)) * **settings:** Redesign settings page and add testing redmine connection button ([3a65610](3a65610)) * **timer:** Refactor timer components and permission improvements ([0b32d3e](0b32d3e)) * **timer:** Remove the reset timer button ([26e0f2f](26e0f2f)) * **ui:** Migrate to shadcn components ([#48](#48)) ([274e220](274e220)) * **ui:** Move to shadcn base-ui components ([#57](#57)) ([70994f0](70994f0)) * **ui:** Refactor time entry week overview ([2710d3b](2710d3b)) * Upgrade tailwindcss to v4 ([aa42fbb](aa42fbb)) * Use null as form default values and update zod to v4 ([cd2f4d8](cd2f4d8)) * Use only project id for permission check function ([b31c12f](b31c12f)) ### 📖 Documentation * **github:** Enhance issue and feature request templates ([#68](#68)) ([e70f419](e70f419)) * **license:** Update license text for consistency ([37a0ebf](37a0ebf)) * Update README ([8011225](8011225)) * Update store screenshots ([702a2c4](702a2c4)) * Update store screenshots ([cd60ec7](cd60ec7)) ### 🧪 Tests * Fix all e2e tests ([c46486f](c46486f)) * Fix flaky tests ([1e0a7a2](1e0a7a2)) * Fix flaky time drift tests ([cadd015](cadd015)) * Introduce snapshot-based e2e tests ([#66](#66)) ([dfcb7fb](dfcb7fb)) ### 📦 Builds * **deps-dev:** bump vite from 8.0.3 to 8.0.5 ([#70](#70)) ([aed8cdc](aed8cdc)) * **deps:** bump axios from 1.14.0 to 1.15.0 ([#72](#72)) ([057ad2c](057ad2c)) * Migrate to wxt framework ([#53](#53)) ([a83bf30](a83bf30)) ### ⚡CI * Add build number for canary version ([df1d96c](df1d96c)) * Add semantic release ([2ca9621](2ca9621)) * Add super-linter for pull requests ([#59](#59)) ([9db6385](9db6385)) * Fix pre-release asset upload ([ac8f132](ac8f132)) * Fix wxt submit ([74fe75d](74fe75d)) * Publish production only for real releases not for pre-releases ([9855905](9855905)) * Use pat for release creation to trigger publish pipeline ([7b15071](7b15071))
|
🎉 This PR is included in version 2.0.0 🎉 The release is available on GitHub release Your semantic-release bot 📦🚀 |
Instead of just storing the total timer time, all individual sessions are now stored and displayed on the “Timer” tab.