Spaces:
Sleeping
Sleeping
<script lang="ts"> | |
import { getContext } from 'svelte'; | |
import { toast } from 'svelte-sonner'; | |
import { updateUserPassword } from '$lib/apis/auths'; | |
const i18n = getContext('i18n'); | |
let show = false; | |
let currentPassword = ''; | |
let newPassword = ''; | |
let newPasswordConfirm = ''; | |
const updatePasswordHandler = async () => { | |
if (newPassword === newPasswordConfirm) { | |
const res = await updateUserPassword(localStorage.token, currentPassword, newPassword).catch( | |
(error) => { | |
toast.error(error); | |
return null; | |
} | |
); | |
if (res) { | |
toast.success($i18n.t('Successfully updated.')); | |
} | |
currentPassword = ''; | |
newPassword = ''; | |
newPasswordConfirm = ''; | |
} else { | |
toast.error( | |
`The passwords you entered don't quite match. Please double-check and try again.` | |
); | |
newPassword = ''; | |
newPasswordConfirm = ''; | |
} | |
}; | |
</script> | |
<form | |
class="flex flex-col text-sm" | |
on:submit|preventDefault={() => { | |
updatePasswordHandler(); | |
}} | |
> | |
<div class="flex justify-between items-center text-sm"> | |
<div class=" font-medium">{$i18n.t('Change Password')}</div> | |
<button | |
class=" text-xs font-medium text-gray-500" | |
type="button" | |
on:click={() => { | |
show = !show; | |
}}>{show ? $i18n.t('Hide') : $i18n.t('Show')}</button | |
> | |
</div> | |
{#if show} | |
<div class=" py-2.5 space-y-1.5"> | |
<div class="flex flex-col w-full"> | |
<div class=" mb-1 text-xs text-gray-500">{$i18n.t('Current Password')}</div> | |
<div class="flex-1"> | |
<input | |
class="w-full rounded py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-800 outline-none" | |
type="password" | |
bind:value={currentPassword} | |
autocomplete="current-password" | |
required | |
/> | |
</div> | |
</div> | |
<div class="flex flex-col w-full"> | |
<div class=" mb-1 text-xs text-gray-500">{$i18n.t('New Password')}</div> | |
<div class="flex-1"> | |
<input | |
class="w-full rounded py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-800 outline-none" | |
type="password" | |
bind:value={newPassword} | |
autocomplete="new-password" | |
required | |
/> | |
</div> | |
</div> | |
<div class="flex flex-col w-full"> | |
<div class=" mb-1 text-xs text-gray-500">{$i18n.t('Confirm Password')}</div> | |
<div class="flex-1"> | |
<input | |
class="w-full rounded py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-800 outline-none" | |
type="password" | |
bind:value={newPasswordConfirm} | |
autocomplete="off" | |
required | |
/> | |
</div> | |
</div> | |
</div> | |
<div class="mt-3 flex justify-end"> | |
<button | |
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" | |
> | |
{$i18n.t('Update password')} | |
</button> | |
</div> | |
{/if} | |
</form> | |