284 lines
12 KiB
JavaScript
284 lines
12 KiB
JavaScript
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
/*
|
|
* Copyright 2018 Red Hat, Inc. and/or its affiliates.
|
|
*
|
|
* 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.
|
|
*/
|
|
import * as React from "../../../keycloak.v2/web_modules/react.js";
|
|
import { ActionGroup, Button, Form, FormGroup, TextInput, InputGroup, Grid, GridItem, ExpandableSection, ValidatedOptions, PageSection, PageSectionVariants, Text, TextVariants, TextContent } from "../../../keycloak.v2/web_modules/@patternfly/react-core.js";
|
|
import { AccountServiceContext } from "../../account-service/AccountServiceContext.js";
|
|
import { Msg } from "../../widgets/Msg.js";
|
|
import { ContentPage } from "../ContentPage.js";
|
|
import { ContentAlert } from "../ContentAlert.js";
|
|
import { LocaleSelector } from "../../widgets/LocaleSelectors.js";
|
|
import { KeycloakContext } from "../../keycloak-service/KeycloakContext.js";
|
|
import { AIACommand } from "../../util/AIACommand.js";
|
|
import { ExternalLinkSquareAltIcon } from "../../../keycloak.v2/web_modules/@patternfly/react-icons.js";
|
|
/**
|
|
* @author Stan Silvert ssilvert@redhat.com (C) 2018 Red Hat Inc.
|
|
*/
|
|
export class AccountPage extends React.Component {
|
|
constructor(props, context) {
|
|
super(props);
|
|
_defineProperty(this, "context", void 0);
|
|
_defineProperty(this, "isRegistrationEmailAsUsername", features.isRegistrationEmailAsUsername);
|
|
_defineProperty(this, "isEditUserNameAllowed", features.isEditUserNameAllowed);
|
|
_defineProperty(this, "isDeleteAccountAllowed", features.deleteAccountAllowed);
|
|
_defineProperty(this, "isUpdateEmailFeatureEnabled", features.updateEmailFeatureEnabled);
|
|
_defineProperty(this, "isUpdateEmailActionEnabled", features.updateEmailActionEnabled);
|
|
_defineProperty(this, "DEFAULT_STATE", {
|
|
errors: {
|
|
username: '',
|
|
firstName: '',
|
|
lastName: '',
|
|
email: ''
|
|
},
|
|
formFields: {
|
|
username: '',
|
|
firstName: '',
|
|
lastName: '',
|
|
email: '',
|
|
attributes: {}
|
|
}
|
|
});
|
|
_defineProperty(this, "state", this.DEFAULT_STATE);
|
|
_defineProperty(this, "handleCancel", () => {
|
|
this.fetchPersonalInfo();
|
|
});
|
|
_defineProperty(this, "handleChange", (value, event) => {
|
|
const target = event.currentTarget;
|
|
const name = target.name;
|
|
this.setState({
|
|
errors: {
|
|
...this.state.errors,
|
|
[name]: target.validationMessage
|
|
},
|
|
formFields: {
|
|
...this.state.formFields,
|
|
[name]: value
|
|
}
|
|
});
|
|
});
|
|
_defineProperty(this, "handleSubmit", event => {
|
|
event.preventDefault();
|
|
const form = event.target;
|
|
const isValid = form.checkValidity();
|
|
if (isValid) {
|
|
const reqData = {
|
|
...this.state.formFields
|
|
};
|
|
this.context.doPost("/", reqData).then(() => {
|
|
ContentAlert.success('accountUpdatedMessage');
|
|
if (locale !== this.state.formFields.attributes.locale[0]) {
|
|
window.location.reload();
|
|
}
|
|
});
|
|
} else {
|
|
const formData = new FormData(form);
|
|
const validationMessages = Array.from(formData.keys()).reduce((acc, key) => {
|
|
acc[key] = form.elements[key].validationMessage;
|
|
return acc;
|
|
}, {});
|
|
this.setState({
|
|
errors: {
|
|
...validationMessages
|
|
},
|
|
formFields: this.state.formFields
|
|
});
|
|
}
|
|
});
|
|
_defineProperty(this, "handleDelete", keycloak => {
|
|
new AIACommand(keycloak, "delete_account").execute();
|
|
});
|
|
_defineProperty(this, "handleEmailUpdate", keycloak => {
|
|
new AIACommand(keycloak, "UPDATE_EMAIL").execute();
|
|
});
|
|
_defineProperty(this, "UsernameInput", () => /*#__PURE__*/React.createElement(TextInput, {
|
|
isRequired: true,
|
|
type: "text",
|
|
id: "user-name",
|
|
name: "username",
|
|
maxLength: 254,
|
|
value: this.state.formFields.username,
|
|
onChange: this.handleChange,
|
|
validated: this.state.errors.username !== '' ? ValidatedOptions.error : ValidatedOptions.default
|
|
}));
|
|
_defineProperty(this, "RestrictedUsernameInput", () => /*#__PURE__*/React.createElement(TextInput, {
|
|
isReadOnly: true,
|
|
type: "text",
|
|
id: "user-name",
|
|
name: "username",
|
|
value: this.state.formFields.username
|
|
}));
|
|
this.context = context;
|
|
this.fetchPersonalInfo();
|
|
}
|
|
fetchPersonalInfo() {
|
|
this.context.doGet("/").then(response => {
|
|
this.setState(this.DEFAULT_STATE);
|
|
const formFields = response.data;
|
|
if (!formFields.attributes) {
|
|
formFields.attributes = {
|
|
locale: [locale]
|
|
};
|
|
} else if (!formFields.attributes.locale) {
|
|
formFields.attributes.locale = [locale];
|
|
}
|
|
this.setState({
|
|
...{
|
|
formFields: formFields
|
|
}
|
|
});
|
|
});
|
|
}
|
|
render() {
|
|
const fields = this.state.formFields;
|
|
return /*#__PURE__*/React.createElement(ContentPage, {
|
|
title: "personalInfoHtmlTitle",
|
|
introMessage: "personalSubMessage"
|
|
}, /*#__PURE__*/React.createElement(PageSection, {
|
|
isFilled: true,
|
|
variant: PageSectionVariants.light
|
|
}, /*#__PURE__*/React.createElement(TextContent, {
|
|
className: "pf-u-mb-lg"
|
|
}, /*#__PURE__*/React.createElement(Text, {
|
|
component: TextVariants.small
|
|
}, Msg.localize('allFieldsRequired'))), /*#__PURE__*/React.createElement(Form, {
|
|
onSubmit: event => this.handleSubmit(event),
|
|
className: "personal-info-form"
|
|
}, !this.isRegistrationEmailAsUsername && fields.username != undefined && /*#__PURE__*/React.createElement(FormGroup, {
|
|
label: Msg.localize("username"),
|
|
fieldId: "user-name",
|
|
helperTextInvalid: this.state.errors.username,
|
|
validated: this.state.errors.username !== "" ? ValidatedOptions.error : ValidatedOptions.default
|
|
}, this.isEditUserNameAllowed && /*#__PURE__*/React.createElement(this.UsernameInput, null), !this.isEditUserNameAllowed && /*#__PURE__*/React.createElement(this.RestrictedUsernameInput, null)), !this.isUpdateEmailFeatureEnabled && /*#__PURE__*/React.createElement(FormGroup, {
|
|
label: Msg.localize('email'),
|
|
fieldId: "email-address",
|
|
helperTextInvalid: this.state.errors.email,
|
|
validated: this.state.errors.email !== "" ? ValidatedOptions.error : ValidatedOptions.default
|
|
}, /*#__PURE__*/React.createElement(TextInput, {
|
|
isRequired: true,
|
|
type: "email",
|
|
id: "email-address",
|
|
name: "email",
|
|
maxLength: 254,
|
|
value: fields.email,
|
|
onChange: this.handleChange,
|
|
validated: this.state.errors.email !== "" ? ValidatedOptions.error : ValidatedOptions.default
|
|
})), this.isUpdateEmailFeatureEnabled && /*#__PURE__*/React.createElement(FormGroup, {
|
|
label: Msg.localize('email'),
|
|
fieldId: "email-address"
|
|
}, /*#__PURE__*/React.createElement(InputGroup, null, /*#__PURE__*/React.createElement(TextInput, {
|
|
isDisabled: true,
|
|
type: "email",
|
|
id: "email-address",
|
|
name: "email",
|
|
value: fields.email
|
|
}), this.isUpdateEmailActionEnabled && (!this.isRegistrationEmailAsUsername || this.isEditUserNameAllowed) && /*#__PURE__*/React.createElement(KeycloakContext.Consumer, null, keycloak => /*#__PURE__*/React.createElement(Button, {
|
|
id: "update-email-btn",
|
|
variant: "link",
|
|
onClick: () => this.handleEmailUpdate(keycloak),
|
|
icon: /*#__PURE__*/React.createElement(ExternalLinkSquareAltIcon, null),
|
|
iconPosition: "right"
|
|
}, /*#__PURE__*/React.createElement(Msg, {
|
|
msgKey: "updateEmail"
|
|
}))))), /*#__PURE__*/React.createElement(FormGroup, {
|
|
label: Msg.localize("firstName"),
|
|
fieldId: "first-name",
|
|
helperTextInvalid: this.state.errors.firstName,
|
|
validated: this.state.errors.firstName !== "" ? ValidatedOptions.error : ValidatedOptions.default
|
|
}, /*#__PURE__*/React.createElement(TextInput, {
|
|
isRequired: true,
|
|
type: "text",
|
|
id: "first-name",
|
|
name: "firstName",
|
|
maxLength: 254,
|
|
value: fields.firstName,
|
|
onChange: this.handleChange,
|
|
validated: this.state.errors.firstName !== "" ? ValidatedOptions.error : ValidatedOptions.default
|
|
})), /*#__PURE__*/React.createElement(FormGroup, {
|
|
label: Msg.localize("lastName"),
|
|
fieldId: "last-name",
|
|
helperTextInvalid: this.state.errors.lastName,
|
|
validated: this.state.errors.lastName !== "" ? ValidatedOptions.error : ValidatedOptions.default
|
|
}, /*#__PURE__*/React.createElement(TextInput, {
|
|
isRequired: true,
|
|
type: "text",
|
|
id: "last-name",
|
|
name: "lastName",
|
|
maxLength: 254,
|
|
value: fields.lastName,
|
|
onChange: this.handleChange,
|
|
validated: this.state.errors.lastName !== "" ? ValidatedOptions.error : ValidatedOptions.default
|
|
})), features.isInternationalizationEnabled && /*#__PURE__*/React.createElement(FormGroup, {
|
|
label: Msg.localize("selectLocale"),
|
|
isRequired: true,
|
|
fieldId: "locale"
|
|
}, /*#__PURE__*/React.createElement(LocaleSelector, {
|
|
id: "locale-selector",
|
|
value: fields.attributes.locale || "",
|
|
onChange: value => this.setState({
|
|
errors: this.state.errors,
|
|
formFields: {
|
|
...this.state.formFields,
|
|
attributes: {
|
|
...this.state.formFields.attributes,
|
|
locale: [value]
|
|
}
|
|
}
|
|
})
|
|
})), /*#__PURE__*/React.createElement(ActionGroup, null, /*#__PURE__*/React.createElement(Button, {
|
|
type: "submit",
|
|
id: "save-btn",
|
|
variant: "primary",
|
|
isDisabled: Object.values(this.state.errors).filter(e => e !== "").length !== 0
|
|
}, /*#__PURE__*/React.createElement(Msg, {
|
|
msgKey: "doSave"
|
|
})), /*#__PURE__*/React.createElement(Button, {
|
|
id: "cancel-btn",
|
|
variant: "link",
|
|
onClick: this.handleCancel
|
|
}, /*#__PURE__*/React.createElement(Msg, {
|
|
msgKey: "doCancel"
|
|
})))), this.isDeleteAccountAllowed && /*#__PURE__*/React.createElement("div", {
|
|
id: "delete-account",
|
|
style: {
|
|
marginTop: "30px"
|
|
}
|
|
}, /*#__PURE__*/React.createElement(ExpandableSection, {
|
|
toggleText: Msg.localize("deleteAccount")
|
|
}, /*#__PURE__*/React.createElement(Grid, {
|
|
hasGutter: true
|
|
}, /*#__PURE__*/React.createElement(GridItem, {
|
|
span: 6
|
|
}, /*#__PURE__*/React.createElement("p", null, /*#__PURE__*/React.createElement(Msg, {
|
|
msgKey: "deleteAccountWarning"
|
|
}))), /*#__PURE__*/React.createElement(GridItem, {
|
|
span: 4
|
|
}, /*#__PURE__*/React.createElement(KeycloakContext.Consumer, null, keycloak => /*#__PURE__*/React.createElement(Button, {
|
|
id: "delete-account-btn",
|
|
variant: "danger",
|
|
onClick: () => this.handleDelete(keycloak),
|
|
className: "delete-button"
|
|
}, /*#__PURE__*/React.createElement(Msg, {
|
|
msgKey: "doDelete"
|
|
})))), /*#__PURE__*/React.createElement(GridItem, {
|
|
span: 2
|
|
}))))));
|
|
}
|
|
}
|
|
_defineProperty(AccountPage, "contextType", AccountServiceContext);
|
|
;
|
|
//# sourceMappingURL=AccountPage.js.map
|