Advertisement
Guest User

Untitled

a guest
Apr 7th, 2020
231
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /* index.js */
  2.  
  3. import React, { useState } from "react";
  4. import { EmptyState, Layout, Page } from "@shopify/polaris";
  5. import { ResourcePicker } from "@shopify/app-bridge-react";
  6.  
  7. function Index() {
  8.   const [modal, setModal] = useState({ open: false });
  9.   return (
  10.     <Page>
  11.       <ResourcePicker
  12.         resourceType="Product"
  13.         showVariants={false}
  14.         open={modal.open}
  15.         onCancel={() => setModal({ open: false })}></ResourcePicker>
  16.       <Layout>
  17.         <EmptyState
  18.           heading="Manage your inventory transfers"
  19.           action={{
  20.             content: "Add transfer",
  21.             onAction: () => setModal({ open: true }),
  22.           }}
  23.           secondaryAction={{
  24.             content: "Learn more",
  25.             url: "https://help.shopify.com",
  26.           }}
  27.           image="https://cdn.shopify.com/s/files/1/0757/9955/files/empty-state.svg">
  28.           <p>Select products</p>
  29.         </EmptyState>
  30.       </Layout>
  31.     </Page>
  32.   );
  33. }
  34.  
  35. export default Index;
  36.  
  37. /* _app.js */
  38. import App from "next/app";
  39. import Head from "next/head";
  40. import { AppProvider } from "@shopify/polaris";
  41. import { Provider } from "@shopify/app-bridge-react";
  42. import "@shopify/polaris/styles.css";
  43. import translations from "@shopify/polaris/locales/en.json";
  44. import Cookies from "js-cookie";
  45.  
  46. class MyApp extends App {
  47.   render() {
  48.     const { Component, pageProps } = this.props;
  49.     const config = {
  50.       apiKey: API_KEY,
  51.       shopOrigin: Cookies.get("shopOrigin"),
  52.       forceRedirect: true,
  53.     };
  54.  
  55.     return (
  56.       <React.Fragment>
  57.         <Head>
  58.           <title>Sample App</title>
  59.           <meta charSet="utf-8" />
  60.         </Head>
  61.         <Provider config={config}>
  62.           <AppProvider i18n={translations}>
  63.             <Component {...pageProps} />
  64.           </AppProvider>
  65.         </Provider>
  66.       </React.Fragment>
  67.     );
  68.   }
  69. }
  70.  
  71. export default MyApp;
  72.  
  73. /* server.js */
  74. require("isomorphic-fetch");
  75. const Koa = require("koa");
  76. const next = require("next");
  77. const { default: createShopifyAuth } = require("@shopify/koa-shopify-auth");
  78. const dotenv = require("dotenv");
  79. const { verifyRequest } = require("@shopify/koa-shopify-auth");
  80. const session = require("koa-session");
  81.  
  82. dotenv.config();
  83.  
  84. const port = parseInt(process.env.PORT, 10) || 3000;
  85. const dev = process.env.NODE_ENV !== "production";
  86. const app = next({ dev });
  87. const handle = app.getRequestHandler();
  88.  
  89. const { SHOPIFY_API_SECRET_KEY, SHOPIFY_API_KEY } = process.env;
  90.  
  91. app.prepare().then(() => {
  92.   const server = new Koa();
  93.   server.use(session({ sameSite: "none", secure: true }, server));
  94.   server.keys = [SHOPIFY_API_SECRET_KEY];
  95.  
  96.   server.use(
  97.     createShopifyAuth({
  98.       apiKey: SHOPIFY_API_KEY,
  99.       secret: SHOPIFY_API_SECRET_KEY,
  100.       scopes: [
  101.         "read_products",
  102.         "write_products",
  103.         "read_script_tags",
  104.         "write_script_tags",
  105.       ],
  106.       afterAuth(ctx) {
  107.         const { shop, accessToken } = ctx.session;
  108.         ctx.cookies.set("shopOrigin", shop, {
  109.           httpOnly: false,
  110.           secure: true,
  111.           sameSite: "none",
  112.         });
  113.         ctx.redirect("/");
  114.       },
  115.     }),
  116.   );
  117.  
  118.   server.use(verifyRequest());
  119.   server.use(async (ctx) => {
  120.     await handle(ctx.req, ctx.res);
  121.     ctx.respond = false;
  122.     ctx.res.statusCode = 200;
  123.   });
  124.  
  125.   server.listen(port, () => {
  126.     console.log(`> Ready on http://localhost:${port}`);
  127.   });
  128. });
  129.  
  130. /* next.config.js */
  131.  
  132. require("dotenv").config();
  133.  
  134. const webpack = require("webpack");
  135.  
  136. const apiKey = JSON.stringify(process.env.SHOPIFY_API_KEY);
  137.  
  138. module.exports = {
  139.   webpack: (config) => {
  140.     const env = { API_KEY: apiKey };
  141.     config.plugins.push(new webpack.DefinePlugin(env));
  142.     return config;
  143.   },
  144.   devIndicators: {
  145.     autoPrerender: false,
  146.   },
  147. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement