2022-02-13 23:39:27 +08:00
|
|
|
// Copyright 2021 The Casdoor Authors. All Rights Reserved.
|
2021-07-17 14:13:00 +08:00
|
|
|
//
|
|
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
// you may not use this file except in compliance with the License.
|
|
|
|
// You may obtain a copy of the License at
|
|
|
|
//
|
|
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
//
|
|
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
// See the License for the specific language governing permissions and
|
|
|
|
// limitations under the License.
|
|
|
|
|
2021-06-04 20:47:27 +08:00
|
|
|
import React from "react";
|
2022-07-10 15:45:55 +08:00
|
|
|
import {Cascader, Col, Input, Row, Select} from "antd";
|
2021-06-04 20:47:27 +08:00
|
|
|
import i18next from "i18next";
|
|
|
|
import * as UserBackend from "../backend/UserBackend";
|
2021-06-30 00:58:25 +08:00
|
|
|
import * as Setting from "../Setting";
|
2021-06-04 20:47:27 +08:00
|
|
|
|
|
|
|
class AffiliationSelect extends React.Component {
|
|
|
|
constructor(props) {
|
|
|
|
super(props);
|
|
|
|
this.state = {
|
|
|
|
classes: props,
|
|
|
|
addressOptions: [],
|
|
|
|
affiliationOptions: [],
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
2022-08-09 12:19:56 +08:00
|
|
|
UNSAFE_componentWillMount() {
|
2021-06-04 20:47:27 +08:00
|
|
|
this.getAddressOptions(this.props.application);
|
|
|
|
this.getAffiliationOptions(this.props.application, this.props.user);
|
|
|
|
}
|
|
|
|
|
|
|
|
getAddressOptions(application) {
|
|
|
|
if (application.affiliationUrl === "") {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
const addressUrl = application.affiliationUrl.split("|")[0];
|
|
|
|
UserBackend.getAddressOptions(addressUrl)
|
|
|
|
.then((addressOptions) => {
|
|
|
|
this.setState({
|
|
|
|
addressOptions: addressOptions,
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
getAffiliationOptions(application, user) {
|
|
|
|
if (application.affiliationUrl === "") {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
const affiliationUrl = application.affiliationUrl.split("|")[1];
|
|
|
|
const code = user.address[user.address.length - 1];
|
|
|
|
UserBackend.getAffiliationOptions(affiliationUrl, code)
|
|
|
|
.then((affiliationOptions) => {
|
|
|
|
this.setState({
|
|
|
|
affiliationOptions: affiliationOptions,
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
updateUserField(key, value) {
|
|
|
|
this.props.onUpdateUserField(key, value);
|
|
|
|
}
|
|
|
|
|
|
|
|
render() {
|
|
|
|
return (
|
|
|
|
<React.Fragment>
|
|
|
|
{
|
|
|
|
this.props.application?.affiliationUrl === "" ? null : (
|
2022-07-10 15:45:55 +08:00
|
|
|
<Row style={{marginTop: "20px"}} >
|
|
|
|
<Col style={{marginTop: "5px"}} span={this.props.labelSpan}>
|
2021-06-30 00:58:25 +08:00
|
|
|
{Setting.getLabel(i18next.t("user:Address"), i18next.t("user:Address - Tooltip"))} :
|
2021-06-04 20:47:27 +08:00
|
|
|
</Col>
|
2021-06-18 02:05:19 +08:00
|
|
|
<Col span={24 - this.props.labelSpan} >
|
2022-07-10 15:45:55 +08:00
|
|
|
<Cascader style={{width: "100%", maxWidth: "400px"}} value={this.props.user.address} options={this.state.addressOptions} onChange={value => {
|
|
|
|
this.updateUserField("address", value);
|
|
|
|
this.updateUserField("affiliation", "");
|
|
|
|
this.updateUserField("score", 0);
|
2021-06-04 20:47:27 +08:00
|
|
|
this.getAffiliationOptions(this.props.application, this.props.user);
|
|
|
|
}} placeholder={i18next.t("signup:Please input your address!")} />
|
|
|
|
</Col>
|
|
|
|
</Row>
|
|
|
|
)
|
|
|
|
}
|
2022-07-10 15:45:55 +08:00
|
|
|
<Row style={{marginTop: "20px"}} >
|
|
|
|
<Col style={{marginTop: "5px"}} span={this.props.labelSpan}>
|
2021-06-30 00:58:25 +08:00
|
|
|
{Setting.getLabel(i18next.t("user:Affiliation"), i18next.t("user:Affiliation - Tooltip"))} :
|
2021-06-04 20:47:27 +08:00
|
|
|
</Col>
|
2021-07-25 23:13:34 +08:00
|
|
|
<Col span={22} >
|
2021-06-04 20:47:27 +08:00
|
|
|
{
|
|
|
|
this.props.application?.affiliationUrl === "" ? (
|
|
|
|
<Input value={this.props.user.affiliation} onChange={e => {
|
2022-07-10 15:45:55 +08:00
|
|
|
this.updateUserField("affiliation", e.target.value);
|
2021-06-04 20:47:27 +08:00
|
|
|
}} />
|
|
|
|
) : (
|
2023-01-12 23:11:11 +08:00
|
|
|
<Select virtual={false} style={{width: "100%"}} value={this.props.user.affiliation}
|
|
|
|
onChange={(value => {
|
|
|
|
const name = value;
|
|
|
|
const affiliationOption = Setting.getArrayItem(this.state.affiliationOptions, "name", name);
|
|
|
|
const id = affiliationOption.id;
|
|
|
|
this.updateUserField("affiliation", name);
|
|
|
|
this.updateUserField("score", id);
|
|
|
|
})}
|
|
|
|
options={[Setting.getOption("(empty)", "")].concat(this.state.affiliationOptions.map((affiliationOption) => Setting.getOption(affiliationOption.name, affiliationOption.name))
|
|
|
|
)} />
|
2021-06-04 20:47:27 +08:00
|
|
|
)
|
|
|
|
}
|
|
|
|
</Col>
|
|
|
|
</Row>
|
|
|
|
</React.Fragment>
|
2022-07-10 15:45:55 +08:00
|
|
|
);
|
2021-06-04 20:47:27 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
export default AffiliationSelect;
|