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

174 lines
11 KiB
JavaScript

"use strict";
/*
* 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.
*/
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 ShareTheResource_1 = require("./ShareTheResource");
var Msg_1 = require("../../widgets/Msg");
var ResourcesTable = /** @class */ (function (_super) {
__extends(ResourcesTable, _super);
function ResourcesTable(props) {
var _this = _super.call(this, props) || this;
_this.onToggle = function (row) {
var newIsRowOpen = _this.state.isRowOpen;
newIsRowOpen[row] = !newIsRowOpen[row];
if (newIsRowOpen[row])
_this.fetchPermissions(_this.props.resources.data[row], row);
_this.setState({ isRowOpen: newIsRowOpen });
};
_this.state = {
isRowOpen: new Array(props.resources.data.length).fill(false),
permissions: new Map()
};
return _this;
}
ResourcesTable.prototype.fetchPermissions = function (resource, row) {
var _this = this;
console.log('**** fetchPermissions');
account_service_1.AccountServiceClient.Instance.doGet('resources/' + resource._id + '/permissions')
.then(function (response) {
console.log('Fetching Permissions row: ' + row);
console.log({ response: response });
var newPermissions = new Map(_this.state.permissions);
newPermissions.set(row, response.data);
_this.setState({ permissions: newPermissions });
});
};
ResourcesTable.prototype.hasPermissions = function (row) {
return (this.state.permissions.has(row)) && (this.state.permissions.get(row).length > 0);
};
ResourcesTable.prototype.firstUser = function (row) {
if (!this.hasPermissions(row))
return 'ERROR!!!!'; // should never happen
return this.state.permissions.get(row)[0].username;
};
ResourcesTable.prototype.numOthers = function (row) {
if (!this.hasPermissions(row))
return -1; // should never happen
return this.state.permissions.get(row).length - 1;
};
ResourcesTable.prototype.sharedWithUsersMessage = function (row) {
if (!this.hasPermissions(row))
return (React.createElement(React.Fragment, null,
React.createElement(Msg_1.Msg, { msgKey: 'resourceNotShared' })));
// TODO: Not using a parameterized message because I want to use <strong> tag. Need to figure out a good solution to this.
if (this.numOthers(row) > 0) {
return (React.createElement(React.Fragment, null,
React.createElement(Msg_1.Msg, { msgKey: 'resourceSharedWith' }),
" ",
React.createElement("strong", null, this.firstUser(row)),
" ",
React.createElement(Msg_1.Msg, { msgKey: 'and' }),
" ",
React.createElement("strong", null, this.numOthers(row)),
" ",
React.createElement(Msg_1.Msg, { msgKey: 'otherUsers' }),
"."));
}
else {
return (React.createElement(React.Fragment, null,
React.createElement(Msg_1.Msg, { msgKey: 'resourceSharedWith' }),
" ",
React.createElement("strong", null, this.firstUser(row)),
"."));
}
};
ResourcesTable.prototype.render = function () {
var _this = this;
return (React.createElement(react_core_1.DataList, { "aria-label": Msg_1.Msg.localize('resources') },
React.createElement(react_core_1.DataListItem, { key: 'resource-header', "aria-labelledby": 'resource-header' },
React.createElement(react_core_1.DataListItemRow, null,
"// invisible toggle allows headings to line up properly",
React.createElement("span", { style: { visibility: 'hidden' } },
React.createElement(react_core_1.DataListToggle, { isExpanded: false, id: 'resource-header-invisible-toggle', "aria-controls": "ex-expand1" })),
React.createElement(react_core_1.DataListItemCells, { dataListCells: [
React.createElement(react_core_1.DataListCell, { key: 'resource-name-header', width: 5 },
React.createElement("strong", null,
React.createElement(Msg_1.Msg, { msgKey: 'resourceName' }))),
React.createElement(react_core_1.DataListCell, { key: 'application-name-header', width: 5 },
React.createElement("strong", null,
React.createElement(Msg_1.Msg, { msgKey: 'application' }))),
React.createElement(react_core_1.DataListCell, { key: 'permission-request-header', width: 5 },
React.createElement("strong", null,
React.createElement(Msg_1.Msg, { msgKey: 'permissionRequests' }))),
] }))),
(this.props.resources.data.length === 0) && React.createElement(Msg_1.Msg, { msgKey: this.props.noResourcesMessage }),
this.props.resources.data.map(function (resource, row) {
return (React.createElement(react_core_1.DataListItem, { key: 'resource-' + row, "aria-labelledby": resource.name, isExpanded: _this.state.isRowOpen[row] },
React.createElement(react_core_1.DataListItemRow, null,
React.createElement(react_core_1.DataListToggle, { onClick: function () { return _this.onToggle(row); }, isExpanded: _this.state.isRowOpen[row], id: 'resourceToggle-' + row, "aria-controls": "ex-expand1" }),
React.createElement(react_core_1.DataListItemCells, { dataListCells: [
React.createElement(react_core_1.DataListCell, { key: 'resourceName-' + row, width: 5 },
React.createElement(Msg_1.Msg, { msgKey: resource.name })),
React.createElement(react_core_1.DataListCell, { key: 'resourceClient-' + row, width: 5 },
React.createElement("a", { href: resource.client.baseUrl }, _this.getClientName(resource.client))),
React.createElement(react_core_1.DataListCell, { key: 'permissionRequests-' + row, width: 5 }, resource.shareRequests.length > 0 && React.createElement("a", { href: resource.client.baseUrl },
React.createElement(react_icons_1.UserCheckIcon, { size: 'lg' }),
React.createElement(react_core_1.Badge, null, resource.shareRequests.length)))
] })),
React.createElement(react_core_1.DataListContent, { noPadding: false, "aria-label": "Session Details", id: "ex-expand1", isHidden: !_this.state.isRowOpen[row] },
React.createElement(react_core_1.Stack, { gutter: 'md' },
React.createElement(react_core_1.StackItem, { isFilled: true },
React.createElement(react_core_1.Level, { gutter: 'md' },
React.createElement(react_core_1.LevelItem, null,
React.createElement("span", null)),
React.createElement(react_core_1.LevelItem, null, _this.sharedWithUsersMessage(row)),
React.createElement(react_core_1.LevelItem, null,
React.createElement("span", null)))),
React.createElement(react_core_1.StackItem, { isFilled: true },
React.createElement(react_core_1.Level, { gutter: 'md' },
React.createElement(react_core_1.LevelItem, null,
React.createElement("span", null)),
React.createElement(react_core_1.LevelItem, null,
React.createElement(ShareTheResource_1.ShareTheResource, { resource: resource, permissions: _this.state.permissions.get(row), sharedWithUsersMsg: _this.sharedWithUsersMessage(row), onClose: _this.fetchPermissions.bind(_this), row: row })),
React.createElement(react_core_1.LevelItem, null,
React.createElement(react_icons_1.EditAltIcon, null),
" Edit"),
React.createElement(react_core_1.LevelItem, null,
React.createElement(react_icons_1.Remove2Icon, null),
" Remove"),
React.createElement(react_core_1.LevelItem, null,
React.createElement("span", null))))))));
})));
};
ResourcesTable.prototype.getClientName = function (client) {
if (client.hasOwnProperty('name') && client.name !== null && client.name !== '') {
return Msg_1.Msg.localize(client.name);
}
else {
return client.clientId;
}
};
return ResourcesTable;
}(React.Component));
exports.ResourcesTable = ResourcesTable;
//# sourceMappingURL=ResourcesTable.js.map