123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- <script lang="ts">
- import { api } from '@api';
- import { createEventDispatcher } from 'svelte';
- import {
- notificationController,
- NotificationType
- } from '../shared-components/notification/notification';
- let error: string;
- let success: string;
- let password = '';
- let confirmPassowrd = '';
- let canCreateUser = false;
- let isCreatingUser = false;
- $: {
- if (password !== confirmPassowrd && confirmPassowrd.length > 0) {
- error = 'Password does not match';
- canCreateUser = false;
- } else {
- error = '';
- canCreateUser = true;
- }
- }
- const dispatch = createEventDispatcher();
- async function registerUser(event: SubmitEvent) {
- if (canCreateUser && !isCreatingUser) {
- isCreatingUser = true;
- error = '';
- const formElement = event.target as HTMLFormElement;
- const form = new FormData(formElement);
- const email = form.get('email');
- const password = form.get('password');
- const firstName = form.get('firstName');
- const lastName = form.get('lastName');
- try {
- const { status } = await api.userApi.createUser({
- email: String(email),
- password: String(password),
- firstName: String(firstName),
- lastName: String(lastName)
- });
- if (status === 201) {
- success = 'New user created';
- dispatch('user-created');
- isCreatingUser = false;
- return;
- } else {
- error = 'Error create user account';
- isCreatingUser = false;
- }
- } catch (e) {
- error = 'Error create user account';
- isCreatingUser = false;
- console.log('[ERROR] registerUser', e);
- notificationController.show({
- message: `Error create new user, check console for more detail`,
- type: NotificationType.Error
- });
- }
- }
- }
- </script>
- <div
- class="border bg-immich-bg dark:bg-immich-dark-gray dark:border-immich-dark-gray p-4 shadow-sm w-[500px] max-w-[95vw] rounded-3xl py-8 dark:text-immich-dark-fg"
- >
- <div class="flex flex-col place-items-center place-content-center gap-4 px-4">
- <img
- class="text-center"
- src="/immich-logo.svg"
- height="100"
- width="100"
- alt="immich-logo"
- draggable="false"
- />
- <h1 class="text-2xl text-immich-primary dark:text-immich-dark-primary font-medium">
- Create new user
- </h1>
- <p
- class="text-sm border rounded-md p-4 font-mono text-gray-600 dark:border-immich-dark-bg dark:text-gray-300"
- >
- Please provide your user with the password, they will have to change it on their first sign
- in.
- </p>
- </div>
- <form on:submit|preventDefault={registerUser} autocomplete="off">
- <div class="m-4 flex flex-col gap-2">
- <label class="immich-form-label" for="email">Email</label>
- <input class="immich-form-input" id="email" name="email" type="email" required />
- </div>
- <div class="m-4 flex flex-col gap-2">
- <label class="immich-form-label" for="password">Password</label>
- <input
- class="immich-form-input"
- id="password"
- name="password"
- type="password"
- required
- bind:value={password}
- />
- </div>
- <div class="m-4 flex flex-col gap-2">
- <label class="immich-form-label" for="confirmPassword">Confirm Password</label>
- <input
- class="immich-form-input"
- id="confirmPassword"
- name="password"
- type="password"
- required
- bind:value={confirmPassowrd}
- />
- </div>
- <div class="m-4 flex flex-col gap-2">
- <label class="immich-form-label" for="firstName">First Name</label>
- <input class="immich-form-input" id="firstName" name="firstName" type="text" required />
- </div>
- <div class="m-4 flex flex-col gap-2">
- <label class="immich-form-label" for="lastName">Last Name</label>
- <input class="immich-form-input" id="lastName" name="lastName" type="text" required />
- </div>
- {#if error}
- <p class="text-red-400 ml-4 text-sm">{error}</p>
- {/if}
- {#if success}
- <p class="text-immich-primary ml-4 text-sm">{success}</p>
- {/if}
- <div class="flex w-full">
- <button
- type="submit"
- class="m-4 bg-immich-primary dark:bg-immich-dark-primary hover:bg-immich-primary/75 dark:hover:bg-immich-dark-primary/80 px-6 py-3 text-white dark:text-immich-dark-gray rounded-full shadow-md w-full font-medium"
- disabled={isCreatingUser}
- >Create
- </button>
- </div>
- </form>
- </div>
|