diff --git a/packages/client/src/clients/guide/index.ts b/packages/client/src/clients/guide/index.ts index 0f959ae8b..ddcb5e288 100644 --- a/packages/client/src/clients/guide/index.ts +++ b/packages/client/src/clients/guide/index.ts @@ -2,8 +2,10 @@ export { KnockGuideClient, DEBUG_QUERY_PARAMS } from "./client"; export type { KnockGuide, KnockGuideStep, + GuideIneligibilityMarker as KnockGuideIneligibilityMarker, TargetParams as KnockGuideTargetParams, SelectFilterParams as KnockGuideFilterParams, SelectGuideOpts as KnockSelectGuideOpts, SelectGuidesOpts as KnockSelectGuidesOpts, + StoreState as KnockGuideClientStoreState, } from "./types"; diff --git a/packages/client/src/clients/guide/types.ts b/packages/client/src/clients/guide/types.ts index 0327d8270..af3bdab4d 100644 --- a/packages/client/src/clients/guide/types.ts +++ b/packages/client/src/clients/guide/types.ts @@ -65,10 +65,16 @@ export interface GuideGroupData { updated_at: string; } +type GuideIneligibilityReason = + | "guide_not_active" + | "marked_as_archived" + | "target_conditions_not_met" + | "not_in_target_audience"; + export type GuideIneligibilityMarker = { __typename: "GuideIneligibilityMarker"; key: KnockGuide["key"]; - reason: string; + reason: GuideIneligibilityReason; message: string; }; diff --git a/packages/react/package.json b/packages/react/package.json index 48c70423b..3396fe64e 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -76,10 +76,12 @@ "@knocklabs/react-core": "workspace:^", "@popperjs/core": "^2.11.8", "@radix-ui/react-dialog": "^1.1.15", + "@radix-ui/react-hover-card": "^1.1.15", "@telegraph/combobox": "^0.1.16", "@telegraph/icon": "^0.2.7", "@telegraph/layout": "^0.2.3", "@telegraph/tokens": "^0.1.2", + "@telegraph/tooltip": "0.0.61", "@telegraph/typography": "^0.1.25", "clsx": "^2.1.1", "lodash.debounce": "^4.0.8" diff --git a/packages/react/src/modules/guide/components/Toolbar/V2/GuideHoverCard.tsx b/packages/react/src/modules/guide/components/Toolbar/V2/GuideHoverCard.tsx new file mode 100644 index 000000000..d941891f0 --- /dev/null +++ b/packages/react/src/modules/guide/components/Toolbar/V2/GuideHoverCard.tsx @@ -0,0 +1,63 @@ +import * as HoverCard from "@radix-ui/react-hover-card"; +import { Box, Stack } from "@telegraph/layout"; +import * as React from "react"; + +import { + AnnotatedGuide, + UnknownGuide, + isUnknownGuide, +} from "./useInspectGuideClientStore"; + +type Props = { + guide: AnnotatedGuide | UnknownGuide; +}; + +export const GuideHoverCard = ({ + children, + guide, +}: React.PropsWithChildren) => { + if (isUnknownGuide(guide)) { + return {children}; + } + + // Prune out internal or legacy fields. + const { + annotation: _annotation, + activation_location_rules: _activation_location_rules, + priority: _priority, + ...rest + } = guide; + + return ( + + + {children} + + + + +
+              {JSON.stringify(rest, null, 2)}
+            
+
+ +
+
+
+ ); +}; diff --git a/packages/react/src/modules/guide/components/Toolbar/V2/GuideRow.tsx b/packages/react/src/modules/guide/components/Toolbar/V2/GuideRow.tsx new file mode 100644 index 000000000..bc029e2c0 --- /dev/null +++ b/packages/react/src/modules/guide/components/Toolbar/V2/GuideRow.tsx @@ -0,0 +1,106 @@ +import { Button } from "@telegraph/button"; +import { Stack } from "@telegraph/layout"; +import { Tag } from "@telegraph/tag"; +import { Tooltip } from "@telegraph/tooltip"; +import { Text } from "@telegraph/typography"; +import { CheckCircle2, CircleDashed, Eye, UserCircle2 } from "lucide-react"; +import * as React from "react"; + +import { GuideHoverCard } from "./GuideHoverCard"; +import { + AnnotatedGuide, + UnknownGuide, + isUnknownGuide, +} from "./useInspectGuideClientStore"; + +const Row = ({ children }: React.PropsWithChildren) => ( + + {children} + +); + +type Props = { + guide: UnknownGuide | AnnotatedGuide; + orderIndex: number; +}; + +export const GuideRow = ({ guide, orderIndex }: Props) => { + return ( + + + + {orderIndex + 1} + + + + {guide.key} + + + + + + + {!isUnknownGuide(guide) && ( + <> + +