From 0e9509ae429df2aabf8c3ff9770ee679e9d70311 Mon Sep 17 00:00:00 2001 From: Khalim Conn-Kowlessar Date: Wed, 12 Jul 2023 18:33:53 +0100 Subject: [PATCH] Added template for uploading csv modal --- src/app/components/portfolio/AddNew.tsx | 6 +- src/app/components/portfolio/Toolbar.tsx | 12 +- .../components/portfolio/UploadCsvModal.tsx | 156 ++++++++++++++++++ src/app/portfolio/[slug]/page.tsx | 4 +- 4 files changed, 174 insertions(+), 4 deletions(-) create mode 100644 src/app/components/portfolio/UploadCsvModal.tsx diff --git a/src/app/components/portfolio/AddNew.tsx b/src/app/components/portfolio/AddNew.tsx index f036824..e8f28ec 100644 --- a/src/app/components/portfolio/AddNew.tsx +++ b/src/app/components/portfolio/AddNew.tsx @@ -41,15 +41,19 @@ ListItem.displayName = "ListItem"; export default function AddNewDropDown({ portfolioId, + isUploadCsvOpen, + setIsUploadCsvOpen, }: { portfolioId: number; + isUploadCsvOpen: boolean; + setIsUploadCsvOpen: React.Dispatch>; }) { function handleCickAddUnit() { console.log("Add unit"); } function handleClickUploadCSV() { - console.log("Upload csv"); + setIsUploadCsvOpen(!isUploadCsvOpen); } return ( diff --git a/src/app/components/portfolio/Toolbar.tsx b/src/app/components/portfolio/Toolbar.tsx index b2575dc..936e794 100644 --- a/src/app/components/portfolio/Toolbar.tsx +++ b/src/app/components/portfolio/Toolbar.tsx @@ -8,6 +8,8 @@ import { } from "@/app/shadcn_components/ui/navigation-menu"; import AddNewDropDown from "./AddNew"; import { cva } from "class-variance-authority"; +import UploadCsvModal from "./UploadCsvModal"; +import { useState } from "react"; interface ToolbarProps { portfolioId: number; @@ -21,6 +23,9 @@ export function Toolbar({ portfolioId }: ToolbarProps) { function handleClickSettings() { console.log("Settings were clicked, implement me"); } + + const [modalIsOpen, setModalIsOpen] = useState(false); + return ( @@ -31,8 +36,13 @@ export function Toolbar({ portfolioId }: ToolbarProps) { Settings - + + ); } diff --git a/src/app/components/portfolio/UploadCsvModal.tsx b/src/app/components/portfolio/UploadCsvModal.tsx new file mode 100644 index 0000000..181783a --- /dev/null +++ b/src/app/components/portfolio/UploadCsvModal.tsx @@ -0,0 +1,156 @@ +import { Dialog, Transition } from "@headlessui/react"; +import { Fragment, useState } from "react"; + +import ModalSubmit from "@/app/components/home/ModalSubmit"; +import { PortfolioGoal } from "@/app/db/schema/portfolio"; + +// Mock Icon component +interface IconProps { + name: string; + selected: boolean; + onSelect: (name: string) => void; + className?: string; +} + +const hiddenInputArrows = + "[-moz-appearance:_textfield] [&::-webkit-inner-spin-button]:m-0 [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:m-0 [&::-webkit-outer-spin-button]:appearance-none"; + +export default function UploadCsvModal({ + isOpen = false, + setIsOpen, +}: { + isOpen?: boolean; + setIsOpen: (isOpen: boolean) => void; +}) { + const [portfolioName, setPortfolioName] = useState(""); + const [budget, setBudget] = useState(undefined); + const [selectedOutcome, setSelectedOutcome] = + useState("Nothing Specific"); + const [buttonDisabled, setButtonDisabled] = useState(true); + + function closeModal() { + setIsOpen(false); + } + + function handlePortfolioNameChange(e: React.ChangeEvent) { + if (e.target.value.length > 0) { + setButtonDisabled(false); + } else { + setButtonDisabled(true); + } + setPortfolioName(e.target.value); + } + + return ( + <> + + + +
+ + +
+
+ + + + Upload a CSV of properties + +
+
+ + handlePortfolioNameChange(e)} + className="p-2 border border-gray-200 rounded-md focus:outline-none bg-gray-100" + /> +
+
+ +
+ £ + setBudget(Number(e.target.value))} + onKeyDown={(e) => + (e.key === "e" || e.key === "E") && + e.preventDefault() + } + className={[ + "flex-1 p-2 bg-gray-100 focus:outline-none", + hiddenInputArrows, + ].join(" ")} + /> +
+
+
+ + Select Outcome: + +
"Fill me in"
+
+
+ +
+ + +
+
+
+
+
+
+
+ + ); +} diff --git a/src/app/portfolio/[slug]/page.tsx b/src/app/portfolio/[slug]/page.tsx index e462bf9..934ddcb 100644 --- a/src/app/portfolio/[slug]/page.tsx +++ b/src/app/portfolio/[slug]/page.tsx @@ -27,7 +27,7 @@ function EmptyPropertyState() {

- Click on Add new to start adding properties to your Portfolio + Hover over "Add new" to start adding properties to your Portfolio

@@ -156,7 +156,7 @@ function SummaryBox({ const energySavingsFormatted = formatKwh(energySavings); return ( -
+

Portfolio Summary