v0.12.50 Updated to Family Manager and Events modal
This commit is contained in:
@@ -15,6 +15,7 @@ export default function AddChildAliasModal({ onClose }) {
|
||||
// Partner state
|
||||
const [partner, setPartner] = useState(null);
|
||||
const [selectedPartnerId, setSelectedPartnerId] = useState('');
|
||||
const [respondSeparately, setRespondSeparately] = useState(false);
|
||||
const [allUsers, setAllUsers] = useState([]);
|
||||
const [savingPartner, setSavingPartner] = useState(false);
|
||||
|
||||
@@ -25,8 +26,10 @@ export default function AddChildAliasModal({ onClose }) {
|
||||
api.searchUsers(''),
|
||||
]).then(([aliasRes, partnerRes, usersRes]) => {
|
||||
setAliases(aliasRes.aliases || []);
|
||||
setPartner(partnerRes.partner || null);
|
||||
setSelectedPartnerId(partnerRes.partner?.id?.toString() || '');
|
||||
const p = partnerRes.partner || null;
|
||||
setPartner(p);
|
||||
setSelectedPartnerId(p?.id?.toString() || '');
|
||||
setRespondSeparately(p?.respond_separately || false);
|
||||
setAllUsers((usersRes.users || []).filter(u => u.id !== currentUser?.id));
|
||||
}).catch(() => {});
|
||||
}, []);
|
||||
@@ -58,13 +61,18 @@ export default function AddChildAliasModal({ onClose }) {
|
||||
if (!selectedPartnerId) {
|
||||
await api.removePartner();
|
||||
setPartner(null);
|
||||
toast('Spouse/Partner removed', 'success');
|
||||
} else {
|
||||
const { partner: p } = await api.setPartner(parseInt(selectedPartnerId));
|
||||
setPartner(p);
|
||||
setRespondSeparately(false);
|
||||
const { aliases: fresh } = await api.getAliases();
|
||||
setAliases(fresh || []);
|
||||
toast('Spouse/Partner saved', 'success');
|
||||
resetForm();
|
||||
toast('Spouse/Partner/Co-Parent removed', 'success');
|
||||
} else {
|
||||
const { partner: p } = await api.setPartner(parseInt(selectedPartnerId), respondSeparately);
|
||||
setPartner(p);
|
||||
setRespondSeparately(p?.respond_separately || false);
|
||||
const { aliases: fresh } = await api.getAliases();
|
||||
setAliases(fresh || []);
|
||||
toast('Spouse/Partner/Co-Parent saved', 'success');
|
||||
}
|
||||
} catch (e) {
|
||||
toast(e.message, 'error');
|
||||
@@ -139,9 +147,9 @@ export default function AddChildAliasModal({ onClose }) {
|
||||
</button>
|
||||
</div>
|
||||
|
||||
{/* Spouse/Partner section */}
|
||||
{/* Spouse/Partner/Co-Parent section */}
|
||||
<div style={{ marginBottom: 16 }}>
|
||||
{lbl('Spouse/Partner')}
|
||||
{lbl('Spouse/Partner/Co-Parent')}
|
||||
<div style={{ display: 'flex', gap: 8 }}>
|
||||
<select
|
||||
className="input"
|
||||
@@ -163,8 +171,17 @@ export default function AddChildAliasModal({ onClose }) {
|
||||
{savingPartner ? 'Saving…' : 'Save'}
|
||||
</button>
|
||||
</div>
|
||||
<label style={{ display: 'flex', alignItems: 'center', gap: 8, marginTop: 8, cursor: 'pointer', fontSize: 13, color: 'var(--text-secondary)' }}>
|
||||
<input
|
||||
type="checkbox"
|
||||
checked={respondSeparately}
|
||||
onChange={e => setRespondSeparately(e.target.checked)}
|
||||
style={{ width: 15, height: 15, cursor: 'pointer', accentColor: 'var(--primary)' }}
|
||||
/>
|
||||
Respond separately to events
|
||||
</label>
|
||||
{partner && (
|
||||
<div className="text-sm" style={{ color: 'var(--text-secondary)', marginTop: 4 }}>
|
||||
<div className="text-sm" style={{ color: 'var(--text-secondary)', marginTop: 6 }}>
|
||||
Linked with {partner.display_name || partner.name}
|
||||
</div>
|
||||
)}
|
||||
|
||||
Reference in New Issue
Block a user