From 255a51f5cfdeec935f50c17566daf24fe92cfcef Mon Sep 17 00:00:00 2001 From: Noah Spannbauer Date: Thu, 6 Jun 2024 07:12:21 -0500 Subject: [PATCH] Updating get feature flags functions --- api/package.json | 2 +- api/src/app.controller.ts | 18 +++++++++++------- app/src/App.tsx | 7 ++++--- app/src/context/appContext/IAppContextState.ts | 4 +--- app/src/context/appContext/reducer.ts | 3 +-- app/src/hooks/featureFlag/UseFeatureFlag.tsx | 4 ++-- package-lock.json | 8 ++++---- 7 files changed, 24 insertions(+), 22 deletions(-) diff --git a/api/package.json b/api/package.json index ec3dec2..73789d8 100644 --- a/api/package.json +++ b/api/package.json @@ -28,7 +28,7 @@ "@nestjs/core": "^10.0.0", "@nestjs/passport": "^10.0.3", "@nestjs/platform-express": "^10.0.0", - "@noahspan/noahspan-modules": "^0.2.4", + "@noahspan/noahspan-modules": "^0.2.7", "@schematics/angular": "^17.3.7", "dotenv": "^16.4.5", "reflect-metadata": "0.1.13", diff --git a/api/src/app.controller.ts b/api/src/app.controller.ts index 0303511..95bf557 100644 --- a/api/src/app.controller.ts +++ b/api/src/app.controller.ts @@ -16,15 +16,19 @@ export class AppController { @Public() @Get('featureFlags') - async getFeatureFlags(@Query() query: any): Promise { - console.log(process.env.CLIENT_ID); + async getFeatureFlags( + @Query() query: any + ): Promise<{ key: string; enabled: boolean }[]> { try { - const token: string = await this.appConfigService.getToken(); - const featureFlags: FeatureFlagValue[] = + const featureFlagKeys: string[] = + query.keys && query.keys.toString().includes(';') + ? query.keys.split(';') + : [query.keys]; + const featureFlagLabel: string = query.label; + const featureFlags: { key: string; enabled: boolean }[] = await this.appConfigService.getFeatureFlags( - token, - `${query.key}`, - query.label + featureFlagKeys, + featureFlagLabel ); return featureFlags; diff --git a/app/src/App.tsx b/app/src/App.tsx index cf7bead..a724182 100644 --- a/app/src/App.tsx +++ b/app/src/App.tsx @@ -4,7 +4,6 @@ import Pilots from './components/pilots/Pilots'; import { useAppContext } from './hooks/appContext/UseAppContext'; import axios, { AxiosResponse } from 'axios'; import { useFeatureFlag } from './hooks/featureFlag/UseFeatureFlag'; -import { IFeatureFlagValue } from './hooks/featureFlag/IFeatureFlagValue'; const App: React.FC = () => { const appContext = useAppContext(); @@ -12,10 +11,12 @@ const App: React.FC = () => { useEffect(() => { const getFeatureFlags = async () => { try { + const featureFlagKeys: string = 'flying-pilots'; const response: AxiosResponse = await axios.get( - `http://localhost:7071/api/featureFlags?key=flying*&label=${process.env.NODE_ENV}` + `http://localhost:7071/api/featureFlags?keys=${featureFlagKeys}&label=${process.env.NODE_ENV}` ); - const featureFlags: IFeatureFlagValue[] = response.data; + const featureFlags: { key: string; enabled: boolean }[] = response.data; + console.log(featureFlags); if (featureFlags.length > 0) { appContext.dispatch({ diff --git a/app/src/context/appContext/IAppContextState.ts b/app/src/context/appContext/IAppContextState.ts index 094551b..44bfc8e 100644 --- a/app/src/context/appContext/IAppContextState.ts +++ b/app/src/context/appContext/IAppContextState.ts @@ -1,5 +1,3 @@ -import { IFeatureFlagValue } from '../../hooks/featureFlag/IFeatureFlagValue'; - export interface IAppContextState { - featureFlags: IFeatureFlagValue[]; + featureFlags: { key: string; enabled: boolean }[]; } diff --git a/app/src/context/appContext/reducer.ts b/app/src/context/appContext/reducer.ts index cab967c..8803644 100644 --- a/app/src/context/appContext/reducer.ts +++ b/app/src/context/appContext/reducer.ts @@ -1,9 +1,8 @@ -import { IFeatureFlagValue } from '../../hooks/featureFlag/IFeatureFlagValue'; import { IAppContextState } from './IAppContextState'; export type Action = { type: 'SET_FEATURE_FLAGS'; - payload: IFeatureFlagValue[]; + payload: { key: string; enabled: boolean }[]; }; export const reducer = ( diff --git a/app/src/hooks/featureFlag/UseFeatureFlag.tsx b/app/src/hooks/featureFlag/UseFeatureFlag.tsx index 006f7fa..7b961c1 100644 --- a/app/src/hooks/featureFlag/UseFeatureFlag.tsx +++ b/app/src/hooks/featureFlag/UseFeatureFlag.tsx @@ -1,9 +1,9 @@ import { useAppContext } from '../appContext/UseAppContext'; -export const useFeatureFlag = (featureFlagId: string) => { +export const useFeatureFlag = (featureFlagKey: string) => { const appContext = useAppContext(); const featureFlag = appContext.state.featureFlags.find( - (featureFlag) => featureFlag.id === featureFlagId + (featureFlag) => featureFlag.key === featureFlagKey ); return featureFlag; diff --git a/package-lock.json b/package-lock.json index 767cf83..5a0a1e0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -36,7 +36,7 @@ "@nestjs/core": "^10.0.0", "@nestjs/passport": "^10.0.3", "@nestjs/platform-express": "^10.0.0", - "@noahspan/noahspan-modules": "^0.2.4", + "@noahspan/noahspan-modules": "^0.2.7", "@schematics/angular": "^17.3.7", "dotenv": "^16.4.5", "reflect-metadata": "0.1.13", @@ -4622,9 +4622,9 @@ } }, "node_modules/@noahspan/noahspan-modules": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@noahspan/noahspan-modules/-/noahspan-modules-0.2.4.tgz", - "integrity": "sha512-Zrf7+OqHAR8ipzOVxHl5VilJs1ZgYWd8ic2Gjf/e6xXz/KoleQj7S1hgBvCcPGk2pxDMPkrQf38qOuVL1rJixQ==", + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@noahspan/noahspan-modules/-/noahspan-modules-0.2.7.tgz", + "integrity": "sha512-iDCwqfT3yK+Y48N0+jy/AiA50WQvdyaHHyUUgPblw5IzdWuMzks/dFUVegCmXyLqREUGPZk+dDXv6FIObrZTpA==", "dependencies": { "@azure/app-configuration": "^1.6.0", "@azure/identity": "^4.2.0",