22.13.0 • Published 5 months ago

@commercetools-frontend/sdk v22.13.0

Weekly downloads
45,105
License
MIT
Repository
github
Last release
5 months ago

@commercetools-frontend/sdk

Tools for declarative fetching.

Install

$ npm install --save @commercetools-frontend/sdk

Declarative Fetching

There are two sides to declarative fetching:

  • describing the data we need to fetch declaratively
  • fetching by rendering a component instead of triggering the fetch imperatively

This module aims to provide the necessary parts for both.

Declaring the fetch using a component

⚠️ Deprecated This component will likely not get developed any further. Use regular redux-style action creators for now. In the future we plan to use Apollo to replace this completely.

The provided Sdk.Get component can be rendered to fetch data. It uses the middleware behind the scenes but adds some features on top. See components/sdk-fetch/README.md for details.

Describing data declaratively

The provided middleware takes an object which describes what data should be fetched. The middleware transforms that description into a promise and resolves the promise. It passes the response back to the callee.

Usage

The middleware is a thin wrapper around sdk-client. It offers a way to declaratively describe the data requirements.

A Redux action using one of the action creators below needs to be dispatched. It contains the description of what to get/post/delete. The sdk middleware then turns the declarative description into imperative API calls on sdk-client. The dispatched action resolves with the result of sdk-client.

Action creators

The action creators can be imported as

import * as sdkActions from '@commercetools-frontend/sdk/actions';

Methods

There are three action creators which all have the same behavior and API. The only difference is the resulting HTTP method:

  • sdkActions.get(description): GET
  • sdkActions.post(description): POST
  • sdkActions.del(description): DELETE

Specifying an endpoint

There are two ways to describe an endpoint:

  • direct: description.uri is used as-is
  • combined: description.service and description.options are combined to form a uri

A payload can be provided in either case. It is only used by the sdkActions.post action creator. It contains the request payload.

Usage with uri
{
  uri: String,
  payload: Object | String
}
  • uri can be relative or absolute. It gets passed to sdk-client as-is

This approach must be used when querying something other than the CTP API. In case the CTP API is queried it is recommended to use service and options since that is easier to test. It is totally valid to provide uri only as well though.

When both, uri and options (or service) are present, the uri takes precedence.

Usage with service and options
{
  service: String,
  options: Object,
  payload: Object | String
}

Before using the sdk-client the sdk middleware combines service and options using api-request-builder's parse method to form a uri. It then makes the exact same request as when specifying uri directly.

The supported options can be found in the api-request-builder's documentation under the Declarative Usage section.

Error handling

Failed requests will result in a rejected promise. The sdk-client's error handling applies, so network errors and CTP API errors on the content itself result in a rejected promise.

The sdk package does not provide any error handling out of the box. It's the application's responsibility to handle errors (e.g. show a notification, track the error).

The MC has a handleActionError function which is what we currently use for error handling. It logs the error to the tracking tool (Sentry) and shows a notification to the client. This should be used whenever a more special error handling is not necessary.

Example

import * as sdkActions from '@commercetools-frontend/sdk/actions';

const fetchProductById = productId =>
  sdkActions.get({
    service: 'products',
    options: { id: productId },
  });
import * as globalActions from '@commercetools-frontend/actions-global';

class Foo extends React.Component {
  state = { product: null };
  componentDidMount() {
    this.props.fetchProductById(this.props.productId).then(
      product => {
        this.setState({ product });
      },
      error => {
        this.props.onActionError(error, 'Foo/fetchProductById');
      }
    );
  }
  render() {
    if (!this.state.product) return <LoadingSpinner />;

    return <div>{JSON.stringify(this.state.product)}</div>;
  }
}

// and finally we need to pass the bound action creator to the component using plain old redux
export default connect(
  null,
  {
    fetchProductById: productsActions.fetchProductById,
    onActionError: globalActions.handleActionError,
  }
);
22.10.0

6 months ago

22.6.0

8 months ago

22.8.4

6 months ago

22.8.3

7 months ago

22.8.2

7 months ago

22.8.1

7 months ago

22.8.0

