11import { ChangeEvent , FormEvent , useState } from "react" ;
2- import { addItem } from "../../api" ;
3- import { validateTrimmedString } from "../../utils" ;
2+ import { addItem , ListItem } from "../../api" ;
3+ import { validateItemName } from "../../utils" ;
44import toast from "react-hot-toast" ;
55
66import { useNavigate } from "react-router-dom" ;
77
88interface Props {
99 listPath : string | null ;
10+ data : ListItem [ ] ;
1011}
1112
1213enum PurchaseTime {
@@ -21,7 +22,7 @@ const purchaseTimelines = {
2122 [ PurchaseTime . notSoon ] : 30 ,
2223} ;
2324
24- export function AddItemForm ( { listPath } : Props ) {
25+ export function AddItemForm ( { listPath, data : unfilteredListItems } : Props ) {
2526 const navigate = useNavigate ( ) ;
2627
2728 const [ itemName , setItemName ] = useState ( "" ) ;
@@ -42,12 +43,16 @@ export function AddItemForm({ listPath }: Props) {
4243 listPath : string ,
4344 ) => {
4445 e . preventDefault ( ) ;
45- const trimmedItemName = validateTrimmedString ( itemName ) ;
4646
47- if ( ! trimmedItemName ) {
48- toast . error (
49- "Item name cannot be empty or just spaces. Please enter a valid name." ,
50- ) ;
47+ // Validate the item name input
48+ const validationErrorMessage = validateItemName (
49+ itemName ,
50+ unfilteredListItems ,
51+ ) ;
52+
53+ // If there's a validation error, show the error and return early
54+ if ( validationErrorMessage ) {
55+ toast . error ( validationErrorMessage ) ;
5156 return ;
5257 }
5358
@@ -62,13 +67,13 @@ export function AddItemForm({ listPath }: Props) {
6267
6368 try {
6469 await toast . promise (
65- addItem ( listPath , trimmedItemName , daysUntilNextPurchase ) ,
70+ addItem ( listPath , itemName , daysUntilNextPurchase ) , // saving original input
6671 {
6772 loading : "Adding item to list." ,
6873 success : ( ) => {
6974 setItemName ( "" ) ;
7075 setItemNextPurchaseTimeline ( PurchaseTime . soon ) ;
71- return `${ itemName } successfully added to your list!` ;
76+ return `${ itemName } successfully added to your list!` ; // showing original input
7277 } ,
7378 error : ( ) => {
7479 return `${ itemName } failed to add to your list. Please try again!` ;
@@ -79,7 +84,6 @@ export function AddItemForm({ listPath }: Props) {
7984 console . error ( "Failed to add item:" , error ) ;
8085 }
8186 } ;
82-
8387 const navigateToListPage = ( ) => {
8488 navigate ( "/list" ) ;
8589 } ;
@@ -98,7 +102,6 @@ export function AddItemForm({ listPath }: Props) {
98102 name = "item"
99103 value = { itemName }
100104 onChange = { handleItemNameTextChange }
101- required
102105 aria-label = "Enter the item name"
103106 aria-required
104107 />
0 commit comments