Skip to content

Commit

Permalink
Reorgainzing Combine framework, not functional
Browse files Browse the repository at this point in the history
  • Loading branch information
maxfierrog committed Aug 13, 2022
1 parent 5c7d5cc commit 8b57ece
Show file tree
Hide file tree
Showing 22 changed files with 352 additions and 263 deletions.
Binary file not shown.
13 changes: 4 additions & 9 deletions process/Components/ProjectPicker.swift
Original file line number Diff line number Diff line change
Expand Up @@ -26,16 +26,11 @@ struct ProjectsListItemView: View {
class ProjectPickerViewModel: ObservableObject {

var parentModel: TaskMeddlerModel
@Published var projectID: String
@Published var project: Project = Project(creatorID: "")
@Published var project: Project

init(projectID: String, parentModel: TaskMeddlerModel) {
self.projectID = projectID
self.parentModel = parentModel
Project.pull(projectID) { project, error in
guard error == nil else { return }
self.project = project!
}
init(project: Project, model: TaskMeddlerModel) {
self.parentModel = model
self.project = project
}

func setToProject() {
Expand Down
10 changes: 7 additions & 3 deletions process/Components/SearchBar.swift
Original file line number Diff line number Diff line change
Expand Up @@ -39,12 +39,16 @@ struct SearchBar: View {
}
)
.onTapGesture {
isEditingSearch = true
withAnimation {
isEditingSearch = true
}
}
if isEditingSearch {
Button {
isEditingSearch = false
searchText = ""
withAnimation {
isEditingSearch = false
searchText = ""
}
} label: {
Text("Cancel")
}
Expand Down
26 changes: 16 additions & 10 deletions process/Components/TaskList.swift
Original file line number Diff line number Diff line change
Expand Up @@ -11,25 +11,24 @@ import SwiftUI

struct TaskListView: View {

@ObservedObject var model: TaskListViewModel
@StateObject var model: TaskListViewModel

/* MARK: Task List */

var body: some View {
ScrollView(.vertical) {
LazyVGrid(columns: [GridItem()], spacing: 8) {
ForEach(model.taskList.items) { item in
TaskCellView(model: TaskCellViewModel(item.task))
ForEach(model.taskList.tasks) { item in
TaskCellView(model: TaskCellViewModel(item))
.onTapGesture {
model.tappedTask(item.task)
model.tappedTask(item)
}
}
}
}
}
}


class TaskListViewModel: ObservableObject {

@Published var taskList: AsyncTaskList
Expand Down Expand Up @@ -63,15 +62,22 @@ struct TaskCellView: View {
}
.padding(.top, 1)
HStack {
Text(model.formattedDueDate())
Text(model.formattedDate(string: "Due: ", date: model.task.data.dateDue))
.font(.caption2)
Spacer()
Text(String(model.task.data.size))
Text("Size: " + String(model.task.data.size))
.font(.caption2)
}
.padding(.top, 8)
} label: {
Text(model.task.data.name)
HStack {
Text(model.task.data.name)
if model.task.data.dateCompleted != nil {
Spacer()
Text(model.formattedDate(string: "Completed: ", date: model.task.data.dateCompleted!))
.font(.caption2)
}
}
}
}
}
Expand All @@ -94,11 +100,11 @@ class TaskCellViewModel: ObservableObject {
return description
}

func formattedDueDate() -> String {
func formattedDate(string: String, date: Date) -> String {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "MMM d, yyyy"
dateFormatter.timeZone = NSTimeZone(name: "PST")! as TimeZone
return "Due " + dateFormatter.string(from: task.data.dateDue)
return string + dateFormatter.string(from: date)
}

}
Expand Down
20 changes: 10 additions & 10 deletions process/Features/Home/ProfileHome.swift
Original file line number Diff line number Diff line change
Expand Up @@ -30,21 +30,21 @@ struct ProfileHomeView: View {
model.tappedEditProfile()
}
}
if (!model.editing) {
AnalyticsScrollView(model: model)
}
// if (!model.editing) {
// AnalyticsScrollView(model: model)
// }
Spacer()
}
.accentColor(GlobalConstant.accentColor)
.banner(data: $model.bannerData, show: $model.showBanner)
.toolbar {
ToolbarItemGroup(placement: .navigationBarTrailing) {
Button {
model.tappedPreferences()
} label: {
Label(ProfileConstant.preferencesAccessibilityText, systemImage: ProfileConstant.preferencesButtonIcon)
}
}
// ToolbarItemGroup(placement: .navigationBarTrailing) {
// Button {
// model.tappedPreferences()
// } label: {
// Label(ProfileConstant.preferencesAccessibilityText, systemImage: ProfileConstant.preferencesButtonIcon)
// }
// }
ToolbarItemGroup(placement: .navigationBarLeading) {
Button {
withAnimation {
Expand Down
33 changes: 18 additions & 15 deletions process/Features/Home/ProjectsHome.swift
Original file line number Diff line number Diff line change
Expand Up @@ -29,17 +29,20 @@ struct ProjectsHomeView: View {
.padding(.horizontal)
.padding(.vertical, 8)

SegmentedPicker(accessibilityText: ProjectsConstant.pickerAccessibilityText,
categories: model.projectCategories,
selectedCategory: $model.selectedProjectCategory)
.padding(.horizontal)
.padding(.bottom)
// SegmentedPicker(accessibilityText: ProjectsConstant.pickerAccessibilityText,
// categories: model.projectCategories,
// selectedCategory: $model.selectedProjectCategory)
// .padding(.horizontal)
// .padding(.bottom)

ScrollView {
LazyVGrid(columns: model.twoColumnGrid, spacing: 8) {
ForEach($model.user.data.allProjects.indices, id: \.self) { index in
ProjectCellView(model: ProjectCellViewModel(projectID: model.user.data.allProjects[index],
model: model))
ForEach(model.user.projectList) { project in
ProjectCellView(model: ProjectCellViewModel(project: project))
.onTapGesture {
model.selectedProject = project
model.navigateToProjectDetails = true
}
}
}
}
Expand All @@ -53,13 +56,13 @@ struct ProjectsHomeView: View {
.banner(data: $model.bannerData, show: $model.showBanner)
.accentColor(GlobalConstant.accentColor)
.toolbar {
ToolbarItemGroup(placement: .navigationBarTrailing) {
Button {
model.tappedNotifications()
} label: {
Label(ProjectsConstant.notificationsAccessibilityText, systemImage: ProjectsConstant.notificationsButtonIcon)
}
}
// ToolbarItemGroup(placement: .navigationBarTrailing) {
// Button {
// model.tappedNotifications()
// } label: {
// Label(ProjectsConstant.notificationsAccessibilityText, systemImage: ProjectsConstant.notificationsButtonIcon)
// }
// }
ToolbarItemGroup(placement: .navigationBarLeading) {
Button {
withAnimation {
Expand Down
52 changes: 31 additions & 21 deletions process/Features/Home/TasksHome.swift
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,18 @@ struct TasksHomeView: View {

@ObservedObject var model: TasksHomeViewModel
@Environment(\.colorScheme) private var colorScheme

/* MARK: Tasks home view */

var body: some View {
VStack {
NavigationLink(destination: ExportTasksView(), tag: true, selection: $model.navigateToExport) { }
NavigationLink(destination: ExportTasksView(),
tag: true,
selection: $model.navigateToExport) { }

NavigationLink(destination: TaskDetailsView(model: TaskDetailsViewModel(model)), tag: true, selection: $model.navigateToTaskDetails) { }
NavigationLink(destination: TaskDetailsView(model: TaskDetailsViewModel(model)),
tag: true,
selection: $model.navigateToTaskDetails) { }

SearchBar(searchText: $model.searchText, isEditingSearch: $model.isEditingSearch, sortSelection: $model.sortSelection)
.padding(.horizontal)
Expand All @@ -30,11 +34,11 @@ struct TasksHomeView: View {
model.changedTaskSort(sortType: newSortSelection)
}

SegmentedPicker(accessibilityText: TasksConstant.pickerAccessibilityText,
categories: model.taskCategories,
selectedCategory: $model.selectedTaskCategory)
.padding(.horizontal)
.padding(.bottom)
// SegmentedPicker(accessibilityText: TasksConstant.pickerAccessibilityText,
// categories: model.taskCategories,
// selectedCategory: $model.selectedTaskCategory)
// .padding(.horizontal)
// .padding(.bottom)

TaskListView(model: TaskListViewModel(model))
.padding(.horizontal)
Expand All @@ -45,16 +49,15 @@ struct TasksHomeView: View {
model.tappedNewTask()
}
.accentColor(GlobalConstant.accentColor)
.onAppear(perform: model.refreshTaskList)
.banner(data: $model.bannerData, show: $model.showBanner)
.toolbar {
ToolbarItemGroup(placement: .navigationBarTrailing) {
Button {
model.tappedExport()
} label: {
Label(TasksConstant.exportAccessibilityText, systemImage: TasksConstant.exportButtonIcon)
}
}
// ToolbarItemGroup(placement: .navigationBarTrailing) {
// Button {
// model.tappedExport()
// } label: {
// Label(TasksConstant.exportAccessibilityText, systemImage: TasksConstant.exportButtonIcon)
// }
// }
ToolbarItemGroup(placement: .navigationBarLeading) {
Button {
withAnimation {
Expand All @@ -78,6 +81,10 @@ struct TasksHomeView: View {
obtain data and to communicate instructions, such as logging out. */
class TasksHomeViewModel: TaskListParent, ObservableObject {

func refreshTaskList() {
return
}

/* MARK: Model fields */

var parentModel: HomeViewModel
Expand Down Expand Up @@ -112,7 +119,7 @@ class TasksHomeViewModel: TaskListParent, ObservableObject {

init(_ parentModel: HomeViewModel) {
self.user = parentModel.user
self.taskList = AsyncTaskList(parentModel.user.data.tasks)
self.taskList = parentModel.user.taskList
self.parentModel = parentModel
}

Expand All @@ -136,10 +143,11 @@ class TasksHomeViewModel: TaskListParent, ObservableObject {

func changedTaskSort(sortType: TaskSort) {
if sortType == .topological {
self.taskList = self.taskList.getTopologicalOrdering()
self.taskList.getTopologicalOrdering()
} else {
self.taskList.sort(sortType)
}
self.objectWillChange.send()
}

func dismissChildView(_ named: String) {
Expand All @@ -148,16 +156,18 @@ class TasksHomeViewModel: TaskListParent, ObservableObject {
self.navigateToNewTask = false
case "ExportTasksView":
self.navigateToExport = false
case "TaskDetailsView":
self.navigateToTaskDetails = false
default:
return
}
}

/* MARK: Helper methods */

func refreshTaskList() {
self.taskList = AsyncTaskList(parentModel.user.data.tasks)
}
// func refreshTaskList() {
// self.taskList = AsyncTaskList(parentModel.user.data.tasks)
// }

func showBannerWithErrorMessage(_ message: String?) {
guard let message = message else { return }
Expand Down
40 changes: 19 additions & 21 deletions process/Features/Home/Views/ProjectCell.swift
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,9 @@ struct ProjectCellView: View {
Spacer()
}
HStack {
ProgressView(model.formattedCreationDate(), value: 50, total: 100)
ProgressView(model.formattedCreationDate(),
value: Float(model.completedTaskCount()),
total: Float(model.project.taskList.allTasks.count))
.progressViewStyle(.linear)
.font(.caption2)
}
Expand All @@ -45,39 +47,26 @@ struct ProjectCellView: View {
} label: {
Text(model.project.data.name)
}
.onTapGesture {
model.tappedProject()
}
}
}


class ProjectCellViewModel: ObservableObject {

@Published var projectsHomeViewModel: ProjectsHomeViewModel
@Published var project: Project = Project(creatorID: "")

@Published var collaboratorPictures: [UIImage] = []

init(projectID: String, model: ProjectsHomeViewModel) {
self.projectsHomeViewModel = model
Project.pull(projectID) { project, error in
guard error == nil else { return }
self.project = project!
for index in project!.data.collaborators.indices {
self.collaboratorPictures.append(UIImage(named: ProfileConstant.defaultProfilePicture)!)
APIHandler.pullProfilePicture(userID: project!.data.collaborators[index]) { error, image in
guard error == nil else { return }
self.collaboratorPictures[index] = image!
}
init(project: Project) {
self.project = project
for index in project.data.collaborators.indices {
self.collaboratorPictures.append(UIImage(named: ProfileConstant.defaultProfilePicture)!)
APIHandler.pullProfilePicture(userID: project.data.collaborators[index]) { error, image in
guard error == nil else { return }
self.collaboratorPictures[index] = image!
}
}
}

func tappedProject() {
self.projectsHomeViewModel.showProjectDetails(project: self.project)
}

func formattedDescription() -> String {
var description: String = project.data.description ?? ""
if description.count > 30 {
Expand All @@ -93,6 +82,15 @@ class ProjectCellViewModel: ObservableObject {
return "Started " + dateFormatter.string(from: project.data.dateCreated)
}

func completedTaskCount() -> Int {
var count: Int = 0
for task in project.taskList.allTasks {
if task.data.dateCompleted != nil {
count += 1
}
}
return count
}
}


Expand Down
1 change: 1 addition & 0 deletions process/Features/Projects/EditProject.swift
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,4 @@ struct EditProjectView_Previews: PreviewProvider {
EditProjectView()
}
}

Loading

0 comments on commit 8b57ece

Please sign in to comment.