Add search form
This commit is contained in:
parent
69edf925fb
commit
77ae883510
35
src/features/SearchForm/SearchForm.tsx
Normal file
35
src/features/SearchForm/SearchForm.tsx
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
"use client";
|
||||||
|
|
||||||
|
import Image from "next/image";
|
||||||
|
import search from "./icons/search.svg";
|
||||||
|
import { useTranslations } from "next-intl";
|
||||||
|
|
||||||
|
const SearchForm = () => {
|
||||||
|
const t = useTranslations("general");
|
||||||
|
|
||||||
|
return (
|
||||||
|
<form className="mb-8 h-12 w-full relative flex items-center">
|
||||||
|
<div className="h-full flex flex-1 items-center border border-black rounded-sm bg-white">
|
||||||
|
<Image
|
||||||
|
className="w-12 h-12 p-2"
|
||||||
|
src={search}
|
||||||
|
alt="Search button icon"
|
||||||
|
/>
|
||||||
|
<input
|
||||||
|
placeholder="Ключевое слово или номер"
|
||||||
|
type="text"
|
||||||
|
className="px-3 pl-2 w-full h-full text-lg focus:outline-none focus:ring-2 focus:ring-blue-500"
|
||||||
|
aria-label={t("search")}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<button
|
||||||
|
className="h-full w-24 rounded-sm bg-blue text-white"
|
||||||
|
type="submit"
|
||||||
|
>
|
||||||
|
{t("search")}
|
||||||
|
</button>
|
||||||
|
</form>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default SearchForm;
|
15
src/features/SearchForm/icons/search.svg
Normal file
15
src/features/SearchForm/icons/search.svg
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<svg width="24.000000" height="24.959961" viewBox="0 0 24 24.96" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<desc>
|
||||||
|
Created with Pixso.
|
||||||
|
</desc>
|
||||||
|
<defs>
|
||||||
|
<clipPath id="clip18_5000">
|
||||||
|
<rect id="search" width="24.000000" height="24.959999" fill="white" fill-opacity="0"/>
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
<rect id="search" width="24.000000" height="24.959999" fill="#FFFFFF" fill-opacity="0"/>
|
||||||
|
<g clip-path="url(#clip18_5000)">
|
||||||
|
<path id="Vector" d="M11 19.7598C6.58154 19.7598 3 16.0352 3 11.4404C3 6.84473 6.58154 3.12012 11 3.12012C15.4185 3.12012 19 6.84473 19 11.4404C19 16.0352 15.4185 19.7598 11 19.7598Z" stroke="#C5C6C5" stroke-opacity="1.000000" stroke-width="2.000000" stroke-linejoin="round"/>
|
||||||
|
<path id="Vector" d="M21 21.8408L16.6499 17.3164" stroke="#C5C6C5" stroke-opacity="1.000000" stroke-width="2.000000" stroke-linejoin="round" stroke-linecap="round"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 932 B |
@ -4,6 +4,7 @@ import { useTendersStore } from "./tendersStore";
|
|||||||
import { data } from "autoprefixer";
|
import { data } from "autoprefixer";
|
||||||
import TenderCard from "@/entities/TenderCard";
|
import TenderCard from "@/entities/TenderCard";
|
||||||
import Pagination from "@/features/Pagination/Pagination";
|
import Pagination from "@/features/Pagination/Pagination";
|
||||||
|
import SearchForm from "@/features/SearchForm/SearchForm";
|
||||||
|
|
||||||
interface Props {}
|
interface Props {}
|
||||||
const TendersList = () => {
|
const TendersList = () => {
|
||||||
@ -16,30 +17,34 @@ const TendersList = () => {
|
|||||||
}, []);
|
}, []);
|
||||||
console.log(tenders);
|
console.log(tenders);
|
||||||
return (
|
return (
|
||||||
<div className="flex flex-col gap-2 pb-[96px] items-center">
|
<div>
|
||||||
{tenders?.results?.map((tender) => (
|
<SearchForm />
|
||||||
<TenderCard
|
|
||||||
key={tender.id}
|
<div className="flex flex-col gap-2 pb-[96px] items-center">
|
||||||
id={tender.id}
|
{tenders?.results?.map((tender) => (
|
||||||
id_of_card={tender.id_of_card}
|
<TenderCard
|
||||||
data_rk={tender.data_rk}
|
key={tender.id}
|
||||||
name_of_organization={tender.name_of_organization}
|
id={tender.id}
|
||||||
type_of_buy={tender.type_of_buy}
|
id_of_card={tender.id_of_card}
|
||||||
name_of_buy={tender.name_of_buy}
|
data_rk={tender.data_rk}
|
||||||
date_of_publication_datetime={tender.date_of_publication_datetime}
|
name_of_organization={tender.name_of_organization}
|
||||||
date_of_offer_datetime={tender.date_of_offer_datetime}
|
type_of_buy={tender.type_of_buy}
|
||||||
current_timestamp={tender.current_timestamp}
|
name_of_buy={tender.name_of_buy}
|
||||||
|
date_of_publication_datetime={tender.date_of_publication_datetime}
|
||||||
|
date_of_offer_datetime={tender.date_of_offer_datetime}
|
||||||
|
current_timestamp={tender.current_timestamp}
|
||||||
|
/>
|
||||||
|
))}
|
||||||
|
<Pagination
|
||||||
|
activePage={activePage}
|
||||||
|
setActivePage={setActivePage}
|
||||||
|
prev={tenders.previous}
|
||||||
|
next={tenders.next}
|
||||||
|
count={tenders.count as number}
|
||||||
|
current_count={tenders.results.length}
|
||||||
|
limit={20}
|
||||||
/>
|
/>
|
||||||
))}
|
</div>
|
||||||
<Pagination
|
|
||||||
activePage={activePage}
|
|
||||||
setActivePage={setActivePage}
|
|
||||||
prev={tenders.previous}
|
|
||||||
next={tenders.next}
|
|
||||||
count={tenders.count as number}
|
|
||||||
current_count={tenders.results.length}
|
|
||||||
limit={20}
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@ -6,6 +6,8 @@ const config: Config = {
|
|||||||
"./src/components/**/*.{js,ts,jsx,tsx,mdx}",
|
"./src/components/**/*.{js,ts,jsx,tsx,mdx}",
|
||||||
"./src/app/**/*.{js,ts,jsx,tsx,mdx}",
|
"./src/app/**/*.{js,ts,jsx,tsx,mdx}",
|
||||||
"./src/widgets/**/*.{js,ts,jsx,tsx,mdx}",
|
"./src/widgets/**/*.{js,ts,jsx,tsx,mdx}",
|
||||||
|
"./src/entities/**/*.{js,ts,jsx,tsx,mdx}",
|
||||||
|
"./src/features/**/*.{js,ts,jsx,tsx,mdx}",
|
||||||
],
|
],
|
||||||
theme: {
|
theme: {
|
||||||
extend: {
|
extend: {
|
||||||
|
Loading…
Reference in New Issue
Block a user