diff --git a/package-lock.json b/package-lock.json index 2d9909df853..6cce05ac111 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4241,6 +4241,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "optional": true, "requires": { "color-convert": "^2.0.1" } @@ -4287,6 +4288,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "optional": true, "requires": { "color-name": "~1.1.4" } @@ -4295,7 +4297,8 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "optional": true }, "css-loader": { "version": "3.6.0", @@ -7166,6 +7169,11 @@ } } }, + "classnames": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", + "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==" + }, "clean-css": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", @@ -8977,6 +8985,11 @@ "stream-shift": "^1.0.0" } }, + "easy-bem": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/easy-bem/-/easy-bem-1.0.2.tgz", + "integrity": "sha512-tHtLDhcEHZIMKdiiZElQoR8TcZ/6rvcNp7//93Vx/mqNLah9BOFGhhzTUfWLJs7uxZiKMdP/KzGOtzq14DrrqQ==" + }, "easy-stack": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/easy-stack/-/easy-stack-1.0.0.tgz", @@ -20733,6 +20746,16 @@ "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.12.tgz", "integrity": "sha512-uhmLFETqPPNyuLLbsKz6ioJ4q7AZHzD8ZVFNATNyICSZouqP2Sz0rotWQC8UNBF6VGSCs5abnKJoStA6JbCbfg==" }, + "vue-advanced-cropper": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/vue-advanced-cropper/-/vue-advanced-cropper-0.20.1.tgz", + "integrity": "sha512-G/RloEFoAIMd8hK9xczcu9muUNq0GzHupcnuFQuiyk9+4W+JkT4Ypnrr0CLDrtuFwd1BFabiX9bdpk+Z/XP2EQ==", + "requires": { + "classnames": "^2.2.6", + "debounce": "^1.2.0", + "easy-bem": "^1.0.2" + } + }, "vue-at": { "version": "2.5.0-beta.2", "resolved": "https://registry.npmjs.org/vue-at/-/vue-at-2.5.0-beta.2.tgz", diff --git a/package.json b/package.json index 2c7c8f893d5..7e30c08b979 100644 --- a/package.json +++ b/package.json @@ -43,6 +43,7 @@ "url-parse": "^1.4.7", "util": "^0.12.3", "vue": "^2.6.12", + "vue-advanced-cropper": "^0.20.1", "vue-at": "^2.5.0-beta.2", "vue-clipboard2": "^0.3.1", "vue-fragment": "^1.5.1", diff --git a/src/App.vue b/src/App.vue index 818b01f31f0..700d6101067 100644 --- a/src/App.vue +++ b/src/App.vue @@ -71,6 +71,7 @@ import '@nextcloud/dialogs/styles/toast.scss' export default { name: 'App', + components: { AppContent, Content, diff --git a/src/components/ConversationPictureEditor/ConversationPictureEditor.vue b/src/components/ConversationPictureEditor/ConversationPictureEditor.vue new file mode 100644 index 00000000000..aab7d273f15 --- /dev/null +++ b/src/components/ConversationPictureEditor/ConversationPictureEditor.vue @@ -0,0 +1,187 @@ + + + + + + + + + + + + {{ t('spreed', 'Dismiss') }} + + + {{ t('spreed', 'Send') }} + + + + + + + + + diff --git a/src/components/ConversationSettings/ConversationSettingsDialog.vue b/src/components/ConversationSettings/ConversationSettingsDialog.vue index 37aed0210be..555d6f4c6b0 100644 --- a/src/components/ConversationSettings/ConversationSettingsDialog.vue +++ b/src/components/ConversationSettings/ConversationSettingsDialog.vue @@ -25,6 +25,10 @@ :aria-label="t('spreed', 'Conversation settings')" :open.sync="showSettings" :show-navigation="false"> + + + @@ -65,6 +69,7 @@ import LobbySettings from './LobbySettings' import SipSettings from './SipSettings' import MatterbridgeSettings from './Matterbridge/MatterbridgeSettings' import { loadState } from '@nextcloud/initial-state' +import GeneralConversationSettings from './GeneralConversationSettings' export default { name: 'ConversationSettingsDialog', @@ -78,6 +83,7 @@ export default { LockingSettings, SipSettings, MatterbridgeSettings, + GeneralConversationSettings, }, data() { diff --git a/src/components/ConversationSettings/GeneralConversationSettings.vue b/src/components/ConversationSettings/GeneralConversationSettings.vue new file mode 100644 index 00000000000..d996e9287cd --- /dev/null +++ b/src/components/ConversationSettings/GeneralConversationSettings.vue @@ -0,0 +1,114 @@ + + + + + + + + + + + {{ conversationName }} + + + + + + + + + diff --git a/src/services/conversationsService.js b/src/services/conversationsService.js index f7e1b3239d8..920661e3694 100644 --- a/src/services/conversationsService.js +++ b/src/services/conversationsService.js @@ -353,6 +353,19 @@ const setConversationDescription = async function(token, description) { return response } +const setConversationPicture = async function(token, blob) { + const formData = new FormData() + formData.append('name', 'files[]') + formData.append('contents', blob) + console.log('formData', formData, 'blob', blob) + const response = await axios.post(generateOcsUrl('apps/spreed/api/v3', 2) + `avatar/${token}`, formData, { + headers: { + 'Content-Type': 'multipart/form-data;boundary=----WebKitFormBoundaryyrV7KO0BoCBuDbTL', + }, + }) + return response +} + export { fetchConversations, fetchConversation, @@ -375,4 +388,5 @@ export { setConversationPassword, setConversationName, setConversationDescription, + setConversationPicture, }