Save local changes (GSC/Bing integrations) before merging PR #354

This commit is contained in:
ajaysi
2026-02-13 13:11:27 +05:30
parent 43e66835ac
commit 08a1f4a1d8
144 changed files with 8310 additions and 2748 deletions

View File

@@ -55,6 +55,7 @@ const Wizard: React.FC<WizardProps> = ({ onComplete }) => {
description: steps[0].description
});
const [introCompleted, setIntroCompleted] = useState<boolean>(false);
const [validationMessage, setValidationMessage] = useState<string>('');
// Step validation function
const isStepDataValid = useCallback((step: number, data: any): boolean => {
@@ -88,15 +89,23 @@ const Wizard: React.FC<WizardProps> = ({ onComplete }) => {
data.platformPersonas &&
Object.keys(data.platformPersonas).length > 0 &&
data.qualityMetrics;
// Extended validation for Brand Avatar and Voice Clone
const hasBrandAvatar = data?.brandAvatar?.set;
const hasVoiceClone = data?.voiceClone?.set;
console.log(`Wizard: Step 3 (Persona Generation) validation:`, {
hasValidPersonaData: !!hasValidPersonaData,
hasCorePersona: !!(data && data.corePersona),
hasPlatformPersonas: !!(data && data.platformPersonas),
platformPersonasCount: data && data.platformPersonas ? Object.keys(data.platformPersonas).length : 0,
hasQualityMetrics: !!(data && data.qualityMetrics),
hasBrandAvatar: !!hasBrandAvatar,
hasVoiceClone: !!hasVoiceClone,
dataKeys: data ? Object.keys(data) : 'no data'
});
return !!hasValidPersonaData;
return !!hasValidPersonaData && !!hasBrandAvatar && !!hasVoiceClone;
case 4: // Integrations
console.log(`Wizard: Step 4 (Integrations) validation: always true (optional)`);
@@ -169,6 +178,21 @@ const Wizard: React.FC<WizardProps> = ({ onComplete }) => {
console.log(`Wizard: Validation result for step ${activeStep}:`, isValid);
console.log(`Wizard: Setting isCurrentStepValid to:`, isValid);
setIsCurrentStepValid(isValid);
// Set validation message
if (activeStep === 3) {
if (!isValid) {
const pData = dataToValidate || {};
if (!pData.corePersona) setValidationMessage('Please generate your Brand Identity (Text) first.');
else if (!pData.brandAvatar?.set) setValidationMessage('Please generate your Brand Avatar.');
else if (!pData.voiceClone?.set) setValidationMessage('Please generate your Voice Clone.');
else setValidationMessage('Complete all personalization steps to continue.');
} else {
setValidationMessage('');
}
} else {
setValidationMessage('');
}
}, [activeStep, stepData, isStepDataValid, competitorDataCollector, stepValidationStates]);
// Debug: log all state changes
@@ -819,6 +843,14 @@ const Wizard: React.FC<WizardProps> = ({ onComplete }) => {
selectedPlatforms: stepData?.selectedPlatforms
}), [stepData?.corePersona, stepData?.platformPersonas, stepData?.qualityMetrics, stepData?.selectedPlatforms]);
const handleStepDataChange = useCallback((data: any) => {
console.log('Wizard: handleStepDataChange called with:', data);
setStepData((prev: any) => ({
...prev,
...data
}));
}, []);
const renderStepContent = (step: number) => {
const stepComponents = [
<IntroStep
@@ -840,10 +872,16 @@ const Wizard: React.FC<WizardProps> = ({ onComplete }) => {
onContinue={handleNext}
updateHeaderContent={updateHeaderContent}
onValidationChange={(isValid: boolean) => handleStepValidationChange(3, isValid)}
onDataChange={handleStepDataChange}
onboardingData={personaOnboardingData}
stepData={personaStepData}
/>,
<IntegrationsStep key="integrations" onContinue={handleNext} updateHeaderContent={updateHeaderContent} />,
<IntegrationsStep
key="integrations"
onContinue={handleNext}
updateHeaderContent={updateHeaderContent}
onValidationChange={(isValid: boolean) => handleStepValidationChange(4, isValid)}
/>,
<FinalStep key="final" onContinue={handleComplete} updateHeaderContent={updateHeaderContent} />
];
@@ -929,6 +967,7 @@ const Wizard: React.FC<WizardProps> = ({ onComplete }) => {
onNext={handleNext}
isLastStep={activeStep === steps.length - 1}
isCurrentStepValid={isCurrentStepValid}
validationMessage={validationMessage}
nextLabel={activeStep === 0 ? 'ALwrity Your Growth' : 'Continue'}
/>
)}