65fa8300ad
* Removed next references in the ReadMe * FAQ improvements to update Next.js references * Added a new Frameworks page with logos to link to the quick start guides * Renamed the mdx file so the link works * Added basic platform guides * Introduction doesn’t reference next.js only * Added a note about serverless and restructured the side menu * Added more frameworks pages to the manual install section * Fixed SVG error * Coming soon guides now using snippets so they can be in 2 places while we work on them * Removed redirects * Added a new named icon * increased fireworks particle count slightly * Creating a route for the onboarding and link to access it anytime from the side menu * Moved the onboarding into new components * Updated the routes for the onboarding page * Onboarding is now Setup and the frameworks overview page now links to different framework page in the onboarding side nav * URLs and pages renamed to ‘setup’ * URLs and pages renamed to ‘setup’ * Fixed some old named component imports * WIP on a new less hacked-in background image * Added svg logos for all the frameworks * New paths for the new framework pages * Side menu collapses once you selected a framework * Temporary Nuxt page * New routes for the new frameworks * New ‘framework coming soon’ component - now used in the coming soon framework pages * Moved/removed files * Moved all svg framework logos into a new folder and file * balanced the logo sizes * Framework coming soon pages take a name and url * New express svg logo * New component for a Framework item in the grid * Added information and design for the coming soon frameworks * Change the grid to 1 row if jobs === 0 * Updated the framework coming soon snippet and added it to the relevant pages * Express now 2nd in all lists * Added link to long running server support discussion * New logo to include next.js + supabase quick start * roadmap now links to homepage with page anchor to roadmap section * changelog now links to Github releases page * Removed reference to Next.js * Docs pages with coming soon info all share the same framework snippets * Fixed issue of missing props * Moved the fireworks effect into a separate file to make it easier for adding more framework onboarding pages * Info callouts have a more muted style * Added a callout to the top of the next onboarding to reference Serverless-only support * Moved the callout explaining scheduled triggers not working in dev to the bottom of the test panel This is to resolve eric’s UX ticket: https://github.com/triggerdotdev/trigger.dev/issues/416 * Added groundwork for Nest.js framework * Using framer motion for the menu transition instead of css - now has a slight spring and is snappier * redirect the manual setup page to the new nextjs setup page * Fixed broken docs link * Added a readme.md to next.js package * Capital I for integration * Renamed component: NextDevCommand to RunDevCommand * Made required props non-optional * CLI now points at manual install guides if no Next project detected * Explicitly made supported default to false (it was working but a bit hard to read) * Added links to all github issues for the frameworks coming soon component --------- Co-authored-by: Matt Aitken <matt@mattaitken.com>
74 lines
2.4 KiB
TypeScript
74 lines
2.4 KiB
TypeScript
import { useEffect } from "react";
|
|
import { useEventSource } from "remix-utils";
|
|
import { projectPath, projectStreamingPath } from "~/utils/pathBuilder";
|
|
import { useProject } from "./useProject";
|
|
import { useOrganization } from "./useOrganizations";
|
|
import { useNavigate } from "@remix-run/react";
|
|
|
|
export function useProjectSetupComplete() {
|
|
const project = useProject();
|
|
const organization = useOrganization();
|
|
const navigate = useNavigate();
|
|
const events = useEventSource(projectStreamingPath(project.id), {
|
|
event: "message",
|
|
});
|
|
|
|
useEffect(() => {
|
|
if (events !== null) {
|
|
// This uses https://www.npmjs.com/package/canvas-confetti
|
|
if ("confetti" in window && typeof window.confetti !== "undefined") {
|
|
const duration = 3.5 * 1000;
|
|
const animationEnd = Date.now() + duration;
|
|
const defaults = {
|
|
startVelocity: 30,
|
|
spread: 360,
|
|
ticks: 60,
|
|
zIndex: 0,
|
|
colors: [
|
|
"#E7FF52",
|
|
"#41FF54",
|
|
"rgb(245 158 11)",
|
|
"rgb(22 163 74)",
|
|
"rgb(37 99 235)",
|
|
"rgb(67 56 202)",
|
|
"rgb(219 39 119)",
|
|
"rgb(225 29 72)",
|
|
"rgb(217 70 239)",
|
|
],
|
|
};
|
|
function randomInRange(min: number, max: number): number {
|
|
return Math.random() * (max - min) + min;
|
|
}
|
|
// @ts-ignore
|
|
const interval = setInterval(function () {
|
|
const timeLeft = animationEnd - Date.now();
|
|
|
|
if (timeLeft <= 0) {
|
|
return clearInterval(interval);
|
|
}
|
|
|
|
const particleCount = 60 * (timeLeft / duration);
|
|
// since particles fall down, start a bit higher than random
|
|
// @ts-ignore
|
|
window.confetti(
|
|
Object.assign({}, defaults, {
|
|
particleCount,
|
|
origin: { x: randomInRange(0.1, 0.4), y: Math.random() - 0.2 },
|
|
})
|
|
);
|
|
// @ts-ignore
|
|
window.confetti(
|
|
Object.assign({}, defaults, {
|
|
particleCount,
|
|
origin: { x: randomInRange(0.6, 0.9), y: Math.random() - 0.2 },
|
|
})
|
|
);
|
|
}, 250);
|
|
}
|
|
|
|
navigate(projectPath(organization, project));
|
|
}
|
|
// WARNING Don't put the revalidator in the useEffect deps array or bad things will happen
|
|
}, [events]); // eslint-disable-line react-hooks/exhaustive-deps
|
|
}
|