7 months ago

22.12.0

5 months ago

22.3.4

10 months ago

22.3.3

10 months ago

22.3.2

10 months ago

22.5.0

8 months ago

22.7.1

8 months ago

22.7.0

8 months ago

22.9.1

6 months ago

22.13.0

5 months ago

22.11.0

6 months ago

22.4.0

9 months ago

22.3.1

10 months ago

22.1.0

12 months ago

22.3.0

11 months ago

22.2.1

11 months ago

22.2.0

11 months ago

21.25.2

12 months ago

21.25.1

12 months ago

21.25.0

1 year ago

22.0.1

12 months ago

22.0.0

12 months ago

21.24.0

1 year ago

21.24.3

1 year ago

21.24.2

1 year ago

21.24.1

1 year ago

21.23.10

1 year ago

21.23.9

1 year ago

21.23.8

1 year ago

21.23.7

1 year ago

21.23.6

1 year ago

21.23.5

1 year ago

21.22.1

1 year ago

21.22.0

1 year ago

21.23.1

1 year ago

21.23.0

1 year ago

21.23.4

1 year ago

21.23.3

1 year ago

21.23.2

1 year ago

21.19.0

1 year ago

21.20.0

1 year ago

21.20.4

1 year ago

21.20.3

1 year ago

21.20.2

1 year ago

21.20.1

1 year ago

21.20.5

1 year ago

21.18.1

1 year ago

21.18.0

1 year ago

21.21.2

1 year ago

21.21.1

1 year ago

21.21.0

1 year ago

21.16.0

2 years ago

21.17.0

2 years ago

21.13.0

2 years ago

21.13.1

2 years ago

21.14.3

2 years ago

21.14.2

2 years ago

21.14.1

2 years ago

21.14.0

2 years ago

21.15.0

2 years ago

21.8.1

2 years ago

21.8.0

2 years ago

21.9.0

2 years ago

21.12.0

2 years ago

21.10.0

2 years ago

21.11.0

2 years ago

21.6.0

2 years ago

21.2.1

2 years ago

21.3.0

2 years ago

21.3.4

2 years ago

21.0.0-rc.3

2 years ago

21.0.0-rc.1

2 years ago

21.0.0-rc.0

2 years ago

21.0.0

2 years ago

21.1.0

2 years ago

20.12.1

2 years ago

20.12.3

2 years ago

20.11.0

2 years ago

20.10.6

2 years ago

20.12.0

2 years ago

20.10.4

2 years ago

20.10.3

3 years ago

20.10.1

3 years ago

20.9.4

3 years ago

20.9.3

3 years ago

20.8.0

3 years ago

20.7.0

3 years ago

20.5.2

3 years ago

20.5.1

3 years ago

20.3.1

3 years ago

20.5.0

3 years ago

20.3.0

3 years ago

19.3.1

3 years ago

20.0.1

3 years ago

20.0.0

3 years ago

20.2.0

3 years ago

19.0.1

3 years ago

19.0.0

3 years ago

18.7.0

3 years ago

18.6.0

3 years ago

18.5.6

3 years ago

18.5.2

3 years ago

18.5.1

3 years ago

18.5.0

3 years ago

18.4.1

3 years ago

18.4.0

3 years ago

18.2.2

3 years ago

18.1.0

3 years ago

18.0.2

3 years ago

17.10.1

3 years ago

17.10.0

3 years ago

17.8.0

3 years ago

17.9.0

3 years ago

17.7.0

3 years ago

17.6.0

3 years ago

17.3.0

3 years ago

17.2.1

3 years ago

17.2.0

3 years ago

17.1.1

3 years ago

17.1.0

3 years ago

17.0.1

3 years ago

17.0.0

4 years ago

16.18.0

4 years ago

16.16.1

4 years ago

16.16.0

4 years ago

16.15.9

4 years ago

16.15.8

4 years ago

16.15.3

4 years ago

16.15.2

4 years ago

16.15.0

4 years ago

16.14.0

4 years ago

16.12.0

4 years ago

16.9.1

4 years ago

16.9.0

4 years ago

16.8.8

