// Copyright 2022 The Casdoor Authors. All Rights Reserved. // // 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 BaseListPage from "./BaseListPage"; import * as Setting from "./Setting"; import i18next from "i18next"; import {Link} from "react-router-dom"; import {Table, Tag} from "antd"; import React from "react"; import * as SessionBackend from "./backend/SessionBackend"; import PopconfirmModal from "./common/modal/PopconfirmModal"; class SessionListPage extends BaseListPage { deleteSession(i) { SessionBackend.deleteSession(this.state.data[i]) .then((res) => { if (res.status === "ok") { Setting.showMessage("success", i18next.t("general:Successfully deleted")); this.fetch({ pagination: { ...this.state.pagination, current: this.state.pagination.current > 1 && this.state.data.length === 1 ? this.state.pagination.current - 1 : this.state.pagination.current, }, }); } else { Setting.showMessage("error", `${i18next.t("general:Failed to delete")}: ${res.msg}`); } }) .catch(error => { Setting.showMessage("error", `${i18next.t("general:Failed to connect to server")}: ${error}`); }); } renderTable(sessions) { const columns = [ { title: i18next.t("general:Name"), dataIndex: "name", key: "name", width: "150px", fixed: "left", sorter: true, ...this.getColumnSearchProps("name"), }, { title: i18next.t("general:Organization"), dataIndex: "owner", key: "owner", width: "110px", sorter: true, ...this.getColumnSearchProps("owner"), render: (text, record, index) => { return ( {text} ); }, }, { title: i18next.t("general:Created time"), dataIndex: "createdTime", key: "createdTime", width: "180px", sorter: true, render: (text, record, index) => { return Setting.getFormattedDate(text); }, }, { title: i18next.t("general:Session ID"), dataIndex: "sessionId", key: "sessionId", width: "180px", sorter: true, render: (text, record, index) => { return text.map((item, index) => {item} ); }, }, { title: i18next.t("general:Action"), dataIndex: "", key: "op", width: "70px", fixed: (Setting.isMobile()) ? "false" : "right", render: (text, record, index) => { return (
this.deleteSession(index)} >
); }, }, ]; const paginationProps = { total: this.state.pagination.total, showQuickJumper: true, showSizeChanger: true, showTotal: () => i18next.t("general:{total} in total").replace("{total}", this.state.pagination.total), }; return (
`${record.owner}/${record.name}`} size="middle" bordered pagination={paginationProps} loading={this.state.loading} onChange={this.handleTableChange} /> ); } fetch = (params = {}) => { let field = params.searchedColumn, value = params.searchText; const sortField = params.sortField, sortOrder = params.sortOrder; if (params.contentType !== undefined && params.contentType !== null) { field = "contentType"; value = params.contentType; } this.setState({loading: true}); SessionBackend.getSessions(Setting.isDefaultOrganizationSelected(this.props.account) ? "" : Setting.getRequestOrganization(this.props.account), params.pagination.current, params.pagination.pageSize, field, value, sortField, sortOrder) .then((res) => { this.setState({ loading: false, }); if (res.status === "ok") { this.setState({ data: res.data, pagination: { ...params.pagination, total: res.data2, }, searchText: params.searchText, searchedColumn: params.searchedColumn, }); } else { if (Setting.isResponseDenied(res)) { this.setState({ isAuthorized: false, }); } else { Setting.showMessage("error", res.msg); } } }); }; } export default SessionListPage;