Browse Source

fix: review changes #7173

pull/7173/head
Ramesh Mane 9 months ago
parent
commit
27a2f159fd
  1. 27
      packages/nc-gui/components/account/Token.vue
  2. 4
      packages/nc-gui/components/smartsheet/grid/Table.vue
  3. 2
      packages/nc-gui/components/smartsheet/header/Cell.vue
  4. 2
      packages/nc-gui/components/smartsheet/header/Menu.vue
  5. 7
      packages/nc-gui/components/smartsheet/toolbar/CreateGroupBy.vue
  6. 6
      packages/nc-gui/components/smartsheet/toolbar/GroupByMenu.vue
  7. 31
      packages/nc-gui/components/webhook/Editor.vue
  8. 33
      packages/nc-gui/helpers/parsers/parserHelpers.ts
  9. 5
      packages/nc-gui/lang/en.json

27
packages/nc-gui/components/account/Token.vue

@ -3,6 +3,7 @@ import type { VNodeRef } from '@vue/runtime-core'
import { message } from 'ant-design-vue' import { message } from 'ant-design-vue'
import type { ApiTokenType, RequestParams } from 'nocodb-sdk' import type { ApiTokenType, RequestParams } from 'nocodb-sdk'
import { extractSdkResponseErrorMsg, isEeUI, ref, useApi, useCopy, useNuxtApp } from '#imports' import { extractSdkResponseErrorMsg, isEeUI, ref, useApi, useCopy, useNuxtApp } from '#imports'
import { extractNextDefaultName } from '~/helpers/parsers/parserHelpers'
const { api, isLoading } = useApi() const { api, isLoading } = useApi()
@ -42,28 +43,8 @@ const pagination = reactive({
pageSize: 10, pageSize: 10,
}) })
const getDefaultTokenValue = (tokens: IApiTokenInfo[]) => { const getDefaultTokenName = (tokens: IApiTokenInfo[]) => {
let extractedSortedTokenNumbers = return extractNextDefaultName([...tokens.map((el) => el?.description || '')], defaultTokenName)
[...tokens]
.map((e) => {
let tokenName = e.description?.split('-')
if (tokenName && tokenName[tokenName.length - 1] && !isNaN(Number(tokenName[tokenName.length - 1]?.trim()))) {
return Number(tokenName[tokenName.length - 1]?.trim())
}
})
.filter((e) => e)
.sort((a, b) => {
if (a !== undefined && b !== undefined) {
return a - b
}
return 0
}) || []
if (extractedSortedTokenNumbers.length) {
return `${defaultTokenName}-${(extractedSortedTokenNumbers[extractedSortedTokenNumbers.length - 1] || 0) + 1}`
} else {
return `${defaultTokenName}-1`
}
} }
const hideOrShowToken = (tokenId: string) => { const hideOrShowToken = (tokenId: string) => {
@ -91,7 +72,7 @@ const loadTokens = async (page = currentPage.value, limit = currentLimit.value)
pagination.pageSize = 10 pagination.pageSize = 10
tokens.value = response.list as IApiTokenInfo[] tokens.value = response.list as IApiTokenInfo[]
selectedTokenData.value.description = getDefaultTokenValue(tokens.value) selectedTokenData.value.description = getDefaultTokenName(tokens.value)
} catch (e: any) { } catch (e: any) {
message.error(await extractSdkResponseErrorMsg(e)) message.error(await extractSdkResponseErrorMsg(e))
} }

4
packages/nc-gui/components/smartsheet/grid/Table.vue