4 years ago

16.8.6

4 years ago

16.8.5

4 years ago

16.8.4

4 years ago

16.8.3

4 years ago

16.8.1-canary.8

4 years ago

16.8.1-canary.9

4 years ago

16.8.1-canary.1

4 years ago

16.8.1-canary.7

4 years ago

16.8.1-canary.0

4 years ago

16.8.0

4 years ago

16.7.2-canary.6

4 years ago

16.7.2-canary.5

4 years ago

16.7.2-canary.4

4 years ago

16.7.2-canary.3

4 years ago

16.7.2-canary.2

4 years ago

16.7.2-canary.1

4 years ago

16.7.2-canary.0

4 years ago

16.7.1-canary.8

4 years ago

16.7.1

4 years ago

16.7.1-canary.7

4 years ago

16.7.1-canary.1

4 years ago

16.7.1-canary.3

4 years ago

16.7.1-canary.2

4 years ago

16.7.1-canary.5

4 years ago

16.7.1-canary.4

4 years ago

16.7.1-canary.6

4 years ago

16.7.1-canary.0

4 years ago

16.6.2-canary.15

4 years ago

16.7.0

4 years ago

16.6.2-canary.13

4 years ago

16.6.2-canary.11

4 years ago

16.6.2-canary.10

4 years ago

16.6.2-canary.9

4 years ago

16.6.2-canary.8

4 years ago

16.6.2-canary.7

4 years ago

16.6.2-canary.6

4 years ago

16.6.2-canary.5

4 years ago

16.6.2-canary.0

4 years ago

16.6.1-canary.2

4 years ago

16.6.1-canary.1

4 years ago

16.5.4-canary.10

4 years ago

16.6.1-canary.0

4 years ago

16.6.0

4 years ago

16.5.4-canary.9

4 years ago

16.5.4-canary.8

4 years ago

16.5.4-canary.5

4 years ago

16.5.4-canary.6

4 years ago

16.5.4-canary.4

4 years ago

16.5.4-canary.3

4 years ago

16.5.4-canary.2

4 years ago

16.5.4-canary.1

4 years ago

16.5.4-canary.0

4 years ago

16.5.3

4 years ago

16.5.3-canary.3

4 years ago

16.5.3-canary.2

4 years ago

16.5.3-canary.1

4 years ago

16.5.3-canary.0

4 years ago

16.5.2-canary.2

4 years ago

16.5.2-canary.0

4 years ago

16.5.1-canary.1

4 years ago

16.5.1-canary.3

4 years ago

16.5.1-canary.2

4 years ago

16.5.0

4 years ago

16.3.4-canary.20

4 years ago

16.3.4-canary.19

4 years ago

16.5.1-canary.0

4 years ago

16.3.4-canary.18

4 years ago

16.3.4-canary.17

4 years ago

16.3.4-canary.14

4 years ago

16.3.4-canary.11

4 years ago

16.3.4-canary.12

4 years ago

16.3.4-canary.10

4 years ago

16.3.4-canary.9

4 years ago

16.3.4-canary.8

4 years ago

16.3.4-canary.7

4 years ago

16.3.4-canary.5

4 years ago

16.4.0

4 years ago

16.3.4-canary.4

4 years ago

16.3.4-canary.1

4 years ago

16.3.4-canary.2

4 years ago

16.3.4-canary.3

4 years ago

16.3.4-canary.0

4 years ago

16.3.3

4 years ago

16.3.3-canary.5

4 years ago

16.3.3-canary.4

4 years ago

16.3.3-canary.3

4 years ago

16.3.3-canary.2

4 years ago

16.3.3-canary.1

4 years ago

16.3.2-canary.1

4 years ago

16.3.3-canary.0

4 years ago

16.3.1-canary.1

4 years ago

16.3.2-canary.0

4 years ago

16.3.1-canary.0

4 years ago

16.2.3-canary.12

4 years ago

16.2.3-canary.11

4 years ago

16.2.3-canary.9

4 years ago

16.2.3-canary.10

4 years ago

16.2.3-canary.8

4 years ago

16.2.3-canary.7

