feat: deleting column from frontend

This commit is contained in:
2025-10-05 14:10:25 +01:00
parent ecd1529130
commit 0d41a65435
3 changed files with 53 additions and 30 deletions

View File

@ -147,10 +147,10 @@ func (h *StackHandler) deleteImageFromStack(w http.ResponseWriter, r *http.Reque
func (h *StackHandler) deleteImageStackSchemaItem(w http.ResponseWriter, r *http.Request) { func (h *StackHandler) deleteImageStackSchemaItem(w http.ResponseWriter, r *http.Request) {
ctx := r.Context() ctx := r.Context()
stringImageID := chi.URLParam(r, "stackID") stringStackID := chi.URLParam(r, "stackID")
stringSchemaItemID := chi.URLParam(r, "schemaItemID") stringSchemaItemID := chi.URLParam(r, "schemaItemID")
imageID, err := uuid.Parse(stringImageID) stackID, err := uuid.Parse(stringStackID)
if err != nil { if err != nil {
w.WriteHeader(http.StatusBadRequest) w.WriteHeader(http.StatusBadRequest)
return return
@ -169,8 +169,9 @@ func (h *StackHandler) deleteImageStackSchemaItem(w http.ResponseWriter, r *http
return return
} }
stack, err := h.stackModel.Get(ctx, schemaItemID) stack, err := h.stackModel.Get(ctx, stackID)
if err != nil { if err != nil {
h.logger.Error("could not get stack model", "err", err)
w.WriteHeader(http.StatusInternalServerError) w.WriteHeader(http.StatusInternalServerError)
return return
} }
@ -185,7 +186,7 @@ func (h *StackHandler) deleteImageStackSchemaItem(w http.ResponseWriter, r *http
// manipulations. So we could create a middleware. // manipulations. So we could create a middleware.
// If you repeat this 3 times, then organise it :) // If you repeat this 3 times, then organise it :)
err = h.stackModel.DeleteSchemaItem(ctx, schemaItemID, imageID) err = h.stackModel.DeleteSchemaItem(ctx, stackID, schemaItemID)
if err != nil { if err != nil {
h.logger.Warn("failed to delete image from list", "error", err) h.logger.Warn("failed to delete image from list", "error", err)
w.WriteHeader(http.StatusInternalServerError) w.WriteHeader(http.StatusInternalServerError)

View File

@ -7,7 +7,13 @@ import {
createResource, createResource,
useContext, useContext,
} from "solid-js"; } from "solid-js";
import { deleteImage, deleteImageFromStack, getUserImages, JustTheImageWhatAreTheseNames } from "../network"; import {
deleteImage,
deleteImageFromStack,
deleteStackItem,
getUserImages,
JustTheImageWhatAreTheseNames,
} from "../network";
export type SearchImageStore = { export type SearchImageStore = {
imagesByDate: Accessor< imagesByDate: Accessor<
@ -21,14 +27,16 @@ export type SearchImageStore = {
onRefetchImages: () => void; onRefetchImages: () => void;
onDeleteImage: (imageID: string) => void; onDeleteImage: (imageID: string) => void;
onDeleteImageFromStack: (stackID: string, imageID: string) => void; onDeleteImageFromStack: (stackID: string, imageID: string) => void;
onDeleteStackItem: (stackID: string, schemaItemID: string) => void;
}; };
const SearchImageContext = createContext<SearchImageStore>(); const SearchImageContext = createContext<SearchImageStore>();
export const SearchImageContextProvider: Component<ParentProps> = (props) => { export const SearchImageContextProvider: Component<ParentProps> = (props) => {
const [data, { refetch }] = createResource(getUserImages); const [data, { refetch }] = createResource(getUserImages);
const sortedImages = createMemo<ReturnType<SearchImageStore["imagesByDate"]>>( const sortedImages = createMemo<
() => { ReturnType<SearchImageStore["imagesByDate"]>
>(() => {
const d = data(); const d = data();
if (d == null) { if (d == null) {
return []; return [];
@ -53,8 +61,7 @@ export const SearchImageContextProvider: Component<ParentProps> = (props) => {
return Object.entries(buckets) return Object.entries(buckets)
.map(([date, images]) => ({ date: new Date(date), images })) .map(([date, images]) => ({ date: new Date(date), images }))
.sort((a, b) => b.date.getTime() - a.date.getTime()); .sort((a, b) => b.date.getTime() - a.date.getTime());
}, });
);
return ( return (
<SearchImageContext.Provider <SearchImageContext.Provider
@ -68,7 +75,10 @@ export const SearchImageContextProvider: Component<ParentProps> = (props) => {
}, },
onDeleteImageFromStack: (stackID: string, imageID: string) => { onDeleteImageFromStack: (stackID: string, imageID: string) => {
deleteImageFromStack(stackID, imageID).then(refetch); deleteImageFromStack(stackID, imageID).then(refetch);
} },
onDeleteStackItem: (stackID: string, schemaItemID: string) => {
deleteStackItem(stackID, schemaItemID).then(refetch);
},
}} }}
> >
{props.children} {props.children}

View File

@ -121,6 +121,18 @@ export const deleteImageFromStack = async (listID: string, imageID: string): Pro
await fetch(request); await fetch(request);
} }
export const deleteStackItem = async (
stackID: string,
schemaItemID: string,
): Promise<void> => {
const request = await getBaseAuthorizedRequest({
path: `stacks/${stackID}/${schemaItemID}`,
method: "DELETE",
});
await fetch(request);
}
export const deleteList = async (listID: string): Promise<void> => { export const deleteList = async (listID: string): Promise<void> => {
const request = await getBaseAuthorizedRequest({ const request = await getBaseAuthorizedRequest({
path: `stacks/${listID}`, path: `stacks/${listID}`,