feat(setup): add ability to skip setup wizard and update user model
This commit is contained in:
@@ -6,6 +6,7 @@ export interface AuthUser {
|
||||
username: string;
|
||||
isAdmin: boolean;
|
||||
isFounder: boolean;
|
||||
setupSkipped: boolean;
|
||||
setupComplete: boolean;
|
||||
giteaUsername: string | null;
|
||||
giteaInstanceUrl: string | null;
|
||||
|
||||
@@ -44,7 +44,32 @@ export function SetupWizard() {
|
||||
}, [step, user?.id]);
|
||||
|
||||
const next = () => setStep(s => Math.min(s + 1, STEPS.length - 1));
|
||||
const skip = () => navigate("/");
|
||||
const skip = async () => {
|
||||
setSaving(true);
|
||||
const res = await api.user.skipSetup();
|
||||
setSaving(false);
|
||||
if (res.ok) {
|
||||
await refresh();
|
||||
navigate("/");
|
||||
} else {
|
||||
toast.error(res.message || "Failed to skip setup");
|
||||
}
|
||||
};
|
||||
const leaveWizard = async (path: string) => {
|
||||
if (user?.setupComplete) {
|
||||
navigate(path);
|
||||
return;
|
||||
}
|
||||
setSaving(true);
|
||||
const res = await api.user.skipSetup();
|
||||
setSaving(false);
|
||||
if (res.ok) {
|
||||
await refresh();
|
||||
navigate(path);
|
||||
} else {
|
||||
toast.error(res.message || "Failed to finish setup");
|
||||
}
|
||||
};
|
||||
|
||||
const handleGiteaNext = async () => {
|
||||
setSaving(true);
|
||||
@@ -112,8 +137,8 @@ export function SetupWizard() {
|
||||
<button onClick={next} className="inline-flex items-center gap-1 px-6 py-2.5 bg-blue-600 hover:bg-blue-700 text-white rounded-lg font-medium transition-colors">
|
||||
Get Started <ArrowRight size={16} />
|
||||
</button>
|
||||
<button onClick={skip} className="px-4 py-2.5 text-sm text-gray-500 dark:text-slate-400 hover:underline">
|
||||
Skip wizard
|
||||
<button onClick={skip} disabled={saving} className="px-4 py-2.5 text-sm text-gray-500 dark:text-slate-400 hover:underline disabled:opacity-50">
|
||||
{saving ? "Skipping..." : "Skip wizard"}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
@@ -211,10 +236,10 @@ export function SetupWizard() {
|
||||
Go to the Repos page to enable previews for a repository. PP will automatically register the webhook.
|
||||
</p>
|
||||
<div className="flex gap-3">
|
||||
<a href="/repos"
|
||||
className="flex-1 inline-flex items-center justify-center gap-1 py-2.5 text-center bg-blue-600 hover:bg-blue-700 text-white rounded-lg font-medium transition-colors">
|
||||
<button onClick={() => leaveWizard("/repos")} disabled={saving}
|
||||
className="flex-1 inline-flex items-center justify-center gap-1 py-2.5 text-center bg-blue-600 hover:bg-blue-700 text-white rounded-lg font-medium transition-colors disabled:opacity-50">
|
||||
Go to Repos <ArrowRight size={16} />
|
||||
</a>
|
||||
</button>
|
||||
<button onClick={next} className="text-sm text-gray-500 dark:text-slate-400 hover:underline px-2">Skip</button>
|
||||
</div>
|
||||
</div>
|
||||
@@ -227,8 +252,8 @@ export function SetupWizard() {
|
||||
<p className="text-gray-600 dark:text-slate-300 text-sm">
|
||||
Open a pull request on an enabled repo and PP will provision a preview automatically.
|
||||
</p>
|
||||
<button onClick={() => navigate("/")} className="inline-flex items-center gap-1 px-6 py-2.5 bg-blue-600 hover:bg-blue-700 text-white rounded-lg font-medium transition-colors">
|
||||
Go to Dashboard <ArrowRight size={16} />
|
||||
<button onClick={() => leaveWizard("/")} disabled={saving} className="inline-flex items-center gap-1 px-6 py-2.5 bg-blue-600 hover:bg-blue-700 text-white rounded-lg font-medium transition-colors disabled:opacity-50">
|
||||
{saving ? "Finishing..." : <span className="inline-flex items-center gap-1">Go to Dashboard <ArrowRight size={16} /></span>}
|
||||
</button>
|
||||
</div>
|
||||
)}
|
||||
|
||||
@@ -37,6 +37,7 @@ export const api = {
|
||||
request("PUT", "/user/gitea", data),
|
||||
updateAws: (data: { awsAccessKeyId: string; awsSecretAccessKey: string; awsRegion: string }) =>
|
||||
request("PUT", "/user/aws", data),
|
||||
skipSetup: () => request("POST", "/user/setup/skip"),
|
||||
getWebhookSecret: () => request("GET", "/user/webhook-secret"),
|
||||
regenerateWebhookSecret: () => request("POST", "/user/webhook-secret/regenerate"),
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user