woocommerce/plugins/woocommerce-admin/packages
Darren Ethier 783f613815 wp.data Settings refactor
add data store for settings using wp.data

add use-select-with-refresh example

replace fresh-data usage with new settings data store for settings page

Add data package

move to packages

Fix isDirty after save

Add isBusy to primary button when saving

update Readme

remove comment

readme to use useSelect

Revert "update Readme"

This reverts commit 7402fd49b8f384fde5878e0bee0616f0a87bb4f6.

Data Layer: Settings page to use Settings store (https://github.com/woocommerce/woocommerce-admin/pull/3430)

* Data Layer: Settings store as source of truth for settings page

This reverts commit 7402fd49b8f384fde5878e0bee0616f0a87bb4f6.

* fixup

* save on reset

* non mutable constants

* add set/getSettings

* save using setSettings

* separate HOC

* cleanup

* remove settingsToData

* withHydration

* remove withSettings HOC

* renmove useSettins for now

* withSettingsHydration updates

* Revert "withSettingsHydration updates"

This reverts commit f2adf108fbe19b574978fea5925a1a18e7ed3007.

* rename withSettingsHydration

* redo withSettingsHydration simplification

* restore

* useSettings

* render using useSettings

* handleInputChange working

* get setIsDirty working

* saving works

* reset and cleanup

* cleanup

* use snake case on hook files

* use clearIsDirty

* Avoid mutation on setting update

* remove @todo

* persiting -> isPersisting

* better reducer ternaries

* add wcSettings as arg to withSettingsHydration

reset package-lock

Settings: split out mutable wcAdminSettings (https://github.com/woocommerce/woocommerce-admin/pull/3675)

Settings: handle async settings groups (https://github.com/woocommerce/woocommerce-admin/pull/3707)
2020-03-25 16:20:17 +13:00
..
components Animation slider example fix (https://github.com/woocommerce/woocommerce-admin/pull/3939) 2020-03-25 10:50:26 +13:00
csv-export Update dependency moment to v2.24.0 (https://github.com/woocommerce/woocommerce-admin/pull/3818) 2020-03-10 20:41:44 +01:00
currency Update babel monorepo (https://github.com/woocommerce/woocommerce-admin/pull/3774) 2020-03-09 16:59:55 +01:00
data wp.data Settings refactor 2020-03-25 16:20:17 +13:00
date Update dependency moment to v2.24.0 (https://github.com/woocommerce/woocommerce-admin/pull/3818) 2020-03-10 20:41:44 +01:00
navigation Update babel monorepo (https://github.com/woocommerce/woocommerce-admin/pull/3774) 2020-03-09 16:59:55 +01:00
number Update babel monorepo (https://github.com/woocommerce/woocommerce-admin/pull/3774) 2020-03-09 16:59:55 +01:00
README.md Decouple currency and numbers packages from `wcSettings`. (https://github.com/woocommerce/woocommerce-admin/pull/3277) 2019-11-21 16:51:52 -05:00

README.md

WooCommerce Packages

Currently we have a small set of public-facing packages that can be dowloaded from npm and used in external applications.

  • @woocommerce/components: A library of components that can be used to create pages in the WooCommerce dashboard and reports pages.
  • @woocommerce/csv-export: A set of functions to convert data into CSV values, and enable a browser download of the CSV data.
  • @woocommerce/currency: A class to display and work with currency values.
  • @woocommerce/date: A collection of utilities to display and work with date values.
  • @woocommerce/navigation: A collection of navigation-related functions for handling query parameter objects, serializing query parameters, updating query parameters, and triggering path changes.

Working with existing packages

  • You can make changes to packages files as normal, and running npm start will compile and watch both app files and packages.
  • ⚠️ Make sure any dependencies you add to a package are also added to that package's package.json, not just the woocommerce-admin package.json
  • ⚠️ Make sure you're not importing from any woocommerce-admin files outside of the package (you can import from other packages, just use the import from @woocommerce/package syntax).
  • Add your change to the CHANGELOG for that package under the next version number, creating one if necessary (we use semantic versioning for packages, see these guidelines).
  • Don't change the version in package.json.
  • Label your PR with the Packages label.
  • Once merged, you can wait for the next package release roundup, or you can publish a release now (see below, "Publishing packages").

Creating a new package

Most of this is pulled from the Gutenberg workflow.

To create a new package, add a new folder to /packages, containing…

  1. package.json based on the template:
    {
    	"name": "@woocommerce/package-name",
    	"version": "1.0.0-beta.0",
    	"description": "Package description.",
    	"author": "Automattic",
    	"license": "GPL-2.0-or-later",
    	"keywords": [
    		"wordpress",
    		"woocommerce"
    	],
    	"homepage": "https://github.com/woocommerce/woocommerce-admin/tree/master/packages/[_YOUR_PACKAGE_]/README.md",
    	"repository": {
    		"type": "git",
    		"url": "https://github.com/woocommerce/woocommerce-admin.git"
    	},
    	"bugs": {
    		"url": "https://github.com/woocommerce/woocommerce-admin/issues"
    	},
    	"main": "build/index.js",
    	"module": "build-module/index.js",
    	"react-native": "src/index",
    	"dependencies": {
    		"@babel/runtime-corejs2": "7.1.5"
    	},
    	"publishConfig": {
    		"access": "public"
    	}
    }
    
  2. .npmrc file which disables creating package-lock.json file for the package:
    package-lock=false
    
  3. README.md file containing at least:
    • Package name
    • Package description
    • Installation details
    • Usage example
  4. A src directory for the source of your module, which will be built by default using the npm run build:packages command. Note that you'll want an index.js file that exports the package contents, see other packages for examples.

Publishing packages

  • Run npm run publish-packages:check to see which packages will be published
  • Create a PR with a CHANGELOG for each updated package (or try to add to the CHANGELOG with any PR editing packages/)
  • Run npm run publish-packages:prod to publish the package
  • OR Run npm run publish-packages:dev to publish "next" releases (installed as npm i @woocommerce/package@next). Only use :dev if you have a reason to.
  • Both commands will run build:packages before the lerna task, just to catch any last updates.

It will confirm with you once more before publishing:

Changes:
 - @woocommerce/components: 1.0.1 => 1.1.0
 - @woocommerce/date: 1.0.1 => 1.0.2
 - @woocommerce/navigation: 1.0.0 => 1.1.0

? Are you sure you want to publish these packages?

If you accept, Lerna will create git tags, publish those to github, then push your packages to npm.

🎉 You have a published package!