Skip to content

Commit 892f073

Browse files
committed
Switch to growthbook feature flags
1 parent f8fca39 commit 892f073

6 files changed

Lines changed: 37 additions & 16 deletions

File tree

app/backend/feature-flags.dev.json

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
{
2-
"test_growthbook_integration": true,
3-
"sms_enabled": false,
4-
"strong_verification_enabled": false,
5-
"log_native_ota_requests": true,
6-
"donations_enabled": false,
72
"antibot_enabled": false,
8-
"postal_verification_enabled": false,
3+
"donations_enabled": false,
4+
"email_ics_attachments_enabled": true,
95
"listmonk_enabled": false,
6+
"log_native_ota_requests": true,
107
"notification_translations_enabled": true,
11-
"email_ics_attachments_enabled": true
8+
"postal_verification_enabled": false,
9+
"public_trips_enabled": true,
10+
"sms_enabled": false,
11+
"strong_verification_enabled": false,
12+
"test_growthbook_integration": true
1213
}

app/backend/src/couchers/servicers/public_trips.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,9 @@ class PublicTrips(public_trips_pb2_grpc.PublicTripsServicer):
8989
def CreatePublicTrip(
9090
self, request: public_trips_pb2.CreatePublicTripReq, context: CouchersContext, session: Session
9191
) -> public_trips_pb2.PublicTrip:
92+
if not context.get_boolean_value("public_trips_enabled", False):
93+
context.abort_with_error_code(grpc.StatusCode.UNAVAILABLE, "public_trips_disabled")
94+
9295
user = session.execute(select(User).where(User.id == context.user_id)).scalar_one()
9396
if not has_completed_profile(session, user):
9497
context.abort_with_error_code(grpc.StatusCode.FAILED_PRECONDITION, "incomplete_profile_create_public_trip")
@@ -174,6 +177,9 @@ def CreatePublicTrip(
174177
def GetPublicTrip(
175178
self, request: public_trips_pb2.GetPublicTripReq, context: CouchersContext, session: Session
176179
) -> public_trips_pb2.PublicTrip:
180+
if not context.get_boolean_value("public_trips_enabled", False):
181+
context.abort_with_error_code(grpc.StatusCode.UNAVAILABLE, "public_trips_disabled")
182+
177183
trip_node_id = session.execute(
178184
select(PublicTrip.node_id).where(PublicTrip.id == request.trip_id)
179185
).scalar_one_or_none()
@@ -196,6 +202,9 @@ def GetPublicTrip(
196202
def ListPublicTrips(
197203
self, request: public_trips_pb2.ListPublicTripsReq, context: CouchersContext, session: Session
198204
) -> public_trips_pb2.ListPublicTripsRes:
205+
if not context.get_boolean_value("public_trips_enabled", False):
206+
context.abort_with_error_code(grpc.StatusCode.UNAVAILABLE, "public_trips_disabled")
207+
199208
page_size = min(MAX_PAGINATION_LENGTH, request.page_size or MAX_PAGINATION_LENGTH)
200209
next_page_id = int(request.page_token) if request.page_token else 0
201210

@@ -227,6 +236,9 @@ def ListPublicTrips(
227236
def ListPublicTripsByUser(
228237
self, request: public_trips_pb2.ListPublicTripsByUserReq, context: CouchersContext, session: Session
229238
) -> public_trips_pb2.ListPublicTripsByUserRes:
239+
if not context.get_boolean_value("public_trips_enabled", False):
240+
context.abort_with_error_code(grpc.StatusCode.UNAVAILABLE, "public_trips_disabled")
241+
230242
page_size = min(MAX_PAGINATION_LENGTH, request.page_size or MAX_PAGINATION_LENGTH)
231243
cursor_date, cursor_id = _parse_page_token(request.page_token)
232244
ascending = request.ascending
@@ -299,6 +311,9 @@ def ListPublicTripsByUser(
299311
def UpdatePublicTrip(
300312
self, request: public_trips_pb2.UpdatePublicTripReq, context: CouchersContext, session: Session
301313
) -> public_trips_pb2.PublicTrip:
314+
if not context.get_boolean_value("public_trips_enabled", False):
315+
context.abort_with_error_code(grpc.StatusCode.UNAVAILABLE, "public_trips_disabled")
316+
302317
public_trip = session.execute(select(PublicTrip).where(PublicTrip.id == request.trip_id)).scalar_one_or_none()
303318

304319
if not public_trip or public_trip.user_id != context.user_id:

app/web/features/communities/CommunityPage/CommunityPage.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { useFeatureValue } from "@growthbook/growthbook-react";
12
import { styled, Typography } from "@mui/material";
23
import HtmlMeta from "components/HtmlMeta";
34
import EditCommunityPage from "features/communities/EditCommunityInfoPage";
@@ -18,8 +19,6 @@ import PageHeader from "../PageHeader";
1819
import CommunityPageSubHeader from "./CommunityPageSubHeader";
1920
import InfoPageSection from "./InfoPageSection";
2021

21-
const isPublicTripsEnabled = process.env.NODE_ENV !== "production";
22-
2322
const StyledTitle = styled(Typography)(() => ({
2423
marginTop: theme.spacing(3),
2524
}));
@@ -34,6 +33,7 @@ export default function CommunityPage({
3433
edit: boolean | undefined;
3534
}) {
3635
const { t } = useTranslation([COMMUNITIES]);
36+
const isPublicTripsEnabled = useFeatureValue("public_trips_enabled", false);
3737

3838
return (
3939
<CommunityBase communityId={communityId}>

app/web/features/communities/CommunityPage/CommunityPageSubHeader.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { useFeatureValue } from "@growthbook/growthbook-react";
12
import { TabContext } from "@mui/lab";
23
import { Breadcrumbs, styled, Typography } from "@mui/material";
34
import BetaFlag from "components/BetaFlag";
@@ -13,8 +14,6 @@ import { CommunityTab, routeToCommunity } from "routes";
1314

1415
import JoinCommunityButton from "./JoinCommunityButton";
1516

16-
const isPublicTripsEnabled = process.env.NODE_ENV !== "production";
17-
1817
const StyledBreadcrumbsContainer = styled("div")(() => ({
1918
display: "flex",
2019
alignItems: "center",
@@ -35,6 +34,7 @@ export default function CommunityPageSubHeader({
3534
tab: CommunityTab;
3635
}) {
3736
const { t } = useTranslation([COMMUNITIES, PUBLIC_TRIPS]);
37+
const isPublicTripsEnabled = useFeatureValue("public_trips_enabled", false);
3838

3939
const router = useRouter();
4040
const communityTabBarLabels: Partial<

app/web/features/dashboard/Dashboard.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { useFeatureValue } from "@growthbook/growthbook-react";
12
import { Alert, Box, Grid, Typography } from "@mui/material";
23
import Divider from "components/Divider";
34
import HtmlMeta from "components/HtmlMeta";
@@ -19,10 +20,9 @@ import MyEvents from "./MyEvents";
1920
import ReminderCarousel from "./ReminderCarousel";
2021
import UpcomingStays from "./UpcomingStays";
2122

22-
const isPublicTripsEnabled = process.env.NEXT_PUBLIC_COUCHERS_ENV !== "prod";
23-
2423
export default function Dashboard() {
2524
const { t } = useTranslation([GLOBAL, DASHBOARD]);
25+
const isPublicTripsEnabled = useFeatureValue("public_trips_enabled", false);
2626

2727
return (
2828
<>

app/web/pages/my-public-trips.tsx

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { useFeatureValue } from "@growthbook/growthbook-react";
12
import { appGetLayout } from "components/AppRoute";
23
import MyPublicTripsPage from "features/publicTrips/MyPublicTripsPage";
34
import {
@@ -10,10 +11,8 @@ import { GetStaticProps } from "next";
1011
import nextI18nextConfig from "next-i18next.config";
1112
import { serverSideTranslations } from "next-i18next/serverSideTranslations";
1213

13-
const isPublicTripsEnabled = process.env.NEXT_PUBLIC_COUCHERS_ENV !== "prod";
14-
1514
export const getStaticProps: GetStaticProps = async ({ locale }) => {
16-
if (!isPublicTripsEnabled) {
15+
if (process.env.NEXT_PUBLIC_COUCHERS_ENV === "prod") {
1716
return { notFound: true };
1817
}
1918
return {
@@ -28,6 +27,12 @@ export const getStaticProps: GetStaticProps = async ({ locale }) => {
2827
};
2928

3029
export default function MyPublicTrips() {
30+
const isPublicTripsEnabled = useFeatureValue("public_trips_enabled", false);
31+
32+
if (!isPublicTripsEnabled) {
33+
return null;
34+
}
35+
3136
return <MyPublicTripsPage />;
3237
}
3338

0 commit comments

Comments
 (0)