ALwrity version 0.5.5

This commit is contained in:
ajaysi
2025-08-19 21:48:33 +05:30
parent 5f104bf427
commit 74e22b421a
97 changed files with 16770 additions and 5000 deletions

View File

@@ -1,7 +1,7 @@
import { create } from 'zustand';
import { devtools } from 'zustand/middleware';
import { devtools, persist } from 'zustand/middleware';
export type ReviewStatus = 'not_reviewed' | 'in_review' | 'reviewed';
export type ReviewStatus = 'not_reviewed' | 'in_review' | 'reviewed' | 'activated';
export interface StrategyComponent {
id: string;
@@ -18,16 +18,20 @@ export interface ReviewState {
components: StrategyComponent[];
isReviewing: boolean;
reviewProgress: number;
reviewProcessStarted: boolean;
// Actions
initializeComponents: (components: Omit<StrategyComponent, 'status' | 'reviewedAt' | 'reviewedBy' | 'notes'>[]) => void;
startReview: (componentId: string) => void;
completeReview: (componentId: string, notes?: string) => void;
activateStrategy: () => void;
resetReview: (componentId: string) => void;
resetAllReviews: () => void;
startReviewProcess: () => void;
updateReviewProgress: () => void;
getReviewProgress: () => number;
isAllReviewed: () => boolean;
isActivated: () => boolean;
getUnreviewedComponents: () => StrategyComponent[];
getReviewedComponents: () => StrategyComponent[];
}
@@ -62,122 +66,192 @@ const STRATEGY_COMPONENTS = [
export const useStrategyReviewStore = create<ReviewState>()(
devtools(
(set, get) => ({
// Initial state
components: [],
isReviewing: false,
reviewProgress: 0,
persist(
(set, get) => ({
// Initial state
components: [],
isReviewing: false,
reviewProgress: 0,
reviewProcessStarted: false,
// Initialize components with default review status
initializeComponents: (components) => {
const initializedComponents = components.map(component => ({
...component,
status: 'not_reviewed' as ReviewStatus
}));
set({ components: initializedComponents });
get().updateReviewProgress();
},
// Initialize components with default review status
initializeComponents: (components) => {
console.log('🔧 Initializing strategy components:', components.length);
const initializedComponents = components.map(component => ({
...component,
status: 'not_reviewed' as ReviewStatus
}));
set({ components: initializedComponents });
get().updateReviewProgress();
console.log('🔧 Components initialized, progress:', get().reviewProgress);
},
// Start reviewing a component
startReview: (componentId: string) => {
set(state => ({
isReviewing: true,
components: state.components.map(comp =>
comp.id === componentId
? { ...comp, status: 'in_review' as ReviewStatus }
: comp
)
}));
},
// Start reviewing a component
startReview: (componentId: string) => {
set(state => ({
isReviewing: true,
components: state.components.map(comp =>
comp.id === componentId
? { ...comp, status: 'in_review' as ReviewStatus }
: comp
)
}));
},
// Complete review for a component
completeReview: (componentId: string, notes?: string) => {
set(state => ({
isReviewing: false,
components: state.components.map(comp =>
comp.id === componentId
? {
...comp,
status: 'reviewed' as ReviewStatus,
reviewedAt: new Date(),
reviewedBy: 'current_user', // In real app, get from auth
notes
}
: comp
)
}));
get().updateReviewProgress();
},
// Complete review for a component
completeReview: (componentId: string, notes?: string) => {
console.log('🔧 Completing review for component:', componentId);
set(state => ({
isReviewing: false,
components: state.components.map(comp =>
comp.id === componentId
? {
...comp,
status: 'reviewed' as ReviewStatus,
reviewedAt: new Date(),
reviewedBy: 'current_user', // In real app, get from auth
notes
}
: comp
)
}));
get().updateReviewProgress();
console.log('🔧 Review completed, progress:', get().reviewProgress, 'all reviewed:', get().isAllReviewed());
},
// Reset review for a component
resetReview: (componentId: string) => {
set(state => ({
components: state.components.map(comp =>
comp.id === componentId
? {
...comp,
status: 'not_reviewed' as ReviewStatus,
reviewedAt: undefined,
reviewedBy: undefined,
notes: undefined
}
: comp
)
}));
get().updateReviewProgress();
},
// Activate strategy - mark all components as activated
activateStrategy: () => {
console.log('🔧 Activating strategy - marking all components as activated');
set(state => ({
components: state.components.map(comp => ({
...comp,
status: 'activated' as ReviewStatus
}))
}));
get().updateReviewProgress();
console.log('🔧 Strategy activated, all components now have activated status');
},
// Reset all reviews
resetAllReviews: () => {
set(state => ({
components: state.components.map(comp => ({
...comp,
status: 'not_reviewed' as ReviewStatus,
reviewedAt: undefined,
reviewedBy: undefined,
notes: undefined
}))
}));
get().updateReviewProgress();
},
// Reset review for a component
resetReview: (componentId: string) => {
set(state => ({
components: state.components.map(comp =>
comp.id === componentId
? {
...comp,
status: 'not_reviewed' as ReviewStatus,
reviewedAt: undefined,
reviewedBy: undefined,
notes: undefined
}
: comp
)
}));
get().updateReviewProgress();
},
// Update review progress
updateReviewProgress: () => {
const { components } = get();
const reviewedCount = components.filter(comp => comp.status === 'reviewed').length;
const totalCount = components.length;
const progress = totalCount > 0 ? (reviewedCount / totalCount) * 100 : 0;
set({ reviewProgress: progress });
},
// Reset all reviews
resetAllReviews: () => {
set(state => ({
components: state.components.map(comp => ({
...comp,
status: 'not_reviewed' as ReviewStatus,
reviewedAt: undefined,
reviewedBy: undefined,
notes: undefined
}))
}));
get().updateReviewProgress();
},
// Get review progress percentage
getReviewProgress: () => {
return get().reviewProgress;
},
// Start review process
startReviewProcess: () => {
set({ reviewProcessStarted: true });
},
// Check if all components are reviewed
isAllReviewed: () => {
const { components } = get();
return components.every(comp => comp.status === 'reviewed');
},
// Update review progress
updateReviewProgress: () => {
const { components } = get();
const reviewedCount = components.filter(comp => comp.status === 'reviewed' || comp.status === 'activated').length;
const totalCount = components.length;
const progress = totalCount > 0 ? (reviewedCount / totalCount) * 100 : 0;
console.log('🔧 Updating progress:', { reviewedCount, totalCount, progress, components: components.map(c => ({ id: c.id, status: c.status })) });
set({ reviewProgress: progress });
},
// Get unreviewed components
getUnreviewedComponents: () => {
const { components } = get();
return components.filter(comp => comp.status !== 'reviewed');
},
// Get review progress percentage
getReviewProgress: () => {
return get().reviewProgress;
},
// Get reviewed components
getReviewedComponents: () => {
const { components } = get();
return components.filter(comp => comp.status === 'reviewed');
// Check if all components are reviewed
isAllReviewed: () => {
const { components } = get();
return components.every(comp => comp.status === 'reviewed' || comp.status === 'activated');
},
// Check if strategy is activated
isActivated: () => {
const { components } = get();
return components.every(comp => comp.status === 'activated');
},
// Get unreviewed components
getUnreviewedComponents: () => {
const { components } = get();
return components.filter(comp => comp.status !== 'reviewed' && comp.status !== 'activated');
},
// Get reviewed components
getReviewedComponents: () => {
const { components } = get();
return components.filter(comp => comp.status === 'reviewed' || comp.status === 'activated');
}
}),
{
name: 'strategy-review-persist',
partialize: (state: ReviewState) => ({
components: state.components,
reviewProgress: state.reviewProgress,
reviewProcessStarted: state.reviewProcessStarted
}),
onRehydrateStorage: () => (state: ReviewState | undefined) => {
if (state) {
console.log('🔧 Rehydrating store state:', {
componentsCount: state.components.length,
reviewProcessStarted: state.reviewProcessStarted,
reviewProgress: state.reviewProgress
});
// Initialize components if they don't exist
if (state.components.length === 0) {
console.log('🔧 No components found during rehydration, initializing...');
const initializedComponents = STRATEGY_COMPONENTS.map(component => ({
...component,
status: 'not_reviewed' as ReviewStatus
}));
state.components = initializedComponents;
} else {
// Convert string dates back to Date objects after rehydration
state.components = state.components.map(comp => ({
...comp,
reviewedAt: comp.reviewedAt ? new Date(comp.reviewedAt) : undefined
}));
}
// Recalculate progress when rehydrating from storage
state.updateReviewProgress();
console.log('🔧 Store rehydrated successfully');
}
}
}
}),
),
{
name: 'strategy-review-store',
enabled: process.env.NODE_ENV === 'development'
@@ -185,5 +259,4 @@ export const useStrategyReviewStore = create<ReviewState>()(
)
);
// Initialize components when store is created
useStrategyReviewStore.getState().initializeComponents(STRATEGY_COMPONENTS);