Browse Source

Merge pull request #8441 from nocodb/nc-feat/inc-source

Nc feat/inc source
pull/8451/head
Ramesh Mane 7 months ago committed by GitHub
parent
commit
063d7cc579
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 92
      packages/nc-gui/components/dashboard/TreeView/ProjectNode.vue
  2. 56
      packages/nc-gui/components/dashboard/settings/DataSources.vue
  3. 11
      packages/nc-gui/components/dashboard/settings/Modal.vue
  4. 4
      packages/nc-gui/components/project/AllTables.vue
  5. 2
      packages/nc-gui/lang/ar.json
  6. 2
      packages/nc-gui/lang/bn_IN.json
  7. 2
      packages/nc-gui/lang/cs.json
  8. 2
      packages/nc-gui/lang/da.json
  9. 2
      packages/nc-gui/lang/de.json
  10. 2
      packages/nc-gui/lang/en.json
  11. 2
      packages/nc-gui/lang/eu.json
  12. 2
      packages/nc-gui/lang/fa.json
  13. 2
      packages/nc-gui/lang/fi.json
  14. 2
      packages/nc-gui/lang/he.json
  15. 2
      packages/nc-gui/lang/hi.json
  16. 2
      packages/nc-gui/lang/hr.json
  17. 2
      packages/nc-gui/lang/id.json
  18. 2
      packages/nc-gui/lang/ja.json
  19. 2
      packages/nc-gui/lang/lv.json
  20. 2
      packages/nc-gui/lang/nl.json
  21. 2
      packages/nc-gui/lang/no.json
  22. 2
      packages/nc-gui/lang/pt.json
  23. 2
      packages/nc-gui/lang/pt_BR.json
  24. 2
      packages/nc-gui/lang/ru.json
  25. 2
      packages/nc-gui/lang/sk.json
  26. 2
      packages/nc-gui/lang/sl.json
  27. 2
      packages/nc-gui/lang/sv.json
  28. 2
      packages/nc-gui/lang/th.json
  29. 2
      packages/nc-gui/lang/tr.json
  30. 2
      packages/nc-gui/lang/uk.json
  31. 2
      packages/nc-gui/lang/vi.json
  32. 2
      packages/nc-gui/lang/zh-Hant.json

92
packages/nc-gui/components/dashboard/TreeView/ProjectNode.vue

