Skip to content

Commit

Permalink
feat: Support hideHeader
Browse files Browse the repository at this point in the history
  • Loading branch information
zombieJ committed Nov 30, 2019
1 parent 87a3336 commit 8846ba6
Show file tree
Hide file tree
Showing 8 changed files with 80 additions and 24 deletions.
9 changes: 6 additions & 3 deletions src/Picker.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -73,15 +73,18 @@ export interface PickerSharedProps<DateType> extends React.AriaAttributes {

export interface PickerBaseProps<DateType>
extends PickerSharedProps<DateType>,
Omit<PickerPanelBaseProps<DateType>, 'onChange'> {}
Omit<PickerPanelBaseProps<DateType>, 'onChange' | 'hideHeader'> {}

export interface PickerDateProps<DateType>
extends PickerSharedProps<DateType>,
Omit<PickerPanelDateProps<DateType>, 'onChange'> {}
Omit<PickerPanelDateProps<DateType>, 'onChange' | 'hideHeader'> {}

export interface PickerTimeProps<DateType>
extends PickerSharedProps<DateType>,
Omit<PickerPanelTimeProps<DateType>, 'onChange' | 'format'> {}
Omit<
PickerPanelTimeProps<DateType>,
'onChange' | 'format' | 'hideHeader'
> {}

export type PickerProps<DateType> =
| PickerBaseProps<DateType>
Expand Down
53 changes: 33 additions & 20 deletions src/PickerPanel.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,9 @@ export interface PickerPanelSharedProps<DateType> {
onChange?: (value: DateType) => void;
onPanelChange?: OnPanelChange<DateType>;
onMouseDown?: React.MouseEventHandler<HTMLDivElement>;

/** @private This is internal usage. Do not use in your production env */
hideHeader?: boolean;
}

export interface PickerPanelBaseProps<DateType>
Expand Down Expand Up @@ -112,6 +115,7 @@ function PickerPanel<DateType>(props: PickerPanelProps<DateType>) {
showTime,
showToday,
renderExtraFooter,
hideHeader,
onSelect,
onChange,
onPanelChange,
Expand All @@ -130,9 +134,10 @@ function PickerPanel<DateType>(props: PickerPanelProps<DateType>) {
}

// ============================ State =============================
const { operationRef, panelRef: panelDivRef } = React.useContext(
PanelContext,
);

const panelContext = React.useContext(PanelContext);
const { operationRef, panelRef: panelDivRef } = panelContext;

const { extraFooterSelections } = React.useContext(RangeContext);
const panelRef = React.useRef<PanelRefProps>({});

Expand Down Expand Up @@ -413,24 +418,32 @@ function PickerPanel<DateType>(props: PickerPanelProps<DateType>) {
}

return (
<div
tabIndex={tabIndex}
className={classNames(`${prefixCls}-panel`, className)}
style={style}
onKeyDown={onInternalKeyDown}
onBlur={onInternalBlur}
onMouseDown={onMouseDown}
ref={panelDivRef}
<PanelContext.Provider
value={{
...panelContext,
hideHeader:
'hideHeader' in props ? hideHeader : panelContext.hideHeader,
}}
>
{panelNode}
{extraFooter || todayNode || extraSelectionNode ? (
<div className={`${prefixCls}-footer`}>
{extraFooter}
{extraSelectionNode}
{todayNode}
</div>
) : null}
</div>
<div
tabIndex={tabIndex}
className={classNames(`${prefixCls}-panel`, className)}
style={style}
onKeyDown={onInternalKeyDown}
onBlur={onInternalBlur}
onMouseDown={onMouseDown}
ref={panelDivRef}
>
{panelNode}
{extraFooter || todayNode || extraSelectionNode ? (
<div className={`${prefixCls}-footer`}>
{extraFooter}
{extraSelectionNode}
{todayNode}
</div>
) : null}
</div>
</PanelContext.Provider>
);
}

Expand Down
7 changes: 7 additions & 0 deletions src/panels/DatePanel/DateHeader.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import * as React from 'react';
import Header from '../Header';
import { Locale } from '../../interface';
import { GenerateConfig } from '../../generate';
import PanelContext from '../../PanelContext';

export interface DateHeaderProps<DateType> {
prefixCls: string;
Expand Down Expand Up @@ -31,6 +32,12 @@ function DateHeader<DateType>(props: DateHeaderProps<DateType>) {
onYearClick,
onMonthClick,
} = props;

const { hideHeader } = React.useContext(PanelContext);
if (hideHeader) {
return null;
}

const headerPrefixCls = `${prefixCls}-header`;

const monthsLocale: string[] =
Expand Down
6 changes: 6 additions & 0 deletions src/panels/DecadePanel/DecadeHeader.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import * as React from 'react';
import Header from '../Header';
import { GenerateConfig } from '../../generate';
import { DECADE_DISTANCE_COUNT } from '.';
import PanelContext from '../../PanelContext';

export interface YearHeaderProps<DateType> {
prefixCls: string;
Expand All @@ -20,6 +21,11 @@ function DecadeHeader<DateType>(props: YearHeaderProps<DateType>) {
onPrevDecades,
onNextDecades,
} = props;
const { hideHeader } = React.useContext(PanelContext);
if (hideHeader) {
return null;
}

const headerPrefixCls = `${prefixCls}-header`;

const yearNumber = generateConfig.getYear(viewDate);
Expand Down
6 changes: 6 additions & 0 deletions src/panels/MonthPanel/MonthHeader.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import * as React from 'react';
import Header from '../Header';
import { Locale } from '../../interface';
import { GenerateConfig } from '../../generate';
import PanelContext from '../../PanelContext';

export interface MonthHeaderProps<DateType> {
prefixCls: string;
Expand All @@ -24,6 +25,11 @@ function MonthHeader<DateType>(props: MonthHeaderProps<DateType>) {
onPrevYear,
onYearClick,
} = props;
const { hideHeader } = React.useContext(PanelContext);
if (hideHeader) {
return null;
}

const headerPrefixCls = `${prefixCls}-header`;

return (
Expand Down
6 changes: 5 additions & 1 deletion src/panels/TimePanel/TimeHeader.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,14 @@ export interface TimeHeaderProps<DateType> {

function TimeHeader<DateType>(props: TimeHeaderProps<DateType>) {
const { hideHeader } = React.useContext(PanelContext);
if (hideHeader) {
return null;
}

const { prefixCls, generateConfig, locale, value, format } = props;
const headerPrefixCls = `${prefixCls}-header`;

return hideHeader ? null : (
return (
<Header prefixCls={headerPrefixCls}>
{value
? generateConfig.locale.format(locale.locale, value, format)
Expand Down
6 changes: 6 additions & 0 deletions src/panels/YearPanel/YearHeader.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import * as React from 'react';
import Header from '../Header';
import { GenerateConfig } from '../../generate';
import { YEAR_DECADE_COUNT } from '.';
import PanelContext from '../../PanelContext';

export interface YearHeaderProps<DateType> {
prefixCls: string;
Expand All @@ -23,6 +24,11 @@ function YearHeader<DateType>(props: YearHeaderProps<DateType>) {
onNextDecade,
onDecadeClick,
} = props;
const { hideHeader } = React.useContext(PanelContext);
if (hideHeader) {
return null;
}

const headerPrefixCls = `${prefixCls}-header`;

const yearNumber = generateConfig.getYear(viewDate);
Expand Down
11 changes: 11 additions & 0 deletions tests/panel.spec.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -389,4 +389,15 @@ describe('Panel', () => {

errSpy.mockRestore();
});

describe('hideHeader', () => {
['decade', 'year', 'month', 'date', 'time'].forEach(mode => {
it(mode, () => {
const wrapper = mount(
<MomentPickerPanel mode={mode as any} hideHeader />,
);
expect(wrapper.find('.rc-picker-header')).toHaveLength(0);
});
});
});
});

1 comment on commit 8846ba6

@vercel
Copy link

@vercel vercel bot commented on 8846ba6 Nov 30, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.