4.1.3 • Published 3 years ago

@trixta/trixta-js v4.1.3

Weekly downloads
78
License
MIT
Repository
github
Last release
3 years ago

GitHub Release Date GitHub last commit GitHub commit activity GitHub commits since latest release

Coverage statements Coverage branches Coverage functions Coverage lines

What is trixta-JS?

trixta-js a javascript library to help any organization, easily connect to a Trixta space, build front-end components for you application. It leverages phoenix-to-redux to communicate with Trixta and gives you a variety of tools / utilities to build react components.

Who is this for?

Any orgranization using Trixta for their javascript application.

Quick Start Guide

Install

Install the package with npm

npm i @trixta/trixta-js or yarn - whichever you prefer

yarn add @trixta/trixta-js

1. Setup Reducer

/**
 * Combine all reducers in this file and export the combined reducers.
 */

import { combineReducers } from '@reduxjs/toolkit';
import { phoenixReducer } from '@trixta/phoenix-to-redux';
import { trixtaReducer } from '@trixta/trixta-js';
export default function createReducer() {
  const rootReducer = combineReducers({
    trixta: trixtaReducer,
    phoenix: phoenixReducer,
  });
  return rootReducer;
}

2. Setup Middleware

See example to setup middleware

import { configureStore, getDefaultMiddleware } from '@reduxjs/toolkit';
import { createPhoenixChannelMiddleware } from '@trixta/phoenix-to-redux';
import createSagaMiddleware from 'redux-saga';
import { createReducer } from './reducers';

export default function configureStore() {
  const reduxSagaMonitorOptions = {};
  // Makes redux connected to phoenix channels
  const phoenixChannelMiddleWare = createPhoenixChannelMiddleware();
  const sagaMiddleware = createSagaMiddleware(reduxSagaMonitorOptions);
  const middlewares = [sagaMiddleware,phoenixChannelMiddleWare];

  // Create the store with saga middleware
  const middlewares = [phoenixChannelMiddleWare];

   const enhancers = [];

  const store = configureStore({
    reducer: createReducer(),
    middleware: [
      ...getDefaultMiddleware({
        thunk: false,
        immutableCheck: {
          ignore: ['socket', 'channel', 'trixta', 'phoenix', 'router'],
        },
        serializableCheck: false,
      }),
      ...middlewares,
    ],
    devTools:
      /* istanbul ignore next line */
      process.env.NODE_ENV !== 'production' ||
      process.env.PUBLIC_URL.length > 0,
    enhancers,
  });

   return store;
}

3. Setup Trixta Saga

See redux-saga

Option 1

import { configureStore, getDefaultMiddleware } from '@reduxjs/toolkit';
import { createPhoenixChannelMiddleware } from '@trixta/phoenix-to-redux';
import createSagaMiddleware from 'redux-saga';
import { setupTrixtaSaga } from '@trixta/trixta-js';
import createReducer from './reducers';

export default function configureStore() {
  const reduxSagaMonitorOptions = {};
  // Makes redux connected to phoenix channels
  const phoenixChannelMiddleWare = createPhoenixChannelMiddleware();
  const sagaMiddleware = createSagaMiddleware(reduxSagaMonitorOptions);
  const middlewares = [sagaMiddleware,phoenixChannelMiddleWare];

  const enhancers = [];

  const store = configureStore({
    reducer: createReducer(),
    middleware: [
      ...getDefaultMiddleware({
        thunk: false,
        immutableCheck: {
          ignore: ['socket', 'channel', 'trixta', 'phoenix', 'router'],
        },
        serializableCheck: false,
      }),
      ...middlewares,
    ],
    devTools:
      /* istanbul ignore next line */
      process.env.NODE_ENV !== 'production' ||
      process.env.PUBLIC_URL.length > 0,
    enhancers,
  });

  sagaMiddleware.run(setupTrixtaSaga);

  return store;
}

Option 2

import { put, select, takeLatest, takeEvery, fork } from 'redux-saga/effects';
import { setupTrixtaSaga } from '@trixta/trixta-js';

export default function* rootSaga() {
  yield fork(setupTrixtaSaga);
}
import { configureStore, getDefaultMiddleware } from '@reduxjs/toolkit';
import { createPhoenixChannelMiddleware } from '@trixta/phoenix-to-redux';
import createSagaMiddleware from 'redux-saga';
import rootSaga from './rootSaga';
import createReducer from './reducers';

export default function configureStore() {
   const reduxSagaMonitorOptions = {};
  // Makes redux connected to phoenix channels
  const phoenixChannelMiddleWare = createPhoenixChannelMiddleware();
  const sagaMiddleware = createSagaMiddleware(reduxSagaMonitorOptions);
  const middlewares = [sagaMiddleware,phoenixChannelMiddleWare];

  const enhancers = [];

  const store = configureStore({
    reducer: createReducer(),
    middleware: [
      ...getDefaultMiddleware({
        thunk: false,
        immutableCheck: {
          ignore: ['socket', 'channel', 'trixta', 'phoenix', 'router'],
        },
        serializableCheck: false,
      }),
      ...middlewares,
    ],
    devTools:
      /* istanbul ignore next line */
      process.env.NODE_ENV !== 'production' ||
      process.env.PUBLIC_URL.length > 0,
    enhancers,
  });

  sagaMiddleware.run(rootSaga);

  return store;
}

