JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 19
  • Score
    100M100P100Q45491F
  • License MIT

Package Exports

  • @solve-io/react-sdk
  • @solve-io/react-sdk/dist/index.js

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@solve-io/react-sdk) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

useSolve

Simple React Hooks for identification with solve.io

Feature

  • 👕 Typescript support.
  • 🗜️ Clean hooks to track events
  • 📤 Easy identification of customers.

Install

yarn add @solve-io/react-sdk

Next.js setup

To install solve on a next.js site. A script tag needs to be added to the _.app.js/.ts file Important Make sure to replace the values with a public api key from your solve admin.

// _.app.js/ts
import { SolveScriptTag } from "@solve-io/react-sdk";

function MyApp({ Component, pageProps }) {
  return (
    <>
      <SolveScriptTag
        apiUrl='https://<YOUR_STACK_NAME>.production.solvestack.net'
        apiKey='<YOUR_SOLVE_PUBLIC_KEY>'
        storeName='<YOUR_STORE_NAME>'
      />
      <Component {...pageProps} />
    </>
  );
}

export default MyApp;

Gatsby

Create and update gatsby-browser.<t.j>sx with code below. The file gatsby-browser.js lets you respond to Gatsby-specific events within the browser, and wrap your page components in additional global components.

Read more about Gatsby Browser APIs

Important Make sure to replace the values with a public api key from your solve admin.

// gatsby-browser.<t/j>.sx
import * as React from "react";
import { SolveScriptTag } from "@solve-io/react-sdk";
export const wrapPageElement = ({ element }) => {
  return (
    <>
      <SolveScriptTag
        apiUrl="<your_api_url_from_admin>"
        apiKey="<your_api_key_from_admin>"
        storeName="<your_store_name>"
      />
      {element}
    </>
  );
};

Identify customer

import { useSolve } from "@solve-io/react-sdk";

function App() {
  const { identify } = useSolve();

  const subSubscribeToEmail = (event) => {
    identify({ email: event.target.value });
    // perform subscribe
  };
  const handleChange = (event) => {
    // setState, etc
  };
  return (
    <>
      <form onSubmit={subSubscribeToEmail}>
        <label>
          Email:
          <input type="text" value={state.value} onChange={handleChange} />
        </label>
        <input type="submit" value="Submit" />
      </form>
    </>
  );
}

PageViews

Solve automatically captures page views when hook included. Custom page views for using with react-router can be added.

function App() {
  const { capturePageView } = useSolve();

  const onPageChange = () => {
    capturePageView();
    navigate("MyPage");
  };

  return (
    <>
      <div>
        <h1>My Page</h1>
        <button onClick={onPageChange}>Change Page</button>
      </div>
    </>
  );
}

Cart creation

Solve identification works best when the cartId is sent to solve when it is first created.

function App() {
  const { captureCart } = useSolve();

  const onAddToCart = async () => {
    // Do something with the cart gid://shopify/Cart/12345 
    const cartId = client.cart.create()
    captureCart({cartId})
  };

  return (
    <>
      <div>
        <h1>My Products</h1>
        <div>
          <p>Cool shoes</p>
        </div>
        <button onClick={onAddToCart}>Add to cart</button>
      </div>
    </>
  );
}

## Contribution

PR & issue welcome.

## License

MIT