@ -1703,7 +1703,7 @@ onKeyStroke('ArrowDown', onDown)
(isLinksOrLTAR(fields[contextMenuTarget.col]) || !isVirtualCol(fields[contextMenuTarget.col])) (isLinksOrLTAR(fields[contextMenuTarget.col]) || !isVirtualCol(fields[contextMenuTarget.col]))
" "
class="nc-base-menu-item" class="nc-base-menu-item"
:disabled="!!isSystemColumn(fields[contextMenuTarget.col])" :disabled="isSystemColumn(fields[contextMenuTarget.col])"
@click="clearCell(contextMenuTarget)" @click="clearCell(contextMenuTarget)"
> >
<div v-e="['a:row:clear']" class="flex gap-2 items-center"> <div v-e="['a:row:clear']" class="flex gap-2 items-center">
@ -1717,7 +1717,7 @@ onKeyStroke('ArrowDown', onDown)
v-else-if="contextMenuTarget && hasEditPermission" v-else-if="contextMenuTarget && hasEditPermission"
class="nc-base-menu-item" class="nc-base-menu-item"
@click="clearSelectedRangeOfCells()" @click="clearSelectedRangeOfCells()"
:disabled="!!isSystemColumn(fields[contextMenuTarget.col])" :disabled="isSystemColumn(fields[contextMenuTarget.col])"
> >
<div v-e="['a:row:clear-range']" class="flex gap-2 items-center"> <div v-e="['a:row:clear-range']" class="flex gap-2 items-center">
<GeneralIcon icon="closeBox" class="text-gray-500" /> <GeneralIcon icon="closeBox" class="text-gray-500" />

2
packages/nc-gui/components/smartsheet/header/Cell.vue

