) => {
+ e.preventDefault();
+ onSave();
+ };
+
+ const renderContent = () => {
+ if (isLoadingSelectedScriptContent) {
+ return ;
+ }
+
+ if (isSelectedScriptContentError) {
+ return ;
+ }
+
+ return (
+ <>
+
+
+
+
+ >
+ }
+ />
+ >
+ );
+ };
+
+ return (
+
+ {renderContent()}
+
+ );
+};
+
+export default EditScriptModal;
diff --git a/frontend/pages/ManageControlsPage/Scripts/components/EditScriptModal/index.ts b/frontend/pages/ManageControlsPage/Scripts/components/EditScriptModal/index.ts
new file mode 100644
index 000000000000..896d3c26f17d
--- /dev/null
+++ b/frontend/pages/ManageControlsPage/Scripts/components/EditScriptModal/index.ts
@@ -0,0 +1 @@
+export { default } from "./EditScriptModal";
diff --git a/frontend/pages/ManageControlsPage/Scripts/components/ScriptListItem/ScriptListItem.tests.tsx b/frontend/pages/ManageControlsPage/Scripts/components/ScriptListItem/ScriptListItem.tests.tsx
index 2e2d1ff346bb..47d33deee8f3 100644
--- a/frontend/pages/ManageControlsPage/Scripts/components/ScriptListItem/ScriptListItem.tests.tsx
+++ b/frontend/pages/ManageControlsPage/Scripts/components/ScriptListItem/ScriptListItem.tests.tsx
@@ -1,6 +1,6 @@
-import React from "react";
-import { render, screen, fireEvent } from "@testing-library/react";
+import { fireEvent, render, screen } from "@testing-library/react";
import { IScript } from "interfaces/script";
+import React from "react";
import ScriptListItem from "./ScriptListItem";
const MAC_SCRIPT: IScript = {
@@ -22,6 +22,7 @@ const WINDOWS_SCRIPT: IScript = {
describe("ScriptListItem", () => {
const onDelete = jest.fn();
const onClickScript = jest.fn();
+ const onEdit = jest.fn();
beforeEach(() => {
jest.clearAllMocks();
@@ -32,6 +33,7 @@ describe("ScriptListItem", () => {
);
@@ -44,6 +46,7 @@ describe("ScriptListItem", () => {
);
@@ -56,6 +59,7 @@ describe("ScriptListItem", () => {
);
@@ -69,6 +73,7 @@ describe("ScriptListItem", () => {
);
@@ -76,4 +81,18 @@ describe("ScriptListItem", () => {
fireEvent.click(screen.getByTestId("trash-icon"));
expect(onDelete).toHaveBeenCalledWith(MAC_SCRIPT);
});
+
+ it("calls onEdit when pencil button is clicked", () => {
+ render(
+
+ );
+
+ fireEvent.click(screen.getByTestId("pencil-icon"));
+ expect(onEdit).toHaveBeenCalledWith(MAC_SCRIPT);
+ });
});
diff --git a/frontend/pages/ManageControlsPage/Scripts/components/ScriptListItem/ScriptListItem.tsx b/frontend/pages/ManageControlsPage/Scripts/components/ScriptListItem/ScriptListItem.tsx
index 1f077099db1d..75c13d6ce3f3 100644
--- a/frontend/pages/ManageControlsPage/Scripts/components/ScriptListItem/ScriptListItem.tsx
+++ b/frontend/pages/ManageControlsPage/Scripts/components/ScriptListItem/ScriptListItem.tsx
@@ -1,13 +1,13 @@
-import React, { useContext } from "react";
import { format, formatDistanceToNow } from "date-fns";
import FileSaver from "file-saver";
+import React, { useContext } from "react";
import { NotificationContext } from "context/notification";
-import scriptAPI from "services/entities/scripts";
import { IScript } from "interfaces/script";
+import scriptAPI from "services/entities/scripts";
-import Icon from "components/Icon";
import Button from "components/buttons/Button";
+import Icon from "components/Icon";
import ListItem from "components/ListItem";
import { ISupportedGraphicNames } from "components/ListItem/ListItem";
@@ -17,6 +17,7 @@ interface IScriptListItemProps {
script: IScript;
onDelete: (script: IScript) => void;
onClickScript: (script: IScript) => void;
+ onEdit: (script: IScript) => void;
}
// TODO - useful to have a 'platform' field from API, for use elsewhere in app as well?
@@ -73,6 +74,7 @@ const ScriptListItem = ({
script,
onDelete,
onClickScript,
+ onEdit,
}: IScriptListItemProps) => {
const { renderFlash } = useContext(NotificationContext);
@@ -95,6 +97,13 @@ const ScriptListItem = ({
}
actions={
<>
+