Post to Slack (#603)

* Migrations

* WIP: Integration model, slack perms / hooks

* So so rough it pains me. Building this new model is revealing just how much needs to be refactored

* Working connect and post

* Cleanup UI, upating documents

* Show when slack command is connected

* stash

* 💚

* Add documents.update trigger

* Authorization, tidying

* Fixed integration policy

* pick integration presenter keys
This commit is contained in:
Tom Moor
2018-04-03 20:36:25 -07:00
committed by GitHub
parent 17900c6a11
commit 44cb509ebf
38 changed files with 665 additions and 105 deletions

View File

@@ -109,9 +109,7 @@ class Collection extends BaseModel {
delete = async () => {
try {
await client.post('/collections.delete', { id: this.id });
this.emit('collections.delete', {
id: this.id,
});
this.emit('collections.delete', { id: this.id });
return true;
} catch (e) {
this.errors.add('Collection failed to delete');

View File

@@ -168,7 +168,7 @@ class Document extends BaseModel {
};
@action
save = async (publish: boolean = false) => {
save = async (publish: boolean = false, done: boolean = false) => {
if (this.isSaving) return this;
this.isSaving = true;
@@ -181,6 +181,7 @@ class Document extends BaseModel {
text: this.text,
lastRevision: this.revision,
publish,
done,
});
} else {
const data = {
@@ -189,6 +190,7 @@ class Document extends BaseModel {
title: this.title,
text: this.text,
publish,
done,
};
if (this.parentDocument) {
data.parentDocument = this.parentDocument;

57
app/models/Integration.js Normal file
View File

@@ -0,0 +1,57 @@
// @flow
import { extendObservable, action } from 'mobx';
import BaseModel from 'models/BaseModel';
import { client } from 'utils/ApiClient';
import stores from 'stores';
import ErrorsStore from 'stores/ErrorsStore';
type Settings = {
url: string,
channel: string,
channelId: string,
};
type Events = 'documents.create' | 'collections.create';
class Integration extends BaseModel {
errors: ErrorsStore;
id: string;
serviceId: string;
collectionId: string;
events: Events;
settings: Settings;
@action
update = async (data: Object) => {
try {
await client.post('/integrations.update', { id: this.id, ...data });
extendObservable(this, data);
} catch (e) {
this.errors.add('Integration failed to update');
}
return false;
};
@action
delete = async () => {
try {
await client.post('/integrations.delete', { id: this.id });
this.emit('integrations.delete', { id: this.id });
return true;
} catch (e) {
this.errors.add('Integration failed to delete');
}
return false;
};
constructor(data?: Object = {}) {
super();
extendObservable(this, data);
this.errors = stores.errors;
}
}
export default Integration;