Skip to content
Snippets Groups Projects
Unverified Commit 451e7237 authored by Ryan Laurie's avatar Ryan Laurie Committed by GitHub
Browse files

move booleanPicker to typescript (#22993)

parent a1227a03
No related branches found
No related tags found
No related merge requests found
...@@ -44,6 +44,6 @@ Toggle.propTypes = { ...@@ -44,6 +44,6 @@ Toggle.propTypes = {
onClick: PropTypes.func.isRequired, onClick: PropTypes.func.isRequired,
}; };
export function Toggle({ onClick }) { export function Toggle({ onClick }: { onClick: () => void }) {
return <ToggleButton onClick={onClick}>{t`More options`}</ToggleButton>; return <ToggleButton onClick={onClick}>{t`More options`}</ToggleButton>;
} }
import React from "react"; import React, { Key } from "react";
import { PropTypes } from "prop-types";
import _ from "underscore"; import _ from "underscore";
import { t } from "ttag"; import { t } from "ttag";
import { useToggle } from "metabase/hooks/use-toggle"; import { useToggle } from "metabase/hooks/use-toggle";
import Filter from "metabase-lib/lib/queries/structured/Filter"; import Filter from "metabase-lib/lib/queries/structured/Filter";
import { RadioOption } from "metabase/core/components/Radio/Radio";
import { Container, Toggle, FilterRadio } from "./BooleanPicker.styled"; import { Container, Toggle, FilterRadio } from "./BooleanPicker.styled";
BooleanPicker.propTypes = { const OPTIONS: RadioOption<boolean>[] = [
className: PropTypes.string,
filter: PropTypes.instanceOf(Filter),
onFilterChange: PropTypes.func.isRequired,
};
const OPTIONS = [
{ name: t`true`, value: true }, { name: t`true`, value: true },
{ name: t`false`, value: false }, { name: t`false`, value: false },
]; ];
const EXPANDED_OPTIONS = [
const EXPANDED_OPTIONS: RadioOption<string | boolean | any>[] = [
{ name: t`true`, value: true }, { name: t`true`, value: true },
{ name: t`false`, value: false }, { name: t`false`, value: false },
{ name: t`empty`, value: "is-null" }, { name: t`empty`, value: "is-null" },
{ name: t`not empty`, value: "not-null" }, { name: t`not empty`, value: "not-null" },
]; ];
function BooleanPicker({ className, filter, onFilterChange }) { interface BooleanPickerProps {
className?: string;
filter: Filter;
onFilterChange: (filter: Filter) => void;
}
function BooleanPicker({
className,
filter,
onFilterChange,
}: BooleanPickerProps) {
const value = getValue(filter); const value = getValue(filter);
const [isExpanded, { toggle }] = useToggle(!_.isBoolean(value)); const [isExpanded, { toggle }] = useToggle(!_.isBoolean(value));
const updateFilter = value => { const updateFilter = (value: Key) => {
if (_.isBoolean(value)) { if (_.isBoolean(value)) {
onFilterChange(filter.setOperator("=").setArguments([value])); onFilterChange(filter.setOperator("=").setArguments([value]));
} else { } else if (typeof value === "string") {
onFilterChange(filter.setOperator(value)); onFilterChange(filter.setOperator(value));
} }
}; };
...@@ -51,7 +56,7 @@ function BooleanPicker({ className, filter, onFilterChange }) { ...@@ -51,7 +56,7 @@ function BooleanPicker({ className, filter, onFilterChange }) {
); );
} }
function getValue(filter) { function getValue(filter: Filter) {
const operatorName = filter.operatorName(); const operatorName = filter.operatorName();
if (operatorName === "=") { if (operatorName === "=") {
const [value] = filter.arguments(); const [value] = filter.arguments();
......
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-nocheck
import React from "react"; import React from "react";
import { render, screen } from "@testing-library/react"; import { render, screen } from "@testing-library/react";
......
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