diff --git a/webpack/config/index.js b/webpack/config/index.js index fb2161627e..8a55e0fb81 100644 --- a/webpack/config/index.js +++ b/webpack/config/index.js @@ -38,6 +38,18 @@ module.exports = { target: 'http://localhost:3000', changeOrigin: true, }, + '/stripe': { + target: 'http://localhost:3000', + changeOrigin: true, + }, + '/amazon': { + target: 'http://localhost:3000', + changeOrigin: true, + }, + '/paypal': { + target: 'http://localhost:3000', + changeOrigin: true, + }, }, // CSS Sourcemaps off by default because relative paths are "buggy" // with this option, according to the CSS-Loader README diff --git a/website/client/components/appMenu.vue b/website/client/components/appMenu.vue index 10d33fcfcf..3e1a0d72f0 100644 --- a/website/client/components/appMenu.vue +++ b/website/client/components/appMenu.vue @@ -51,7 +51,7 @@ div router-link.dropdown-item(:to="{name: 'stats'}") {{ $t('stats') }} router-link.dropdown-item(:to="{name: 'achievements'}") {{ $t('achievements') }} router-link.dropdown-item(:to="{name: 'profile'}") {{ $t('profile') }} - router-link.dropdown-item(:to="{name: 'settings'}") {{ $t('settings') }} + router-link.dropdown-item(:to="{name: 'site'}") {{ $t('settings') }} a.nav-link.dropdown-item(to="/", @click.prevent='logout()') {{ $t('logout') }} diff --git a/website/client/components/payments/amazonModal.vue b/website/client/components/payments/amazonModal.vue new file mode 100644 index 0000000000..857f7a365f --- /dev/null +++ b/website/client/components/payments/amazonModal.vue @@ -0,0 +1,201 @@ + + + diff --git a/website/client/components/settings/api.vue b/website/client/components/settings/api.vue new file mode 100644 index 0000000000..ec43444703 --- /dev/null +++ b/website/client/components/settings/api.vue @@ -0,0 +1,118 @@ + + + + + diff --git a/website/client/components/settings/dataExport.vue b/website/client/components/settings/dataExport.vue new file mode 100644 index 0000000000..07f434fd86 --- /dev/null +++ b/website/client/components/settings/dataExport.vue @@ -0,0 +1,13 @@ + diff --git a/website/client/components/settings/deleteModal.vue b/website/client/components/settings/deleteModal.vue new file mode 100644 index 0000000000..a711e90313 --- /dev/null +++ b/website/client/components/settings/deleteModal.vue @@ -0,0 +1,52 @@ + + + diff --git a/website/client/components/settings/index.vue b/website/client/components/settings/index.vue new file mode 100644 index 0000000000..68366e1107 --- /dev/null +++ b/website/client/components/settings/index.vue @@ -0,0 +1,23 @@ + + + diff --git a/website/client/components/settings/notifications.vue b/website/client/components/settings/notifications.vue new file mode 100644 index 0000000000..abaf3ac1c8 --- /dev/null +++ b/website/client/components/settings/notifications.vue @@ -0,0 +1,74 @@ + + + diff --git a/website/client/components/settings/promoCode.vue b/website/client/components/settings/promoCode.vue new file mode 100644 index 0000000000..ef6ace1f96 --- /dev/null +++ b/website/client/components/settings/promoCode.vue @@ -0,0 +1,61 @@ + + + diff --git a/website/client/components/settings/resetModal.vue b/website/client/components/settings/resetModal.vue new file mode 100644 index 0000000000..a07eb902b9 --- /dev/null +++ b/website/client/components/settings/resetModal.vue @@ -0,0 +1,36 @@ + + + diff --git a/website/client/components/settings/restoreModal.vue b/website/client/components/settings/restoreModal.vue new file mode 100644 index 0000000000..afe0fb5365 --- /dev/null +++ b/website/client/components/settings/restoreModal.vue @@ -0,0 +1,109 @@ + + + diff --git a/website/client/components/settings/site.vue b/website/client/components/settings/site.vue new file mode 100644 index 0000000000..ff8fca4a53 --- /dev/null +++ b/website/client/components/settings/site.vue @@ -0,0 +1,371 @@ + + + + + diff --git a/website/client/components/settings/subscription.vue b/website/client/components/settings/subscription.vue new file mode 100644 index 0000000000..aee1c45913 --- /dev/null +++ b/website/client/components/settings/subscription.vue @@ -0,0 +1,427 @@ + + + + + diff --git a/website/client/index.html b/website/client/index.html index 204f884234..0a4a7ea6a6 100644 --- a/website/client/index.html +++ b/website/client/index.html @@ -9,5 +9,11 @@
+ + + + diff --git a/website/client/router.js b/website/client/router.js index bfa4837108..4888d56d19 100644 --- a/website/client/router.js +++ b/website/client/router.js @@ -19,6 +19,15 @@ const StatsPage = () => import(/* webpackChunkName: "user" */'./components/userM const AchievementsPage = () => import(/* webpackChunkName: "user" */'./components/userMenu/achievements'); const ProfilePage = () => import(/* webpackChunkName: "user" */'./components/userMenu/profile'); +// Settings +const Settings = () => import(/* webpackChunkName: "settings" */'./components/settings/index'); +const API = () => import(/* webpackChunkName: "settings" */'./components/settings/api'); +const DataExport = () => import(/* webpackChunkName: "settings" */'./components/settings/dataExport'); +const Notifications = () => import(/* webpackChunkName: "settings" */'./components/settings/notifications'); +const PromoCode = () => import(/* webpackChunkName: "settings" */'./components/settings/promoCode'); +const Site = () => import(/* webpackChunkName: "settings" */'./components/settings/site'); +const Subscription = () => import(/* webpackChunkName: "settings" */'./components/settings/subscription'); + // Except for tasks that are always loaded all the other main level // All the main level // components are loaded in separate webpack chunks. @@ -123,7 +132,43 @@ const router = new VueRouter({ { name: 'stats', path: 'stats', component: StatsPage }, { name: 'achievements', path: 'achievements', component: AchievementsPage }, { name: 'profile', path: 'profile', component: ProfilePage }, - { name: 'settings', path: 'settings', component: Page }, + { + name: 'settings', + path: 'settings', + component: Settings, + children: [ + { + name: 'site', + path: 'site', + component: Site, + }, + { + name: 'api', + path: 'api', + component: API, + }, + { + name: 'dataExport', + path: 'data-export', + component: DataExport, + }, + { + name: 'promoCode', + path: 'promo-code', + component: PromoCode, + }, + { + name: 'subscription', + path: 'subscription', + component: Subscription, + }, + { + name: 'notifications', + path: 'notifications', + component: Notifications, + }, + ], + }, ], }, ], diff --git a/website/client/store/actions/user.js b/website/client/store/actions/user.js index 6fc8c8d325..62bbadccb7 100644 --- a/website/client/store/actions/user.js +++ b/website/client/store/actions/user.js @@ -30,3 +30,18 @@ export function set (store, changes) { export function sleep () { // @TODO: Implemented } + +export async function addWebhook (store, payload) { + let response = await axios.post('/api/v3/user/webhook', payload.webhookInfo); + return response.data.data; +} + +export async function updateWebhook (store, payload) { + let response = await axios.put(`/api/v3/user/webhook/${payload.webhook.id}`, payload.webhook); + return response.data.data; +} + +export async function deleteWebhook (store, payload) { + let response = await axios.delete(`/api/v3/user/webhook/${payload.webhook.id}`); + return response.data.data; +}