Skip to content

Instantly share code, notes, and snippets.

defmodule Sling.UserSocket do
use Phoenix.Socket
channel "rooms:*", Sling.RoomChannel
transport :websocket, Phoenix.Transports.WebSocket
def connect(%{"token" => token}, socket) do
case Guardian.decode_and_verify(token) do
{:ok, claims} ->
defmodule Sling.Message do
use Sling.Web, :model
schema "messages" do
field :text, :string
belongs_to :room, Sling.Room
belongs_to :user, Sling.User
timestamps()
end
defmodule Sling.Repo.Migrations.CreateMessage do
use Ecto.Migration
def change do
create table(:messages) do
add :text, :string, null: false
add :room_id, references(:rooms, on_delete: :nothing), null: false
add :user_id, references(:users, on_delete: :nothing), null: false
timestamps()
// @flow
import React, { Component } from 'react';
import { Field, reduxForm } from 'redux-form';
type Props = {
handleSubmit: () => void,
onSubmit: () => void,
submitting: boolean,
}
import React from 'react';
type Props = {
room: {
id: number,
name: string,
},
currentUserRoomIds: Array,
onRoomJoin: () => void,
}
@bnhansn
bnhansn / index.js
Last active October 21, 2016 20:53
// @flow
import React, { Component, PropTypes } from 'react';
import { connect } from 'react-redux';
import { css, StyleSheet } from 'aphrodite';
import { fetchRooms, createRoom, joinRoom } from '../../actions/rooms';
import NewRoomForm from '../../components/NewRoomForm';
import Navbar from '../../components/Navbar';
import RoomListItem from '../../components/RoomListItem';
const styles = StyleSheet.create({
@bnhansn
bnhansn / index.js
Last active October 21, 2016 20:19
// @flow
import React from 'react';
import { Link } from 'react-router';
import { css, StyleSheet } from 'aphrodite';
const styles = StyleSheet.create({
sidebar: {
display: 'flex',
flexDirection: 'column',
background: 'rgb(38,28,37)',
// @flow
import React from 'react';
const Room = props =>
<div>Room {props.params.id}</div>;
export default Room;
// @flow
import React, { Component } from 'react';
import { BrowserRouter, Miss } from 'react-router';
import { connect } from 'react-redux';
import { authenticate, unauthenticate, logout } from '../../actions/session';
import Home from '../Home';
import NotFound from '../../components/NotFound';
import Login from '../Login';
import Signup from '../Signup';
import MatchAuthenticated from '../../components/MatchAuthenticated';
import { combineReducers } from 'redux';
import { reducer as form } from 'redux-form';
import session from './session';
import rooms from './rooms'; // new line
const appReducer = combineReducers({
form,
session,
rooms, // new line
});