-
-
-
-
- |
diff --git a/packages/nc-gui/components/cell/DateTimePicker.vue b/packages/nc-gui/components/cell/DateTimePicker.vue
index 38c0d1417d..a7dc723f14 100644
--- a/packages/nc-gui/components/cell/DateTimePicker.vue
+++ b/packages/nc-gui/components/cell/DateTimePicker.vue
@@ -1,5 +1,6 @@
{
:input-read-only="true"
:dropdown-class-name="`${randomClass} nc-picker-datetime ${open ? 'active' : ''}`"
:open="readOnly || (localState && isPk) || isLockedMode ? false : open && (active || editable)"
- :disabled="readOnly || (localState && isPk)"
@click="clickHandler"
@ok="open = !open"
>
diff --git a/packages/nc-gui/components/dashboard/Sidebar.vue b/packages/nc-gui/components/dashboard/Sidebar.vue
index 8b5e49ba1b..8ad15ede16 100644
--- a/packages/nc-gui/components/dashboard/Sidebar.vue
+++ b/packages/nc-gui/components/dashboard/Sidebar.vue
@@ -1,144 +1,80 @@
@@ -146,8 +82,4 @@ const navigateToSettings = () => {
.nc-sidebar-top-button {
@apply flex flex-row mx-1 px-3.5 rounded-md items-center py-0.75 my-0.5 gap-x-2 hover:bg-gray-200 cursor-pointer;
}
-
-:deep(.nc-shared-base.nc-treeview-container) {
- @apply !h-full;
-}
diff --git a/packages/nc-gui/components/dashboard/Sidebar/Header.vue b/packages/nc-gui/components/dashboard/Sidebar/Header.vue
new file mode 100644
index 0000000000..9e73d8fbd3
--- /dev/null
+++ b/packages/nc-gui/components/dashboard/Sidebar/Header.vue
@@ -0,0 +1,60 @@
+
+
+
+
+
diff --git a/packages/nc-gui/components/dashboard/Sidebar/TopSection.vue b/packages/nc-gui/components/dashboard/Sidebar/TopSection.vue
new file mode 100644
index 0000000000..8c77a4a115
--- /dev/null
+++ b/packages/nc-gui/components/dashboard/Sidebar/TopSection.vue
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/nc-gui/pages/index/[typeOrId]/[projectId]/index/index/[type]/[viewId]/[[viewTitle]]/[...slugs].vue b/packages/nc-gui/components/dashboard/Sidebar/TopSection/Header.vue
similarity index 100%
rename from packages/nc-gui/pages/index/[typeOrId]/[projectId]/index/index/[type]/[viewId]/[[viewTitle]]/[...slugs].vue
rename to packages/nc-gui/components/dashboard/Sidebar/TopSection/Header.vue
diff --git a/packages/nc-gui/components/dashboard/Sidebar/UserInfo.vue b/packages/nc-gui/components/dashboard/Sidebar/UserInfo.vue
new file mode 100644
index 0000000000..ae913e231e
--- /dev/null
+++ b/packages/nc-gui/components/dashboard/Sidebar/UserInfo.vue
@@ -0,0 +1,188 @@
+
+
+
+
+
+
+
diff --git a/packages/nc-gui/components/dashboard/TreeView.vue b/packages/nc-gui/components/dashboard/TreeView.vue
deleted file mode 100644
index 9e7151cba7..0000000000
--- a/packages/nc-gui/components/dashboard/TreeView.vue
+++ /dev/null
@@ -1,1475 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/packages/nc-gui/components/dashboard/TreeViewNew/AddNewTableNode.vue b/packages/nc-gui/components/dashboard/TreeView/AddNewTableNode.vue
similarity index 100%
rename from packages/nc-gui/components/dashboard/TreeViewNew/AddNewTableNode.vue
rename to packages/nc-gui/components/dashboard/TreeView/AddNewTableNode.vue
diff --git a/packages/nc-gui/components/dashboard/TreeViewNew/BaseOptions.vue b/packages/nc-gui/components/dashboard/TreeView/BaseOptions.vue
similarity index 100%
rename from packages/nc-gui/components/dashboard/TreeViewNew/BaseOptions.vue
rename to packages/nc-gui/components/dashboard/TreeView/BaseOptions.vue
diff --git a/packages/nc-gui/components/dashboard/TreeViewNew/ProjectNode.vue b/packages/nc-gui/components/dashboard/TreeView/ProjectNode.vue
similarity index 95%
rename from packages/nc-gui/components/dashboard/TreeViewNew/ProjectNode.vue
rename to packages/nc-gui/components/dashboard/TreeView/ProjectNode.vue
index 8168f11f00..91c699e9f9 100644
--- a/packages/nc-gui/components/dashboard/TreeViewNew/ProjectNode.vue
+++ b/packages/nc-gui/components/dashboard/TreeView/ProjectNode.vue
@@ -175,6 +175,8 @@ function openTableCreateDialog(baseIndex?: number | undefined) {
if (!table) return
+ project.value.isExpanded = true
+
if (!activeKey.value || !activeKey.value.includes(`collapse-${baseId}`)) {
activeKey.value.push(`collapse-${baseId}`)
}
@@ -200,10 +202,19 @@ const addNewProjectChildEntity = async () => {
if (isAddNewProjectChildEntityLoading.value) return
isAddNewProjectChildEntityLoading.value = true
+
+ const isProjectPopulated = projectsStore.isProjectPopulated(project.value.id!)
+ if (!isProjectPopulated && project.value.type === NcProjectType.DB) {
+ // We do not wait for tables api, so that add new table is seamless.
+ // Only con would be while saving table duplicate table name FE validation might not work
+ // If the table list api takes time to load before the table name validation
+ loadProjectTables(project.value.id!)
+ }
+
try {
openTableCreateDialog()
- if (!project.value.isExpanded) {
+ if (!project.value.isExpanded && project.value.type !== NcProjectType.DB) {
project.value.isExpanded = true
}
} finally {
@@ -246,7 +257,6 @@ const onProjectClick = async (project: NcProject, ignoreNavigation?: boolean, to
}
if (!isProjectPopulated) {
- await loadProject(project.id!)
await loadProjectTables(project.id!)
}
@@ -375,7 +385,7 @@ const DlgProjectDuplicateOnOk = async (jobData: { id: string; project_id: string
@click="onProjectClick(project, true, true)"
>
@@ -444,7 +454,7 @@ const DlgProjectDuplicateOnOk = async (jobData: { id: string; project_id: string
@@ -458,7 +468,7 @@ const DlgProjectDuplicateOnOk = async (jobData: { id: string; project_id: string
@@ -498,7 +508,7 @@ const DlgProjectDuplicateOnOk = async (jobData: { id: string; project_id: string
-
+
@@ -540,7 +550,7 @@ const DlgProjectDuplicateOnOk = async (jobData: { id: string; project_id: string
@@ -627,7 +637,7 @@ const DlgProjectDuplicateOnOk = async (jobData: { id: string; project_id: string
-
+
@@ -652,7 +662,7 @@ const DlgProjectDuplicateOnOk = async (jobData: { id: string; project_id: string
:key="`sortable-${base.id}-${base.id && base.id in keys ? keys[base.id] : '0'}`"
:nc-base="base.id"
>
-
+
@@ -726,7 +736,7 @@ const DlgProjectDuplicateOnOk = async (jobData: { id: string; project_id: string
}
:deep(.ant-collapse-header) {
- @apply !mx-0 !pl-8.75 !pr-1 !py-0.75 hover:bg-gray-100 !rounded-md;
+ @apply !mx-0 !pl-8.75 !pr-1 !py-0.75 hover:bg-gray-200 !rounded-md;
}
:deep(.ant-collapse-header:hover .nc-sidebar-base-node-btns) {
diff --git a/packages/nc-gui/components/dashboard/TreeViewNew/ProjectWrapper.vue b/packages/nc-gui/components/dashboard/TreeView/ProjectWrapper.vue
similarity index 100%
rename from packages/nc-gui/components/dashboard/TreeViewNew/ProjectWrapper.vue
rename to packages/nc-gui/components/dashboard/TreeView/ProjectWrapper.vue
diff --git a/packages/nc-gui/components/dashboard/TreeViewNew/TableList.vue b/packages/nc-gui/components/dashboard/TreeView/TableList.vue
similarity index 100%
rename from packages/nc-gui/components/dashboard/TreeViewNew/TableList.vue
rename to packages/nc-gui/components/dashboard/TreeView/TableList.vue
diff --git a/packages/nc-gui/components/dashboard/TreeViewNew/TableNode.vue b/packages/nc-gui/components/dashboard/TreeView/TableNode.vue
similarity index 94%
rename from packages/nc-gui/components/dashboard/TreeViewNew/TableNode.vue
rename to packages/nc-gui/components/dashboard/TreeView/TableNode.vue
index 4a6b9b6ce2..5acaea2887 100644
--- a/packages/nc-gui/components/dashboard/TreeViewNew/TableNode.vue
+++ b/packages/nc-gui/components/dashboard/TreeView/TableNode.vue
@@ -68,8 +68,11 @@ const setIcon = async (icon: string, table: TableType) => {
// Todo: temp
const { isSharedBase } = useProject()
-
// const isMultiBase = computed(() => project.bases && project.bases.length > 1)
+
+const canUserEditEmote = computed(() => {
+ return isUIAllowed('tableIconCustomisation', false, projectRole?.value)
+})
@@ -98,16 +101,22 @@ const { isSharedBase } = useProject()
{{ table.table_name }}
-
+
-
+
{{ 'Change icon' }}
diff --git a/packages/nc-gui/components/dashboard/TreeViewNew/index.vue b/packages/nc-gui/components/dashboard/TreeView/index.vue
similarity index 81%
rename from packages/nc-gui/components/dashboard/TreeViewNew/index.vue
rename to packages/nc-gui/components/dashboard/TreeView/index.vue
index 99453e31ad..c8f8b82922 100644
--- a/packages/nc-gui/components/dashboard/TreeViewNew/index.vue
+++ b/packages/nc-gui/components/dashboard/TreeView/index.vue
@@ -2,7 +2,6 @@
import type { TableType } from 'nocodb-sdk'
import { message } from 'ant-design-vue'
-import GithubButton from 'vue-github-button'
import ProjectWrapper from './ProjectWrapper.vue'
import type { TabType } from '#imports'
@@ -28,10 +27,6 @@ import {
import { useRouter } from '#app'
-const emit = defineEmits<{
- (event: 'onScrollTop', type: boolean): void
-}>()
-
const { isUIAllowed } = useUIPermission()
const { addTab } = useTabs()
@@ -48,8 +43,12 @@ const { createProject: _createProject } = projectsStore
const { projects, projectsList, activeProjectId } = storeToRefs(projectsStore)
+const { isWorkspaceLoading } = storeToRefs(useWorkspace())
+
const { openTable } = useTablesStore()
+const projectCreateDlg = ref(false)
+
const projectStore = useProject()
const { loadTables } = projectStore
@@ -184,6 +183,12 @@ useEventListener(document, 'keydown', async (e: KeyboardEvent) => {
}
break
}
+ // ALT + D
+ case 68: {
+ e.stopPropagation()
+ projectCreateDlg.value = true
+ break
+ }
}
}
})
@@ -203,19 +208,6 @@ provide(TreeViewInj, {
useEventListener(document, 'contextmenu', handleContext, true)
-const treeViewDom = ref()
-
-const checkScrollTopMoreThanZero = () => {
- if (treeViewDom.value) {
- if (treeViewDom.value.scrollTop > 0) {
- emit('onScrollTop', true)
- } else {
- emit('onScrollTop', false)
- }
- }
- return false
-}
-
const scrollTableNode = () => {
const activeTableDom = document.querySelector(`.nc-treeview [data-table-id="${_activeTable.value?.id}"]`)
if (!activeTableDom) return
@@ -256,56 +248,24 @@ watch(
immediate: true,
},
)
-
-onMounted(() => {
- treeViewDom.value?.addEventListener('scroll', checkScrollTopMoreThanZero)
-})
-
-onUnmounted(() => {
- treeViewDom.value?.removeEventListener('scroll', checkScrollTopMoreThanZero)
-})
-
+
-
-
-
- Star
-
-
-
-
-
+
+
diff --git a/packages/nc-gui/components/dashboard/settings/app-store/AppInstall.vue b/packages/nc-gui/components/dashboard/settings/app-store/AppInstall.vue
index c345d8dca7..510c8f99e0 100644
--- a/packages/nc-gui/components/dashboard/settings/app-store/AppInstall.vue
+++ b/packages/nc-gui/components/dashboard/settings/app-store/AppInstall.vue
@@ -264,16 +264,17 @@ onMounted(async () => {
diff --git a/packages/nc-gui/components/dashboard/settings/data-sources/CreateBase.vue b/packages/nc-gui/components/dashboard/settings/data-sources/CreateBase.vue
index 4ec3d9f95c..6bb55c0941 100644
--- a/packages/nc-gui/components/dashboard/settings/data-sources/CreateBase.vue
+++ b/packages/nc-gui/components/dashboard/settings/data-sources/CreateBase.vue
@@ -379,6 +379,7 @@ watch(
New Base
+
diff --git a/packages/nc-gui/components/dlg/AirtableImport.vue b/packages/nc-gui/components/dlg/AirtableImport.vue
index d94329e29d..136b6bc096 100644
--- a/packages/nc-gui/components/dlg/AirtableImport.vue
+++ b/packages/nc-gui/components/dlg/AirtableImport.vue
@@ -25,9 +25,9 @@ const { modelValue, baseId } = defineProps<{
const emit = defineEmits(['update:modelValue'])
-const { appInfo } = useGlobal()
+const { $api } = useNuxtApp()
-const baseURL = appInfo.value.ncSiteUrl
+const baseURL = $api.instance.defaults.baseURL
const { $state, $jobs } = useNuxtApp()
diff --git a/packages/nc-gui/components/dlg/ProjectDuplicate.vue b/packages/nc-gui/components/dlg/ProjectDuplicate.vue
index 21fc1290db..3fba10c99a 100644
--- a/packages/nc-gui/components/dlg/ProjectDuplicate.vue
+++ b/packages/nc-gui/components/dlg/ProjectDuplicate.vue
@@ -33,8 +33,8 @@ const optionsToExclude = computed(() => {
const isLoading = ref(false)
const _duplicate = async () => {
- isLoading.value = true
try {
+ isLoading.value = true
// pick a random color from array and assign to project
const color = projectThemeColors[Math.floor(Math.random() * 1000) % projectThemeColors.length]
const tcolor = tinycolor(color)
@@ -58,18 +58,28 @@ const _duplicate = async () => {
props.onOk(jobData as any)
} catch (e: any) {
message.error(await extractSdkResponseErrorMsg(e))
+ } finally {
+ isLoading.value = false
+ dialogShow.value = false
}
- isLoading.value = false
- dialogShow.value = false
}
+onKeyStroke('Enter', () => {
+ // should only trigger this when our modal is open
+ if (dialogShow.value) {
+ _duplicate()
+ }
+})
+
const isEaster = ref(false)
- {{ $t('general.duplicate') }}
+
+ {{ $t('general.duplicate') }} {{ $t('objects.project') }}
+
Are you sure you want to duplicate the `{{ project.title }}` project?
@@ -85,9 +95,7 @@ const isEaster = ref(false)
{{ $t('general.cancel') }}
- {{ $t('general.confirm') }}
+ {{ $t('general.confirm') }}
-
-
diff --git a/packages/nc-gui/components/dlg/TableDuplicate.vue b/packages/nc-gui/components/dlg/TableDuplicate.vue
index c6293a51e0..f719589dd9 100644
--- a/packages/nc-gui/components/dlg/TableDuplicate.vue
+++ b/packages/nc-gui/components/dlg/TableDuplicate.vue
@@ -32,55 +32,59 @@ const optionsToExclude = computed(() => {
const isLoading = ref(false)
const _duplicate = async () => {
- isLoading.value = true
try {
+ isLoading.value = true
const jobData = await api.dbTable.duplicate(props.table.project_id!, props.table.id!, { options: optionsToExclude.value })
props.onOk(jobData as any)
} catch (e: any) {
message.error(await extractSdkResponseErrorMsg(e))
+ } finally {
+ isLoading.value = false
+ dialogShow.value = false
}
- isLoading.value = false
- dialogShow.value = false
}
+onKeyStroke('Enter', () => {
+ // should only trigger this when our modal is open
+ if (dialogShow.value) {
+ _duplicate()
+ }
+})
+
const isEaster = ref(false)
-
-
- {{ $t('general.duplicate') }} {{ table.title }}
+
+ {{ $t('general.duplicate') }} {{ $t('objects.table') }}
-
-
-
- Include hooks
+ Are you sure you want to duplicate the `{{ table.title }}` table?
+
+ {{ $t('title.advancedSettings') }}
+
+
+
+
+ Include data
+ Include views
+ Include webhooks
-
- {{ $t('general.cancel') }}
-
- {{ $t('general.duplicate') }}
-
+
+ {{ $t('general.cancel') }}
+ {{ $t('general.confirm') }}
-
+
-
-
diff --git a/packages/nc-gui/components/dlg/share-and-collaborate/View.vue b/packages/nc-gui/components/dlg/share-and-collaborate/View.vue
index 905560a185..ba5426fb79 100644
--- a/packages/nc-gui/components/dlg/share-and-collaborate/View.vue
+++ b/packages/nc-gui/components/dlg/share-and-collaborate/View.vue
@@ -155,11 +155,8 @@ watch(showShareModal, (val) => {
-
+
+
Share Base
{
+const { isLeftSidebarOpen: _isLeftSidebarOpen } = storeToRefs(useSidebarStore())
+const isLeftSidebarOpen = ref(_isLeftSidebarOpen.value)
+
+watch(_isLeftSidebarOpen, (val) => {
+ if (val) {
+ isLeftSidebarOpen.value = true
+ } else {
+ setTimeout(() => {
+ isLeftSidebarOpen.value = false
+ }, 300)
+ }
+})
+
+const onClick = () => {
+ if (_isLeftSidebarOpen.value) return
+
+ _isLeftSidebarOpen.value = !_isLeftSidebarOpen.value
+}
+
+
+
+
+
+ {{
+ isLeftSidebarOpen
+ ? `${$t('general.hide')} ${$t('objects.sidebar').toLowerCase()}`
+ : `${$t('general.show')} ${$t('objects.sidebar').toLowerCase()}`
+ }}
+
+
+
+
diff --git a/packages/nc-gui/components/general/ReleaseInfo.vue b/packages/nc-gui/components/general/ReleaseInfo.vue
index 058262417f..fb06d34aad 100644
--- a/packages/nc-gui/components/general/ReleaseInfo.vue
+++ b/packages/nc-gui/components/general/ReleaseInfo.vue
@@ -3,7 +3,7 @@ import { computed, extractSdkResponseErrorMsg, message, onMounted, useGlobal, us
const { $api } = useNuxtApp()
-const { currentVersion, latestRelease, hiddenRelease } = useGlobal()
+const { currentVersion, latestRelease, hiddenRelease, appInfo } = useGlobal()
const releaseAlert = computed({
get() {
@@ -41,14 +41,14 @@ onMounted(async () => await fetchReleaseInfo())
-
+
-
+
{{ $t('activity.upgrade.available') }}
-
+
diff --git a/packages/nc-gui/components/general/UserIcon.vue b/packages/nc-gui/components/general/UserIcon.vue
new file mode 100644
index 0000000000..e0428d02bf
--- /dev/null
+++ b/packages/nc-gui/components/general/UserIcon.vue
@@ -0,0 +1,51 @@
+
+
+
+
+
+ {{ usernameInitials }}
+
+
+
+
+
diff --git a/packages/nc-gui/components/general/ViewIcon.vue b/packages/nc-gui/components/general/ViewIcon.vue
index 0ced0f2f88..32356c84d6 100644
--- a/packages/nc-gui/components/general/ViewIcon.vue
+++ b/packages/nc-gui/components/general/ViewIcon.vue
@@ -23,11 +23,14 @@ const viewMeta = toRef(props, 'meta')
v-else-if="viewMeta?.type"
class="nc-view-icon group-hover"
:style="{
- 'color': !props.ignoreColor ? viewIcons[viewMeta.type]?.color : undefined,
- 'fontWeight': 500,
- '-webkit-text-stroke': !props.ignoreColor ? `0.5px ${viewIcons[viewMeta.type]?.color}` : '0.5px',
+ color: !props.ignoreColor ? viewIcons[viewMeta.type]?.color : undefined,
+ fontWeight: 500,
}"
/>
-
+
diff --git a/packages/nc-gui/components/general/WorkspaceIcon.vue b/packages/nc-gui/components/general/WorkspaceIcon.vue
new file mode 100644
index 0000000000..be32b5c108
--- /dev/null
+++ b/packages/nc-gui/components/general/WorkspaceIcon.vue
@@ -0,0 +1,37 @@
+
+
+
+
+
+ {{ props.workspace?.title?.slice(0, 2) }}
+
+
+
+
+
diff --git a/packages/nc-gui/components/general/language/index.vue b/packages/nc-gui/components/general/language/index.vue
index 6b08c99492..4a3fa748de 100644
--- a/packages/nc-gui/components/general/language/index.vue
+++ b/packages/nc-gui/components/general/language/index.vue
@@ -9,7 +9,7 @@
-
+
diff --git a/packages/nc-gui/components/nc/Badge.vue b/packages/nc-gui/components/nc/Badge.vue
index 81a7c12352..53d55c040e 100644
--- a/packages/nc-gui/components/nc/Badge.vue
+++ b/packages/nc-gui/components/nc/Badge.vue
@@ -1,6 +1,4 @@
@@ -39,7 +59,7 @@ const visible = useVModel(props, 'visible', emits)
-
+
diff --git a/packages/nc-gui/components/nc/Menu.vue b/packages/nc-gui/components/nc/Menu.vue
new file mode 100644
index 0000000000..3afd9e6565
--- /dev/null
+++ b/packages/nc-gui/components/nc/Menu.vue
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
diff --git a/packages/nc-gui/components/nc/MenuItem.vue b/packages/nc-gui/components/nc/MenuItem.vue
new file mode 100644
index 0000000000..08a42be6b4
--- /dev/null
+++ b/packages/nc-gui/components/nc/MenuItem.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
diff --git a/packages/nc-gui/components/nc/Modal.vue b/packages/nc-gui/components/nc/Modal.vue
index f40bc2160c..f50143b6d9 100644
--- a/packages/nc-gui/components/nc/Modal.vue
+++ b/packages/nc-gui/components/nc/Modal.vue
@@ -55,6 +55,8 @@ const height = computed(() => {
})
const visible = useVModel(props, 'visible', emits)
+
+const slots = useSlots()
@@ -76,7 +78,7 @@ const visible = useVModel(props, 'visible', emits)
maxHeight: height,
}"
>
-
+
diff --git a/packages/nc-gui/components/nc/Tooltip.vue b/packages/nc-gui/components/nc/Tooltip.vue
index b4b88f8fbb..0810b8b3ab 100644
--- a/packages/nc-gui/components/nc/Tooltip.vue
+++ b/packages/nc-gui/components/nc/Tooltip.vue
@@ -14,13 +14,19 @@ interface Props {
hideOnClick?: boolean
}
-const { modifierKey, tooltipStyle, disabled, hideOnClick } = defineProps ()
+const props = defineProps()
+
+const modifierKey = computed(() => props.modifierKey)
+const tooltipStyle = computed(() => props.tooltipStyle)
+const disabled = computed(() => props.disabled)
+const hideOnClick = computed(() => props.hideOnClick)
+const placement = computed(() => props.placement ?? 'top')
const el = ref()
const showTooltip = controlledRef(false, {
onBeforeChange: (shouldShow) => {
- if (shouldShow && disabled) return false
+ if (shouldShow && disabled.value) return false
},
})
@@ -31,7 +37,7 @@ const attrs = useAttrs()
const isKeyPressed = ref(false)
onKeyStroke(
- (e) => e.key === modifierKey,
+ (e) => e.key === modifierKey.value,
(e) => {
e.preventDefault()
@@ -45,7 +51,7 @@ onKeyStroke(
)
onKeyStroke(
- (e) => e.key === modifierKey,
+ (e) => e.key === modifierKey.value,
(e) => {
e.preventDefault()
@@ -55,7 +61,7 @@ onKeyStroke(
{ eventName: 'keyup' },
)
-watch([isHovering, () => modifierKey, () => disabled], ([hovering, key, isDisabled]) => {
+watch([isHovering, () => modifierKey.value, () => disabled.value], ([hovering, key, isDisabled]) => {
if (!hovering || isDisabled) {
showTooltip.value = false
return
@@ -85,7 +91,7 @@ const divStyles = computed(() => ({
}))
const onClick = () => {
- if (hideOnClick && showTooltip.value) {
+ if (hideOnClick.value && showTooltip.value) {
showTooltip.value = false
}
}
diff --git a/packages/nc-gui/components/project/AccessSettings.vue b/packages/nc-gui/components/project/AccessSettings.vue
index 682f8ffb8e..c2b2624630 100644
--- a/packages/nc-gui/components/project/AccessSettings.vue
+++ b/packages/nc-gui/components/project/AccessSettings.vue
@@ -1,8 +1,8 @@
@@ -50,6 +59,7 @@ const { allowCSVDownload } = useSharedView()
v-if="(isGrid || isGallery || isKanban || isMap) && !isPublic && isUIAllowed('dataInsert')"
:show-system-fields="false"
/>
+
diff --git a/packages/nc-gui/components/smartsheet/Topbar.vue b/packages/nc-gui/components/smartsheet/Topbar.vue
index e6bb0d336a..cf502f9fb4 100644
--- a/packages/nc-gui/components/smartsheet/Topbar.vue
+++ b/packages/nc-gui/components/smartsheet/Topbar.vue
@@ -22,13 +22,17 @@ const isSharedBase = computed(() => route.value.params.typeOrId === 'base')
+
@@ -38,6 +42,11 @@ const isSharedBase = computed(() => route.value.params.typeOrId === 'base')
+
+
diff --git a/packages/nc-gui/components/smartsheet/column/AdvancedOptions.vue b/packages/nc-gui/components/smartsheet/column/AdvancedOptions.vue
index 05e9e7594b..417c05c11a 100644
--- a/packages/nc-gui/components/smartsheet/column/AdvancedOptions.vue
+++ b/packages/nc-gui/components/smartsheet/column/AdvancedOptions.vue
@@ -50,7 +50,7 @@ vModel.value.au = !!vModel.value.au */
@@ -59,6 +59,7 @@ vModel.value.au = !!vModel.value.au */
@@ -67,17 +68,17 @@ vModel.value.au = !!vModel.value.au */
-
+
-
+
@@ -95,13 +96,13 @@ vModel.value.au = !!vModel.value.au */
-
+
diff --git a/packages/nc-gui/components/smartsheet/expanded-form/Header.vue b/packages/nc-gui/components/smartsheet/expanded-form/Header.vue
index 85e117b19b..991daa19e2 100644
--- a/packages/nc-gui/components/smartsheet/expanded-form/Header.vue
+++ b/packages/nc-gui/components/smartsheet/expanded-form/Header.vue
@@ -49,7 +49,7 @@ const { copy } = useCopy()
const copyRecordUrl = () => {
copy(
encodeURI(
- `${dashboardUrl?.value}#/${route.params.typeOrId}/${route.params.projectId}/${route.params.type}/${meta.value?.id}${
+ `${dashboardUrl?.value}#/${route.params.typeOrId}/${route.params.projectId}/${meta.value?.id}${
props.view ? `/${props.view.title}` : ''
}?rowId=${primaryKey.value}`,
),
@@ -127,12 +127,18 @@ const onConfirmDeleteRowClick = async () => {
/>
-
+
{{ $t('general.save') }}
-
+
-
+
@@ -174,9 +180,17 @@ const onConfirmDeleteRowClick = async () => {
-
- Are you sure you want to delete this row?
-
+
+
+ Delete row ?
+
+ Are you sure you want to delete this row?
+
+
+ {{ $t('general.cancel') }}
+ {{ $t('general.confirm') }}
+
+
diff --git a/packages/nc-gui/components/smartsheet/grid/Table.vue b/packages/nc-gui/components/smartsheet/grid/Table.vue
index ef05be4d58..9346b2ee94 100644
--- a/packages/nc-gui/components/smartsheet/grid/Table.vue
+++ b/packages/nc-gui/components/smartsheet/grid/Table.vue
@@ -1124,7 +1124,7 @@ defineExpose({
})
// when expand is clicked the drawer should open
-// and cell should loose focus
+// and cell should loose focs
const expandAndLooseFocus = (row: Row, col: Record ) => {
if (expandForm) {
expandForm(row, col)
@@ -1218,7 +1218,7 @@ const expandAndLooseFocus = (row: Row, col: Record) => {
>
-
+
@@ -1469,7 +1469,7 @@ const expandAndLooseFocus = (row: Row, col: Record) => {
>
-
+
|
|
@@ -1590,7 +1590,7 @@ const expandAndLooseFocus = (row: Row, col: Record) => {
:extra-style="paginationStyleRef?.extraStyle"
>
-
+
import type { ColumnReqType, ColumnType } from 'nocodb-sdk'
-import { ColumnInj, IsFormInj, IsKanbanInj, IsLockedInj, inject, provide, ref, toRef, useUIPermission } from '#imports'
+import { ColumnInj, IsFormInj, IsKanbanInj, inject, provide, ref, toRef, useUIPermission } from '#imports'
interface Props {
column: ColumnType
@@ -18,8 +18,6 @@ const isDropDownOpen = ref(false)
const isKanban = inject(IsKanbanInj, ref(false))
-const isLocked = inject(IsLockedInj, ref(false))
-
const column = toRef(props, 'column')
const { isUIAllowed } = useUIPermission()
@@ -41,7 +39,7 @@ const closeAddColumnDropdown = () => {
}
const openHeaderMenu = () => {
- if (!isLocked.value && !isForm.value && isUIAllowed('edit-column')) {
+ if (!isForm.value && isUIAllowed('edit-column')) {
editColumnDropdown.value = true
}
}
@@ -59,7 +57,7 @@ const openHeaderMenu = () => {
diff --git a/packages/nc-gui/components/smartsheet/sidebar/MenuTop.vue b/packages/nc-gui/components/smartsheet/sidebar/MenuTop.vue
index 30bd040c3f..451577c05f 100644
--- a/packages/nc-gui/components/smartsheet/sidebar/MenuTop.vue
+++ b/packages/nc-gui/components/smartsheet/sidebar/MenuTop.vue
@@ -303,7 +303,7 @@ const setIcon = async (icon: string, view: ViewType) => {
|