Skip to content

Commit 706eb6d

Browse files
committed
refactor: no need for a callback after optimistic change succeeds
The updating from optimistic => realistic should happen when the webhook confirming it comes in
1 parent 34cb645 commit 706eb6d

File tree

5 files changed

+11
-16
lines changed

5 files changed

+11
-16
lines changed

shared/src/sync_engine/mutations/issues.rs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,6 @@ impl<T: TransportTrait, GithubApi: GithubApiTrait> SyncEngine<T, GithubApi> {
5757
.map(|i| IssueId::from(i.id))
5858
.map_err(|_| ())
5959
},
60-
|id| {
61-
tracing::info!("issue created: {:?}", id);
62-
},
6360
);
6461

6562
Ok(issue_id)

shared/src/sync_engine/optimistic/db/object_store.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -167,13 +167,12 @@ where
167167
&self,
168168
row: S,
169169
create_fut: impl Future<Output = Result<S::Id, ()>> + 'static,
170-
callback: impl FnOnce(S::Id) + 'static,
171170
) {
172171
self.reactivity_trackers
173172
.borrow_mut()
174173
.add_modification(S::NAME, SerializedId::new_from_row(&row));
175174
let id = row.id().clone();
176-
self.optimistic_changes.create(row, create_fut, callback);
175+
self.optimistic_changes.create(row, create_fut);
177176

178177
tracing::info!("did self.optimistic_changes.create for row with id: {:?}", id);
179178
if let Some(commit_listener) = self.commit_listener.as_ref() {

shared/src/sync_engine/optimistic/db/tests.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,7 @@ pub async fn get_all_no_optimisim_create_overlapping() {
263263
.with_txn_2(async |txn| {
264264
txn.object_store::<Issue>()
265265
.unwrap()
266-
.create(Default::default(), async {Ok( Default::default()) }, |_| ());
266+
.create(Default::default(), async {Ok( Default::default()) });
267267
})
268268
.should_overlap(true)
269269
.call()
@@ -286,7 +286,7 @@ pub async fn get_all_no_optimisim_create_non_overlapping() {
286286
.with_txn_2(async |txn| {
287287
txn.object_store::<Repository>()
288288
.unwrap()
289-
.create(Default::default(), async { Ok(Default::default()) }, |_| ());
289+
.create(Default::default(), async { Ok(Default::default()) });
290290
})
291291
.should_overlap(false)
292292
.call()

shared/src/sync_engine/optimistic/optimistic_changes.rs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,6 @@ impl OptimisticChanges {
5858
row: S,
5959
// The future must resolve to the id of whatever is created.
6060
create_fut: impl Future<Output = Result<S::Id, ()>> + 'static,
61-
callback: impl FnOnce(S::Id) + 'static,
62-
6361
) {
6462
let id = row.id().clone();
6563
let creations = self.creations.clone();
@@ -73,7 +71,6 @@ impl OptimisticChanges {
7371
&time,
7472
SerializedId::new_from_id::<S>(&actual_id),
7573
);
76-
callback(actual_id);
7774
}
7875
Err(_) => {
7976
creations.remove_pending::<S>(&id, &time);

web/src/app/repository/issues_tab/new_issue.rs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ pub fn NewIssue(
2626
move || {
2727
let sync_engine = use_sync_engine();
2828
let on_create = move |_| {
29+
let sync_engine = sync_engine.clone();
2930
let RepositoryPageContextInner {
3031
user: owner,
3132
repository,
@@ -35,10 +36,10 @@ pub fn NewIssue(
3536
body: Some(body.get()),
3637
..Default::default()
3738
};
38-
let sync_engine = sync_engine.clone();
39-
let repo_name = repository.name.clone();
39+
40+
let owner_login = owner.login.clone();
4041
spawn_local(async move {
41-
let issue_id = sync_engine
42+
let optimistic_issue_id = sync_engine
4243
.create_issue(
4344
&repository.installation_id,
4445
&owner,
@@ -48,18 +49,19 @@ pub fn NewIssue(
4849
.await
4950
.log_err();
5051

51-
if let Ok(issue_id) = issue_id {
52+
if let Ok(optimistic_issue_id) = optimistic_issue_id {
5253
let txn = sync_engine.db.txn().with_store::<Issue>().build();
5354
let issue_number = txn
5455
.object_store::<Issue>()
5556
.unwrap()
56-
.get(&issue_id)
57+
.get(&optimistic_issue_id)
5758
.await
5859
.unwrap()
5960
.unwrap()
6061
.number;
61-
let owner_login = &repository_page_context.get().user.login;
62+
let owner_login = owner_login.clone();
6263
let issue_number = issue_number.to_string();
64+
let repo_name = repository.name.clone();
6365
set_pathname(zwang_url!("/owner_name={owner_login}/repo_name={repo_name}/issues/issue_number={issue_number}"));
6466
}
6567
});

0 commit comments

Comments
 (0)