summaryrefslogtreecommitdiffstats
path: root/apps/settings/src
diff options
context:
space:
mode:
authorChristoph Wurst <christoph@winzerhof-wurst.at>2019-11-26 18:15:10 +0100
committerRoeland Jago Douma <roeland@famdouma.nl>2019-12-04 14:14:38 +0100
commita8f2e6914d15e778889c65a4bff6441ead04ee13 (patch)
treeaf6a9c80381a81e7cd941fc2ec8f093566ad3010 /apps/settings/src
parent293585ec12b5fcfd028d5e9835cfc144b98dcaf3 (diff)
downloadnextcloud-server-a8f2e6914d15e778889c65a4bff6441ead04ee13.tar.gz
nextcloud-server-a8f2e6914d15e778889c65a4bff6441ead04ee13.zip
Add checkbox to install recommended apps during setup
Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at> Signed-off-by: npmbuildbot[bot] <npmbuildbot[bot]@users.noreply.github.com>
Diffstat (limited to 'apps/settings/src')
-rw-r--r--apps/settings/src/components/AppList.vue52
-rw-r--r--apps/settings/src/recommendedApps.js26
-rw-r--r--apps/settings/src/views/Apps.vue15
3 files changed, 75 insertions, 18 deletions
diff --git a/apps/settings/src/components/AppList.vue b/apps/settings/src/components/AppList.vue
index a406f6b8ff6..f03d7c5a694 100644
--- a/apps/settings/src/components/AppList.vue
+++ b/apps/settings/src/components/AppList.vue
@@ -96,9 +96,11 @@
</template>
<script>
+import pLimit from 'p-limit'
+
import AppItem from './AppList/AppItem'
import PrefixMixin from './PrefixMixin'
-import pLimit from 'p-limit'
+import recommended from '../recommendedApps'
export default {
name: 'AppList',
@@ -129,26 +131,26 @@ export default {
return OC.Util.naturalSortCompare(sortStringA, sortStringB)
})
- if (this.category === 'installed') {
+ switch (this.category) {
+ case 'installed':
return apps.filter(app => app.installed)
- }
- if (this.category === 'enabled') {
+ case 'recommended':
+ return apps.filter(app => recommended.includes(app.id))
+ case 'enabled':
return apps.filter(app => app.active && app.installed)
- }
- if (this.category === 'disabled') {
+ case 'disabled':
return apps.filter(app => !app.active && app.installed)
- }
- if (this.category === 'app-bundles') {
+ case 'app-bundles':
return apps.filter(app => app.bundles)
- }
- if (this.category === 'updates') {
+ case 'updates':
return apps.filter(app => app.update)
+ default:
+ // filter app store categories
+ return apps.filter(app => {
+ return app.appstore && app.category !== undefined
+ && (app.category === this.category || app.category.indexOf(this.category) > -1)
+ })
}
- // filter app store categories
- return apps.filter(app => {
- return app.appstore && app.category !== undefined
- && (app.category === this.category || app.category.indexOf(this.category) > -1)
- })
},
bundles() {
return this.$store.getters.getServerData.bundles.filter(bundle => this.bundleApps(bundle.id).length > 0)
@@ -175,7 +177,7 @@ export default {
return !this.useListView && !this.useBundleView
},
useListView() {
- return (this.category === 'installed' || this.category === 'enabled' || this.category === 'disabled' || this.category === 'updates')
+ return ['installed', 'recommended', 'enabled', 'disabled', 'updates'].includes(this.category)
},
useBundleView() {
return (this.category === 'app-bundles')
@@ -196,6 +198,24 @@ export default {
}
}
},
+ mounted() {
+ if (this.category === 'recommended' && 'download' in this.$route.query) {
+ const limit = pLimit(1)
+ const installing = this.apps
+ .filter(app => !app.active && app.canInstall)
+ .map(app => limit(() => this.$store.dispatch('enableApp', { appId: app.id, groups: [] })))
+ console.debug(`installing ${installing.length} recommended apps`)
+ Promise.all(installing)
+ .then(() => {
+ console.info('recommended apps installed')
+
+ if ('returnTo' in this.$route.query) {
+ window.location = this.$route.query.returnTo
+ }
+ })
+ .catch(e => console.error('could not install recommended apps', e))
+ }
+ },
methods: {
toggleBundle(id) {
if (this.allBundlesEnabled(id)) {
diff --git a/apps/settings/src/recommendedApps.js b/apps/settings/src/recommendedApps.js
new file mode 100644
index 00000000000..d2868b8728b
--- /dev/null
+++ b/apps/settings/src/recommendedApps.js
@@ -0,0 +1,26 @@
+/*
+ * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+export default [
+ 'contacts',
+ 'calendar',
+ 'mail'
+]
diff --git a/apps/settings/src/views/Apps.vue b/apps/settings/src/views/Apps.vue
index 2e0649f7f56..a2c4cae825d 100644
--- a/apps/settings/src/views/Apps.vue
+++ b/apps/settings/src/views/Apps.vue
@@ -31,7 +31,10 @@
</ul>
</AppNavigation>
<AppContent class="app-settings-content" :class="{ 'icon-loading': loadingList }">
- <AppList :category="category" :app="currentApp" :search="searchQuery" />
+ <AppList v-if="!loadingList"
+ :category="category"
+ :app="currentApp"
+ :search="searchQuery" />
</AppContent>
<AppSidebar v-if="id && currentApp" @close="hideAppDetails">
<AppDetails :category="category" :app="currentApp" />
@@ -134,12 +137,20 @@ export default {
text: t('settings', 'Your apps')
},
{
+ id: 'app-category-recommended',
+ classes: [],
+ router: { name: 'apps-category', params: { category: 'recommended' } },
+ icon: 'icon-category-installed',
+ text: t('settings', 'Recommended apps')
+ },
+ {
id: 'app-category-enabled',
classes: [],
icon: 'icon-category-enabled',
router: { name: 'apps-category', params: { category: 'enabled' } },
text: t('settings', 'Active apps')
- }, {
+ },
+ {
id: 'app-category-disabled',
classes: [],
icon: 'icon-category-disabled',