Add support to translations (Tab Translations). (#229)
* Support to translations in ADempiere Vue. * change popover to translation and add vuex store * Add structure from vuex store to get translations. * Add update translations with language.pull/3759/head
parent
45b53ab6ea
commit
8e771a01e8
|
@ -45,7 +45,7 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"@adempiere/grpc-access-client": "^1.1.8",
|
||||
"@adempiere/grpc-data-client": "^1.8.7",
|
||||
"@adempiere/grpc-data-client": "^1.8.8",
|
||||
"@adempiere/grpc-dictionary-client": "^1.3.5",
|
||||
"@adempiere/grpc-enrollment-client": "^1.0.7",
|
||||
"autoprefixer": "^9.5.1",
|
||||
|
|
|
@ -80,12 +80,12 @@ export function getEntity({ tableName, recordId, recordUuid }) {
|
|||
* @param {string} orderByClause
|
||||
* @param {string} nextPageToken
|
||||
*/
|
||||
export function getEntitiesList({ tableName, query, whereClause, conditions = [], orderByClause, nextPageToken }) {
|
||||
export function getEntitiesList({ tableName, query, whereClause, conditions: conditionsList = [], orderByClause, nextPageToken }) {
|
||||
return Instance.call(this).requestEntitiesList({
|
||||
tableName,
|
||||
query,
|
||||
whereClause,
|
||||
conditionsList: conditions,
|
||||
conditionsList,
|
||||
orderByClause,
|
||||
nextPageToken
|
||||
})
|
||||
|
@ -148,7 +148,7 @@ export function getLookupList({ tableName, query }) {
|
|||
}]
|
||||
* @param {string} printFormatUuid
|
||||
*/
|
||||
export function runProcess({ uuid, reportType, tableName, recordId, parameters: parametersList = [], selection = [], printFormatUuid }) {
|
||||
export function runProcess({ uuid, reportType, tableName, recordId, parameters: parametersList = [], selection: selectionsList = [], printFormatUuid }) {
|
||||
// Run Process
|
||||
return Instance.call(this).requestRunProcess({
|
||||
uuid,
|
||||
|
@ -156,7 +156,7 @@ export function runProcess({ uuid, reportType, tableName, recordId, parameters:
|
|||
tableName,
|
||||
recordId,
|
||||
parametersList,
|
||||
selectionsList: selection,
|
||||
selectionsList,
|
||||
printFormatUuid
|
||||
})
|
||||
}
|
||||
|
@ -244,7 +244,7 @@ export function getDefaultValueFromServer(query) {
|
|||
}
|
||||
|
||||
export function getContextInfoValueFromServer({ uuid, query }) {
|
||||
return Instance.call(this).getContextInfoValue({ uuid: uuid, query: query })
|
||||
return Instance.call(this).getContextInfoValue({ uuid, query })
|
||||
}
|
||||
|
||||
export function getPrivateAccessFromServer({ tableName, recordId, userUuid }) {
|
||||
|
@ -314,6 +314,22 @@ export function requestLanguages() {
|
|||
return Instance.call(this).requestLanguages()
|
||||
}
|
||||
|
||||
/**
|
||||
* Request translations
|
||||
* @param {string} tableName
|
||||
* @param {string} language
|
||||
* @param {string} recordUuid
|
||||
* @param {integer} recordId
|
||||
*/
|
||||
export function requestTranslations({ tableName, language, recordUuid, recordId }) {
|
||||
return Instance.call(this).requestTranslations({
|
||||
tableName,
|
||||
recordUuid,
|
||||
recordId,
|
||||
language
|
||||
})
|
||||
}
|
||||
|
||||
export function requestDrillTables(tableName) {
|
||||
return Instance.call(this).requestDrillTables(tableName)
|
||||
}
|
||||
|
|
|
@ -0,0 +1,199 @@
|
|||
<template>
|
||||
<span>
|
||||
<el-popover
|
||||
ref="translatedField"
|
||||
placement="top"
|
||||
width="300"
|
||||
trigger="click"
|
||||
@show="getTranslation"
|
||||
>
|
||||
<div>
|
||||
<span class="custom-tittle-popover">
|
||||
{{ name }}
|
||||
</span>
|
||||
<template v-if="!isEmptyValue(help)">
|
||||
: {{ help }}
|
||||
</template>
|
||||
</div>
|
||||
<el-form-item
|
||||
:required="true"
|
||||
>
|
||||
<template slot="label">
|
||||
{{ $t('language') + ':' }}
|
||||
</template>
|
||||
<el-select
|
||||
v-model="langValue"
|
||||
size="medium"
|
||||
style="width: 100%;"
|
||||
filterable
|
||||
@change="getTranslation"
|
||||
>
|
||||
<!-- <el-option
|
||||
key="blank-option"
|
||||
:value="undefined"
|
||||
label=" "
|
||||
/> -->
|
||||
<el-option
|
||||
v-for="(optionLang, key) in languageList"
|
||||
:key="key"
|
||||
:value="optionLang.language"
|
||||
:label="optionLang.languageName"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
label="Translated Value:"
|
||||
:required="true"
|
||||
>
|
||||
<el-input
|
||||
v-model="translatedValue"
|
||||
:disabled="isEmptyValue(langValue)"
|
||||
@change="changeTranslationValue"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-popover>
|
||||
<svg-icon
|
||||
v-popover:translatedField
|
||||
class-name="international-icon"
|
||||
icon-class="language"
|
||||
/>
|
||||
</span>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { getLanguage } from '@/lang/index'
|
||||
|
||||
export default {
|
||||
name: 'FieldTranslated',
|
||||
props: {
|
||||
containerUuid: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
columnName: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
name: {
|
||||
type: String,
|
||||
default: undefined
|
||||
},
|
||||
help: {
|
||||
type: String,
|
||||
default: undefined
|
||||
},
|
||||
recordUuid: {
|
||||
type: String,
|
||||
default: undefined
|
||||
},
|
||||
tableName: {
|
||||
type: String,
|
||||
required: true
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
langValue: undefined,
|
||||
translatedValue: '',
|
||||
isLoading: false
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
languageList() {
|
||||
return this.$store.getters.getLanguagesList.filter(itemLanguage => {
|
||||
return !itemLanguage.isBaseLanguage
|
||||
})
|
||||
},
|
||||
icon() {
|
||||
if (this.isLoading) {
|
||||
return 'el-icon-loading'
|
||||
}
|
||||
return 'el-icon-refresh'
|
||||
},
|
||||
getterTranslationValues() {
|
||||
const values = this.$store.getters.getTranslationByLanguage({
|
||||
containerUuid: this.containerUuid,
|
||||
language: this.langValue,
|
||||
recordUuid: this.recordUuid
|
||||
})
|
||||
if (this.isEmptyValue(values)) {
|
||||
return undefined
|
||||
}
|
||||
return values
|
||||
},
|
||||
gettterValue() {
|
||||
const values = this.getterTranslationValues
|
||||
if (this.isEmptyValue(values)) {
|
||||
return undefined
|
||||
}
|
||||
return values[this.columnName]
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
gettterValue(newValue, oldValue) {
|
||||
this.translatedValue = newValue
|
||||
}
|
||||
},
|
||||
created() {
|
||||
let langMatch = this.languageList.find(itemLanguage => {
|
||||
return itemLanguage.languageISO === getLanguage()
|
||||
})
|
||||
if (langMatch) {
|
||||
langMatch = langMatch.language
|
||||
} else {
|
||||
langMatch = this.languageList[0].language
|
||||
}
|
||||
this.langValue = langMatch
|
||||
},
|
||||
methods: {
|
||||
getTranslation() {
|
||||
if (this.isEmptyValue(this.getterTranslationValues)) {
|
||||
this.getTranslationsFromServer()
|
||||
}
|
||||
},
|
||||
getTranslationsFromServer() {
|
||||
this.isLoading = true
|
||||
this.$store.dispatch('getTranslationsFromServer', {
|
||||
containerUuid: this.containerUuid,
|
||||
recordUuid: this.recordUuid,
|
||||
tableName: this.tableName,
|
||||
language: this.langValue
|
||||
})
|
||||
.finally(() => {
|
||||
this.isLoading = false
|
||||
})
|
||||
},
|
||||
changeTranslationValue(value) {
|
||||
this.$store.dispatch('changeTranslationValue', {
|
||||
containerUuid: this.containerUuid,
|
||||
language: this.langValue,
|
||||
columnName: this.columnName,
|
||||
value
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.custom-tittle-popover {
|
||||
font-size: 14px;
|
||||
font-weight: bold;
|
||||
}
|
||||
</style>
|
||||
<style lang="scss">
|
||||
/**
|
||||
* Separation between elements (item) of the form
|
||||
*/
|
||||
.el-form-item {
|
||||
margin-bottom: 10px !important;
|
||||
margin-left: 10px;
|
||||
margin-right: 10px;
|
||||
}
|
||||
/**
|
||||
* Reduce the spacing between the form element and its label
|
||||
*/
|
||||
.el-form--label-top .el-form-item__label {
|
||||
padding-bottom: 0px !important;
|
||||
}
|
||||
</style>
|
|
@ -24,27 +24,48 @@
|
|||
width="300"
|
||||
trigger="click"
|
||||
>
|
||||
<p v-if="field.contextInfo && field.contextInfo.isActive" class="pre-formatted" v-html="field.contextInfo.messageText.msgText" />
|
||||
<template v-if="field.reference.zoomWindowList.length">
|
||||
<div class="el-popover__title"> {{ $t('table.ProcessActivity.zoomIn') }}</div>
|
||||
<template v-for="(zoomItem, index) in field.reference.zoomWindowList">
|
||||
<el-button :key="index" type="text" @click="redirect({ window: zoomItem, columnName: field.columnName, value: field.value })">{{ zoomItem.name }}</el-button>
|
||||
</template>
|
||||
<p
|
||||
class="pre-formatted"
|
||||
v-html="field.contextInfo.messageText.msgText"
|
||||
/>
|
||||
<div class="el-popover__title">
|
||||
{{ $t('table.ProcessActivity.zoomIn') }}
|
||||
</div>
|
||||
<template v-for="(zoomItem, index) in field.reference.zoomWindowList">
|
||||
<el-button
|
||||
:key="index"
|
||||
type="text"
|
||||
@click="redirect({ window: zoomItem, columnName: field.columnName, value: field.value })"
|
||||
>
|
||||
{{ zoomItem.name }}
|
||||
</el-button>
|
||||
</template>
|
||||
</el-popover>
|
||||
<el-form-item
|
||||
v-popover:contextOptions
|
||||
:label="isFieldOnly()"
|
||||
:required="isMandatory()"
|
||||
>
|
||||
<template slot="label">
|
||||
<span v-popover:contextOptions>
|
||||
{{ isFieldOnly() }}
|
||||
</span>
|
||||
<field-translated
|
||||
v-if="field.isTranslated && !isAdvancedQuery"
|
||||
:name="field.name"
|
||||
:help="field.help"
|
||||
:container-uuid="containerUuid"
|
||||
:column-name="field.columnName"
|
||||
:record-uuid="field.optionCRUD"
|
||||
:table-name="field.tableName"
|
||||
/>
|
||||
</template>
|
||||
<component
|
||||
:is="componentRender"
|
||||
:ref="field.columnName"
|
||||
:metadata="{
|
||||
...field,
|
||||
panelType: panelType,
|
||||
inTable: inTable,
|
||||
isAdvancedQuery: isAdvancedQuery,
|
||||
panelType,
|
||||
inTable,
|
||||
isAdvancedQuery,
|
||||
// DOM properties
|
||||
required: isMandatory(),
|
||||
readonly: isReadOnly(),
|
||||
|
@ -62,8 +83,8 @@
|
|||
:class="classField"
|
||||
:metadata="{
|
||||
...field,
|
||||
panelType: panelType,
|
||||
inTable: inTable,
|
||||
panelType,
|
||||
inTable,
|
||||
// DOM properties
|
||||
required: isMandatory(),
|
||||
readonly: isReadOnly(),
|
||||
|
@ -74,6 +95,7 @@
|
|||
</template>
|
||||
|
||||
<script>
|
||||
import FieldTranslated from '@/components/ADempiere/Field/fieldTranslated'
|
||||
import { FIELD_ONLY } from '@/components/ADempiere/Field/references'
|
||||
import { DEFAULT_SIZE } from '@/components/ADempiere/Field/fieldSize'
|
||||
import { fieldIsDisplayed } from '@/utils/ADempiere'
|
||||
|
@ -84,6 +106,9 @@ import { fieldIsDisplayed } from '@/utils/ADempiere'
|
|||
*/
|
||||
export default {
|
||||
name: 'Field',
|
||||
components: {
|
||||
FieldTranslated
|
||||
},
|
||||
props: {
|
||||
parentUuid: {
|
||||
type: String,
|
||||
|
@ -309,9 +334,19 @@ export default {
|
|||
}
|
||||
},
|
||||
redirect({ window, columnName, value }) {
|
||||
this.$store.dispatch('getWindowByUuid', { routes: this.permissionRoutes, windowUuid: window.uuid })
|
||||
var windowRoute = this.$store.getters.getWindowRoute(window.uuid)
|
||||
this.$router.push({ name: windowRoute.name, query: { action: 'advancedQuery', tabParent: 0, [columnName]: value }})
|
||||
this.$store.dispatch('getWindowByUuid', {
|
||||
routes: this.permissionRoutes,
|
||||
windowUuid: window.uuid
|
||||
})
|
||||
const windowRoute = this.$store.getters.getWindowRoute(window.uuid)
|
||||
this.$router.push({
|
||||
name: windowRoute.name,
|
||||
query: {
|
||||
action: 'advancedQuery',
|
||||
tabParent: 0,
|
||||
[columnName]: value
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -326,6 +361,13 @@ export default {
|
|||
margin-left: 10px;
|
||||
margin-right: 10px;
|
||||
}
|
||||
/**
|
||||
* Reduce the spacing between the form element and its label
|
||||
*/
|
||||
.el-form--label-top .el-form-item__label {
|
||||
padding-bottom: 0px !important;
|
||||
}
|
||||
|
||||
.in-table {
|
||||
margin-bottom: 0px !important;
|
||||
margin-left: 0px;
|
||||
|
|
|
@ -40,7 +40,7 @@
|
|||
:container-uuid="containerUuid"
|
||||
:metadata-field="{
|
||||
...fieldAttributes,
|
||||
optionCRUD: optionCRUD
|
||||
optionCRUD
|
||||
}"
|
||||
:record-data-fields="isAdvancedQuery ? undefined : dataRecords[fieldAttributes.columnName]"
|
||||
:panel-type="panelType"
|
||||
|
@ -97,7 +97,7 @@
|
|||
:container-uuid="containerUuid"
|
||||
:metadata-field="{
|
||||
...fieldAttributes,
|
||||
optionCRUD: optionCRUD
|
||||
optionCRUD
|
||||
}"
|
||||
:record-data-fields="isAdvancedQuery ? undefined : dataRecords[fieldAttributes.columnName]"
|
||||
:panel-type="panelType"
|
||||
|
@ -149,7 +149,7 @@
|
|||
:container-uuid="containerUuid"
|
||||
:metadata-field="{
|
||||
...fieldAttributes,
|
||||
optionCRUD: optionCRUD
|
||||
optionCRUD
|
||||
}"
|
||||
:record-data-fields="isAdvancedQuery ? undefined : dataRecords[fieldAttributes.columnName]"
|
||||
:panel-type="panelType"
|
||||
|
@ -339,7 +339,7 @@ export default {
|
|||
}).then(() => {
|
||||
this.generatePanel(this.getterFieldList)
|
||||
}).catch(error => {
|
||||
console.warn(`Field Load Error ${error.code}: ${error.message}`)
|
||||
console.warn(`Field Load Error: ${error.message}. Code: ${error.code}.`)
|
||||
})
|
||||
}
|
||||
},
|
||||
|
@ -349,7 +349,7 @@ export default {
|
|||
if (fieldsList.length) {
|
||||
this.fieldGroups = this.sortAndGroup(fieldsList)
|
||||
}
|
||||
var firstGroup
|
||||
let firstGroup
|
||||
if (this.fieldGroups[0] && this.fieldGroups[0].groupFinal === '') {
|
||||
firstGroup = this.fieldGroups[0]
|
||||
this.fieldGroups.shift()
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
export default {
|
||||
language: 'Language',
|
||||
route: {
|
||||
dashboard: 'Dashboard',
|
||||
calendar: 'Calendar',
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
export default {
|
||||
language: 'Idioma',
|
||||
route: {
|
||||
dashboard: 'Panel de control',
|
||||
documentation: 'Documentación',
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<div class="navbar">
|
||||
<hamburger id="hamburger-container" :is-active="sidebar.opened" class="hamburger-container" @toggleClick="toggleSideBar" />
|
||||
<el-button v-if="isMenuMobile && isMobile" type="text" icon="el-icon-close" style="padding-top: 13px; color: #000000;font-size: 121%;font-weight: 615!important;" @click="isMenuOption()" />
|
||||
<breadcrumb v-show="!isMenuMobile || device!=='mobile'" id="breadcrumb-container" class="breadcrumb-container" :style="isMobile ? { width: '40%'} : { width: 'auto'} " />
|
||||
<breadcrumb v-show="!isMenuMobile || device!=='mobile'" id="breadcrumb-container" class="breadcrumb-container" :style="isMobile ? { width: '40%' } : { width: 'auto' } " />
|
||||
<div v-show="isMenuMobile && isMobile" style="display: inline-flex; float: right;">
|
||||
<search id="header-search" class="right-menu-item" style="padding-top: 10px;" />
|
||||
<badge style="padding-top: 6px;" />
|
||||
|
|
|
@ -0,0 +1,209 @@
|
|||
import {
|
||||
requestLanguages,
|
||||
requestTranslations,
|
||||
updateEntity
|
||||
} from '@/api/ADempiere/data'
|
||||
import { isEmptyValue } from '@/utils/ADempiere/valueUtils'
|
||||
const languageControl = {
|
||||
state: {
|
||||
languagesList: [],
|
||||
translationsList: []
|
||||
},
|
||||
mutations: {
|
||||
setlanguagesList(state, payload) {
|
||||
state.languagesList = payload
|
||||
},
|
||||
// Add data in container
|
||||
addTranslationToList(state, payload) {
|
||||
state.translationsList.push(payload)
|
||||
},
|
||||
addTranslationToRecord(state, payload) {
|
||||
payload.translations.push(payload.translationToAdd)
|
||||
},
|
||||
setTranslationToRecord(state, payload) {
|
||||
payload.currentTranslation.values = payload.newValues
|
||||
},
|
||||
addTranslationChangeRecord(state, payload) {
|
||||
payload.currentTranslation = payload.newTranlation
|
||||
}
|
||||
},
|
||||
actions: {
|
||||
getLanguagesFromServer({ commit }) {
|
||||
return new Promise((resolve, reject) => {
|
||||
requestLanguages()
|
||||
.then(languageResponse => {
|
||||
commit('setlanguagesList', languageResponse.languagesList)
|
||||
resolve(languageResponse.languagesList)
|
||||
})
|
||||
.catch(error => {
|
||||
reject(error)
|
||||
})
|
||||
})
|
||||
},
|
||||
setTranslation({ state, commit }, {
|
||||
containerUuid,
|
||||
tableName,
|
||||
recordUuid,
|
||||
recordId,
|
||||
translations
|
||||
}) {
|
||||
const currentTranslation = state.translationsList.find(itemTrannslation => {
|
||||
return itemTrannslation.containerUuid === containerUuid
|
||||
})
|
||||
|
||||
const newTranlation = {
|
||||
containerUuid,
|
||||
tableName,
|
||||
recordUuid,
|
||||
recordId,
|
||||
translations
|
||||
}
|
||||
if (currentTranslation) {
|
||||
if (currentTranslation.recordUuid === recordUuid) {
|
||||
const translationRecord = currentTranslation.translations.find(itemTrannslation => {
|
||||
return itemTrannslation.language === translations[0].language
|
||||
})
|
||||
if (isEmptyValue(translationRecord)) {
|
||||
commit('addTranslationToRecord', {
|
||||
translations: currentTranslation.translations,
|
||||
translationToAdd: translations[0]
|
||||
})
|
||||
} else {
|
||||
// there is translation for the language and change the values in the translation record
|
||||
commit('setTranslationToRecord', {
|
||||
currentTranslation: translationRecord,
|
||||
newValues: translations[0].values
|
||||
})
|
||||
}
|
||||
} else {
|
||||
// this same container uuid, and other record
|
||||
commit('addTranslationChangeRecord', {
|
||||
currentTranslation,
|
||||
newTranlation
|
||||
})
|
||||
}
|
||||
} else {
|
||||
// no translation has been uploaded to this container uuid
|
||||
commit('addTranslationToList', newTranlation)
|
||||
}
|
||||
},
|
||||
getTranslationsFromServer({ dispatch }, {
|
||||
containerUuid,
|
||||
language,
|
||||
tableName,
|
||||
recordUuid,
|
||||
recordId
|
||||
}) {
|
||||
return requestTranslations({
|
||||
recordUuid,
|
||||
recordId,
|
||||
tableName,
|
||||
language
|
||||
})
|
||||
.then(translationResponse => {
|
||||
if (translationResponse.translationsList.length < 1) {
|
||||
console.warn(translationResponse)
|
||||
return
|
||||
}
|
||||
dispatch('setTranslation', {
|
||||
containerUuid,
|
||||
tableName,
|
||||
recordUuid,
|
||||
recordId,
|
||||
translations: [{
|
||||
language,
|
||||
translationUuid: translationResponse.translationsList[0].translationUuid,
|
||||
values: translationResponse.translationsList[0].values
|
||||
}]
|
||||
})
|
||||
return translationResponse.translationsList[0].values
|
||||
})
|
||||
.catch(error => {
|
||||
console.warn(`Error Get Translations List ${error.message}. Code: ${error.code}.`)
|
||||
})
|
||||
},
|
||||
changeTranslationValue({ state, commit }, {
|
||||
containerUuid,
|
||||
language,
|
||||
columnName,
|
||||
value
|
||||
}) {
|
||||
return new Promise(resolve => {
|
||||
const translationData = state.translationsList.find(itemTranslation => {
|
||||
return itemTranslation.containerUuid === containerUuid
|
||||
})
|
||||
const translationSelected = translationData.translations.find(itemTranslation => {
|
||||
return itemTranslation.language === language
|
||||
})
|
||||
|
||||
const values = translationSelected.values
|
||||
// not change value
|
||||
if (values[columnName] === value) {
|
||||
resolve(value)
|
||||
return value
|
||||
}
|
||||
|
||||
updateEntity({
|
||||
tableName: `${translationData.tableName}_Trl`, // '_Trl' is suffix for translation tables
|
||||
recordUuid: translationSelected.translationUuid,
|
||||
attributesList: [{
|
||||
columnName,
|
||||
value
|
||||
}]
|
||||
})
|
||||
.then(responseEntity => {
|
||||
const newValues = {}
|
||||
Object.keys(values).forEach(key => {
|
||||
newValues[key] = responseEntity.values[key]
|
||||
})
|
||||
commit('setTranslationToRecord', {
|
||||
currentTranslation: translationSelected,
|
||||
newValues
|
||||
})
|
||||
resolve(newValues)
|
||||
})
|
||||
.catch(error => {
|
||||
console.warn(`Error Update Translation ${error.message}. Code: ${error.code}.`)
|
||||
})
|
||||
})
|
||||
}
|
||||
},
|
||||
getters: {
|
||||
getLanguagesList: (state) => {
|
||||
return state.languagesList
|
||||
},
|
||||
getLanguageByParameter: (state) => (parameter) => {
|
||||
const list = state.languagesList
|
||||
list.forEach(language => {
|
||||
if (language.hasOwnProperty(parameter)) {
|
||||
return language
|
||||
}
|
||||
})
|
||||
},
|
||||
getTranslationsList: (state) => {
|
||||
return state.translationsList
|
||||
},
|
||||
getTranslationContainer: (state) => (containerUuid) => {
|
||||
return state.translationsList.find(itemTranslation => itemTranslation.containerUuid === containerUuid)
|
||||
},
|
||||
getTranslationByLanguage: (state, getters) => ({
|
||||
containerUuid,
|
||||
language,
|
||||
recordUuid,
|
||||
recordId
|
||||
}) => {
|
||||
const translationContainer = getters.getTranslationContainer(containerUuid)
|
||||
if (translationContainer && translationContainer.recordUuid === recordUuid) {
|
||||
const translationRecord = translationContainer.translations.find(itemTranslation => {
|
||||
return itemTranslation.language === language
|
||||
})
|
||||
if (translationRecord) {
|
||||
return translationRecord.values
|
||||
}
|
||||
return {}
|
||||
}
|
||||
return {}
|
||||
}
|
||||
}
|
||||
}
|
||||
export default languageControl
|
|
@ -1,5 +1,4 @@
|
|||
|
||||
import { requestLanguages } from '@/api/ADempiere'
|
||||
const utils = {
|
||||
state: {
|
||||
width: 0,
|
||||
|
@ -12,7 +11,6 @@ const utils = {
|
|||
reportType: '',
|
||||
isShowedTable: false,
|
||||
recordUuidTable: 0,
|
||||
languageList: [],
|
||||
isShowedTabChildren: false,
|
||||
recordTable: 0,
|
||||
selectionProcess: []
|
||||
|
@ -53,9 +51,6 @@ const utils = {
|
|||
},
|
||||
setReportTypeToShareLink(state, payload) {
|
||||
state.reportType = payload
|
||||
},
|
||||
setLanguageList(state, payload) {
|
||||
state.languageList = payload
|
||||
}
|
||||
},
|
||||
actions: {
|
||||
|
@ -103,18 +98,6 @@ const utils = {
|
|||
},
|
||||
setReportTypeToShareLink({ commit }, value) {
|
||||
commit('setReportTypeToShareLink', value)
|
||||
},
|
||||
getLanguagesFromServer({ commit }) {
|
||||
return new Promise((resolve, reject) => {
|
||||
requestLanguages()
|
||||
.then(languageResponse => {
|
||||
commit('setLanguageList', languageResponse.languagesList)
|
||||
resolve(languageResponse.languagesList)
|
||||
})
|
||||
.catch(error => {
|
||||
reject(error)
|
||||
})
|
||||
})
|
||||
}
|
||||
},
|
||||
getters: {
|
||||
|
@ -165,17 +148,6 @@ const utils = {
|
|||
},
|
||||
getReportType: (state) => {
|
||||
return state.reportType
|
||||
},
|
||||
getLanguageList: (state) => {
|
||||
return state.languageList
|
||||
},
|
||||
getLanguageByParameter: (state) => (parameter) => {
|
||||
var list = state.languageList
|
||||
list.forEach(language => {
|
||||
if (language.hasOwnProperty(parameter)) {
|
||||
return language
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,7 +2,9 @@
|
|||
<div class="user-profi">
|
||||
<router-link to="/profile/index">
|
||||
<img v-if="logo" :src="logo" class="sidebar-logo">
|
||||
<p style="float: right;max-width: 150px;text-overflow: ellipsis;white-space: nowrap;overflow: hidden;">{{ getRol.clientName }}</p>
|
||||
<p style="float: right;max-width: 150px;text-overflow: ellipsis;white-space: nowrap;overflow: hidden;">
|
||||
{{ getRol.clientName }}
|
||||
</p>
|
||||
</router-link>
|
||||
<roles-navbar />
|
||||
</div>
|
||||
|
|
|
@ -18,7 +18,6 @@
|
|||
</template>
|
||||
|
||||
<script>
|
||||
import { getLanguage } from '@/lang'
|
||||
import { showMessage } from '@/utils/ADempiere/notification'
|
||||
import { resetRouter } from '@/router'
|
||||
|
||||
|
@ -27,9 +26,7 @@ export default {
|
|||
data() {
|
||||
return {
|
||||
value: '',
|
||||
options: [],
|
||||
languageList: [],
|
||||
language: getLanguage()
|
||||
options: []
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
|
@ -39,17 +36,6 @@ export default {
|
|||
getRolesList() {
|
||||
return this.$store.getters['user/getRoles']
|
||||
},
|
||||
languageCookie() {
|
||||
return getLanguage()
|
||||
},
|
||||
getterLanguageList() {
|
||||
return this.$store.getters.getLanguageList.map(language => {
|
||||
return {
|
||||
value: language.languageIso,
|
||||
label: language.languageName
|
||||
}
|
||||
})
|
||||
},
|
||||
isMobile() {
|
||||
return this.$store.state.app.device === 'mobile'
|
||||
},
|
||||
|
@ -91,30 +77,10 @@ export default {
|
|||
})
|
||||
this.$router.push({ path: '/' })
|
||||
},
|
||||
changeLanguage(languageValue) {
|
||||
this.language = languageValue
|
||||
},
|
||||
getLanguageList(open) {
|
||||
if (open) {
|
||||
if (this.getterLanguageList.length) {
|
||||
this.languageList = this.getterLanguageList
|
||||
} else {
|
||||
this.getLanguageData()
|
||||
}
|
||||
}
|
||||
},
|
||||
getLanguageData() {
|
||||
this.$store.dispatch('getLanguagesFromServer')
|
||||
.then(response => {
|
||||
this.languageList = response.map(language => {
|
||||
return {
|
||||
value: language.languageIso,
|
||||
label: language.languageName
|
||||
}
|
||||
})
|
||||
})
|
||||
.catch(error => {
|
||||
console.warn('Error getting language list:', error.message + '. Code: ', error.code)
|
||||
console.warn(`Error getting language list: ${error.message}. Code: ${error.code}.`)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
@ -30,7 +30,7 @@
|
|||
</el-form-item>
|
||||
<el-form-item :label="$t('profile.changeLanguage')">
|
||||
<el-select
|
||||
v-model="language"
|
||||
v-model="currentLanguage"
|
||||
:filterable="true"
|
||||
value-key="key"
|
||||
:placeholder="$t('profile.changeLanguagePlaceholder')"
|
||||
|
@ -38,10 +38,10 @@
|
|||
@change="changeLanguage"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in languageList"
|
||||
v-for="item in getterLanguageList"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
:label="item.languageName"
|
||||
:value="item.languageISO"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
@ -59,8 +59,7 @@ export default {
|
|||
return {
|
||||
valueRol: '',
|
||||
options: [],
|
||||
languageList: [],
|
||||
language: getLanguage()
|
||||
currentLanguage: getLanguage()
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
|
@ -70,16 +69,8 @@ export default {
|
|||
getRolesList() {
|
||||
return this.$store.getters['user/getRoles']
|
||||
},
|
||||
languageCookie() {
|
||||
return getLanguage()
|
||||
},
|
||||
getterLanguageList() {
|
||||
return this.$store.getters.getLanguageList.map(language => {
|
||||
return {
|
||||
value: language.languageIso,
|
||||
label: language.languageName
|
||||
}
|
||||
})
|
||||
return this.$store.getters.getLanguagesList
|
||||
},
|
||||
isMobile() {
|
||||
return this.$store.state.app.device === 'mobile'
|
||||
|
@ -122,30 +113,20 @@ export default {
|
|||
})
|
||||
},
|
||||
changeLanguage(languageValue) {
|
||||
this.language = languageValue
|
||||
this.currentLanguage = languageValue
|
||||
},
|
||||
getLanguageList(open) {
|
||||
if (open) {
|
||||
if (this.getterLanguageList.length) {
|
||||
this.languageList = this.getterLanguageList
|
||||
} else {
|
||||
this.getLanguageData()
|
||||
}
|
||||
this.getLanguageData()
|
||||
}
|
||||
},
|
||||
getLanguageData() {
|
||||
this.$store.dispatch('getLanguagesFromServer')
|
||||
.then(response => {
|
||||
this.languageList = response.map(language => {
|
||||
return {
|
||||
value: language.languageIso,
|
||||
label: language.languageName
|
||||
}
|
||||
if (this.isEmptyValue(this.getterLanguageList)) {
|
||||
this.$store.dispatch('getLanguagesFromServer')
|
||||
.catch(error => {
|
||||
console.warn(`Error getting languages list: ${error.message}. Code: ${error.code}.`)
|
||||
})
|
||||
})
|
||||
.catch(error => {
|
||||
console.warn('Error getting language list:', error.message + '. Code: ', error.code)
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue