add button component

This commit is contained in:
João Geonizeli
2021-08-28 10:27:38 -03:00
parent c9785f8f57
commit 0b78ef504d
8 changed files with 56 additions and 19 deletions

View File

@@ -0,0 +1,42 @@
import type { MouseEvent } from "react";
import React from "react";
import cn from "classnames";
type Props = React.DetailedHTMLProps<
React.ButtonHTMLAttributes<HTMLButtonElement>,
HTMLButtonElement
> & {
variant?: "primary" | "dangeour";
};
const baseStyles =
"cursor-pointer py-2 px-4 disabled:opacity-50 disabled:cursor-default text-white w-full transition ease-in duration-200 text-center text-base font-semibold shadow-md focus:outline-none focus:ring-2 focus:ring-offset-2 rounded-lg";
const Component: React.ForwardRefRenderFunction<unknown, Props> = (props) => {
const { className = "", variant = "primary", onClick, ...rest } = props;
const handleClick = (
e: MouseEvent<HTMLButtonElement, globalThis.MouseEvent>
) => {
e.stopPropagation();
if (onClick) {
onClick(e);
}
};
const variantStyle =
variant === "primary"
? "bg-blue-600 hover:bg-blue-700 focus:ring-blue-500 focus:ring-offset-blue-200"
: "bg-red-600 hover:bg-red-700 focus:ring-red-500 focus:ring-offset-red-200";
return (
<button
{...rest}
className={cn(baseStyles, className, variantStyle)}
onClick={(e) => handleClick(e)}
/>
);
};
export const Button = React.forwardRef<unknown, Props>(Component);

View File

@@ -0,0 +1 @@
export * from "./Button";

View File

@@ -1,7 +1,7 @@
import type { ChangeEvent } from "react"; import type { ChangeEvent } from "react";
import React from "react"; import React from "react";
export type Props = React.DetailedHTMLProps< type Props = React.DetailedHTMLProps<
React.InputHTMLAttributes<HTMLInputElement>, React.InputHTMLAttributes<HTMLInputElement>,
HTMLInputElement HTMLInputElement
>; >;

View File

@@ -0,0 +1 @@
export * from "./Input";

View File

@@ -1,3 +1,5 @@
export * from "./Navbar"; export * from "./Navbar";
export * from "./SideNav"; export * from "./SideNav";
export * from "./Modal"; export * from "./Modal";
export * from "./Input";
export * from "./Button";

View File