@ -49,7 +49,7 @@ const closeAddColumnDropdown = () => {
} }
const openHeaderMenu = () => { const openHeaderMenu = () => {
if (isLocked.value || (!!isSystemColumn(column.value) && column.value.uidt !== UITypes.ID)) return if (isLocked.value || (isSystemColumn(column.value) && column.value.uidt !== UITypes.ID)) return
if (!isForm.value && !isExpandedForm.value && isUIAllowed('fieldEdit') && !isMobileMode.value) { if (!isForm.value && !isExpandedForm.value && isUIAllowed('fieldEdit') && !isMobileMode.value) {
editColumnDropdown.value = true editColumnDropdown.value = true

2
packages/nc-gui/components/smartsheet/header/Menu.vue

@ -292,7 +292,7 @@ const onInsertAfter = () => {
</div> </div>
<template #overlay> <template #overlay>
<a-menu class="shadow bg-white nc-column-options"> <a-menu class="shadow bg-white nc-column-options">
<a-menu-item @click="onEditPress" :disabled="!!isSystemColumn(column) && column?.uidt !== UITypes.ID"> <a-menu-item @click="onEditPress" :disabled="isSystemColumn(column) && column?.uidt !== UITypes.ID">
<div class="nc-column-edit nc-header-menu-item"> <div class="nc-column-edit nc-header-menu-item">
<component :is="iconMap.edit" class="text-gray-700 mx-0.65 my-0.75" /> <component :is="iconMap.edit" class="text-gray-700 mx-0.65 my-0.75" />
<!-- Edit --> <!-- Edit -->

7
packages/nc-gui/components/smartsheet/toolbar/CreateGroupBy.vue

@ -83,13 +83,12 @@ const onArrowUp = () => {
<template> <template>
<div <div
class="flex flex-col w-full pt-4 pb-2 min-w-64 nc-group-create-modal" class="flex flex-col w-full pt-4 pb-2 min-w-64 nc-group-by-create-modal"
@keydown.arrow-down.prevent="onArrowDown" @keydown.arrow-down.prevent="onArrowDown"
@keydown.arrow-up.prevent="onArrowUp" @keydown.arrow-up.prevent="onArrowUp"
@keydown.enter.prevent="onClick(options[activeFieldIndex])" @keydown.enter.prevent="onClick(options[activeFieldIndex])"
> >
<div class="flex pb-3 px-4 border-b-1 border-gray-100"> <div class="flex pb-3 px-4 border-b-1 border-gray-100">
<!-- Todo language for selectFieldToGroup -->
<input ref="inputRef" v-model="search" class="w-full focus:outline-none" :placeholder="$t('msg.selectFieldToGroup')" /> <input ref="inputRef" v-model="search" class="w-full focus:outline-none" :placeholder="$t('msg.selectFieldToGroup')" />
</div> </div>
<div class="flex-col w-full max-h-100 max-w-76 nc-scrollbar-md !overflow-y-auto"> <div class="flex-col w-full max-h-100 max-w-76 nc-scrollbar-md !overflow-y-auto">
@ -97,8 +96,8 @@ const onArrowUp = () => {
<div <div
v-for="(option, index) in options" v-for="(option, index) in options"
:key="index" :key="index"
v-e="['c:sort:add:column:select']" v-e="['c:group-by:add:column:select']"
class="flex flex-row h-10 items-center gap-x-1.5 px-2.5 hover:bg-gray-100 cursor-pointer nc-group-column-search-item" class="flex flex-row h-10 items-center gap-x-1.5 px-2.5 hover:bg-gray-100 cursor-pointer nc-group-by-column-search-item"
:class="{ :class="{
'bg-gray-100': activeFieldIndex === index, 'bg-gray-100': activeFieldIndex === index,
}" }"

6
packages/nc-gui/components/smartsheet/toolbar/GroupByMenu.vue

@ -180,7 +180,7 @@ const loadAllowedLookups = async () => {
for (const col of meta.value?.columns || []) { for (const col of meta.value?.columns || []) {
if (col.uidt !== UITypes.Lookup) continue if (col.uidt !== UITypes.Lookup) continue
let nextCol: ColumnType | undefined = col let nextCol: ColumnType = col
// check the lookup column is supported type or not // check the lookup column is supported type or not
while (nextCol && nextCol.uidt === UITypes.Lookup) { while (nextCol && nextCol.uidt === UITypes.Lookup) {
const lookupRelation = (await getMeta(nextCol.fk_model_id as string))?.columns?.find( const lookupRelation = (await getMeta(nextCol.fk_model_id as string))?.columns?.find(
@ -193,7 +193,7 @@ const loadAllowedLookups = async () => {
nextCol = relatedTableMeta?.columns?.find( nextCol = relatedTableMeta?.columns?.find(
(c) => c.id === ((nextCol?.colOptions as LookupType).fk_lookup_column_id as string), (c) => c.id === ((nextCol?.colOptions as LookupType).fk_lookup_column_id as string),
) ) as ColumnType
// if next column is same as root lookup column then break the loop // if next column is same as root lookup column then break the loop
// since it's going to be a circular loop, and ignore the column // since it's going to be a circular loop, and ignore the column
@ -304,7 +304,7 @@ watch(meta, async () => {
> >
<NcButton <NcButton
v-e="['c:group-by:add']" v-e="['c:group-by:add']"
class="nc-add-group-btn !text-brand-500" class="nc-add-group-by-btn !text-brand-500"
style="width: fit-content" style="width: fit-content"
size="small" size="small"
type="text" type="text"

31
packages/nc-gui/components/webhook/Editor.vue

@ -20,6 +20,7 @@ import {
useNuxtApp, useNuxtApp,
watch, watch,
} from '#imports' } from '#imports'
import { extractNextDefaultName } from '~/helpers/parsers/parserHelpers'
interface Props { interface Props {
hook?: HookType hook?: HookType
@ -49,13 +50,13 @@ const titleDomRef = ref<HTMLInputElement | undefined>()
const useForm = Form.useForm const useForm = Form.useForm
const defaultWebhookName = 'Webhook' const defaultHookName = t('labels.webhook')
let hookRef = reactive< let hookRef = reactive<
Omit<HookType, 'notification'> & { notification: Record<string, any>; eventOperation?: string; condition: boolean } Omit<HookType, 'notification'> & { notification: Record<string, any>; eventOperation?: string; condition: boolean }
>({ >({
id: '', id: '',
title: defaultWebhookName, title: defaultHookName,
event: undefined, event: undefined,
operation: undefined, operation: undefined,
eventOperation: undefined, eventOperation: undefined,
@ -474,28 +475,8 @@ async function testWebhook() {
await webhookTestRef.value.testWebhook() await webhookTestRef.value.testWebhook()
} }
function getDefaultTokenValue(hooks: HookType[]) { const getDefaultHookName = (hooks: HookType[]) => {
let extractedSortedTokenNumbers = return extractNextDefaultName([...hooks.map((el) => el?.title || '')], defaultHookName)
[...hooks]
.map((hook) => {
let hookName = hook.title?.split('-')
if (hookName && hookName[hookName.length - 1] && !isNaN(Number(hookName[hookName.length - 1]?.trim()))) {
return Number(hookName[hookName.length - 1]?.trim())
}
})
.filter((e) => e)
.sort((a, b) => {
if (a !== undefined && b !== undefined) {
return a - b
}
return 0
}) || []
if (extractedSortedTokenNumbers.length) {
return `${defaultWebhookName}-${(extractedSortedTokenNumbers[extractedSortedTokenNumbers.length - 1] || 0) + 1}`
} else {
return `${defaultWebhookName}-1`
}
} }
watch( watch(
@ -528,7 +509,7 @@ onMounted(async () => {
} else { } else {
hookRef.eventOperation = eventList.value[0].value.join(' ') hookRef.eventOperation = eventList.value[0].value.join(' ')
} }
hookRef.title = getDefaultTokenValue(hooks.value) hookRef.title = getDefaultHookName(hooks.value)
onNotificationTypeChange() onNotificationTypeChange()

33
packages/nc-gui/helpers/parsers/parserHelpers.ts

@ -191,3 +191,36 @@ export const filterNullOrUndefinedObjectProperties = <T extends Record<string, a
return result return result
}, {} as Record<string, any>) as T }, {} as Record<string, any>) as T
} }
/**
* Extracts the next default name based on the provided namesData, defaultName, and splitOperator.
*
* @param namesData - An array of strings containing existing names data.
* @param defaultName - The default name to extract and generate the next name from.
* @param splitOperator - The separator used to split the defaultName and numbers in existing namesData.
* Defaults to '-'. Example: If defaultName is 'Token' and splitOperator is '-',
* existing names like 'Token-1', 'Token-2', etc., will be considered.
* @returns The next default name with an incremented number based on existing namesData.
*/
export const extractNextDefaultName = (namesData: string[], defaultName: string, splitOperator: string = '-'): string => {
// Extract and sort numbers associated with the provided defaultName
const extractedSortedNumbers =
(namesData
.map((name) => {
const [_defaultName, number] = name.split(splitOperator)
if (_defaultName === defaultName && !isNaN(Number(number?.trim()))) {
return Number(number?.trim())
}
})
.filter((e) => e)
.sort((a, b) => {
if (a !== undefined && b !== undefined) {
return a - b
}
return 0
}) as number[]) || []
return extractedSortedNumbers.length
? `${defaultName}${splitOperator}${extractedSortedNumbers[extractedSortedNumbers.length - 1] + 1}`
: `${defaultName}${splitOperator}1`
}

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

@ -640,7 +640,8 @@
"sourceNameRequired": "Source name is required", "sourceNameRequired": "Source name is required",
"changeWsName": "Change Workspace Name", "changeWsName": "Change Workspace Name",
"pressEnter": "Press Enter", "pressEnter": "Press Enter",
"newFormLoaded": "New form will be loaded after" "newFormLoaded": "New form will be loaded after",
"webhook": "Webhook"
}, },
"activity": { "activity": {
"openInANewTab": "Open in a new tab", "openInANewTab": "Open in a new tab",
@ -1343,4 +1344,4 @@
"roleUpdated": "Role updated successfully" "roleUpdated": "Role updated successfully"
} }
} }
} }
Loading…
Cancel
Save