Skip to content

Instantly share code, notes, and snippets.

@yomigeek
Last active September 2, 2021 20:21
Show Gist options
  • Save yomigeek/b678ed72e3cf0e8cd6fe52d87bd992a0 to your computer and use it in GitHub Desktop.
Save yomigeek/b678ed72e3cf0e8cd6fe52d87bd992a0 to your computer and use it in GitHub Desktop.
React Codes
// ADDING THE REDUX PROVIDER
import React from 'react';
import { Provider } from 'react-redux';
import store from '../redux/store';
import Routes from '../routes';
const App = () => {
return (
<Provider store={store}>
<Routes />
</Provider>
);
};
export default App;
// setting up the routes
import "./App.css";
import Routes from './routes';
const App = () => {
return (
<Routes />
);
};
export default App;
import React from 'react';
import { Redirect } from 'react-router-dom';
import AuthorizedRoute from '../AuthorizedRoute';
import { isAuthenticated, decodeToken, getToken } from 'utils-auth';
/**
* Renders the component if the user is authenticated
*
* @param {Component} Component
*
* @returns {JSX}
*/
const renderComponent = (Component) => (props) => {
return <Component {...props} />;
};
/**
* This Component returns a new
* route based on authenticated status
*
* @returns {JSX}
*/
const AuthenticatedRoute = (props) => {
const { component: Component, ...rest } = props;
const checkisAuthenticated = isAuthenticated();
const token = getToken();
const user = decodeToken(token);
if (!checkisAuthenticated) {
return <Redirect to="/signin" />;
}
return (
<AuthorizedRoute {...rest} render={renderComponent(Component)} />
);
};
export default AuthenticatedRoute;
import * as React from 'react';
import { Route } from 'react-router';
/**
* Returns authenticated route
*
* @param {Object} props
*
* @returns {JSX}
*/
const AuthorizedRoute = (props) => {
return (
<Route { ...props } />
);
};
export default AuthorizedRoute;
import axios from 'axios';
export const getToken = () => {
const token = localStorage.getItem('accessToken');
if (token) {
return JSON.parse(localStorage.getItem('accessToken'));
}
return null;
};
const instance = axios.create({
baseURL: process.env.REACT_APP_BASE_URL || 'https://...APIURL',
});
instance.interceptors.request.use(
async (config) => {
const token = getToken();
if (token) {
config.headers.Authorization = `Bearer ${token}`;
}
return config;
},
(error) => Promise.reject(error)
);
export default instance;
import React from 'react';
import styled from 'styled-components';
const Box = styled.div`
margin: 40px;
border: 5px black;
`;
const Content = styled.p`
font-size: 16px;
text-align: center;
`;
const Box = () => (
<Box>
<Content> Styling React Components </Content>
</Box>
);
export default Box;
"scripts": {
"start-scripts": "react-scripts start",
"start": "npm install -g serve && serve -s build",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
// using destructured props in styled components
export const DashboardWrapper = styled.div`
margin-top: ${({ marginTop }) => (marginTop ? marginTop : '70px')};
`;
const Button = styled.button`
/* Adapt the colors based on primary prop */
background: ${props => props.primary ? "palevioletred" : "white"};
color: ${props => props.primary ? "white" : "palevioletred"};
font-size: 1em;
margin: 1em;
padding: 0.25em 1em;
border: 2px solid palevioletred;
border-radius: 3px;
&:hover {
cursor: pointer;
}
`;
const SimpleForm = (props) => {
const [cardNumber, setCardNumber] = React.useState("");
const handleCardNumber = (e) => {
e.persist();
const value = e.target.value;
setCardNumber(value);
}
return (
<form>
<div className="card-number">
<input
type="text"
placeholder="card number"
value={cardNumber}
onChange={handleCardNumber}
/>
</div>
<button type="submit" className="myButton">
Login
</button>
</form>
);
}
// index.jsx with route
import React from "react";
import ReactDOM from "react-dom";
import "./index.css";
import App from "./App";
import {BrowserRouter} from "react-router-dom";
ReactDOM.render(
<React.StrictMode>
<BrowserRouter>
<App />
</BrowserRouter>
</React.StrictMode>,
document.getElementById("roots")
);
const SignUp = () => {
const [inputs, setInputs] = useState({
name: '',
gender: '',
email: ''
});
const inputHandler = (e) => {
e.persist();
setInputs((inputs) => ({
...inputs,
[e.target.name]: e.target.value,
}));
};
const submitForm = () => {
console.log(inputs);
};
return (
<form>
<div className="">
<input
type="text"
placeholder="Full name"
value={inputs.name}
onChange={inputHandler}
/>
</div>
<div className="">
<input
type="email"
placeholder="Email"
value={inputs.email}
onChange={inputHandler}
/>
</div>
<div className="">
<select name="gender">
<option value="male">Male</option>
<option value="female">Female</option>
</select>
</div>
<button type="submit" className="myButton" onClick={() => submitForm()}>
Signup
</button>
</form>
)
};
export default SignUp;
import { combineReducers } from 'redux';
// import individual reducers
import user from './user-reducer';
// combine all reducers
export default combineReducers({
user,
});
// react libraries
import * as React from 'react';
import { Route, Switch } from 'react-router-dom';
import Welcome from './components/Welcome/index';
import Nav from './components/Nav';
const Routes = () => (
<Switch>
<Route exact path="/contact" component={Nav} />
<Route exact path="/" component={Welcome} />
<Route path="*" component={() => <div>Not found</div>} />
</Switch>
);
export default Routes;
import { createStore, applyMiddleware } from 'redux';
import { composeWithDevTools } from 'redux-devtools-extension/developmentOnly';
import thunk from 'redux-thunk';
import reducer from '../reducers';
const store = createStore(reducer, composeWithDevTools(applyMiddleware(thunk)));
export default store;
// A styled component using props
export const Text = styled.p`
font-size: ${(props) => (props.size ? props.size : '25px')};
font-weight: ${(props) => (props.weight ? props.weight : 'normal')};
color: ${(props) => (props.color ? props.color : '#000000')};
text-align: ${(props) => (props.align ? props.align : 'left')};
text-transform: ${(props) => (props.transform ? props.transform : '')};
`;
import { getAllUsers } from 'redux/api/users-api';
export const fetchAllUsers = (toast) => async (dispatch) => {
try {
dispatch({
type: 'GET_USERS_REQUEST',
});
const response = await getAllUsers();
dispatch({
type: 'GET_USERS_SUCCESS',
payload: {
requests: response?.data,
},
});
} catch (error) {
dispatch({
type: 'GET_USERS_FAILURE',
});
}
};
};
import axios from 'config/axios';
// user
//get sample
export const getAllUsers = async () => {
const request = await axios.get('/users');
return request;
};
// post sample
export const addUsers = (data) => {
let request = axios.post('/users', data)
return request
};
const initialState = {
loading: false,
users: [],
};
/**
*user Reducer
*
* @export
*/
export default function (state = initialState, { type, payload }) {
switch (type) {
case 'GET_USERS_REQUEST':
return {
...state,
loading: true,
};
case 'GET_USERS_SUCCESS':
return {
...state,
loading: false,
users: payload.users,
};
case 'GET_USERS_FAILURE':
return {
...state,
loading: false,
};
default:
return state;
}
}
import React, { useRef } from 'react';
function useRefExample = () => {
const inputRef= useRef(null);
const onButtonClick = () => {
inputRef.current.focus();
};
return (
<>
<input ref={inputRef} type="text" />
<button onClick={onButtonClick}>Submit</button>
</>
);
} ;
export default useRefExample;
import jwtDecode from 'jwt-decode';
export const isAuthenticated = () => {
const token = getToken();
return !!token;
};
export const getToken = () => {
const token = localStorage.getItem('accessToken');
if (token) {
return JSON.parse(localStorage.getItem('accessToken'));
}
return null;
};
export const setToken = (token) => {
if (token) {
localStorage.setItem('accessToken', JSON.stringify(token));
} else {
localStorage.removeItem('accessToken');
}
};
export const setRefreshToken = (token) => {
if (token) {
localStorage.setItem('refreshToken', JSON.stringify(token));
} else {
localStorage.removeItem('refreshToken');
}
};
export const isExpired = (token) => {
try {
const decoded = decodeToken(token);
const milliseconds = decoded.exp * 1000;
return Date.now() > milliseconds;
} catch (err) {
return true;
}
};
const clearStorage = () => {
localStorage.clear();
};
export const decodeToken = (token) => {
let decoded = {};
try {
decoded = jwtDecode(token);
} catch (error) {
} finally {
return decoded;
}
};
export const login = (token) => {
setToken(token);
};
export const logout = () => {
clearStorage();
};
import React, { useEffect } from 'react';
import { useSelector, useDispatch } from 'react-redux';
import { fetchAllUsers } from 'redux/actions/user-action';
/**
*
*
* @return {*}
*/
const ViewUsers = () => {
const dispatch = useDispatch();
useEffect(() => {
dispatch(fetchAllExitTypes());
}, [dispatch]);
const { users, loading } = useSelector((state) => state.user);
return (
<div>
<p>All Users</p>
{loading
? 'Loading...'
: users?.map((user) => (
<div>{user.name}</div>
))
}
</div>
);
};
export default ViewUsers;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment