Skip to content

Commit d16416f

Browse files
committed
cleanup
1 parent df7b0fc commit d16416f

File tree

2 files changed

+43
-31
lines changed
  • apps/sim/app
    • playground
    • workspace/[workspaceId]/w/components/sidebar/components/workspace-header/components/invite-modal

2 files changed

+43
-31
lines changed

apps/sim/app/playground/page.tsx

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import {
2424
Cursor,
2525
DatePicker,
2626
DocumentAttachment,
27+
Download,
2728
Duplicate,
2829
Expand,
2930
Eye,
@@ -51,6 +52,7 @@ import {
5152
NoWrap,
5253
PanelLeft,
5354
Play,
55+
PlayOutline,
5456
Popover,
5557
PopoverBackButton,
5658
PopoverContent,
@@ -214,6 +216,9 @@ export default function PlaygroundPage() {
214216
<VariantRow label='primary'>
215217
<Button variant='primary'>Primary</Button>
216218
</VariantRow>
219+
<VariantRow label='destructive'>
220+
<Button variant='destructive'>Destructive</Button>
221+
</VariantRow>
217222
<VariantRow label='secondary'>
218223
<Button variant='secondary'>Secondary</Button>
219224
</VariantRow>
@@ -290,6 +295,9 @@ export default function PlaygroundPage() {
290295
<VariantRow label='outline'>
291296
<Badge variant='outline'>Outline</Badge>
292297
</VariantRow>
298+
<VariantRow label='type'>
299+
<Badge variant='type'>Type</Badge>
300+
</VariantRow>
293301
<VariantRow label='green'>
294302
<Badge variant='green'>Green</Badge>
295303
<Badge variant='green' dot>
@@ -323,6 +331,9 @@ export default function PlaygroundPage() {
323331
<VariantRow label='teal'>
324332
<Badge variant='teal'>Teal</Badge>
325333
</VariantRow>
334+
<VariantRow label='cyan'>
335+
<Badge variant='cyan'>Cyan</Badge>
336+
</VariantRow>
326337
<VariantRow label='gray'>
327338
<Badge variant='gray'>Gray</Badge>
328339
</VariantRow>
@@ -996,6 +1007,7 @@ export default function PlaygroundPage() {
9961007
{ Icon: Copy, name: 'Copy' },
9971008
{ Icon: Cursor, name: 'Cursor' },
9981009
{ Icon: DocumentAttachment, name: 'DocumentAttachment' },
1010+
{ Icon: Download, name: 'Download' },
9991011
{ Icon: Duplicate, name: 'Duplicate' },
10001012
{ Icon: Expand, name: 'Expand' },
10011013
{ Icon: Eye, name: 'Eye' },
@@ -1011,6 +1023,7 @@ export default function PlaygroundPage() {
10111023
{ Icon: NoWrap, name: 'NoWrap' },
10121024
{ Icon: PanelLeft, name: 'PanelLeft' },
10131025
{ Icon: Play, name: 'Play' },
1026+
{ Icon: PlayOutline, name: 'PlayOutline' },
10141027
{ Icon: Redo, name: 'Redo' },
10151028
{ Icon: Rocket, name: 'Rocket' },
10161029
{ Icon: Trash, name: 'Trash' },

apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/workspace-header/components/invite-modal/invite-modal.tsx

Lines changed: 30 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,8 @@ export function InviteModal({ open, onOpenChange, workspaceName }: InviteModalPr
5050
>({})
5151
const [isSubmitting, setIsSubmitting] = useState(false)
5252
const [isSaving, setIsSaving] = useState(false)
53-
const [showSent, setShowSent] = useState(false)
53+
const cooldownIntervalsRef = useRef<Map<string, NodeJS.Timeout>>(new Map())
5454
const [errorMessage, setErrorMessage] = useState<string | null>(null)
55-
const [successMessage, setSuccessMessage] = useState<string | null>(null)
5655
const [memberToRemove, setMemberToRemove] = useState<{ userId: string; email: string } | null>(
5756
null
5857
)
@@ -118,6 +117,20 @@ export function InviteModal({ open, onOpenChange, workspaceName }: InviteModalPr
118117
}
119118
}, [open, workspaceId, fetchPendingInvitations, refetchPermissions])
120119

120+
useEffect(() => {
121+
if (open) {
122+
setErrorMessage(null)
123+
}
124+
}, [open])
125+
126+
useEffect(() => {
127+
const intervalsRef = cooldownIntervalsRef.current
128+
return () => {
129+
intervalsRef.forEach((interval) => clearInterval(interval))
130+
intervalsRef.clear()
131+
}
132+
}, [])
133+
121134
const addEmail = useCallback(
122135
(email: string) => {
123136
if (!email.trim()) return false
@@ -248,11 +261,6 @@ export function InviteModal({ open, onOpenChange, workspaceName }: InviteModalPr
248261
}
249262

250263
setExistingUserPermissionChanges({})
251-
252-
setSuccessMessage(
253-
`Permission changes saved for ${updates.length} user${updates.length !== 1 ? 's' : ''}!`
254-
)
255-
setTimeout(() => setSuccessMessage(null), 3000)
256264
} catch (error) {
257265
logger.error('Error saving permission changes:', error)
258266
const errorMsg =
@@ -275,9 +283,6 @@ export function InviteModal({ open, onOpenChange, workspaceName }: InviteModalPr
275283
if (!userPerms.canAdmin || !hasPendingChanges) return
276284

277285
setExistingUserPermissionChanges({})
278-
setSuccessMessage('Changes restored to original permissions!')
279-
280-
setTimeout(() => setSuccessMessage(null), 3000)
281286
}, [userPerms.canAdmin, hasPendingChanges])
282287

283288
const handleRemoveMemberClick = useCallback((userId: string, email: string) => {
@@ -330,9 +335,6 @@ export function InviteModal({ open, onOpenChange, workspaceName }: InviteModalPr
330335
delete updated[memberToRemove.userId]
331336
return updated
332337
})
333-
334-
setSuccessMessage(`${memberToRemove.email} has been removed from the workspace`)
335-
setTimeout(() => setSuccessMessage(null), 3000)
336338
} catch (error) {
337339
logger.error('Error removing member:', error)
338340
const errorMsg =
@@ -378,9 +380,6 @@ export function InviteModal({ open, onOpenChange, workspaceName }: InviteModalPr
378380
setPendingInvitations((prev) =>
379381
prev.filter((inv) => inv.invitationId !== invitationToRemove.invitationId)
380382
)
381-
382-
setSuccessMessage(`Invitation for ${invitationToRemove.email} has been cancelled`)
383-
setTimeout(() => setSuccessMessage(null), 3000)
384383
} catch (error) {
385384
logger.error('Error cancelling invitation:', error)
386385
const errorMsg =
@@ -420,9 +419,6 @@ export function InviteModal({ open, onOpenChange, workspaceName }: InviteModalPr
420419
throw new Error(data.error || 'Failed to resend invitation')
421420
}
422421

423-
setSuccessMessage(`Invitation resent to ${email}`)
424-
setTimeout(() => setSuccessMessage(null), 3000)
425-
426422
setResentInvitationIds((prev) => ({ ...prev, [invitationId]: true }))
427423
setTimeout(() => {
428424
setResentInvitationIds((prev) => {
@@ -443,6 +439,12 @@ export function InviteModal({ open, onOpenChange, workspaceName }: InviteModalPr
443439
return next
444440
})
445441
setResendCooldowns((prev) => ({ ...prev, [invitationId]: 60 }))
442+
443+
const existingInterval = cooldownIntervalsRef.current.get(invitationId)
444+
if (existingInterval) {
445+
clearInterval(existingInterval)
446+
}
447+
446448
const interval = setInterval(() => {
447449
setResendCooldowns((prev) => {
448450
const current = prev[invitationId]
@@ -451,11 +453,14 @@ export function InviteModal({ open, onOpenChange, workspaceName }: InviteModalPr
451453
const next = { ...prev }
452454
delete next[invitationId]
453455
clearInterval(interval)
456+
cooldownIntervalsRef.current.delete(invitationId)
454457
return next
455458
}
456459
return { ...prev, [invitationId]: current - 1 }
457460
})
458461
}, 1000)
462+
463+
cooldownIntervalsRef.current.set(invitationId, interval)
459464
}
460465
},
461466
[workspaceId, userPerms.canAdmin, resendCooldowns]
@@ -466,7 +471,6 @@ export function InviteModal({ open, onOpenChange, workspaceName }: InviteModalPr
466471
e.preventDefault()
467472

468473
setErrorMessage(null)
469-
setSuccessMessage(null)
470474

471475
if (validEmails.length === 0 || !workspaceId) {
472476
return
@@ -555,11 +559,6 @@ export function InviteModal({ open, onOpenChange, workspaceName }: InviteModalPr
555559
setEmailItems([])
556560
setUserPermissions([])
557561
}
558-
setShowSent(true)
559-
560-
setTimeout(() => {
561-
setShowSent(false)
562-
}, 4000)
563562
}
564563
} catch (err) {
565564
logger.error('Error inviting members:', err)
@@ -581,23 +580,23 @@ export function InviteModal({ open, onOpenChange, workspaceName }: InviteModalPr
581580
setExistingUserPermissionChanges({})
582581
setIsSubmitting(false)
583582
setIsSaving(false)
584-
setShowSent(false)
585583
setErrorMessage(null)
586-
setSuccessMessage(null)
587584
setMemberToRemove(null)
588585
setIsRemovingMember(false)
589586
setInvitationToRemove(null)
590587
setIsRemovingInvitation(false)
588+
setResendCooldowns({})
589+
setResentInvitationIds({})
590+
591+
cooldownIntervalsRef.current.forEach((interval) => clearInterval(interval))
592+
cooldownIntervalsRef.current.clear()
591593
}, [])
592594

593595
return (
594596
<Modal
595597
open={open}
596598
onOpenChange={(newOpen: boolean) => {
597-
if (newOpen) {
598-
setErrorMessage(null)
599-
setSuccessMessage(null)
600-
} else {
599+
if (!newOpen) {
601600
resetState()
602601
}
603602
onOpenChange(newOpen)

0 commit comments

Comments
 (0)