Browse Source

Merge pull request #271 from wingkwong/feat/i18n

feat: add i18n to authTab & xcMeta
pull/275/head
o1lab 3 years ago committed by GitHub
parent
commit
bac9de1c31
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 51
      packages/nc-gui/components/authTab.vue
  2. 285
      packages/nc-gui/components/project/settings/xcMeta.vue
  3. 16
      packages/nc-gui/static/lang/en.json
  4. 16
      packages/nc-gui/static/lang/ja.json
  5. 16
      packages/nc-gui/static/lang/zh.json

51
packages/nc-gui/components/authTab.vue

@ -1,58 +1,67 @@
<template> <template>
<div class="h-100"> <div class="h-100">
<div class="h-100" style="width: 100%"> <div class="h-100" style="width: 100%">
<v-tabs height="30" color="x-active"> <v-tabs height="30" color="x-active">
<v-tab><span class="caption text-capitalize">Users Management</span></v-tab> <v-tab
><span class="caption text-capitalize">
<!-- Users Management -->
{{ $t('management.tabs.user') }}
</span></v-tab
>
<v-tab-item class="h-100"> <v-tab-item class="h-100">
<user-management :nodes="nodes"></user-management> <user-management :nodes="nodes"></user-management>
</v-tab-item> </v-tab-item>
<template v-if="_isUIAllowed('apiTokenTab')"> <template v-if="_isUIAllowed('apiTokenTab')">
<v-tab><span class="caption text-capitalize">API Tokens Management</span></v-tab> <v-tab
><span class="caption text-capitalize">
<!-- API Tokens Management -->
{{ $t('management.tabs.api') }}
</span></v-tab
>
<v-tab-item> <v-tab-item>
<api-tokens :nodes="nodes"></api-tokens> <api-tokens :nodes="nodes"></api-tokens>
</v-tab-item> </v-tab-item>
</template> </template>
<v-tab><span class="caption text-capitalize">Roles Management</span></v-tab> <v-tab
><span class="caption text-capitalize">
<!-- Roles Management -->
{{ $t('management.tabs.roles') }}
</span></v-tab
>
<v-tab-item> <v-tab-item>
<roles :nodes="nodes"></roles> <roles :nodes="nodes"></roles>
</v-tab-item> </v-tab-item>
<!-- <v-tab><span class="caption text-capitalize">Auth Management</span></v-tab> <!-- <v-tab><span class="caption text-capitalize">Auth Management</span></v-tab>
<v-tab-item> <v-tab-item>
<auth-hooks :nodes="nodes"></auth-hooks> <auth-hooks :nodes="nodes"></auth-hooks>
</v-tab-item>--> </v-tab-item>-->
</v-tabs> </v-tabs>
</div> </div>
</div> </div>
</template> </template>
<script> <script>
import DlgLabelSubmitCancel from "@/components/utils/dlgLabelSubmitCancel"; import DlgLabelSubmitCancel from '@/components/utils/dlgLabelSubmitCancel';
import UserManagement from "@/components/auth/userManagement"; import UserManagement from '@/components/auth/userManagement';
import Roles from "@/components/auth/roles"; import Roles from '@/components/auth/roles';
import AuthHooks from "@/components/auth/authHooks"; import AuthHooks from '@/components/auth/authHooks';
import ApiTokens from "@/components/auth/apiTokens"; import ApiTokens from '@/components/auth/apiTokens';
export default { export default {
components: {ApiTokens, AuthHooks, Roles, UserManagement, DlgLabelSubmitCancel}, components: { ApiTokens, AuthHooks, Roles, UserManagement, DlgLabelSubmitCancel },
props: ['nodes'], props: ['nodes'],
name: "auth-tab", name: 'auth-tab',
data: () => ({ data: () => ({
showConfirmDlg: false, showConfirmDlg: false,
}), }),
async created() { async created() {},
}, methods: {},
methods: {} };
}
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
::v-deep { ::v-deep {
//.v-tabs-bar { //.v-tabs-bar {
// border-bottom: solid 1px var(--v-primary-lighten2); // border-bottom: solid 1px var(--v-primary-lighten2);
//} //}
@ -72,7 +81,6 @@ export default {
} }
} }
} }
} }
</style> </style>
<!-- <!--
@ -81,6 +89,7 @@ export default {
* *
* @author Naveen MR <oof1lab@gmail.com> * @author Naveen MR <oof1lab@gmail.com>
* @author Pranav C Balan <pranavxc@gmail.com> * @author Pranav C Balan <pranavxc@gmail.com>
* @author Wing-Kam Wong <wingkwong.code@gmail.com>
* *
* @license GNU AGPL version 3 or any later version * @license GNU AGPL version 3 or any later version
* *

285
packages/nc-gui/components/project/settings/xcMeta.vue

@ -1,8 +1,9 @@
<template> <template>
<div> <div>
<h3 class="text-center mb-5 grey--text text--darken-2">
<h3 class="text-center mb-5 grey--text text--darken-2">Metadata Operations</h3> <!-- Metadata Operations -->
{{ $t('management.meta.title') }}
</h3>
<v-simple-table class="ma-2 meta-table text-center mx-auto"> <v-simple-table class="ma-2 meta-table text-center mx-auto">
<!-- <thead>--> <!-- <thead>-->
@ -11,78 +12,121 @@
<!-- </tr>--> <!-- </tr>-->
<!-- </thead>--> <!-- </thead>-->
<tbody> <tbody>
<tr>
<td>
<!-- Export all metadata from the meta tables to meta directory. -->
{{ $t('management.meta.operation_1.desc') }}
</td>
<td>
<v-btn
min-width="150"
color="primary"
small
outlined
@click="exportMeta"
:loading="loading === 'export-file'"
>
<v-icon small>mdi-export</v-icon>&nbsp;
<!-- Export to file -->
{{ $t('management.meta.operation_1') }}
</v-btn>
</td>
</tr>
<tr> <tr>
<td>Export all metadata from the meta tables to meta directory.</td> <td>
<td> <!-- Import all metadata from the meta directory to meta tables. -->
<v-btn min-width="150" color="primary" small outlined @click="exportMeta" {{ $t('management.meta.operation_2.desc') }}
:loading="loading === 'export-file'"> </td>
<v-icon small>mdi-export</v-icon>&nbsp; <td>
Export to file <v-btn
</v-btn> :loading="loading === 'import-file'"
</td> min-width="150"
</tr> color="info"
small
<tr> outlined
<td>Import all metadata from the meta directory to meta tables.</td> @click="importMeta"
<td> >
<v-btn <v-icon small>mdi-import</v-icon>&nbsp;
:loading="loading === 'import-file'"
min-width="150" color="info" small outlined @click="importMeta">
<v-icon small>mdi-import</v-icon>&nbsp;
Import
</v-btn>
</td>
</tr>
<tr>
<td>Export project meta to zip file and download.</td>
<td>
<v-btn min-width="150"
color="primary"
small
outlined
:loading="loading === 'export-zip'"
@click="exportMetaZip();">
<v-icon small>mdi-export</v-icon>&nbsp;
Export zip
</v-btn>
</td>
</tr>
<tr>
<td>Import project meta zip file and restart.</td>
<td>
<v-btn min-width="150"
:loading="loading === 'import-zip'"
color="info" small outlined @click="$refs.importFile.click()">
<v-icon small>mdi-import</v-icon>&nbsp;
Import Zip
</v-btn>
<input type="file" accept=".zip" @change="importMetaZip" v-show="false" ref="importFile"> <!-- Import -->
{{ $t('management.meta.operation_2') }}
</v-btn>
</td>
</tr>
</td> <tr>
</tr> <td>
<tr> <!-- Export project meta to zip file and download. -->
<td>Clear all metadata from meta tables.</td> {{ $t('management.meta.operation_3.desc') }}
<td> </td>
<v-btn <td>
:loading="loading === 'reset-metadata'" min-width="150" color="error" small outlined @click="resetMeta"> <v-btn
<v-icon small>mdi-delete-variant</v-icon>&nbsp; min-width="150"
Reset color="primary"
</v-btn> small
</td> outlined
:loading="loading === 'export-zip'"
@click="exportMetaZip()"
>
<v-icon small>mdi-export</v-icon>&nbsp;
<!-- Export zip -->
{{ $t('management.meta.operation_3') }}
</v-btn>
</td>
</tr>
<tr>
<td>
<!-- Import project meta zip file and restart. -->
{{ $t('management.meta.operation_4.desc') }}
</td>
<td>
<v-btn
min-width="150"
:loading="loading === 'import-zip'"
color="info"
small
outlined
@click="$refs.importFile.click()"
>
<v-icon small>mdi-import</v-icon>&nbsp;
</tr> <!-- Import Zip -->
{{ $t('management.meta.operation_4') }}
</v-btn>
<input
type="file"
accept=".zip"
@change="importMetaZip"
v-show="false"
ref="importFile"
/>
</td>
</tr>
<tr>
<td>
<!-- Clear all metadata from meta tables. -->
{{ $t('management.meta.operation_5.desc') }}
</td>
<td>
<v-btn
:loading="loading === 'reset-metadata'"
min-width="150"
color="error"
small
outlined
@click="resetMeta"
>
<v-icon small>mdi-delete-variant</v-icon>&nbsp;
<!-- Reset -->
{{ $t('management.meta.operation_5') }}
</v-btn>
</td>
</tr>
</tbody> </tbody>
</v-simple-table> </v-simple-table>
<dlg-label-submit-cancel <dlg-label-submit-cancel
type="primary" type="primary"
v-if="dialogShow" v-if="dialogShow"
@ -90,18 +134,15 @@
:dialogShow="dialogShow" :dialogShow="dialogShow"
:heading="confirmMessage" :heading="confirmMessage"
> >
</dlg-label-submit-cancel> </dlg-label-submit-cancel>
</div> </div>
</template> </template>
<script> <script>
import DlgLabelSubmitCancel from '@/components/utils/dlgLabelSubmitCancel';
import DlgLabelSubmitCancel from "@/components/utils/dlgLabelSubmitCancel";
export default { export default {
name: "xc-meta", name: 'xc-meta',
components: { components: {
DlgLabelSubmitCancel, DlgLabelSubmitCancel,
}, },
@ -109,23 +150,25 @@ export default {
loading: null, loading: null,
dialogShow: false, dialogShow: false,
confirmAction: null, confirmAction: null,
confirmMessage: '' confirmMessage: '',
}), }),
methods: { methods: {
async exportMeta() { async exportMeta() {
this.dialogShow = true; this.dialogShow = true;
this.confirmMessage = 'Do you want to export metadata from meta tables?'; this.confirmMessage = 'Do you want to export metadata from meta tables?';
this.confirmAction = async (act) => { this.confirmAction = async act => {
if (act === 'hideDialog') { if (act === 'hideDialog') {
this.dialogShow = false; this.dialogShow = false;
} else { } else {
this.loading = 'export-file'; this.loading = 'export-file';
try { try {
await this.$store.dispatch('sqlMgr/ActSqlOp', [
await this.$store.dispatch('sqlMgr/ActSqlOp', [{ {
// dbAlias: 'db', // dbAlias: 'db',
env: 'dev' env: 'dev',
}, 'xcMetaTablesExportDbToLocalFs']); },
'xcMetaTablesExportDbToLocalFs',
]);
this.$toast.success('Successfully exported metadata').goAway(3000); this.$toast.success('Successfully exported metadata').goAway(3000);
} catch (e) { } catch (e) {
this.$toast.error('Some internal error occurred').goAway(3000); this.$toast.error('Some internal error occurred').goAway(3000);
@ -133,25 +176,31 @@ export default {
this.dialogShow = false; this.dialogShow = false;
this.loading = null; this.loading = null;
} }
};
} },
}, async exportMetaZip() { async exportMetaZip() {
this.dialogShow = true; this.dialogShow = true;
this.confirmMessage = 'Do you want to export metadata from meta tables?'; this.confirmMessage = 'Do you want to export metadata from meta tables?';
this.confirmAction = async (act) => { this.confirmAction = async act => {
if (act === 'hideDialog') { if (act === 'hideDialog') {
this.dialogShow = false; this.dialogShow = false;
} else { } else {
this.loading = 'export-zip'; this.loading = 'export-zip';
let data; let data;
try { try {
data = await this.$store.dispatch('sqlMgr/ActSqlOp', [{ data = await this.$store.dispatch('sqlMgr/ActSqlOp', [
// dbAlias: 'db', {
env: 'dev' // dbAlias: 'db',
}, 'xcMetaTablesExportDbToZip', null, null, { env: 'dev',
responseType: 'blob' },
}]); 'xcMetaTablesExportDbToZip',
const url = window.URL.createObjectURL(new Blob([data], {type: 'application/zip'})); null,
null,
{
responseType: 'blob',
},
]);
const url = window.URL.createObjectURL(new Blob([data], { type: 'application/zip' }));
const link = document.createElement('a'); const link = document.createElement('a');
link.href = url; link.href = url;
link.setAttribute('download', 'meta.zip'); //or any other extension link.setAttribute('download', 'meta.zip'); //or any other extension
@ -164,56 +213,58 @@ export default {
this.dialogShow = false; this.dialogShow = false;
this.loading = null; this.loading = null;
} }
} };
}, },
async resetMeta() { async resetMeta() {
this.dialogShow = true; this.dialogShow = true;
this.confirmMessage = 'Do you want to clear metadata from meta tables?'; this.confirmMessage = 'Do you want to clear metadata from meta tables?';
this.confirmAction = async (act) => { this.confirmAction = async act => {
if (act === 'hideDialog') { if (act === 'hideDialog') {
this.dialogShow = false; this.dialogShow = false;
} else { } else {
this.loading = 'reset-metadata'; this.loading = 'reset-metadata';
try { try {
await this.$store.dispatch('sqlMgr/ActSqlOp', [{ await this.$store.dispatch('sqlMgr/ActSqlOp', [
// dbAlias: 'db', {
env: 'dev' // dbAlias: 'db',
}, 'xcMetaTablesReset',]); env: 'dev',
this.$toast.success('Metadata cleared successfully').goAway(3000) },
'xcMetaTablesReset',
]);
this.$toast.success('Metadata cleared successfully').goAway(3000);
} catch (e) { } catch (e) {
this.$toast.error('Some internal error occurred').goAway(3000); this.$toast.error('Some internal error occurred').goAway(3000);
} }
this.dialogShow = false; this.dialogShow = false;
this.loading = null; this.loading = null;
} }
};
}
}, },
async importMeta() { async importMeta() {
this.dialogShow = true; this.dialogShow = true;
this.confirmMessage = 'Do you want to import metadata from meta directory?'; this.confirmMessage = 'Do you want to import metadata from meta directory?';
this.confirmAction = async (act) => { this.confirmAction = async act => {
if (act === 'hideDialog') { if (act === 'hideDialog') {
this.dialogShow = false; this.dialogShow = false;
} else { } else {
this.loading = 'import-file'; this.loading = 'import-file';
try { try {
await this.$store.dispatch('sqlMgr/ActSqlOp', [{ await this.$store.dispatch('sqlMgr/ActSqlOp', [
env: 'dev' {
}, 'xcMetaTablesImportLocalFsToDb']); env: 'dev',
},
'xcMetaTablesImportLocalFsToDb',
]);
this.$toast.success('Metadata imported successfully').goAway(3000) this.$toast.success('Metadata imported successfully').goAway(3000);
} catch (e) { } catch (e) {
this.$toast.error('Some internal error occurred').goAway(3000); this.$toast.error('Some internal error occurred').goAway(3000);
} }
this.dialogShow = false; this.dialogShow = false;
this.loading = null; this.loading = null;
} }
};
}
}, },
async importMetaZip() { async importMetaZip() {
if (this.$refs.importFile && this.$refs.importFile.files && this.$refs.importFile.files[0]) { if (this.$refs.importFile && this.$refs.importFile.files && this.$refs.importFile.files[0]) {
@ -221,10 +272,15 @@ export default {
this.loading = 'import-zip'; this.loading = 'import-zip';
try { try {
this.$refs.importFile.value = ''; this.$refs.importFile.value = '';
await this.$store.dispatch('sqlMgr/ActUpload', [{ await this.$store.dispatch('sqlMgr/ActUpload', [
// dbAlias: 'db', {
env: 'dev' // dbAlias: 'db',
}, 'xcMetaTablesImportZipToLocalFsAndDb', {}, zipFile]); env: 'dev',
},
'xcMetaTablesImportZipToLocalFsAndDb',
{},
zipFile,
]);
this.$toast.success('Successfully imported metadata').goAway(3000); this.$toast.success('Successfully imported metadata').goAway(3000);
} catch (e) { } catch (e) {
this.$toast.error('Some internal error occurred').goAway(3000); this.$toast.error('Some internal error occurred').goAway(3000);
@ -233,8 +289,8 @@ export default {
this.loading = null; this.loading = null;
} }
}, },
} },
} };
</script> </script>
<style scoped> <style scoped>
@ -248,6 +304,7 @@ export default {
* *
* @author Naveen MR <oof1lab@gmail.com> * @author Naveen MR <oof1lab@gmail.com>
* @author Pranav C Balan <pranavxc@gmail.com> * @author Pranav C Balan <pranavxc@gmail.com>
* @author Wing-Kam Wong <wingkwong.code@gmail.com>
* *
* @license GNU AGPL version 3 or any later version * @license GNU AGPL version 3 or any later version
* *

16
packages/nc-gui/static/lang/en.json

@ -112,5 +112,19 @@
"nav_drawer.share_view.toggle.option1": "Restrict access with a password", "nav_drawer.share_view.toggle.option1": "Restrict access with a password",
"nav_drawer.share_view.toggle.option2": "Access is password restricted", "nav_drawer.share_view.toggle.option2": "Access is password restricted",
"nav_drawer.share_view.password.caption": "Enter the password", "nav_drawer.share_view.password.caption": "Enter the password",
"nav_drawer.share_view.password.button": "Save password" "nav_drawer.share_view.password.button": "Save password",
"management.tabs.user": "Users Management",
"management.tabs.api": "API Tokens Management",
"management.tabs.roles": "Roles Management",
"management.meta.title": "Metadata Operations",
"management.meta.operation_1": "Export to file",
"management.meta.operation_2": "Import",
"management.meta.operation_3": "Export zip",
"management.meta.operation_4": "Import zip",
"management.meta.operation_5": "Reset",
"management.meta.operation_1.desc": "Export all metadata from the meta tables to meta directory.",
"management.meta.operation_2.desc": "Import all metadata from the meta directory to meta tables.",
"management.meta.operation_3.desc": "Export project meta to zip file and download.",
"management.meta.operation_4.desc": "Import project meta zip file and restart.",
"management.meta.operation_5.desc": "Clear all metadata from meta tables."
} }

16
packages/nc-gui/static/lang/ja.json

@ -112,5 +112,19 @@
"nav_drawer.share_view.toggle.option1": "Restrict access with a password", "nav_drawer.share_view.toggle.option1": "Restrict access with a password",
"nav_drawer.share_view.toggle.option2": "Access is password restricted", "nav_drawer.share_view.toggle.option2": "Access is password restricted",
"nav_drawer.share_view.password.caption": "Enter the password", "nav_drawer.share_view.password.caption": "Enter the password",
"nav_drawer.share_view.password.button": "Save password" "nav_drawer.share_view.password.button": "Save password",
"management.tabs.user": "Users Management",
"management.tabs.api": "API Tokens Management",
"management.tabs.roles": "Roles Management",
"management.meta.title": "Metadata Operations",
"management.meta.operation_1": "Export to file",
"management.meta.operation_2": "Import",
"management.meta.operation_3": "Export zip",
"management.meta.operation_4": "Import zip",
"management.meta.operation_5": "Reset",
"management.meta.operation_1.desc": "Export all metadata from the meta tables to meta directory.",
"management.meta.operation_2.desc": "Import all metadata from the meta directory to meta tables.",
"management.meta.operation_3.desc": "Export project meta to zip file and download.",
"management.meta.operation_4.desc": "Import project meta zip file and restart.",
"management.meta.operation_5.desc": "Clear all metadata from meta tables."
} }

16
packages/nc-gui/static/lang/zh.json

@ -112,6 +112,20 @@
"nav_drawer.share_view.toggle.option1": "Restrict access with a password", "nav_drawer.share_view.toggle.option1": "Restrict access with a password",
"nav_drawer.share_view.toggle.option2": "Access is password restricted", "nav_drawer.share_view.toggle.option2": "Access is password restricted",
"nav_drawer.share_view.password.caption": "Enter the password", "nav_drawer.share_view.password.caption": "Enter the password",
"nav_drawer.share_view.password.button": "Save password" "nav_drawer.share_view.password.button": "Save password",
"management.tabs.user": "Users Management",
"management.tabs.api": "API Tokens Management",
"management.tabs.roles": "Roles Management",
"management.meta.title": "Metadata Operations",
"management.meta.operation_1": "Export to file",
"management.meta.operation_2": "Import",
"management.meta.operation_3": "Export zip",
"management.meta.operation_4": "Import zip",
"management.meta.operation_5": "Reset",
"management.meta.operation_1.desc": "Export all metadata from the meta tables to meta directory.",
"management.meta.operation_2.desc": "Import all metadata from the meta directory to meta tables.",
"management.meta.operation_3.desc": "Export project meta to zip file and download.",
"management.meta.operation_4.desc": "Import project meta zip file and restart.",
"management.meta.operation_5.desc": "Clear all metadata from meta tables."
} }
Loading…
Cancel
Save