Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 12 additions & 5 deletions src/components/ticket-page/InnerTicketInfo.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ import TicketButtons from './TicketButtons';
import Countdown from './Countdown';
import EditTicketModal from '../modals/EditTicketModal';

export type ConfettiMode = "down" | "up" | null;

interface InnerTicketInfoProps {
ticket: TicketWithNames;
userRole: UserRole;
Expand All @@ -25,7 +27,7 @@ interface InnerTicketInfoProps {
const InnerTicketInfo = (props: InnerTicketInfoProps) => {
const { ticket, userRole, userId } = props;

const [showConfetti, setShowConfetti] = useState(false);
const [confettiMode, setConfettiMode] = useState<ConfettiMode>(null);
const [usersInGroup, setUsersInGroup] = useState<User[]>([]);
const [showEditTicketModal, setShowEditTicketModal] = useState(false);

Expand Down Expand Up @@ -231,7 +233,7 @@ const InnerTicketInfo = (props: InnerTicketInfoProps) => {
isGetUsersLoading={isGetUsersLoading}
userRole={userRole}
isCurrentUserInGroup={isCurrentUserInGroup}
setShowConfetti={setShowConfetti}
setConfettiMode={setConfettiMode}
/>
<StaffNotes ticket={ticket} userRole={userRole} />
<Flex
Expand Down Expand Up @@ -263,9 +265,14 @@ const InnerTicketInfo = (props: InnerTicketInfoProps) => {

<Confetti
recycle={false}
numberOfPieces={200}
run={showConfetti}
onConfettiComplete={() => setShowConfetti(false)}
numberOfPieces={confettiMode ? 200 : 0}
confettiSource={confettiMode === "up" ? { x: 0, y: window.innerHeight, w: window.innerWidth, h: 0 } : undefined}
gravity={confettiMode === "up" ? -0.1 : undefined}
initialVelocityY={confettiMode === "up" ? -10 : undefined}
onConfettiComplete={(confetti) => {
setConfettiMode(null);
confetti?.reset();
}}
/>

<EditTicketModal
Expand Down
8 changes: 5 additions & 3 deletions src/components/ticket-page/TicketButtons.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,15 @@ import { TicketWithNames } from '../../server/trpc/router/ticket';
import { trpc } from '../../utils/trpc';
import useSiteSettings from '../../utils/hooks/useSiteSettings';
import { SiteSettings, SiteSettingsValues } from '@prisma/client';
import { ConfettiMode } from './InnerTicketInfo';

interface TicketCardProps {
ticket: TicketWithNames;
userId: string;
userRole: UserRole;
isGetUsersLoading: boolean;
isCurrentUserInGroup: boolean;
setShowConfetti: (showConfetti: boolean) => void;
setConfettiMode: (confettiMode: ConfettiMode) => void;
}

export const BUTTONS_DISABLED_WAIT_TIME = 3000;
Expand All @@ -23,7 +24,7 @@ export const BUTTONS_DISABLED_WAIT_MSG = 'Please wait 3 seconds before clicking
* because InnerTicketInfo was getting too big.
*/
const TicketButtons = (props: TicketCardProps) => {
const { ticket, userId, userRole, isCurrentUserInGroup, isGetUsersLoading, setShowConfetti } = props;
const { ticket, userId, userRole, isCurrentUserInGroup, isGetUsersLoading, setConfettiMode } = props;

const [areButtonsLoading, setAreButtonsLoading] = useState(false);
const [areButtonsDisabled, setAreButtonsDisabled] = useState(false);
Expand Down Expand Up @@ -67,13 +68,14 @@ const TicketButtons = (props: TicketCardProps) => {
const handleResolveTicket = async () => {
onClickWrapper(async () => {
await resolveTicketsMutation.mutateAsync({ ticketIds: [ticket.id] });
setShowConfetti(true);
setConfettiMode("down");
})();
};

const handleRequeueTicket = async () => {
onClickWrapper(async () => {
await requeueTicketsMutation.mutateAsync({ ticketIds: [ticket.id] });
setConfettiMode("up");
})();
};

Expand Down