Skip to content

Commit 99b0c01

Browse files
hiepau1231claude
andcommitted
chore: fix lint warnings after metadata filter implementation
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 6c57afc commit 99b0c01

6 files changed

Lines changed: 54 additions & 35 deletions

File tree

ui/src/components/flags/FlagTable.test.tsx

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,23 @@
22
* @jest-environment jsdom
33
*/
44
import { configureStore } from '@reduxjs/toolkit';
5-
import { render, screen, fireEvent, act } from '@testing-library/react';
5+
import { act, fireEvent, render, screen } from '@testing-library/react';
66
import { Provider } from 'react-redux';
77
import { MemoryRouter } from 'react-router';
8+
89
import FlagTable from './FlagTable';
910

1011
// ── Mock Radix Popover (portal-based, doesn't render in jsdom) ────────────
1112
jest.mock('~/components/Popover', () => ({
12-
Popover: ({ children }: { children: React.ReactNode }) => <div>{children}</div>,
13-
PopoverTrigger: ({ children }: { children: React.ReactNode }) => <div>{children}</div>,
14-
PopoverContent: ({ children }: { children: React.ReactNode }) => <div>{children}</div>
13+
Popover: ({ children }: { children: React.ReactNode }) => (
14+
<div>{children}</div>
15+
),
16+
PopoverTrigger: ({ children }: { children: React.ReactNode }) => (
17+
<div>{children}</div>
18+
),
19+
PopoverContent: ({ children }: { children: React.ReactNode }) => (
20+
<div>{children}</div>
21+
)
1522
}));
1623

