Skip to content

Commit 4aaae9a

Browse files
authored
Merge pull request #373 from AlphadayHQ/dev
v3.0.5 — Navigation + other minor fixes
2 parents 25c4a00 + 99aba03 commit 4aaae9a

33 files changed

+357
-331
lines changed

packages/frontend/android/app/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ android {
88
minSdkVersion rootProject.ext.minSdkVersion
99
targetSdkVersion rootProject.ext.targetSdkVersion
1010
versionCode 4
11-
versionName "3.0.4"
11+
versionName "3.0.5"
1212
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
1313
aaptOptions {
1414
// Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps.

packages/frontend/package.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "@alphaday/frontend",
33
"private": true,
4-
"version": "3.0.4",
4+
"version": "3.0.5",
55
"type": "module",
66
"scripts": {
77
"prepare": "export VITE_COMMIT=$(git rev-parse --short HEAD)",
@@ -23,12 +23,12 @@
2323
"@alphaday/ui-kit": "0.0.0",
2424
"@capacitor/android": "5.4.1",
2525
"@capacitor/app": "5.0.7",
26-
"@capacitor/core": "5.7.0",
27-
"@capacitor/haptics": "5.0.6",
26+
"@capacitor/core": "5.7.4",
27+
"@capacitor/haptics": "5.0.7",
2828
"@capacitor/keyboard": "5.0.8",
29-
"@capacitor/status-bar": "5.0.6",
30-
"@ionic/react": "7.6.1",
31-
"@ionic/react-router": "7.7.2",
29+
"@capacitor/status-bar": "5.0.7",
30+
"@ionic/react": "7.8.1",
31+
"@ionic/react-router": "7.8.1",
3232
"@react-oauth/google": "0.12.1",
3333
"@reduxjs/toolkit": "1.8.0",
3434
"@sentry/react": "7.101.1",

packages/frontend/src/MobileApp.tsx

Lines changed: 85 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Suspense, memo } from "react";
1+
import { memo } from "react";
22
import {
33
IonApp,
44
IonRouterOutlet,
@@ -13,15 +13,15 @@ import { ReactComponent as PortfolioSVG } from "src/assets/svg/portfolio.svg";
1313
import { ReactComponent as SuperfeedSVG } from "src/assets/svg/superfeed.svg";
1414
import { useAuth } from "./api/hooks";
1515
import { useGetFeaturesQuery } from "./api/services";
16-
import { lazyRetry } from "./api/utils/helpers";
1716
import CONFIG from "./config";
1817
import ToastContainer from "./containers/toasts/ToastContainer";
19-
import PreloaderPage from "./pages/preloader";
2018
import "@alphaday/ui-kit/global.scss";
2119
import "./customIonicStyles.scss";
22-
import { mobileRoutes } from "./routes";
23-
24-
const SuperfeedPage = lazyRetry(() => import("./mobile-pages/superfeed"));
20+
import {
21+
EMobileRoutePaths,
22+
EMobileTabRoutePaths,
23+
mobileRoutes,
24+
} from "./routes";
2525

2626
const { IS_DEV } = CONFIG;
2727

@@ -46,69 +46,95 @@ const CustomNavTab: React.FC<{
4646
* to a modal.
4747
* For the MVP it's fine to nest everything within /superfeed
4848
*/
49-
const TabNavigator: React.FC = () => {
49+
const MobileApp: React.FC = () => {
50+
useGetFeaturesQuery();
5051
const { isAuthenticated } = useAuth();
5152
return (
52-
<IonTabs>
53-
<IonRouterOutlet>
54-
{mobileRoutes.map((route) => (
55-
<Route
56-
key={route.path}
57-
path={route.path}
58-
exact={route.exact ?? false}
59-
render={() => {
53+
<IonApp className="theme-dark">
54+
<IonReactRouter>
55+
<IonTabs>
56+
<IonRouterOutlet ionPage>
57+
{mobileRoutes.map((route) => {
6058
if (route.type === "redirect") {
61-
return <Redirect to={route.redirectTo} />;
59+
return (
60+
<Redirect
61+
key={route.path}
62+
path={route.path}
63+
to={route.redirectTo}
64+
exact={route.exact ?? false}
65+
/>
66+
);
6267
}
68+
if (route.type === "fallback") {
69+
return (
70+
<Route
71+
render={() => (
72+
<Redirect to={route.redirectTo} />
73+
)}
74+
/>
75+
);
76+
}
77+
// if the route is authwalled, let's just redirect to superfeed page.
6378
if (route.authWalled && !isAuthenticated) {
64-
return <SuperfeedPage />;
79+
return (
80+
<Redirect
81+
key={route.path}
82+
path={route.path}
83+
to={EMobileRoutePaths.Superfeed}
84+
exact={route.exact ?? false}
85+
/>
86+
);
6587
}
66-
return <route.component />;
67-
}}
68-
/>
69-
))}
70-
</IonRouterOutlet>
71-
<IonTabBar slot="bottom">
72-
<IonTabButton tab="superfeed" href="/superfeed">
73-
<CustomNavTab label="Superfeed" Icon={SuperfeedSVG} />
74-
</IonTabButton>
75-
{IS_DEV && (
76-
<IonTabButton tab="market" href="/market">
77-
<CustomNavTab label="Market" Icon={MarketsSVG} />
78-
</IonTabButton>
79-
)}
80-
<IonTabButton
81-
tab="portfolio"
82-
href="/portfolio"
83-
disabled={!IS_DEV}
84-
>
85-
<CustomNavTab
86-
label="Portfolio"
87-
Icon={PortfolioSVG}
88-
disabled={!IS_DEV}
89-
/>
90-
</IonTabButton>
91-
</IonTabBar>
92-
</IonTabs>
93-
);
94-
};
95-
96-
const MobileApp: React.FC = () => {
97-
useGetFeaturesQuery();
98-
99-
return (
100-
<IonApp className="theme-dark">
101-
<IonReactRouter>
102-
<IonRouterOutlet>
103-
<Suspense fallback={<PreloaderPage />}>
104-
<Route path="/" render={() => <TabNavigator />} />
105-
</Suspense>
106-
</IonRouterOutlet>
88+
return (
89+
<Route
90+
key={route.path}
91+
path={route.path}
92+
exact={route.exact ?? false}
93+
render={() => <route.component />}
94+
/>
95+
);
96+
})}
97+
</IonRouterOutlet>
98+
<IonTabBar slot="bottom">
99+
<IonTabButton
100+
tab="superfeed"
101+
href={EMobileTabRoutePaths.Superfeed}
102+
>
103+
<CustomNavTab
104+
label="Superfeed"
105+
Icon={SuperfeedSVG}
106+
/>
107+
</IonTabButton>
108+
{IS_DEV && (
109+
<IonTabButton
110+
tab="market"
111+
href={EMobileTabRoutePaths.Market}
112+
>
113+
<CustomNavTab
114+
label="Market"
115+
Icon={MarketsSVG}
116+
/>
117+
</IonTabButton>
118+
)}
119+
<IonTabButton
120+
tab="portfolio"
121+
href={EMobileTabRoutePaths.Portfolio}
122+
disabled={!IS_DEV}
123+
>
124+
<CustomNavTab
125+
label="Portfolio"
126+
Icon={PortfolioSVG}
127+
disabled={!IS_DEV}
128+
/>
129+
</IonTabButton>
130+
</IonTabBar>
131+
</IonTabs>
107132
</IonReactRouter>
108133
<ToastContainer
109134
position="bottom-center"
110135
duration={CONFIG.UI.TOAST_DURATION}
111-
className="fontGroup-supportBold mb-20"
136+
className="fontGroup-supportBold"
137+
containerClassName="last:mb-20"
112138
/>
113139
</IonApp>
114140
);

packages/frontend/src/api/hooks/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,3 +32,4 @@ export * from "./useQuery";
3232
export * from "./useValueWatcher";
3333
export * from "./useOnScreen";
3434
export * from "./usePullToRefresh";
35+
export * from "./useHistory";

packages/frontend/src/api/hooks/useFilterKeywordSearch.ts

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -35,26 +35,30 @@ export const useFilterKeywordSearch: () => IFilterKeywordSearch = () => {
3535
const keywordResults = useMemo(() => {
3636
if (!keywordsData) return undefined;
3737
return {
38-
[ESupportedFilters.ConceptTags]: keywordsData.conceptTags.map(
39-
(keyword) => ({
38+
[ESupportedFilters.ConceptTags]: keywordsData.conceptTags
39+
.slice(0, 6)
40+
.map((keyword) => ({
4041
id: keyword.id,
4142
name: keyword.name,
4243
slug: keyword.tag.slug,
4344
type: ESupportedFilters.ConceptTags,
44-
})
45-
),
46-
[ESupportedFilters.Chains]: keywordsData.chains.map((keyword) => ({
47-
id: keyword.id,
48-
name: keyword.name,
49-
slug: keyword.tag.slug,
50-
type: ESupportedFilters.Chains,
51-
})),
52-
[ESupportedFilters.Coins]: keywordsData.coins.map((keyword) => ({
53-
id: keyword.id,
54-
name: keyword.name,
55-
slug: keyword.tag.slug,
56-
type: ESupportedFilters.Coins,
57-
})),
45+
})),
46+
[ESupportedFilters.Chains]: keywordsData.chains
47+
.slice(0, 6)
48+
.map((keyword) => ({
49+
id: keyword.id,
50+
name: keyword.name,
51+
slug: keyword.tag.slug,
52+
type: ESupportedFilters.Chains,
53+
})),
54+
[ESupportedFilters.Coins]: keywordsData.coins
55+
.slice(0, 6)
56+
.map((keyword) => ({
57+
id: keyword.id,
58+
name: keyword.name,
59+
slug: keyword.tag.slug,
60+
type: ESupportedFilters.Coins,
61+
})),
5862
};
5963
}, [keywordsData]);
6064

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import { useCallback } from "react";
2+
import { useHistory as useRRDHistory } from "react-router-dom";
3+
import { EMobileTabRoutePaths } from "src/routes";
4+
5+
export const useHistory = () => {
6+
const history = useRRDHistory();
7+
8+
/**
9+
* we shouldn't need this ideally, but adding a listener
10+
* ensures route navigation to tabs route paths which is great
11+
*/
12+
history.listen(() => {});
13+
14+
const backNavigation = useCallback(() => {
15+
if (history.length > 0) {
16+
history.goBack();
17+
} else {
18+
history.push(EMobileTabRoutePaths.Superfeed);
19+
}
20+
}, [history]);
21+
22+
return {
23+
...history,
24+
backNavigation,
25+
};
26+
};

packages/frontend/src/api/hooks/useView.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -343,15 +343,14 @@ export const useView: () => IView = () => {
343343
);
344344
return;
345345
}
346-
346+
setDialogState(EViewDialogState.Closed);
347347
saveViewAsMut(body)
348348
.unwrap()
349349
.then((response) => {
350350
Logger.debug(
351351
"useView::saveViewAs::saveViewAsMut: success. Response:",
352352
response
353353
);
354-
setDialogState(EViewDialogState.Closed);
355354
setAllowEmptyView(false);
356355
toast(`Created new Board: ${response.name}`, {
357356
status: "alert",

packages/frontend/src/api/services/superfeed/superfeedEndpoints.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,9 +83,12 @@ export const superfeedApi = alphadayApi.injectEndpoints({
8383
TLikeSuperfeedItemRequest
8484
>({
8585
query: (req) => ({
86-
url: `${SUPERFEED.BASE}${SUPERFEED.LIKE(req.id)}`,
86+
url: `${SUPERFEED.BASE}${SUPERFEED.LIKE}`,
8787
method: "POST",
88-
body: undefined,
88+
body: {
89+
item_id: req.itemId,
90+
content_type: req.contentType,
91+
},
8992
}),
9093
transformResponse: (
9194
i: TLikeSuperfeedItemRawResponse

packages/frontend/src/api/services/superfeed/types.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,8 @@ export type TGetSuperfeedFilterKeywordsResponse = {
116116
};
117117

118118
export type TLikeSuperfeedItemRequest = {
119-
id: number;
119+
itemId: number;
120+
contentType: EFeedItemType;
120121
};
121122
export type TLikeSuperfeedItemRawResponse = TRemoteSuperfeedItem;
122123
export type TLikeSuperfeedItemResponse = TSuperfeedItem;

0 commit comments

Comments
 (0)