Created
May 30, 2016 20:10
-
-
Save xcadaverx/0963c471ef84e805e572c6a803d93f40 to your computer and use it in GitHub Desktop.
udpate for http://www.waltza.com/2015/07/24/flamingpants-firebase-rxswift-and-slacktextviewcontroller/
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// ViewController.swift | |
// flamingpants-firebase-tutorial | |
// | |
// Created by Daniel Williams on 5/29/16. | |
// Copyright © 2016 Dandom, LLC. All rights reserved. | |
// | |
import UIKit | |
import Firebase | |
import RxCocoa | |
import RxSwift | |
import SlackTextViewController | |
import FirebaseRxSwiftExtensions | |
class ViewController: SLKTextViewController { | |
var messageModels: [MessageModel] = [MessageModel]() | |
var isInitialLoad = true | |
var name = "Daniel" | |
var disposeBag = DisposeBag() | |
var pressedRightButtonSubject: PublishSubject<String> = PublishSubject() | |
var messagesRef: Firebase! | |
override func viewDidLoad() { | |
super.viewDidLoad() | |
self.registerPrefixesForAutoCompletion([""]) | |
tableView?.registerClass(MessageTableViewCell.self, forCellReuseIdentifier: MessageTableViewCell.REUSE_ID) | |
tableView?.rowHeight = UITableViewAutomaticDimension | |
tableView?.estimatedRowHeight = 50.0 | |
inverted = true | |
let rootRef = Firebase(url: "https://YOURFIREBASEAPP.firebaseio.com/") | |
messagesRef = rootRef.childByAppendingPath("messages") | |
messagesRef.rx_observe(.ChildAdded) | |
.map { snapshot in | |
return MessageModel(snapshot: snapshot) } | |
.subscribeNext { (messageModel: MessageModel) in | |
self.messageModels.insert(messageModel, atIndex: 0) | |
if self.isInitialLoad == false { | |
self.tableView?.beginUpdates() | |
self.tableView?.insertRowsAtIndexPaths([NSIndexPath(forRow: 0, inSection: 0)], withRowAnimation: .Automatic) | |
self.tableView?.endUpdates() | |
} | |
} | |
.addDisposableTo(disposeBag) | |
messagesRef.observeSingleEventOfType(.Value) { (snapshot: FDataSnapshot!) in | |
self.tableView?.reloadData() | |
self.isInitialLoad = false | |
} | |
pressedRightButtonSubject | |
.flatMap { bodyText -> Observable<Firebase> in | |
let name = self.name | |
return self.messagesRef.childByAutoId().rx_setValue(["name": name, "body": bodyText]) | |
} | |
.subscribeNext { (newMessageReference:Firebase) -> Void in | |
print("a new message was commited to firebase.") | |
} | |
.addDisposableTo(disposeBag) | |
} | |
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { | |
return messageModels.count | |
} | |
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { | |
let cell = tableView.dequeueReusableCellWithIdentifier(MessageTableViewCell.REUSE_ID, forIndexPath: indexPath) as! MessageTableViewCell | |
let messageModelAtIndexPath = messageModels[indexPath.row] | |
cell.nameLabel.text = messageModelAtIndexPath.name | |
cell.bodyLabel.text = messageModelAtIndexPath.body | |
cell.transform = tableView.transform | |
return cell | |
} | |
override func didPressRightButton(sender: AnyObject?) { | |
pressedRightButtonSubject.onNext(textView.text) | |
super.didPressRightButton(sender) | |
} | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment