Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
5d2d88a
feat(social): add lightweight event bus for trade notifications
paolomolo Oct 22, 2025
f0b91f1
feat(social): add useTrendingTagMap hook for trend tag→sale mapping
paolomolo Oct 22, 2025
2f42049
feat(social): add useTokenPerformance hook for 24h change with trade …
paolomolo Oct 22, 2025
25eaa91
feat(social): add HashtagWithChange inline badge component
paolomolo Oct 22, 2025
621ac20
feat(social): show 24h change inline for hashtags in social feeds
paolomolo Oct 22, 2025
df887d6
feat(dex): emit trade event after successful swap
paolomolo Oct 22, 2025
a8f9743
fix(social): resolve non-trending hashtags by searching tokens list
paolomolo Oct 22, 2025
1fd311f
fix(social): expand hashtag→token resolution via topic lookup fallback
paolomolo Oct 22, 2025
dcd0188
fix(social): robustify 24h performance fetch for hashtags
paolomolo Oct 22, 2025
4f5199f
fix(social): support TokenPriceMovementDto shape for 24h percent
paolomolo Oct 22, 2025
e2c71e8
refactor(social): use generated TokensService.performance for 24h change
paolomolo Oct 22, 2025
8338aad
fix(social): read past_24h.price_change.percentage for hashtag 24h ch…
paolomolo Oct 22, 2025
df29857
fix(social): choose best 24h change across resolved addresses
paolomolo Oct 22, 2025
a0eb51a
fix(social): prefer token address in trending tag mapping for perform…
paolomolo Oct 22, 2025
8398334
fix(social): try symbol and resolved address for hashtag 24h performance
paolomolo Oct 22, 2025
d7e72ca
debug(social): add console logs for hashtag 24h performance fetch
paolomolo Oct 22, 2025
52176dd
fix(social): hide hashtag 24h badge when change is exactly 0%
paolomolo Oct 22, 2025
24ab1b9
fix(social): fallback to all_time change when 24h is 0%
paolomolo Oct 22, 2025
43670b7
style(social): redesign hashtag change to compact pill indicator
paolomolo Oct 22, 2025
e56dbcb
style(social): make hashtag pill narrower and more compact
paolomolo Oct 22, 2025
328848d
style(social): remove gradient from hashtags, use plain white
paolomolo Oct 22, 2025
5239aea
fix(social): improve hashtag change formatting
paolomolo Oct 22, 2025
c0a85fd
style(social): replace gradient teal with green #00ff9d for all links
paolomolo Oct 22, 2025
544eebc
fix(styles): remove gradient from global link styles
paolomolo Oct 22, 2025
7629b18
fix(styles): restore gradient for link hover underline
paolomolo Oct 22, 2025
c4476f9
fix(social): remove duplicate hover underlines from links
paolomolo Oct 22, 2025
23b132b
style(social): reduce gap between hashtag and pill
paolomolo Oct 22, 2025
bf2816c
fix(social): ensure hashtag links show hover underline
paolomolo Oct 22, 2025
4437d79
Merge branch 'develop' into feat/feeds-hashtag-change-indicator
ifaouibadi Nov 4, 2025
ce889a3
feat(api): add new DTOs and enhance existing models
ifaouibadi Nov 4, 2025
87c9f87
feat(api): add performanceRaw method to TokensService for backward co…
ifaouibadi Nov 4, 2025
47dcc70
refactor(social): simplify HashtagWithChange component by removing un…
ifaouibadi Nov 4, 2025
8084f8c
feat(linkify): extend linkify function to accept post data for hashta…
ifaouibadi Nov 4, 2025
b569786
feat(linkify): pass post data to linkify function in social component…
ifaouibadi Nov 4, 2025
c637b4e
refactor(social): remove unused hooks for token performance and trend…
ifaouibadi Nov 4, 2025
abfae64
Merge remote-tracking branch 'origin/develop' into feat/feeds-hashtag…
paolomolo Nov 6, 2025
f09395b
fix(user-profile): add missing useTranslation import
paolomolo Nov 6, 2025
55da72d
fix(token-detail): fix Promise.all destructuring bug and add null checks
paolomolo Nov 6, 2025
bb04c6a
fix(token-components): add null checks for token properties across co…
paolomolo Nov 6, 2025
7364a2c
fix(token-pages): add missing useTranslation import in MiniWalletInfo
paolomolo Nov 6, 2025
3d0face
fix(hashtag): handle zero change percentage correctly
paolomolo Nov 6, 2025
4f88247
feat(hashtag): add fallback token fetch for missing change indicators
paolomolo Nov 6, 2025
6ee7e60
fix(hashtag): update token fetch condition for improved reliability
paolomolo Nov 6, 2025
0f1bd9b
fix(hashtag): fetch performance data separately when token lacks it
paolomolo Nov 6, 2025
55dc055
fix(hashtag): improve token and performance fetching logic
paolomolo Nov 6, 2025
df7445e
fix(hashtag): handle trailing punctuation in topic names and null per…
paolomolo Nov 6, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions src/api/generated/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ export type { PairDto } from './models/PairDto';
export type { PairSummaryDto } from './models/PairSummaryDto';
export type { PairTransactionDto } from './models/PairTransactionDto';
export type { PairWithSummaryDto } from './models/PairWithSummaryDto';
export { PerformancePeriodDto } from './models/PerformancePeriodDto';
export type { PeriodData } from './models/PeriodData';
export type { PostDto } from './models/PostDto';
export type { PriceChangeData } from './models/PriceChangeData';
Expand All @@ -32,8 +33,10 @@ export type { PriceMovementDto } from './models/PriceMovementDto';
export type { Tip } from './models/Tip';
export type { TokenDto } from './models/TokenDto';
export type { TokenHolderDto } from './models/TokenHolderDto';
export type { TokenPerformanceDto } from './models/TokenPerformanceDto';
export type { TokenPriceMovementDto } from './models/TokenPriceMovementDto';
export type { Topic } from './models/Topic';
export type { TopicDto } from './models/TopicDto';
export type { TotalUniqueUsersResultDto } from './models/TotalUniqueUsersResultDto';
export type { TransactionDto } from './models/TransactionDto';
export type { TrendingTagItemDto } from './models/TrendingTagItemDto';
Expand Down
25 changes: 25 additions & 0 deletions src/api/generated/models/PerformancePeriodDto.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
/* generated using openapi-typescript-codegen -- do not edit */
/* istanbul ignore file */
/* tslint:disable */
/* eslint-disable */
import type { PriceDto } from './PriceDto';
export type PerformancePeriodDto = {
current: PriceDto;
current_date: string;
current_change: number;
current_change_percent: number;
current_change_direction: PerformancePeriodDto.current_change_direction;
high: PriceDto;
high_date: string;
low: PriceDto;
low_date: string;
last_updated: string;
};
export namespace PerformancePeriodDto {
export enum current_change_direction {
UP = 'up',
DOWN = 'down',
NEUTRAL = 'neutral',
}
}

