From cc1faba70973cc5e0351ae2663ca11974356e414 Mon Sep 17 00:00:00 2001 From: undefined Date: Wed, 7 Apr 2021 18:51:32 +0800 Subject: [PATCH] ui: display a loader when loading react --- .../components/subjective-question/index.jsx | 40 +++++++++++++++++-- packages/ui-default/package.json | 2 +- .../ui-default/pages/problem_detail.page.jsx | 2 +- .../ui-default/templates/problem_detail.html | 2 +- 4 files changed, 39 insertions(+), 7 deletions(-) diff --git a/packages/ui-default/components/subjective-question/index.jsx b/packages/ui-default/components/subjective-question/index.jsx index 023ef2f12..314f94376 100644 --- a/packages/ui-default/components/subjective-question/index.jsx +++ b/packages/ui-default/components/subjective-question/index.jsx @@ -1,12 +1,44 @@ import React from 'react'; +import { sortBy } from 'lodash'; +import request from 'vj/utils/request'; export default class MessagePadContainer extends React.PureComponent { + constructor(args) { + super(args); + this.state = {}; + this.onChange = this.onChange.bind(this); + this.onSubmit = this.onSubmit.bind(this); + } + + onChange(ev) { + this.setState({ [ev.target.name]: ev.target.value }); + } + + onSubmit(ev) { + ev.preventDefault(); + const entries = sortBy(Object.entries(this.state).map((i) => [+i[0], i[1]])); + const total = entries[entries.length - 1][0]; + const ans = new Array(total).fill(''); + entries.forEach((i) => ans[i[0]] = i[1]); // eslint-disable-line + request + .post(this.props.target, { + lang: '_', + code: ans.join('\n'), + }) + .then((res) => { + window.location.href = res.url; + }) + .catch((e) => { + Notification.error(e.message); + }); + } + Textbox(args, name) { return ( ); @@ -17,8 +49,8 @@ export default class MessagePadContainer extends React.PureComponent { <> {args.desc} {args.choices.map((i) => ( -