Page Menu
Home
Musing Studio
Search
Configure Global Search
Log In
Files
F13828776
ActivePostToolbarView.swift
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
5 KB
Subscribers
None
ActivePostToolbarView.swift
View Options
import
SwiftUI
struct
ActivePostToolbarView
:
View
{
@
EnvironmentObject
var
model
:
WriteFreelyModel
@
ObservedObject
var
activePost
:
WFAPost
@
State
private
var
isPresentingSharingServicePicker
:
Bool
=
false
@
State
private
var
selectedCollection
:
WFACollection
?
@
FetchRequest
(
entity
:
WFACollection
.
entity
(),
sortDescriptors
:
[
NSSortDescriptor
(
keyPath
:
\
WFACollection
.
title
,
ascending
:
true
)]
)
var
collections
:
FetchedResults
<
WFACollection
>
var
body
:
some
View
{
HStack
{
if
model
.
account
.
isLoggedIn
&&
activePost
.
status
!=
PostStatus
.
local
.
rawValue
&&
!
(
activePost
.
wasDeletedFromServer
||
activePost
.
hasNewerRemoteCopy
)
{
Section
(
header
:
Text
(
"Move To:"
))
{
Picker
(
selection
:
$
selectedCollection
,
label
:
Text
(
"Move To…"
),
content
:
{
Text
(
"
\(
model
.
account
.
server
==
"https://write.as"
?
"Anonymous"
:
"Drafts"
)
"
)
.
tag
(
nil
as
WFACollection
?)
Divider
()
ForEach
(
collections
)
{
collection
in
Text
(
"
\(
collection
.
title
)
"
).
tag
(
collection
as
WFACollection
?)
}
})
}
}
PostEditorStatusToolbarView
(
post
:
activePost
)
.
frame
(
minWidth
:
50
,
alignment
:
.
center
)
.
layoutPriority
(
1
)
.
padding
(.
horizontal
)
if
activePost
.
status
==
PostStatus
.
local
.
rawValue
{
Menu
(
content
:
{
Label
(
"Publish To:"
,
systemImage
:
"paperplane"
)
Divider
()
Button
(
action
:
{
if
model
.
account
.
isLoggedIn
{
withAnimation
{
activePost
.
collectionAlias
=
nil
publishPost
(
activePost
)
}
}
else
{
openSettingsWindow
()
}
},
label
:
{
Text
(
"
\(
model
.
account
.
server
==
"https://write.as"
?
"Anonymous"
:
"Drafts"
)
"
)
})
ForEach
(
collections
)
{
collection
in
Button
(
action
:
{
if
model
.
account
.
isLoggedIn
{
withAnimation
{
activePost
.
collectionAlias
=
collection
.
alias
publishPost
(
activePost
)
}
}
else
{
openSettingsWindow
()
}
},
label
:
{
Text
(
"
\(
collection
.
title
)
"
)
})
}
},
label
:
{
Label
(
"Publish…"
,
systemImage
:
"paperplane"
)
})
.
disabled
(
model
.
selectedPost
!.
body
.
isEmpty
)
.
help
(
"Publish the post to the web.
\(
model
.
account
.
isLoggedIn
?
""
:
" You must be logged in to do this."
)
"
)
// swiftlint:disable:this line_length
}
else
{
HStack
(
spacing
:
4
)
{
Button
(
action
:
{
self
.
isPresentingSharingServicePicker
=
true
},
label
:
{
Image
(
systemName
:
"square.and.arrow.up"
)
}
)
.
disabled
(
activePost
.
status
==
PostStatus
.
local
.
rawValue
)
.
help
(
"Copy the post's URL to your Mac's pasteboard."
)
.
popover
(
isPresented
:
$
isPresentingSharingServicePicker
)
{
PostEditorSharingPicker
(
isPresented
:
$
isPresentingSharingServicePicker
,
sharingItems
:
createPostUrl
()
)
.
frame
(
width
:
.
zero
,
height
:
.
zero
)
}
Button
(
action
:
{
publishPost
(
activePost
)
},
label
:
{
Image
(
systemName
:
"paperplane"
)
})
.
disabled
(
activePost
.
body
.
isEmpty
||
activePost
.
status
==
PostStatus
.
published
.
rawValue
)
.
help
(
"Publish the post to the web.
\(
model
.
account
.
isLoggedIn
?
""
:
" You must be logged in to do this."
)
"
)
// swiftlint:disable:this line_length
}
}
}
.
onAppear
(
perform
:
{
self
.
selectedCollection
=
collections
.
first
{
$0
.
alias
==
activePost
.
collectionAlias
}
})
.
onChange
(
of
:
selectedCollection
,
perform
:
{
[
selectedCollection
]
newCollection
in
if
activePost
.
collectionAlias
==
newCollection
?.
alias
{
return
}
else
{
withAnimation
{
activePost
.
collectionAlias
=
newCollection
?.
alias
model
.
move
(
post
:
activePost
,
from
:
selectedCollection
,
to
:
newCollection
)
}
}
})
}
private
func
createPostUrl
()
->
[
Any
]
{
guard
let
postId
=
model
.
selectedPost
?.
postId
else
{
return
[]
}
guard
let
urlString
=
model
.
selectedPost
?.
slug
!=
nil
?
"
\(
model
.
account
.
server
)
/
\((
model
.
selectedPost
?.
collectionAlias
)
!
)
/
\((
model
.
selectedPost
?.
slug
)
!
)
"
:
"
\(
model
.
account
.
server
)
/
\((
postId
))
"
else
{
return
[]
}
guard
let
data
=
URL
(
string
:
urlString
)
else
{
return
[]
}
return
[
data
as
NSURL
]
}
private
func
publishPost
(
_
post
:
WFAPost
)
{
DispatchQueue
.
main
.
async
{
LocalStorageManager
().
saveContext
()
model
.
publish
(
post
:
post
)
}
}
private
func
openSettingsWindow
()
{
guard
let
menuItem
=
NSApplication
.
shared
.
mainMenu
?.
item
(
at
:
0
)?.
submenu
?.
item
(
at
:
2
)
else
{
return
}
NSApplication
.
shared
.
sendAction
(
menuItem
.
action
!,
to
:
menuItem
.
target
,
from
:
nil
)
}
}
File Metadata
Details
Attached
Mime Type
text/x-c
Expires
Thu, Feb 19, 8:56 PM (1 d, 22 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3632616
Attached To
rWFSUI WriteFreely SwiftUI
Event Timeline
Log In to Comment