From 4acfe07dff31a131fccc49154d30608b109a399d Mon Sep 17 00:00:00 2001 From: aequor-cntrl <53840534+aequor-cntrl@users.noreply.github.com> Date: Fri, 25 Apr 2025 23:15:09 +0300 Subject: [PATCH 01/41] Design the phonebook --- app/src/components/phonebook/AddEntry.tsx | 53 +++++++ app/src/components/phonebook/DeleteDialog.tsx | 32 +++++ app/src/components/phonebook/EditDialog.tsx | 47 +++++++ app/src/components/phonebook/EntryCard.tsx | 40 ++++++ app/src/components/ui/card.tsx | 92 ++++++++++++ app/src/components/ui/dialog.tsx | 133 ++++++++++++++++++ app/src/components/ui/input.tsx | 21 +++ app/src/components/ui/label.tsx | 22 +++ app/src/pages/phonebook/phonebookPage.tsx | 53 +++++++ app/src/services/phonebookService.ts | 17 +++ app/src/utils/jsonRpcClient.ts | 23 +++ 11 files changed, 533 insertions(+) create mode 100644 app/src/components/phonebook/AddEntry.tsx create mode 100644 app/src/components/phonebook/DeleteDialog.tsx create mode 100644 app/src/components/phonebook/EditDialog.tsx create mode 100644 app/src/components/phonebook/EntryCard.tsx create mode 100644 app/src/components/ui/card.tsx create mode 100644 app/src/components/ui/dialog.tsx create mode 100644 app/src/components/ui/input.tsx create mode 100644 app/src/components/ui/label.tsx create mode 100644 app/src/pages/phonebook/phonebookPage.tsx create mode 100644 app/src/services/phonebookService.ts create mode 100644 app/src/utils/jsonRpcClient.ts diff --git a/app/src/components/phonebook/AddEntry.tsx b/app/src/components/phonebook/AddEntry.tsx new file mode 100644 index 0000000..98ad591 --- /dev/null +++ b/app/src/components/phonebook/AddEntry.tsx @@ -0,0 +1,53 @@ +import { Button } from "@/components/ui/button" +import { + Dialog, + DialogContent, + DialogFooter, + DialogHeader, + DialogTitle, + DialogTrigger, +} from "@/components/ui/dialog" +import { Input } from "@/components/ui/input" +import { Label } from "@/components/ui/label" +import React, { useState } from "react"; + +export function AddEntry({ onAdd }: { onAdd: (name: string, phone: string) => void }) { + const [name, setName] = useState(""); + const [phone, setPhone] = useState(""); + + const handleAdd = () => { + onAdd(name, phone); + setName(""); + setPhone(""); + }; + + return ( + + ) +} diff --git a/app/src/components/phonebook/DeleteDialog.tsx b/app/src/components/phonebook/DeleteDialog.tsx new file mode 100644 index 0000000..f386bff --- /dev/null +++ b/app/src/components/phonebook/DeleteDialog.tsx @@ -0,0 +1,32 @@ +import { Button } from "@/components/ui/button" +import { + Dialog, + DialogContent, + DialogDescription, + DialogFooter, + DialogHeader, + DialogTitle, + DialogTrigger, +} from "@/components/ui/dialog" + +export function DeleteDialog() { + return ( + + ) +} diff --git a/app/src/components/phonebook/EditDialog.tsx b/app/src/components/phonebook/EditDialog.tsx new file mode 100644 index 0000000..0e81309 --- /dev/null +++ b/app/src/components/phonebook/EditDialog.tsx @@ -0,0 +1,47 @@ +import { Button } from "@/components/ui/button" +import { + Dialog, + DialogContent, + DialogDescription, + DialogFooter, + DialogHeader, + DialogTitle, + DialogTrigger, +} from "@/components/ui/dialog" +import { Input } from "@/components/ui/input" +import { Label } from "@/components/ui/label" + +export function EditDialog() { + return ( + + ) +} diff --git a/app/src/components/phonebook/EntryCard.tsx b/app/src/components/phonebook/EntryCard.tsx new file mode 100644 index 0000000..e270154 --- /dev/null +++ b/app/src/components/phonebook/EntryCard.tsx @@ -0,0 +1,40 @@ +import React, { useState } from "react"; +import { DeleteDialog } from "./DeleteDialog"; +import { EditDialog} from "./EditDialog"; + +type EntryCardProps = { + name: string; + phone: string; + onEdit: (name: string, phone: string) => void; + onDelete: () => void; +}; + +export function EntryCard({ name, phone, onEdit, onDelete }: EntryCardProps) { + const [isEditing, setIsEditing] = useState(false); + const [editedName, setEditedName] = useState(name); + const [editedPhone, setEditedPhone] = useState(phone); + + const handleSave = () => { + onEdit(editedName, editedPhone); + setIsEditing(false); + }; + + return ( +
{phone}
+ + +{phone}
- - -{phone}
+{email}
+ + +{phone}
{email}
- - -