ui: add ProblemSelectAutoComplete for contest_edit

This commit is contained in:
undefined committed 2021-04-12 13:22:13 +08:00
1 parent 5bd851028c
commit b88b6ca046
7 files changed
+39 -41

No files matched your search

+1 -3
View File
@@ -591,9 +591,7 @@ export class ProblemCreateHandler extends Handler {
export class ProblemPrefixListHandler extends Handler { export class ProblemPrefixListHandler extends Handler {
@param('prefix', Types.Name) @param('prefix', Types.Name)
async get(domainId: string, prefix: string) { async get(domainId: string, prefix: string) {
this.response.body = { this.response.body = await problem.getPrefixList(domainId, prefix);
pdocs: await problem.getPrefixList(domainId, prefix),
};
} }
} }
+7 -8
View File
@@ -50,19 +50,18 @@ module.exports = {
rules: { rules: {
// FIXME A bug with eslint-parser // FIXME A bug with eslint-parser
'template-curly-spacing': 'off', 'template-curly-spacing': 'off',
indent: 'off',
'comma-dangle': [ 'comma-dangle': [
'error', 'error',
'always-multiline', 'always-multiline',
], ],
// indent: [ indent: [
// 'error', 'error',
// 2, 2,
// { {
// SwitchCase: 0, SwitchCase: 0,
// }, },
// ], ],
'max-len': ['error', 150], 'max-len': ['error', 150],
quotes: 'warn', quotes: 'warn',
'class-methods-use-this': 'off', 'class-methods-use-this': 'off',
@@ -2,21 +2,21 @@ import _ from 'lodash';
import tpl from 'vj/utils/tpl'; import tpl from 'vj/utils/tpl';
import request from 'vj/utils/request'; import request from 'vj/utils/request';
import DOMAttachedObject from 'vj/components/DOMAttachedObject'; import DOMAttachedObject from 'vj/components/DOMAttachedObject';
import AutoComplete from '.'; import AutoComplete from './index';
function getText(pdoc) { function getText(pdoc) {
return pdoc.docId; return pdoc.docId;
} }
function getItems(val) { function getItems(prefix) {
return request.get('/problem/list', { q: val }); return request.get('/problem/list', { prefix });
} }
function renderItem(pdoc) { function renderItem(pdoc) {
return tpl` return tpl`
<div class="media"> <div class="media">
<div class="media__body medium"> <div class="media__body medium">
<div class="problem-select__name">${pdoc.pid ? `${pdoc.pid}` : ''}${pdoc.title}</div> <div class="problem-select__name">${pdoc.pid ? `${pdoc.pid} ` : ''}${pdoc.title}</div>
<div class="problem-select__id">ID = ${pdoc.docId}</div> <div class="problem-select__id">ID = ${pdoc.docId}</div>
</div> </div>
</div> </div>
@@ -24,18 +24,18 @@ function renderItem(pdoc) {
} }
export default class ProblemSelectAutoComplete extends AutoComplete { export default class ProblemSelectAutoComplete extends AutoComplete {
static DOMAttachKey = 'vjProblemSelectAutoCompleteInstance'; static DOMAttachKey = 'vjProblemSelectAutoCompleteInstance';
constructor($dom, options) { constructor($dom, options) {
super($dom, { super($dom, {
classes: 'problem-select', classes: 'problem-select',
items: getItems, items: getItems,
render: renderItem, render: renderItem,
text: getText, text: getText,
...options, ...options,
}); });
} }
} }
_.assign(ProblemSelectAutoComplete, DOMAttachedObject); _.assign(ProblemSelectAutoComplete, DOMAttachedObject);
window.Hydro.components.UserSelectAutoComplete = ProblemSelectAutoComplete; window.Hydro.components.ProblemSelectAutoComplete = ProblemSelectAutoComplete;
@@ -1,12 +0,0 @@
import { AutoloadPage } from 'vj/misc/Page';
import UserSelectAutoComplete from './UserSelectAutoComplete';
import DomainSelectAutoComplete from './DomainSelectAutoComplete';
import ProblemSelectAutoComplete from './ProblemSelectAutoComplete';
const page = new AutoloadPage('autocomplete', () => {
UserSelectAutoComplete.getOrConstruct($('[autocomplete="user"]'));
DomainSelectAutoComplete.getOrConstruct($('[autocomplete="domain"]'));
ProblemSelectAutoComplete.getOrConstruct($('[autocomplete="problem"]'));
});
export default page;
@@ -0,0 +1,9 @@
import { NamedPage } from 'vj/misc/Page';
import ProblemSelectAutoComplete from 'vj/components/autocomplete/ProblemSelectAutoComplete';
const page = new NamedPage(['contest_edit', 'contest_create'], () => {
console.log($('[name="pids"]'));
ProblemSelectAutoComplete.getOrConstruct($('[name="pids"]'));
});
export default page;
@@ -47,6 +47,7 @@
{% set disabled = args.disabled or false %} {% set disabled = args.disabled or false %}
{% set required = args.required or false %} {% set required = args.required or false %}
{% set autofocus = args.autofocus or false %} {% set autofocus = args.autofocus or false %}
{% set noAutocomplete = args.noAutocomplete or false %}
{% set extra_style = args.extra_style or false %} {% set extra_style = args.extra_style or false %}
{% set date = args.date or false %} {% set date = args.date or false %}
{% set time = args.time or false %} {% set time = args.time or false %}
@@ -54,6 +55,7 @@
{% if disabled %}disabled{% endif %} {% if disabled %}disabled{% endif %}
{% if required %}required{% endif %} {% if required %}required{% endif %}
{% if autofocus %}autofocus data-autofocus{% endif %} {% if autofocus %}autofocus data-autofocus{% endif %}
{% if noAutocomplete %}autocomplete="off"{% endif %}
{% if date %}data-pick-date{% endif %} {% if date %}data-pick-date{% endif %}
{% if time %}data-pick-time{% endif %} {% if time %}data-pick-time{% endif %}
{% if extra_style %}style="{{extra_style}}"{% endif %} {% if extra_style %}style="{{extra_style}}"{% endif %}
@@ -62,7 +62,9 @@
columns:null, columns:null,
label:'Problems', label:'Problems',
name:'pids', name:'pids',
value:pids value:pids,
noAutocomplete:true,
placeholder:_("Seperated with ','")
}) }} }) }}
{{ form.form_textarea({ {{ form.form_textarea({
columns:null, columns:null,