update availability view
This commit is contained in:
@@ -240,17 +240,24 @@ router.get('/:id', authMiddleware, async (req, res) => {
|
|||||||
const itm = await isToolManagerFn(req.schema, req.user);
|
const itm = await isToolManagerFn(req.schema, req.user);
|
||||||
if (!(await canViewEvent(req.schema, event, req.user.id, itm))) return res.status(403).json({ error: 'Access denied' });
|
if (!(await canViewEvent(req.schema, event, req.user.id, itm))) return res.status(403).json({ error: 'Access denied' });
|
||||||
await enrichEvent(req.schema, event);
|
await enrichEvent(req.schema, event);
|
||||||
if (event.track_availability && itm) {
|
const isMember = !itm && !!(await queryOne(req.schema, `
|
||||||
|
SELECT 1 FROM event_user_groups eug
|
||||||
|
JOIN user_group_members ugm ON ugm.user_group_id=eug.user_group_id
|
||||||
|
WHERE eug.event_id=$1 AND ugm.user_id=$2
|
||||||
|
`, [event.id, req.user.id]));
|
||||||
|
if (event.track_availability && (itm || isMember)) {
|
||||||
event.availability = await query(req.schema, `
|
event.availability = await query(req.schema, `
|
||||||
SELECT ea.response, ea.updated_at, u.id AS user_id, u.name, u.display_name, u.avatar
|
SELECT ea.response, ea.updated_at, u.id AS user_id, u.name, u.display_name, u.avatar
|
||||||
FROM event_availability ea JOIN users u ON u.id=ea.user_id WHERE ea.event_id=$1
|
FROM event_availability ea JOIN users u ON u.id=ea.user_id WHERE ea.event_id=$1
|
||||||
`, [req.params.id]);
|
`, [req.params.id]);
|
||||||
const assignedIds = (await query(req.schema, `
|
if (itm) {
|
||||||
SELECT DISTINCT ugm.user_id FROM event_user_groups eug
|
const assignedIds = (await query(req.schema, `
|
||||||
JOIN user_group_members ugm ON ugm.user_group_id=eug.user_group_id WHERE eug.event_id=$1
|
SELECT DISTINCT ugm.user_id FROM event_user_groups eug
|
||||||
`, [req.params.id])).map(r => r.user_id);
|
JOIN user_group_members ugm ON ugm.user_group_id=eug.user_group_id WHERE eug.event_id=$1
|
||||||
const respondedIds = new Set(event.availability.map(r => r.user_id));
|
`, [req.params.id])).map(r => r.user_id);
|
||||||
event.no_response_count = assignedIds.filter(id => !respondedIds.has(id)).length;
|
const respondedIds = new Set(event.availability.map(r => r.user_id));
|
||||||
|
event.no_response_count = assignedIds.filter(id => !respondedIds.has(id)).length;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
const mine = await queryOne(req.schema, 'SELECT response FROM event_availability WHERE event_id=$1 AND user_id=$2', [req.params.id, req.user.id]);
|
const mine = await queryOne(req.schema, 'SELECT response FROM event_availability WHERE event_id=$1 AND user_id=$2', [req.params.id, req.user.id]);
|
||||||
event.my_response = mine?.response || null;
|
event.my_response = mine?.response || null;
|
||||||
|
|||||||
@@ -835,12 +835,12 @@ function EventDetailModal({ event, onClose, onEdit, onAvailabilityChange, isTool
|
|||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
{isToolManager&&(
|
{(isToolManager||avail.length>0)&&(
|
||||||
<>
|
<>
|
||||||
<div style={{fontSize:12,fontWeight:700,color:'var(--text-tertiary)',textTransform:'uppercase',letterSpacing:'0.6px',marginBottom:8}}>Responses</div>
|
<div style={{fontSize:12,fontWeight:700,color:'var(--text-tertiary)',textTransform:'uppercase',letterSpacing:'0.6px',marginBottom:8}}>Responses</div>
|
||||||
<div style={{display:'flex',gap:20,marginBottom:10,fontSize:13}}>
|
<div style={{display:'flex',gap:20,marginBottom:10,fontSize:13}}>
|
||||||
{Object.entries(counts).map(([k,n])=><span key={k}><span style={{color:RESP_COLOR[k],fontWeight:700}}>{n}</span> {RESP_LABEL[k]}</span>)}
|
{Object.entries(counts).map(([k,n])=><span key={k}><span style={{color:RESP_COLOR[k],fontWeight:700}}>{n}</span> {RESP_LABEL[k]}</span>)}
|
||||||
<span><span style={{fontWeight:700}}>{event.no_response_count||0}</span> No response</span>
|
{isToolManager&&<span><span style={{fontWeight:700}}>{event.no_response_count||0}</span> No response</span>}
|
||||||
</div>
|
</div>
|
||||||
{avail.length>0&&(
|
{avail.length>0&&(
|
||||||
<div style={{border:'1px solid var(--border)',borderRadius:'var(--radius)',overflow:'hidden'}}>
|
<div style={{border:'1px solid var(--border)',borderRadius:'var(--radius)',overflow:'hidden'}}>
|
||||||
|
|||||||
Reference in New Issue
Block a user