Skip to content

Commit 15a2af5

Browse files
committed
Add lastAnswerDate to webhooks response and display updatedAt event field on the updateWebsite hover
1 parent ade8fa1 commit 15a2af5

File tree

4 files changed

+56
-40
lines changed

4 files changed

+56
-40
lines changed

functions/src/api/routes/deploy/updateWebsiteActions/triggerWebhooks.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ export const triggerWebhooks = async (firebaseApp: firebase.app.App, event: Even
4242
updatedWebhooks[index] = {
4343
...webhook,
4444
lastAnswer: `code: ${responseCode}, body: ${responseText ? responseText : 'empty'}`,
45+
lastAnswerDate: new Date() as any, // Firestore expect a JS date but return a Timestamp object
4546
}
4647
}
4748
}

src/events/page/layouts/EventDrawerContent.tsx

Lines changed: 46 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
import { useState, useRef } from 'react'
2-
import { CircularProgress, Divider, List, ListItemText, Toolbar } from '@mui/material'
2+
import { CircularProgress, Divider, List, ListItemText, Toolbar, Tooltip } from '@mui/material'
33
import { EventScreenMenuItems } from '../EventScreenMenuItems'
44
import { LoadingButton } from '@mui/lab'
55
import { Event } from '../../../types'
66
import { useNotification } from '../../../hooks/notificationHook'
77
import { updateWebsiteTriggerWebhooksAction } from '../../actions/updateWebsiteTriggerWebhooksAction'
88
import { EventSelector } from '../../../components/EventSelector'
99
import confetti from 'canvas-confetti'
10+
import { DateTime } from 'luxon'
1011

1112
export type EventDrawerContentProps = {
1213
event: Event
@@ -17,6 +18,11 @@ export const EventDrawerContent = ({ event }: EventDrawerContentProps) => {
1718
const { createNotification } = useNotification()
1819
const buttonRef = useRef<HTMLButtonElement>(null)
1920

21+
const getRelativeTime = () => {
22+
if (!event.updatedAt) return 'Never updated'
23+
return `Last updated ${DateTime.fromJSDate(event.updatedAt).toRelative()}`
24+
}
25+
2026
return (
2127
<>
2228
<Toolbar
@@ -31,44 +37,47 @@ export const EventDrawerContent = ({ event }: EventDrawerContentProps) => {
3137
<Divider />
3238
<List component="nav">
3339
<EventScreenMenuItems />
34-
<LoadingButton
35-
ref={buttonRef}
36-
variant="contained"
37-
loading={loading}
38-
disabled={loading}
39-
onClick={async () => {
40-
setLoading(true)
41-
await updateWebsiteTriggerWebhooksAction(event, createNotification)
42-
setLoading(false)
40+
<Tooltip title={getRelativeTime()} arrow placement="top">
41+
<LoadingButton
42+
ref={buttonRef}
43+
variant="contained"
44+
loading={loading}
45+
disabled={loading}
46+
onClick={async () => {
47+
setLoading(true)
48+
await updateWebsiteTriggerWebhooksAction(event, createNotification)
49+
setLoading(false)
4350

44-
// Trigger confetti effect from button position
45-
if (buttonRef.current) {
46-
const rect = buttonRef.current.getBoundingClientRect()
47-
const x = rect.left + rect.width / 2
48-
const y = rect.top + rect.height / 2
51+
// Trigger confetti effect from button position
52+
if (buttonRef.current) {
53+
const rect = buttonRef.current.getBoundingClientRect()
54+
const x = rect.left + rect.width / 2
55+
const y = rect.top + rect.height / 2
4956

50-
confetti({
51-
origin: {
52-
x: x / window.innerWidth,
53-
y: y / window.innerHeight,
54-
},
55-
spread: 70,
56-
startVelocity: 30,
57-
particleCount: 100,
58-
angle: 20,
59-
gravity: -0.4,
60-
zIndex: 2000,
61-
drift: 0.5,
62-
})
63-
}
64-
}}
65-
sx={{
66-
margin: 1,
67-
whiteSpace: 'break-spaces',
68-
}}
69-
loadingIndicator={<CircularProgress color="secondary" size={16} />}>
70-
<ListItemText primary={'Update website'} />
71-
</LoadingButton>
57+
confetti({
58+
origin: {
59+
x: x / window.innerWidth,
60+
y: y / window.innerHeight,
61+
},
62+
spread: 70,
63+
startVelocity: 30,
64+
particleCount: 100,
65+
angle: 20,
66+
gravity: -0.4,
67+
zIndex: 2000,
68+
drift: 0.5,
69+
})
70+
}
71+
}}
72+
sx={{
73+
margin: 1,
74+
whiteSpace: 'break-spaces',
75+
width: 'calc(100% - 16px)',
76+
}}
77+
loadingIndicator={<CircularProgress color="secondary" size={16} />}>
78+
<ListItemText primary={'Update website'} />
79+
</LoadingButton>
80+
</Tooltip>
7281
</List>
7382
</>
7483
)

src/events/page/settings/components/WebhooksFields.tsx

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import * as React from 'react'
21
import { useState } from 'react'
32
import {
43
Box,
@@ -14,13 +13,14 @@ import {
1413
import { Control, TextFieldElement, useFieldArray } from 'react-hook-form-mui'
1514
import { Add, Delete } from '@mui/icons-material'
1615
import { Event, EventSettingForForm, Webhooks } from '../../../../types'
17-
16+
import { DateTime } from 'luxon'
1817
export type WebhooksFieldsProps = {
1918
control: Control<EventSettingForForm, any>
2019
isSubmitting: boolean
2120
event: Event
2221
}
2322
type WebhooksWithKey = Webhooks & { id: string }
23+
2424
export const WebhooksFields = ({ control, isSubmitting, event }: WebhooksFieldsProps) => {
2525
const [selectedWebhook, setSelectedWebhook] = useState<null | Webhooks>(null)
2626
const { fields, append, remove } = useFieldArray({
@@ -37,6 +37,10 @@ export const WebhooksFields = ({ control, isSubmitting, event }: WebhooksFieldsP
3737
<Box paddingLeft={2}>
3838
{fields.map((webhook: WebhooksWithKey, index) => {
3939
const eventWebhook = event.webhooks.find((w) => w.url === webhook.url)
40+
console.log(eventWebhook)
41+
const lastAnswerRelativeToNow = eventWebhook?.lastAnswerDate
42+
? DateTime.fromJSDate(eventWebhook.lastAnswerDate.toDate()).toRelative()
43+
: 'never'
4044

4145
return (
4246
<Box display="flex" flexDirection="column" key={webhook.id}>
@@ -81,7 +85,7 @@ export const WebhooksFields = ({ control, isSubmitting, event }: WebhooksFieldsP
8185
size="small">
8286
Last answer:{' '}
8387
{eventWebhook && eventWebhook.lastAnswer
84-
? eventWebhook.lastAnswer.slice(0, 15) + '...'
88+
? `${lastAnswerRelativeToNow}, ${eventWebhook.lastAnswer.slice(0, 15)}...`
8589
: 'none'}
8690
</Button>
8791
</Box>
@@ -94,6 +98,7 @@ export const WebhooksFields = ({ control, isSubmitting, event }: WebhooksFieldsP
9498
url: '',
9599
token: null,
96100
lastAnswer: null,
101+
lastAnswerDate: null,
97102
})
98103
}}>
99104
<Add />

src/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ export interface Track {
99

1010
export interface Webhooks {
1111
lastAnswer: string | null
12+
lastAnswerDate: Timestamp | null
1213
url: string
1314
token: string | null
1415
}

0 commit comments

Comments
 (0)