weechatRN

Weechat relay client for iOS using websockets https://github.com/mhoran/weechatRN
git clone http://git.hanabi.in/repos/weechatRN.git
Log | Files | Refs | README | LICENSE

commit 9207f469c411ef1a84c696a905470b5cab0942d6
parent a522a41e410bb9790df93640fd8bf205a5eabba0
Author: Johan Lindskogen <johan.lindskogen@gmail.com>
Date:   Wed,  4 Apr 2018 23:09:09 +0200

Show topic under header

Diffstat:
Msrc/usecase/App.tsx | 25++++++++++++++++++++++---
Msrc/usecase/buffers/ui/BufferContainer.tsx | 16+++++++++++++++-
2 files changed, 37 insertions(+), 4 deletions(-)

diff --git a/src/usecase/App.tsx b/src/usecase/App.tsx @@ -17,6 +17,7 @@ import { changeCurrentBuffer } from "./buffers/actions/BufferActions"; import BufferContainer from "./buffers/ui/BufferContainer"; import BufferList from "./buffers/ui/BufferList"; import { StoreState } from "../store"; +import { renderWeechatFormat } from "../lib/weechat/color-formatter"; interface Props { buffers: { [key: string]: WeechatBuffer }; @@ -28,9 +29,17 @@ interface Props { dispatch: (any) => void; } -class App extends React.Component<Props> { +interface State { + showTopic: boolean; +} + +class App extends React.Component<Props, State> { drawer: Drawer; + state: State = { + showTopic: false + }; + changeCurrentBuffer = (buffer: WeechatBuffer) => { const { currentBufferId, fetchLinesForBuffer } = this.props; @@ -45,6 +54,12 @@ class App extends React.Component<Props> { } }; + toggleShowTopic = () => { + this.setState(state => ({ + showTopic: !state.showTopic + })); + }; + openDrawer = () => { this.drawer.open(); Keyboard.dismiss(); @@ -64,6 +79,8 @@ class App extends React.Component<Props> { fetchLinesForBuffer } = this.props; + const { showTopic } = this.state; + const sidebar = ( <BufferList buffers={_.orderBy(_.values(buffers), ["number"])} @@ -94,14 +111,16 @@ class App extends React.Component<Props> { <Text style={styles.channelsButtonText}>#</Text> </TouchableOpacity> </View> - <View> + <TouchableOpacity onPress={this.toggleShowTopic}> <Text style={styles.topbarText}> {currentBuffer && currentBuffer.short_name} </Text> - </View> + </TouchableOpacity> <View style={styles.channels} /> </View> <BufferContainer + showTopic={showTopic} + buffer={currentBuffer} sendMessage={this.sendMessage} fetchLinesForBuffer={fetchLinesForBuffer} bufferId={currentBufferId} diff --git a/src/usecase/buffers/ui/BufferContainer.tsx b/src/usecase/buffers/ui/BufferContainer.tsx @@ -10,10 +10,12 @@ import { TextInput, Easing, View, + Text, EmitterSubscription } from "react-native"; import { connect } from "react-redux"; +import ParsedText from "react-native-parsed-text"; import { changeCurrentBuffer } from "../actions/BufferActions"; @@ -21,9 +23,12 @@ import BufferLine from "./BufferLine"; import Buffer from "./Buffer"; import { getParseArgs } from "../../../lib/helpers/parse-text-args"; import { formatUrl } from "../../../lib/helpers/url-formatter"; +import { renderWeechatFormat } from "../../../lib/weechat/color-formatter"; interface Props { + buffer: WeechatBuffer | null; bufferId: string; + showTopic: boolean; fetchLinesForBuffer: (bufferId: string) => void; sendMessage: (message: string) => void; } @@ -95,7 +100,7 @@ export default class BufferContainer extends React.Component<Props, State> { onLongPress = (line: WeechatLine) => {}; render() { - const { bufferId } = this.props; + const { bufferId, buffer, showTopic } = this.props; const { textValue } = this.state; if (!bufferId) { @@ -104,6 +109,15 @@ export default class BufferContainer extends React.Component<Props, State> { return ( <KeyboardAvoidingView style={styles.container} behavior="padding"> + {showTopic && ( + <View> + <Text> + {renderWeechatFormat(buffer.title).map((props, index) => ( + <ParsedText {...props} key={index} parse={this.parseArgs} /> + ))} + </Text> + </View> + )} <Buffer bufferId={bufferId} onLongPress={this.onLongPress}