Inform about commands not found

This commit is contained in:
Ken-Håvard Lieng 2017-05-22 03:49:37 +02:00
parent 7e080f2c99
commit 41d6099d89
9 changed files with 68 additions and 55 deletions

File diff suppressed because one or more lines are too long

View File

@ -7,6 +7,7 @@
"rules": {
"arrow-parens": 0,
"comma-dangle": [2, "never"],
"consistent-return": 0,
"jsx-a11y/no-static-element-interactions": 0,
"new-cap": [2, { "capIsNewExceptions": ["Map", "List", "Record", "Set"] }],
"no-console": 0,

View File

@ -96,10 +96,12 @@ i[class^="icon-"]:before, i[class*=" icon-"]:before {
margin-right: 5px;
}
.tab-indicator {
width: 10px;
height: 10px;
border-radius: 50%;
.tab-label {
margin-top: 10px;
margin-left: 15px;
margin-bottom: 5px;
font-size: 12px;
color: #999;
}
.button-connect {

View File

@ -3,7 +3,7 @@ import { COMMAND } from './actions';
import { setNick, disconnect, whois, away } from './actions/server';
import { join, part, invite, kick } from './actions/channel';
import { select } from './actions/tab';
import { sendMessage, addMessage, inform, raw } from './actions/message';
import { sendMessage, addMessage, raw } from './actions/message';
const help = [
'/join <channel> - Join a channel',
@ -62,7 +62,7 @@ export default createCommandMiddleware(COMMAND, {
content: topic
}));
} else {
dispatch(inform('No topic set', server, channel));
return 'No topic set';
}
},
@ -104,11 +104,17 @@ export default createCommandMiddleware(COMMAND, {
raw({ dispatch, server }, ...message) {
if (message) {
dispatch(raw(message.join(' '), server));
const cmd = message.join(' ');
dispatch(raw(cmd, server));
return `=> ${cmd}`;
}
},
help({ dispatch, server, channel }) {
dispatch(inform(help, server, channel));
help() {
return help;
},
commandNotFound(_, command) {
return `The command /${command} was not found`;
}
});

View File

@ -34,7 +34,9 @@ export default class TabList extends PureComponent {
/>
));
if (privateChats.has(address)) {
if (privateChats.has(address) && privateChats.get(address).size > 0) {
tabs.push(<div className="tab-label">Private messages</div>);
privateChats.get(address).forEach(nick => tabs.push(
<TabListItem
key={address + nick}

View File

@ -7,34 +7,27 @@ export default class TabListItem extends PureComponent {
};
render() {
const { target, content, selected } = this.props;
const { target, content, selected, connected } = this.props;
const classes = [];
const style = {};
if (!target) {
classes.push('tab-server');
if (connected) {
style.color = '#6BB758';
} else {
style.color = '#F6546A';
}
}
if (selected) {
classes.push('selected');
}
let indicator = null;
if (this.props.connected !== undefined) {
const style = {};
if (this.props.connected) {
style.background = '#6BB758';
} else {
style.background = '#F6546A';
}
indicator = <i className="tab-indicator" style={style} />;
}
return (
<p className={classes.join(' ')} onClick={this.handleClick}>
<p className={classes.join(' ')} style={style} onClick={this.handleClick}>
<span className="tab-content">{content}</span>
{indicator}
</p>
);
}

View File

@ -1,17 +1,28 @@
import { inform } from '../actions/message';
const notFound = 'commandNotFound';
function createContext({ dispatch, getState }, { server, channel }) {
return { dispatch, getState, server, channel };
}
export default function createCommandMiddleware(type, handlers) {
return ({ dispatch, getState }) => next => action => {
return store => next => action => {
if (action.type === type) {
const words = action.command.slice(1).split(' ');
const command = words[0];
const params = words.slice(1);
let result;
if (command in handlers) {
handlers[command]({
dispatch,
getState,
server: action.server,
channel: action.channel
}, ...params);
result = handlers[command](createContext(store, action), ...params);
} else if (notFound in handlers) {
result = handlers[notFound](createContext(store, action), command);
}
if (typeof result === 'string' || Array.isArray(result)) {
store.dispatch(inform(result, action.server, action.channel));
}
}

View File

@ -52,5 +52,4 @@ export function find(arr, pred) {
return arr[i];
}
}
return undefined;
}

View File

@ -54,7 +54,6 @@ export function routeMiddleware() {
default:
return next(action);
}
return undefined;
};
}