fix optimistic updates issue on time entry update; update x-win to fix memory leak

This commit is contained in:
Gregor Vostrak
2025-12-17 14:26:30 +01:00
parent 661719115b
commit b341b1de82
3 changed files with 63 additions and 54 deletions
+38 -38
View File
@@ -1,18 +1,18 @@
{
"name": "solidtime",
"version": "0.0.44-beta",
"version": "0.0.45-beta",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "solidtime",
"version": "0.0.44-beta",
"version": "0.0.45-beta",
"hasInstallScript": true,
"dependencies": {
"@electron-toolkit/preload": "^3.0.2",
"@electron-toolkit/utils": "^4.0.0",
"@libsql/client": "^0.15.15",
"@miniben90/x-win": "^3.1.3",
"@miniben90/x-win": "^3.2.0",
"@sentry/electron": "^5.7.0",
"@sentry/vite-plugin": "^2.22.8",
"@solidtime/api": "^0.0.6",
@@ -2500,28 +2500,28 @@
}
},
"node_modules/@miniben90/x-win": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/@miniben90/x-win/-/x-win-3.1.3.tgz",
"integrity": "sha512-p/DYpuM0VRoocGsehl7i59LEf/mIJFgXPoQGg0GCKfGn7aPIWOiUNkodzrsig3vZ9AxRIkxPw2nnCVnM5iwotw==",
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/@miniben90/x-win/-/x-win-3.2.0.tgz",
"integrity": "sha512-RNmCzJsj4dZ+izOkK6sIdtjdSAx1HSHiU1UG3h5go2rYz8qXgRtOrHvgDsGblLljWNxhB/eiyc6XumyQ5u33vw==",
"license": "MIT",
"engines": {
"node": ">= 14"
},
"optionalDependencies": {
"@miniben90/x-win-darwin-arm64": "3.1.3",
"@miniben90/x-win-darwin-universal": "3.1.3",
"@miniben90/x-win-darwin-x64": "3.1.3",
"@miniben90/x-win-linux-x64-gnu": "3.1.3",
"@miniben90/x-win-linux-x64-musl": "3.1.3",
"@miniben90/x-win-win32-arm64-msvc": "3.1.3",
"@miniben90/x-win-win32-ia32-msvc": "3.1.3",
"@miniben90/x-win-win32-x64-msvc": "3.1.3"
"@miniben90/x-win-darwin-arm64": "3.2.0",
"@miniben90/x-win-darwin-universal": "3.2.0",
"@miniben90/x-win-darwin-x64": "3.2.0",
"@miniben90/x-win-linux-x64-gnu": "3.2.0",
"@miniben90/x-win-linux-x64-musl": "3.2.0",
"@miniben90/x-win-win32-arm64-msvc": "3.2.0",
"@miniben90/x-win-win32-ia32-msvc": "3.2.0",
"@miniben90/x-win-win32-x64-msvc": "3.2.0"
}
},
"node_modules/@miniben90/x-win-darwin-arm64": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/@miniben90/x-win-darwin-arm64/-/x-win-darwin-arm64-3.1.3.tgz",
"integrity": "sha512-n4+dkB/JN4eQs1xPd7a8OZABEtsMKYJ4Yu1JsC2qNRslBLmG17gRidBiNNdI2rDc+KyPdcCPWSHeDEYvVh4sgg==",
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/@miniben90/x-win-darwin-arm64/-/x-win-darwin-arm64-3.2.0.tgz",
"integrity": "sha512-BUe30HOMowiwIrdym01VYqD1ptP9l4mrk6DfIljjwcm6jom/dQi4wWNkPlzC4+JdUlL24EGEL+R3ItWjdvVDbQ==",
"cpu": [
"arm64"
],
@@ -2535,9 +2535,9 @@
}
},
"node_modules/@miniben90/x-win-darwin-universal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/@miniben90/x-win-darwin-universal/-/x-win-darwin-universal-3.1.3.tgz",
"integrity": "sha512-T1x4CZheS/oaS52oEOXPst5lIzQHnUbsBOUrqVB7qyaYspdXEewQ8kvG8/mPbKRVmBaa50CjHbsEnz3D57OPuw==",
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/@miniben90/x-win-darwin-universal/-/x-win-darwin-universal-3.2.0.tgz",
"integrity": "sha512-E3zKtAmijeXee56qhbIVJDKeuqiR1eq8Y6z02M1vU6CSny/EBqqn1wTHPzjmEoCMHYJIsjl+xY/HTBujiv/ZMA==",
"license": "MIT",
"optional": true,
"os": [
@@ -2548,9 +2548,9 @@
}
},
"node_modules/@miniben90/x-win-darwin-x64": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/@miniben90/x-win-darwin-x64/-/x-win-darwin-x64-3.1.3.tgz",
"integrity": "sha512-og3F7KAY+6AHTWcXxH+S9dnFLYlbE8xmYiwov+pUrIO+o5JX1WQ4tr9TDgEkQr0OHqYUb+GVTcGHKwQnZFT4yQ==",
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/@miniben90/x-win-darwin-x64/-/x-win-darwin-x64-3.2.0.tgz",
"integrity": "sha512-guPkn56pz/ZWd18RErsyyu1WfP1YcomeFxJvN7F8UrI00A6Gw1UoSUn/SCHWteklwVMkFejGbCrc6DvJCWnrRw==",
"cpu": [
"x64"
],
@@ -2564,9 +2564,9 @@
}
},
"node_modules/@miniben90/x-win-linux-x64-gnu": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/@miniben90/x-win-linux-x64-gnu/-/x-win-linux-x64-gnu-3.1.3.tgz",
"integrity": "sha512-3MxiiKMH/uFtMrZnOvbskvJZ0OcybnNyadA689fdUCcdd9m5volzRMV15FjSpUCvDQrSyPBCmy/PW5armVQ+zA==",
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/@miniben90/x-win-linux-x64-gnu/-/x-win-linux-x64-gnu-3.2.0.tgz",
"integrity": "sha512-Gp45fT9sj1OSFRQff5AMKPZyv1ZApbtntARf21fCdjD5T7sHLby7TNNjkzp96EK2dkPY7cYAZk8ySv6lY6vtHw==",
"cpu": [
"x64"
],
@@ -2580,9 +2580,9 @@
}
},
"node_modules/@miniben90/x-win-linux-x64-musl": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/@miniben90/x-win-linux-x64-musl/-/x-win-linux-x64-musl-3.1.3.tgz",
"integrity": "sha512-GX8Kiglwi3Akxku2Isvjmp1VuWczUYJS7TqGEyLeoxgBlmX/md5AeKUMrBnGB+FhLPYWkte0WVkdJF6yikJIlw==",
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/@miniben90/x-win-linux-x64-musl/-/x-win-linux-x64-musl-3.2.0.tgz",
"integrity": "sha512-Xuj+4nOXdTPQQc4Bo1GJ+SM08jNfoBmv/c3sIYuxcH8U7Jz8WMxLufpBQskK/TDrwBzgem6d/zZylqp2D5AGSg==",
"cpu": [
"x64"
],
@@ -2596,9 +2596,9 @@
}
},
"node_modules/@miniben90/x-win-win32-arm64-msvc": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/@miniben90/x-win-win32-arm64-msvc/-/x-win-win32-arm64-msvc-3.1.3.tgz",
"integrity": "sha512-ZyjbUmFyROnw1uFiFYPHhOKrngp1MSGpKSlWB3x7pVFYC0s4bN4OjjEa363xOMJvRlpFBbA6wLG3ngjXWZyYOg==",
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/@miniben90/x-win-win32-arm64-msvc/-/x-win-win32-arm64-msvc-3.2.0.tgz",
"integrity": "sha512-G1SqQvnTPW87O4rk5fGRvvZESa42e4RLbXRN/d/XGBhuyjEJKRNk8YR4UqWXLvJiwkNg1kxisCtWc2qr3b09Fg==",
"cpu": [
"arm64"
],
@@ -2612,9 +2612,9 @@
}
},
"node_modules/@miniben90/x-win-win32-ia32-msvc": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/@miniben90/x-win-win32-ia32-msvc/-/x-win-win32-ia32-msvc-3.1.3.tgz",
"integrity": "sha512-3JsV1iDNWnCV12EuQlPDqDkfVldm1Jv7NHijSo4/BV0BMLjU9kinbkFzCDWV3E7KVckwxFfLOyM42QHZ2CTA6w==",
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/@miniben90/x-win-win32-ia32-msvc/-/x-win-win32-ia32-msvc-3.2.0.tgz",
"integrity": "sha512-DmRcTqsCZDzUk6l7SWmt8YyeipoZvHOo0l42tDJn5A35PwB9T8RNNyIaw4iJ8H1H2ynf6+K7dWboOo07s9wTBQ==",
"cpu": [
"ia32"
],
@@ -2628,9 +2628,9 @@
}
},
"node_modules/@miniben90/x-win-win32-x64-msvc": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/@miniben90/x-win-win32-x64-msvc/-/x-win-win32-x64-msvc-3.1.3.tgz",
"integrity": "sha512-ki0nFm0PadjbsuyC/wbFbVREoU54ZNd91/s+WuqDP86j6AD7joJS+iK2T3lBmEfwYvhfQMD2b/40Ti7X0/6uyw==",
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/@miniben90/x-win-win32-x64-msvc/-/x-win-win32-x64-msvc-3.2.0.tgz",
"integrity": "sha512-4ictKu0u2wOQMFqH6qFs8zNkxT+fxlLOrpIO9dZ3+AaouqziqFEdFrMyGFNNanwaM5eiSnN3e8mOrKm9W+roBA==",
"cpu": [
"x64"
],
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "solidtime",
"version": "0.0.44-beta",
"version": "0.0.45-beta",
"description": "Desktop App for solidtime - the modern open-source time tracker",
"main": "./out/main/index.js",
"author": "solidtime.io",
@@ -33,7 +33,7 @@
"@electron-toolkit/preload": "^3.0.2",
"@electron-toolkit/utils": "^4.0.0",
"@libsql/client": "^0.15.15",
"@miniben90/x-win": "^3.1.3",
"@miniben90/x-win": "^3.2.0",
"@sentry/electron": "^5.7.0",
"@sentry/vite-plugin": "^2.22.8",
"@solidtime/api": "^0.0.6",
+23 -14
View File
@@ -6,6 +6,7 @@ import type {
UpdateMultipleTimeEntriesChangeset,
} from '@solidtime/api'
import { useMutation, useQueryClient } from '@tanstack/vue-query'
import type { InfiniteData } from '@tanstack/vue-query'
import { useMyMemberships } from './myMemberships.ts'
export const emptyTimeEntry = {
@@ -157,14 +158,18 @@ export function useTimeEntryUpdateMutation() {
await queryClient.cancelQueries({ queryKey: ['timeEntries', currentOrganizationId] })
queryClient.setQueryData(
['timeEntries', currentOrganizationId],
(old: TimeEntryResponse) => {
const optimisticTimeEntries = old.data.map((entry) => {
if (entry.id === variables.id) {
return { ...variables }
}
return entry
(old: InfiniteData<TimeEntryResponse> | undefined) => {
if (!old) return old
const updatedPages = old.pages.map((page: TimeEntryResponse) => {
const optimisticTimeEntries = page.data.map((entry) => {
if (entry.id === variables.id) {
return { ...variables }
}
return entry
})
return { ...page, data: optimisticTimeEntries }
})
return { data: optimisticTimeEntries }
return { ...old, pages: updatedPages }
}
)
return { variables }
@@ -237,14 +242,18 @@ export function useTimeEntriesUpdateMutation() {
await queryClient.cancelQueries({ queryKey: ['timeEntries', currentOrganizationId] })
queryClient.setQueryData(
['timeEntries', currentOrganizationId],
(old: TimeEntryResponse) => {
const optimisticTimeEntries = old.data.map((entry) => {
if (ids.includes(entry.id)) {
return { ...entry, ...changes }
}
return entry
(old: InfiniteData<TimeEntryResponse> | undefined) => {
if (!old) return old
const updatedPages = old.pages.map((page: TimeEntryResponse) => {
const optimisticTimeEntries = page.data.map((entry) => {
if (ids.includes(entry.id)) {
return { ...entry, ...changes }
}
return entry
})
return { ...page, data: optimisticTimeEntries }
})
return { data: optimisticTimeEntries }
return { ...old, pages: updatedPages }
}
)
return { ids, changes }