Skip to content

Commit 393c2b6

Browse files
Merge pull request #8 from camdenwebster/final-stretch
Final stretch
2 parents 08af6f4 + 48eadf0 commit 393c2b6

18 files changed

Lines changed: 438 additions & 332 deletions

TaskBlock.xcodeproj/project.pbxproj

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,9 @@
1313
19254BB12BE3F41800D4D0C5 /* CalendarAndReminderSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19254BB02BE3F41800D4D0C5 /* CalendarAndReminderSettings.swift */; };
1414
192B535C2BE7488200CF53ED /* BlocksSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 192B535B2BE7488200CF53ED /* BlocksSettings.swift */; };
1515
192B535E2BE74B6100CF53ED /* iCloudSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 192B535D2BE74B6100CF53ED /* iCloudSettings.swift */; };
16-
192B53602BE74C6A00CF53ED /* DaySettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 192B535F2BE74C6A00CF53ED /* DaySettings.swift */; };
17-
192B53622BE74C7200CF53ED /* AboutSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 192B53612BE74C7200CF53ED /* AboutSettings.swift */; };
16+
192B53602BE74C6A00CF53ED /* AboutSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 192B535F2BE74C6A00CF53ED /* AboutSettings.swift */; };
17+
192B53622BE74C7200CF53ED /* MainSettingsMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 192B53612BE74C7200CF53ED /* MainSettingsMenu.swift */; };
18+
192B53642BEA65AD00CF53ED /* settings.plist in Resources */ = {isa = PBXBuildFile; fileRef = 192B53632BEA65AD00CF53ED /* settings.plist */; };
1819
192C7D212B85A2FB00DBA8FB /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 192C7D202B85A2FB00DBA8FB /* AppDelegate.swift */; };
1920
192C7D232B85A2FB00DBA8FB /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 192C7D222B85A2FB00DBA8FB /* SceneDelegate.swift */; };
2021
192C7D282B85A2FB00DBA8FB /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 192C7D262B85A2FB00DBA8FB /* Main.storyboard */; };
@@ -31,7 +32,7 @@
3132
19B521192BDC2A36007727F5 /* BlockItem+CoreDataClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19B521172BDC2A36007727F5 /* BlockItem+CoreDataClass.swift */; };
3233
19B5211A2BDC2A36007727F5 /* BlockItem+CoreDataProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19B521182BDC2A36007727F5 /* BlockItem+CoreDataProperties.swift */; };
3334
19DA03162B8EE1E900303FE2 /* DetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19DA03152B8EE1E900303FE2 /* DetailViewController.swift */; };
34-
19E0DF3D2BDA8B390094575E /* Day.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19E0DF3C2BDA8B390094575E /* Day.swift */; };
35+
19E0DF3D2BDA8B390094575E /* DaySettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19E0DF3C2BDA8B390094575E /* DaySettings.swift */; };
3536
19E478C52BD20E6300557640 /* CategoriesTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19E478C42BD20E6300557640 /* CategoriesTableViewController.swift */; };
3637
19ED78572B9AC32700BDA1A7 /* ToDoModel.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 19ED78552B9AC32700BDA1A7 /* ToDoModel.xcdatamodeld */; };
3738
/* End PBXBuildFile section */
@@ -53,8 +54,9 @@
5354
19254BB02BE3F41800D4D0C5 /* CalendarAndReminderSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalendarAndReminderSettings.swift; sourceTree = "<group>"; };
5455
192B535B2BE7488200CF53ED /* BlocksSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlocksSettings.swift; sourceTree = "<group>"; };
5556
192B535D2BE74B6100CF53ED /* iCloudSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = iCloudSettings.swift; sourceTree = "<group>"; };
56-
192B535F2BE74C6A00CF53ED /* DaySettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DaySettings.swift; sourceTree = "<group>"; };
57-
192B53612BE74C7200CF53ED /* AboutSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AboutSettings.swift; sourceTree = "<group>"; };
57+
192B535F2BE74C6A00CF53ED /* AboutSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AboutSettings.swift; sourceTree = "<group>"; };
58+
192B53612BE74C7200CF53ED /* MainSettingsMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainSettingsMenu.swift; sourceTree = "<group>"; };
59+
192B53632BEA65AD00CF53ED /* settings.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = settings.plist; sourceTree = "<group>"; };
5860
192C7D1D2B85A2FB00DBA8FB /* TaskBlock.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = TaskBlock.app; sourceTree = BUILT_PRODUCTS_DIR; };
5961
192C7D202B85A2FB00DBA8FB /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
6062
192C7D222B85A2FB00DBA8FB /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = "<group>"; };
@@ -74,7 +76,7 @@
7476
19B521172BDC2A36007727F5 /* BlockItem+CoreDataClass.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "BlockItem+CoreDataClass.swift"; sourceTree = "<group>"; };
7577
19B521182BDC2A36007727F5 /* BlockItem+CoreDataProperties.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "BlockItem+CoreDataProperties.swift"; sourceTree = "<group>"; };
7678
19DA03152B8EE1E900303FE2 /* DetailViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailViewController.swift; sourceTree = "<group>"; };
77-
19E0DF3C2BDA8B390094575E /* Day.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Day.swift; sourceTree = "<group>"; };
79+
19E0DF3C2BDA8B390094575E /* DaySettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DaySettings.swift; sourceTree = "<group>"; };
7880
19E478C42BD20E6300557640 /* CategoriesTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CategoriesTableViewController.swift; sourceTree = "<group>"; };
7981
19ED78562B9AC32700BDA1A7 /* ToDoModel.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = ToDoModel.xcdatamodel; sourceTree = "<group>"; };
8082
/* End PBXFileReference section */
@@ -109,6 +111,7 @@
109111
192C7D142B85A2FB00DBA8FB = {
110112
isa = PBXGroup;
111113
children = (
114+
192B53632BEA65AD00CF53ED /* settings.plist */,
112115
192C7D1F2B85A2FB00DBA8FB /* TaskBlock */,
113116
19B5210E2BDC2531007727F5 /* TaskBlockTests */,
114117
192C7D1E2B85A2FB00DBA8FB /* Products */,
@@ -148,12 +151,13 @@
148151
children = (
149152
198ECE9D2BE1D6EF00B9062D /* SettingModel.swift */,
150153
198ECEA02BE1DBDF00B9062D /* SettingsUIComponent.swift */,
154+
192B53612BE74C7200CF53ED /* MainSettingsMenu.swift */,
155+
192B535F2BE74C6A00CF53ED /* AboutSettings.swift */,
151156
19254BAE2BE2D7A500D4D0C5 /* AppearaceSettings.swift */,
152-
19254BB02BE3F41800D4D0C5 /* CalendarAndReminderSettings.swift */,
153157
192B535B2BE7488200CF53ED /* BlocksSettings.swift */,
158+
19254BB02BE3F41800D4D0C5 /* CalendarAndReminderSettings.swift */,
154159
192B535D2BE74B6100CF53ED /* iCloudSettings.swift */,
155-
192B535F2BE74C6A00CF53ED /* DaySettings.swift */,
156-
192B53612BE74C7200CF53ED /* AboutSettings.swift */,
160+
19E0DF3C2BDA8B390094575E /* DaySettings.swift */,
157161
);
158162
path = SettingModel;
159163
sourceTree = "<group>";
@@ -200,7 +204,6 @@
200204
isa = PBXGroup;
201205
children = (
202206
198ECE9F2BE1DBB300B9062D /* SettingModel */,
203-
19E0DF3C2BDA8B390094575E /* Day.swift */,
204207
);
205208
path = Models;
206209
sourceTree = "<group>";
@@ -287,6 +290,7 @@
287290
buildActionMask = 2147483647;
288291
files = (
289292
192C7D2D2B85A30000DBA8FB /* LaunchScreen.storyboard in Resources */,
293+
192B53642BEA65AD00CF53ED /* settings.plist in Resources */,
290294
192C7D2A2B85A30000DBA8FB /* Assets.xcassets in Resources */,
291295
192C7D282B85A2FB00DBA8FB /* Main.storyboard in Resources */,
292296
);
@@ -307,7 +311,7 @@
307311
buildActionMask = 2147483647;
308312
files = (
309313
198ECE9C2BE1D44500B9062D /* SettingsDetailViewController.swift in Sources */,
310-
19E0DF3D2BDA8B390094575E /* Day.swift in Sources */,
314+
19E0DF3D2BDA8B390094575E /* DaySettings.swift in Sources */,
311315
192B535E2BE74B6100CF53ED /* iCloudSettings.swift in Sources */,
312316
192B535C2BE7488200CF53ED /* BlocksSettings.swift in Sources */,
313317
198ECEA12BE1DBDF00B9062D /* SettingsUIComponent.swift in Sources */,
@@ -316,13 +320,13 @@
316320
19254BAF2BE2D7A500D4D0C5 /* AppearaceSettings.swift in Sources */,
317321
19B521192BDC2A36007727F5 /* BlockItem+CoreDataClass.swift in Sources */,
318322
19B5211A2BDC2A36007727F5 /* BlockItem+CoreDataProperties.swift in Sources */,
319-
192B53622BE74C7200CF53ED /* AboutSettings.swift in Sources */,
323+
192B53622BE74C7200CF53ED /* MainSettingsMenu.swift in Sources */,
320324
199782232B85B5BC00BCA16F /* SettingsViewController.swift in Sources */,
321325
19E478C52BD20E6300557640 /* CategoriesTableViewController.swift in Sources */,
322326
19DA03162B8EE1E900303FE2 /* DetailViewController.swift in Sources */,
323327
19254BB12BE3F41800D4D0C5 /* CalendarAndReminderSettings.swift in Sources */,
324328
192C7D232B85A2FB00DBA8FB /* SceneDelegate.swift in Sources */,
325-
192B53602BE74C6A00CF53ED /* DaySettings.swift in Sources */,
329+
192B53602BE74C6A00CF53ED /* AboutSettings.swift in Sources */,
326330
19ED78572B9AC32700BDA1A7 /* ToDoModel.xcdatamodeld in Sources */,
327331
199782252B85B5CC00BCA16F /* InboxViewController.swift in Sources */,
328332
19683B112BBCFAC400457BFA /* ToDoCell.swift in Sources */,

TaskBlock/Base.lproj/Main.storyboard

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
<barButtonItem key="rightBarButtonItem" systemItem="add" id="aDT-0d-ery">
5757
<connections>
5858
<action selector="addButtonTapped:" destination="d8q-oa-1mt" id="hHo-Fu-lqt"/>
59+
<segue destination="VBt-tN-PE0" kind="show" identifier="showDetails" destinationCreationSelector="showDetails:" id="8pe-GG-DVX"/>
5960
</connections>
6061
</barButtonItem>
6162
</navigationItem>
@@ -521,7 +522,7 @@
521522
<color key="backgroundColor" systemColor="systemGroupedBackgroundColor"/>
522523
<prototypes>
523524
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" indentationWidth="10" reuseIdentifier="categoryCell" id="dNy-Z7-SJ1">
524-
<rect key="frame" x="20" y="55.333332061767578" width="390" height="43.666667938232422"/>
525+
<rect key="frame" x="20" y="38" width="390" height="43.666667938232422"/>
525526
<autoresizingMask key="autoresizingMask"/>
526527
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="dNy-Z7-SJ1" id="Vhu-HE-8u1">
527528
<rect key="frame" x="0.0" y="0.0" width="390" height="43.666667938232422"/>
@@ -688,7 +689,7 @@
688689
</scene>
689690
</scenes>
690691
<inferredMetricsTieBreakers>
691-
<segue reference="Og4-AO-UVm"/>
692+
<segue reference="8pe-GG-DVX"/>
692693
</inferredMetricsTieBreakers>
693694
<resources>
694695
<image name="arrow.up.and.down.and.sparkles" catalog="system" width="128" height="89"/>

TaskBlock/BlockItem/BlockItem+CoreDataProperties.swift

Lines changed: 63 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -24,20 +24,71 @@ extension BlockItem {
2424
@NSManaged public var end: Date
2525

2626
func addToDoItemsToBlock(_ toDos: [ToDoItem]) -> [ToDoItem] {
27-
// var manuallyAssignedToDos = [ToDoItem]()
28-
// We only want to evaluate the assigned block property if it's been set
29-
// for toDo in toDos {
30-
// if toDo.assignedBlock != nil && toDo.assignedBlock == id {
31-
// manuallyAssignedToDos.append(todo)
32-
// } else {
33-
// manuallyAssignedToDos = toDos
34-
// }
35-
// }
36-
// let manuallyAssignedToDos = toDos.filter { $0.assignedBlock != nil && $0.assignedBlock == id }
37-
let toDosMatchingPreferredCategory = toDos.filter { $0.category == preferredCategory }
38-
let toDosInBlockTimeRange = toDosMatchingPreferredCategory.filter { $0.start ?? .now >= start && $0.start ?? .now <= end }
27+
var toDosInBlockTimeRange = [ToDoItem]()
28+
29+
for toDo in toDos {
30+
if toDo.assignedBlock == nil {
31+
guard let startTime = toDo.start else {
32+
return toDosInBlockTimeRange
33+
}
34+
if startTime >= start && startTime <= end {
35+
toDosInBlockTimeRange.append(toDo)
36+
toDo.assignedBlock = id
37+
}
38+
} else {
39+
return toDosInBlockTimeRange
40+
}
41+
}
42+
43+
// toDos.forEach { $0.assignedBlock = id }
3944
return toDosInBlockTimeRange
4045
}
46+
47+
func autoScheduleToDos(_ toDos: [ToDoItem]) -> [ToDoItem] {
48+
// TODO: Add UI for maually assigning a block, then evaulate it here
49+
// 1. Evaluate manually assigned blocks
50+
// Initialize toDos as a variable
51+
print("Input toDos for scheduleBlock (Block \(id)")
52+
//21. Filter for toDos that match the preferred category
53+
var toDosMatchingCategory = toDos.filter { $0.category == preferredCategory }
54+
// If no toDos were matching the category, just grab all the toDos
55+
if toDosMatchingCategory.isEmpty {
56+
toDosMatchingCategory = toDos
57+
}
58+
print("Categorized toDos for block ID \(id)")
59+
60+
// 3. Sort toDos that by preferred difficulty of the block
61+
let toDosSortedByDifficulty = sortByDifficulty(toDos: toDosMatchingCategory, preferredDifficulty: Int(preferredDifficulty))
62+
63+
//toDos = toDos.filter { $0.difficulty == block.preferredDifficulty }
64+
print("toDos sorted by difficulty for block ID \(id)")
65+
66+
// 4. Sort the remaining toDos by their priority, from highest to lowest
67+
let prioritizedtoDos = prioritizeToDos(toDos: toDosSortedByDifficulty)
68+
print("Prioritized toDos for block ID \(id)")
69+
70+
// 5. Fit as many toDos into the block as we can given the time constraints
71+
// let scheduledtoDos = fittoDosIntoBlock(toDos: prioritizedtoDos, duration: block.duration)
72+
// print("Added the following toDos to Block \(block.id)\n\(printtoDos(toDos: scheduledtoDos))")
73+
return prioritizedtoDos
74+
}
75+
76+
private func sortByDifficulty(toDos: [ToDoItem], preferredDifficulty: Int) -> [ToDoItem] {
77+
// Copy the list of tasks into a new array to be filtered for positive category matches
78+
var tasksMatchingDifficulty = toDos
79+
// Copy the list of tasks into a new array for the rest of the tasks that don't match
80+
var tasksNotMatchingDifficulty = toDos
81+
tasksMatchingDifficulty.removeAll(where: { $0.difficulty != preferredDifficulty })
82+
tasksNotMatchingDifficulty.removeAll(where: { $0.difficulty == preferredDifficulty })
83+
// Combine the two array so that the matching tasks are placed at the top
84+
let sortedTasks = tasksMatchingDifficulty + tasksNotMatchingDifficulty
85+
return sortedTasks
86+
}
87+
88+
func prioritizeToDos(toDos: [ToDoItem]) -> [ToDoItem] {
89+
let prioritizedToDos = toDos.sorted { $0.priority < $1.priority }
90+
return prioritizedToDos
91+
}
4192

4293
}
4394

TaskBlock/Models/Day.swift

Lines changed: 0 additions & 9 deletions
This file was deleted.
Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
//
2-
// AboutSettings.swift
2+
// DaySettings.swift
33
// TaskBlock
44
//
55
// Created by Camden Webster on 5/5/24.
@@ -8,16 +8,30 @@
88
import Foundation
99
import UIKit
1010

11-
struct AboutSettings: SettingsSubMenu {
12-
var settings: [[Setting]] {
11+
struct AboutSettings: SettingsSubMenuConfig {
12+
var sections: [String]? = ["Version Details", "Contact"]
13+
var settings: [[SettingsSubMenuItem]] {
1314
[
1415
[
15-
Setting(identifier: "currentVersion", title: "1.0", description: "Version number", symbol: nil, type: .text)
16+
SettingsSubMenuItem(identifier: "currentVersion", title: "1.0", description: "Version number", symbol: nil, type: .text)
1617
],
1718
[
18-
Setting(identifier: "contactButton", title: "Contact", description: "Tap here to reach out!", symbol: nil, type: .button),
19-
Setting(identifier: "reportBugButton", title: "Repot a Bug", description: "Tap here to report a bug", symbol: nil, type: .button),
19+
SettingsSubMenuItem(identifier: "contactButton", title: "Contact", description: "Tap here to reach out!", symbol: nil, type: .button),
20+
SettingsSubMenuItem(identifier: "reportBugButton", title: "Repot a Bug", description: "Tap here to report a bug", symbol: nil, type: .button),
2021
]
2122
]
2223
}
24+
25+
26+
27+
var iCloudSettings: [[SettingsSubMenuItem]] {
28+
[
29+
[
30+
SettingsSubMenuItem(identifier: "syncStatus", title: "Fully Synced", description: "Current sync status", symbol: nil, type: .text),
31+
SettingsSubMenuItem(identifier: "syncNowButton", title: "Sync Now", description: "Tap to sync with iCloud", symbol: nil, type: .button)
32+
]
33+
]
34+
}
35+
36+
2337
}

TaskBlock/Models/SettingModel/AppearaceSettings.swift

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,21 @@
88
import Foundation
99
import UIKit
1010

11-
struct AppearaceSettings: SettingsSubMenu {
12-
var settings: [[Setting]] = [
11+
struct AppearaceSettings: SettingsSubMenuConfig {
12+
var sections: [String]? = ["Theme", "Inbox Placement"]
13+
var settings: [[SettingsSubMenuItem]] = [
1314
[
14-
Setting(identifier: "matchSystem", title: "Match System", description: "Sets display theme to match system setting", symbol: nil, type: .checkmark),
15-
Setting(identifier: "light", title: "Light", description: "Sets display theme to Light Mode", symbol: nil, type: .checkmark),
16-
Setting(identifier: "dark", title: "Dark", description: "Sets display theme to Dark Mode", symbol: nil, type: .checkmark)
15+
SettingsSubMenuItem(identifier: "matchSystem", title: "Match System", description: "Sets display theme to match system setting", accessory: .checkmark, symbol: nil, type: .checkmark),
16+
SettingsSubMenuItem(identifier: "light", title: "Light", description: "Sets display theme to Light Mode", accessory: .checkmark, symbol: nil, type: .checkmark),
17+
SettingsSubMenuItem(identifier: "dark", title: "Dark", description: "Sets display theme to Dark Mode", accessory: .checkmark, symbol: nil, type: .checkmark)
1718
],
1819
[
19-
Setting(identifier: "inboxAbove", title: "Above Schedule", description: "Places the inbox above the schedule", symbol: nil, type: .checkmark),
20-
Setting(identifier: "inboxBelow", title: "Below Schedule", description: "Places the inbox Below the schedule", symbol: nil, type: .checkmark)
20+
SettingsSubMenuItem(identifier: "inboxAbove", title: "Above Schedule", description: "Places the inbox above the schedule", accessory: .checkmark, symbol: nil, type: .checkmark),
21+
SettingsSubMenuItem(identifier: "inboxBelow", title: "Below Schedule", description: "Places the inbox Below the schedule", accessory: .checkmark, symbol: nil, type: .checkmark)
2122
]
2223
]
2324

24-
func switchAppearance(_ setting: Setting) {
25+
func switchAppearance(_ setting: SettingsSubMenuItem) {
2526
var mode: UIUserInterfaceStyle
2627

2728
switch setting.identifier {

TaskBlock/Models/SettingModel/BlocksSettings.swift

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,14 @@
88
import Foundation
99
import UIKit
1010

11-
struct BlocksSettings: SettingsSubMenu {
12-
var settings: [[Setting]] = [
11+
struct BlocksSettings: SettingsSubMenuConfig {
12+
var sections: [String]? = ["Blocks", "Add"]
13+
var settings: [[SettingsSubMenuItem]] = [
1314
[
1415

1516
],
1617
[
17-
Setting(identifier: "addBlock", title: "Add Block", description: "Tap button to add a new block", symbol: nil, type: .button)
18+
SettingsSubMenuItem(identifier: "addBlock", title: "Add Block", description: "Tap button to add a new block", symbol: nil, type: .button)
1819
]
1920
]
2021
}

0 commit comments

Comments
 (0)