1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-08-01 23:38:37 +00:00
seahub/frontend/src/pages/wiki2/view-structure/views/drop-target-top-view.js
Michael An d7ac5688ef
12.0 change add existing file in wiki edit (#6057)
* 12.0 change add existing file in wiki edit

* 01 delete create wiki from existing library

* 02 change click wiki name jump to edit page and delete edit icon

* 03 delete select existing file to create new page

* optimize edit wiki

* 04 old wiki page use the early version 11.x features

* optimize wiki permission

* wiki add wiki2

* delete page file

* fix wiki test

---------

Co-authored-by: ‘JoinTyang’ <yangtong1009@163.com>
2024-05-15 11:57:30 +08:00

82 lines
2.0 KiB
JavaScript

import React from 'react';
import { DropTarget } from 'react-dnd';
import PropTypes from 'prop-types';
const DropTargetTopView = (Placeholder) => class extends React.Component {
static propTypes = {
connectDropTarget: PropTypes.func.isRequired,
isOver: PropTypes.bool,
canDrop: PropTypes.bool,
draggedRow: PropTypes.object,
targetFolderId: PropTypes.string,
targetViewId: PropTypes.string,
onMoveView: PropTypes.func,
};
render() {
const { connectDropTarget, isOver, canDrop, draggedRow } = this.props;
const { mode } = draggedRow || {};
if (mode !== 'view') {
return null;
}
const style = {
position: 'absolute',
top: 0,
width: '100%',
zIndex: canDrop ? 1 : -1,
};
return connectDropTarget(
<div style={style}>
<Placeholder />
{isOver && canDrop && <div className="view-drop-target" />}
</div>
);
}
};
const target = {
drop(props, monitor) {
const sourceRow = monitor.getItem();
if (sourceRow.mode !== 'view') {
return;
}
const { targetFolderId, targetViewId } = props;
const sourceFolderId = sourceRow.folderId;
const draggedViewId = sourceRow.data.id;
if (draggedViewId !== targetViewId) {
props.onMoveView({
moved_view_id: draggedViewId,
target_view_id: targetViewId,
source_view_folder_id: sourceFolderId,
target_view_folder_id: targetFolderId,
move_position: 'move_above'
});
}
}
};
function collect(connect, monitor) {
return {
connectDropTarget: connect.dropTarget(),
isOver: monitor.isOver(),
canDrop: monitor.canDrop(),
draggedRow: monitor.getItem(),
};
}
class Placeholder extends React.Component {
static propTypes = {
key: PropTypes.string,
};
render() {
return (
<div key={this.props.key} style={{ height: 40, width: '100%' }}/>
);
}
}
export default DropTarget('ViewStructure', target, collect)(DropTargetTopView(Placeholder));