Files
windmill/frontend/src/lib/components/apps/editor/componentsPanel/themeUtils.ts
2024-09-04 13:30:18 +02:00

100 lines
2.1 KiB
TypeScript

import { ResourceService, AppService } from '$lib/gen'
import { sendUserToast } from '$lib/toast'
import type { AppTheme } from '../../types'
export interface Theme {
path: string
value: {
value?: string | undefined
name: string
}
}
export const DEFAULT_THEME: string = 'f/app_themes/theme_0'
export function createTheme(workspace: string, theme: Theme): Promise<string> {
const createThemeRequest = {
workspace,
requestBody: {
...theme,
resource_type: 'app_theme',
value: theme.value || ''
}
}
return ResourceService.createResource(createThemeRequest)
}
export async function getTheme(
workspace: string,
path: string
): Promise<{
value?: string | undefined
name: string
}> {
try {
return AppService.getPublicResource({
workspace,
path
}) as any
} catch (e) {
sendUserToast(`Theme not found ${path}`)
return {
value: '',
name: 'Not found'
}
}
}
export function updateTheme(workspace: string, path: string, updatedTheme: any): Promise<string> {
const updateThemeRequest = {
workspace,
path,
requestBody: updatedTheme
}
return ResourceService.updateResource(updateThemeRequest)
}
export function deleteTheme(workspace: string, path: string): Promise<string> {
const deleteThemeRequest = {
workspace,
path: path
}
return ResourceService.deleteResource(deleteThemeRequest)
}
export async function listThemes(workspace: string): Promise<
Array<{
name: string
path: string
}>
> {
const listThemesRequest = {
workspace,
name: 'app_theme'
}
return ResourceService.listResourceNames(listThemesRequest)
}
export async function resolveTheme(
theme: AppTheme | undefined,
workspace: string | undefined
): Promise<string> {
let css = ''
if (theme?.type === 'inlined') {
css = theme.css
} else if (theme?.type === 'path' && theme.path && workspace) {
let loadedCss: any = { value: '' }
try {
loadedCss = await ResourceService.getResourceValue({
workspace: workspace,
path: theme.path
})
} catch (e) {
console.error('Error loading theme', e)
}
css = (loadedCss as any)?.['value'] ?? ''
}
return css
}