* Start by moving what we have to _templates * WIP * WIP * Add create/edit/delete template commands * Type fixes cli Co-authored-by: Peer Richelsen <peeroke@gmail.com> Co-authored-by: zomars <zomars@me.com>
110 lines
3.0 KiB
TypeScript
110 lines
3.0 KiB
TypeScript
import { Text } from "ink";
|
|
import TextInput from "ink-text-input";
|
|
import React, { useEffect, useState } from "react";
|
|
|
|
import { ImportantText } from "../components/ImportantText";
|
|
import { Message } from "../components/Message";
|
|
import { BaseAppFork, Seed, generateAppFiles } from "../core";
|
|
import { getApp } from "../utils/getApp";
|
|
|
|
export default function DeleteForm({ slug, action }: { slug: string; action: "delete" | "delete-template" }) {
|
|
const [confirmedAppSlug, setConfirmedAppSlug] = useState("");
|
|
const [state, setState] = useState<
|
|
| "INITIALIZED"
|
|
| "DELETION_CONFIRMATION_FAILED"
|
|
| "DELETION_CONFIRMATION_SUCCESSFUL"
|
|
| "DELETION_COMPLETED"
|
|
| "APP_NOT_EXISTS"
|
|
>("INITIALIZED");
|
|
const isTemplate = action === "delete-template";
|
|
const app = getApp(slug, isTemplate);
|
|
useEffect(() => {
|
|
if (!app) {
|
|
setState("APP_NOT_EXISTS");
|
|
}
|
|
}, []);
|
|
|
|
useEffect(() => {
|
|
if (state === "DELETION_CONFIRMATION_SUCCESSFUL") {
|
|
(async () => {
|
|
await BaseAppFork.delete({ slug, isTemplate });
|
|
Seed.revert({ slug });
|
|
await generateAppFiles();
|
|
// successMsg({ text: `App with slug ${slug} has been deleted`, done: true });
|
|
setState("DELETION_COMPLETED");
|
|
})();
|
|
}
|
|
}, [slug, state]);
|
|
|
|
if (state === "INITIALIZED") {
|
|
return (
|
|
<>
|
|
<ImportantText>
|
|
Type below the slug of the {isTemplate ? "Template" : "App"} that you want to delete.
|
|
</ImportantText>
|
|
<Text color="gray" italic>
|
|
It would cleanup the app directory and App table and Credential table.
|
|
</Text>
|
|
<TextInput
|
|
value={confirmedAppSlug}
|
|
onSubmit={(value) => {
|
|
if (value === slug) {
|
|
setState("DELETION_CONFIRMATION_SUCCESSFUL");
|
|
} else {
|
|
setState("DELETION_CONFIRMATION_FAILED");
|
|
}
|
|
}}
|
|
onChange={(val) => {
|
|
setConfirmedAppSlug(val);
|
|
}}
|
|
/>
|
|
</>
|
|
);
|
|
}
|
|
if (state === "APP_NOT_EXISTS") {
|
|
return (
|
|
<Message
|
|
message={{
|
|
text: `${isTemplate ? "Template" : "App"} with slug ${slug} doesn't exist`,
|
|
type: "error",
|
|
}}
|
|
/>
|
|
);
|
|
}
|
|
if (state === "DELETION_CONFIRMATION_SUCCESSFUL") {
|
|
return (
|
|
<Message
|
|
message={{
|
|
text: `Deleting ${isTemplate ? "Template" : "App"}`,
|
|
type: "info",
|
|
showInProgressIndicator: true,
|
|
}}
|
|
/>
|
|
);
|
|
}
|
|
|
|
if (state === "DELETION_COMPLETED") {
|
|
return (
|
|
<Message
|
|
message={{
|
|
text: `${
|
|
isTemplate ? "Template" : "App"
|
|
} with slug "${slug}" has been deleted. You might need to restart your dev environment`,
|
|
type: "success",
|
|
}}
|
|
/>
|
|
);
|
|
}
|
|
if (state === "DELETION_CONFIRMATION_FAILED") {
|
|
return (
|
|
<Message
|
|
message={{
|
|
text: `Slug doesn't match - Should have been ${slug}`,
|
|
type: "error",
|
|
}}
|
|
/>
|
|
);
|
|
}
|
|
return null;
|
|
}
|