aboutsummaryrefslogtreecommitdiffstats
path: root/src/stores/PaymentStore.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/stores/PaymentStore.js')
-rw-r--r--src/stores/PaymentStore.js38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/stores/PaymentStore.js b/src/stores/PaymentStore.js
index 8579812ad..69e6eb9c3 100644
--- a/src/stores/PaymentStore.js
+++ b/src/stores/PaymentStore.js
@@ -1,9 +1,12 @@
1import { action, observable, computed } from 'mobx'; 1import { action, observable, computed } from 'mobx';
2import { remote } from 'electron';
2 3
3import Store from './lib/Store'; 4import Store from './lib/Store';
4import CachedRequest from './lib/CachedRequest'; 5import CachedRequest from './lib/CachedRequest';
5import Request from './lib/Request'; 6import Request from './lib/Request';
6 7
8const { BrowserWindow } = remote;
9
7export default class PaymentStore extends Store { 10export default class PaymentStore extends Store {
8 @observable plansRequest = new CachedRequest(this.api.payment, 'plans'); 11 @observable plansRequest = new CachedRequest(this.api.payment, 'plans');
9 12
@@ -13,6 +16,7 @@ export default class PaymentStore extends Store {
13 super(...args); 16 super(...args);
14 17
15 this.actions.payment.createHostedPage.listen(this._createHostedPage.bind(this)); 18 this.actions.payment.createHostedPage.listen(this._createHostedPage.bind(this));
19 this.actions.payment.upgradeAccount.listen(this._upgradeAccount.bind(this));
16 } 20 }
17 21
18 @computed get plan() { 22 @computed get plan() {
@@ -27,4 +31,38 @@ export default class PaymentStore extends Store {
27 31
28 return request; 32 return request;
29 } 33 }
34
35 @action _upgradeAccount({ planId, onCloseWindow = () => null }) {
36 let hostedPageURL = this.stores.features.features.subscribeURL;
37
38 const parsedUrl = new URL(hostedPageURL);
39 const params = new URLSearchParams(parsedUrl.search.slice(1));
40
41 params.set('plan', planId);
42
43 hostedPageURL = this.stores.user.getAuthURL(`${parsedUrl.origin}${parsedUrl.pathname}?${params.toString()}`);
44
45 const win = new BrowserWindow({
46 parent: remote.getCurrentWindow(),
47 modal: true,
48 title: '🔒 Upgrade Your Franz Account',
49 width: 800,
50 height: window.innerHeight - 100,
51 maxWidth: 800,
52 minWidth: 600,
53 autoHideMenuBar: true,
54 webPreferences: {
55 nodeIntegration: true,
56 webviewTag: true,
57 },
58 });
59 win.loadURL(`file://${__dirname}/../index.html#/payment/${encodeURIComponent(hostedPageURL)}`);
60
61 win.on('closed', () => {
62 this.stores.user.getUserInfoRequest.invalidate({ immediately: true });
63 this.stores.features.featuresRequest.invalidate({ immediately: true });
64
65 onCloseWindow();
66 });
67 }
30} 68}