Add custom paste handle

This commit is contained in:
2023-07-22 18:11:19 +08:00
parent a8c129bec5
commit 7ee7c8286a
2 changed files with 32 additions and 0 deletions

View File

@@ -36,6 +36,9 @@ type Props<T extends keyof TextType> = {
id?: string;
list?: string;
datalist?: { value: TextType[T]; label?: string }[];
onPaste?: (
clipboard: string,
) => { text: string; overwrite?: boolean } | undefined;
};
export default class BTextField<T extends keyof TextType>
@@ -186,6 +189,26 @@ export default class BTextField<T extends keyof TextType>
list={this.props.list}
onFocus={() => set_display_datalist(true)}
onBlur={() => set_display_datalist(false)}
onPaste={this.props.onPaste
? ((e: ClipboardEvent) => {
if (!this.props.onPaste) return;
console.log(e);
const clipboard =
e.clipboardData?.getData("text") || "";
const v = this.props.onPaste(clipboard);
if (!v) return;
e.preventDefault();
if (e.target) {
const i = e.target as HTMLInputElement;
if (v.overwrite) {
i.value = v.text;
} else {
i.setRangeText(v.text);
}
this.set_value(this.get_value(i));
}
})
: undefined}
/>
{datalist_div}
{this.props.children}

View File

@@ -59,6 +59,13 @@ export default class NewTask extends Component<NewTaskProps, State> {
const [abort, set_abort] = useState<AbortController>();
const [ezcfg, set_ezcfg1] = useState(generate_export_zip_cfg());
const [overwrite_ezcfg, set_overwrite_ezcfg] = useState(false);
const onPasteGid = (clipboard: string) => {
const p = parseUrl(clipboard);
if (p && p.type !== UrlType.Single) {
return { text: p.gid.toString(), overwrite: true };
}
return;
};
const fetchGidsData = async () => {
const re = await fetch(
"/api/gallery/list?all=1&fields=gid,title,title_jpn",
@@ -171,6 +178,7 @@ export default class NewTask extends Component<NewTaskProps, State> {
description={t("task.gallery_id")}
outlined={true}
set_value={set_dgid}
onPaste={onPasteGid}
/>
<BTextField
value={token}
@@ -325,6 +333,7 @@ export default class NewTask extends Component<NewTaskProps, State> {
outlined={true}
set_value={set_ezgid}
datalist={datalist}
onPaste={onPasteGid}
/>
{ginfo_div}
<BCheckbox