Skip to content
Snippets Groups Projects
Commit b8c5dd27 authored by Aggarwal Himanshu's avatar Aggarwal Himanshu
Browse files

Setup animation for dropdown; Pass filter options as props from parent

parent cfeef5bd
No related branches found
No related tags found
2 merge requests!7Merge develop to main,!5Filters Feature
...@@ -3,9 +3,9 @@ import classNames from "classnames"; ...@@ -3,9 +3,9 @@ import classNames from "classnames";
import React, { useState, useEffect } from "react"; import React, { useState, useEffect } from "react";
import Button from "../button/Button"; import Button from "../button/Button";
import { RadioInputForm } from "../radio/RadioForm"; import { RadioInputForm } from "../radio/RadioForm";
import { filterOptions } from "../../constants"; import { CSSTransition } from "react-transition-group";
export function FilterDropdown({ open, setOpen, addFilter }) { export function FilterDropdown({ filterOptions, setOpen, addFilter }) {
const [selectedFilter, setSelectedFilter] = useState(null); const [selectedFilter, setSelectedFilter] = useState(null);
const [radioValue, setRadioValue] = useState("is"); const [radioValue, setRadioValue] = useState("is");
...@@ -19,7 +19,7 @@ export function FilterDropdown({ open, setOpen, addFilter }) { ...@@ -19,7 +19,7 @@ export function FilterDropdown({ open, setOpen, addFilter }) {
].name ].name
); );
} }
}, [selectedFilter]); }, [filterOptions, selectedFilter]);
const onRadioChange = ({ target: { value } }) => { const onRadioChange = ({ target: { value } }) => {
setRadioValue(value); setRadioValue(value);
...@@ -46,7 +46,7 @@ export function FilterDropdown({ open, setOpen, addFilter }) { ...@@ -46,7 +46,7 @@ export function FilterDropdown({ open, setOpen, addFilter }) {
<div className="absolute flex flex-row z-50"> <div className="absolute flex flex-row z-50">
<div <div
className={classNames( className={classNames(
"dark:bg-dark-600 w-48 h-max max-h-72 rounded-xl mt-2 transition-all duration-100 p-1 overflow-y-scroll shadow-lg shadow-dark-600" "dark:bg-dark-600 w-56 h-max max-h-72 rounded-xl mt-2 transition-all duration-100 p-1 overflow-y-scroll shadow-lg shadow-dark-600"
)} )}
> >
{Object.keys(filterOptions).map((key) => { {Object.keys(filterOptions).map((key) => {
...@@ -62,20 +62,29 @@ export function FilterDropdown({ open, setOpen, addFilter }) { ...@@ -62,20 +62,29 @@ export function FilterDropdown({ open, setOpen, addFilter }) {
); );
})} })}
</div> </div>
{selectedFilter && ( <CSSTransition
<span className="ml-3"> in={selectedFilter}
<SecondaryFilterDropdown classNames="secondary-dropdown"
open={true} timeout={300}
onSelectedFilterChange={onSelectedFilterChange} unmountOnExit
radioOptions={filterOptions[selectedFilter]?.options} >
radioValue={radioValue} {selectedFilter ? (
onRadioChange={onRadioChange} <span className="ml-3">
inputValue={inputValue} <SecondaryFilterDropdown
onInputChange={onInputChange} open={true}
onFilterAdd={onFilterAdd} onSelectedFilterChange={onSelectedFilterChange}
/> radioOptions={filterOptions[selectedFilter]?.options}
</span> radioValue={radioValue}
)} onRadioChange={onRadioChange}
inputValue={inputValue}
onInputChange={onInputChange}
onFilterAdd={onFilterAdd}
/>
</span>
) : (
<div></div>
)}
</CSSTransition>
</div> </div>
); );
} }
......
...@@ -20,6 +20,7 @@ import { useState } from "react"; ...@@ -20,6 +20,7 @@ import { useState } from "react";
import useFilters from "../hooks/useFilters"; import useFilters from "../hooks/useFilters";
import { Filter, FilterButton, Filters } from "../components/filters/Filter"; import { Filter, FilterButton, Filters } from "../components/filters/Filter";
import { FilterDropdown } from "../components/dropdown/FilterDropdown"; import { FilterDropdown } from "../components/dropdown/FilterDropdown";
import { filterOptions } from "../constants";
export default function Home() { export default function Home() {
const [filters, addFilter, removeFilter] = useFilters([]); const [filters, addFilter, removeFilter] = useFilters([]);
...@@ -97,9 +98,9 @@ export default function Home() { ...@@ -97,9 +98,9 @@ export default function Home() {
{dropdownOpen && ( {dropdownOpen && (
<FilterDropdown <FilterDropdown
open={dropdownOpen}
setOpen={setDropdownOpen} setOpen={setDropdownOpen}
addFilter={addFilter} addFilter={addFilter}
filterOptions={filterOptions}
/> />
)} )}
</div> </div>
......
...@@ -24,3 +24,22 @@ ...@@ -24,3 +24,22 @@
#nprogress .peg { #nprogress .peg {
box-shadow: 0 0 10px rgb(37 99 235), 0 0 5px rgb(37 99 235) !important; box-shadow: 0 0 10px rgb(37 99 235), 0 0 5px rgb(37 99 235) !important;
} }
.secondary-dropdown-enter {
opacity: 0;
transform: translateX(-50px);
}
.secondary-dropdown-enter-active {
opacity: 1;
transform: translateX(0);
transition: opacity 300ms, transform 300ms;
}
.secondary-dropdown-exit {
opacity: 1;
}
.secondary-dropdown-exit-active {
opacity: 0;
/* transform: scale(0.9); */
transform: translateX(-50px);
transition: opacity 300ms, transform 300ms;
}
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