keycloak/themes/zariot/keycloak-preview/account/resources/app/content/my-resources-page/ShareTheResource.js
2025-02-18 15:55:19 +03:00

174 lines
11 KiB
JavaScript

"use strict";
/*
* Copyright 2019 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.
*/
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
var React = require("react");
var react_core_1 = require("@patternfly/react-core");
var react_icons_1 = require("@patternfly/react-icons");
var account_service_1 = require("../../account-service/account.service");
var Msg_1 = require("../../widgets/Msg");
var ContentAlert_1 = require("../ContentAlert");
/**
* @author Stan Silvert ssilvert@redhat.com (C) 2019 Red Hat Inc.
*/
var ShareTheResource = /** @class */ (function (_super) {
__extends(ShareTheResource, _super);
function ShareTheResource(props) {
var _this = _super.call(this, props) || this;
_this.handleAddPermission = function () {
var rscId = _this.props.resource._id;
var newPermissions = [];
for (var _i = 0, _a = _this.state.permissionsSelected; _i < _a.length; _i++) {
var permission = _a[_i];
newPermissions.push(permission.name);
}
var permissions = [];
for (var _b = 0, _c = _this.state.usernames; _b < _c.length; _b++) {
var username = _c[_b];
permissions.push({ username: username, scopes: newPermissions });
}
_this.handleToggleDialog();
account_service_1.AccountServiceClient.Instance.doPut('/resources/' + rscId + '/permissions', { data: permissions })
.then(function () {
ContentAlert_1.ContentAlert.success(Msg_1.Msg.localize('shareSuccess'));
_this.props.onClose(_this.props.resource, _this.props.row);
});
};
_this.handleToggleDialog = function () {
if (_this.state.isOpen) {
_this.setState({ isOpen: false });
}
else {
_this.clearState();
_this.setState({ isOpen: true });
}
};
_this.handleUsernameChange = function (username) {
_this.setState({ usernameInput: username });
};
_this.handleAddUsername = function () {
if ((_this.state.usernameInput !== '') && (!_this.state.usernames.includes(_this.state.usernameInput))) {
_this.state.usernames.push(_this.state.usernameInput);
_this.setState({ usernameInput: '', usernames: _this.state.usernames });
}
};
_this.handleEnterKeyInAddField = function (event) {
if (event.key === "Enter") {
event.preventDefault();
_this.handleAddUsername();
}
};
_this.handleDeleteUsername = function (username) {
var newUsernames = _this.state.usernames.filter(function (user) { return user !== username; });
_this.setState({ usernames: newUsernames });
};
_this.handleSelectPermission = function (selectedPermission) {
var newPermissionsSelected = _this.state.permissionsSelected;
var newPermissionsUnSelected = _this.state.permissionsUnSelected;
if (newPermissionsSelected.includes(selectedPermission)) {
newPermissionsSelected = newPermissionsSelected.filter(function (permission) { return permission !== selectedPermission; });
newPermissionsUnSelected.push(selectedPermission);
}
else {
newPermissionsUnSelected = newPermissionsUnSelected.filter(function (permission) { return permission !== selectedPermission; });
newPermissionsSelected.push(selectedPermission);
}
_this.setState({ permissionsSelected: newPermissionsSelected, permissionsUnSelected: newPermissionsUnSelected });
};
_this.state = {
isOpen: false,
permissionsSelected: [],
permissionsUnSelected: _this.props.resource.scopes,
usernames: [],
usernameInput: ''
};
return _this;
}
ShareTheResource.prototype.clearState = function () {
this.setState({
permissionsSelected: [],
permissionsUnSelected: this.props.resource.scopes,
usernames: [],
usernameInput: ''
});
};
ShareTheResource.prototype.isAddDisabled = function () {
return this.state.usernameInput === '' || this.isAlreadyShared();
};
ShareTheResource.prototype.isAlreadyShared = function () {
for (var _i = 0, _a = this.props.permissions; _i < _a.length; _i++) {
var permission = _a[_i];
if (permission.username === this.state.usernameInput)
return true;
}
return false;
};
ShareTheResource.prototype.isFormInvalid = function () {
return (this.state.usernames.length === 0) || (this.state.permissionsSelected.length === 0);
};
ShareTheResource.prototype.render = function () {
var _this = this;
return (React.createElement(React.Fragment, null,
React.createElement(react_core_1.Button, { variant: "link", onClick: this.handleToggleDialog },
React.createElement(react_icons_1.ShareAltIcon, null),
" Share"),
React.createElement(react_core_1.Modal, { title: 'Share the resource - ' + this.props.resource.name, isLarge: true, width: '45%', isOpen: this.state.isOpen, onClose: this.handleToggleDialog, actions: [
React.createElement(react_core_1.Button, { key: "cancel", variant: "link", onClick: this.handleToggleDialog },
React.createElement(Msg_1.Msg, { msgKey: 'cancel' })),
React.createElement(react_core_1.Button, { key: "confirm", variant: "primary", onClick: this.handleAddPermission, isDisabled: this.isFormInvalid() },
React.createElement(Msg_1.Msg, { msgKey: 'done' }))
] },
React.createElement(react_core_1.Stack, { gutter: 'md' },
React.createElement(react_core_1.StackItem, { isFilled: true },
React.createElement(react_core_1.Form, null,
React.createElement(react_core_1.FormGroup, { label: "Add users to share your resource with", type: "string", helperTextInvalid: Msg_1.Msg.localize('resourceAlreadyShared'), fieldId: "username", isRequired: true, isValid: !this.isAlreadyShared() },
React.createElement(react_core_1.Gallery, { gutter: 'sm' },
React.createElement(react_core_1.GalleryItem, null,
React.createElement(react_core_1.TextInput, { value: this.state.usernameInput, isValid: !this.isAlreadyShared(), id: "username", "aria-describedby": "username-helper", placeholder: "username or email", onChange: this.handleUsernameChange, onKeyPress: this.handleEnterKeyInAddField })),
React.createElement(react_core_1.GalleryItem, null,
React.createElement(react_core_1.Button, { key: "add-user", variant: "primary", onClick: this.handleAddUsername, isDisabled: this.isAddDisabled() },
React.createElement(Msg_1.Msg, { msgKey: "add" })))),
React.createElement(react_core_1.ChipGroup, null,
React.createElement(react_core_1.ChipGroupToolbarItem, { key: 'users-selected', categoryName: 'Share with ' }, this.state.usernames.map(function (currentChip) { return (React.createElement(react_core_1.Chip, { key: currentChip, onClick: function () { return _this.handleDeleteUsername(currentChip); } }, currentChip)); })))),
React.createElement(react_core_1.FormGroup, { label: "", fieldId: "permissions-selected" },
this.state.permissionsSelected.length < 1 && React.createElement("strong", null, "Select permissions below:"),
React.createElement(react_core_1.ChipGroup, null,
React.createElement(react_core_1.ChipGroupToolbarItem, { key: 'permissions-selected', categoryName: 'Grant Permissions ' }, this.state.permissionsSelected.map(function (currentChip) { return (React.createElement(react_core_1.Chip, { key: currentChip.toString(), onClick: function () { return _this.handleSelectPermission(currentChip); } }, currentChip.toString())); })))),
React.createElement(react_core_1.FormGroup, { label: "", fieldId: "permissions-not-selected" },
React.createElement(react_core_1.ChipGroup, null,
React.createElement(react_core_1.ChipGroupToolbarItem, { key: 'permissions-unselected', categoryName: 'Not Selected ' }, this.state.permissionsUnSelected.map(function (currentChip) { return (React.createElement(react_core_1.Chip, { key: currentChip.toString(), onClick: function () { return _this.handleSelectPermission(currentChip); } }, currentChip.toString())); })))))),
React.createElement(react_core_1.StackItem, { isFilled: true },
React.createElement("br", null)),
React.createElement(react_core_1.StackItem, { isFilled: true }, this.props.sharedWithUsersMsg)))));
};
ShareTheResource.defaultProps = { permissions: [], row: 0 };
return ShareTheResource;
}(React.Component));
exports.ShareTheResource = ShareTheResource;
//# sourceMappingURL=ShareTheResource.js.map