diff --git a/frontend/package-lock.json b/frontend/package-lock.json index a440a87c2a..94f03cd61a 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -180,7 +180,7 @@ "dependencies": { "reactstrap": { "version": "5.0.0", - "resolved": "http://registry.npmjs.org/reactstrap/-/reactstrap-5.0.0.tgz", + "resolved": "https://registry.npmjs.org/reactstrap/-/reactstrap-5.0.0.tgz", "integrity": "sha512-y0eju/LAK7gbEaTFfq2iW92MF7/5Qh0tc1LgYr2mg92IX8NodGc03a+I+cp7bJ0VXHAiLy0bFL9UP89oSm4cBg==", "requires": { "classnames": "^2.2.3", diff --git a/frontend/src/components/rename-input.js b/frontend/src/components/rename-input.js new file mode 100644 index 0000000000..7eb4e3aa8d --- /dev/null +++ b/frontend/src/components/rename-input.js @@ -0,0 +1,72 @@ +import React from 'react'; +import PropTypes from 'prop-types'; + +const propTypes = { + type: PropTypes.string, + name: PropTypes.string.isRequired, + onRenameConfirm: PropTypes.func.isRequired, + onRenameCancel: PropTypes.func.isRequired, +}; +class RenameInput extends React.Component { + + constructor(props) { + super(props); + this.state = { + name: props.name + }; + } + + componentDidMount() { + this.refs.renameInput.focus(); + if (this.props.type === 'file') { + var endIndex = this.props.name.lastIndexOf('.'); + this.refs.renameInput.setSelectionRange(0, endIndex, 'forward'); + } else { + this.refs.renameInput.setSelectionRange(0, -1); + } + } + + onChange = (e) => { + this.setState({name: e.target.value}); + } + + onClick = (e) => { + e.nativeEvent.stopImmediatePropagation(); + } + + onKeyPress = (e) => { + if (e.key === 'Enter') { + this.onRenameConfirm(e); + } + } + + onRenameConfirm = (e) => { + e.nativeEvent.stopImmediatePropagation(); + this.props.onRenameConfirm(this.state.name); + } + + onRenameCancel = (e) => { + e.nativeEvent.stopImmediatePropagation(); + this.props.onRenameCancel(); + } + + render() { + return ( +
+ + + +
+ ); + } +} + +RenameInput.propTypes = propTypes; + +export default RenameInput; diff --git a/frontend/src/pages/my-libs/my-libs.js b/frontend/src/pages/my-libs/my-libs.js index 0cb7e9be7c..0d9e889ce7 100644 --- a/frontend/src/pages/my-libs/my-libs.js +++ b/frontend/src/pages/my-libs/my-libs.js @@ -13,6 +13,7 @@ import RepoViewToolbar from '../../components/toolbar/repo-view-toobar'; import TransferDialog from '../../components/dialog/transfer-dialog'; import LibHistorySetting from '../../components/dialog/lib-history-setting-dialog'; import LibDetail from '../../components/dirent-detail/lib-details'; +import RenameInput from '../../components/rename-input'; class Content extends Component { @@ -440,21 +441,21 @@ class Item extends Component { const desktopItem = ( {data.icon_title} - { - this.state.showChangeLibName ? ( - - -