Compare commits
No commits in common. "68b856817435fbc63844fa128aa6c8e43c6556c8" and "f9a5f1698b87efe02d369e82ba3fe482c5a9f260" have entirely different histories.
68b8568174
...
f9a5f1698b
6 changed files with 40 additions and 97 deletions
|
@ -46,7 +46,9 @@ function App({ user, gateway }) {
|
||||||
<Route path="/login">
|
<Route path="/login">
|
||||||
<Login />
|
<Login />
|
||||||
</Route>
|
</Route>
|
||||||
<Route path="/categories/:id" component={ CategoryView } />
|
<Route path="/categories/:id">
|
||||||
|
<CategoryView />
|
||||||
|
</Route>
|
||||||
<Route path="/">
|
<Route path="/">
|
||||||
<Root user={user} />
|
<Root user={user} />
|
||||||
</Route>
|
</Route>
|
||||||
|
|
|
@ -1,20 +1,12 @@
|
||||||
// import CategoryProfile from './CategoryProfile';
|
// import CategoryProfile from './CategoryProfile';
|
||||||
|
|
||||||
import { useHistory } from 'react-router-dom';
|
import { useHistory } from 'react-router-dom';
|
||||||
import gatewayConnection from '../../Gateway/globalGatewayConnection';
|
|
||||||
|
|
||||||
export default function CategoryButton({ category }) {
|
export default function CategoryButton({ category }) {
|
||||||
const history = useHistory();
|
const history = useHistory();
|
||||||
|
|
||||||
const handleClick = () => {
|
|
||||||
if (gatewayConnection.isConnected) {
|
|
||||||
gatewayConnection.subscribeToCategoryChat(category._id);
|
|
||||||
history.push(`/categories/${category._id}`);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<button className="button category-button" onClick={ handleClick }>
|
<button className="button category-button" onClick={ () => history.push(`/categories/${category._id}`) }>
|
||||||
{/*
|
{/*
|
||||||
maybe enable someday...
|
maybe enable someday...
|
||||||
<CategoryProfile category={ category } size="32" />
|
<CategoryProfile category={ category } size="32" />
|
||||||
|
@ -22,5 +14,5 @@ export default function CategoryButton({ category }) {
|
||||||
|
|
||||||
{ category.title }
|
{ category.title }
|
||||||
</button>
|
</button>
|
||||||
);
|
)
|
||||||
}
|
}
|
|
@ -1,16 +1,12 @@
|
||||||
import CategoryViewLoader from './CategoryViewLoader';
|
import CategoryViewLoader from './CategoryViewLoader';
|
||||||
import CategoryProfile from './CategoryProfileLink';
|
import CategoryProfile from './CategoryProfileLink';
|
||||||
import Message from '../Messages/Message';
|
import Message from '../Messages/Message';
|
||||||
import gatewayConnection from '../../Gateway/globalGatewayConnection';
|
|
||||||
|
|
||||||
import { useParams } from 'react-router-dom';
|
import { useParams } from 'react-router-dom';
|
||||||
import { connect } from 'react-redux';
|
import { connect } from 'react-redux'
|
||||||
import { useState, useRef } from 'react';
|
|
||||||
|
|
||||||
function CategoryView({ categories, messages }) {
|
function CategoryView({ categories }) {
|
||||||
const { id } = useParams();
|
const { id } = useParams();
|
||||||
const [ textInput, setTextInput ] = useState('');
|
|
||||||
const textInputRef = useRef(null);
|
|
||||||
|
|
||||||
let category;
|
let category;
|
||||||
|
|
||||||
|
@ -18,14 +14,18 @@ function CategoryView({ categories, messages }) {
|
||||||
category = categories.find(x => x._id === id);
|
category = categories.find(x => x._id === id);
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleTextboxKeydown = (e) => {
|
const dummyMessage1 = {
|
||||||
if (e.key === 'Enter') {
|
author: {
|
||||||
// Send message written in textbox
|
username: '__SYSTEM',
|
||||||
|
_id: '5fc69864f15a7c5e504c9a1f'
|
||||||
gatewayConnection.sendMessage(id, textInput);
|
},
|
||||||
textInputRef.current.value = '';
|
category: {
|
||||||
}
|
title: 'alan',
|
||||||
}
|
_id: 'y8fyerghgh'
|
||||||
|
},
|
||||||
|
content: 'yes hello',
|
||||||
|
_id: 'i8ru354y89ty549ytg'
|
||||||
|
};
|
||||||
|
|
||||||
if (category) {
|
if (category) {
|
||||||
return (
|
return (
|
||||||
|
@ -34,10 +34,11 @@ function CategoryView({ categories, messages }) {
|
||||||
<CategoryProfile category={ category } />
|
<CategoryProfile category={ category } />
|
||||||
</div>
|
</div>
|
||||||
<div className="card message-list-card">
|
<div className="card message-list-card">
|
||||||
{ messages.map(m => <Message key={ m._id } message={ m } />) }
|
<Message message={ dummyMessage1 } />
|
||||||
</div>
|
</div>
|
||||||
<div className="card bar-card-bottom">
|
<div className="card bar-card-bottom">
|
||||||
<input className="text-input" type="text" placeholder="Go on, type something interesting!" ref={ textInputRef } onKeyDown={ handleTextboxKeydown } onChange={ ({ target }) => setTextInput(target.value) }></input>
|
The hearing of the average cat is at least five times keener than that of a human adult.
|
||||||
|
In the largest cat breed, the average male weighs approximately 20 pounds.
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
|
@ -59,12 +60,9 @@ function CategoryView({ categories, messages }) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const stateToProps = (state, ownProps) => {
|
const stateToProps = (state) => {
|
||||||
const categoryId = ownProps.match.params.id; // NOTE(hippoz): kind of a hack, but it works and idk if theres any other solution
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
categories: state?.categories,
|
categories: state?.categories
|
||||||
messages: state?.messages[categoryId] || []
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -6,9 +6,6 @@ const globalGatewayConnection = new GatewayConnection(config.gatewayUrl);
|
||||||
|
|
||||||
globalGatewayConnection.onConnect = function() {
|
globalGatewayConnection.onConnect = function() {
|
||||||
store.dispatch({ type: 'gateway/connectionstatus', gateway: { isConnected: true } });
|
store.dispatch({ type: 'gateway/connectionstatus', gateway: { isConnected: true } });
|
||||||
globalGatewayConnection.socket.on('message', (message) => {
|
|
||||||
store.dispatch({ type: 'messagestore/addmessage', message });
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
globalGatewayConnection.onDisconnect = function() {
|
globalGatewayConnection.onDisconnect = function() {
|
||||||
store.dispatch({ type: 'gateway/connectionstatus', gateway: { isConnected: false } });
|
store.dispatch({ type: 'gateway/connectionstatus', gateway: { isConnected: false } });
|
||||||
|
|
|
@ -3,23 +3,13 @@
|
||||||
:root {
|
:root {
|
||||||
--background-color: #{$nord0};
|
--background-color: #{$nord0};
|
||||||
|
|
||||||
--default-main-card-color: var(--background-color);
|
--default-main-card-color: #{$nord1};
|
||||||
--card-box-shadow-color:rgba(0, 0, 0, 0.27);
|
--card-box-shadow-color:rgba(0, 0, 0, 0.25);
|
||||||
|
|
||||||
--default-text-color: #{$nord5};
|
--default-text-color: #{$nord5};
|
||||||
|
|
||||||
--accent-color-dark: #{$nord1};
|
--accent-color-dark: #{$nord2};
|
||||||
--accent-color-light: #{$nord2};
|
--accent-color-light: #{$nord3};
|
||||||
|
|
||||||
--category-top-bar-color: var(--accent-color-light);
|
|
||||||
--category-bottom-text-bar-color: var(--accent-color-light);
|
|
||||||
|
|
||||||
--category-list-background-color: var(--background-color);
|
|
||||||
--category-message-list-background-color: var(--background-color);
|
|
||||||
--category-message-color: var(--accent-color-dark);
|
|
||||||
|
|
||||||
--button-color: var(--accent-color-dark);
|
|
||||||
--button-hover-color: var(--accent-color-light);
|
|
||||||
|
|
||||||
--default-transition-duration: 200ms;
|
--default-transition-duration: 200ms;
|
||||||
--default-border-radius: 0px;
|
--default-border-radius: 0px;
|
||||||
|
@ -73,9 +63,8 @@ body {
|
||||||
@include card;
|
@include card;
|
||||||
|
|
||||||
&.bar-card {
|
&.bar-card {
|
||||||
background-color: var(--category-top-bar-color);
|
background-color: var(--accent-color-dark);
|
||||||
min-height: 50px;
|
min-height: 40px;
|
||||||
padding: 5px;
|
|
||||||
|
|
||||||
border-radius: var(--default-button-border-radius) var(--default-button-border-radius) 0px 0px;
|
border-radius: var(--default-button-border-radius) var(--default-button-border-radius) 0px 0px;
|
||||||
display: flex;
|
display: flex;
|
||||||
|
@ -83,35 +72,27 @@ body {
|
||||||
justify-content: left;
|
justify-content: left;
|
||||||
|
|
||||||
font-size: large;
|
font-size: large;
|
||||||
|
|
||||||
z-index: 99;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
&.bar-card-bottom {
|
&.bar-card-bottom {
|
||||||
background-color: var(--category-bottom-text-bar-color);
|
background-color: var(--accent-color-dark);
|
||||||
box-shadow: 0px -3px 5px var(--card-box-shadow-color);
|
min-height: 30px;
|
||||||
|
|
||||||
min-height: 40px;
|
|
||||||
|
|
||||||
border-radius: 0px 0px var(--default-button-border-radius) var(--default-button-border-radius);
|
border-radius: 0px 0px var(--default-button-border-radius) var(--default-button-border-radius);
|
||||||
display: flex;
|
|
||||||
|
|
||||||
z-index: 100;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
&.message-list-card {
|
&.message-list-card {
|
||||||
@include fancy-scrollbar-firefox;
|
|
||||||
border-radius: 0px;
|
border-radius: 0px;
|
||||||
flex-grow: 1;
|
flex-grow: 1;
|
||||||
box-shadow: none;
|
box-shadow: none;
|
||||||
overflow: auto;
|
|
||||||
background-color: var(--category-message-list-background-color);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.main-card {
|
.main-card {
|
||||||
@include card;
|
@include card;
|
||||||
|
|
||||||
|
margin: 12px;
|
||||||
|
|
||||||
&.main-content-card {
|
&.main-content-card {
|
||||||
flex-grow: 1;
|
flex-grow: 1;
|
||||||
display: flex;
|
display: flex;
|
||||||
|
@ -125,7 +106,7 @@ body {
|
||||||
padding: 5px;
|
padding: 5px;
|
||||||
margin: 5px;
|
margin: 5px;
|
||||||
border: 0px;
|
border: 0px;
|
||||||
background-color: var(--button-color);
|
background-color: var(--accent-color-dark);
|
||||||
color: var(--default-text-color);
|
color: var(--default-text-color);
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
transition: background-color, var(--default-transition-duration);
|
transition: background-color, var(--default-transition-duration);
|
||||||
|
@ -160,8 +141,6 @@ body {
|
||||||
|
|
||||||
min-width: 110px;
|
min-width: 110px;
|
||||||
max-width: 110px;
|
max-width: 110px;
|
||||||
|
|
||||||
background-color: var(--category-list-background-color);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.profile-picture {
|
.profile-picture {
|
||||||
|
@ -207,21 +186,6 @@ body {
|
||||||
|
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
margin-top: 15px;
|
|
||||||
margin-left: 5px;
|
|
||||||
margin-right: 5px;
|
|
||||||
padding: 5px;
|
|
||||||
background-color: var(--category-message-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
.text-input {
|
|
||||||
@include card;
|
|
||||||
|
|
||||||
margin: 5px;
|
|
||||||
padding: 5px;
|
|
||||||
border: none;
|
|
||||||
color: var(--default-text-color);
|
|
||||||
flex-grow: 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@media only screen and (max-width: 600px) {
|
@media only screen and (max-width: 600px) {
|
||||||
|
@ -234,4 +198,8 @@ body {
|
||||||
min-width: 60px;
|
min-width: 60px;
|
||||||
max-width: 60px;
|
max-width: 60px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.main-card {
|
||||||
|
margin: 6px;
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -3,8 +3,7 @@ import { createStore } from 'redux';
|
||||||
const intitialState = {
|
const intitialState = {
|
||||||
user: null,
|
user: null,
|
||||||
categories: null,
|
categories: null,
|
||||||
gateway: { isConnected: false },
|
gateway: { isConnected: false }
|
||||||
messages: {}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const reducer = (state = intitialState, payload) => {
|
const reducer = (state = intitialState, payload) => {
|
||||||
|
@ -32,19 +31,6 @@ const reducer = (state = intitialState, payload) => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
case 'messagestore/addmessage': {
|
|
||||||
return {
|
|
||||||
...state,
|
|
||||||
messages: {
|
|
||||||
...state.messages,
|
|
||||||
[payload.message.category._id]: [
|
|
||||||
...state.messages[payload.message.category._id] || [],
|
|
||||||
payload.message
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
default: {
|
default: {
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue