Source code for the WriteFreely SwiftUI app for iOS, iPadOS, and macOS
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.
 
 
 

71 lignes
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. }