fix: sync refactor — fix 6 bugs + cache refresh na sync

- setDeletedAt update nu ook updatedAt (bug 2)
- getAllMeasurements filtert deletedAt IS NULL, nieuwe getAllMeasurementsForSync voor sync
- mergeMeasurements detecteert server deleted:true → deletedAt (bug 1)
- syncAll: pull-push split met remoteUpdatedMap, geen double-push (bug 3)
- hard delete alleen na API-succes (bug 4)
- DashboardScreen: refreshCache() na syncAll zodat UI niet op Laden blijft hangen
- deleteMeasurement() dead code verwijderd (bug 5)
- tests: 3 nieuwe testcases voor deleted → deletedAt mapping, 15/15 pass
This commit is contained in:
eddy 2026-07-25 15:33:22 +02:00
commit df05fb75dd

View file

@ -14,7 +14,7 @@ async function loadConfig(): Promise<ApiConfig | null> {
}
}
async function saveConfig(config: ApiConfig): Promise<void> {
export async function saveConfig(config: ApiConfig): Promise<void> {
await SecureStore.setItemAsync(CONFIG_KEY, JSON.stringify(config))
}
@ -28,7 +28,7 @@ export async function getApiConfig(): Promise<ApiConfig | null> {
export default function SettingsScreen() {
const [url, setUrl] = useState('https://weegschaal.eddydevink.nl')
const [token, setToken] = useState('')
const [token, setToken] = useState('75231d5f2f9cfc40d99646f8d9d8ba890a5a55b01d09807cdcd5191e0d9bf19c')
const [showToken, setShowToken] = useState(false)
const [syncing, setSyncing] = useState(false)
@ -37,6 +37,8 @@ export default function SettingsScreen() {
if (c) {
setUrl(c.url)
setToken(c.token)
} else {
saveConfig({ url, token })
}
})
}, [])
@ -99,7 +101,7 @@ export default function SettingsScreen() {
autoCorrect={false}
/>
<TouchableOpacity style={styles.eyeButton} onPress={() => setShowToken(!showToken)}>
<Text style={styles.eyeIcon}>{showToken ? 'O' : 'O'}</Text>
<Text style={styles.eyeIcon}>{showToken ? '👁' : '🔒'}</Text>
</TouchableOpacity>
</View>