diff --git a/apps/studio/components/interfaces/App/FeaturePreview/FeaturePreviewModal.tsx b/apps/studio/components/interfaces/App/FeaturePreview/FeaturePreviewModal.tsx index b0e994c5052..3153dade9b7 100644 --- a/apps/studio/components/interfaces/App/FeaturePreview/FeaturePreviewModal.tsx +++ b/apps/studio/components/interfaces/App/FeaturePreview/FeaturePreviewModal.tsx @@ -5,13 +5,13 @@ import { useRouter } from 'next/router' import { useState } from 'react' import { Button, IconExternalLink, IconEye, IconEyeOff, Modal, ScrollArea, cn } from 'ui' +import { useFlag } from 'hooks' import { LOCAL_STORAGE_KEYS } from 'lib/constants' import Telemetry from 'lib/telemetry' import { useAppStateSnapshot } from 'state/app-state' import APISidePanelPreview from './APISidePanelPreview' import { useFeaturePreviewContext } from './FeaturePreviewContext' import RLSAIAssistantPreview from './RLSAIAssistantPreview' -import { useFlag } from 'hooks' const FeaturePreviewModal = () => { const isAiAssistantEnabled = useFlag('policyEditorWithAi') @@ -28,7 +28,7 @@ const FeaturePreviewModal = () => { ? [ { key: LOCAL_STORAGE_KEYS.UI_PREVIEW_RLS_AI_ASSISTANT, - name: 'AI Assistant for RLS policies', + name: 'Supabase Assistant for RLS policies', content: , discussionsUrl: undefined, }, diff --git a/apps/studio/components/interfaces/App/FeaturePreview/RLSAIAssistantPreview.tsx b/apps/studio/components/interfaces/App/FeaturePreview/RLSAIAssistantPreview.tsx index f885aac7a5c..11f111d8f46 100644 --- a/apps/studio/components/interfaces/App/FeaturePreview/RLSAIAssistantPreview.tsx +++ b/apps/studio/components/interfaces/App/FeaturePreview/RLSAIAssistantPreview.tsx @@ -31,14 +31,13 @@ const RLSAIAssistantPreview = () => {
  • diff --git a/apps/studio/components/interfaces/Auth/Policies/AIPolicyEditorPanel/AIPolicyEditorPanel.utils.ts b/apps/studio/components/interfaces/Auth/Policies/AIPolicyEditorPanel/AIPolicyEditorPanel.utils.ts index 4ab756976c9..adb8328a37b 100644 --- a/apps/studio/components/interfaces/Auth/Policies/AIPolicyEditorPanel/AIPolicyEditorPanel.utils.ts +++ b/apps/studio/components/interfaces/Auth/Policies/AIPolicyEditorPanel/AIPolicyEditorPanel.utils.ts @@ -26,6 +26,8 @@ export const generateThreadMessage = ({ export const generatePlaceholder = (policy?: PostgresPolicy) => { if (policy === undefined) { return ` +-- Press tab to use this code\n + \n CREATE POLICY *name* ON *table_name*\n AS PERMISSIVE -- PERMISSIVE | RESTRICTIVE\n FOR ALL -- ALL | SELECT | INSERT | UPDATE | DELETE\n @@ -45,6 +47,8 @@ WITH CHECK ( *check_expression* ); } return ` +-- Press tab to use this code\n + \n BEGIN;\n  \n -- To update your policy definition\n diff --git a/apps/studio/components/interfaces/Auth/Policies/AIPolicyEditorPanel/AIPolicyPre.tsx b/apps/studio/components/interfaces/Auth/Policies/AIPolicyEditorPanel/AIPolicyPre.tsx index a7a22b0e982..7d249f98aa5 100644 --- a/apps/studio/components/interfaces/Auth/Policies/AIPolicyEditorPanel/AIPolicyPre.tsx +++ b/apps/studio/components/interfaces/Auth/Policies/AIPolicyEditorPanel/AIPolicyPre.tsx @@ -6,19 +6,20 @@ import { Button, CodeBlock, cn } from 'ui' interface AAIPolicyPreProps { onDiff: (s: string) => void children: string[] + className?: string } -export const AIPolicyPre = ({ onDiff, children }: AAIPolicyPreProps) => { +export const AIPolicyPre = ({ onDiff, children, className }: AAIPolicyPreProps) => { let formatted = (children || [''])[0] try { - formatted = format(formatted, { language: 'postgresql' }) + formatted = format(formatted, { language: 'postgresql', keywordCase: 'upper' }) } catch {} if (formatted.length === 0) { return null } return ( -
    +    
            {
    -            return {props.children[0].props.children}
    +            return (
    +              
    +                {props.children[0].props.children}
    +              
    +            )
               },
             }}
           >
    diff --git a/apps/studio/components/interfaces/Auth/Policies/AIPolicyEditorPanel/index.tsx b/apps/studio/components/interfaces/Auth/Policies/AIPolicyEditorPanel/index.tsx
    index 1b46f91466a..6e9a47a0bb7 100644
    --- a/apps/studio/components/interfaces/Auth/Policies/AIPolicyEditorPanel/index.tsx
    +++ b/apps/studio/components/interfaces/Auth/Policies/AIPolicyEditorPanel/index.tsx
    @@ -286,6 +286,7 @@ export const AIPolicyEditorPanel = memo(function ({
                       modified={incomingChange}
                       onMount={(editor) => (diffEditorRef.current = editor)}
                       options={{
    +                    wordWrap: 'on',
                         renderSideBySide: false,
                         scrollBeyondLastLine: false,
                         renderOverviewRuler: false,
    diff --git a/apps/studio/components/interfaces/SQLEditor/AISettingsModal.tsx b/apps/studio/components/interfaces/SQLEditor/AISettingsModal.tsx
    deleted file mode 100644
    index 8ab1da2e8b8..00000000000
    --- a/apps/studio/components/interfaces/SQLEditor/AISettingsModal.tsx
    +++ /dev/null
    @@ -1,64 +0,0 @@
    -import { ModalProps } from '@ui/components/Modal/Modal'
    -import { useLocalStorageQuery, useSelectedOrganization, useStore } from 'hooks'
    -import { IS_PLATFORM, OPT_IN_TAGS } from 'lib/constants'
    -import Link from 'next/link'
    -import { Alert, IconExternalLink, Modal, Toggle } from 'ui'
    -export interface AISettingsModalProps {
    -  visible: boolean
    -}
    -
    -const AISettingsModal = (props: ModalProps) => {
    -  const selectedOrganization = useSelectedOrganization()
    -  const isOptedInToAI = selectedOrganization?.opt_in_tags?.includes(OPT_IN_TAGS.AI_SQL) ?? false
    -  const [hasEnabledAISchema, setHasEnabledAISchema] = useLocalStorageQuery(
    -    'supabase_sql-editor-ai-schema-enabled',
    -    true
    -  )
    -  const { ui } = useStore()
    -
    -  const includeSchemaMetadata = (isOptedInToAI || !IS_PLATFORM) && hasEnabledAISchema
    -
    -  const handleOptInToggle = () => {
    -    setHasEnabledAISchema((prev) => !prev)
    -    ui.setNotification({ category: 'success', message: 'Successfully saved settings' })
    -  }
    -
    -  return (
    -    
    -      
    - {IS_PLATFORM && !isOptedInToAI && selectedOrganization && ( - - - Go to your organization's settings to opt-in. - - - - )} -
    - -
    -

    Include anonymous database metadata in AI queries

    -

    - Includes table names, column names and their corresponding data types in the request. - This will generate queries that are more relevant to your project. -

    -
    -
    -
    -
    - ) -} - -export default AISettingsModal diff --git a/apps/studio/components/ui/AISettingsModal.tsx b/apps/studio/components/ui/AISettingsModal.tsx index a511b7df804..6772239ca45 100644 --- a/apps/studio/components/ui/AISettingsModal.tsx +++ b/apps/studio/components/ui/AISettingsModal.tsx @@ -56,8 +56,8 @@ const AISettingsModal = () => {

    Include anonymous database metadata in AI queries

    - Includes table names, column names and their corresponding data types in the request. - This will generate queries that are more relevant to your project. + Metadata includes table names, column names and their corresponding data types in the + request. This will generate queries that are more relevant to your project.