mirror of
https://github.com/marcogll/TaxHacker_s23.git
synced 2026-01-13 21:35:19 +00:00
feat: filters, settings, backups fix: ts compile errors feat: new dashboard, webp previews and settings feat: use webp for pdfs feat: use webp fix: analyze resets old data fix: switch to corsproxy fix: switch to free cors fix: max upload limit fix: currency conversion feat: transaction export fix: currency conversion feat: refactor settings actions feat: new loader feat: README + LICENSE doc: update readme doc: update readme doc: update readme doc: update screenshots ci: bump prisma
132 lines
3.9 KiB
TypeScript
132 lines
3.9 KiB
TypeScript
"use server"
|
|
|
|
import { createCategory, deleteCategory, updateCategory } from "@/data/categories"
|
|
import { createCurrency, deleteCurrency, updateCurrency } from "@/data/currencies"
|
|
import { createField, deleteField, updateField } from "@/data/fields"
|
|
import { createProject, deleteProject, updateProject } from "@/data/projects"
|
|
import { updateSettings } from "@/data/settings"
|
|
import { settingsFormSchema } from "@/forms/settings"
|
|
import { codeFromName } from "@/lib/utils"
|
|
import { revalidatePath } from "next/cache"
|
|
import { redirect } from "next/navigation"
|
|
|
|
export async function saveSettingsAction(prevState: any, formData: FormData) {
|
|
const validatedForm = settingsFormSchema.safeParse(Object.fromEntries(formData))
|
|
|
|
if (!validatedForm.success) {
|
|
return { success: false, error: validatedForm.error.message }
|
|
}
|
|
|
|
for (const key in validatedForm.data) {
|
|
await updateSettings(key, validatedForm.data[key as keyof typeof validatedForm.data] || "")
|
|
}
|
|
|
|
revalidatePath("/settings")
|
|
redirect("/settings")
|
|
// return { success: true }
|
|
}
|
|
|
|
export async function addProjectAction(data: { name: string; llm_prompt?: string; color?: string }) {
|
|
const project = await createProject({
|
|
code: codeFromName(data.name),
|
|
name: data.name,
|
|
llm_prompt: data.llm_prompt || null,
|
|
color: data.color || "#000000",
|
|
})
|
|
revalidatePath("/settings/projects")
|
|
return project
|
|
}
|
|
|
|
export async function editProjectAction(code: string, data: { name: string; llm_prompt?: string; color?: string }) {
|
|
const project = await updateProject(code, {
|
|
name: data.name,
|
|
llm_prompt: data.llm_prompt,
|
|
color: data.color,
|
|
})
|
|
revalidatePath("/settings/projects")
|
|
return project
|
|
}
|
|
|
|
export async function deleteProjectAction(code: string) {
|
|
await deleteProject(code)
|
|
revalidatePath("/settings/projects")
|
|
}
|
|
|
|
export async function addCurrencyAction(data: { code: string; name: string }) {
|
|
const currency = await createCurrency({
|
|
code: data.code,
|
|
name: data.name,
|
|
})
|
|
revalidatePath("/settings/currencies")
|
|
return currency
|
|
}
|
|
|
|
export async function editCurrencyAction(code: string, data: { name: string }) {
|
|
const currency = await updateCurrency(code, { name: data.name })
|
|
revalidatePath("/settings/currencies")
|
|
return currency
|
|
}
|
|
|
|
export async function deleteCurrencyAction(code: string) {
|
|
await deleteCurrency(code)
|
|
revalidatePath("/settings/currencies")
|
|
}
|
|
|
|
export async function addCategoryAction(data: { name: string; llm_prompt?: string; color?: string }) {
|
|
const category = await createCategory({
|
|
code: codeFromName(data.name),
|
|
name: data.name,
|
|
llm_prompt: data.llm_prompt,
|
|
color: data.color,
|
|
})
|
|
revalidatePath("/settings/categories")
|
|
return category
|
|
}
|
|
|
|
export async function editCategoryAction(code: string, data: { name: string; llm_prompt?: string; color?: string }) {
|
|
const category = await updateCategory(code, {
|
|
name: data.name,
|
|
llm_prompt: data.llm_prompt,
|
|
color: data.color,
|
|
})
|
|
revalidatePath("/settings/categories")
|
|
return category
|
|
}
|
|
|
|
export async function deleteCategoryAction(code: string) {
|
|
await deleteCategory(code)
|
|
revalidatePath("/settings/categories")
|
|
}
|
|
|
|
export async function addFieldAction(data: { name: string; type: string; llm_prompt?: string; isRequired?: boolean }) {
|
|
const field = await createField({
|
|
code: codeFromName(data.name),
|
|
name: data.name,
|
|
type: data.type,
|
|
llm_prompt: data.llm_prompt,
|
|
isRequired: data.isRequired,
|
|
isExtra: true,
|
|
})
|
|
revalidatePath("/settings/fields")
|
|
return field
|
|
}
|
|
|
|
export async function editFieldAction(
|
|
code: string,
|
|
data: { name: string; type: string; llm_prompt?: string; isRequired?: boolean }
|
|
) {
|
|
const field = await updateField(code, {
|
|
name: data.name,
|
|
type: data.type,
|
|
llm_prompt: data.llm_prompt,
|
|
isRequired: data.isRequired,
|
|
})
|
|
revalidatePath("/settings/fields")
|
|
return field
|
|
}
|
|
|
|
export async function deleteFieldAction(code: string) {
|
|
await deleteField(code)
|
|
revalidatePath("/settings/fields")
|
|
}
|