feat: adds pre/post-request script editing

Updates request model state management to include pre-request and post-request script fields.
Connects the script editor UI to the state notifier, allowing script changes to be persisted.
This commit is contained in:
Udhay-Adithya
2025-04-26 00:11:08 +05:30
parent d9906cc88b
commit 56137769f8
2 changed files with 34 additions and 13 deletions

View File

@@ -223,6 +223,8 @@ class CollectionStateNotifier
int? responseStatus, int? responseStatus,
String? message, String? message,
HttpResponseModel? httpResponseModel, HttpResponseModel? httpResponseModel,
String? preRequestScript,
String? postRequestScript,
}) { }) {
final rId = id ?? ref.read(selectedIdStateProvider); final rId = id ?? ref.read(selectedIdStateProvider);
if (rId == null) { if (rId == null) {
@@ -254,6 +256,8 @@ class CollectionStateNotifier
responseStatus: responseStatus ?? currentModel.responseStatus, responseStatus: responseStatus ?? currentModel.responseStatus,
message: message ?? currentModel.message, message: message ?? currentModel.message,
httpResponseModel: httpResponseModel ?? currentModel.httpResponseModel, httpResponseModel: httpResponseModel ?? currentModel.httpResponseModel,
preRequestScript: preRequestScript ?? currentModel.preRequestScript,
postRequestScript: postRequestScript ?? currentModel.postRequestScript,
); );
var map = {...state!}; var map = {...state!};

View File

@@ -1,28 +1,45 @@
import 'package:apidash/widgets/scripts_editor_pane.dart'; import 'package:apidash/widgets/scripts_editor_pane.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_code_editor/flutter_code_editor.dart'; import 'package:flutter_code_editor/flutter_code_editor.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:highlight/languages/javascript.dart'; import 'package:highlight/languages/javascript.dart';
import 'package:apidash/providers/providers.dart';
class ScriptsCodePane extends StatefulWidget { class ScriptsCodePane extends ConsumerStatefulWidget {
const ScriptsCodePane({super.key}); const ScriptsCodePane({super.key});
@override @override
State<ScriptsCodePane> createState() => _ScriptsCodePaneState(); ConsumerState<ScriptsCodePane> createState() => _ScriptsCodePaneState();
} }
class _ScriptsCodePaneState extends State<ScriptsCodePane> { class _ScriptsCodePaneState extends ConsumerState<ScriptsCodePane> {
@override
Widget build(BuildContext context) {
int _selectedTabIndex = 0; int _selectedTabIndex = 0;
final requestModel = ref.read(selectedRequestModelProvider);
final preReqCodeController = CodeController( final preReqCodeController = CodeController(
text: '// Use javascript to modify this request dynamically', text: requestModel?.preRequestScript,
language: javascript,
);
final postResCodeController = CodeController(
text: '...',
language: javascript, language: javascript,
); );
@override final postResCodeController = CodeController(
Widget build(BuildContext context) { text: requestModel?.postRequestScript,
language: javascript,
);
preReqCodeController.addListener(() {
ref.read(collectionStateNotifierProvider.notifier).update(
preRequestScript: preReqCodeController.text,
);
});
postResCodeController.addListener(() {
ref.read(collectionStateNotifierProvider.notifier).update(
postRequestScript: postResCodeController.text,
);
});
final tabs = ["Pre-Req", "Post-Res"]; final tabs = ["Pre-Req", "Post-Res"];
final content = [ final content = [
ScriptsEditorPane( ScriptsEditorPane(