higher order component.
+For example, say your “feature” was the tutorials UI in home.tsx (denoted below as `…)`, then the below addition of would tie that UI to the feature flag value you added in the previous step
+
+
+
+
+
+### Front end feature that is not integrated as a React.node
+There are scenarios in which a feature is integrated with the front end through other means then jsx code. In those scenarios you can use the useFeatureFlag(key: FeatureFlagKey) hook to get the value of a given feature flag.
+The below example uses the useFeatureFlag hook to determine whether a not a “feature” should be included in toolbar Items.
+
+
+
+
+### Server-side Feature
+Feature flag state is maintained at parity between the server and client workspaces. So if you have server side code that you want to put behind a feature flag it is possible. That being said most feature scenarios will likely gate off entry point in the client side such that server side feature code can’t be hit.
+
+Feature flag state on the server can be accessed through FeatureFlagService.currentFeatureFlagMap and if you need a specific value, FeatureFlagService. getFeatureFlagValue(featureFlagKey: FeatureFlagKey). For example the below code would conditionally add a step to the createProject server flow.
+
+
+
+### Extension feature
+Feature flag state not yet surfaced to extensions.
+
+## Toggling hidden Feature Flags
+Non hidden feature flags are toggleable through the app settings page in Composer. Hidden feature flags can be configured by the end user in a few different ways depending on your environment.
+
+### Electron app
+Currently no way yet to set feature flags in downloaded electron app
+
+### Dev env
+Feature flag values are stored in data.json. In a development environment where you have direct access to this file you can toggle the value for hidden and non hidden feature flags directly in data.json.
+Next iteration task items:
+
+## Work items for R12
+Tracked [here](https://github.com/microsoft/BotFramework-Composer/issues/4513).
+- Add UI and back end functionality to toggle all feature flags to false at once (per design spec)
+- Add feature flag groups (per design spec)
+- Feature flag values available to extensions
+- Add ability to configure hidden feature flags when running electron app
+- Crete unit tests for all feature flag scenarios
diff --git a/extensions/azurePublish/yarn.lock b/extensions/azurePublish/yarn.lock
index 7d58c71d80..bc45364ad0 100644
--- a/extensions/azurePublish/yarn.lock
+++ b/extensions/azurePublish/yarn.lock
@@ -964,6 +964,9 @@ buffer@^5.1.0, buffer@^5.5.0:
version "5.6.0"
resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786"
integrity sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==
+ dependencies:
+ base64-js "^1.0.2"
+ ieee754 "^1.1.4"
cardinal@^2.1.1:
version "2.1.1"
diff --git a/extensions/localPublish/yarn.lock b/extensions/localPublish/yarn.lock
index e2b9dd013c..00ded2c015 100644
--- a/extensions/localPublish/yarn.lock
+++ b/extensions/localPublish/yarn.lock
@@ -212,6 +212,9 @@ buffer@^5.1.0, buffer@^5.5.0:
version "5.6.0"
resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786"
integrity sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==
+ dependencies:
+ base64-js "^1.0.2"
+ ieee754 "^1.1.4"
chownr@^2.0.0:
version "2.0.0"
diff --git a/extensions/vacore/src/index.ts b/extensions/vacore/src/index.ts
index a30d1aa6e9..e96fc0c3f9 100644
--- a/extensions/vacore/src/index.ts
+++ b/extensions/vacore/src/index.ts
@@ -5,13 +5,11 @@ import path from 'path';
import formatMessage from 'format-message';
export default async (composer: any): Promise => {
- if (process.env.VA_CREATION) {
- // register the base template which will appear in the new bot modal
- composer.addBotTemplate({
- id: 'va-core',
- name: formatMessage('VA Core'),
- description: formatMessage('The core of your new VA - ready to run, just add skills!'),
- path: path.resolve(__dirname, '../template'),
- });
- }
+ // register the base template which will appear in the new bot modal
+ composer.addBotTemplate({
+ id: 'va-core',
+ name: formatMessage('VA Core'),
+ description: formatMessage('The core of your new VA - ready to run, just add skills!'),
+ path: path.resolve(__dirname, '../template'),
+ });
};