4 years ago

16.2.3-canary.6

4 years ago

16.2.3-canary.5

4 years ago

16.2.3-canary.4

4 years ago

16.2.3-canary.2

4 years ago

16.2.3-canary.3

4 years ago

16.2.3-canary.1

4 years ago

16.2.3-canary.0

4 years ago

16.2.2-canary.4

4 years ago

16.2.2-canary.5

4 years ago

16.2.2-canary.3

4 years ago

16.2.2-canary.1

4 years ago

16.2.2-canary.2

4 years ago

16.2.2-canary.0

4 years ago

16.1.1-canary.13

4 years ago

16.1.2-canary.0

4 years ago

16.2.1

4 years ago

16.2.1-canary.0

4 years ago

16.1.1

4 years ago

16.1.1-canary.9

4 years ago

16.1.1-canary.8

4 years ago

16.2.0

4 years ago

16.1.1-canary.10

4 years ago

16.1.1-canary.7

4 years ago

16.1.1-canary.6

4 years ago

16.1.1-canary.5

4 years ago

16.1.1-canary.4

4 years ago

16.0.3-canary.4

4 years ago

16.0.3-canary.5

4 years ago

16.0.3-canary.3

4 years ago

16.0.3-canary.0

4 years ago

16.0.3-canary.2

4 years ago

15.9.1-canary.13

4 years ago

15.9.1-canary.12

4 years ago

16.0.0

4 years ago

15.9.1-canary.0

4 years ago

15.8.1-canary.14

4 years ago

15.9.0

4 years ago

15.8.1-canary.8

4 years ago

15.8.1-canary.6

4 years ago

15.8.0

4 years ago

15.7.1-canary.3

4 years ago

15.7.1-canary.1

4 years ago

15.7.0

4 years ago

15.6.3-canary.3

4 years ago

15.6.3-canary.1

4 years ago

15.6.0

4 years ago

15.5.1-canary.21

4 years ago

15.5.1-canary.14

4 years ago

15.5.1-canary.2

4 years ago

15.4.2

4 years ago

15.3.8

4 years ago

15.3.8-canary.4

4 years ago

15.3.4

4 years ago

15.3.4-canary.3

4 years ago

15.2.1-canary.1

4 years ago

15.2.1

4 years ago

15.1.8

4 years ago

15.1.8-canary.14

4 years ago

15.1.8-canary.6

5 years ago

15.1.7

5 years ago

15.1.7-canary.3

5 years ago

15.1.4-canary.20

5 years ago

15.1.5

5 years ago

15.2.0-alpha.0

5 years ago

15.1.4-canary.16

5 years ago

15.1.4-canary.14

5 years ago

15.1.4

5 years ago

15.0.0

5 years ago

15.0.0-alpha.3

5 years ago

15.0.0-alpha.2

5 years ago

14.6.0

5 years ago

14.5.1-canary.9

5 years ago

15.0.0-alpha.1

5 years ago

15.0.0-alpha.0

5 years ago

14.5.1-canary.1

5 years ago

14.4.2-canary.4

5 years ago

14.5.0

5 years ago

14.4.2-canary.1

5 years ago

14.4.0

5 years ago

14.3.6-canary.2

5 years ago

14.3.0

5 years ago

14.2.1-alpha.0

5 years ago

14.2.1-canary.1

5 years ago

14.2.0

5 years ago

14.2.0-alpha.0

5 years ago

14.1.2-canary.3

5 years ago

14.1.1

5 years ago

14.1.1-canary.0

5 years ago

14.0.0

5 years ago

14.0.0-alpha.6

5 years ago

14.0.0-alpha.5

5 years ago

14.0.0-alpha.4

5 years ago

14.0.0-alpha.3

5 years ago

14.0.0-alpha.2

5 years ago

14.0.0-alpha.1

5 years ago

14.0.0-alpha.0

5 years ago

13.13.4-canary.0

5 years ago

13.12.2

5 years ago

13.12.0

5 years ago

13.11.1-canary.9

5 years ago

13.11.1-canary.3

5 years ago

13.11.0

