Skip to content

Commit e249d05

Browse files
committed
feat: add enableExperimentalFeatures flag to setup
1 parent afe0be3 commit e249d05

6 files changed

Lines changed: 37 additions & 8 deletions

File tree

apps/api/prisma/schema.prisma

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -190,9 +190,10 @@ model SessionModel {
190190
// Setup
191191

192192
model SetupStateModel {
193-
createdAt DateTime @default(now()) @db.Date
194-
updatedAt DateTime @updatedAt @db.Date
195-
id String @id @default(auto()) @map("_id") @db.ObjectId
196-
isDemo Boolean
197-
isSetup Boolean
193+
createdAt DateTime @default(now()) @db.Date
194+
updatedAt DateTime @updatedAt @db.Date
195+
id String @id @default(auto()) @map("_id") @db.ObjectId
196+
isDemo Boolean
197+
isExperimentalFeaturesEnabled Boolean?
198+
isSetup Boolean
198199
}

apps/api/src/setup/dto/init-app.dto.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ export class InitAppDto implements InitAppOptions {
1111
@ApiProperty()
1212
dummySubjectCount?: number;
1313

14+
@ApiProperty()
15+
enableExperimentalFeatures: boolean;
16+
1417
@ApiProperty()
1518
initDemo: boolean;
1619

apps/api/src/setup/setup.service.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,15 @@ export class SetupService {
2727
const savedOptions = await this.getSavedOptions();
2828
return {
2929
isDemo: Boolean(savedOptions?.isDemo),
30+
isExperimentalFeaturesEnabled: Boolean(savedOptions?.isExperimentalFeaturesEnabled),
3031
isGatewayEnabled: this.configurationService.get('GATEWAY_ENABLED'),
3132
isSetup: Boolean(savedOptions?.isSetup),
3233
release: __RELEASE__,
3334
uptime: Math.round(process.uptime())
3435
} satisfies SetupState;
3536
}
3637

37-
async initApp({ admin, dummySubjectCount, initDemo, recordsPerSubject }: InitAppOptions) {
38+
async initApp({ admin, dummySubjectCount, enableExperimentalFeatures, initDemo, recordsPerSubject }: InitAppOptions) {
3839
const isDev = this.configurationService.get('NODE_ENV') === 'development';
3940
const savedOptions = await this.getSavedOptions();
4041
if (savedOptions?.isSetup && !isDev) {
@@ -48,7 +49,9 @@ export class SetupService {
4849
recordsPerSubject: recordsPerSubject ?? 0
4950
});
5051
}
51-
await this.setupStateModel.create({ data: { isDemo: initDemo, isSetup: true } });
52+
await this.setupStateModel.create({
53+
data: { isDemo: initDemo, isExperimentalFeaturesEnabled: enableExperimentalFeatures, isSetup: true }
54+
});
5255
return { success: true };
5356
}
5457

apps/web/src/features/setup/pages/SetupPage/SetupPage.tsx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { z } from 'zod';
88

99
type SetupData = {
1010
dummySubjectCount?: number | undefined;
11+
enableExperimentalFeatures: boolean;
1112
firstName: string;
1213
initDemo: boolean;
1314
lastName: string;
@@ -65,6 +66,14 @@ export const SetupPage = ({ onSubmit }: SetupPageProps) => {
6566
{
6667
description: t('setup.demo.description'),
6768
fields: {
69+
enableExperimentalFeatures: {
70+
kind: 'boolean',
71+
label: t({
72+
en: 'Enable Experimental Features',
73+
fr: 'Activer les fonctionnalités expérimentales'
74+
}),
75+
variant: 'radio'
76+
},
6877
initDemo: {
6978
kind: 'boolean',
7079
label: t('setup.demo.init'),
@@ -117,6 +126,7 @@ export const SetupPage = ({ onSubmit }: SetupPageProps) => {
117126
.min(1)
118127
.refine((val) => estimatePasswordStrength(val).success, t('common.insufficientPasswordStrength')),
119128
initDemo: z.boolean(),
129+
enableExperimentalFeatures: z.boolean(),
120130
recordsPerSubject: z.number().int().nonnegative().optional(),
121131
dummySubjectCount: z.number().int().nonnegative().optional()
122132
})}

apps/web/src/features/setup/providers/SetupProvider.tsx

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,16 @@ export const SetupProvider = ({ children }: { children: React.ReactElement }) =>
2424

2525
return (
2626
<SetupPage
27-
onSubmit={({ dummySubjectCount, firstName, initDemo, lastName, password, recordsPerSubject, username }) => {
27+
onSubmit={({
28+
dummySubjectCount,
29+
enableExperimentalFeatures,
30+
firstName,
31+
initDemo,
32+
lastName,
33+
password,
34+
recordsPerSubject,
35+
username
36+
}) => {
2837
createSetupStateMutation.mutate({
2938
admin: {
3039
firstName,
@@ -33,6 +42,7 @@ export const SetupProvider = ({ children }: { children: React.ReactElement }) =>
3342
username
3443
},
3544
dummySubjectCount,
45+
enableExperimentalFeatures,
3646
initDemo,
3747
recordsPerSubject
3848
});

packages/schemas/src/setup/setup.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ export const $ReleaseInfo = z.union([$DevelopmentReleaseInfo, $ProductionRelease
2626
export type SetupState = z.infer<typeof $SetupState>;
2727
export const $SetupState = z.object({
2828
isDemo: z.boolean(),
29+
isExperimentalFeaturesEnabled: z.boolean(),
2930
isGatewayEnabled: z.boolean(),
3031
isSetup: z.boolean().nullable(),
3132
release: $ReleaseInfo,
@@ -42,6 +43,7 @@ export type InitAppOptions = z.infer<typeof $InitAppOptions>;
4243
export const $InitAppOptions = z.object({
4344
admin: $CreateAdminData,
4445
dummySubjectCount: z.number().int().nonnegative().optional(),
46+
enableExperimentalFeatures: z.boolean(),
4547
initDemo: z.boolean(),
4648
recordsPerSubject: z.number().int().nonnegative().optional()
4749
});

0 commit comments

Comments
 (0)