Skip to content

Commit 763e83e

Browse files
committed
show active flags in top
1 parent 7472e75 commit 763e83e

File tree

2 files changed

+29
-5
lines changed

2 files changed

+29
-5
lines changed

packages/browser-sdk/src/toolbar/Toolbar.tsx

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -81,9 +81,14 @@ export default function Toolbar({
8181
dialogContentRef.current?.scrollTo({ top: 0 });
8282
};
8383

84-
const sortedFlags = [...flags].sort((a, b) =>
85-
a.flagKey.localeCompare(b.flagKey),
86-
);
84+
const sortedFlags = [...flags].sort((a, b) => {
85+
// Active flags first
86+
if (a.isActive && !b.isActive) return -1;
87+
if (!a.isActive && b.isActive) return 1;
88+
89+
// Then sort alphabetically
90+
return a.flagKey.localeCompare(b.flagKey);
91+
});
8792

8893
const appBaseUrl = reflagClient.getConfig().appBaseUrl;
8994

packages/react-sdk/src/index.tsx

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ type ProviderContextType = {
124124
};
125125
provider: boolean;
126126
activeFlags: Set<string>;
127-
registerActiveFlag: (flagKey: string) => void;
127+
registerActiveFlag: (flagKey: string, element?: HTMLElement) => void;
128128
unregisterActiveFlag: (flagKey: string) => void;
129129
};
130130

@@ -188,6 +188,7 @@ export function ReflagProvider({
188188
const [featuresLoading, setFlagsLoading] = useState(true);
189189
const [rawFlags, setRawFlags] = useState<RawFlags>({});
190190
const [activeFlags, setActiveFlags] = useState<Set<string>>(new Set());
191+
const [flagElements, setFlagElements] = useState<Map<string, HTMLElement>>(new Map());
191192

192193
const clientRef = useRef<ReflagClient>();
193194
const contextKeyRef = useRef<string>();
@@ -235,13 +236,23 @@ export function ReflagProvider({
235236
// eslint-disable-next-line react-hooks/exhaustive-deps -- should only run once
236237
}, [contextKey]);
237238

238-
const registerActiveFlag = useCallback((flagKey: string) => {
239+
const registerActiveFlag = useCallback((flagKey: string, element?: HTMLElement) => {
239240
setActiveFlags((prev) => {
240241
const newSet = new Set(prev).add(flagKey);
241242
// Sync with browser SDK client
242243
clientRef.current?.setActiveFlags(newSet);
243244
return newSet;
244245
});
246+
247+
if (element) {
248+
setFlagElements((prev) => {
249+
const newMap = new Map(prev);
250+
newMap.set(flagKey, element);
251+
// Sync with browser SDK client
252+
clientRef.current?.setFlagElements(newMap);
253+
return newMap;
254+
});
255+
}
245256
}, []);
246257

247258
const unregisterActiveFlag = useCallback((flagKey: string) => {
@@ -252,6 +263,14 @@ export function ReflagProvider({
252263
clientRef.current?.setActiveFlags(newSet);
253264
return newSet;
254265
});
266+
267+
setFlagElements((prev) => {
268+
const newMap = new Map(prev);
269+
newMap.delete(flagKey);
270+
// Sync with browser SDK client
271+
clientRef.current?.setFlagElements(newMap);
272+
return newMap;
273+
});
255274
}, []);
256275

257276
const context: ProviderContextType = {

0 commit comments

Comments
 (0)