Skip to content

Commit aa82950

Browse files
refactor: rename FilterTabs to FilterOptions
1 parent dd49f80 commit aa82950

File tree

10 files changed

+59
-52
lines changed

10 files changed

+59
-52
lines changed

packages/toolbar/src/core/tests/FilterTabs.test.tsx renamed to packages/toolbar/src/core/tests/FilterOptions.test.tsx

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
1-
import { render, screen, fireEvent } from '@testing-library/react';
1+
import { render, screen } from '@testing-library/react';
22
import { expect, test, describe, vi } from 'vitest';
33

4-
import { FilterTabs, type FilterTabsProps } from '../ui/Toolbar/components/FilterTabs/FilterTabs';
5-
import { FilterTabsContext, type FilterMode } from '../ui/Toolbar/components/FilterTabs/useFilterTabsContext';
4+
import { FilterOptions, type FilterOptionsProps } from '../ui/Toolbar/components/FilterOptions/FilterOptions';
5+
import {
6+
FlagFilterOptionsContext,
7+
type FlagFilterMode,
8+
} from '../ui/Toolbar/components/FilterOptions/useFlagFilterOptions';
69

7-
describe('FilterTabs', () => {
8-
const defaultProps: FilterTabsProps = {
10+
describe('FilterOptions', () => {
11+
const defaultProps: FilterOptionsProps = {
912
totalFlags: 5,
1013
filteredFlags: 5,
1114
totalOverriddenFlags: 2,
@@ -15,15 +18,15 @@ describe('FilterTabs', () => {
1518
isLoading: false,
1619
};
1720

18-
const renderWithContext = (props: FilterTabsProps = defaultProps, activeFilter: FilterMode = 'all') => {
21+
const renderWithContext = (props: FilterOptionsProps = defaultProps, activeFilter: FlagFilterMode = 'all') => {
1922
const onFilterChange = vi.fn();
2023

2124
return {
2225
onFilterChange,
2326
...render(
24-
<FilterTabsContext.Provider value={{ activeFilter, onFilterChange }}>
25-
<FilterTabs {...props} />
26-
</FilterTabsContext.Provider>,
27+
<FlagFilterOptionsContext.Provider value={{ activeFilter, onFilterChange }}>
28+
<FilterOptions {...props} />
29+
</FlagFilterOptionsContext.Provider>,
2730
),
2831
};
2932
};

packages/toolbar/src/core/ui/Toolbar/TabContent/FlagDevServerTabContent.tsx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ import { BooleanFlagControl, MultivariateFlagControl, StringNumberFlagControl }
1010
import { OverrideIndicator } from '../components/OverrideIndicator';
1111
import { StarButton } from '../components/StarButton';
1212
import { useStarredFlags } from '../context/StarredFlagsProvider';
13-
import { type FilterMode, FilterTabsContext } from '../components/FilterTabs/useFilterTabsContext';
14-
import { FilterTabs } from '../components/FilterTabs/FilterTabs';
13+
import { type FlagFilterMode, FlagFilterOptionsContext } from '../components/FilterOptions/useFlagFilterOptions';
14+
import { FilterOptions } from '../components/FilterOptions/FilterOptions';
1515
import { VIRTUALIZATION } from '../constants';
1616

1717
import * as styles from './FlagDevServerTabContent.css';
@@ -28,7 +28,7 @@ export function FlagDevServerTabContent(props: FlagDevServerTabContentProps) {
2828
const { flags } = state;
2929
const { isStarred, toggleStarred, clearAllStarred, starredCount } = useStarredFlags();
3030

31-
const [activeFilter, setActiveFilter] = useState<FilterMode>('all');
31+
const [activeFilter, setActiveFilter] = useState<FlagFilterMode>('all');
3232
const parentRef = useRef<HTMLDivElement>(null);
3333

3434
const flagEntries = Object.entries(flags);
@@ -138,10 +138,10 @@ export function FlagDevServerTabContent(props: FlagDevServerTabContentProps) {
138138
const { title: genericHelpTitle, subtitle: genericHelpSubtitle } = getGenericHelpText();
139139

140140
return (
141-
<FilterTabsContext.Provider value={{ activeFilter, onFilterChange: setActiveFilter }}>
141+
<FlagFilterOptionsContext.Provider value={{ activeFilter, onFilterChange: setActiveFilter }}>
142142
<div data-testid="flag-dev-server-tab-content">
143143
<>
144-
<FilterTabs
144+
<FilterOptions
145145
totalFlags={flagEntries.length}
146146
filteredFlags={filteredFlags.length}
147147
totalOverriddenFlags={totalOverriddenFlags}
@@ -215,6 +215,6 @@ export function FlagDevServerTabContent(props: FlagDevServerTabContentProps) {
215215
)}
216216
</>
217217
</div>
218-
</FilterTabsContext.Provider>
218+
</FlagFilterOptionsContext.Provider>
219219
);
220220
}

packages/toolbar/src/core/ui/Toolbar/TabContent/FlagSdkOverrideTabContent.tsx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ import { LocalBooleanFlagControl, LocalStringNumberFlagControl } from '../compon
1010
import { OverrideIndicator } from '../components/OverrideIndicator';
1111
import { StarButton } from '../components/StarButton';
1212
import { useStarredFlags } from '../context/StarredFlagsProvider';
13-
import { type FilterMode, FilterTabsContext } from '../components/FilterTabs/useFilterTabsContext';
14-
import { FilterTabs } from '../components/FilterTabs/FilterTabs';
13+
import { type FlagFilterMode, FlagFilterOptionsContext } from '../components/FilterOptions/useFlagFilterOptions';
14+
import { FilterOptions } from '../components/FilterOptions/FilterOptions';
1515
import { VIRTUALIZATION } from '../constants';
1616
import { EASING } from '../constants/animations';
1717
import type { LocalFlag } from '../context';
@@ -31,7 +31,7 @@ function FlagSdkOverrideTabContentInner(props: FlagSdkOverrideTabContentInnerPro
3131
const analytics = useAnalytics();
3232
const { flags, isLoading } = useFlagSdkOverrideContext();
3333
const { isStarred, toggleStarred, clearAllStarred, starredCount } = useStarredFlags();
34-
const [activeFilter, setActiveFilter] = useState<FilterMode>('all');
34+
const [activeFilter, setActiveFilter] = useState<FlagFilterMode>('all');
3535
const parentRef = useRef<HTMLDivElement>(null);
3636

3737
const handleClearOverride = useCallback(
@@ -176,10 +176,10 @@ function FlagSdkOverrideTabContentInner(props: FlagSdkOverrideTabContentInnerPro
176176
const { title: genericHelpTitle, subtitle: genericHelpSubtitle } = getGenericHelpText();
177177

178178
return (
179-
<FilterTabsContext.Provider value={{ activeFilter, onFilterChange: setActiveFilter }}>
179+
<FlagFilterOptionsContext.Provider value={{ activeFilter, onFilterChange: setActiveFilter }}>
180180
<div data-testid="flag-sdk-tab-content">
181181
<>
182-
<FilterTabs
182+
<FilterOptions
183183
totalFlags={flagEntries.length}
184184
filteredFlags={filteredFlags.length}
185185
totalOverriddenFlags={totalOverriddenFlags}
@@ -273,7 +273,7 @@ function FlagSdkOverrideTabContentInner(props: FlagSdkOverrideTabContentInnerPro
273273
)}
274274
</>
275275
</div>
276-
</FilterTabsContext.Provider>
276+
</FlagFilterOptionsContext.Provider>
277277
);
278278
}
279279

packages/toolbar/src/core/ui/Toolbar/components/FilterTabs/FilterTabs.css.ts renamed to packages/toolbar/src/core/ui/Toolbar/components/FilterOptions/FilterOptions.css.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ export const bottomRow = style({
2121
gap: '12px',
2222
});
2323

24-
export const tab = style({
24+
export const option = style({
2525
background: 'transparent',
2626
border: '1px solid var(--lp-color-gray-600)',
2727
color: 'var(--lp-color-gray-200)',
@@ -50,7 +50,7 @@ export const tab = style({
5050
},
5151
});
5252

53-
export const activeTab = style({
53+
export const activeOption = style({
5454
background: '#283050',
5555
borderColor: '#6A78D1',
5656
color: 'white',

packages/toolbar/src/core/ui/Toolbar/components/FilterTabs/FilterTabs.tsx renamed to packages/toolbar/src/core/ui/Toolbar/components/FilterOptions/FilterOptions.tsx

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
1-
import { useFilterTabsContext, type FilterMode } from './useFilterTabsContext';
1+
import { useFlagFilterOptions, type FlagFilterMode } from './useFlagFilterOptions';
22
import { ClearButton } from './ClearButton';
3-
import * as styles from './FilterTabs.css';
3+
import * as styles from './FilterOptions.css';
44

5-
const FILTER_TABS = [
5+
const FILTER_OPTIONS = [
66
{ id: 'all' as const, label: 'All' },
77
{ id: 'overrides' as const, label: 'Overrides' },
88
{ id: 'starred' as const, label: 'Starred' },
9-
] satisfies { id: FilterMode; label: string }[];
9+
] satisfies { id: FlagFilterMode; label: string }[];
1010

11-
export interface FilterTabsProps {
11+
export interface FilterOptionsProps {
1212
totalFlags: number;
1313
filteredFlags: number;
1414
totalOverriddenFlags: number;
@@ -18,10 +18,10 @@ export interface FilterTabsProps {
1818
isLoading?: boolean;
1919
}
2020

21-
export function FilterTabs(props: FilterTabsProps) {
21+
export function FilterOptions(props: FilterOptionsProps) {
2222
const { totalFlags, filteredFlags, totalOverriddenFlags, starredCount, onClearOverrides, onClearStarred, isLoading } =
2323
props;
24-
const { activeFilter, onFilterChange } = useFilterTabsContext();
24+
const { activeFilter, onFilterChange } = useFlagFilterOptions();
2525

2626
const isAllActive = activeFilter === 'all';
2727
const isOverridesActive = activeFilter === 'overrides';
@@ -30,12 +30,12 @@ export function FilterTabs(props: FilterTabsProps) {
3030
return (
3131
<div className={styles.container}>
3232
<div className={styles.topRow}>
33-
{FILTER_TABS.map((filter) => {
33+
{FILTER_OPTIONS.map((filter) => {
3434
const isActive = activeFilter === filter.id;
3535
return (
3636
<button
3737
key={filter.id}
38-
className={`${styles.tab} ${isActive ? styles.activeTab : ''}`}
38+
className={`${styles.option} ${isActive ? styles.activeOption : ''}`}
3939
onClick={() => onFilterChange(filter.id)}
4040
data-active={isActive}
4141
aria-label={`Show ${filter.label.toLowerCase()} flags`}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { createContext, useContext } from 'react';
2+
3+
export type FlagFilterMode = 'all' | 'overrides' | 'starred';
4+
5+
interface FlagFilterOptionsContextType {
6+
activeFilter: FlagFilterMode;
7+
onFilterChange: (filter: FlagFilterMode) => void;
8+
}
9+
10+
export const FlagFilterOptionsContext = createContext<FlagFilterOptionsContextType | undefined>(undefined);
11+
12+
export const useFlagFilterOptions = () => {
13+
const context = useContext(FlagFilterOptionsContext);
14+
if (!context) {
15+
throw new Error('useFlagFilterOptions must be used within a FlagFilterOptionsContext.Provider');
16+
}
17+
return context;
18+
};

packages/toolbar/src/core/ui/Toolbar/components/FilterTabs/useFilterTabsContext.ts

Lines changed: 0 additions & 18 deletions
This file was deleted.

packages/toolbar/src/core/ui/Toolbar/components/index.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,9 @@ export { LaunchDarklyIcon } from './icons/LaunchDarklyIcon';
77
export { StatusDot } from './StatusDot';
88
export { TabContentRenderer } from './TabContentRenderer';
99
export { ErrorMessage } from './ErrorMessage';
10-
export { type FilterMode, FilterTabsContext, useFilterTabsContext } from './FilterTabs/useFilterTabsContext';
11-
export { FilterTabs } from './FilterTabs/FilterTabs';
10+
export {
11+
type FlagFilterMode,
12+
FlagFilterOptionsContext,
13+
useFlagFilterOptions,
14+
} from './FilterOptions/useFlagFilterOptions';
15+
export { FilterOptions } from './FilterOptions/FilterOptions';

0 commit comments

Comments
 (0)