diff --git a/apps/infoalloggi/src/components/KabanExample.tsx b/apps/infoalloggi/src/components/KabanExample.tsx
deleted file mode 100644
index b77bf86..0000000
--- a/apps/infoalloggi/src/components/KabanExample.tsx
+++ /dev/null
@@ -1,117 +0,0 @@
-"use client";
-
-import { useState } from "react";
-import { Avatar, AvatarFallback, AvatarImage } from "~/components/ui/avatar";
-import {
- KanbanBoard,
- KanbanCard,
- KanbanCards,
- KanbanHeader,
- KanbanProvider,
-} from "~/components/ui/kanban";
-
-const columns = [
- { id: "todo", name: "To Do", color: "red" },
- { id: "inprogress", name: "In Progress", color: "blue" },
- { id: "done", name: "Done", color: "green" },
-];
-const exampleFeatures = [
- {
- id: "1",
- name: "Design new homepage",
- column: "todo",
- startAt: new Date("2024-06-01"),
- endAt: new Date("2024-06-10"),
- owner: {
- name: "Alice",
- image: "https://i.pravatar.cc/150?img=1",
- },
- },
- {
- id: "2",
- name: "Implement authentication",
- column: "inprogress",
- startAt: new Date("2024-06-05"),
- endAt: new Date("2024-06-15"),
- owner: {
- name: "Bob",
- image: "https://i.pravatar.cc/150?img=2",
- },
- },
- {
- id: "3",
- name: "Set up database",
- column: "done",
- startAt: new Date("2024-05-20"),
- endAt: new Date("2024-05-30"),
- owner: {
- name: "Charlie",
- image: "https://i.pravatar.cc/150?img=3",
- },
- },
-];
-
-const dateFormatter = new Intl.DateTimeFormat("en-US", {
- month: "short",
- day: "numeric",
- year: "numeric",
-});
-const shortDateFormatter = new Intl.DateTimeFormat("en-US", {
- month: "short",
- day: "numeric",
-});
-const Example = () => {
- const [features, setFeatures] = useState(exampleFeatures);
- return (
-
- {(column) => (
-
-
-
-
-
- {(feature: (typeof features)[number]) => (
-
-
-
- {feature.owner && (
-
-
-
- {feature.owner.name?.slice(0, 2)}
-
-
- )}
-
-
- {shortDateFormatter.format(feature.startAt)} -{" "}
- {dateFormatter.format(feature.endAt)}
-
-
- )}
-
-
- )}
-
- );
-};
-export default Example;
diff --git a/apps/infoalloggi/src/components/area-riservata/potenziali.tsx b/apps/infoalloggi/src/components/area-riservata/potenziali.tsx
new file mode 100644
index 0000000..8a6257c
--- /dev/null
+++ b/apps/infoalloggi/src/components/area-riservata/potenziali.tsx
@@ -0,0 +1,179 @@
+"use client";
+
+import { format } from "date-fns";
+import {
+ KanbanBoard,
+ KanbanCard,
+ KanbanCards,
+ KanbanHeader,
+ KanbanProvider,
+} from "~/components/ui/kanban";
+import {
+ type ElementoPotenziali,
+ PotenzialiProvider,
+ usePotenziali,
+} from "~/providers/PotenzialiProvider";
+import type { UsersId } from "~/schemas/public/Users";
+import {
+ ContextMenu,
+ ContextMenuContent,
+ ContextMenuItem,
+ ContextMenuTrigger,
+} from "../ui/context-menu";
+import {
+ Dialog,
+ DialogContent,
+ DialogDescription,
+ DialogHeader,
+ DialogTitle,
+} from "../ui/dialog";
+import { UserAvatar } from "../user_avatar";
+
+const columns = [
+ { id: "todo", name: "To Do", color: "red" },
+ { id: "inprogress", name: "In Progress", color: "blue" },
+ { id: "done", name: "Done", color: "green" },
+];
+
+const SampleData: ElementoPotenziali[] = [
+ {
+ id: "1",
+ name: "Mario Rossi",
+ column: "todo",
+ descrizione:
+ "Single, cerca appartamento in centro da subito, budget 800 euro",
+ createdAt: new Date(),
+ owner: {
+ userId: "019b9a25-eff1-420a-9017-b0add205d7b6" as UsersId,
+ username: "Marco Pedone",
+ },
+ },
+ {
+ id: "2",
+ name: "Luigi Bianchi",
+ column: "inprogress",
+ descrizione: "Coppia, cerca bilocale in periferia, budget 600 euro",
+ createdAt: new Date(),
+ owner: null,
+ },
+ {
+ id: "3",
+ name: "Giovanni Verdi",
+ column: "done",
+ descrizione:
+ "Famiglia con 2 figli, cerca trilocale vicino a scuole, budget 1000 euro",
+ createdAt: new Date(),
+ owner: {
+ userId: "019b9a25-eff1-420a-9017-b0add205d7b6" as UsersId,
+ username: "Marco Pedone",
+ },
+ },
+];
+
+const Potenziali = () => {
+ return (
+
+
+
+ );
+};
+
+const Kaban = () => {
+ const { data, updateData, setEditingId, editingId, removeItem } =
+ usePotenziali();
+
+ return (
+ <>
+
+ {(column) => (
+
+
+
+
+
+ {(data: ElementoPotenziali) => (
+
+
+
+
+
+ {data.owner && (
+
+ )}
+
+
+ {format(data.createdAt, "dd/MM/yyyy HH:mm")}
+
+
+
+
+ {
+ setEditingId(data.id);
+ }}
+ >
+ Modifica
+
+
+ removeItem(data.id)}>
+ Elimina
+
+
+
+ )}
+
+
+ )}
+
+
+ >
+ );
+};
+
+const EditingContent = () => {
+ const { getEditingItem } = usePotenziali();
+ const item = getEditingItem();
+ if (!item) return null;
+ return (
+
+
+ Modifica {item.name}
+ desc
+
+
+
Descrizione: {item.descrizione}
+
Creato il: {format(item.createdAt, "dd/MM/yyyy HH:mm")}
+
Utente Assegnato: {item.owner ? item.owner.username : "Nessuno"}
+
+
+ );
+};
+
+export default Potenziali;
diff --git a/apps/infoalloggi/src/i18n/en.ts b/apps/infoalloggi/src/i18n/en.ts
index 15a6226..5be715c 100644
--- a/apps/infoalloggi/src/i18n/en.ts
+++ b/apps/infoalloggi/src/i18n/en.ts
@@ -605,6 +605,7 @@ export const en: LangDict = {
{
icon: "cog",
items: [
+ { href: "/area-riservata/admin/potenziali", title: "Potenziali" },
{ href: "/area-riservata/admin/utenti", title: "Users" },
{ href: "/area-riservata/admin/chats", title: "Chat List" },
{ href: "/area-riservata/admin/ordini", title: "Orders" },
diff --git a/apps/infoalloggi/src/i18n/it.ts b/apps/infoalloggi/src/i18n/it.ts
index 726d7e3..8dd18f6 100644
--- a/apps/infoalloggi/src/i18n/it.ts
+++ b/apps/infoalloggi/src/i18n/it.ts
@@ -610,6 +610,7 @@ export const it: LangDict = {
{
icon: "cog",
items: [
+ { href: "/area-riservata/admin/potenziali", title: "Potenziali" },
{ href: "/area-riservata/admin/utenti", title: "Utenti" },
{ href: "/area-riservata/admin/chats", title: "Lista Chat" },
{ href: "/area-riservata/admin/ordini", title: "Ordini" },
diff --git a/apps/infoalloggi/src/pages/area-riservata/admin/potenziali.tsx b/apps/infoalloggi/src/pages/area-riservata/admin/potenziali.tsx
new file mode 100644
index 0000000..e7d2726
--- /dev/null
+++ b/apps/infoalloggi/src/pages/area-riservata/admin/potenziali.tsx
@@ -0,0 +1,53 @@
+import dynamic from "next/dynamic";
+import { AreaRiservataLayout } from "~/components/Layout";
+import { LoadingPage } from "~/components/loading";
+import type { NextPageWithLayout } from "~/pages/_app";
+
+const Potenziali = dynamic(
+ () => import("~/components/area-riservata/potenziali"),
+ {
+ loading: () => ,
+ ssr: false,
+ },
+);
+
+const AdminPotenziali: NextPageWithLayout = () => {
+ return (
+
+ );
+};
+export default AdminPotenziali;
+
+// export const getServerSideProps = (async (context) => {
+// const access_token = context.req.cookies.access_token;
+
+// const helpers = await TrpcAuthedFetchingIstance({ access_token });
+// if (helpers) {
+// await helpers.trpc.etichette.getAllEtichette.prefetch();
+// return {
+// props: {
+// trpcState: helpers.trpc.dehydrate(),
+// },
+// };
+// }
+// return {
+// props: {},
+// };
+// }) satisfies GetServerSideProps;
+
+AdminPotenziali.getLayout = function getLayout(page) {
+ return {page};
+};
diff --git a/apps/infoalloggi/src/pages/test.tsx b/apps/infoalloggi/src/pages/test.tsx
index e64a66e..7e009b8 100644
--- a/apps/infoalloggi/src/pages/test.tsx
+++ b/apps/infoalloggi/src/pages/test.tsx
@@ -1,18 +1,7 @@
-import dynamic from "next/dynamic";
-import { LoadingPage } from "~/components/loading";
import type { NextPageWithLayout } from "./_app";
-const Kaban = dynamic(() => import("~/components/KabanExample"), {
- loading: () => ,
- ssr: false,
-});
-
const Test: NextPageWithLayout = () => {
- return (
-
-
-
- );
+ return asdsad;
};
export default Test;
diff --git a/apps/infoalloggi/src/providers/PotenzialiProvider.tsx b/apps/infoalloggi/src/providers/PotenzialiProvider.tsx
new file mode 100644
index 0000000..100fcd4
--- /dev/null
+++ b/apps/infoalloggi/src/providers/PotenzialiProvider.tsx
@@ -0,0 +1,66 @@
+import { createContext, useContext, useState } from "react";
+import type { UsersId } from "~/schemas/public/Users";
+
+export type ElementoPotenziali = {
+ id: string;
+ name: string;
+ column: string;
+ descrizione: string;
+ createdAt: Date;
+ owner: { userId: UsersId; username: string } | null;
+};
+type PotenzialiContextType = {
+ data: ElementoPotenziali[];
+ editingId: string | null;
+ updateData: (data: ElementoPotenziali[]) => void;
+ setEditingId: (id: string | null) => void;
+ getEditingItem: () => ElementoPotenziali | null;
+ addItem: (item: ElementoPotenziali) => void;
+ removeItem: (id: string) => void;
+};
+
+const PotenzialiContext = createContext(null);
+
+type PotenzialiProviderProps = {
+ children: React.ReactNode;
+ data: ElementoPotenziali[];
+};
+export const PotenzialiProvider = ({
+ children,
+ data: initial,
+}: PotenzialiProviderProps) => {
+ const [data, setData] = useState(initial);
+ const [editingId, setEditingId] = useState(null);
+
+ const getEditingItem = () => {
+ return data.find((item) => item.id === editingId) || null;
+ };
+ const addItem = (item: ElementoPotenziali) => {
+ setData((prev) => [...prev, item]);
+ };
+ const removeItem = (id: string) => {
+ setData((prev) => prev.filter((item) => item.id !== id));
+ };
+ return (
+
+ {children}
+
+ );
+};
+export const usePotenziali = () => {
+ const context = useContext(PotenzialiContext);
+ if (!context) {
+ throw new Error("usePotenziali must be used within a PotenzialiProvider");
+ }
+ return context;
+};