// Copyright 2023 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 React from "react"; import {Link} from "react-router-dom"; import {Button, Table} from "antd"; import moment from "moment"; import * as Setting from "./Setting"; import * as ChatBackend from "./backend/ChatBackend"; import i18next from "i18next"; import BaseListPage from "./BaseListPage"; import PopconfirmModal from "./common/modal/PopconfirmModal"; class ChatListPage extends BaseListPage { newChat() { const randomName = Setting.getRandomName(); const organizationName = Setting.getRequestOrganization(this.props.account); return { owner: "admin", // this.props.account.applicationName, name: `chat_${randomName}`, createdTime: moment().format(), updatedTime: moment().format(), organization: organizationName, displayName: `New Chat - ${randomName}`, type: "Single", category: "Chat Category - 1", user1: `${this.props.account.owner}/${this.props.account.name}`, user2: "", users: [`${this.props.account.owner}/${this.props.account.name}`], messageCount: 0, }; } addChat() { const newChat = this.newChat(); ChatBackend.addChat(newChat) .then((res) => { if (res.status === "ok") { this.props.history.push({pathname: `/chats/${newChat.name}`, mode: "add"}); Setting.showMessage("success", i18next.t("general:Successfully added")); } else { Setting.showMessage("error", `${i18next.t("general:Failed to add")}: ${res.msg}`); } }) .catch(error => { Setting.showMessage("error", `${i18next.t("general:Failed to connect to server")}: ${error}`); }); } deleteChat(i) { ChatBackend.deleteChat(this.state.data[i]) .then((res) => { if (res.status === "ok") { Setting.showMessage("success", i18next.t("general:Successfully deleted")); this.setState({ data: Setting.deleteRow(this.state.data, i), pagination: {total: this.state.pagination.total - 1}, }); } 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(chats) { const columns = [ { title: i18next.t("general:Organization"), dataIndex: "organization", key: "organization", width: "150px", fixed: "left", sorter: true, ...this.getColumnSearchProps("organization"), render: (text, record, index) => { return ( {text} ); }, }, { title: i18next.t("general:Name"), dataIndex: "name", key: "name", width: "120px", fixed: "left", sorter: true, ...this.getColumnSearchProps("name"), render: (text, record, index) => { return ( {text} ); }, }, { title: i18next.t("general:Created time"), dataIndex: "createdTime", key: "createdTime", width: "150px", sorter: true, render: (text, record, index) => { return Setting.getFormattedDate(text); }, }, { title: i18next.t("general:Updated time"), dataIndex: "updatedTime", key: "updatedTime", width: "15 0px", sorter: true, render: (text, record, index) => { return Setting.getFormattedDate(text); }, }, { title: i18next.t("general:Display name"), dataIndex: "displayName", key: "displayName", // width: '100px', sorter: true, ...this.getColumnSearchProps("displayName"), }, { title: i18next.t("provider:Type"), dataIndex: "type", key: "type", width: "110px", sorter: true, filterMultiple: false, filters: [ {text: "Single", value: "Single"}, {text: "Group", value: "Group"}, {text: "AI", value: "AI"}, ], render: (text, record, index) => { return i18next.t(`chat:${text}`); }, }, { title: i18next.t("provider:Category"), dataIndex: "category", key: "category", // width: '100px', sorter: true, ...this.getColumnSearchProps("category"), }, { title: i18next.t("chat:User1"), dataIndex: "user1", key: "user1", width: "120px", sorter: true, ...this.getColumnSearchProps("user1"), render: (text, record, index) => { return ( {text} ); }, }, { title: i18next.t("chat:User2"), dataIndex: "user2", key: "user2", width: "120px", sorter: true, ...this.getColumnSearchProps("user2"), render: (text, record, index) => { return ( {text} ); }, }, { title: i18next.t("general:Users"), dataIndex: "users", key: "users", // width: '100px', sorter: true, ...this.getColumnSearchProps("users"), render: (text, record, index) => { return Setting.getTags(text, "users"); }, }, { title: i18next.t("chat:Message count"), dataIndex: "messageCount", key: "messageCount", // width: '100px', sorter: true, ...this.getColumnSearchProps("messageCount"), }, { title: i18next.t("general:Action"), dataIndex: "", key: "op", width: "170px", fixed: (Setting.isMobile()) ? "false" : "right", render: (text, record, index) => { return (