diff --git a/web/src/components/advanced-icon-submission-form-tanstack.tsx b/web/src/components/advanced-icon-submission-form-tanstack.tsx index 97895c2b..3ac760f1 100644 --- a/web/src/components/advanced-icon-submission-form-tanstack.tsx +++ b/web/src/components/advanced-icon-submission-form-tanstack.tsx @@ -1,7 +1,8 @@ "use client" -import { Check, FileImage, FileType, Plus, X } from "lucide-react" import { useForm } from "@tanstack/react-form" +import { Check, FileImage, FileType, Plus, X } from "lucide-react" +import { useState } from "react" import { toast } from "sonner" import { IconNameCombobox } from "@/components/icon-name-combobox" import { Badge } from "@/components/ui/badge" @@ -12,9 +13,9 @@ import { Label } from "@/components/ui/label" import { MultiSelect, type MultiSelectOption } from "@/components/ui/multi-select" import { Dropzone, DropzoneContent, DropzoneEmptyState } from "@/components/ui/shadcn-io/dropzone" import { Textarea } from "@/components/ui/textarea" -import { pb } from "@/lib/pb" import { useExistingIconNames } from "@/hooks/use-submissions" -import { useState } from "react" +import { pb } from "@/lib/pb" +import { revalidateAllSubmissions } from "@/app/actions/submissions" interface VariantConfig { id: string @@ -168,6 +169,9 @@ export function AdvancedIconSubmissionFormTanStack() { await pb.collection("submissions").create(submissionData) + // Revalidate Next.js cache for community pages + await revalidateAllSubmissions() + toast.success("Icon submitted!", { description: `Your icon "${value.iconName}" has been submitted for review`, }) @@ -188,14 +192,17 @@ export function AdvancedIconSubmissionFormTanStack() { if (variantId !== "base") { // Remove from selected variants const currentVariants = form.getFieldValue("selectedVariants") - form.setFieldValue("selectedVariants", currentVariants.filter((v) => v !== variantId)) - + form.setFieldValue( + "selectedVariants", + currentVariants.filter((v) => v !== variantId), + ) + // Remove files const currentFiles = form.getFieldValue("files") const newFiles = { ...currentFiles } delete newFiles[variantId] form.setFieldValue("files", newFiles) - + // Remove previews const newPreviews = { ...filePreviews } delete newPreviews[variantId] @@ -205,9 +212,7 @@ export function AdvancedIconSubmissionFormTanStack() { const handleVariantSelectionChange = (selectedValues: string[]) => { // Ensure base is always included - const finalValues = selectedValues.includes("base") - ? selectedValues - : ["base", ...selectedValues] + const finalValues = selectedValues.includes("base") ? selectedValues : ["base", ...selectedValues] return finalValues } @@ -217,12 +222,12 @@ export function AdvancedIconSubmissionFormTanStack() { ...currentFiles, [variantId]: droppedFiles, }) - + // Generate preview for the first file if (droppedFiles.length > 0) { const reader = new FileReader() reader.onload = (e) => { - if (typeof e.target?.result === 'string') { + if (typeof e.target?.result === "string") { setFilePreviews({ ...filePreviews, [variantId]: e.target.result, @@ -247,13 +252,19 @@ export function AdvancedIconSubmissionFormTanStack() { const handleRemoveAlias = (alias: string) => { const currentAliases = form.getFieldValue("aliases") - form.setFieldValue("aliases", currentAliases.filter((a) => a !== alias)) + form.setFieldValue( + "aliases", + currentAliases.filter((a) => a !== alias), + ) } const toggleCategory = (category: string) => { const currentCategories = form.getFieldValue("categories") if (currentCategories.includes(category)) { - form.setFieldValue("categories", currentCategories.filter((c) => c !== category)) + form.setFieldValue( + "categories", + currentCategories.filter((c) => c !== category), + ) } else { form.setFieldValue("categories", [...currentCategories, category]) } @@ -280,7 +291,7 @@ export function AdvancedIconSubmissionFormTanStack() {
Choose a unique identifier for your icon
- +{state.iconName || "preview"}
@@ -386,11 +393,7 @@ export function AdvancedIconSubmissionFormTanStack() { return ({variant.description}
- +