Skip to content

Commit f938575

Browse files
committed
feat: orderly service dialog
1 parent 1dbbf0c commit f938575

File tree

17 files changed

+2027
-2186
lines changed

17 files changed

+2027
-2186
lines changed
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
-- AlterTable
2+
ALTER TABLE "Dex" ADD COLUMN "enableServiceDisclaimerDialog" BOOLEAN NOT NULL DEFAULT false;

api/prisma/schema.prisma

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ model Dex {
7979
disableTestnet Boolean @default(false) // Flag to disable testnet chains
8080
disableEvmWallets Boolean @default(false) // Flag to disable EVM wallets
8181
disableSolanaWallets Boolean @default(false) // Flag to disable Solana wallets
82+
enableServiceDisclaimerDialog Boolean @default(false) // Flag to enable one-time service disclaimer dialog
8283
tradingViewColorConfig String? // TradingView color configuration JSON
8384
seoSiteName String? // SEO Site Name
8485
seoSiteDescription String? // SEO Site Description

api/src/lib/github.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -573,6 +573,7 @@ function prepareDexConfigContent(
573573
disableTestnet?: boolean;
574574
disableEvmWallets?: boolean;
575575
disableSolanaWallets?: boolean;
576+
enableServiceDisclaimerDialog?: boolean;
576577
enableCampaigns?: boolean;
577578
tradingViewColorConfig?: string;
578579
availableLanguages?: string[];
@@ -676,6 +677,9 @@ function prepareDexConfigContent(
676677
VITE_ENABLED_MENUS:
677678
config.enabledMenus || "Trading,Portfolio,Markets,Leaderboard",
678679
VITE_CUSTOM_MENUS: config.customMenus || "",
680+
VITE_ENABLE_SERVICE_DISCLAIMER_DIALOG: String(
681+
config.enableServiceDisclaimerDialog ?? false
682+
),
679683
VITE_ENABLE_CAMPAIGNS: String(config.enableCampaigns ?? false),
680684

681685
// Social links
@@ -866,6 +870,7 @@ export async function updateDexConfig(
866870
disableTestnet?: boolean;
867871
disableEvmWallets?: boolean;
868872
disableSolanaWallets?: boolean;
873+
enableServiceDisclaimerDialog?: boolean;
869874
enableCampaigns?: boolean;
870875
tradingViewColorConfig?: string;
871876
availableLanguages?: string[];
@@ -992,6 +997,7 @@ export async function setupRepositoryWithSingleCommit(
992997
disableTestnet?: boolean;
993998
disableEvmWallets?: boolean;
994999
disableSolanaWallets?: boolean;
1000+
enableServiceDisclaimerDialog?: boolean;
9951001
enableCampaigns?: boolean;
9961002
tradingViewColorConfig?: string;
9971003
availableLanguages?: string[];
@@ -1486,6 +1492,7 @@ export async function triggerRedeployment(
14861492
disableTestnet?: boolean;
14871493
disableEvmWallets?: boolean;
14881494
disableSolanaWallets?: boolean;
1495+
enableServiceDisclaimerDialog?: boolean;
14891496
enableCampaigns?: boolean;
14901497
tradingViewColorConfig?: string;
14911498
availableLanguages?: string[];
@@ -1545,6 +1552,7 @@ export interface DexConfig {
15451552
disableTestnet?: boolean;
15461553
disableEvmWallets?: boolean;
15471554
disableSolanaWallets?: boolean;
1555+
enableServiceDisclaimerDialog?: boolean;
15481556
enableCampaigns?: boolean;
15491557
tradingViewColorConfig?: string;
15501558
availableLanguages?: string[];

api/src/models/dex.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,7 @@ export const dexSchema = z.object({
170170
disableTestnet: z.boolean().optional(),
171171
disableEvmWallets: z.boolean().optional(),
172172
disableSolanaWallets: z.boolean().optional(),
173+
enableServiceDisclaimerDialog: z.boolean().optional(),
173174
enableCampaigns: z.boolean().optional(),
174175
tradingViewColorConfig: z.string().nullish(),
175176
availableLanguages: z.array(z.nativeEnum(LocaleEnum)).optional(),
@@ -261,6 +262,9 @@ export const dexFormSchema = dexSchema
261262
disableSolanaWallets: z
262263
.union([z.boolean(), z.string().transform(val => val === "true")])
263264
.optional(),
265+
enableServiceDisclaimerDialog: z
266+
.union([z.boolean(), z.string().transform(val => val === "true")])
267+
.optional(),
264268
enableCampaigns: z
265269
.union([z.boolean(), z.string().transform(val => val === "true")])
266270
.optional(),
@@ -422,6 +426,8 @@ export async function createDex(
422426
disableTestnet: validatedData.disableTestnet,
423427
disableEvmWallets: validatedData.disableEvmWallets,
424428
disableSolanaWallets: validatedData.disableSolanaWallets,
429+
enableServiceDisclaimerDialog:
430+
validatedData.enableServiceDisclaimerDialog,
425431
enableCampaigns: validatedData.enableCampaigns,
426432
tradingViewColorConfig:
427433
validatedData.tradingViewColorConfig || undefined,
@@ -485,6 +491,8 @@ export async function createDex(
485491
disableTestnet: validatedData.disableTestnet,
486492
disableEvmWallets: validatedData.disableEvmWallets,
487493
disableSolanaWallets: validatedData.disableSolanaWallets,
494+
enableServiceDisclaimerDialog:
495+
validatedData.enableServiceDisclaimerDialog,
488496
enableCampaigns: validatedData.enableCampaigns,
489497
tradingViewColorConfig: validatedData.tradingViewColorConfig,
490498
availableLanguages: validatedData.availableLanguages,
@@ -629,6 +637,9 @@ export async function updateDex(
629637
updateData.disableEvmWallets = validatedData.disableEvmWallets;
630638
if ("disableSolanaWallets" in validatedData)
631639
updateData.disableSolanaWallets = validatedData.disableSolanaWallets;
640+
if ("enableServiceDisclaimerDialog" in validatedData)
641+
updateData.enableServiceDisclaimerDialog =
642+
validatedData.enableServiceDisclaimerDialog;
632643
if ("enableCampaigns" in validatedData)
633644
updateData.enableCampaigns = validatedData.enableCampaigns;
634645
if ("tradingViewColorConfig" in validatedData)

api/src/routes/admin.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,8 @@ adminRoutes.post(
191191
disableTestnet: updatedDex.disableTestnet || false,
192192
disableEvmWallets: updatedDex.disableEvmWallets || false,
193193
disableSolanaWallets: updatedDex.disableSolanaWallets || false,
194+
enableServiceDisclaimerDialog:
195+
updatedDex.enableServiceDisclaimerDialog || false,
194196
enableCampaigns: updatedDex.enableCampaigns || false,
195197
tradingViewColorConfig:
196198
updatedDex.tradingViewColorConfig || undefined,
@@ -388,6 +390,8 @@ adminRoutes.post("/dex/:id/redeploy", async (c: AdminContext) => {
388390
disableTestnet: dex.disableTestnet || false,
389391
disableEvmWallets: dex.disableEvmWallets || false,
390392
disableSolanaWallets: dex.disableSolanaWallets || false,
393+
enableServiceDisclaimerDialog:
394+
dex.enableServiceDisclaimerDialog || false,
391395
enableCampaigns: dex.enableCampaigns || false,
392396
tradingViewColorConfig: dex.tradingViewColorConfig || undefined,
393397
availableLanguages: dex.availableLanguages,
@@ -608,6 +612,8 @@ adminRoutes.post(
608612
disableTestnet: dex.disableTestnet || false,
609613
disableEvmWallets: dex.disableEvmWallets || false,
610614
disableSolanaWallets: dex.disableSolanaWallets || false,
615+
enableServiceDisclaimerDialog:
616+
dex.enableServiceDisclaimerDialog || false,
611617
enableCampaigns: dex.enableCampaigns || false,
612618
tradingViewColorConfig: dex.tradingViewColorConfig?.toString(),
613619
availableLanguages: dex.availableLanguages,

api/src/routes/dex.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,8 @@ dexRoutes.put(
327327
disableTestnet: updatedDex.disableTestnet,
328328
disableEvmWallets: updatedDex.disableEvmWallets,
329329
disableSolanaWallets: updatedDex.disableSolanaWallets,
330+
enableServiceDisclaimerDialog:
331+
updatedDex.enableServiceDisclaimerDialog,
330332
enableCampaigns: updatedDex.enableCampaigns,
331333
tradingViewColorConfig:
332334
updatedDex.tradingViewColorConfig || undefined,

api/src/routes/graduation.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,8 @@ graduationRoutes.post(
210210
disableTestnet: dex.disableTestnet || false,
211211
disableEvmWallets: dex.disableEvmWallets || false,
212212
disableSolanaWallets: dex.disableSolanaWallets || false,
213+
enableServiceDisclaimerDialog:
214+
dex.enableServiceDisclaimerDialog || false,
213215
enableCampaigns: dex.enableCampaigns || false,
214216
tradingViewColorConfig: dex.tradingViewColorConfig?.toString(),
215217
availableLanguages: dex.availableLanguages,

app/app/components/DexSectionRenderer.tsx

Lines changed: 22 additions & 101 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@ import PrivyConfigSection from "./PrivyConfigSection";
1111
import BlockchainConfigSection from "./BlockchainConfigSection";
1212
import LanguageSupportSection from "./LanguageSupportSection";
1313
import NavigationMenuSection from "./NavigationMenuSection";
14+
import ServiceDisclaimerSection from "./ServiceDisclaimerSection";
1415
import ProgressTracker from "./ProgressTracker";
16+
import { DexSectionProps } from "../hooks/useDexForm";
1517

1618
export interface DexSectionConfig {
1719
id: number;
@@ -22,103 +24,8 @@ export interface DexSectionConfig {
2224
// eslint-disable-next-line @typescript-eslint/no-explicit-any
2325
component: React.ComponentType<any>;
2426
// eslint-disable-next-line @typescript-eslint/no-explicit-any
25-
getProps: (allProps: DexSectionAllProps) => any;
26-
getValidationTest?: (allProps: DexSectionAllProps) => boolean;
27-
}
28-
29-
export interface DexSectionAllProps {
30-
// Broker Details
31-
brokerName: string;
32-
handleInputChange: (
33-
field: string
34-
) => (e: React.ChangeEvent<HTMLInputElement>) => void;
35-
brokerNameValidator: (value: string) => string | null;
36-
37-
// Branding
38-
primaryLogo: Blob | null;
39-
secondaryLogo: Blob | null;
40-
favicon: Blob | null;
41-
handleImageChange: (field: string) => (blob: Blob | null) => void;
42-
43-
// Theme
44-
currentTheme: string | null;
45-
defaultTheme: string;
46-
showThemeEditor: boolean;
47-
viewCssCode: boolean;
48-
activeThemeTab: "colors" | "fonts" | "rounded" | "spacing" | "tradingview";
49-
themePrompt: string;
50-
isGeneratingTheme: boolean;
51-
themeApplied: boolean;
52-
tradingViewColorConfig: string | null;
53-
toggleThemeEditor: () => void;
54-
handleResetTheme: () => void;
55-
handleResetToDefault: () => void;
56-
handleThemeEditorChange: (value: string) => void;
57-
setViewCssCode: (value: boolean) => void;
58-
ThemeTabButton: React.FC<{
59-
tab: "colors" | "fonts" | "rounded" | "spacing" | "tradingview";
60-
label: string;
61-
}>;
62-
updateCssColor: (variableName: string, newColorHex: string) => void;
63-
updateCssValue: (variableName: string, newValue: string) => void;
64-
handleGenerateTheme: () => void;
65-
setTradingViewColorConfig: (config: string | null) => void;
66-
67-
// PnL Posters
68-
pnlPosters: (Blob | null)[];
69-
handlePnLPosterChange: (posters: (Blob | null)[]) => void;
70-
71-
// Social Links
72-
telegramLink: string;
73-
discordLink: string;
74-
xLink: string;
75-
urlValidator: (value: string) => string | null;
76-
77-
// SEO
78-
seoSiteName: string;
79-
seoSiteDescription: string;
80-
seoSiteLanguage: string;
81-
seoSiteLocale: string;
82-
seoTwitterHandle: string;
83-
seoThemeColor: string;
84-
seoKeywords: string;
85-
86-
// Reown
87-
walletConnectProjectId: string;
88-
89-
// Privy
90-
privyAppId: string;
91-
privyTermsOfUse: string;
92-
enableAbstractWallet: boolean;
93-
onEnableAbstractWalletChange: (value: boolean) => void;
94-
disableEvmWallets: boolean;
95-
disableSolanaWallets: boolean;
96-
onDisableEvmWalletsChange: (value: boolean) => void;
97-
onDisableSolanaWalletsChange: (value: boolean) => void;
98-
privyLoginMethods: string[];
99-
onPrivyLoginMethodsChange: (methods: string[]) => void;
100-
101-
// Blockchain
102-
chainIds: number[];
103-
onChainIdsChange: (chainIds: number[]) => void;
104-
defaultChain?: number;
105-
onDefaultChainChange?: (chainId: number | undefined) => void;
106-
disableMainnet: boolean;
107-
disableTestnet: boolean;
108-
onDisableMainnetChange: (value: boolean) => void;
109-
onDisableTestnetChange: (value: boolean) => void;
110-
111-
// Language Support
112-
availableLanguages: string[];
113-
onAvailableLanguagesChange: (languages: string[]) => void;
114-
115-
// Navigation Menus
116-
enabledMenus: string;
117-
setEnabledMenus: (menus: string) => void;
118-
customMenus: string;
119-
setCustomMenus: (menus: string) => void;
120-
enableCampaigns: boolean;
121-
setEnableCampaigns: (value: boolean) => void;
27+
getProps: (sectionProps: DexSectionProps) => any;
28+
getValidationTest?: (sectionProps: DexSectionProps) => boolean;
12229
}
12330

12431
export const DEX_SECTIONS: DexSectionConfig[] = [
@@ -325,12 +232,26 @@ export const DEX_SECTIONS: DexSectionConfig[] = [
325232
setEnableCampaigns: props.setEnableCampaigns,
326233
}),
327234
},
235+
{
236+
id: 12,
237+
key: "serviceDisclaimer",
238+
title: "Service Disclaimer",
239+
description:
240+
"Enable a one-time disclaimer dialog that informs users about the platform's use of Orderly Network's infrastructure. This is optional and can help set proper expectations for users.",
241+
isOptional: true,
242+
component: ServiceDisclaimerSection,
243+
getProps: props => ({
244+
enableServiceDisclaimerDialog: props.enableServiceDisclaimerDialog,
245+
onEnableServiceDisclaimerDialogChange:
246+
props.onEnableServiceDisclaimerDialogChange,
247+
}),
248+
},
328249
];
329250

330251
interface DexSectionRendererProps {
331252
mode: "accordion" | "direct";
332253
sections: DexSectionConfig[];
333-
allProps: DexSectionAllProps;
254+
sectionProps: DexSectionProps;
334255
currentStep?: number;
335256
completedSteps?: Record<number, boolean>;
336257
setCurrentStep?: (step: number) => void;
@@ -344,7 +265,7 @@ interface DexSectionRendererProps {
344265
const DexSectionRenderer: React.FC<DexSectionRendererProps> = ({
345266
mode,
346267
sections,
347-
allProps,
268+
sectionProps,
348269
currentStep,
349270
completedSteps,
350271
setCurrentStep,
@@ -397,7 +318,7 @@ const DexSectionRenderer: React.FC<DexSectionRendererProps> = ({
397318
const renderSection = (section: DexSectionConfig, index: number) => {
398319
const Component = section.component;
399320
const componentProps = {
400-
...section.getProps(allProps),
321+
...section.getProps(sectionProps),
401322
idPrefix: mode === "accordion" ? "" : idPrefix,
402323
};
403324

@@ -436,7 +357,7 @@ const DexSectionRenderer: React.FC<DexSectionRendererProps> = ({
436357
onNextInternal={() => handleNextStep(section.id)}
437358
isStepContentValidTest={
438359
section.getValidationTest
439-
? section.getValidationTest(allProps)
360+
? section.getValidationTest(sectionProps)
440361
: true
441362
}
442363
isActive={currentStep === section.id}

0 commit comments

Comments
 (0)