refactor: Policies Architecture (#1016)

* add policy serialize method

* Add policies to collection responses

* wip

* test: remove .only

* refactor: Return policies with team and document requests

* store policies on the client

* refactor: drive admin UI from policies
This commit is contained in:
Tom Moor
2019-08-21 21:41:37 -07:00
committed by GitHub
parent cf18b952a4
commit e2b28dfeb7
20 changed files with 194 additions and 19 deletions

View File

@ -37,6 +37,12 @@ export default class BaseStore<T: BaseModel> {
this.data.clear();
}
addPolicies = policies => {
if (policies) {
policies.forEach(policy => this.rootStore.policies.add(policy));
}
};
@action
add = (item: Object): T => {
const Model = this.model;
@ -80,6 +86,8 @@ export default class BaseStore<T: BaseModel> {
const res = await client.post(`/${this.modelName}s.create`, params);
invariant(res && res.data, 'Data should be available');
this.addPolicies(res.policies);
return this.add(res.data);
} finally {
this.isSaving = false;
@ -97,6 +105,8 @@ export default class BaseStore<T: BaseModel> {
const res = await client.post(`/${this.modelName}s.update`, params);
invariant(res && res.data, 'Data should be available');
this.addPolicies(res.policies);
return this.add(res.data);
} finally {
this.isSaving = false;
@ -132,6 +142,8 @@ export default class BaseStore<T: BaseModel> {
try {
const res = await client.post(`/${this.modelName}s.info`, { id });
invariant(res && res.data, 'Data should be available');
this.addPolicies(res.policies);
return this.add(res.data);
} finally {
this.isFetching = false;
@ -149,7 +161,9 @@ export default class BaseStore<T: BaseModel> {
const res = await client.post(`/${this.modelName}s.list`, params);
invariant(res && res.data, 'Data not available');
runInAction(`list#${this.modelName}`, () => {
this.addPolicies(res.policies);
res.data.forEach(this.add);
this.isLoaded = true;
});