import { createEffect, createMemo, createResource, createSignal, } from "solid-js"; import ListManager from "../components/list-manager.jsx"; import ValidatedTextInput from "../components/validated-text-input.jsx"; import Remote from "../data/remote.js"; import RemoteService from "../services/remotes-service.js"; import EventEmitter from "../tools/event-emitter.js"; import ModalHandler from "./modal-handler.js"; import Modal from "./modal.jsx"; const eventEmitter = new EventEmitter(); const REMOTE_EDITED_EVENT = "success"; const MIN_TITLE_LENGTH = 3; const modalHandler = new ModalHandler(); const [remoteId, setRemoteId] = createSignal(null); function EditRemoteModal(props) { const [title, setTitle] = createSignal(""); const [commands, setCommands] = createSignal([]); const [availableCommands, { refetch: refetchAvailableCommands }] = createResource(RemoteService.getCommands); const [remote, {}] = createResource( remoteId, () => RemoteService.getRemote(remoteId()), { initialValue: new Remote() } ); const [error, setError] = createSignal(""); const isTitleValid = createMemo(() => title().length >= MIN_TITLE_LENGTH); const isFormValid = createMemo(() => isTitleValid()); createEffect(() => { if (!remote()) return; setTitle(remote().getTitle()); setCommands(remote().getCommands()); }); modalHandler.onShow(() => { refetchAvailableCommands(); }); async function handleEditRemote() { try { await RemoteService.updateRemote( new Remote({ id: remote().getId(), title: title(), commands: commands(), }) ); } catch (e) { setError(e.message); console.error(e); return; } resetFields(); EditRemoteModal.Handler.hide(); eventEmitter.dispatchEvent(REMOTE_EDITED_EVENT); } function resetFields() { setTitle(""); setCommands([]); setRemoteId(""); setError(""); } function handleCommandSelect(item) { setCommands([...commands(), item]); } function handleCommandDeselect(item) { setCommands( commands().filter((command) => command.getId() !== item.getId()) ); } return ( ); } EditRemoteModal.Handler = modalHandler; EditRemoteModal.onRemoteEdited = (callback) => eventEmitter.on(REMOTE_EDITED_EVENT, callback); EditRemoteModal.setRemoteId = setRemoteId; export default EditRemoteModal;