Fix setup wizard starred group persistence + pencil edit

- SetupWizard: honor client.renewalDate when determining which group is starred on reopen
- PolicyGroupManager: defensively handle Date or string in handleOpenEdit to unblock pencil
This commit is contained in:
lorentz 2026-04-24 20:57:48 +00:00
parent b44bddfc6a
commit e6485b35dc
3 changed files with 24 additions and 3 deletions

View file

@ -30,6 +30,7 @@ export default async function SetupWizardPage({
notes: true, notes: true,
claimsAdvocateId: true, claimsAdvocateId: true,
setupCompletedAt: true, setupCompletedAt: true,
renewalDate: true,
policies: { policies: {
where: { expirationDate: { gte: new Date() } }, where: { expirationDate: { gte: new Date() } },
select: { select: {
@ -91,6 +92,7 @@ export default async function SetupWizardPage({
clientName={client.name} clientName={client.name}
clientNotes={client.notes} clientNotes={client.notes}
claimsAdvocateId={client.claimsAdvocateId} claimsAdvocateId={client.claimsAdvocateId}
clientRenewalDate={client.renewalDate?.toISOString() ?? null}
setupCompletedAt={client.setupCompletedAt?.toISOString() ?? null} setupCompletedAt={client.setupCompletedAt?.toISOString() ?? null}
policies={policiesData} policies={policiesData}
existingGroups={groupsData} existingGroups={groupsData}

View file

@ -134,9 +134,16 @@ export function PolicyGroupManager({
const handleOpenEdit = (group: PolicyGroup) => { const handleOpenEdit = (group: PolicyGroup) => {
setEditingGroup(group) setEditingGroup(group)
const rd: any = group.renewalDate
const dateStr =
typeof rd === 'string'
? rd.split('T')[0]
: rd instanceof Date
? rd.toISOString().split('T')[0]
: new Date(rd).toISOString().split('T')[0]
setFormData({ setFormData({
name: group.name, name: group.name,
renewalDate: group.renewalDate.split('T')[0], renewalDate: dateStr,
notes: group.notes || '', notes: group.notes || '',
policyIds: group.policies.map((p) => p.id), policyIds: group.policies.map((p) => p.id),
}) })

View file

@ -64,6 +64,7 @@ interface SetupWizardProps {
clientName: string clientName: string
clientNotes: string | null clientNotes: string | null
claimsAdvocateId: string | null claimsAdvocateId: string | null
clientRenewalDate?: string | null
setupCompletedAt: string | null setupCompletedAt: string | null
policies: WizardPolicy[] policies: WizardPolicy[]
existingGroups: ExistingGroup[] existingGroups: ExistingGroup[]
@ -143,6 +144,7 @@ export function SetupWizard({
clientName, clientName,
clientNotes: initialClientNotes, clientNotes: initialClientNotes,
claimsAdvocateId: initialAdvocateId, claimsAdvocateId: initialAdvocateId,
clientRenewalDate,
setupCompletedAt, setupCompletedAt,
policies, policies,
existingGroups, existingGroups,
@ -159,6 +161,16 @@ export function SetupWizard({
const buildInitialGroups = useCallback((): GroupState[] => { const buildInitialGroups = useCallback((): GroupState[] => {
if (existingGroups.length > 0) { if (existingGroups.length > 0) {
// Determine which group matches the persisted starred renewal date
const clientRdStr = clientRenewalDate
? new Date(clientRenewalDate).toISOString().split('T')[0]
: null
const matchIndex = clientRdStr
? existingGroups.findIndex(
(eg) => new Date(eg.renewalDate).toISOString().split('T')[0] === clientRdStr
)
: -1
const defaultIndex = matchIndex >= 0 ? matchIndex : 0
return existingGroups.map((eg, i) => { return existingGroups.map((eg, i) => {
const gid = newGroupId() const gid = newGroupId()
return { return {
@ -173,12 +185,12 @@ export function SetupWizard({
rule: 'nearest-to-year-start' as DateRule, rule: 'nearest-to-year-start' as DateRule,
renewalDate: new Date(eg.renewalDate).toISOString().split('T')[0], renewalDate: new Date(eg.renewalDate).toISOString().split('T')[0],
notes: eg.notes || '', notes: eg.notes || '',
isDefault: i === 0, isDefault: i === defaultIndex,
} }
}) })
} }
return runEngine(policies, defaultWindowDays, defaultRule) return runEngine(policies, defaultWindowDays, defaultRule)
}, [existingGroups, policies, defaultWindowDays, defaultRule]) }, [existingGroups, policies, defaultWindowDays, defaultRule, clientRenewalDate])
const [groups, setGroups] = useState<GroupState[]>(() => buildInitialGroups()) const [groups, setGroups] = useState<GroupState[]>(() => buildInitialGroups())
const [windowDays, setWindowDays] = useState(defaultWindowDays) const [windowDays, setWindowDays] = useState(defaultWindowDays)