Skip to content

Commit 6860381

Browse files
committed
refactor: Use existing FlagName for flag name type
1 parent f7879b1 commit 6860381

3 files changed

Lines changed: 22 additions & 18 deletions

File tree

app/flags/flag.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ export const listFlags = () => {
2828

2929
/** Resets all the flags */
3030
export const resetFlags = () => {
31-
listFlags().forEach((name) => store.remove(name));
31+
listFlags().forEach((name) => store.remove(name as FlagName));
3232
};
3333

3434
/**
@@ -63,7 +63,10 @@ const initFromSearchParams = (locationSearch: string) => {
6363
for (const [param, value] of Object.entries(params)) {
6464
if (param.startsWith(FLAG_PREFIX) && typeof value === "string") {
6565
try {
66-
flag(param.substring(FLAG_PREFIX.length), JSON.parse(value));
66+
flag(
67+
param.substring(FLAG_PREFIX.length) as FlagName,
68+
JSON.parse(value)
69+
);
6770
} catch (e) {
6871
console.error(e);
6972
}

app/flags/store.ts

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,18 @@ import mitt, { Emitter } from "mitt";
33
import lsAdapter from "./ls-adapter";
44

55
export type FlagValue = any;
6-
export type FlagName = string;
6+
7+
export type FlagName =
8+
/** Whether we can search by termsets */
9+
| "search.termsets"
10+
/** Whether we can add dataset from shared dimensions */
11+
| "configurator.add-dataset.shared"
12+
/** Whether we can add a new dataset */
13+
| "configurator.add-dataset.new"
14+
/** Whether we can use the free canvas dashboard layout */
15+
| "layoutor.dashboard.free-canvas"
16+
/** Whether we can use shared filters on dashboard layout */
17+
| "layoutor.dashboard.shared-filters";
718

819
type Events = { change: string };
920
/**
@@ -51,15 +62,15 @@ class FlagStore {
5162
return this.store[name];
5263
}
5364

54-
set(name: string, value: FlagValue) {
65+
set(name: FlagName, value: FlagValue) {
5566
if (this.longtermStore) {
5667
this.longtermStore.setItem(name, value);
5768
}
5869
this.store[name] = value;
5970
this.ee.emit("change", name);
6071
}
6172

62-
remove(name: string) {
73+
remove(name: FlagName) {
6374
delete this.store[name];
6475
if (this.longtermStore) {
6576
this.longtermStore.removeItem(name);

app/flags/useFlag.ts

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,10 @@
11
import { useEffect, useState } from "react";
22

3-
import { flag } from "./flag";
3+
import { FlagName } from "@/flags/store";
44

5-
type Flag =
6-
/** Whether we can search by termsets */
7-
| "search.termsets"
8-
/** Whether we can add dataset from shared dimensions */
9-
| "configurator.add-dataset.shared"
10-
/** Whether we can add a new dataset */
11-
| "configurator.add-dataset.new"
12-
/** Whether we can use the free canvas dashboard layout */
13-
| "layoutor.dashboard.free-canvas"
14-
/** Whether we can use shared filters on dashboard layout */
15-
| "layoutor.dashboard.shared-filters";
5+
import { flag } from "./flag";
166

17-
export default function useFlag(name: Flag) {
7+
export default function useFlag(name: FlagName) {
188
const [flagValue, setFlag] = useState(() => flag(name));
199
useEffect(() => {
2010
const handleChange = (changed: string) => {

0 commit comments

Comments
 (0)