Spaces:
Build error
Build error
import React from 'react'; | |
import styles from './ServiceInput.module.css'; | |
import CredentialInput from './CredentialInput'; | |
interface Field { | |
label: string; | |
link?: string; | |
value: string; | |
setValue: (value: string) => void; | |
} | |
interface ServiceInputProps { | |
serviceName: string; | |
enabled: boolean; | |
setEnabled: (enabled: boolean) => void; | |
fields: Field[]; | |
moveService: (direction: 'up' | 'down') => void; | |
canMoveUp: boolean; | |
canMoveDown: boolean; | |
signUpLink?: string; | |
} | |
const ServiceInput: React.FC<ServiceInputProps> = ({ | |
serviceName, | |
enabled, | |
setEnabled, | |
fields, | |
moveService, | |
canMoveUp, | |
canMoveDown, | |
signUpLink, | |
}) => { | |
return ( | |
<div | |
className={`${styles.card} ${enabled ? styles.enabled : styles.disabled}`} | |
> | |
<div className={styles.header}> | |
<span className={styles.serviceName}> | |
{serviceName} | |
{enabled && signUpLink && ( | |
<span className={styles.smallText}> | |
{` (Don't have an account? Sign up with `} | |
<a | |
href={signUpLink} | |
target="_blank" | |
rel="noopener noreferrer" | |
className={styles.link} | |
> | |
this link) | |
</a> | |
</span> | |
)} | |
</span> | |
<div className={styles.actions}> | |
{canMoveUp && ( | |
<button | |
className={styles.actionButton} | |
onClick={() => moveService('up')} | |
> | |
<svg | |
fill="#ffffff" | |
version="1.1" | |
id="Capa_1" | |
xmlns="http://www.w3.org/2000/svg" | |
xmlnsXlink="http://www.w3.org/1999/xlink" | |
width="24px" | |
height="24px" | |
viewBox="0 0 96.154 96.154" | |
xmlSpace="preserve" | |
stroke="#ffffff" | |
transform="matrix(1, 0, 0, -1, 0, 0)" | |
> | |
<g id="SVGRepo_bgCarrier" strokeWidth="0"></g> | |
<g | |
id="SVGRepo_tracerCarrier" | |
strokeLinecap="round" | |
strokeLinejoin="round" | |
></g> | |
<g id="SVGRepo_iconCarrier"> | |
{' '} | |
<g> | |
{' '} | |
<path d="M0.561,20.971l45.951,57.605c0.76,0.951,2.367,0.951,3.127,0l45.956-57.609c0.547-0.689,0.709-1.716,0.414-2.61 c-0.061-0.187-0.129-0.33-0.186-0.437c-0.351-0.65-1.025-1.056-1.765-1.056H2.093c-0.736,0-1.414,0.405-1.762,1.056 c-0.059,0.109-0.127,0.253-0.184,0.426C-0.15,19.251,0.011,20.28,0.561,20.971z"></path>{' '} | |
</g>{' '} | |
</g> | |
</svg> | |
</button> | |
)} | |
{canMoveDown && ( | |
<button | |
className={styles.actionButton} | |
onClick={() => moveService('down')} | |
> | |
<svg | |
fill="#ffffff" | |
version="1.1" | |
id="Capa_1" | |
xmlns="http://www.w3.org/2000/svg" | |
width="24px" | |
height="24px" | |
viewBox="0 0 96.154 96.154" | |
stroke="#ffffff" | |
> | |
<g id="SVGRepo_bgCarrier" strokeWidth="0"></g> | |
<g | |
id="SVGRepo_tracerCarrier" | |
strokeLinecap="round" | |
strokeLinejoin="round" | |
></g> | |
<g id="SVGRepo_iconCarrier"> | |
{' '} | |
<g> | |
{' '} | |
<path d="M0.561,20.971l45.951,57.605c0.76,0.951,2.367,0.951,3.127,0l45.956-57.609c0.547-0.689,0.709-1.716,0.414-2.61 c-0.061-0.187-0.129-0.33-0.186-0.437c-0.351-0.65-1.025-1.056-1.765-1.056H2.093c-0.736,0-1.414,0.405-1.762,1.056 c-0.059,0.109-0.127,0.253-0.184,0.426C-0.15,19.251,0.011,20.28,0.561,20.971z"></path>{' '} | |
</g>{' '} | |
</g> | |
</svg> | |
</button> | |
)} | |
<input | |
type="checkbox" | |
checked={enabled} | |
onChange={(e) => setEnabled(e.target.checked)} | |
className={styles.checkbox} | |
/> | |
</div> | |
</div> | |
{enabled && ( | |
<div className={styles.fields}> | |
{fields.map((field, index) => ( | |
<div key={index} className={styles.field}> | |
<label> | |
{field.label} | |
{field.link && ( | |
<> | |
{'. Get it '} | |
<a | |
href={field.link} | |
target="_blank" | |
rel="noopener noreferrer" | |
className={styles.link} | |
> | |
here | |
</a> | |
</> | |
)} | |
</label> | |
<CredentialInput | |
credential={field.value} | |
setCredential={field.setValue} | |
/> | |
</div> | |
))} | |
</div> | |
)} | |
</div> | |
); | |
}; | |
export default ServiceInput; | |