Skip to content
Snippets Groups Projects
Commit fef96d40 authored by cruxfilm's avatar cruxfilm
Browse files

- added .onDelete functionality in MailListView

- refactored some properties from MailListView into InboxView to make proper toolbar and navigation bar work
- changed slider button label for key/ID to slanted key
parent 4120cff8
No related branches found
No related tags found
1 merge request!76Resolve "InboxView & MailListView improvements"
......@@ -17,7 +17,7 @@ struct FolderOverView: View {
var body: some View {
List (folders, id: \.self){ f in
NavigationLink(
destination: MailListView(folderpath: f.path ?? f.name, name: f.name)
destination: MailListView(folderPath: f.path ?? f.name, folderName: f.name)
.environment(\.managedObjectContext, PersistentDataProvider.dataProvider.persistentContainer.viewContext)
) {
FolderRow(folder: f)
......
......@@ -12,58 +12,109 @@ import CoreData
// Updating text -> Last update, updating, no connection...
struct InboxView: View {
var folderpath: String
var folderPath: String
var name: String
@State var goToFolders = false
@State private var updating = false
@State private var composeMail = false
@State private var goToFolders = false
var body: some View {
NavigationView {
MailListView(folderpath: folderpath, name: name)
mailListView
.onAppear(perform: updateMails)
.sheet(isPresented: $composeMail) { ComposeView() }
.navigationBarItems(leading: folderButton, trailing: keyManagementButton)
.toolbar {
ToolbarItem(placement: .status) {
lastUpdate
}
ToolbarItemGroup(placement: .bottomBar) {
Spacer()
composeButton
}
}
}.navigationViewStyle(DoubleColumnNavigationViewStyle())
}
private var mailListView: some View {
MailListView(folderPath: folderPath, folderName: name)
.environment(\.managedObjectContext,
PersistentDataProvider
.dataProvider
.persistentContainer
.viewContext)
.navigationBarItems(leading: self.folderButton, trailing: keyManagementButton)
}
private var composeButton: some View {
Button {
composeMail = true
} label: {
Image(systemName: "square.and.pencil").imageScale(.large)
}
}
private var keyManagementButton: some View {
NavigationLink(destination: KeyManagementOverview()) {
Image(systemName: "slider.horizontal.3")
Image(systemName: "key")
.imageScale(.large)
.rotationEffect(Angle(degrees: 45))
}
}
private var lastUpdate: some View {
var text = NSLocalizedString("Updating", comment: "updating...")
if !updating {
let last = Date()
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale.current
dateFormatter.timeStyle = .medium
let dateString = dateFormatter.string(from: last)
text = NSLocalizedString("LastUpdate", comment: "") + " " + dateString
}
return Button(action: updateMails) {
Text(text).font(.callout)
}
}
private func updateMails() {
guard !updating else {
return
}
LetterboxModel
.instance
.mailHandler
.updateFolder(folderpath: folderPath) { error in
if error == nil {
self.updating = false
}
// TODO: Add error message
}
updating = true
}
private var folderButton: some View {
Button(action: {
Button {
goToFolders = true
}) {
Image(systemName: "tray.2")
.imageScale(.large)
} label: {
Image(systemName: "tray.2").imageScale(.large)
}
.background(
NavigationLink(destination: FolderOverView()
.background(NavigationLink(destination: FolderOverView()
.environment(\.managedObjectContext,
PersistentDataProvider
.dataProvider
.persistentContainer
.viewContext),
isActive: $goToFolders) {
EmptyView()
}
.hidden()
)
isActive: $goToFolders) {})
}
}
struct InboxView_Previews: PreviewProvider {
static var previews: some View {
return InboxView(folderpath: "INBOX", name: "INBOX")
return InboxView(folderPath: "INBOX", name: "INBOX")
.environment(\.managedObjectContext,
PersistentDataProvider
.proxyPersistentDataProvider
......
......@@ -18,16 +18,15 @@ struct MailListView: View {
var folderPath: String
var folderName: String
@State private var updating = false
@State private var showUser = false
@State private var searchText = ""
@State private var searchType = SearchType.All
@State private var composeMail = false
init(folderpath: String, name: String) {
fetchRequest = MailRecord.mailsInFolderFetchRequest(folderpath: folderpath)
self.folderPath = folderpath
self.folderName = name
init(folderPath: String, folderName: String) {
fetchRequest = MailRecord.mailsInFolderFetchRequest(folderpath: folderPath)
self.folderPath = folderPath
self.folderName = folderName
}
var body: some View {
......@@ -37,71 +36,20 @@ struct MailListView: View {
mailList.padding(-12)
}
.navigationBarTitle(folderName, displayMode: .inline)
.onAppear { updateMails() }
.sheet(isPresented: $composeMail) { ComposeView() }
.toolbar {
ToolbarItem(placement: .status) {
lastUpdate
}
ToolbarItemGroup(placement: .bottomBar) {
Spacer()
composeButton
}
}
}
private var mailList: some View {
List(self.mails.filter(filterKeyRecord), id: \.self) { record in
NavigationLink(destination: ReadMainView(model: ReadModel(mail: record))) {
MailRowView(mail: record)
}
}
.listStyle(InsetGroupedListStyle())
.resignKeyboardOnDragGesture() // hide keyboard when dragging
}
private var composeButton: some View {
Button {
composeMail = true
} label: {
Image(systemName: "square.and.pencil").imageScale(.large)
List {
ForEach(self.mails.filter(filterKeyRecord), id: \.self) { email in
NavigationLink(destination: ReadMainView(model: ReadModel(mail: email))) {
MailRowView(mail: email)
}
}
private var lastUpdate: some View {
var text = NSLocalizedString("Updating", comment: "updating...")
if !updating {
let last = Date()
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale.current
dateFormatter.timeStyle = .medium
let dateString = dateFormatter.string(from: last)
text = NSLocalizedString("LastUpdate", comment: "") + " " + dateString
}
return Button(action: updateMails) {
Text(text)
.font(.callout)
}
.onDelete {_ in
// TODO: Perform actual deletion of email
}
func updateMails() {
guard !updating else {
return
}
LetterboxModel
.instance
.mailHandler
.updateFolder(folderpath: folderPath) { error in
if error == nil {
self.updating = false
}
// TODO: Add error message
}
updating = true
.listStyle(InsetGroupedListStyle())
}
func filterKeyRecord(keyRecord: MailRecord) -> Bool {
......@@ -133,7 +81,7 @@ struct MailListView: View {
struct MailListView_Previews: PreviewProvider {
static var previews: some View {
MailListView(folderpath: "INBOX", name: "INBOX")
MailListView(folderPath: "INBOX", folderName: "INBOX")
.environment(\.managedObjectContext, PersistentDataProvider.proxyPersistentDataProvider.persistentContainer.viewContext)
}
}
......@@ -31,7 +31,7 @@ struct LetterboxApp: App {
case .GENERATEKEYS:
PermissionRequestView() // TODO Wait
case .LAUNCHEDBEFORE:
InboxView(folderpath: MailHandler.INBOX, name: NSLocalizedString("Inbox", comment: "Inbox"))
InboxView(folderPath: MailHandler.INBOX, name: NSLocalizedString("Inbox", comment: "Inbox"))
.environment(\.managedObjectContext, PersistentDataProvider.dataProvider.persistentContainer.viewContext)
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment