Skip to content

Commit 10d9508

Browse files
authored
Optimistic update missing return and doc fixes (#79)
1 parent b0daa07 commit 10d9508

File tree

3 files changed

+16
-9
lines changed

3 files changed

+16
-9
lines changed

Diff for: README.md

+9-7
Original file line numberDiff line numberDiff line change
@@ -156,10 +156,10 @@ const MesssageView = observer((props) => {
156156

157157
```tsx
158158
import { types } from 'mobx-state-tree';
159-
import { createQuery, RequestModel } from 'mst-query';
159+
import { createInfiniteQuery, RequestModel } from 'mst-query';
160160
import { MessageModel } from './models';
161161

162-
const MessagesQuery = createQuery('MessagesQuery', {
162+
const MessagesQuery = createInfiniteQuery('MessagesQuery', {
163163
data: types.model({ items: types.array(types.reference(MessageModel)) }),
164164
pagination: types.model({ offset: types.number, limit: types.number }),
165165
endpoint({ request }) {
@@ -175,13 +175,13 @@ const MessageStore = createModelStore('MessageStore', MessageModel).props({
175175
```
176176

177177
```tsx
178-
import { useQuery } from 'mst-query';
178+
import { useInfiniteQuery } from 'mst-query';
179179
import { observer } from 'mobx-react';
180180
import { MessageListQuery } from './MessageListQuery';
181181

182182
const MesssageListView = observer((props) => {
183183
const [offset, setOffset] = useState(0);
184-
const { data, isFetchingMore, query } = useQuery(messageStore.messagesQuery, {
184+
const { data, isFetchingMore, query } = useInfiniteQuery(messageStore.messagesQuery, {
185185
request: { filter: '' },
186186
pagination: { offset, limit: 20 },
187187
});
@@ -246,9 +246,11 @@ const AddMessage = observer((props) => {
246246
onClick={() => {
247247
addMessage({
248248
request: { message },
249-
optimisticResponse: {
250-
id: 'temp' + Math.random(),
251-
message,
249+
optimisticUpdate() {
250+
return {
251+
id: 'temp' + Math.random(),
252+
message,
253+
};
252254
},
253255
});
254256
setMessage('');

Diff for: packages/mst-query/src/MstQueryHandler.ts

+6-1
Original file line numberDiff line numberDiff line change
@@ -292,11 +292,16 @@ export class MstQueryHandler {
292292
mutate(options: any = {}): Promise<() => any> {
293293
const { optimisticUpdate } = options;
294294
let updateRecorder: IPatchRecorder;
295+
let result: any;
295296
if (optimisticUpdate) {
296297
updateRecorder = recordPatches(getRoot(this.model));
297-
optimisticUpdate();
298+
result = optimisticUpdate();
298299
updateRecorder.stop();
299300
}
301+
if (result) {
302+
const data = this.prepareData(result);
303+
this.notify({ onMutate: true }, data, this.model);
304+
}
300305
return this.run(options).then(
301306
(result) => this.onSuccess(result, { updateRecorder }),
302307
(err) => this.onError(err, { updateRecorder }),

Diff for: packages/mst-query/src/create.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,7 @@ export function createMutation<TData extends IAnyType, TRequest extends IAnyType
277277
return next();
278278
}) as <TResult = any>(options: {
279279
request: SnapshotIn<TRequest>;
280-
optimisticUpdate?: () => void;
280+
optimisticUpdate?: () => any;
281281
meta?: { [key: string]: any };
282282
}) => Promise<ReturnData<Instance<TData>, TResult>>,
283283
abort: self.__MstQueryHandler.abort,

0 commit comments

Comments
 (0)