Skip to content

Commit 492e979

Browse files
feat: create trigger onEmptyCart (#129)
* feat: add prop onEmptyCart * feat(readme): add prop onEmptyCart * feat(tests): add test to prop onEmptyCart
1 parent 53c19fd commit 492e979

File tree

3 files changed

+23
-4
lines changed

3 files changed

+23
-4
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,7 @@ ReactDOM.render(
164164
| `onItemAdd` | _No_ | Triggered on items added to your cart, unless the item already exists, then `onItemUpdate` will be invoked. |
165165
| `onItemUpdate` | _No_ | Triggered on items updated in your cart, unless you are setting the quantity to `0`, then `onItemRemove` will be invoked. |
166166
| `onItemRemove` | _No_ | Triggered on items removed from your cart. |
167+
| `onEmptyCart` | _No_ | Triggered on empty cart. |
167168
| `storage` | _No_ | Must return `[getter, setter]`. |
168169
| `metadata` | _No_ | Custom global state on the cart. Stored inside of `metadata`. |
169170
## `useCart`

src/index.tsx

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,7 @@ export const CartProvider: React.FC<{
174174
onItemAdd?: (payload: Item) => void;
175175
onItemUpdate?: (payload: object) => void;
176176
onItemRemove?: (id: Item["id"]) => void;
177+
onEmptyCart?: () => void;
177178
storage?: (
178179
key: string,
179180
initialValue: string
@@ -187,6 +188,7 @@ export const CartProvider: React.FC<{
187188
onItemAdd,
188189
onItemUpdate,
189190
onItemRemove,
191+
onEmptyCart,
190192
storage = useLocalStorage,
191193
metadata,
192194
}) => {
@@ -291,10 +293,11 @@ export const CartProvider: React.FC<{
291293
onItemRemove && onItemRemove(id);
292294
};
293295

294-
const emptyCart = () =>
295-
dispatch({
296-
type: "EMPTY_CART",
297-
});
296+
const emptyCart = () => {
297+
dispatch({ type: "EMPTY_CART" });
298+
299+
onEmptyCart && onEmptyCart();
300+
}
298301

299302
const getItem = (id: Item["id"]) =>
300303
state.items.find((i: Item) => i.id === id);

test/index.test.tsx

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -406,6 +406,21 @@ describe("emptyCart", () => {
406406
expect(result.current.totalUniqueItems).toBe(0);
407407
expect(result.current.isEmpty).toBe(true);
408408
});
409+
410+
test("triggers onEmptyCart when empty cart", () => {
411+
let called = false;
412+
413+
const wrapper: FC<Props> = ({ children }) => (
414+
<CartProvider onEmptyCart={() => (called = true)}>
415+
{children}
416+
</CartProvider>
417+
);
418+
419+
const { result } = renderHook(() => useCart(), { wrapper });
420+
421+
act(() => result.current.emptyCart());
422+
expect(called).toBe(true);
423+
});
409424
});
410425

411426
describe("updateCartMetadata", () => {

0 commit comments

Comments
 (0)