Browse Source

Merge branch 'develop' into feat/attachments

merge with changes in develop
pull/4820/head
Raju Udava 2 years ago
parent
commit
e4c76242a9
  1. 7
      packages/nc-gui/assets/style.scss
  2. 4
      packages/nc-gui/components/cell/Currency.vue
  3. 5
      packages/nc-gui/components/cell/DatePicker.vue
  4. 7
      packages/nc-gui/components/cell/DateTimePicker.vue
  5. 3
      packages/nc-gui/components/cell/Decimal.vue
  6. 4
      packages/nc-gui/components/cell/Duration.vue
  7. 4
      packages/nc-gui/components/cell/Email.vue
  8. 3
      packages/nc-gui/components/cell/Float.vue
  9. 3
      packages/nc-gui/components/cell/Integer.vue
  10. 4
      packages/nc-gui/components/cell/Json.vue
  11. 3
      packages/nc-gui/components/cell/Percent.vue
  12. 4
      packages/nc-gui/components/cell/Text.vue
  13. 4
      packages/nc-gui/components/cell/TextArea.vue
  14. 7
      packages/nc-gui/components/cell/TimePicker.vue
  15. 4
      packages/nc-gui/components/cell/Url.vue
  16. 5
      packages/nc-gui/components/cell/YearPicker.vue
  17. 6
      packages/nc-gui/components/dashboard/settings/Misc.vue
  18. 1
      packages/nc-gui/composables/useGlobal/state.ts
  19. 1
      packages/nc-gui/composables/useGlobal/types.ts
  20. 224
      packages/nc-gui/lang/pl.json
  21. 4
      packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/functionMappings/pg.ts
  22. 9
      packages/nocodb/src/lib/meta/helpers/apiMetrics.ts
  23. 2
      tests/playwright/pages/Dashboard/Settings/Miscellaneous.ts

7
packages/nc-gui/assets/style.scss

