79 lines
No EOL
2.2 KiB
TypeScript
79 lines
No EOL
2.2 KiB
TypeScript
/**
|
|
* 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')
|
|
}
|
|
|
|
|
|
return {
|
|
isSetupComplete,
|
|
areRevenueFieldsLocked,
|
|
areExpenseFieldsLocked,
|
|
shouldUseSeparateMemberInterface,
|
|
setupProgress,
|
|
goToSetup,
|
|
goToMemberManagement,
|
|
}
|
|
} |