|
|
|
@ -316,44 +316,63 @@
|
|
|
|
|
<v-icon small class="pointer" @click="copyShareUrlToClipboard"> mdi-content-copy </v-icon> |
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
<v-switch v-model="passwordProtect" dense @change="onPasswordProtectChange"> |
|
|
|
|
<template #label> |
|
|
|
|
<!-- Restrict access with a password --> |
|
|
|
|
<span v-show="!passwordProtect" class="caption"> |
|
|
|
|
{{ $t('msg.info.beforeEnablePwd') }} |
|
|
|
|
</span> |
|
|
|
|
<!-- Access is password restricted --> |
|
|
|
|
<span v-show="passwordProtect" class="caption"> |
|
|
|
|
{{ $t('msg.info.afterEnablePwd') }} |
|
|
|
|
</span> |
|
|
|
|
</template> |
|
|
|
|
</v-switch> |
|
|
|
|
|
|
|
|
|
<div v-if="passwordProtect" class="d-flex flex-column align-center justify-center"> |
|
|
|
|
<v-text-field |
|
|
|
|
v-model="shareLink.password" |
|
|
|
|
autocomplete="new-password" |
|
|
|
|
browser-autocomplete="new-password" |
|
|
|
|
class="password-field mr-2 caption" |
|
|
|
|
style="max-width: 230px" |
|
|
|
|
:type="showShareLinkPassword ? 'text' : 'password'" |
|
|
|
|
:hint="$t('placeholder.password.enter')" |
|
|
|
|
persistent-hint |
|
|
|
|
dense |
|
|
|
|
solo |
|
|
|
|
flat |
|
|
|
|
> |
|
|
|
|
<template #append> |
|
|
|
|
<v-icon small @click="showShareLinkPassword = !showShareLinkPassword"> |
|
|
|
|
{{ showShareLinkPassword ? 'visibility_off' : 'visibility' }} |
|
|
|
|
</v-icon> |
|
|
|
|
</template> |
|
|
|
|
</v-text-field> |
|
|
|
|
<v-btn color="primary" class="caption" small @click="saveShareLinkPassword"> |
|
|
|
|
<!-- Save password --> |
|
|
|
|
{{ $t('placeholder.password.save') }} |
|
|
|
|
</v-btn> |
|
|
|
|
</div> |
|
|
|
|
<v-expansion-panels v-model="advanceOptionsPanel" class="mx-auto" flat> |
|
|
|
|
<v-expansion-panel> |
|
|
|
|
<v-expansion-panel-header hide-actions> |
|
|
|
|
<v-spacer /> |
|
|
|
|
<span class="grey--text caption" |
|
|
|
|
>More Options |
|
|
|
|
<v-icon color="grey" small> |
|
|
|
|
mdi-chevron-{{ advanceOptionsPanel === 0 ? 'up' : 'down' }} |
|
|
|
|
</v-icon></span |
|
|
|
|
> |
|
|
|
|
</v-expansion-panel-header> |
|
|
|
|
<v-expansion-panel-content> |
|
|
|
|
<v-checkbox |
|
|
|
|
v-model="passwordProtect" |
|
|
|
|
class="caption" |
|
|
|
|
:label="$t('msg.info.beforeEnablePwd')" |
|
|
|
|
hide-details |
|
|
|
|
dense |
|
|
|
|
@change="onPasswordProtectChange" |
|
|
|
|
/> |
|
|
|
|
<div v-if="passwordProtect" class="d-flex flex-column align-center justify-center"> |
|
|
|
|
<v-text-field |
|
|
|
|
v-model="shareLink.password" |
|
|
|
|
autocomplete="new-password" |
|
|
|
|
browser-autocomplete="new-password" |
|
|
|
|
class="password-field mr-2 caption" |
|
|
|
|
style="max-width: 230px" |
|
|
|
|
:type="showShareLinkPassword ? 'text' : 'password'" |
|
|
|
|
:hint="$t('placeholder.password.enter')" |
|
|
|
|
persistent-hint |
|
|
|
|
dense |
|
|
|
|
solo |
|
|
|
|
flat |
|
|
|
|
> |
|
|
|
|
<template #append> |
|
|
|
|
<v-icon small @click="showShareLinkPassword = !showShareLinkPassword"> |
|
|
|
|
{{ showShareLinkPassword ? 'visibility_off' : 'visibility' }} |
|
|
|
|
</v-icon> |
|
|
|
|
</template> |
|
|
|
|
</v-text-field> |
|
|
|
|
<v-btn color="primary" class="caption" small @click="saveShareLinkPassword"> |
|
|
|
|
<!-- Save password --> |
|
|
|
|
{{ $t('placeholder.password.save') }} |
|
|
|
|
</v-btn> |
|
|
|
|
</div> |
|
|
|
|
<v-checkbox |
|
|
|
|
v-if="selectedView && selectedView.type === viewTypes.GRID" |
|
|
|
|
v-model="allowCSVDownload" |
|
|
|
|
class="caption" |
|
|
|
|
label="Allow Download" |
|
|
|
|
hide-details |
|
|
|
|
dense |
|
|
|
|
@change="onAllowCSVDownloadChange" |
|
|
|
|
/> |
|
|
|
|
</v-expansion-panel-content> |
|
|
|
|
</v-expansion-panel> |
|
|
|
|
</v-expansion-panels> |
|
|
|
|
</v-container> |
|
|
|
|
</v-card> |
|
|
|
|
</v-dialog> |
|
|
|
@ -410,6 +429,7 @@ export default {
|
|
|
|
|
queryParams: Object, |
|
|
|
|
}, |
|
|
|
|
data: () => ({ |
|
|
|
|
advanceOptionsPanel: false, |
|
|
|
|
webhookSliderModal: false, |
|
|
|
|
codeSnippetModal: false, |
|
|
|
|
drag: false, |
|
|
|
@ -425,6 +445,7 @@ export default {
|
|
|
|
|
searchQueryVal: '', |
|
|
|
|
showShareLinkPassword: false, |
|
|
|
|
passwordProtect: false, |
|
|
|
|
allowCSVDownload: true, |
|
|
|
|
sharedViewPassword: '', |
|
|
|
|
overAdvShieldIcon: false, |
|
|
|
|
overShieldIcon: false, |
|
|
|
@ -611,6 +632,9 @@ export default {
|
|
|
|
|
this.saveShareLinkPassword(); |
|
|
|
|
} |
|
|
|
|
}, |
|
|
|
|
onAllowCSVDownloadChange() { |
|
|
|
|
this.saveAllowCSVDownload(); |
|
|
|
|
}, |
|
|
|
|
async saveShareLinkPassword() { |
|
|
|
|
try { |
|
|
|
|
await this.$api.dbViewShare.update(this.shareLink.id, { |
|
|
|
@ -632,6 +656,27 @@ export default {
|
|
|
|
|
|
|
|
|
|
this.$e('a:view:share:enable-pwd'); |
|
|
|
|
}, |
|
|
|
|
async saveAllowCSVDownload() { |
|
|
|
|
try { |
|
|
|
|
const meta = |
|
|
|
|
this.shareLink.meta && typeof this.shareLink.meta === 'string' |
|
|
|
|
? JSON.parse(this.shareLink.meta) |
|
|
|
|
: this.shareLink.meta; |
|
|
|
|
|
|
|
|
|
meta.allowCSVDownload = this.allowCSVDownload; |
|
|
|
|
await this.$api.dbViewShare.update(this.shareLink.id, { |
|
|
|
|
meta, |
|
|
|
|
}); |
|
|
|
|
this.$toast.success('Successfully updated').goAway(3000); |
|
|
|
|
} catch (e) { |
|
|
|
|
this.$toast.error(await this._extractSdkResponseErrorMsg(e)).goAway(3000); |
|
|
|
|
} |
|
|
|
|
if (this.allowCSVDownload) { |
|
|
|
|
this.$e('a:view:share:enable-csv-download'); |
|
|
|
|
} else { |
|
|
|
|
this.$e('a:view:share:disable-csv-download'); |
|
|
|
|
} |
|
|
|
|
}, |
|
|
|
|
async loadViews() { |
|
|
|
|
// this.viewsList = await this.sqlOp( |
|
|
|
|
// { |
|
|
|
@ -725,34 +770,12 @@ export default {
|
|
|
|
|
this.$e('a:view:delete', { view: view.type }); |
|
|
|
|
}, |
|
|
|
|
async genShareLink() { |
|
|
|
|
// const sharedViewUrl = await this.$store.dispatch('sqlMgr/ActSqlOp', [ |
|
|
|
|
// { dbAlias: this.nodes.dbAlias }, |
|
|
|
|
// 'createSharedViewLink', |
|
|
|
|
// { |
|
|
|
|
// model_name: this.table, |
|
|
|
|
// // meta: this.meta, |
|
|
|
|
// query_params: { |
|
|
|
|
// where: this.concatenatedXWhere, |
|
|
|
|
// sort: this.sort, |
|
|
|
|
// fields: Object.keys(this.showFields) |
|
|
|
|
// .filter(f => this.showFields[f]) |
|
|
|
|
// .join(','), |
|
|
|
|
// showFields: this.showFields, |
|
|
|
|
// fieldsOrder: this.fieldsOrder, |
|
|
|
|
// extraViewParams: this.extraViewParams, |
|
|
|
|
// selectedViewId: this.selectedViewId, |
|
|
|
|
// columnsWidth: this.columnsWidth |
|
|
|
|
// }, |
|
|
|
|
// view_name: this.selectedView.title, |
|
|
|
|
// type: this.selectedView.type, |
|
|
|
|
// show_as: this.selectedView.show_as, |
|
|
|
|
// password: this.sharedViewPassword |
|
|
|
|
// } |
|
|
|
|
// ]) |
|
|
|
|
const shared = await this.$api.dbViewShare.create(this.selectedViewId); |
|
|
|
|
|
|
|
|
|
shared.meta = shared.meta && typeof shared.meta === 'string' ? JSON.parse(shared.meta) : shared.meta; |
|
|
|
|
// todo: url |
|
|
|
|
this.shareLink = shared; |
|
|
|
|
this.passwordProtect = shared.password !== null; |
|
|
|
|
this.allowCSVDownload = shared.meta.allowCSVDownload; |
|
|
|
|
this.showShareModel = true; |
|
|
|
|
}, |
|
|
|
|
copyView(view, i) { |
|
|
|
@ -903,4 +926,7 @@ export default {
|
|
|
|
|
opacity: 0.5; |
|
|
|
|
background: grey; |
|
|
|
|
} |
|
|
|
|
.mx-auto .v-expansion-panel { |
|
|
|
|
background: var(--v-backgroundColor-base); |
|
|
|
|
} |
|
|
|
|
</style> |
|
|
|
|