Source code for the WriteFreely SwiftUI app for iOS, iPadOS, and macOS
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

71 lines
2.3 KiB

  1. import SwiftUI
  2. struct PostStatusBadgeView: View {
  3. @ObservedObject var post: WFAPost
  4. var body: some View {
  5. let (badgeLabel, badgeColor) = setupBadgeProperties(for: PostStatus(rawValue: post.status)!)
  6. Text(badgeLabel)
  7. .font(.caption)
  8. .fontWeight(.semibold)
  9. .foregroundColor(.white)
  10. .textCase(.uppercase)
  11. .lineLimit(1)
  12. .padding(EdgeInsets(top: 2.5, leading: 7.5, bottom: 2.5, trailing: 7.5))
  13. .background(badgeColor)
  14. .clipShape(RoundedRectangle(cornerRadius: 5.0, style: .circular))
  15. }
  16. func setupBadgeProperties(for status: PostStatus) -> (String, Color) {
  17. var badgeLabel: String
  18. var badgeColor: Color
  19. switch status {
  20. case .local:
  21. badgeLabel = "local"
  22. badgeColor = Color(red: 0.75, green: 0.5, blue: 0.85, opacity: 1.0)
  23. case .edited:
  24. badgeLabel = "edited"
  25. badgeColor = Color(red: 0.75, green: 0.7, blue: 0.1, opacity: 1.0)
  26. case .published:
  27. badgeLabel = "published"
  28. badgeColor = .gray
  29. }
  30. return (badgeLabel, badgeColor)
  31. }
  32. }
  33. struct PostStatusBadge_LocalDraftPreviews: PreviewProvider {
  34. static var previews: some View {
  35. let context = LocalStorageManager.standard.container.viewContext
  36. let testPost = WFAPost(context: context)
  37. testPost.status = PostStatus.local.rawValue
  38. return PostStatusBadgeView(post: testPost)
  39. .environment(\.managedObjectContext, context)
  40. }
  41. }
  42. struct PostStatusBadge_EditedPreviews: PreviewProvider {
  43. static var previews: some View {
  44. let context = LocalStorageManager.standard.container.viewContext
  45. let testPost = WFAPost(context: context)
  46. testPost.status = PostStatus.edited.rawValue
  47. return PostStatusBadgeView(post: testPost)
  48. .environment(\.managedObjectContext, context)
  49. }
  50. }
  51. struct PostStatusBadge_PublishedPreviews: PreviewProvider {
  52. static var previews: some View {
  53. let context = LocalStorageManager.standard.container.viewContext
  54. let testPost = WFAPost(context: context)
  55. testPost.status = PostStatus.published.rawValue
  56. return PostStatusBadgeView(post: testPost)
  57. .environment(\.managedObjectContext, context)
  58. }
  59. }