) => {
e.preventDefault();
+ if (!db) return;
const compiledGuide: CompiledGuideType = {
- id: guide.id,
- title: guide.title,
- description: guide.description,
- createdAt: guide.createdAt,
- updatedAt: guide.updatedAt,
- deletedAt: guide.deletedAt,
+ ...guide,
+ updatedAt: new Date(),
frames,
};
- if (!db) return;
await db.put("guides", compiledGuide);
- setGuide({
- id: crypto.randomUUID(),
- title: "",
- description: "",
- createdAt: new Date(),
- updatedAt: new Date(),
- deletedAt: undefined,
- });
- setFrames([]);
- setGuides((prev) => [compiledGuide, ...prev]);
+ if (isEditing) {
+ setGuides((prev) =>
+ prev.map((g) => (g.id === compiledGuide.id ? compiledGuide : g)),
+ );
+ } else {
+ setGuides((prev) => [compiledGuide, ...prev]);
+ setGuide(makeEmptyGuide());
+ setFrames([]);
+ }
};
return {
@@ -145,6 +145,7 @@ export default function useNewGuide() {
setGuide,
frames,
setFrames,
+ isEditing,
handleUpdateTitle,
handleUpdateDescription,
handleAddFrames,
@@ -157,3 +158,7 @@ export default function useNewGuide() {
handleSaveGuide,
};
}
+
+/* */
+/* Figure out how to use this hook for both editing and creating. */
+/* */
diff --git a/src/features/guides/routes/Guide.tsx b/src/features/guides/routes/Guide.tsx
index b92c7f0..5607dd2 100644
--- a/src/features/guides/routes/Guide.tsx
+++ b/src/features/guides/routes/Guide.tsx
@@ -1,6 +1,7 @@
import { useParams } from "react-router";
import { useGuides } from "../../../lib/contexts/guide.context";
import useGuide from "../hooks/useGuide";
+import { Link } from "react-router";
export default function Guide() {
const { id } = useParams();
@@ -31,7 +32,7 @@ export default function Guide() {
-
+ Edit
);
diff --git a/src/features/guides/routes/NewGuide.css b/src/features/guides/routes/GuideForm.css
similarity index 100%
rename from src/features/guides/routes/NewGuide.css
rename to src/features/guides/routes/GuideForm.css
diff --git a/src/features/guides/routes/NewGuide.tsx b/src/features/guides/routes/GuideForm.tsx
similarity index 77%
rename from src/features/guides/routes/NewGuide.tsx
rename to src/features/guides/routes/GuideForm.tsx
index fb5055d..0e6b07a 100644
--- a/src/features/guides/routes/NewGuide.tsx
+++ b/src/features/guides/routes/GuideForm.tsx
@@ -1,10 +1,17 @@
-import "./NewGuide.css";
+import "./GuideForm.css";
import FileUpload from "../components/FileUpload";
-import useNewGuide from "../hooks/useNewGuide";
+import useGuideForm from "../hooks/useGuideForm";
import Frame from "../components/Frame";
+import { useParams } from "react-router";
+import { useGuides } from "../../../lib/contexts/guide.context";
+
+export default function GuideForm() {
+ const { id } = useParams();
+ const { guides } = useGuides();
+ const g = guides.find((g) => g.id === id);
-export default function NewGuide() {
const {
+ guide,
frames,
handleUpdateTitle,
handleUpdateDescription,
@@ -16,7 +23,8 @@ export default function NewGuide() {
handleRemoveStep,
handleUpdateStep,
handleSaveGuide,
- } = useNewGuide();
+ isEditing,
+ } = useGuideForm(g);
return (
@@ -26,6 +34,7 @@ export default function NewGuide() {
handleUpdateTitle(e.target.value)}
/>
@@ -33,6 +42,7 @@ export default function NewGuide() {
Description