Skip to content
Snippets Groups Projects
Unverified Commit cb69cc44 authored by Ariya Hidayat's avatar Ariya Hidayat Committed by GitHub
Browse files

Improve YearPicker component (#22603)

* migrate to TypeScript, add type annotations
* include props definition
* support Storybook
* add a basic unit test
parent 6b497361
No related branches found
No related tags found
No related merge requests found
import React from "react";
import { ComponentStory } from "@storybook/react";
import { useArgs } from "@storybook/client-api";
import YearPicker from "./YearPicker";
export default {
title: "Parameters/YearPicker",
component: YearPicker,
};
const Template: ComponentStory<typeof YearPicker> = args => {
const [{ value }, updateArgs] = useArgs();
const handleChange = (year: number) => {
updateArgs({ value: year });
};
return <YearPicker {...args} value={value} onChange={handleChange} />;
};
export const Default = Template.bind({});
Default.args = {
value: 2022,
};
/* eslint-disable react/prop-types */ import React, { ChangeEvent } from "react";
import React from "react";
import Select from "metabase/core/components/Select"; import Select from "metabase/core/components/Select";
import _ from "underscore"; import _ from "underscore";
const YEARS = _.range(new Date().getFullYear(), 1900, -1); const YEARS = _.range(new Date().getFullYear(), 1900, -1);
const YearPicker = ({ value, onChange }) => ( export interface YearPickerProps {
value: number;
onChange: (v: number) => void;
}
const YearPicker = ({ value, onChange }: YearPickerProps) => (
<Select <Select
className="borderless" className="borderless"
value={value} value={value}
options={YEARS} options={YEARS}
optionNameFn={option => option} optionNameFn={(option: any) => option}
optionValueFn={option => option} optionValueFn={(option: any) => option}
onChange={({ target: { value } }) => onChange(value)} onChange={({ target: { value } }: ChangeEvent<HTMLInputElement>) =>
onChange(parseInt(value as string, 10))
}
/> />
); );
......
import React from "react";
import { render, screen } from "@testing-library/react";
import YearPicker from "./YearPicker";
describe("YearPicker", () => {
it("should render correctly", () => {
render(<YearPicker value={2022} onChange={jest.fn()}></YearPicker>);
expect(screen.getByRole("button")).toHaveTextContent("2022");
});
});
export { default } from "./YearPicker";
/* eslint-disable react/prop-types */ /* eslint-disable react/prop-types */
import React from "react"; import React from "react";
import YearPicker from "./YearPicker";
import moment from "moment"; import moment from "moment";
import _ from "underscore"; import _ from "underscore";
import cx from "classnames"; import cx from "classnames";
import YearPicker from "metabase/components/YearPicker";
import { MonthContainer, MonthList } from "./DateMonthYearWidget.styled"; import { MonthContainer, MonthList } from "./DateMonthYearWidget.styled";
export default class DateMonthYearWidget extends React.Component { export default class DateMonthYearWidget extends React.Component {
......
/* eslint-disable react/prop-types */ /* eslint-disable react/prop-types */
import React, { Component } from "react"; import React, { Component } from "react";
import YearPicker from "./YearPicker";
import moment from "moment"; import moment from "moment";
import _ from "underscore"; import _ from "underscore";
import cx from "classnames"; import cx from "classnames";
import { t } from "ttag"; import { t } from "ttag";
import YearPicker from "metabase/components/YearPicker";
// translator: this is a "moment" format string (https://momentjs.com/docs/#/displaying/format/) It should include "Q" for the quarter number, and raw text can be escaped by brackets. For eample "[Quarter] Q" will be rendered as "Quarter 1" etc // translator: this is a "moment" format string (https://momentjs.com/docs/#/displaying/format/) It should include "Q" for the quarter number, and raw text can be escaped by brackets. For eample "[Quarter] Q" will be rendered as "Quarter 1" etc
const QUARTER_FORMAT_STRING = t`[Q]Q`; const QUARTER_FORMAT_STRING = t`[Q]Q`;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment