Skip to content

Commit 51f45a1

Browse files
authored
fix sql editor charts (supabase#28915)
* fix * fix type issues * fix type err * fix type error 2 the return of the type * fix type error 3 tokyo drift
1 parent 808f11e commit 51f45a1

File tree

9 files changed

+38
-19
lines changed

9 files changed

+38
-19
lines changed

apps/studio/components/interfaces/SQLEditor/RenameQueryModal.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ const RenameQueryModal = ({
3434
const snapV2 = useSqlEditorV2StateSnapshot()
3535
const enableFolders = useFlag('sqlFolderOrganization')
3636
const { data: subscription } = useOrgSubscriptionQuery({ orgSlug: organization?.slug })
37+
const isSQLSnippet = snippet.type === 'sql'
3738

3839
// Customers on HIPAA plans should not have access to Supabase AI
3940
const hasHipaaAddon = subscriptionHasHipaaAddon(subscription)
@@ -54,11 +55,11 @@ const RenameQueryModal = ({
5455
},
5556
})
5657

57-
const isAiButtonVisible = enableFolders ? true : 'content' in snippet && !!snippet.content.sql
58+
const isAiButtonVisible = enableFolders ? true : isSQLSnippet
5859

5960
const generateTitle = async () => {
6061
if (enableFolders) {
61-
if ('content' in snippet) {
62+
if ('content' in snippet && isSQLSnippet) {
6263
titleSql({ sql: snippet.content.sql })
6364
} else {
6465
try {
@@ -69,7 +70,7 @@ const RenameQueryModal = ({
6970
}
7071
}
7172
} else {
72-
if ('content' in snippet) titleSql({ sql: snippet.content.sql })
73+
if ('content' in snippet && isSQLSnippet) titleSql({ sql: snippet.content.sql })
7374
}
7475
}
7576

apps/studio/components/interfaces/SQLEditor/UtilityPanel/UtilityPanel.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ const UtilityPanel = ({
5151
const snapV2 = useSqlEditorV2StateSnapshot()
5252
const enableFolders = useFlag('sqlFolderOrganization')
5353

54-
const snippet = snap.snippets[id]?.snippet
54+
const snippet = enableFolders ? snapV2.snippets[id]?.snippet : snap.snippets[id]?.snippet
5555
const queryKeys = contentKeys.list(ref)
5656
const result = enableFolders ? snapV2.results[id]?.[0] : snap.results[id]?.[0]
5757

apps/studio/components/layouts/SQLEditorLayout/QueryItem.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,8 @@ const QueryItem = ({
4545

4646
const { ref, id: activeId } = useParams()
4747
const snap = useSqlEditorStateSnapshot()
48-
const { id, name, description, content, visibility } = tabInfo || {}
48+
const { id, name, description, content, visibility, type } = tabInfo || {}
49+
const isSQLSnippet = type === 'sql'
4950
const isActive = id === activeId
5051
const activeItemRef = useRef<HTMLElement | null>(null)
5152

@@ -147,7 +148,7 @@ const QueryItem = ({
147148
)}
148149
</InnerSideMenuItem>
149150
</HoverCardTrigger_Shadcn_>
150-
{!hideTooltip && (
151+
{!hideTooltip && isSQLSnippet && (
151152
<HoverCardContent_Shadcn_ side="right" align="center" className="w-96" animate="slide-in">
152153
<>
153154
{content.sql.trim() ? (

apps/studio/components/layouts/SQLEditorLayout/QueryItemActions.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,8 @@ export const QueryItemActions = ({
4646
const snap = useSqlEditorStateSnapshot()
4747
const project = useSelectedProject()
4848

49-
const { id, name, visibility, content } = tabInfo || {}
49+
const { id, name, visibility, content, type } = tabInfo || {}
50+
const isSQLSnippet = type === 'sql'
5051

5152
const canCreateSQLSnippet = useCheckPermissions(PermissionAction.CREATE, 'user_content', {
5253
resource: { type: 'sql', owner_id: profile?.id },
@@ -77,6 +78,7 @@ export const QueryItemActions = ({
7778
}
7879

7980
const createPersonalCopy = async () => {
81+
if (!isSQLSnippet) return console.error('Snippet is not SQL')
8082
if (!ref) return console.error('Project ref is required')
8183
if (!id) return console.error('Snippet ID is required')
8284
try {

apps/studio/components/layouts/SQLEditorLayout/SQLEditorNavV1.tsx

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,10 @@ export const SQLEditorNavV1 = ({
4545
const enableFolders = useFlag('sqlFolderOrganization')
4646

4747
const snippets = useSnippets(ref)
48+
const sqlSnippets = useMemo(() => {
49+
return snippets.filter((snippet) => snippet.type === 'sql')
50+
}, [snippets])
51+
4852
const snap = useSqlEditorStateSnapshot()
4953

5054
const { isLoading, isSuccess, isError, error } = useSqlSnippetsQuery(ref, {
@@ -116,7 +120,8 @@ export const SQLEditorNavV1 = ({
116120
}
117121

118122
const projectSnippets = useMemo(() => {
119-
return snippets.filter((snippet) => snippet.visibility === 'project')
123+
const sqlSnippets = snippets.filter((snippet) => snippet.visibility === 'project')
124+
return sqlSnippets.filter((snippet) => snippet.type === 'sql')
120125
}, [snippets])
121126

122127
const filteredProjectSnippets = useMemo(() => {
@@ -129,19 +134,25 @@ export const SQLEditorNavV1 = ({
129134
}, [projectSnippets, searchText])
130135

131136
const personalSnippets = useMemo(() => {
132-
const ss = snippets.filter(
133-
(snippet) => snippet.visibility === 'user' && !snippet.content.favorite
137+
const ss = sqlSnippets.filter(
138+
(snippet) =>
139+
snippet.visibility === 'user' && !snippet.content.favorite && snippet.type === 'sql'
134140
)
135141

136142
if (searchText.length > 0) {
137-
return ss.filter((tab) => tab.name.toLowerCase().includes(searchText.toLowerCase()))
143+
return sqlSnippets.filter((tab) => tab.name.toLowerCase().includes(searchText.toLowerCase()))
138144
}
139145
return ss
140-
}, [searchText, snippets])
146+
}, [searchText, sqlSnippets])
141147

142148
const favoriteSnippets = useMemo(() => {
143-
return snippets.filter((snippet) => snippet.content.favorite)
144-
}, [snippets])
149+
return sqlSnippets.filter((snippet) => {
150+
if (snippet.type === 'sql') {
151+
return snippet.content.favorite
152+
}
153+
return false
154+
})
155+
}, [sqlSnippets])
145156

146157
const filteredFavoriteSnippets = useMemo(() => {
147158
if (searchText.length > 0) {

apps/studio/components/layouts/SQLEditorLayout/SqlEditor.Commands.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,7 @@ function SnippetSelector({
173173

174174
const selectedValue = useCommandFilterState((state) => state.value)
175175
const selectedSnippet = snippets?.find((snippet) => snippetValue(snippet) === selectedValue)
176+
const isSQLSnippet = selectedSnippet?.type === 'sql'
176177

177178
return (
178179
<div className="w-full flex-grow min-h-0 grid gap-4 md:grid-cols-2">
@@ -214,7 +215,7 @@ function SnippetSelector({
214215
</CommandList_Shadcn_>
215216
<CodeBlock
216217
language="sql"
217-
value={selectedSnippet?.content?.sql ?? ''}
218+
value={isSQLSnippet ? selectedSnippet?.content?.sql : ''}
218219
wrapperClassName="hidden md:block"
219220
className="w-full h-full border-0 [&>code]:overflow-scroll [&>code]:block [&>code]:w-full [&>code]:h-full"
220221
hideCopy
@@ -224,6 +225,7 @@ function SnippetSelector({
224225
}
225226

226227
function snippetValue(snippet: SqlSnippet) {
228+
if (snippet.type !== 'sql') return ''
227229
return escapeAttributeSelector(
228230
`${snippet.id}-${snippet.name}-${snippet.content.sql.slice(0, 30)}`
229231
).toLowerCase()

apps/studio/data/content/sql-snippets-query.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { UseQueryOptions } from '@tanstack/react-query'
22
import { Content, ContentData, ContentError, useContentQuery } from 'data/content/content-query'
33

4-
export type SqlSnippet = Extract<Content, { type: 'sql' }>
4+
export type SqlSnippet = Extract<Content, { type: 'sql' | 'log_sql' | 'report' }>
55

66
export type SqlSnippets = {
77
snippets: SqlSnippet[]

apps/studio/state/sql-editor.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ export const sqlEditorState = proxy({
120120
}
121121
},
122122
setSql: (id: string, sql: string) => {
123-
if (sqlEditorState.snippets[id]) {
123+
if (sqlEditorState.snippets[id] && sqlEditorState.snippets[id].snippet.type === 'sql') {
124124
sqlEditorState.snippets[id].snippet.content.sql = sql
125125
sqlEditorState.needsSaving.add(id)
126126
}
@@ -164,14 +164,15 @@ export const sqlEditorState = proxy({
164164
sqlEditorState.results[id].unshift({ rows: [], error, autoLimit })
165165
}
166166
},
167+
// [Jordi] Only SQL snippets can be favorites for now.
167168
addFavorite: (id: string) => {
168-
if (sqlEditorState.snippets[id]) {
169+
if (sqlEditorState.snippets[id] && sqlEditorState.snippets[id].snippet.type === 'sql') {
169170
sqlEditorState.snippets[id].snippet.content.favorite = true
170171
sqlEditorState.needsSaving.add(id)
171172
}
172173
},
173174
removeFavorite: (id: string) => {
174-
if (sqlEditorState.snippets[id]) {
175+
if (sqlEditorState.snippets[id] && sqlEditorState.snippets[id].snippet.type === 'sql') {
175176
sqlEditorState.snippets[id].snippet.content.favorite = false
176177
sqlEditorState.needsSaving.add(id)
177178
}

apps/studio/types/userContent.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ export namespace Dashboards {
7878
}
7979
interval: '1m' | '5m' | '1h' | '1d' | '1w' | '1M' | '1y' // this is the data interval
8080
layout: Chart[]
81+
favorite?: boolean // not used yet
8182
}
8283

8384
/**

0 commit comments

Comments
 (0)