fixed: bug duplicate id when map element

This commit is contained in:
Kenta420 2024-03-20 10:35:21 +07:00
parent 4857b01fdf
commit 044f0a5e84
2 changed files with 28 additions and 26 deletions

View file

@ -36,23 +36,31 @@ export const RecipeEditor: React.FC<RecipeEditorProps> = ({
const [editorShowState, setEditorShowState] = useState(EditorShowStateEnum.RECIPES_IN_USE) const [editorShowState, setEditorShowState] = useState(EditorShowStateEnum.RECIPES_IN_USE)
const { recipesEnable, recipesDisable } = useMemo<{ const { recipesEnable, recipesDisable } = useMemo(
recipesEnable: ItemMetadata[] () =>
recipesDisable: ItemMetadata[] recipes.Recipe01.reduce<{ recipesEnable: ItemMetadata[]; recipesDisable: ItemMetadata[] }>(
}>(() => { (acc, curr) => {
return { if (curr.isUse) {
recipesEnable: recipes.Recipe01.filter(r => r.isUse).map(x => ({ acc.recipesEnable.push({
id: x.productCode, id: curr.productCode,
name: x.name, name: curr.name,
lastChange: x.LastChange lastChange: curr.LastChange
})), })
recipesDisable: recipes.Recipe01.filter(r => !r.isUse).map(x => ({ return acc
id: x.productCode, } else {
name: x.name, acc.recipesDisable.push({
lastChange: x.LastChange id: curr.productCode,
})) name: curr.name,
} lastChange: curr.LastChange
}, [recipes]) })
}
return acc
},
{ recipesEnable: [], recipesDisable: [] }
),
[recipes.Recipe01]
)
const [currentItems, setCurrentItems] = useState<ItemMetadata[]>(recipesEnable) const [currentItems, setCurrentItems] = useState<ItemMetadata[]>(recipesEnable)
@ -62,10 +70,8 @@ export const RecipeEditor: React.FC<RecipeEditorProps> = ({
onSelectFn: id => setSelectedRecipe(id.toString()) onSelectFn: id => setSelectedRecipe(id.toString())
}) })
const { selectedMaterial, setSelectedMaterial, selectedRecipe, setSelectedRecipe } = useRecipeDashboard( const { selectedRecipe, setSelectedRecipe } = useRecipeDashboard(
useShallow(state => ({ useShallow(state => ({
selectedMaterial: state.selectedMaterial,
setSelectedMaterial: state.setSelectedMaterial,
selectedRecipe: state.selectedRecipe, selectedRecipe: state.selectedRecipe,
setSelectedRecipe: state.setSelectedRecipe setSelectedRecipe: state.setSelectedRecipe
})) }))
@ -90,15 +96,11 @@ export const RecipeEditor: React.FC<RecipeEditorProps> = ({
id: x.id, id: x.id,
name: x.materialName name: x.materialName
})) }))
currentSelectId = selectedMaterial
onSelectedFn = id => setSelectedMaterial(Number(id))
} else if (editorShowState === EditorShowStateEnum.TOPPING_GROUPS) { } else if (editorShowState === EditorShowStateEnum.TOPPING_GROUPS) {
list = recipes.Topping.ToppingGroup.map(x => ({ list = recipes.Topping.ToppingGroup.map(x => ({
id: x.groupID, id: x.groupID,
name: x.name name: x.name
})) }))
currentSelectId = selectedMaterial
onSelectedFn = id => setSelectedMaterial(Number(id))
} else if (editorShowState === EditorShowStateEnum.TOPPING_LIST) { } else if (editorShowState === EditorShowStateEnum.TOPPING_LIST) {
list = recipes.Topping.ToppingList.map(x => ({ list = recipes.Topping.ToppingList.map(x => ({
id: x.id, id: x.id,

View file

@ -13,9 +13,9 @@ const RecipeList: React.FC<RecipeListProps> = ({ items, currentSelectId, onSelec
return ( return (
<ScrollArea className="h-screen"> <ScrollArea className="h-screen">
<div className="flex flex-col gap-2 p-4 pt-0"> <div className="flex flex-col gap-2 p-4 pt-0">
{items.map(item => ( {items.map((item, index) => (
<button <button
key={item.id} key={index}
className={cn( className={cn(
'flex flex-col items-start gap-2 rounded-lg border p-3 text-left text-sm transition-all hover:bg-accent', 'flex flex-col items-start gap-2 rounded-lg border p-3 text-left text-sm transition-all hover:bg-accent',
currentSelectId === item.id && 'bg-muted' currentSelectId === item.id && 'bg-muted'