|
1 | 1 | import React, { FC } from 'react';
|
2 |
| -import { useListStore } from '../../controllers/network'; |
| 2 | +import { useListStore } from 'controllers/network'; |
3 | 3 | import { useDrop } from 'react-dnd';
|
4 | 4 | import { NativeTypes } from 'react-dnd-html5-backend';
|
5 |
| -import { isFileSupported, parseFile } from '../../controllers/file'; |
| 5 | +import { isFileSupported, parseFile } from 'controllers/file'; |
6 | 6 | import { Har } from 'har-format';
|
7 | 7 | import NetworkItem from '../../models/NetworkItem';
|
8 | 8 | import cn from 'classnames';
|
9 | 9 | import { createUseStyles } from 'react-jss';
|
10 | 10 | import ContentOnlyItem from '../../models/ContentOnlyItem';
|
11 |
| -import { ItemType } from '../../models/types'; |
| 11 | +import { ItemType } from 'models/types'; |
12 | 12 | import TransactionItem from '../../models/TransactionItem';
|
13 | 13 | import { toast } from 'react-toastify';
|
14 |
| -import { callParentVoid } from '../../utils'; |
| 14 | +import { callParentVoid } from 'utils'; |
15 | 15 | import WebSocketItem from '../../models/WebSocketItem';
|
16 |
| -import { i18n } from '../../translations/i18n'; |
| 16 | +import { i18n } from 'translations/i18n'; |
| 17 | +import largeIcons from 'icons/largeIcons.svg'; |
| 18 | +import { ICONS } from 'components/IconButton'; |
| 19 | +import { Theme } from 'theme/types'; |
17 | 20 |
|
18 |
| -const useStyles = createUseStyles({ |
| 21 | +const useStyles = createUseStyles<Theme>((theme) => ({ |
19 | 22 | dropZone: {
|
20 | 23 | height: '100%',
|
21 | 24 | width: '100%',
|
22 | 25 | boxSizing: 'border-box',
|
23 |
| - overflow: 'auto', |
24 |
| - border: '4px solid transparent' |
| 26 | + overflow: 'auto' |
25 | 27 | },
|
26 |
| - dropZoneActive: { |
27 |
| - border: '4px dashed #ccc' |
| 28 | + overlay: { |
| 29 | + backgroundColor: 'rgba(0, 0, 0, 0.1)', |
| 30 | + position: 'fixed', |
| 31 | + top: 0, |
| 32 | + bottom: 0, |
| 33 | + left: 0, |
| 34 | + right: 0, |
| 35 | + display: 'flex', |
| 36 | + flexDirection: 'column', |
| 37 | + justifyContent: 'center', |
| 38 | + alignItems: 'center', |
| 39 | + fontSize: '2em', |
| 40 | + backdropFilter: 'blur(2px)' |
| 41 | + }, |
| 42 | + icon: { |
| 43 | + backgroundColor: theme.icon.normal, |
| 44 | + width: '21px', |
| 45 | + height: '24px', |
| 46 | + scale: 3, |
| 47 | + transform: 'translateY(-4px)', |
| 48 | + '-webkit-mask-position': ICONS.drop as `${number}px ${number}px`, |
| 49 | + '-webkit-mask-image': `url(${largeIcons})` |
28 | 50 | }
|
29 |
| -}); |
| 51 | +})); |
30 | 52 |
|
31 | 53 | export const DropContainer: FC = ({ children }) => {
|
32 | 54 | const styles = useStyles();
|
@@ -105,10 +127,15 @@ export const DropContainer: FC = ({ children }) => {
|
105 | 127 | <div
|
106 | 128 | ref={dropRef}
|
107 | 129 | className={cn({
|
108 |
| - [styles.dropZone]: true, |
109 |
| - [styles.dropZoneActive]: canDrop && isOver |
| 130 | + [styles.dropZone]: true |
110 | 131 | })}>
|
111 | 132 | {children}
|
| 133 | + {canDrop && isOver && ( |
| 134 | + <div className={styles.overlay}> |
| 135 | + <div className={styles.icon} /> |
| 136 | + {i18n.t('drop')} |
| 137 | + </div> |
| 138 | + )} |
112 | 139 | </div>
|
113 | 140 | );
|
114 | 141 | };
|
0 commit comments