// // EditDocumentViewController.swift // MongoView // // Created by Shadowfacts on 4/6/20. // Copyright © 2020 Shadowfacts. All rights reserved. // import Cocoa import MongoSwift class EditDocumentViewController: NSViewController { private(set) var mongoController: MongoController! private(set) var collection: DatabaseCollection! private(set) var document: Document! var documentEdited: (() -> Void)? @IBOutlet var editorTextView: JavaScriptEditorView! @IBOutlet weak var saveButton: NSButton! @IBOutlet weak var cancelButton: NSButton! @IBOutlet weak var validateButton: NSButton! init(mongoController: MongoController, collection: DatabaseCollection, document: Document) { self.mongoController = mongoController self.collection = collection self.document = document super.init(nibName: "EditDocumentViewController", bundle: .main) } required init?(coder: NSCoder) { fatalError() } override func viewDidLoad() { super.viewDidLoad() editorTextView.string = ExtendedJSON.prettify(document.extendedJSON) ?? document.extendedJSON editorTextView.isAutomaticQuoteSubstitutionEnabled = false } @IBAction func savePressed(_ sender: Any) { guard let id = document["_id"], let newDoc = ExtendedJSON.toDocument(editorTextView.string) else { // todo: error return } let collection = mongoController.collection(self.collection) collection.replaceOne(filter: ["_id": id], replacement: newDoc).whenComplete { (result) in DispatchQueue.main.async { switch result { case .success(_): self.documentEdited?() case let .failure(error): print("Unable to replace document: \(error)") } self.view.window!.close() } } } @IBAction func cancelPressed(_ sender: Any) { view.window!.close() } @IBAction func validatePressed(_ sender: Any) { } }