@lightspeed/react-retail-eject-link
TypeScript icon, indicating that this package has built-in type declarations

1.0.11 • Public • Published

@lightspeed/react-retail-eject-link

npm version

Introduction

React component which encapsulates the logic of ejecting from an iframe-embedded webapp and routing to a Retail view. It works both for the react-router (new) and gui_defs (legacy) routes.

Quick Start

  1. Install the dependency in your webapp.
yarn add @lightspeed/react-retail-eject-link
  1. Consume the component:
import React from 'react';
import RetailEjectLink from '@lightspeed/react-retail-eject-link';

class MyPage extends React.Component {
  render() {
    return (
      <div>
        {/* The `href` attribute is applied to the child `a` tag */}
        <RetailEjectLink href="/url/in/retail">
          <a>Go to purchases</a>
        </RetailEjectLink>

        {/* The `href` attribute is forcibly applied to the child `TextLink` component because of the `passHref` prop */}
        <RetailEjectLink href="/url/in/retail" passHref={true}>
          <TextLink>Go to purchases</TextLink>
        </RetailEjectLink>

        {/* The `onClick` of the child component will still execute prior to the route action */}
        <RetailEjectLink href="/url/in/retail">
          <button onClick={() => track('purchasesClicked')}>Go to purchases with tracking</button>
        </RetailEjectLink>

        {/* The `type` of the link can be specified (`navigateToContent` | `openUrl` | `pageRouterGoTo`(default) ). This `type` prop will then be used in Retail (see https://github.com/merchantos/webPOS/blob/master/assets/js/iframe.js). */}
        <RetailEjectLink
          href="/?form_name=listing&amp;name=purchase.listings.purchases&amp;shop_id=1"
          type="navigateToContent"
        >
          <a>Go to purchases with tracking</a>
        </RetailEjectLink>

        {/* [TO BE DEPRECATED, use `type="navigateToContent"` instead] For those pesky `gui_defs` routes pass the `isGuiDefs` prop so they get parsed correctly */}
        <RetailEjectLink
          href="/?form_name=listing&amp;name=purchase.listings.purchases&amp;shop_id=1"
          isGuiDefs={true}
        >
          <a>Go to purchases</a>
        </RetailEjectLink>
      </div>
    );
  }
}
  1. Or use the programmatic way by calling the retailEjectLinkPostMessage function to post a message to the parent window:

The function receives an object with the following keys:

Param Type Required Default Description
href string Yes URL in Retail.
type LinkType No 'pageRouterGoTo' The type of the link can be specified (navigateToContent, openUrl, pageRouterGoTo). This type prop will then be used in Retail's iframe.js.
isGuiDefs boolean No false @deprecated Force type on isGuiDefs to be navigateToContent. Use type instead.

For example, using to retailEjectLinkPostMessage to redirect users to Retail after data querying:

import React from 'react';
import { retailEjectLinkPostMessage } from '.';

const ValidationComponent: React.FC = () => {
  const dataComingFromApi = {
    data: {
      validationStatus: 'completed',
    },
  };

  React.useEffect(
    () => {
      const {
        data: { validationStatus },
      } = dataComingFromApi;

      if (validationStatus === 'completed') {
        retailEjectLinkPostMessage({ href: 'url/in/retail' });
      }
    },
    [dataComingFromApi],
  );

  return <p>Validating. Please, wait...</p>;
};

export default ValidationComponent;

Readme

Keywords

none

Package Sidebar

Install

npm i @lightspeed/react-retail-eject-link

Weekly Downloads

1

Version

1.0.11

License

MIT

Unpacked Size

13.7 kB

Total Files

6

Last publish

Collaborators

  • kurt.bergeron
  • lightspeedhq
  • ls-guillaume-lambert
  • ls-frederic-bouchard
  • anomen