3 changes: 2 additions & 1 deletion src/api/generated/models/PostDto.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
/* istanbul ignore file */
/* tslint:disable */
/* eslint-disable */
import type { TopicDto } from './TopicDto';
export type PostDto = {
/**
* Unique identifier for the post
Expand Down Expand Up @@ -34,7 +35,7 @@ export type PostDto = {
/**
* Array of topics/hashtags associated with the post
*/
topics: Array<string>;
topics: Array<TopicDto>;
/**
* Array of media URLs associated with the post
*/
Expand Down
9 changes: 9 additions & 0 deletions src/api/generated/models/TokenDto.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,23 @@
/* tslint:disable */
/* eslint-disable */
import type { PriceDto } from './PriceDto';
import type { TokenPerformanceDto } from './TokenPerformanceDto';
export type TokenDto = {
id: number;
network_id: string;
factory_address: string;
sale_address: string;
create_tx_hash: string;
creator_address: string;
dao_address: string;
owner_address: string;
beneficiary_address: string;
bonding_curve_address: string;
collection: string;
metaInfo: Record<string, any>;
unlisted: boolean;
last_sync_tx_count: number;
tx_count: number;
address: string;
name: string;
symbol: string;
Expand All @@ -28,6 +34,9 @@ export type TokenDto = {
market_cap_data: PriceDto;
total_supply: string;
dao_balance: string;
trending_score: number;
trending_score_update_at: string;
performance: TokenPerformanceDto | null;
created_at: string;
tx_type: string;
volume: string;
Expand Down
13 changes: 13 additions & 0 deletions src/api/generated/models/TokenPerformanceDto.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
/* generated using openapi-typescript-codegen -- do not edit */
/* istanbul ignore file */
/* tslint:disable */
/* eslint-disable */
import type { PerformancePeriodDto } from './PerformancePeriodDto';
export type TokenPerformanceDto = {
sale_address: string;
past_24h: PerformancePeriodDto | null;
past_7d: PerformancePeriodDto | null;
past_30d: PerformancePeriodDto | null;
all_time: PerformancePeriodDto | null;
};

40 changes: 40 additions & 0 deletions src/api/generated/models/TopicDto.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
/* generated using openapi-typescript-codegen -- do not edit */
/* istanbul ignore file */
/* tslint:disable */
/* eslint-disable */
import type { TokenDto } from './TokenDto';
export type TopicDto = {
/**
* Unique identifier for the topic
*/
id: string;
/**
* Name of the topic/hashtag
*/
name: string;
/**
* Description of the topic
*/
description: string | null;
/**
* Number of posts with this topic
*/
post_count: number;
/**
* Associated token if topic name matches a token symbol
*/
token: TokenDto | null;
/**
* Timestamp when the topic was created
*/
created_at: string;
/**
* Timestamp when the topic was last updated
*/
updated_at: string;
/**
* Version number
*/
version: number;
};

36 changes: 36 additions & 0 deletions src/api/generated/services/DexService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,42 @@ export class DexService {
},
});
}
/**
* Get comprehensive token price analysis
* Get detailed price analysis including liquidity-weighted pricing, confidence metrics, and all possible paths
* @returns any Comprehensive price analysis with liquidity weighting
* @throws ApiError
*/
public static getTokenPriceWithLiquidityAnalysis({
address,
baseToken,
debug,
}: {
/**
* Token contract address
*/
address: string,
/**
* Base token for price calculation (default: WAE)
*/
baseToken?: string,
/**
* Include detailed path analysis
*/
debug?: boolean,
}): CancelablePromise<Record<string, any>> {
return __request(OpenAPI, {
method: 'GET',
url: '/api/dex/tokens/{address}/price/analysis',
path: {
'address': address,
},
query: {
'base_token': baseToken,
'debug': debug,
},
});
}
/**
* Get DEX token summary
* Get comprehensive summary data for a token including aggregated volume and price changes across all pools where the token appears.
Expand Down
31 changes: 31 additions & 0 deletions src/api/generated/services/PostsService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,37 @@ export class PostsService {
},
});
}
/**
* Popular posts
* Returns popular posts for selected time window. Views are ignored in v1.
* @returns any
* @throws ApiError
*/
public static popular({
window,
debug,
limit,
page,
}: {
window?: '24h' | '7d' | 'all',
/**
* Return feature breakdown when set to 1
*/
debug?: number,
limit?: number,
page?: number,
}): CancelablePromise<Pagination> {
return __request(OpenAPI, {
method: 'GET',
url: '/api/posts/popular',
query: {
'window': window,
'debug': debug,
'limit': limit,
'page': page,
},
});
}
/**
* Get post by ID
* Retrieve a specific post by its unique identifier
Expand Down
22 changes: 22 additions & 0 deletions src/api/generated/services/TokensService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -166,4 +166,26 @@ export class TokensService {
},
});
}
/**
* Get token performance (alias for /performance)
* Returns performance data using database view. This endpoint is kept for backward compatibility.
* @returns TokenPriceMovementDto
* @throws ApiError
*/
public static performanceRaw({
address,
}: {
/**
* Token address or name
*/
address: string,
}): CancelablePromise<TokenPriceMovementDto> {
return __request(OpenAPI, {
method: 'GET',
url: '/api/tokens/{address}/performance-raw',
path: {
'address': address,
},
});
}
}
1 change: 1 addition & 0 deletions src/components/MiniWalletInfo.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import React from 'react';
import { useTranslation } from 'react-i18next';
import { useWallet, useWalletConnect } from '../hooks';
import Identicon from './Identicon';
import { AeButton } from './ui/ae-button';
Expand Down
6 changes: 6 additions & 0 deletions src/components/dex/core/SwapForm.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import SwapInfoDisplay from './SwapInfoDisplay';
import NoLiquidityWarning from './NoLiquidityWarning';
import TokenInput from './TokenInput';
import { Decimal } from '../../../libs/decimal';
import { emitTrade } from '../../../libs/events';

