Просмотр исходного кода

Mark AI generation required fields with asterisks in form UIs.

Helps users see which inputs unlock Generate/Optimize before they try, matching each tool's validation rules.

Co-authored-by: Cursor <cursoragent@cursor.com>
AhtashamShahzad1 2 недель назад
Родитель
Сommit
2eb0a36a33

+ 6 - 3
App AI for Reddit/Views/CommentWriterView.swift

@@ -236,7 +236,8 @@ struct CommentWriterView: View {
                         label: "Subreddit",
                         placeholder: "technology",
                         text: $viewModel.draft.subreddit,
-                        prefix: "r/"
+                        prefix: "r/",
+                        isRequired: true
                     )
 
                     if !viewModel.draft.subreddit.isEmpty,
@@ -247,7 +248,8 @@ struct CommentWriterView: View {
                     PostFormField(
                         label: "Post Title",
                         placeholder: "Paste or type the post title",
-                        text: $viewModel.draft.postTitle
+                        text: $viewModel.draft.postTitle,
+                        isRequired: true
                     )
 
                     PostFormTextEditor(
@@ -262,7 +264,8 @@ struct CommentWriterView: View {
                             label: "Parent Comment",
                             placeholder: "Paste the comment you're replying to…",
                             text: $viewModel.draft.parentComment,
-                            minHeight: 90
+                            minHeight: 90,
+                            isRequired: true
                         )
                     }
 

+ 22 - 6
App AI for Reddit/Views/Components/PostGeneratorComponents.swift

@@ -23,6 +23,24 @@ struct PostPageBoundary<Content: View>: View {
 
 // MARK: - Shared Form Components
 
+struct PostFormLabel: View {
+    let text: String
+    var isRequired: Bool = false
+
+    var body: some View {
+        HStack(spacing: 2) {
+            Text(text)
+                .font(.system(size: 10, weight: .medium))
+                .foregroundStyle(AppTheme.textTertiary)
+            if isRequired {
+                Text("*")
+                    .font(.system(size: 10, weight: .semibold))
+                    .foregroundStyle(Color(hex: 0xF87171))
+            }
+        }
+    }
+}
+
 struct PostFormCard<Content: View>: View {
     let title: String
     var subtitle: String?
@@ -61,12 +79,11 @@ struct PostFormField: View {
     var placeholder: String = ""
     @Binding var text: String
     var prefix: String?
+    var isRequired: Bool = false
 
     var body: some View {
         VStack(alignment: .leading, spacing: 6) {
-            Text(label)
-                .font(.system(size: 10, weight: .medium))
-                .foregroundStyle(AppTheme.textTertiary)
+            PostFormLabel(text: label, isRequired: isRequired)
 
             HStack(spacing: 0) {
                 if let prefix {
@@ -98,12 +115,11 @@ struct PostFormTextEditor: View {
     var placeholder: String = ""
     @Binding var text: String
     var minHeight: CGFloat = 120
+    var isRequired: Bool = false
 
     var body: some View {
         VStack(alignment: .leading, spacing: 6) {
-            Text(label)
-                .font(.system(size: 10, weight: .medium))
-                .foregroundStyle(AppTheme.textTertiary)
+            PostFormLabel(text: label, isRequired: isRequired)
 
             ThinCaretTextEditor(
                 text: $text,

+ 5 - 3
App AI for Reddit/Views/PostGeneratorView.swift

@@ -241,7 +241,8 @@ struct PostGeneratorView: View {
                         label: "Subreddit",
                         placeholder: "technology",
                         text: $viewModel.draft.subreddit,
-                        prefix: "r/"
+                        prefix: "r/",
+                        isRequired: true
                     )
 
                     if !viewModel.draft.subreddit.isEmpty,
@@ -256,7 +257,8 @@ struct PostGeneratorView: View {
                     PostFormField(
                         label: "Topic / Keywords",
                         placeholder: "e.g. macOS productivity tips",
-                        text: $viewModel.draft.topic
+                        text: $viewModel.draft.topic,
+                        isRequired: true
                     )
 
                     VStack(alignment: .leading, spacing: 6) {
@@ -308,7 +310,7 @@ struct PostGeneratorView: View {
 
     private var editorPanel: some View {
         VStack(spacing: Layout.sectionSpacing) {
-            PostFormCard(title: "Title", subtitle: "Required for all post types") {
+            PostFormCard(title: "Title", subtitle: "Filled by AI after generating, or write your own") {
                 PostFormField(
                     label: "Post Title",
                     placeholder: "An engaging title for your post",

+ 6 - 3
App AI for Reddit/Views/TitleOptimizerView.swift

@@ -199,7 +199,8 @@ struct TitleOptimizerView: View {
                     label: "Subreddit",
                     placeholder: "technology",
                     text: $viewModel.draft.subreddit,
-                    prefix: "r/"
+                    prefix: "r/",
+                    isRequired: true
                 )
             }
 
@@ -208,7 +209,8 @@ struct TitleOptimizerView: View {
                     PostFormField(
                         label: "Topic / Keywords",
                         placeholder: "e.g. macOS productivity tips",
-                        text: $viewModel.draft.topic
+                        text: $viewModel.draft.topic,
+                        isRequired: true
                     )
 
                     VStack(alignment: .leading, spacing: 6) {
@@ -277,7 +279,8 @@ struct TitleOptimizerView: View {
                 PostFormField(
                     label: "Post Title",
                     placeholder: "Enter your draft title here",
-                    text: $viewModel.draft.originalTitle
+                    text: $viewModel.draft.originalTitle,
+                    isRequired: true
                 )
             }