chore: Ensure comment data is validated before persisting (#6322)

Fix flash on render of comment create
This commit is contained in:
Tom Moor
2023-12-28 14:46:50 -04:00
committed by GitHub
parent 79764b1e64
commit 428b3c9553
30 changed files with 163 additions and 46 deletions

View File

@@ -7,9 +7,16 @@ import Document from "~/models/Document";
import { PaginationParams } from "~/types";
import { client } from "~/utils/ApiClient";
import RootStore from "./RootStore";
import Store from "./base/Store";
import Store, { RPCAction } from "./base/Store";
export default class CommentsStore extends Store<Comment> {
actions = [
RPCAction.List,
RPCAction.Create,
RPCAction.Update,
RPCAction.Delete,
];
constructor(rootStore: RootStore) {
super(rootStore, Comment);
}

View File

@@ -157,9 +157,11 @@ export default abstract class Store<T extends Model> {
...options,
});
invariant(res?.data, "Data should be available");
this.addPolicies(res.policies);
return this.add(res.data);
return runInAction(`create#${this.modelName}`, () => {
invariant(res?.data, "Data should be available");
this.addPolicies(res.policies);
return this.add(res.data);
});
} finally {
this.isSaving = false;
}
@@ -182,9 +184,11 @@ export default abstract class Store<T extends Model> {
...options,
});
invariant(res?.data, "Data should be available");
this.addPolicies(res.policies);
return this.add(res.data);
return runInAction(`update#${this.modelName}`, () => {
invariant(res?.data, "Data should be available");
this.addPolicies(res.policies);
return this.add(res.data);
});
} finally {
this.isSaving = false;
}
@@ -229,9 +233,12 @@ export default abstract class Store<T extends Model> {
const res = await client.post(`/${this.apiEndpoint}.info`, {
id,
});
invariant(res?.data, "Data should be available");
this.addPolicies(res.policies);
return this.add(res.data);
return runInAction(`info#${this.modelName}`, () => {
invariant(res?.data, "Data should be available");
this.addPolicies(res.policies);
return this.add(res.data);
});
} catch (err) {
if (err instanceof AuthorizationError || err instanceof NotFoundError) {
this.remove(id);