Files
ComfyUI_frontend/src/platform/surveys/useSurveyFeatureTracking.ts
Christian Byrne c602dce375 feat: integrate nightly survey system into app (#8480)
## Summary

Wires the nightly survey system into the app by adding a controller
component and a convenience composable for feature-site usage tracking.

## Changes

- **What**: NightlySurveyController iterates enabled surveys from the
registry and renders a NightlySurveyPopover for each.
useSurveyFeatureTracking wraps useFeatureUsageTracker with a
config-enabled guard for use at feature call sites.
- **Tree-shaking**: Controller is loaded via defineAsyncComponent behind
a compile-time isNightly/isCloud/isDesktop guard in SideToolbar.vue, so
the entire survey module subtree is eliminated from cloud/desktop/stable
builds.

## Review Focus

- DCE pattern: controller imported conditionally via
defineAsyncComponent + distribution guard (same pattern as
ComfyRunButton/index.ts)
- useSurveyFeatureTracking short-circuits early when config is
absent/disabled (avoids initializing tracker storage)
- No user-facing behavior change: FEATURE_SURVEYS registry is still
empty

## Part of Nightly Survey System

This is part 5 of a stacked PR chain:
1. feat/feature-usage-tracker - useFeatureUsageTracker (merged in #8189)
2. feat/survey-eligibility - useSurveyEligibility (#8189, merged)
3. feat/survey-config - surveyRegistry.ts (#8355, merged)
4. feat/survey-popover - NightlySurveyPopover.vue (#9083, merged)
5. **feat/survey-integration** - NightlySurveyController.vue (this PR)

---------

Co-authored-by: GitHub Action <action@github.com>
2026-03-12 09:06:26 -07:00

36 lines
843 B
TypeScript

import { computed } from 'vue'
import { getSurveyConfig } from './surveyRegistry'
import { useFeatureUsageTracker } from './useFeatureUsageTracker'
/**
* Convenience composable for tracking feature usage for surveys.
* Use this at the feature site to track when a feature is used.
*
* @example
* ```typescript
* const { trackFeatureUsed } = useSurveyFeatureTracking('simple-mode')
*
* function onFeatureAction() {
* trackFeatureUsed()
* }
* ```
*/
export function useSurveyFeatureTracking(featureId: string) {
const config = getSurveyConfig(featureId)
if (config?.enabled === false || !config) {
return {
trackFeatureUsed: () => {},
useCount: computed(() => 0)
}
}
const { trackUsage, useCount } = useFeatureUsageTracker(featureId)
return {
trackFeatureUsed: trackUsage,
useCount
}
}