From 798e55a4ab8f65c5a6fb01f8af042331543868f9 Mon Sep 17 00:00:00 2001
From: Toby Brennan <contact@apptekstudios.com>
Date: Fri, 17 Jul 2020 19:31:22 +1000
Subject: [PATCH] Swift 5.2 support

---
 memri/cvu/defaults/type/Note.cvu              |  2 +-
 memri/gui/common/UIElementView.swift          |  6 ++---
 .../CalendarRenderer/CalendarRenderer.swift   | 10 ++++-----
 .../MapRenderer/MapRendererView.swift         |  8 +++----
 memri/gui/renderers/MessageRenderer.swift     |  6 ++---
 .../TimelineRenderer/TimelineRenderer.swift   | 22 ++++++++++---------
 6 files changed, 28 insertions(+), 26 deletions(-)

diff --git a/memri/cvu/defaults/type/Note.cvu b/memri/cvu/defaults/type/Note.cvu
index 2edad808..030098f6 100644
--- a/memri/cvu/defaults/type/Note.cvu
+++ b/memri/cvu/defaults/type/Note.cvu
@@ -197,7 +197,7 @@ Note[] {
         }
     }
 	
-	[renderer = calendar] {
+	[renderer = calendar.timeline] {
 		dateTime: {{.dateModified}}
 
 		TimelineItem {
diff --git a/memri/gui/common/UIElementView.swift b/memri/gui/common/UIElementView.swift
index 13783b50..91e24592 100644
--- a/memri/gui/common/UIElementView.swift
+++ b/memri/gui/common/UIElementView.swift
@@ -267,9 +267,9 @@ public struct UIElementView: SwiftUI.View {
 				} else if from.type == .Map {
 					MapView(useMapBox: context.settings.get("/user/general/gui/useMapBox", type: Bool.self) ?? false,
 							config: .init(dataItems: [self.item],
-										  locationResolver: { _ in get("location") },
-										  addressResolver: { _ in get("address", type: Address.self) ?? get("address", type: Results<Item>.self) },
-										  labelResolver: { _ in get("label") })
+										  locationResolver: { _ in self.get("location") },
+										  addressResolver: { _ in (self.get("address", type: Address.self) as Any?) ?? (self.get("address", type: Results<Item>.self) as Any?) },
+										  labelResolver: { _ in self.get("label") })
 					)
 						.background(Color(.secondarySystemBackground))
 						.setProperties(from.properties, self.item, context, self.viewArguments)
diff --git a/memri/gui/renderers/CalendarRenderer/CalendarRenderer.swift b/memri/gui/renderers/CalendarRenderer/CalendarRenderer.swift
index 6be0e7ba..9f8f7395 100644
--- a/memri/gui/renderers/CalendarRenderer/CalendarRenderer.swift
+++ b/memri/gui/renderers/CalendarRenderer/CalendarRenderer.swift
@@ -94,9 +94,9 @@ struct CalendarView: View {
                 day.map { day in
                     VStack(spacing: 0) {
                         Spacer()
-                        Text(calendarHelper.dayString(for: day))
-							.foregroundColor(calendarHelper.isToday(day) ? .red : Color(.label))
-                        Circle().fill(hasItemOnDay(day) ? Color.red : Color.clear)
+						Text(self.calendarHelper.dayString(for: day))
+							.foregroundColor(self.calendarHelper.isToday(day) ? .red : Color(.label))
+						Circle().fill(self.hasItemOnDay(day) ? Color.red : Color.clear)
                             .frame(width: 10, height: 10)
                             .padding(4)
                         Spacer()
@@ -117,12 +117,12 @@ struct CalendarView: View {
 			formatter.dateStyle = .long
 			formatter.timeStyle = .none
 			// handle press on day
-			let items = itemsOnDay(day)
+			let items = self.itemsOnDay(day)
 			let uids = items.compactMap { $0.uid }
 			
 			guard let itemType = items.first?.genericType, !uids.isEmpty else { return }
 			
-			try? ActionOpenViewWithUIDs(context).exec(["itemType": itemType, "uids": uids])
+			try? ActionOpenViewWithUIDs(self.context).exec(["itemType": itemType, "uids": uids])
 		}
     }
     
diff --git a/memri/gui/renderers/MapRenderer/MapRendererView.swift b/memri/gui/renderers/MapRenderer/MapRendererView.swift
index d49c610c..0ca8832a 100644
--- a/memri/gui/renderers/MapRenderer/MapRendererView.swift
+++ b/memri/gui/renderers/MapRenderer/MapRendererView.swift
@@ -58,14 +58,14 @@ struct MapRendererView: View {
 	var body: some View {
 		let config = MapViewConfig(dataItems: context.items,
 								   locationResolver: {
-									self.resolveExpression(renderConfig.location, forItem: $0)
+									self.resolveExpression(self.renderConfig.location, forItem: $0)
 								   },
 								   addressResolver: {
-									self.resolveExpression(renderConfig.address, toType: Results<Item>.self, forItem: $0)
-									?? self.resolveExpression(renderConfig.address, toType: Address.self, forItem: $0)
+									self.resolveExpression(self.renderConfig.address, toType: Results<Item>.self, forItem: $0)
+										?? self.resolveExpression(self.renderConfig.address, toType: Address.self, forItem: $0)
 								   },
 								   labelResolver: {
-									self.resolveExpression(renderConfig.label, forItem: $0)
+									self.resolveExpression(self.renderConfig.label, forItem: $0)
 								   },
 								   mapStyle: renderConfig.mapStyle,
 								   onPress: self.onPress)
diff --git a/memri/gui/renderers/MessageRenderer.swift b/memri/gui/renderers/MessageRenderer.swift
index acfd0442..9ad96d67 100644
--- a/memri/gui/renderers/MessageRenderer.swift
+++ b/memri/gui/renderers/MessageRenderer.swift
@@ -60,14 +60,14 @@ struct MessageRenderer: View {
     
     var section: ASSection<Int> {
 		ASSection<Int>(id: 0, data: context.items, selectedItems: selectedItems) { item, cellContext in
-			renderConfig.render(item: item)
+			self.renderConfig.render(item: item)
 				.environmentObject(self.context)
 		}
 		.onSelectSingle { (index) in
-			guard let selectedItem = context.items[safe: index],
+			guard let selectedItem = self.context.items[safe: index],
 				  let press = self.renderConfig.press
 			else { return }
-			context.executeAction(press, with: selectedItem)
+			self.context.executeAction(press, with: selectedItem)
 		}
     }
     
diff --git a/memri/gui/renderers/TimelineRenderer/TimelineRenderer.swift b/memri/gui/renderers/TimelineRenderer/TimelineRenderer.swift
index 8bc96529..c5178e8b 100644
--- a/memri/gui/renderers/TimelineRenderer/TimelineRenderer.swift
+++ b/memri/gui/renderers/TimelineRenderer/TimelineRenderer.swift
@@ -44,17 +44,17 @@ struct TimelineRenderer: View {
         return model.data.map { group in
             let matchesNow = model.calendarHelper.isSameAsNow(group.date, byComponents: model.detailLevel.relevantComponents)
             return ASSection<Date>(id: group.date, data: group.items) { element, cellContext in
-                renderElement(element)
+				self.renderElement(element)
 					.if(group.items.count < 2) { $0.frame(minHeight: 35) }
             }
 			.onSelectSingle({ (index) in
 				guard let element = group.items[safe: index] else { return }
 				if element.isGroup {
 					let uids = element.items.compactMap { $0.uid }
-					try? ActionOpenViewWithUIDs(context).exec(["itemType": element.itemType, "uids": uids])
+					try? ActionOpenViewWithUIDs(self.context).exec(["itemType": element.itemType, "uids": uids])
 				} else {
 					if let press = self.renderConfig.press, let item = element.items.first {
-						context.executeAction(press, with: item)
+						self.context.executeAction(press, with: item)
 					}
 				}
 			})
@@ -99,10 +99,12 @@ struct TimelineRenderer: View {
 							 backgroundColor: ItemFamily(rawValue: element.itemType)?.backgroundColor ?? .gray)
 				.frame(maxWidth: .infinity, alignment: .leading)
 			#warning("@Ruben: I couldn't figure out a way using current CVU options to provide a way to render for a `group` of items")
-		} else if let item = element.items.first {
-			self.renderConfig.render(item: item)
-				.frame(maxWidth: .infinity, alignment: .leading)
-				.environmentObject(context)
+		} else {
+			element.items.first.map {
+				self.renderConfig.render(item: $0)
+					.frame(maxWidth: .infinity, alignment: .leading)
+					.environmentObject(context)
+			}
 		}
 	}
     
@@ -119,7 +121,7 @@ struct TimelineRenderer: View {
     var layout: ASCollectionLayout<Date> {
         ASCollectionLayout(scrollDirection: .vertical, interSectionSpacing: 0) { () -> ASCollectionLayoutSection in
             ASCollectionLayoutSection { layoutEnvironment -> NSCollectionLayoutSection in
-                let hasFullWidthHeader: Bool = renderConfig.detailLevel == .year
+				let hasFullWidthHeader: Bool = self.renderConfig.detailLevel == .year
                 
                 
                 let itemLayoutSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0), heightDimension: .estimated(20))
@@ -130,7 +132,7 @@ struct TimelineRenderer: View {
                 
                 let section = NSCollectionLayoutSection(group: group)
                 
-                section.contentInsets = .init(top: 15, leading: hasFullWidthHeader ? 10 : leadingInset + 5 , bottom: 15, trailing: 10)
+				section.contentInsets = .init(top: 15, leading: hasFullWidthHeader ? 10 : self.leadingInset + 5 , bottom: 15, trailing: 10)
                 section.interGroupSpacing = 10
                 section.visibleItemsInvalidationHandler = { visibleItems, contentOffset, layoutEnvironment in
                     // If this isn't defined, there is a bug in UICVCompositional Layout that will fail to update sizes of cells
@@ -146,7 +148,7 @@ struct TimelineRenderer: View {
                     headerSupplementary.extendsBoundary = true
                     headerSupplementary.pinToVisibleBounds = false
                 } else {
-                    let supplementarySize = NSCollectionLayoutSize(widthDimension: .absolute(leadingInset), heightDimension: .absolute(64))
+					let supplementarySize = NSCollectionLayoutSize(widthDimension: .absolute(self.leadingInset), heightDimension: .absolute(64))
                     headerSupplementary = NSCollectionLayoutBoundarySupplementaryItem(
                         layoutSize: supplementarySize,
                         elementKind: UICollectionView.elementKindSectionHeader,
-- 
GitLab