diff --git a/src/assets/styles/styles-all.scss b/src/assets/styles/styles-all.scss index f62d2edc3..acc8567a0 100644 --- a/src/assets/styles/styles-all.scss +++ b/src/assets/styles/styles-all.scss @@ -32,3 +32,4 @@ @import "styles/custom/route-buttons.module"; @import "styles/custom/body"; @import "styles/custom/span-errors"; +@import "styles/custom/dropdown"; diff --git a/src/assets/styles/styles/custom/_dropdown.scss b/src/assets/styles/styles/custom/_dropdown.scss new file mode 100644 index 000000000..03a34bb6c --- /dev/null +++ b/src/assets/styles/styles/custom/_dropdown.scss @@ -0,0 +1,44 @@ +.dropdown-buttons-container { + background-color: white; + mix-blend-mode: multiply; + overflow: hidden; + border-bottom-left-radius: $btn-border-radius; + border-bottom-right-radius: $btn-border-radius; + border-top-left-radius: 0px; + border-top-right-radius: 0px; + box-shadow: 0 2.8px 2.2px $gray-400, 0 6.7px 5.3px $gray-400; + position: relative; + top: -63px; + right: -10px; + padding-bottom: 10px; + padding-top: 25px; + max-width: 119px; + + button { + width: 100%; + text-align: left; + border-radius: 0px; + &:hover { + cursor: pointer; + font-weight: 600; + box-shadow: 0px 0px; + } + float: left; + clear: left; + margin-left: 7px; + padding: 5px 7px 5px; + line-height: 20px; + background-color: white; + color: $primary; + } +} + +.display-main-button { + position: relative; + top: -43px; +} + +.display-main-button-outlined { + position: relative; + top: -45px; +} diff --git a/src/components/common-components/button-component/button.component.tsx b/src/components/common-components/button-component/button.component.tsx index 1ddfce84c..9a70db89c 100644 --- a/src/components/common-components/button-component/button.component.tsx +++ b/src/components/common-components/button-component/button.component.tsx @@ -1,8 +1,9 @@ import { ButtonProps } from "@material-ui/core"; import React, { Ref } from "react"; +export type ButtonVariant = "primary" | "secondary" | "outlined" | "circle-outlined"; export type ButtonOptions = Omit & { - variant?: "primary" | "secondary" | "outlined" | "circle-outlined"; + variant?: ButtonVariant; }; export const Button = React.forwardRef( diff --git a/src/components/common-components/dropdown-buttons/dropdown-buttons.component.tsx b/src/components/common-components/dropdown-buttons/dropdown-buttons.component.tsx new file mode 100644 index 000000000..2fe4c059b --- /dev/null +++ b/src/components/common-components/dropdown-buttons/dropdown-buttons.component.tsx @@ -0,0 +1,57 @@ +import React, { useState, useRef } from "react"; +import { Button, ButtonVariant } from "../button-component/button.component"; +import ClickAwayListener from "@material-ui/core/ClickAwayListener"; +import ArrowDropDownIcon from "@material-ui/icons/ArrowDropDown"; +import Popper from "@material-ui/core/Popper"; + +export interface ButtonData { + label: string; + action: () => void; +} + +interface DropdownOptions { + buttons: ButtonData[]; + mainLabel: string; + variant?: ButtonVariant; +} + +export function DropdownButtons({ buttons, mainLabel, variant }: DropdownOptions): JSX.Element { + const [open, setOpen] = useState(false); + const anchorRef = useRef(null); + + function handleToggle(): void { + setOpen((prevVal) => !prevVal); + } + + function handleClickAway(): void { + setOpen(false); + } + + return ( +
+ + +
+ +
+ +
+ {buttons.map((item) => ( + + ))} +
+
+
+
+ ); +} diff --git a/src/components/schedule-page/import-buttons/import-buttons.component.tsx b/src/components/schedule-page/import-buttons/import-buttons.component.tsx index 7f344d502..3e5c7560a 100644 --- a/src/components/schedule-page/import-buttons/import-buttons.component.tsx +++ b/src/components/schedule-page/import-buttons/import-buttons.component.tsx @@ -1,8 +1,4 @@ -import ButtonGroup from "@material-ui/core/ButtonGroup"; -import ClickAwayListener from "@material-ui/core/ClickAwayListener"; -import Popper from "@material-ui/core/Popper"; -import ArrowDropDownIcon from "@material-ui/icons/ArrowDropDown"; -import React, { ChangeEvent, useEffect, useRef, useState } from "react"; +import React, { ChangeEvent, useEffect, useRef } from "react"; import { useDispatch, useSelector } from "react-redux"; import { useScheduleConverter } from "./hooks/use-schedule-converter"; import { ActionModel } from "../../../state/models/action.model"; @@ -12,13 +8,14 @@ import { ScheduleError } from "../../../common-models/schedule-error.model"; import { ScheduleDataActionType } from "../../../state/reducers/schedule-data.reducer"; import { ScheduleErrorActionType } from "../../../state/reducers/schedule-errors.reducer"; import { ScheduleExportLogic } from "../../../logic/schedule-exporter/schedule-export.logic"; -import { Button } from "../../common-components"; +import { + ButtonData, + DropdownButtons, +} from "../../common-components/dropdown-buttons/dropdown-buttons.component"; export function ImportButtonsComponent(): JSX.Element { const DEFAULT_FILENAME = "grafik.xlsx"; - const [open, setOpen] = useState(false); const { scheduleModel, setSrcFile, scheduleErrors, errorOccurred } = useScheduleConverter(); - const anchorRef = useRef(null); const fileUpload = useRef(null); const stateScheduleModel = useSelector( @@ -26,6 +23,11 @@ export function ImportButtonsComponent(): JSX.Element { ); const scheduleDipatcher = useDispatch(); + const btnData1: ButtonData = { label: "Wczytaj", action: () => fileUpload.current?.click() }; + const btnData2: ButtonData = { label: "Zapisz jako...", action: (): void => handleExport() }; + + const btnData = [btnData1, btnData2]; + useEffect(() => { if (scheduleModel) { scheduleDipatcher({ @@ -55,39 +57,18 @@ export function ImportButtonsComponent(): JSX.Element { } } - function handleToggle(): void { - setOpen((prevVal) => !prevVal); - } - return (
- - - { - setOpen(false); - }} - > - - - - - - + + handleImport(event)} + style={{ display: "none" }} + type="file" + accept=".xlsx" + />
); }