Преглед изворни кода

fix(app): show correct submit icon when typing follow up

Adam пре 2 недеља
родитељ
комит
a32ffaba35
1 измењених фајлова са 29 додато и 21 уклоњено
  1. 29 21
      packages/app/src/components/prompt-input.tsx

+ 29 - 21
packages/app/src/components/prompt-input.tsx

@@ -243,23 +243,6 @@ export const PromptInput: Component<PromptInputProps> = (props) => {
       },
       },
   )
   )
   const working = createMemo(() => status()?.type !== "idle")
   const working = createMemo(() => status()?.type !== "idle")
-  const tip = () => {
-    if (working()) {
-      return (
-        <div class="flex items-center gap-2">
-          <span>{language.t("prompt.action.stop")}</span>
-          <span class="text-icon-base text-12-medium text-[10px]!">{language.t("common.key.esc")}</span>
-        </div>
-      )
-    }
-
-    return (
-      <div class="flex items-center gap-2">
-        <span>{language.t("prompt.action.send")}</span>
-        <Icon name="enter" size="small" class="text-icon-base" />
-      </div>
-    )
-  }
   const imageAttachments = createMemo(() =>
   const imageAttachments = createMemo(() =>
     prompt.current().filter((part): part is ImageAttachmentPart => part.type === "image"),
     prompt.current().filter((part): part is ImageAttachmentPart => part.type === "image"),
   )
   )
@@ -297,6 +280,31 @@ export const PromptInput: Component<PromptInputProps> = (props) => {
     if (store.mode === "shell") return 0
     if (store.mode === "shell") return 0
     return prompt.context.items().filter((item) => !!item.comment?.trim()).length
     return prompt.context.items().filter((item) => !!item.comment?.trim()).length
   })
   })
+  const blank = createMemo(() => {
+    const text = prompt
+      .current()
+      .map((part) => ("content" in part ? part.content : ""))
+      .join("")
+    return text.trim().length === 0 && imageAttachments().length === 0 && commentCount() === 0
+  })
+  const stopping = createMemo(() => working() && blank())
+  const tip = () => {
+    if (stopping()) {
+      return (
+        <div class="flex items-center gap-2">
+          <span>{language.t("prompt.action.stop")}</span>
+          <span class="text-icon-base text-12-medium text-[10px]!">{language.t("common.key.esc")}</span>
+        </div>
+      )
+    }
+
+    return (
+      <div class="flex items-center gap-2">
+        <span>{language.t("prompt.action.send")}</span>
+        <Icon name="enter" size="small" class="text-icon-base" />
+      </div>
+    )
+  }
 
 
   const contextItems = createMemo(() => {
   const contextItems = createMemo(() => {
     const items = prompt.context.items()
     const items = prompt.context.items()
@@ -1407,17 +1415,17 @@ export const PromptInput: Component<PromptInputProps> = (props) => {
             />
             />
 
 
             <div class="flex items-center gap-1 pointer-events-auto">
             <div class="flex items-center gap-1 pointer-events-auto">
-              <Tooltip placement="top" inactive={!prompt.dirty() && !working()} value={tip()}>
+              <Tooltip placement="top" inactive={!working() && blank()} value={tip()}>
                 <IconButton
                 <IconButton
                   data-action="prompt-submit"
                   data-action="prompt-submit"
                   type="submit"
                   type="submit"
-                  disabled={store.mode !== "normal" || (!prompt.dirty() && !working() && commentCount() === 0)}
+                  disabled={store.mode !== "normal" || (!working() && blank())}
                   tabIndex={store.mode === "normal" ? undefined : -1}
                   tabIndex={store.mode === "normal" ? undefined : -1}
-                  icon={working() ? "stop" : "arrow-up"}
+                  icon={stopping() ? "stop" : "arrow-up"}
                   variant="primary"
                   variant="primary"
                   class="size-8"
                   class="size-8"
                   style={buttons()}
                   style={buttons()}
-                  aria-label={working() ? language.t("prompt.action.stop") : language.t("prompt.action.send")}
+                  aria-label={stopping() ? language.t("prompt.action.stop") : language.t("prompt.action.send")}
                 />
                 />
               </Tooltip>
               </Tooltip>
             </div>
             </div>