@shopify/discount-app-components
provides a set of stateless discount components to help 3p app developers create AppBridge-powered discounts apps.
For more information about creating apps for the Shopify App Store, see the app development documentation.
Run the following command using npm:
npm install @shopify/discount-app-components --save
If you prefer Yarn, use the following command instead:
yarn add @shopify/discount-app-components
🛑 The project has
peerDependencies
of@shopify/app-bridge
,@shopify/app-bridge-react
, and@shopify/polaris
which must also be installed in your app.
-
Import the CSS for this repo and Polaris directly into your project if your asset packager supports it:
import '@shopify/discount-app-components/build/esm/styles.css'; import '@shopify/polaris/build/esm/styles.css';
Otherwise include the CSS in your HTML. We suggest copying the styles file into your own project, but you may also use it directly:
<link rel="stylesheet" href="https://unpkg.com/@shopify/discount-app-components@<your version number>/build/esm/styles.css" /> <link rel="stylesheet" href="https://unpkg.com/@shopify/polaris@<your version number>/build/esm/styles.css" />
-
This library contains a number of locale-specific components, and you will be required to pass a
locale
and aianaTimezone
to the discounts AppProvider. Also, this library will require you to wrap your app in a Polaris AppProvider and an AppBridge AppProvider. A full example of an app root can be found below:import {Page, AppProvider as PolarisAppProvider} from '@shopify/polaris'; import {Provider as AppBridgeProvider} from '@shopify/app-bridge-react'; import {AppProvider} from '@shopify/discount-app-components'; // See [Polaris AppProvider documentation](https://github.com/Shopify/polaris/blob/main/polaris-react/src/components/AppProvider/README.md#using-translations) for more details on using Polaris translations import enPolarisTranslations from '@shopify/polaris/locales/en.json'; // Import polaris styles import "@shopify/polaris/build/esm/styles.css"; // Import this discount-app-components styles import "@shopify/discount-app-components/build/esm/styles.css"; export default function App() { ... return ( <AppBridgeProvider config={/* pass your app bridge config here */}> <PolarisAppProvider i18n={enPolarisTranslations}> {/* discount-app-component specific AppProvider */} <AppProvider locale="en-US" ianaTimezone="America/Los_Angeles"> <Page title="Example app"> {/* Add your discount components here */} </Page> </AppProvider> </PolarisAppProvider> </AppBridgeProvider> ); }
Note: you may need to rename the discounts AppProvider to avoid clashing with another AppProvider component:
import {AppProvider as DiscountAppComponentsProvider} from '@shopify/discount-app-components';
And in your app root:
<DiscountAppComponentsProvider
locale="en-US"
ianaTimezone="America/Los_Angeles"
>
<Page title="Example app">{/* Add your discount components here */}</Page>
</DiscountAppComponentsProvider>
-
In your terminal, install yalc globally.
npm i yalc -g
-
In your terminal, run
yalc publish --private
from the discount-app-components repo -
In your terminal, open a second tab in your consuming project's directory and run
yalc add @shopify/discount-app-components
. This will the dependency to your project's package.json that resembles the following:
"dependencies": {
...
"@shopify/discount-app-components": "file:.yalc/@shopify/discount-app-components",
...
}
- Build your project to install the @shopify/discount-app-components's dependencies (e.g.
yarn
). NOTE This may update your project's dependency lockfile, be cautious about committing changes added by importing @shopify/discount-app-components locally.
- Republish your changes from @shopify/discount-app-components with
yalc publish --private
- Update the dependency in your consuming project with
yalc update @shopify/discount-app-components
- Note that you may need to
rm -rf ./node_modules && rm -rf .yalc && yarn
for the changes to apply.
- Note that you may need to
If you run into an error that resembles the following:
ERROR in ./node_modules/@shopify/react-i18n/build/esm/i18n.mjs 406:68-76
Can't import the named export 'TimeUnit' from non EcmaScript module (only default export is available)
@ ./node_modules/@shopify/react-i18n/build/esm/index.mjs
@ ./node_modules/@shopify/react-i18n/index.mjs
@ ./node_modules/@shopify/discount-app-components/build/esm/components/FormattedNumberField/FormattedNumberField.js
@ ./node_modules/@shopify/discount-app-components/build/esm/index.js
@ ./src/App.js
@ ./src/index.js
You may need to update your webpack.config.js to include a module.rules
of:
{
test: /\.mjs$/,
include: /node_modules/,
type: 'javascript/auto',
}
Writing changelogs and releasing should be as seamless and automated as possible. This repo uses changesets to version and release packages. To create a new version and release, follow these steps:
- Changes are made in a working branch and it is deemed that a version (patch/minor/major) bump is needed.
- On the working branch:
a. If you want to include those changes into the changelog, run
yarn changeset add
and commit the generated changesets. b. If you don't want to include those changes in the changelog, you can label your pr with 🤖 Skip Changelog. - Then push the generated changesets and or changes to your working branch
- Merge working branch as you would normally, after getting reviews and CI passing
- When feature work is merged into main there is a release GitHub action that runs which generates a Version Packages pull request.
- It runs
yarn version
and incorporates the changesets into the changelog and bumps the version accordingly. (patch/minor/major) It then creates aVersion Packages
pull request. - Merge the Version Packages PR.
- The release action runs
yarn release
, which publishes the package to npm.