refactor: remove deprecated components and streamline member coverage calculations, enhance budget management with improved payroll handling, and update UI elements for better clarity

This commit is contained in:
Jennie Robinson Faber 2025-09-06 09:48:57 +01:00
parent 983aeca2dc
commit 09d8794d72
42 changed files with 2166 additions and 2974 deletions

View file

@ -0,0 +1,83 @@
/**
* Setup State Management
*
* Provides utilities to determine setup completion status and manage
* field locking based on setup state
*/
export const useSetupState = () => {
const coopStore = useCoopBuilderStore()
const membersStore = useMembersStore()
const policiesStore = usePoliciesStore()
const streamsStore = useStreamsStore()
// Check if setup is complete using the same logic as middleware
const isSetupComplete = computed(() => {
// Legacy stores OR new coop builder store (either is enough)
const legacyComplete =
membersStore.isValid &&
policiesStore.isValid &&
streamsStore.hasValidStreams
const coopComplete = Boolean(
coopStore &&
Array.isArray(coopStore.members) &&
coopStore.members.length > 0 &&
Array.isArray(coopStore.streams) &&
coopStore.streams.length > 0
)
return legacyComplete || coopComplete
})
// Determine if revenue and expense fields should be locked
const areRevenueFieldsLocked = computed(() => {
return isSetupComplete.value
})
const areExpenseFieldsLocked = computed(() => {
return isSetupComplete.value
})
// Determine if member management should be in separate interface
const shouldUseSeparateMemberInterface = computed(() => {
return isSetupComplete.value
})
// Get setup completion percentage for progress display
const setupProgress = computed(() => {
let completed = 0
let total = 4 // policies, members, revenue, costs
if (policiesStore.isValid || (coopStore.equalHourlyWage > 0)) completed++
if (membersStore.members.length > 0 || coopStore.members.length > 0) completed++
if (streamsStore.hasValidStreams || coopStore.streams.length > 0) completed++
if (coopStore.overheadCosts.length > 0) completed++
return Math.round((completed / total) * 100)
})
// Navigation helpers
const goToSetup = () => {
navigateTo('/coop-planner')
}
const goToMemberManagement = () => {
navigateTo('/settings#members')
}
const goToRevenueMix = () => {
navigateTo('/mix')
}
return {
isSetupComplete,
areRevenueFieldsLocked,
areExpenseFieldsLocked,
shouldUseSeparateMemberInterface,
setupProgress,
goToSetup,
goToMemberManagement,
goToRevenueMix
}
}