5 years ago

13.10.1-canary.9

5 years ago

13.10.1-canary.5

5 years ago

13.10.1-canary.2

5 years ago

13.10.0

5 years ago

13.9.2-canary.23

5 years ago

13.9.2-canary.20

5 years ago

13.9.2-canary.18

5 years ago

13.9.2-canary.5

5 years ago

13.9.0

5 years ago

13.8.2-canary.17

5 years ago

13.8.2-canary.14

5 years ago

13.8.2-canary.13

5 years ago

13.8.2-canary.11

5 years ago

13.7.0

5 years ago

13.6.1-canary.6

5 years ago

13.4.2

5 years ago

13.4.2-canary.3

5 years ago

13.4.0

5 years ago

13.3.10-canary.1

5 years ago

13.3.6

5 years ago

13.3.6-canary.0

5 years ago

13.3.5

5 years ago

13.3.1

5 years ago

13.3.1-canary.0

5 years ago

13.1.1-canary.3

5 years ago

13.2.0

5 years ago

13.1.1-canary.0

5 years ago

13.1.0

5 years ago

13.0.3-canary.0

5 years ago

13.0.0

5 years ago

12.2.3-canary.4

5 years ago

12.2.3-canary.0

5 years ago

12.0.0

5 years ago

11.4.0

5 years ago

11.3.1-canary.3

5 years ago

11.2.0

5 years ago

11.1.0

5 years ago

11.0.0

5 years ago

10.0.0

5 years ago

9.0.2-canary.2

5 years ago

9.0.0

5 years ago

8.0.0

5 years ago

7.3.5-canary.4

5 years ago

7.3.5-canary.0

5 years ago

7.3.3

5 years ago

7.3.3-canary.0

5 years ago

7.3.1

5 years ago

7.3.1-canary.0

5 years ago

7.1.0

5 years ago

7.0.1-canary.0

5 years ago

7.0.0

5 years ago

6.0.1-canary.7

5 years ago

6.0.1

5 years ago

6.0.1-canary.1

5 years ago

6.0.0

5 years ago

5.1.2-canary.1

5 years ago

5.1.2-canary.0

5 years ago

5.1.0

5 years ago

5.0.4-canary.3

5 years ago

5.0.2

5 years ago

5.0.1

5 years ago

5.0.0

5 years ago

4.4.0

5 years ago

4.3.0

5 years ago

4.1.0

5 years ago

4.0.0

5 years ago

3.0.0

5 years ago

2.4.0

5 years ago

2.1.1

5 years ago

2.0.0

5 years ago

1.0.0-rc.3

5 years ago

1.0.1-beta.0

5 years ago

1.0.0-rc.2

5 years ago

1.0.0-rc.1

5 years ago

1.0.0-rc.0

6 years ago

1.0.0-beta.36

6 years ago

1.0.0-beta.35

6 years ago

1.0.0-beta.34

6 years ago

1.0.0-beta.33

6 years ago

1.0.0-beta.32

6 years ago

1.0.0-beta.31

6 years ago

1.0.0-beta.30

6 years ago

1.0.0-beta.29

6 years ago

1.0.0-beta.28

6 years ago

1.0.0-beta.27

6 years ago

1.0.0-beta.26

6 years ago

1.0.0-beta.25

6 years ago

1.0.0-beta.24

6 years ago

1.0.0-beta.23

6 years ago

1.0.0-beta.17

6 years ago

1.0.0-beta.15

6 years ago

1.0.0-beta.14

6 years ago

1.0.0-beta.13

6 years ago

1.0.0-beta.12

6 years ago

1.0.0-beta.11

6 years ago

1.0.0-beta.10

6 years ago

1.0.0-beta.9

6 years ago

1.0.0-beta.8

6 years ago

1.0.0-beta.7

6 years ago

1.0.0-beta.6

6 years ago

1.0.0-beta.5

6 years ago

1.0.0-beta.4

6 years ago

1.0.0-beta.3

6 years ago

1.0.0-beta.2

6 years ago

1.0.0-beta.1

6 years ago

1.0.0-beta.0

6 years ago