2.1.0 • Published 5 years ago

vo-storage-control v2.1.0

Weekly downloads
1
License
MIT
Repository
github
Last release
5 years ago

vo-storage-control

Storage control

Установка:

npm i vo-storage-control

Настройка файла configureStore.js:

import { createStore, combineReducers, applyMiddleware } from 'redux';
import thunk from 'redux-thunk';

import { middleware, reducer } from 'vo-storage-control';

const middlewareAll = [
  middleware('moduleName'),
  thunk,
];

const module = {
  name: 'moduleName',
  models: [
    {
      name: 'modelName',
      events: ['filter', 'data', {name: 'DefaultName'}],
    },
  ],
};

export default createStore(combineReducers({
  modelName: reducer(module),
}), applyMiddleware(...middlewareAll));

Настройка слоя redux:

import { connectAdvanced, shallowEqual } from 'react-redux';
import { bindActionCreators } from 'redux';
import isNull from 'lodash/isNull';
import { actions } from 'vo-storage-control';

// Описание ниже
import service from '../services/servicName';

import MyReactComponent from './myReactComponent';// Любой компонент React

export default connectAdvanced((dispatch) => {
  let result = {};

  const worker = actions('moduleName', service);
  const bindAction = bindActionCreators({ worker }, dispatch);

  return (nextState, nextOwnProps) => {
    const modelItems = (data) => {
      bindAction.worker('modelName_data', data, null);
      bindAction.worker('modelName_filter', data, null);
    };

    // Здесь можно определить props для компонента
    const items = isNull(nextState['moduleName']['modelName'].data.result)
      ? null
      : nextState['moduleName']['modelName'].data.result.items;

    const nextResult = {
      ...nextOwnProps,
      items,
      models: {
        modelItems,
      },
    };
    if (!shallowEqual(result, nextResult)) {
      result = nextResult;
    }

    return result;
  };
})(MyReactComponent);

Файл service:

export default function actionService(action, data, options) {
  switch (toUpper(action)) {
    case 'MODELNAME_HEADER':
      return {
        status: 'error',
        result: null,
        msg: 'Ошибка'
      };
    case 'MODELNAME_DATA':
      return new Promise((resolve, reject) => {
        resolve({
          status: 'ok',
          result: 'test',
        });
      });
    default:
      return {
        status: 'error',
        result: null,
        msg: `Action service: ${action} не определен`
      };
  }
}
2.1.0

5 years ago

2.0.1

5 years ago

2.0.0

5 years ago

1.0.2

5 years ago

1.0.3

5 years ago

1.0.1

5 years ago

1.0.0

5 years ago