Skip to content

Commit 8041c3e

Browse files
committed
dissalow closing pinned tabs
1 parent 203aabd commit 8041c3e

File tree

3 files changed

+23
-10
lines changed

3 files changed

+23
-10
lines changed

src/components/Tabs/Tab.tsx

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,18 @@ import { MouseEventHandler } from "react";
44

55
export function Tab(props: {
66
tab: TabModel;
7+
isPinned: boolean;
78
isActive: boolean;
89
onClose?: (tab: TabModel) => void;
910
onActiveTabIdChange?: (id: string | undefined) => void;
1011
}) {
11-
const { tab, isActive, onClose = noop, onActiveTabIdChange = noop } = props;
12+
const {
13+
tab,
14+
isActive,
15+
onClose = noop,
16+
onActiveTabIdChange = noop,
17+
isPinned,
18+
} = props;
1219

1320
const className = ["tab", isActive && "active"].filter(Boolean).join(" ");
1421

@@ -24,9 +31,12 @@ export function Tab(props: {
2431
className={className}
2532
>
2633
{tab.title}
27-
<span className={"close-trigger"} onClick={handleClose}>
28-
x
29-
</span>
34+
35+
{!isPinned && (
36+
<span className={"close-trigger"} onClick={handleClose}>
37+
x
38+
</span>
39+
)}
3040
</div>
3141
);
3242
}

src/components/Tabs/Tabs.tsx

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ export function Tabs(props: TabsProps) {
4646
onActiveTabIdChange = noop,
4747
apiRef,
4848
activeTabId: activeTabIdProp,
49-
startPinnedTabs,
49+
startPinnedTabs: startPinnedTabsProp,
5050
hasControlledActiveTabId,
5151
tabs: tabsProp,
5252
onTabsChange,
@@ -108,7 +108,7 @@ export function Tabs(props: TabsProps) {
108108

109109
const closeTab = useCallback(
110110
(tab: TabModel) => {
111-
const { tabs, activeTabId: prevActiveId } = getState();
111+
const { tabs, activeTabId: prevActiveId, startPinnedTabs } = getState();
112112

113113
const prevActiveTab = tabs.find((tab) => tab.id === prevActiveId);
114114
const activeTab =
@@ -119,6 +119,7 @@ export function Tabs(props: TabsProps) {
119119
setState({
120120
tabs: updatedTabs,
121121
activeTabId: activeTab?.id,
122+
startPinnedTabs: startPinnedTabs.filter((id) => id !== tab.id),
122123
});
123124

124125
forceRerender();
@@ -171,7 +172,7 @@ export function Tabs(props: TabsProps) {
171172
getState,
172173
}));
173174

174-
const { tabs, activeTabId } = getState();
175+
const { tabs, activeTabId, startPinnedTabs } = getState();
175176

176177
const activeTab = tabs.find((tab) => tab.id === activeTabId);
177178

@@ -188,17 +189,18 @@ export function Tabs(props: TabsProps) {
188189
}, [tabsProp, setTabs]);
189190

190191
useEffect(() => {
191-
if (startPinnedTabs) {
192-
setStartPinnedTabs(startPinnedTabs, false);
192+
if (startPinnedTabsProp) {
193+
setStartPinnedTabs(startPinnedTabsProp, false);
193194
}
194-
}, [startPinnedTabs, setStartPinnedTabs]);
195+
}, [startPinnedTabsProp, setStartPinnedTabs]);
195196

196197
return (
197198
<div className="tabs">
198199
{tabs.map((tab) => (
199200
<Tab
200201
onActiveTabIdChange={onActiveTabIdChange}
201202
onClose={closeTab}
203+
isPinned={startPinnedTabs.includes(tab.id)}
202204
isActive={activeTab?.id === tab.id}
203205
tab={tab}
204206
key={tab.id}

src/routes/CategoriesRoute.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ export function CategoriesRoute() {
8787
activeTabId={activeTabId}
8888
onActiveTabIdChange={setActiveTabId}
8989
tabs={tabs}
90+
startPinnedTabs={startPinnedTabs}
9091
onTabsChange={setTabs}
9192
hasControlledActiveTabId
9293
onStartPinnedTabsChange={setStartPinnedTabsChange}

0 commit comments

Comments
 (0)