@ -27,7 +27,9 @@ const basesStore = useBases()
const { isMobileMode } = useGlobal()
const { createProject: _createProject, updateProject, getProjectMetaInfo } = basesStore
const { api } = useApi()
const { createProject: _createProject, updateProject, getProjectMetaInfo, loadProject } = basesStore
const { bases } = storeToRefs(basesStore)
@ -49,6 +51,16 @@ const editMode = ref(false)
const tempTitle = ref('')
const sourceRenameHelpers = ref<
Record<
string,
{
editMode: boolean
tempTitle: string
}
>
>({})
const activeBaseId = ref('')
const isErdModalOpen = ref<Boolean>(false)
@ -102,6 +114,52 @@ const enableEditMode = () => {
})
}
const enableEditModeForSource = (sourceId: string) => {
const source = base.value.sources?.find((s) => s.id === sourceId)
if (!source?.id) return
sourceRenameHelpers.value[source.id] = {
editMode: true,
tempTitle: source.alias || '',
}
nextTick(() => {
const input: HTMLInputElement | null = document.querySelector(`[data-source-rename-input-id="${sourceId}"]`)
if (!input) return
input?.focus()
input?.select()
input?.scrollIntoView()
})
}
const updateSourceTitle = async (sourceId: string) => {
const source = base.value.sources?.find((s) => s.id === sourceId)
if (!source?.id || !sourceRenameHelpers.value[source.id]) return
if (sourceRenameHelpers.value[source.id].tempTitle) {
sourceRenameHelpers.value[source.id].tempTitle = sourceRenameHelpers.value[source.id].tempTitle.trim()
}
if (!sourceRenameHelpers.value[source.id].tempTitle) return
try {
await api.source.update(source.base_id, source.id, {
alias: sourceRenameHelpers.value[source.id].tempTitle,
})
await loadProject(source.base_id, true)
delete sourceRenameHelpers.value[source.id]
$e('a:source:rename')
refreshViewTabTitle?.()
} catch (e: any) {
message.error(await extractSdkResponseErrorMsg(e))
} finally {
refreshCommandPalette()
}
}
const updateProjectTitle = async () => {
if (tempTitle.value) {
tempTitle.value = tempTitle.value.trim()
@ -672,7 +730,20 @@ const onTableIdCopy = async () => {
<GeneralBaseLogo
class="flex-none min-w-4 !xs:(min-w-4.25 w-4.25 text-sm) !text-gray-600 !group-hover:text-gray-800"
/>
<input
v-if="source.id && sourceRenameHelpers[source.id]?.editMode"
ref="input"
v-model="sourceRenameHelpers[source.id].tempTitle"
class="flex-grow leading-1 outline-0 ring-none capitalize !text-inherit !bg-transparent flex-1 mr-4"
:data-source-rename-input-id="source.id"
@click.stop
@keydown.enter.stop.prevent
@keyup.enter="updateSourceTitle(source.id!)"
@keyup.esc="updateSourceTitle(source.id!)"
@blur="updateSourceTitle(source.id!)"
/>
<NcTooltip
v-else
class="nc-sidebar-node-title capitalize text-ellipsis overflow-hidden select-none"
:style="{ wordBreak: 'keep-all', whiteSpace: 'nowrap', display: 'inline' }"
:class="{
@ -688,7 +759,13 @@ const onTableIdCopy = async () => {
<NcTooltip class="xs:(hidden) flex items-center mr-1">
<template #title>{{ $t('objects.externalDb') }}</template>
<GeneralIcon icon="info" class="flex-none text-gray-400 hover:text-gray-700 mr-1" />
<GeneralIcon
icon="info"
class="flex-none text-gray-400 hover:text-gray-700 nc-sidebar-node-btn"
:class="{
'!hidden': !isBasesOptionsOpen[source!.id!],
}"
/>
</NcTooltip>
</div>
<div class="flex flex-row items-center gap-x-0.25">
@ -716,6 +793,17 @@ const onTableIdCopy = async () => {
}"
@click="isBasesOptionsOpen[source!.id!] = false"
>
<NcMenuItem
v-if="isUIAllowed('baseRename')"
data-testid="nc-sidebar-source-rename"
@click="enableEditModeForSource(source.id!)"
>
<GeneralIcon icon="rename" class="group-hover:text-black" />
{{ $t('general.rename') }}
</NcMenuItem>
<NcDivider />
<!-- ERD View -->
<NcMenuItem key="erd" @click="openErdView(source)">
<div v-e="['c:source:erd']" class="flex gap-2 items-center">

56
packages/nc-gui/components/dashboard/settings/DataSources.vue

@ -10,7 +10,7 @@ interface Props {
const props = defineProps<Props>()
const emits = defineEmits(['update:state', 'update:reload', 'awaken'])
const emits = defineEmits(['update:state', 'update:reload'])
const vState = useVModel(props, 'state', emits)
@ -20,7 +20,9 @@ const { $api, $e } = useNuxtApp()
const { t } = useI18n()
const { loadProject } = useBases()
const basesStore = useBases()
const { loadProject } = basesStore
const { isDataSourceLimitReached } = storeToRefs(basesStore)
const baseStore = useBase()
const { base } = storeToRefs(baseStore)
@ -37,10 +39,6 @@ const clientType = ref<ClientType>(ClientType.MYSQL)
const isReloading = ref(false)
const forceAwakened = ref(false)
const dataSourcesAwakened = ref(false)
const isDeleteBaseModalOpen = ref(false)
const toBeDeletedBase = ref<SourceType | undefined>()
@ -142,12 +140,6 @@ const moveBase = async (e: any) => {
}
}
const forceAwaken = () => {
forceAwakened.value = !forceAwakened.value
dataSourcesAwakened.value = forceAwakened.value
emits('awaken', forceAwakened.value)
}
watch(
projectPageTab,
() => {
@ -169,20 +161,6 @@ watch(
},
)
watch(
() => sources.value.length,
(l) => {
if (l > 1 && !forceAwakened.value) {
dataSourcesAwakened.value = false
emits('awaken', false)
} else {
dataSourcesAwakened.value = true
emits('awaken', true)
}
},
{ immediate: true },
)
watch(
vState,
async (newState) => {
@ -211,7 +189,7 @@ watch(
vState.value = DataSourcesSubTab.New
break
case DataSourcesSubTab.New:
if (sources.value.length > 1 && !forceAwakened.value) {
if (isDataSourceLimitReached.value) {
vState.value = ''
}
break
@ -292,7 +270,7 @@ const isEditBaseModalOpen = computed({
<div class="flex flex-col w-full overflow-auto">
<div class="flex flex-row w-full justify-end mt-6.5 mb-2">
<NcButton
v-if="dataSourcesAwakened"
v-if="!isDataSourceLimitReached"
size="large"
class="z-10 !px-2"
type="primary"
@ -312,7 +290,7 @@ const isEditBaseModalOpen = computed({
>
<div class="ds-table-head">
<div class="ds-table-row">
<div class="ds-table-col ds-table-enabled cursor-pointer" @dblclick="forceAwaken">{{ $t('general.visibility') }}</div>
<div class="ds-table-col ds-table-enabled cursor-pointer">{{ $t('general.visibility') }}</div>
<div class="ds-table-col ds-table-name">{{ $t('general.name') }}</div>
<div class="ds-table-col ds-table-type">{{ $t('general.type') }}</div>
<div class="ds-table-col ds-table-actions -ml-13">{{ $t('labels.actions') }}</div>
@ -324,7 +302,8 @@ const isEditBaseModalOpen = computed({
<template #header>
<div v-if="sources[0]" class="ds-table-row border-gray-200">
<div class="ds-table-col ds-table-enabled">
<div class="flex items-center gap-1 cursor-pointer">
<div class="flex items-center gap-1">
<div v-if="sources.length > 2" class="ds-table-handle" />
<a-tooltip>
<template #title>
<template v-if="sources[0].enabled">{{ $t('activity.hideInUI') }}</template>
@ -332,7 +311,8 @@ const isEditBaseModalOpen = computed({
</template>
<a-switch
:checked="sources[0].enabled ? true : false"
size="default"
class="cursor-pointer"
size="small"
@change="toggleBase(sources[0], $event)"
/>
</a-tooltip>
@ -433,18 +413,23 @@ const isEditBaseModalOpen = computed({
<template #item="{ element: source, index }">
<div v-if="index !== 0" class="ds-table-row border-gray-200">
<div class="ds-table-col ds-table-enabled">
<div class="flex items-center gap-1 cursor-pointer">
<div class="flex items-center gap-1">
<GeneralIcon v-if="sources.length > 2" icon="dragVertical" small class="ds-table-handle" />
<a-tooltip>
<template #title>
<template v-if="source.enabled">{{ $t('activity.hideInUI') }}</template>
<template v-else>{{ $t('activity.showInUI') }}</template>
</template>
<a-switch :checked="source.enabled ? true : false" @change="toggleBase(source, $event)" />
<a-switch
:checked="source.enabled ? true : false"
class="cursor-pointer"
size="small"
@change="toggleBase(source, $event)"
/>
</a-tooltip>
</div>
</div>
<div class="ds-table-col ds-table-name font-medium w-full">
<GeneralIcon v-if="sources.length > 2" icon="dragVertical" small class="ds-table-handle" />
<div v-if="source.is_meta || source.is_local">-</div>
<span v-else class="truncate">
{{ source.is_meta || source.is_local ? $t('general.base') : source.alias }}
@ -452,7 +437,6 @@ const isEditBaseModalOpen = computed({
</div>
<div class="ds-table-col ds-table-type">
<GeneralIcon v-if="sources.length > 2" icon="dragVertical" small class="ds-table-handle" />
<div class="flex items-center gap-2">
<GeneralBaseLogo :source-type="source.type" />
<span class="text-gray-700 capitalize">{{ source.type }}</span>
@ -661,6 +645,6 @@ const isEditBaseModalOpen = computed({
}
.ds-table-handle {
@apply cursor-pointer justify-self-start mr-2;
@apply cursor-pointer justify-self-start mr-2 w-[16px];
}
</style>

11
packages/nc-gui/components/dashboard/settings/Modal.vue

@ -45,9 +45,9 @@ const { $e } = useNuxtApp()
const { t } = useI18n()
const dataSourcesReload = ref(false)
const { isDataSourceLimitReached } = storeToRefs(useBases())
const dataSourcesAwakened = ref(false)
const dataSourcesReload = ref(false)
const tabsInfo: TabGroup = {
// teamAndAuth: {
@ -139,10 +139,6 @@ const selectedTab = computed(() => tabsInfo[selectedTabKeys.value[0]])
const selectedSubTabKeys = ref<string[]>([firstKeyOfObject(selectedTab.value.subTabs)])
const selectedSubTab = computed(() => selectedTab.value.subTabs[selectedSubTabKeys.value[0]])
const handleAwaken = (val: boolean) => {
dataSourcesAwakened.value = val
}
watch(
() => selectedTabKeys.value[0],
(newTabKey) => {
@ -221,7 +217,7 @@ watch(
</a-breadcrumb>
<div v-if="vDataState === ''" class="flex flex-row justify-end items-center w-full gap-1">
<a-button
v-if="dataSourcesAwakened"
v-if="!isDataSourceLimitReached"
type="primary"
class="self-start !rounded-md nc-btn-new-datasource"
@click="vDataState = DataSourcesSubTab.New"
@ -257,7 +253,6 @@ watch(
class="px-2 pb-2"
:data-testid="`nc-settings-subtab-${selectedSubTab.key}`"
:base-id="baseId"
@awaken="handleAwaken"
/>
<component
:is="selectedSubTab?.body"

4
packages/nc-gui/components/project/AllTables.vue

@ -5,14 +5,12 @@ import NcTooltip from '~/components/nc/Tooltip.vue'
const { activeTables } = storeToRefs(useTablesStore())
const { openTable } = useTablesStore()
const { openedProject } = storeToRefs(useBases())
const { openedProject, isDataSourceLimitReached } = storeToRefs(useBases())
const { base } = useBase()
const isNewBaseModalOpen = ref(false)
const isDataSourceLimitReached = computed(() => Number(openedProject.value?.sources?.length) > 1)
const { isUIAllowed } = useRoles()
const { $e } = useNuxtApp()

2
packages/nc-gui/lang/ar.json

@ -1010,7 +1010,7 @@
"group": "Group"
},
"tooltip": {
"reachedSourceLimit": "Limited to only one data source for the moment",
"reachedSourceLimit": "Limited to 10 data sources per base for the moment",
"saveChanges": "حفظ التغييرات",
"xcDB": "إنشاء مشروع جديد",
"extDB": "يدعم MySQL ، PostgreSQL ، SQL Server و SQLite",

2
packages/nc-gui/lang/bn_IN.json

@ -1010,7 +1010,7 @@
"group": "Group"
},
"tooltip": {
"reachedSourceLimit": "Limited to only one data source for the moment",
"reachedSourceLimit": "Limited to 10 data sources per base for the moment",
"saveChanges": "परिवरतनरकित कर",
"xcDB": "একটি নতন পরকলপ তি করন",
"extDB": "মইএসকিউএল, পটগসকিউএল, এসকিউএল সর এব এসকিউএলইট সমরথন কর",

2
packages/nc-gui/lang/cs.json

@ -1010,7 +1010,7 @@
"group": "Group"
},
"tooltip": {
"reachedSourceLimit": "Limited to only one data source for the moment",
"reachedSourceLimit": "Limited to 10 data sources per base for the moment",
"saveChanges": "Uložit změny",
"xcDB": "Vytvoření nového projektu",
"extDB": "Podpora MySQL, PostgreSQL, SQL Server a SQLite",

2
packages/nc-gui/lang/da.json

@ -1010,7 +1010,7 @@
"group": "Group"
},
"tooltip": {
"reachedSourceLimit": "Limited to only one data source for the moment",
"reachedSourceLimit": "Limited to 10 data sources per base for the moment",
"saveChanges": "Gem ændringer",
"xcDB": "Opret et nyt projekt",
"extDB": "Understøtter MySQL, PostgreSQL, SQL Server & SQLITE",

2
packages/nc-gui/lang/de.json

@ -1010,7 +1010,7 @@
"group": "Group"
},
"tooltip": {
"reachedSourceLimit": "Limited to only one data source for the moment",
"reachedSourceLimit": "Limited to 10 data sources per base for the moment",
"saveChanges": "Änderungen speichern",
"xcDB": "Neues Projekt erstellen",
"extDB": "Unterstützt MySQL, PostgreSQL, SQL Server & SQLite",

2
packages/nc-gui/lang/en.json

@ -1010,7 +1010,7 @@
"group": "Group"
},
"tooltip": {
"reachedSourceLimit": "Limited to only one data source for the moment",
"reachedSourceLimit": "Limited to 10 data sources per base for the moment",
"saveChanges": "Save changes",
"xcDB": "Create a new base",
"extDB": "Supports MySQL, PostgreSQL, SQL Server & SQLite",

2
packages/nc-gui/lang/eu.json

@ -1010,7 +1010,7 @@
"group": "Group"
},
"tooltip": {
"reachedSourceLimit": "Limited to only one data source for the moment",
"reachedSourceLimit": "Limited to 10 data sources per base for the moment",
"saveChanges": "Save changes",
"xcDB": "Create a new project",
"extDB": "Supports MySQL, PostgreSQL, SQL Server & SQLite",

2
packages/nc-gui/lang/fa.json

@ -1010,7 +1010,7 @@
"group": "Group"
},
"tooltip": {
"reachedSourceLimit": "Limited to only one data source for the moment",
"reachedSourceLimit": "Limited to 10 data sources per base for the moment",
"saveChanges": "ذخیره تغییرات",
"xcDB": "ایجاد یک پروژه جدید",
"extDB": "پشتیبانی از MySQL ،PostgreSQL ،SQL Server و SQLite",

2
packages/nc-gui/lang/fi.json

@ -1010,7 +1010,7 @@
"group": "Group"
},
"tooltip": {
"reachedSourceLimit": "Limited to only one data source for the moment",
"reachedSourceLimit": "Limited to 10 data sources per base for the moment",
"saveChanges": "Tallenna muutokset",
"xcDB": "Luo uusi projekti",
"extDB": "Tukee MySQL, PostgreSQL, SQL Server & Sqlite",

2
packages/nc-gui/lang/he.json

@ -1010,7 +1010,7 @@
"group": "Group"
},
"tooltip": {
"reachedSourceLimit": "Limited to only one data source for the moment",
"reachedSourceLimit": "Limited to 10 data sources per base for the moment",
"saveChanges": "שמור שינויים",
"xcDB": "צור פרויקט חדש",
"extDB": "תומך MySQL, PostgreSQL, SQL Server & SQLite",

2
packages/nc-gui/lang/hi.json

@ -1010,7 +1010,7 @@
"group": "Group"
},
"tooltip": {
"reachedSourceLimit": "Limited to only one data source for the moment",
"reachedSourceLimit": "Limited to 10 data sources per base for the moment",
"saveChanges": "परिवरतनरकित कर",
"xcDB": "एक नयट बन",
"extDB": "MySQL, PostgreSQL, SQL सरवर और SQLite क समरथन करत",

2
packages/nc-gui/lang/hr.json

@ -1010,7 +1010,7 @@
"group": "Group"
},
"tooltip": {
"reachedSourceLimit": "Limited to only one data source for the moment",
"reachedSourceLimit": "Limited to 10 data sources per base for the moment",
"saveChanges": "Spremi promjene",
"xcDB": "Stvoriti novi projekt",
"extDB": "Podržava MySQL, PostgreSQL, SQL Server & Sqlite",

2
packages/nc-gui/lang/id.json

@ -1010,7 +1010,7 @@
"group": "Group"
},
"tooltip": {
"reachedSourceLimit": "Limited to only one data source for the moment",
"reachedSourceLimit": "Limited to 10 data sources per base for the moment",
"saveChanges": "Simpan perubahan",
"xcDB": "Buat proyek baru",
"extDB": "Mendukung MySQL, PostgreSQL, SQL Server & SQLite",

2
packages/nc-gui/lang/ja.json

@ -1010,7 +1010,7 @@
"group": "Group"
},
"tooltip": {
"reachedSourceLimit": "Limited to only one data source for the moment",
"reachedSourceLimit": "Limited to 10 data sources per base for the moment",
"saveChanges": "変更を保存",
"xcDB": "プロジェクトを作成",
"extDB": "MySQL、PostgreSQL、SQL Server&SQLiteをサポートしています",

2
packages/nc-gui/lang/lv.json

@ -1010,7 +1010,7 @@
"group": "Group"
},
"tooltip": {
"reachedSourceLimit": "Limited to only one data source for the moment",
"reachedSourceLimit": "Limited to 10 data sources per base for the moment",
"saveChanges": "Saglabāt izmaiņas",
"xcDB": "Izveidot jaunu projektu",
"extDB": "Atbalsta MySQL, PostgreSQL, SQL Server & SQLite",

2
packages/nc-gui/lang/nl.json

@ -1010,7 +1010,7 @@
"group": "Group"
},
"tooltip": {
"reachedSourceLimit": "Limited to only one data source for the moment",
"reachedSourceLimit": "Limited to 10 data sources per base for the moment",
"saveChanges": "Wijzigingen opslaan",
"xcDB": "Maak een nieuw project",
"extDB": "Ondersteunt MySQL, PostgreSQL, SQL Server & Sqlite",

2
packages/nc-gui/lang/no.json

@ -1010,7 +1010,7 @@
"group": "Group"
},
"tooltip": {
"reachedSourceLimit": "Limited to only one data source for the moment",
"reachedSourceLimit": "Limited to 10 data sources per base for the moment",
"saveChanges": "Lagre endringer",
"xcDB": "Opprett et nytt prosjekt",
"extDB": "Støtter MySQL, PostgreSQL, SQL Server & Sqlite",

2
packages/nc-gui/lang/pt.json

@ -1010,7 +1010,7 @@
"group": "Group"
},
"tooltip": {
"reachedSourceLimit": "Limited to only one data source for the moment",
"reachedSourceLimit": "Limited to 10 data sources per base for the moment",
"saveChanges": "Salvar alterações",
"xcDB": "Criar um novo projecto",
"extDB": "Suporta MySQL, PostgreSQL, SQL Server & SQLite",

2
packages/nc-gui/lang/pt_BR.json

@ -1010,7 +1010,7 @@
"group": "Group"
},
"tooltip": {
"reachedSourceLimit": "Limited to only one data source for the moment",
"reachedSourceLimit": "Limited to 10 data sources per base for the moment",
"saveChanges": "Salvar alterações",
"xcDB": "Criar um novo projeto",
"extDB": "Suporta MySQL, PostgreSQL, SQL Server e SQLite",

2
packages/nc-gui/lang/ru.json

@ -1010,7 +1010,7 @@
"group": "Group"
},
"tooltip": {
"reachedSourceLimit": "Limited to only one data source for the moment",
"reachedSourceLimit": "Limited to 10 data sources per base for the moment",
"saveChanges": "Сохранить изменения",
"xcDB": "Создать новый проект",
"extDB": "Поддерживает MySQL, PostgreSQL, SQL Server & Sqlite",

2
packages/nc-gui/lang/sk.json

@ -1010,7 +1010,7 @@
"group": "Group"
},
"tooltip": {
"reachedSourceLimit": "Limited to only one data source for the moment",
"reachedSourceLimit": "Limited to 10 data sources per base for the moment",
"saveChanges": "Uloženie zmien",
"xcDB": "Vytvorenie nového projektu",
"extDB": "Podporuje MySQL, PostgreSQL, SQL Server a SQLite",

2
packages/nc-gui/lang/sl.json

@ -1010,7 +1010,7 @@
"group": "Group"
},
"tooltip": {
"reachedSourceLimit": "Limited to only one data source for the moment",
"reachedSourceLimit": "Limited to 10 data sources per base for the moment",
"saveChanges": "Shrani spremembe",
"xcDB": "Ustvari nov projekt",
"extDB": "Podpira MySQL, PostgreSQL, SQL Server & SqLite",

2
packages/nc-gui/lang/sv.json

@ -1010,7 +1010,7 @@
"group": "Group"
},
"tooltip": {
"reachedSourceLimit": "Limited to only one data source for the moment",
"reachedSourceLimit": "Limited to 10 data sources per base for the moment",
"saveChanges": "Spara ändringar",
"xcDB": "Skapa ett nytt projekt",
"extDB": "Stödjer MySQL, PostgreSQL, SQL Server & SQLite",

2
packages/nc-gui/lang/th.json

@ -1010,7 +1010,7 @@
"group": "Group"
},
"tooltip": {
"reachedSourceLimit": "Limited to only one data source for the moment",
"reachedSourceLimit": "Limited to 10 data sources per base for the moment",
"saveChanges": "บนทกการเปลยนแปลง",
"xcDB": "สรางโครงการใหม",
"extDB": "รองรบ MySQL, POSTGRESQL, SQL Server & SQLite",

2
packages/nc-gui/lang/tr.json

@ -1010,7 +1010,7 @@
"group": "Group"
},
"tooltip": {
"reachedSourceLimit": "Limited to only one data source for the moment",
"reachedSourceLimit": "Limited to 10 data sources per base for the moment",
"saveChanges": "Değişiklikleri Kaydet",
"xcDB": "Yeni bir proje oluştur",
"extDB": "MySQL, PostgreSQL, SQL Server & SQLite destekler",

2
packages/nc-gui/lang/uk.json

@ -1010,7 +1010,7 @@
"group": "Group"
},
"tooltip": {
"reachedSourceLimit": "Limited to only one data source for the moment",
"reachedSourceLimit": "Limited to 10 data sources per base for the moment",
"saveChanges": "Зберегти зміни",
"xcDB": "Створити новий проєкт",
"extDB": "Підтримує MySQL, PostgreSQL, SQL Server та SQLite",

2
packages/nc-gui/lang/vi.json

@ -1010,7 +1010,7 @@
"group": "Group"
},
"tooltip": {
"reachedSourceLimit": "Limited to only one data source for the moment",
"reachedSourceLimit": "Limited to 10 data sources per base for the moment",
"saveChanges": "Lưu thay đổi",
"xcDB": "Tạo một dự án mới",
"extDB": "Hỗ trợ MySQL, PostgreSQL, SQL Server & SQLite",

2
packages/nc-gui/lang/zh-Hant.json

@ -1010,7 +1010,7 @@
"group": "Group"
},
"tooltip": {
"reachedSourceLimit": "Limited to only one data source for the moment",
"reachedSourceLimit": "Limited to 10 data sources per base for the moment",
"saveChanges": "儲存更動",
"xcDB": "建立新專案",
"extDB": "支援 MySQL、PostgreSQL、SQL Server 和 SQLite",

Loading…
Cancel
Save