diff --git a/components/BTextField.tsx b/components/BTextField.tsx index 82536da..35af0a4 100644 --- a/components/BTextField.tsx +++ b/components/BTextField.tsx @@ -36,6 +36,9 @@ type Props = { id?: string; list?: string; datalist?: { value: TextType[T]; label?: string }[]; + onPaste?: ( + clipboard: string, + ) => { text: string; overwrite?: boolean } | undefined; }; export default class BTextField @@ -186,6 +189,26 @@ export default class BTextField 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} diff --git a/components/NewTask.tsx b/components/NewTask.tsx index bf24d78..3519c3c 100644 --- a/components/NewTask.tsx +++ b/components/NewTask.tsx @@ -59,6 +59,13 @@ export default class NewTask extends Component { const [abort, set_abort] = useState(); 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 { description={t("task.gallery_id")} outlined={true} set_value={set_dgid} + onPaste={onPasteGid} /> { outlined={true} set_value={set_ezgid} datalist={datalist} + onPaste={onPasteGid} /> {ginfo_div}