|
|
@@ -1,8 +1,10 @@
|
|
|
import React from 'react';
|
|
|
import PropTypes from 'prop-types';
|
|
|
-// // [TODO] GC-1391
|
|
|
-// import TagLabel from '../TagLabel';
|
|
|
-import EditTagModal from './EditTagModal';
|
|
|
+import Button from 'react-bootstrap/es/Button';
|
|
|
+import OverlayTrigger from 'react-bootstrap/es/OverlayTrigger';
|
|
|
+import Tooltip from 'react-bootstrap/es/Tooltip';
|
|
|
+import Modal from 'react-bootstrap/es/Modal';
|
|
|
+import PageTagForm from '../PageTagForm';
|
|
|
|
|
|
/**
|
|
|
* show tag labels on view and edit tag button on edit
|
|
|
@@ -14,11 +16,15 @@ export default class TagViewer extends React.Component {
|
|
|
super(props);
|
|
|
|
|
|
this.state = {
|
|
|
- // currentPageTags: [], // [TODO] GC-1391
|
|
|
- revisionPageTags: [],
|
|
|
+ currentPageTags: [],
|
|
|
+ newPageTags: [],
|
|
|
+ isOpenModal: false,
|
|
|
};
|
|
|
|
|
|
- this.sendTagData = this.sendTagData.bind(this);
|
|
|
+ this.addNewTag = this.addNewTag.bind(this);
|
|
|
+ this.handleShowModal = this.handleShowModal.bind(this);
|
|
|
+ this.handleCloseModal = this.handleCloseModal.bind(this);
|
|
|
+ this.handleSubmit = this.handleSubmit.bind(this);
|
|
|
}
|
|
|
|
|
|
async componentWillMount() {
|
|
|
@@ -26,25 +32,68 @@ export default class TagViewer extends React.Component {
|
|
|
const pageId = this.props.pageId;
|
|
|
if (pageId) {
|
|
|
const res = await this.props.crowi.apiGet('/pages.getPageTag', { pageId });
|
|
|
- this.setState({
|
|
|
- // currentPageTags: res.tags, // [TODO] GC-1391
|
|
|
- revisionPageTags: res.tags,
|
|
|
- });
|
|
|
+ this.setState({ currentPageTags: res.tags });
|
|
|
this.props.sendTagData(res.tags);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- sendTagData(newPageTags) {
|
|
|
- this.setState({ revisionPageTags: newPageTags });
|
|
|
- this.props.sendTagData(newPageTags);
|
|
|
+ // receive new tag from PageTagForm component
|
|
|
+ addNewTag(newPageTags) {
|
|
|
+ this.setState({ newPageTags });
|
|
|
+ }
|
|
|
+
|
|
|
+ handleCloseModal() {
|
|
|
+ this.setState({ isOpenModal: false });
|
|
|
+ }
|
|
|
+
|
|
|
+ handleShowModal() {
|
|
|
+ this.setState({ isOpenModal: true });
|
|
|
+ }
|
|
|
+
|
|
|
+ handleSubmit() {
|
|
|
+ this.props.sendTagData(this.state.newPageTags);
|
|
|
+ this.setState({ currentPageTags: this.state.newPageTags, isOpenModal: false });
|
|
|
}
|
|
|
|
|
|
render() {
|
|
|
+ const tagEditorButtonStyle = {
|
|
|
+ marginLeft: '0.2em',
|
|
|
+ padding: '0 2px',
|
|
|
+ };
|
|
|
+
|
|
|
return (
|
|
|
- <span className="tag-container">
|
|
|
- {/* [TODO] GC-1391 */}
|
|
|
- {/* <TagLabel currentPageTags={this.state.currentPageTags} /> */}
|
|
|
- <EditTagModal crowi={this.props.crowi} currentPageTags={this.state.revisionPageTags} sendTagData={this.sendTagData} />
|
|
|
+ <span className="btn-tag-container">
|
|
|
+ <OverlayTrigger
|
|
|
+ key="tooltip"
|
|
|
+ placement="bottom"
|
|
|
+ overlay={(
|
|
|
+ <Tooltip id="tag-edit-button-tooltip" className="tag-tooltip">
|
|
|
+ {this.state.currentPageTags.length !== 0 ? this.state.currentPageTags.join() : 'tag is not set'}
|
|
|
+ </Tooltip>
|
|
|
+ )}
|
|
|
+ >
|
|
|
+ <Button
|
|
|
+ variant="primary"
|
|
|
+ onClick={this.handleShowModal}
|
|
|
+ className="btn btn-default btn-tag"
|
|
|
+ style={tagEditorButtonStyle}
|
|
|
+ >
|
|
|
+ <i className="fa fa-tags"></i>{this.state.currentPageTags.length}
|
|
|
+ </Button>
|
|
|
+ </OverlayTrigger>
|
|
|
+ <Modal show={this.state.isOpenModal} onHide={this.handleCloseModal} id="editTagModal">
|
|
|
+ <Modal.Header closeButton className="bg-primary">
|
|
|
+ <Modal.Title className="text-white">Page Tag</Modal.Title>
|
|
|
+ </Modal.Header>
|
|
|
+ <Modal.Body>
|
|
|
+ <PageTagForm crowi={this.props.crowi} currentPageTags={this.state.currentPageTags} addNewTag={this.addNewTag} />
|
|
|
+ </Modal.Body>
|
|
|
+ <Modal.Footer>
|
|
|
+ <Button variant="primary" onClick={this.handleSubmit}>
|
|
|
+ Done
|
|
|
+ </Button>
|
|
|
+ </Modal.Footer>
|
|
|
+ </Modal>
|
|
|
</span>
|
|
|
);
|
|
|
}
|