aboutsummaryrefslogtreecommitdiffstats
path: root/src/containers/auth/SetupAssistantScreen.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/containers/auth/SetupAssistantScreen.js')
-rw-r--r--src/containers/auth/SetupAssistantScreen.js133
1 files changed, 133 insertions, 0 deletions
diff --git a/src/containers/auth/SetupAssistantScreen.js b/src/containers/auth/SetupAssistantScreen.js
new file mode 100644
index 000000000..960ed7e33
--- /dev/null
+++ b/src/containers/auth/SetupAssistantScreen.js
@@ -0,0 +1,133 @@
1/* eslint-disable no-await-in-loop */
2import React, { Component } from 'react';
3import PropTypes from 'prop-types';
4import { inject, observer } from 'mobx-react';
5
6import { sleep } from '../../helpers/async-helpers';
7import SetupAssistant from '../../components/auth/SetupAssistant';
8import ServicesStore from '../../stores/ServicesStore';
9import RecipesStore from '../../stores/RecipesStore';
10import { TODOS_RECIPE_ID } from '../../features/todos';
11import UserStore from '../../stores/UserStore';
12
13export default @inject('stores', 'actions') @observer class SetupAssistantScreen extends Component {
14 services = {
15 whatsapp: {
16 name: 'WhatsApp',
17 hasTeamId: false,
18 },
19 messenger: {
20 name: 'Messenger',
21 hasTeamId: false,
22 },
23 gmail: {
24 name: 'Gmail',
25 hasTeamId: false,
26 },
27 skype: {
28 name: 'Skype',
29 hasTeamId: false,
30 },
31 telegram: {
32 name: 'Telegram',
33 hasTeamId: false,
34 },
35 instagram: {
36 name: 'Instagram',
37 hasTeamId: false,
38 },
39 slack: {
40 name: 'Slack',
41 hasTeamId: true,
42 },
43 hangouts: {
44 name: 'Hangouts',
45 hasTeamId: false,
46 },
47 linkedin: {
48 name: 'LinkedIn',
49 hasTeamId: false,
50 },
51 }
52
53 state = {
54 isSettingUpServices: false,
55 }
56
57 async setupServices(serviceConfig) {
58 const { stores: { services, router, user } } = this.props;
59 console.log(serviceConfig);
60
61 this.setState({
62 isSettingUpServices: true,
63 });
64
65 // The store requests are not build for paralell requests so we need to finish one request after another
66 for (const config of serviceConfig) {
67 const serviceData = {
68 name: this.services[config.id].name,
69 };
70
71 if (config.team) {
72 serviceData.team = config.team;
73 }
74
75 await services._createService({
76 recipeId: config.id,
77 serviceData,
78 redirect: false,
79 skipCleanup: true,
80 });
81
82 await sleep(100);
83 }
84
85 // Add Franz ToDos
86 await services._createService({
87 recipeId: TODOS_RECIPE_ID,
88 serviceData: {
89 name: 'Franz ToDos',
90 },
91 redirect: false,
92 skipCleanup: true,
93 });
94
95 this.setState({
96 isSettingUpServices: false,
97 });
98
99 await sleep(100);
100
101 router.push(user.pricingRoute);
102 }
103
104 render() {
105 return (
106 <SetupAssistant
107 onSubmit={config => this.setupServices(config)}
108 services={this.services}
109 embed={false}
110 isSettingUpServices={this.state.isSettingUpServices}
111 />
112 );
113 }
114}
115
116SetupAssistantScreen.wrappedComponent.propTypes = {
117 stores: PropTypes.shape({
118 services: PropTypes.instanceOf(ServicesStore),
119 recipes: PropTypes.instanceOf(RecipesStore),
120 user: PropTypes.instanceOf(UserStore),
121 }).isRequired,
122 actions: PropTypes.shape({
123 user: PropTypes.shape({
124 invite: PropTypes.func.isRequired,
125 }).isRequired,
126 service: PropTypes.shape({
127 createService: PropTypes.func.isRequired,
128 }).isRequired,
129 recipe: PropTypes.shape({
130 install: PropTypes.func.isRequired,
131 }).isRequired,
132 }).isRequired,
133};