add matrix connect view

This commit is contained in:
Alexandr 2024-11-27 23:08:50 +03:00
parent d93e0ca76d
commit b5d1c3b09b
7 changed files with 95 additions and 8 deletions

View file

@ -337,13 +337,29 @@ const requestsLimiter = rateLimit({
}
try {
const aliases = await Alias.findAll({
const aliasesRow = await Alias.findAll({
where: whereClause,
order: [['block', 'DESC']],
limit,
offset: parsedOffset,
});
const aliases = await Promise.all(aliasesRow.map(async (aliasRow) => {
try {
const hasMatrixConnectionResp = await axios({
method: "get",
url: config.matrix_api_url + "/check-address",
params: { address: "123" },
transformResponse: [(data) => JSON.parse(data)],
});
const hasMatrixConnection = hasMatrixConnectionResp?.data?.userRegistered || false;
aliasRow.dataValues.hasMatrixConnection = hasMatrixConnection;
return aliasRow
} catch(e) {
console.error(e.message);
return aliasRow
}
}))
res.json(aliases.length > 0 ? aliases : []);
} catch (error) {
next(error);

View file

@ -14,7 +14,8 @@ export const config = {
"enabled_during_sync": process.env.WEBSOCKET_ENABLED_DURING_SYNC === "true"
},
"enableVisibilityInfo": process.env.ENABLE_VISIBILITY_INFO === "true",
"maxDaemonRequestCount": parseInt(process.env.MAX_DAEMON_REQUEST_COUNT || "", 10) || 1000
"maxDaemonRequestCount": parseInt(process.env.MAX_DAEMON_REQUEST_COUNT || "", 10) || 1000,
"matrix_api_url": process.env.MATRIX_API_URL
}
export function log(msg: string) {

View file

@ -0,0 +1,4 @@
<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M1.6875 6.75H15.1875L11.8125 3.375" stroke="#1F8FEB" stroke-width="1.5" stroke-linecap="square"/>
<path d="M16.3125 11.25L2.8125 11.25L6.1875 14.625" stroke="#1F8FEB" stroke-width="1.5" stroke-linecap="square"/>
</svg>

After

Width:  |  Height:  |  Size: 324 B

View file

@ -1,6 +1,7 @@
interface Alias {
alias: string;
address: string;
hasMatrixConnection: boolean;
}
export default Alias;

View file

@ -6,6 +6,7 @@ import Table from "../../components/default/Table/Table";
import Alias from "../../interfaces/state/Alias";
import Fetch from "../../utils/methods";
import CrownImg from "../../assets/images/UI/crown.svg";
import ConnectionImg from "../../assets/images/UI/connection.svg";
import CommonStatsPanel from "../../components/UI/CommonStatsPanel/CommonStatsPanel";
import { GetServerSideProps } from "next";
import { AliasesPageProps, getAliases } from "@/utils/ssr";
@ -47,6 +48,8 @@ function Aliases(props: AliasesPageProps) {
searchState || undefined,
);
console.log(result)
if (newFetchId !== fetchIdRef.current) return;
if (result.sucess === false) return;
@ -54,7 +57,8 @@ function Aliases(props: AliasesPageProps) {
setAliases(
result.map((e: any) => ({
alias: e.alias || "",
address: e.address || ""
address: e.address || "",
hasMatrixConnection: e.hasMatrixConnection || false
}))
);
}, [itemsOnPage, page, searchState, isPremiumOnly]);
@ -87,21 +91,52 @@ function Aliases(props: AliasesPageProps) {
const tableHeaders = [ "NAME", "ADDRESS" ];
function ShortAlias({ alias }: { alias: string }) {
function Alias({ alias, hasMatrixConnection }: { alias: string, hasMatrixConnection: boolean }) {
return (
<div>
alias.length < 5
?
<div className={styles["alias_wrapper"]}>
<>
<div className={styles["short_alias"]}>
{alias}
<div className={styles["short_alias__crown"]}>
<CrownImg />
</div>
</div>
{hasMatrixConnection && <ConnectionIcon/>}
</>
</div>
:
<div className={styles["alias_wrapper"]}>
<>
{alias}
{hasMatrixConnection && <ConnectionIcon/>}
</>
</div>
);
}
function ConnectionIcon(){
const [hovered, setHovered] = useState(false);
return (
<div className={styles["connection_icon"]} onMouseEnter={ () => setHovered(true)}
onMouseLeave={ ()=> setHovered(false)}
> <>
<ConnectionImg/>
{hovered && <div className={styles["connection_icon__tooltip"]}>
<p>Matrix Connection</p>
<div className={styles["connection_icon__tooltip__arrow"]}>
</div>
</div>}
</>
</div>
)
}
const tableElements = aliases.map(e => [
e.alias.length > 5 ? e.alias : <ShortAlias alias={e.alias} />,
<Alias alias={e.alias} hasMatrixConnection={e.hasMatrixConnection}/>,
e.address
]);

View file

@ -1,4 +1,33 @@
.aliases {
.alias_wrapper {
display: flex;
gap: 8px;
align-items: center;
}
.connection_icon {
cursor: pointer;
position: relative;
.connection_icon__tooltip {
position: absolute;
height: 40px;
width: 144px;
background-color: #11316B;
display: flex;
justify-content: center;
align-items: center;
transform: translateX(-65px) translateY(10px);
z-index: 1;
.connection_icon__tooltip__arrow {
z-index: 1;
position: absolute;
top:0px;
transform: rotate(45deg) translateY(-5px);
height: 10px;
width: 10px;
background-color: #11316B;
}
}
}
.short_alias {
background-color: red;
float: left;

View file

@ -194,7 +194,7 @@ export async function getBlock(context: GetServerSidePropsContext) {
export interface AliasesPageProps {
aliasesAmount?: number;
premiumAliasesAmount?: number;
aliases: { alias: string, address: string }[];
aliases: { alias: string, address: string, hasMatrixConnection: boolean }[];
}
export async function getAliases() {
@ -213,7 +213,8 @@ export async function getAliases() {
premiumAliasesAmount,
aliases: (aliasesResp || []).map((e: any) => ({
alias: e.alias || "" as string,
address: e.address || "" as string
address: e.address || "" as string,
hasMatrixConnection: e.hasMatrixConnection || false as boolean
}))
},
};