Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 0 additions & 39 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

187 changes: 103 additions & 84 deletions src/components/HomeScreen.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -32,110 +32,129 @@ export function HomeScreen({
return (
<div className="home-screen">
<header className="home-header">
<div>
<h1>Study Note</h1>
<p>ノートブックを作成して復習を始めましょう。</p>
</div>
<div className="home-create">
<input
value={newNotebookName}
onChange={(event) => setNewNotebookName(event.target.value)}
placeholder="新しいノートブック名"
aria-label="新しいノートブック名"
/>
<button
type="button"
className="primary-button"
onClick={() => {
onCreateNotebook(newNotebookName);
setNewNotebookName('');
}}
>
作成して開く
</button>
</div>
<h1>Study Note</h1>
<p>ノートブックを作成して復習を始めましょう。</p>
</header>

<section className="notebook-grid" aria-label="ノートブック一覧">
<div className="home-create">
<input
value={newNotebookName}
onChange={(event) => setNewNotebookName(event.target.value)}
placeholder="新しいノートブック名"
aria-label="新しいノートブック名"
onKeyDown={(event) => {
if (event.key === 'Enter' && newNotebookName.trim()) {
onCreateNotebook(newNotebookName.trim());
setNewNotebookName('');
}
}}
/>
<button
type="button"
className="primary-button"
onClick={() => {
onCreateNotebook(newNotebookName.trim());
setNewNotebookName('');
}}
>
作成して開く
</button>
</div>

<section className="notebook-list" aria-label="ノートブック一覧">
{notebooks.map((notebook) => {
const isEditing = notebook.id === editingNotebookId;

return (
<article key={notebook.id} className="notebook-card">
<div className="notebook-card__main">
<div key={notebook.id} className="notebook-item">
<div className="notebook-item__main">
{isEditing ? (
<input
value={editingNotebookName}
onChange={(event) => setEditingNotebookName(event.target.value)}
className="notebook-card__title-input"
className="notebook-item__title-input"
aria-label="ノートブック名を編集"
autoFocus
onKeyDown={(event) => {
if (event.key === 'Enter') {
onRenameNotebook(notebook.id, editingNotebookName);
setEditingNotebookId(null);
setEditingNotebookName('');
} else if (event.key === 'Escape') {
setEditingNotebookId(null);
setEditingNotebookName('');
}
}}
/>
) : (
<h2>{notebook.name}</h2>
<p className="notebook-item__name">{notebook.name}</p>
)}
<p>{notebook.pages.length} ページ</p>
<span>更新: {formatUpdatedAt(notebook.updatedAt)}</span>
<p className="notebook-item__meta">
{notebook.pages.length} ページ 更新: {formatUpdatedAt(notebook.updatedAt)}
</p>
</div>
<div className="notebook-card__actions">
<button
type="button"
className="primary-button"
onClick={() => onOpenNotebook(notebook.id)}
>
開く
</button>
<div className="notebook-item__actions">
{!isEditing && (
<button
type="button"
className="ghost-button"
onClick={() => {
setEditingNotebookId(notebook.id);
setEditingNotebookName(notebook.name);
}}
>
名前変更
</button>
)}
{isEditing && (
<button
type="button"
className="ghost-button"
onClick={() => {
onRenameNotebook(notebook.id, editingNotebookName);
setEditingNotebookId(null);
setEditingNotebookName('');
}}
>
保存
</button>
<>
<button
type="button"
className="primary-button"
onClick={() => onOpenNotebook(notebook.id)}
>
開く
</button>
<button
type="button"
className="ghost-button"
onClick={() => {
setEditingNotebookId(notebook.id);
setEditingNotebookName(notebook.name);
}}
>
名前変更
</button>
<button
type="button"
className="ghost-button danger"
onClick={() => {
const confirmed = window.confirm(`「${notebook.name}」を削除しますか?`);

if (confirmed) {
onDeleteNotebook(notebook.id);
}
}}
>
削除
</button>
</>
)}
{isEditing && (
<button
type="button"
className="ghost-button"
onClick={() => {
setEditingNotebookId(null);
setEditingNotebookName('');
}}
>
キャンセル
</button>
<>
<button
type="button"
className="primary-button"
onClick={() => {
onRenameNotebook(notebook.id, editingNotebookName);
setEditingNotebookId(null);
setEditingNotebookName('');
}}
>
保存
</button>
<button
type="button"
className="ghost-button"
onClick={() => {
setEditingNotebookId(null);
setEditingNotebookName('');
}}
>
キャンセル
</button>
</>
)}
<button
type="button"
className="ghost-button danger"
onClick={() => {
const confirmed = window.confirm(`「${notebook.name}」を削除しますか?`);

if (confirmed) {
onDeleteNotebook(notebook.id);
}
}}
>
削除
</button>
</div>
</article>
</div>
);
})}
</section>
Expand Down
Loading