diff --git a/packages/nc-gui/components/cell/MultiSelect.vue b/packages/nc-gui/components/cell/MultiSelect.vue index 3a625e8c24..7b4651c01c 100644 --- a/packages/nc-gui/components/cell/MultiSelect.vue +++ b/packages/nc-gui/components/cell/MultiSelect.vue @@ -55,9 +55,7 @@ const searchVal = ref() const { $api } = useNuxtApp() -const { getMeta } = useMetas() - -const { isUIAllowed } = useRoles() +const { isUIAllowed, isMetaReadOnly } = useRoles() const { isPg, isMysql } = useBase() @@ -522,7 +520,9 @@ const onFocus = () => { diff --git a/packages/nc-gui/components/cell/SingleSelect.vue b/packages/nc-gui/components/cell/SingleSelect.vue index 5852a9dcbf..036308cc48 100644 --- a/packages/nc-gui/components/cell/SingleSelect.vue +++ b/packages/nc-gui/components/cell/SingleSelect.vue @@ -49,7 +49,7 @@ const searchVal = ref() const { getMeta } = useMetas() -const { isUIAllowed } = useRoles() +const { isUIAllowed, isMetaReadOnly } = useRoles() const { isPg, isMysql } = useBase() @@ -59,7 +59,9 @@ const tempSelectedOptState = ref() const isFocusing = ref(false) -const isNewOptionCreateEnabled = computed(() => !isPublic.value && !disableOptionCreation && isUIAllowed('fieldEdit')) +const isNewOptionCreateEnabled = computed( + () => !isPublic.value && !disableOptionCreation && isUIAllowed('fieldEdit') && !isMetaReadOnly.value, +) const options = computed<(SelectOptionType & { value: string })[]>(() => { if (column?.value.colOptions) { diff --git a/packages/nc-gui/components/dashboard/TreeView/CreateViewBtn.vue b/packages/nc-gui/components/dashboard/TreeView/CreateViewBtn.vue index b2da2dbb39..73916c132c 100644 --- a/packages/nc-gui/components/dashboard/TreeView/CreateViewBtn.vue +++ b/packages/nc-gui/components/dashboard/TreeView/CreateViewBtn.vue @@ -1,5 +1,5 @@ + + + + diff --git a/packages/nc-gui/components/general/BaseLogo.vue b/packages/nc-gui/components/general/BaseLogo.vue index 1720d12083..765acd9aa4 100644 --- a/packages/nc-gui/components/general/BaseLogo.vue +++ b/packages/nc-gui/components/general/BaseLogo.vue @@ -6,7 +6,7 @@ import SimpleIconsMicrosoftsqlserver from '~icons/simple-icons/microsoftsqlserve import LogosSnowflakeIcon from '~icons/logos/snowflake-icon' import MdiDatabaseOutline from '~icons/mdi/database-outline' -const { sourceType } = defineProps<{ sourceType?: string }>() +const { sourceType } = defineProps<{ sourceType?: string; color?: string }>() const baseIcon = computed(() => { switch (sourceType) { @@ -27,5 +27,5 @@ const baseIcon = computed(() => { diff --git a/packages/nc-gui/components/general/SourceRestrictionTooltip.vue b/packages/nc-gui/components/general/SourceRestrictionTooltip.vue new file mode 100644 index 0000000000..7882327184 --- /dev/null +++ b/packages/nc-gui/components/general/SourceRestrictionTooltip.vue @@ -0,0 +1,39 @@ + + + diff --git a/packages/nc-gui/components/nc/Tooltip.vue b/packages/nc-gui/components/nc/Tooltip.vue index 69e5b3ef07..c5c96b85e7 100644 --- a/packages/nc-gui/components/nc/Tooltip.vue +++ b/packages/nc-gui/components/nc/Tooltip.vue @@ -14,6 +14,8 @@ interface Props { hideOnClick?: boolean overlayClassName?: string wrapChild?: keyof HTMLElementTagNameMap + mouseLeaveDelay?: number + overlayInnerStyle?: object } const props = defineProps() @@ -77,7 +79,7 @@ watch([isHovering, () => modifierKey.value, () => disabled.value], ([hovering, k } } - if (!hovering || isDisabled) { + if ((!hovering || isDisabled) && !props.mouseLeaveDelay) { showTooltip.value = false return } @@ -117,9 +119,11 @@ const onClick = () => { v-model:visible="showTooltip" :overlay-class-name="`nc-tooltip ${showTooltip ? 'visible' : 'hidden'} ${overlayClassName}`" :overlay-style="tooltipStyle" + :overlay-inner-style="overlayInnerStyle" arrow-point-at-center :trigger="[]" :placement="placement" + :mouse-leave-delay="mouseLeaveDelay" >