Skip to content

Commit 059680d

Browse files
david-mcafeeRachel Lee Nabors
authored andcommitted
fix(data): replace broken JS example with a working React Native example (5257) (#5283)
* fix(data): replace broken JS example with a working React Native example (5257) * fix(data): fix JS example typos * address PR feedback
1 parent d16e25e commit 059680d

File tree

3 files changed

+99
-19
lines changed

3 files changed

+99
-19
lines changed

src/fragments/lib/datastore/js/data-access/observe-update-snippet.mdx

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@ function App() {
99

1010
useEffect(() => {
1111
/**
12-
* This keeps `todo` fresh.
12+
* This keeps `post` fresh.
1313
*/
1414
const sub = DataStore.observeQuery(Post, (c) =>
15-
c.id.eq("e4dd1dc5-e85c-4566-8aaa-54a801396456")
15+
c.id.eq('e4dd1dc5-e85c-4566-8aaa-54a801396456')
1616
).subscribe(({ items }) => {
1717
setPost(items[0]);
1818
});
@@ -23,27 +23,27 @@ function App() {
2323
}, []);
2424

2525
/**
26-
* Create a new Post
27-
*/
28-
async function onCreate() {
29-
const post = await DataStore.save(
30-
new Post({
31-
title: `New title ${Date.now()}`,
32-
rating: Math.floor(Math.random() * (8 - 1) + 1),
33-
status: PostStatus.ACTIVE,
34-
})
35-
);
36-
setPost(post);
37-
}
26+
* Create a new Post
27+
*/
28+
async function onCreate() {
29+
const post = await DataStore.save(
30+
new Post({
31+
title: `New title ${Date.now()}`,
32+
rating: Math.floor(Math.random() * (8 - 1) + 1),
33+
status: PostStatus.ACTIVE
34+
})
35+
);
36+
setPost(post);
37+
}
3838

3939
return (
4040
<>
4141
<h1>{post?.title}</h1>
42-
<input type="button" value="NEW TODO" onClick={onCreate} />
42+
<input type="button" value="NEW POST" onClick={onCreate} />
4343
<input
4444
disabled={!post}
4545
type="text"
46-
value={post?.title ?? ""}
46+
value={post?.title ?? ''}
4747
onChange={({ target: { value } }) => {
4848
/**
4949
* Each keypress updates the post in local React state.
@@ -65,10 +65,10 @@ function App() {
6565
*/
6666
if (!post) return;
6767
await DataStore.save(post);
68-
console.log("Post saved");
68+
console.log('Post saved');
6969
}}
7070
/>
7171
</>
7272
);
7373
}
74-
```
74+
```

src/fragments/lib/datastore/native_common/data-access.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ import js_observe_update from "/src/fragments/lib/datastore/js/data-access/obser
6464

6565
<Fragments fragments={{js: js_observe_update}} />
6666

67-
import reactnative2 from "/src/fragments/lib/datastore/js/data-access/observe-update-snippet.mdx";
67+
import reactnative2 from "/src/fragments/lib/datastore/react-native/data-access/observe-update-snippet.mdx";
6868

6969
<Fragments fragments={{'react-native': reactnative2}} />
7070

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
```js
2+
// Example showing how to observe the model and keep state updated before
3+
// performing a save. This uses the useEffect React hook, but you can
4+
// substitute for a similar mechanism in your application lifecycle with
5+
// other frameworks.
6+
7+
const App = () => {
8+
const [post, setPost] = useState();
9+
10+
useEffect(() => {
11+
/**
12+
* This keeps `post` fresh.
13+
*/
14+
const sub = DataStore.observeQuery(Post, (c) =>
15+
c.id.eq('5a3b284c-8afc-436a-9027-c8c32bfc8ed2')
16+
).subscribe(({ items }) => {
17+
setPost(items[0]);
18+
});
19+
20+
return () => {
21+
sub.unsubscribe();
22+
};
23+
}, []);
24+
25+
/**
26+
* Create a new Post
27+
*/
28+
async function onCreate() {
29+
const _post = await DataStore.save(
30+
new Post({
31+
title: `New title ${Date.now()}`,
32+
rating: Math.floor(Math.random() * (8 - 1) + 1),
33+
status: PostStatus.ACTIVE
34+
})
35+
);
36+
37+
setPost(_post);
38+
}
39+
40+
return (
41+
<SafeAreaView>
42+
<StatusBar />
43+
<ScrollView contentInsetAdjustmentBehavior="automatic">
44+
<View>
45+
<Text>{post?.title}</Text>
46+
<Button onPress={onCreate} title={'New Post'} />
47+
<TextInput
48+
disabled={!post}
49+
value={post?.name ?? ''}
50+
onChangeText={(text) => {
51+
/**
52+
* Each keypress updates the post in local React state.
53+
*/
54+
setPost(
55+
Post.copyOf(post, (draft) => {
56+
draft.title = text;
57+
})
58+
);
59+
}}
60+
/>
61+
<Button
62+
disabled={!post}
63+
title={'Save'}
64+
onPress={async () => {
65+
/**
66+
* This post is already up-to-date because `observeQuery` updated it.
67+
*/
68+
if (!post) {
69+
return;
70+
}
71+
const savedPost = await DataStore.save(post);
72+
console.log('Post saved: ', savedPost);
73+
}}
74+
/>
75+
</View>
76+
</ScrollView>
77+
</SafeAreaView>
78+
);
79+
};
80+
```

0 commit comments

Comments
 (0)