Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions RELEASE-NOTES.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
* [*] Add "Email to Subscribers" row to "Publishing" sheet [#24946]
* [*] Add permalink preview in the slug editor and make other improvements [#24949]
* [*] Update "Categories" picker to indicate multiple selection [#24952]
* [*] Replace "Visibility" with "Status" in the "Publishing" Sheet [#24950]

26.4
-----
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -154,8 +154,8 @@ struct PostSettingsFormContentView: View {
private var publishingOptionsSection: some View {
Section {
BlogListSiteView(site: .init(blog: viewModel.post.blog))
statusRow
publishDateRow
visibilityRow
} header: {
SectionHeader(Strings.readyToPublish)
}
Expand Down Expand Up @@ -267,7 +267,11 @@ struct PostSettingsFormContentView: View {

private var statusRow: some View {
NavigationLink {
PostStatusView(settings: $viewModel.settings, timeZone: viewModel.timeZone)
PostStatusView(
settings: $viewModel.settings,
timeZone: viewModel.timeZone,
isPublishing: viewModel.context == .publishing
)
} label: {
SettingsRow(Strings.status) {
HStack(alignment: .center, spacing: 2) {
Expand Down Expand Up @@ -317,20 +321,6 @@ struct PostSettingsFormContentView: View {
}
}

private var visibilityRow: some View {
NavigationLink {
PostVisibilityPicker(
selection: PostVisibilityPicker.Selection(post: viewModel.post),
dismissOnSelection: true,
onSubmit: { selection in
viewModel.updateVisibility(selection)
}
)
} label: {
SettingsRow(Strings.visibilityLabel, value: viewModel.visibilityText)
}
}

// MARK: - "Social Sharing" Section

@ViewBuilder
Expand Down Expand Up @@ -518,12 +508,6 @@ private enum Strings {
comment: "Label for the publish date field in Post Settings"
)

static let visibilityLabel = NSLocalizedString(
"postSettings.visibility.label",
value: "Visibility",
comment: "Label for the visibility field in Post Settings"
)

static let pendingReviewLabel = NSLocalizedString(
"postSettings.pendingReview.label",
value: "Pending Review",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,11 +69,6 @@ final class PostSettingsViewModel: NSObject, ObservableObject {
return formatter.string(from: date)
}

var visibilityText: String {
PostVisibility(status: settings.status, password: settings.password)
.localizedTitle
}

var slugText: String {
settings.slug.isEmpty ? (post.suggested_slug ?? "") : settings.slug
}
Expand Down Expand Up @@ -157,7 +152,11 @@ final class PostSettingsViewModel: NSObject, ObservableObject {
self.preferences = preferences

// Initialize settings from the post
let initialSettings = PostSettings(from: post)
var initialSettings = PostSettings(from: post)
if context == .publishing {
initialSettings.status = .publish
initialSettings.updateStatusForPublishDate()
}
self.settings = initialSettings
self.originalSettings = initialSettings

Expand Down Expand Up @@ -343,20 +342,11 @@ final class PostSettingsViewModel: NSObject, ObservableObject {
trackChanges(from: originalSettings, to: settings)
}

func updateVisibility(_ selection: PostVisibilityPicker.Selection) {
track(.editorPostVisibilityChanged)

switch selection.type {
case .public, .protected:
if post.original().status == .scheduled {
// Keep it scheduled
} else {
settings.status = .publish
}
case .private:
settings.status = .publishPrivate
func didSelectPublshDate(_ date: Date?) {
settings.publishDate = date
if context == .publishing {
settings.updateStatusForPublishDate()
}
settings.password = selection.password.isEmpty ? nil : selection.password
}

func didSelectSuggestedTag(_ tag: String) {
Expand Down Expand Up @@ -558,6 +548,26 @@ extension PostSettingsViewModel: @MainActor PrepublishingSocialAccountsDelegate
}
}

private extension PostSettings {
mutating func updateStatusForPublishDate() {
switch status {
case .publish:
if let date = publishDate, date > .now, status == .publish {
status = .scheduled
}
case .scheduled:
if let date = publishDate, date <= .now {
status = .publish
} else if publishDate == nil {
status = .publish
}
default:
break // Do nothing

}
}
}

// MARK: - Localized Strings

private enum Strings {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ struct PostSettingsPublishDatePicker: View {
isRequired: !viewModel.isDraftOrPending,
timeZone: viewModel.timeZone,
updated: { date in
viewModel.settings.publishDate = date
viewModel.didSelectPublshDate(date)
}
))
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,21 @@ import WordPressData
struct PostStatusView: View {
@Binding var settings: PostSettings
let timeZone: TimeZone
var isPublishing = false

@State private var isShowingPublishDatePicker = false
@State private var isShowingPasswordEntry = false

@ScaledMetric
private var statusRowLeadingInset: CGFloat = PostStatusRow.leadingInset

private let statuses = [BasePost.Status.draft, .pending, .publishPrivate, .scheduled, .publish]
private var statuses: [BasePost.Status] {
var statuses: [BasePost.Status] = [.draft, .pending, .publishPrivate, .scheduled, .publish]
if isPublishing {
statuses.removeAll { $0 == .draft }
}
return statuses
}

var body: some View {
Form {
Expand Down
167 changes: 0 additions & 167 deletions WordPress/Classes/ViewRelated/Post/PostVisibilityPicker.swift

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -174,8 +174,12 @@ struct PublishPostView: View {

private extension PostSettingsViewModel {
var publishButtonTitle: String {
let isScheduled = settings.publishDate.map { $0 > .now } ?? false
return isScheduled ? Strings.schedule : Strings.publish
switch settings.status {
case .publish, .publishPrivate: Strings.publish
case .pending: Strings.submit
case .scheduled: Strings.schedule
default: SharedStrings.Button.save
}
}
}

Expand All @@ -185,6 +189,7 @@ enum PrepublishingSheetStrings {
static let title = NSLocalizedString("prepublishing.title", value: "Publishing", comment: "Navigation title")
static let publishingTo = NSLocalizedString("prepublishing.publishingTo", value: "Publishing to", comment: "Label in the header in the pre-publishing sheet")
static let publish = NSLocalizedString("prepublishing.publish", value: "Publish", comment: "Primary button label in the pre-publishing sheet")
static let submit = NSLocalizedString("prepublishing.submitForReview", value: "Submit", comment: "Primary button label in the pre-publishing sheet (must be short)")
static let schedule = NSLocalizedString("prepublishing.schedule", value: "Schedule", comment: "Primary button label in the pre-publishing shee")
static let publishDate = NSLocalizedString("prepublishing.publishDate", value: "Publish Date", comment: "Label for a cell in the pre-publishing sheet")
static let visibility = NSLocalizedString("prepublishing.visibility", value: "Visibility", comment: "Label for a cell in the pre-publishing sheet")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ extension AbstractPostButton: AbstractPostMenuAction {
var icon: UIImage? {
switch self {
case .view: return UIImage(systemName: "safari")
case .publish: return UIImage(systemName: "tray.and.arrow.up")
case .publish: return UIImage(systemName: "paperplane")
case .stats: return UIImage(systemName: "chart.line.uptrend.xyaxis")
case .duplicate: return UIImage(systemName: "doc.on.doc")
case .moveToDraft: return UIImage(systemName: "pencil.line")
Expand Down