Remove deleted articles from the category list cache.

After DELETE, the category view kept showing the article until a full reload because Redux still held it.
This commit is contained in:
seb
2026-08-01 03:49:41 +02:00
parent bfb2ff428d
commit 6141e71e2f
3 changed files with 15 additions and 2 deletions

View File

@@ -179,6 +179,7 @@ export const article = {
/**
* DELETE /api/article/:sku → 204
* Errors: 400 Article has children, 401, 403, 404 Article not found
*/
delete(sku) {
return http(`/api/article/${encodeURIComponent(sku)}`, {

View File

@@ -1,5 +1,5 @@
import { Link as RouterLink, useNavigate } from 'react-router-dom';
import { useSelector } from 'react-redux';
import { useDispatch, useSelector } from 'react-redux';
import Box from '@mui/material/Box';
import Link from '@mui/material/Link';
import Typography from '@mui/material/Typography';
@@ -22,7 +22,10 @@ import {
buildCategoryPath,
defaultCategoryPath,
} from '../../pages/artikel/categoryRoute';
import { selectCategoryRootId } from '../../store/categorySlice';
import {
removeArticleBySku,
selectCategoryRootId,
} from '../../store/categorySlice';
function PanelValue({ label, children }) {
if (children == null || children === '') return null;
@@ -107,6 +110,7 @@ const articleNameFieldHiddenSx = {
export default function ArticleView({ article: articleData, onArticleUpdated }) {
const navigate = useNavigate();
const dispatch = useDispatch();
const categories = useSelector((state) => state.category.categories);
const rootCategoryId = useSelector(selectCategoryRootId);
const basePrice = primaryPrice(articleData);
@@ -126,6 +130,7 @@ export default function ArticleView({ article: articleData, onArticleUpdated })
articleData.categoryIds?.[0],
'article.categoryIds[0]',
);
dispatch(removeArticleBySku(articleData.sku));
if (categories && rootCategoryId != null) {
navigate(buildCategoryPath(categories, rootCategoryId, categoryId));
return;

View File

@@ -217,6 +217,12 @@ const categorySlice = createSlice({
resetCategoryState() {
return initialState;
},
removeArticleBySku(state, action) {
const sku = action.payload;
state.articles = state.articles.filter((row) => row.sku !== sku);
state.articlesTotal = state.articles.length;
state.rootArticles = state.rootArticles.filter((row) => row.sku !== sku);
},
},
extraReducers: (builder) => {
builder
@@ -298,6 +304,7 @@ export const {
navigateToCategory,
navigateBack,
resetCategoryState,
removeArticleBySku,
} = categorySlice.actions;
export const selectCategoryMap = (state) => state.category.categories;