@@ -3,9 +3,8 @@ import type { ChangeEvent, FC } from "react";
import React, { useState } from "react"; import React, { useState } from "react";
import { useRelayEnvironment } from "react-relay"; import { useRelayEnvironment } from "react-relay";
import { Modal } from "../../../../components"; import { Button, Modal, Input } from "../../../../components";
import { commitCreateStakeRemoveOrderMutation } from "./commitCreateStakeRemoveOrder"; import { commitCreateStakeRemoveOrderMutation } from "./commitCreateStakeRemoveOrder";
import { Input } from "../../../../components/Input/Input";
type RemoveStakeModal = { type RemoveStakeModal = {
setIsOpen: React.Dispatch<React.SetStateAction<boolean>>; setIsOpen: React.Dispatch<React.SetStateAction<boolean>>;
@@ -86,13 +85,9 @@ export const RemoveStakeModal: FC<RemoveStakeModal> = ({
{avaliableCake.isEqualTo(0) && ( {avaliableCake.isEqualTo(0) && (
<span className="text-red-500 mb-1">Você não possuí saldo.</span> <span className="text-red-500 mb-1">Você não possuí saldo.</span>
)} )}
<button <Button variant="dangeour" disabled={!stakeAvaliable} type="submit">
className="cursor-pointer py-2 px-4 disabled:opacity-50 disabled:cursor-default bg-red-600 hover:bg-red-700 focus:ring-red-500 focus:ring-offset-red-200 text-white w-full transition ease-in duration-200 text-center text-base font-semibold shadow-md focus:outline-none focus:ring-2 focus:ring-offset-2 rounded-lg"
disabled={!stakeAvaliable}
type="submit"
>
Remover Stake Remover Stake
</button> </Button>
</form> </form>
</Modal> </Modal>
); );

View File

@@ -3,7 +3,7 @@ import React, { useState } from "react";
import { BigNumber } from "bignumber.js"; import { BigNumber } from "bignumber.js";
import { useRelayEnvironment } from "react-relay"; import { useRelayEnvironment } from "react-relay";
import { Modal } from "../../../components"; import { Button, Modal } from "../../../components";
import { commitCreateStakeOrderMutation } from "./createStakeOrder"; import { commitCreateStakeOrderMutation } from "./createStakeOrder";
import { Input } from "../../../components/Input/Input"; import { Input } from "../../../components/Input/Input";
@@ -86,13 +86,9 @@ export const StakeOrderModal: FC<Props> = ({ poolName, balance }) => {
{avaliableCake.isEqualTo(0) && ( {avaliableCake.isEqualTo(0) && (
<span className="text-red-500 mb-1">Você não possuí saldo.</span> <span className="text-red-500 mb-1">Você não possuí saldo.</span>
)} )}
<button <Button disabled={!stakeAvaliable} type="submit">
className="cursor-pointer py-2 px-4 disabled:opacity-50 disabled:cursor-default bg-blue-600 hover:bg-blue-700 focus:ring-blue-500 focus:ring-offset-blue-200 text-white w-full transition ease-in duration-200 text-center text-base font-semibold shadow-md focus:outline-none focus:ring-2 focus:ring-offset-2 rounded-lg"
disabled={!stakeAvaliable}
type="submit"
>
Fazer Stake Fazer Stake
</button> </Button>
</form> </form>
</Modal> </Modal>
</div> </div>

View File

@@ -11,7 +11,7 @@ import type { ExchangePanel_fiatBalances$key } from "./__generated__/ExchangePan
import type { ExchangePanel_balances$key } from "./__generated__/ExchangePanel_balances.graphql"; import type { ExchangePanel_balances$key } from "./__generated__/ExchangePanel_balances.graphql";
import { commitCreateSellCryptoOrderMutation } from "./createSellCryptoOrder"; import { commitCreateSellCryptoOrderMutation } from "./createSellCryptoOrder";
import { commitCreateBuyCryptoOrderMutation } from "./createBuyCryptoOrder"; import { commitCreateBuyCryptoOrderMutation } from "./createBuyCryptoOrder";
import { Input } from "../../../../components/Input/Input"; import { Input, Button } from "../../../../components";
const tabBaseStyles = const tabBaseStyles =
"w-full text-base font-bold text-black px-4 py-2 focus:ring-blue-500"; "w-full text-base font-bold text-black px-4 py-2 focus:ring-blue-500";
@@ -192,13 +192,13 @@ export const ExchangePanel: FC<Props> = ({
)} )}
</div> </div>
<button <Button
className="cursor-pointer py-2 px-4 disabled:opacity-50 disabled:cursor-default bg-blue-600 hover:bg-blue-700 focus:ring-blue-500 focus:ring-offset-blue-200 text-white w-full transition ease-in duration-200 text-center text-base font-semibold shadow-md focus:outline-none focus:ring-2 focus:ring-offset-2 rounded-lg" className="cursor-pointer py-2 px-4 disabled:opacity-50 disabled:cursor-default bg-blue-600 hover:bg-blue-700 focus:ring-blue-500 focus:ring-offset-blue-200 text-white w-full transition ease-in duration-200 text-center text-base font-semibold shadow-md focus:outline-none focus:ring-2 focus:ring-offset-2 rounded-lg"
type="submit" type="submit"
disabled={submitDisabled} disabled={submitDisabled}
> >
{exchangeOption === "BUY" ? "Comprar" : "Vender"} CAKE {exchangeOption === "BUY" ? "Comprar" : "Vender"} CAKE
</button> </Button>
</form> </form>
</div> </div>
); );