u
This commit is contained in:
@@ -153,6 +153,21 @@ export const createArticle = createAsyncThunk(
|
||||
},
|
||||
);
|
||||
|
||||
export const renameCategory = createAsyncThunk(
|
||||
'category/rename',
|
||||
async ({ categoryId, name }, { rejectWithValue }) => {
|
||||
try {
|
||||
const trimmed = String(name ?? '').trim();
|
||||
if (!trimmed) throw new Error('Name required');
|
||||
const data = await category.updateName(categoryId, trimmed);
|
||||
requireObject(data.category, 'PATCH /api/category/:id.category');
|
||||
return normalizeCategoryNode(data.category);
|
||||
} catch (err) {
|
||||
return catchBackendError(rejectWithValue)(err);
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const deleteCategory = createAsyncThunk(
|
||||
'category/delete',
|
||||
async (categoryId, { rejectWithValue }) => {
|
||||
@@ -174,6 +189,7 @@ const initialState = {
|
||||
currentCategoryId: null,
|
||||
articles: [],
|
||||
articlesTotal: 0,
|
||||
renameMode: false,
|
||||
treeStatus: 'idle',
|
||||
articlesStatus: 'idle',
|
||||
error: null,
|
||||
@@ -217,6 +233,9 @@ const categorySlice = createSlice({
|
||||
resetCategoryState() {
|
||||
return initialState;
|
||||
},
|
||||
setRenameMode(state, action) {
|
||||
state.renameMode = Boolean(action.payload);
|
||||
},
|
||||
removeArticleBySku(state, action) {
|
||||
const sku = action.payload;
|
||||
state.articles = state.articles.filter((row) => row.sku !== sku);
|
||||
@@ -274,6 +293,22 @@ const categorySlice = createSlice({
|
||||
if (!state.categories) state.categories = {};
|
||||
state.categories[String(action.payload.id)] = action.payload;
|
||||
})
|
||||
.addCase(renameCategory.fulfilled, (state, action) => {
|
||||
const { id, name } = action.payload;
|
||||
if (id == null || name == null) return;
|
||||
const key = String(id);
|
||||
const existing = state.categories?.[key];
|
||||
if (existing) {
|
||||
state.categories[key] = { ...existing, name };
|
||||
} else if (state.categories) {
|
||||
state.categories[key] = action.payload;
|
||||
}
|
||||
state.rootArticles = state.rootArticles.map((row) =>
|
||||
row?.categoryId != null && String(row.categoryId) === key
|
||||
? { ...row, name }
|
||||
: row,
|
||||
);
|
||||
})
|
||||
.addCase(createArticle.fulfilled, (state, action) => {
|
||||
const created = action.payload;
|
||||
if (created == null) return;
|
||||
@@ -313,10 +348,13 @@ export const {
|
||||
navigateToCategory,
|
||||
navigateBack,
|
||||
resetCategoryState,
|
||||
setRenameMode,
|
||||
removeArticleBySku,
|
||||
patchArticleInLists,
|
||||
} = categorySlice.actions;
|
||||
|
||||
export const selectRenameMode = (state) => state.category.renameMode;
|
||||
|
||||
export const selectCategoryMap = (state) => state.category.categories;
|
||||
export const selectCurrentCategoryId = (state) => state.category.currentCategoryId;
|
||||
export const selectCategoryRootId = (state) => state.category.rootCategoryId;
|
||||
|
||||
Reference in New Issue
Block a user