Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
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
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import { type Meta, type StoryObj } from '@storybook/preact';
import { expect, within } from '@storybook/test';

import {
QueriesOverTimeRowLabelTooltip,
type QueriesOverTimeRowLabelTooltipProps,
} from './queries-over-time-row-label-tooltip';

const meta: Meta<QueriesOverTimeRowLabelTooltipProps> = {
title: 'Component/Queries over time row label tooltip',
component: QueriesOverTimeRowLabelTooltip,
argTypes: {
query: { control: 'text' },
},
parameters: {
fetchMock: {},
},
};

export default meta;

export const Default: StoryObj<QueriesOverTimeRowLabelTooltipProps> = {
render: (args) => <QueriesOverTimeRowLabelTooltip {...args} />,
args: {
query: 'S:F456L (single mutation)',
},
play: async ({ canvasElement }) => {
const canvas = within(canvasElement);
await expect(canvas.getByText('S:F456L (single mutation)', { exact: true })).toBeVisible();
await expect(canvas.getByText('foobar')).toBeVisible();
},
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import type { FunctionComponent } from 'preact';

export type QueriesOverTimeRowLabelTooltipProps = {
query: string; // displayLabel -- TODO -- we need to pass in the queries and description as well
};

export const QueriesOverTimeRowLabelTooltip: FunctionComponent<QueriesOverTimeRowLabelTooltipProps> = ({
query,
}: QueriesOverTimeRowLabelTooltipProps) => {
// TODO: Implement actual tooltip content with query details
return (
<div>
<div className='font-bold'>{query}</div>
<div className='text-gray-600'>foobar</div>
</div>
);
};
23 changes: 19 additions & 4 deletions components/src/preact/queriesOverTime/queries-over-time.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import { getFilteredQueryOverTimeData, type QueryFilter } from './getFilteredQueriesOverTimeData';
import { QueriesOverTimeFilter } from './queries-over-time-filter';
import { QueriesOverTimeGridTooltip } from './queries-over-time-grid-tooltip';
import { QueriesOverTimeRowLabelTooltip } from './queries-over-time-row-label-tooltip';
import { type ProportionValue, getProportion } from '../../query/queryMutationsOverTime';
import { queryQueriesOverTimeData } from '../../query/queryQueriesOverTime';
import { lapisFilterSchema, temporalGranularitySchema, views } from '../../types';
Expand All @@ -13,6 +14,7 @@
import { useLapisUrl } from '../LapisUrlContext';
import { type ColorScale } from '../components/color-scale-selector';
import { ColorScaleSelectorDropdown } from '../components/color-scale-selector-dropdown';
import PortalTooltip from '../components/portal-tooltip';

Check failure on line 17 in components/src/preact/queriesOverTime/queries-over-time.tsx

View workflow job for this annotation

GitHub Actions / Run checks and build

`../components/portal-tooltip` import should occur after import of `../components/no-data-display`
import { CsvDownloadButton } from '../components/csv-download-button';
import { ErrorBoundary } from '../components/error-boundary';
import FeaturesOverTimeGrid, { type FeatureRenderer, customColumnSchema } from '../components/features-over-time-grid';
Expand Down Expand Up @@ -139,16 +141,29 @@
const queryRenderer = useMemo<FeatureRenderer<string>>(
() => ({
asString: (value: string) => value,
// TODO - in the tooltip below, we need to use the value to look up the complete query object
// in the 'queries' const, and then pass in the complete query object to the tooltip.
// the tooltip needs to be changed to accept the whole query object.
// ... but is a lookup even valid? We didn't enforce uniqueness of the labels I'm afraid.
// ...
/// actually, we already rely on the uniqueness of the labels. Maybe we should change it so
// we have an ID and a label? We need the unique thing because in Map2D we use it as a unique key
renderRowLabel: (value: string) => (
<div className='text-center'>
<span>{value}</span>
</div>
<PortalTooltip
content={<QueriesOverTimeRowLabelTooltip query={value} />}
position='right'
portalTarget={tooltipPortalTarget}
>
<div className='text-center'>
<span>{value}</span>
</div>
</PortalTooltip>
),
renderTooltip: (value: string, temporal: Temporal, proportionValue: ProportionValue) => (
<QueriesOverTimeGridTooltip query={value} date={temporal} value={proportionValue} />
),
}),
[],
[tooltipPortalTarget],
);

const getTab = (view: QueriesOverTimeView) => {
Expand Down
Loading