Browse Source

fix(nc-gui): prompt ester egg pending issues

pull/9997/head
Ramesh Mane 3 days ago
parent
commit
6f6e54b1b5
  1. 3
      packages/nc-gui/components/dashboard/TreeView/CreateViewBtn.vue
  2. 136
      packages/nc-gui/components/smartsheet/column/LongTextOptions.vue
  3. 22
      packages/nc-gui/components/smartsheet/topbar/ViewListDropdown.vue

3
packages/nc-gui/components/dashboard/TreeView/CreateViewBtn.vue

@ -16,7 +16,6 @@ const { refreshCommandPalette } = useCommandPalette()
const viewsStore = useViewsStore() const viewsStore = useViewsStore()
const { loadViews, navigateToView } = viewsStore const { loadViews, navigateToView } = viewsStore
const { aiIntegrationAvailable } = useNocoAi()
const { isFeatureEnabled } = useBetaFeatureToggle() const { isFeatureEnabled } = useBetaFeatureToggle()
const table = inject(SidebarTableInj)! const table = inject(SidebarTableInj)!
@ -197,7 +196,7 @@ async function onOpenModal({
<GeneralIcon v-else class="plus" icon="plus" /> <GeneralIcon v-else class="plus" icon="plus" />
</div> </div>
</NcMenuItem> </NcMenuItem>
<template v-if="aiIntegrationAvailable && isFeatureEnabled(FEATURE_FLAG.AI_FEATURES)"> <template v-if="isFeatureEnabled(FEATURE_FLAG.AI_FEATURES)">
<NcDivider /> <NcDivider />
<NcMenuItem data-testid="sidebar-view-create-ai" @click="onOpenModal({ type: 'AI' })"> <NcMenuItem data-testid="sidebar-view-create-ai" @click="onOpenModal({ type: 'AI' })">
<div class="item"> <div class="item">

136
packages/nc-gui/components/smartsheet/column/LongTextOptions.vue

@ -1,5 +1,5 @@
<script setup lang="ts"> <script setup lang="ts">
import { UITypes } from 'nocodb-sdk' import { isAIPromptCol, UITypes } from 'nocodb-sdk'
const props = defineProps<{ const props = defineProps<{
modelValue: any modelValue: any
@ -105,6 +105,15 @@ const generate = async () => {
generatingPreview.value = false generatingPreview.value = false
} }
const isPromptEnabled = computed(() => {
console.log('isAiPrompt', isAIPromptCol(column.value))
if (isEdit.value) {
return isAIPromptCol(column.value)
}
return isFeatureEnabled(FEATURE_FLAG.AI_FEATURES)
})
onMounted(() => { onMounted(() => {
// set default value // set default value
vModel.value.prompt_raw = (column?.value?.colOptions as Record<string, any>)?.prompt_raw || '' vModel.value.prompt_raw = (column?.value?.colOptions as Record<string, any>)?.prompt_raw || ''
@ -183,11 +192,10 @@ watch(
</NcTooltip> </NcTooltip>
</a-form-item> </a-form-item>
<template v-if="isFeatureEnabled(FEATURE_FLAG.AI_FEATURES)"> <div v-if="isPromptEnabled" class="relative">
<div class="relative"> <a-form-item class="flex items-center">
<a-form-item class="flex items-center"> <NcTooltip :disabled="!richMode" class="flex items-center">
<NcTooltip :disabled="!richMode" class="flex items-center"> <template #title> Generate text using AI is not supported when rich text formatting is enabled </template>
<template #title> Generate text using AI is not supported when rich text formatting is enabled </template>
<NcSwitch <NcSwitch
v-model:checked="isEnabledGenerateText" v-model:checked="isEnabledGenerateText"
@ -215,66 +223,66 @@ watch(
</NcTooltip> </NcTooltip>
<div class="flex-1"></div> <div class="flex-1"></div>
<div class="absolute right-0"> <div class="absolute right-0">
<AiSettings <AiSettings
v-model:fk-integration-id="vModel.fk_integration_id" v-model:fk-integration-id="vModel.fk_integration_id"
v-model:model="vModel.model" v-model:model="vModel.model"
v-model:randomness="vModel.randomness" v-model:randomness="vModel.randomness"
:workspace-id="activeWorkspaceId" :workspace-id="activeWorkspaceId"
:show-tooltip="false" :show-tooltip="false"
:is-edit-column="isEdit" :is-edit-column="isEdit"
placement="bottomRight" placement="bottomRight"
>
<NcButton size="xs" theme="ai" class="!px-1" type="text">
<GeneralIcon icon="settings" />
</NcButton>
</AiSettings>
</div>
</a-form-item>
</div>
<template v-if="isPromptEnabled && (!isEdit ? aiIntegrationAvailable && isEnabledGenerateText : isEnabledGenerateText)">
<a-form-item class="flex">
<div class="nc-prompt-input-wrapper bg-nc-bg-gray-light rounded-lg w-full">
<AiPromptWithFields
v-model="vModel.prompt_raw"
:options="availableFields"
:read-only="!aiIntegrationAvailable"
placeholder="Write custom AI Prompt instruction here"
prompt-field-tag-class-name="!text-nc-content-purple-dark font-weight-500"
suggestion-icon-class-name="!text-nc-content-purple-medium"
/>
<div class="rounded-b-lg flex items-center gap-1.5 p-1">
<GeneralIcon icon="info" class="!text-nc-content-purple-medium w-3.5 h-3.5" />
<span class="text-xs text-nc-content-gray-subtle2"
>Mention fields using curly braces, e.g. <span class="text-nc-content-purple-dark">{Field name}</span>.</span
> >
<NcButton size="xs" theme="ai" class="!px-1" type="text">
<GeneralIcon icon="settings" />
</NcButton>
</AiSettings>
</div>
</a-form-item>
</div>
<template v-if="!isEdit ? aiIntegrationAvailable && isEnabledGenerateText : isEnabledGenerateText">
<a-form-item class="flex">
<div class="nc-prompt-input-wrapper bg-nc-bg-gray-light rounded-lg w-full">
<AiPromptWithFields
v-model="vModel.prompt_raw"
:options="availableFields"
:read-only="!aiIntegrationAvailable"
placeholder="Write custom AI Prompt instruction here"
prompt-field-tag-class-name="!text-nc-content-purple-dark font-weight-500"
suggestion-icon-class-name="!text-nc-content-purple-medium"
/>
<div class="rounded-b-lg flex items-center gap-1.5 p-1">
<GeneralIcon icon="info" class="!text-nc-content-purple-medium w-3.5 h-3.5" />
<span class="text-xs text-nc-content-gray-subtle2"
>Mention fields using curly braces, e.g. <span class="text-nc-content-purple-dark">{Field name}</span>.</span
>
</div>
</div> </div>
</a-form-item> </div>
<div v-if="aiIntegrationAvailable && isEnabledGenerateText" class="nc-ai-options-preview overflow-hidden"> </a-form-item>
<div> <div v-if="aiIntegrationAvailable && isEnabledGenerateText" class="nc-ai-options-preview overflow-hidden">
<div <div>
class="flex items-center gap-2 transition-all duration-300" <div
:class="{ class="flex items-center gap-2 transition-all duration-300"
'pl-3 py-2 pr-2': !isAlreadyGenerated, :class="{
'pl-3 py-1 pr-1 border-b-1 border-nc-border-gray-medium': isAlreadyGenerated, 'pl-3 py-2 pr-2': !isAlreadyGenerated,
}" 'pl-3 py-1 pr-1 border-b-1 border-nc-border-gray-medium': isAlreadyGenerated,
> }"
<div class="flex flex-col flex-1 gap-1"> >
<div class="flex items-center gap-2"> <div class="flex flex-col flex-1 gap-1">
<span class="text-sm font-bold text-nc-content-gray-subtle">Preview</span> <div class="flex items-center gap-2">
<NcTooltip class="flex cursor-pointer"> <span class="text-sm font-bold text-nc-content-gray-subtle">Preview</span>
<template #title> Preview is generated using the first record in this table</template> <NcTooltip class="flex cursor-pointer">
<GeneralIcon <template #title> Preview is generated using the first record in this table</template>
icon="info" <GeneralIcon
class="text-nc-content-gray-muted hover:text-nc-content-gray-subtle opacity-70 w-3.5 h-3.5" icon="info"
/> class="text-nc-content-gray-muted hover:text-nc-content-gray-subtle opacity-70 w-3.5 h-3.5"
</NcTooltip> />
</div> </NcTooltip>
<span v-if="!isAlreadyGenerated" class="text-[11px] leading-[18px] text-nc-content-gray-muted">
Include at least 1 field in prompt.
</span>
</div> </div>
<span v-if="!isAlreadyGenerated" class="text-[11px] leading-[18px] text-nc-content-gray-muted">
Include at least 1 field in prompt.
</span>
</div>
<NcTooltip :disabled="isPreviewEnabled"> <NcTooltip :disabled="isPreviewEnabled">
<template #title> Include at least 1 field in prompt to generate </template> <template #title> Include at least 1 field in prompt to generate </template>
@ -328,7 +336,7 @@ watch(
</template> </template>
</template> </template>
<AiIntegrationNotFound v-if="!aiIntegrationAvailable && isEnabledGenerateText" /> <AiIntegrationNotFound v-if="!aiIntegrationAvailable && isEnabledGenerateText && isPromptEnabled" />
</div> </div>
</template> </template>

22
packages/nc-gui/components/smartsheet/topbar/ViewListDropdown.vue

@ -21,7 +21,7 @@ const { loadViews, navigateToView } = viewsStore
const { refreshCommandPalette } = useCommandPalette() const { refreshCommandPalette } = useCommandPalette()
const { aiIntegrationAvailable } = useNocoAi() const { isFeatureEnabled } = useBetaFeatureToggle()
const isOpen = ref<boolean>(false) const isOpen = ref<boolean>(false)
@ -254,17 +254,15 @@ async function onOpenModal({
</div> </div>
</a-menu-item> </a-menu-item>
<NcDivider /> <template v-if="isFeatureEnabled(FEATURE_FLAG.AI_FEATURES)">
<a-menu-item <NcDivider />
v-if="aiIntegrationAvailable" <a-menu-item data-testid="sidebar-view-create-ai" @click="onOpenModal({ type: 'AI' })">
data-testid="sidebar-view-create-ai" <div class="nc-viewlist-submenu-popup-item">
@click="onOpenModal({ type: 'AI' })" <GeneralIcon icon="ncAutoAwesome" class="!w-4 !h-4 text-nc-fill-purple-dark" />
> <div>{{ $t('labels.aiSuggested') }}</div>
<div class="nc-viewlist-submenu-popup-item"> </div>
<GeneralIcon icon="ncAutoAwesome" class="!w-4 !h-4 text-nc-fill-purple-dark" /> </a-menu-item>
<div>{{ $t('labels.aiSuggested') }}</div> </template>
</div>
</a-menu-item>
</a-sub-menu> </a-sub-menu>
</a-menu> </a-menu>
</div> </div>

Loading…
Cancel
Save