login-form.svelte 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. <script lang="ts">
  2. import { loginPageMessage } from '$lib/constants';
  3. import { api } from '@api';
  4. import { createEventDispatcher } from 'svelte';
  5. let error: string;
  6. let email: string = '';
  7. let password: string = '';
  8. const dispatch = createEventDispatcher();
  9. const login = async () => {
  10. try {
  11. error = '';
  12. const { data } = await api.authenticationApi.login({
  13. email,
  14. password
  15. });
  16. if (!data.isAdmin && data.shouldChangePassword) {
  17. dispatch('first-login');
  18. return;
  19. }
  20. dispatch('success');
  21. return;
  22. } catch (e) {
  23. error = 'Incorrect email or password';
  24. return;
  25. }
  26. };
  27. </script>
  28. <div class="border bg-white p-4 shadow-sm w-[500px] rounded-md py-8">
  29. <div class="flex flex-col place-items-center place-content-center gap-4 px-4">
  30. <img class="text-center" src="/immich-logo.svg" height="100" width="100" alt="immich-logo" />
  31. <h1 class="text-2xl text-immich-primary font-medium">Login</h1>
  32. </div>
  33. {#if loginPageMessage}
  34. <p
  35. class="text-sm border rounded-md m-4 p-4 text-immich-primary font-medium bg-immich-primary/5"
  36. >
  37. {@html loginPageMessage}
  38. </p>
  39. {/if}
  40. <form on:submit|preventDefault={login} autocomplete="off">
  41. <div class="m-4 flex flex-col gap-2">
  42. <label class="immich-form-label" for="email">Email</label>
  43. <input
  44. class="immich-form-input"
  45. id="email"
  46. name="email"
  47. type="email"
  48. bind:value={email}
  49. required
  50. />
  51. </div>
  52. <div class="m-4 flex flex-col gap-2">
  53. <label class="immich-form-label" for="password">Password</label>
  54. <input
  55. class="immich-form-input"
  56. id="password"
  57. name="password"
  58. type="password"
  59. bind:value={password}
  60. required
  61. />
  62. </div>
  63. {#if error}
  64. <p class="text-red-400 pl-4">{error}</p>
  65. {/if}
  66. <div class="flex w-full">
  67. <button
  68. type="submit"
  69. class="m-4 p-2 bg-immich-primary hover:bg-immich-primary/75 px-6 py-4 text-white rounded-md shadow-md w-full font-semibold"
  70. >Login</button
  71. >
  72. </div>
  73. </form>
  74. </div>