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

242 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 __());
};
})();
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
Object.defineProperty(exports, "__esModule", { value: true });
var React = require("react");
var parse = require("parse-link-header");
var react_core_1 = require("@patternfly/react-core");
var account_service_1 = require("../../account-service/account.service");
var ResourcesTable_1 = require("./ResourcesTable");
var ContentPage_1 = require("../ContentPage");
var Msg_1 = require("../../widgets/Msg");
var Scope = /** @class */ (function () {
function Scope(name, displayName) {
this.name = name;
this.displayName = displayName;
}
Scope.prototype.toString = function () {
if (this.hasOwnProperty('displayName') && (this.displayName)) {
return this.displayName;
}
else {
return this.name;
}
};
return Scope;
}());
exports.Scope = Scope;
var MY_RESOURCES_TAB = 0;
var SHARED_WITH_ME_TAB = 1;
var MyResourcesPage = /** @class */ (function (_super) {
__extends(MyResourcesPage, _super);
function MyResourcesPage(props) {
var _this = _super.call(this, props) || this;
_this.first = 0;
_this.max = 5;
_this.makeScopeObj = function (scope) {
return new Scope(scope.name, scope.displayName);
};
_this.fetchPermissionRequests = function () {
console.log('fetch permission requests');
_this.state.myResources.data.forEach(function (resource) {
_this.fetchShareRequests(resource);
});
};
_this.handleFilterRequest = function (value) {
_this.setState({ nameFilter: value });
_this.fetchFilteredResources({ name: value });
};
_this.handleFirstPageClick = function () {
_this.fetchInitialResources();
};
_this.handleNextClick = function () {
if (_this.isSharedWithMeTab()) {
_this.fetchResources(_this.state.sharedWithMe.nextUrl);
}
else {
_this.fetchResources(_this.state.myResources.nextUrl);
}
};
_this.handlePreviousClick = function () {
if (_this.isSharedWithMeTab()) {
_this.fetchResources(_this.state.sharedWithMe.prevUrl);
}
else {
_this.fetchResources(_this.state.myResources.prevUrl);
}
};
_this.handleTabClick = function (event, tabIndex) {
if (_this.state.activeTabKey === tabIndex)
return;
_this.setState({
nameFilter: '',
activeTabKey: tabIndex
}, function () { _this.fetchInitialResources(); });
};
_this.state = {
activeTabKey: MY_RESOURCES_TAB,
nameFilter: '',
isModalOpen: false,
myResources: { nextUrl: '', prevUrl: '', data: [] },
sharedWithMe: { nextUrl: '', prevUrl: '', data: [] }
};
_this.fetchInitialResources();
return _this;
}
MyResourcesPage.prototype.isSharedWithMeTab = function () {
return this.state.activeTabKey === SHARED_WITH_ME_TAB;
};
MyResourcesPage.prototype.hasNext = function () {
if (this.isSharedWithMeTab()) {
return (this.state.sharedWithMe.nextUrl !== null) && (this.state.sharedWithMe.nextUrl !== '');
}
else {
return (this.state.myResources.nextUrl !== null) && (this.state.myResources.nextUrl !== '');
}
};
MyResourcesPage.prototype.hasPrevious = function () {
console.log('prev url=' + this.state.myResources.prevUrl);
if (this.isSharedWithMeTab()) {
return (this.state.sharedWithMe.prevUrl !== null) && (this.state.sharedWithMe.prevUrl !== '');
}
else {
return (this.state.myResources.prevUrl !== null) && (this.state.myResources.prevUrl !== '');
}
};
MyResourcesPage.prototype.fetchInitialResources = function () {
if (this.isSharedWithMeTab()) {
this.fetchResources("/resources/shared-with-me");
}
else {
this.fetchResources("/resources", { first: this.first, max: this.max });
}
};
MyResourcesPage.prototype.fetchFilteredResources = function (params) {
if (this.isSharedWithMeTab()) {
this.fetchResources("/resources/shared-with-me", params);
}
else {
this.fetchResources("/resources", __assign({}, params, { first: this.first, max: this.max }));
}
};
MyResourcesPage.prototype.fetchResources = function (url, extraParams) {
var _this = this;
account_service_1.AccountServiceClient.Instance.doGet(url, { params: extraParams })
.then(function (response) {
var resources = response.data;
resources.forEach(function (resource) { return resource.shareRequests = []; });
// serialize the Scope objects from JSON so that toString() will work.
resources.forEach(function (resource) { return resource.scopes = resource.scopes.map(_this.makeScopeObj); });
if (_this.isSharedWithMeTab()) {
console.log('Shared With Me Resources: ');
_this.setState({ sharedWithMe: _this.parseResourceResponse(response) });
}
else {
console.log('MyResources: ');
_this.setState({ myResources: _this.parseResourceResponse(response) }, _this.fetchPermissionRequests);
}
console.log({ response: response });
});
};
MyResourcesPage.prototype.fetchShareRequests = function (resource) {
var _this = this;
account_service_1.AccountServiceClient.Instance.doGet('/resources/' + resource._id + '/permissions/requests')
.then(function (response) {
//console.log('Share requests for ' + resource.name);
//console.log({response});
resource.shareRequests = response.data;
if (resource.shareRequests.length > 0) {
//console.log('forcing update');
_this.forceUpdate();
}
});
};
MyResourcesPage.prototype.parseResourceResponse = function (response) {
var links = response.headers.link;
var parsed = parse(links);
var next = '';
var prev = '';
if (parsed !== null) {
if (parsed.hasOwnProperty('next'))
next = parsed.next.url;
if (parsed.hasOwnProperty('prev'))
prev = parsed.prev.url;
}
var resources = response.data;
return { nextUrl: next, prevUrl: prev, data: resources };
};
MyResourcesPage.prototype.makeTab = function (eventKey, title, resources, noResourcesMessage) {
return (React.createElement(react_core_1.Tab, { eventKey: eventKey, title: Msg_1.Msg.localize(title) },
React.createElement(react_core_1.Stack, { gutter: "md" },
React.createElement(react_core_1.StackItem, { isFilled: true },
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(react_core_1.TextInput, { value: this.state.nameFilter, onChange: this.handleFilterRequest, id: 'filter-' + title, type: "text", placeholder: Msg_1.Msg.localize('filterByName') })))),
React.createElement(react_core_1.StackItem, { isFilled: true },
React.createElement(ResourcesTable_1.ResourcesTable, { resources: resources, noResourcesMessage: noResourcesMessage })))));
};
MyResourcesPage.prototype.render = function () {
return (React.createElement(ContentPage_1.ContentPage, { title: "resources", onRefresh: this.fetchInitialResources.bind(this) },
React.createElement(react_core_1.Tabs, { isFilled: true, activeKey: this.state.activeTabKey, onSelect: this.handleTabClick },
this.makeTab(0, 'myResources', this.state.myResources, 'notHaveAnyResource'),
this.makeTab(1, 'sharedwithMe', this.state.sharedWithMe, 'noResourcesSharedWithYou')),
React.createElement(react_core_1.Level, { gutter: 'md' },
React.createElement(react_core_1.LevelItem, null, this.hasPrevious() && React.createElement(react_core_1.Button, { onClick: this.handlePreviousClick },
"<",
React.createElement(Msg_1.Msg, { msgKey: 'previousPage' }))),
React.createElement(react_core_1.LevelItem, null, this.hasPrevious() && React.createElement(react_core_1.Button, { onClick: this.handleFirstPageClick },
React.createElement(Msg_1.Msg, { msgKey: 'firstPage' }))),
React.createElement(react_core_1.LevelItem, null, this.hasNext() && React.createElement(react_core_1.Button, { onClick: this.handleNextClick },
React.createElement(Msg_1.Msg, { msgKey: 'nextPage' }),
">")))));
};
MyResourcesPage.prototype.clearNextPrev = function () {
var newMyResources = this.state.myResources;
newMyResources.nextUrl = '';
newMyResources.prevUrl = '';
this.setState({ myResources: newMyResources });
};
return MyResourcesPage;
}(React.Component));
exports.MyResourcesPage = MyResourcesPage;
;
//# sourceMappingURL=MyResourcesPage.js.map