Skip to content

Commit fbd8e27

Browse files
committed
1.10.0
1 parent bca0078 commit fbd8e27

File tree

8 files changed

+146
-105
lines changed

8 files changed

+146
-105
lines changed

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,13 @@ Please provide valuable feedback by:
1717
- Creating a [new issue](https://github.com/lxieyang/vertical-tabs-chrome-extension/issues/new)
1818
1919

20+
### [1.10.0](https://github.com/lxieyang/vertical-tabs-chrome-extension/releases/tag/v1.10.0) (2021-10-18)
21+
22+
#### New Features
23+
24+
- Bug fixes
25+
- Smoother drag experience
26+
2027
### [1.9.1](https://github.com/lxieyang/vertical-tabs-chrome-extension/releases/tag/v1.9.1) (2021-10-17)
2128

2229
#### New Features

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "vertical-tabs-chrome-extension",
3-
"version": "1.9.2",
3+
"version": "1.10.0",
44
"description": "A chrome extension that presents your tabs vertically.",
55
"license": "MIT",
66
"repository": {

src/pages/Sidebar/Sidebar.jsx

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -30,14 +30,14 @@ class Sidebar extends Component {
3030
this.tabUpdatedHandler = this.handleTabUpdated.bind(this);
3131
this.tabMovedHandler = this.handleTabMoved.bind(this);
3232
this.tabActivatedHandler = this.handleTabActivated.bind(this);
33-
this.tabHighlightedHandler = this.handleTabHighlighted.bind(this);
33+
// this.tabHighlightedHandler = this.handleTabHighlighted.bind(this);
3434

3535
chrome.tabs.onCreated.addListener(this.tabCreatedHandler);
3636
chrome.tabs.onRemoved.addListener(this.tabRemovedHandler);
3737
chrome.tabs.onUpdated.addListener(this.tabUpdatedHandler);
3838
chrome.tabs.onMoved.addListener(this.tabMovedHandler);
3939
chrome.tabs.onActivated.addListener(this.tabActivatedHandler);
40-
chrome.tabs.onHighlighted.addListener(this.tabHighlightedHandler);
40+
// chrome.tabs.onHighlighted.addListener(this.tabHighlightedHandler);
4141
}
4242

4343
componentDidMount() {
@@ -85,7 +85,7 @@ class Sidebar extends Component {
8585
chrome.tabs.onUpdated.removeListener(this.tabUpdatedHandler);
8686
chrome.tabs.onMoved.removeListener(this.tabMovedHandler);
8787
chrome.tabs.onActivated.removeListener(this.tabActivatedHandler);
88-
chrome.tabs.onHighlighted.removeListener(this.tabHighlightedHandler);
88+
// chrome.tabs.onHighlighted.removeListener(this.tabHighlightedHandler);
8989

9090
window.removeEventListener('scroll', this.handleScroll);
9191
}
@@ -140,7 +140,7 @@ class Sidebar extends Component {
140140
window.clearTimeout(this.isScrolling);
141141

142142
// Set a timeout to run after scrolling ends
143-
this.isScrolling = setTimeout(function() {
143+
this.isScrolling = setTimeout(function () {
144144
chrome.runtime.sendMessage({
145145
from: 'sidebar',
146146
msg: 'SIDEBAR_SCROLL_POSITION_CHANGED',
@@ -244,16 +244,20 @@ class Sidebar extends Component {
244244
this.updateTabOrders();
245245
};
246246

247-
handleTabHighlighted = (highlightInfo) => {};
248-
249-
moveTab = (dragIndex, hoverIndex) => {
250-
const dragTab = this.state.tabOrders[dragIndex];
251-
this.setState({
252-
tabOrders: update(this.state.tabOrders, {
253-
$splice: [[dragIndex, 1], [hoverIndex, 0, dragTab]],
254-
}),
255-
});
256-
};
247+
// handleTabHighlighted = (highlightInfo) => {
248+
// };
249+
250+
// moveTab = (dragIndex, hoverIndex) => {
251+
// const dragTab = this.state.tabOrders[dragIndex];
252+
// this.setState({
253+
// tabOrders: update(this.state.tabOrders, {
254+
// $splice: [
255+
// [dragIndex, 1],
256+
// [hoverIndex, 0, dragTab],
257+
// ],
258+
// }),
259+
// });
260+
// };
257261

258262
setDisplayTabInFull = (toStatus) => {
259263
this.setState({ displayTabInFull: toStatus });
@@ -275,10 +279,13 @@ class Sidebar extends Component {
275279
<Title setDisplayTabInFull={this.setDisplayTabInFull} />
276280
<TabsList
277281
displayTabInFull={displayTabInFull}
278-
tabOrders={tabOrders}
282+
tabOrders={tabOrders
283+
.filter(({ id }) => tabsDict[id] !== undefined)
284+
.map((tabOrder) => ({
285+
...tabOrder,
286+
...tabsDict[tabOrder.id],
287+
}))}
279288
activeTab={activeTab}
280-
tabsDict={tabsDict}
281-
moveTab={this.moveTab}
282289
setTabAsLoading={this.setTabAsLoading}
283290
/>
284291
{/* <UpdateNotice /> */}

src/pages/Sidebar/containers/TabsList/Tab/Tab.css

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,8 @@
169169
}
170170

171171
.blink {
172-
animation: blinker 1.2s linear infinite;
172+
opacity: 0;
173+
/* animation: blinker 1.2s linear infinite; */
173174
}
174175

175176
@keyframes blinker {

src/pages/Sidebar/containers/TabsList/Tab/Tab.jsx

Lines changed: 38 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { useRef, useContext } from 'react';
1+
import React, { useRef, useContext, memo } from 'react';
22
import classNames from 'classnames';
33
import DarkModeContext from '../../../context/dark-mode-context';
44
import Loader from 'react-loader-spinner';
@@ -40,6 +40,7 @@ const Tab = ({
4040
displayTabInFull,
4141
contextMenuShow,
4242
contextMenuShowPrev,
43+
findTab,
4344
moveTab,
4445
setTabAsLoading,
4546
isSearching,
@@ -58,47 +59,41 @@ const Tab = ({
5859
const darkModeContext = useContext(DarkModeContext);
5960
const { isDark } = darkModeContext;
6061

61-
const [, drop] = useDrop(() => ({
62-
accept: ItemTypes.TABCARD,
63-
hover(item, monitor) {
64-
if (!ref.current) {
65-
return;
66-
}
67-
68-
const dragIndex = item.idx;
69-
const hoverIndex = idx;
70-
if (dragIndex === hoverIndex) {
71-
return;
72-
}
73-
const hoverBoundingRect = ref.current.getBoundingClientRect();
74-
const hoverMiddleY =
75-
(hoverBoundingRect.bottom - hoverBoundingRect.top) / 2;
76-
const clientOffset = monitor.getClientOffset();
77-
const hoverClientY = clientOffset.y - hoverBoundingRect.top;
78-
if (dragIndex < hoverIndex && hoverClientY < hoverMiddleY) {
79-
return;
80-
}
81-
if (dragIndex > hoverIndex && hoverClientY > hoverMiddleY) {
82-
return;
83-
}
84-
moveTab(dragIndex, hoverIndex);
85-
item.idx = hoverIndex;
86-
},
87-
}));
62+
const originalIndex = findTab(id).index;
63+
const [{ isDragging }, drag] = useDrag(
64+
() => ({
65+
type: ItemTypes.TABCARD,
66+
item: { id, originalIndex },
67+
collect: (monitor) => ({
68+
isDragging: monitor.isDragging(),
69+
}),
70+
end: (item, monitor) => {
71+
const { id: droppedId, originalIndex } = item;
72+
const { index: overIndex } = findTab(droppedId);
73+
const didDrop = monitor.didDrop();
74+
if (!didDrop) {
75+
moveTab(droppedId, originalIndex);
76+
} else {
77+
moveTabToIndex(id, overIndex);
78+
}
79+
},
80+
}),
81+
[id, originalIndex, moveTab]
82+
);
8883

89-
const [{ isDragging }, drag] = useDrag(() => ({
90-
type: ItemTypes.TABCARD,
91-
item: { id, idx },
92-
end: (item, monitor) => {
93-
moveTabToIndex(id, item.idx);
94-
},
95-
canDrag(monitor) {
96-
return !isSearching;
97-
},
98-
collect: (monitor) => ({
99-
isDragging: monitor.isDragging(),
84+
const [, drop] = useDrop(
85+
() => ({
86+
accept: ItemTypes.TABCARD,
87+
canDrop: () => false,
88+
hover({ id: draggedId, originalIndex: draggedIndex }) {
89+
if (draggedId !== id) {
90+
const { index: overIndex } = findTab(id);
91+
moveTab(draggedId, overIndex);
92+
}
93+
},
10094
}),
101-
}));
95+
[findTab, moveTab]
96+
);
10297

10398
drag(drop(ref));
10499
/* End of --> Drag and Drop support */
@@ -158,7 +153,7 @@ const Tab = ({
158153
<ContextMenuTrigger id={id.toString()} holdToDisplay={-1}>
159154
<li
160155
// style={{ opacity: isDragging ? 0 : 1 }}
161-
ref={ref}
156+
162157
title={`${title}\n\n${url}`}
163158
className={classNames({
164159
TabItem: true,
@@ -192,6 +187,7 @@ const Tab = ({
192187
}}
193188
>
194189
<div
190+
ref={ref}
195191
className={classNames({
196192
TabContainer: true,
197193
isPinned: pinned,
@@ -381,4 +377,4 @@ const Tab = ({
381377
);
382378
};
383379

384-
export default Tab;
380+
export default memo(Tab);

0 commit comments

Comments
 (0)