Skip to content

Commit 9bd2a9a

Browse files
feat: also hide footer when expanded
1 parent 5f81c28 commit 9bd2a9a

File tree

5 files changed

+58
-30
lines changed

5 files changed

+58
-30
lines changed

static/app/views/explore/components/viewportConstrainedPage.tsx

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {SHORT_VIEWPORT_HEIGHT} from 'sentry/utils/useIsShortViewport';
77

88
interface ViewportConstrainedPageProps extends FlexProps<'main'> {
99
constrained?: boolean;
10+
hideFooter?: boolean;
1011
}
1112

1213
/**
@@ -17,18 +18,26 @@ interface ViewportConstrainedPageProps extends FlexProps<'main'> {
1718
* (TopBar, Footer, etc.), and content within must manage its own
1819
* overflow (e.g. via scrollable table bodies).
1920
*
20-
* When constrained, the footer is also hidden at smaller viewport heights.
21-
* Similar to mobile, this is to leave more height space for essential UI.
21+
* When constrained, the global footer sibling is hidden on smaller
22+
* viewport heights and when `hideFooter` is set.
2223
*/
2324
export function ViewportConstrainedPage({
2425
constrained = true,
25-
...props
26+
hideFooter,
27+
...rest
2628
}: ViewportConstrainedPageProps) {
2729
if (!constrained) {
28-
return <Layout.Page {...props} />;
30+
return <Layout.Page {...rest} />;
2931
}
3032

31-
return <ConstrainedPage minHeight="0" overflow="hidden" {...props} />;
33+
return (
34+
<ConstrainedPage
35+
minHeight="0"
36+
overflow="hidden"
37+
data-hide-footer={hideFooter ? '' : undefined}
38+
{...rest}
39+
/>
40+
);
3241
}
3342

