UNPKG

14.1 kBJavaScriptView Raw
1/**
2 * @fileoverview added by tsickle
3 * @suppress {checkTypes} checked by tsc
4 */
5import * as tslib_1 from "tslib";
6import { first } from 'rxjs/operators';
7import { Injectable } from '@angular/core';
8import { _ModelMutationType, } from '../../generated-schemas/botie-schema';
9import { log } from '../config';
10import { Db, } from '../db';
11import { Store, } from '../store';
12import { GQL_CREATE_BOTIE, GQL_DELETE_BOTIE, GQL_QUERY_ALL_BOTIES, GQL_SUBSCRIBE_BOTIE, GQL_UPDATE_BOTIE, } from './botie.graphql';
13export class BotieStore extends Store {
14 /**
15 * @param {?} db
16 */
17 constructor(db) {
18 super(db, {
19 gqlQueryAll: GQL_QUERY_ALL_BOTIES,
20 gqlSubscribe: GQL_SUBSCRIBE_BOTIE,
21 dataKey: 'allBoties',
22 });
23 this.db = db;
24 log.verbose('BotieStore', 'constructor()');
25 }
26 /**
27 * \@todo confirm the return type of Observable
28 * @param {?} newBotie
29 * @return {?}
30 */
31 create(newBotie) {
32 return tslib_1.__awaiter(this, void 0, void 0, function* () {
33 log.verbose('BotieStore', 'create(newBotie{name:%s})', newBotie.name);
34 yield this.state.ready();
35 let /** @type {?} */ ownerId = newBotie.ownerId;
36 if (!ownerId) {
37 const /** @type {?} */ currentUser = yield this.db.currentUser.pipe(first()).toPromise();
38 if (!currentUser) {
39 throw new Error('no currentUser');
40 }
41 ownerId = currentUser.id;
42 }
43 if (!ownerId) {
44 throw new Error('no ownerId');
45 }
46 // FIXME: key! & name! should be checked gracefully
47 const /** @type {?} */ variables = {
48 token: newBotie.token,
49 name: newBotie.name,
50 ownerId,
51 };
52 const /** @type {?} */ createBotie = yield /** @type {?} */ ((this.apollo)).mutate({
53 mutation: GQL_CREATE_BOTIE,
54 variables,
55 update: this.mutationUpdateFnFactory(_ModelMutationType.CREATED, 'createBotie'),
56 }).then(m => m.data && m.data["createBotie"]);
57 if (!createBotie) {
58 throw new Error('BotieStore.create() fail!');
59 }
60 return createBotie;
61 });
62 }
63 /**
64 * delete
65 * @param {?} id
66 * @return {?}
67 */
68 delete(id) {
69 return tslib_1.__awaiter(this, void 0, void 0, function* () {
70 log.verbose('BotieStore', 'delete(id=%s)', id);
71 yield this.state.ready();
72 const /** @type {?} */ variables = {
73 id,
74 };
75 const /** @type {?} */ deleteBotie = yield /** @type {?} */ ((this.apollo)).mutate({
76 mutation: GQL_DELETE_BOTIE,
77 variables,
78 update: this.mutationUpdateFnFactory(_ModelMutationType.DELETED, 'deleteBotie'),
79 }).then(m => m.data && m.data['deleteBotie']);
80 if (!deleteBotie) {
81 throw new Error(`BotieStore.delete(id=${id}) failed!`);
82 }
83 return deleteBotie;
84 });
85 }
86 /**
87 * update will only change the specified fields in documents it affects;
88 * unspecified fields will be left untouched.
89 * @param {?} id
90 * @param {?} props
91 * @return {?}
92 */
93 update(id, props) {
94 return tslib_1.__awaiter(this, void 0, void 0, function* () {
95 log.verbose('BotieStore', 'update(id=%s)', id);
96 yield this.state.ready();
97 const /** @type {?} */ botie = yield this.read(id);
98 const /** @type {?} */ variables = {
99 id,
100 name: props.name || botie.name,
101 note: props.note || botie.note,
102 };
103 const /** @type {?} */ updateBotie = yield /** @type {?} */ ((this.apollo)).mutate({
104 mutation: GQL_UPDATE_BOTIE,
105 variables,
106 update: this.mutationUpdateFnFactory(_ModelMutationType.UPDATED, 'updateBotie'),
107 }).then(m => m.data && m.data['updateBotie']);
108 if (!updateBotie) {
109 throw new Error('BotieStore.update() failed!');
110 }
111 return updateBotie;
112 });
113 }
114}
115BotieStore.decorators = [
116 { type: Injectable },
117];
118/** @nocollapse */
119BotieStore.ctorParameters = () => [
120 { type: Db }
121];
122function BotieStore_tsickle_Closure_declarations() {
123 /** @type {?} */
124 BotieStore.prototype.db;
125}
126
127//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm90aWUtc3RvcmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AY2hhdGllL2RiLyIsInNvdXJjZXMiOlsic3JjL2JvdGllL2JvdGllLXN0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFXLGdCQUFnQixDQUFBO0FBRTNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFFMUMsT0FBTyxFQUNMLGtCQUFrQixHQVVuQixNQUFzQyxzQ0FBc0MsQ0FBQTtBQUc3RSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQVcsV0FBVyxDQUFBO0FBQ3BDLE9BQU8sRUFDTCxFQUFFLEdBQ0gsTUFBd0IsT0FBTyxDQUFBO0FBQ2hDLE9BQU8sRUFDTCxLQUFLLEdBQ04sTUFBd0IsVUFBVSxDQUFBO0FBRW5DLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ2hCLG9CQUFvQixFQUNwQixtQkFBbUIsRUFDbkIsZ0JBQWdCLEdBQ2pCLE1BQThCLGlCQUFpQixDQUFBO0FBR2hELE1BQU0saUJBQWtCLFNBQVEsS0FJL0I7Ozs7SUFDQyxZQUNZLEVBQU07UUFFaEIsS0FBSyxDQUFDLEVBQUUsRUFBRTtZQUNSLFdBQVcsRUFBRyxvQkFBb0I7WUFDbEMsWUFBWSxFQUFFLG1CQUFtQjtZQUNqQyxPQUFPLEVBQU8sV0FBVztTQUMxQixDQUFDLENBQUE7UUFOUSxPQUFFLEdBQUYsRUFBRSxDQUFJO1FBT2hCLEdBQUcsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLGVBQWUsQ0FBQyxDQUFBO0tBQzNDOzs7Ozs7SUFNWSxNQUFNLENBQUMsUUFJbkI7O1lBQ0MsR0FBRyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsMkJBQTJCLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFBO1lBRXJFLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQTtZQUV4QixxQkFBSSxPQUFPLEdBQUcsUUFBUSxD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QUk7YUFDakMsQ0FBQTtZQUVELHVCQUFNLFdBQVcsR0FBdUMseUJBQU0sSUFBSSxDQUFDLE1BQU0sR0FBRSxNQUFNLENBQUM7Z0JBQ2hGLFFBQVEsRUFBRSxnQkFBZ0I7Z0JBQzFCLFNBQVM7Z0JBQ1QsTUFBTSxFQUFFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDO2FBQ2hGLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUE7WUFFN0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO2dCQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUE7YUFDL0M7WUFDRCxNQUFNLENBQUMsV0FBVyxDQUFBOzs7OztZQWhIckIsVUFBVTs7OztZQWRULEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmaXJzdCB9ICAgICAgZnJvbSAncnhqcy9vcGVyYXRvcnMnXG5cbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuXG5pbXBvcnQge1xuICBfTW9kZWxNdXRhdGlvblR5cGUsXG4gIEFsbEJvdGllc1F1ZXJ5LFxuICBEZWxldGVCb3RpZU11dGF0aW9uLFxuICBEZWxldGVCb3RpZU11dGF0aW9uVmFyaWFibGVzLFxuICBDcmVhdGVCb3RpZU11dGF0aW9uLFxuICBDcmVhdGVCb3RpZU11dGF0aW9uVmFyaWFibGVzLFxuICBCb3RpZUZyYWdtZW50LFxuICBTdWJzY3JpYmVCb3RpZVN1YnNjcmlwdGlvbixcbiAgVXBkYXRlQm90aWVNdXRhdGlvbixcbiAgVXBkYXRlQm90aWVNdXRhdGlvblZhcmlhYmxlcyxcbn0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tICcuLi8uLi9nZW5lcmF0ZWQtc2NoZW1hcy9ib3RpZS1zY2hlbWEnXG5leHBvcnQgdHlwZSBCb3RpZSA9IFBhcnRpYWw8Qm90aWVGcmFnbWVudD5cblxuaW1wb3J0IHsgbG9nIH0gICAgICBmcm9tICcuLi9jb25maWcnXG5pbXBvcnQge1xuICBEYixcbn0gICAgICAgICAgICAgICAgICAgZnJvbSAnLi4vZGInXG5pbXBvcnQge1xuICBTdG9yZSxcbn0gICAgICAgICAgICAgICAgICAgZnJvbSAnLi4vc3RvcmUnXG5cbmltcG9ydCB7XG4gIEdRTF9DUkVBVEVfQk9USUUsXG4gIEdRTF9ERUxFVEVfQk9USUUsXG4gIEdRTF9RVUVSWV9BTExfQk9USUVTLFxuICBHUUxfU1VCU0NSSUJFX0JPVElFLFxuICBHUUxfVVBEQVRFX0JPVElFLFxufSAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tICcuL2JvdGllLmdyYXBocWwnXG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBCb3RpZVN0b3JlIGV4dGVuZHMgU3RvcmU8XG4gICAgQm90aWUsXG4gICAgQWxsQm90aWVzUXVlcnksXG4gICAgU3Vic2NyaWJlQm90aWVTdWJzY3JpcHRpb25cbj4ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgZGI6IERiLFxuICApIHtcbiAgICBzdXBlcihkYiwge1xuICAgICAgZ3FsUXVlcnlBbGw6ICBHUUxfUVVFUllfQUxMX0JPVElFUyxcbiAgICAgIGdxbFN1YnNjcmliZTogR1FMX1NVQlNDUklCRV9CT1RJRSxcbiAgICAgIGRhdGFLZXk6ICAgICAgJ2FsbEJvdGllcycsXG4gICAgfSlcbiAgICBsb2cudmVyYm9zZSgnQm90aWVTdG9yZScsICdjb25zdHJ1Y3RvcigpJylcbiAgfVxuXG4gIC8qKlxuICAgKiBAdG9kbyBjb25maXJtIHRoZSByZXR1cm4gdHlwZSBvZiBPYnNlcnZhYmxlXG4gICAqIEBwYXJhbSBuZXdCb3RpZVxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNyZWF0ZShuZXdCb3RpZToge1xuICAgICAgbmFtZTogICAgIHN0cmluZyxcbiAgICAgIHRva2VuOiAgICBzdHJpbmcsXG4gICAgICBvd25lcklkPzogc3RyaW5nLFxuICB9KTogUHJvbWlzZTxCb3RpZT4ge1xuICAgIGxvZy52ZXJib3NlKCdCb3RpZVN0b3JlJywgJ2NyZWF0ZShuZXdCb3RpZXtuYW1lOiVzfSknLCBuZXdCb3RpZS5uYW1lKVxuXG4gICAgYXdhaXQgdGhpcy5zdGF0ZS5yZWFkeSgpXG5cbiAgICBsZXQgb3duZXJJZCA9IG5ld0JvdGllLm93bmVySWRcbiAgICBpZiAoIW93bmVySWQpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRVc2VyID0gYXdhaXQgdGhpcy5kYi5jdXJyZW50VXNlci5waXBlKGZpcnN0KCkpLnRvUHJvbWlzZSgpXG4gICAgICBpZiAoIWN1cnJlbnRVc2VyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignbm8gY3VycmVudFVzZXInKVxuICAgICAgfVxuICAgICAgb3duZXJJZCA9IGN1cnJlbnRVc2VyLmlkXG4gICAgfVxuICAgIGlmICghb3duZXJJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdubyBvd25lcklkJylcbiAgICB9XG5cbiAgICAvLyBGSVhNRToga2V5ISAmIG5hbWUhIHNob3VsZCBiZSBjaGVja2VkIGdyYWNlZnVsbHlcbiAgICBjb25zdCB2YXJpYWJsZXM6IENyZWF0ZUJvdGllTXV0YXRpb25WYXJpYWJsZXMgPSB7XG4gICAgICB0b2tlbjogICAgbmV3Qm90aWUudG9rZW4sXG4gICAgICBuYW1lOiAgICAgbmV3Qm90aWUubmFtZSxcbiAgICAgIG93bmVySWQsXG4gICAgfVxuXG4gICAgY29uc3QgY3JlYXRlQm90aWU6IENyZWF0ZUJvdGllTXV0YXRpb25bJ2NyZWF0ZUJvdGllJ10gPSBhd2FpdCB0aGlzLmFwb2xsbyEubXV0YXRlKHtcbiAgICAgIG11dGF0aW9uOiBHUUxfQ1JFQVRFX0JPVElFLFxuICAgICAgdmFyaWFibGVzLFxuICAgICAgdXBkYXRlOiB0aGlzLm11dGF0aW9uVXBkYXRlRm5GYWN0b3J5KF9Nb2RlbE11dGF0aW9uVHlwZS5DUkVBVEVELCAnY3JlYXRlQm90aWUnKSxcbiAgICB9KS50aGVuKG0gPT4gbS5kYXRhICYmIG0uZGF0YS5jcmVhdGVCb3RpZSlcblxuICAgIGlmICghY3JlYXRlQm90aWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQm90aWVTdG9yZS5jcmVhdGUoKSBmYWlsIScpXG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVCb3RpZVxuICB9XG5cbiAgLyoqXG4gICAqIGRlbGV0ZVxuICAgKiBAcGFyYW0gaWRcbiAgICovXG4gIHB1YmxpYyBhc3luYyBkZWxldGUoaWQ6IHN0cmluZyk6IFByb21pc2U8Qm90aWU+IHtcbiAgICBsb2cudmVyYm9zZSgnQm90aWVTdG9yZScsICdkZWxldGUoaWQ9JXMpJywgaWQpXG5cbiAgICBhd2FpdCB0aGlzLnN0YXRlLnJlYWR5KClcblxuICAgIGNvbnN0IHZhcmlhYmxlczogRGVsZXRlQm90aWVNdXRhdGlvblZhcmlhYmxlcyA9IHtcbiAgICAgIGlkLFxuICAgIH1cbiAgICBjb25zdCBkZWxldGVCb3RpZTogRGVsZXRlQm90aWVNdXRhdGlvblsnZGVsZXRlQm90aWUnXSA9IGF3YWl0IHRoaXMuYXBvbGxvIS5tdXRhdGUoe1xuICAgICAgbXV0YXRpb246IEdRTF9ERUxFVEVfQk9USUUsXG4gICAgICB2YXJpYWJsZXMsXG4gICAgICB1cGRhdGU6IHRoaXMubXV0YXRpb25VcGRhdGVGbkZhY3RvcnkoX01vZGVsTXV0YXRpb25UeXBlLkRFTEVURUQsICdkZWxldGVCb3RpZScpLFxuICAgIH0pLnRoZW4obSA9PiBtLmRhdGEgJiYgbS5kYXRhWydkZWxldGVCb3RpZSddKVxuXG4gICAgaWYgKCFkZWxldGVCb3RpZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBCb3RpZVN0b3JlLmRlbGV0ZShpZD0ke2lkfSkgZmFpbGVkIWApXG4gICAgfVxuICAgIHJldHVybiBkZWxldGVCb3RpZVxuICB9XG5cbiAgLyoqXG4gICAqIHVwZGF0ZSB3aWxsIG9ubHkgY2hhbmdlIHRoZSBzcGVjaWZpZWQgZmllbGRzIGluIGRvY3VtZW50cyBpdCBhZmZlY3RzO1xuICAgKiB1bnNwZWNpZmllZCBmaWVsZHMgd2lsbCBiZSBsZWZ0IHVudG91Y2hlZC5cbiAgICogQHBhcmFtIHVwZGF0ZUJvdGllXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdXBkYXRlKGlkOiBzdHJpbmcsIHByb3BzOiBQYXJ0aWFsPEJvdGllPik6IFByb21pc2U8Qm90aWU+IHtcbiAgICBsb2cudmVyYm9zZSgnQm90aWVTdG9yZScsICd1cGRhdGUoaWQ9JXMpJywgaWQpXG5cbiAgICBhd2FpdCB0aGlzLnN0YXRlLnJlYWR5KClcblxuICAgIGNvbnN0IGJvdGllID0gYXdhaXQgdGhpcy5yZWFkKGlkKVxuXG4gICAgY29uc3QgdmFyaWFibGVzOiBVcGRhdGVCb3RpZU11dGF0aW9uVmFyaWFibGVzID0ge1xuICAgICAgaWQsXG4gICAgICBuYW1lOiAgIHByb3BzLm5hbWUgfHwgYm90aWUubmFtZSxcbiAgICAgIG5vdGU6ICAgcHJvcHMubm90ZSB8fCBib3RpZS5ub3RlLFxuICAgIH1cblxuICAgIGNvbnN0IHVwZGF0ZUJvdGllOiBVcGRhdGVCb3RpZU11dGF0aW9uWyd1cGRhdGVCb3RpZSddID0gYXdhaXQgdGhpcy5hcG9sbG8hLm11dGF0ZSh7XG4gICAgICBtdXRhdGlvbjogR1FMX1VQREFURV9CT1RJRSxcbiAgICAgIHZhcmlhYmxlcyxcbiAgICAgIHVwZGF0ZTogdGhpcy5tdXRhdGlvblVwZGF0ZUZuRmFjdG9yeShfTW9kZWxNdXRhdGlvblR5cGUuVVBEQVRFRCwgJ3VwZGF0ZUJvdGllJyksXG4gICAgfSkudGhlbihtID0+IG0uZGF0YSAmJiBtLmRhdGFbJ3VwZGF0ZUJvdGllJ10pXG5cbiAgICBpZiAoIXVwZGF0ZUJvdGllKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0JvdGllU3RvcmUudXBkYXRlKCkgZmFpbGVkIScpXG4gICAgfVxuICAgIHJldHVybiB1cGRhdGVCb3RpZVxuICB9XG5cbn1cbiJdfQ==
\No newline at end of file