|
1 | 1 | import React, { ComponentProps } from "react";
|
| 2 | +import clsx from "clsx"; |
2 | 3 | import { Input } from "../Input";
|
3 | 4 | import "./PasswordInput.scss";
|
4 | 5 |
|
5 |
| -interface PasswordInputProps extends ComponentProps<typeof Input> {} |
| 6 | +interface PasswordInputProps extends ComponentProps<typeof Input> { |
| 7 | + score: 0 | 1 | 2 | 3 | 4; |
| 8 | +} |
| 9 | + |
| 10 | +export const PasswordInput = ({ score = 0, ...props }: PasswordInputProps) => { |
| 11 | + const PasswordStrengthClass: Record<PasswordInputProps["score"], string> = { |
| 12 | + 0: "", |
| 13 | + 1: "deriv-password-meter--bar__weak", |
| 14 | + 2: "deriv-password-meter--bar__moderate", |
| 15 | + 3: "deriv-password-meter--bar__strong", |
| 16 | + 4: "deriv-password-meter--bar__complete", |
| 17 | + }; |
| 18 | + |
| 19 | + const PasswordVariant: Record< |
| 20 | + PasswordInputProps["score"], |
| 21 | + PasswordInputProps["variant"] |
| 22 | + > = { |
| 23 | + 0: "general", |
| 24 | + 1: "error", |
| 25 | + 2: "error", |
| 26 | + 3: "success", |
| 27 | + 4: "success", |
| 28 | + }; |
6 | 29 |
|
7 |
| -export const PasswordInput = ({ ...props }: PasswordInputProps) => { |
8 | 30 | return (
|
9 | 31 | <div className="deriv-password">
|
10 |
| - <Input type="password" {...props} /> |
| 32 | + <Input type="password" {...props} variant={PasswordVariant[score]} /> |
11 | 33 | <div className="deriv-password-meter">
|
12 |
| - <div className="deriv-password-meter--bar"></div> |
| 34 | + <div |
| 35 | + className={clsx( |
| 36 | + "deriv-password-meter--bar", |
| 37 | + PasswordStrengthClass[score] |
| 38 | + )} |
| 39 | + ></div> |
13 | 40 | </div>
|
14 | 41 | </div>
|
15 | 42 | );
|
|
0 commit comments