3.3.1 • Published 2 years ago

vivy-api v3.3.1

Weekly downloads
-
License
MIT
Repository
github
Last release
2 years ago

vivy-api

NPM Version License

A Vivy plugin which extend Vivy model to request api more easily.

Docs

Installation

Using npm:

$ npm install vivy vivy-api

Examples

Examples in repository

$ cd ./examples/[EXAMPLE_NAME]
$ npm run start

Example names:

Complete and real project example

Documentation

Basic usage

index.js

import React from 'react';
import {render} from 'react-dom';
import {Provider} from 'react-vivy';

// Import Vivy
import Vivy, {registerModel} from 'vivy';

// Import Vivy api plugin
import VivyApi from 'vivy-api';

// Import sync component and model
import App from 'path_to_app_component';
import app from 'path_to_app_model';

// Create vivy
const vivy = Vivy();

// Apply api plugin
vivy.use(VivyApi({

    // Customized api status model name space ( default is "apiStatus" )
    // apiStatusModelNameSpace: 'customizedApiStatus',

    // Customized check response status callback
    // to tell whether response is successful
    checkResponseStatus: response => response?.data?.code === 2000,

    // A middleware like callback to handle the success response
    successResponseHandler: ({dispatch, getState}) => next => action => {
        // Do something when request successfully.
    },

    // A middleware like callback to handle the failure response
    failureResponseHandler: ({dispatch, getState}) => next => action => {
        // Do something when request failure.
    }

}));

// Create store after configuration
const store = vivy.createStore();

// Register model to store
registerModel(store, app);

render(
    <Provider store={store}>
        <App/>
    </Provider>,
    document.getElementById('app-container')
);

App.js

import React from 'react';
import {useModelActions} from 'react-vivy';

const App = ({
    getDataStatus, getData
}) => {

    // Get api from model using hook "useModelActions".
    const {getData} = useModelActions('app');

    // Get loading using "isRequest".
    const loading = getData.isRequest();

    // Or you can get "getData" api status using hook "useIsApiRequest".
    // import {useIsApiRequest} from 'vivy-api';
    // const loading = useIsApiRequest('app/getData');

    return (
        <button disabled={loading}
                onClick={getData}>
            {
                loading ?
                    'Loading'
                    :
                    'Get data'
            }
        </button>
    );

};

export default App;

app.js

export default {
    nameSpace: 'app',
    state: null,
    apis: {

        // Call api to get data
        getData: () => (dispatchApi, dispatch, getState) => {
            dispatchApi({
                api: YOUR_GET_DATA_API,
                params: {
                    // Api params
                },
                successCallback: () => {
                    // Do something when request successfully.
                },
                failureCallback: () => {
                    // Do something when request failure.
                }
            });
        }

    },
    reducers: {

        // These three reducers will be dispatched automatically after response.
        getDataRequest: (state, payload) => {
            return null;
        },
        getDataSuccess: (state, {responseData}) => {
            return responseData;
        },
        getDataFailure: (state, payload) => {
            return null;
        }

    }
};

Model api methods

getStatus

import {useModelActions} from 'react-vivy';

const {getData} = useModelActions('app');

// "REQUEST" / "SUCCESS" / "FAILURE"
const apiStatus = getData.getStatus();

isRequest

import {useModelActions} from 'react-vivy';

const {getData} = useModelActions('app');
const isGettingData = getData.isRequest();

isSuccess

import {useModelActions} from 'react-vivy';

const {getData} = useModelActions('app');
const isGetDataSuccess = getData.isSuccess();

isFailure

import {useModelActions} from 'react-vivy';

const {getData} = useModelActions('app');
const isGetDataFailure = getData.isFailure();

Hooks

useStatus

import {useModelActions} from 'react-vivy';
import {useStatus} from 'vivy-api';

const {getData} = useModelActions('app');
const status = useStatus(getData);

useIsRequest

import {useModelActions} from 'react-vivy';
import {useIsRequest} from 'vivy-api';

const {getData} = useModelActions('app');
const isRequest = useIsRequest(getData);

useIsSuccess

import {useModelActions} from 'react-vivy';
import {useIsSuccess} from 'vivy-api';

