Prepare for selection of items
Update MainView.swift
This commit is contained in:
parent
e0787f991e
commit
1d4b3c266c
@ -187,6 +187,7 @@
|
|||||||
E2FD1D2E2D37180900B48627 /* GeneralSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2FD1D2D2D37180600B48627 /* GeneralSettings.swift */; };
|
E2FD1D2E2D37180900B48627 /* GeneralSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2FD1D2D2D37180600B48627 /* GeneralSettings.swift */; };
|
||||||
E2FD1D302D37196C00B48627 /* GeneralSettingsDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2FD1D2F2D37196500B48627 /* GeneralSettingsDetailView.swift */; };
|
E2FD1D302D37196C00B48627 /* GeneralSettingsDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2FD1D2F2D37196500B48627 /* GeneralSettingsDetailView.swift */; };
|
||||||
E2FD1D322D3AEB6300B48627 /* PostVideo.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2FD1D312D3AEB6000B48627 /* PostVideo.swift */; };
|
E2FD1D322D3AEB6300B48627 /* PostVideo.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2FD1D312D3AEB6000B48627 /* PostVideo.swift */; };
|
||||||
|
E2FD1D342D3BA2E700B48627 /* SelectedContent.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2FD1D332D3BA2DE00B48627 /* SelectedContent.swift */; };
|
||||||
E2FE0EE62D15A0B5002963B7 /* GenerationResults.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2FE0EE52D15A0B1002963B7 /* GenerationResults.swift */; };
|
E2FE0EE62D15A0B5002963B7 /* GenerationResults.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2FE0EE52D15A0B1002963B7 /* GenerationResults.swift */; };
|
||||||
E2FE0EE82D16D4A3002963B7 /* ConvertThrowing.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2FE0EE72D16D4A3002963B7 /* ConvertThrowing.swift */; };
|
E2FE0EE82D16D4A3002963B7 /* ConvertThrowing.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2FE0EE72D16D4A3002963B7 /* ConvertThrowing.swift */; };
|
||||||
E2FE0EEC2D1C1253002963B7 /* MultiFileSelectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2FE0EEB2D1C124E002963B7 /* MultiFileSelectionView.swift */; };
|
E2FE0EEC2D1C1253002963B7 /* MultiFileSelectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2FE0EEB2D1C124E002963B7 /* MultiFileSelectionView.swift */; };
|
||||||
@ -420,6 +421,7 @@
|
|||||||
E2FD1D2D2D37180600B48627 /* GeneralSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GeneralSettings.swift; sourceTree = "<group>"; };
|
E2FD1D2D2D37180600B48627 /* GeneralSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GeneralSettings.swift; sourceTree = "<group>"; };
|
||||||
E2FD1D2F2D37196500B48627 /* GeneralSettingsDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GeneralSettingsDetailView.swift; sourceTree = "<group>"; };
|
E2FD1D2F2D37196500B48627 /* GeneralSettingsDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GeneralSettingsDetailView.swift; sourceTree = "<group>"; };
|
||||||
E2FD1D312D3AEB6000B48627 /* PostVideo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostVideo.swift; sourceTree = "<group>"; };
|
E2FD1D312D3AEB6000B48627 /* PostVideo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostVideo.swift; sourceTree = "<group>"; };
|
||||||
|
E2FD1D332D3BA2DE00B48627 /* SelectedContent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectedContent.swift; sourceTree = "<group>"; };
|
||||||
E2FE0EE52D15A0B1002963B7 /* GenerationResults.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GenerationResults.swift; sourceTree = "<group>"; };
|
E2FE0EE52D15A0B1002963B7 /* GenerationResults.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GenerationResults.swift; sourceTree = "<group>"; };
|
||||||
E2FE0EE72D16D4A3002963B7 /* ConvertThrowing.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConvertThrowing.swift; sourceTree = "<group>"; };
|
E2FE0EE72D16D4A3002963B7 /* ConvertThrowing.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConvertThrowing.swift; sourceTree = "<group>"; };
|
||||||
E2FE0EEB2D1C124E002963B7 /* MultiFileSelectionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MultiFileSelectionView.swift; sourceTree = "<group>"; };
|
E2FE0EEB2D1C124E002963B7 /* MultiFileSelectionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MultiFileSelectionView.swift; sourceTree = "<group>"; };
|
||||||
@ -569,6 +571,7 @@
|
|||||||
E29D31372D043EB80051B7F4 /* Main */ = {
|
E29D31372D043EB80051B7F4 /* Main */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
E2FD1D332D3BA2DE00B48627 /* SelectedContent.swift */,
|
||||||
E229904B2D10BE59009F8D77 /* InitialSetupView.swift */,
|
E229904B2D10BE59009F8D77 /* InitialSetupView.swift */,
|
||||||
E29D31422D0488950051B7F4 /* MainContentView.swift */,
|
E29D31422D0488950051B7F4 /* MainContentView.swift */,
|
||||||
E2DD04732C276F31003BFF1F /* MainView.swift */,
|
E2DD04732C276F31003BFF1F /* MainView.swift */,
|
||||||
@ -1295,6 +1298,7 @@
|
|||||||
E2FE0F262D2AF9B0002963B7 /* ImageCompareCommand.swift in Sources */,
|
E2FE0F262D2AF9B0002963B7 /* ImageCompareCommand.swift in Sources */,
|
||||||
E2FE0F1E2D281AE1002963B7 /* TagOverviewGenerator.swift in Sources */,
|
E2FE0F1E2D281AE1002963B7 /* TagOverviewGenerator.swift in Sources */,
|
||||||
E29D31572D06D38B0051B7F4 /* AddTagView.swift in Sources */,
|
E29D31572D06D38B0051B7F4 /* AddTagView.swift in Sources */,
|
||||||
|
E2FD1D342D3BA2E700B48627 /* SelectedContent.swift in Sources */,
|
||||||
E29D31792D083DE50051B7F4 /* PageContentResultsView.swift in Sources */,
|
E29D31792D083DE50051B7F4 /* PageContentResultsView.swift in Sources */,
|
||||||
E25DA5912D023A8400AEF16D /* IntegerField.swift in Sources */,
|
E25DA5912D023A8400AEF16D /* IntegerField.swift in Sources */,
|
||||||
E2FD1D192D2DC4F500B48627 /* LoadingContext.swift in Sources */,
|
E2FD1D192D2DC4F500B48627 /* LoadingContext.swift in Sources */,
|
||||||
|
@ -45,23 +45,8 @@ struct MainView: App {
|
|||||||
@State
|
@State
|
||||||
private var language: ContentLanguage = .english
|
private var language: ContentLanguage = .english
|
||||||
|
|
||||||
@State
|
@ObservedObject
|
||||||
private var selectedTab: MainViewTab = .posts
|
private var selection: SelectedContent = .init()
|
||||||
|
|
||||||
@State
|
|
||||||
private var selectedPost: Post?
|
|
||||||
|
|
||||||
@State
|
|
||||||
private var selectedPage: Page?
|
|
||||||
|
|
||||||
@State
|
|
||||||
private var selectedTag: Tag?
|
|
||||||
|
|
||||||
@State
|
|
||||||
private var selectedFile: FileResource?
|
|
||||||
|
|
||||||
@State
|
|
||||||
private var selectedSection: SettingsSection = .folders
|
|
||||||
|
|
||||||
@State
|
@State
|
||||||
private var showAddSheet = false
|
private var showAddSheet = false
|
||||||
@ -77,63 +62,63 @@ struct MainView: App {
|
|||||||
|
|
||||||
@ViewBuilder
|
@ViewBuilder
|
||||||
var sidebar: some View {
|
var sidebar: some View {
|
||||||
switch selectedTab {
|
switch selection.tab {
|
||||||
case .posts:
|
case .posts:
|
||||||
PostListView(selectedPost: $selectedPost)
|
PostListView(selectedPost: $selection.post)
|
||||||
case .pages:
|
case .pages:
|
||||||
PageListView(selectedPage: $selectedPage)
|
PageListView(selectedPage: $selection.page)
|
||||||
case .tags:
|
case .tags:
|
||||||
TagListView(selectedTag: $selectedTag)
|
TagListView(selectedTag: $selection.tag)
|
||||||
case .files:
|
case .files:
|
||||||
FileListView(selectedFile: $selectedFile)
|
FileListView(selectedFile: $selection.file)
|
||||||
case .generation:
|
case .generation:
|
||||||
SettingsListView(selectedSection: $selectedSection)
|
SettingsListView(selectedSection: $selection.section)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ViewBuilder
|
@ViewBuilder
|
||||||
var viewContent: some View {
|
var viewContent: some View {
|
||||||
switch selectedTab {
|
switch selection.tab {
|
||||||
case .posts:
|
case .posts:
|
||||||
SelectedContentView<PostContentView>(selected: $selectedPost)
|
SelectedContentView<PostContentView>(selected: $selection.post)
|
||||||
case .pages:
|
case .pages:
|
||||||
SelectedContentView<PageContentView>(selected: $selectedPage)
|
SelectedContentView<PageContentView>(selected: $selection.page)
|
||||||
case .tags:
|
case .tags:
|
||||||
SelectedContentView<TagContentView>(selected: $selectedTag)
|
SelectedContentView<TagContentView>(selected: $selection.tag)
|
||||||
case .files:
|
case .files:
|
||||||
SelectedContentView<FileContentView>(selected: $selectedFile)
|
SelectedContentView<FileContentView>(selected: $selection.file)
|
||||||
case .generation:
|
case .generation:
|
||||||
GenerationContentView(selected: $selectedSection)
|
GenerationContentView(selected: $selection.section)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ViewBuilder
|
@ViewBuilder
|
||||||
var detail: some View {
|
var detail: some View {
|
||||||
switch selectedTab {
|
switch selection.tab {
|
||||||
case .posts:
|
case .posts:
|
||||||
SelectedDetailView<PostDetailView>(selected: $selectedPost)
|
SelectedDetailView<PostDetailView>(selected: $selection.post)
|
||||||
case .pages:
|
case .pages:
|
||||||
SelectedDetailView<PageDetailView>(selected: $selectedPage)
|
SelectedDetailView<PageDetailView>(selected: $selection.page)
|
||||||
case .tags:
|
case .tags:
|
||||||
SelectedDetailView<TagDetailView>(selected: $selectedTag)
|
SelectedDetailView<TagDetailView>(selected: $selection.tag)
|
||||||
case .files:
|
case .files:
|
||||||
SelectedDetailView<FileDetailView>(selected: $selectedFile)
|
SelectedDetailView<FileDetailView>(selected: $selection.file)
|
||||||
case .generation:
|
case .generation:
|
||||||
GenerationDetailView(section: selectedSection)
|
GenerationDetailView(section: selection.section)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ViewBuilder
|
@ViewBuilder
|
||||||
var addItemSheet: some View {
|
var addItemSheet: some View {
|
||||||
switch selectedTab {
|
switch selection.tab {
|
||||||
case .posts:
|
case .posts:
|
||||||
AddPostView(selected: $selectedPost)
|
AddPostView(selected: $selection.post)
|
||||||
case .pages:
|
case .pages:
|
||||||
AddPageView(selected: $selectedPage)
|
AddPageView(selected: $selection.page)
|
||||||
case .tags:
|
case .tags:
|
||||||
AddTagView(selected: $selectedTag)
|
AddTagView(selected: $selection.tag)
|
||||||
case .files:
|
case .files:
|
||||||
AddFileView(selectedFile: $selectedFile)
|
AddFileView(selectedFile: $selection.file)
|
||||||
case .generation:
|
case .generation:
|
||||||
Text("Not implemented")
|
Text("Not implemented")
|
||||||
}
|
}
|
||||||
@ -145,7 +130,7 @@ struct MainView: App {
|
|||||||
sidebar
|
sidebar
|
||||||
.toolbar {
|
.toolbar {
|
||||||
ToolbarItem(placement: .navigation) {
|
ToolbarItem(placement: .navigation) {
|
||||||
Picker("", selection: $selectedTab) {
|
Picker("", selection: $selection.tab) {
|
||||||
Text("Posts").tag(MainViewTab.posts)
|
Text("Posts").tag(MainViewTab.posts)
|
||||||
Text("Pages").tag(MainViewTab.pages)
|
Text("Pages").tag(MainViewTab.pages)
|
||||||
Text("Tags").tag(MainViewTab.tags)
|
Text("Tags").tag(MainViewTab.tags)
|
||||||
@ -160,7 +145,7 @@ struct MainView: App {
|
|||||||
Button(action: { showAddSheet = true }) {
|
Button(action: { showAddSheet = true }) {
|
||||||
Label("Add", systemSymbol: .plus)
|
Label("Add", systemSymbol: .plus)
|
||||||
}
|
}
|
||||||
.disabled(!selectedTab.canAddItems)
|
.disabled(!selection.tab.canAddItems)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} content: {
|
} content: {
|
||||||
@ -194,6 +179,7 @@ struct MainView: App {
|
|||||||
.navigationTitle("")
|
.navigationTitle("")
|
||||||
.environment(\.language, language)
|
.environment(\.language, language)
|
||||||
.environmentObject(content)
|
.environmentObject(content)
|
||||||
|
.environmentObject(selection)
|
||||||
.onAppear(perform: loadContent)
|
.onAppear(perform: loadContent)
|
||||||
.onReceive(Timer.publish(every: 60.0, on: .main, in: .common).autoconnect()) { _ in
|
.onReceive(Timer.publish(every: 60.0, on: .main, in: .common).autoconnect()) { _ in
|
||||||
save()
|
save()
|
||||||
@ -202,11 +188,13 @@ struct MainView: App {
|
|||||||
addItemSheet
|
addItemSheet
|
||||||
.environment(\.language, language)
|
.environment(\.language, language)
|
||||||
.environmentObject(content)
|
.environmentObject(content)
|
||||||
|
.environmentObject(selection)
|
||||||
}
|
}
|
||||||
.sheet(isPresented: $showInitialSetupSheet) {
|
.sheet(isPresented: $showInitialSetupSheet) {
|
||||||
InitialSetupView()
|
InitialSetupView()
|
||||||
.environment(\.language, language)
|
.environment(\.language, language)
|
||||||
.environmentObject(content)
|
.environmentObject(content)
|
||||||
|
.environmentObject(selection)
|
||||||
}
|
}
|
||||||
.sheet(isPresented: $showLoadErrorSheet) {
|
.sheet(isPresented: $showLoadErrorSheet) {
|
||||||
VStack {
|
VStack {
|
||||||
@ -251,24 +239,24 @@ struct MainView: App {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private func prepareAfterLoad() {
|
private func prepareAfterLoad() {
|
||||||
if selectedPost == nil {
|
if selection.post == nil {
|
||||||
selectedPost = content.posts.first
|
selection.post = content.posts.first
|
||||||
}
|
}
|
||||||
if selectedPage == nil {
|
if selection.page == nil {
|
||||||
selectedPage = content.pages.first
|
selection.page = content.pages.first
|
||||||
}
|
}
|
||||||
if selectedTag == nil {
|
if selection.tag == nil {
|
||||||
selectedTag = content.tags.first
|
selection.tag = content.tags.first
|
||||||
}
|
}
|
||||||
if selectedFile == nil {
|
if selection.file == nil {
|
||||||
selectedFile = content.files.first
|
selection.file = content.files.first
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private func showInitialSheet() {
|
private func showInitialSheet() {
|
||||||
DispatchQueue.main.async {
|
DispatchQueue.main.async {
|
||||||
selectedSection = .folders
|
selection.section = .folders
|
||||||
selectedTab = .generation
|
selection.tab = .generation
|
||||||
showInitialSetupSheet = true
|
showInitialSetupSheet = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
22
CHDataManagement/Main/SelectedContent.swift
Normal file
22
CHDataManagement/Main/SelectedContent.swift
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
import Foundation
|
||||||
|
|
||||||
|
final class SelectedContent: ObservableObject {
|
||||||
|
|
||||||
|
@Published
|
||||||
|
var tab: MainViewTab = .posts
|
||||||
|
|
||||||
|
@Published
|
||||||
|
var post: Post?
|
||||||
|
|
||||||
|
@Published
|
||||||
|
var page: Page?
|
||||||
|
|
||||||
|
@Published
|
||||||
|
var tag: Tag?
|
||||||
|
|
||||||
|
@Published
|
||||||
|
var file: FileResource?
|
||||||
|
|
||||||
|
@Published
|
||||||
|
var section: SettingsSection = .folders
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user