MCPcopy Create free account
hub / github.com/TanStack/db / App

Function App

examples/react/paced-mutations-demo/src/App.tsx:82–448  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

80type StrategyType = `debounce` | `queue` | `throttle`
81
82export function App() {
83 const [strategyType, setStrategyType] = useState<StrategyType>(`debounce`)
84 const [wait, setWait] = useState(300)
85 const [leading, setLeading] = useState(false)
86 const [trailing, setTrailing] = useState(true)
87
88 const [transactions, setTransactions] = useState<Array<TrackedTransaction>>(
89 [],
90 )
91 const [optimisticState, setOptimisticState] = useState<Item | null>(null)
92 const [syncedState, setSyncedState] = useState<Item>(fakeServer.get(1)!)
93
94 // Initialize optimistic state from collection when ready
95 useEffect(() => {
96 itemCollection.stateWhenReady().then(() => {
97 setOptimisticState(itemCollection.get(1))
98 })
99 }, [])
100
101 // Create the strategy based on current settings
102 // Memoize to prevent recreation on every render
103 const strategy = useMemo(() => {
104 if (strategyType === `debounce`) {
105 return debounceStrategy({ wait, leading, trailing })
106 } else if (strategyType === `queue`) {
107 return queueStrategy({ wait })
108 } else {
109 return throttleStrategy({ wait, leading, trailing })
110 }
111 }, [strategyType, wait, leading, trailing])
112
113 // Create the paced mutations hook with onMutate for optimistic updates
114 const mutate = usePacedMutations<number>({
115 onMutate: (newValue) => {
116 // Apply optimistic update immediately
117 itemCollection.update(1, (draft) => {
118 draft.value = newValue
119 draft.timestamp = Date.now()
120 })
121 },
122 mutationFn: async ({ transaction }) => {
123 console.log(`mutationFn called with transaction:`, transaction)
124
125 // Update transaction state to executing when commit starts
126 const executingAt = Date.now()
127 setTransactions((prev) =>
128 prev.map((t) => {
129 if (t.id === transaction.id) {
130 return { ...t, state: `executing` as const, executingAt }
131 }
132 return t
133 }),
134 )
135
136 // Simulate network delay to fake server (random 100-600ms)
137 const delay = Math.random() * 500 + 100
138 await new Promise((resolve) => setTimeout(resolve, delay))
139

Callers

nothing calls this directly

Calls 14

usePacedMutationsFunction · 0.90
debounceStrategyFunction · 0.85
queueStrategyFunction · 0.85
throttleStrategyFunction · 0.85
triggerMutationFunction · 0.85
stateWhenReadyMethod · 0.80
emitMethod · 0.80
filterMethod · 0.80
getMethod · 0.45
updateMethod · 0.45
mapMethod · 0.45
forEachMethod · 0.45

Tested by

no test coverage detected