├── .eslintignore
├── .babelrc
├── .travis.yml
├── src
├── server
│ ├── ErrorHandle.js
│ ├── index.js
│ ├── httpWrapper.js
│ ├── Logger.js
│ └── util
│ │ └── uploadFiles.js
├── InitialState.js
├── Document
│ ├── saga.js
│ ├── index.js
│ ├── store.js
│ ├── selectors.js
│ ├── workers
│ │ ├── deleteDoc.js
│ │ ├── fetchDoc.js
│ │ ├── postDoc.js
│ │ └── putDoc.js
│ ├── actions.js
│ ├── reducerHandler.js
│ └── prop-types.js
├── actions.js
├── selectors.js
├── Loader
│ ├── store.js
│ ├── prop-types.js
│ ├── index.js
│ └── selectors.js
├── Collection
│ ├── saga.js
│ ├── workers
│ │ ├── refreshCollection.js
│ │ ├── deleteDoc.js
│ │ ├── postDoc.js
│ │ ├── putDoc.js
│ │ └── fetchCollection.js
│ ├── store.js
│ ├── selectors.js
│ ├── actions.js
│ ├── reducerHandler.js
│ ├── prop-types.js
│ └── collectionActions.js
├── CloudCode
│ ├── store.js
│ ├── actions.js
│ ├── selectors.js
│ ├── cloudCodeActions.js
│ ├── saga.js
│ ├── prop-types.js
│ ├── reducerHandler.js
│ └── index.js
├── saga.js
├── reducer.js
├── types.js
└── index.js
├── .eslintrc
├── .editorconfig
├── .npmignore
├── dist
├── server
│ ├── ErrorHandle.js
│ ├── index.js
│ ├── Logger.js
│ ├── httpWrapper.js
│ └── util
│ │ └── uploadFiles.js
├── InitialState.js
├── CloudCode
│ ├── actionsClass.js
│ ├── store.js
│ ├── actions.js
│ ├── selectors.js
│ ├── cloudCodeActions.js
│ ├── prop-types.js
│ ├── reducerHandler.js
│ └── saga.js
├── Loader
│ ├── store.js
│ ├── prop-types.js
│ ├── selectors.js
│ └── index.js
├── Document
│ ├── saga.js
│ ├── store.js
│ ├── selectors.js
│ ├── index.js
│ ├── reducerHandler.js
│ ├── workers
│ │ ├── deleteDoc.js
│ │ ├── fetchDoc.js
│ │ └── postDoc.js
│ ├── actions.js
│ └── prop-types.js
├── actions.js
├── selectors.js
├── Collection
│ ├── saga.js
│ ├── store.js
│ ├── workers
│ │ ├── refreshCollection.js
│ │ ├── deleteDoc.js
│ │ ├── fetchCollection.js
│ │ ├── postDoc.js
│ │ └── putDoc.js
│ ├── selectors.js
│ ├── reducerHandler.js
│ ├── actions.js
│ └── prop-types.js
├── types.js
├── reducer.js
└── saga.js
├── .gitignore
├── LICENSE
└── package.json
/.eslintignore:
--------------------------------------------------------------------------------
1 | test
2 |
--------------------------------------------------------------------------------
/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": ["es2015", "react"],
3 | "plugins": ["transform-regenerator"]
4 | }
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: node_js
2 | node_js:
3 | - '8'
4 | - '6'
5 | script:
6 | - npm run test
7 | - npm run build
8 | branches:
9 | only:
10 | - master
11 |
--------------------------------------------------------------------------------
/src/server/ErrorHandle.js:
--------------------------------------------------------------------------------
1 | import {handleError} from './api'
2 |
3 | export default function errorHandle(error, params) {
4 | if(handleError){
5 | handleError(error, params)
6 | }
7 | };
--------------------------------------------------------------------------------
/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "parser": "babel-eslint",
3 | "extends": "airbnb",
4 | "env": {
5 | "mocha": true
6 | },
7 | "rules": {
8 | "comma-dangle": ["error", "only-multiline"]
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/src/InitialState.js:
--------------------------------------------------------------------------------
1 | const { Record, Map } = require('immutable');
2 |
3 | const InitialState = Record({
4 | collections: Map(),
5 | cloudCodes: Map(),
6 | documents: Map()
7 | });
8 |
9 | export default InitialState;
10 |
--------------------------------------------------------------------------------
/src/Document/saga.js:
--------------------------------------------------------------------------------
1 | import fetchDoc from './workers/fetchDoc';
2 | import putDoc from './workers/putDoc';
3 | import deleteDoc from './workers/deleteDoc';
4 | import postDoc from './workers/postDoc';
5 |
6 | export { fetchDoc, putDoc, deleteDoc, postDoc };
7 |
--------------------------------------------------------------------------------
/src/actions.js:
--------------------------------------------------------------------------------
1 | import * as CloudCodeActions from './CloudCode/actions';
2 | import * as CollectionActions from './Collection/actions';
3 | import * as DocumentActions from './Document/actions';
4 |
5 | export { CloudCodeActions, CollectionActions, DocumentActions };
6 |
--------------------------------------------------------------------------------
/src/server/index.js:
--------------------------------------------------------------------------------
1 | import api from './api';
2 | import httpRequest from './httpWrapper';
3 | import Logger from './Logger';
4 | import uploadFilesFromData from './util/uploadFiles';
5 |
6 | export {
7 | api,
8 | Logger,
9 | httpRequest,
10 | uploadFilesFromData
11 | }
--------------------------------------------------------------------------------
/src/selectors.js:
--------------------------------------------------------------------------------
1 | import * as cloudCodeSelectors from './CloudCode/selectors';
2 | import * as collectionSelectors from './Collection/selectors';
3 | import * as documentSelectors from './Document/selectors';
4 |
5 | export { cloudCodeSelectors, collectionSelectors, documentSelectors };
6 |
--------------------------------------------------------------------------------
/src/Loader/store.js:
--------------------------------------------------------------------------------
1 | import { connect } from 'react-redux';
2 | import { showLoader } from './selectors';
3 |
4 | function mapStateToProps(state, props) {
5 | return {
6 | showLoader: showLoader(state)
7 | };
8 | }
9 |
10 | export default comp => connect(mapStateToProps, null)(comp);
--------------------------------------------------------------------------------
/src/Collection/saga.js:
--------------------------------------------------------------------------------
1 | import fetchCollection from './workers/fetchCollection';
2 | import refreshCollection from './workers/refreshCollection';
3 | import deleteDoc from './workers/deleteDoc';
4 | import putDoc from './workers/putDoc';
5 | import postDoc from './workers/postDoc';
6 |
7 | export { fetchCollection, deleteDoc, putDoc, postDoc, refreshCollection };
8 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | # EditorConfig helps developers define and maintain
2 | # consistent coding styles between different editors and IDEs.
3 |
4 | root = true
5 |
6 | [*]
7 | end_of_line = lf
8 | charset = utf-8
9 | trim_trailing_whitespace = true
10 | insert_final_newline = true
11 | indent_style = space
12 | indent_size = 2
13 |
14 | [*.md]
15 | trim_trailing_whitespace = false
16 |
--------------------------------------------------------------------------------
/.npmignore:
--------------------------------------------------------------------------------
1 | *.log
2 | npm-debug.log*
3 |
4 | # Coverage directory used by tools like istanbul
5 | coverage
6 | .nyc_output
7 |
8 | # Dependency directories
9 | node_modules
10 |
11 | # Lib
12 | lib
13 |
14 | # npm package lock
15 | package-lock.json
16 | yarn.lock
17 |
18 | # project files
19 | src
20 | test
21 | examples
22 | CHANGELOG.md
23 | .travis.yml
24 | .editorconfig
25 | .eslintignore
26 | .eslintrc
27 | .babelrc
28 | .gitignore
29 |
--------------------------------------------------------------------------------
/src/Loader/prop-types.js:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 |
3 | export const defaultProps = {
4 | };
5 |
6 | export const propTypes = {
7 | render: PropTypes.func.isRequired,
8 | /**
9 | * render:
10 | *
13 | * all the props from FetchDocument will wrap inside props.fetch
14 | */
15 | component: PropTypes.element
16 | /*
17 | * What you going to get Fetch:
18 | * showLoader : boolean
19 | */
20 | };
21 |
--------------------------------------------------------------------------------
/src/Loader/index.js:
--------------------------------------------------------------------------------
1 | import React, { createElement } from 'react';
2 | import { propTypes, defaultProps } from './prop-types';
3 | import connect from './store';
4 |
5 | class ShowLoader extends React.Component {
6 |
7 | render() {
8 | const { showLoader, component} = this.props;
9 | if(component){
10 | return createElement(component, {showLoader})
11 | }
12 | return this.props.render(showLoader);
13 | }
14 | }
15 |
16 | export default connect(ShowLoader);
17 |
18 | ShowLoader.propTypes = propTypes;
19 |
20 | ShowLoader.defaultProps = defaultProps;
21 |
--------------------------------------------------------------------------------
/src/server/httpWrapper.js:
--------------------------------------------------------------------------------
1 | const regeneratorRuntime = require('regenerator-runtime');
2 | import {call} from 'redux-saga/effects'
3 | import ErrorHandle from './ErrorHandle'
4 |
5 | export default function* httpRequest (...params) {
6 | try {
7 | const res = yield makeRequest(...params);
8 | return res
9 | } catch (error) {
10 | error.error = true;
11 | yield ErrorHandle(error);
12 | return error
13 | }
14 | }
15 |
16 | function* makeRequest(...params) {
17 | return yield call(...params);
18 | };
19 |
20 |
21 | /* eslint no-unused-vars: "off" */
22 |
--------------------------------------------------------------------------------
/src/Document/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import PropsTypes from 'prop-types';
3 | import { createUniqueId } from '../helpers';
4 | import Document from './Document';
5 |
6 | export default class FetchDocumentWithUniqueId extends React.PureComponent {
7 | constructor(props) {
8 | super(props);
9 | this.uniqueId = this.props.uniqueId || createUniqueId();
10 | }
11 | render() {
12 | return ;
13 | }
14 | }
15 |
16 | FetchDocumentWithUniqueId.propTypes = {
17 | uniqueId: PropsTypes.string
18 | };
19 |
--------------------------------------------------------------------------------
/src/Loader/selectors.js:
--------------------------------------------------------------------------------
1 | import { createSelector } from 'reselect';
2 | import { Map } from 'immutable';
3 | import some from 'lodash/some'
4 | const loading = { 'loading': true };
5 |
6 | const getState = state => state.parse;
7 | // -- Get specific collections
8 | export const showLoader = createSelector( getState, state => {
9 | let status = false
10 | if(state && state.collections){
11 | let toCheck = state.collections.toJS()
12 | status = some(toCheck, loading);
13 | if(!status){
14 | status = some(state.cloudCodes.toJS(), loading);
15 | }
16 | if(!status){
17 | status = some(state.documents.toJS(), loading);
18 | }
19 | }
20 | return status
21 | });
--------------------------------------------------------------------------------
/dist/server/ErrorHandle.js:
--------------------------------------------------------------------------------
1 | (function (global, factory) {
2 | if (typeof define === "function" && define.amd) {
3 | define(['exports', './api'], factory);
4 | } else if (typeof exports !== "undefined") {
5 | factory(exports, require('./api'));
6 | } else {
7 | var mod = {
8 | exports: {}
9 | };
10 | factory(mod.exports, global.api);
11 | global.ErrorHandle = mod.exports;
12 | }
13 | })(this, function (exports, _api) {
14 | 'use strict';
15 |
16 | Object.defineProperty(exports, "__esModule", {
17 | value: true
18 | });
19 | exports.default = errorHandle;
20 | function errorHandle(error, params) {
21 | if (_api.handleError) {
22 | (0, _api.handleError)(error, params);
23 | }
24 | };
25 | });
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 |
6 | # Runtime data
7 | pids
8 | *.pid
9 | *.seed
10 |
11 | # Directory for instrumented libs generated by jscoverage/JSCover
12 | lib-cov
13 |
14 | # Coverage directory used by tools like istanbul
15 | coverage
16 |
17 | # nyc test coverage
18 | .nyc_output
19 |
20 | # Compiled binary addons (http://nodejs.org/api/addons.html)
21 | build/Release
22 |
23 | # Dependency directories
24 | node_modules
25 | jspm_packages
26 |
27 | # Optional npm cache directory
28 | .npm
29 |
30 | # Optional REPL history
31 | .node_repl_history
32 |
33 | # Editors
34 | .idea
35 |
36 | # Lib
37 | lib
38 |
39 | # npm package lock
40 | package-lock.json
41 | yarn.lock
42 |
43 | others
44 | .DS_Store
--------------------------------------------------------------------------------
/dist/InitialState.js:
--------------------------------------------------------------------------------
1 | (function (global, factory) {
2 | if (typeof define === "function" && define.amd) {
3 | define(['exports', 'immutable'], factory);
4 | } else if (typeof exports !== "undefined") {
5 | factory(exports, require('immutable'));
6 | } else {
7 | var mod = {
8 | exports: {}
9 | };
10 | factory(mod.exports, global.immutable);
11 | global.InitialState = mod.exports;
12 | }
13 | })(this, function (exports, _require) {
14 | 'use strict';
15 |
16 | Object.defineProperty(exports, "__esModule", {
17 | value: true
18 | });
19 | var Record = _require.Record,
20 | Map = _require.Map;
21 |
22 |
23 | var InitialState = Record({
24 | collections: Map(),
25 | cloudCodes: Map(),
26 | documents: Map()
27 | });
28 |
29 | exports.default = InitialState;
30 | });
--------------------------------------------------------------------------------
/dist/CloudCode/actionsClass.js:
--------------------------------------------------------------------------------
1 | (function (global, factory) {
2 | if (typeof define === "function" && define.amd) {
3 | define(["exports"], factory);
4 | } else if (typeof exports !== "undefined") {
5 | factory(exports);
6 | } else {
7 | var mod = {
8 | exports: {}
9 | };
10 | factory(mod.exports);
11 | global.actionsClass = mod.exports;
12 | }
13 | })(this, function (exports) {
14 | "use strict";
15 |
16 | (function (global, factory) {
17 | if (typeof define === "function" && define.amd) {
18 | define([], factory);
19 | } else if (typeof exports !== "undefined") {
20 | factory();
21 | } else {
22 | var mod = {
23 | exports: {}
24 | };
25 | factory();
26 | global.actionsClass = mod.exports;
27 | }
28 | })(undefined, function () {
29 | "use strict";
30 | });
31 | });
--------------------------------------------------------------------------------
/src/Collection/workers/refreshCollection.js:
--------------------------------------------------------------------------------
1 | import regeneratorRuntime from 'regenerator-runtime';
2 | import { put, select } from 'redux-saga/effects';
3 | import types from '../../types';
4 | import { fetchData } from '../actions';
5 | import { getInfo } from '../selectors';
6 |
7 | const START = types.FETCH_START;
8 | const FAILED = types.FETCH_FAILED;
9 | const FAILED_NETWORK = types.FETCH_FAILED_NETWORK;
10 | const FINISHED = types.FETCH_FINISHED;
11 |
12 | export default function* refreshCollection(action) {
13 | const { targetName, dispatchId } = action.payload;
14 | const _dispatchId = dispatchId || '';
15 | const info = yield select(state => getInfo(state, targetName))
16 | if(info && info.schemaName){
17 | yield put(fetchData(Object.assign({},info, {targetName, dispatchId: _dispatchId})));
18 | }
19 | }
20 | /* eslint no-unused-vars: "off" */
21 |
--------------------------------------------------------------------------------
/src/CloudCode/store.js:
--------------------------------------------------------------------------------
1 | import { connect } from 'react-redux';
2 | import { bindActionCreators } from 'redux';
3 | import { fetchData, cleanData } from './actions';
4 | import { getData, getStatus, getInfo, getError, getDispatchId } from './selectors';
5 |
6 | function mapStateToProps(state, props) {
7 | const keyForData = props.targetName || props.functionName;
8 | return {
9 | fetchData: getData(state, keyForData),
10 | fetchStatus: getStatus(state, keyForData),
11 | fetchInfo: getInfo(state, keyForData),
12 | fetchError: getError(state, keyForData),
13 | fetchDispatchId: getDispatchId(state, keyForData)
14 | };
15 | }
16 |
17 | function mapDispatchToProps(dispatch) {
18 | return {
19 | fetchActions: bindActionCreators({ fetchData, cleanData }, dispatch)
20 | };
21 | }
22 |
23 | export default comp => connect(mapStateToProps, mapDispatchToProps)(comp);
--------------------------------------------------------------------------------
/dist/Loader/store.js:
--------------------------------------------------------------------------------
1 | (function (global, factory) {
2 | if (typeof define === "function" && define.amd) {
3 | define(['exports', 'react-redux', './selectors'], factory);
4 | } else if (typeof exports !== "undefined") {
5 | factory(exports, require('react-redux'), require('./selectors'));
6 | } else {
7 | var mod = {
8 | exports: {}
9 | };
10 | factory(mod.exports, global.reactRedux, global.selectors);
11 | global.store = mod.exports;
12 | }
13 | })(this, function (exports, _reactRedux, _selectors) {
14 | 'use strict';
15 |
16 | Object.defineProperty(exports, "__esModule", {
17 | value: true
18 | });
19 |
20 |
21 | function mapStateToProps(state, props) {
22 | return {
23 | showLoader: (0, _selectors.showLoader)(state)
24 | };
25 | }
26 |
27 | exports.default = function (comp) {
28 | return (0, _reactRedux.connect)(mapStateToProps, null)(comp);
29 | };
30 | });
--------------------------------------------------------------------------------
/src/server/Logger.js:
--------------------------------------------------------------------------------
1 | let _onSuccess
2 | let _onError
3 | /**
4 | * setLoggerHandlers
5 | * @param {*} payload object
6 | * @param {Function} payload.onSuccess
7 | * @param {Function} payload.onError
8 | */
9 | export const setLoggerHandlers = function(payload){
10 | if(payload && payload.onSuccess){
11 | _onSuccess = payload.onSuccess
12 | }
13 | if(payload && payload.onError){
14 | _onError = payload.onError
15 | }
16 | }
17 |
18 |
19 | const onSuccess = function(type, action, status, res){
20 | if(_onSuccess){
21 | _onSuccess(action, status)
22 | }
23 | if(action.payload.onSuccess){
24 | action.payload.onSuccess({type, action, status, res})
25 | }
26 | }
27 | const onError = function(type, action, status, res){
28 | if(_onError){
29 | _onError(action, status)
30 | }
31 | if(action.payload.onError){
32 | action.onError({type, action, status, res})
33 | }
34 | }
35 |
36 | const Logger = {
37 | onSuccess,
38 | onError
39 | }
40 | export default Logger;
--------------------------------------------------------------------------------
/src/Collection/store.js:
--------------------------------------------------------------------------------
1 | import { connect } from 'react-redux';
2 | import { bindActionCreators } from 'redux';
3 | import { fetchData, deleteDoc, putDoc, postDoc, cleanData } from './actions';
4 | import { getData, getStatus, getInfo, getError, getDispatchId, getCount, getBoomerang } from './selectors';
5 |
6 | function mapStateToProps(state, props) {
7 | const keyForData = props.targetName || props.schemaName;
8 | return {
9 | fetchData: getData(state, keyForData),
10 | fetchStatus: getStatus(state, keyForData),
11 | fetchInfo: getInfo(state, keyForData),
12 | fetchError: getError(state, keyForData),
13 | fetchCount: getCount(state, keyForData),
14 | fetchDispatchId: getDispatchId(state, keyForData),
15 | fetchBoomerang: getBoomerang(state, keyForData)
16 | };
17 | }
18 |
19 | function mapDispatchToProps(dispatch) {
20 | return {
21 | fetchActions: bindActionCreators(
22 | {
23 | fetchData,
24 | deleteDoc,
25 | putDoc,
26 | postDoc,
27 | cleanData
28 | },
29 | dispatch
30 | )
31 | };
32 | }
33 |
34 | export default comp => connect(mapStateToProps, mapDispatchToProps)(comp);
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2018 Dineshkumar Pandiyan
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/src/CloudCode/actions.js:
--------------------------------------------------------------------------------
1 | import types from '../types';
2 |
3 | const {
4 | FETCH_CLOUD_CODE,
5 | SET_CLOUD_CODE,
6 | CLEAN_CLOUD_CODE,
7 | CLEAN_ALL_CLOUD_CODE
8 | } = types;
9 |
10 | /**
11 | * fetchData
12 | * get data from parse server cloud code by function and find the data
13 | * on redux store by targetName
14 | * @param {object} payload {functionName, targetName, params, digToData, dataHandler, dispatchId}
15 | */
16 | export const fetchData = payload => ({
17 | type: FETCH_CLOUD_CODE,
18 | payload
19 | });
20 |
21 | /**
22 | * setOnStore
23 | * set and update data on store.parse.clodeCodes by targetName
24 | * @param {object} payload {targetName, status, data, info, error, dispatchId}
25 | */
26 | export const setOnStore = payload => ({
27 | type: SET_CLOUD_CODE,
28 | payload
29 | });
30 |
31 | /**
32 | * cleanData
33 | * clean data from store by target name
34 | * @param {object} payload
35 | * @param {string} payload.targetName
36 | */
37 | export const cleanData = payload => ({
38 | type: CLEAN_CLOUD_CODE,
39 | payload
40 | });
41 |
42 | /**
43 | * cleanCloudCode
44 | * clean all data inside cloudCode
45 | */
46 | export const cleanCloudCode = () => ({
47 | type: CLEAN_ALL_CLOUD_CODE
48 | });
49 |
--------------------------------------------------------------------------------
/src/Document/store.js:
--------------------------------------------------------------------------------
1 | import { connect } from 'react-redux';
2 | import { bindActionCreators } from 'redux';
3 | import { getData, getStatus, getInfo, getError, getDispatchId, getBoomerang } from './selectors';
4 | import {
5 | fetchData,
6 | deleteDoc,
7 | putDoc,
8 | postDoc,
9 | cleanData,
10 | updateField,
11 | updateFields
12 | } from './actions';
13 |
14 | function mapStateToProps(state, props) {
15 | const { targetName, objectId, uniqueId } = props;
16 | const target = targetName || (objectId || uniqueId);
17 | return {
18 | fetchData: getData(state, target),
19 | fetchStatus: getStatus(state, target),
20 | fetchInfo: getInfo(state, target),
21 | fetchError: getError(state, target),
22 | fetchDispatchId: getDispatchId(state, target),
23 | fetchBoomerang: getBoomerang(state, target),
24 |
25 | };
26 | }
27 |
28 | function mapDispatchToProps(dispatch) {
29 | return {
30 | fetchActions: bindActionCreators(
31 | {
32 | fetchData,
33 | deleteDoc,
34 | putDoc,
35 | postDoc,
36 | cleanData,
37 | updateField,
38 | updateFields
39 | },
40 | dispatch
41 | )
42 | };
43 | }
44 |
45 | export default comp => connect(mapStateToProps, mapDispatchToProps)(comp);
--------------------------------------------------------------------------------
/dist/Loader/prop-types.js:
--------------------------------------------------------------------------------
1 | (function (global, factory) {
2 | if (typeof define === "function" && define.amd) {
3 | define(['exports', 'prop-types'], factory);
4 | } else if (typeof exports !== "undefined") {
5 | factory(exports, require('prop-types'));
6 | } else {
7 | var mod = {
8 | exports: {}
9 | };
10 | factory(mod.exports, global.propTypes);
11 | global.propTypes = mod.exports;
12 | }
13 | })(this, function (exports, _propTypes) {
14 | 'use strict';
15 |
16 | Object.defineProperty(exports, "__esModule", {
17 | value: true
18 | });
19 | exports.propTypes = exports.defaultProps = undefined;
20 |
21 | var _propTypes2 = _interopRequireDefault(_propTypes);
22 |
23 | function _interopRequireDefault(obj) {
24 | return obj && obj.__esModule ? obj : {
25 | default: obj
26 | };
27 | }
28 |
29 | var defaultProps = exports.defaultProps = {};
30 |
31 | var propTypes = exports.propTypes = {
32 | render: _propTypes2.default.func.isRequired,
33 | /**
34 | * render:
35 | *
38 | * all the props from FetchDocument will wrap inside props.fetch
39 | */
40 | component: _propTypes2.default.element
41 | /*
42 | * What you going to get Fetch:
43 | * showLoader : boolean
44 | */
45 | };
46 | });
--------------------------------------------------------------------------------
/src/saga.js:
--------------------------------------------------------------------------------
1 | import regeneratorRuntime from 'regenerator-runtime';
2 | import { takeEvery } from 'redux-saga/effects';
3 | import types from './types';
4 | import * as Collection from './Collection/saga';
5 | import * as Document from './Document/saga';
6 | import CloudCode from './CloudCode/saga';
7 |
8 | const {
9 | FETCH_CLOUD_CODE,
10 | FETCH_COLLECTION,
11 | REFRESH_COLLECTION,
12 | DELETE_COLLECTION_DOC,
13 | PUT_COLLECTION_DOC,
14 | POST_COLLECTION_DOC,
15 | FETCH_DOCUMENT,
16 | PUT_DOCUMENT,
17 | DELETE_DOCUMENT,
18 | POST_DOCUMENT
19 | } = types;
20 | // Collections
21 |
22 | // all market watchers
23 | export default function* parseWatcher() {
24 | // Collections
25 | yield takeEvery(FETCH_COLLECTION, Collection.fetchCollection);
26 | yield takeEvery(REFRESH_COLLECTION, Collection.refreshCollection);
27 | yield takeEvery(DELETE_COLLECTION_DOC, Collection.deleteDoc);
28 | yield takeEvery(PUT_COLLECTION_DOC, Collection.putDoc);
29 | yield takeEvery(POST_COLLECTION_DOC, Collection.postDoc);
30 | // Documents
31 | yield takeEvery(FETCH_DOCUMENT, Document.fetchDoc);
32 | yield takeEvery(PUT_DOCUMENT, Document.putDoc);
33 | yield takeEvery(DELETE_DOCUMENT, Document.deleteDoc);
34 | yield takeEvery(POST_DOCUMENT, Document.postDoc);
35 | // Cloud code
36 | yield takeEvery(FETCH_CLOUD_CODE, CloudCode);
37 | }
38 | /* eslint no-unused-vars: "off" */
39 |
--------------------------------------------------------------------------------
/dist/server/index.js:
--------------------------------------------------------------------------------
1 | (function (global, factory) {
2 | if (typeof define === "function" && define.amd) {
3 | define(['exports', './api', './httpWrapper', './Logger', './util/uploadFiles'], factory);
4 | } else if (typeof exports !== "undefined") {
5 | factory(exports, require('./api'), require('./httpWrapper'), require('./Logger'), require('./util/uploadFiles'));
6 | } else {
7 | var mod = {
8 | exports: {}
9 | };
10 | factory(mod.exports, global.api, global.httpWrapper, global.Logger, global.uploadFiles);
11 | global.index = mod.exports;
12 | }
13 | })(this, function (exports, _api, _httpWrapper, _Logger, _uploadFiles) {
14 | 'use strict';
15 |
16 | Object.defineProperty(exports, "__esModule", {
17 | value: true
18 | });
19 | exports.uploadFilesFromData = exports.httpRequest = exports.Logger = exports.api = undefined;
20 |
21 | var _api2 = _interopRequireDefault(_api);
22 |
23 | var _httpWrapper2 = _interopRequireDefault(_httpWrapper);
24 |
25 | var _Logger2 = _interopRequireDefault(_Logger);
26 |
27 | var _uploadFiles2 = _interopRequireDefault(_uploadFiles);
28 |
29 | function _interopRequireDefault(obj) {
30 | return obj && obj.__esModule ? obj : {
31 | default: obj
32 | };
33 | }
34 |
35 | exports.api = _api2.default;
36 | exports.Logger = _Logger2.default;
37 | exports.httpRequest = _httpWrapper2.default;
38 | exports.uploadFilesFromData = _uploadFiles2.default;
39 | });
--------------------------------------------------------------------------------
/src/reducer.js:
--------------------------------------------------------------------------------
1 | import InitialState from './InitialState';
2 | import cloudCodeHandler from './CloudCode/reducerHandler';
3 | import collectionHandler from './Collection/reducerHandler';
4 | import documentHandler from './Document/reducerHandler';
5 | import {dispatch} from './index';
6 |
7 | const initialState = new InitialState();
8 | const CLEAN_ALL_PARSE_STATE = 'CLEAN_ALL_PARSE_STATE';
9 |
10 | let clearStateActionType = null
11 |
12 | export const cleanAllState = (payload) => {
13 | if(dispatch){
14 | dispatch({type: 'CLEAN_ALL_PARSE_STATE'})
15 | }else{
16 | console.warn('react-parse, missing dispatch, please use setReactParseDispatch')
17 | }
18 | }
19 |
20 | export const setClearStateActionType = function(type){
21 | clearStateActionType = type
22 | };
23 |
24 | export default function parseReducer(state = initialState, action) {
25 | if (!(state instanceof InitialState)) {
26 | return initialState.merge(state);
27 | }
28 | if(
29 | (clearStateActionType && action.type === clearStateActionType) ||
30 | (action.type === CLEAN_ALL_PARSE_STATE)
31 | ){
32 | return initialState
33 | }
34 | let nextState = null;
35 | nextState = cloudCodeHandler(state, action);
36 | if (nextState) return nextState;
37 | nextState = collectionHandler(state, action);
38 | if (nextState) return nextState;
39 | nextState = documentHandler(state, action);
40 | if (nextState) return nextState;
41 | return state;
42 | }
43 |
--------------------------------------------------------------------------------
/dist/Document/saga.js:
--------------------------------------------------------------------------------
1 | (function (global, factory) {
2 | if (typeof define === "function" && define.amd) {
3 | define(['exports', './workers/fetchDoc', './workers/putDoc', './workers/deleteDoc', './workers/postDoc'], factory);
4 | } else if (typeof exports !== "undefined") {
5 | factory(exports, require('./workers/fetchDoc'), require('./workers/putDoc'), require('./workers/deleteDoc'), require('./workers/postDoc'));
6 | } else {
7 | var mod = {
8 | exports: {}
9 | };
10 | factory(mod.exports, global.fetchDoc, global.putDoc, global.deleteDoc, global.postDoc);
11 | global.saga = mod.exports;
12 | }
13 | })(this, function (exports, _fetchDoc, _putDoc, _deleteDoc, _postDoc) {
14 | 'use strict';
15 |
16 | Object.defineProperty(exports, "__esModule", {
17 | value: true
18 | });
19 | exports.postDoc = exports.deleteDoc = exports.putDoc = exports.fetchDoc = undefined;
20 |
21 | var _fetchDoc2 = _interopRequireDefault(_fetchDoc);
22 |
23 | var _putDoc2 = _interopRequireDefault(_putDoc);
24 |
25 | var _deleteDoc2 = _interopRequireDefault(_deleteDoc);
26 |
27 | var _postDoc2 = _interopRequireDefault(_postDoc);
28 |
29 | function _interopRequireDefault(obj) {
30 | return obj && obj.__esModule ? obj : {
31 | default: obj
32 | };
33 | }
34 |
35 | exports.fetchDoc = _fetchDoc2.default;
36 | exports.putDoc = _putDoc2.default;
37 | exports.deleteDoc = _deleteDoc2.default;
38 | exports.postDoc = _postDoc2.default;
39 | });
--------------------------------------------------------------------------------
/src/CloudCode/selectors.js:
--------------------------------------------------------------------------------
1 | import { createSelector } from 'reselect';
2 | import { Map } from 'immutable';
3 | import {
4 | isLoading,
5 | } from '../helpers';
6 |
7 | const MAP = Map();
8 |
9 | const getTargetName = (state, targetName) => targetName;
10 |
11 | // --- Cloud codes ---/
12 | export const getCloudCodes = state => state.parse.cloudCodes;
13 | // -- Get specific collections
14 | const getImmutableCloudCodes = createSelector(
15 | [getCloudCodes, getTargetName],
16 | (cloudCodes, targetName) => cloudCodes.get(targetName) || MAP
17 | );
18 | export const getCloudCode = createSelector(
19 | getImmutableCloudCodes,
20 | dataImmutable => dataImmutable.toJS()
21 | );
22 | export const getData = createSelector(
23 | getImmutableCloudCodes,
24 | dataImmutable => dataImmutable.get('data') && dataImmutable.get('data').toJS()
25 | );
26 | export const getStatus = createSelector(getImmutableCloudCodes, dataImmutable =>
27 | dataImmutable.get('status')
28 | );
29 | export const getDispatchId = createSelector(getImmutableCloudCodes, dataImmutable =>
30 | dataImmutable.get('dispatchId')
31 | );
32 | export const getLoading = createSelector(getImmutableCloudCodes, dataImmutable =>
33 | isLoading(dataImmutable.get('status'))
34 | );
35 | export const getInfo = createSelector(getImmutableCloudCodes, dataImmutable =>
36 | dataImmutable.get('info')
37 | );
38 | export const getError = createSelector(getImmutableCloudCodes, dataImmutable =>
39 | dataImmutable.get('error')
40 | );
41 |
--------------------------------------------------------------------------------
/src/Document/selectors.js:
--------------------------------------------------------------------------------
1 | import { createSelector } from 'reselect';
2 | import { Map } from 'immutable';
3 | import {
4 | isLoading,
5 | } from '../helpers';
6 | const MAP = Map();
7 |
8 | const getTargetName = (state, targetName) => targetName;
9 |
10 | export const getDocuments = state => state.parse.documents;
11 |
12 | const getImmutableDoc = createSelector(
13 | [getDocuments, getTargetName],
14 | (documents, targetName) => documents.get(targetName) || MAP
15 | );
16 |
17 | export const getDocument = createSelector(
18 | getImmutableDoc,
19 | dataImmutable => dataImmutable.toJS()
20 | );
21 | export const getData = createSelector(
22 | getImmutableDoc,
23 | dataImmutable => dataImmutable.get('data') && dataImmutable.get('data').toJS()
24 | );
25 |
26 | export const getStatus = createSelector(getImmutableDoc, dataImmutable =>
27 | dataImmutable.get('status')
28 | );
29 | export const getDispatchId = createSelector(getImmutableDoc, dataImmutable =>
30 | dataImmutable.get('dispatchId')
31 | );
32 | export const getBoomerang = createSelector(getImmutableDoc, dataImmutable =>
33 | dataImmutable.get('boomerang')
34 | );
35 | export const getLoading = createSelector(getImmutableDoc, dataImmutable =>
36 | isLoading(dataImmutable.get('status'))
37 | );
38 |
39 | export const getInfo = createSelector(getImmutableDoc, dataImmutable =>
40 | dataImmutable.get('info')
41 | );
42 |
43 | export const getError = createSelector(getImmutableDoc, dataImmutable =>
44 | dataImmutable.get('error')
45 | );
46 |
--------------------------------------------------------------------------------
/src/server/util/uploadFiles.js:
--------------------------------------------------------------------------------
1 | import regeneratorRuntime from 'regenerator-runtime';
2 | import api from '../api';
3 | import { call } from 'redux-saga/effects';
4 | let RNFetchBlob = null;
5 |
6 | export const setRNFetchBlob = function(res) {
7 | RNFetchBlob = res
8 | }
9 | const browserFileUnloader = function* (file) {
10 | return yield call(api.uploadFile, file);
11 | }
12 | const nativeFileUnloader = function* (file) {
13 | if(!RNFetchBlob){
14 | throw 'react parse need instance of RNFetchBlob, please install rn-fetch-blo and use setRNFetchBlob from react-parse'
15 | } else{
16 | return yield call(api.uploadFileFromReactNativeStorage,RNFetchBlob, file);
17 | }
18 | }
19 |
20 | export default function* uploadFilesFromData(data, fileValueHandler) {
21 | if(!data) return;
22 | const isReactNative = typeof navigator != 'undefined' && navigator.product == 'ReactNative'
23 | for (var k in data) {
24 | if (data[k] instanceof File) {
25 | let fileRes
26 | try {
27 | if(isReactNative){
28 | fileRes = yield nativeFileUnloader(data[k]);
29 | }else{
30 | fileRes = yield browserFileUnloader(data[k]);
31 | }
32 | } catch(e) {
33 | throw e
34 | }
35 | data[k] = fileValueHandler
36 | ? fileValueHandler(fileRes)
37 | : {
38 | name: isReactNative ? fileRes.name : fileRes.data.name,
39 | url: isReactNative ? fileRes.url: fileRes.data.url,
40 | __type: 'File'
41 | }
42 | }
43 | }
44 | return data;
45 | }
--------------------------------------------------------------------------------
/src/CloudCode/cloudCodeActions.js:
--------------------------------------------------------------------------------
1 | import * as actions from './actions';
2 | import {dispatch} from '../index'
3 |
4 | /** functionName, targetName, params, digToData
5 | * Dispatch action to post cloud code function
6 | * @param {object} payload
7 | * @param {string} payload.functionName functionName in the parse clouds
8 | * @param {string} payload.targetName key to store response inside redux store
9 | * if targetName empty then we use functionName as targetName
10 | * @param {object} payload.params request params
11 | * @param {string} payload.digToData string that help us find your data, default is data.result
12 | * @param {object} payload.logger pass to your Logger relevant info
13 | * @param {function} payload.dataHandler pass function that manipulate data before set to store
14 | * @param {function} payload.dispatchId optional, you can pass some unique key to help you follow specific query status
15 | *
16 | */
17 | export const fetchData = (payload) => {
18 | dispatch(actions.fetchData(payload))
19 | }
20 | /**
21 | * Dispatch action to clean cloud code by targetName
22 | * @param {object} payload
23 | * @param {string} payload.targetName
24 | * @param {object} payload.logger pass to your Logger relevant info
25 | *
26 | */
27 | export const cleanData = (payload) => {
28 | dispatch(actions.cleanData(payload))
29 | }
30 | /**
31 | * Dispatch action to clean all cloud code
32 | *
33 | */
34 | export const cleanCloudsCode = () => {
35 | dispatch(actions.cleanCloudCode())
36 | }
37 |
--------------------------------------------------------------------------------
/dist/CloudCode/store.js:
--------------------------------------------------------------------------------
1 | (function (global, factory) {
2 | if (typeof define === "function" && define.amd) {
3 | define(['exports', 'react-redux', 'redux', './actions', './selectors'], factory);
4 | } else if (typeof exports !== "undefined") {
5 | factory(exports, require('react-redux'), require('redux'), require('./actions'), require('./selectors'));
6 | } else {
7 | var mod = {
8 | exports: {}
9 | };
10 | factory(mod.exports, global.reactRedux, global.redux, global.actions, global.selectors);
11 | global.store = mod.exports;
12 | }
13 | })(this, function (exports, _reactRedux, _redux, _actions, _selectors) {
14 | 'use strict';
15 |
16 | Object.defineProperty(exports, "__esModule", {
17 | value: true
18 | });
19 |
20 |
21 | function mapStateToProps(state, props) {
22 | var keyForData = props.targetName || props.functionName;
23 | return {
24 | fetchData: (0, _selectors.getData)(state, keyForData),
25 | fetchStatus: (0, _selectors.getStatus)(state, keyForData),
26 | fetchInfo: (0, _selectors.getInfo)(state, keyForData),
27 | fetchError: (0, _selectors.getError)(state, keyForData),
28 | fetchDispatchId: (0, _selectors.getDispatchId)(state, keyForData)
29 | };
30 | }
31 |
32 | function mapDispatchToProps(dispatch) {
33 | return {
34 | fetchActions: (0, _redux.bindActionCreators)({ fetchData: _actions.fetchData, cleanData: _actions.cleanData }, dispatch)
35 | };
36 | }
37 |
38 | exports.default = function (comp) {
39 | return (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(comp);
40 | };
41 | });
--------------------------------------------------------------------------------
/dist/actions.js:
--------------------------------------------------------------------------------
1 | (function (global, factory) {
2 | if (typeof define === "function" && define.amd) {
3 | define(['exports', './CloudCode/actions', './Collection/actions', './Document/actions'], factory);
4 | } else if (typeof exports !== "undefined") {
5 | factory(exports, require('./CloudCode/actions'), require('./Collection/actions'), require('./Document/actions'));
6 | } else {
7 | var mod = {
8 | exports: {}
9 | };
10 | factory(mod.exports, global.actions, global.actions, global.actions);
11 | global.actions = mod.exports;
12 | }
13 | })(this, function (exports, _actions, _actions2, _actions3) {
14 | 'use strict';
15 |
16 | Object.defineProperty(exports, "__esModule", {
17 | value: true
18 | });
19 | exports.DocumentActions = exports.CollectionActions = exports.CloudCodeActions = undefined;
20 |
21 | var CloudCodeActions = _interopRequireWildcard(_actions);
22 |
23 | var CollectionActions = _interopRequireWildcard(_actions2);
24 |
25 | var DocumentActions = _interopRequireWildcard(_actions3);
26 |
27 | function _interopRequireWildcard(obj) {
28 | if (obj && obj.__esModule) {
29 | return obj;
30 | } else {
31 | var newObj = {};
32 |
33 | if (obj != null) {
34 | for (var key in obj) {
35 | if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key];
36 | }
37 | }
38 |
39 | newObj.default = obj;
40 | return newObj;
41 | }
42 | }
43 |
44 | exports.CloudCodeActions = CloudCodeActions;
45 | exports.CollectionActions = CollectionActions;
46 | exports.DocumentActions = DocumentActions;
47 | });
--------------------------------------------------------------------------------
/dist/Loader/selectors.js:
--------------------------------------------------------------------------------
1 | (function (global, factory) {
2 | if (typeof define === "function" && define.amd) {
3 | define(['exports', 'reselect', 'immutable', 'lodash/some'], factory);
4 | } else if (typeof exports !== "undefined") {
5 | factory(exports, require('reselect'), require('immutable'), require('lodash/some'));
6 | } else {
7 | var mod = {
8 | exports: {}
9 | };
10 | factory(mod.exports, global.reselect, global.immutable, global.some);
11 | global.selectors = mod.exports;
12 | }
13 | })(this, function (exports, _reselect, _immutable, _some) {
14 | 'use strict';
15 |
16 | Object.defineProperty(exports, "__esModule", {
17 | value: true
18 | });
19 | exports.showLoader = undefined;
20 |
21 | var _some2 = _interopRequireDefault(_some);
22 |
23 | function _interopRequireDefault(obj) {
24 | return obj && obj.__esModule ? obj : {
25 | default: obj
26 | };
27 | }
28 |
29 | var loading = { 'loading': true };
30 |
31 | var getState = function getState(state) {
32 | return state.parse;
33 | };
34 | // -- Get specific collections
35 | var showLoader = exports.showLoader = (0, _reselect.createSelector)(getState, function (state) {
36 | var status = false;
37 | if (state && state.collections) {
38 | var toCheck = state.collections.toJS();
39 | status = (0, _some2.default)(toCheck, loading);
40 | if (!status) {
41 | status = (0, _some2.default)(state.cloudCodes.toJS(), loading);
42 | }
43 | if (!status) {
44 | status = (0, _some2.default)(state.documents.toJS(), loading);
45 | }
46 | }
47 | return status;
48 | });
49 | });
--------------------------------------------------------------------------------
/dist/server/Logger.js:
--------------------------------------------------------------------------------
1 | (function (global, factory) {
2 | if (typeof define === "function" && define.amd) {
3 | define(["exports"], factory);
4 | } else if (typeof exports !== "undefined") {
5 | factory(exports);
6 | } else {
7 | var mod = {
8 | exports: {}
9 | };
10 | factory(mod.exports);
11 | global.Logger = mod.exports;
12 | }
13 | })(this, function (exports) {
14 | "use strict";
15 |
16 | Object.defineProperty(exports, "__esModule", {
17 | value: true
18 | });
19 | var _onSuccess = void 0;
20 | var _onError = void 0;
21 | /**
22 | * setLoggerHandlers
23 | * @param {*} payload object
24 | * @param {Function} payload.onSuccess
25 | * @param {Function} payload.onError
26 | */
27 | var setLoggerHandlers = exports.setLoggerHandlers = function setLoggerHandlers(payload) {
28 | if (payload && payload.onSuccess) {
29 | _onSuccess = payload.onSuccess;
30 | }
31 | if (payload && payload.onError) {
32 | _onError = payload.onError;
33 | }
34 | };
35 |
36 | var onSuccess = function onSuccess(type, action, status, res) {
37 | if (_onSuccess) {
38 | _onSuccess(action, status);
39 | }
40 | if (action.payload.onSuccess) {
41 | action.payload.onSuccess({ type: type, action: action, status: status, res: res });
42 | }
43 | };
44 | var onError = function onError(type, action, status, res) {
45 | if (_onError) {
46 | _onError(action, status);
47 | }
48 | if (action.payload.onError) {
49 | action.onError({ type: type, action: action, status: status, res: res });
50 | }
51 | };
52 |
53 | var Logger = {
54 | onSuccess: onSuccess,
55 | onError: onError
56 | };
57 | exports.default = Logger;
58 | });
--------------------------------------------------------------------------------
/dist/selectors.js:
--------------------------------------------------------------------------------
1 | (function (global, factory) {
2 | if (typeof define === "function" && define.amd) {
3 | define(['exports', './CloudCode/selectors', './Collection/selectors', './Document/selectors'], factory);
4 | } else if (typeof exports !== "undefined") {
5 | factory(exports, require('./CloudCode/selectors'), require('./Collection/selectors'), require('./Document/selectors'));
6 | } else {
7 | var mod = {
8 | exports: {}
9 | };
10 | factory(mod.exports, global.selectors, global.selectors, global.selectors);
11 | global.selectors = mod.exports;
12 | }
13 | })(this, function (exports, _selectors, _selectors2, _selectors3) {
14 | 'use strict';
15 |
16 | Object.defineProperty(exports, "__esModule", {
17 | value: true
18 | });
19 | exports.documentSelectors = exports.collectionSelectors = exports.cloudCodeSelectors = undefined;
20 |
21 | var cloudCodeSelectors = _interopRequireWildcard(_selectors);
22 |
23 | var collectionSelectors = _interopRequireWildcard(_selectors2);
24 |
25 | var documentSelectors = _interopRequireWildcard(_selectors3);
26 |
27 | function _interopRequireWildcard(obj) {
28 | if (obj && obj.__esModule) {
29 | return obj;
30 | } else {
31 | var newObj = {};
32 |
33 | if (obj != null) {
34 | for (var key in obj) {
35 | if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key];
36 | }
37 | }
38 |
39 | newObj.default = obj;
40 | return newObj;
41 | }
42 | }
43 |
44 | exports.cloudCodeSelectors = cloudCodeSelectors;
45 | exports.collectionSelectors = collectionSelectors;
46 | exports.documentSelectors = documentSelectors;
47 | });
--------------------------------------------------------------------------------
/src/types.js:
--------------------------------------------------------------------------------
1 | export default {
2 | // FETCH
3 | FETCH_START: 'FETCH_START',
4 | FETCH_FAILED: 'FETCH_FAILED',
5 | FETCH_FAILED_NETWORK: 'FETCH_FAILED_NETWORK',
6 | FETCH_FINISHED: 'FETCH_FINISHED',
7 | // POST
8 | POST_START: 'POST_START',
9 | POST_FAILED: 'POST_FAILED',
10 | POST_FAILED_NETWORK: 'POST_FAILED_NETWORK',
11 | POST_FINISHED: 'POST_FINISHED',
12 | // DELETE
13 | DELETE_START: 'DELETE_START',
14 | DELETE_FAILED: 'DELETE_FAILED',
15 | DELETE_FAILED_NETWORK: 'DELETE_FAILED_NETWORK',
16 | DELETE_FINISHED: 'DELETE_FINISHED',
17 | // PUT
18 | PUT_START: 'PUT_START',
19 | PUT_FAILED: 'PUT_FAILED',
20 | PUT_FAILED_NETWORK: 'PUT_FAILED_NETWORK',
21 | PUT_FINISHED: 'PUT_FINISHED',
22 | // Cloud Code
23 | FETCH_CLOUD_CODE: 'FETCH_CLOUD_CODE',
24 | SET_CLOUD_CODE: 'SET_CLOUD_CODE',
25 | CLEAN_CLOUD_CODE: 'CLEAN_CLOUD_CODE',
26 | CLEAN_ALL_CLOUD_CODE: 'CLEAN_ALL_CLOUD_CODE',
27 | // Collection
28 | FETCH_COLLECTION: 'FETCH_COLLECTION',
29 | REFRESH_COLLECTION: 'REFRESH_COLLECTION',
30 | SET_COLLECTION: 'SET_COLLECTION',
31 | CLEAN_COLLECTION: 'CLEAN_COLLECTION',
32 | CLEAN_ALL_COLLECTIONS: 'CLEAN_ALL_COLLECTIONS',
33 | DELETE_COLLECTION_DOC: 'DELETE_COLLECTION_DOC',
34 | PUT_COLLECTION_DOC: 'PUT_COLLECTION_DOC',
35 | POST_COLLECTION_DOC: 'POST_COLLECTION_DOC',
36 | // Document
37 | FETCH_DOCUMENT: 'FETCH_DOCUMENT',
38 | SET_DOCUMENT: 'SET_DOCUMENT',
39 | PUT_DOCUMENT: 'PUT_DOCUMENT',
40 | DELETE_DOCUMENT: 'DELETE_DOCUMENT',
41 | POST_DOCUMENT: 'POST_DOCUMENT',
42 | CLEAN_DOCUMENT: 'CLEAN_DOCUMENT',
43 | CLEAN_ALL_DOCUMENTS: 'CLEAN_ALL_DOCUMENTS',
44 | UPDATE_DOC_FIELD: 'UPDATE_DOC_FIELD',
45 | UPDATE_DOC_FIELDS: 'UPDATE_DOC_FIELDS'
46 | };
47 |
--------------------------------------------------------------------------------
/src/Collection/selectors.js:
--------------------------------------------------------------------------------
1 | import { createSelector } from 'reselect';
2 | import {
3 | isLoading,
4 | } from '../helpers';
5 | import { Map } from 'immutable';
6 |
7 | const MAP = Map();
8 |
9 | const getTargetName = (state, targetName) => targetName;
10 |
11 | export const getCollections = state => state.parse.collections;
12 |
13 | const getImmutableCollection = createSelector(
14 | [getCollections, getTargetName],
15 | (collections, targetName) => collections.get(targetName) || MAP
16 | );
17 |
18 | export const getCollection = createSelector(
19 | getImmutableCollection,
20 | dataImmutable => dataImmutable.toJS()
21 | );
22 | export const getData = createSelector(
23 | getImmutableCollection,
24 | dataImmutable => dataImmutable.get('data') && dataImmutable.get('data').toJS()
25 | );
26 |
27 | export const getStatus = createSelector(getImmutableCollection, dataImmutable =>
28 | dataImmutable.get('status')
29 | );
30 | export const getDispatchId = createSelector(getImmutableCollection, dataImmutable =>
31 | dataImmutable.get('dispatchId')
32 | );
33 | export const getBoomerang = createSelector(getImmutableCollection, dataImmutable =>
34 | dataImmutable.get('boomerang')
35 | );
36 | export const getLoading = createSelector(getImmutableCollection, dataImmutable =>
37 | isLoading(dataImmutable.get('status'))
38 | );
39 |
40 | export const getInfo = createSelector(getImmutableCollection, dataImmutable =>
41 | dataImmutable.get('info')
42 | );
43 | export const getCount = createSelector(getImmutableCollection, dataImmutable => {
44 | const info = dataImmutable.get('info') || {}
45 | return info.count
46 | }
47 | );
48 |
49 | export const getError = createSelector(getImmutableCollection, dataImmutable =>
50 | dataImmutable.get('error')
51 | );
52 |
--------------------------------------------------------------------------------
/src/Collection/workers/deleteDoc.js:
--------------------------------------------------------------------------------
1 | import regeneratorRuntime from 'regenerator-runtime';
2 | import { put } from 'redux-saga/effects';
3 | import httpRequest from '../../server/httpWrapper';
4 | import types from '../../types';
5 | import api from '../../server/api';
6 | import Logger from '../../server/Logger';
7 | import { setOnStore, refreshCollection } from '../actions';
8 |
9 | const START = types.DELETE_START;
10 | const FAILED = types.DELETE_FAILED;
11 | const FAILED_NETWORK = types.DELETE_FAILED_NETWORK;
12 | const FINISHED = types.DELETE_FINISHED;
13 |
14 | export default function* deleteDoc(action) {
15 | const { targetName, schemaName, objectId, autoRefresh, dispatchId, boomerang } = action.payload;
16 | const _dispatchId = dispatchId || '';
17 | const target = targetName || schemaName;
18 | yield put(setOnStore({ targetName: target, status: START, error: null, loading: true, dispatchId: _dispatchId, boomerang }));
19 | const res = yield* httpRequest(api.deleteObject, schemaName, objectId);
20 | if (res.error) {
21 | const errType = res.message === 'Network Error' ? FAILED_NETWORK : FAILED;
22 | console.error('deleteDoc err', schemaName, objectId, res.err);
23 | yield put(setOnStore({ targetName: target, status: errType, error: res, loading: false, dispatchId: _dispatchId, boomerang }));
24 | Logger.onError('DELETE', action, errType, res);
25 | } else {
26 | yield put(
27 | setOnStore({ targetName: target, status: FINISHED, error: null, loading: false, dispatchId: _dispatchId, boomerang, info: {deleteDocId: objectId} })
28 | );
29 | Logger.onSuccess('DELETE', action, FINISHED, res);
30 | if(autoRefresh){
31 | yield put(
32 | refreshCollection({ targetName: target })
33 | );
34 | }
35 | }
36 | }
37 | /* eslint no-unused-vars: "off" */
38 |
--------------------------------------------------------------------------------
/dist/Collection/saga.js:
--------------------------------------------------------------------------------
1 | (function (global, factory) {
2 | if (typeof define === "function" && define.amd) {
3 | define(['exports', './workers/fetchCollection', './workers/refreshCollection', './workers/deleteDoc', './workers/putDoc', './workers/postDoc'], factory);
4 | } else if (typeof exports !== "undefined") {
5 | factory(exports, require('./workers/fetchCollection'), require('./workers/refreshCollection'), require('./workers/deleteDoc'), require('./workers/putDoc'), require('./workers/postDoc'));
6 | } else {
7 | var mod = {
8 | exports: {}
9 | };
10 | factory(mod.exports, global.fetchCollection, global.refreshCollection, global.deleteDoc, global.putDoc, global.postDoc);
11 | global.saga = mod.exports;
12 | }
13 | })(this, function (exports, _fetchCollection, _refreshCollection, _deleteDoc, _putDoc, _postDoc) {
14 | 'use strict';
15 |
16 | Object.defineProperty(exports, "__esModule", {
17 | value: true
18 | });
19 | exports.refreshCollection = exports.postDoc = exports.putDoc = exports.deleteDoc = exports.fetchCollection = undefined;
20 |
21 | var _fetchCollection2 = _interopRequireDefault(_fetchCollection);
22 |
23 | var _refreshCollection2 = _interopRequireDefault(_refreshCollection);
24 |
25 | var _deleteDoc2 = _interopRequireDefault(_deleteDoc);
26 |
27 | var _putDoc2 = _interopRequireDefault(_putDoc);
28 |
29 | var _postDoc2 = _interopRequireDefault(_postDoc);
30 |
31 | function _interopRequireDefault(obj) {
32 | return obj && obj.__esModule ? obj : {
33 | default: obj
34 | };
35 | }
36 |
37 | exports.fetchCollection = _fetchCollection2.default;
38 | exports.deleteDoc = _deleteDoc2.default;
39 | exports.putDoc = _putDoc2.default;
40 | exports.postDoc = _postDoc2.default;
41 | exports.refreshCollection = _refreshCollection2.default;
42 | });
--------------------------------------------------------------------------------
/src/Document/workers/deleteDoc.js:
--------------------------------------------------------------------------------
1 | import regeneratorRuntime from 'regenerator-runtime';
2 | import { put } from 'redux-saga/effects';
3 | import httpRequest from '../../server/httpWrapper';
4 | import types from '../../types';
5 | import api from '../../server/api';
6 | import Logger from '../../server/Logger';
7 | import { setOnStore } from '../actions';
8 | const START = types.DELETE_START;
9 | const FAILED = types.DELETE_FAILED;
10 | const FAILED_NETWORK = types.DELETE_FAILED_NETWORK;
11 | const FINISHED = types.DELETE_FINISHED;
12 |
13 | export default function* deleteDoc(action) {
14 | const { targetName, schemaName, objectId, dispatchId, boomerang } = action.payload;
15 | const target = targetName || objectId;
16 | const _dispatchId = dispatchId || '';
17 | yield put(setOnStore({ targetName: target, status: START, error: null, loading: true, dispatchId: _dispatchId, boomerang }));
18 | const res = yield* httpRequest(api.deleteObject, schemaName, objectId);
19 | if (res.error) {
20 | const errType = res.message === 'Network Error' ? FAILED_NETWORK : FAILED;
21 | console.error('deleteDoc err', objectId, res.error);
22 | yield put(setOnStore({ targetName: target, status: errType, error: res, loading: false, dispatchId: _dispatchId, boomerang }));
23 | Logger.onError('DELETE' ,action, errType, res)
24 | } else {
25 | const info = {
26 | timestamp: Date.now(),
27 | schemaName,
28 | deleteDocId: objectId
29 | };
30 | yield put(
31 | setOnStore({
32 | targetName: target,
33 | status: FINISHED,
34 | info,
35 | error: null,
36 | loading: false,
37 | dispatchId: _dispatchId,
38 | boomerang
39 | })
40 | );
41 | Logger.onSuccess('DELETE', action, FINISHED, res)
42 | }
43 | }
44 | /* eslint no-unused-vars: "off" */
45 |
--------------------------------------------------------------------------------
/dist/Collection/store.js:
--------------------------------------------------------------------------------
1 | (function (global, factory) {
2 | if (typeof define === "function" && define.amd) {
3 | define(['exports', 'react-redux', 'redux', './actions', './selectors'], factory);
4 | } else if (typeof exports !== "undefined") {
5 | factory(exports, require('react-redux'), require('redux'), require('./actions'), require('./selectors'));
6 | } else {
7 | var mod = {
8 | exports: {}
9 | };
10 | factory(mod.exports, global.reactRedux, global.redux, global.actions, global.selectors);
11 | global.store = mod.exports;
12 | }
13 | })(this, function (exports, _reactRedux, _redux, _actions, _selectors) {
14 | 'use strict';
15 |
16 | Object.defineProperty(exports, "__esModule", {
17 | value: true
18 | });
19 |
20 |
21 | function mapStateToProps(state, props) {
22 | var keyForData = props.targetName || props.schemaName;
23 | return {
24 | fetchData: (0, _selectors.getData)(state, keyForData),
25 | fetchStatus: (0, _selectors.getStatus)(state, keyForData),
26 | fetchInfo: (0, _selectors.getInfo)(state, keyForData),
27 | fetchError: (0, _selectors.getError)(state, keyForData),
28 | fetchCount: (0, _selectors.getCount)(state, keyForData),
29 | fetchDispatchId: (0, _selectors.getDispatchId)(state, keyForData),
30 | fetchBoomerang: (0, _selectors.getBoomerang)(state, keyForData)
31 | };
32 | }
33 |
34 | function mapDispatchToProps(dispatch) {
35 | return {
36 | fetchActions: (0, _redux.bindActionCreators)({
37 | fetchData: _actions.fetchData,
38 | deleteDoc: _actions.deleteDoc,
39 | putDoc: _actions.putDoc,
40 | postDoc: _actions.postDoc,
41 | cleanData: _actions.cleanData
42 | }, dispatch)
43 | };
44 | }
45 |
46 | exports.default = function (comp) {
47 | return (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(comp);
48 | };
49 | });
--------------------------------------------------------------------------------
/src/CloudCode/saga.js:
--------------------------------------------------------------------------------
1 | import regeneratorRuntime from 'regenerator-runtime';
2 | import { put } from 'redux-saga/effects';
3 | import httpRequest from '../server/httpWrapper';
4 | import types from '../types';
5 | import Api from '../server/api';
6 | import { dig } from '../helpers';
7 | import { setOnStore } from './actions';
8 | import Logger from '../server/Logger';
9 |
10 | const START = types.FETCH_START;
11 | const FAILED = types.FETCH_FAILED;
12 | const FAILED_NETWORK = types.FETCH_FAILED_NETWORK;
13 | const FINISHED = types.FETCH_FINISHED;
14 |
15 | export default function* fetchCloudCode(action) {
16 | const { functionName, targetName, params, digToData, dataHandler, dispatchId } = action.payload;
17 | const _digToData = digToData || 'data.result'
18 | const target = targetName || functionName;
19 | const _dispatchId = dispatchId || '';
20 | yield put(setOnStore({ targetName: target, status: START, error: null, loading: true, dispatchId: _dispatchId }));
21 | const res = yield httpRequest(Api.getCloudFunction, functionName, params);
22 | if (res.error || dig(res, 'response.data.error')) {
23 | const errType = res.message === 'Network Error' ? FAILED_NETWORK : FAILED;
24 | yield put(setOnStore({ targetName: target, status: errType, error: res, loading: false, dispatchId: _dispatchId }));
25 | console.error('getCloudFunction err: ', functionName, res.error);
26 | Logger.onError('CLOUD_CODE', action, errType, res);
27 | } else {
28 | const _data = dig(res, _digToData);
29 | const data = dataHandler ? dataHandler(_data) : _data
30 | yield put(
31 | setOnStore({
32 | targetName: target,
33 | status: FINISHED,
34 | error: null,
35 | data,
36 | info: {
37 | params,
38 | timestamp: Date.now()
39 | },
40 | loading: false,
41 | dispatchId: _dispatchId
42 | })
43 | );
44 | Logger.onSuccess('CLOUD_CODE', action, FINISHED, res);
45 | }
46 | }
47 | /* eslint no-unused-vars: "off" */
48 |
--------------------------------------------------------------------------------
/src/CloudCode/prop-types.js:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 |
3 | export const propTypes = {
4 | /**
5 | * Cloud Function name
6 | * look at: http://docs.parseplatform.org/rest/guide/#cloud-code
7 | */
8 | functionName: PropTypes.string.isRequired,
9 | /**
10 | * targetName
11 | * place to set server response - store.cloudCodes[targetName]
12 | * optional- if empty then target is functionName
13 | */
14 | targetName: PropTypes.string,
15 | /**
16 | * params
17 | * object with parameters that pass on fetch
18 | * example {objectId:'59D454c'}
19 | */
20 | params: PropTypes.object,
21 | /**
22 | * onFetchEnd
23 | * call back after fetch end
24 | * onFetchEnd(error, {data, queryStatus})
25 | */
26 | onFetchEnd: PropTypes.func,
27 | /**
28 | * leaveClean
29 | * we remove data from store on componentWillUnmount
30 | * default is true
31 | */
32 | leaveClean: PropTypes.bool,
33 | /**
34 | * localFirst
35 | * fetch data from server only if we can found your data on local store
36 | */
37 | localFirst: PropTypes.bool,
38 | /**
39 | * localOnly
40 | * never fetch data from store
41 | */
42 | localOnly: PropTypes.bool, // get data only from local store
43 | /**
44 | * digToData
45 | * the location of the data on server response
46 | * default is 'data.result'
47 | */
48 | digToData: PropTypes.string,
49 | /**
50 | * render props - pass function that get props and return component.
51 | * (error, props) =>
52 | * props = {
53 | * data,
54 | queryStatus,
55 | isLoading,
56 | info,
57 | refreshData
58 | }
59 | */
60 | render: PropTypes.func,
61 | /**
62 | * dataHandler
63 | * pass function that manipulate data before set to store
64 | */
65 | dataHandler: PropTypes.func
66 | };
67 |
68 | export const defaultProps = {
69 | digToData: 'data.result',
70 | leaveClean: true,
71 | onFetchEnd: () => {},
72 | fetchPropsKey: 'fetchProps'
73 | };
74 |
--------------------------------------------------------------------------------
/dist/Document/store.js:
--------------------------------------------------------------------------------
1 | (function (global, factory) {
2 | if (typeof define === "function" && define.amd) {
3 | define(['exports', 'react-redux', 'redux', './selectors', './actions'], factory);
4 | } else if (typeof exports !== "undefined") {
5 | factory(exports, require('react-redux'), require('redux'), require('./selectors'), require('./actions'));
6 | } else {
7 | var mod = {
8 | exports: {}
9 | };
10 | factory(mod.exports, global.reactRedux, global.redux, global.selectors, global.actions);
11 | global.store = mod.exports;
12 | }
13 | })(this, function (exports, _reactRedux, _redux, _selectors, _actions) {
14 | 'use strict';
15 |
16 | Object.defineProperty(exports, "__esModule", {
17 | value: true
18 | });
19 |
20 |
21 | function mapStateToProps(state, props) {
22 | var targetName = props.targetName,
23 | objectId = props.objectId,
24 | uniqueId = props.uniqueId;
25 |
26 | var target = targetName || objectId || uniqueId;
27 | return {
28 | fetchData: (0, _selectors.getData)(state, target),
29 | fetchStatus: (0, _selectors.getStatus)(state, target),
30 | fetchInfo: (0, _selectors.getInfo)(state, target),
31 | fetchError: (0, _selectors.getError)(state, target),
32 | fetchDispatchId: (0, _selectors.getDispatchId)(state, target),
33 | fetchBoomerang: (0, _selectors.getBoomerang)(state, target)
34 |
35 | };
36 | }
37 |
38 | function mapDispatchToProps(dispatch) {
39 | return {
40 | fetchActions: (0, _redux.bindActionCreators)({
41 | fetchData: _actions.fetchData,
42 | deleteDoc: _actions.deleteDoc,
43 | putDoc: _actions.putDoc,
44 | postDoc: _actions.postDoc,
45 | cleanData: _actions.cleanData,
46 | updateField: _actions.updateField,
47 | updateFields: _actions.updateFields
48 | }, dispatch)
49 | };
50 | }
51 |
52 | exports.default = function (comp) {
53 | return (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(comp);
54 | };
55 | });
--------------------------------------------------------------------------------
/src/Document/workers/fetchDoc.js:
--------------------------------------------------------------------------------
1 | import regeneratorRuntime from 'regenerator-runtime';
2 | import { put } from 'redux-saga/effects';
3 | import httpRequest from '../../server/httpWrapper';
4 | import types from '../../types';
5 | import api from '../../server/api';
6 | import { setOnStore } from '../actions';
7 | import Logger from '../../server/Logger';
8 |
9 | const START = types.FETCH_START;
10 | const FAILED = types.FETCH_FAILED;
11 | const FAILED_NETWORK = types.FETCH_FAILED_NETWORK;
12 | const FINISHED = types.FETCH_FINISHED;
13 |
14 | export default function* fetchDoc(action) {
15 | const { targetName, schemaName, objectId, include, keys, dataHandler, dispatchId, boomerang } = action.payload;
16 | const target = targetName || objectId;
17 | const _dispatchId = dispatchId || '';
18 | yield put(setOnStore({ targetName: target, status: START, error: null, loading: true, dispatchId: _dispatchId, boomerang }));
19 | const res = yield* httpRequest(
20 | api.getObjectById,
21 | schemaName,
22 | objectId,
23 | keys,
24 | include
25 | );
26 | if (res.error) {
27 | const errType = res.message === 'Network Error' ? FAILED_NETWORK : FAILED;
28 | console.error('get document err', objectId, res.error);
29 | yield put(setOnStore({ targetName: target, status: errType, error: res, loading: false, dispatchId: _dispatchId, boomerang }));
30 | Logger.onError('GET', action, errType, res);
31 | } else {
32 | const info = {
33 | timestamp: Date.now(),
34 | keys,
35 | include,
36 | schemaName
37 | };
38 | const _data = res.data;
39 | const data = dataHandler ? dataHandler(_data) : _data;
40 | yield put(
41 | setOnStore({
42 | targetName: target,
43 | status: FINISHED,
44 | data,
45 | info,
46 | error: null,
47 | loading: false,
48 | dispatchId: _dispatchId,
49 | boomerang
50 | })
51 | );
52 | Logger.onSuccess('GET', action, FINISHED, res);
53 | }
54 | }
55 | /* eslint no-unused-vars: "off" */
56 |
--------------------------------------------------------------------------------
/src/Collection/actions.js:
--------------------------------------------------------------------------------
1 | import types from '../types';
2 |
3 | const {
4 | FETCH_COLLECTION,
5 | REFRESH_COLLECTION,
6 | SET_COLLECTION,
7 | CLEAN_COLLECTION,
8 | CLEAN_ALL_COLLECTIONS,
9 | DELETE_COLLECTION_DOC,
10 | PUT_COLLECTION_DOC,
11 | POST_COLLECTION_DOC,
12 | } = types;
13 |
14 | /**
15 | * fetchData
16 | * @param {obj} {schemaName, targetName, query, perPage, page, include, keys, enableCount, dataHandler, dispatchId, boomerang}
17 | */
18 | export const fetchData = payload => ({
19 | type: FETCH_COLLECTION,
20 | payload
21 | });
22 | /**
23 | * refreshCollection
24 | * @param {obj} {payload.targetName}
25 | * @param {obj} {payload.dispatchId}
26 | */
27 | export const refreshCollection = payload => ({
28 | type: REFRESH_COLLECTION,
29 | payload
30 | });
31 |
32 | /**
33 | * setOnStore
34 | * @param {*} payload {targetName, status, data, info, error, dispatchId, boomerang}
35 | */
36 | export const setOnStore = payload => ({
37 | type: SET_COLLECTION,
38 | payload
39 | });
40 |
41 | /**
42 | * deleteDocument
43 | * @param {*} payload {schemaName, targetName, objectId, autoRefresh, dispatchId, boomerang}
44 | */
45 | export const deleteDoc = payload => ({
46 | type: DELETE_COLLECTION_DOC,
47 | payload
48 | });
49 |
50 | /**
51 | * putDoc
52 | * @param {*} payload {schemaName, targetName, objectId, data, autoRefresh, filesIncluded, fileValueHandler, dispatchId, boomerang}
53 | */
54 | export const putDoc = payload => ({
55 | type: PUT_COLLECTION_DOC,
56 | payload
57 | });
58 |
59 | /**
60 | * potDoc
61 | * @param {*} payload {schemaName, targetName, data, autoRefresh, filesIncluded, fileValueHandler, dispatchId, boomerang}
62 | */
63 | export const postDoc = payload => ({
64 | type: POST_COLLECTION_DOC,
65 | payload
66 | });
67 |
68 | /**
69 | * cleanCollection
70 | * @param {*} payload {targetName}
71 | */
72 | export const cleanData = payload => ({
73 | type: CLEAN_COLLECTION,
74 | payload
75 | });
76 |
77 | export const cleanCollections = () => ({
78 | type: CLEAN_ALL_COLLECTIONS,
79 | });
80 |
--------------------------------------------------------------------------------
/src/CloudCode/reducerHandler.js:
--------------------------------------------------------------------------------
1 | import types from '../types';
2 |
3 | const { Map, fromJS } = require('immutable');
4 | import isObject from 'lodash/isObject';
5 |
6 | // This is not a reducer, return null if it is not a relevant action.
7 |
8 | export default function reducerHandler(state, action) {
9 | const { payload } = action;
10 | const { targetName, status, data, info, error, loading, dispatchId } = payload || {};
11 | switch (action.type) {
12 | // Cloud code
13 | case types.SET_CLOUD_CODE: {
14 | let nextState = state;
15 | if (!nextState.cloudCodes.get(targetName)) {
16 | nextState = nextState.setIn(['cloudCodes', targetName], Map());
17 | }
18 | if ('status' in payload) {
19 | nextState = nextState.setIn(
20 | ['cloudCodes', targetName, 'status'],
21 | status
22 | );
23 | }
24 | if ('data' in payload) {
25 | let _data // Cloud code can return a dynamic value, not only arr/obj
26 | if(isObject(data)){
27 | _data = data
28 | }else{
29 | _data = {value: data}
30 | }
31 | nextState = nextState.setIn(['cloudCodes', targetName, 'data'], fromJS(data));
32 | }
33 | if ('info' in payload) {
34 | nextState = nextState.setIn(['cloudCodes', targetName, 'info'], info);
35 | }
36 | if ('error' in payload) {
37 | nextState = nextState.setIn(['cloudCodes', targetName, 'error'], error);
38 | }
39 | if ('loading' in payload) {
40 | nextState = nextState.setIn(['cloudCodes', targetName, 'loading'], loading);
41 | }
42 | if ('dispatchId' in payload) {
43 | nextState = nextState.setIn(['cloudCodes', targetName, 'dispatchId'], dispatchId);
44 | }
45 | return nextState;
46 | }
47 | case types.CLEAN_CLOUD_CODE: {
48 | const clouds = state.cloudCodes.delete(targetName);
49 | return state.set('cloudCodes', clouds);
50 | }
51 | case types.CLEAN_ALL_CLOUD_CODE: {
52 | return state.set('cloudCodes', Map());
53 | }
54 | default:
55 | return null;
56 | }
57 | }
58 |
--------------------------------------------------------------------------------
/src/Collection/workers/postDoc.js:
--------------------------------------------------------------------------------
1 | import regeneratorRuntime from 'regenerator-runtime';
2 | import { put } from 'redux-saga/effects';
3 | import types from '../../types';
4 | import {Logger, api, httpRequest, uploadFilesFromData} from '../../server'
5 | import { setOnStore, refreshCollection } from '../actions';
6 | import { removeImutableKeys } from '../../helpers';
7 |
8 | const START = types.POST_START;
9 | const FAILED = types.POST_FAILED;
10 | const FAILED_NETWORK = types.POST_FAILED_NETWORK;
11 | const FINISHED = types.POST_FINISHED;
12 |
13 | export default function* postDoc(action) {
14 | const { schemaName, data, targetName, autoRefresh, filesIncluded, fileValueHandler, dispatchId, boomerang } = action.payload;
15 | const _dispatchId = dispatchId || '';
16 | const target = targetName || schemaName;
17 | yield put(setOnStore({ targetName: target, status: START, error: null, loading: true, dispatchId: _dispatchId, boomerang }));
18 | let dataToSend, dataFileError, res = null;
19 | try {
20 | dataToSend = filesIncluded ? yield* uploadFilesFromData(data, fileValueHandler) : data;
21 | dataToSend = removeImutableKeys(data)
22 | } catch (error) {
23 | res = error;
24 | res.error = true
25 | dataFileError = true
26 | }
27 | if(!dataFileError){
28 | res = yield* httpRequest(api.createObject, schemaName, dataToSend);
29 | }
30 | if (res.error) {
31 | const errType = res.message === 'Network Error' ? FAILED_NETWORK : FAILED;
32 | console.error('postDoc err', schemaName, res.err);
33 | Logger.onError('POST', action, errType, res)
34 | yield put(setOnStore({ targetName: target, status: errType, error: res, loading: false, dispatchId: _dispatchId, boomerang }));
35 | } else {
36 | yield put(
37 | setOnStore({ targetName: target, status: FINISHED, error: null, loading: false, dispatchId: _dispatchId, boomerang })
38 | );
39 | Logger.onSuccess('POST', action, FINISHED, res);
40 | if(autoRefresh){
41 | yield put(
42 | refreshCollection({ targetName: target })
43 | );
44 | }
45 | }
46 | }
47 | /* eslint no-unused-vars: "off" */
48 |
--------------------------------------------------------------------------------
/src/Collection/workers/putDoc.js:
--------------------------------------------------------------------------------
1 | import regeneratorRuntime from 'regenerator-runtime';
2 | import { put } from 'redux-saga/effects';
3 | import types from '../../types';
4 | import {Logger, api, httpRequest, uploadFilesFromData} from '../../server'
5 | import { setOnStore, refreshCollection } from '../actions';
6 | import { removeImutableKeys } from '../../helpers';
7 |
8 | const START = types.PUT_START;
9 | const FAILED = types.PUT_FAILED;
10 | const FAILED_NETWORK = types.PUT_FAILED_NETWORK;
11 | const FINISHED = types.PUT_FINISHED;
12 |
13 | export default function* putDoc(action) {
14 | const { targetName, schemaName, objectId, data, autoRefresh, filesIncluded, fileValueHandler, dispatchId, boomerang } = action.payload;
15 | const target = targetName || schemaName;
16 | const _dispatchId = dispatchId || '';
17 | yield put(setOnStore({ targetName: target, status: START, error: null, loading: true, dispatchId: _dispatchId, boomerang }));
18 | let dataToSend, dataFileError, res = null;
19 | try {
20 | dataToSend = filesIncluded ? yield* uploadFilesFromData(data, fileValueHandler) : data;
21 | dataToSend = removeImutableKeys(data)
22 | } catch (error) {
23 | res = error;
24 | res.error = true
25 | dataFileError = true
26 | }
27 | if(!dataFileError){
28 | res = yield* httpRequest(api.updateObject, schemaName, objectId, dataToSend);
29 | }
30 | if (res.error) {
31 | const errType = res.message === 'Network Error' ? FAILED_NETWORK : FAILED;
32 | console.error('putDoc err', schemaName, objectId, res.err);
33 | yield put(setOnStore({ targetName: target, status: errType, error: res, loading: false, dispatchId: _dispatchId, boomerang }));
34 | Logger.onError('PUT', action, errType, res)
35 | } else {
36 | yield put(
37 | setOnStore({ targetName: target, status: FINISHED, error: null, loading: false, dispatchId: _dispatchId, boomerang })
38 | );
39 | Logger.onSuccess('PUT', action, FINISHED, res);
40 | if(autoRefresh){
41 | yield put(
42 | refreshCollection({ targetName: target })
43 | );
44 | }
45 | }
46 | }
47 | /* eslint no-unused-vars: "off" */
48 |
--------------------------------------------------------------------------------
/src/Collection/reducerHandler.js:
--------------------------------------------------------------------------------
1 | import types from '../types';
2 |
3 | const { Map, List } = require('immutable');
4 |
5 | const { SET_COLLECTION, CLEAN_COLLECTION, CLEAN_ALL_COLLECTIONS } = types;
6 | // This is not a reducer, return null if it is not a relevant action.
7 |
8 | export default function reducerHandler(state, action) {
9 | const { payload } = action;
10 | const { targetName, status, data, info, error, loading, dispatchId, boomerang } = payload || {};
11 | switch (action.type) {
12 | case SET_COLLECTION: {
13 | const collection = state.collections.get(targetName);
14 | let nextState = state;
15 | if (!collection) {
16 | nextState = nextState.setIn(['collections', targetName], Map());
17 | }
18 | if ('status' in payload) {
19 | nextState = nextState.setIn(
20 | ['collections', targetName, 'status'],
21 | status
22 | );
23 | }
24 | if ('data' in payload) {
25 | nextState = nextState.setIn(
26 | ['collections', targetName, 'data'],
27 | List(data)
28 | );
29 | }
30 | if ('info' in payload) {
31 | nextState = nextState.setIn(['collections', targetName, 'info'], info);
32 | }
33 | if ('error' in payload) {
34 | nextState = nextState.setIn(
35 | ['collections', targetName, 'error'],
36 | error
37 | );
38 | }
39 | if ('loading' in payload) {
40 | nextState = nextState.setIn(['collections', targetName, 'loading'], loading);
41 | }
42 | if ('dispatchId' in payload) {
43 | nextState = nextState.setIn(['collections', targetName, 'dispatchId'], dispatchId);
44 | }
45 | if (boomerang) {
46 | nextState = nextState.setIn(['documents', targetName, 'boomerang'], boomerang);
47 | }
48 | return nextState;
49 | }
50 | case CLEAN_COLLECTION: {
51 | const collections = state.collections.delete(targetName);
52 | return state.set('collections', collections);
53 | }
54 | case CLEAN_ALL_COLLECTIONS: {
55 | return state.set('collections', Map());
56 | }
57 | default:
58 | return null;
59 | }
60 | }
61 |
--------------------------------------------------------------------------------
/src/Document/workers/postDoc.js:
--------------------------------------------------------------------------------
1 | import regeneratorRuntime from 'regenerator-runtime';
2 | import { put } from 'redux-saga/effects';
3 | import types from '../../types';
4 | import {Logger, api, httpRequest, uploadFilesFromData} from '../../server'
5 | import { setOnStore } from '../actions';
6 | import { dig, removeImutableKeys } from '../../helpers';
7 |
8 | const START = types.POST_START;
9 | const FAILED = types.POST_FAILED;
10 | const FAILED_NETWORK = types.POST_FAILED_NETWORK;
11 | const FINISHED = types.POST_FINISHED;
12 |
13 | export default function* postDoc(action) {
14 | const { targetName, schemaName, data, filesIncluded, fileValueHandler, dispatchId, boomerang } = action.payload;
15 | const _dispatchId = dispatchId || '';
16 | yield put(setOnStore({ targetName, status: START, error: null, loading: true, dispatchId: _dispatchId, boomerang }));
17 | let dataToSend, dataFileError, res = null;
18 | try {
19 | dataToSend = filesIncluded ? yield* uploadFilesFromData(data, fileValueHandler) : data;
20 | dataToSend = removeImutableKeys(data)
21 | } catch (error) {
22 | res = error;
23 | res.error = true
24 | dataFileError = true
25 | }
26 | if(!dataFileError){
27 | res = yield* httpRequest(api.createObject, schemaName, dataToSend);
28 | }
29 | if (res.error) {
30 | const errType = res.message === 'Network Error' ? FAILED_NETWORK : FAILED;
31 | console.error('deleteDoc err', targetName, res.error);
32 | yield put(setOnStore({ targetName, status: errType, error: res, loading: false, dispatchId: _dispatchId, boomerang }));
33 | Logger.onError('POST', action, errType, res)
34 | } else {
35 | const info = {
36 | timestamp: Date.now(),
37 | schemaName,
38 | objectId: res.data.objectId,
39 | data,
40 | resData: dig(res, 'data.results[0]')
41 | };
42 | yield put(
43 | setOnStore({
44 | targetName,
45 | status: FINISHED,
46 | info,
47 | error: null,
48 | loading: false,
49 | dispatchId: _dispatchId,
50 | boomerang
51 | })
52 | );
53 | Logger.onSuccess('POST', action, FINISHED, res)
54 | }
55 | }
56 | /* eslint no-unused-vars: "off" */
57 |
--------------------------------------------------------------------------------
/src/Document/workers/putDoc.js:
--------------------------------------------------------------------------------
1 | import regeneratorRuntime from 'regenerator-runtime';
2 | import { put } from 'redux-saga/effects';
3 | import types from '../../types';
4 | import {Logger, api, httpRequest, uploadFilesFromData} from '../../server'
5 | import { setOnStore } from '../actions';
6 | import { dig, removeImutableKeys } from '../../helpers';
7 |
8 | const START = types.PUT_START;
9 | const FAILED = types.PUT_FAILED;
10 | const FAILED_NETWORK = types.PUT_FAILED_NETWORK;
11 | const FINISHED = types.PUT_FINISHED;
12 |
13 | export default function* putDoc(action) {
14 | const { targetName, schemaName, data, objectId, filesIncluded, fileValueHandler, dispatchId, boomerang } = action.payload;
15 | const target = targetName || objectId;
16 | const _dispatchId = dispatchId || '';
17 | yield put(setOnStore({ targetName: target, status: START, error: null, loading: true, dispatchId: _dispatchId, boomerang }));
18 | let dataToSend, dataFileError, res = null;
19 | try {
20 | dataToSend = filesIncluded ? yield* uploadFilesFromData(data, fileValueHandler) : data;
21 | dataToSend = removeImutableKeys(data)
22 | } catch (error) {
23 | res = error;
24 | res.error = true
25 | dataFileError = true
26 | }
27 | if(!dataFileError){
28 | res = yield* httpRequest(api.updateObject, schemaName, objectId, dataToSend);
29 | }
30 | if (res.error) {
31 | const errType = res.message === 'Network Error' ? FAILED_NETWORK : FAILED;
32 | console.error('putDoc err', targetName, res.error);
33 | yield put(setOnStore({ targetName: target, status: errType, error: res, loading: false, dispatchId: _dispatchId, boomerang }));
34 | Logger.onError('PUT', action, errType, res)
35 | } else {
36 | const info = {
37 | timestamp: Date.now(),
38 | schemaName,
39 | objectId,
40 | data: dataToSend,
41 | resData: dig(res, 'data.results[0]')
42 | };
43 | yield put(
44 | setOnStore({
45 | targetName: target,
46 | status: FINISHED,
47 | info,
48 | error: null,
49 | loading: false,
50 | dispatchId: _dispatchId,
51 | boomerang
52 | })
53 | );
54 | Logger.onSuccess('PUT', action, FINISHED, res)
55 | }
56 | }
57 | /* eslint no-unused-vars: "off" */
58 |
--------------------------------------------------------------------------------
/dist/types.js:
--------------------------------------------------------------------------------
1 | (function (global, factory) {
2 | if (typeof define === "function" && define.amd) {
3 | define(['exports'], factory);
4 | } else if (typeof exports !== "undefined") {
5 | factory(exports);
6 | } else {
7 | var mod = {
8 | exports: {}
9 | };
10 | factory(mod.exports);
11 | global.types = mod.exports;
12 | }
13 | })(this, function (exports) {
14 | 'use strict';
15 |
16 | Object.defineProperty(exports, "__esModule", {
17 | value: true
18 | });
19 | exports.default = {
20 | // FETCH
21 | FETCH_START: 'FETCH_START',
22 | FETCH_FAILED: 'FETCH_FAILED',
23 | FETCH_FAILED_NETWORK: 'FETCH_FAILED_NETWORK',
24 | FETCH_FINISHED: 'FETCH_FINISHED',
25 | // POST
26 | POST_START: 'POST_START',
27 | POST_FAILED: 'POST_FAILED',
28 | POST_FAILED_NETWORK: 'POST_FAILED_NETWORK',
29 | POST_FINISHED: 'POST_FINISHED',
30 | // DELETE
31 | DELETE_START: 'DELETE_START',
32 | DELETE_FAILED: 'DELETE_FAILED',
33 | DELETE_FAILED_NETWORK: 'DELETE_FAILED_NETWORK',
34 | DELETE_FINISHED: 'DELETE_FINISHED',
35 | // PUT
36 | PUT_START: 'PUT_START',
37 | PUT_FAILED: 'PUT_FAILED',
38 | PUT_FAILED_NETWORK: 'PUT_FAILED_NETWORK',
39 | PUT_FINISHED: 'PUT_FINISHED',
40 | // Cloud Code
41 | FETCH_CLOUD_CODE: 'FETCH_CLOUD_CODE',
42 | SET_CLOUD_CODE: 'SET_CLOUD_CODE',
43 | CLEAN_CLOUD_CODE: 'CLEAN_CLOUD_CODE',
44 | CLEAN_ALL_CLOUD_CODE: 'CLEAN_ALL_CLOUD_CODE',
45 | // Collection
46 | FETCH_COLLECTION: 'FETCH_COLLECTION',
47 | REFRESH_COLLECTION: 'REFRESH_COLLECTION',
48 | SET_COLLECTION: 'SET_COLLECTION',
49 | CLEAN_COLLECTION: 'CLEAN_COLLECTION',
50 | CLEAN_ALL_COLLECTIONS: 'CLEAN_ALL_COLLECTIONS',
51 | DELETE_COLLECTION_DOC: 'DELETE_COLLECTION_DOC',
52 | PUT_COLLECTION_DOC: 'PUT_COLLECTION_DOC',
53 | POST_COLLECTION_DOC: 'POST_COLLECTION_DOC',
54 | // Document
55 | FETCH_DOCUMENT: 'FETCH_DOCUMENT',
56 | SET_DOCUMENT: 'SET_DOCUMENT',
57 | PUT_DOCUMENT: 'PUT_DOCUMENT',
58 | DELETE_DOCUMENT: 'DELETE_DOCUMENT',
59 | POST_DOCUMENT: 'POST_DOCUMENT',
60 | CLEAN_DOCUMENT: 'CLEAN_DOCUMENT',
61 | CLEAN_ALL_DOCUMENTS: 'CLEAN_ALL_DOCUMENTS',
62 | UPDATE_DOC_FIELD: 'UPDATE_DOC_FIELD',
63 | UPDATE_DOC_FIELDS: 'UPDATE_DOC_FIELDS'
64 | };
65 | });
--------------------------------------------------------------------------------
/src/Collection/workers/fetchCollection.js:
--------------------------------------------------------------------------------
1 | import regeneratorRuntime from 'regenerator-runtime';
2 | import { put } from 'redux-saga/effects';
3 | import httpRequest from '../../server/httpWrapper';
4 | import types from '../../types';
5 | import api from '../../server/api';
6 | import { setOnStore } from '../actions';
7 | import { dig } from '../../helpers';
8 | import Logger from '../../server/Logger';
9 |
10 | const START = types.FETCH_START;
11 | const FAILED = types.FETCH_FAILED;
12 | const FAILED_NETWORK = types.FETCH_FAILED_NETWORK;
13 | const FINISHED = types.FETCH_FINISHED;
14 |
15 | export default function* fetchCollection(action) {
16 | const {
17 | targetName,
18 | schemaName,
19 | query,
20 | skip,
21 | page,
22 | enableCount,
23 | keys,
24 | include,
25 | order,
26 | limit,
27 | dataHandler,
28 | dispatchId,
29 | boomerang
30 | } = action.payload;
31 | const target = targetName || schemaName;
32 | const _dispatchId = dispatchId || '';
33 | yield put(setOnStore({ targetName: target, status: START, error: null, loading: true, dispatchId: _dispatchId, boomerang }));
34 | const res = yield* httpRequest(
35 | api.query,
36 | schemaName,
37 | query,
38 | limit,
39 | skip,
40 | enableCount,
41 | keys,
42 | include,
43 | order
44 | );
45 | if (res.error) {
46 | const errType = res.message === 'Network Error' ? FAILED_NETWORK : FAILED;
47 | console.error('fetchCollection err: ', schemaName, res.error);
48 | yield put(setOnStore({ targetName: target, status: errType, error: res, loading: false, dispatchId: _dispatchId, boomerang }));
49 | Logger.onError('GET', action, errType, res);
50 | } else {
51 | const _data = dig(res, 'data.results')
52 | const data = dataHandler ? dataHandler(_data) : _data;
53 | const info = {
54 | schemaName,
55 | query,
56 | skip,
57 | page,
58 | enableCount,
59 | keys,
60 | include,
61 | order,
62 | limit,
63 | count: res.data.count,
64 | timestamp: Date.now()
65 | };
66 | yield put(
67 | setOnStore({
68 | targetName: target,
69 | status: FINISHED,
70 | error: null,
71 | data,
72 | info,
73 | loading: false,
74 | dispatchId: _dispatchId,
75 | boomerang
76 | })
77 | );
78 | Logger.onSuccess('GET', action, FINISHED, res);
79 | }
80 | }
81 | /* eslint no-unused-vars: "off" */
82 |
--------------------------------------------------------------------------------
/dist/CloudCode/actions.js:
--------------------------------------------------------------------------------
1 | (function (global, factory) {
2 | if (typeof define === "function" && define.amd) {
3 | define(['exports', '../types'], factory);
4 | } else if (typeof exports !== "undefined") {
5 | factory(exports, require('../types'));
6 | } else {
7 | var mod = {
8 | exports: {}
9 | };
10 | factory(mod.exports, global.types);
11 | global.actions = mod.exports;
12 | }
13 | })(this, function (exports, _types) {
14 | 'use strict';
15 |
16 | Object.defineProperty(exports, "__esModule", {
17 | value: true
18 | });
19 | exports.cleanCloudCode = exports.cleanData = exports.setOnStore = exports.fetchData = undefined;
20 |
21 | var _types2 = _interopRequireDefault(_types);
22 |
23 | function _interopRequireDefault(obj) {
24 | return obj && obj.__esModule ? obj : {
25 | default: obj
26 | };
27 | }
28 |
29 | var FETCH_CLOUD_CODE = _types2.default.FETCH_CLOUD_CODE,
30 | SET_CLOUD_CODE = _types2.default.SET_CLOUD_CODE,
31 | CLEAN_CLOUD_CODE = _types2.default.CLEAN_CLOUD_CODE,
32 | CLEAN_ALL_CLOUD_CODE = _types2.default.CLEAN_ALL_CLOUD_CODE;
33 |
34 |
35 | /**
36 | * fetchData
37 | * get data from parse server cloud code by function and find the data
38 | * on redux store by targetName
39 | * @param {object} payload {functionName, targetName, params, digToData, dataHandler, dispatchId}
40 | */
41 | var fetchData = exports.fetchData = function fetchData(payload) {
42 | return {
43 | type: FETCH_CLOUD_CODE,
44 | payload: payload
45 | };
46 | };
47 |
48 | /**
49 | * setOnStore
50 | * set and update data on store.parse.clodeCodes by targetName
51 | * @param {object} payload {targetName, status, data, info, error, dispatchId}
52 | */
53 | var setOnStore = exports.setOnStore = function setOnStore(payload) {
54 | return {
55 | type: SET_CLOUD_CODE,
56 | payload: payload
57 | };
58 | };
59 |
60 | /**
61 | * cleanData
62 | * clean data from store by target name
63 | * @param {object} payload
64 | * @param {string} payload.targetName
65 | */
66 | var cleanData = exports.cleanData = function cleanData(payload) {
67 | return {
68 | type: CLEAN_CLOUD_CODE,
69 | payload: payload
70 | };
71 | };
72 |
73 | /**
74 | * cleanCloudCode
75 | * clean all data inside cloudCode
76 | */
77 | var cleanCloudCode = exports.cleanCloudCode = function cleanCloudCode() {
78 | return {
79 | type: CLEAN_ALL_CLOUD_CODE
80 | };
81 | };
82 | });
--------------------------------------------------------------------------------
/src/Document/actions.js:
--------------------------------------------------------------------------------
1 | import types from '../types';
2 |
3 | const {
4 | FETCH_DOCUMENT,
5 | SET_DOCUMENT,
6 | PUT_DOCUMENT,
7 | POST_DOCUMENT,
8 | DELETE_DOCUMENT,
9 | CLEAN_DOCUMENT,
10 | CLEAN_ALL_DOCUMENTS,
11 | UPDATE_DOC_FIELD,
12 | UPDATE_DOC_FIELDS
13 | } = types;
14 |
15 | /**
16 | * fetchData
17 | * @param {object} payload {targetName, schemaName, objectId, include, keys}
18 | * @param {string} payload.targetName
19 | * @param {string} payload.schemaName
20 | * @param {string} payload.objectId
21 | * @param {string} payload.include
22 | * @param {string} payload.keys,
23 | * @param {function} payload.dataHandler,
24 | * @param {function} payload.dispatchId optional, you can pass some unique key to help you follow specific query status
25 | * @param {function} payload.boomerang optional, you can pass some data that help you manage your things with this async query
26 | *
27 | */
28 | export const fetchData = payload => ({
29 | type: FETCH_DOCUMENT,
30 | payload
31 | });
32 | /**
33 | * setOnStore
34 | * @param {*} payload {targetName, status, data, info, error}
35 | * @param {*} data
36 | */
37 | export const setOnStore = payload => ({
38 | type: SET_DOCUMENT,
39 | payload
40 | });
41 |
42 | /**
43 | * updateField
44 | * @param {*} payload {targetName, key, value}
45 | */
46 | export const updateField = payload => ({
47 | type: UPDATE_DOC_FIELD,
48 | payload
49 | });
50 |
51 | /**
52 | * updateFields
53 | * @param {*} payload {targetName, key, value}
54 | */
55 | export const updateFields = payload => ({
56 | type: UPDATE_DOC_FIELDS,
57 | payload
58 | });
59 |
60 | /**
61 | * putDoc
62 | * @param {*} payload {targetName, schemaName, objectId, data, filesIncluded, fileValueHandler, dispatchId, boomerang}
63 | */
64 | export const putDoc = payload => ({
65 | type: PUT_DOCUMENT,
66 | payload
67 | });
68 | /**
69 | * postDoc
70 | * @param {*} payload {targetName, schemaName, data, filesIncluded, fileValueHandler, dispatchId, boomerang}
71 | */
72 | export const postDoc = payload => ({
73 | type: POST_DOCUMENT,
74 | payload
75 | });
76 | /**
77 | * deleteDoc
78 | * @param {*} payload {targetName, schemaName,objectId, dispatchId, boomerang}
79 | */
80 | export const deleteDoc = payload => ({
81 | type: DELETE_DOCUMENT,
82 | payload
83 | });
84 |
85 | /**
86 | * cleanData
87 | * @param {*} payload {targetName}
88 | */
89 | export const cleanData = payload => ({
90 | type: CLEAN_DOCUMENT,
91 | payload
92 | });
93 | export const clearDocuments = () => ({
94 | type: CLEAN_ALL_DOCUMENTS
95 | });
96 | export const cleanDocuments = () => ({
97 | type: CLEAN_ALL_DOCUMENTS
98 | });
99 |
--------------------------------------------------------------------------------
/dist/CloudCode/selectors.js:
--------------------------------------------------------------------------------
1 | (function (global, factory) {
2 | if (typeof define === "function" && define.amd) {
3 | define(['exports', 'reselect', 'immutable', '../helpers'], factory);
4 | } else if (typeof exports !== "undefined") {
5 | factory(exports, require('reselect'), require('immutable'), require('../helpers'));
6 | } else {
7 | var mod = {
8 | exports: {}
9 | };
10 | factory(mod.exports, global.reselect, global.immutable, global.helpers);
11 | global.selectors = mod.exports;
12 | }
13 | })(this, function (exports, _reselect, _immutable, _helpers) {
14 | 'use strict';
15 |
16 | Object.defineProperty(exports, "__esModule", {
17 | value: true
18 | });
19 | exports.getError = exports.getInfo = exports.getLoading = exports.getDispatchId = exports.getStatus = exports.getData = exports.getCloudCode = exports.getCloudCodes = undefined;
20 |
21 |
22 | var MAP = (0, _immutable.Map)();
23 |
24 | var getTargetName = function getTargetName(state, targetName) {
25 | return targetName;
26 | };
27 |
28 | // --- Cloud codes ---/
29 | var getCloudCodes = exports.getCloudCodes = function getCloudCodes(state) {
30 | return state.parse.cloudCodes;
31 | };
32 | // -- Get specific collections
33 | var getImmutableCloudCodes = (0, _reselect.createSelector)([getCloudCodes, getTargetName], function (cloudCodes, targetName) {
34 | return cloudCodes.get(targetName) || MAP;
35 | });
36 | var getCloudCode = exports.getCloudCode = (0, _reselect.createSelector)(getImmutableCloudCodes, function (dataImmutable) {
37 | return dataImmutable.toJS();
38 | });
39 | var getData = exports.getData = (0, _reselect.createSelector)(getImmutableCloudCodes, function (dataImmutable) {
40 | return dataImmutable.get('data') && dataImmutable.get('data').toJS();
41 | });
42 | var getStatus = exports.getStatus = (0, _reselect.createSelector)(getImmutableCloudCodes, function (dataImmutable) {
43 | return dataImmutable.get('status');
44 | });
45 | var getDispatchId = exports.getDispatchId = (0, _reselect.createSelector)(getImmutableCloudCodes, function (dataImmutable) {
46 | return dataImmutable.get('dispatchId');
47 | });
48 | var getLoading = exports.getLoading = (0, _reselect.createSelector)(getImmutableCloudCodes, function (dataImmutable) {
49 | return (0, _helpers.isLoading)(dataImmutable.get('status'));
50 | });
51 | var getInfo = exports.getInfo = (0, _reselect.createSelector)(getImmutableCloudCodes, function (dataImmutable) {
52 | return dataImmutable.get('info');
53 | });
54 | var getError = exports.getError = (0, _reselect.createSelector)(getImmutableCloudCodes, function (dataImmutable) {
55 | return dataImmutable.get('error');
56 | });
57 | });
--------------------------------------------------------------------------------
/dist/Collection/workers/refreshCollection.js:
--------------------------------------------------------------------------------
1 | (function (global, factory) {
2 | if (typeof define === "function" && define.amd) {
3 | define(['exports', 'regenerator-runtime', 'redux-saga/effects', '../../types', '../actions', '../selectors'], factory);
4 | } else if (typeof exports !== "undefined") {
5 | factory(exports, require('regenerator-runtime'), require('redux-saga/effects'), require('../../types'), require('../actions'), require('../selectors'));
6 | } else {
7 | var mod = {
8 | exports: {}
9 | };
10 | factory(mod.exports, global.regeneratorRuntime, global.effects, global.types, global.actions, global.selectors);
11 | global.refreshCollection = mod.exports;
12 | }
13 | })(this, function (exports, _regeneratorRuntime, _effects, _types, _actions, _selectors) {
14 | 'use strict';
15 |
16 | Object.defineProperty(exports, "__esModule", {
17 | value: true
18 | });
19 | exports.default = refreshCollection;
20 |
21 | var _regeneratorRuntime2 = _interopRequireDefault(_regeneratorRuntime);
22 |
23 | var _types2 = _interopRequireDefault(_types);
24 |
25 | function _interopRequireDefault(obj) {
26 | return obj && obj.__esModule ? obj : {
27 | default: obj
28 | };
29 | }
30 |
31 | var _marked = _regeneratorRuntime2.default.mark(refreshCollection);
32 |
33 | var START = _types2.default.FETCH_START;
34 | var FAILED = _types2.default.FETCH_FAILED;
35 | var FAILED_NETWORK = _types2.default.FETCH_FAILED_NETWORK;
36 | var FINISHED = _types2.default.FETCH_FINISHED;
37 |
38 | function refreshCollection(action) {
39 | var _action$payload, targetName, dispatchId, _dispatchId, info;
40 |
41 | return _regeneratorRuntime2.default.wrap(function refreshCollection$(_context) {
42 | while (1) {
43 | switch (_context.prev = _context.next) {
44 | case 0:
45 | _action$payload = action.payload, targetName = _action$payload.targetName, dispatchId = _action$payload.dispatchId;
46 | _dispatchId = dispatchId || '';
47 | _context.next = 4;
48 | return (0, _effects.select)(function (state) {
49 | return (0, _selectors.getInfo)(state, targetName);
50 | });
51 |
52 | case 4:
53 | info = _context.sent;
54 |
55 | if (!(info && info.schemaName)) {
56 | _context.next = 8;
57 | break;
58 | }
59 |
60 | _context.next = 8;
61 | return (0, _effects.put)((0, _actions.fetchData)(Object.assign({}, info, { targetName: targetName, dispatchId: _dispatchId })));
62 |
63 | case 8:
64 | case 'end':
65 | return _context.stop();
66 | }
67 | }
68 | }, _marked, this);
69 | }
70 | /* eslint no-unused-vars: "off" */
71 | });
--------------------------------------------------------------------------------
/dist/CloudCode/cloudCodeActions.js:
--------------------------------------------------------------------------------
1 | (function (global, factory) {
2 | if (typeof define === "function" && define.amd) {
3 | define(['exports', './actions', '../index'], factory);
4 | } else if (typeof exports !== "undefined") {
5 | factory(exports, require('./actions'), require('../index'));
6 | } else {
7 | var mod = {
8 | exports: {}
9 | };
10 | factory(mod.exports, global.actions, global.index);
11 | global.cloudCodeActions = mod.exports;
12 | }
13 | })(this, function (exports, _actions, _index) {
14 | 'use strict';
15 |
16 | Object.defineProperty(exports, "__esModule", {
17 | value: true
18 | });
19 | exports.cleanCloudsCode = exports.cleanData = exports.fetchData = undefined;
20 |
21 | var actions = _interopRequireWildcard(_actions);
22 |
23 | function _interopRequireWildcard(obj) {
24 | if (obj && obj.__esModule) {
25 | return obj;
26 | } else {
27 | var newObj = {};
28 |
29 | if (obj != null) {
30 | for (var key in obj) {
31 | if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key];
32 | }
33 | }
34 |
35 | newObj.default = obj;
36 | return newObj;
37 | }
38 | }
39 |
40 | /** functionName, targetName, params, digToData
41 | * Dispatch action to post cloud code function
42 | * @param {object} payload
43 | * @param {string} payload.functionName functionName in the parse clouds
44 | * @param {string} payload.targetName key to store response inside redux store
45 | * if targetName empty then we use functionName as targetName
46 | * @param {object} payload.params request params
47 | * @param {string} payload.digToData string that help us find your data, default is data.result
48 | * @param {object} payload.logger pass to your Logger relevant info
49 | * @param {function} payload.dataHandler pass function that manipulate data before set to store
50 | * @param {function} payload.dispatchId optional, you can pass some unique key to help you follow specific query status
51 | *
52 | */
53 | var fetchData = exports.fetchData = function fetchData(payload) {
54 | (0, _index.dispatch)(actions.fetchData(payload));
55 | };
56 | /**
57 | * Dispatch action to clean cloud code by targetName
58 | * @param {object} payload
59 | * @param {string} payload.targetName
60 | * @param {object} payload.logger pass to your Logger relevant info
61 | *
62 | */
63 | var cleanData = exports.cleanData = function cleanData(payload) {
64 | (0, _index.dispatch)(actions.cleanData(payload));
65 | };
66 | /**
67 | * Dispatch action to clean all cloud code
68 | *
69 | */
70 | var cleanCloudsCode = exports.cleanCloudsCode = function cleanCloudsCode() {
71 | (0, _index.dispatch)(actions.cleanCloudCode());
72 | };
73 | });
--------------------------------------------------------------------------------
/dist/server/httpWrapper.js:
--------------------------------------------------------------------------------
1 | (function (global, factory) {
2 | if (typeof define === "function" && define.amd) {
3 | define(['exports', 'redux-saga/effects', './ErrorHandle', 'regenerator-runtime'], factory);
4 | } else if (typeof exports !== "undefined") {
5 | factory(exports, require('redux-saga/effects'), require('./ErrorHandle'), require('regenerator-runtime'));
6 | } else {
7 | var mod = {
8 | exports: {}
9 | };
10 | factory(mod.exports, global.effects, global.ErrorHandle, global.regeneratorRuntime);
11 | global.httpWrapper = mod.exports;
12 | }
13 | })(this, function (exports, _effects, _ErrorHandle, regeneratorRuntime) {
14 | 'use strict';
15 |
16 | Object.defineProperty(exports, "__esModule", {
17 | value: true
18 | });
19 | exports.default = httpRequest;
20 |
21 | var _ErrorHandle2 = _interopRequireDefault(_ErrorHandle);
22 |
23 | function _interopRequireDefault(obj) {
24 | return obj && obj.__esModule ? obj : {
25 | default: obj
26 | };
27 | }
28 |
29 | var _marked = regeneratorRuntime.mark(httpRequest),
30 | _marked2 = regeneratorRuntime.mark(makeRequest);
31 |
32 | function httpRequest() {
33 | var res,
34 | _args = arguments;
35 | return regeneratorRuntime.wrap(function httpRequest$(_context) {
36 | while (1) {
37 | switch (_context.prev = _context.next) {
38 | case 0:
39 | _context.prev = 0;
40 | _context.next = 3;
41 | return makeRequest.apply(undefined, _args);
42 |
43 | case 3:
44 | res = _context.sent;
45 | return _context.abrupt('return', res);
46 |
47 | case 7:
48 | _context.prev = 7;
49 | _context.t0 = _context['catch'](0);
50 |
51 | _context.t0.error = true;
52 | _context.next = 12;
53 | return (0, _ErrorHandle2.default)(_context.t0);
54 |
55 | case 12:
56 | return _context.abrupt('return', _context.t0);
57 |
58 | case 13:
59 | case 'end':
60 | return _context.stop();
61 | }
62 | }
63 | }, _marked, this, [[0, 7]]);
64 | }
65 |
66 | function makeRequest() {
67 | var _args2 = arguments;
68 | return regeneratorRuntime.wrap(function makeRequest$(_context2) {
69 | while (1) {
70 | switch (_context2.prev = _context2.next) {
71 | case 0:
72 | _context2.next = 2;
73 | return _effects.call.apply(undefined, _args2);
74 |
75 | case 2:
76 | return _context2.abrupt('return', _context2.sent);
77 |
78 | case 3:
79 | case 'end':
80 | return _context2.stop();
81 | }
82 | }
83 | }, _marked2, this);
84 | };
85 |
86 | /* eslint no-unused-vars: "off" */
87 | });
--------------------------------------------------------------------------------
/dist/Document/selectors.js:
--------------------------------------------------------------------------------
1 | (function (global, factory) {
2 | if (typeof define === "function" && define.amd) {
3 | define(['exports', 'reselect', 'immutable', '../helpers'], factory);
4 | } else if (typeof exports !== "undefined") {
5 | factory(exports, require('reselect'), require('immutable'), require('../helpers'));
6 | } else {
7 | var mod = {
8 | exports: {}
9 | };
10 | factory(mod.exports, global.reselect, global.immutable, global.helpers);
11 | global.selectors = mod.exports;
12 | }
13 | })(this, function (exports, _reselect, _immutable, _helpers) {
14 | 'use strict';
15 |
16 | Object.defineProperty(exports, "__esModule", {
17 | value: true
18 | });
19 | exports.getError = exports.getInfo = exports.getLoading = exports.getBoomerang = exports.getDispatchId = exports.getStatus = exports.getData = exports.getDocument = exports.getDocuments = undefined;
20 |
21 | var MAP = (0, _immutable.Map)();
22 |
23 | var getTargetName = function getTargetName(state, targetName) {
24 | return targetName;
25 | };
26 |
27 | var getDocuments = exports.getDocuments = function getDocuments(state) {
28 | return state.parse.documents;
29 | };
30 |
31 | var getImmutableDoc = (0, _reselect.createSelector)([getDocuments, getTargetName], function (documents, targetName) {
32 | return documents.get(targetName) || MAP;
33 | });
34 |
35 | var getDocument = exports.getDocument = (0, _reselect.createSelector)(getImmutableDoc, function (dataImmutable) {
36 | return dataImmutable.toJS();
37 | });
38 | var getData = exports.getData = (0, _reselect.createSelector)(getImmutableDoc, function (dataImmutable) {
39 | return dataImmutable.get('data') && dataImmutable.get('data').toJS();
40 | });
41 |
42 | var getStatus = exports.getStatus = (0, _reselect.createSelector)(getImmutableDoc, function (dataImmutable) {
43 | return dataImmutable.get('status');
44 | });
45 | var getDispatchId = exports.getDispatchId = (0, _reselect.createSelector)(getImmutableDoc, function (dataImmutable) {
46 | return dataImmutable.get('dispatchId');
47 | });
48 | var getBoomerang = exports.getBoomerang = (0, _reselect.createSelector)(getImmutableDoc, function (dataImmutable) {
49 | return dataImmutable.get('boomerang');
50 | });
51 | var getLoading = exports.getLoading = (0, _reselect.createSelector)(getImmutableDoc, function (dataImmutable) {
52 | return (0, _helpers.isLoading)(dataImmutable.get('status'));
53 | });
54 |
55 | var getInfo = exports.getInfo = (0, _reselect.createSelector)(getImmutableDoc, function (dataImmutable) {
56 | return dataImmutable.get('info');
57 | });
58 |
59 | var getError = exports.getError = (0, _reselect.createSelector)(getImmutableDoc, function (dataImmutable) {
60 | return dataImmutable.get('error');
61 | });
62 | });
--------------------------------------------------------------------------------
/src/CloudCode/index.js:
--------------------------------------------------------------------------------
1 | import React, { createElement } from 'react';
2 | import {
3 | isCloudCodePropsChanged,
4 | isTargetChanged,
5 | isFetchFinish,
6 | isLoading,
7 | removeLocalKeys
8 | } from '../helpers';
9 | import { propTypes, defaultProps } from './prop-types';
10 | import connect from './store';
11 |
12 | class FetchCloudCode extends React.Component {
13 | constructor(props) {
14 | super(props);
15 | this.fetchData = this.fetchData.bind(this);
16 | this.onRefresh = this.onRefresh.bind(this);
17 | }
18 | componentWillMount() {
19 | const { localFirst, functionName, fetchData, fetchStatus } = this.props;
20 | if (!functionName) return;
21 | if (!localFirst || (localFirst && !fetchData && !isLoading(fetchStatus))) {
22 | this.fetchData();
23 | }
24 | }
25 |
26 | componentWillReceiveProps(nextProps) {
27 | const { fetchStatus, fetchData, fetchError } = nextProps;
28 | if (isCloudCodePropsChanged(this.props, nextProps)) {
29 | if (isTargetChanged(this.props, nextProps)) {
30 | this.cleanData();
31 | }
32 | this.fetchData(nextProps);
33 | } else if (isFetchFinish(this.props, nextProps)) {
34 | this.props.onFetchEnd({error: fetchError, status: fetchStatus, data: fetchData });
35 | }
36 | }
37 |
38 | componentWillUnmount() {
39 | if (this.props.leaveClean) {
40 | this.cleanData();
41 | }
42 | }
43 |
44 | onRefresh() {
45 | this.fetchData(this.props, false);
46 | }
47 |
48 | fetchData(props = this.props, localOnly = this.props.localOnly, dispatchId) {
49 | const { functionName, targetName, params, digToData, dataHandler } = props;
50 | if (localOnly || !props.functionName) return;
51 | props.fetchActions.fetchData({
52 | functionName,
53 | targetName,
54 | params,
55 | digToData,
56 | dataHandler,
57 | dispatchId
58 | });
59 | }
60 |
61 | cleanData() {
62 | const targetName = this.props.targetName || this.props.functionName;
63 | this.props.fetchActions.cleanData({ targetName });
64 | }
65 |
66 | render() {
67 | const { fetchData, fetchStatus, fetchInfo, fetchDispatchId, fetchError, component, fetchPropsKey } = this.props;
68 | let props = removeLocalKeys(this.props);
69 | let propsToPass = Object.assign(props, {
70 | [fetchPropsKey]: {
71 | data: fetchData,
72 | error: fetchError,
73 | status: fetchStatus,
74 | info: fetchInfo,
75 | dispatchId: fetchDispatchId,
76 | isLoading: isLoading(fetchStatus),
77 | refresh: this.onRefresh,
78 | }
79 | })
80 | if(component){
81 | return createElement(component, propsToPass)
82 | }
83 | return this.props.render(propsToPass);
84 | }
85 | }
86 |
87 | export default connect(FetchCloudCode);
88 |
89 | FetchCloudCode.propTypes = propTypes;
90 |
91 | FetchCloudCode.defaultProps = defaultProps;
92 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react-parse",
3 | "version": "1.9.2",
4 | "description": "react components with redux and saga ready to use for easy and fast fetch data from and parse server",
5 | "main": "dist/index.js",
6 | "repository": {
7 | "type": "git",
8 | "url": "git+https://github.com/doronnahum/react-parse.git"
9 | },
10 | "author": "doron nahum",
11 | "license": "MIT",
12 | "bugs": {
13 | "url": "https://github.com/doronnahum/react-parse/issues"
14 | },
15 | "homepage": "https://github.com/doronnahum/react-parse#readme",
16 | "keywords": [
17 | "react-component",
18 | "react",
19 | "react-native",
20 | "saga",
21 | "redux",
22 | "parse-server"
23 | ],
24 | "options": {
25 | "mocha": "--require scripts/mocha_runner src/**/__tests__/**/*.js"
26 | },
27 | "scripts": {
28 | "prepublishOnly": "npm run build",
29 | "build": "babel --plugins transform-es2015-modules-umd src --ignore __tests__ --out-dir ./dist",
30 | "lint": "eslint ./src",
31 | "lintfix": "eslint ./src --fix",
32 | "testonly": "mocha $npm_package_options_mocha",
33 | "test": "npm run lint && npm run testonly",
34 | "test-watch": "npm run testonly -- --watch --watch-extensions js"
35 | },
36 | "devDependencies": {
37 | "babel-cli": "^6.6.4",
38 | "babel-core": "^6.7.4",
39 | "babel-eslint": "^6.0.2",
40 | "babel-plugin-transform-es2015-modules-umd": "^6.24.1",
41 | "babel-plugin-transform-regenerator": "^6.26.0",
42 | "babel-preset-react": "^6.5.0",
43 | "babel-preset-stage-0": "^6.0.15",
44 | "babel-preset-stage-2": "^6.5.0",
45 | "chai": "^3.5.0",
46 | "enzyme": "^2.2.0",
47 | "eslint": "^2.7.0",
48 | "eslint-plugin-babel": "^3.1.0",
49 | "eslint-plugin-react": "^4.2.3",
50 | "jsdom": "^8.1.0",
51 | "mocha": "^2.4.5",
52 | "nodemon": "^1.9.1",
53 | "react": "^16.2.0",
54 | "react-addons-test-utils": "^15.0.0",
55 | "react-dom": "^15.0.0",
56 | "sinon": "^1.17.3"
57 | },
58 | "peerDependencies": {
59 | "react": "~0.14.8 || ^15.0.0",
60 | "react-dom": "~0.14.8 || ^15.0.0"
61 | },
62 | "dependencies": {
63 | "babel-polyfill": "^6.7.4",
64 | "axios": "^0.16.2",
65 | "babel-preset-env": "^1.6.1",
66 | "babel-preset-es2015": "^6.24.1",
67 | "babel-regenerator-runtime": "^6.5.0",
68 | "babel-runtime": "^6.6.1",
69 | "immutable": "^3.8.1",
70 | "lodash": "^4.17.4",
71 | "prop-types": "^15.5.10",
72 | "react": "16.0.0-alpha.6",
73 | "react-redux": "^5.0.6",
74 | "redux": "^3.6.0",
75 | "redux-saga": "^0.15.4",
76 | "regenerator-runtime": "^0.11.1",
77 | "reselect": "^3.0.1"
78 | }
79 | }
80 |
--------------------------------------------------------------------------------
/dist/reducer.js:
--------------------------------------------------------------------------------
1 | (function (global, factory) {
2 | if (typeof define === "function" && define.amd) {
3 | define(['exports', './InitialState', './CloudCode/reducerHandler', './Collection/reducerHandler', './Document/reducerHandler', './index'], factory);
4 | } else if (typeof exports !== "undefined") {
5 | factory(exports, require('./InitialState'), require('./CloudCode/reducerHandler'), require('./Collection/reducerHandler'), require('./Document/reducerHandler'), require('./index'));
6 | } else {
7 | var mod = {
8 | exports: {}
9 | };
10 | factory(mod.exports, global.InitialState, global.reducerHandler, global.reducerHandler, global.reducerHandler, global.index);
11 | global.reducer = mod.exports;
12 | }
13 | })(this, function (exports, _InitialState, _reducerHandler, _reducerHandler3, _reducerHandler5, _index) {
14 | 'use strict';
15 |
16 | Object.defineProperty(exports, "__esModule", {
17 | value: true
18 | });
19 | exports.setClearStateActionType = exports.cleanAllState = undefined;
20 | exports.default = parseReducer;
21 |
22 | var _InitialState2 = _interopRequireDefault(_InitialState);
23 |
24 | var _reducerHandler2 = _interopRequireDefault(_reducerHandler);
25 |
26 | var _reducerHandler4 = _interopRequireDefault(_reducerHandler3);
27 |
28 | var _reducerHandler6 = _interopRequireDefault(_reducerHandler5);
29 |
30 | function _interopRequireDefault(obj) {
31 | return obj && obj.__esModule ? obj : {
32 | default: obj
33 | };
34 | }
35 |
36 | var initialState = new _InitialState2.default();
37 | var CLEAN_ALL_PARSE_STATE = 'CLEAN_ALL_PARSE_STATE';
38 |
39 | var clearStateActionType = null;
40 |
41 | var cleanAllState = exports.cleanAllState = function cleanAllState(payload) {
42 | if (_index.dispatch) {
43 | (0, _index.dispatch)({ type: 'CLEAN_ALL_PARSE_STATE' });
44 | } else {
45 | console.warn('react-parse, missing dispatch, please use setReactParseDispatch');
46 | }
47 | };
48 |
49 | var setClearStateActionType = exports.setClearStateActionType = function setClearStateActionType(type) {
50 | clearStateActionType = type;
51 | };
52 |
53 | function parseReducer() {
54 | var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;
55 | var action = arguments[1];
56 |
57 | if (!(state instanceof _InitialState2.default)) {
58 | return initialState.merge(state);
59 | }
60 | if (clearStateActionType && action.type === clearStateActionType || action.type === CLEAN_ALL_PARSE_STATE) {
61 | return initialState;
62 | }
63 | var nextState = null;
64 | nextState = (0, _reducerHandler2.default)(state, action);
65 | if (nextState) return nextState;
66 | nextState = (0, _reducerHandler4.default)(state, action);
67 | if (nextState) return nextState;
68 | nextState = (0, _reducerHandler6.default)(state, action);
69 | if (nextState) return nextState;
70 | return state;
71 | }
72 | });
--------------------------------------------------------------------------------
/src/Document/reducerHandler.js:
--------------------------------------------------------------------------------
1 | import types from '../types';
2 |
3 | const { Map } = require('immutable');
4 |
5 | const {
6 | SET_DOCUMENT,
7 | CLEAN_DOCUMENT,
8 | CLEAN_ALL_DOCUMENTS,
9 | UPDATE_DOC_FIELD,
10 | UPDATE_DOC_FIELDS
11 | } = types;
12 | // This is not a reducer, return null if it is not a relevant action.
13 |
14 | export default function reducerHandler(state, action) {
15 | const { payload } = action;
16 | const { targetName, status, data, info, error, key, value, loading, dispatchId, boomerang } = payload || {};
17 | switch (action.type) {
18 | case SET_DOCUMENT: {
19 | const documents = state.documents.get(targetName);
20 | let nextState = state;
21 | if (!documents) {
22 | nextState = nextState.setIn(['documents', targetName], Map());
23 | }
24 | if ('status' in payload) {
25 | nextState = nextState.setIn(
26 | ['documents', targetName, 'status'],
27 | status
28 | );
29 | }
30 | if ('data' in payload) {
31 | nextState = nextState.setIn(
32 | ['documents', targetName, 'data'],
33 | Map(data)
34 | );
35 | }
36 | if ('info' in payload) {
37 | nextState = nextState.setIn(['documents', targetName, 'info'], info);
38 | }
39 | if ('error' in payload) {
40 | nextState = nextState.setIn(['documents', targetName, 'error'], error);
41 | }
42 | if ('loading' in payload) {
43 | nextState = nextState.setIn(['documents', targetName, 'loading'], loading);
44 | }
45 | if ('dispatchId' in payload) {
46 | nextState = nextState.setIn(['documents', targetName, 'dispatchId'], dispatchId);
47 | }
48 | if (boomerang) {
49 | nextState = nextState.setIn(['documents', targetName, 'boomerang'], boomerang);
50 | }
51 | return nextState;
52 | }
53 | case UPDATE_DOC_FIELD: {
54 | const documents = state.documents.get(targetName);
55 | let nextState = state;
56 | if (!documents) {
57 | nextState = nextState.setIn(['documents', targetName], Map());
58 | }
59 | nextState = nextState.setIn(
60 | ['documents', targetName, 'data', key],
61 | value
62 | );
63 | return nextState;
64 | }
65 | case UPDATE_DOC_FIELDS: {
66 | const documents = state.documents.get(targetName);
67 | let nextState = state;
68 | if (!documents) {
69 | nextState = nextState.setIn(['documents', targetName], Map({data: Map(data)}));
70 | }else{
71 | nextState = nextState.mergeIn(['documents', targetName, 'data'], data);
72 | }
73 | return nextState;
74 | }
75 | case CLEAN_DOCUMENT: {
76 | const documents = state.documents.delete(targetName);
77 | return state.set('documents', documents);
78 | }
79 | case CLEAN_ALL_DOCUMENTS: {
80 | return state.set('documents', Map());
81 | }
82 | default:
83 | return null;
84 | }
85 | }
86 |
--------------------------------------------------------------------------------
/dist/Collection/selectors.js:
--------------------------------------------------------------------------------
1 | (function (global, factory) {
2 | if (typeof define === "function" && define.amd) {
3 | define(['exports', 'reselect', '../helpers', 'immutable'], factory);
4 | } else if (typeof exports !== "undefined") {
5 | factory(exports, require('reselect'), require('../helpers'), require('immutable'));
6 | } else {
7 | var mod = {
8 | exports: {}
9 | };
10 | factory(mod.exports, global.reselect, global.helpers, global.immutable);
11 | global.selectors = mod.exports;
12 | }
13 | })(this, function (exports, _reselect, _helpers, _immutable) {
14 | 'use strict';
15 |
16 | Object.defineProperty(exports, "__esModule", {
17 | value: true
18 | });
19 | exports.getError = exports.getCount = exports.getInfo = exports.getLoading = exports.getBoomerang = exports.getDispatchId = exports.getStatus = exports.getData = exports.getCollection = exports.getCollections = undefined;
20 |
21 |
22 | var MAP = (0, _immutable.Map)();
23 |
24 | var getTargetName = function getTargetName(state, targetName) {
25 | return targetName;
26 | };
27 |
28 | var getCollections = exports.getCollections = function getCollections(state) {
29 | return state.parse.collections;
30 | };
31 |
32 | var getImmutableCollection = (0, _reselect.createSelector)([getCollections, getTargetName], function (collections, targetName) {
33 | return collections.get(targetName) || MAP;
34 | });
35 |
36 | var getCollection = exports.getCollection = (0, _reselect.createSelector)(getImmutableCollection, function (dataImmutable) {
37 | return dataImmutable.toJS();
38 | });
39 | var getData = exports.getData = (0, _reselect.createSelector)(getImmutableCollection, function (dataImmutable) {
40 | return dataImmutable.get('data') && dataImmutable.get('data').toJS();
41 | });
42 |
43 | var getStatus = exports.getStatus = (0, _reselect.createSelector)(getImmutableCollection, function (dataImmutable) {
44 | return dataImmutable.get('status');
45 | });
46 | var getDispatchId = exports.getDispatchId = (0, _reselect.createSelector)(getImmutableCollection, function (dataImmutable) {
47 | return dataImmutable.get('dispatchId');
48 | });
49 | var getBoomerang = exports.getBoomerang = (0, _reselect.createSelector)(getImmutableCollection, function (dataImmutable) {
50 | return dataImmutable.get('boomerang');
51 | });
52 | var getLoading = exports.getLoading = (0, _reselect.createSelector)(getImmutableCollection, function (dataImmutable) {
53 | return (0, _helpers.isLoading)(dataImmutable.get('status'));
54 | });
55 |
56 | var getInfo = exports.getInfo = (0, _reselect.createSelector)(getImmutableCollection, function (dataImmutable) {
57 | return dataImmutable.get('info');
58 | });
59 | var getCount = exports.getCount = (0, _reselect.createSelector)(getImmutableCollection, function (dataImmutable) {
60 | var info = dataImmutable.get('info') || {};
61 | return info.count;
62 | });
63 |
64 | var getError = exports.getError = (0, _reselect.createSelector)(getImmutableCollection, function (dataImmutable) {
65 | return dataImmutable.get('error');
66 | });
67 | });
--------------------------------------------------------------------------------
/dist/CloudCode/prop-types.js:
--------------------------------------------------------------------------------
1 | (function (global, factory) {
2 | if (typeof define === "function" && define.amd) {
3 | define(['exports', 'prop-types'], factory);
4 | } else if (typeof exports !== "undefined") {
5 | factory(exports, require('prop-types'));
6 | } else {
7 | var mod = {
8 | exports: {}
9 | };
10 | factory(mod.exports, global.propTypes);
11 | global.propTypes = mod.exports;
12 | }
13 | })(this, function (exports, _propTypes) {
14 | 'use strict';
15 |
16 | Object.defineProperty(exports, "__esModule", {
17 | value: true
18 | });
19 | exports.defaultProps = exports.propTypes = undefined;
20 |
21 | var _propTypes2 = _interopRequireDefault(_propTypes);
22 |
23 | function _interopRequireDefault(obj) {
24 | return obj && obj.__esModule ? obj : {
25 | default: obj
26 | };
27 | }
28 |
29 | var propTypes = exports.propTypes = {
30 | /**
31 | * Cloud Function name
32 | * look at: http://docs.parseplatform.org/rest/guide/#cloud-code
33 | */
34 | functionName: _propTypes2.default.string.isRequired,
35 | /**
36 | * targetName
37 | * place to set server response - store.cloudCodes[targetName]
38 | * optional- if empty then target is functionName
39 | */
40 | targetName: _propTypes2.default.string,
41 | /**
42 | * params
43 | * object with parameters that pass on fetch
44 | * example {objectId:'59D454c'}
45 | */
46 | params: _propTypes2.default.object,
47 | /**
48 | * onFetchEnd
49 | * call back after fetch end
50 | * onFetchEnd(error, {data, queryStatus})
51 | */
52 | onFetchEnd: _propTypes2.default.func,
53 | /**
54 | * leaveClean
55 | * we remove data from store on componentWillUnmount
56 | * default is true
57 | */
58 | leaveClean: _propTypes2.default.bool,
59 | /**
60 | * localFirst
61 | * fetch data from server only if we can found your data on local store
62 | */
63 | localFirst: _propTypes2.default.bool,
64 | /**
65 | * localOnly
66 | * never fetch data from store
67 | */
68 | localOnly: _propTypes2.default.bool, // get data only from local store
69 | /**
70 | * digToData
71 | * the location of the data on server response
72 | * default is 'data.result'
73 | */
74 | digToData: _propTypes2.default.string,
75 | /**
76 | * render props - pass function that get props and return component.
77 | * (error, props) =>
78 | * props = {
79 | * data,
80 | queryStatus,
81 | isLoading,
82 | info,
83 | refreshData
84 | }
85 | */
86 | render: _propTypes2.default.func,
87 | /**
88 | * dataHandler
89 | * pass function that manipulate data before set to store
90 | */
91 | dataHandler: _propTypes2.default.func
92 | };
93 |
94 | var defaultProps = exports.defaultProps = {
95 | digToData: 'data.result',
96 | leaveClean: true,
97 | onFetchEnd: function onFetchEnd() {},
98 | fetchPropsKey: 'fetchProps'
99 | };
100 | });
--------------------------------------------------------------------------------
/dist/Collection/reducerHandler.js:
--------------------------------------------------------------------------------
1 | (function (global, factory) {
2 | if (typeof define === "function" && define.amd) {
3 | define(['exports', '../types', 'immutable'], factory);
4 | } else if (typeof exports !== "undefined") {
5 | factory(exports, require('../types'), require('immutable'));
6 | } else {
7 | var mod = {
8 | exports: {}
9 | };
10 | factory(mod.exports, global.types, global.immutable);
11 | global.reducerHandler = mod.exports;
12 | }
13 | })(this, function (exports, _types, _require) {
14 | 'use strict';
15 |
16 | Object.defineProperty(exports, "__esModule", {
17 | value: true
18 | });
19 | exports.default = reducerHandler;
20 |
21 | var _types2 = _interopRequireDefault(_types);
22 |
23 | function _interopRequireDefault(obj) {
24 | return obj && obj.__esModule ? obj : {
25 | default: obj
26 | };
27 | }
28 |
29 | var Map = _require.Map,
30 | List = _require.List;
31 | var SET_COLLECTION = _types2.default.SET_COLLECTION,
32 | CLEAN_COLLECTION = _types2.default.CLEAN_COLLECTION,
33 | CLEAN_ALL_COLLECTIONS = _types2.default.CLEAN_ALL_COLLECTIONS;
34 |
35 | // This is not a reducer, return null if it is not a relevant action.
36 |
37 | function reducerHandler(state, action) {
38 | var payload = action.payload;
39 |
40 | var _ref = payload || {},
41 | targetName = _ref.targetName,
42 | status = _ref.status,
43 | data = _ref.data,
44 | info = _ref.info,
45 | error = _ref.error,
46 | loading = _ref.loading,
47 | dispatchId = _ref.dispatchId,
48 | boomerang = _ref.boomerang;
49 |
50 | switch (action.type) {
51 | case SET_COLLECTION:
52 | {
53 | var collection = state.collections.get(targetName);
54 | var nextState = state;
55 | if (!collection) {
56 | nextState = nextState.setIn(['collections', targetName], Map());
57 | }
58 | if ('status' in payload) {
59 | nextState = nextState.setIn(['collections', targetName, 'status'], status);
60 | }
61 | if ('data' in payload) {
62 | nextState = nextState.setIn(['collections', targetName, 'data'], List(data));
63 | }
64 | if ('info' in payload) {
65 | nextState = nextState.setIn(['collections', targetName, 'info'], info);
66 | }
67 | if ('error' in payload) {
68 | nextState = nextState.setIn(['collections', targetName, 'error'], error);
69 | }
70 | if ('loading' in payload) {
71 | nextState = nextState.setIn(['collections', targetName, 'loading'], loading);
72 | }
73 | if ('dispatchId' in payload) {
74 | nextState = nextState.setIn(['collections', targetName, 'dispatchId'], dispatchId);
75 | }
76 | if (boomerang) {
77 | nextState = nextState.setIn(['documents', targetName, 'boomerang'], boomerang);
78 | }
79 | return nextState;
80 | }
81 | case CLEAN_COLLECTION:
82 | {
83 | var collections = state.collections.delete(targetName);
84 | return state.set('collections', collections);
85 | }
86 | case CLEAN_ALL_COLLECTIONS:
87 | {
88 | return state.set('collections', Map());
89 | }
90 | default:
91 | return null;
92 | }
93 | }
94 | });
--------------------------------------------------------------------------------
/src/Collection/prop-types.js:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 |
3 | export const defaultProps = {
4 | order: '-createdAt',
5 | autoRefresh: true,
6 | onFetchEnd: () => {},
7 | onPostEnd: () => {},
8 | onPutEnd: () => {},
9 | onDeleteEnd: () => {},
10 | fetchPropsKey: 'fetchProps'
11 | };
12 |
13 | export const propTypes = {
14 | schemaName: PropTypes.string.isRequired,
15 | /**
16 | * targetName
17 | * place to set server response - store.collections[targetName]
18 | * optional- if empty then target is schemaName
19 | */
20 | targetName: PropTypes.string,
21 | /**
22 | * query
23 | * object with parameters that pass on fetch
24 | * example {title:'59D454c'}
25 | */
26 | query: PropTypes.object,
27 | /**
28 | * limit
29 | * Limit the number of objects returned by the query
30 | */
31 | limit: PropTypes.number,
32 | /**
33 | * skip
34 | * Use with limit to paginate through results
35 | */
36 | skip: PropTypes.number,
37 | /**
38 | * enableCount
39 | * return the amount of results in data base
40 | */
41 | enableCount: PropTypes.bool,
42 | /**
43 | * keys
44 | * example: 'title,body'
45 | * Restrict the fields returned by the query
46 | */
47 | keys: PropTypes.string,
48 | /**
49 | * include
50 | * example: 'post,categories'
51 | * Use on Pointer columns to return the full object
52 | */
53 | include: PropTypes.string,
54 | /**
55 | * order
56 | * default is '-createdAt'
57 | * Specify a field to sort by
58 | */
59 | order: PropTypes.string,
60 | /**
61 | * onFetchEnd
62 | * call back after fetch end
63 | * onFetchEnd(error, {data, queryStatus})
64 | */
65 | onFetchEnd: PropTypes.func,
66 | /**
67 | * onPostEnd
68 | * call back after fetch end
69 | * onPostEnd(error, {data, queryStatus})
70 | */
71 | onPostEnd: PropTypes.func,
72 | /**
73 | * onPutEnd
74 | * call back after fetch end
75 | * onPutEnd(error, {data, queryStatus})
76 | */
77 | onPutEnd: PropTypes.func,
78 | /**
79 | * onDeleteEnd
80 | * call back after fetch end
81 | * onDeleteEnd(error, {data, queryStatus})
82 | */
83 | onDeleteEnd: PropTypes.func,
84 | /**
85 | * leaveClean
86 | * we remove data from store on componentWillUnmount
87 | * default is true
88 | */
89 | leaveClean: PropTypes.bool,
90 | /**
91 | * localFirst
92 | * fetch data from server only if we can found your data on local store
93 | */
94 | localFirst: PropTypes.bool,
95 | /**
96 | * localOnly
97 | * never fetch data from store
98 | */
99 | localOnly: PropTypes.bool,
100 | /**
101 | * autoRefresh
102 | * default true
103 | * Get data after each create/update/delete doc
104 | */
105 | autoRefresh: PropTypes.bool,
106 | /**
107 | * render props - pass function that get props and return component.
108 | * (error, props) =>
109 | * props = {
110 | * data,
111 | isLoading,
112 | queryStatus,
113 | info,
114 | refreshData,
115 | deleteDocument,
116 | putDocument,
117 | postDocument
118 | }
119 | */
120 | render: PropTypes.func,
121 | /**
122 | * dataHandler
123 | * pass function that manipulate data before set to store
124 | */
125 | dataHandler: PropTypes.func
126 | };
127 |
--------------------------------------------------------------------------------
/dist/CloudCode/reducerHandler.js:
--------------------------------------------------------------------------------
1 | (function (global, factory) {
2 | if (typeof define === "function" && define.amd) {
3 | define(['exports', '../types', 'lodash/isObject', 'immutable'], factory);
4 | } else if (typeof exports !== "undefined") {
5 | factory(exports, require('../types'), require('lodash/isObject'), require('immutable'));
6 | } else {
7 | var mod = {
8 | exports: {}
9 | };
10 | factory(mod.exports, global.types, global.isObject, global.immutable);
11 | global.reducerHandler = mod.exports;
12 | }
13 | })(this, function (exports, _types, _isObject, _require) {
14 | 'use strict';
15 |
16 | Object.defineProperty(exports, "__esModule", {
17 | value: true
18 | });
19 | exports.default = reducerHandler;
20 |
21 | var _types2 = _interopRequireDefault(_types);
22 |
23 | var _isObject2 = _interopRequireDefault(_isObject);
24 |
25 | function _interopRequireDefault(obj) {
26 | return obj && obj.__esModule ? obj : {
27 | default: obj
28 | };
29 | }
30 |
31 | var Map = _require.Map,
32 | fromJS = _require.fromJS;
33 |
34 |
35 | // This is not a reducer, return null if it is not a relevant action.
36 |
37 | function reducerHandler(state, action) {
38 | var payload = action.payload;
39 |
40 | var _ref = payload || {},
41 | targetName = _ref.targetName,
42 | status = _ref.status,
43 | data = _ref.data,
44 | info = _ref.info,
45 | error = _ref.error,
46 | loading = _ref.loading,
47 | dispatchId = _ref.dispatchId;
48 |
49 | switch (action.type) {
50 | // Cloud code
51 | case _types2.default.SET_CLOUD_CODE:
52 | {
53 | var nextState = state;
54 | if (!nextState.cloudCodes.get(targetName)) {
55 | nextState = nextState.setIn(['cloudCodes', targetName], Map());
56 | }
57 | if ('status' in payload) {
58 | nextState = nextState.setIn(['cloudCodes', targetName, 'status'], status);
59 | }
60 | if ('data' in payload) {
61 | var _data = void 0; // Cloud code can return a dynamic value, not only arr/obj
62 | if ((0, _isObject2.default)(data)) {
63 | _data = data;
64 | } else {
65 | _data = { value: data };
66 | }
67 | nextState = nextState.setIn(['cloudCodes', targetName, 'data'], fromJS(data));
68 | }
69 | if ('info' in payload) {
70 | nextState = nextState.setIn(['cloudCodes', targetName, 'info'], info);
71 | }
72 | if ('error' in payload) {
73 | nextState = nextState.setIn(['cloudCodes', targetName, 'error'], error);
74 | }
75 | if ('loading' in payload) {
76 | nextState = nextState.setIn(['cloudCodes', targetName, 'loading'], loading);
77 | }
78 | if ('dispatchId' in payload) {
79 | nextState = nextState.setIn(['cloudCodes', targetName, 'dispatchId'], dispatchId);
80 | }
81 | return nextState;
82 | }
83 | case _types2.default.CLEAN_CLOUD_CODE:
84 | {
85 | var clouds = state.cloudCodes.delete(targetName);
86 | return state.set('cloudCodes', clouds);
87 | }
88 | case _types2.default.CLEAN_ALL_CLOUD_CODE:
89 | {
90 | return state.set('cloudCodes', Map());
91 | }
92 | default:
93 | return null;
94 | }
95 | }
96 | });
--------------------------------------------------------------------------------
/src/Document/prop-types.js:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 |
3 | export const defaultProps = {
4 | order: '-createdAt',
5 | autoRefresh: false,
6 | onFetchEnd: () => {},
7 | onPostEnd: () => {},
8 | onPutEnd: () => {},
9 | onDeleteEnd: () => {},
10 | fetchPropsKey: 'fetchProps'
11 | };
12 |
13 | export const propTypes = {
14 | schemaName: PropTypes.string.isRequired,
15 | /**
16 | * targetName
17 | * place to set server response - store.documents[targetName]
18 | * if empty then target is objectId but if
19 | * objectId is empty then we create uniqueId for you
20 | */
21 | targetName: PropTypes.string,
22 | /**
23 | * objectId
24 | * optional - if empty then we didn't run fetch Data
25 | */
26 | objectId: PropTypes.string,
27 | /**
28 | * keys
29 | * example: 'title,body'
30 | * Restrict the fields returned by the query
31 | */
32 | keys: PropTypes.string,
33 | /**
34 | * include
35 | * example: 'post,categories'
36 | * Use on Pointer columns to return the full object
37 | */
38 | include: PropTypes.string,
39 | /**
40 | * onFetchEnd
41 | * call back after fetch end
42 | * onFetchEnd(error, {data, queryStatus})
43 | */
44 | onFetchEnd: PropTypes.func,
45 | /**
46 | * onPostEnd
47 | * call back after fetch end
48 | * onPostEnd(error, {data, queryStatus})
49 | */
50 | onPostEnd: PropTypes.func,
51 | /**
52 | * onPutEnd
53 | * call back after fetch end
54 | * onPutEnd(error, {data, queryStatus})
55 | */
56 | onPutEnd: PropTypes.func,
57 | /**
58 | * onDeleteEnd
59 | * call back after fetch end
60 | * onDeleteEnd(error, {data, queryStatus})
61 | */
62 | onDeleteEnd: PropTypes.func,
63 | /**
64 | * leaveClean
65 | * we remove data from store on componentWillUnmount
66 | * default is true
67 | */
68 | leaveClean: PropTypes.bool,
69 | /**
70 | * localFirst
71 | * fetch data from server only if we can found your data on local store
72 | */
73 | localFirst: PropTypes.bool,
74 | /**
75 | * localOnly
76 | * never fetch data from store
77 | */
78 | localOnly: PropTypes.bool,
79 | /**
80 | * autoRefresh
81 | * default false
82 | * Get data after each create/update/delete doc
83 | */
84 | autoRefresh: PropTypes.bool,
85 | /**
86 | * render - pass function that get props and return component.
87 | * Exmple of use:
88 | *
93 | */
94 | render: PropTypes.func,
95 | /**
96 | * example:
97 | *
102 | * all the props from FetchDocument will wrap inside props.fetch
103 | */
104 | component: PropTypes.any,
105 | /**
106 | * dataHandler
107 | * pass function that manipulate data before set to store
108 | */
109 | dataHandler: PropTypes.func
110 | /*
111 | * What you going to get Fetch:
112 | * First argument - error - the error from serve.
113 | * Second argument - {
114 | * data : {...}, // The data from server response
115 | isLoading: bollean, // True when loading
116 | status : string, // look at the status list
117 | info: {...}, // extra helpful data of the request
118 | refresh, // function that refresh the data from server
119 | deleteDoc, // function
120 | put, // update your document
121 | post, // create new document
122 | ...this.props // all you other props that you want to pass
123 | }
124 | */
125 | };
126 |
--------------------------------------------------------------------------------
/dist/Loader/index.js:
--------------------------------------------------------------------------------
1 | (function (global, factory) {
2 | if (typeof define === "function" && define.amd) {
3 | define(['exports', 'react', './prop-types', './store'], factory);
4 | } else if (typeof exports !== "undefined") {
5 | factory(exports, require('react'), require('./prop-types'), require('./store'));
6 | } else {
7 | var mod = {
8 | exports: {}
9 | };
10 | factory(mod.exports, global.react, global.propTypes, global.store);
11 | global.index = mod.exports;
12 | }
13 | })(this, function (exports, _react, _propTypes, _store) {
14 | 'use strict';
15 |
16 | Object.defineProperty(exports, "__esModule", {
17 | value: true
18 | });
19 |
20 | var _react2 = _interopRequireDefault(_react);
21 |
22 | var _store2 = _interopRequireDefault(_store);
23 |
24 | function _interopRequireDefault(obj) {
25 | return obj && obj.__esModule ? obj : {
26 | default: obj
27 | };
28 | }
29 |
30 | function _classCallCheck(instance, Constructor) {
31 | if (!(instance instanceof Constructor)) {
32 | throw new TypeError("Cannot call a class as a function");
33 | }
34 | }
35 |
36 | var _createClass = function () {
37 | function defineProperties(target, props) {
38 | for (var i = 0; i < props.length; i++) {
39 | var descriptor = props[i];
40 | descriptor.enumerable = descriptor.enumerable || false;
41 | descriptor.configurable = true;
42 | if ("value" in descriptor) descriptor.writable = true;
43 | Object.defineProperty(target, descriptor.key, descriptor);
44 | }
45 | }
46 |
47 | return function (Constructor, protoProps, staticProps) {
48 | if (protoProps) defineProperties(Constructor.prototype, protoProps);
49 | if (staticProps) defineProperties(Constructor, staticProps);
50 | return Constructor;
51 | };
52 | }();
53 |
54 | function _possibleConstructorReturn(self, call) {
55 | if (!self) {
56 | throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
57 | }
58 |
59 | return call && (typeof call === "object" || typeof call === "function") ? call : self;
60 | }
61 |
62 | function _inherits(subClass, superClass) {
63 | if (typeof superClass !== "function" && superClass !== null) {
64 | throw new TypeError("Super expression must either be null or a function, not " + typeof superClass);
65 | }
66 |
67 | subClass.prototype = Object.create(superClass && superClass.prototype, {
68 | constructor: {
69 | value: subClass,
70 | enumerable: false,
71 | writable: true,
72 | configurable: true
73 | }
74 | });
75 | if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;
76 | }
77 |
78 | var ShowLoader = function (_React$Component) {
79 | _inherits(ShowLoader, _React$Component);
80 |
81 | function ShowLoader() {
82 | _classCallCheck(this, ShowLoader);
83 |
84 | return _possibleConstructorReturn(this, (ShowLoader.__proto__ || Object.getPrototypeOf(ShowLoader)).apply(this, arguments));
85 | }
86 |
87 | _createClass(ShowLoader, [{
88 | key: 'render',
89 | value: function render() {
90 | var _props = this.props,
91 | showLoader = _props.showLoader,
92 | component = _props.component;
93 |
94 | if (component) {
95 | return (0, _react.createElement)(component, { showLoader: showLoader });
96 | }
97 | return this.props.render(showLoader);
98 | }
99 | }]);
100 |
101 | return ShowLoader;
102 | }(_react2.default.Component);
103 |
104 | exports.default = (0, _store2.default)(ShowLoader);
105 |
106 |
107 | ShowLoader.propTypes = _propTypes.propTypes;
108 |
109 | ShowLoader.defaultProps = _propTypes.defaultProps;
110 | });
--------------------------------------------------------------------------------
/dist/Collection/actions.js:
--------------------------------------------------------------------------------
1 | (function (global, factory) {
2 | if (typeof define === "function" && define.amd) {
3 | define(['exports', '../types'], factory);
4 | } else if (typeof exports !== "undefined") {
5 | factory(exports, require('../types'));
6 | } else {
7 | var mod = {
8 | exports: {}
9 | };
10 | factory(mod.exports, global.types);
11 | global.actions = mod.exports;
12 | }
13 | })(this, function (exports, _types) {
14 | 'use strict';
15 |
16 | Object.defineProperty(exports, "__esModule", {
17 | value: true
18 | });
19 | exports.cleanCollections = exports.cleanData = exports.postDoc = exports.putDoc = exports.deleteDoc = exports.setOnStore = exports.refreshCollection = exports.fetchData = undefined;
20 |
21 | var _types2 = _interopRequireDefault(_types);
22 |
23 | function _interopRequireDefault(obj) {
24 | return obj && obj.__esModule ? obj : {
25 | default: obj
26 | };
27 | }
28 |
29 | var FETCH_COLLECTION = _types2.default.FETCH_COLLECTION,
30 | REFRESH_COLLECTION = _types2.default.REFRESH_COLLECTION,
31 | SET_COLLECTION = _types2.default.SET_COLLECTION,
32 | CLEAN_COLLECTION = _types2.default.CLEAN_COLLECTION,
33 | CLEAN_ALL_COLLECTIONS = _types2.default.CLEAN_ALL_COLLECTIONS,
34 | DELETE_COLLECTION_DOC = _types2.default.DELETE_COLLECTION_DOC,
35 | PUT_COLLECTION_DOC = _types2.default.PUT_COLLECTION_DOC,
36 | POST_COLLECTION_DOC = _types2.default.POST_COLLECTION_DOC;
37 |
38 |
39 | /**
40 | * fetchData
41 | * @param {obj} {schemaName, targetName, query, perPage, page, include, keys, enableCount, dataHandler, dispatchId, boomerang}
42 | */
43 | var fetchData = exports.fetchData = function fetchData(payload) {
44 | return {
45 | type: FETCH_COLLECTION,
46 | payload: payload
47 | };
48 | };
49 | /**
50 | * refreshCollection
51 | * @param {obj} {payload.targetName}
52 | * @param {obj} {payload.dispatchId}
53 | */
54 | var refreshCollection = exports.refreshCollection = function refreshCollection(payload) {
55 | return {
56 | type: REFRESH_COLLECTION,
57 | payload: payload
58 | };
59 | };
60 |
61 | /**
62 | * setOnStore
63 | * @param {*} payload {targetName, status, data, info, error, dispatchId, boomerang}
64 | */
65 | var setOnStore = exports.setOnStore = function setOnStore(payload) {
66 | return {
67 | type: SET_COLLECTION,
68 | payload: payload
69 | };
70 | };
71 |
72 | /**
73 | * deleteDocument
74 | * @param {*} payload {schemaName, targetName, objectId, autoRefresh, dispatchId, boomerang}
75 | */
76 | var deleteDoc = exports.deleteDoc = function deleteDoc(payload) {
77 | return {
78 | type: DELETE_COLLECTION_DOC,
79 | payload: payload
80 | };
81 | };
82 |
83 | /**
84 | * putDoc
85 | * @param {*} payload {schemaName, targetName, objectId, data, autoRefresh, filesIncluded, fileValueHandler, dispatchId, boomerang}
86 | */
87 | var putDoc = exports.putDoc = function putDoc(payload) {
88 | return {
89 | type: PUT_COLLECTION_DOC,
90 | payload: payload
91 | };
92 | };
93 |
94 | /**
95 | * potDoc
96 | * @param {*} payload {schemaName, targetName, data, autoRefresh, filesIncluded, fileValueHandler, dispatchId, boomerang}
97 | */
98 | var postDoc = exports.postDoc = function postDoc(payload) {
99 | return {
100 | type: POST_COLLECTION_DOC,
101 | payload: payload
102 | };
103 | };
104 |
105 | /**
106 | * cleanCollection
107 | * @param {*} payload {targetName}
108 | */
109 | var cleanData = exports.cleanData = function cleanData(payload) {
110 | return {
111 | type: CLEAN_COLLECTION,
112 | payload: payload
113 | };
114 | };
115 |
116 | var cleanCollections = exports.cleanCollections = function cleanCollections() {
117 | return {
118 | type: CLEAN_ALL_COLLECTIONS
119 | };
120 | };
121 | });
--------------------------------------------------------------------------------
/dist/Document/index.js:
--------------------------------------------------------------------------------
1 | (function (global, factory) {
2 | if (typeof define === "function" && define.amd) {
3 | define(['exports', 'react', 'prop-types', '../helpers', './Document'], factory);
4 | } else if (typeof exports !== "undefined") {
5 | factory(exports, require('react'), require('prop-types'), require('../helpers'), require('./Document'));
6 | } else {
7 | var mod = {
8 | exports: {}
9 | };
10 | factory(mod.exports, global.react, global.propTypes, global.helpers, global.Document);
11 | global.index = mod.exports;
12 | }
13 | })(this, function (exports, _react, _propTypes, _helpers, _Document) {
14 | 'use strict';
15 |
16 | Object.defineProperty(exports, "__esModule", {
17 | value: true
18 | });
19 |
20 | var _react2 = _interopRequireDefault(_react);
21 |
22 | var _propTypes2 = _interopRequireDefault(_propTypes);
23 |
24 | var _Document2 = _interopRequireDefault(_Document);
25 |
26 | function _interopRequireDefault(obj) {
27 | return obj && obj.__esModule ? obj : {
28 | default: obj
29 | };
30 | }
31 |
32 | var _extends = Object.assign || function (target) {
33 | for (var i = 1; i < arguments.length; i++) {
34 | var source = arguments[i];
35 |
36 | for (var key in source) {
37 | if (Object.prototype.hasOwnProperty.call(source, key)) {
38 | target[key] = source[key];
39 | }
40 | }
41 | }
42 |
43 | return target;
44 | };
45 |
46 | function _classCallCheck(instance, Constructor) {
47 | if (!(instance instanceof Constructor)) {
48 | throw new TypeError("Cannot call a class as a function");
49 | }
50 | }
51 |
52 | var _createClass = function () {
53 | function defineProperties(target, props) {
54 | for (var i = 0; i < props.length; i++) {
55 | var descriptor = props[i];
56 | descriptor.enumerable = descriptor.enumerable || false;
57 | descriptor.configurable = true;
58 | if ("value" in descriptor) descriptor.writable = true;
59 | Object.defineProperty(target, descriptor.key, descriptor);
60 | }
61 | }
62 |
63 | return function (Constructor, protoProps, staticProps) {
64 | if (protoProps) defineProperties(Constructor.prototype, protoProps);
65 | if (staticProps) defineProperties(Constructor, staticProps);
66 | return Constructor;
67 | };
68 | }();
69 |
70 | function _possibleConstructorReturn(self, call) {
71 | if (!self) {
72 | throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
73 | }
74 |
75 | return call && (typeof call === "object" || typeof call === "function") ? call : self;
76 | }
77 |
78 | function _inherits(subClass, superClass) {
79 | if (typeof superClass !== "function" && superClass !== null) {
80 | throw new TypeError("Super expression must either be null or a function, not " + typeof superClass);
81 | }
82 |
83 | subClass.prototype = Object.create(superClass && superClass.prototype, {
84 | constructor: {
85 | value: subClass,
86 | enumerable: false,
87 | writable: true,
88 | configurable: true
89 | }
90 | });
91 | if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;
92 | }
93 |
94 | var FetchDocumentWithUniqueId = function (_React$PureComponent) {
95 | _inherits(FetchDocumentWithUniqueId, _React$PureComponent);
96 |
97 | function FetchDocumentWithUniqueId(props) {
98 | _classCallCheck(this, FetchDocumentWithUniqueId);
99 |
100 | var _this = _possibleConstructorReturn(this, (FetchDocumentWithUniqueId.__proto__ || Object.getPrototypeOf(FetchDocumentWithUniqueId)).call(this, props));
101 |
102 | _this.uniqueId = _this.props.uniqueId || (0, _helpers.createUniqueId)();
103 | return _this;
104 | }
105 |
106 | _createClass(FetchDocumentWithUniqueId, [{
107 | key: 'render',
108 | value: function render() {
109 | return _react2.default.createElement(_Document2.default, _extends({}, this.props, { uniqueId: 'LOCAL: ' + this.uniqueId }));
110 | }
111 | }]);
112 |
113 | return FetchDocumentWithUniqueId;
114 | }(_react2.default.PureComponent);
115 |
116 | exports.default = FetchDocumentWithUniqueId;
117 |
118 |
119 | FetchDocumentWithUniqueId.propTypes = {
120 | uniqueId: _propTypes2.default.string
121 | };
122 | });
--------------------------------------------------------------------------------
/dist/Document/reducerHandler.js:
--------------------------------------------------------------------------------
1 | (function (global, factory) {
2 | if (typeof define === "function" && define.amd) {
3 | define(['exports', '../types', 'immutable'], factory);
4 | } else if (typeof exports !== "undefined") {
5 | factory(exports, require('../types'), require('immutable'));
6 | } else {
7 | var mod = {
8 | exports: {}
9 | };
10 | factory(mod.exports, global.types, global.immutable);
11 | global.reducerHandler = mod.exports;
12 | }
13 | })(this, function (exports, _types, _require) {
14 | 'use strict';
15 |
16 | Object.defineProperty(exports, "__esModule", {
17 | value: true
18 | });
19 | exports.default = reducerHandler;
20 |
21 | var _types2 = _interopRequireDefault(_types);
22 |
23 | function _interopRequireDefault(obj) {
24 | return obj && obj.__esModule ? obj : {
25 | default: obj
26 | };
27 | }
28 |
29 | var Map = _require.Map;
30 | var SET_DOCUMENT = _types2.default.SET_DOCUMENT,
31 | CLEAN_DOCUMENT = _types2.default.CLEAN_DOCUMENT,
32 | CLEAN_ALL_DOCUMENTS = _types2.default.CLEAN_ALL_DOCUMENTS,
33 | UPDATE_DOC_FIELD = _types2.default.UPDATE_DOC_FIELD,
34 | UPDATE_DOC_FIELDS = _types2.default.UPDATE_DOC_FIELDS;
35 |
36 | // This is not a reducer, return null if it is not a relevant action.
37 |
38 | function reducerHandler(state, action) {
39 | var payload = action.payload;
40 |
41 | var _ref = payload || {},
42 | targetName = _ref.targetName,
43 | status = _ref.status,
44 | data = _ref.data,
45 | info = _ref.info,
46 | error = _ref.error,
47 | key = _ref.key,
48 | value = _ref.value,
49 | loading = _ref.loading,
50 | dispatchId = _ref.dispatchId,
51 | boomerang = _ref.boomerang;
52 |
53 | switch (action.type) {
54 | case SET_DOCUMENT:
55 | {
56 | var documents = state.documents.get(targetName);
57 | var nextState = state;
58 | if (!documents) {
59 | nextState = nextState.setIn(['documents', targetName], Map());
60 | }
61 | if ('status' in payload) {
62 | nextState = nextState.setIn(['documents', targetName, 'status'], status);
63 | }
64 | if ('data' in payload) {
65 | nextState = nextState.setIn(['documents', targetName, 'data'], Map(data));
66 | }
67 | if ('info' in payload) {
68 | nextState = nextState.setIn(['documents', targetName, 'info'], info);
69 | }
70 | if ('error' in payload) {
71 | nextState = nextState.setIn(['documents', targetName, 'error'], error);
72 | }
73 | if ('loading' in payload) {
74 | nextState = nextState.setIn(['documents', targetName, 'loading'], loading);
75 | }
76 | if ('dispatchId' in payload) {
77 | nextState = nextState.setIn(['documents', targetName, 'dispatchId'], dispatchId);
78 | }
79 | if (boomerang) {
80 | nextState = nextState.setIn(['documents', targetName, 'boomerang'], boomerang);
81 | }
82 | return nextState;
83 | }
84 | case UPDATE_DOC_FIELD:
85 | {
86 | var _documents = state.documents.get(targetName);
87 | var _nextState = state;
88 | if (!_documents) {
89 | _nextState = _nextState.setIn(['documents', targetName], Map());
90 | }
91 | _nextState = _nextState.setIn(['documents', targetName, 'data', key], value);
92 | return _nextState;
93 | }
94 | case UPDATE_DOC_FIELDS:
95 | {
96 | var _documents2 = state.documents.get(targetName);
97 | var _nextState2 = state;
98 | if (!_documents2) {
99 | _nextState2 = _nextState2.setIn(['documents', targetName], Map({ data: Map(data) }));
100 | } else {
101 | _nextState2 = _nextState2.mergeIn(['documents', targetName, 'data'], data);
102 | }
103 | return _nextState2;
104 | }
105 | case CLEAN_DOCUMENT:
106 | {
107 | var _documents3 = state.documents.delete(targetName);
108 | return state.set('documents', _documents3);
109 | }
110 | case CLEAN_ALL_DOCUMENTS:
111 | {
112 | return state.set('documents', Map());
113 | }
114 | default:
115 | return null;
116 | }
117 | }
118 | });
--------------------------------------------------------------------------------
/dist/Document/workers/deleteDoc.js:
--------------------------------------------------------------------------------
1 | (function (global, factory) {
2 | if (typeof define === "function" && define.amd) {
3 | define(['exports', 'regenerator-runtime', 'redux-saga/effects', '../../server/httpWrapper', '../../types', '../../server/api', '../../server/Logger', '../actions'], factory);
4 | } else if (typeof exports !== "undefined") {
5 | factory(exports, require('regenerator-runtime'), require('redux-saga/effects'), require('../../server/httpWrapper'), require('../../types'), require('../../server/api'), require('../../server/Logger'), require('../actions'));
6 | } else {
7 | var mod = {
8 | exports: {}
9 | };
10 | factory(mod.exports, global.regeneratorRuntime, global.effects, global.httpWrapper, global.types, global.api, global.Logger, global.actions);
11 | global.deleteDoc = mod.exports;
12 | }
13 | })(this, function (exports, _regeneratorRuntime, _effects, _httpWrapper, _types, _api, _Logger, _actions) {
14 | 'use strict';
15 |
16 | Object.defineProperty(exports, "__esModule", {
17 | value: true
18 | });
19 | exports.default = deleteDoc;
20 |
21 | var _regeneratorRuntime2 = _interopRequireDefault(_regeneratorRuntime);
22 |
23 | var _httpWrapper2 = _interopRequireDefault(_httpWrapper);
24 |
25 | var _types2 = _interopRequireDefault(_types);
26 |
27 | var _api2 = _interopRequireDefault(_api);
28 |
29 | var _Logger2 = _interopRequireDefault(_Logger);
30 |
31 | function _interopRequireDefault(obj) {
32 | return obj && obj.__esModule ? obj : {
33 | default: obj
34 | };
35 | }
36 |
37 | var _marked = _regeneratorRuntime2.default.mark(deleteDoc);
38 |
39 | var START = _types2.default.DELETE_START;
40 | var FAILED = _types2.default.DELETE_FAILED;
41 | var FAILED_NETWORK = _types2.default.DELETE_FAILED_NETWORK;
42 | var FINISHED = _types2.default.DELETE_FINISHED;
43 |
44 | function deleteDoc(action) {
45 | var _action$payload, targetName, schemaName, objectId, dispatchId, boomerang, target, _dispatchId, res, errType, info;
46 |
47 | return _regeneratorRuntime2.default.wrap(function deleteDoc$(_context) {
48 | while (1) {
49 | switch (_context.prev = _context.next) {
50 | case 0:
51 | _action$payload = action.payload, targetName = _action$payload.targetName, schemaName = _action$payload.schemaName, objectId = _action$payload.objectId, dispatchId = _action$payload.dispatchId, boomerang = _action$payload.boomerang;
52 | target = targetName || objectId;
53 | _dispatchId = dispatchId || '';
54 | _context.next = 5;
55 | return (0, _effects.put)((0, _actions.setOnStore)({ targetName: target, status: START, error: null, loading: true, dispatchId: _dispatchId, boomerang: boomerang }));
56 |
57 | case 5:
58 | return _context.delegateYield((0, _httpWrapper2.default)(_api2.default.deleteObject, schemaName, objectId), 't0', 6);
59 |
60 | case 6:
61 | res = _context.t0;
62 |
63 | if (!res.error) {
64 | _context.next = 15;
65 | break;
66 | }
67 |
68 | errType = res.message === 'Network Error' ? FAILED_NETWORK : FAILED;
69 |
70 | console.error('deleteDoc err', objectId, res.error);
71 | _context.next = 12;
72 | return (0, _effects.put)((0, _actions.setOnStore)({ targetName: target, status: errType, error: res, loading: false, dispatchId: _dispatchId, boomerang: boomerang }));
73 |
74 | case 12:
75 | _Logger2.default.onError('DELETE', action, errType, res);
76 | _context.next = 19;
77 | break;
78 |
79 | case 15:
80 | info = {
81 | timestamp: Date.now(),
82 | schemaName: schemaName,
83 | deleteDocId: objectId
84 | };
85 | _context.next = 18;
86 | return (0, _effects.put)((0, _actions.setOnStore)({
87 | targetName: target,
88 | status: FINISHED,
89 | info: info,
90 | error: null,
91 | loading: false,
92 | dispatchId: _dispatchId,
93 | boomerang: boomerang
94 | }));
95 |
96 | case 18:
97 | _Logger2.default.onSuccess('DELETE', action, FINISHED, res);
98 |
99 | case 19:
100 | case 'end':
101 | return _context.stop();
102 | }
103 | }
104 | }, _marked, this);
105 | }
106 | /* eslint no-unused-vars: "off" */
107 | });
--------------------------------------------------------------------------------
/dist/saga.js:
--------------------------------------------------------------------------------
1 | (function (global, factory) {
2 | if (typeof define === "function" && define.amd) {
3 | define(['exports', 'regenerator-runtime', 'redux-saga/effects', './types', './Collection/saga', './Document/saga', './CloudCode/saga'], factory);
4 | } else if (typeof exports !== "undefined") {
5 | factory(exports, require('regenerator-runtime'), require('redux-saga/effects'), require('./types'), require('./Collection/saga'), require('./Document/saga'), require('./CloudCode/saga'));
6 | } else {
7 | var mod = {
8 | exports: {}
9 | };
10 | factory(mod.exports, global.regeneratorRuntime, global.effects, global.types, global.saga, global.saga, global.saga);
11 | global.saga = mod.exports;
12 | }
13 | })(this, function (exports, _regeneratorRuntime, _effects, _types, _saga, _saga2, _saga3) {
14 | 'use strict';
15 |
16 | Object.defineProperty(exports, "__esModule", {
17 | value: true
18 | });
19 | exports.default = parseWatcher;
20 |
21 | var _regeneratorRuntime2 = _interopRequireDefault(_regeneratorRuntime);
22 |
23 | var _types2 = _interopRequireDefault(_types);
24 |
25 | var Collection = _interopRequireWildcard(_saga);
26 |
27 | var Document = _interopRequireWildcard(_saga2);
28 |
29 | var _saga4 = _interopRequireDefault(_saga3);
30 |
31 | function _interopRequireWildcard(obj) {
32 | if (obj && obj.__esModule) {
33 | return obj;
34 | } else {
35 | var newObj = {};
36 |
37 | if (obj != null) {
38 | for (var key in obj) {
39 | if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key];
40 | }
41 | }
42 |
43 | newObj.default = obj;
44 | return newObj;
45 | }
46 | }
47 |
48 | function _interopRequireDefault(obj) {
49 | return obj && obj.__esModule ? obj : {
50 | default: obj
51 | };
52 | }
53 |
54 | var _marked = _regeneratorRuntime2.default.mark(parseWatcher);
55 |
56 | var FETCH_CLOUD_CODE = _types2.default.FETCH_CLOUD_CODE,
57 | FETCH_COLLECTION = _types2.default.FETCH_COLLECTION,
58 | REFRESH_COLLECTION = _types2.default.REFRESH_COLLECTION,
59 | DELETE_COLLECTION_DOC = _types2.default.DELETE_COLLECTION_DOC,
60 | PUT_COLLECTION_DOC = _types2.default.PUT_COLLECTION_DOC,
61 | POST_COLLECTION_DOC = _types2.default.POST_COLLECTION_DOC,
62 | FETCH_DOCUMENT = _types2.default.FETCH_DOCUMENT,
63 | PUT_DOCUMENT = _types2.default.PUT_DOCUMENT,
64 | DELETE_DOCUMENT = _types2.default.DELETE_DOCUMENT,
65 | POST_DOCUMENT = _types2.default.POST_DOCUMENT;
66 |
67 | // Collections
68 |
69 | // all market watchers
70 | function parseWatcher() {
71 | return _regeneratorRuntime2.default.wrap(function parseWatcher$(_context) {
72 | while (1) {
73 | switch (_context.prev = _context.next) {
74 | case 0:
75 | _context.next = 2;
76 | return (0, _effects.takeEvery)(FETCH_COLLECTION, Collection.fetchCollection);
77 |
78 | case 2:
79 | _context.next = 4;
80 | return (0, _effects.takeEvery)(REFRESH_COLLECTION, Collection.refreshCollection);
81 |
82 | case 4:
83 | _context.next = 6;
84 | return (0, _effects.takeEvery)(DELETE_COLLECTION_DOC, Collection.deleteDoc);
85 |
86 | case 6:
87 | _context.next = 8;
88 | return (0, _effects.takeEvery)(PUT_COLLECTION_DOC, Collection.putDoc);
89 |
90 | case 8:
91 | _context.next = 10;
92 | return (0, _effects.takeEvery)(POST_COLLECTION_DOC, Collection.postDoc);
93 |
94 | case 10:
95 | _context.next = 12;
96 | return (0, _effects.takeEvery)(FETCH_DOCUMENT, Document.fetchDoc);
97 |
98 | case 12:
99 | _context.next = 14;
100 | return (0, _effects.takeEvery)(PUT_DOCUMENT, Document.putDoc);
101 |
102 | case 14:
103 | _context.next = 16;
104 | return (0, _effects.takeEvery)(DELETE_DOCUMENT, Document.deleteDoc);
105 |
106 | case 16:
107 | _context.next = 18;
108 | return (0, _effects.takeEvery)(POST_DOCUMENT, Document.postDoc);
109 |
110 | case 18:
111 | _context.next = 20;
112 | return (0, _effects.takeEvery)(FETCH_CLOUD_CODE, _saga4.default);
113 |
114 | case 20:
115 | case 'end':
116 | return _context.stop();
117 | }
118 | }
119 | }, _marked, this);
120 | }
121 | /* eslint no-unused-vars: "off" */
122 | });
--------------------------------------------------------------------------------
/dist/Collection/workers/deleteDoc.js:
--------------------------------------------------------------------------------
1 | (function (global, factory) {
2 | if (typeof define === "function" && define.amd) {
3 | define(['exports', 'regenerator-runtime', 'redux-saga/effects', '../../server/httpWrapper', '../../types', '../../server/api', '../../server/Logger', '../actions'], factory);
4 | } else if (typeof exports !== "undefined") {
5 | factory(exports, require('regenerator-runtime'), require('redux-saga/effects'), require('../../server/httpWrapper'), require('../../types'), require('../../server/api'), require('../../server/Logger'), require('../actions'));
6 | } else {
7 | var mod = {
8 | exports: {}
9 | };
10 | factory(mod.exports, global.regeneratorRuntime, global.effects, global.httpWrapper, global.types, global.api, global.Logger, global.actions);
11 | global.deleteDoc = mod.exports;
12 | }
13 | })(this, function (exports, _regeneratorRuntime, _effects, _httpWrapper, _types, _api, _Logger, _actions) {
14 | 'use strict';
15 |
16 | Object.defineProperty(exports, "__esModule", {
17 | value: true
18 | });
19 | exports.default = deleteDoc;
20 |
21 | var _regeneratorRuntime2 = _interopRequireDefault(_regeneratorRuntime);
22 |
23 | var _httpWrapper2 = _interopRequireDefault(_httpWrapper);
24 |
25 | var _types2 = _interopRequireDefault(_types);
26 |
27 | var _api2 = _interopRequireDefault(_api);
28 |
29 | var _Logger2 = _interopRequireDefault(_Logger);
30 |
31 | function _interopRequireDefault(obj) {
32 | return obj && obj.__esModule ? obj : {
33 | default: obj
34 | };
35 | }
36 |
37 | var _marked = _regeneratorRuntime2.default.mark(deleteDoc);
38 |
39 | var START = _types2.default.DELETE_START;
40 | var FAILED = _types2.default.DELETE_FAILED;
41 | var FAILED_NETWORK = _types2.default.DELETE_FAILED_NETWORK;
42 | var FINISHED = _types2.default.DELETE_FINISHED;
43 |
44 | function deleteDoc(action) {
45 | var _action$payload, targetName, schemaName, objectId, autoRefresh, dispatchId, boomerang, _dispatchId, target, res, errType;
46 |
47 | return _regeneratorRuntime2.default.wrap(function deleteDoc$(_context) {
48 | while (1) {
49 | switch (_context.prev = _context.next) {
50 | case 0:
51 | _action$payload = action.payload, targetName = _action$payload.targetName, schemaName = _action$payload.schemaName, objectId = _action$payload.objectId, autoRefresh = _action$payload.autoRefresh, dispatchId = _action$payload.dispatchId, boomerang = _action$payload.boomerang;
52 | _dispatchId = dispatchId || '';
53 | target = targetName || schemaName;
54 | _context.next = 5;
55 | return (0, _effects.put)((0, _actions.setOnStore)({ targetName: target, status: START, error: null, loading: true, dispatchId: _dispatchId, boomerang: boomerang }));
56 |
57 | case 5:
58 | return _context.delegateYield((0, _httpWrapper2.default)(_api2.default.deleteObject, schemaName, objectId), 't0', 6);
59 |
60 | case 6:
61 | res = _context.t0;
62 |
63 | if (!res.error) {
64 | _context.next = 15;
65 | break;
66 | }
67 |
68 | errType = res.message === 'Network Error' ? FAILED_NETWORK : FAILED;
69 |
70 | console.error('deleteDoc err', schemaName, objectId, res.err);
71 | _context.next = 12;
72 | return (0, _effects.put)((0, _actions.setOnStore)({ targetName: target, status: errType, error: res, loading: false, dispatchId: _dispatchId, boomerang: boomerang }));
73 |
74 | case 12:
75 | _Logger2.default.onError('DELETE', action, errType, res);
76 | _context.next = 21;
77 | break;
78 |
79 | case 15:
80 | _context.next = 17;
81 | return (0, _effects.put)((0, _actions.setOnStore)({ targetName: target, status: FINISHED, error: null, loading: false, dispatchId: _dispatchId, boomerang: boomerang, info: { deleteDocId: objectId } }));
82 |
83 | case 17:
84 | _Logger2.default.onSuccess('DELETE', action, FINISHED, res);
85 |
86 | if (!autoRefresh) {
87 | _context.next = 21;
88 | break;
89 | }
90 |
91 | _context.next = 21;
92 | return (0, _effects.put)((0, _actions.refreshCollection)({ targetName: target }));
93 |
94 | case 21:
95 | case 'end':
96 | return _context.stop();
97 | }
98 | }
99 | }, _marked, this);
100 | }
101 | /* eslint no-unused-vars: "off" */
102 | });
--------------------------------------------------------------------------------
/dist/Collection/prop-types.js:
--------------------------------------------------------------------------------
1 | (function (global, factory) {
2 | if (typeof define === "function" && define.amd) {
3 | define(['exports', 'prop-types'], factory);
4 | } else if (typeof exports !== "undefined") {
5 | factory(exports, require('prop-types'));
6 | } else {
7 | var mod = {
8 | exports: {}
9 | };
10 | factory(mod.exports, global.propTypes);
11 | global.propTypes = mod.exports;
12 | }
13 | })(this, function (exports, _propTypes) {
14 | 'use strict';
15 |
16 | Object.defineProperty(exports, "__esModule", {
17 | value: true
18 | });
19 | exports.propTypes = exports.defaultProps = undefined;
20 |
21 | var _propTypes2 = _interopRequireDefault(_propTypes);
22 |
23 | function _interopRequireDefault(obj) {
24 | return obj && obj.__esModule ? obj : {
25 | default: obj
26 | };
27 | }
28 |
29 | var defaultProps = exports.defaultProps = {
30 | order: '-createdAt',
31 | autoRefresh: true,
32 | onFetchEnd: function onFetchEnd() {},
33 | onPostEnd: function onPostEnd() {},
34 | onPutEnd: function onPutEnd() {},
35 | onDeleteEnd: function onDeleteEnd() {},
36 | fetchPropsKey: 'fetchProps'
37 | };
38 |
39 | var propTypes = exports.propTypes = {
40 | schemaName: _propTypes2.default.string.isRequired,
41 | /**
42 | * targetName
43 | * place to set server response - store.collections[targetName]
44 | * optional- if empty then target is schemaName
45 | */
46 | targetName: _propTypes2.default.string,
47 | /**
48 | * query
49 | * object with parameters that pass on fetch
50 | * example {title:'59D454c'}
51 | */
52 | query: _propTypes2.default.object,
53 | /**
54 | * limit
55 | * Limit the number of objects returned by the query
56 | */
57 | limit: _propTypes2.default.number,
58 | /**
59 | * skip
60 | * Use with limit to paginate through results
61 | */
62 | skip: _propTypes2.default.number,
63 | /**
64 | * enableCount
65 | * return the amount of results in data base
66 | */
67 | enableCount: _propTypes2.default.bool,
68 | /**
69 | * keys
70 | * example: 'title,body'
71 | * Restrict the fields returned by the query
72 | */
73 | keys: _propTypes2.default.string,
74 | /**
75 | * include
76 | * example: 'post,categories'
77 | * Use on Pointer columns to return the full object
78 | */
79 | include: _propTypes2.default.string,
80 | /**
81 | * order
82 | * default is '-createdAt'
83 | * Specify a field to sort by
84 | */
85 | order: _propTypes2.default.string,
86 | /**
87 | * onFetchEnd
88 | * call back after fetch end
89 | * onFetchEnd(error, {data, queryStatus})
90 | */
91 | onFetchEnd: _propTypes2.default.func,
92 | /**
93 | * onPostEnd
94 | * call back after fetch end
95 | * onPostEnd(error, {data, queryStatus})
96 | */
97 | onPostEnd: _propTypes2.default.func,
98 | /**
99 | * onPutEnd
100 | * call back after fetch end
101 | * onPutEnd(error, {data, queryStatus})
102 | */
103 | onPutEnd: _propTypes2.default.func,
104 | /**
105 | * onDeleteEnd
106 | * call back after fetch end
107 | * onDeleteEnd(error, {data, queryStatus})
108 | */
109 | onDeleteEnd: _propTypes2.default.func,
110 | /**
111 | * leaveClean
112 | * we remove data from store on componentWillUnmount
113 | * default is true
114 | */
115 | leaveClean: _propTypes2.default.bool,
116 | /**
117 | * localFirst
118 | * fetch data from server only if we can found your data on local store
119 | */
120 | localFirst: _propTypes2.default.bool,
121 | /**
122 | * localOnly
123 | * never fetch data from store
124 | */
125 | localOnly: _propTypes2.default.bool,
126 | /**
127 | * autoRefresh
128 | * default true
129 | * Get data after each create/update/delete doc
130 | */
131 | autoRefresh: _propTypes2.default.bool,
132 | /**
133 | * render props - pass function that get props and return component.
134 | * (error, props) =>
135 | * props = {
136 | * data,
137 | isLoading,
138 | queryStatus,
139 | info,
140 | refreshData,
141 | deleteDocument,
142 | putDocument,
143 | postDocument
144 | }
145 | */
146 | render: _propTypes2.default.func,
147 | /**
148 | * dataHandler
149 | * pass function that manipulate data before set to store
150 | */
151 | dataHandler: _propTypes2.default.func
152 | };
153 | });
--------------------------------------------------------------------------------
/src/Collection/collectionActions.js:
--------------------------------------------------------------------------------
1 | import * as actions from './actions';
2 | import {dispatch} from '../index'
3 |
4 |
5 | /**
6 | * Dispatch action to get collection data from parse server
7 | * @param {object} payload
8 | * @param {string} payload.schemaName db schemaName
9 | * @param {string} payload.targetName key to store response inside redux store
10 | * if targetName empty then we use schemaName as targetName
11 | * @param {object} payload.query http://docs.parseplatform.org/rest/guide/#queries
12 | * @param {number} payload.perPage number of documents to include in each query
13 | * @param {string} payload.page number of pages to skip
14 | * @param {string} payload.include pointer to include
15 | * @param {string} payload.keys keys to include
16 | * @param {boolean} payload.enableCount set true to get count objects in the collection
17 | * @param {object} payload.logger pass to your Logger relevant info
18 | * @param {function} payload.dataHandler pass function that manipulate data before set to store
19 | * @param {function} payload.dispatchId optional, you can pass some unique key to help you follow specific query status
20 | * @param {function} payload.boomerang optional, you can pass some data that help you manage your things with this async query
21 | */
22 | export const fetchData = (payload) => {
23 | dispatch(actions.fetchData(payload))
24 | }
25 |
26 | /**
27 | * Dispatch action to clean all redux.parse.collections
28 | */
29 | export const cleanCollections = ()=> {
30 | dispatch(actions.cleanCollections())
31 | }
32 |
33 | /**
34 | * Dispatch action to delete document from collection
35 | * @param {object} payload
36 | * @param {string} payload.schemaName db schemaName
37 | * @param {string} payload.targetName key to store response inside redux store
38 | * @param {string} payload.objectId document id
39 | * @param {boolean} payload.autoRefresh set to to refresh collection data
40 | * @param {object} payload.logger pass to your Logger relevant info
41 | */
42 | export const deleteDoc = (payload)=> {
43 | dispatch(actions.deleteDoc(payload))
44 | }
45 |
46 | /**
47 | * Dispatch action to create a new document in collection
48 | * @param {object} payload
49 | * @param {string} payload.schemaName db schemaName
50 | * @param {string} payload.targetName key to store response inside redux store
51 | * @param {object} payload.data new doucment data
52 | * @param {boolean} payload.autoRefresh set to to refresh collection data
53 | * @param {object} payload.logger pass to your Logger relevant info
54 | * @param {boolean} payload.filesIncluded set true if your data include file to upload
55 | * @param {function} payload.fileValueHandler pass function that will get the new file URL if you didn't want to save it as File object
56 | * @param {function} payload.dispatchId optional, you can pass some unique key to help you follow specific query status
57 | */
58 | export const postDoc = (payload)=> {
59 | dispatch(actions.postDoc(payload))
60 | }
61 |
62 | /**
63 | * Dispatch action to create a new document in collection
64 | * @param {object} payload
65 | * @param {string} payload.schemaName db schemaName
66 | * @param {string} payload.targetName key to store response inside redux store
67 | * @param {string} payload.objectId document id
68 | * @param {object} payload.data data to update in the doucment
69 | * @param {boolean} payload.autoRefresh set to to refresh collection data
70 | * @param {object} payload.logger pass to your Logger relevant info
71 | * @param {boolean} payload.filesIncluded set true if your data include file to upload
72 | * @param {function} payload.fileValueHandler pass function that will get the new file URL if you didn't want to save it as File object
73 | * @param {function} payload.dispatchId optional, you can pass some unique key to help you follow specific query status
74 | * @param {function} payload.boomerang optional, you can pass some data that help you manage your things with this async query
75 | */
76 | export const putDoc = (payload)=> {
77 | dispatch(actions.putDoc(payload))
78 | }
79 |
80 | /**
81 | * Dispatch action to refresh collection data by targetName
82 | * this will keep the same parameters like the last fetchData
83 | * @param {object} payload
84 | * @param {string} payload.targetName
85 | */
86 | export const refreshCollection = (payload)=> {
87 | dispatch(actions.refreshCollection(payload))
88 | }
89 |
90 | /**
91 | * Dispatch action to clean collection by targetName
92 | * @param {object} payload
93 | * @param {string} payload.targetName
94 | *
95 | */
96 | export const cleanData = (payload)=> {
97 | dispatch(actions.cleanData(payload))
98 | }
--------------------------------------------------------------------------------
/dist/CloudCode/saga.js:
--------------------------------------------------------------------------------
1 | (function (global, factory) {
2 | if (typeof define === "function" && define.amd) {
3 | define(['exports', 'regenerator-runtime', 'redux-saga/effects', '../server/httpWrapper', '../types', '../server/api', '../helpers', './actions', '../server/Logger'], factory);
4 | } else if (typeof exports !== "undefined") {
5 | factory(exports, require('regenerator-runtime'), require('redux-saga/effects'), require('../server/httpWrapper'), require('../types'), require('../server/api'), require('../helpers'), require('./actions'), require('../server/Logger'));
6 | } else {
7 | var mod = {
8 | exports: {}
9 | };
10 | factory(mod.exports, global.regeneratorRuntime, global.effects, global.httpWrapper, global.types, global.api, global.helpers, global.actions, global.Logger);
11 | global.saga = mod.exports;
12 | }
13 | })(this, function (exports, _regeneratorRuntime, _effects, _httpWrapper, _types, _api, _helpers, _actions, _Logger) {
14 | 'use strict';
15 |
16 | Object.defineProperty(exports, "__esModule", {
17 | value: true
18 | });
19 | exports.default = fetchCloudCode;
20 |
21 | var _regeneratorRuntime2 = _interopRequireDefault(_regeneratorRuntime);
22 |
23 | var _httpWrapper2 = _interopRequireDefault(_httpWrapper);
24 |
25 | var _types2 = _interopRequireDefault(_types);
26 |
27 | var _api2 = _interopRequireDefault(_api);
28 |
29 | var _Logger2 = _interopRequireDefault(_Logger);
30 |
31 | function _interopRequireDefault(obj) {
32 | return obj && obj.__esModule ? obj : {
33 | default: obj
34 | };
35 | }
36 |
37 | var _marked = _regeneratorRuntime2.default.mark(fetchCloudCode);
38 |
39 | var START = _types2.default.FETCH_START;
40 | var FAILED = _types2.default.FETCH_FAILED;
41 | var FAILED_NETWORK = _types2.default.FETCH_FAILED_NETWORK;
42 | var FINISHED = _types2.default.FETCH_FINISHED;
43 |
44 | function fetchCloudCode(action) {
45 | var _action$payload, functionName, targetName, params, digToData, dataHandler, dispatchId, _digToData, target, _dispatchId, res, errType, _data, data;
46 |
47 | return _regeneratorRuntime2.default.wrap(function fetchCloudCode$(_context) {
48 | while (1) {
49 | switch (_context.prev = _context.next) {
50 | case 0:
51 | _action$payload = action.payload, functionName = _action$payload.functionName, targetName = _action$payload.targetName, params = _action$payload.params, digToData = _action$payload.digToData, dataHandler = _action$payload.dataHandler, dispatchId = _action$payload.dispatchId;
52 | _digToData = digToData || 'data.result';
53 | target = targetName || functionName;
54 | _dispatchId = dispatchId || '';
55 | _context.next = 6;
56 | return (0, _effects.put)((0, _actions.setOnStore)({ targetName: target, status: START, error: null, loading: true, dispatchId: _dispatchId }));
57 |
58 | case 6:
59 | _context.next = 8;
60 | return (0, _httpWrapper2.default)(_api2.default.getCloudFunction, functionName, params);
61 |
62 | case 8:
63 | res = _context.sent;
64 |
65 | if (!(res.error || (0, _helpers.dig)(res, 'response.data.error'))) {
66 | _context.next = 17;
67 | break;
68 | }
69 |
70 | errType = res.message === 'Network Error' ? FAILED_NETWORK : FAILED;
71 | _context.next = 13;
72 | return (0, _effects.put)((0, _actions.setOnStore)({ targetName: target, status: errType, error: res, loading: false, dispatchId: _dispatchId }));
73 |
74 | case 13:
75 | console.error('getCloudFunction err: ', functionName, res.error);
76 | _Logger2.default.onError('CLOUD_CODE', action, errType, res);
77 | _context.next = 22;
78 | break;
79 |
80 | case 17:
81 | _data = (0, _helpers.dig)(res, _digToData);
82 | data = dataHandler ? dataHandler(_data) : _data;
83 | _context.next = 21;
84 | return (0, _effects.put)((0, _actions.setOnStore)({
85 | targetName: target,
86 | status: FINISHED,
87 | error: null,
88 | data: data,
89 | info: {
90 | params: params,
91 | timestamp: Date.now()
92 | },
93 | loading: false,
94 | dispatchId: _dispatchId
95 | }));
96 |
97 | case 21:
98 | _Logger2.default.onSuccess('CLOUD_CODE', action, FINISHED, res);
99 |
100 | case 22:
101 | case 'end':
102 | return _context.stop();
103 | }
104 | }
105 | }, _marked, this);
106 | }
107 | /* eslint no-unused-vars: "off" */
108 | });
--------------------------------------------------------------------------------
/dist/Document/actions.js:
--------------------------------------------------------------------------------
1 | (function (global, factory) {
2 | if (typeof define === "function" && define.amd) {
3 | define(['exports', '../types'], factory);
4 | } else if (typeof exports !== "undefined") {
5 | factory(exports, require('../types'));
6 | } else {
7 | var mod = {
8 | exports: {}
9 | };
10 | factory(mod.exports, global.types);
11 | global.actions = mod.exports;
12 | }
13 | })(this, function (exports, _types) {
14 | 'use strict';
15 |
16 | Object.defineProperty(exports, "__esModule", {
17 | value: true
18 | });
19 | exports.cleanDocuments = exports.clearDocuments = exports.cleanData = exports.deleteDoc = exports.postDoc = exports.putDoc = exports.updateFields = exports.updateField = exports.setOnStore = exports.fetchData = undefined;
20 |
21 | var _types2 = _interopRequireDefault(_types);
22 |
23 | function _interopRequireDefault(obj) {
24 | return obj && obj.__esModule ? obj : {
25 | default: obj
26 | };
27 | }
28 |
29 | var FETCH_DOCUMENT = _types2.default.FETCH_DOCUMENT,
30 | SET_DOCUMENT = _types2.default.SET_DOCUMENT,
31 | PUT_DOCUMENT = _types2.default.PUT_DOCUMENT,
32 | POST_DOCUMENT = _types2.default.POST_DOCUMENT,
33 | DELETE_DOCUMENT = _types2.default.DELETE_DOCUMENT,
34 | CLEAN_DOCUMENT = _types2.default.CLEAN_DOCUMENT,
35 | CLEAN_ALL_DOCUMENTS = _types2.default.CLEAN_ALL_DOCUMENTS,
36 | UPDATE_DOC_FIELD = _types2.default.UPDATE_DOC_FIELD,
37 | UPDATE_DOC_FIELDS = _types2.default.UPDATE_DOC_FIELDS;
38 |
39 |
40 | /**
41 | * fetchData
42 | * @param {object} payload {targetName, schemaName, objectId, include, keys}
43 | * @param {string} payload.targetName
44 | * @param {string} payload.schemaName
45 | * @param {string} payload.objectId
46 | * @param {string} payload.include
47 | * @param {string} payload.keys,
48 | * @param {function} payload.dataHandler,
49 | * @param {function} payload.dispatchId optional, you can pass some unique key to help you follow specific query status
50 | * @param {function} payload.boomerang optional, you can pass some data that help you manage your things with this async query
51 | *
52 | */
53 | var fetchData = exports.fetchData = function fetchData(payload) {
54 | return {
55 | type: FETCH_DOCUMENT,
56 | payload: payload
57 | };
58 | };
59 | /**
60 | * setOnStore
61 | * @param {*} payload {targetName, status, data, info, error}
62 | * @param {*} data
63 | */
64 | var setOnStore = exports.setOnStore = function setOnStore(payload) {
65 | return {
66 | type: SET_DOCUMENT,
67 | payload: payload
68 | };
69 | };
70 |
71 | /**
72 | * updateField
73 | * @param {*} payload {targetName, key, value}
74 | */
75 | var updateField = exports.updateField = function updateField(payload) {
76 | return {
77 | type: UPDATE_DOC_FIELD,
78 | payload: payload
79 | };
80 | };
81 |
82 | /**
83 | * updateFields
84 | * @param {*} payload {targetName, key, value}
85 | */
86 | var updateFields = exports.updateFields = function updateFields(payload) {
87 | return {
88 | type: UPDATE_DOC_FIELDS,
89 | payload: payload
90 | };
91 | };
92 |
93 | /**
94 | * putDoc
95 | * @param {*} payload {targetName, schemaName, objectId, data, filesIncluded, fileValueHandler, dispatchId, boomerang}
96 | */
97 | var putDoc = exports.putDoc = function putDoc(payload) {
98 | return {
99 | type: PUT_DOCUMENT,
100 | payload: payload
101 | };
102 | };
103 | /**
104 | * postDoc
105 | * @param {*} payload {targetName, schemaName, data, filesIncluded, fileValueHandler, dispatchId, boomerang}
106 | */
107 | var postDoc = exports.postDoc = function postDoc(payload) {
108 | return {
109 | type: POST_DOCUMENT,
110 | payload: payload
111 | };
112 | };
113 | /**
114 | * deleteDoc
115 | * @param {*} payload {targetName, schemaName,objectId, dispatchId, boomerang}
116 | */
117 | var deleteDoc = exports.deleteDoc = function deleteDoc(payload) {
118 | return {
119 | type: DELETE_DOCUMENT,
120 | payload: payload
121 | };
122 | };
123 |
124 | /**
125 | * cleanData
126 | * @param {*} payload {targetName}
127 | */
128 | var cleanData = exports.cleanData = function cleanData(payload) {
129 | return {
130 | type: CLEAN_DOCUMENT,
131 | payload: payload
132 | };
133 | };
134 | var clearDocuments = exports.clearDocuments = function clearDocuments() {
135 | return {
136 | type: CLEAN_ALL_DOCUMENTS
137 | };
138 | };
139 | var cleanDocuments = exports.cleanDocuments = function cleanDocuments() {
140 | return {
141 | type: CLEAN_ALL_DOCUMENTS
142 | };
143 | };
144 | });
--------------------------------------------------------------------------------
/dist/Document/workers/fetchDoc.js:
--------------------------------------------------------------------------------
1 | (function (global, factory) {
2 | if (typeof define === "function" && define.amd) {
3 | define(['exports', 'regenerator-runtime', 'redux-saga/effects', '../../server/httpWrapper', '../../types', '../../server/api', '../actions', '../../server/Logger'], factory);
4 | } else if (typeof exports !== "undefined") {
5 | factory(exports, require('regenerator-runtime'), require('redux-saga/effects'), require('../../server/httpWrapper'), require('../../types'), require('../../server/api'), require('../actions'), require('../../server/Logger'));
6 | } else {
7 | var mod = {
8 | exports: {}
9 | };
10 | factory(mod.exports, global.regeneratorRuntime, global.effects, global.httpWrapper, global.types, global.api, global.actions, global.Logger);
11 | global.fetchDoc = mod.exports;
12 | }
13 | })(this, function (exports, _regeneratorRuntime, _effects, _httpWrapper, _types, _api, _actions, _Logger) {
14 | 'use strict';
15 |
16 | Object.defineProperty(exports, "__esModule", {
17 | value: true
18 | });
19 | exports.default = fetchDoc;
20 |
21 | var _regeneratorRuntime2 = _interopRequireDefault(_regeneratorRuntime);
22 |
23 | var _httpWrapper2 = _interopRequireDefault(_httpWrapper);
24 |
25 | var _types2 = _interopRequireDefault(_types);
26 |
27 | var _api2 = _interopRequireDefault(_api);
28 |
29 | var _Logger2 = _interopRequireDefault(_Logger);
30 |
31 | function _interopRequireDefault(obj) {
32 | return obj && obj.__esModule ? obj : {
33 | default: obj
34 | };
35 | }
36 |
37 | var _marked = _regeneratorRuntime2.default.mark(fetchDoc);
38 |
39 | var START = _types2.default.FETCH_START;
40 | var FAILED = _types2.default.FETCH_FAILED;
41 | var FAILED_NETWORK = _types2.default.FETCH_FAILED_NETWORK;
42 | var FINISHED = _types2.default.FETCH_FINISHED;
43 |
44 | function fetchDoc(action) {
45 | var _action$payload, targetName, schemaName, objectId, include, keys, dataHandler, dispatchId, boomerang, target, _dispatchId, res, errType, info, _data, data;
46 |
47 | return _regeneratorRuntime2.default.wrap(function fetchDoc$(_context) {
48 | while (1) {
49 | switch (_context.prev = _context.next) {
50 | case 0:
51 | _action$payload = action.payload, targetName = _action$payload.targetName, schemaName = _action$payload.schemaName, objectId = _action$payload.objectId, include = _action$payload.include, keys = _action$payload.keys, dataHandler = _action$payload.dataHandler, dispatchId = _action$payload.dispatchId, boomerang = _action$payload.boomerang;
52 | target = targetName || objectId;
53 | _dispatchId = dispatchId || '';
54 | _context.next = 5;
55 | return (0, _effects.put)((0, _actions.setOnStore)({ targetName: target, status: START, error: null, loading: true, dispatchId: _dispatchId, boomerang: boomerang }));
56 |
57 | case 5:
58 | return _context.delegateYield((0, _httpWrapper2.default)(_api2.default.getObjectById, schemaName, objectId, keys, include), 't0', 6);
59 |
60 | case 6:
61 | res = _context.t0;
62 |
63 | if (!res.error) {
64 | _context.next = 15;
65 | break;
66 | }
67 |
68 | errType = res.message === 'Network Error' ? FAILED_NETWORK : FAILED;
69 |
70 | console.error('get document err', objectId, res.error);
71 | _context.next = 12;
72 | return (0, _effects.put)((0, _actions.setOnStore)({ targetName: target, status: errType, error: res, loading: false, dispatchId: _dispatchId, boomerang: boomerang }));
73 |
74 | case 12:
75 | _Logger2.default.onError('GET', action, errType, res);
76 | _context.next = 21;
77 | break;
78 |
79 | case 15:
80 | info = {
81 | timestamp: Date.now(),
82 | keys: keys,
83 | include: include,
84 | schemaName: schemaName
85 | };
86 | _data = res.data;
87 | data = dataHandler ? dataHandler(_data) : _data;
88 | _context.next = 20;
89 | return (0, _effects.put)((0, _actions.setOnStore)({
90 | targetName: target,
91 | status: FINISHED,
92 | data: data,
93 | info: info,
94 | error: null,
95 | loading: false,
96 | dispatchId: _dispatchId,
97 | boomerang: boomerang
98 | }));
99 |
100 | case 20:
101 | _Logger2.default.onSuccess('GET', action, FINISHED, res);
102 |
103 | case 21:
104 | case 'end':
105 | return _context.stop();
106 | }
107 | }
108 | }, _marked, this);
109 | }
110 | /* eslint no-unused-vars: "off" */
111 | });
--------------------------------------------------------------------------------
/dist/Document/prop-types.js:
--------------------------------------------------------------------------------
1 | (function (global, factory) {
2 | if (typeof define === "function" && define.amd) {
3 | define(['exports', 'prop-types'], factory);
4 | } else if (typeof exports !== "undefined") {
5 | factory(exports, require('prop-types'));
6 | } else {
7 | var mod = {
8 | exports: {}
9 | };
10 | factory(mod.exports, global.propTypes);
11 | global.propTypes = mod.exports;
12 | }
13 | })(this, function (exports, _propTypes) {
14 | 'use strict';
15 |
16 | Object.defineProperty(exports, "__esModule", {
17 | value: true
18 | });
19 | exports.propTypes = exports.defaultProps = undefined;
20 |
21 | var _propTypes2 = _interopRequireDefault(_propTypes);
22 |
23 | function _interopRequireDefault(obj) {
24 | return obj && obj.__esModule ? obj : {
25 | default: obj
26 | };
27 | }
28 |
29 | var defaultProps = exports.defaultProps = {
30 | order: '-createdAt',
31 | autoRefresh: false,
32 | onFetchEnd: function onFetchEnd() {},
33 | onPostEnd: function onPostEnd() {},
34 | onPutEnd: function onPutEnd() {},
35 | onDeleteEnd: function onDeleteEnd() {},
36 | fetchPropsKey: 'fetchProps'
37 | };
38 |
39 | var propTypes = exports.propTypes = {
40 | schemaName: _propTypes2.default.string.isRequired,
41 | /**
42 | * targetName
43 | * place to set server response - store.documents[targetName]
44 | * if empty then target is objectId but if
45 | * objectId is empty then we create uniqueId for you
46 | */
47 | targetName: _propTypes2.default.string,
48 | /**
49 | * objectId
50 | * optional - if empty then we didn't run fetch Data
51 | */
52 | objectId: _propTypes2.default.string,
53 | /**
54 | * keys
55 | * example: 'title,body'
56 | * Restrict the fields returned by the query
57 | */
58 | keys: _propTypes2.default.string,
59 | /**
60 | * include
61 | * example: 'post,categories'
62 | * Use on Pointer columns to return the full object
63 | */
64 | include: _propTypes2.default.string,
65 | /**
66 | * onFetchEnd
67 | * call back after fetch end
68 | * onFetchEnd(error, {data, queryStatus})
69 | */
70 | onFetchEnd: _propTypes2.default.func,
71 | /**
72 | * onPostEnd
73 | * call back after fetch end
74 | * onPostEnd(error, {data, queryStatus})
75 | */
76 | onPostEnd: _propTypes2.default.func,
77 | /**
78 | * onPutEnd
79 | * call back after fetch end
80 | * onPutEnd(error, {data, queryStatus})
81 | */
82 | onPutEnd: _propTypes2.default.func,
83 | /**
84 | * onDeleteEnd
85 | * call back after fetch end
86 | * onDeleteEnd(error, {data, queryStatus})
87 | */
88 | onDeleteEnd: _propTypes2.default.func,
89 | /**
90 | * leaveClean
91 | * we remove data from store on componentWillUnmount
92 | * default is true
93 | */
94 | leaveClean: _propTypes2.default.bool,
95 | /**
96 | * localFirst
97 | * fetch data from server only if we can found your data on local store
98 | */
99 | localFirst: _propTypes2.default.bool,
100 | /**
101 | * localOnly
102 | * never fetch data from store
103 | */
104 | localOnly: _propTypes2.default.bool,
105 | /**
106 | * autoRefresh
107 | * default false
108 | * Get data after each create/update/delete doc
109 | */
110 | autoRefresh: _propTypes2.default.bool,
111 | /**
112 | * render - pass function that get props and return component.
113 | * Exmple of use:
114 | *
119 | */
120 | render: _propTypes2.default.func,
121 | /**
122 | * example:
123 | *
128 | * all the props from FetchDocument will wrap inside props.fetch
129 | */
130 | component: _propTypes2.default.any,
131 | /**
132 | * dataHandler
133 | * pass function that manipulate data before set to store
134 | */
135 | dataHandler: _propTypes2.default.func
136 | /*
137 | * What you going to get Fetch:
138 | * First argument - error - the error from serve.
139 | * Second argument - {
140 | * data : {...}, // The data from server response
141 | isLoading: bollean, // True when loading
142 | status : string, // look at the status list
143 | info: {...}, // extra helpful data of the request
144 | refresh, // function that refresh the data from server
145 | deleteDoc, // function
146 | put, // update your document
147 | post, // create new document
148 | ...this.props // all you other props that you want to pass
149 | }
150 | */
151 | };
152 | });
--------------------------------------------------------------------------------
/dist/Collection/workers/fetchCollection.js:
--------------------------------------------------------------------------------
1 | (function (global, factory) {
2 | if (typeof define === "function" && define.amd) {
3 | define(['exports', 'regenerator-runtime', 'redux-saga/effects', '../../server/httpWrapper', '../../types', '../../server/api', '../actions', '../../helpers', '../../server/Logger'], factory);
4 | } else if (typeof exports !== "undefined") {
5 | factory(exports, require('regenerator-runtime'), require('redux-saga/effects'), require('../../server/httpWrapper'), require('../../types'), require('../../server/api'), require('../actions'), require('../../helpers'), require('../../server/Logger'));
6 | } else {
7 | var mod = {
8 | exports: {}
9 | };
10 | factory(mod.exports, global.regeneratorRuntime, global.effects, global.httpWrapper, global.types, global.api, global.actions, global.helpers, global.Logger);
11 | global.fetchCollection = mod.exports;
12 | }
13 | })(this, function (exports, _regeneratorRuntime, _effects, _httpWrapper, _types, _api, _actions, _helpers, _Logger) {
14 | 'use strict';
15 |
16 | Object.defineProperty(exports, "__esModule", {
17 | value: true
18 | });
19 | exports.default = fetchCollection;
20 |
21 | var _regeneratorRuntime2 = _interopRequireDefault(_regeneratorRuntime);
22 |
23 | var _httpWrapper2 = _interopRequireDefault(_httpWrapper);
24 |
25 | var _types2 = _interopRequireDefault(_types);
26 |
27 | var _api2 = _interopRequireDefault(_api);
28 |
29 | var _Logger2 = _interopRequireDefault(_Logger);
30 |
31 | function _interopRequireDefault(obj) {
32 | return obj && obj.__esModule ? obj : {
33 | default: obj
34 | };
35 | }
36 |
37 | var _marked = _regeneratorRuntime2.default.mark(fetchCollection);
38 |
39 | var START = _types2.default.FETCH_START;
40 | var FAILED = _types2.default.FETCH_FAILED;
41 | var FAILED_NETWORK = _types2.default.FETCH_FAILED_NETWORK;
42 | var FINISHED = _types2.default.FETCH_FINISHED;
43 |
44 | function fetchCollection(action) {
45 | var _action$payload, targetName, schemaName, query, skip, page, enableCount, keys, include, order, limit, dataHandler, dispatchId, boomerang, target, _dispatchId, res, errType, _data, data, info;
46 |
47 | return _regeneratorRuntime2.default.wrap(function fetchCollection$(_context) {
48 | while (1) {
49 | switch (_context.prev = _context.next) {
50 | case 0:
51 | _action$payload = action.payload, targetName = _action$payload.targetName, schemaName = _action$payload.schemaName, query = _action$payload.query, skip = _action$payload.skip, page = _action$payload.page, enableCount = _action$payload.enableCount, keys = _action$payload.keys, include = _action$payload.include, order = _action$payload.order, limit = _action$payload.limit, dataHandler = _action$payload.dataHandler, dispatchId = _action$payload.dispatchId, boomerang = _action$payload.boomerang;
52 | target = targetName || schemaName;
53 | _dispatchId = dispatchId || '';
54 | _context.next = 5;
55 | return (0, _effects.put)((0, _actions.setOnStore)({ targetName: target, status: START, error: null, loading: true, dispatchId: _dispatchId, boomerang: boomerang }));
56 |
57 | case 5:
58 | return _context.delegateYield((0, _httpWrapper2.default)(_api2.default.query, schemaName, query, limit, skip, enableCount, keys, include, order), 't0', 6);
59 |
60 | case 6:
61 | res = _context.t0;
62 |
63 | if (!res.error) {
64 | _context.next = 15;
65 | break;
66 | }
67 |
68 | errType = res.message === 'Network Error' ? FAILED_NETWORK : FAILED;
69 |
70 | console.error('fetchCollection err: ', schemaName, res.error);
71 | _context.next = 12;
72 | return (0, _effects.put)((0, _actions.setOnStore)({ targetName: target, status: errType, error: res, loading: false, dispatchId: _dispatchId, boomerang: boomerang }));
73 |
74 | case 12:
75 | _Logger2.default.onError('GET', action, errType, res);
76 | _context.next = 21;
77 | break;
78 |
79 | case 15:
80 | _data = (0, _helpers.dig)(res, 'data.results');
81 | data = dataHandler ? dataHandler(_data) : _data;
82 | info = {
83 | schemaName: schemaName,
84 | query: query,
85 | skip: skip,
86 | page: page,
87 | enableCount: enableCount,
88 | keys: keys,
89 | include: include,
90 | order: order,
91 | limit: limit,
92 | count: res.data.count,
93 | timestamp: Date.now()
94 | };
95 | _context.next = 20;
96 | return (0, _effects.put)((0, _actions.setOnStore)({
97 | targetName: target,
98 | status: FINISHED,
99 | error: null,
100 | data: data,
101 | info: info,
102 | loading: false,
103 | dispatchId: _dispatchId,
104 | boomerang: boomerang
105 | }));
106 |
107 | case 20:
108 | _Logger2.default.onSuccess('GET', action, FINISHED, res);
109 |
110 | case 21:
111 | case 'end':
112 | return _context.stop();
113 | }
114 | }
115 | }, _marked, this);
116 | }
117 | /* eslint no-unused-vars: "off" */
118 | });
--------------------------------------------------------------------------------
/dist/server/util/uploadFiles.js:
--------------------------------------------------------------------------------
1 | (function (global, factory) {
2 | if (typeof define === "function" && define.amd) {
3 | define(['exports', 'regenerator-runtime', '../api', 'redux-saga/effects'], factory);
4 | } else if (typeof exports !== "undefined") {
5 | factory(exports, require('regenerator-runtime'), require('../api'), require('redux-saga/effects'));
6 | } else {
7 | var mod = {
8 | exports: {}
9 | };
10 | factory(mod.exports, global.regeneratorRuntime, global.api, global.effects);
11 | global.uploadFiles = mod.exports;
12 | }
13 | })(this, function (exports, _regeneratorRuntime, _api, _effects) {
14 | 'use strict';
15 |
16 | Object.defineProperty(exports, "__esModule", {
17 | value: true
18 | });
19 | exports.setRNFetchBlob = undefined;
20 | exports.default = uploadFilesFromData;
21 |
22 | var _regeneratorRuntime2 = _interopRequireDefault(_regeneratorRuntime);
23 |
24 | var _api2 = _interopRequireDefault(_api);
25 |
26 | function _interopRequireDefault(obj) {
27 | return obj && obj.__esModule ? obj : {
28 | default: obj
29 | };
30 | }
31 |
32 | var _marked = _regeneratorRuntime2.default.mark(uploadFilesFromData);
33 |
34 | var RNFetchBlob = null;
35 |
36 | var setRNFetchBlob = exports.setRNFetchBlob = function setRNFetchBlob(res) {
37 | RNFetchBlob = res;
38 | };
39 | var browserFileUnloader = _regeneratorRuntime2.default.mark(function _callee(file) {
40 | return _regeneratorRuntime2.default.wrap(function _callee$(_context) {
41 | while (1) {
42 | switch (_context.prev = _context.next) {
43 | case 0:
44 | _context.next = 2;
45 | return (0, _effects.call)(_api2.default.uploadFile, file);
46 |
47 | case 2:
48 | return _context.abrupt('return', _context.sent);
49 |
50 | case 3:
51 | case 'end':
52 | return _context.stop();
53 | }
54 | }
55 | }, _callee, this);
56 | });
57 | var nativeFileUnloader = _regeneratorRuntime2.default.mark(function _callee2(file) {
58 | return _regeneratorRuntime2.default.wrap(function _callee2$(_context2) {
59 | while (1) {
60 | switch (_context2.prev = _context2.next) {
61 | case 0:
62 | if (RNFetchBlob) {
63 | _context2.next = 4;
64 | break;
65 | }
66 |
67 | throw 'react parse need instance of RNFetchBlob, please install rn-fetch-blo and use setRNFetchBlob from react-parse';
68 |
69 | case 4:
70 | _context2.next = 6;
71 | return (0, _effects.call)(_api2.default.uploadFileFromReactNativeStorage, RNFetchBlob, file);
72 |
73 | case 6:
74 | return _context2.abrupt('return', _context2.sent);
75 |
76 | case 7:
77 | case 'end':
78 | return _context2.stop();
79 | }
80 | }
81 | }, _callee2, this);
82 | });
83 |
84 | function uploadFilesFromData(data, fileValueHandler) {
85 | var isReactNative, k, fileRes;
86 | return _regeneratorRuntime2.default.wrap(function uploadFilesFromData$(_context3) {
87 | while (1) {
88 | switch (_context3.prev = _context3.next) {
89 | case 0:
90 | if (data) {
91 | _context3.next = 2;
92 | break;
93 | }
94 |
95 | return _context3.abrupt('return');
96 |
97 | case 2:
98 | isReactNative = typeof navigator != 'undefined' && navigator.product == 'ReactNative';
99 | _context3.t0 = _regeneratorRuntime2.default.keys(data);
100 |
101 | case 4:
102 | if ((_context3.t1 = _context3.t0()).done) {
103 | _context3.next = 26;
104 | break;
105 | }
106 |
107 | k = _context3.t1.value;
108 |
109 | if (!(data[k] instanceof File)) {
110 | _context3.next = 24;
111 | break;
112 | }
113 |
114 | fileRes = void 0;
115 | _context3.prev = 8;
116 |
117 | if (!isReactNative) {
118 | _context3.next = 15;
119 | break;
120 | }
121 |
122 | _context3.next = 12;
123 | return nativeFileUnloader(data[k]);
124 |
125 | case 12:
126 | fileRes = _context3.sent;
127 | _context3.next = 18;
128 | break;
129 |
130 | case 15:
131 | _context3.next = 17;
132 | return browserFileUnloader(data[k]);
133 |
134 | case 17:
135 | fileRes = _context3.sent;
136 |
137 | case 18:
138 | _context3.next = 23;
139 | break;
140 |
141 | case 20:
142 | _context3.prev = 20;
143 | _context3.t2 = _context3['catch'](8);
144 | throw _context3.t2;
145 |
146 | case 23:
147 | data[k] = fileValueHandler ? fileValueHandler(fileRes) : {
148 | name: isReactNative ? fileRes.name : fileRes.data.name,
149 | url: isReactNative ? fileRes.url : fileRes.data.url,
150 | __type: 'File'
151 | };
152 |
153 | case 24:
154 | _context3.next = 4;
155 | break;
156 |
157 | case 26:
158 | return _context3.abrupt('return', data);
159 |
160 | case 27:
161 | case 'end':
162 | return _context3.stop();
163 | }
164 | }
165 | }, _marked, this, [[8, 20]]);
166 | }
167 | });
--------------------------------------------------------------------------------
/dist/Collection/workers/postDoc.js:
--------------------------------------------------------------------------------
1 | (function (global, factory) {
2 | if (typeof define === "function" && define.amd) {
3 | define(['exports', 'regenerator-runtime', 'redux-saga/effects', '../../types', '../../server', '../actions', '../../helpers'], factory);
4 | } else if (typeof exports !== "undefined") {
5 | factory(exports, require('regenerator-runtime'), require('redux-saga/effects'), require('../../types'), require('../../server'), require('../actions'), require('../../helpers'));
6 | } else {
7 | var mod = {
8 | exports: {}
9 | };
10 | factory(mod.exports, global.regeneratorRuntime, global.effects, global.types, global.server, global.actions, global.helpers);
11 | global.postDoc = mod.exports;
12 | }
13 | })(this, function (exports, _regeneratorRuntime, _effects, _types, _server, _actions, _helpers) {
14 | 'use strict';
15 |
16 | Object.defineProperty(exports, "__esModule", {
17 | value: true
18 | });
19 | exports.default = postDoc;
20 |
21 | var _regeneratorRuntime2 = _interopRequireDefault(_regeneratorRuntime);
22 |
23 | var _types2 = _interopRequireDefault(_types);
24 |
25 | function _interopRequireDefault(obj) {
26 | return obj && obj.__esModule ? obj : {
27 | default: obj
28 | };
29 | }
30 |
31 | var _marked = _regeneratorRuntime2.default.mark(postDoc);
32 |
33 | var START = _types2.default.POST_START;
34 | var FAILED = _types2.default.POST_FAILED;
35 | var FAILED_NETWORK = _types2.default.POST_FAILED_NETWORK;
36 | var FINISHED = _types2.default.POST_FINISHED;
37 |
38 | function postDoc(action) {
39 | var _action$payload, schemaName, data, targetName, autoRefresh, filesIncluded, fileValueHandler, dispatchId, boomerang, _dispatchId, target, dataToSend, dataFileError, res, errType;
40 |
41 | return _regeneratorRuntime2.default.wrap(function postDoc$(_context) {
42 | while (1) {
43 | switch (_context.prev = _context.next) {
44 | case 0:
45 | _action$payload = action.payload, schemaName = _action$payload.schemaName, data = _action$payload.data, targetName = _action$payload.targetName, autoRefresh = _action$payload.autoRefresh, filesIncluded = _action$payload.filesIncluded, fileValueHandler = _action$payload.fileValueHandler, dispatchId = _action$payload.dispatchId, boomerang = _action$payload.boomerang;
46 | _dispatchId = dispatchId || '';
47 | target = targetName || schemaName;
48 | _context.next = 5;
49 | return (0, _effects.put)((0, _actions.setOnStore)({ targetName: target, status: START, error: null, loading: true, dispatchId: _dispatchId, boomerang: boomerang }));
50 |
51 | case 5:
52 | dataToSend = void 0, dataFileError = void 0, res = null;
53 | _context.prev = 6;
54 |
55 | if (!filesIncluded) {
56 | _context.next = 12;
57 | break;
58 | }
59 |
60 | return _context.delegateYield((0, _server.uploadFilesFromData)(data, fileValueHandler), 't1', 9);
61 |
62 | case 9:
63 | _context.t0 = _context.t1;
64 | _context.next = 13;
65 | break;
66 |
67 | case 12:
68 | _context.t0 = data;
69 |
70 | case 13:
71 | dataToSend = _context.t0;
72 |
73 | dataToSend = (0, _helpers.removeImutableKeys)(data);
74 | _context.next = 22;
75 | break;
76 |
77 | case 17:
78 | _context.prev = 17;
79 | _context.t2 = _context['catch'](6);
80 |
81 | res = _context.t2;
82 | res.error = true;
83 | dataFileError = true;
84 |
85 | case 22:
86 | if (dataFileError) {
87 | _context.next = 25;
88 | break;
89 | }
90 |
91 | return _context.delegateYield((0, _server.httpRequest)(_server.api.createObject, schemaName, dataToSend), 't3', 24);
92 |
93 | case 24:
94 | res = _context.t3;
95 |
96 | case 25:
97 | if (!res.error) {
98 | _context.next = 33;
99 | break;
100 | }
101 |
102 | errType = res.message === 'Network Error' ? FAILED_NETWORK : FAILED;
103 |
104 | console.error('postDoc err', schemaName, res.err);
105 | _server.Logger.onError('POST', action, errType, res);
106 | _context.next = 31;
107 | return (0, _effects.put)((0, _actions.setOnStore)({ targetName: target, status: errType, error: res, loading: false, dispatchId: _dispatchId, boomerang: boomerang }));
108 |
109 | case 31:
110 | _context.next = 39;
111 | break;
112 |
113 | case 33:
114 | _context.next = 35;
115 | return (0, _effects.put)((0, _actions.setOnStore)({ targetName: target, status: FINISHED, error: null, loading: false, dispatchId: _dispatchId, boomerang: boomerang }));
116 |
117 | case 35:
118 | _server.Logger.onSuccess('POST', action, FINISHED, res);
119 |
120 | if (!autoRefresh) {
121 | _context.next = 39;
122 | break;
123 | }
124 |
125 | _context.next = 39;
126 | return (0, _effects.put)((0, _actions.refreshCollection)({ targetName: target }));
127 |
128 | case 39:
129 | case 'end':
130 | return _context.stop();
131 | }
132 | }
133 | }, _marked, this, [[6, 17]]);
134 | }
135 | /* eslint no-unused-vars: "off" */
136 | });
--------------------------------------------------------------------------------
/src/index.js:
--------------------------------------------------------------------------------
1 | // Common
2 | import 'babel-polyfill';
3 | import api from './server/api';
4 | import httpRequest from './server/httpWrapper';
5 | import constants from './types';
6 | import * as helpers from './helpers';
7 | // Components
8 | import FetchCollection from './Collection';
9 | import FetchDocument from './Document';
10 | import FetchCloudCode from './CloudCode';
11 | import ShowLoader from './Loader';
12 | // Parse
13 | import parseReducer, {setClearStateActionType, cleanAllState} from './reducer';
14 | import parseWatcher from './saga';
15 | // Selectors
16 | import {cloudCodeSelectors, collectionSelectors, documentSelectors} from './selectors';
17 | // Actions Wrapped with dispatch
18 | import * as _collectionActions from './Collection/collectionActions'
19 | import * as _documentActions from './Document/documentActions'
20 | import * as _cloudCodeActions from './CloudCode/cloudCodeActions'
21 | // Pure actions
22 | import * as pureCollectionActions from './Collection/actions'
23 | import * as pureDocumentActions from './Document/actions'
24 | import * as pureCloudCodeActions from './CloudCode/actions'
25 | // Logger
26 | import {setLoggerHandlers} from './server/Logger'
27 | const config = api;
28 |
29 | const selectors = {
30 | selectCollections: collectionSelectors.getCollections,
31 | selectCollection: collectionSelectors.getCollection,
32 | selectCollectionData: collectionSelectors.getData,
33 | selectCollectionLoading: collectionSelectors.getLoading,
34 | selectCollectionInfo: collectionSelectors.getInfo,
35 | selectCollectionStatus: collectionSelectors.getStatus,
36 | selectCollectionCount: collectionSelectors.getCount,
37 | selectCollectionError: collectionSelectors.getError,
38 | selectCollectionDispatchId: collectionSelectors.getDispatchId,
39 | selectCollectionBoomerang: collectionSelectors.getBoomerang,
40 |
41 | selectDocuments: documentSelectors.getDocuments,
42 | selectDocument: documentSelectors.getDocument,
43 | selectDocumentData: documentSelectors.getData,
44 | selectDocumentLoading: documentSelectors.getLoading,
45 | selectDocumentInfo: documentSelectors.getInfo,
46 | selectDocumentStatus: documentSelectors.getStatus,
47 | selectDocumentError: documentSelectors.getError,
48 | selectDocumentDispatchId: documentSelectors.getDispatchId,
49 | selectDocumentBoomerang: documentSelectors.getBoomerang,
50 |
51 | selectCloudCodes: cloudCodeSelectors.getCloudCodes,
52 | selectCloudCode: cloudCodeSelectors.getCloudCode,
53 | selectCloudCodeData: cloudCodeSelectors.getData,
54 | selectCloudCodeLoading: cloudCodeSelectors.getLoading,
55 | selectCloudCodeInfo: cloudCodeSelectors.getInfo,
56 | selectCloudCodeStatus: cloudCodeSelectors.getStatus,
57 | selectCloudCodeError: cloudCodeSelectors.getError,
58 | selectCloudCodeDispatchId: cloudCodeSelectors.getDispatchId,
59 | }
60 |
61 | const collectionActions ={
62 | fetchData: _collectionActions.fetchData,
63 | pure_fetchData: pureCollectionActions.fetchData,
64 | cleanCollections: _collectionActions.cleanCollections,
65 | pure_cleanCollections: pureCollectionActions.cleanCollections,
66 | cleanData: _collectionActions.cleanData,
67 | pure_cleanData: pureCollectionActions.cleanData,
68 | deleteDoc: _collectionActions.deleteDoc,
69 | pure_deleteDoc: pureCollectionActions.deleteDoc,
70 | putDoc: _collectionActions.putDoc,
71 | pure_putDoc: pureCollectionActions.putDoc,
72 | refreshCollection: _collectionActions.refreshCollection,
73 | pure_refreshCollection: pureCollectionActions.refreshCollection,
74 | postDoc: _collectionActions.postDoc,
75 | pure_postDoc: pureCollectionActions.postDoc,
76 | }
77 | const documentActions ={
78 | fetchData: _documentActions.fetchData,
79 | pure_fetchData: pureDocumentActions.fetchData,
80 | cleanDocuments: _documentActions.cleanDocuments,
81 | pure_cleanDocuments: pureDocumentActions.cleanDocuments,
82 | cleanData: _documentActions.cleanData,
83 | pure_cleanData: pureDocumentActions.cleanData,
84 | deleteDoc: _documentActions.deleteDoc,
85 | pure_deleteDoc: pureDocumentActions.deleteDoc,
86 | putDoc: _documentActions.putDoc,
87 | pure_putDoc: pureDocumentActions.putDoc,
88 | postDoc: _documentActions.postDoc,
89 | pure_postDoc: pureDocumentActions.postDoc,
90 | updateField: _documentActions.updateField,
91 | pure_updateField: pureDocumentActions.updateField,
92 | }
93 | const cloudCodeActions ={
94 | fetchData: _cloudCodeActions.fetchData,
95 | pure_fetchData: pureCloudCodeActions.fetchData,
96 | cleanCloudsCode: _cloudCodeActions.cleanCloudsCode,
97 | pure_cleanCloudsCode: pureCloudCodeActions.cleanCloudsCode,
98 | cleanData: _cloudCodeActions.cleanData,
99 | pure_cleanData: pureCloudCodeActions.cleanData,
100 | }
101 | let dispatch = null;
102 | export const setReactParseDispatch = _dispatch => {
103 | dispatch = _dispatch;
104 | };
105 | const actions = {
106 | collectionActions,
107 | cloudCodeActions,
108 | documentActions
109 | }
110 |
111 | export {
112 | dispatch,
113 | config,
114 | api,
115 | httpRequest,
116 | constants,
117 | helpers,
118 | setClearStateActionType,
119 | cleanAllState,
120 | // Logger
121 | setLoggerHandlers,
122 | // Components
123 | FetchCollection,
124 | FetchDocument,
125 | FetchCloudCode,
126 | ShowLoader,
127 | // Parse
128 | parseWatcher,
129 | parseReducer,
130 | // Selectors
131 | selectors,
132 | cloudCodeSelectors,
133 | collectionSelectors,
134 | documentSelectors,
135 | // Actions
136 | actions,
137 | collectionActions,
138 | cloudCodeActions,
139 | documentActions,
140 | };
--------------------------------------------------------------------------------
/dist/Collection/workers/putDoc.js:
--------------------------------------------------------------------------------
1 | (function (global, factory) {
2 | if (typeof define === "function" && define.amd) {
3 | define(['exports', 'regenerator-runtime', 'redux-saga/effects', '../../types', '../../server', '../actions', '../../helpers'], factory);
4 | } else if (typeof exports !== "undefined") {
5 | factory(exports, require('regenerator-runtime'), require('redux-saga/effects'), require('../../types'), require('../../server'), require('../actions'), require('../../helpers'));
6 | } else {
7 | var mod = {
8 | exports: {}
9 | };
10 | factory(mod.exports, global.regeneratorRuntime, global.effects, global.types, global.server, global.actions, global.helpers);
11 | global.putDoc = mod.exports;
12 | }
13 | })(this, function (exports, _regeneratorRuntime, _effects, _types, _server, _actions, _helpers) {
14 | 'use strict';
15 |
16 | Object.defineProperty(exports, "__esModule", {
17 | value: true
18 | });
19 | exports.default = putDoc;
20 |
21 | var _regeneratorRuntime2 = _interopRequireDefault(_regeneratorRuntime);
22 |
23 | var _types2 = _interopRequireDefault(_types);
24 |
25 | function _interopRequireDefault(obj) {
26 | return obj && obj.__esModule ? obj : {
27 | default: obj
28 | };
29 | }
30 |
31 | var _marked = _regeneratorRuntime2.default.mark(putDoc);
32 |
33 | var START = _types2.default.PUT_START;
34 | var FAILED = _types2.default.PUT_FAILED;
35 | var FAILED_NETWORK = _types2.default.PUT_FAILED_NETWORK;
36 | var FINISHED = _types2.default.PUT_FINISHED;
37 |
38 | function putDoc(action) {
39 | var _action$payload, targetName, schemaName, objectId, data, autoRefresh, filesIncluded, fileValueHandler, dispatchId, boomerang, target, _dispatchId, dataToSend, dataFileError, res, errType;
40 |
41 | return _regeneratorRuntime2.default.wrap(function putDoc$(_context) {
42 | while (1) {
43 | switch (_context.prev = _context.next) {
44 | case 0:
45 | _action$payload = action.payload, targetName = _action$payload.targetName, schemaName = _action$payload.schemaName, objectId = _action$payload.objectId, data = _action$payload.data, autoRefresh = _action$payload.autoRefresh, filesIncluded = _action$payload.filesIncluded, fileValueHandler = _action$payload.fileValueHandler, dispatchId = _action$payload.dispatchId, boomerang = _action$payload.boomerang;
46 | target = targetName || schemaName;
47 | _dispatchId = dispatchId || '';
48 | _context.next = 5;
49 | return (0, _effects.put)((0, _actions.setOnStore)({ targetName: target, status: START, error: null, loading: true, dispatchId: _dispatchId, boomerang: boomerang }));
50 |
51 | case 5:
52 | dataToSend = void 0, dataFileError = void 0, res = null;
53 | _context.prev = 6;
54 |
55 | if (!filesIncluded) {
56 | _context.next = 12;
57 | break;
58 | }
59 |
60 | return _context.delegateYield((0, _server.uploadFilesFromData)(data, fileValueHandler), 't1', 9);
61 |
62 | case 9:
63 | _context.t0 = _context.t1;
64 | _context.next = 13;
65 | break;
66 |
67 | case 12:
68 | _context.t0 = data;
69 |
70 | case 13:
71 | dataToSend = _context.t0;
72 |
73 | dataToSend = (0, _helpers.removeImutableKeys)(data);
74 | _context.next = 22;
75 | break;
76 |
77 | case 17:
78 | _context.prev = 17;
79 | _context.t2 = _context['catch'](6);
80 |
81 | res = _context.t2;
82 | res.error = true;
83 | dataFileError = true;
84 |
85 | case 22:
86 | if (dataFileError) {
87 | _context.next = 25;
88 | break;
89 | }
90 |
91 | return _context.delegateYield((0, _server.httpRequest)(_server.api.updateObject, schemaName, objectId, dataToSend), 't3', 24);
92 |
93 | case 24:
94 | res = _context.t3;
95 |
96 | case 25:
97 | if (!res.error) {
98 | _context.next = 33;
99 | break;
100 | }
101 |
102 | errType = res.message === 'Network Error' ? FAILED_NETWORK : FAILED;
103 |
104 | console.error('putDoc err', schemaName, objectId, res.err);
105 | _context.next = 30;
106 | return (0, _effects.put)((0, _actions.setOnStore)({ targetName: target, status: errType, error: res, loading: false, dispatchId: _dispatchId, boomerang: boomerang }));
107 |
108 | case 30:
109 | _server.Logger.onError('PUT', action, errType, res);
110 | _context.next = 39;
111 | break;
112 |
113 | case 33:
114 | _context.next = 35;
115 | return (0, _effects.put)((0, _actions.setOnStore)({ targetName: target, status: FINISHED, error: null, loading: false, dispatchId: _dispatchId, boomerang: boomerang }));
116 |
117 | case 35:
118 | _server.Logger.onSuccess('PUT', action, FINISHED, res);
119 |
120 | if (!autoRefresh) {
121 | _context.next = 39;
122 | break;
123 | }
124 |
125 | _context.next = 39;
126 | return (0, _effects.put)((0, _actions.refreshCollection)({ targetName: target }));
127 |
128 | case 39:
129 | case 'end':
130 | return _context.stop();
131 | }
132 | }
133 | }, _marked, this, [[6, 17]]);
134 | }
135 | /* eslint no-unused-vars: "off" */
136 | });
--------------------------------------------------------------------------------
/dist/Document/workers/postDoc.js:
--------------------------------------------------------------------------------
1 | (function (global, factory) {
2 | if (typeof define === "function" && define.amd) {
3 | define(['exports', 'regenerator-runtime', 'redux-saga/effects', '../../types', '../../server', '../actions', '../../helpers'], factory);
4 | } else if (typeof exports !== "undefined") {
5 | factory(exports, require('regenerator-runtime'), require('redux-saga/effects'), require('../../types'), require('../../server'), require('../actions'), require('../../helpers'));
6 | } else {
7 | var mod = {
8 | exports: {}
9 | };
10 | factory(mod.exports, global.regeneratorRuntime, global.effects, global.types, global.server, global.actions, global.helpers);
11 | global.postDoc = mod.exports;
12 | }
13 | })(this, function (exports, _regeneratorRuntime, _effects, _types, _server, _actions, _helpers) {
14 | 'use strict';
15 |
16 | Object.defineProperty(exports, "__esModule", {
17 | value: true
18 | });
19 | exports.default = postDoc;
20 |
21 | var _regeneratorRuntime2 = _interopRequireDefault(_regeneratorRuntime);
22 |
23 | var _types2 = _interopRequireDefault(_types);
24 |
25 | function _interopRequireDefault(obj) {
26 | return obj && obj.__esModule ? obj : {
27 | default: obj
28 | };
29 | }
30 |
31 | var _marked = _regeneratorRuntime2.default.mark(postDoc);
32 |
33 | var START = _types2.default.POST_START;
34 | var FAILED = _types2.default.POST_FAILED;
35 | var FAILED_NETWORK = _types2.default.POST_FAILED_NETWORK;
36 | var FINISHED = _types2.default.POST_FINISHED;
37 |
38 | function postDoc(action) {
39 | var _action$payload, targetName, schemaName, data, filesIncluded, fileValueHandler, dispatchId, boomerang, _dispatchId, dataToSend, dataFileError, res, errType, info;
40 |
41 | return _regeneratorRuntime2.default.wrap(function postDoc$(_context) {
42 | while (1) {
43 | switch (_context.prev = _context.next) {
44 | case 0:
45 | _action$payload = action.payload, targetName = _action$payload.targetName, schemaName = _action$payload.schemaName, data = _action$payload.data, filesIncluded = _action$payload.filesIncluded, fileValueHandler = _action$payload.fileValueHandler, dispatchId = _action$payload.dispatchId, boomerang = _action$payload.boomerang;
46 | _dispatchId = dispatchId || '';
47 | _context.next = 4;
48 | return (0, _effects.put)((0, _actions.setOnStore)({ targetName: targetName, status: START, error: null, loading: true, dispatchId: _dispatchId, boomerang: boomerang }));
49 |
50 | case 4:
51 | dataToSend = void 0, dataFileError = void 0, res = null;
52 | _context.prev = 5;
53 |
54 | if (!filesIncluded) {
55 | _context.next = 11;
56 | break;
57 | }
58 |
59 | return _context.delegateYield((0, _server.uploadFilesFromData)(data, fileValueHandler), 't1', 8);
60 |
61 | case 8:
62 | _context.t0 = _context.t1;
63 | _context.next = 12;
64 | break;
65 |
66 | case 11:
67 | _context.t0 = data;
68 |
69 | case 12:
70 | dataToSend = _context.t0;
71 |
72 | dataToSend = (0, _helpers.removeImutableKeys)(data);
73 | _context.next = 21;
74 | break;
75 |
76 | case 16:
77 | _context.prev = 16;
78 | _context.t2 = _context['catch'](5);
79 |
80 | res = _context.t2;
81 | res.error = true;
82 | dataFileError = true;
83 |
84 | case 21:
85 | if (dataFileError) {
86 | _context.next = 24;
87 | break;
88 | }
89 |
90 | return _context.delegateYield((0, _server.httpRequest)(_server.api.createObject, schemaName, dataToSend), 't3', 23);
91 |
92 | case 23:
93 | res = _context.t3;
94 |
95 | case 24:
96 | if (!res.error) {
97 | _context.next = 32;
98 | break;
99 | }
100 |
101 | errType = res.message === 'Network Error' ? FAILED_NETWORK : FAILED;
102 |
103 | console.error('deleteDoc err', targetName, res.error);
104 | _context.next = 29;
105 | return (0, _effects.put)((0, _actions.setOnStore)({ targetName: targetName, status: errType, error: res, loading: false, dispatchId: _dispatchId, boomerang: boomerang }));
106 |
107 | case 29:
108 | _server.Logger.onError('POST', action, errType, res);
109 | _context.next = 36;
110 | break;
111 |
112 | case 32:
113 | info = {
114 | timestamp: Date.now(),
115 | schemaName: schemaName,
116 | objectId: res.data.objectId,
117 | data: data,
118 | resData: (0, _helpers.dig)(res, 'data.results[0]')
119 | };
120 | _context.next = 35;
121 | return (0, _effects.put)((0, _actions.setOnStore)({
122 | targetName: targetName,
123 | status: FINISHED,
124 | info: info,
125 | error: null,
126 | loading: false,
127 | dispatchId: _dispatchId,
128 | boomerang: boomerang
129 | }));
130 |
131 | case 35:
132 | _server.Logger.onSuccess('POST', action, FINISHED, res);
133 |
134 | case 36:
135 | case 'end':
136 | return _context.stop();
137 | }
138 | }
139 | }, _marked, this, [[5, 16]]);
140 | }
141 | /* eslint no-unused-vars: "off" */
142 | });
--------------------------------------------------------------------------------