Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
This example will quickly connect your phoenix socket, and show the simple basic socket events.
After installation and the setting up of the middleware, you can simply copy this code for your root Saga.
import {
all,
call,
fork,
put,
select,
takeEvery,
takeLatest,
} from 'redux-saga/effects';
import {
socketActionTypes,
connectPhoenix
} from '@trixtateam/phoenix-to-redux';
/**
* Should the socket attempt to open, this action is dispatched to the
* phoenix reducer
* @param {Object} params - parameters
* @param {string} params.domainKey - domain for socket
* @param {Object} params.socket = socket being opened
* @param {boolean} params.params
*/
export function* socketConnectedSaga({ socket,params, domainKey }) {
console.info('socketConnectedSaga',{ socket,params, domainKey });
}
/** Should an error occur from the phoenix socket, this action will be dispatched
* @param {Object} params - parameters
* @param {string} params.error
* @param {string} params.socketState
* @param {string} params.domainKey - domain for socket
*/
export function* socketErrorSaga({ error, socketState, domainKey }) {
// here you should check if your token is valid or not expired, if not
// disconnect phoenix
console.error('socketErrorSaga',{ error, socketState, domainKey });
}
/**
* Should the socket attempt to close, this action is dispatched to the
* phoenix reducer
* @param {Object} params - parameters
* @param {Object} params.socket = socket being closed
* @param {string} params.domainKey - domain for socket
* @param {object} params.params - socket.params()
*/
export function* socketCloseSaga({ params, socket, domainKey }) {
console.info('socketCloseSaga',{ params, socket, domainKey });
}
/**
* After phoenix socket disconnects
* @param {Object} params - parameters
* @param {Object} params.socket = socket being disconnected
* @param {string} params.domainKey - domain for socket
* @param {Object} params.params - socket.params()
*/
export function* socketDisconnectionSaga({ params, socket, domainKey }) {
console.info('socketDisconnectionSaga',{ params, socket, domainKey });
}
export function* connectSocketSaga() {
yield put(connectPhoenix({ domainUrl: 'localhost:4000', params: {} }));
}
export default function* defaultSaga() {
yield call(connectSocketSaga);
yield takeEvery(
socketActionTypes.SOCKET_DISCONNECT,
socketDisconnectionSaga
);
yield takeEvery(socketActionTypes.SOCKET_OPEN, socketConnectedSaga);
yield takeEvery(socketActionTypes.SOCKET_ERROR, socketErrorSaga);
yield takeEvery(socketActionTypes.SOCKET_CLOSE, socketCloseSaga);
}
All the methods and events associated with the socket
All the methods associated with the socket
Dive into the specifics of each API endpoint by checking out our complete documentation.
See phoenix docs for more detailed information.
All the methods and events associated with the socket
All the methods and events associated with the socket channels
All the events associated with the socket
Should the socket attempt to open, the following redux event is dispatched
import { socketActionTypes } from '@trixtateam/phoenix-to-redux';
const { SOCKET_OPEN } = socketActionTypes;
type
SOCKET_OPEN
socket
phoenix socket
domainKey
endpoint url without socket details or protocol
params
socket connection params
All the methods and events associated with the socket channels
All the methods associated with the socket channels
All the events associated with the socket channels
Should an error occur from the phoenix socket, the following redux event is dispatched
import { socketActionTypes } from '@trixtateam/phoenix-to-redux';
const { SOCKET_ERROR } = socketActionTypes;
type
SOCKET_ERROR
error
Error response from socket
domainKey
endpoint url without socket details or protocol
socketState
Connection state of socket
After joining a phoenix channel, the following redux event is dispatched.
import { channelActionTypes } from '@trixtateam/phoenix-to-redux';
const { CHANNEL_JOIN } = channelActionTypes;
type
CHANNEL_JOIN
channel
Phoenix channel
additionalData
additionalData passed when using
response
Phoenix channel response
Should an error occur from the phoenix socket channel, the following redux event is dispatched. Error response after joining the phoenix channel.
import { channelActionTypes } from '@trixtateam/phoenix-to-redux';
const { CHANNEL_JOIN_ERROR } = channelActionTypes;
type
CHANNEL_JOIN_ERROR
channelTopic
Name of channel/Topic
channel
Phoenix channel
additionalData
additionalData passed when using
error
Phoenix channel error
Should an error occur from the phoenix socket channel, the following redux event is dispatched. Timeout error response after joining the phoenix channel.
import { channelActionTypes } from '@trixtateam/phoenix-to-redux';
const { CHANNEL_TIMEOUT } = channelActionTypes;
type
CHANNEL_TIMEOUT
channelTopic
Name of channel/Topic
channel
Phoenix channel
additionalData
additionalData passed when using
error
Phoenix channel error
Should the socket attempt to close, the following redux event is dispatched
import { socketActionTypes } from '@trixtateam/phoenix-to-redux';
const { SOCKET_CLOSE } = socketActionTypes;
type
SOCKET_CLOSE
socket
phoenix socket
domainKey
endpoint url without socket details or protocol
params
socket connection params
Should an error occur from the phoenix socket channel, the following redux event is dispatched. Error response after pushing data to phoenix channel.
import { channelActionTypes } from '@trixtateam/phoenix-to-redux';
const { CHANNEL_PUSH_ERROR } = channelActionTypes;
type
CHANNEL_PUSH_ERROR
channelTopic
Name of channel/Topic
channel
Phoenix channel
error
Phoenix channel error
You can install phoenix-to-redux with NPM or Yarn
Using Yarn Package Manager is recommended over npm.
yarn add @trixtateam/phoenix-to-redux
npm i @trixtateam/phoenix-to-redux
Include the phoenix reducer into your combined reducer
import { combineReducers } from 'redux';
import { phoenixReducer } from '@trixtateam/phoenix-to-redux';
export default function createReducer() {
const rootReducer = combineReducers({
phoenix: phoenixReducer,
});
return rootReducer;
}
Example below for including the phoenix-to-redux middleware into your application. see redux docs, for more info on setting up your store.
import { configureStore, getDefaultMiddleware } from '@reduxjs/toolkit';
import { createPhoenixChannelMiddleware } from '@trixtateam/phoenix-to-redux';
import createSagaMiddleware from 'redux-saga';
import rootSaga from './rootSaga';
import createReducer from './reducers';
export default function configureStore(initialState = {}) {
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;
}
import * as React from 'react';
import { useEffect } from 'react';
import { useDispatch } from 'react-redux';
import {
connectPhoenix
} from '@trixtateam/phoenix-to-redux';
import Providers from './Providers';
import Routes from './Routes';
export function App() {
const dispatch = useDispatch();
useEffect(() => {
dispatch(connectPhoenix({ domainUrl:'localhost:4000', params: {} }))
}, [dispatch]);
return (<Providers>
<Routes />
</Providers>)
}
export default App;
This method will setup and connect the phoenix socket
Should the socket attempt to disconnect, the following redux event is dispatched
Should the socket attempt to connect, the following redux event is dispatched
import { socketActionTypes } from '@trixtateam/phoenix-to-redux';
const { SOCKET_DISCONNECT } = socketActionTypes;
type
SOCKET_DISCONNECT
socket
phoenix socket
domainKey
endpoint url without socket details or protocol
params
socket connection params
import { leavePhoenixChannelEvents } from '@trixtateam/phoenix-to-redux';
channelTopic
Name of channel/Topic
string
events
Array of event names to unsubscribe to
string []
import { socketActionTypes } from '@trixtateam/phoenix-to-redux';
const { SOCKET_CONNECT } = socketActionTypes;
type
SOCKET_CONNECT
socket
phoenix socket
domainKey
endpoint url without socket details or protocol
Should a phoenix channel be explicitly closed on the server or the channel was explicitly closed by calling channel.leave(). The following redux event is dispatched
import { channelActionTypes } from '@trixtateam/phoenix-to-redux';
const { CHANNEL_CLOSE } = channelActionTypes;
type
CHANNEL_CLOSE
channel
Phoenix channel
This method will subscribe phoenix channel for the given channelTopic and given events
import { getPhoenixChannel } from '@trixtateam/phoenix-to-redux';
Recommended that you already have made a socket connection by using connectPhoenix method before using this method.
channelTopic
Name of channel/Topic
string
logPresence
Determines if presence should be tracked for the channel
boolean
token
private token for channel
string
additionalData
This data will be available for you as additionalData on the response
object
events
Array of event names to subscribe to and will dispatch response to eventActionType
{
eventName:string; eventActionType:string
} []
domainUrl
socket endpoint to connect to
string
Should an error occur from the phoenix socket channel, the following redux event is dispatched. Invoked if the socket connection drops, or the channel crashes on the server.
import { channelActionTypes } from '@trixtateam/phoenix-to-redux';
const { CHANNEL_ERROR } = channelActionTypes;
type
CHANNEL_ERROR
channelTopic
Name of channel/Topic
channel
Phoenix channel
After phoenix channel is left. The following redux event is dispatched
import { channelActionTypes } from '@trixtateam/phoenix-to-redux';
const { CHANNEL_LEAVE } = channelActionTypes;
type
CHANNEL_LEAVE
channel
Phoenix channel
This method will attempt to find the subscribed phoenix channel for the given channelTopic and push data to the channel for the eventName.
import { pushPhoenixChannel } from '@trixtateam/phoenix-to-redux';
Recommended that you already have made a socket connection by using connectPhoenix method before using this method.
channelTopic
Name of channel/Topic
string
eventName
Name of the event on channel to push to
string
requestData
Payload data to push on the channel
any
additionalData
This data will be available for you as additionalData on the response
object
loadingStatusKey
A unique identifier you can use to separate progress status
string
endProgressDelay
timeout in milliseconds if you want to delay the endProgress of your loadingStatusKey
number
channelResponseEvent
name of redux event to dispatch to reducer on response from pushing to channel
string
channelErrorResponseEvent
name of redux event to dispatch to reducer on error from pushing to channel
string
channelTimeOutEvent
name of redux event to dispatch to reducer on timeout from pushing to channel
string
dispatchChannelError
false by default, determines if should an on channel error occur dispatch to the reducer
boolean
channelPushTimeOut
timeout in milliseconds for pushing to the channel, default is 1500
number
phoenix-to-redux is a redux-store middleware that integrates phoenix socket communication with the redux store using redux actions.
import { leavePhoenixChannelEvent } from '@trixtateam/phoenix-to-redux';
channelTopic
Name of channel/Topic
string
event
Event name to unsubscribe to
string