From e538dd305e3bb71a37482e8009fa3e03aa3bff94 Mon Sep 17 00:00:00 2001 From: FlorianSpeicher Date: Sun, 22 Jun 2025 13:38:40 +0200 Subject: [PATCH] Added query for chnage item --- 00-backend/datasource/database.sqlite | Bin 27684864 -> 27684864 bytes .../src/helper/adminpanel/ItemsInfo.tsx | 78 ++++++++++-------- 01-frontend/src/helper/query/Queries.tsx | 16 +++- 3 files changed, 58 insertions(+), 36 deletions(-) diff --git a/00-backend/datasource/database.sqlite b/00-backend/datasource/database.sqlite index 777889e3322e2fcc7b470cb2da39442fa03d365d..1270edee6451f49a81dfc296292aa95bd0a4708d 100644 GIT binary patch delta 2640 zcmZ|PdtA+T9LMo<(dFEWL@6Qas1!mjAxfmXNbX;hYbBQuBI+xbkS>l~iui8yN(qdEL8K|D8 zA6Xe%;n`Rp=;CIj@Uc=VPDf=PeiA;QVChX$_4B8Vl$OJjm%LWFG<|c|FZM|Orm%<( zIUUSYuasCZm~P&>0j9wF|?{X*Udrg zqpUlwa`Oexq~7XC&3cQCow-+t=Aph^f6-*oCg@k0j_c>>6oyixzp=1}SEZ0>2LQYb9L+|2oJ#vPnL6bglt;=IB%-FVYD z#qi89MSn*hr#r9fqdlh`s#R(R*;d;+TJN)ZUGK3vS@lwtr*cv5QU)r{7xuC%a7~TX zDST877phgt)^ELP;cmB}wh`)VtMQ|!B_^fDrKhDOPfVJgm>N@SQ{AI@=ceddo9Z4F zHpRK7M%8+v?zz2lY-FuXbiDUas`TWj`NthNaruoNjs5#+;u!!_N$@!3(^>2ikxy_(5A}2kpThIzUJ0 z1Od<)x!zAsiwg5~3g)Vjva_PymHc1jVohEU*?z zU>&T74X_b5!Dc9hGS~uJp&Yisc6bkV!29q4?1Wvg8}`6nsDKY)AMA&Z-~b$iO86KK z!6$GSj=-mI6sq7D9EZ=~b2tGf;S`*PGw=nRg>!HoF2F_j625|J_!_=}OK=&kz_;)n zd=FRQ2e<~;;YauhZotp*3)H|(xCOW2SGWUr;WxMkzr%fa01x32Jcd8uPj~`P;Tb%K zzu*P@4gbJPcm@B$>*X{2l&gSIF>0nBW5rlAHjFK!VYG~n(K80d$e0*A#-6FqG+-Q< zhKwWAh-u6?G0sdA#)WZZnlf%oGp0Gyf^lbBGOZX7#*;BKtr;)IoAF`VFuu&2S8dBr z?U?qAKhuHf$aG=?n9fWWrYqBp31qr6J(!+M5Yvn4%>*+cOdlqc>C5zE!kGR{I1|A{ zGEq!46T`$Z1DH5wATx-GX9hC~%n)WMGmII|j9^AGqZq-AX2vjMnM5Xu8OMxgCNLA3 zNz7y>nMq+%nJG*fGnJXfOlM{=>C8-K7Bid4VCFD$nR!emGoM+&WHAewMNBr6!$@W^ zlglh&mNLtj~XGg z<<6M?)gBGBk)9^|ZGBv*RvK+E{Le+za@7!EN;28q>Qn0lCEm8ubX|3rr<;td}dQ612T)*Yi3ib05nygL_(`vlDloJLor%@lw`X>Ehq?YHS9x_aH8k;ZDlbl*uU|(0ZD<#|QNKc)WlRDXv?n<8SUN^XzLm%$c zHu%^B4Dn85*Liwgq!t;F{``;Gu5^dnmEq3JigM`JqqI_eW~8>v2jd8*u~DvG6Qzav z_fE}nq@-r0Gr6TWAOE zp#yY;PS6>;Kv(Dn-Ju8cgkI1a`am@Fg&2s1IEaUS&>sfCKo|srVF)C^P#6ZoVFZkX zQIH6uVGN9gaWEc|U;<180m(24QeZN0?kO-8ra>yC!E{K68IS>)FcW4$7PuiBa$q*( z!W_thxiAmr!va_ciy$8gU@%GvmQ{GG2@~TJOj%m+yU^+6Ln9fWWrYqBp>CW_EdNRG3-b^1Rn(52LFtJP=6VLQx`ZEKV zfy^LgFf)WnV1_conBmL_W+XF;Nn}PdW0na-p$Gnfn}lbOlPVzL-Flg;EXvzc6G4wJ{sW#%#SnFY*3W)YLm6fldKCCpMr zGRv4krifY2tYC_nmCPz;HB-WrGHaN%%sOU0vw_*j=*%Xjj45X}GZoAhW-GIesbsb@ TJD8nJ6|>8D43Cs?Rj+>mu>4yK diff --git a/01-frontend/src/helper/adminpanel/ItemsInfo.tsx b/01-frontend/src/helper/adminpanel/ItemsInfo.tsx index 6c6b6c4..cf447b8 100644 --- a/01-frontend/src/helper/adminpanel/ItemsInfo.tsx +++ b/01-frontend/src/helper/adminpanel/ItemsInfo.tsx @@ -1,21 +1,21 @@ import DeleteIcon from "@mui/icons-material/Delete"; import EditIcon from "@mui/icons-material/Edit"; -import {Box, Button, IconButton, Toolbar, useTheme} from "@mui/material"; -import {Gauge, gaugeClasses} from "@mui/x-charts"; -import {DataGrid, GridColDef, GridRowId, GridRowSelectionModel} from "@mui/x-data-grid"; -import {useMutation, useQuery} from "@tanstack/react-query"; -import {useEffect, useState} from "react"; -import {useTranslation} from "react-i18next"; +import { Box, Button, IconButton, Toolbar, useTheme } from "@mui/material"; +import { Gauge, gaugeClasses } from "@mui/x-charts"; +import { DataGrid, GridColDef, GridRowId, GridRowSelectionModel } from "@mui/x-data-grid"; +import { useMutation, useQuery } from "@tanstack/react-query"; +import { useEffect, useState } from "react"; +import { useTranslation } from "react-i18next"; import Item from "../../components/Item"; -import {mapValueToColor} from "../../util/ColorUtil.tsx"; -import {useAccount} from "../AccountProvider.tsx"; -import {deleteItemQuery, fetchItems} from "../query/Queries.tsx"; +import { mapValueToColor } from "../../util/ColorUtil.tsx"; +import { useAccount } from "../AccountProvider.tsx"; +import { deleteItemQuery, fetchItems, updateItemAdmin } from "../query/Queries.tsx"; import ItemImageDialog from "./ItemImageDialog.tsx"; import NewItemDialog from "./NewItemDialog.tsx"; export default function ItemsInfo() { const theme = useTheme(); - const {t} = useTranslation(); + const { t } = useTranslation(); const [rows, setRows] = useState([]); const [selectedRows, setSelectedRows] = useState>(new Set()); @@ -45,9 +45,9 @@ export default function ItemsInfo() { setNewItemDialog(true); } - const {user: loginData} = useAccount(); + const { user: loginData } = useAccount(); - const {data} = useQuery({ + const { data } = useQuery({ queryKey: ["fetchItems", loginData], queryFn: () => fetchItems(), retry: 3, @@ -79,14 +79,26 @@ export default function ItemsInfo() { setRows(rows.filter((row) => !selectedRows.has(row.id))); }; + const updateItem = useMutation({ + mutationFn: (item: Item) => + updateItemAdmin(item), + + }); + + const handleRowUpdate = async (updatedRow: Item) => { + setRows(rows.map(row => row.id === updatedRow.id ? updatedRow : row)); + await updateItem.mutateAsync(updatedRow); + return updatedRow; + } + const columns: GridColDef<(typeof rows)[number]>[] = [ - {field: 'id', headerName: 'ID', width: 60}, + { field: 'id', headerName: 'ID', width: 60 }, { field: 'uuid', headerName: t('uuid'), type: "string", width: 120, - editable: true + editable: false }, { field: 'name', @@ -129,13 +141,13 @@ export default function ItemsInfo() { editable: true, type: 'number', renderCell: params => { - return mapValueToColor(0, params.row.stockExpected, params.row.stock) + valueMax={params.row.stockExpected} startAngle={-90} endAngle={90} sx={{ + [`& .${gaugeClasses.valueArc}`]: { + fill: () => { + return mapValueToColor(0, params.row.stockExpected, params.row.stock) + }, }, - }, - }} text={() => `${params.row.stock}`}/> + }} text={() => `${params.row.stock}`} /> }, { field: 'rating', @@ -144,13 +156,13 @@ export default function ItemsInfo() { editable: false, //the rating is averaged from ratings type: 'number', renderCell: params => { - return mapValueToColor(0, 10, params.row.rating) + startAngle={-90} endAngle={90} sx={{ + [`& .${gaugeClasses.valueArc}`]: { + fill: () => { + return mapValueToColor(0, 10, params.row.rating) + }, }, - }, - }} text={() => `${params.row.rating.toFixed(2)}`}/> + }} text={() => `${params.row.rating.toFixed(2)}`} /> }, { field: "actualPrice", @@ -164,14 +176,14 @@ export default function ItemsInfo() { headerName: t('images'), width: 90, editable: false, - renderCell: params => handleImageEdit(params.row)}> , + renderCell: params => handleImageEdit(params.row)}> , }, { field: 'farmImage', headerName: t('fsImage'), width: 90, editable: false, - renderCell: params => handleFarmImageEdit(params.row)}> + renderCell: params => handleFarmImageEdit(params.row)}> , } ]; @@ -197,7 +209,7 @@ export default function ItemsInfo() {