From ebf84d8544c66a36f18dfaa8941f80a034d85a6a Mon Sep 17 00:00:00 2001
From: mindongmindong <dcmin123@ajou.ac.kr>
Date: Mon, 13 Nov 2023 16:27:26 +0900
Subject: [PATCH] Make LinkPage.js

---
 react-whenMeet/src/components/Button.js  |  3 +-
 react-whenMeet/src/routes/HomeMake.js    |  2 +-
 react-whenMeet/src/routes/LinkPage.js    | 66 +++++++++++++++++++++---
 react-whenMeet/src/routes/MeetingInfo.js |  7 +--
 4 files changed, 67 insertions(+), 11 deletions(-)

diff --git a/react-whenMeet/src/components/Button.js b/react-whenMeet/src/components/Button.js
index c716d32..8ddf720 100644
--- a/react-whenMeet/src/components/Button.js
+++ b/react-whenMeet/src/components/Button.js
@@ -1,7 +1,8 @@
-function Button({type,text}){
+function Button({type,text,onClick}){
     return(
         <button
         type = {type}
+        onClick={onClick}
         >
             {text}
         </button>
diff --git a/react-whenMeet/src/routes/HomeMake.js b/react-whenMeet/src/routes/HomeMake.js
index 82c1352..e60f764 100644
--- a/react-whenMeet/src/routes/HomeMake.js
+++ b/react-whenMeet/src/routes/HomeMake.js
@@ -40,7 +40,7 @@ function HomeMake() {
                 />
                 <br />
                 <Input
-                    type="text"
+                    type="password"
                     value={password}
                     onChange={onPasswordChange}
                     placeholder="관리용 Password"
diff --git a/react-whenMeet/src/routes/LinkPage.js b/react-whenMeet/src/routes/LinkPage.js
index 30b71b7..022d63b 100644
--- a/react-whenMeet/src/routes/LinkPage.js
+++ b/react-whenMeet/src/routes/LinkPage.js
@@ -1,7 +1,61 @@
-function LinkPage(){
-    return(
-        <h1>LinkPage</h1>
-    );
-}
+import {useState, useEffect} from "react";
+import "../styles/HomeMake.css"
+import Input from "../components/Input";
+import Button from "../components/Button";
+import { useNavigate } from "react-router-dom";
 
-export default LinkPage;
\ No newline at end of file
+function LinkPage() {
+    const [link, setLink] = useState("");
+    const navigate = useNavigate();
+
+    const generateLink = () => {
+        const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
+        const linkLength = 10;
+
+        let randomLink = '';
+        for (let i = 0; i < linkLength; i++) {
+            const randomIndex = Math.floor(Math.random() * characters.length);
+            randomLink += characters[randomIndex];
+        }
+        setLink(randomLink);
+    };
+
+    const copyToClipboard = () => {
+        const textField = document.createElement('textarea');
+        textField.innerText = `localhost:3000/UserTimeInfo/${link}`;
+        document.body.appendChild(textField);
+        textField.select();
+        document.execCommand('copy');
+        document.body.removeChild(textField);
+        alert('링크가 복사되었습니다.');
+    };
+
+    const handleSubmit = (event)=>{
+        event.preventDefault();
+        navigate(`/UserTimeInfo/${link}`);
+    }
+    useEffect(()=>{
+        generateLink();
+    },[])
+        return (
+            <div className="center-container">
+                <form onSubmit={handleSubmit}>
+                    <Input
+                    value={`localhost:3000/UserTimeInfo/${link}`}
+                    />
+                    <Button
+                    type= "button"
+                    onClick={copyToClipboard}
+                    text= "링크 복사"
+                    />
+                    <Button
+                    type= "submit"
+                    text = "투표 페이지로 이동"
+                    />
+                </form>
+
+            </div>
+        );
+    }
+
+    export default LinkPage;
\ No newline at end of file
diff --git a/react-whenMeet/src/routes/MeetingInfo.js b/react-whenMeet/src/routes/MeetingInfo.js
index f5d9c9f..4d48d9e 100644
--- a/react-whenMeet/src/routes/MeetingInfo.js
+++ b/react-whenMeet/src/routes/MeetingInfo.js
@@ -11,7 +11,7 @@ function MeetingInfo() {
     const [endTime, setEndTime] = useState("");
     const navigate = useNavigate();
 
-    const handleOnClick = (event) => {
+    const handleOnChange = (event) => {
         setMeetingPurpose(event.target.value);
     }
     const handleCalendar = (value) => {
@@ -25,7 +25,7 @@ function MeetingInfo() {
     }
     const handleSubmit = (event) => {
         event.preventDefault();
-        if (meetingPurpose === "") {
+        if (meetingPurpose === "" || meetingPurpose === "선택") {
             return alert("목적을 선택하세요");;
         }
         else {
@@ -38,7 +38,8 @@ function MeetingInfo() {
                 <h1>약속 일정 만들기</h1>
                 <label>
                     목적: 
-                    <select value={meetingPurpose} onClick={handleOnClick}>
+                    <select value={meetingPurpose} onChange={handleOnChange}>
+                        <option>선택</option>
                         <option>식사</option>
                         <option>공부</option>
                         <option>놀기</option>
-- 
GitLab