3443
const ConstrainedPage = styled(Layout.Page)`
@@ -39,4 +48,8 @@ const ConstrainedPage = styled(Layout.Page)`
3948
display: none;
4049
}
4150
}
51+
52+
&[data-hide-footer] ~ footer {
53+
display: none;
54+
}
4255
`;

static/app/views/explore/logs/content.tsx

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ import {useGetSavedQuery} from 'sentry/views/explore/hooks/useGetSavedQueries';
2626
import {LogsTabOnboarding} from 'sentry/views/explore/logs/logsOnboarding';
2727
import {LogsQueryParamsProvider} from 'sentry/views/explore/logs/logsQueryParamsProvider';
2828
import {LogsTabContent} from 'sentry/views/explore/logs/logsTab';
29-
import {useLogsTableExpandoFeatureFlag} from 'sentry/views/explore/logs/tables/useTableExpando';
29+
import {useTableExpando} from 'sentry/views/explore/logs/tables/useTableExpando';
3030
import {
3131
useQueryParamsId,
3232
useQueryParamsTitle,
@@ -36,7 +36,7 @@ import {useOnboardingProject} from 'sentry/views/insights/common/queries/useOnbo
3636

3737
export default function LogsContent() {
3838
const organization = useOrganization();
39-
const hasExpando = useLogsTableExpandoFeatureFlag();
39+
const tableExpando = useTableExpando();
4040
const maxPickableDays = useMaxPickableDays({
4141
dataCategories: [DataCategory.LOG_BYTE],
4242
});
@@ -66,7 +66,10 @@ export default function LogsContent() {
6666
analyticsPageSource={LogsAnalyticsPageSource.EXPLORE_LOGS}
6767
source="location"
6868
>
69-
<ViewportConstrainedPage constrained={hasExpando}>
69+
<ViewportConstrainedPage
70+
constrained={tableExpando.enabled}
71+
hideFooter={tableExpando.expanded === true}
72+
>
7073
<LogsHeader />
7174
<LogsPageDataProvider allowHighFidelity>
7275
{defined(onboardingProject) ? (
@@ -76,7 +79,10 @@ export default function LogsContent() {
7679
datePageFilterProps={datePageFilterProps}
7780
/>
7881
) : (
79-
<LogsTabContent datePageFilterProps={datePageFilterProps} />
82+
<LogsTabContent
83+
datePageFilterProps={datePageFilterProps}
84+
tableExpando={tableExpando}
85+
/>
8086
)}
8187
</LogsPageDataProvider>
8288
</ViewportConstrainedPage>

static/app/views/explore/logs/logsTab.spec.tsx

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,23 @@ import {LOGS_SORT_BYS_KEY} from 'sentry/views/explore/contexts/logs/sortBys';
1616
import {AlwaysPresentLogFields} from 'sentry/views/explore/logs/constants';
1717
import {LogsQueryParamsProvider} from 'sentry/views/explore/logs/logsQueryParamsProvider';
1818
import {LogsTabContent} from 'sentry/views/explore/logs/logsTab';
19+
import {useTableExpando} from 'sentry/views/explore/logs/tables/useTableExpando';
1920
import {OurLogKnownFieldKey} from 'sentry/views/explore/logs/types';
2021

22+
function LogsTabContentHarness({
23+
datePageFilterProps,
24+
}: {
25+
datePageFilterProps: DatePageFilterProps;
26+
}) {
27+
const tableExpando = useTableExpando();
28+
return (
29+
<LogsTabContent
30+
datePageFilterProps={datePageFilterProps}
31+
tableExpando={tableExpando}
32+
/>
33+
);
34+
}
35+
2136
const datePageFilterProps: DatePageFilterProps = {
2237
defaultPeriod: '7d' as const,
2338
maxPickableDays: 7,
@@ -178,7 +193,7 @@ describe('LogsTabContent', () => {
178193
it('should call APIs as expected', async () => {
179194
render(
180195
<ProviderWrapper>
181-
<LogsTabContent datePageFilterProps={datePageFilterProps} />
196+
<LogsTabContentHarness datePageFilterProps={datePageFilterProps} />
182197
</ProviderWrapper>,
183198
{initialRouterConfig, organization}
184199
);
@@ -230,7 +245,7 @@ describe('LogsTabContent', () => {
230245
it('should switch between modes', async () => {
231246
render(
232247
<ProviderWrapper>
233-
<LogsTabContent datePageFilterProps={datePageFilterProps} />
248+
<LogsTabContentHarness datePageFilterProps={datePageFilterProps} />
234249
</ProviderWrapper>,
235250
{initialRouterConfig, organization}
236251
);
@@ -274,7 +289,7 @@ describe('LogsTabContent', () => {
274289
it('should pass caseInsensitive to the query', async () => {
275290
render(
276291
<ProviderWrapper>
277-
<LogsTabContent datePageFilterProps={datePageFilterProps} />
292+
<LogsTabContentHarness datePageFilterProps={datePageFilterProps} />
278293
</ProviderWrapper>,
279294
{initialRouterConfig, organization}
280295
);
@@ -331,7 +346,7 @@ describe('LogsTabContent', () => {
331346
autorefreshEnabledRouterConfig.location.query[LOGS_AUTO_REFRESH_KEY] = 'enabled';
332347
render(
333348
<ProviderWrapper>
334-
<LogsTabContent datePageFilterProps={datePageFilterProps} />
349+
<LogsTabContentHarness datePageFilterProps={datePageFilterProps} />
335350
</ProviderWrapper>,
336351
{
337352
initialRouterConfig: autorefreshEnabledRouterConfig,

static/app/views/explore/logs/logsTab.tsx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -96,10 +96,11 @@ import {useRawCounts} from 'sentry/views/explore/useRawCounts';
9696
// eslint-disable-next-line boundaries/dependencies
9797
import QuotaExceededAlert from 'getsentry/components/performance/quotaExceededAlert';
9898

99-
import {useTableExpando} from './tables/useTableExpando';
99+
import type {TableExpando} from './tables/useTableExpando';
100100

101101
type LogsTabProps = {
102102
datePageFilterProps: DatePageFilterProps;
103+
tableExpando: TableExpando;
103104
};
104105

105106
interface LogsSearchBarProps {
@@ -240,7 +241,7 @@ const LogsSearchSection = memo(function LogsSearchSection({
240241
);
241242
});
242243

243-
export function LogsTabContent({datePageFilterProps}: LogsTabProps) {
244+
export function LogsTabContent({datePageFilterProps, tableExpando}: LogsTabProps) {
244245
const pageFilters = usePageFilters();
245246
const fields = useQueryParamsFields();
246247
const mode = useQueryParamsMode();
@@ -425,7 +426,6 @@ export function LogsTabContent({datePageFilterProps}: LogsTabProps) {
425426
}, [pageFilters.selection.datetime]);
426427

427428
const {infiniteLogsQueryResult} = useLogsPageData();
428-
const expando = useTableExpando();
429429

430430
return (
431431
<Fragment>
@@ -438,7 +438,7 @@ export function LogsTabContent({datePageFilterProps}: LogsTabProps) {
438438
{sidebarOpen ? <LogsToolbar /> : null}
439439
</LogsControlSection>
440440
<ExploreContentSection gap="md">
441-
{!expando.expanded && (
441+
{!tableExpando.expanded && (
442442
<OverChartButtonGroup>
443443
<LogsSidebarCollapseButton
444444
sidebarOpen={sidebarOpen}
@@ -467,7 +467,7 @@ export function LogsTabContent({datePageFilterProps}: LogsTabProps) {
467467
timeseriesResult={timeseriesResult}
468468
tableResult={infiniteLogsQueryResult}
469469
/>
470-
{!expando.expanded && (
470+
{!tableExpando.expanded && (
471471
<LogsGraphContainer>
472472
<LogsGraph
473473
rawLogCounts={rawLogCounts}
@@ -518,14 +518,14 @@ export function LogsTabContent({datePageFilterProps}: LogsTabProps) {
518518
</Button>
519519
}
520520
/>
521-
{expando.enabled && expando.button}
521+
{tableExpando.enabled && tableExpando.button}
522522
</TableActionsContainer>
523523
)}
524524
</LogsTableActionsContainer>
525525
<LogsItemContainer>
526526
{tableTab === 'logs' ? (
527527
<LogsInfiniteTable
528-
expanded={expando.expanded}
528+
expanded={tableExpando.expanded}
529529
booleanAttributes={booleanAttributes}
530530
stringAttributes={stringAttributes}
531531
numberAttributes={numberAttributes}

static/app/views/explore/logs/tables/useTableExpando.tsx

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,24 +9,18 @@ import {useLocation} from 'sentry/utils/useLocation';
99
import {useOrganization} from 'sentry/utils/useOrganization';
1010
import {TableActionButton} from 'sentry/views/explore/components/tableActionButton';
1111

12-
interface TableExpando {
12+
export interface TableExpando {
1313
button: React.ReactNode;
1414
enabled: boolean;
1515
expanded: boolean | undefined;
1616
}
1717

18-
export function useLogsTableExpandoFeatureFlag() {
18+
export function useTableExpando(): TableExpando {
1919
const organization = useOrganization();
2020
const location = useLocation();
21-
22-
return (
21+
const enabled =
2322
organization.features.includes('ourlogs-table-expando') ||
24-
location.query.logsTableExpando === 'true'
25-
);
26-
}
27-
28-
export function useTableExpando(): TableExpando {
29-
const enabled = useLogsTableExpandoFeatureFlag();
23+
location.query.logsTableExpando === 'true';
3024
const [expandedState, setExpandedState] = useState(false);
3125

3226
const [Icon, text] = expandedState

0 commit comments

Comments
 (0)