Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 3 additions & 4 deletions newswires/client/src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -64,13 +64,12 @@ export function App() {
const { preset, supplier } = config.query;

const displayPreset = !!preset;
const displaySuppliers = !!supplier && supplier.length > 0;
const displaySuppliers = supplier.length > 0;

if (displayPreset || displaySuppliers) {
const newswiresPrefix = !isTickerView ? 'Newswires -- ' : '';
const titlePrefix = supplier!.length == 1 ? `${supplier![0]} ` : '';
const titlePostfix =
supplier!.length > 1 ? ` ${supplier!.join(', ')}` : '';
const titlePrefix = supplier.length == 1 ? `${supplier[0]} ` : '';
const titlePostfix = supplier.length > 1 ? ` ${supplier.join(', ')}` : '';

document.title = `${newswiresPrefix}${titlePrefix}${preset ? `${presetLabel(preset).toUpperCase()}` : ''}${titlePostfix}`;
} else {
Expand Down
58 changes: 27 additions & 31 deletions newswires/client/src/SearchSummary.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ const SummaryBadge = ({
case 'keywordExcl':
handleEnterQuery({
...config.query,
[key]: (config.query[key] ?? []).filter((s: string) => s !== value),
[key]: config.query[key].filter((s: string) => s !== value),
});
break;
}
Expand Down Expand Up @@ -113,11 +113,11 @@ const Summary = ({
hasDataFormatting,
} = query;

const displayCategoryCodes = (categoryCode ?? []).length > 0;
const displayExcludedCategoryCodes = (categoryCodeExcl ?? []).length > 0;
const displaySuppliers = (suppliers ?? []).length > 0;
const displayKeywords = (query.keyword ?? []).length > 0;
const displayExcludedKeywords = (query.keywordExcl ?? []).length > 0;
const displayCategoryCodes = categoryCode.length > 0;
const displayExcludedCategoryCodes = categoryCodeExcl.length > 0;
const displaySuppliers = suppliers.length > 0;
const displayKeywords = query.keyword.length > 0;
const displayExcludedKeywords = query.keywordExcl.length > 0;

const displayFilters: boolean =
!!q ||
Expand Down Expand Up @@ -162,37 +162,33 @@ const Summary = ({
/>
)}

{suppliers?.map((supplier) => (
{suppliers.map((supplier) => (
<SummaryBadge
key={supplier}
queryParamKey="supplier"
value={supplier}
/>
))}
{displayCategoryCodes &&
categoryCode?.map((code) => (
<SummaryBadge key={code} queryParamKey="categoryCode" value={code} />
))}
{displayExcludedCategoryCodes &&
categoryCodeExcl?.map((code) => (
<SummaryBadge
key={code}
queryParamKey="categoryCodeExcl"
value={code}
/>
))}
{displayKeywords &&
query.keyword?.map((keyword) => (
<SummaryBadge key={keyword} queryParamKey="keyword" value={keyword} />
))}
{displayExcludedKeywords &&
query.keywordExcl?.map((keyword) => (
<SummaryBadge
key={keyword}
queryParamKey="keywordExcl"
value={keyword}
/>
))}
{categoryCode.map((code) => (
<SummaryBadge key={code} queryParamKey="categoryCode" value={code} />
))}
{categoryCodeExcl.map((code) => (
<SummaryBadge
key={code}
queryParamKey="categoryCodeExcl"
value={code}
/>
))}
{query.keyword.map((keyword) => (
<SummaryBadge key={keyword} queryParamKey="keyword" value={keyword} />
))}
{query.keywordExcl.map((keyword) => (
<SummaryBadge
key={keyword}
queryParamKey="keywordExcl"
value={keyword}
/>
))}
{hasDataFormatting !== undefined && (
<SummaryBadge
queryParamKey="hasDataFormatting"
Expand Down
7 changes: 4 additions & 3 deletions newswires/client/src/SideNav/SideNav.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@ import { SideNavListItem } from './SideNavListItem.tsx';

function decideLabelForQueryBadge(query: Query): string {
const { supplier, q, preset, categoryCode, dateRange } = query;
const supplierLabel = supplier?.join(', ') ?? '';
const categoryCodesLabel = categoryCode?.join(', ') ?? '';
const supplierLabel = supplier.join(', ');
const categoryCodesLabel = categoryCode.join(', ');
const qLabel = q.length > 0 ? `"${q}"` : '';
const presetLabel = preset ? `[${presetName(preset)}]` : '';
const dateRangeLabel = dateRange
Expand Down Expand Up @@ -71,13 +71,14 @@ export const SideNav = ({
config,
handleEnterQuery,
toggleAutoUpdate,
activeSuppliers,
toggleSupplier,
openTicker,
} = useSearch();

const { euiTheme } = useEuiTheme();

const activeSuppliers = config.query.supplier;

const isPoppedOut = config.ticker;

const searchHistory = state.successfulQueryHistory;
Expand Down
8 changes: 4 additions & 4 deletions newswires/client/src/WireDetail.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ function CategoryCodeTable({ categoryCodes }: { categoryCodes: string[] }) {
const { handleEnterQuery, config } = useSearch();

const isCodeInSearch = (code: string) => {
const categoryCodesInSearch = config.query.categoryCode ?? [];
const categoryCodesInSearch = config.query.categoryCode;
return categoryCodesInSearch.includes(code);
};

Expand All @@ -119,7 +119,7 @@ function CategoryCodeTable({ categoryCodes }: { categoryCodes: string[] }) {
);

const handleCategoryClick = (categoryCode: string) => {
const codes = config.query.categoryCode ?? [];
const codes = config.query.categoryCode;
handleEnterQuery({
...config.query,
categoryCode: codes.includes(categoryCode)
Expand Down Expand Up @@ -186,7 +186,7 @@ function GeographyCodeTable({ categoryCodes }: { categoryCodes: string[] }) {
const { handleEnterQuery, config } = useSearch();

const isCodeInSearch = (code: string) => {
const categoryCodesInSearch = config.query.categoryCode ?? [];
const categoryCodesInSearch = config.query.categoryCode;
return categoryCodesInSearch.includes(code);
};

Expand All @@ -199,7 +199,7 @@ function GeographyCodeTable({ categoryCodes }: { categoryCodes: string[] }) {
);

const handleCategoryClick = (categoryCode: string) => {
const codes = config.query.categoryCode ?? [];
const codes = config.query.categoryCode;
handleEnterQuery({
...config.query,
categoryCode: codes.includes(categoryCode)
Expand Down
3 changes: 3 additions & 0 deletions newswires/client/src/context/SearchContext.test.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { act, render } from '@testing-library/react';
import type { Query } from '../sharedTypes.ts';
import { disableLogs, flushPendingPromises } from '../tests/testHelpers.ts';
import { defaultQuery } from '../urlState.ts';
import type { SearchContextShape } from './SearchContext.tsx';
import { SearchContextProvider, useSearch } from './SearchContext.tsx';
import { TelemetryContextProvider } from './TelemetryContext.tsx';
Expand Down Expand Up @@ -76,6 +77,7 @@ describe('SearchContext', () => {
}

const q: Query = {
...defaultQuery,
q: 'text search term',
supplier: ['A', 'B'],
};
Expand Down Expand Up @@ -105,6 +107,7 @@ describe('SearchContext', () => {
'popout=true,width=400,height=800,top=200,location=no,menubar=no,toolbar=no';

const q: Query = {
...defaultQuery,
q: 'text search term',
supplier: ['A', 'B'],
};
Expand Down
12 changes: 3 additions & 9 deletions newswires/client/src/context/SearchContext.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import {
useCallback,
useContext,
useEffect,
useMemo,
useReducer,
useState,
} from 'react';
Expand Down Expand Up @@ -128,7 +127,6 @@ export type SearchContextShape = {
toggleAutoUpdate: () => void;
openTicker: (query: Query) => void;
loadMoreResults: (beforeId: string) => Promise<void>;
activeSuppliers: string[];
toggleSupplier: (supplier: string) => void;
};
export const SearchContext: Context<SearchContextShape | null> =
Expand Down Expand Up @@ -446,13 +444,10 @@ export function SearchContextProvider({ children }: PropsWithChildren) {
);
};

const activeSuppliers = useMemo(
() => currentConfig.query.supplier ?? [],
[currentConfig.query.supplier],
);

const toggleSupplier = useCallback(
(supplier: string) => {
const activeSuppliers = currentConfig.query.supplier;

// If 'activeSuppliers' is empty, that means that *all* suppliers are active.
if (activeSuppliers.length === 0) {
handleEnterQuery({
Expand All @@ -474,7 +469,7 @@ export function SearchContextProvider({ children }: PropsWithChildren) {
: newSuppliers,
});
},
[currentConfig.query, handleEnterQuery, activeSuppliers],
[currentConfig.query, handleEnterQuery],
);

return (
Expand All @@ -492,7 +487,6 @@ export function SearchContextProvider({ children }: PropsWithChildren) {
loadMoreResults,
viewedItemIds,
previousItemId,
activeSuppliers,
toggleSupplier,
openTicker,
}}
Expand Down
15 changes: 12 additions & 3 deletions newswires/client/src/context/SearchReducer.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import dateMath from '@elastic/datemath';
import moment from 'moment/moment';
import { register } from 'timezone-mock';
import { sampleWireData } from '../tests/fixtures/wireData.ts';
import { defaultQuery } from '../urlState.ts';
import type { Action, State } from './SearchContext.tsx';
import { SearchReducer } from './SearchReducer';

Expand Down Expand Up @@ -59,7 +60,7 @@ describe('SearchReducer', () => {
const action: Action = {
type: 'FETCH_SUCCESS',
data: { results: [sampleWireData], totalCount: 1 },
query: { q: 'test' },
query: { ...defaultQuery, q: 'test' },
};

const newState = SearchReducer(initialState, action);
Expand Down Expand Up @@ -118,7 +119,11 @@ describe('SearchReducer', () => {
],
totalCount: 1,
},
query: { q: 'test' },
query: {
...defaultQuery,
dateRange: undefined,
q: 'test',
},
};

const newState = SearchReducer(state, action);
Expand Down Expand Up @@ -173,7 +178,11 @@ describe('SearchReducer', () => {
],
totalCount: 2,
},
query: { q: 'test', dateRange: { start: 'now-30', end: 'now' } },
query: {
...defaultQuery,
q: 'test',
dateRange: { start: 'now-30', end: 'now' },
},
};

expect(state.queryData.results).toContainEqual({
Expand Down
19 changes: 11 additions & 8 deletions newswires/client/src/context/fetchResults.test.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { pandaFetch } from '../panda-session';
import { sampleWireResponse } from '../tests/fixtures/wireData.ts';
import { paramsToQuerystring } from '../urlState';
import { defaultQuery, paramsToQuerystring } from '../urlState';
import { fetchResults } from './fetchResults.ts';
import { transformWireItemQueryResult } from './transformQueryResponse.ts';

Expand All @@ -25,7 +25,7 @@ describe('fetchResults', () => {
});

it('should call pandaFetch with correct URL and headers', async () => {
const mockQuery = { q: 'value' };
const mockQuery = { ...defaultQuery, q: 'value' };
await fetchResults({ query: mockQuery, view: 'feed' });

expect(paramsToQuerystring).toHaveBeenCalledWith({
Expand All @@ -46,7 +46,7 @@ describe('fetchResults', () => {
});

await expect(
fetchResults({ query: { q: 'value' }, view: 'feed' }),
fetchResults({ query: { ...defaultQuery, q: 'value' }, view: 'feed' }),
).rejects.toThrow('Error occurred');
});

Expand All @@ -57,7 +57,7 @@ describe('fetchResults', () => {
});

await expect(
fetchResults({ query: { q: 'value' }, view: 'feed' }),
fetchResults({ query: { ...defaultQuery, q: 'value' }, view: 'feed' }),
).rejects.toThrow('Received invalid data from server');
});

Expand All @@ -72,12 +72,15 @@ describe('fetchResults', () => {
ok: true,
});

const result = await fetchResults({ query: { q: 'value' }, view: 'feed' });
const result = await fetchResults({
query: { ...defaultQuery, q: 'value' },
view: 'feed',
});
expect(result).toEqual(mockResponseData);
});

it('should append sinceId to the query if provided', async () => {
const mockQuery = { q: 'value' };
const mockQuery = { ...defaultQuery, q: 'value' };
await fetchResults({ query: mockQuery, view: 'feed', sinceId: '123' });

expect(paramsToQuerystring).toHaveBeenCalledWith({
Expand All @@ -88,7 +91,7 @@ describe('fetchResults', () => {
});

it('should append beforeId to the query if provided', async () => {
const mockQuery = { q: 'value' };
const mockQuery = { ...defaultQuery, q: 'value' };
await fetchResults({
query: mockQuery,
view: 'feed',
Expand All @@ -103,7 +106,7 @@ describe('fetchResults', () => {
});

it('should transform the results using transformWireItemQueryResult', async () => {
const mockQuery = { q: 'value' };
const mockQuery = { ...defaultQuery, q: 'value' };
const results = await fetchResults({ query: mockQuery, view: 'feed' });
expect(results.results).toHaveLength(1);
expect(results.results[0]).toEqual(
Expand Down
12 changes: 6 additions & 6 deletions newswires/client/src/sharedTypes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -119,12 +119,12 @@ const DateRange = z.object({

export const QuerySchema = z.object({
q: z.string(),
supplier: z.array(z.string()).optional(),
supplierExcl: z.array(z.string()).optional(),
keyword: z.array(z.string()).optional(),
keywordExcl: z.array(z.string()).optional(),
categoryCode: z.array(z.string()).optional(),
categoryCodeExcl: z.array(z.string()).optional(),
supplier: z.array(z.string()),
supplierExcl: z.array(z.string()),
keyword: z.array(z.string()),
keywordExcl: z.array(z.string()),
categoryCode: z.array(z.string()),
categoryCodeExcl: z.array(z.string()),
preset: z.string().optional(),
dateRange: DateRange.optional(),
hasDataFormatting: z.boolean().optional(),
Expand Down
Loading