You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
121 lines
3.6 KiB
121 lines
3.6 KiB
//
|
|
// NotesPageViewController.swift
|
|
// Notes
|
|
//
|
|
// Created by Laurent Morvillier on 16/10/2022.
|
|
//
|
|
|
|
import Foundation
|
|
import UIKit
|
|
|
|
class NotesPageViewController : UIPageViewController, UIPageViewControllerDelegate, UIPageViewControllerDataSource {
|
|
|
|
fileprivate var _notes: [Note] = []
|
|
|
|
override func viewDidLoad() {
|
|
super.viewDidLoad()
|
|
|
|
self._loadNotes()
|
|
|
|
let shareButton = UIBarButtonItem(barButtonSystemItem: .action, target: self, action: #selector(shareHandler))
|
|
let addButton = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(addHandler))
|
|
self.navigationItem.rightBarButtonItems = [addButton, shareButton]
|
|
|
|
self.dataSource = self
|
|
self.delegate = self
|
|
|
|
if let note = self._notes.last {
|
|
let vc = self.viewController(note: note, index: self._notes.count - 1)
|
|
self.setViewControllers([vc], direction: .forward, animated: false)
|
|
}
|
|
|
|
}
|
|
|
|
fileprivate func _displayNote(note: Note) {
|
|
if let index = self._notes.firstIndex(of: note) {
|
|
let vc = self.viewController(note: note, index: index)
|
|
self.setViewControllers([vc], direction: .forward, animated: false)
|
|
} else {
|
|
print("note not found")
|
|
}
|
|
}
|
|
|
|
fileprivate func viewController(note: Note, index: Int) -> NoteViewController {
|
|
if let vc = self.storyboard?.instantiateViewController(withIdentifier: "note") as? NoteViewController {
|
|
vc.note = note
|
|
vc.index = index
|
|
return vc
|
|
} else {
|
|
fatalError("error with storyboard")
|
|
}
|
|
}
|
|
|
|
fileprivate func _loadNotes() {
|
|
|
|
do {
|
|
self._notes = try Note.fetchByDate()
|
|
if self._notes.isEmpty {
|
|
self._createNote()
|
|
self._loadNotes()
|
|
}
|
|
} catch {
|
|
print("error = \(error)")
|
|
}
|
|
|
|
}
|
|
|
|
// MARK: - UIPageViewControllerDataSource
|
|
|
|
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
|
|
|
|
guard let vc = viewController as? NoteViewController else {
|
|
return nil
|
|
}
|
|
|
|
let previousIndex = vc.index - 1
|
|
if previousIndex < 0 {
|
|
return nil
|
|
}
|
|
|
|
let note = self._notes[previousIndex]
|
|
return self.viewController(note: note, index: previousIndex)
|
|
}
|
|
|
|
func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
|
|
|
|
guard let vc = viewController as? NoteViewController else {
|
|
return nil
|
|
}
|
|
|
|
let nextIndex = vc.index + 1
|
|
if nextIndex == self._notes.count {
|
|
return nil
|
|
}
|
|
|
|
let note = self._notes[nextIndex]
|
|
return self.viewController(note: note, index: nextIndex)
|
|
}
|
|
|
|
// MARK: - Business
|
|
|
|
@objc func shareHandler() {
|
|
|
|
guard let vc = self.presentedViewController as? NoteViewController, let text = vc.note?.content else {
|
|
return
|
|
}
|
|
|
|
let activityViewController = UIActivityViewController(activityItems: [text], applicationActivities: nil)
|
|
self.present(activityViewController, animated: true)
|
|
}
|
|
|
|
@objc func addHandler() {
|
|
self._createNote()
|
|
}
|
|
|
|
fileprivate func _createNote() {
|
|
let note = Note(context: AppDelegate.viewContext)
|
|
self._loadNotes()
|
|
self._displayNote(note: note)
|
|
}
|
|
|
|
}
|
|
|