Skip to content

Commit 2c1750d

Browse files
committed
Add initial Status & Visibility integration
1 parent 585a552 commit 2c1750d

File tree

4 files changed

+42
-5
lines changed

4 files changed

+42
-5
lines changed

WordPress/Classes/ViewRelated/Post/PostSettings/PostSettingsView.swift

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -154,8 +154,8 @@ struct PostSettingsFormContentView: View {
154154
private var publishingOptionsSection: some View {
155155
Section {
156156
BlogListSiteView(site: .init(blog: viewModel.post.blog))
157+
statusRow
157158
publishDateRow
158-
visibilityRow
159159
} header: {
160160
SectionHeader(Strings.readyToPublish)
161161
}
@@ -269,7 +269,7 @@ struct PostSettingsFormContentView: View {
269269
NavigationLink {
270270
PostStatusView(settings: $viewModel.settings, timeZone: viewModel.timeZone)
271271
} label: {
272-
SettingsRow(Strings.status) {
272+
SettingsRow(viewModel.context == .publishing ? Strings.statusAndVisibility : Strings.status) {
273273
HStack(alignment: .center, spacing: 2) {
274274
ScaledImage(viewModel.settings.status.image, height: 23)
275275
VStack(alignment: .leading, spacing: 2) {
@@ -703,4 +703,10 @@ private enum Strings {
703703
value: "Status",
704704
comment: "Label for the status field in Post Settings"
705705
)
706+
707+
static let statusAndVisibility = NSLocalizedString(
708+
"postSettings.statusAndVisibility.label",
709+
value: "Status & Visibility",
710+
comment: "Label for the Status & Visibility field in Post Settings (should be short)"
711+
)
706712
}

WordPress/Classes/ViewRelated/Post/PostSettings/PostSettingsViewModel.swift

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,11 @@ final class PostSettingsViewModel: NSObject, ObservableObject {
157157
self.preferences = preferences
158158

159159
// Initialize settings from the post
160-
let initialSettings = PostSettings(from: post)
160+
var initialSettings = PostSettings(from: post)
161+
if context == .publishing {
162+
initialSettings.status = .publish
163+
initialSettings.updateStatusForPublishDate()
164+
}
161165
self.settings = initialSettings
162166
self.originalSettings = initialSettings
163167

@@ -359,6 +363,13 @@ final class PostSettingsViewModel: NSObject, ObservableObject {
359363
settings.password = selection.password.isEmpty ? nil : selection.password
360364
}
361365

366+
func didSelectPublshDate(_ date: Date?) {
367+
settings.publishDate = date
368+
if context == .publishing {
369+
settings.updateStatusForPublishDate()
370+
}
371+
}
372+
362373
func didSelectSuggestedTag(_ tag: String) {
363374
suggestedTags.removeAll(where: { $0 == tag })
364375
settings.tags.append(",\(tag)")
@@ -558,6 +569,26 @@ extension PostSettingsViewModel: @MainActor PrepublishingSocialAccountsDelegate
558569
}
559570
}
560571

572+
private extension PostSettings {
573+
mutating func updateStatusForPublishDate() {
574+
switch status {
575+
case .publish:
576+
if let date = publishDate, date > .now, status == .publish {
577+
status = .scheduled
578+
}
579+
case .scheduled:
580+
if let date = publishDate, date <= .now {
581+
status = .publish
582+
} else if publishDate == nil {
583+
status = .publish
584+
}
585+
default:
586+
break // Do nothing
587+
588+
}
589+
}
590+
}
591+
561592
// MARK: - Localized Strings
562593

563594
private enum Strings {

WordPress/Classes/ViewRelated/Post/PostSettings/Views/PostSettingsPublishDatePicker.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ struct PostSettingsPublishDatePicker: View {
1010
isRequired: !viewModel.isDraftOrPending,
1111
timeZone: viewModel.timeZone,
1212
updated: { date in
13-
viewModel.settings.publishDate = date
13+
viewModel.didSelectPublshDate(date)
1414
}
1515
))
1616
}

WordPress/Classes/ViewRelated/Post/Views/AbstractPostMenuHelper.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ extension AbstractPostButton: AbstractPostMenuAction {
9494
var icon: UIImage? {
9595
switch self {
9696
case .view: return UIImage(systemName: "safari")
97-
case .publish: return UIImage(systemName: "tray.and.arrow.up")
97+
case .publish: return UIImage(systemName: "paperplane")
9898
case .stats: return UIImage(systemName: "chart.line.uptrend.xyaxis")
9999
case .duplicate: return UIImage(systemName: "doc.on.doc")
100100
case .moveToDraft: return UIImage(systemName: "pencil.line")

0 commit comments

Comments
 (0)