Skip to content

Commit

Permalink
Merge pull request #304 from aapis/feature/1.13/support-plan-unified-…
Browse files Browse the repository at this point in the history
…sidebar

Re-enable plan support in unified sidebar
  • Loading branch information
aapis authored Oct 15, 2024
2 parents 586acf4 + 4197260 commit 469ea0e
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 16 deletions.
37 changes: 31 additions & 6 deletions KWCore/Sources/Query/CoreDataCompanies.swift
Original file line number Diff line number Diff line change
Expand Up @@ -157,13 +157,38 @@ public class CoreDataCompanies: ObservableObject {

/// Fetch request to find all items
/// - Returns: FetchRequest<Company>
public func all(allowKilled: Bool = false) -> [Company] {
let predicate = NSPredicate(
format: !allowKilled ? "createdDate < %@" : "alive == true && createdDate < %@",
Date() as CVarArg
)
public func all(allowKilled: Bool = false, allowPlanMembersOnly: Bool = false, planMembers: Set<Company>) -> [Company] {
if allowPlanMembersOnly {
var subpredicates: [NSPredicate] = []

// Add alive check if required
if !allowKilled {
subpredicates.append(
NSPredicate(format: "alive == true")
)
}

return query(predicate)
// Add plan members to query
for member in planMembers {
subpredicates.append(
NSPredicate(format: "name == %@", member.name!)
)
}

let filterPredicate = NSCompoundPredicate(
type: NSCompoundPredicate.LogicalType.or,
subpredicates: subpredicates
)

return query(filterPredicate)
} else {
let predicate = NSPredicate(
format: !allowKilled ? "createdDate < %@" : "alive == true && createdDate < %@",
Date() as CVarArg
)

return query(predicate)
}
}

/// Retreive all companies by pid
Expand Down
12 changes: 7 additions & 5 deletions KlockWork/Views/Planning/Tabs/Planning.Today.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,13 @@ import KWCore
extension Planning {
struct Today: View {
@EnvironmentObject public var nav: Navigation
@EnvironmentObject public var updater: ViewUpdater
@State private var jobs: Set<Job> = []

var body: some View {
VStack(alignment: .leading, spacing: 1) {
Menu()
ScrollView(.vertical, showsIndicators: false) {
let jobs = Array(nav.planning.jobs).sorted(by: {$0.jid > $1.jid})
let jobs = self.jobs.sorted(by: {$0.title ?? $0.jid.string > $1.title ?? $1.jid.string})
if jobs.count > 0 {
ForEach(jobs, id: \.objectID) { job in
VStack(spacing: 1) {
Expand All @@ -36,14 +36,16 @@ extension Planning {
}
}
}
.onAppear(perform: actionOnAppear)
.id(updater.get("planning.daily"))
.onAppear(perform: self.actionOnAppear)
.onChange(of: self.nav.planning.jobs) { self.actionOnAppear() }
}
}
}

extension Planning.Today {
/// Onload handler. Sets view state (jobs)
/// - Returns: Void
private func actionOnAppear() -> Void {

self.jobs = self.nav.planning.jobs
}
}
28 changes: 23 additions & 5 deletions KlockWork/Views/Shared/AppSidebar/Widgets/UnifiedSidebar.swift
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ struct UnifiedSidebar {
}
.onAppear(perform: self.actionOnAppear)
.onChange(of: self.showPublished) { self.actionOnAppear() }
.onChange(of: self.state.session.gif) { self.actionOnAppear() }
}
}

Expand Down Expand Up @@ -102,8 +103,14 @@ struct UnifiedSidebar {
.blendMode(.softLight)
VStack(alignment: .leading, spacing: 0) {
ForEach((self.entity.projects?.allObjects as? [Project] ?? []).sorted(by: {$0.created! > $1.created!}), id: \.objectID) { project in
if !showPublished || project.alive {
SingleProject(entity: project)
if self.state.session.gif == .focus {
if self.state.planning.projects.contains(project) && (!showPublished || project.alive) {
SingleProject(entity: project)
}
} else {
if !showPublished || project.alive {
SingleProject(entity: project)
}
}
}

Expand All @@ -118,6 +125,7 @@ struct UnifiedSidebar {
.foregroundStyle(self.fgColour)
.onAppear(perform: self.actionOnAppear)
.onChange(of: self.state.session.company) { self.actionOnChangeEntity() }
.onChange(of: self.state.session.gif) { self.actionOnAppear() }
.onChange(of: self.isPresented) {
// Group is minimized
if self.isPresented == false {
Expand Down Expand Up @@ -176,8 +184,14 @@ struct UnifiedSidebar {
.blendMode(.softLight)
VStack(alignment: .leading, spacing: 0) {
ForEach((self.entity.jobs?.allObjects as? [Job] ?? []).sorted(by: {$0.created ?? Date() > $1.created ?? Date()}), id: \.objectID) { job in
if !showPublished || job.alive {
SingleJob(entity: job)
if self.state.session.gif == .focus {
if self.state.planning.jobs.contains(job) && (!showPublished || job.alive) {
SingleJob(entity: job)
}
} else {
if !showPublished || job.alive {
SingleJob(entity: job)
}
}
}
}
Expand Down Expand Up @@ -605,7 +619,11 @@ extension UnifiedSidebar.Widget {
/// Onload handler. Finds companies
/// - Returns: Void
private func actionOnAppear() -> Void {
self.companies = CoreDataCompanies(moc: self.state.moc).all(allowKilled: self.showPublished)
self.companies = CoreDataCompanies(moc: self.state.moc).all(
allowKilled: self.showPublished,
allowPlanMembersOnly: self.state.session.gif == .focus,
planMembers: self.state.planning.companies
)
}
}

Expand Down

0 comments on commit 469ea0e

Please sign in to comment.