Skip to content

Commit

Permalink
add suspense hook to generated code
Browse files Browse the repository at this point in the history
Signed-off-by: Michael Beemer <[email protected]>
  • Loading branch information
beeme1mr committed Jan 13, 2025
1 parent 52abb86 commit cdce221
Show file tree
Hide file tree
Showing 2 changed files with 87 additions and 2 deletions.
67 changes: 66 additions & 1 deletion cmd/generate/testdata/success_react.golden
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
'use client';

import { type ReactFlagEvaluationOptions, useFlag } from "@openfeature/react-sdk";
import {
type ReactFlagEvaluationOptions,
type ReactFlagEvaluationNoSuspenseOptions,
useFlag,
useSuspenseFlag,
} from "@openfeature/react-sdk";

/**
* Discount percentage applied to purchases.
Expand All @@ -14,6 +19,21 @@ export const useDiscountPercentage = (options: ReactFlagEvaluationOptions) => {
return useFlag("discountPercentage", 0.15, options);
};

/**
* Discount percentage applied to purchases.
*
* **Details:**
* - flag key: `discountPercentage`
* - default value: `0.15`
* - type: `number`
*
* Equivalent to useFlag with options: `{ suspend: true }`
* @experimental — Suspense is an experimental feature subject to change in future versions.
*/
export const useSuspenseDiscountPercentage = (options: ReactFlagEvaluationNoSuspenseOptions) => {
return useSuspenseFlag("discountPercentage", 0.15, options);
};

/**
* Controls whether Feature A is enabled.
*
Expand All @@ -26,6 +46,21 @@ export const useEnableFeatureA = (options: ReactFlagEvaluationOptions) => {
return useFlag("enableFeatureA", false, options);
};

/**
* Controls whether Feature A is enabled.
*
* **Details:**
* - flag key: `enableFeatureA`
* - default value: `false`
* - type: `boolean`
*
* Equivalent to useFlag with options: `{ suspend: true }`
* @experimental — Suspense is an experimental feature subject to change in future versions.
*/
export const useSuspenseEnableFeatureA = (options: ReactFlagEvaluationNoSuspenseOptions) => {
return useSuspenseFlag("enableFeatureA", false, options);
};

/**
* The message to use for greeting users.
*
Expand All @@ -38,6 +73,21 @@ export const useGreetingMessage = (options: ReactFlagEvaluationOptions) => {
return useFlag("greetingMessage", "Hello there!", options);
};

/**
* The message to use for greeting users.
*
* **Details:**
* - flag key: `greetingMessage`
* - default value: `Hello there!`
* - type: `string`
*
* Equivalent to useFlag with options: `{ suspend: true }`
* @experimental — Suspense is an experimental feature subject to change in future versions.
*/
export const useSuspenseGreetingMessage = (options: ReactFlagEvaluationNoSuspenseOptions) => {
return useSuspenseFlag("greetingMessage", "Hello there!", options);
};

/**
* Maximum allowed length for usernames.
*
Expand All @@ -49,3 +99,18 @@ export const useGreetingMessage = (options: ReactFlagEvaluationOptions) => {
export const useUsernameMaxLength = (options: ReactFlagEvaluationOptions) => {
return useFlag("usernameMaxLength", 50, options);
};

/**
* Maximum allowed length for usernames.
*
* **Details:**
* - flag key: `usernameMaxLength`
* - default value: `50`
* - type: `number`
*
* Equivalent to useFlag with options: `{ suspend: true }`
* @experimental — Suspense is an experimental feature subject to change in future versions.
*/
export const useSuspenseUsernameMaxLength = (options: ReactFlagEvaluationNoSuspenseOptions) => {
return useSuspenseFlag("usernameMaxLength", 50, options);
};
22 changes: 21 additions & 1 deletion internal/generate/plugins/react/react.tmpl
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
'use client';

import { type ReactFlagEvaluationOptions, useFlag } from "@openfeature/react-sdk";
import {
type ReactFlagEvaluationOptions,
type ReactFlagEvaluationNoSuspenseOptions,
useFlag,
useSuspenseFlag,
} from "@openfeature/react-sdk";
{{ range .Flags}}
/**
* {{.Docs}}
Expand All @@ -13,4 +18,19 @@ import { type ReactFlagEvaluationOptions, useFlag } from "@openfeature/react-sdk
export const use{{FlagVarName .Name}} = (options: ReactFlagEvaluationOptions) => {
return useFlag({{FlagInitParam .Name}}, {{CodeDefaultValueLiteral .}}, options);
};

/**
* {{.Docs}}
*
* **Details:**
* - flag key: `{{ .Name}}`
* - default value: `{{ .CodeDefault }}`
* - type: `{{TypeString .Type}}`
*
* Equivalent to useFlag with options: `{ suspend: true }`
* @experimental — Suspense is an experimental feature subject to change in future versions.
*/
export const useSuspense{{FlagVarName .Name}} = (options: ReactFlagEvaluationNoSuspenseOptions) => {
return useSuspenseFlag({{FlagInitParam .Name}}, {{CodeDefaultValueLiteral .}}, options);
};
{{ end}}

0 comments on commit cdce221

Please sign in to comment.