From 8e9227cb1143c236683fec4276ee210d167ac841 Mon Sep 17 00:00:00 2001 From: MurakawaTakuya Date: Tue, 14 Jan 2025 17:05:28 +0900 Subject: [PATCH 1/8] =?UTF-8?q?=E3=83=95=E3=83=AD=E3=83=B3=E3=83=88?= =?UTF-8?q?=E3=82=A8=E3=83=B3=E3=83=89=E3=81=A7=E6=8A=95=E7=A8=BF=E3=81=AB?= =?UTF-8?q?=E6=96=87=E5=AD=97=E6=95=B0=E5=88=B6=E9=99=90=E3=82=92=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- functions/src/index.ts | 1 + src/Components/Account/LoggedInView.tsx | 9 ++++++++- src/Components/NameUpdate/NameUpdate.tsx | 9 +++++++++ src/Components/PWAButton/PWAButton.tsx | 2 +- src/Components/Progress/StepperBlock.tsx | 6 +++++- src/app/account/page.tsx | 2 +- 6 files changed, 25 insertions(+), 4 deletions(-) diff --git a/functions/src/index.ts b/functions/src/index.ts index 244aa83..93f16ed 100644 --- a/functions/src/index.ts +++ b/functions/src/index.ts @@ -160,6 +160,7 @@ export const beforecreated = beforeUserCreated( streak: 0, fcmToken: "", }); + logger.info(`User data created for ${userId}`); } catch (error) { logger.error(error); throw new HttpsError("internal", "Error creating user data."); diff --git a/src/Components/Account/LoggedInView.tsx b/src/Components/Account/LoggedInView.tsx index 08ab17a..5d8e8e4 100644 --- a/src/Components/Account/LoggedInView.tsx +++ b/src/Components/Account/LoggedInView.tsx @@ -49,7 +49,14 @@ export default function LoggedInView() { ) : ( <> - + ようこそ、{user.name}さん! diff --git a/src/Components/NameUpdate/NameUpdate.tsx b/src/Components/NameUpdate/NameUpdate.tsx index a4fc396..5365bff 100644 --- a/src/Components/NameUpdate/NameUpdate.tsx +++ b/src/Components/NameUpdate/NameUpdate.tsx @@ -24,6 +24,15 @@ export default function NameUpdate() { const handleNameUpdate = async (event: React.FormEvent) => { event.preventDefault(); + const maxNameLength = 30; + if (newName.length > maxNameLength) { + showSnackBar({ + message: `名前は${maxNameLength}文字以内で入力してください`, + type: "warning", + }); + return; + } + try { const response = await fetch( `${functionsEndpoint}/user/${user?.userId}`, diff --git a/src/Components/PWAButton/PWAButton.tsx b/src/Components/PWAButton/PWAButton.tsx index c067c0c..5aae4aa 100644 --- a/src/Components/PWAButton/PWAButton.tsx +++ b/src/Components/PWAButton/PWAButton.tsx @@ -76,7 +76,7 @@ export const PWAButton = ({ <> {isAleadyInstalled ? ( - アプリに追加済み! + 追加済み! ) : ( - + {userData?.name} diff --git a/src/app/account/page.tsx b/src/app/account/page.tsx index 1f177e4..fa6f937 100644 --- a/src/app/account/page.tsx +++ b/src/app/account/page.tsx @@ -83,7 +83,7 @@ export default function Account() { textAlign="center" fontWeight={600} > - 通知を受信・アプリに追加 + アプリに追加・通知を受信
From eb45e307fc461b8382cdf974d0d1dd586698abcd Mon Sep 17 00:00:00 2001 From: MurakawaTakuya Date: Wed, 15 Jan 2025 10:54:42 +0900 Subject: [PATCH 2/8] =?UTF-8?q?result=E3=81=AE=E7=B5=90=E6=9E=9C=E3=82=92u?= =?UTF-8?q?seEffect=E3=81=8B=E3=82=89useContext=E3=81=AB=E7=A7=BB=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- functions/tsconfig.json | 3 +- src/Components/DashBoard/DashBoard.tsx | 109 ++++++++++-------- .../DeleteGoalModal/DeleteGoalModal.tsx | 2 +- src/Components/GoalModal/CreateGoalModal.tsx | 8 +- src/app/discover/page.tsx | 5 +- src/app/mycontent/page.tsx | 23 ++-- src/utils/ResultContext.tsx | 54 +++++++++ 7 files changed, 140 insertions(+), 64 deletions(-) create mode 100644 src/utils/ResultContext.tsx diff --git a/functions/tsconfig.json b/functions/tsconfig.json index 7ba135d..d3d8876 100644 --- a/functions/tsconfig.json +++ b/functions/tsconfig.json @@ -13,5 +13,6 @@ "skipLibCheck": true }, "compileOnSave": true, - "include": ["src/*", "functions/src/**/*", "src/**/*.ts"] + "include": ["src/*", "functions/src/**/*", "src/**/*.ts"], + "exclude": ["node_modules"] } diff --git a/src/Components/DashBoard/DashBoard.tsx b/src/Components/DashBoard/DashBoard.tsx index fd6dab5..ed64a01 100644 --- a/src/Components/DashBoard/DashBoard.tsx +++ b/src/Components/DashBoard/DashBoard.tsx @@ -5,6 +5,7 @@ import { fetchResult, handleFetchResultError, } from "@/utils/API/Result/fetchResult"; +import { useResults } from "@/utils/ResultContext"; import { useUser } from "@/utils/UserContext"; import CircularProgress from "@mui/joy/CircularProgress"; import Typography from "@mui/joy/Typography"; @@ -30,23 +31,22 @@ export default function DashBoard({ pending?: boolean; orderBy?: "asc" | "desc"; }) { - const [successResults, setSuccessResults] = useState( - [] - ); - const [failedResults, setFailedResults] = useState( - [] - ); - const [pendingResults, setPendingResults] = useState( - [] - ); + const { + successResults, + setSuccessResults, + failedResults, + setFailedResults, + pendingResults, + setPendingResults, + } = useResults(); const [noResult, setNoResult] = useState(false); const [isLoading, setIsLoading] = useState(true); const [reachedBottom, setReachedBottom] = useState(false); const [isLoadingMore, setIsLoadingMore] = useState(false); const bottomRef = useRef(null); const isAlreadyFetching = useRef(false); - const offset = useRef(0); - const noMore = useRef(false); + const [noMorePending, setNoMorePending] = useState(false); + const [noMoreFinished, setNoMoreFinished] = useState(false); const [lastPostDate, setLastPostDate] = useState(null); // 投稿が0の場合はnull @@ -55,38 +55,9 @@ export default function DashBoard({ const limit = 10; // limitずつ表示 - useEffect(() => { - setTimeout(() => { - const observer = new IntersectionObserver( - (entries) => { - if (entries[0].isIntersecting && !isLoading && !noMore.current) { - setReachedBottom(true); - fetchData(); - } - }, - { threshold: 1 } - ); - - if (bottomRef.current) { - observer.observe(bottomRef.current); - } - - return () => { - if (bottomRef.current) { - observer.disconnect(); - } - }; - }, 1000); - }, [isLoading, noMore.current, bottomRef.current, bottomRef]); - - useEffect(() => { - offset.current = - successResults.length + failedResults.length + pendingResults.length; - }, [successResults, failedResults, pendingResults]); - const fetchData = () => { - if (noMore.current) { - return; + if ((pending && noMorePending) || (success && failed && noMoreFinished)) { + return; // TODO: うまく動作していない } if (isAlreadyFetching.current) { return; @@ -96,12 +67,15 @@ export default function DashBoard({ if (reachedBottom && !isLoadingMore) { setIsLoadingMore(true); } + const offset = pending + ? pendingResults.length + : successResults.length + failedResults.length; fetchResult({ userId, success, failed, pending, - offset: offset.current, + offset, limit, }) .then((data) => { @@ -128,13 +102,16 @@ export default function DashBoard({ return [...prev, ...newResults]; }); + if (pending && data.pendingResults.length < limit) { + setNoMorePending(true); + } + if ( - data.successResults.length + - data.failedResults.length + - data.pendingResults.length < - limit + success && + failed && + data.successResults.length + data.failedResults.length < limit ) { - noMore.current = true; + setNoMoreFinished(true); } setIsLoading(false); @@ -153,6 +130,36 @@ export default function DashBoard({ }); }; + // 画面下に到達したことを検知 + useEffect(() => { + setTimeout(() => { + const observer = new IntersectionObserver( + (entries) => { + if ( + entries[0].isIntersecting && + !isLoading && + ((pending && !noMorePending) || + (success && failed && !noMoreFinished)) + ) { + setReachedBottom(true); + fetchData(); + } + }, + { threshold: 1 } + ); + + if (bottomRef.current) { + observer.observe(bottomRef.current); + } + + return () => { + if (bottomRef.current) { + observer.disconnect(); + } + }; + }, 1000); + }, [isLoading, noMorePending, noMoreFinished, bottomRef.current, bottomRef]); + useEffect(() => { rerenderDashBoard = fetchData; if (userId) { @@ -197,6 +204,7 @@ export default function DashBoard({ return ( <> {isLoading ? ( + // ロード中 ) : noResult ? ( + // 目標や投稿が無い場合
- {!noMore.current && + {/* 下に到達した時に続きを表示 */} + {((pending && !noMorePending) || + (success && failed && !noMoreFinished)) && (reachedBottom ? (
{ @@ -56,7 +56,7 @@ export default function CreateGoalModal({ localDate.setDate(localDate.getDate() + 1); // 明日にする setDeadline(localDate.toISOString().slice(0, 16)); } else { - resetDeadline(); + setDeadline(resetDeadline()); } }, [defaultText, defaultDeadline]); @@ -78,8 +78,8 @@ export default function CreateGoalModal({ }); triggerDashBoardRerender(); - setText(""); - resetDeadline(); + setText(defaultText || ""); + setDeadline(defaultDeadline || resetDeadline()); setOpen(false); } catch (error: unknown) { console.error("Error creating goal:", error); diff --git a/src/app/discover/page.tsx b/src/app/discover/page.tsx index 2663059..1a219c6 100644 --- a/src/app/discover/page.tsx +++ b/src/app/discover/page.tsx @@ -3,6 +3,7 @@ import DashBoard, { triggerDashBoardRerender, } from "@/Components/DashBoard/DashBoard"; import GoalModalButton from "@/Components/GoalModal/GoalModalButton"; +import { ResultProvider } from "@/utils/ResultContext"; import { useEffect } from "react"; export default function Discover() { @@ -12,7 +13,9 @@ export default function Discover() { return ( <> - + + + ); diff --git a/src/app/mycontent/page.tsx b/src/app/mycontent/page.tsx index 007afa1..b50ed1d 100644 --- a/src/app/mycontent/page.tsx +++ b/src/app/mycontent/page.tsx @@ -1,6 +1,7 @@ "use client"; import DashBoard from "@/Components/DashBoard/DashBoard"; import GoalModalButton from "@/Components/GoalModal/GoalModalButton"; +import { ResultProvider } from "@/utils/ResultContext"; import { useUser } from "@/utils/UserContext"; import Typography from "@mui/joy/Typography"; import { styled } from "@mui/material/styles"; @@ -62,15 +63,21 @@ export default function MyContent() { メールに届いた認証リンクを確認してください。 ) : value === "pending" ? ( - + + + ) : ( - + value === "finished" && ( + + + + ) )} diff --git a/src/utils/ResultContext.tsx b/src/utils/ResultContext.tsx new file mode 100644 index 0000000..787f6fd --- /dev/null +++ b/src/utils/ResultContext.tsx @@ -0,0 +1,54 @@ +import { GoalWithIdAndUserData } from "@/types/types"; +import React, { createContext, ReactNode, useContext, useState } from "react"; + +interface ResultContextType { + successResults: GoalWithIdAndUserData[]; + setSuccessResults: React.Dispatch< + React.SetStateAction + >; + failedResults: GoalWithIdAndUserData[]; + setFailedResults: React.Dispatch< + React.SetStateAction + >; + pendingResults: GoalWithIdAndUserData[]; + setPendingResults: React.Dispatch< + React.SetStateAction + >; +} + +const ResultContext = createContext(undefined); + +export const ResultProvider = ({ children }: { children: ReactNode }) => { + const [successResults, setSuccessResults] = useState( + [] + ); + const [failedResults, setFailedResults] = useState( + [] + ); + const [pendingResults, setPendingResults] = useState( + [] + ); + + return ( + + {children} + + ); +}; + +export const useResults = () => { + const context = useContext(ResultContext); + if (!context) { + throw new Error("useResults must be used within a ResultProvider"); + } + return context; +}; From e8a6a0183e778ece01ab66116c7de6faf5d3e079 Mon Sep 17 00:00:00 2001 From: MurakawaTakuya Date: Thu, 16 Jan 2025 17:23:40 +0900 Subject: [PATCH 3/8] =?UTF-8?q?=E7=9B=AE=E6=A8=99=E3=81=AE=E7=8A=B6?= =?UTF-8?q?=E6=85=8B=E3=82=92=E6=9B=B4=E6=96=B0=E3=81=97=E3=81=9F=E3=82=89?= =?UTF-8?q?=E8=A1=A8=E7=A4=BA=E3=82=92=E8=87=AA=E5=8B=95=E3=81=A7=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .eslintrc.json | 5 +- functions/src/index.ts | 24 ++--- public/img/blur.webp | Bin 64832 -> 64024 bytes .../CreatePostModal.tsx} | 21 ++-- src/Components/DashBoard/DashBoard.tsx | 40 ++++---- .../DeleteGoalModal/DeleteGoalModal.tsx | 5 +- .../DeletePostModal/DeletePostModal.tsx | 5 +- src/Components/GoalModal/CreateGoalModal.tsx | 15 ++- src/Components/Progress/PendingStep.tsx | 9 +- src/app/discover/page.tsx | 57 ++++++++--- src/app/layout.tsx | 5 +- src/app/mycontent/page.tsx | 24 ++--- src/app/page.tsx | 40 +++++--- src/utils/Auth/signUpWithMail.tsx | 3 +- src/utils/ResultContext.tsx | 96 +++++++++++++++++- 15 files changed, 253 insertions(+), 96 deletions(-) rename src/Components/{PostModal/PostModal.tsx => CreatePostModal/CreatePostModal.tsx} (93%) diff --git a/.eslintrc.json b/.eslintrc.json index c4517e5..a7f9b32 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -30,5 +30,8 @@ "sourceType": "module" }, "plugins": ["react", "eslint-plugin-unused-imports"], - "rules": { "unused-imports/no-unused-imports": "error" } + "rules": { + "unused-imports/no-unused-imports": "error", + "@next/next/no-img-element": "off" + } } diff --git a/functions/src/index.ts b/functions/src/index.ts index 93f16ed..0440987 100644 --- a/functions/src/index.ts +++ b/functions/src/index.ts @@ -64,15 +64,15 @@ if (process.env.NODE_ENV === "production") { }); } -// 10分間で最大100回に制限 +// 10分間で最大200回に制限 app.use( rateLimit({ windowMs: 10 * 60 * 1000, - max: 100, - keyGenerator: (req) => { - const key = req.headers["x-forwarded-for"] || req.ip || "unknown"; - return Array.isArray(key) ? key[0] : key; - }, + max: 200, + // keyGenerator: (req) => { + // const key = req.headers["x-forwarded-for"] || req.ip || "unknown"; + // return Array.isArray(key) ? key[0] : key; + // }, handler: (req, res) => { return res .status(429) @@ -80,15 +80,15 @@ app.use( }, }) ); -// 1時間で最大300回に制限 +// 1時間で最大500回に制限 app.use( rateLimit({ windowMs: 60 * 60 * 1000, - max: 300, - keyGenerator: (req) => { - const key = req.headers["x-forwarded-for"] || req.ip || "unknown"; - return Array.isArray(key) ? key[0] : key; - }, + max: 500, + // keyGenerator: (req) => { + // const key = req.headers["x-forwarded-for"] || req.ip || "unknown"; + // return Array.isArray(key) ? key[0] : key; + // }, handler: (req, res) => { return res .status(429) diff --git a/public/img/blur.webp b/public/img/blur.webp index 776c4c777b59caee515996c568983f2a33ed8079..ebfcd9dfad346f5d401de4eb77d171c71efefa89 100644 GIT binary patch literal 64024 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

0MXzDVNBA!N067ylC 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 literal 64832 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 diff --git a/src/Components/PostModal/PostModal.tsx b/src/Components/CreatePostModal/CreatePostModal.tsx similarity index 93% rename from src/Components/PostModal/PostModal.tsx rename to src/Components/CreatePostModal/CreatePostModal.tsx index b79ee8c..e491328 100644 --- a/src/Components/PostModal/PostModal.tsx +++ b/src/Components/CreatePostModal/CreatePostModal.tsx @@ -2,6 +2,7 @@ import { showSnackBar } from "@/Components/SnackBar/SnackBar"; import { PostWithGoalId } from "@/types/types"; import { createPost, handleCreatePostError } from "@/utils/API/Post/createPost"; +import { useAddPost } from "@/utils/ResultContext"; import { removeImageMetadata, uploadImage } from "@/utils/Uploader"; import { useUser } from "@/utils/UserContext"; import { Add } from "@mui/icons-material"; @@ -24,13 +25,7 @@ import Typography from "@mui/material/Typography"; import { styled } from "@mui/material/styles"; import React, { ChangeEvent, useState } from "react"; -export default function PostModal({ - goalId, - setIsSubmitted, -}: { - goalId: string; - setIsSubmitted: React.Dispatch>; -}) { +export default function CreatePostModal({ goalId }: { goalId: string }) { const [open, setOpen] = useState(false); const [text, setText] = useState(""); const [image, setImage] = useState(null); @@ -38,6 +33,7 @@ export default function PostModal({ const [fileName, setFileName] = useState(""); const [loading, setLoading] = useState(false); const { user } = useUser(); + const addPost = useAddPost(); const handleTextChange = (event: ChangeEvent) => { setText(event.target.value); @@ -48,7 +44,7 @@ export default function PostModal({ if (!selectedFile) { showSnackBar({ - message: "ファイルが選択されていません", + message: "画像が選択されていません", type: "warning", }); return; @@ -80,7 +76,7 @@ export default function PostModal({ const handleUpload = async () => { if (!image) { showSnackBar({ - message: "ファイルが選択されていません", + message: "画像が選択されていません", type: "warning", }); return; @@ -110,7 +106,12 @@ export default function PostModal({ message: "投稿しました", type: "success", }); - setIsSubmitted(true); + + const postDataWithStringDate = { + ...postData, + submittedAt: (postData.submittedAt as Date).toISOString(), + }; + addPost(goalId, postDataWithStringDate); setImage(null); setText(""); diff --git a/src/Components/DashBoard/DashBoard.tsx b/src/Components/DashBoard/DashBoard.tsx index ed64a01..d976528 100644 --- a/src/Components/DashBoard/DashBoard.tsx +++ b/src/Components/DashBoard/DashBoard.tsx @@ -15,9 +15,6 @@ import CenterIn from "../Animation/CenterIn"; import Progress from "../Progress/Progress"; import styles from "./DashBoard.module.scss"; -// eslint-disable-next-line @typescript-eslint/no-empty-function -let rerenderDashBoard: () => void = () => {}; - export default function DashBoard({ userId = "", success = true, @@ -38,6 +35,12 @@ export default function DashBoard({ setFailedResults, pendingResults, setPendingResults, + lastPostDate, + setLastPostDate, + noMorePending, + setNoMorePending, + noMoreFinished, + setNoMoreFinished, } = useResults(); const [noResult, setNoResult] = useState(false); const [isLoading, setIsLoading] = useState(true); @@ -45,10 +48,6 @@ export default function DashBoard({ const [isLoadingMore, setIsLoadingMore] = useState(false); const bottomRef = useRef(null); const isAlreadyFetching = useRef(false); - const [noMorePending, setNoMorePending] = useState(false); - const [noMoreFinished, setNoMoreFinished] = useState(false); - - const [lastPostDate, setLastPostDate] = useState(null); // 投稿が0の場合はnull const { user } = useUser(); const myUserId = user?.userId; @@ -56,20 +55,20 @@ export default function DashBoard({ const limit = 10; // limitずつ表示 const fetchData = () => { - if ((pending && noMorePending) || (success && failed && noMoreFinished)) { - return; // TODO: うまく動作していない - } + // すでにfetchしている場合はreturn if (isAlreadyFetching.current) { return; } else { isAlreadyFetching.current = true; } + // 画面下に到達して既にロード中の場合はreturn if (reachedBottom && !isLoadingMore) { setIsLoadingMore(true); } const offset = pending ? pendingResults.length : successResults.length + failedResults.length; + // TODO: offsetを実際に取得しにいった数だけでもいいかも fetchResult({ userId, success, @@ -161,11 +160,15 @@ export default function DashBoard({ }, [isLoading, noMorePending, noMoreFinished, bottomRef.current, bottomRef]); useEffect(() => { - rerenderDashBoard = fetchData; - if (userId) { + if ( + (pending && pendingResults.length === 0) || + (success && successResults.length === 0) + ) { fetchData(); + } else { + setIsLoading(false); } - }, [userId, success, failed, pending]); + }, [userId]); useEffect(() => { setNoResult( @@ -180,6 +183,13 @@ export default function DashBoard({ return; } + if ( + (success && successResults.length > 0) || + (pending && pendingResults.length > 0) + ) { + return; + } + if (success && myUserId) { // 最後に成功した目標を取得 fetchResult({ @@ -266,7 +276,3 @@ export default function DashBoard({ ); } - -export function triggerDashBoardRerender() { - rerenderDashBoard(); -} diff --git a/src/Components/DeleteGoalModal/DeleteGoalModal.tsx b/src/Components/DeleteGoalModal/DeleteGoalModal.tsx index 8d2eb30..f5bb2e1 100644 --- a/src/Components/DeleteGoalModal/DeleteGoalModal.tsx +++ b/src/Components/DeleteGoalModal/DeleteGoalModal.tsx @@ -1,6 +1,6 @@ "use client"; import { appCheckToken, functionsEndpoint } from "@/app/firebase"; -import { triggerDashBoardRerender } from "@/Components/DashBoard/DashBoard"; +import { useDeleteGoal } from "@/utils/ResultContext"; import DeleteOutlineIcon from "@mui/icons-material/DeleteOutline"; import { DialogContent, DialogTitle, Modal, ModalDialog } from "@mui/joy"; import JoyButton from "@mui/joy/Button"; @@ -10,6 +10,7 @@ import { useState } from "react"; import { showSnackBar } from "../SnackBar/SnackBar"; export default function DeleteGoalModal({ goalId }: { goalId: string }) { + const deleleGoal = useDeleteGoal(); const [open, setOpen] = useState(false); const handleDeleteGoal = async () => { @@ -32,7 +33,7 @@ export default function DeleteGoalModal({ goalId }: { goalId: string }) { message: "目標を削除しました", type: "success", }); - triggerDashBoardRerender(); + deleleGoal(goalId); } }; diff --git a/src/Components/DeletePostModal/DeletePostModal.tsx b/src/Components/DeletePostModal/DeletePostModal.tsx index 9c708aa..72cc4ae 100644 --- a/src/Components/DeletePostModal/DeletePostModal.tsx +++ b/src/Components/DeletePostModal/DeletePostModal.tsx @@ -1,12 +1,12 @@ "use client"; import { appCheckToken, functionsEndpoint } from "@/app/firebase"; +import { useDeletePost } from "@/utils/ResultContext"; import DeleteOutlineIcon from "@mui/icons-material/DeleteOutline"; import { DialogContent, DialogTitle, Modal, ModalDialog } from "@mui/joy"; import JoyButton from "@mui/joy/Button"; import Button from "@mui/material/Button"; import Stack from "@mui/material/Stack"; import { useState } from "react"; -import { triggerDashBoardRerender } from "../DashBoard/DashBoard"; import { showSnackBar } from "../SnackBar/SnackBar"; export default function DeletePostModal({ @@ -16,6 +16,7 @@ export default function DeletePostModal({ goalId: string; deadline: string; }) { + const deletePost = useDeletePost(); const [open, setOpen] = useState(false); const handleDeletePost = async () => { @@ -38,7 +39,7 @@ export default function DeletePostModal({ message: "目標を削除しました", type: "success", }); - triggerDashBoardRerender(); + deletePost(goalId); } }; diff --git a/src/Components/GoalModal/CreateGoalModal.tsx b/src/Components/GoalModal/CreateGoalModal.tsx index 2117723..6b88cd1 100644 --- a/src/Components/GoalModal/CreateGoalModal.tsx +++ b/src/Components/GoalModal/CreateGoalModal.tsx @@ -2,6 +2,7 @@ import { showSnackBar } from "@/Components/SnackBar/SnackBar"; import { Goal } from "@/types/types"; import { createGoal, handleCreateGoalError } from "@/utils/API/Goal/createGoal"; +import { useAddGoal } from "@/utils/ResultContext"; import { useUser } from "@/utils/UserContext"; import AddIcon from "@mui/icons-material/Add"; import { @@ -15,7 +16,6 @@ import { Typography, } from "@mui/joy"; import React, { useEffect, useState } from "react"; -import { triggerDashBoardRerender } from "../DashBoard/DashBoard"; export default function CreateGoalModal({ open, @@ -32,6 +32,7 @@ export default function CreateGoalModal({ const [deadline, setDeadline] = useState(""); const { user } = useUser(); + const addResult = useAddGoal(); const resetDeadline = () => { // 次の日の23時に設定 @@ -70,13 +71,21 @@ export default function CreateGoalModal({ }; try { - await createGoal(postData); + const data = await createGoal(postData); showSnackBar({ message: "目標を作成しました", type: "success", }); - triggerDashBoardRerender(); + + if (user) { + addResult({ + ...postData, + goalId: data.goalId, + userData: user, + deadline: deadline, + }); + } setText(defaultText || ""); setDeadline(defaultDeadline || resetDeadline()); diff --git a/src/Components/Progress/PendingStep.tsx b/src/Components/Progress/PendingStep.tsx index 89460cb..8a08b68 100644 --- a/src/Components/Progress/PendingStep.tsx +++ b/src/Components/Progress/PendingStep.tsx @@ -2,9 +2,8 @@ import { GoalWithIdAndUserData, User } from "@/types/types"; import AppRegistrationRoundedIcon from "@mui/icons-material/AppRegistrationRounded"; import Step from "@mui/joy/Step"; import StepIndicator from "@mui/joy/StepIndicator"; -import { useState } from "react"; +import CreatePostModal from "../CreatePostModal/CreatePostModal"; import CopyGoalAfterPostButton from "../GoalModal/CopyGoalAfterPostButton"; -import PostModal from "../PostModal/PostModal"; import { GoalCard } from "./GoalCard"; import { StepperBlock } from "./StepperBlock"; @@ -15,8 +14,6 @@ export const PendingStep = ({ result: GoalWithIdAndUserData; user: User; }) => { - const [isSubmitted, setIsSubmitted] = useState(false); - return ( - {isSubmitted ? ( + {result.post ? ( // 投稿したら同じ目標で明日にも作成できるボタンを表示する + ) )} diff --git a/src/app/discover/page.tsx b/src/app/discover/page.tsx index 1a219c6..b17478e 100644 --- a/src/app/discover/page.tsx +++ b/src/app/discover/page.tsx @@ -1,22 +1,55 @@ "use client"; -import DashBoard, { - triggerDashBoardRerender, -} from "@/Components/DashBoard/DashBoard"; +import DashBoard from "@/Components/DashBoard/DashBoard"; import GoalModalButton from "@/Components/GoalModal/GoalModalButton"; import { ResultProvider } from "@/utils/ResultContext"; -import { useEffect } from "react"; +import ToggleButton from "@mui/material/ToggleButton"; +import ToggleButtonGroup from "@mui/material/ToggleButtonGroup"; +import { useState } from "react"; +import styled from "styled-components"; + +const CenteredToggleButtonGroup = styled(ToggleButtonGroup)({ + display: "flex", + justifyContent: "center", + margin: "30px 0 5px", +}); export default function Discover() { - useEffect(() => { - triggerDashBoardRerender(); - }, []); + const [value, setValue] = useState<"finished" | "pending">("finished"); return ( - <> - - - + +

+ + {value === "pending" ? ( + + ) : ( + + )} + - + ); } diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 8443975..96e77b3 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -7,7 +7,8 @@ import { UserProvider } from "@/utils/UserContext"; import type { Metadata } from "next"; import "./firebase"; -const description = "TODO REALはTODOリストとBeRealを組み合わせたアプリです。"; +const description = + "TODO REALは、TODOリストとBeRealを組み合わせたアプリです。友達とTODOリストを共有し、目標達成をサポートし合うことで、達成感や楽しさを共有できます。完了したTODOの写真投稿や競争機能で、目標達成がもっと楽しくなります!"; export const rootURL = "https://todo-real-c28fa.web.app/"; export const metadata: Metadata = { @@ -29,7 +30,7 @@ export default function RootLayout({ "@context": "https://schema.org", "@type": "WebSite", name: "TODO REAL", - url: "https://todo-real-c28fa.web.app/", + url: rootURL, }; return ( diff --git a/src/app/mycontent/page.tsx b/src/app/mycontent/page.tsx index b50ed1d..fb5a1c1 100644 --- a/src/app/mycontent/page.tsx +++ b/src/app/mycontent/page.tsx @@ -20,7 +20,7 @@ export default function MyContent() { const [value, setValue] = useState<"pending" | "finished">("pending"); return ( - <> +
) : value === "pending" ? ( - - - + ) : ( value === "finished" && ( - - - + ) )} - + ); } diff --git a/src/app/page.tsx b/src/app/page.tsx index 298af16..97422b9 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -36,7 +36,11 @@ export default function Top() { TODO REAL
- + アプリ画面
@@ -46,7 +50,7 @@ export default function Top() { やりたいことがつい後回しになってしまったり、毎日続けたいと思っていた習慣が途切れてしまったり…そんな経験はありませんか?
TODO REALはあなたの目標達成・継続を手助けします! - + TODOリストイメージ画像 TODO REALでは目標を完了したら写真を投稿することができ、 SNS感覚でTODOリストを使ったり友達と共有できます! @@ -67,7 +71,7 @@ export default function Top() { 完了したTODOリストは友達に公開されます。友達に共有することで、達成感を共有できます。 - + 完了したら共有される
@@ -79,7 +83,7 @@ export default function Top() { 失敗してもペナルティの無いTODOリストとは異なり、期限内に完了しなかったTODOリストも公開されます。なんて恥ずかしい。 - + 失敗しても共有される
@@ -91,7 +95,7 @@ export default function Top() { リアクション機能を使うことで友達と応援し合ったり驚きや達成感を共有することができます。リアクションは成功した目標と失敗した目標で異なります。 - + リアクション機能
@@ -104,7 +108,7 @@ export default function Top() { 10分前になると通知を送信します。通知を受け取ることで、TODOリストの達成を手助けします。(iOS 16.3以前の端末や通知に対応していない端末では使用できません。) - + 10分前に通知を送信 @@ -118,7 +122,11 @@ export default function Top() {
また、達成率や達成回数で友達と競うこともできます! - + 毎日継続 @@ -132,7 +140,7 @@ export default function Top() {
完了投稿をすると投稿ボタンが変化して同じ目標をワンクリックで複製できるように! - + 簡単に目標を複製 @@ -144,7 +152,7 @@ export default function Top() { 友達の投稿を表示するには、あなたの完了した目標をシェアしましょう。あなたが最後に投稿した時間より後の目標の画像はモザイクがかかっています。(ゲストログインの場合は特別に表示されます) - + 投稿するまでモザイク @@ -171,7 +179,11 @@ export default function Top() { 画面右下の+ボタンから目標を作成できます。 - + 作成 2. 投稿 @@ -179,12 +191,16 @@ export default function Top() { 目標を完了したら写真をアップロードして共有しましょう! - + アップロード アップロードしたら自動で友達に公開されます! - + 公開 diff --git a/src/utils/Auth/signUpWithMail.tsx b/src/utils/Auth/signUpWithMail.tsx index e739f6e..87d97f9 100644 --- a/src/utils/Auth/signUpWithMail.tsx +++ b/src/utils/Auth/signUpWithMail.tsx @@ -27,9 +27,8 @@ export const signUpWithMail = async ( // Firebase AuthのdisplayNameを設定 try { await updateProfile(user, { displayName: name }); - console.log("ユーザー名を設定しました:", name); } catch (profileUpdateError) { - console.error("プロファイル更新に失敗しました:", profileUpdateError); + console.error("Error updating user name:", profileUpdateError); } // displayNameをFirestoreに登録 diff --git a/src/utils/ResultContext.tsx b/src/utils/ResultContext.tsx index 787f6fd..fbc241c 100644 --- a/src/utils/ResultContext.tsx +++ b/src/utils/ResultContext.tsx @@ -1,4 +1,5 @@ -import { GoalWithIdAndUserData } from "@/types/types"; +"use client"; +import { GoalWithIdAndUserData, Post } from "@/types/types"; import React, { createContext, ReactNode, useContext, useState } from "react"; interface ResultContextType { @@ -14,6 +15,12 @@ interface ResultContextType { setPendingResults: React.Dispatch< React.SetStateAction >; + lastPostDate: string | null; + setLastPostDate: React.Dispatch; + noMorePending: boolean; + setNoMorePending: React.Dispatch; + noMoreFinished: boolean; + setNoMoreFinished: React.Dispatch; } const ResultContext = createContext(undefined); @@ -28,6 +35,10 @@ export const ResultProvider = ({ children }: { children: ReactNode }) => { const [pendingResults, setPendingResults] = useState( [] ); + const [lastPostDate, setLastPostDate] = useState(null); // 投稿が0の場合はnull + const [noMorePending, setNoMorePending] = useState(false); + const [noMoreFinished, setNoMoreFinished] = useState(false); + // TODO: offsetも管理 return ( { setFailedResults, pendingResults, setPendingResults, + lastPostDate, + setLastPostDate, + noMorePending, + setNoMorePending, + noMoreFinished, + setNoMoreFinished, }} > {children} @@ -52,3 +69,80 @@ export const useResults = () => { } return context; }; + +// 目標作成時 +// pendingに追加 +export const useAddGoal = () => { + const { setPendingResults } = useResults(); + return (result: GoalWithIdAndUserData) => { + setPendingResults((prev) => [...prev, result]); + }; +}; + +// 目標削除時 +// pendingとsuccessから削除 +export const useDeleteGoal = () => { + const { setPendingResults, setSuccessResults } = useResults(); + return (goalId: string) => { + setPendingResults((prev) => + prev.filter((result) => result.goalId !== goalId) + ); + setSuccessResults((prev) => + prev.filter((result) => result.goalId !== goalId) + ); + }; +}; + +// 投稿作成時 +// pendingから削除してsuccessに追加 +export const useAddPost = () => { + const { setPendingResults, setSuccessResults } = useResults(); + return ( + goalId: string, + post: Omit & { submittedAt: string } + ) => { + let targetResult: GoalWithIdAndUserData | null = null; + setPendingResults((prev) => + prev.filter((pendingResult) => { + if (pendingResult.goalId === goalId) { + targetResult = pendingResult; // 投稿した目標を取得 + pendingResult.post = post; // 投稿データをつけると + } + return true; + }) + ); + setSuccessResults((prev) => { + if (targetResult) { + // 投稿した目標に対してpostデータを追加 + targetResult.post = post; + return [ + ...prev.filter((result) => result.goalId !== goalId), + targetResult, + ]; + } + return prev; + }); + }; +}; + +// 投稿削除時 +// successのpostの項目をundefinedにして、successからpendingに移動する +export const useDeletePost = () => { + const { setPendingResults, setSuccessResults } = useResults(); + return (goalId: string) => { + setSuccessResults((prev) => { + const updatedResults = prev.filter((result) => result.goalId !== goalId); + const movedResult = prev.find((result) => result.goalId === goalId); + if (movedResult) { + movedResult.post = undefined; + setPendingResults((pendingPrev) => [ + ...pendingPrev.filter((result) => result.goalId !== goalId), + movedResult, + ]); + } + return updatedResults; + }); + }; +}; + +// TODO: implement updateResult From 4198f0d6c9dfd90a47109848e6cad4334726d3ab Mon Sep 17 00:00:00 2001 From: MurakawaTakuya Date: Thu, 16 Jan 2025 20:36:29 +0900 Subject: [PATCH 4/8] =?UTF-8?q?result=20API=E3=81=AE=E3=83=87=E3=83=BC?= =?UTF-8?q?=E3=82=BF=E3=82=92=E8=BF=94=E3=81=99=E6=96=B9=E6=B3=95=E3=82=92?= =?UTF-8?q?=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Documents/API.md | 2 +- functions/src/routers/resultRouter.ts | 14 ++++++++++++++ src/Components/DashBoard/DashBoard.tsx | 19 +++++++++++++------ src/utils/ResultContext.tsx | 11 ++++++++++- 4 files changed, 38 insertions(+), 8 deletions(-) diff --git a/Documents/API.md b/Documents/API.md index 9bd3463..9db983f 100644 --- a/Documents/API.md +++ b/Documents/API.md @@ -201,7 +201,7 @@ Use Create Post API to update post. - URL: /result/:?userId - Empty userId will return all results. - Parameters - - limit?: number - The maximum number of results to return. (Default is 50) + - limit?: number - The maximum number of results to return. (Default is 50, successはlimit分取得し、そこに追加でfailedを取得する形になる) - offset?: number - The number of results to skip before starting to collect the result set. - onlyPending?: boolean - If true, only pending goals will be returned. (Default is false) - onlyCompleted?: boolean - If true, only completed or failed goals will be returned. (Default is false) diff --git a/functions/src/routers/resultRouter.ts b/functions/src/routers/resultRouter.ts index ef90b6c..cd25fd8 100644 --- a/functions/src/routers/resultRouter.ts +++ b/functions/src/routers/resultRouter.ts @@ -41,6 +41,7 @@ const getResults = async ( const userList = new Map(); // ユーザー情報のキャッシュ + // これからの目標のみ if (onlyPending || (!onlyPending && !onlyFinished)) { const pendingSnapshot = await baseQuery .where("post", "==", null) @@ -52,15 +53,26 @@ const getResults = async ( pendingResults.push(...pendingGoals); } + // 完了・失敗した目標のみ if (onlyFinished || (!onlyPending && !onlyFinished)) { const completedSnapshot = await baseQuery .where("post", "!=", null) .orderBy("post.submittedAt", "desc") // 新しいものが先 .get(); + // completedSnapshotをsubmittedAtでソートして最も昔の日時を取得 + const earliestSubmittedAt = completedSnapshot.docs + .map((doc) => doc.data().post.submittedAt) + .sort((a, b) => a.toDate().getTime() - b.toDate().getTime())[0]; + + if (!earliestSubmittedAt) { + return; + } + const failedSnapshot = await baseQuery .where("post", "==", null) .where("deadline", "<=", now) + .where("deadline", ">", earliestSubmittedAt) .orderBy("deadline", "desc") // 新しいものが先 .get(); @@ -81,6 +93,7 @@ const getResults = async ( }; }; +// ユーザーデータを組み込む const processGoals = async ( docs: FirebaseFirestore.QueryDocumentSnapshot[], userList: Map @@ -128,6 +141,7 @@ const processGoals = async ( }; // GET: 全ての目標または特定のユーザーの目標に対する結果を取得 +// onlyFinishedの場合のlimitはsuccessをlimitの数返してその期間内のfailedを追加で返す router.get("/:userId?", async (req: Request, res: Response) => { const userId = req.params.userId; diff --git a/src/Components/DashBoard/DashBoard.tsx b/src/Components/DashBoard/DashBoard.tsx index d976528..6cbef3b 100644 --- a/src/Components/DashBoard/DashBoard.tsx +++ b/src/Components/DashBoard/DashBoard.tsx @@ -41,6 +41,10 @@ export default function DashBoard({ setNoMorePending, noMoreFinished, setNoMoreFinished, + pendingOffset, + setPendingOffset, + finishedOffset, + setFinishedOffset, } = useResults(); const [noResult, setNoResult] = useState(false); const [isLoading, setIsLoading] = useState(true); @@ -65,16 +69,13 @@ export default function DashBoard({ if (reachedBottom && !isLoadingMore) { setIsLoadingMore(true); } - const offset = pending - ? pendingResults.length - : successResults.length + failedResults.length; - // TODO: offsetを実際に取得しにいった数だけでもいいかも + fetchResult({ userId, success, failed, pending, - offset, + offset: pending ? pendingOffset : finishedOffset, limit, }) .then((data) => { @@ -101,10 +102,16 @@ export default function DashBoard({ return [...prev, ...newResults]; }); + if (pending) { + setPendingOffset(pendingOffset + limit); + } else { + setFinishedOffset(finishedOffset + limit); + } + + // 全部のデータを読み取った場合 if (pending && data.pendingResults.length < limit) { setNoMorePending(true); } - if ( success && failed && diff --git a/src/utils/ResultContext.tsx b/src/utils/ResultContext.tsx index fbc241c..0684525 100644 --- a/src/utils/ResultContext.tsx +++ b/src/utils/ResultContext.tsx @@ -21,6 +21,10 @@ interface ResultContextType { setNoMorePending: React.Dispatch; noMoreFinished: boolean; setNoMoreFinished: React.Dispatch; + pendingOffset: number; + setPendingOffset: React.Dispatch; + finishedOffset: number; + setFinishedOffset: React.Dispatch; } const ResultContext = createContext(undefined); @@ -38,7 +42,8 @@ export const ResultProvider = ({ children }: { children: ReactNode }) => { const [lastPostDate, setLastPostDate] = useState(null); // 投稿が0の場合はnull const [noMorePending, setNoMorePending] = useState(false); const [noMoreFinished, setNoMoreFinished] = useState(false); - // TODO: offsetも管理 + const [pendingOffset, setPendingOffset] = useState(0); + const [finishedOffset, setFinishedOffset] = useState(0); return ( { setNoMorePending, noMoreFinished, setNoMoreFinished, + pendingOffset, + setPendingOffset, + finishedOffset, + setFinishedOffset, }} > {children} From 70230092e1c333e3e5e2a6df909062384aa4dc9e Mon Sep 17 00:00:00 2001 From: MurakawaTakuya Date: Fri, 17 Jan 2025 00:31:31 +0900 Subject: [PATCH 5/8] =?UTF-8?q?=E3=82=B3=E3=83=B3=E3=83=9D=E3=83=BC?= =?UTF-8?q?=E3=83=8D=E3=83=B3=E3=83=88=E5=86=85=E3=81=AE=E9=96=A2=E6=95=B0?= =?UTF-8?q?=E3=81=A7=E4=BD=BF=E7=94=A8=E3=81=99=E3=82=8B=E5=80=A4=E3=82=92?= =?UTF-8?q?useRef=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- functions/src/routers/resultRouter.ts | 6 +++- src/Components/DashBoard/DashBoard.tsx | 42 ++++++++++++++++---------- src/utils/ResultContext.tsx | 36 +++++++++++----------- 3 files changed, 48 insertions(+), 36 deletions(-) diff --git a/functions/src/routers/resultRouter.ts b/functions/src/routers/resultRouter.ts index cd25fd8..ae6d4d6 100644 --- a/functions/src/routers/resultRouter.ts +++ b/functions/src/routers/resultRouter.ts @@ -66,7 +66,11 @@ const getResults = async ( .sort((a, b) => a.toDate().getTime() - b.toDate().getTime())[0]; if (!earliestSubmittedAt) { - return; + return { + successResults, + failedResults, + pendingResults, + }; } const failedSnapshot = await baseQuery diff --git a/src/Components/DashBoard/DashBoard.tsx b/src/Components/DashBoard/DashBoard.tsx index 6cbef3b..dcf493b 100644 --- a/src/Components/DashBoard/DashBoard.tsx +++ b/src/Components/DashBoard/DashBoard.tsx @@ -37,14 +37,10 @@ export default function DashBoard({ setPendingResults, lastPostDate, setLastPostDate, - noMorePending, - setNoMorePending, - noMoreFinished, - setNoMoreFinished, pendingOffset, - setPendingOffset, finishedOffset, - setFinishedOffset, + noMorePending, + noMoreFinished, } = useResults(); const [noResult, setNoResult] = useState(false); const [isLoading, setIsLoading] = useState(true); @@ -69,13 +65,21 @@ export default function DashBoard({ if (reachedBottom && !isLoadingMore) { setIsLoadingMore(true); } + // 全て読み込んだ場合 + if ( + (pending && noMorePending.current) || + (success && failed && noMoreFinished.current) + ) { + setIsLoading(false); + return; + } fetchResult({ userId, success, failed, pending, - offset: pending ? pendingOffset : finishedOffset, + offset: pending ? pendingOffset.current : finishedOffset.current, limit, }) .then((data) => { @@ -103,21 +107,21 @@ export default function DashBoard({ }); if (pending) { - setPendingOffset(pendingOffset + limit); + pendingOffset.current += limit; } else { - setFinishedOffset(finishedOffset + limit); + pendingOffset.current += limit; } // 全部のデータを読み取った場合 if (pending && data.pendingResults.length < limit) { - setNoMorePending(true); + noMorePending.current = true; } if ( success && failed && data.successResults.length + data.failedResults.length < limit ) { - setNoMoreFinished(true); + noMoreFinished.current = true; } setIsLoading(false); @@ -144,8 +148,8 @@ export default function DashBoard({ if ( entries[0].isIntersecting && !isLoading && - ((pending && !noMorePending) || - (success && failed && !noMoreFinished)) + ((pending && !noMorePending.current) || + (success && failed && !noMoreFinished.current)) ) { setReachedBottom(true); fetchData(); @@ -164,7 +168,13 @@ export default function DashBoard({ } }; }, 1000); - }, [isLoading, noMorePending, noMoreFinished, bottomRef.current, bottomRef]); + }, [ + isLoading, + noMorePending.current, + noMoreFinished.current, + bottomRef.current, + bottomRef, + ]); useEffect(() => { if ( @@ -251,8 +261,8 @@ export default function DashBoard({
{/* 下に到達した時に続きを表示 */} - {((pending && !noMorePending) || - (success && failed && !noMoreFinished)) && + {((pending && !noMorePending.current) || + (success && failed && !noMoreFinished.current)) && (reachedBottom ? (
; lastPostDate: string | null; setLastPostDate: React.Dispatch; - noMorePending: boolean; - setNoMorePending: React.Dispatch; - noMoreFinished: boolean; - setNoMoreFinished: React.Dispatch; - pendingOffset: number; - setPendingOffset: React.Dispatch; - finishedOffset: number; - setFinishedOffset: React.Dispatch; + pendingOffset: React.RefObject; + finishedOffset: React.RefObject; + noMorePending: React.RefObject; + noMoreFinished: React.RefObject; } const ResultContext = createContext(undefined); @@ -40,10 +42,10 @@ export const ResultProvider = ({ children }: { children: ReactNode }) => { [] ); const [lastPostDate, setLastPostDate] = useState(null); // 投稿が0の場合はnull - const [noMorePending, setNoMorePending] = useState(false); - const [noMoreFinished, setNoMoreFinished] = useState(false); - const [pendingOffset, setPendingOffset] = useState(0); - const [finishedOffset, setFinishedOffset] = useState(0); + const pendingOffset = useRef(0); + const finishedOffset = useRef(0); + const noMorePending = useRef(false); + const noMoreFinished = useRef(false); return ( { setPendingResults, lastPostDate, setLastPostDate, - noMorePending, - setNoMorePending, - noMoreFinished, - setNoMoreFinished, pendingOffset, - setPendingOffset, finishedOffset, - setFinishedOffset, + noMorePending, + noMoreFinished, }} > {children} From 6a5ffa2907bab673eaa471d0091fd051bfe17aa4 Mon Sep 17 00:00:00 2001 From: MurakawaTakuya Date: Fri, 17 Jan 2025 00:46:22 +0900 Subject: [PATCH 6/8] =?UTF-8?q?=E6=8A=95=E7=A8=BF=E4=BD=9C=E6=88=90?= =?UTF-8?q?=E6=99=82=E3=81=AB=E6=9C=80=E5=BE=8C=E3=81=AE=E6=8A=95=E7=A8=BF?= =?UTF-8?q?=E6=99=82=E9=96=93=E3=82=92=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils/ResultContext.tsx | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/utils/ResultContext.tsx b/src/utils/ResultContext.tsx index 9b1e07a..24270b0 100644 --- a/src/utils/ResultContext.tsx +++ b/src/utils/ResultContext.tsx @@ -103,21 +103,25 @@ export const useDeleteGoal = () => { // 投稿作成時 // pendingから削除してsuccessに追加 export const useAddPost = () => { - const { setPendingResults, setSuccessResults } = useResults(); + const { setPendingResults, setSuccessResults, setLastPostDate } = + useResults(); + return ( goalId: string, post: Omit & { submittedAt: string } ) => { let targetResult: GoalWithIdAndUserData | null = null; + setPendingResults((prev) => prev.filter((pendingResult) => { if (pendingResult.goalId === goalId) { targetResult = pendingResult; // 投稿した目標を取得 - pendingResult.post = post; // 投稿データをつけると + pendingResult.post = post; // 投稿データをつける } return true; }) ); + setSuccessResults((prev) => { if (targetResult) { // 投稿した目標に対してpostデータを追加 @@ -129,6 +133,10 @@ export const useAddPost = () => { } return prev; }); + + // 最新投稿日時を更新 + const now = new Date(); + setLastPostDate(now.toISOString()); }; }; From 1af7a18b4f50897263673b437ac8a2b0934a82c9 Mon Sep 17 00:00:00 2001 From: MurakawaTakuya Date: Fri, 17 Jan 2025 00:58:08 +0900 Subject: [PATCH 7/8] =?UTF-8?q?=E3=82=AB=E3=83=BC=E3=83=89=E3=81=AE?= =?UTF-8?q?=E8=89=B2=E3=82=92=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Components/GoalModal/CreateGoalModal.tsx | 8 ++++++++ src/Components/Progress/StepperBlock.tsx | 6 ++++++ src/utils/API/Goal/createGoal.ts | 2 +- 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/Components/GoalModal/CreateGoalModal.tsx b/src/Components/GoalModal/CreateGoalModal.tsx index 6b88cd1..c91b77e 100644 --- a/src/Components/GoalModal/CreateGoalModal.tsx +++ b/src/Components/GoalModal/CreateGoalModal.tsx @@ -64,6 +64,14 @@ export default function CreateGoalModal({ const handleSubmit = async (event: React.FormEvent) => { event.preventDefault(); + if (deadline < new Date().toISOString().slice(0, 16)) { + showSnackBar({ + message: "過去の時間を設定することはできません", + type: "warning", + }); + return; + } + const postData: Goal = { userId: user?.userId as string, text: text, diff --git a/src/Components/Progress/StepperBlock.tsx b/src/Components/Progress/StepperBlock.tsx index b29b3ed..42f2d2f 100644 --- a/src/Components/Progress/StepperBlock.tsx +++ b/src/Components/Progress/StepperBlock.tsx @@ -50,6 +50,12 @@ export const StepperBlock = ({ : outerBorderColors.pending, boxShadow: "1px 1px 8px #d9d9d96b", gap: "6px", + backgroundColor: + resultType == "success" + ? "#eff9f1ad" + : resultType == "failed" + ? "#fff5f5" + : "#f6f8ff", }} >
{ if (error instanceof Error) { if (error.message.includes("past deadline can't be set")) { - snackBarMessage = "過去の時間を指定することはできません"; + snackBarMessage = "過去の時間を設定することはできません"; } if (error.message.includes("too long comment")) { snackBarMessage = "目標の文字数は100文字以下にしてください"; From 9f463016c4f91d578eb88ef4362b317cd8c39b6c Mon Sep 17 00:00:00 2001 From: MurakawaTakuya Date: Fri, 17 Jan 2025 01:09:46 +0900 Subject: [PATCH 8/8] =?UTF-8?q?fixup!=20=E3=82=B3=E3=83=B3=E3=83=9D?= =?UTF-8?q?=E3=83=BC=E3=83=8D=E3=83=B3=E3=83=88=E5=86=85=E3=81=AE=E9=96=A2?= =?UTF-8?q?=E6=95=B0=E3=81=A7=E4=BD=BF=E7=94=A8=E3=81=99=E3=82=8B=E5=80=A4?= =?UTF-8?q?=E3=82=92useRef=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Components/DashBoard/DashBoard.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Components/DashBoard/DashBoard.tsx b/src/Components/DashBoard/DashBoard.tsx index dcf493b..2b2d709 100644 --- a/src/Components/DashBoard/DashBoard.tsx +++ b/src/Components/DashBoard/DashBoard.tsx @@ -109,7 +109,7 @@ export default function DashBoard({ if (pending) { pendingOffset.current += limit; } else { - pendingOffset.current += limit; + finishedOffset.current += limit; } // 全部のデータを読み取った場合