Source code for the WriteFreely SwiftUI app for iOS, iPadOS, and macOS
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 

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