From 1d4a0546dd317e2c3e71d514dcef2d67285d618d Mon Sep 17 00:00:00 2001 From: Tristan Chin <23557893+maxijonson@users.noreply.github.com> Date: Fri, 19 May 2023 00:20:20 -0400 Subject: [PATCH] Add ability to save contexts and prompts (#17) --- packages/web/package.json | 1 + packages/web/src/components/ContextInput.tsx | 82 +++++++++-- packages/web/src/components/Message.tsx | 106 ++++++++----- packages/web/src/components/Prompt.tsx | 139 +++++++++++++----- .../src/components/SavePromptModalBody.tsx | 81 ++++++++++ .../src/components/SavedPromptsModalBody.tsx | 64 ++++++++ .../web/src/components/TippedActionIcon.tsx | 11 +- .../web/src/contexts/PersistenceContext.ts | 12 ++ .../providers/PersistenceProvider.tsx | 101 +++++++++++-- packages/web/src/entities/persistence.ts | 10 ++ .../web/src/entities/persistenceContext.ts | 8 + .../web/src/entities/persistencePrompt.ts | 8 + 12 files changed, 526 insertions(+), 97 deletions(-) create mode 100644 packages/web/src/components/SavePromptModalBody.tsx create mode 100644 packages/web/src/components/SavedPromptsModalBody.tsx create mode 100644 packages/web/src/entities/persistenceContext.ts create mode 100644 packages/web/src/entities/persistencePrompt.ts diff --git a/packages/web/package.json b/packages/web/package.json index 6f5ceb9..be7c5df 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -9,6 +9,7 @@ "lint": "eslint --ext .ts,.tsx src", "lint:strict": "npm run lint -- --max-warnings 0", "lint:fix": "npm run lint -- --fix", + "tscheck": "tsc --noEmit", "build": "npm run lint:strict && rimraf dist && vite build", "dev": "vite", "preview": "npm run build && vite preview" diff --git a/packages/web/src/components/ContextInput.tsx b/packages/web/src/components/ContextInput.tsx index b618b66..ccc8429 100644 --- a/packages/web/src/components/ContextInput.tsx +++ b/packages/web/src/components/ContextInput.tsx @@ -1,4 +1,10 @@ -import { Textarea } from "@mantine/core"; +import { Modal, ScrollArea, Stack, Textarea } from "@mantine/core"; +import { BiFolder, BiSave } from "react-icons/bi"; +import TippedActionIcon from "./TippedActionIcon"; +import { useDisclosure } from "@mantine/hooks"; +import SaveContextModalBody from "./SavePromptModalBody"; +import SavedContextsModalBody from "./SavedPromptsModalBody"; +import usePersistence from "../hooks/usePersistence"; interface ContextInputProps { value: string; @@ -6,14 +12,72 @@ interface ContextInputProps { } export default ({ value, onChange }: ContextInputProps) => { + const { + persistence: { contexts }, + } = usePersistence(); + const [ + showSaveContextModal, + { open: openSaveContextModal, close: closeSaveContextModal }, + ] = useDisclosure(false); + const [ + showSavedContextsModal, + { open: openSavedContextsModal, close: closeSavedContextsModal }, + ] = useDisclosure(false); + return ( -