1.0.0-beta.6 • Published 4 years ago
@trixta/trixtajs v1.0.0-beta.6
Quick Start Guide
Install
Install the package with npm
npm i @trixta/trixtajs
or yarn - whichever you prefer
yarn add @trixta/trixtajs
1. Setup Reducer
/**
* Combine all reducers in this file and export the combined reducers.
*/
import { combineReducers } from 'redux';
import { trixtaReducer } from '@trixta/trixtajs';
import { phoenixReducer } from '@trixta/phoenix-to-redux';
export default function createReducer() {
const rootReducer = combineReducers({
trixta: trixtaReducer,
phoenix: phoenixReducer,
});
return rootReducer;
}
2. Setup Middleware
import { createStore, applyMiddleware, compose } from 'redux';
import { routerMiddleware } from 'connected-react-router';
import { createPhoenixChannelMiddleware } from '@trixta/phoenix-to-redux';
import createReducer from './reducers';
const phoenixChannelMiddleWare = createPhoenixChannelMiddleware();
export default function configureStore(initialState = {}) {
// Create the store with two middlewares
// 1. phoenixChannelMiddleWare: Makes redux connected to phoenix channels
const middlewares = [
phoenixChannelMiddleWare,
];
const enhancers = [applyMiddleware(...middlewares)];
// If Redux DevTools Extension is installed use it, otherwise use Redux compose
/* eslint-disable no-underscore-dangle, indent */
const composeEnhancers =
process.env.NODE_ENV !== 'production' &&
typeof window === 'object' &&
window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__
? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({})
: compose;
/* eslint-enable */
const store = createStore(
createReducer(),
initialState,
composeEnhancers(...enhancers)
);
// Make reducers hot reloadable, see http://mxs.is/googmo
/* istanbul ignore next */
if (module.hot) {
module.hot.accept('./reducers', () => {
store.replaceReducer(createReducer());
});
}
return store;
}
3. Setup Trixta Saga
Option 1
import { createStore, applyMiddleware, compose } from 'redux';
import { routerMiddleware } from 'connected-react-router';
import { createPhoenixChannelMiddleware } from '@trixta/phoenix-to-redux';
import { setupTrixtaSaga } from '@trixta/trixtajs';
import createReducer from './reducers';
const phoenixChannelMiddleWare = createPhoenixChannelMiddleware();
export default function configureStore(initialState = {}) {
// Create the store with two middlewares
// 1. phoenixChannelMiddleWare: Makes redux connected to phoenix channels
const middlewares = [
phoenixChannelMiddleWare,
];
const enhancers = [applyMiddleware(...middlewares)];
// If Redux DevTools Extension is installed use it, otherwise use Redux compose
/* eslint-disable no-underscore-dangle, indent */
const composeEnhancers =
process.env.NODE_ENV !== 'production' &&
typeof window === 'object' &&
window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__
? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({})
: compose;
/* eslint-enable */
const store = createStore(
createReducer(),
initialState,
composeEnhancers(...enhancers)
);
sagaMiddleware.run(setupTrixtaSaga)
// Make reducers hot reloadable, see http://mxs.is/googmo
/* istanbul ignore next */
if (module.hot) {
module.hot.accept('./reducers', () => {
store.replaceReducer(createReducer());
});
}
return store;
}
Option 2
import { put, select, takeLatest, takeEvery, all } from 'redux-saga/effects';
import { setupTrixtaSaga } from '@trixta/trixtajs';
export default function* rootSaga() {
yield all([setupTrixtaSaga()]);
}
import { createStore, applyMiddleware, compose } from 'redux';
import { routerMiddleware } from 'connected-react-router';
import { createPhoenixChannelMiddleware } from '@trixta/phoenix-to-redux';
import rootSaga from './rootSaga';
import createReducer from './reducers';
const phoenixChannelMiddleWare = createPhoenixChannelMiddleware();
export default function configureStore(initialState = {}) {
// Create the store with two middlewares
// 1. phoenixChannelMiddleWare: Makes redux connected to phoenix channels
const middlewares = [
phoenixChannelMiddleWare,
];
const enhancers = [applyMiddleware(...middlewares)];
// If Redux DevTools Extension is installed use it, otherwise use Redux compose
/* eslint-disable no-underscore-dangle, indent */
const composeEnhancers =
process.env.NODE_ENV !== 'production' &&
typeof window === 'object' &&
window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__
? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({})
: compose;
/* eslint-enable */
const store = createStore(
createReducer(),
initialState,
composeEnhancers(...enhancers)
);
sagaMiddleware.run(rootSaga)
// Make reducers hot reloadable, see http://mxs.is/googmo
/* istanbul ignore next */
if (module.hot) {
module.hot.accept('./reducers', () => {
store.replaceReducer(createReducer());
});
}
return store;
}
4. Setup Trixta Roles
import { put, select, takeLatest, takeEvery, all } from 'redux-saga/effects';
import { updateTrixtaRoles } from '@trixta/trixtajs';
import {
socketActionTypes,
} from '@trixta/phoenix-to-redux';
/**
* After the socket is connected,
* @param {*} params
*/
export function* socketConnectedSaga({ isAnonymous }) {
// handle connection response
const currentSession = yield select(makeSelectCurrentSession());
// save roles in reducer or somewhere to passs to trixta action
const roles = _.get(currentSession, 'roles', []);
if (!isAnonymous && roles) {
yield put(updateTrixtaRoles({ roles }));
}
}
export default function* rootSaga() {
yield all([setupTrixtaSaga()]);
yield takeEvery(socketActionTypes.SOCKET_OPEN, socketConnectedSaga);
}
Documentation
License
This project is licensed under the MIT license, Copyright (c) 2020 Trixta Inc. For more information see LICENSE.md
.
1.0.0-beta.8
4 years ago
2.0.0-beta.2
4 years ago
2.0.0-beta.1
4 years ago
2.0.0-beta.0
4 years ago
2.0.0-beta.3
4 years ago
1.0.0-beta.7
4 years ago
1.0.0-beta.6
4 years ago
1.0.0-beta.5
4 years ago
1.0.0-beta.4
4 years ago
1.0.0-beta.3
4 years ago
1.0.0-beta.2
4 years ago
1.0.0-beta.1
4 years ago