import { createEffect, createSignal } from "solid-js"; import Modal from "./modal.jsx"; import UserService from "../services/user-service.js"; import EventEmitter from "../tools/event-emitter.js"; import ValidatedTextInput from "../modules/validated-text-input.jsx"; import ModalHandler from "./modal-handler.js"; const [users, setUsers] = createSignal([]); const eventEmitter = new EventEmitter(); const USER_CREATED_EVENT = "success"; const MIN_PASSWORD_LENGTH = 6; function CreateUserModal(props) { const [username, setUsername] = createSignal(""); const [isUsernameValid, setUsernameValid] = createSignal(true); const [password, setPassword] = createSignal(""); const [isPasswordValid, setPasswordValid] = createSignal(true); const [isAdmin, setAdmin] = createSignal(false); const [error, setError] = createSignal(""); createEffect(() => setUsernameValid(checkIfUsernameValid(username()))); createEffect(() => setPasswordValid(checkIfPasswordValid(password()))); function checkIfUsernameValid(name) { for (let user of users()) { if (user.getUsername() !== name) continue; return false; } return true; } function checkIfPasswordValid(password) { return password.length >= MIN_PASSWORD_LENGTH; } async function handleCreateUser() { let user; try { user = await UserService.createUser({ username: username(), password: password(), isAdmin: isAdmin(), }); } catch (e) { setError(e.message); return; } setUsername(""); setPassword(""); CreateUserModal.Handler.hide(); eventEmitter.dispatchEvent(USER_CREATED_EVENT, user); } return ( ); } CreateUserModal.Handler = new ModalHandler(); CreateUserModal.setUsers = setUsers; CreateUserModal.onUserCreated = (callback) => eventEmitter.on(USER_CREATED_EVENT, callback); export default CreateUserModal;