forked from AkkomaGang/admin-fe
Add ability to copy invite link from dialog window
This commit is contained in:
parent
6abb32e3e6
commit
e4a82cee72
3 changed files with 27 additions and 6 deletions
|
@ -482,7 +482,8 @@ export default {
|
||||||
invalidEmailError: 'Please input valid e-mail',
|
invalidEmailError: 'Please input valid e-mail',
|
||||||
emailSent: 'Invite was sent',
|
emailSent: 'Invite was sent',
|
||||||
submitFormError: 'There are invalid values in the form. Please fix them before continuing.',
|
submitFormError: 'There are invalid values in the form. Please fix them before continuing.',
|
||||||
inviteViaEmailAlert: 'To send invite via email make sure to enable `invites_enabled` and disable `registrations_open`'
|
inviteViaEmailAlert: 'To send invite via email make sure to enable `invites_enabled` and disable `registrations_open`',
|
||||||
|
copyLink: 'Copy link'
|
||||||
},
|
},
|
||||||
emoji: {
|
emoji: {
|
||||||
emojiPacks: 'Emoji packs',
|
emojiPacks: 'Emoji packs',
|
||||||
|
|
|
@ -3,7 +3,7 @@ import Clipboard from 'clipboard'
|
||||||
|
|
||||||
function clipboardSuccess() {
|
function clipboardSuccess() {
|
||||||
Vue.prototype.$message({
|
Vue.prototype.$message({
|
||||||
message: 'Copy successfully',
|
message: 'Copied!',
|
||||||
type: 'success',
|
type: 'success',
|
||||||
duration: 1500
|
duration: 1500
|
||||||
})
|
})
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
:visible.sync="createTokenDialogVisible"
|
:visible.sync="createTokenDialogVisible"
|
||||||
:show-close="false"
|
:show-close="false"
|
||||||
:title="$t('invites.createInviteToken')"
|
:title="$t('invites.createInviteToken')"
|
||||||
|
:width="isTokenCreated ? '60%' : '30%'"
|
||||||
custom-class="create-new-token-dialog">
|
custom-class="create-new-token-dialog">
|
||||||
<el-form ref="newTokenForm" :model="newTokenForm" :label-width="getLabelWidth" status-icon>
|
<el-form ref="newTokenForm" :model="newTokenForm" :label-width="getLabelWidth" status-icon>
|
||||||
<el-form-item :label="$t('invites.maxUse')">
|
<el-form-item :label="$t('invites.maxUse')">
|
||||||
|
@ -51,9 +52,12 @@
|
||||||
</div>
|
</div>
|
||||||
<el-form label-width="85px" class="new-token-card">
|
<el-form label-width="85px" class="new-token-card">
|
||||||
<el-form-item :label="$t('invites.inviteLink')">
|
<el-form-item :label="$t('invites.inviteLink')">
|
||||||
<el-link :href="inviteLink" :underline="false" target="_blank">
|
<div class="invite-link-container">
|
||||||
{{ inviteLink }}
|
<el-link :href="inviteLink" :underline="false" target="_blank">
|
||||||
</el-link>
|
{{ inviteLink }}
|
||||||
|
</el-link>
|
||||||
|
<el-button type="text" size="small" @click="handleCopy($event)">{{ $t('invites.copyLink') }}</el-button>
|
||||||
|
</div>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item :label="$t('invites.token')">
|
<el-form-item :label="$t('invites.token')">
|
||||||
{{ newToken.token }}
|
{{ newToken.token }}
|
||||||
|
@ -156,6 +160,7 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
import clip from '@/utils/clipboard'
|
||||||
import RebootButton from '@/components/RebootButton'
|
import RebootButton from '@/components/RebootButton'
|
||||||
import { mapGetters } from 'vuex'
|
import { mapGetters } from 'vuex'
|
||||||
import { baseName } from '@/api/utils'
|
import { baseName } from '@/api/utils'
|
||||||
|
@ -194,6 +199,9 @@ export default {
|
||||||
isDesktop() {
|
isDesktop() {
|
||||||
return this.$store.state.app.device === 'desktop'
|
return this.$store.state.app.device === 'desktop'
|
||||||
},
|
},
|
||||||
|
isTokenCreated() {
|
||||||
|
return 'token' in this.newToken
|
||||||
|
},
|
||||||
loading() {
|
loading() {
|
||||||
return this.$store.state.invites.loading
|
return this.$store.state.invites.loading
|
||||||
},
|
},
|
||||||
|
@ -216,10 +224,15 @@ export default {
|
||||||
this.$store.dispatch('RemoveNewToken')
|
this.$store.dispatch('RemoveNewToken')
|
||||||
this.$data.inviteUserForm.email = ''
|
this.$data.inviteUserForm.email = ''
|
||||||
this.$data.inviteUserForm.name = ''
|
this.$data.inviteUserForm.name = ''
|
||||||
|
this.$data.newTokenForm.maxUse = 1
|
||||||
|
this.$data.newTokenForm.expiresAt = ''
|
||||||
},
|
},
|
||||||
createToken() {
|
createToken() {
|
||||||
this.$store.dispatch('GenerateInviteToken', this.$data.newTokenForm)
|
this.$store.dispatch('GenerateInviteToken', this.$data.newTokenForm)
|
||||||
},
|
},
|
||||||
|
handleCopy(event) {
|
||||||
|
clip(this.inviteLink, event)
|
||||||
|
},
|
||||||
async inviteUserViaEmail() {
|
async inviteUserViaEmail() {
|
||||||
this.$refs['inviteUserForm'].validate(async(valid) => {
|
this.$refs['inviteUserForm'].validate(async(valid) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
|
@ -269,7 +282,6 @@ export default {
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
}
|
}
|
||||||
.create-new-token-dialog {
|
.create-new-token-dialog {
|
||||||
width: 50%;
|
|
||||||
a {
|
a {
|
||||||
margin-bottom: 3px;
|
margin-bottom: 3px;
|
||||||
}
|
}
|
||||||
|
@ -286,6 +298,14 @@ export default {
|
||||||
.icon {
|
.icon {
|
||||||
margin-right: 5px;
|
margin-right: 5px;
|
||||||
}
|
}
|
||||||
|
.invite-link-container {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: baseline;
|
||||||
|
button {
|
||||||
|
margin-left: 15px;
|
||||||
|
}
|
||||||
|
}
|
||||||
.invite-token-table {
|
.invite-token-table {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
margin: 0 15px;
|
margin: 0 15px;
|
||||||
|
|
Loading…
Reference in a new issue