import { useAccount, useDex } from '../../../hooks';
import { useAeSdk } from '../../../hooks/useAeSdk';
Expand Down Expand Up @@ -270,6 +271,11 @@ export default function SwapForm({ onPairSelected, onFromTokenSelected }: SwapFo
setAmountIn('');
setAmountOut('');
setShowConfirm(false);
try {
const inAddr = tokenIn?.address || '';
const outAddr = tokenOut?.address || '';
emitTrade([inAddr, outAddr].filter(Boolean));
} catch {}
}
} catch (error) {
console.error('Swap failed:', error);
Expand Down
2 changes: 1 addition & 1 deletion src/features/social/components/CommentItem.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ const CommentItem = memo(({

<div className='w-full border-l border-white ml-[20px] pl-[32px] pr-4 md:pr-6 -mt-[1px] md:border-none md:ml-0 md:pl-[52px] relative z-10'>
<div className="text-[14px] md:text-[15px] text-foreground leading-snug">
{linkify(comment.content, { knownChainNames: new Set(Object.values(chainNames || {}).map(n => n?.toLowerCase())) })}
{linkify(comment.content, { post: comment, knownChainNames: new Set(Object.values(chainNames || {}).map(n => n?.toLowerCase())) })}
</div>

{/* Media display for comments */}
Expand Down
4 changes: 2 additions & 2 deletions src/features/social/components/FeedItem.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ const FeedItem = memo(({ item, commentCount, onItemClick, isFirst = false }: Fee
<div className="text-[12px] text-white/80 line-clamp-2">
{parentError || !parent
? 'Parent unavailable/not visible'
: linkify(parent.content, { knownChainNames: new Set(Object.values(chainNames || {}).map(n => n?.toLowerCase())) })}
: linkify(parent.content, { post: parent, knownChainNames: new Set(Object.values(chainNames || {}).map(n => n?.toLowerCase())) })}
</div>
</div>
</div>
Expand Down Expand Up @@ -228,7 +228,7 @@ const FeedItem = memo(({ item, commentCount, onItemClick, isFirst = false }: Fee
{/* Right-side block above handles on-chain link; remove duplicate area */}
<div className="ml-0 md:ml-0 md:pl-0 md:mt-2 relative">
<div className="text-[14px] md:text-[15px] text-foreground leading-snug">
{linkify(item.content, { knownChainNames: new Set(Object.values(chainNames || {}).map(n => n?.toLowerCase())) })}
{linkify(item.content, { post: item, knownChainNames: new Set(Object.values(chainNames || {}).map(n => n?.toLowerCase())) })}
</div>

{(() => {
Expand Down
Loading