diff --git a/.eslintrc.js b/.eslintrc.js index 307f668a..a532df9e 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,8 +1,20 @@ module.exports = { globals: { - appVersion: true + appVersion: true, + }, + + plugins: ['import'], + extends: ['@nextcloud'], + + settings: { + 'import/parsers': { + '@typescript-eslint/parser': ['.ts', '.tsx'], + }, + 'import/resolver': { + typescript: { + alwaysTryTypes: true, + paths: './tsconfig.json', + }, + }, }, - extends: [ - '@nextcloud' - ] } diff --git a/package.json b/package.json index db5467c3..d96d2dae 100644 --- a/package.json +++ b/package.json @@ -36,13 +36,14 @@ "@mattkrick/sanitize-svg": "^0.3.1", "@nextcloud/auth": "^1.3.0", "@nextcloud/axios": "^1.6.0", + "@nextcloud/capabilities": "^1.0.4", "@nextcloud/dialogs": "^3.1.2", "@nextcloud/event-bus": "^1.2.0", "@nextcloud/initial-state": "^1.2.0", "@nextcloud/l10n": "^1.4.1", "@nextcloud/moment": "^1.1.1", "@nextcloud/paths": "^1.1.2", - "@nextcloud/router": "^1.2.0", + "@nextcloud/router": "^2.0.0", "@nextcloud/vue": "^3.9.0", "axios": "^0.21.1", "b64-to-blob": "^1.2.19", diff --git a/src/components/AppContent/CircleContent.vue b/src/components/AppContent/CircleContent.vue index d382ae16..164aaf5b 100644 --- a/src/components/AppContent/CircleContent.vue +++ b/src/components/AppContent/CircleContent.vue @@ -50,7 +50,7 @@ - {{ t('contacts', 'Joining circle') }} + {{ t('contacts', 'Your request to join this circle is pending approval') }} @@ -76,7 +76,8 @@ import EmptyContent from '@nextcloud/vue/dist/Components/EmptyContent' import CircleDetails from '../CircleDetails' import MemberList from '../MemberList' import RouterMixin from '../../mixins/RouterMixin' -import { MEMBER_LEVEL_NONE } from '../../models/constants' +import { joinCircle } from '../../services/circles.ts' +import { showError } from '@nextcloud/dialogs' export default { name: 'CircleContent', @@ -123,14 +124,6 @@ export default { isEmptyCircle() { return this.members.length === 0 }, - - /** - * Is the current user member of this circle? - * @returns {boolean} - */ - isMemberOfCircle() { - return this.circle.initiator?.level > MEMBER_LEVEL_NONE - }, }, watch: { @@ -150,8 +143,17 @@ export default { /** * Request to join this circle */ - requestJoin() { + async requestJoin() { this.loadingJoin = true + + try { + await joinCircle(this.circle.id) + } catch (error) { + showError(t('contacts', 'Unable to join the circle')) + } finally { + this.loadingJoin = false + } + }, }, } diff --git a/src/components/AppNavigation/CircleNavigationItem.vue b/src/components/AppNavigation/CircleNavigationItem.vue index 32846d5f..26838678 100644 --- a/src/components/AppNavigation/CircleNavigationItem.vue +++ b/src/components/AppNavigation/CircleNavigationItem.vue @@ -41,7 +41,7 @@ {{ copyButtonText }} @@ -49,7 +49,7 @@ {{ t('contacts', 'Leave circle') }} {{ joinButtonTitle }} diff --git a/src/components/MemberList/MemberListItem.vue b/src/components/MembersList/MembersListItem.vue similarity index 67% rename from src/components/MemberList/MemberListItem.vue rename to src/components/MembersList/MembersListItem.vue index f47495f6..19e67906 100644 --- a/src/components/MemberList/MemberListItem.vue +++ b/src/components/MembersList/MembersListItem.vue @@ -22,13 +22,14 @@