diff options
| author | Shpuld Shpuldson <shpuld@gmail.com> | 2017-08-02 22:09:40 +0300 |
|---|---|---|
| committer | Shpuld Shpuldson <shpuld@gmail.com> | 2017-08-02 22:09:40 +0300 |
| commit | acf3fd5d91b41cfed08d70c63eab7feb79769a10 (patch) | |
| tree | eebf5aa8ba6950d7aaaf7015b9bd9babc359669e /src/components/user_settings/user_settings.js | |
| parent | b2846893138086023ee43e8919689e659639579a (diff) | |
Add new user-settings component/route, add options to change name, bio, avatar, banner and bg. Add those options to api service and backend interactor service.
Diffstat (limited to 'src/components/user_settings/user_settings.js')
| -rw-r--r-- | src/components/user_settings/user_settings.js | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/src/components/user_settings/user_settings.js b/src/components/user_settings/user_settings.js new file mode 100644 index 00000000..c22411dd --- /dev/null +++ b/src/components/user_settings/user_settings.js @@ -0,0 +1,145 @@ +import StyleSwitcher from '../style_switcher/style_switcher.vue' +import { filter, trim } from 'lodash' + +const UserSettings = { + data () { + return { + newname: this.$store.state.users.currentUser.name, + newbio: this.$store.state.users.currentUser.description, + previewavatar: null, + previewbanner: null, + previewbg: null, + uploadingavatar: false, + uploadingbanner: false, + uploadingbg: false + } + }, + components: { + StyleSwitcher + }, + computed: { + user () { + return this.$store.state.users.currentUser + } + }, + methods: { + updateProfile () { + const name = this.newname + const description = this.newbio + this.$store.state.api.backendInteractor.updateProfile({params: {name, description}}).then((user) => { + if(!user.error) { + this.$store.commit('addNewUsers', [user]) + this.$store.commit('setCurrentUser', user) + } + }) + }, + uploadAvatar ({target}) { + const file = target.files[0] + // eslint-disable-next-line no-undef + const reader = new FileReader() + reader.onload = ({target}) => { + const img = target.result + this.previewavatar = img + } + reader.readAsDataURL(file) + }, + uploadBanner ({target}) { + const file = target.files[0] + // eslint-disable-next-line no-undef + const reader = new FileReader() + reader.onload = ({target}) => { + const img = target.result + this.previewbanner = img + } + reader.readAsDataURL(file) + }, + uploadBg ({target}) { + const file = target.files[0] + // eslint-disable-next-line no-undef + const reader = new FileReader() + reader.onload = ({target}) => { + const img = target.result + this.previewbg = img + } + reader.readAsDataURL(file) + }, + submitAvatar () { + if (!this.previewavatar) { return } + + let img = this.previewavatar + // eslint-disable-next-line no-undef + let imginfo = new Image() + let cropX, cropY, cropW, cropH + imginfo.src = img + if (imginfo.height > imginfo.width) { + cropX = 0 + cropW = imginfo.width + cropY = Math.floor((imginfo.height - imginfo.width) / 2) + cropH = imginfo.width + } else { + cropY = 0 + cropH = imginfo.height + cropX = Math.floor((imginfo.width - imginfo.height) / 2) + cropW = imginfo.height + } + this.uploadingavatar = true + this.$store.state.api.backendInteractor.updateAvatar({params: {img, cropX, cropY, cropW, cropH}}).then((user) => { + if (!user.error) { + this.$store.commit('addNewUsers', [user]) + this.$store.commit('setCurrentUser', user) + this.previewavatar = null + } + this.uploadingavatar = false + }) + }, + submitBanner () { + if (!this.previewbanner) { return } + + let banner = this.previewbanner + let imginfo = new Image() + let offset_top, offset_left, width, height + imginfo.src = banner + width = imginfo.width + height = imginfo.height + offset_top = 0 + offset_left = 0 + this.uploadingbanner = true + this.$store.state.api.backendInteractor.updateBanner({params: {banner, offset_top, offset_left, width, height}}).then((data) => { + if (!data.error) { + let clone = JSON.parse(JSON.stringify(this.$store.state.users.currentUser)) + clone.cover_photo = data.url + this.$store.commit('addNewUsers', [clone]) + this.$store.commit('setCurrentUser', clone) + this.previewbanner = null + } + this.uploadingbanner = false + }) + }, + submitBg () { + if (!this.previewbg) { return } + let img = this.previewbg + let imginfo = new Image() + let cropX, cropY, cropW, cropH + imginfo.src = img + cropX = 0 + cropY = 0 + cropW = imginfo.width + cropH = imginfo.width + this.uploadingbg = true + this.$store.state.api.backendInteractor.updateBg({params: {img, cropX, cropY, cropW, cropH}}).then((data) => { + if (!data.error) { + let clone = JSON.parse(JSON.stringify(this.$store.state.users.currentUser)) + clone.background_image = data.url + this.$store.commit('addNewUsers', [clone]) + this.$store.commit('setCurrentUser', clone) + this.previewbg = null + } + this.uploadingbg = false + }) + } + }, + watch: { + } +} + +export default UserSettings |
