MongoView/MongoView/View Controllers/EditDocumentViewController....

74 lines
2.2 KiB
Swift

//
// 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: BSONDocument!
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: BSONDocument) {
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()
let printer = JSONPrettyPrinter(options: .convertMongoObjects)
let extended = document.toExtendedJSONString()
editorTextView.string = (try? printer.prettify(extended)) ?? extended
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) {
}
}