ui: fix problem_main shift key (fix #1019)

This commit is contained in:
undefined committed 2025-07-25 00:08:35 +08:00
1 parent e95c4ffa61
commit 60113c47f7
1 file changed
+22 -17
+22 -17
View File
@@ -282,6 +282,14 @@ function processElement(ele) {
createHint('Hint::icon::difficulty', $(ele).find('th.col--difficulty')); createHint('Hint::icon::difficulty', $(ele).find('th.col--difficulty'));
} }
function getAllPids() {
return $('[data-checkbox-group="problem"]').map((_index, i) => $(i).closest('tr').attr('data-pid')).get();
}
function getSelectedPids() {
return $('[data-checkbox-group="problem"]:checked').map((_index, i) => $(i).closest('tr').attr('data-pid')).get();
}
function ProblemSelectionDisplay(props) { // eslint-disable-line function ProblemSelectionDisplay(props) { // eslint-disable-line
const [pids, setPids] = React.useState<string[]>([]); const [pids, setPids] = React.useState<string[]>([]);
const [dialogOpen, setDialogOpen] = React.useState(false); const [dialogOpen, setDialogOpen] = React.useState(false);
@@ -296,24 +304,21 @@ function ProblemSelectionDisplay(props) { // eslint-disable-line
}, [props.onClear]); }, [props.onClear]);
React.useEffect(() => { React.useEffect(() => {
$(document).on('click', '[data-checkbox-group="problem"]:checked', (ev) => { const cb = () => queueMicrotask(() => {
const $checkbox = $(ev.currentTarget); const all = getAllPids();
const pid = $checkbox.closest('tr').attr('data-pid'); const selected = getSelectedPids();
setPids((o) => Array.from(new Set([...o, pid]))); setPids((o) => {
}); const ret = o.filter((i) => !all.includes(i) || selected.includes(i));
$(document).on('click', '[data-checkbox-group="problem"]:not(:checked)', (ev) => { for (const val of selected) if (!ret.includes(val)) ret.push(val);
const $checkbox = $(ev.currentTarget); return ret;
const pid = $checkbox.closest('tr').attr('data-pid'); });
setPids((o) => o.filter((i) => i !== pid));
});
$(document).on('click', '[data-checkbox-toggle="problem"]:checked', () => {
const all = $('[data-checkbox-group="problem"]').map((_index, i) => $(i).closest('tr').attr('data-pid')).get();
setPids((o) => Array.from(new Set([...o, ...all])));
});
$(document).on('click', '[data-checkbox-toggle="problem"]:not(:checked)', () => {
const all = $('[data-checkbox-group="problem"]').map((_index, i) => $(i).closest('tr').attr('data-pid')).get();
setPids((o) => o.filter((i) => !all.includes(i)));
}); });
$(document).on('click', '[data-checkbox-group="problem"]', cb);
$(document).on('click', '[data-checkbox-toggle="problem"]', cb);
return () => {
$(document).off('click', '[data-checkbox-group="problem"]', cb);
$(document).off('click', '[data-checkbox-toggle="problem"]', cb);
};
}, []); }, []);
React.useEffect(() => { React.useEffect(() => {
(window as any).__getPids = () => pids; (window as any).__getPids = () => pids;