File size: 5,773 Bytes
5dcafa7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
import React, { useState, useEffect } from 'react';
import { toast } from 'react-toastify';

interface SavedPage {
  id: string;
  title: string;
  html: string;
  createdAt: number;
}

interface SavedPagesProps {
  currentHtml: string;
  onLoadPage: (html: string) => void;
}

const SavedPages: React.FC<SavedPagesProps> = ({ currentHtml, onLoadPage }) => {
  const [pages, setPages] = useState<SavedPage[]>([]);
  const [isOpen, setIsOpen] = useState(false);
  const [newPageTitle, setNewPageTitle] = useState('');
  const [isAdding, setIsAdding] = useState(false);

  // Load saved pages from localStorage
  useEffect(() => {
    const savedPagesJson = localStorage.getItem('autosite_saved_pages');
    if (savedPagesJson) {
      try {
        const savedPages = JSON.parse(savedPagesJson);
        setPages(savedPages);
      } catch (error) {
        console.error('Error loading saved pages:', error);
      }
    }
  }, []);

  // Save pages to localStorage when they change
  useEffect(() => {
    localStorage.setItem('autosite_saved_pages', JSON.stringify(pages));
  }, [pages]);

  // Save current page
  const savePage = () => {
    if (!currentHtml) {
      toast.error('No content to save');
      return;
    }

    if (!newPageTitle.trim()) {
      toast.error('Please enter a title for your page');
      return;
    }

    // Create a new page
    const newPage: SavedPage = {
      id: `page_${Date.now()}`,
      title: newPageTitle,
      html: currentHtml,
      createdAt: Date.now()
    };

    setPages([newPage, ...pages]);
    setNewPageTitle('');
    setIsAdding(false);
    toast.success('Page saved successfully');
  };

  // Load a page
  const loadPage = (page: SavedPage) => {
    if (window.confirm('Are you sure you want to load this page? Your current work will be replaced.')) {
      onLoadPage(page.html);
      setIsOpen(false);
      toast.info(`Loaded page: ${page.title}`);
    }
  };

  // Delete a page
  const deletePage = (e: React.MouseEvent, pageId: string) => {
    e.stopPropagation();
    if (window.confirm('Are you sure you want to delete this page?')) {
      setPages(pages.filter(page => page.id !== pageId));
      toast.info('Page deleted');
    }
  };

  return (
    <div className="saved-pages-container">
      <button
        className="px-3 py-1.5 bg-blue-600 hover:bg-blue-700 text-white rounded text-sm"
        onClick={() => setIsOpen(!isOpen)}
      >
        {isOpen ? 'Close Saved Pages' : 'Saved Pages'}
      </button>

      {isOpen && (
        <div className="saved-pages-modal fixed inset-0 bg-black/50 flex items-center justify-center z-50">
          <div className="bg-gray-900 rounded-lg w-full max-w-2xl p-5 max-h-[80vh] overflow-y-auto">
            <div className="flex justify-between items-center mb-4">
              <h2 className="text-xl text-white font-bold">Saved Pages</h2>
              <button
                className="text-gray-400 hover:text-white"
                onClick={() => setIsOpen(false)}
              >

              </button>
            </div>

            {/* Add new page form */}
            {isAdding ? (
              <div className="mb-6 bg-gray-800 p-4 rounded-lg">
                <input
                  type="text"
                  className="w-full bg-gray-700 border border-gray-600 text-white px-3 py-2 rounded mb-3"
                  placeholder="Page Title"
                  value={newPageTitle}
                  onChange={(e) => setNewPageTitle(e.target.value)}
                />
                <div className="flex space-x-2">
                  <button
                    className="px-3 py-1.5 bg-green-600 hover:bg-green-700 text-white rounded"
                    onClick={savePage}
                  >
                    Save Page
                  </button>
                  <button
                    className="px-3 py-1.5 bg-gray-700 hover:bg-gray-600 text-white rounded"
                    onClick={() => {
                      setIsAdding(false);
                      setNewPageTitle('');
                    }}
                  >
                    Cancel
                  </button>
                </div>
              </div>
            ) : (
              <button
                className="px-3 py-1.5 bg-green-600 hover:bg-green-700 text-white rounded mb-6"
                onClick={() => setIsAdding(true)}
              >
                Save Current Page
              </button>
            )}

            {/* List of saved pages */}
            {pages.length === 0 ? (
              <p className="text-gray-400 text-center py-4">No saved pages yet</p>
            ) : (
              <div className="space-y-3">
                {pages.map((page) => (
                  <div
                    key={page.id}
                    className="bg-gray-800 p-3 rounded cursor-pointer hover:bg-gray-700 flex justify-between items-center"
                    onClick={() => loadPage(page)}
                  >
                    <div>
                      <h3 className="text-white font-medium">{page.title}</h3>
                      <p className="text-gray-400 text-sm">
                        {new Date(page.createdAt).toLocaleString()}
                      </p>
                    </div>
                    <div className="flex space-x-2">
                      <button
                        className="text-red-500 hover:text-red-400"
                        onClick={(e) => deletePage(e, page.id)}
                      >
                        Delete
                      </button>
                    </div>
                  </div>
                ))}
              </div>
            )}
          </div>
        </div>
      )}
    </div>
  );
};

export default SavedPages;