Drag and Drop Import (#95)
* Drag and drop files into collection first pass * Allow import of sub documents Fix up UI styles * Import Loading indicator * Drag onto document to import
This commit is contained in:
@@ -2,8 +2,9 @@
|
||||
import React from 'react';
|
||||
import Flex from 'components/Flex';
|
||||
import styled from 'styled-components';
|
||||
|
||||
import { layout } from 'styles/constants';
|
||||
import SidebarLink from '../SidebarLink';
|
||||
import DropToImport from 'components/DropToImport';
|
||||
|
||||
import Collection from 'models/Collection';
|
||||
import Document from 'models/Document';
|
||||
@@ -12,24 +13,39 @@ import type { NavigationNode } from 'types';
|
||||
type Props = {
|
||||
collection: ?Collection,
|
||||
document: ?Document,
|
||||
history: Object,
|
||||
};
|
||||
|
||||
const activeStyle = {
|
||||
color: '#000',
|
||||
background: '#E1E1E1',
|
||||
};
|
||||
|
||||
class SidebarCollection extends React.Component {
|
||||
props: Props;
|
||||
|
||||
renderDocuments(documentList: Array<NavigationNode>) {
|
||||
const { document } = this.props;
|
||||
renderDocuments(documentList: Array<NavigationNode>, depth = 0) {
|
||||
const { document, history } = this.props;
|
||||
const canDropToImport = depth === 0;
|
||||
|
||||
if (document) {
|
||||
return documentList.map(doc => (
|
||||
<Flex column key={doc.id}>
|
||||
<SidebarLink key={doc.id} to={doc.url}>
|
||||
{doc.title}
|
||||
</SidebarLink>
|
||||
{canDropToImport &&
|
||||
<DropToImport
|
||||
history={history}
|
||||
documentId={doc.id}
|
||||
activeStyle={activeStyle}
|
||||
>
|
||||
<SidebarLink to={doc.url}>{doc.title}</SidebarLink>
|
||||
</DropToImport>}
|
||||
{!canDropToImport &&
|
||||
<SidebarLink to={doc.url}>{doc.title}</SidebarLink>}
|
||||
|
||||
{(document.pathToDocument.includes(doc.id) ||
|
||||
document.id === doc.id) &&
|
||||
<Children column>
|
||||
{doc.children && this.renderDocuments(doc.children)}
|
||||
{doc.children && this.renderDocuments(doc.children, depth + 1)}
|
||||
</Children>}
|
||||
</Flex>
|
||||
));
|
||||
@@ -57,6 +73,7 @@ const Header = styled(Flex)`
|
||||
text-transform: uppercase;
|
||||
color: #9FA6AB;
|
||||
letter-spacing: 0.04em;
|
||||
padding: 0 ${layout.hpadding};
|
||||
`;
|
||||
|
||||
const Children = styled(Flex)`
|
||||
|
||||
@@ -3,23 +3,37 @@ import React from 'react';
|
||||
import { observer, inject } from 'mobx-react';
|
||||
import Flex from 'components/Flex';
|
||||
import styled from 'styled-components';
|
||||
import { layout } from 'styles/constants';
|
||||
|
||||
import SidebarLink from '../SidebarLink';
|
||||
import DropToImport from 'components/DropToImport';
|
||||
|
||||
import CollectionsStore from 'stores/CollectionsStore';
|
||||
|
||||
type Props = {
|
||||
history: Object,
|
||||
collections: CollectionsStore,
|
||||
};
|
||||
|
||||
const SidebarCollectionList = observer(({ collections }: Props) => {
|
||||
const activeStyle = {
|
||||
color: '#000',
|
||||
background: '#E1E1E1',
|
||||
};
|
||||
|
||||
const SidebarCollectionList = observer(({ history, collections }: Props) => {
|
||||
return (
|
||||
<Flex column>
|
||||
<Header>Collections</Header>
|
||||
{collections.data.map(collection => (
|
||||
<SidebarLink key={collection.id} to={collection.url}>
|
||||
{collection.name}
|
||||
</SidebarLink>
|
||||
<DropToImport
|
||||
history={history}
|
||||
collectionId={collection.id}
|
||||
activeStyle={activeStyle}
|
||||
>
|
||||
<SidebarLink key={collection.id} to={collection.url}>
|
||||
{collection.name}
|
||||
</SidebarLink>
|
||||
</DropToImport>
|
||||
))}
|
||||
</Flex>
|
||||
);
|
||||
@@ -31,6 +45,7 @@ const Header = styled(Flex)`
|
||||
text-transform: uppercase;
|
||||
color: #9FA6AB;
|
||||
letter-spacing: 0.04em;
|
||||
padding: 0 ${layout.hpadding};
|
||||
`;
|
||||
|
||||
export default inject('collections')(SidebarCollectionList);
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
// @flow
|
||||
import React from 'react';
|
||||
import { NavLink } from 'react-router-dom';
|
||||
import Flex from 'components/Flex';
|
||||
import { layout, color } from 'styles/constants';
|
||||
import { darken } from 'polished';
|
||||
import styled from 'styled-components';
|
||||
|
||||
const activeStyle = {
|
||||
@@ -9,18 +10,16 @@ const activeStyle = {
|
||||
};
|
||||
|
||||
function SidebarLink(props: Object) {
|
||||
return (
|
||||
<LinkContainer>
|
||||
<NavLink exact {...props} activeStyle={activeStyle} />
|
||||
</LinkContainer>
|
||||
);
|
||||
return <StyledNavLink exact {...props} activeStyle={activeStyle} />;
|
||||
}
|
||||
|
||||
const LinkContainer = styled(Flex)`
|
||||
padding: 5px 0;
|
||||
const StyledNavLink = styled(NavLink)`
|
||||
display: block;
|
||||
padding: 5px ${layout.hpadding};
|
||||
color: ${color.slateDark};
|
||||
|
||||
a {
|
||||
color: #848484;
|
||||
&:hover {
|
||||
color: ${darken(0.1, color.slateDark)};
|
||||
}
|
||||
`;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user