diff --git a/frontend/src/components/dialog/create-table-dialog.js b/frontend/src/components/dialog/create-table-dialog.js
deleted file mode 100644
index 9e0b2d3257..0000000000
--- a/frontend/src/components/dialog/create-table-dialog.js
+++ /dev/null
@@ -1,161 +0,0 @@
-import React, { Fragment } from 'react';
-import PropTypes from 'prop-types';
-import Select from 'react-select';
-import makeAnimated from 'react-select/lib/animated';
-import { seafileAPI } from '../../utils/seafile-api.js';
-import { Button, Modal, ModalHeader, Input, ModalBody, ModalFooter, Form, FormGroup, Label, Alert } from 'reactstrap';
-import { gettext } from '../../utils/constants';
-
-
-const propTypes = {
- createDTable: PropTypes.func.isRequired,
- onAddDTable: PropTypes.func.isRequired,
- currentWorkspace: PropTypes.object,
-};
-
-class CreateTableDialog extends React.Component {
- constructor(props) {
- super(props);
- this.state = {
- tableName: '',
- errMessage: '',
- isSubmitBtnActive: false,
- selectedOption: null,
- options:[],
- };
- this.newInput = React.createRef();
- }
-
- componentDidMount() {
- this.newInput.focus();
- this.newInput.setSelectionRange(0,0);
-
- let options = [];
- seafileAPI.getAccountInfo().then((res) => {
- let obj = {};
- obj.value = 'Personal';
- obj.email = res.data.email;
- obj.label = 'Personal';
- options.push(obj);
- seafileAPI.listGroups().then((res) => {
- for (let i = 0 ; i < res.data.length; i++) {
- let obj = {};
- obj.value = res.data[i].name;
- obj.email = res.data[i].id + '@seafile_group';
- obj.label = res.data[i].name;
- options.push(obj);
- }
- this.setState({options: options});
- });
- });
- }
-
- handleChange = (e) => {
- if (!e.target.value.trim()) {
- this.setState({isSubmitBtnActive: false});
- } else {
- this.setState({isSubmitBtnActive: true});
- }
-
- this.setState({
- tableName: e.target.value,
- }) ;
- }
-
- handleSelectChange = (option) => {
- this.setState({selectedOption: option});
- }
-
- handleSubmit = () => {
- if (!this.state.isSubmitBtnActive) return;
- if (!this.validateInputParams()) return;
- const space = this.props.currentWorkspace;
- const options = this.state.options;
- let email;
- if (space) {
- for (let i = 0; i < options.length; i++) {
- if ((space.owner_type === 'Personal' && options[i].value === 'Personal') || (space.owner_type === 'Group' && options[i].value === space.owner_name)) {
- email = options[i].email;
- break;
- }
- }
- } else {
- email = this.state.selectedOption.email;
- }
- this.props.createDTable(this.state.tableName.trim(), email);
- }
-
- handleKeyPress = (e) => {
- if (e.key === 'Enter') {
- this.handleSubmit();
- e.preventDefault();
- }
- }
-
- toggle = () => {
- this.props.onAddDTable();
- }
-
- validateInputParams = () => {
- let errMessage = '';
- let tableName = this.state.tableName.trim();
- if (!tableName.length) {
- errMessage = gettext('Name is required');
- this.setState({errMessage: errMessage});
- return false;
- }
- if (tableName.indexOf('/') > -1) {
- errMessage = gettext('Name should not include \'/\'.');
- this.setState({errMessage: errMessage});
- return false;
- }
- return true;
- }
-
- render() {
- const { currentWorkspace } = this.props;
- return (
-
- {gettext('New Table')}
-
-
- {this.state.errMessage && {this.state.errMessage}}
- {!currentWorkspace &&
-
-
-
-
- }
-
-
-
-
-
-
- );
- }
-}
-
-CreateTableDialog.propTypes = propTypes;
-
-export default CreateTableDialog;
diff --git a/frontend/src/components/dialog/delete-table-dialog.js b/frontend/src/components/dialog/delete-table-dialog.js
deleted file mode 100644
index 09528df9da..0000000000
--- a/frontend/src/components/dialog/delete-table-dialog.js
+++ /dev/null
@@ -1,39 +0,0 @@
-import React from 'react';
-import PropTypes from 'prop-types';
-import { gettext } from '../../utils/constants';
-import { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';
-
-const propTypes = {
- currentTable: PropTypes.object.isRequired,
- deleteCancel: PropTypes.func.isRequired,
- handleSubmit: PropTypes.func.isRequired,
-};
-
-class DeleteTableDialog extends React.Component {
-
- toggle = () => {
- this.props.deleteCancel();
- }
-
- render() {
- let currentTable = this.props.currentTable;
- let name = currentTable.name;
-
- return (
-
- {gettext('Delete Table')}
-
- {gettext('Are you sure to delete')}{' '}{name} ?
-
-
-
-
-
-
- );
- }
-}
-
-DeleteTableDialog.propTypes = propTypes;
-
-export default DeleteTableDialog;
diff --git a/frontend/src/components/dialog/generate-dtable-share-link.js b/frontend/src/components/dialog/generate-dtable-share-link.js
deleted file mode 100644
index d5b27f5191..0000000000
--- a/frontend/src/components/dialog/generate-dtable-share-link.js
+++ /dev/null
@@ -1,378 +0,0 @@
-import React, { Fragment } from 'react';
-import PropTypes from 'prop-types';
-import moment from 'moment';
-import copy from 'copy-to-clipboard';
-import { Button, Form, FormGroup, Label, Input, InputGroup, InputGroupAddon, Alert } from 'reactstrap';
-import { gettext, shareLinkExpireDaysMin, shareLinkExpireDaysMax, shareLinkExpireDaysDefault, shareLinkPasswordMinLength, canSendShareLinkEmail } from '../../utils/constants';
-import { seafileAPI } from '../../utils/seafile-api';
-import { Utils } from '../../utils/utils';
-import ShareLink from '../../models/share-link';
-import toaster from '../toast';
-import Loading from '../loading';
-import DTableShareLink from '../../models/dtable-share-link';
-
-const propTypes = {
- workspaceID: PropTypes.number.isRequired,
- name: PropTypes.string.isRequired,
- closeShareDialog: PropTypes.func.isRequired,
-};
-
-class GenerateDTableShareLink extends React.Component {
-
- constructor(props) {
- super(props);
-
- this.isExpireDaysNoLimit = (parseInt(shareLinkExpireDaysMin) === 0 && parseInt(shareLinkExpireDaysMax) === 0 && shareLinkExpireDaysDefault == 0);
- this.defaultExpireDays = this.isExpireDaysNoLimit ? '' : shareLinkExpireDaysDefault;
-
- this.isExpireDaysNoLimit = true;
- this.defaultExpireDays = '';
-
- this.permissionOptions = ['read-only', 'read-write'];
-
- this.state = {
- isValidate: false,
- isShowPasswordInput: false,
- isPasswordVisible: false,
- isExpireChecked: !this.isExpireDaysNoLimit,
- password: '',
- passwdnew: '',
- expireDays: this.defaultExpireDays,
- errorInfo: '',
- sharedLinkInfo: null,
- isNoticeMessageShow: false,
- isLoading: true,
- currentPermission: this.permissionOptions[0],
- isSendLinkShown: false,
- };
- }
-
- componentDidMount() {
- let workspaceID = this.props.workspaceID;
- let name = this.props.name;
- seafileAPI.getDTableShareLink(workspaceID, name).then((res) => {
- window.res = res;
- if (res.data.dtable_share_links.length !== 0) {
- let sharedLinkInfo = new ShareLink(res.data.dtable_share_links[0]);
- this.setState({
- isLoading: false,
- sharedLinkInfo: sharedLinkInfo
- });
- } else {
- this.setState({isLoading: false});
- }
- }).catch(error => {
- let errMessage = Utils.getErrorMsg(error);
- toaster.danger(errMessage);
- });
- }
-
- onPasswordInputChecked = () => {
- this.setState({
- isShowPasswordInput: !this.state.isShowPasswordInput,
- password: '',
- passwdnew: '',
- errorInfo: ''
- });
- }
-
- togglePasswordVisible = () => {
- this.setState({
- isPasswordVisible: !this.state.isPasswordVisible
- });
- }
-
- generatePassword = () => {
- let val = Utils.generatePassword(shareLinkPasswordMinLength);
- this.setState({
- password: val,
- passwdnew: val
- });
- }
-
- inputPassword = (e) => {
- let passwd = e.target.value.trim();
- this.setState({password: passwd});
- }
-
- inputPasswordNew = (e) => {
- let passwd = e.target.value.trim();
- this.setState({passwdnew: passwd});
- }
-
- generateDTableShareLink = () => {
- let isValid = this.validateParamsInput();
- if (isValid) {
- this.setState({errorInfo: ''});
- let { workspaceID, name } = this.props;
- let { password, isExpireChecked, expireDays } = this.state;
- let permission = Utils.getDTableShareLinkPermissionObject(this.state.currentPermission).permission;
- const expireDaysSent = isExpireChecked ? expireDays : '';
- seafileAPI.createDTableShareLink(workspaceID, name, password, expireDaysSent, permission).then((res) => {
- let sharedLinkInfo = new DTableShareLink(res.data);
- this.setState({sharedLinkInfo: sharedLinkInfo});
- }).catch((error) => {
- let errMessage = Utils.getErrorMsg(error);
- toaster.danger(errMessage);
- });
- }
- }
-
- onCopySharedLink = () => {
- let sharedLink = this.state.sharedLinkInfo.link;
- copy(sharedLink);
- toaster.success(gettext('Share link is copied to the clipboard.'));
- this.props.closeShareDialog();
- }
-
- deleteShareLink = () => {
- let sharedLinkInfo = this.state.sharedLinkInfo;
- seafileAPI.deleteDTableShareLink(sharedLinkInfo.token).then(() => {
- this.setState({
- password: '',
- passwordnew: '',
- isShowPasswordInput: false,
- expireDays: this.defaultExpireDays,
- isExpireChecked: !this.isExpireDaysNoLimit,
- errorInfo: '',
- sharedLinkInfo: null,
- isNoticeMessageShow: false,
- });
- }).catch((error) => {
- let errMessage = Utils.getErrorMsg(error);
- toaster.danger(errMessage);
- });
- }
-
- onExpireChecked = (e) => {
- this.setState({isExpireChecked: e.target.checked});
- }
-
- onExpireDaysChanged = (e) => {
- let day = e.target.value.trim();
- this.setState({expireDays: day});
- }
-
- setPermission = (e) => {
- this.setState({currentPermission: e.target.value});
- }
-
- validateParamsInput = () => {
- let { isShowPasswordInput , password, passwdnew, isExpireChecked, expireDays } = this.state;
- // validate password
- if (isShowPasswordInput) {
- if (password.length === 0) {
- this.setState({errorInfo: 'Please enter password'});
- return false;
- }
- if (password.length < shareLinkPasswordMinLength) {
- this.setState({errorInfo: 'Password is too short'});
- return false;
- }
- if (password !== passwdnew) {
- this.setState({errorInfo: 'Passwords don\'t match'});
- return false;
- }
- }
-
- // validate days
- // no limit
- let reg = /^\d+$/;
- if (this.isExpireDaysNoLimit) {
- if (isExpireChecked) {
- if (!expireDays) {
- this.setState({errorInfo: 'Please enter days'});
- return false;
- }
- if (!reg.test(expireDays)) {
- this.setState({errorInfo: 'Please enter a non-negative integer'});
- return false;
- }
- this.setState({expireDays: parseInt(expireDays)});
- }
- } else {
- if (!expireDays) {
- this.setState({errorInfo: 'Please enter days'});
- return false;
- }
- if (!reg.test(expireDays)) {
- this.setState({errorInfo: 'Please enter a non-negative integer'});
- return false;
- }
-
- expireDays = parseInt(expireDays);
- let minDays = parseInt(shareLinkExpireDaysMin);
- let maxDays = parseInt(shareLinkExpireDaysMax);
-
- if (minDays !== 0 && maxDays !== maxDays) {
- if (expireDays < minDays) {
- this.setState({errorInfo: 'Please enter valid days'});
- return false;
- }
- }
-
- if (minDays === 0 && maxDays !== 0 ) {
- if (expireDays > maxDays) {
- this.setState({errorInfo: 'Please enter valid days'});
- return false;
- }
- }
-
- if (minDays !== 0 && maxDays !== 0) {
- if (expireDays < minDays || expireDays > maxDays) {
- this.setState({errorInfo: 'Please enter valid days'});
- return false;
- }
- }
- this.setState({expireDays: expireDays});
- }
-
- return true;
- }
-
- onNoticeMessageToggle = () => {
- this.setState({isNoticeMessageShow: !this.state.isNoticeMessageShow});
- }
-
- toggleSendLink = () => {
- this.setState({ isSendLinkShown: !this.state.isSendLinkShown });
- }
-
- render() {
-
- if (this.state.isLoading) {
- return ;
- }
-
- let passwordLengthTip = gettext('(at least {passwordLength} characters)');
- passwordLengthTip = passwordLengthTip.replace('{passwordLength}', shareLinkPasswordMinLength);
-
- if (this.state.sharedLinkInfo) {
- let sharedLinkInfo = this.state.sharedLinkInfo;
- return (
-
-
- {(canSendShareLinkEmail && !this.state.isSendLinkShown && !this.state.isNoticeMessageShow) &&
-
- }
- {(!this.state.isSendLinkShown && !this.state.isNoticeMessageShow) &&
-
- }
- {this.state.isNoticeMessageShow &&
-
-
{gettext('Are you sure you want to delete the share link?')}
-
{gettext('If the share link is deleted, no one will be able to access it any more.')}
-
{' '}
-
-
- }
-
- );
- } else {
- return (
-
- );
- }
- }
-}
-
-GenerateDTableShareLink.propTypes = propTypes;
-
-export default GenerateDTableShareLink;
diff --git a/frontend/src/components/dialog/share-table-dialog.js b/frontend/src/components/dialog/share-table-dialog.js
deleted file mode 100644
index 6b7d9e446a..0000000000
--- a/frontend/src/components/dialog/share-table-dialog.js
+++ /dev/null
@@ -1,93 +0,0 @@
-import React, { Fragment } from 'react';
-import PropTypes from 'prop-types';
-import {gettext} from '../../utils/constants';
-import {Modal, ModalHeader, ModalBody, Nav, NavItem, NavLink, TabContent, TabPane} from 'reactstrap';
-import ShareTableToUser from './share-table-to-user';
-
-import '../../css/share-link-dialog.css';
-import GenerateDTableShareLink from './generate-dtable-share-link';
-
-const propTypes = {
- currentTable: PropTypes.object.isRequired,
- ShareCancel: PropTypes.func.isRequired,
-};
-
-class ShareTableDialog extends React.Component {
- constructor(props) {
- super(props);
- this.state = {
- activeTab: 'shareToUser',
- };
- }
-
- toggle = (tab) => {
- if (this.state.activeTab !== tab) {
- this.setState({activeTab: tab});
- }
- };
-
- renderContent = () => {
- let activeTab = this.state.activeTab;
-
- return (
-
-
-
-
-
-
-
-
-
-
- {activeTab === 'shareLink' &&
-
- }
-
-
-
-
- );
- };
-
- render() {
- let currentTable = this.props.currentTable;
- let name = currentTable.name;
-
- return (
-
- {gettext('Share')} {name}
-
- {this.renderContent()}
-
-
- );
- }
-}
-
-ShareTableDialog.propTypes = propTypes;
-
-export default ShareTableDialog;
diff --git a/frontend/src/components/dialog/share-table-to-user.js b/frontend/src/components/dialog/share-table-to-user.js
deleted file mode 100644
index c0a46f6ba5..0000000000
--- a/frontend/src/components/dialog/share-table-to-user.js
+++ /dev/null
@@ -1,237 +0,0 @@
-import React, { Fragment } from 'react';
-import PropTypes from 'prop-types';
-import { gettext, canInvitePeople, siteRoot } from '../../utils/constants';
-import { Button } from 'reactstrap';
-import { seafileAPI } from '../../utils/seafile-api.js';
-import UserSelect from '../user-select';
-import DtableSharePermissionEditor from '../select-editor/dtable-share-permission-editor';
-import toaster from '../toast';
-
-import '../../css/invitations.css';
-
-const userItemPropTypes = {
- item: PropTypes.object.isRequired,
- deleteTableShare: PropTypes.func.isRequired,
- updateTableShare: PropTypes.func.isRequired,
-};
-
-class UserItem extends React.Component {
-
- constructor(props) {
- super(props);
- this.state = {
- isOperationShow: false
- };
- }
-
- onMouseEnter = () => {
- this.setState({isOperationShow: true});
- };
-
- onMouseLeave = () => {
- this.setState({isOperationShow: false});
- };
-
- deleteTableShare = () => {
- this.props.deleteTableShare(this.props.item.email);
- };
-
- updateTableShare = (permission) => {
- this.props.updateTableShare(this.props.item.email, permission);
- };
-
- render() {
- let item = this.props.item;
- let currentPermission = item.permission;
- return (
-
- {item.name} |
-
-
- |
-
-
-
- |
-
- );
- }
-}
-
-UserItem.propTypes = userItemPropTypes;
-
-const propTypes = {
- currentTable: PropTypes.object.isRequired,
-};
-
-class ShareTableToUser extends React.Component {
-
- constructor(props) {
- super(props);
- this.state = {
- selectedOptions: null,
- permission: 'rw',
- userList: []
- };
- this.workspaceID = this.props.currentTable.workspace_id;
- this.tableName = this.props.currentTable.name;
- }
-
- componentDidMount() {
- seafileAPI.listTableShares(this.workspaceID, this.tableName).then((res) => {
- this.setState({userList: res.data.user_list});
- });
- }
-
- handleSelectChange = (options) => {
- this.setState({ selectedOptions: options });
- };
-
- setPermission = (permission) => {
- this.setState({permission: permission});
- };
-
- handleError = (e) => {
- if (e.response) {
- toaster.danger(e.response.data.error_msg || e.response.data.detail || gettext('Error'), {duration: 3});
- } else {
- toaster.danger(gettext('Please check the network.'), {duration: 3});
- }
- };
-
- addTableShare = () => {
- const { selectedOptions, permission, userList } = this.state;
- if (!selectedOptions || selectedOptions.length === 0) return;
- for (let i = 0; i < selectedOptions.length; i++) {
- let name = selectedOptions[i].value;
- let email = selectedOptions[i].email;
- seafileAPI.addTableShare(this.workspaceID, this.tableName, email, permission).then((res) => {
- let userInfo = {
- name: name,
- email: email,
- permission: permission,
- };
- userList.push(userInfo);
- this.setState({ userList: userList });
- }).catch(error => {
- this.handleError(error);
- });
- }
- this.setState({ selectedOption: null });
- this.refs.userSelect.clearSelect();
- };
-
- deleteTableShare = (email) => {
- seafileAPI.deleteTableShare(this.workspaceID, this.tableName, email).then((res) => {
- let userList = this.state.userList.filter(userInfo => {
- return userInfo.email !== email;
- });
- this.setState({
- userList: userList,
- });
- }).catch(error => {
- this.handleError(error);
- });
- };
-
- updateTableShare = (email, permission) => {
- seafileAPI.updateTableShare(this.workspaceID, this.tableName, email, permission).then((res) => {
- let userList = this.state.userList.filter(userInfo => {
- if (userInfo.email === email) {
- userInfo.permission = permission;
- }
- return userInfo;
- });
- this.setState({
- userList: userList,
- });
- }).catch(error => {
- this.handleError(error);
- });
- };
-
- render() {
- const renderUserList = this.state.userList.map((item, index) => {
- return (
-
- );
- });
-
- return (
-
-
-
-
- {gettext('User')} |
- {gettext('Permission')} |
- |
-
-
-
-
-
-
- |
-
-
- |
-
-
- |
-
-
-
-
-
- );
- }
-}
-
-ShareTableToUser.propTypes = propTypes;
-
-export default ShareTableToUser;
diff --git a/frontend/src/components/dialog/table-api-token-dialog.js b/frontend/src/components/dialog/table-api-token-dialog.js
deleted file mode 100644
index 671416f3f0..0000000000
--- a/frontend/src/components/dialog/table-api-token-dialog.js
+++ /dev/null
@@ -1,310 +0,0 @@
-import React, {Fragment} from 'react';
-import PropTypes from 'prop-types';
-import {gettext} from '../../utils/constants';
-import {Modal, ModalHeader, ModalBody, Button, Input} from 'reactstrap';
-import DtableSharePermissionEditor from '../select-editor/dtable-share-permission-editor';
-import {seafileAPI} from '../../utils/seafile-api';
-import toaster from '../toast';
-import copy from 'copy-to-clipboard';
-import Loading from '../loading';
-
-import '../../css/share-link-dialog.css';
-
-
-const apiTokenItemPropTypes = {
- item: PropTypes.object.isRequired,
- deleteAPIToken: PropTypes.func.isRequired,
- updateAPIToken: PropTypes.func.isRequired,
-};
-
-class APITokenItem extends React.Component {
-
- constructor(props) {
- super(props);
- this.state = {
- isOperationShow: false,
- };
- }
-
- onMouseEnter = () => {
- this.setState({isOperationShow: true});
- };
-
- onMouseLeave = () => {
- this.setState({isOperationShow: false});
- };
-
- onDeleteAPIToken = () => {
- this.props.deleteAPIToken(this.props.item.app_name);
- };
-
- onUpdateAPIToken = (permission) => {
- this.props.updateAPIToken(this.props.item.app_name, permission);
- };
-
- onCopyAPIToken = () => {
- let api_token = this.props.item.api_token;
- copy(api_token);
- toaster.success(gettext('API Token is copied to the clipboard.'));
- };
-
- render() {
- let item = this.props.item;
-
- return (
-
- {item.app_name} |
-
-
- |
- {item.api_token} |
-
-
- |
-
-
- |
-
- );
- }
-}
-
-APITokenItem.propTypes = apiTokenItemPropTypes;
-
-const propTypes = {
- currentTable: PropTypes.object.isRequired,
- onTableAPITokenToggle: PropTypes.func.isRequired,
-};
-
-class TableAPITokenDialog extends React.Component {
- constructor(props) {
- super(props);
- this.state = {
- apiTokenList: [],
- permission: 'rw',
- appName: '',
- errorMsg: '',
- loading: true,
- isSubmitBtnActive: true,
- };
- this.workspaceID = this.props.currentTable.workspace_id;
- this.tableName = this.props.currentTable.name;
- }
-
- listAPITokens = () => {
- seafileAPI.listTableAPITokens(this.workspaceID, this.tableName).then((res) => {
- this.setState({
- apiTokenList: res.data.api_tokens,
- loading: false,
- });
- }).catch(error => {
- if (error.response.status === 403) {
- this.setState({
- errorMsg: gettext('Permission denied'),
- });
- } else {
- this.handleError(error);
- }
- });
- };
-
- onInputChange = (e) => {
- let appName = e.target.value;
- this.setState({
- appName: appName,
- });
- };
-
- onKeyDown = (e) => {
- if (e.keyCode === 13) {
- e.preventDefault();
- this.addAPIToken();
- }
- };
-
- setPermission = (permission) => {
- this.setState({permission: permission});
- };
-
- addAPIToken = () => {
- if (!this.state.appName) {
- return;
- }
-
- this.setState({
- isSubmitBtnActive: false,
- });
- const {appName, permission, apiTokenList} = this.state;
-
- seafileAPI.addTableAPIToken(this.workspaceID, this.tableName, appName, permission).then((res) => {
- apiTokenList.push(res.data);
- this.setState({
- apiTokenList: apiTokenList,
- isSubmitBtnActive: true,
- });
- }).catch(error => {
- this.handleError(error);
- this.setState({
- isSubmitBtnActive: true,
- });
- });
- };
-
- deleteAPIToken = (appName) => {
- seafileAPI.deleteTableAPIToken(this.workspaceID, this.tableName, appName).then((res) => {
- const apiTokenList = this.state.apiTokenList.filter(item => {
- return item.app_name !== appName;
- });
- this.setState({
- apiTokenList: apiTokenList,
- });
- }).catch(error => {
- this.handleError(error);
- });
- };
-
- updateAPIToken = (appName, permission) => {
- seafileAPI.updateTableAPIToken(this.workspaceID, this.tableName, appName, permission).then((res) => {
- let userList = this.state.apiTokenList.filter(item => {
- if (item.app_name === appName) {
- item.permission = permission;
- }
- return item;
- });
- this.setState({
- userList: userList,
- });
- }).catch(error => {
- this.handleError(error);
- });
- };
-
- handleError = (e) => {
- if (e.response) {
- toaster.danger(e.response.data.error_msg || e.response.data.detail || gettext('Error'), {duration: 3});
- } else {
- toaster.danger(gettext('Please check the network.'), {duration: 3});
- }
- };
-
- componentDidMount() {
- this.listAPITokens();
- }
-
- renderContent = () => {
- const renderAPITokenList = this.state.apiTokenList.map((item, index) => {
- return (
-
- );
- });
-
- return (
-
- {this.state.errorMsg &&
-
-
{this.state.errorMsg}
-
- }
- {!this.state.errorMsg &&
-
-
- {this.state.apiTokenList.length !== 0 &&
-
-
-
-
-
- {gettext('App Name')} |
- {gettext('Permission')} |
- {gettext('Access Token')} |
- |
- |
-
-
-
- {renderAPITokenList}
-
-
-
-
- }
- {this.state.loading &&
-
- }
-
- }
-
- );
- };
-
- render() {
- let currentTable = this.props.currentTable;
- let name = currentTable.name;
-
- return (
-
-
- {gettext('API Token')} {name}
-
- {this.renderContent()}
-
-
- );
- }
-}
-
-TableAPITokenDialog.propTypes = propTypes;
-
-export default TableAPITokenDialog;
diff --git a/frontend/src/components/select-editor/dtable-share-permission-editor.js b/frontend/src/components/select-editor/dtable-share-permission-editor.js
deleted file mode 100644
index 835a69a4fd..0000000000
--- a/frontend/src/components/select-editor/dtable-share-permission-editor.js
+++ /dev/null
@@ -1,81 +0,0 @@
-import React, { Fragment } from 'react';
-import PropTypes from 'prop-types';
-import Select from 'react-select';
-import { gettext } from '../../utils/constants';
-
-const propTypes = {
- isTextMode: PropTypes.bool.isRequired,
- isEditIconShow: PropTypes.bool.isRequired,
- currentPermission: PropTypes.string.isRequired,
- onPermissionChanged: PropTypes.func.isRequired,
-};
-
-class DtableSharePermissionEditor extends React.Component {
-
- constructor(props) {
- super(props);
- this.state = {
- isEditing: false,
- };
- this.options = [
- { value: 'rw', label: {gettext('Read-Write')}
},
- { value: 'r', label: {gettext('Read-Only')}
}
- ];
- }
-
- componentDidMount() {
- document.addEventListener('click', this.onHideSelect);
- }
-
- componentWillUnmount() {
- document.removeEventListener('click', this.onHideSelect);
- }
-
- onHideSelect = () => {
- this.setState({ isEditing: false });
- }
-
- onEditPermission = (e) => {
- e.nativeEvent.stopImmediatePropagation();
- this.setState({ isEditing: true });
- }
-
- onPermissionChanged = (e) => {
- if (e.value !== this.props.currentPermission) {
- this.props.onPermissionChanged(e.value);
- }
- this.setState({ isEditing: false });
- }
-
- onSelectHandler = (e) => {
- e.nativeEvent.stopImmediatePropagation();
- }
-
- render() {
- const { currentPermission, isTextMode } = this.props;
- let optionTranslation = currentPermission === 'r' ? gettext('Read-Only') : gettext('Read-Write');
- return (
-
- {(isTextMode && !this.state.isEditing) ?
-
- {optionTranslation}
- {this.props.isEditIconShow &&
-
- }
-
- :
-
- }
-
- );
- }
-}
-
-DtableSharePermissionEditor.propTypes = propTypes;
-
-export default DtableSharePermissionEditor;
diff --git a/frontend/src/i18n-dtable.js b/frontend/src/i18n-dtable.js
deleted file mode 100644
index 43ffddb0c5..0000000000
--- a/frontend/src/i18n-dtable.js
+++ /dev/null
@@ -1,42 +0,0 @@
-import i18n from 'i18next';
-import Backend from 'i18next-xhr-backend';
-import LanguageDetector from 'i18next-browser-languagedetector';
-import { initReactI18next } from 'react-i18next';
-
-let mediaUrl = window.app.pageOptions.mediaUrl;
-const lang = window.app.pageOptions.lang;
-
-i18n
- .use(Backend)
- .use(LanguageDetector)
- .use(initReactI18next)
- .init({
- lng: lang,
- fallbackLng: 'en',
- ns: ['dtable', 'translations'],
- defaultNS: 'dtable',
-
- whitelist: ['en', 'zh-CN', 'fr', 'de', 'cs', 'es', 'es-AR', 'es-MX', 'ru'],
-
- backend: {
- loadPath: mediaUrl + 'assets/frontend/locales/{{ lng }}/{{ ns }}.json',
- // loadPath: '/media/locales/{{lng}}/{{ns}}.json',
- // loadPath: function(lng, ns) {
- },
-
- debug: true, // console log if debug: true
-
- interpolation: {
- escapeValue: false, // not needed for react!!
- },
- contextSeparator: " ",
-
-
- load: 'currentOnly',
-
- react: {
- wait: true,
- }
- });
-
-export default i18n;
diff --git a/frontend/src/models/dtable-share-link.js b/frontend/src/models/dtable-share-link.js
deleted file mode 100644
index a0367549ce..0000000000
--- a/frontend/src/models/dtable-share-link.js
+++ /dev/null
@@ -1,16 +0,0 @@
-class DTableShareLink {
-
- constructor(object) {
- this.workspaceID = object.workspace_id;
- this.permissions = object.permission;
- this.username = object.username;
- this.is_expired = object.is_expired;
- this.expire_date = object.expire_date;
- this.token = object.token;
- this.link = object.link;
- this.ctime = object.ctime;
- }
-
-}
-
-export default DTableShareLink;
diff --git a/frontend/src/utils/utils.js b/frontend/src/utils/utils.js
index 5ce41632b4..d12d4dd4fb 100644
--- a/frontend/src/utils/utils.js
+++ b/frontend/src/utils/utils.js
@@ -627,23 +627,6 @@ export const Utils = {
};
},
- getDTableShareLinkPermissionObject: function(permission) {
- switch (permission) {
- case 'read-only':
- return {
- value: permission,
- text: 'read-only',
- permission: 'r'
- };
- case 'read-write':
- return {
- value: permission,
- text: 'read-write',
- permission: 'rw'
- };
- }
- },
-
formatSize: function(options) {
/*
* param: {bytes, precision}