imspidey's picture
Upload folder using huggingface_hub
03d9a71
import { memo, useCallback, useState } from 'react';
import { useTranslation } from 'react-i18next';
import TagList, { PromptType, TagItem } from './TagList';
import { useStyles } from './style';
import { formatPrompt } from './utils';
interface PromptProps {
type: PromptType;
}
const Prompt = memo<PromptProps>(({ type }) => {
const [tags, setTags] = useState<TagItem[]>([]);
const { styles } = useStyles();
const { t } = useTranslation();
const id =
type === 'positive' ? "[id$='2img_prompt'] textarea" : "[id$='2img_neg_prompt'] textarea";
const getValue = useCallback(() => {
try {
const textarea = get_uiCurrentTabContent().querySelector(id) as HTMLTextAreaElement;
if (textarea) setTags(formatPrompt(textarea.value));
} catch (error) {
console.debug(error);
}
}, []);
const setValue = useCallback(() => {
try {
const newValue = tags.map((t) => t.text).join(', ');
const textarea = get_uiCurrentTabContent().querySelector(id) as HTMLTextAreaElement;
if (textarea) textarea.value = newValue;
updateInput(textarea);
} catch (error) {
console.debug(error);
}
}, [tags, type]);
const setCurrentValue = useCallback((currentTags: TagItem[]) => {
try {
const textarea = get_uiCurrentTabContent().querySelector(id) as HTMLTextAreaElement;
if (textarea) textarea.value = currentTags.map((t) => t.text).join(', ');
updateInput(textarea);
} catch (error) {
console.debug(error);
}
}, []);
return (
<div className={styles.promptView}>
<TagList setTags={setTags} setValue={setCurrentValue} tags={tags} type={type} />
<div className={styles.buttonGroup}>
<button
className="lg secondary gradio-button tool svelte-1ipelgc"
onClick={getValue}
title={t('loadPrompt')}
type="button"
>
🔄
</button>
<button
className="lg secondary gradio-button tool svelte-1ipelgc"
onClick={setValue}
title={t('setPrompt')}
type="button"
>
➡️
</button>
</div>
</div>
);
});
export default Prompt;