UpdatePassword.svelte 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. <script lang="ts">
  2. import toast from 'svelte-french-toast';
  3. import { updateUserPassword } from '$lib/apis/auths';
  4. let show = false;
  5. let currentPassword = '';
  6. let newPassword = '';
  7. let newPasswordConfirm = '';
  8. const updatePasswordHandler = async () => {
  9. if (newPassword === newPasswordConfirm) {
  10. const res = await updateUserPassword(localStorage.token, currentPassword, newPassword).catch(
  11. (error) => {
  12. toast.error(error);
  13. return null;
  14. }
  15. );
  16. if (res) {
  17. toast.success('Successfully updated.');
  18. }
  19. currentPassword = '';
  20. newPassword = '';
  21. newPasswordConfirm = '';
  22. } else {
  23. toast.error(
  24. `The passwords you entered don't quite match. Please double-check and try again.`
  25. );
  26. newPassword = '';
  27. newPasswordConfirm = '';
  28. }
  29. };
  30. </script>
  31. <form
  32. class="flex flex-col text-sm"
  33. on:submit|preventDefault={() => {
  34. updatePasswordHandler();
  35. }}
  36. >
  37. <div class="flex justify-between mb-2.5 items-center text-sm">
  38. <div class=" font-medium">Change Password</div>
  39. <button
  40. class=" text-xs font-medium text-gray-500"
  41. type="button"
  42. on:click={() => {
  43. show = !show;
  44. }}>{show ? 'Hide' : 'Show'}</button
  45. >
  46. </div>
  47. {#if show}
  48. <div class=" space-y-1.5">
  49. <div class="flex flex-col w-full">
  50. <div class=" mb-1 text-xs text-gray-500">Current Password</div>
  51. <div class="flex-1">
  52. <input
  53. class="w-full rounded py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-800 outline-none"
  54. type="password"
  55. bind:value={currentPassword}
  56. autocomplete="current-password"
  57. required
  58. />
  59. </div>
  60. </div>
  61. <div class="flex flex-col w-full">
  62. <div class=" mb-1 text-xs text-gray-500">New Password</div>
  63. <div class="flex-1">
  64. <input
  65. class="w-full rounded py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-800 outline-none"
  66. type="password"
  67. bind:value={newPassword}
  68. autocomplete="new-password"
  69. required
  70. />
  71. </div>
  72. </div>
  73. <div class="flex flex-col w-full">
  74. <div class=" mb-1 text-xs text-gray-500">Confirm Password</div>
  75. <div class="flex-1">
  76. <input
  77. class="w-full rounded py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-800 outline-none"
  78. type="password"
  79. bind:value={newPasswordConfirm}
  80. autocomplete="off"
  81. required
  82. />
  83. </div>
  84. </div>
  85. </div>
  86. <div class="mt-3 flex justify-end">
  87. <button
  88. class=" px-4 py-2 text-xs bg-gray-800 hover:bg-gray-900 dark:bg-gray-700 dark:hover:bg-gray-800 text-gray-100 transition rounded-md font-medium"
  89. >
  90. Update password
  91. </button>
  92. </div>
  93. {/if}
  94. </form>