MediumPro challengeJavaScriptTypeScript

Optimistic Update

ReactStateAsync

Simulate optimistic UI: apply update immediately, then rollback on failure.

solve(items, mutation, succeeds) where mutation is { id, newValue }:
1. Apply immediately to a copy.
2. If succeeds is false, rollback to original.
3. Return final list.

Sample tests

Test #1Failure rolls back
Input: [[{"id":1,"value":"a"}],{"id":1,"newValue":"X"},false]
Output: [{"id":1,"value":"a"}]
Test #2Mutation for unknown id
Input: [[{"id":1,"value":"a"}],{"id":99,"newValue":"X"},true]
Output: [{"id":1,"value":"a"}]
Test #3Empty list
Input: [[],{"id":1,"newValue":"X"},true]
Output: []
Test #4Rollback preserves all
Input: [[{"id":1,"value":"old"},{"id":2,"value":"old"}],{"id":2,"newValue":"new"},false]
Output: [{"id":1,"value":"old"},{"id":2,"value":"old"}]
Test #5Success applies
Input: [[{"id":1,"value":"a"},{"id":2,"value":"b"}],{"id":1,"newValue":"X"},true]
Output: [{"id":1,"value":"X"},{"id":2,"value":"b"}]