From 2ac32e42c550a5ff4b7b28f820a860f676751c4b Mon Sep 17 00:00:00 2001 From: Lucas Bordeau Date: Mon, 4 Sep 2023 11:35:27 +0200 Subject: [PATCH] Added enums use case (#1428) --- docs/docs/developer/frontend/style-guide.mdx | 21 ++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/docs/docs/developer/frontend/style-guide.mdx b/docs/docs/developer/frontend/style-guide.mdx index 074e7f6cf..7de2c6b5b 100644 --- a/docs/docs/developer/frontend/style-guide.mdx +++ b/docs/docs/developer/frontend/style-guide.mdx @@ -135,8 +135,6 @@ type MyType = { You can see why TypeScript recommend avoiding enums here : https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#enums -However, GraphQL codegen will generate enums, so you can't avoid them completely, but avoid creating new ones. - ```tsx // ❌ Bad, utilizes an enum enum Color { @@ -153,6 +151,25 @@ let color = Color.Red; let color: "red" | "green" | "blue" = "red"; ``` +#### GraphQL and internal libs + +We recommend using enums that are generated by GraphQL codegen. + +We also recommend using an enum when using an internal lib, so the internal lib doesn't have to expose a string literal type that is not related to the internal API. + +Example : + +```TSX +const { + setHotkeyScopeAndMemorizePreviousScope, + goBackToPreviousHotkeyScope, +} = usePreviousHotkeyScope(); + +setHotkeyScopeAndMemorizePreviousScope( + RelationPickerHotkeyScope.RelationPicker, +); +``` + ## Styling ### Use StyledComponents