1724
// ── Mock RTK Query hooks (actual import paths from FlagTable.tsx) ─────────
@@ -75,7 +82,10 @@ function renderTable() {
7582
return render(
7683
<MemoryRouter>
7784
<Provider store={store}>
78-
<FlagTable environment={mockEnvironment as any} namespace={mockNamespace as any} />
85+
<FlagTable
86+
environment={mockEnvironment as any}
87+
namespace={mockNamespace as any}
88+
/>
7989
</Provider>
8090
</MemoryRouter>
8191
);
@@ -95,7 +105,9 @@ describe('FlagTable — metadata filter', () => {
95105

96106
it('renders Filter button in toolbar', () => {
97107
renderTable();
98-
expect(screen.getByRole('button', { name: /^filter$/i })).toBeInTheDocument();
108+
expect(
109+
screen.getByRole('button', { name: /^filter$/i })
110+
).toBeInTheDocument();
99111
});
100112

101113
it('adds a chip after applying a metadata filter', () => {

ui/src/components/flags/FlagTable.tsx

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import { DataTablePagination } from '~/components/TablePagination';
3737
import { TableSkeleton } from '~/components/TableSkeleton';
3838
import { DataTableViewOptions } from '~/components/TableViewOptions';
3939
import Well from '~/components/Well';
40+
import MetadataFilterPopover from '~/components/flags/MetadataFilterPopover';
4041

4142
import { IBatchFlagEvaluationCount } from '~/types/Analytics';
4243
import { IEnvironment } from '~/types/Environment';
@@ -47,8 +48,6 @@ import { useError } from '~/data/hooks/error';
4748
import { applyMetadataFilters } from '~/utils/flagMetadataFilter';
4849
import { cls } from '~/utils/helpers';
4950

50-
import MetadataFilterPopover from '~/components/flags/MetadataFilterPopover';
51-
5251
function VariantFlagBadge({ enabled }: { enabled: boolean }) {
5352
return (
5453
<div
@@ -338,9 +337,7 @@ export default function FlagTable(props: FlagTableProps) {
338337
<Searchbox value={filter ?? ''} onChange={setFilter} />
339338
<MetadataFilterPopover
340339
availableKeys={availableMetadataKeys}
341-
onAdd={(f) =>
342-
setMetadataFilters((prev) => [...prev, f])
343-
}
340+
onAdd={(f) => setMetadataFilters((prev) => [...prev, f])}
344341
/>
345342
</div>
346343
{hasFlags && <DataTableViewOptions table={table} />}
@@ -361,7 +358,9 @@ export default function FlagTable(props: FlagTableProps) {
361358
<button
362359
type="button"
363360
onClick={() =>
364-
setMetadataFilters((prev) => prev.filter((_, idx) => idx !== i))
361+
setMetadataFilters((prev) =>
362+
prev.filter((_, idx) => idx !== i)
363+
)
365364
}
366365
aria-label={`Remove filter ${f.key}:${f.value}`}
367366
className="ml-1 rounded-full hover:bg-muted p-0.5"
@@ -387,15 +386,15 @@ export default function FlagTable(props: FlagTableProps) {
387386
)}
388387
{table.getRowCount() === 0 &&
389388
(filter.length > 0 || metadataFilters.length > 0) && (
390-
<Well>
391-
<div className="flex flex-col items-center text-center p-4">
392-
<FlagIcon className="h-12 w-12 text-muted-foreground/30 mb-4" />
393-
<p className="text-sm text-muted-foreground">
394-
No flags matched your search
395-
</p>
396-
</div>
397-
</Well>
398-
)}
389+
<Well>
390+
<div className="flex flex-col items-center text-center p-4">
391+
<FlagIcon className="h-12 w-12 text-muted-foreground/30 mb-4" />
392+
<p className="text-sm text-muted-foreground">
393+
No flags matched your search
394+
</p>
395+
</div>
396+
</Well>
397+
)}
399398

400399
<div className="space-y-2">
401400
{table.getRowModel().rows.map((row) => {

ui/src/components/flags/MetadataFilterPopover.test.tsx

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,31 @@
11
/**
22
* @jest-environment jsdom
33
*/
4-
import { render, screen, fireEvent } from '@testing-library/react';
5-
import MetadataFilterPopover from './MetadataFilterPopover';
4+
import { fireEvent, render, screen } from '@testing-library/react';
5+
66
import { MetadataFilter } from '~/types/Flag';
77

8+
import MetadataFilterPopover from './MetadataFilterPopover';
9+
810
// Radix Popover uses portals. We mock it so the content always renders inline.
911
jest.mock('~/components/Popover', () => ({
10-
Popover: ({ children }: { children: React.ReactNode }) => <div>{children}</div>,
11-
PopoverTrigger: ({ children }: { children: React.ReactNode }) => <div>{children}</div>,
12-
PopoverContent: ({ children }: { children: React.ReactNode }) => <div>{children}</div>
12+
Popover: ({ children }: { children: React.ReactNode }) => (
13+
<div>{children}</div>
14+
),
15+
PopoverTrigger: ({ children }: { children: React.ReactNode }) => (
16+
<div>{children}</div>
17+
),
18+
PopoverContent: ({ children }: { children: React.ReactNode }) => (
19+
<div>{children}</div>
20+
)
1321
}));
1422

1523
describe('MetadataFilterPopover', () => {
1624
it('renders a "Filter" trigger button', () => {
1725
render(<MetadataFilterPopover availableKeys={[]} onAdd={jest.fn()} />);
18-
expect(screen.getByRole('button', { name: /^filter$/i })).toBeInTheDocument();
26+
expect(
27+
screen.getByRole('button', { name: /^filter$/i })
28+
).toBeInTheDocument();
1929
});
2030

2131
it('calls onAdd with the entered key and value when Add is clicked', () => {

ui/src/components/flags/MetadataFilterPopover.tsx

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,7 @@ import { useState } from 'react';
33

44
import { BaseInput } from '~/components/BaseInput';
55
import { Button } from '~/components/Button';
6-
import {
7-
Popover,
8-
PopoverContent,
9-
PopoverTrigger
10-
} from '~/components/Popover';
6+
import { Popover, PopoverContent, PopoverTrigger } from '~/components/Popover';
117

128
import { MetadataFilter } from '~/types/Flag';
139

ui/src/setupTests.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1+
// eslint-disable-next-line import/no-extraneous-dependencies
12
import '@testing-library/jest-dom';
2-
33
// Polyfill TextEncoder/TextDecoder for jest-environment-jsdom + react-router
4-
import { TextEncoder, TextDecoder } from 'util';
4+
import { TextDecoder, TextEncoder } from 'util';
5+
56
Object.assign(global, { TextEncoder, TextDecoder });

ui/src/utils/flagMetadataFilter.test.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
import { applyMetadataFilters } from './flagMetadataFilter';
21
import { FlagType, IFlag, MetadataFilter } from '~/types/Flag';
32

3+
import { applyMetadataFilters } from './flagMetadataFilter';
4+
45
const makeFlag = (key: string, metadata?: Record<string, any>): IFlag => ({
56
key,
67
name: key,

0 commit comments

Comments
 (0)