diff --git a/searching-front/app/core/components/DomainCard/DomainCard.tsx b/searching-front/app/core/components/DomainCard/DomainCard.tsx
new file mode 100644
index 0000000..ed01b27
--- /dev/null
+++ b/searching-front/app/core/components/DomainCard/DomainCard.tsx
@@ -0,0 +1,64 @@
+
+import { format } from "date-fns"
+
+
+
+import { cn, getDomainFromUrl, getObserverUrlByAddress } from "app/core/helpers/common"
+
+import s from "./styles.module.css"
+import { NftDomain } from "@prisma/client"
+import Button from "app/auth/components/Button"
+import Link from "app/core/components/Link"
+import { count } from "app/core/helpers/metrika"
+import TonLogoWithoutBg from "app/core/icons/TonLogoWithoutBg"
+
+
+const DomainCard = (props: NftDomain) => {
+ return (
+
+
count("from_state_page_to_site")}
+ wide
+ title="Open tonsite"
+ >
+
+ {getDomainFromUrl(props.address)}
+
+
+
+
+ {props.firstAvailableDate && format(new Date(props.firstAvailableDate), "d MMMM").toLowerCase()}
+
+
+
+ {props.walletAddress && props.tonBalance && (
+
count("from_state_page_to_tonscan")}
+ title="Open wallet in tonscan"
+ wide
+ >
+ ~
+ {new Intl.NumberFormat("en-US", { style: "currency", currency: "USD" })
+ .format(+props.tonBalance)
+ .replace("$", "")
+ .replaceAll(",", " ")}
+
+
+
+
+ )}
+
+ )
+}
+
+export default DomainCard
diff --git a/searching-front/app/core/components/DomainCard/index.tsx b/searching-front/app/core/components/DomainCard/index.tsx
new file mode 100644
index 0000000..7f40275
--- /dev/null
+++ b/searching-front/app/core/components/DomainCard/index.tsx
@@ -0,0 +1 @@
+export {default} from './DomainCard'
\ No newline at end of file
diff --git a/searching-front/app/core/components/DomainCard/styles.module.css b/searching-front/app/core/components/DomainCard/styles.module.css
new file mode 100644
index 0000000..92355ce
--- /dev/null
+++ b/searching-front/app/core/components/DomainCard/styles.module.css
@@ -0,0 +1,156 @@
+.newestListItem {
+ border-radius: var(--border_radius_base);
+ border: 1px solid var(--border_color_main);
+ text-transform: capitalize;
+ font-weight: 700;
+ font-size: 16px;
+ line-height: 20px;
+ position: relative;
+ box-sizing: border-box;
+ display: flex;
+}
+
+.siteButton.siteButton {
+ width: 52px;
+ height: 41px;
+ font-size: 20px;
+ line-height: 25px;
+ border-radius: 16px;
+ padding: 0;
+ background-color: var(--background_secondary);
+ margin-left: 8px;
+}
+
+.button {
+ position: absolute;
+ top: 2px;
+ right: 22px;
+ background-color: var(--background_secondary);
+}
+
+.newestListItem:not(:last-child) {
+ margin-bottom: 20px;
+}
+.doughnutAvailable {
+ width: 200px;
+ margin: auto;
+}
+
+.title {
+ font-size: 40px;
+ text-align: center;
+ margin: auto;
+ margin-bottom: 20px;
+ /* font-weight: 500; */
+}
+
+.historyStateWrapper {
+ display: flex;
+ justify-content: space-around;
+ flex-wrap: wrap;
+ max-width: 1000px;
+ margin: auto;
+}
+.historyStateItem {
+ width: 400px;
+}
+
+.historyStatePeriodsWrapper {
+ width: 100%;
+ display: flex;
+ justify-content: center;
+ margin-bottom: 10px;
+}
+
+.historyStatePeriodsItem {
+ border-radius: 5px;
+ margin: 5px;
+ border: none;
+ background: rgba(0, 0, 0, 0.04);
+ cursor: pointer;
+}
+
+.historyStatePeriodsItem.active {
+ background: var(--button_primary);
+ color: white;
+}
+
+.newestListItemLeft {
+ position: relative;
+ padding: 24px 0 16px 34px;
+ flex: 1 1 70%;
+}
+
+.newestListItemLeft.newestListItemLeft a {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+}
+
+.newestListItemLeftContent {
+}
+.newestListItemLeftDate {
+ font-weight: 400;
+ font-size: 12px;
+ line-height: 15px;
+ opacity: 32%;
+}
+
+.newestListItemRight {
+ padding: 24px 34px 24px 0px;
+ flex: 1 1 30%;
+ position: relative;
+ display: flex;
+ align-items: center;
+ border-left: 1px solid var(--border_color_main);
+ justify-content: flex-end;
+ white-space: nowrap;
+ font-size: 12px !important;
+ background: inherit;
+}
+
+.newestListItemLeft:hover .siteButton.siteButton {
+ background-color: var(--button_primary);
+}
+
+.newestListItemRight:hover .tonScanIcon {
+ color: white;
+ background: var(--button_primary);
+ transition: all 0.3s ease-in-out;
+}
+
+.tonScanIcon {
+ width: 24px;
+ height: 24px;
+ border-radius: 50%;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ color: var(--button_primary);
+ margin-left: 4px;
+}
+
+.siteButton,
+.tonScanIcon {
+ transition: background-color 0.2s ease-in-out;
+}
+
+@media only screen and (max-width: 500px) {
+ .newestListItem {
+ flex-direction: column;
+ }
+ .newestListItemRight,
+ .newestListItemLeft {
+ padding: 24px 34px;
+ justify-content: center;
+ }
+ .newestListItemLeft {
+ padding-bottom: 16px;
+ }
+ .newestListItemRight {
+ text-align: left;
+ padding-top: 16px;
+ border-top: 1px solid var(--border_color_main);
+ border-left: none;
+ }
+}
diff --git a/searching-front/app/core/components/Link/styles.module.css b/searching-front/app/core/components/Link/styles.module.css
index 85513cd..0981596 100644
--- a/searching-front/app/core/components/Link/styles.module.css
+++ b/searching-front/app/core/components/Link/styles.module.css
@@ -10,7 +10,7 @@
text-decoration: none;
display: inline-flex;
justify-content: center;
- align-items: center;
+ /* align-items: center; */
}
.root a.wide::before {
diff --git a/searching-front/app/core/helpers/metrika.ts b/searching-front/app/core/helpers/metrika.ts
index cf6321e..c774f98 100644
--- a/searching-front/app/core/helpers/metrika.ts
+++ b/searching-front/app/core/helpers/metrika.ts
@@ -2,6 +2,7 @@ import cookies from "js-cookie"
export const count = (event: string) => {
const isDev = cookies.get("dev")
+ console.log(event)
if (isDev) {
return
}
diff --git a/searching-front/app/core/pages/Search/Search.tsx b/searching-front/app/core/pages/Search/Search.tsx
index df6e132..9bf999e 100644
--- a/searching-front/app/core/pages/Search/Search.tsx
+++ b/searching-front/app/core/pages/Search/Search.tsx
@@ -1,4 +1,5 @@
import { useQuery } from "@blitzjs/rpc"
+import DomainCard from "app/core/components/DomainCard"
import Pagination from "app/core/components/Pagination"
import SearchForm from "app/core/components/SearchForm"
import WebsiteCard from "app/core/components/WebsiteCard"
@@ -24,10 +25,11 @@ const Search = () => {
}
const getContent = () => {
- if (res?.hits.length) {
+ if (res?.hits.length || res?.domain) {
return (
+ {res?.domain && }
{Object.values(res.hits).map((i) => (
))}
diff --git a/searching-front/app/core/pages/State/State.tsx b/searching-front/app/core/pages/State/State.tsx
index dfb3276..477ce12 100644
--- a/searching-front/app/core/pages/State/State.tsx
+++ b/searching-front/app/core/pages/State/State.tsx
@@ -17,6 +17,7 @@ import Button from "app/auth/components/Button"
import Link from "app/core/components/Link"
import { count } from "app/core/helpers/metrika"
import TonLogoWithoutBg from "app/core/icons/TonLogoWithoutBg"
+import DomainCard from "app/core/components/DomainCard"
interface HistoryOfStateItem {
value: number
@@ -116,50 +117,7 @@ const State = ({
{lastWeekNewSites.map((i) => (
-
-
count("from_state_page_to_site")}
- wide
- title="Open tonsite"
- >
-
- {getDomainFromUrl(i.address)}
-
-
-
-
- {i.firstAvailableDate &&
- format(new Date(i.firstAvailableDate), "d MMMM").toLowerCase()}
-
-
-
- {i.walletAddress && i.tonBalance && (
-
count("from_state_page_to_tonscan")}
- title="Open wallet in tonscan"
- wide
- >
- ~
- {new Intl.NumberFormat("en-US", { style: "currency", currency: "USD" })
- .format(+i.tonBalance)
- .replace("$", "")
- .replaceAll(",", " ")}
-
-
-
-
- )}
-
+
))}
diff --git a/searching-front/app/core/pages/State/styles.module.css b/searching-front/app/core/pages/State/styles.module.css
index 46bee5e..bb1623c 100644
--- a/searching-front/app/core/pages/State/styles.module.css
+++ b/searching-front/app/core/pages/State/styles.module.css
@@ -62,162 +62,4 @@
.newestListWrapper {
display: flex;
flex-direction: column;
-}
-.newestListItem {
- border-radius: var(--border_radius_base);
- border: 1px solid var(--border_color_main);
- text-transform: capitalize;
- font-weight: 700;
- font-size: 16px;
- line-height: 20px;
- position: relative;
- box-sizing: border-box;
- display: flex;
-}
-
-.siteButton.siteButton {
- width: 52px;
- height: 41px;
- font-size: 20px;
- line-height: 25px;
- border-radius: 16px;
- padding: 0;
- background-color: var(--background_secondary);
- margin-left: 8px;
-}
-
-.button {
- position: absolute;
- top: 2px;
- right: 22px;
- background-color: var(--background_secondary);
-}
-
-.newestListItem:not(:last-child) {
- margin-bottom: 20px;
-}
-.doughnutAvailable {
- width: 200px;
- margin: auto;
-}
-
-.title {
- font-size: 40px;
- text-align: center;
- margin: auto;
- margin-bottom: 20px;
- /* font-weight: 500; */
-}
-
-.historyStateWrapper {
- display: flex;
- justify-content: space-around;
- flex-wrap: wrap;
- max-width: 1000px;
- margin: auto;
-}
-.historyStateItem {
- width: 400px;
-}
-
-.historyStatePeriodsWrapper {
- width: 100%;
- display: flex;
- justify-content: center;
- margin-bottom: 10px;
-}
-
-.historyStatePeriodsItem {
- border-radius: 5px;
- margin: 5px;
- border: none;
- background: rgba(0, 0, 0, 0.04);
- cursor: pointer;
-}
-
-.historyStatePeriodsItem.active {
- background: var(--button_primary);
- color: white;
-}
-
-.newestListItemLeft {
- position: relative;
- padding: 24px 0 16px 34px;
- flex: 1 1 70%;
-
-}
-
-.newestListItemLeft a {
- display: flex;
- flex-direction: column;
- align-items: flex-start;
-}
-
-.newestListItemLeftContent {
-
-}
-.newestListItemLeftDate {
- font-weight: 400;
- font-size: 12px;
- line-height: 15px;
- opacity: 32%;
-}
-
-.newestListItemRight {
- padding: 24px 34px 24px 0px;
- flex: 1 1 30%;
- position: relative;
- display: flex;
- align-items: center;
- border-left: 1px solid var(--border_color_main);
- justify-content: flex-end;
- white-space: nowrap;
- font-size: 12px !important;
- background: inherit;
-}
-
-.newestListItemLeft:hover .siteButton.siteButton {
- background-color: var(--button_primary);
-}
-
-.newestListItemRight:hover .tonScanIcon {
- color: white;
- background: var(--button_primary);
- transition: all 0.3s ease-in-out;
-}
-
-.tonScanIcon {
- width: 24px;
- height: 24px;
- border-radius: 50%;
- display: flex;
- justify-content: center;
- align-items: center;
- color: var(--button_primary);
- margin-left: 4px;
-}
-
-.siteButton,
-.tonScanIcon {
- transition: background-color 0.2s ease-in-out;
-}
-
-@media only screen and (max-width: 500px) {
- .newestListItem {
- flex-direction: column;
- }
- .newestListItemRight,
- .newestListItemLeft {
- padding: 24px 34px;
- justify-content: center;
- }
- .newestListItemLeft{
- padding-bottom: 16px;
- }
- .newestListItemRight {
- text-align: left;
- padding-top: 16px;
- border-top: 1px solid var(--border_color_main);
- border-left: none;
- }
-}
+}
\ No newline at end of file
diff --git a/searching-front/app/search-requests/queries/getSearchResult.ts b/searching-front/app/search-requests/queries/getSearchResult.ts
index e98726e..5220b6f 100644
--- a/searching-front/app/search-requests/queries/getSearchResult.ts
+++ b/searching-front/app/search-requests/queries/getSearchResult.ts
@@ -29,10 +29,13 @@ const processResult = ({ bodyText, ...res }: Object, search: string) => {
export default resolver.pipe(resolver.zod(GetSearchRequest), async ({ text, page }, c) => {
upsertSearchRequest({ text }, c).catch(console.log)
+ const domainName = (text.replaceAll('.ton','')+'.ton').toLowerCase();
const result = await Elastic.search({ text, page })
+ const domain = await db.nftDomain.findFirst({ where:{domainName} })
return {
hits: result.hits.map((i) => processResult(i._source, text)),
pagesCount: Math.ceil(result.total / SEARCH_PER_PAGE),
+ domain
}
})