Skip to content

Instantly share code, notes, and snippets.

View itaditya's full-sized avatar
🎯
Focusing

Aditya Agarwal itaditya

🎯
Focusing
View GitHub Profile
@itaditya
itaditya / App--Comp.jsx
Last active October 5, 2020 14:24
(Blog) Testing a Redux hooked app
// App.js
function App() {
const stateAPIStatus = useLoadFoodData();
return (
<div className="food-app">
<header>
<h1>Ordux</h1>
</header>
<Message status={stateAPIStatus} />
@itaditya
itaditya / test-loading.js
Last active October 5, 2020 13:19
(Blog) Testing a Redux hooked app
import React from 'react';
import { Provider } from 'react-redux';
import { render, screen, waitForElementToBeRemoved } from '@testing-library/react';
import '@testing-library/jest-dom/extend-expect';
import App from './App';
import { createReduxStore } from './redux';
describe('Test App', () => {
function renderApp(store = createReduxStore(), props = {}) {
@itaditya
itaditya / example-test.js
Last active October 3, 2020 12:53
(Blog) Testing a Redux hooked app
test('only show veg food when veg filter is applied', () => {
// arrange
render(<App {...props} />);
// act
fireEvent.click(screen.getByRole('checkbox', { name: /Veg Only/i }));
// assert
expect(screen.queryByText(/Sausage McMuffin/i)).toBe(null);
expect(screen.getByText(/Mushroom Pizza/i)).toBeInTheDocument();
@itaditya
itaditya / selectorMenu-App.js
Created September 28, 2020 04:45
(Blog) Build a Redux hooked app
function selectorMenu(state) {
const { diet, menuIdList, menuById } = state;
const menuId = menuIdList[diet];
const menuList = [];
menuId.forEach((id) => {
menuList.push(menuById[id]);
});
return menuList;
@itaditya
itaditya / displayMenu-App.js
Created September 28, 2020 04:43
(Blog) Build a Redux hooked app
import { shallowEqual, useSelector } from 'react-redux';
export default function App() {
const diet = useSelector((state) => state.diet);
const menuList = useSelector(selectorMenu, shallowEqual);
useEffect(() => {
console.log('SERVER_EVENT: menu list changed');
}, [menuList]);
@itaditya
itaditya / redux--react-wiring.js
Last active October 4, 2020 12:14
(Blog) Build a Redux hooked app
// redux.js
const enableReduxDevTools = window.__REDUX_DEVTOOLS_EXTENSION__?.();
export function createReduxStore() {
const store = createStore(foodReducer, enableReduxDevTools);
return store;
}
@itaditya
itaditya / foodReducer-redux.js
Created September 28, 2020 04:33
(Blog) Build a Redux hooked app
case ACTIONS.LOAD_MENU: {
const { menu } = action.payload;
const menuById = {};
menu.forEach((item) => {
menuById[item.id] = item;
});
const allMenuId = menu.map((item) => item.id);
const vegMenuId = menu
.filter((item) => item.diet === "veg")
@itaditya
itaditya / foodReducer-redux.js
Created September 28, 2020 04:31
(Blog) Build a Redux hooked app
function foodReducer(state = initialState, action) {
switch (action.type) {
case ACTIONS.CHANGE_DIET: {
const { diet } = state;
const newDiet = diet === 'veg' ? 'all' : 'veg';
return {
...state,
diet: newDiet,
cartByIds: {},
@itaditya
itaditya / foodReducer-redux.js
Created September 28, 2020 04:30
(Blog) Build a Redux hooked app
const initialState = {
diet: 'all',
menuById: {},
menuIdList: {
all: [],
veg: [],
},
cartByIds: {},
}
@itaditya
itaditya / ACTIONS-redux.js
Created September 28, 2020 04:29
(Blog) Build a Redux hooked app
export const ACTIONS = {
CHANGE_DIET: 'CHANGE_DIET',
LOAD_MENU: 'LOAD_MENU',
ADD_TO_CART: 'ADD_TO_CART',
REMOVE_FROM_CART: 'REMOVE_FROM_CART',
};