feat(ai-scribe): Fix the English locale file `(intl_en.arb)` is missing all three AI Scribe keys

feat(ai-scribe): Fix async function declared without proper return type annotation.

feat(ai-scribe): Fix Async operations not properly awaited.

feat(ai-scribe): Fix inconsistent capitalization between button labels.

feat(ai-scribe): Fix GenerateAITextFailure check will never match.

feat(ai-scribe): Fix consider validating text input for predefined actions.

feat(ai-scribe): Using a subshell for directory isolation.

feat(ai-scribe): Fix verify the mock usage or document intent.

feat(ai-scribe): Using a more conventional import for Offset.

feat(ai-scribe): Adding error handling for consistency

feat(ai-scribe): Remove `fromJson` and `toJson` of AIResponse

feat(ai-scribe): Using constants for role values.

feat(ai-scribe): Using a more specific import.

feat(ai-scribe): Using Timer for cleaner lifecycle management

feat(ai-scribe): Adding error handling to fromMap() for consistency.

feat(ai-scribe): Disposing the ValueNotifier

feat(ai-scribe): Redundant null check after assignment

feat(ai-scribe): Fix calling `registerSelectionChangeListener` multiple times may be inefficient.

feat(ai-scribe): Safer type handling for JavaScript callback args

feat(ai-scribe): Fix async callbacks not awaited in switch statement.

feat(ai-scribe): Fix binding lifecycle mismatch for GetAIScribeConfigInteractor

feat(ai-scribe): Fix ai prompts

feat(ai-scribe): Fix unawaited async call to `_setupSelectionListener`

feat(ai-scribe): Fix switch cases use top-origin coordinates while `PositionedDirectional(bottom:)`` expects bottom-origin coordinates.

feat(ai-scribe): Adding error handling for selection listener setup.
This commit is contained in:
dab246
2025-12-19 15:09:56 +07:00
committed by Dat H. Pham
parent 6e56a50713
commit 6e09d853fd
20 changed files with 142 additions and 101 deletions
@@ -35,7 +35,7 @@ extension HandleAiScribeInComposerExtension on ComposerController {
}
}
void insertTextInEditor(String text) async {
Future<void> insertTextInEditor(String text) async {
try {
final htmlContent = StringConvert.convertTextContentToHtmlContent(text);
@@ -87,18 +87,17 @@ extension HandleAiScribeInComposerExtension on ComposerController {
// Ensure we only insert at cursor position by collapsing selection before inserting
Future<void> onInsertTextCallback(String text) async {
await collapseSelection();
insertTextInEditor(text);
await insertTextInEditor(text);
}
// If there is a selection, it will replace the selection, else it will replace everything
void onReplaceTextCallback(String text) {
Future<void> onReplaceTextCallback(String text) async {
final selection = editorTextSelection.value?.selectedText;
if (selection == null || selection.isEmpty) {
clearTextInEditor();
}
insertTextInEditor(text);
await insertTextInEditor(text);
}
Future<void> openAIAssistantModal(Offset? position, Size? size) async {
@@ -116,16 +115,16 @@ extension HandleAiScribeInComposerExtension on ComposerController {
);
}
void handleAiScribeSuggestionAction(
Future<void> handleAiScribeSuggestionAction(
AiScribeSuggestionActions action,
String suggestionText,
) {
) async {
switch (action) {
case AiScribeSuggestionActions.replace:
onReplaceTextCallback(suggestionText);
await onReplaceTextCallback(suggestionText);
break;
case AiScribeSuggestionActions.insert:
onInsertTextCallback(suggestionText);
await onInsertTextCallback(suggestionText);
break;
}
}