Skip to content

Instantly share code, notes, and snippets.

View pranotobudi's full-sized avatar

pranoto budi pranotobudi

View GitHub Profile
@pranotobudi
pranotobudi / thankyou.js
Created November 30, 2021 13:56
part 14 - thankyou page
import Header from "/components/Header";
import {useRouter} from "next/router";
function ThankYou() {
const router = useRouter();
return (
<div>
<Header />
<div className="container mx-auto">
@pranotobudi
pranotobudi / _app.js
Created November 30, 2021 13:55
part 14 - PaypalScriptProvider
import { Provider } from 'react-redux'
import { store } from '../redux/store'
import '../styles/globals.css'
import Head from 'next/head';
import { PayPalScriptProvider } from "@paypal/react-paypal-js";
const MyApp = ({ Component, pageProps }) => {
return (
<PayPalScriptProvider options= {{"client-id": process.env.paypal_client_id }}>
<Provider store={store}>
@pranotobudi
pranotobudi / paypalcheckout.js
Created November 30, 2021 13:53
part 14 - payment page
import { PayPalButtons } from "@paypal/react-paypal-js";
import PaymentProduct from "/components/PaymentProduct"
import { useState } from "react";
import {useRouter} from "next/router";
import { useSelector } from "react-redux";
import { selectItems, selectTotal } from "/redux/basketSlice"
function PaypalCheckout() {
const [succeeded, setSucceeded] = useState(false);
@pranotobudi
pranotobudi / PaymentProduct.js
Last active November 30, 2021 13:51
part 14 - PaymentProduct component
import Image from "next/image";
function PaymentProduct({id, title, price, description, image}) {
return (
<div className='grid grid-cols-3'>
{/* Left */}
<Image src={image} height={200} width={200} objectFit="contain" />
{/* Middle */}
<div className="col-span-3 mx-5">
@pranotobudi
pranotobudi / checkout.js
Created November 25, 2021 05:36
part 13 - checkout page
import Header from "components/Header";
import { useSelector } from "react-redux";
import { selectItems, selectTotal } from "redux/basketSlice"
import CheckoutProduct from "components/CheckoutProduct"
import {useRouter} from "next/router";
import { userService } from 'pages/services/user.service';
function Checkout() {
const items = useSelector(selectItems);
const total = useSelector(selectTotal);
@pranotobudi
pranotobudi / CheckoutProduct.js
Created November 25, 2021 05:32
part13 - CheckProduct component
import Image from "next/image";
import { StarIcon } from "@heroicons/react/solid";
import { useDispatch } from "react-redux"
import {addToBasket, removeFromBasket} from "redux/basketSlice";
function CheckoutProduct({id, title, price, rating, description, category, image}) {
const dispatch = useDispatch();
const addItemToBasket = () => {
const product = {
@pranotobudi
pranotobudi / Header.js
Created November 12, 2021 14:04
dynamic logIn logOut part12
function Header(){
return (
<div>
{/*Account & basket*/}
<div className="text-white flex item-center text-xs space-x-6 mx-6 whitespace-nowrap">
<div onClick={userService.isSessionActive() ? signOut : signIn} className="link">
<p>
{userService.isSessionActive() ? `Sign Out`:`Sign In`}
</p>
<p>
@pranotobudi
pranotobudi / Header.js
Created November 12, 2021 14:03
signIn signOut function part12
function Header(){
const items = useSelector(selectItems);
const router = useRouter();
function signIn(){
router.push('login');
}
function signOut(){
userService.setUserSignOut();
router.push('/');
@pranotobudi
pranotobudi / user.service.js
Created November 12, 2021 14:02
user session part12
export const userService = {
// user: userSubject.asObservable(),
userData: {},
register,
login,
setUserValue,
isSessionActive,
setUserSignOut,
};
function setUserValue(obj) { userService.userData = obj }
@pranotobudi
pranotobudi / login.js
Created November 12, 2021 13:57
error handling part12
function onSubmit({ username, password }) {
return userService.login(username, password)
.then((response) => {
// condition: success
})
.catch(function(error){
console.log("ERROR HERE: "+error)
setError('apiError', { message: "User Authentication failed" });
});
}