Magento 2 Experten — Hyvä Theme, Tailwind CSS & SEO aus einer Hand ›

Die archive-Aktion als Button

Die archive-Aktion als Button

~12 Min. Lesezeit Zuletzt aktualisiert am 8. August 2026

Kapitel 61/71 bauten /projects/{id}/archive als Custom-Operation MIT Mercure-Publikation – das Frontend braucht dafür EINEN eigenen Hook, GENAU wie für JEDE andere Mutation.

Den Archive-Hook schreiben

src/hooks/useArchiveProject.ts
import { useMutation, useQueryClient } from '@tanstack/react-query';
import { apiClient } from '../api/client';
import type { Project } from '../types/project';

export function useArchiveProject() {
  const queryClient = useQueryClient();

  return useMutation({
    mutationFn: async (id: number) => {
      const response = await apiClient.post<Project>(`/projects/${id}/archive`);

      return response.data;
    },
    onSuccess: () => {
      queryClient.invalidateQueries({ queryKey: ['projects'] });
    },
  });
}

STRUKTURELL IDENTISCH zu useDeleteProject (Kapitel 84) – POST statt DELETE, SONST DASSELBE Muster: Mutation, dann invalidateQueries.

Den Button einbauen

function ArchiveProjectButton({ project }: { project: Project }) {
  const archiveProject = useArchiveProject();

  if (project.archived) {
    return <span>Archiviert</span>;
  }

  return (
    <button
      onClick={() => archiveProject.mutate(project.id)}
      disabled={archiveProject.isPending}
    >
      Archivieren
    </button>
  );
}

project.archived BLENDET den Button AUS, sobald ein Projekt BEREITS archiviert ist – das Frontend SPIEGELT damit GENAU die Geschäftsregel, dass archive KEINE Wirkung mehr hat, wenn archived bereits true ist.

Mercure macht es in Echtzeit sichtbar

DANK des useMercure-Hooks aus Kapitel 82 (auf ProjectListPage bereits registriert) sehen ANDERE geöffnete Tabs/Nutzer den Archivierungs-Status SOFORT, OHNE dass DORT der Archivieren-Button gedrückt wurde – GENAU die END-to-END-Verbindung von Kapitel 71 BIS zu diesem Button.

Tipp: EIN restore-Gegenstück (per Übung aus Kapitel 61 als Ausblick erwähnt) würde GENAU DIESEM Muster folgen – EIN weiterer Hook, EIN weiterer Button, sichtbar NUR wenn project.archived === true.