         return placeholder
     }()
 
+    let previewView: UIImageView = {
+        let preview = UIImageView()
+        preview.translatesAutoresizingMaskIntoConstraints = false
+
+        return preview
+    }()
+
     private let toolbar = UIToolbar()
+
+    let preview = MutableProperty<UIImage?>(nil)
 
     weak var delegate: ComposeMessageViewDelegate?
 

        contentField.delegate = self
        addSubview(contentField)
        addSubview(placeholder)

        NSLayoutConstraint.activate([
            contentField.topAnchor.constraint(equalTo: topAnchor),

        self.view = composeMessageView
    }

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)

        composeMessageView.preview <~ attachment.producer.map { $0.flatMap(UIImage.init) }

    }

    func didTapSend() {
        present(LoadingViewController(), animated: true, completion: nil)
        let content = (view as! ComposeMessageView).contentField.text ?? "No content"

        composer
            .sendMessage(with: content, attachments: [attachment.value].flatMap { $0 })
            .observe(on: UIScheduler())
            .on(completed: { [weak self] in
                self?.dismiss(animated: true) {
