Spaces:
Sleeping
Sleeping
File size: 1,889 Bytes
fe90915 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | import React, { useState, useContext, useRef, useEffect } from 'react';
import { HuggingfaceTokenContext } from './HuggingfaceTokenContext';
import './TokenInput.css';
const TokenInput = () => {
const { token, setToken } = useContext(HuggingfaceTokenContext);
const [isVisible, setIsVisible] = useState(false);
const [inputValue, setInputValue] = useState(token);
const inputRef = useRef(null);
// Focus input when becoming visible
useEffect(() => {
if (isVisible && inputRef.current) {
inputRef.current.focus();
}
}, [isVisible]);
const toggleVisibility = () => {
setIsVisible(!isVisible);
if (!isVisible) {
setInputValue(token);
}
};
const handleSave = () => {
setToken(inputValue);
setIsVisible(false);
};
const handleCancel = () => {
setInputValue(token);
setIsVisible(false);
};
const handleKeyDown = (e) => {
if (e.key === 'Enter') {
handleSave();
} else if (e.key === 'Escape') {
handleCancel();
}
};
return (
<div className="token-container">
{!isVisible ? (
<button className="token-button" onClick={toggleVisibility}>
{token ? 'Change HF Token' : 'Set HF Token'}
</button>
) : (
<div className="token-input-container">
<input
ref={inputRef}
type="password"
className="token-input"
value={inputValue}
onChange={(e) => setInputValue(e.target.value)}
onKeyDown={handleKeyDown}
placeholder="Enter Huggingface Space Token"
/>
<div className="token-actions">
<button className="token-save" onClick={handleSave}>Save</button>
<button className="token-cancel" onClick={handleCancel}>Cancel</button>
</div>
</div>
)}
</div>
);
};
export default TokenInput; |