diff --git a/app/theme/client/imports/general/base_old.css b/app/theme/client/imports/general/base_old.css index b7876262b494f..a98c4a259b2fb 100644 --- a/app/theme/client/imports/general/base_old.css +++ b/app/theme/client/imports/general/base_old.css @@ -3168,18 +3168,6 @@ } } -.rc-old .avatarPrompt { - & header p { - font-size: 14px; - font-weight: 300; - line-height: 22px; - } - - & img { - width: 200px; - } -} - .rc-old #login-card { position: relative; z-index: 1; diff --git a/app/ui-account/client/avatar/prompt.html b/app/ui-account/client/avatar/prompt.html deleted file mode 100644 index d1a8aaaf015f8..0000000000000 --- a/app/ui-account/client/avatar/prompt.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - diff --git a/app/ui-account/client/avatar/prompt.js b/app/ui-account/client/avatar/prompt.js deleted file mode 100644 index 1d5d651e99177..0000000000000 --- a/app/ui-account/client/avatar/prompt.js +++ /dev/null @@ -1,172 +0,0 @@ -import { Meteor } from 'meteor/meteor'; -import { ReactiveVar } from 'meteor/reactive-var'; -import { Tracker } from 'meteor/tracker'; -import { FlowRouter } from 'meteor/kadira:flow-router'; -import { Template } from 'meteor/templating'; -import s from 'underscore.string'; -import toastr from 'toastr'; - -import { settings } from '../../../settings'; -import { callbacks } from '../../../callbacks'; -import { SideNav } from '../../../ui-utils'; -import { t } from '../../../utils'; -import { mime } from '../../../utils/lib/mimeTypes'; -import { fileUploadHandler } from '../../../file-upload'; - -Template.avatarPrompt.onCreated(function() { - const self = this; - self.suggestions = new ReactiveVar(); - self.upload = new ReactiveVar(); - self.getSuggestions = function() { - self.suggestions.set(undefined); - Meteor.call('getAvatarSuggestion', function(error, avatars) { - self.suggestions.set({ ready: true, avatars }); - }); - }; - self.getSuggestions(); -}); - -Template.avatarPrompt.onRendered(function() { - Tracker.afterFlush(function() { - if (!settings.get('Accounts_AllowUserAvatarChange')) { - FlowRouter.go('home'); - } - SideNav.setFlex('accountFlex'); - SideNav.openFlex(); - }); -}); - -Template.avatarPrompt.helpers({ - suggestions() { - return Template.instance().suggestions.get(); - }, - suggestAvatar(service) { - const suggestions = Template.instance().suggestions.get(); - return settings.get(`Accounts_OAuth_${ s.capitalize(service) }`) && !suggestions.avatars[service]; - }, - upload() { - return Template.instance().upload.get(); - }, - username() { - const user = Meteor.user(); - return user && user.username; - }, - initialsUsername() { - const user = Meteor.user(); - return `@${ user && user.username }`; - }, -}); - -Template.avatarPrompt.events({ - 'click .select-service'(event, instance) { - if (this.service === 'initials') { - Meteor.call('resetAvatar', function(err) { - if (err && err.details && err.details.timeToReset) { - toastr.error(t('error-too-many-requests', { - seconds: parseInt(err.details.timeToReset / 1000), - })); - } else { - toastr.success(t('Avatar_changed_successfully')); - callbacks.run('userAvatarSet', 'initials'); - } - }); - } else if (this.service === 'url') { - if (s.trim($('#avatarurl').val())) { - Meteor.call('setAvatarFromService', $('#avatarurl').val(), '', this.service, function(err) { - if (err) { - if (err.details && err.details.timeToReset) { - toastr.error(t('error-too-many-requests', { - seconds: parseInt(err.details.timeToReset / 1000), - })); - } else { - toastr.error(t('Avatar_url_invalid_or_error')); - } - } else { - toastr.success(t('Avatar_changed_successfully')); - callbacks.run('userAvatarSet', 'url'); - } - }); - } else { - toastr.error(t('Please_enter_value_for_url')); - } - } else if (this.service === 'upload') { - let { files } = instance.find('input[type=file]'); - if (!files || files.length === 0) { - files = (event.dataTransfer && event.dataTransfer.files) || []; - } - - for (let i = 0; i < files.length; i++) { - const file = files[i]; - Object.defineProperty(file, 'type', { value: mime.lookup(file.name) }); - } - - const record = { - name: files[0].name, - size: files[0].size, - type: files[0].type, - // description: document.getElementById('file-description').value - }; - - const upload = fileUploadHandler('Avatars', record, files[0]); - - // upload.onProgress = (progress) -> - // console.log 'progress ->', progress - - upload.start((error, result) => { - if (result) { - toastr.success(t('Avatar_changed_successfully')); - callbacks.run('userAvatarSet', this.service); - } - }); - } else { - const tmpService = this.service; - Meteor.call('setAvatarFromService', this.blob, this.contentType, this.service, function(err) { - if (err && err.details && err.details.timeToReset) { - toastr.error(t('error-too-many-requests', { - seconds: parseInt(err.details.timeToReset / 1000), - })); - } else { - toastr.success(t('Avatar_changed_successfully')); - callbacks.run('userAvatarSet', tmpService); - } - }); - } - }, - 'click .login-with-service'(event, template) { - const loginWithService = `loginWith${ s.capitalize(this) }`; - const serviceConfig = {}; - Meteor[loginWithService](serviceConfig, function(error) { - if (error && error.error) { - if (error.error === 'github-no-public-email') { - return alert(t('github_no_public_email')); - } - console.log(error); - return toastr.error(error.message); - } - template.getSuggestions(); - }); - }, - 'change .avatar-file-input'(event, template) { - const e = event.originalEvent || event; - let { files } = e.target; - if (!files || files.length === 0) { - files = (e.dataTransfer && e.dataTransfer.files) || []; - } - Object.keys(files).forEach((key) => { - const blob = files[key]; - if (!/image\/.+/.test(blob.type)) { - return; - } - const reader = new FileReader(); - reader.readAsDataURL(blob); - reader.onloadend = function() { - template.upload.set({ - service: 'upload', - contentType: blob.type, - blob: reader.result, - }); - callbacks.run('userAvatarSet', 'upload'); - }; - }); - }, -}); diff --git a/app/ui-account/client/index.js b/app/ui-account/client/index.js index 5ba00d4072a24..836055a055104 100644 --- a/app/ui-account/client/index.js +++ b/app/ui-account/client/index.js @@ -1,6 +1,4 @@ import './accountIntegrations.html'; import './avatar/avatar.html'; -import './avatar/prompt.html'; import './accountIntegrations'; import './avatar/avatar'; -import './avatar/prompt'; diff --git a/app/ui-sidenav/client/sidebarHeader.js b/app/ui-sidenav/client/sidebarHeader.js index 83ea3947d6674..f1bc60b7bf5ad 100644 --- a/app/ui-sidenav/client/sidebarHeader.js +++ b/app/ui-sidenav/client/sidebarHeader.js @@ -312,8 +312,6 @@ Template.sidebarHeader.events({ type: 'open', id: 'account', action: () => { - SideNav.setFlex('accountFlex'); - SideNav.openFlex(); FlowRouter.go('account'); popover.close(); }, diff --git a/client/account/sidebarItems.js b/client/account/sidebarItems.js index 8617d6d62c06e..31daae10539c9 100644 --- a/client/account/sidebarItems.js +++ b/client/account/sidebarItems.js @@ -6,7 +6,7 @@ import { createSidebarItems } from '../components/basic/Sidebar'; createTemplateForComponent('accountFlex', () => import('./AccountSidebar')); export const { - registerSidebarItem: registerAdminSidebarItem, + registerSidebarItem: registerAccountSidebarItem, unregisterSidebarItem, itemsSubscription, } = createSidebarItems([ diff --git a/imports/personal-access-tokens/client/index.js b/imports/personal-access-tokens/client/index.js deleted file mode 100644 index 621ead8218b02..0000000000000 --- a/imports/personal-access-tokens/client/index.js +++ /dev/null @@ -1 +0,0 @@ -import './personalAccessTokens'; diff --git a/imports/personal-access-tokens/client/personalAccessTokens.html b/imports/personal-access-tokens/client/personalAccessTokens.html deleted file mode 100644 index 9234ee6b4f53d..0000000000000 --- a/imports/personal-access-tokens/client/personalAccessTokens.html +++ /dev/null @@ -1,71 +0,0 @@ - diff --git a/imports/personal-access-tokens/client/personalAccessTokens.js b/imports/personal-access-tokens/client/personalAccessTokens.js deleted file mode 100644 index 1e4403b6fe686..0000000000000 --- a/imports/personal-access-tokens/client/personalAccessTokens.js +++ /dev/null @@ -1,123 +0,0 @@ -import { Meteor } from 'meteor/meteor'; -import { ReactiveVar } from 'meteor/reactive-var'; -import { Tracker } from 'meteor/tracker'; -import { Template } from 'meteor/templating'; -import toastr from 'toastr'; -import moment from 'moment'; - -import { t } from '../../../app/utils'; -import { modal, SideNav } from '../../../app/ui-utils'; -import { hasAllPermission } from '../../../app/authorization'; -import './personalAccessTokens.html'; -import { APIClient, handleError } from '../../../app/utils/client'; - -const loadTokens = async (instance) => { - const { tokens } = await APIClient.v1.get('users.getPersonalAccessTokens'); - instance.personalAccessTokens.set(tokens); -}; - -Template.accountTokens.helpers({ - isAllowed() { - return hasAllPermission(['create-personal-access-tokens']); - }, - tokens() { - return Template.instance().personalAccessTokens.get(); - }, - dateFormated(date) { - return moment(date).format('L LT'); - }, - twoFactor(bypassTwoFactor) { - return bypassTwoFactor ? t('Ignore') : t('Require'); - }, -}); - -const showSuccessModal = (token) => { - modal.open({ - title: t('API_Personal_Access_Token_Generated'), - text: t('API_Personal_Access_Token_Generated_Text_Token_s_UserId_s', { token, userId: Meteor.userId() }), - type: 'success', - confirmButtonColor: '#DD6B55', - confirmButtonText: 'Ok', - closeOnConfirm: true, - html: true, - }, () => { - }); -}; - -Template.accountTokens.events({ - 'submit #form-tokens'(e, instance) { - e.preventDefault(); - const tokenName = e.currentTarget.elements.tokenName.value.trim(); - if (tokenName === '') { - return toastr.error(t('Please_fill_a_token_name')); - } - const bypassTwoFactor = $('#bypassTwoFactor').val() === 'true'; - Meteor.call('personalAccessTokens:generateToken', { tokenName, bypassTwoFactor }, (error, token) => { - if (error) { - return handleError(error); - } - showSuccessModal(token); - loadTokens(instance); - instance.find('#tokenName').value = ''; - }); - }, - 'click .remove-personal-access-token'(e, instance) { - modal.open({ - title: t('Are_you_sure'), - text: t('API_Personal_Access_Tokens_Remove_Modal'), - type: 'warning', - showCancelButton: true, - confirmButtonColor: '#DD6B55', - confirmButtonText: t('Yes'), - cancelButtonText: t('Cancel'), - closeOnConfirm: true, - html: false, - }, () => { - Meteor.call('personalAccessTokens:removeToken', { - tokenName: this.name, - }, (error) => { - if (error) { - return handleError(error); - } - loadTokens(instance); - toastr.success(t('Removed')); - }); - }); - }, - 'click .regenerate-personal-access-token'(e, instance) { - modal.open({ - title: t('Are_you_sure'), - text: t('API_Personal_Access_Tokens_Regenerate_Modal'), - type: 'warning', - showCancelButton: true, - confirmButtonColor: '#DD6B55', - confirmButtonText: t('API_Personal_Access_Tokens_Regenerate_It'), - cancelButtonText: t('Cancel'), - closeOnConfirm: true, - html: false, - }, () => { - Meteor.call('personalAccessTokens:regenerateToken', { - tokenName: this.name, - }, (error, token) => { - if (error) { - return handleError(error); - } - loadTokens(instance); - showSuccessModal(token); - }); - }); - }, -}); - -Template.accountTokens.onCreated(function() { - this.personalAccessTokens = new ReactiveVar([]); - - loadTokens(this); -}); - -Template.accountTokens.onRendered(function() { - Tracker.afterFlush(function() { - SideNav.setFlex('accountFlex'); - SideNav.openFlex(); - }); -}); diff --git a/imports/startup/client/index.js b/imports/startup/client/index.js index 90110cf076e21..b246d95d01516 100644 --- a/imports/startup/client/index.js +++ b/imports/startup/client/index.js @@ -1,3 +1,2 @@ import '../../message-read-receipt/client'; -import '../../personal-access-tokens/client'; import './listenActiveUsers';