Skip to content

Commit

Permalink
feature update: strength indicator for new password
Browse files Browse the repository at this point in the history
  • Loading branch information
pradeep-jais committed Dec 11, 2023
1 parent 147ff15 commit 6aeae25
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { useState } from 'react';
import { characterData } from '../data/characterData';
import '../styles.css';
import usePasswordGenerator from '../hooks/usePasswordGenerator';
import StrengthChecker from './StrengthChecker';

const PasswordGenerator = () => {
const [passwordLength, setPasswordLength] = useState(8);
Expand Down Expand Up @@ -88,10 +89,10 @@ const PasswordGenerator = () => {
{error ? (
<p className="error-msg">Select at least one checkbox</p>
) : (
<div className="strength">
<span>strength:</span>
<span>good</span>
</div>
<StrengthChecker
length={passwordLength}
checkboxData={checkboxData}
/>
)}

{/* generate button */}
Expand Down
39 changes: 39 additions & 0 deletions src/projects/06-password-generator/components/StrengthChecker.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
import { useEffect, useState } from 'react';

const StrengthChecker = ({ length, checkboxData }) => {
const [strength, setStrength] = useState('');

useEffect(() => {
const charTypeCount = checkboxData.reduce((acc, curr) => {
if (curr.state) {
acc++;
}
return acc;
}, 0);

if (length < 5 && charTypeCount === 1) {
setStrength('very weak');
} else if (length < 7 && charTypeCount <= 2) {
setStrength('weak');
} else if (length < 9 && charTypeCount <= 2) {
setStrength('good');
} else if (length <= 9 && charTypeCount <= 3) {
setStrength('very good');
} else if (length <= 15 && charTypeCount <= 1) {
setStrength('good');
} else if (length <= 15 && charTypeCount <= 3) {
setStrength('Excellent');
} else if (length <= 20 && charTypeCount <= 4) {
setStrength('super strong');
} else {
setStrength('');
}
}, [length, checkboxData]);
return (
<div className="strength">
<span>strength:</span>
<span>{strength}</span>
</div>
);
};
export default StrengthChecker;

0 comments on commit 6aeae25

Please sign in to comment.