Skip to content

Commit

Permalink
12.0 change add existing file in wiki edit
Browse files Browse the repository at this point in the history
  • Loading branch information
Michael18811380328 committed May 8, 2024
1 parent 143b087 commit cc6dd07
Show file tree
Hide file tree
Showing 10 changed files with 345 additions and 373 deletions.
90 changes: 0 additions & 90 deletions frontend/src/pages/wiki/css/add-page-dialog.css

This file was deleted.

11 changes: 7 additions & 4 deletions frontend/src/pages/wiki/css/view-structure.css
Original file line number Diff line number Diff line change
Expand Up @@ -203,10 +203,6 @@
height: 100%;
}

.add-view-dropdown-menu {
margin-top: 0;
}

.view-structure-footer .dropdown button {
position: absolute;
top: 0;
Expand Down Expand Up @@ -359,6 +355,13 @@
color: #fff;
}

.dtable-dropdown-menu.large .dropdown-item {
min-height: 32px;
padding: 3px 12px;
display: flex;
align-items: center;
}

/* dark mode */
.view-structure-dark.view-structure,
.view-structure-dark.view-structure .view-folder .icon-expand-folder {
Expand Down
49 changes: 36 additions & 13 deletions frontend/src/pages/wiki/side-panel.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@ import ViewStructure from './view-structure';
import IndexMdViewer from './index-md-viewer';
import PageUtils from './view-structure/page-utils';
import NewFolderDialog from './view-structure/new-folder-dialog';
import AddPageDialog from './view-structure/add-page-dialog';
import AddExistFileDialog from './view-structure/add-exist-file-dialog';
import AddNewPageDialog from './view-structure/add-new-page-dialog';
import ViewStructureFooter from './view-structure/view-structure-footer';
import { generateUniqueId, getIconURL, isObjectNotEmpty } from './utils';
import Folder from './models/folder';
Expand Down Expand Up @@ -43,7 +44,8 @@ class SidePanel extends Component {
this.isNodeMenuShow = false;
this.state = {
isShowNewFolderDialog: false,
isShowAddPageDialog: false,
isShowAddExistFileDialog: false,
isShowAddNewPageDialog: false,
};
}

Expand Down Expand Up @@ -74,7 +76,7 @@ class SidePanel extends Component {
)} */}
{isEditWiki &&
<ViewStructureFooter
onToggleAddView={this.openAddPageDialog.bind(this, null)}
onToggleAddView={this.openAddPageDialog}
onToggleAddFolder={this.onToggleAddFolder}
/>
}
Expand All @@ -84,9 +86,15 @@ class SidePanel extends Component {
onToggleAddFolderDialog={this.onToggleAddFolder}
/>
}
{this.state.isShowAddPageDialog &&
<AddPageDialog
toggle={this.closeAddPageDialog}
{this.state.isShowAddExistFileDialog &&
<AddExistFileDialog
toggle={this.closeAddExistFileDialog}
onAddNewPage={this.onAddNewPage}
/>
}
{this.state.isShowAddNewPageDialog &&
<AddNewPageDialog
toggle={this.closeAddNewPageDialog}
onAddNewPage={this.onAddNewPage}
/>
}
Expand Down Expand Up @@ -314,14 +322,23 @@ class SidePanel extends Component {
this.setState({ isShowNewFolderDialog: !this.state.isShowNewFolderDialog });
};

openAddPageDialog = (folder_id) => {
openAddPageDialog = (folder_id, pageType) => {
this.current_folder_id = folder_id;
this.setState({ isShowAddPageDialog: true });
if (pageType === 'new-page') {
this.setState({ isShowAddNewPageDialog: true });
} else if (pageType === 'existing-file') {
this.setState({ isShowAddExistFileDialog: true });
}
};

closeAddExistFileDialog = () => {
this.current_folder_id = null;
this.setState({ isShowAddExistFileDialog: false });
};

closeAddPageDialog = () => {
closeAddNewPageDialog = () => {
this.current_folder_id = null;
this.setState({ isShowAddPageDialog: false });
this.setState({ isShowAddNewPageDialog: false });
};

onSetFolderId = (folder_id) => {
Expand Down Expand Up @@ -359,9 +376,15 @@ class SidePanel extends Component {
onToggleAddFolderDialog={this.onToggleAddFolder}
/>
}
{this.state.isShowAddPageDialog &&
<AddPageDialog
toggle={this.closeAddPageDialog}
{this.state.isShowAddExistFileDialog &&
<AddExistFileDialog
toggle={this.closeAddExistFileDialog}
onAddNewPage={this.onAddNewPage}
/>
}
{this.state.isShowAddNewPageDialog &&
<AddNewPageDialog
toggle={this.closeAddNewPageDialog}
onAddNewPage={this.onAddNewPage}
/>
}
Expand Down
136 changes: 136 additions & 0 deletions frontend/src/pages/wiki/view-structure/add-exist-file-dialog.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
import React from 'react';
import PropTypes from 'prop-types';
import { Modal, ModalHeader, ModalBody, ModalFooter, Form, FormGroup, Label, Input, Button } from 'reactstrap';
import { gettext, repoID } from '../../../utils/constants';
import toaster from '../../../components/toast';
import Loading from '../../../components/loading';
import FileChooser from '../../../components/file-chooser/file-chooser';

const propTypes = {
toggle: PropTypes.func.isRequired,
onAddNewPage: PropTypes.func,
};

const DIALOG_MAX_HEIGHT = window.innerHeight - 56; // Dialog margin is 3.5rem (56px)

class AddExistFileDialog extends React.Component {

constructor(props) {
super(props);
this.state = {
pageName: '',
isLoading: false,
repo: null,
selectedPath: '',
errMessage: '',
};
}

handleChange = (event) => {
let value = event.target.value;
if (value !== this.state.pageName) {
this.setState({ pageName: value });
}
};

toggle = () => {
this.props.toggle();
};

checkName = (newName) => {
if (newName === '') {
toaster.danger(gettext('Name cannot be empty'));
return false;
}
if (newName.includes('/')) {
toaster.danger(gettext('Name cannot contain slash'));
return false;
}
if (newName.includes('\\')) {
toaster.danger(gettext('Name cannot contain backslash'));
return false;
}
return true;
};

onSubmit = () => {
const pageName = this.state.pageName.trim();
if (!this.checkName(pageName)) return;
let { selectedPath } = this.state;
if (selectedPath.endsWith('.sdoc') === false && selectedPath.endsWith('.md') === false) {
toaster.danger(gettext('Please select an existing sdoc or markdown file'));
return;
}
this.props.onAddNewPage({
name: pageName,
icon: '',
path: selectedPath,
successCallback: this.onSuccess,
errorCallback: this.onError,
});
this.setState({ isLoading: true });
};

onSuccess = () => {
this.toggle();
};

onError = () => {
this.setState({ isLoading: false });
};

onDirentItemClick = (repo, selectedPath) => {
this.setState({
repo: repo,
selectedPath: selectedPath,
errMessage: ''
});
};

onRepoItemClick = (repo) => {
this.setState({
repo: repo,
selectedPath: '/',
errMessage: ''
});
};

render() {
return (
<Modal isOpen={true} toggle={this.toggle} autoFocus={false} className="add-exist-file-dialog" style={{ maxHeight: DIALOG_MAX_HEIGHT }}>
<ModalHeader toggle={this.toggle}>{gettext('Add existing file')}</ModalHeader>
<ModalBody className='pr-4'>
<Form>
<FormGroup>
<Label>{gettext('Page name')}</Label>
<Input value={this.state.pageName} onChange={this.handleChange} autoFocus={true} />
</FormGroup>
<FormGroup>
<Label>{gettext('The file corresponding to this page')}</Label>
<FileChooser
isShowFile={true}
repoID={repoID}
currentPath={this.state.selectedPath}
onDirentItemClick={this.onDirentItemClick}
onRepoItemClick={this.onRepoItemClick}
mode={'only_current_library'}
hideLibraryName={true}
/>
</FormGroup>
</Form>
</ModalBody>
<ModalFooter>
<Button color="secondary" onClick={this.toggle}>{gettext('Cancel')}</Button>
{this.state.isLoading ?
<Button color="primary" disabled><Loading/></Button> :
<Button color="primary" onClick={this.onSubmit}>{gettext('Submit')}</Button>
}
</ModalFooter>
</Modal>
);
}
}

AddExistFileDialog.propTypes = propTypes;

export default AddExistFileDialog;
Loading

0 comments on commit cc6dd07

Please sign in to comment.