Skip to content

Instantly share code, notes, and snippets.

children = [
supervisor(Sling.Repo, []),
supervisor(Sling.Endpoint, []),
supervisor(Sling.Presence, []), # add this line
]
// @flow
import React, { Component } from 'react';
import { Field, reduxForm } from 'redux-form';
import { css, StyleSheet } from 'aphrodite';
const styles = StyleSheet.create({
form: {
padding: '0px 10px 10px 10px',
background: '#fff',
},
// @flow
import React from 'react';
import md5 from 'md5';
type Props = {
email: string,
size?: number,
style?: Object,
}
// @flow
import React from 'react';
import moment from 'moment';
import Avatar from '../Avatar';
type Props = {
message: {
text: string,
inserted_at: string,
user: {
@bnhansn
bnhansn / index.js
Last active October 22, 2016 15:03
// @flow
import React, { Component } from 'react';
import moment from 'moment';
import groupBy from 'lodash/groupBy';
import mapKeys from 'lodash/mapKeys';
import { css, StyleSheet } from 'aphrodite';
import Message from '../Message';
const styles = StyleSheet.create({
container: {
// @flow
import React from 'react';
import { css, StyleSheet } from 'aphrodite';
const styles = StyleSheet.create({
navbar: {
padding: '15px',
background: '#fff',
borderBottom: '1px solid rgb(240,240,240)',
},
@bnhansn
bnhansn / index.js
Last active October 22, 2016 15:01
// @flow
import React, { Component } from 'react';
import { connect } from 'react-redux';
import { connectToChannel, leaveChannel, createMessage } from '../../actions/room';
import MessageList from '../../components/MessageList';
import MessageForm from '../../components/MessageForm';
import RoomNavbar from '../../components/RoomNavbar';
type MessageType = {
id: number,
defmodule Sling.MessageView do
use Sling.Web, :view
def render("message.json", %{message: message}) do
%{
id: message.id,
inserted_at: message.inserted_at,
text: message.text,
user: %{
email: message.user.email,
@bnhansn
bnhansn / room.js
Last active October 22, 2016 15:18
const initialState = {
channel: null,
currentRoom: {},
messages: [], // new line
};
export default function (state = initialState, action) {
switch (action.type) {
case 'ROOM_CONNECTED_TO_CHANNEL':
return {
@bnhansn
bnhansn / room.js
Last active October 22, 2016 15:13
import { reset } from 'redux-form';
export function connectToChannel(socket, roomId) {
return (dispatch) => {
if (!socket) { return false; }
const channel = socket.channel(`rooms:${roomId}`);
// new function
channel.on('message_created', (message) => {
dispatch({ type: 'MESSAGE_CREATED', message });