@ -294,3 +294,10 @@ a {
.ant-select-selection-search-input:focus {
@apply !ring-0;
}
.nc-null {
@apply text-gray-300 italic;
input::placeholder {
@apply text-gray-300 italic;
}
}

4
packages/nc-gui/components/cell/Currency.vue

@ -10,6 +10,8 @@ const props = defineProps<Props>()
const emit = defineEmits(['update:modelValue', 'save'])
const { showNull } = useGlobal()
const column = inject(ColumnInj)!
const editEnabled = inject(EditModeInj)!
@ -81,6 +83,8 @@ onMounted(() => {
@mousedown.stop
/>
<span v-else-if="vModel === null && showNull" class="nc-null">NULL</span>
<span v-else-if="vModel">{{ currency }}</span>
<span v-else />

5
packages/nc-gui/components/cell/DatePicker.vue

@ -22,6 +22,8 @@ const { modelValue, isPk } = defineProps<Props>()
const emit = defineEmits(['update:modelValue'])
const { showNull } = useGlobal()
const columnMeta = inject(ColumnInj, null)!
const readOnly = inject(ReadonlyInj, ref(false))
@ -71,7 +73,7 @@ watch(
{ flush: 'post' },
)
const placeholder = computed(() => (isDateInvalid ? 'Invalid date' : ''))
const placeholder = computed(() => (modelValue === null && showNull.value ? 'NULL' : isDateInvalid ? 'Invalid date' : ''))
useSelectedCellKeyupListener(active, (e: KeyboardEvent) => {
switch (e.key) {
@ -169,6 +171,7 @@ useSelectedCellKeyupListener(active, (e: KeyboardEvent) => {
v-model:value="localState"
:bordered="false"
class="!w-full !px-0 !border-none"
:class="{ 'nc-null': modelValue === null && showNull }"
:format="dateFormat"
:placeholder="placeholder"
:allow-clear="!readOnly && !localState && !isPk"

7
packages/nc-gui/components/cell/DateTimePicker.vue

@ -25,6 +25,8 @@ const emit = defineEmits(['update:modelValue'])
const { isMysql } = useProject()
const { showNull } = useGlobal()
const readOnly = inject(ReadonlyInj, ref(false))
const active = inject(ActiveCellInj, ref(false))
@ -79,6 +81,8 @@ watch(
{ flush: 'post' },
)
const placeholder = computed(() => (modelValue === null && showNull.value ? 'NULL' : isDateInvalid ? 'Invalid date' : ''))
useSelectedCellKeyupListener(active, (e: KeyboardEvent) => {
switch (e.key) {
case 'Enter':
@ -172,8 +176,9 @@ useSelectedCellKeyupListener(active, (e: KeyboardEvent) => {
:show-time="true"
:bordered="false"
class="!w-full !px-0 !border-none"
:class="{ 'nc-null': modelValue === null && showNull }"
:format="dateTimeFormat"
:placeholder="isDateInvalid ? 'Invalid date' : ''"
:placeholder="placeholder"
:allow-clear="!readOnly && !localState && !isPk"
:input-read-only="true"
:dropdown-class-name="`${randomClass} nc-picker-datetime ${open ? 'active' : ''}`"

3
packages/nc-gui/components/cell/Decimal.vue

@ -14,6 +14,8 @@ const props = defineProps<Props>()
const emits = defineEmits<Emits>()
const { showNull } = useGlobal()
const editEnabled = inject(EditModeInj)
const _vModel = useVModel(props, 'modelValue', emits)
@ -49,6 +51,7 @@ const focus: VNodeRef = (el) => (el as HTMLInputElement)?.focus()
@selectstart.capture.stop
@mousedown.stop
/>
<span v-else-if="vModel === null && showNull" class="nc-null">NULL</span>
<span v-else class="text-sm">{{ vModel }}</span>
</template>

4
packages/nc-gui/components/cell/Duration.vue

@ -19,6 +19,8 @@ const { modelValue } = defineProps<Props>()
const emit = defineEmits(['update:modelValue'])
const { showNull } = useGlobal()
const column = inject(ColumnInj)
const editEnabled = inject(EditModeInj)
@ -93,6 +95,8 @@ const focus: VNodeRef = (el) => (el as HTMLInputElement)?.focus()
@mousedown.stop
/>
<span v-else-if="modelValue === null && showNull" class="nc-null">NULL</span>
<span v-else> {{ localState }}</span>
<div v-if="showWarningMessage" class="duration-warning">

4
packages/nc-gui/components/cell/Email.vue

@ -14,6 +14,8 @@ const props = defineProps<Props>()
const emits = defineEmits<Emits>()
const { showNull } = useGlobal()
const editEnabled = inject(EditModeInj)
const vModel = useVModel(props, 'modelValue', emits)
@ -39,6 +41,8 @@ const focus: VNodeRef = (el) => (el as HTMLInputElement)?.focus()
@mousedown.stop
/>
<span v-else-if="vModel === null && showNull" class="nc-null">NULL</span>
<a v-else-if="validEmail" class="text-sm underline hover:opacity-75" :href="`mailto:${vModel}`" target="_blank">
{{ vModel }}
</a>

3
packages/nc-gui/components/cell/Float.vue

@ -14,6 +14,8 @@ const props = defineProps<Props>()
const emits = defineEmits<Emits>()
const { showNull } = useGlobal()
const editEnabled = inject(EditModeInj)
const _vModel = useVModel(props, 'modelValue', emits)
@ -49,6 +51,7 @@ const focus: VNodeRef = (el) => (el as HTMLInputElement)?.focus()
@selectstart.capture.stop
@mousedown.stop
/>
<span v-else-if="vModel === null && showNull" class="nc-null">NULL</span>
<span v-else class="text-sm">{{ vModel }}</span>
</template>

3
packages/nc-gui/components/cell/Integer.vue

@ -14,6 +14,8 @@ const props = defineProps<Props>()
const emits = defineEmits<Emits>()
const { showNull } = useGlobal()
const editEnabled = inject(EditModeInj)
const _vModel = useVModel(props, 'modelValue', emits)
@ -53,6 +55,7 @@ function onKeyDown(evt: KeyboardEvent) {
@selectstart.capture.stop
@mousedown.stop
/>
<span v-else-if="vModel === null && showNull" class="nc-null">NULL</span>
<span v-else class="text-sm">{{ vModel }}</span>
</template>

4
packages/nc-gui/components/cell/Json.vue

@ -25,6 +25,8 @@ const props = defineProps<Props>()
const emits = defineEmits<Emits>()
const { showNull } = useGlobal()
const editEnabled = inject(EditModeInj, ref(false))
const active = inject(ActiveCellInj, ref(false))
@ -154,6 +156,8 @@ useSelectedCellKeyupListener(active, (e) => {
</span>
</div>
<span v-else-if="vModel === null && showNull" class="nc-null">NULL</span>
<span v-else>{{ vModel }}</span>
</component>
</template>

3
packages/nc-gui/components/cell/Percent.vue

@ -10,6 +10,8 @@ const props = defineProps<Props>()
const emits = defineEmits(['update:modelValue'])
const { showNull } = useGlobal()
const editEnabled = inject(EditModeInj)
const _vModel = useVModel(props, 'modelValue', emits)
@ -47,5 +49,6 @@ const focus: VNodeRef = (el) => {
@selectstart.capture.stop
@mousedown.stop
/>
<span v-else-if="vModel === null && showNull" class="nc-null">NULL</span>
<span v-else>{{ vModel }}</span>
</template>

4
packages/nc-gui/components/cell/Text.vue

@ -10,6 +10,8 @@ const props = defineProps<Props>()
const emits = defineEmits(['update:modelValue'])
const { showNull } = useGlobal()
const editEnabled = inject(EditModeInj)
const readonly = inject(ReadonlyInj, ref(false))
@ -38,5 +40,7 @@ const focus: VNodeRef = (el) => {
@mousedown.stop
/>
<span v-else-if="vModel === null && showNull" class="nc-null">NULL</span>
<LazyCellClampedText v-else :value="vModel" :lines="1" />
</template>

4
packages/nc-gui/components/cell/TextArea.vue

@ -11,6 +11,8 @@ const emits = defineEmits(['update:modelValue'])
const editEnabled = inject(EditModeInj)
const { showNull } = useGlobal()
const view = inject(ActiveViewInj, ref())
const vModel = useVModel(props, 'modelValue', emits, { defaultValue: '' })
@ -55,6 +57,8 @@ const rowHeight = computed(() => {
@mousedown.stop
/>
<span v-else-if="vModel === null && showNull" class="nc-null">NULL</span>
<LazyCellClampedText v-else-if="rowHeight" :value="vModel" :lines="rowHeight" />
<span v-else>{{ vModel }}</span>

7
packages/nc-gui/components/cell/TimePicker.vue

@ -13,6 +13,8 @@ const emit = defineEmits(['update:modelValue'])
const { isMysql } = useProject()
const { showNull } = useGlobal()
const readOnly = inject(ReadonlyInj, ref(false))
const active = inject(ActiveCellInj, ref(false))
@ -72,6 +74,8 @@ watch(
{ flush: 'post' },
)
const placeholder = computed(() => (modelValue === null && showNull.value ? 'NULL' : isTimeInvalid ? 'Invalid time' : ''))
useSelectedCellKeyupListener(active, (e: KeyboardEvent) => {
switch (e.key) {
case 'Enter':
@ -97,7 +101,8 @@ useSelectedCellKeyupListener(active, (e: KeyboardEvent) => {
use12-hours
format="HH:mm"
class="!w-full !px-0 !border-none"
:placeholder="isTimeInvalid ? 'Invalid time' : ''"
:class="{ 'nc-null': modelValue === null && showNull }"
:placeholder="placeholder"
:allow-clear="!readOnly && !localState && !isPk"
:input-read-only="true"
:open="(readOnly || (localState && isPk)) && !active && !editable ? false : open"

4
packages/nc-gui/components/cell/Url.vue

@ -24,6 +24,8 @@ const emit = defineEmits(['update:modelValue'])
const { t } = useI18n()
const { showNull } = useGlobal()
const column = inject(ColumnInj)!
const editEnabled = inject(EditModeInj)!
@ -88,6 +90,8 @@ watch(
@mousedown.stop
/>
<span v-else-if="vModel === null && showNull" class="nc-null">NULL</span>
<nuxt-link
v-else-if="isValid && !cellUrlOptions?.overlay"
no-prefetch

5
packages/nc-gui/components/cell/YearPicker.vue

@ -11,6 +11,8 @@ const { modelValue, isPk = false } = defineProps<Props>()
const emit = defineEmits(['update:modelValue'])
const { showNull } = useGlobal()
const readOnly = inject(ReadonlyInj, ref(false))
const active = inject(ActiveCellInj, ref(false))
@ -58,7 +60,7 @@ watch(
{ flush: 'post' },
)
const placeholder = computed(() => (isYearInvalid ? 'Invalid year' : ''))
const placeholder = computed(() => (modelValue === null && showNull.value ? 'NULL' : isYearInvalid ? 'Invalid year' : ''))
useSelectedCellKeyupListener(active, (e: KeyboardEvent) => {
switch (e.key) {
@ -82,6 +84,7 @@ useSelectedCellKeyupListener(active, (e: KeyboardEvent) => {
picker="year"
:bordered="false"
class="!w-full !px-0 !border-none"
:class="{ 'nc-null': modelValue === null && showNull }"
:placeholder="placeholder"
:allow-clear="!readOnly && !localState && !isPk"
:input-read-only="true"

6
packages/nc-gui/components/dashboard/settings/Misc.vue

@ -1,7 +1,7 @@
<script setup lang="ts">
import { useGlobal, useProject, watch } from '#imports'
const { includeM2M } = useGlobal()
const { includeM2M, showNull } = useGlobal()
const { loadTables } = useProject()
watch(includeM2M, async () => await loadTables())
@ -16,6 +16,10 @@ watch(includeM2M, async () => await loadTables())
{{ $t('msg.info.showM2mTables') }}
</a-checkbox>
</div>
<div class="flex flex-row items-center w-full mb-4 gap-2">
<!-- Show NULL -->
<a-checkbox v-model:checked="showNull" v-e="['c:settings:show-null']" class="nc-settings-show-null">Show NULL</a-checkbox>
</div>
</div>
</div>
</template>

1
packages/nc-gui/composables/useGlobal/state.ts

@ -62,6 +62,7 @@ export function useGlobalState(storageKey = 'nocodb-gui-v2'): State {
filterAutoSave: true,
previewAs: null,
includeM2M: false,
showNull: false,
currentVersion: null,
latestRelease: null,
hiddenRelease: null,

1
packages/nc-gui/composables/useGlobal/types.ts

@ -30,6 +30,7 @@ export interface StoredState {
filterAutoSave: boolean
previewAs: ProjectRole | null
includeM2M: boolean
showNull: boolean
currentVersion: string | null
latestRelease: string | null
hiddenRelease: string | null

224
packages/nc-gui/lang/pl.json

@ -1,31 +1,31 @@
{
"general": {
"home": "Dom",
"load": "Obciążenie",
"open": "otwarty",
"close": "Blisko",
"yes": "tak",
"home": "Start",
"load": "Załaduj",
"open": "Otwórz",
"close": "Zamknij",
"yes": "Tak",
"no": "Nie",
"ok": "ok",
"ok": "OK",
"and": "i",
"or": "Lub",
"add": "Dodać",
"edit": "Edytować",
"remove": "Usunąć",
"save": "Zapis",
"add": "Dodaj",
"edit": "Edytuj",
"remove": "Usuń",
"save": "Zapisz",
"cancel": "Anuluj",
"submit": "Składać",
"submit": "Zapisz",
"create": "Utwórz",
"duplicate": "Duplikuj",
"insert": "Wstaw",
"delete": "Kasować",
"update": "Aktualizacja",
"rename": "Przemianować",
"reload": "Przeładować",
"reset": "Resetowanie",
"install": "zainstalować",
"show": "Pokazać",
"hide": "Ukrywać",
"insert": "Wstaw",
"delete": "Usuń",
"update": "Aktualizuj",
"rename": "Zmień nazwę",
"reload": "Przeładuj",
"reset": "Reset",
"install": "Zainstaluj",
"show": "Pokaż",
"hide": "Ukryj",
"showAll": "Pokaż wszystko",
"hideAll": "Schowaj wszystko",
"showMore": "Pokaż więcej",
@ -33,31 +33,31 @@
"hideOptions": "Ukryj opcje",
"showMenu": "Pokaż menu",
"hideMenu": "Ukryj menu",
"addAll": "Dodać wszystko",
"addAll": "Dodaj wszystko",
"removeAll": "Usuń wszystko",
"signUp": "Zapisać się",
"signIn": "ZALOGUJ SIĘ",
"signOut": "Wyloguj się",
"signUp": "ZAREJESTRUJ SIĘ",
"signIn": "Zaloguj",
"signOut": "Wyloguj",
"required": "Wymagany",
"preferred": "Preferowany",
"mandatory": "Obowiązkowy",
"loading": "Ładowanie ...",
"title": "Tytuł",
"upload": "Wgrywać",
"download": "Pobier",
"default": "Domyślna",
"upload": "Prześlij",
"download": "Pobierz",
"default": "Domyślny",
"more": "Więcej",
"less": "Mniej",
"event": "Wydarzenie",
"condition": "Stan: schorzenie",
"after": "Później",
"before": "Zanim",
"event": "Zdarzenie",
"condition": "Stan",
"after": "Po",
"before": "Przed",
"search": "Szukaj",
"notification": "Powiadomienie",
"reference": "Sprawdzenie",
"function": "Funkcjonować",
"reference": "Odniesienie",
"function": "Funkcja",
"confirm": "Zatwierdź",
"generate": "Wygeneruj",
"generate": "Generuj",
"copy": "Kopiuj",
"misc": "Pozostałe",
"lock": "Zablokuj",
@ -74,51 +74,51 @@
"insertBefore": "Wstaw przed",
"hideField": "Ukryj pole",
"sortAsc": "Sortowanie rosnące",
"sortDesc": "Sortuj w dół"
"sortDesc": "Sortuj malejąco"
},
"objects": {
"project": "Projekt",
"projects": "Projektowanie",
"projects": "Projekty",
"table": "Tabela",
"tables": "Stoły",
"tables": "Tabele",
"field": "Pole",
"fields": "Pola",
"column": "Kolumna",
"columns": "Kolumny",
"page": "Strona",
"pages": "Strony",
"record": "Nagrywać",
"records": "Dokumentacja",
"record": "rekord",
"records": "rekordy",
"webhook": "WebHook.",
"webhooks": "Webhooks.",
"view": "Pogląd",
"views": "Wyświetlenia",
"view": "Widok",
"views": "Widoki",
"viewType": {
"grid": "Siatka",
"grid": "Tabela",
"gallery": "Galeria",
"form": "Formularz",
"kanban": "Kanban.",
"kanban": "Kanban",
"calendar": "Kalendarz"
},
"user": "Użytkownik",
"users": "Użytkownicy.",
"users": "Użytkownicy",
"role": "Rola",
"roles": "Role.",
"roles": "Role",
"roleType": {
"owner": "Właściciel",
"creator": "Twórca",
"editor": "Redaktor",
"creator": "Projektant",
"editor": "Edytor",
"commenter": "Komentator",
"viewer": "Widz",
"orgLevelCreator": "Poziom organizacji Twórca",
"orgLevelViewer": "Przeglądarka poziomu organizacji"
"viewer": "Obserwator",
"orgLevelCreator": "Poziom organizacji Projektant",
"orgLevelViewer": "Poziomu organizacji obserwator"
},
"sqlVIew": "Widok SQL"
},
"datatype": {
"ID": "Identyfikator",
"ForeignKey": "Klucz obcy",
"SingleLineText": "Tekst pojedynczy linii",
"SingleLineText": "Tekst w pojedynczej linii",
"LongText": "Długi tekst",
"Attachment": "Załącznik",
"Checkbox": "Pole wyboru",
@ -138,20 +138,20 @@
"Duration": "Czas trwania",
"Rating": "Ocena",
"Formula": "Formuła",
"Rollup": "Rollup.",
"Count": "Licz",
"Lookup": "Spojrzeć w górę",
"DateTime": "Czas daty",
"CreateTime": "Utwórz czas",
"LastModifiedTime": "Ostatni zmodyfikowany czas",
"AutoNumber": "Numer samochodu",
"Barcode": "kod kreskowy",
"Rollup": "Zliczanie",
"Count": "Licznik",
"Lookup": "Wyszukaj",
"DateTime": "Data",
"CreateTime": "Data utworzenia",
"LastModifiedTime": "Data modyfikacji",
"AutoNumber": "Automatyczny numer",
"Barcode": "Kod kreskowy",
"Button": "Przycisk",
"Password": "Hasło",
"relationProperties": {
"noAction": "Bez akcji",
"cascade": "Kaskada",
"restrict": "Ogranicz",
"restrict": "Ograniczenie",
"setNull": "Ustaw null.",
"setDefault": "Ustaw domyślny"
}
@ -159,8 +159,8 @@
"filterOperation": {
"isEqual": "jest równy",
"isNotEqual": "nie jest równy",
"isLike": "jest jak",
"isNot like": "nie jest taki",
"isLike": "podobny do",
"isNot like": "różny od",
"isEmpty": "jest pusty",
"isNotEmpty": "nie jest pusty",
"isNull": "jest null.",
@ -170,31 +170,31 @@
"erdView": "Widok ERD",
"newProj": "Nowy projekt",
"myProject": "Moje projekty",
"formTitle": "Tytuł formy",
"collabView": "Widok współpracy",
"lockedView": "Zamknięty widok",
"formTitle": "Tytuł formularza",
"collabView": "Współtworzony",
"lockedView": "Zablokowany widok",
"personalView": "Widok osobisty",
"appStore": "Sklep z aplikacjami",
"teamAndAuth": "Team & Auth.",
"teamAndAuth": "Zespół i autoryzacja",
"rolesUserMgmt": "Role i zarządzanie użytkownikami",
"userMgmt": "Zarządzanie użytkownikami",
"apiTokenMgmt": "Zarządzanie Tokeny API.",
"rolesMgmt": "Zarządzanie rólami",
"apiTokenMgmt": "Zarządzanie Tokenami API",
"rolesMgmt": "Zarządzanie rolami",
"projMeta": "Metadane projektu.",
"metaMgmt": "Meta Management.",
"metadata": "Metadata.",
"exportImportMeta": "Eksport / Importuj metadane",
"metaMgmt": "Zarządzanie Meta",
"metadata": "Metadata",
"exportImportMeta": "Eksport / Importuj Metadane",
"uiACL": "Kontrola dostępu do interfejsu użytkownika",
"metaOperations": "Operacje metadanych",
"metaOperations": "Operacje na metadanych",
"audit": "Rewizja",
"auditLogs": "Dziennik kontroli",
"sqlMigrations": "Migracje SQL.",
"dbCredentials": "Poświadczenia bazy danych.",
"advancedParameters": "Parametry SSL i zaawansowane",
"headCreateProject": "Utwórz projekt |. NOCODB.",
"headLogin": "Zaloguj się | NOCODB.",
"resetPassword": "Zresetuj swoje hasło",
"teamAndSettings": "Ustawienia zespołu",
"auditLogs": "Dziennik zmian",
"sqlMigrations": "Migracja SQL",
"dbCredentials": "Poświadczenia bazy danych",
"advancedParameters": "SSL i parametry zaawansowane",
"headCreateProject": "Utwórz projekt | Nocodb",
"headLogin": "Zaloguj się | Nocodb",
"resetPassword": "Resetowanie hasła",
"teamAndSettings": "Zespół i ustawienia",
"apiDocs": "Dokumentacja API",
"importFromAirtable": "Importuj z Airtable",
"generateToken": "Wygeneruj token",
@ -209,19 +209,19 @@
},
"labels": {
"createdBy": "Stworzony przez",
"notifyVia": "Powiadomić VIA.",
"notifyVia": "Powiadomienie przez",
"projName": "Nazwa Projektu",
"tableName": "Nazwa tabeli",
"viewName": "Zobacz nazwę.",
"viewLink": "Wyświetl link",
"viewName": "Nazwa widoku",
"viewLink": "Zobacz link",
"columnName": "Nazwa kolumny",
"columnType": "Typ kolumny",
"roleName": "Nazwa roli.",
"roleDescription": "opis roli",
"databaseType": "Wpisz bazy danych",
"roleName": "Nazwa roli",
"roleDescription": "Opisy roli",
"databaseType": "Typ w bazie danych",
"lengthValue": "Długość / wartość",
"dbType": "Typ bazy danych.",
"sqliteFile": "Plik sqlite.",
"dbType": "Typ bazy danych",
"sqliteFile": "Plik SQLite",
"hostAddress": "Adres hosta",
"port": "Numer portu",
"username": "Nazwa użytkownika",
@ -229,13 +229,13 @@
"schemaName": "Nazwa schematu",
"database": "Baza danych",
"action": "Akcja",
"actions": "działania",
"actions": "Akcje",
"operation": "Operacja",
"operationType": "Typ pracy",
"operationSubType": "Podtypowy typ pracy",
"operationType": "Typ operacji",
"operationSubType": "Podtypowy akcji",
"description": "Opis",
"authentication": "Uwierzytelnianie",
"token": "Znak",
"token": "Token",
"where": "Gdzie",
"cache": "Pamięć podręczna",
"chat": "Czat",
@ -243,49 +243,49 @@
"storage": "Przechowywanie",
"uiAcl": "UI-ACL",
"models": "Modele",
"syncState": "Synchronizowany stan",
"syncState": "Stan synchronizacji",
"created": "Utworzony",
"sqlOutput": "Wyjście SQL.",
"addOption": "Dodaj opcję.",
"addOption": "Dodaj opcję",
"qrCodeValueColumn": "Kolumna z wartością kodu QR",
"barcodeValueColumn": "Kolumna z wartością kodu kreskowego",
"barcodeFormat": "Format kodu kreskowego",
"qrCodeValueTooLong": "Zbyt wiele znaków dla kodu QR",
"barcodeValueTooLong": "Zbyt wiele znaków dla kodu kreskowego",
"aggregateFunction": "Funkcja kruszywa",
"aggregateFunction": "Funkcja agregacji",
"dbCreateIfNotExists": "Baza danych: Utwórz, jeśli nie istnieje",
"clientKey": "Klucz klienta",
"clientCert": "Cert Client.",
"clientCert": "Certyfikat klienta",
"serverCA": "Serwer ca.",
"requriedCa": "Wymagany-ca.",
"requriedIdentity": "Wymagana tożsamość",
"requriedCa": "Wymagany-CA",
"requriedIdentity": "Wymagana IDENTYFIKACJA",
"inflection": {
"tableName": "Nazwa tabeli",
"columnName": "Fleksja - Nazwa kolumny"
"columnName": "Nazwa tabeli"
},
"community": {
"starUs1": "Gwiazda",
"starUs2": "My na Github.",
"bookDemo": "Zarezerwuj darmowe demo",
"getAnswered": "Odpowiedzi na pytania",
"joinDiscord": "Dołącz do Discord.",
"joinDiscord": "Dołącz do Discord",
"joinCommunity": "Dołącz do społeczności NocoDB",
"joinReddit": "Dołącz /r/NocoDB",
"followNocodb": "Śledź NocoDB"
},
"docReference": "Odnośnik do dokumentu",
"selectUserRole": "Wybierz rolę użytkownika",
"childTable": "Stół dziecka.",
"childColumn": "Kolumna dla dzieci",
"childTable": "Tabele podrzędne",
"childColumn": "Kolumna podrzędna",
"linkToAnotherRecord": "Link do innego rekordu",
"onUpdate": "Na aktualizacji",
"onDelete": "Na delete.",
"onUpdate": "Przy aktualizacji",
"onDelete": "Przy usuwaniu",
"account": "Konto",
"language": "Język",
"primaryColor": "Kolor podstawowy",
"accentColor": "Kolor akcentu",
"customTheme": "Motyw Niestandardowy",
"requestDataSource": "Poproś o źródło danych, którego potrzebujesz.",
"customTheme": "Motyw indywidualny",
"requestDataSource": "Poproś o źródło danych, którego potrzebujesz",
"apiKey": "Klucz API",
"sharedBase": "Udostępniona baza",
"importData": "Import Danych",
@ -295,7 +295,7 @@
"importAttachmentColumns": "Importuj kolumny załączników",
"importFormulaColumns": "Importuj kolumny formuły",
"noData": "Brak danych",
"goToDashboard": "Przejdź do pulpitu",
"goToDashboard": "Przejdź do panelu",
"importing": "Importowanie",
"flattenNested": "Spłaszcz zagnieżdżone",
"downloadAllowed": "Pobieranie dozwolone",
@ -313,18 +313,18 @@
"agreeToTos": "Rejestrując się, akceptujesz warunki korzystania z usługi",
"welcomeToNc": "Witaj w NocoDB!",
"inviteOnlySignup": "Zezwalaj na rejestrację tylko przy użyciu adresu url zaproszenia",
"nextRow": "Następny rząd",
"nextRow": "Następny wiersz",
"prevRow": "Poprzedni wiersz"
},
"activity": {
"createProject": "Utwórz projekt",
"importProject": "Importuj projekt.",
"searchProject": "Szukaj projektu",
"editProject": "Edytuj projekt.",
"editProject": "Edytuj projekt",
"stopProject": "Zatrzymaj projekt",
"startProject": "Rozpocznij projekt.",
"startProject": "Rozpocznij projekt",
"restartProject": "Restartuj projekt",
"deleteProject": "Usuń Projekt.",
"deleteProject": "Usuń Projekt",
"refreshProject": "Odśwież projekty",
"saveProject": "Zapisz Projekt",
"deleteKanbanStack": "Usunąć stos?",
@ -337,7 +337,7 @@
"upgrade": {
"available": "Aktualizacja dostępna",
"releaseNote": "Informacje o wydaniu",
"howTo": "Jak ulepszyć?"
"howTo": "Jak uaktualnić?"
},
"translate": "Pomóż przetłumaczyć",
"account": {

4
packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/functionMappings/pg.ts

@ -123,7 +123,7 @@ const pg = {
.join(' AND ')}`
)
.wrap('(', ')')
.toQuery()} THEN 1 ELSE 0 END ${args.colAlias}`
.toQuery()} THEN TRUE ELSE FALSE END ${args.colAlias}`
);
},
OR: (args: MapFnArgs) => {
@ -135,7 +135,7 @@ const pg = {
.join(' OR ')}`
)
.wrap('(', ')')
.toQuery()} THEN 1 ELSE 0 END ${args.colAlias}`
.toQuery()} THEN TRUE ELSE FALSE END ${args.colAlias}`
);
},
SUBSTR: ({ fn, knex, pt, colAlias }: MapFnArgs) => {

9
packages/nocodb/src/lib/meta/helpers/apiMetrics.ts

@ -3,6 +3,7 @@ import { Tele } from 'nc-help';
const countMap = {};
// @ts-ignore
const metrics = async (req: Request, c = 150) => {
if (!req?.route?.path) return;
const event = `a:api:${req.route.path}:${req.method}`;
@ -13,12 +14,12 @@ const metrics = async (req: Request, c = 150) => {
}
};
const metaApiMetrics = (req: Request, _res, next) => {
metrics(req, 50).then(() => {});
const metaApiMetrics = (_req: Request, _res, next) => {
// metrics(req, 50).then(() => {});
next();
};
export default (req: Request, _res, next) => {
metrics(req).then(() => {});
export default (_req: Request, _res, next) => {
// metrics(req).then(() => {});
next();
};

2
tests/playwright/pages/Dashboard/Settings/Miscellaneous.ts

@ -14,7 +14,7 @@ export class MiscSettingsPage extends BasePage {
}
async clickShowM2MTables() {
const clickAction = this.get().locator('input[type="checkbox"]').click();
const clickAction = this.get().locator('input[type="checkbox"]').first().click();
await this.waitForResponse({
uiAction: clickAction,
requestUrlPathToMatch: 'tables?includeM2M',

Loading…
Cancel
Save