const {getData} = useModelActions('app');
const isSuccess = useIsSuccess(getData);

useIsFailure

import {useModelActions} from 'react-vivy';
import {useIsFailure} from 'vivy-api';

const {getData} = useModelActions('app');
const isFailure = useIsFailure(getData);

useApiStatus

  1. Get specific api status by model name sapce and api name.
import {useApiStatus} from 'vivy-api';

const apiStatus = useApiStatus('model_name_space/api_name');
  1. Get all apis status in a model by model name sapce and api name.
import {useApiStatus} from 'vivy-api';

const apiStatuses = useApiStatus('model_name_space');
  1. Get specific api status by callback function.
import {useApiStatus} from 'vivy-api';

const apiStatus = useApiStatus(state => state.model_name_space.api_name);
  1. Get all apis status in a model by callback function.
import {useApiStatus} from 'vivy-api';

const apiStatuses = useApiStatus(state => state.model_name_space);

useIsApiRequest

import {useIsApiRequest} from 'vivy-api';

const isApiRequest = useIsApiRequest('model_name_space/api_name');

useIsApiSuccess

import {useIsApiSuccess} from 'vivy-api';

const isApiSuccess = useIsApiSuccess('model_name_space/api_name');

useIsApiFailure

import {useIsApiFailure} from 'vivy-api';

const isApiFailure = useIsApiFailure('model_name_space/api_name');
3.0.0-alpha.1

2 years ago

3.0.0-alpha.0

2 years ago

3.0.0-alpha.3

2 years ago

3.0.0-alpha.2

2 years ago

3.0.0-alpha.4

2 years ago

3.2.2

2 years ago

3.0.4

2 years ago

2.3.0-alpha.2

2 years ago

3.2.1

2 years ago

3.0.3

2 years ago

3.2.0

2 years ago

3.0.2

2 years ago

2.3.0-alpha.0

2 years ago

3.0.1

2 years ago

2.3.0-alpha.1

2 years ago

3.3.0-alpha.2

2 years ago

3.3.0-alpha.1

2 years ago

3.0.7

2 years ago

3.3.0-alpha.0

2 years ago

3.0.6

2 years ago

3.2.3

2 years ago

3.0.5

2 years ago

3.0.0

2 years ago

3.3.0-alpha.3

2 years ago

2.3.0

2 years ago

3.3.1

2 years ago

3.3.0

2 years ago

3.1.0

2 years ago

2.2.1

3 years ago

2.2.0

3 years ago

2.2.3

3 years ago

2.2.2

3 years ago

2.0.4

3 years ago

2.2.4

3 years ago

2.1.5-alpha.0

3 years ago

2.1.2

3 years ago

2.1.1

3 years ago

2.1.4

3 years ago

2.1.3

3 years ago

2.1.6

3 years ago

2.1.5

3 years ago

2.1.0

3 years ago

2.0.3

3 years ago

1.0.2

4 years ago

1.0.1

4 years ago

1.0.0

4 years ago

2.0.2

3 years ago

2.0.0-alpha.0

3 years ago

2.0.0-alpha.1

3 years ago

2.0.0-alpha.2

3 years ago

2.0.1

3 years ago

2.0.0

3 years ago

0.3.6

4 years ago

0.3.5

4 years ago

0.3.4

4 years ago

0.3.0

4 years ago

0.3.2

4 years ago

0.2.3

4 years ago

0.3.1

4 years ago

0.2.2

4 years ago

0.3.3

4 years ago

0.2.4

4 years ago

0.1.10

4 years ago

0.1.11

4 years ago

0.1.12

4 years ago

0.2.1

4 years ago

0.2.0

4 years ago

0.1.8

4 years ago

0.1.7

4 years ago

0.1.9

4 years ago

0.1.6

4 years ago

0.1.5

4 years ago

0.1.0

4 years ago

0.1.2

4 years ago

0.1.1

4 years ago

0.1.4

4 years ago

0.1.3

4 years ago

0.0.5

4 years ago

0.0.4

4 years ago

0.0.3

4 years ago

0.0.2

4 years ago

0.0.1

4 years ago