4. Setup Trixta Roles

import { put, select, takeLatest, takeEvery, fork } from 'redux-saga/effects';
import { updateTrixtaRoles } from '@trixta/trixta-js';
import { socketActionTypes,connectPhoenix } from '@trixta/phoenix-to-redux';

/**
 * After the socket is connected,
 * @param {*} params
 */
export function* socketConnectedSaga() {
  // handle connection response
  const currentSession = yield select(makeSelectCurrentSession());
  // save roles in reducer or somewhere to passs to trixta-js action
  const roles = currentSession.roles.map((role) => ({
    name: role,
    logPresence: false,
  }));
  if (roles) {
    yield put(updateTrixtaRoles({ roles }));
  }
}

export function* connectPhoenixSaga() {
  yield put(connectPhoenix({ domainUrl: 'localhost:4000', params : {  }));
}

export default function* rootSaga() {
  yield call(connectPhoenixSaga);
  yield fork(setupTrixtaSaga);
  yield takeEvery(socketActionTypes.SOCKET_OPEN, socketConnectedSaga);
}

Change Log

Documentation

License

This project is licensed under the MIT license, Copyright (c) 2020 Trixta Inc. For more information see LICENSE.md.

4.1.3

3 years ago

4.1.2

3 years ago

3.7.0-beta.11

3 years ago

3.7.0-beta.13

3 years ago

3.7.0-beta.12

3 years ago

3.7.0-beta.10

3 years ago

3.7.0-beta.9

3 years ago

4.1.0

3 years ago

4.1.1

3 years ago

3.7.0-beta.8

3 years ago

4.0.7

3 years ago

3.7.0-beta.7

3 years ago

4.0.5

3 years ago

4.0.4

3 years ago

4.0.6

3 years ago

4.0.3

3 years ago

3.7.0-beta.6

3 years ago

4.0.2

3 years ago

1.0.2

3 years ago

1.0.5

3 years ago

1.0.4

3 years ago

1.0.3

3 years ago

4.0.1

3 years ago

4.0.0

3 years ago

3.7.0-beta.5

3 years ago

3.7.0-beta.4

3 years ago

3.7.0-beta.3

3 years ago

3.7.0-beta.2

3 years ago

3.7.0-beta.1

3 years ago

3.7.0-beta.0

3 years ago

1.0.1

3 years ago

1.0.0

3 years ago

3.6.0-alpha.5

3 years ago

3.6.0-alpha.4

3 years ago

3.6.0-alpha.7

3 years ago

3.6.0-alpha.6

3 years ago

3.6.0-alpha.1

3 years ago

3.6.0-alpha.0

3 years ago

3.6.0-alpha.3

3 years ago

3.6.0-alpha.2

3 years ago

3.6.0-beta.0

3 years ago

3.6.0-beta.1

3 years ago

3.6.0-beta.2

3 years ago

3.6.0-beta.3

3 years ago

3.6.0-beta.4

3 years ago

3.4.9-beta.5

3 years ago

3.4.9-beta.4

3 years ago

3.5.0-beta.0

3 years ago

3.4.9-beta.3

3 years ago

3.4.9-beta.2

3 years ago

3.4.10-beta.0

3 years ago

3.4.9-beta.0

3 years ago

3.4.9-beta.1

3 years ago

3.4.11-beta.0

3 years ago

3.4.8-beta.0

3 years ago

3.4.7-beta.0

3 years ago

3.4.6-beta.0

3 years ago

3.4.5-beta.0

3 years ago

3.4.4-beta.0

3 years ago

3.4.3-beta.0

3 years ago

3.4.1-beta.0

3 years ago

3.4.2-beta.0

3 years ago

3.4.0-beta.3

3 years ago

3.4.0-beta.1

3 years ago

3.3.10-beta.0

3 years ago

3.4.0-beta.0

3 years ago

3.3.9-beta.0

3 years ago

3.3.8-beta.0

3 years ago

3.3.7-beta.0

3 years ago

3.3.6-beta.0

3 years ago

3.3.5-beta.0

3 years ago

3.3.4-beta.0

3 years ago

3.3.3-beta.0

3 years ago

3.3.2-beta.0

3 years ago

3.3.1-beta.0

3 years ago

3.3.0-beta.0

3 years ago

3.2.1-beta.0

3 years ago

3.2.0-beta.0

3 years ago

3.1.0-beta.0

4 years ago

3.0.0-beta.0

4 years ago

2.1.0-beta.0

4 years ago

2.0.0-beta.0

4 years ago

1.0.0-beta.4

4 years ago

1.0.0-beta.5

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

1.0.0-beta.0

4 years ago