team logo compression, play around with style
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import { Badge, FileInput, Group, Stack, Text, TextInput } from "@mantine/core";
|
||||
import { FileInput, Stack, TextInput } from "@mantine/core";
|
||||
import { useForm, UseFormInput } from "@mantine/form";
|
||||
import { LinkIcon } from "@phosphor-icons/react";
|
||||
import SlidePanel, { SlidePanelField } from "@/components/sheet/slide-panel";
|
||||
import SlidePanel from "@/components/sheet/slide-panel";
|
||||
import { isNotEmpty } from "@mantine/form";
|
||||
import useCreateTeam from "../../hooks/use-create-team";
|
||||
import useUpdateTeam from "../../hooks/use-update-team";
|
||||
@@ -13,8 +13,8 @@ import { useCallback } from "react";
|
||||
import { TeamInput } from "../../types";
|
||||
import { teamKeys } from "../../queries";
|
||||
import SongPicker from "./song-picker";
|
||||
import TeamColorPicker from "./color-picker";
|
||||
import PlayersPicker from "./players-picker";
|
||||
import imageCompression from "browser-image-compression";
|
||||
|
||||
interface TeamFormProps {
|
||||
close: () => void;
|
||||
@@ -113,9 +113,32 @@ const TeamForm = ({
|
||||
|
||||
if (logo && team) {
|
||||
try {
|
||||
let processedLogo = logo;
|
||||
|
||||
if (logo.size > 500 * 1024) {
|
||||
const compressionOptions = {
|
||||
maxSizeMB: 0.5,
|
||||
maxWidthOrHeight: 800,
|
||||
useWebWorker: true,
|
||||
fileType: logo.type,
|
||||
};
|
||||
|
||||
try {
|
||||
processedLogo = await imageCompression(logo, compressionOptions);
|
||||
logger.info("image compressed", {
|
||||
originalSize: logo.size,
|
||||
compressedSize: processedLogo.size,
|
||||
reduction: ((logo.size - processedLogo.size) / logo.size * 100).toFixed(1) + "%"
|
||||
});
|
||||
} catch (compressionError) {
|
||||
logger.warn("compression failed, falling back", compressionError);
|
||||
processedLogo = logo;
|
||||
}
|
||||
}
|
||||
|
||||
const formData = new FormData();
|
||||
formData.append("teamId", team.id);
|
||||
formData.append("logo", logo);
|
||||
formData.append("logo", processedLogo);
|
||||
|
||||
const response = await fetch("/api/teams/upload-logo", {
|
||||
method: "POST",
|
||||
|
||||
Reference in New Issue
Block a user