mirror of
https://github.com/mountain-loop/yaak.git
synced 2026-05-17 13:17:01 +02:00
Split codebase (#455)
This commit is contained in:
@@ -0,0 +1,102 @@
|
||||
import type { DivergedStrategy } from "@yaakapp-internal/git";
|
||||
import { HStack, InlineCode } from "@yaakapp-internal/ui";
|
||||
import { useState } from "react";
|
||||
import { showDialog } from "../../lib/dialog";
|
||||
import { Button } from "../core/Button";
|
||||
import { RadioCards } from "../core/RadioCards";
|
||||
|
||||
type Resolution = "force_reset" | "merge";
|
||||
|
||||
const resolutionLabel: Record<Resolution, string> = {
|
||||
force_reset: "Force Pull",
|
||||
merge: "Merge",
|
||||
};
|
||||
|
||||
interface DivergedDialogProps {
|
||||
remote: string;
|
||||
branch: string;
|
||||
onResult: (strategy: DivergedStrategy) => void;
|
||||
onHide: () => void;
|
||||
}
|
||||
|
||||
function DivergedDialog({ remote, branch, onResult, onHide }: DivergedDialogProps) {
|
||||
const [selected, setSelected] = useState<Resolution | null>(null);
|
||||
|
||||
const handleSubmit = () => {
|
||||
if (selected == null) return;
|
||||
onResult(selected);
|
||||
onHide();
|
||||
};
|
||||
|
||||
const handleCancel = () => {
|
||||
onResult("cancel");
|
||||
onHide();
|
||||
};
|
||||
|
||||
return (
|
||||
<div className="flex flex-col gap-4 mb-4">
|
||||
<p className="text-text-subtle">
|
||||
Your local branch has diverged from{" "}
|
||||
<InlineCode>
|
||||
{remote}/{branch}
|
||||
</InlineCode>
|
||||
. How would you like to resolve this?
|
||||
</p>
|
||||
<RadioCards
|
||||
name="diverged-strategy"
|
||||
value={selected}
|
||||
onChange={setSelected}
|
||||
options={[
|
||||
{
|
||||
value: "merge",
|
||||
label: "Merge Commit",
|
||||
description: "Combining local and remote changes into a single merge commit",
|
||||
},
|
||||
{
|
||||
value: "force_reset",
|
||||
label: "Force Pull",
|
||||
description: "Discard local commits and reset to match the remote branch",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
<HStack space={2} justifyContent="start" className="flex-row-reverse">
|
||||
<Button
|
||||
color={selected === "force_reset" ? "danger" : "primary"}
|
||||
disabled={selected == null}
|
||||
onClick={handleSubmit}
|
||||
>
|
||||
{selected != null ? resolutionLabel[selected] : "Select an option"}
|
||||
</Button>
|
||||
<Button variant="border" onClick={handleCancel}>
|
||||
Cancel
|
||||
</Button>
|
||||
</HStack>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export async function promptDivergedStrategy({
|
||||
remote,
|
||||
branch,
|
||||
}: {
|
||||
remote: string;
|
||||
branch: string;
|
||||
}): Promise<DivergedStrategy> {
|
||||
return new Promise((resolve) => {
|
||||
showDialog({
|
||||
id: "git-diverged",
|
||||
title: "Branches Diverged",
|
||||
hideX: true,
|
||||
size: "sm",
|
||||
disableBackdropClose: true,
|
||||
onClose: () => resolve("cancel"),
|
||||
render: ({ hide }) =>
|
||||
DivergedDialog({
|
||||
remote,
|
||||
branch,
|
||||
onHide: hide,
|
||||
onResult: resolve,
|
||||
}),
|
||||
});
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user