1 | const newsList = document.getElementById('news-list');
|
---|
2 | const newsForm = document.getElementById('news-form');
|
---|
3 | const couponsList = document.getElementById('coupons-list');
|
---|
4 | const couponsForm = document.getElementById('coupons-form');
|
---|
5 |
|
---|
6 | let selectedImage;
|
---|
7 | let questionable;
|
---|
8 |
|
---|
9 | let pageType;
|
---|
10 | document.addEventListener('DOMContentLoaded',function (){
|
---|
11 | pageType = document.body.getAttribute('data-page');
|
---|
12 | if(pageType==='events'){
|
---|
13 |
|
---|
14 | const openPopupButton = document.getElementById('open-popup');
|
---|
15 | const imagePopup = document.getElementById('image-popup');
|
---|
16 | const overlay = document.getElementById('overlay');
|
---|
17 | const imageInput = document.getElementById('image-url');
|
---|
18 | const imagePreview = document.getElementById('image-preview');
|
---|
19 | const saveButton = document.getElementById('save-button');
|
---|
20 | const cancelButton = document.getElementById('cancel-button');
|
---|
21 |
|
---|
22 |
|
---|
23 | openPopupButton.addEventListener('click', (e) => {
|
---|
24 | e.preventDefault();
|
---|
25 | imagePopup.style.display = 'block';
|
---|
26 | overlay.style.display = 'block';
|
---|
27 | });
|
---|
28 |
|
---|
29 | imageInput.addEventListener('change', (event) => {
|
---|
30 | event.preventDefault();
|
---|
31 | selectedImage=null;
|
---|
32 | questionable=null;
|
---|
33 | const file = event.target.files[0];
|
---|
34 | questionable=file;
|
---|
35 | if (file) {
|
---|
36 | const reader = new FileReader();
|
---|
37 | reader.onload = (e) => {
|
---|
38 | imagePreview.style.display='inline';
|
---|
39 | imagePreview.innerHTML = `<img src="${e.target.result}" style="width: 100%; height: auto;">`;
|
---|
40 | selectedImage =e.target.result ; // Store the selected file
|
---|
41 |
|
---|
42 | console.log(selectedImage);
|
---|
43 | saveButton.style.display = 'inline';
|
---|
44 | };
|
---|
45 | reader.readAsDataURL(questionable);
|
---|
46 | }
|
---|
47 | });
|
---|
48 |
|
---|
49 | saveButton.addEventListener('click', () => {
|
---|
50 | if(selectedImage) {
|
---|
51 | let temp= document.getElementById('main-image');
|
---|
52 | temp.innerHTML=`<img src="${selectedImage}" style="width: 20%; height: 20%;">`;
|
---|
53 | closePopup();
|
---|
54 | }
|
---|
55 | else{
|
---|
56 | console.log('No image file selected');
|
---|
57 | }
|
---|
58 |
|
---|
59 |
|
---|
60 | });
|
---|
61 |
|
---|
62 | cancelButton.addEventListener('click', ()=>{
|
---|
63 | closePopup();
|
---|
64 |
|
---|
65 | });
|
---|
66 |
|
---|
67 | function closePopup() {
|
---|
68 | imagePopup.style.display = 'none';
|
---|
69 | overlay.style.display = 'none';
|
---|
70 | imageInput.value = '';
|
---|
71 | imagePreview.innerHTML = '';
|
---|
72 | }
|
---|
73 | }
|
---|
74 | });
|
---|
75 |
|
---|
76 | function elementCreation(ItemData){
|
---|
77 | const newItem = document.createElement('div');
|
---|
78 | newItem.classList.add('news-item');
|
---|
79 | newItem.setAttribute('data-id', ItemData.id);
|
---|
80 | if(pageType==='events'){
|
---|
81 | newItem.innerHTML = `
|
---|
82 | <h3>${ItemData.title}</h3>
|
---|
83 | <p>${ItemData.text}</p>
|
---|
84 | ${ItemData.imgSrc ? `<img src="${ItemData.imgSrc}" style="width: 50%; height: auto;" data-attribute="${ItemData.imgSrc}">` : ''}`
|
---|
85 | }
|
---|
86 | else{
|
---|
87 | newItem.innerHTML = `
|
---|
88 | <h3>${ItemData.title}</h3>
|
---|
89 | <p>${ItemData.code}</p>
|
---|
90 | <div>${ItemData.description}</div>`
|
---|
91 | }
|
---|
92 | newItem.innerHTML+=`<button onclick="edit(this)">Edit</button>
|
---|
93 | <button onclick="deleteBoth(this)">Delete</button>`
|
---|
94 | return newItem;
|
---|
95 | }
|
---|
96 | function eventsRetrieval(){
|
---|
97 | const url = pageType === 'events' ? `/api/news/getAllEvents` : `/api/coupons/getAllCoupons`;
|
---|
98 | fetch(url,{
|
---|
99 | method: 'GET',
|
---|
100 | headers: {
|
---|
101 | 'Content-Type': 'application/json'
|
---|
102 | }
|
---|
103 | })
|
---|
104 | .then(response => {
|
---|
105 | if (!response.ok) {
|
---|
106 | throw new Error('Failed to fetch news.');
|
---|
107 | }
|
---|
108 | return response.json();
|
---|
109 | })
|
---|
110 | .then(data => {
|
---|
111 | data.forEach(ItemData => {
|
---|
112 | let newItem=elementCreation(ItemData);
|
---|
113 | pageType === 'events' ? newsList.appendChild(newItem) : couponsList.appendChild(newItem);
|
---|
114 | });
|
---|
115 | })
|
---|
116 | .catch(error => {
|
---|
117 | console.error('Error:', error);
|
---|
118 | alert('Failed to load news.');
|
---|
119 | });
|
---|
120 | }
|
---|
121 |
|
---|
122 | window.onload=function(){
|
---|
123 | eventsRetrieval();
|
---|
124 | }
|
---|
125 | function clearData(){
|
---|
126 | if(pageType==='events'){
|
---|
127 | document.getElementById('text').value = '';
|
---|
128 | }
|
---|
129 | else if(pageType==='coupons'){
|
---|
130 | let temp1=document.getElementById('code');
|
---|
131 | temp1.value = '';
|
---|
132 | temp1.removeAttribute('data-initial');
|
---|
133 | let temp2=document.getElementById('description');
|
---|
134 | temp2.value = '';
|
---|
135 | temp2.removeAttribute('data-initial');
|
---|
136 | }
|
---|
137 | let temp3=document.getElementById('title');
|
---|
138 | temp3.value = '';
|
---|
139 | temp3.removeAttribute('data-initial');
|
---|
140 | }
|
---|
141 | function showForm() {
|
---|
142 | if(pageType==='events')
|
---|
143 | document.getElementById("main-image").innerHTML='';
|
---|
144 | pageType === 'events' ? newsForm.style.display = 'flex' : couponsForm.style.display='flex';
|
---|
145 | }
|
---|
146 |
|
---|
147 | function hideForm() {
|
---|
148 | pageType === 'events' ? newsForm.style.display = 'none' : couponsForm.style.display='none';
|
---|
149 | clearData();
|
---|
150 | selectedImage = null;
|
---|
151 | questionable=null;
|
---|
152 | }
|
---|
153 |
|
---|
154 | function submitForm() {
|
---|
155 | let param1,param2,param3;
|
---|
156 | param1 = document.getElementById('title').value;
|
---|
157 |
|
---|
158 | if(pageType==='events'){
|
---|
159 | param2 = document.getElementById('text').value;
|
---|
160 | param3 = selectedImage;
|
---|
161 | }
|
---|
162 | else if(pageType==='coupons'){
|
---|
163 | param2 = document.getElementById('code').value;
|
---|
164 | param3 = document.getElementById('description').value;
|
---|
165 | }
|
---|
166 | if (param1 && param2) {
|
---|
167 | let newsData;
|
---|
168 | if (pageType === 'events') {
|
---|
169 | newsData = {
|
---|
170 | title: param1,
|
---|
171 | text: param2,
|
---|
172 | imgSrc: param3
|
---|
173 | };
|
---|
174 | } else {
|
---|
175 | newsData = {
|
---|
176 | title: param1,
|
---|
177 | code: param2,
|
---|
178 | description: param3
|
---|
179 | };
|
---|
180 | }
|
---|
181 | let initialTitle = document.getElementById('title').getAttribute('data-initial');
|
---|
182 | console.log(initialTitle);
|
---|
183 |
|
---|
184 | if(initialTitle!==null){
|
---|
185 | let initialParam2,initialParam3;
|
---|
186 | if(pageType==='events'){
|
---|
187 | initialParam2=document.getElementById("text").getAttribute('data-initial');
|
---|
188 | initialParam3 = document.getElementsByTagName('img')[0].getAttribute('data-attribute');
|
---|
189 | }
|
---|
190 | else if(pageType==='coupons'){
|
---|
191 | initialParam2 = document.getElementById('code').getAttribute('data-initial');
|
---|
192 | initialParam3=document.getElementById('description').getAttribute('data-initial');
|
---|
193 | }
|
---|
194 | clearData();
|
---|
195 | if (initialTitle !== param1 || initialParam2 !== param2 || initialParam3 !== param3) {
|
---|
196 | console.log('Changes detected! Submitting the form.');
|
---|
197 | } else {
|
---|
198 | hideForm();
|
---|
199 | return;
|
---|
200 | }
|
---|
201 |
|
---|
202 | const url = pageType === 'events' ? `/api/news/editEvent?identifier=${initialTitle}` : `/api/coupons/editCoupon?identifier=${initialTitle}`;
|
---|
203 | fetch(url, {
|
---|
204 | method: 'POST',
|
---|
205 | headers: {
|
---|
206 | 'Content-Type': 'application/json'
|
---|
207 | },
|
---|
208 | body: JSON.stringify(newsData)
|
---|
209 | }).then(response => {
|
---|
210 | if (!response.ok) {
|
---|
211 | throw new Error('Network response was not ok');
|
---|
212 | }
|
---|
213 | console.log("Successfully edited");
|
---|
214 | hideForm();
|
---|
215 | if (pageType === 'events') {
|
---|
216 | newsList.innerHTML = '';
|
---|
217 | } else {
|
---|
218 | couponsList.innerHTML = '';
|
---|
219 | }
|
---|
220 | eventsRetrieval();
|
---|
221 | }).catch(error => {
|
---|
222 | console.error('Error occurred');
|
---|
223 | });
|
---|
224 |
|
---|
225 | return;
|
---|
226 | }
|
---|
227 | const url = pageType === 'events' ? `/api/news/createEvent` : `/api/coupons/createCoupon`;
|
---|
228 | fetch(url, {
|
---|
229 | method: 'PUT',
|
---|
230 | headers: {
|
---|
231 | 'Content-Type': 'application/json'
|
---|
232 | },
|
---|
233 | body: JSON.stringify(newsData)
|
---|
234 | })
|
---|
235 | .then(response => {
|
---|
236 | if (!response.ok) {
|
---|
237 | throw new Error('Failed to update news.');
|
---|
238 | }
|
---|
239 | return response.json();
|
---|
240 | })
|
---|
241 | .then(data => {
|
---|
242 | console.log('Data updated:', data);
|
---|
243 | let newItem = elementCreation(data);
|
---|
244 | if (pageType === 'events') {
|
---|
245 | newsList.appendChild(newItem);
|
---|
246 | } else {
|
---|
247 | couponsList.appendChild(newItem);
|
---|
248 | }
|
---|
249 | document.getElementById('form').reset();
|
---|
250 | hideForm();
|
---|
251 | })
|
---|
252 | .catch(error => {
|
---|
253 | console.error('Error during submission:', error);
|
---|
254 | alert('Failed to save the news/coupon. Please try again.');
|
---|
255 |
|
---|
256 | });
|
---|
257 | clearData();
|
---|
258 | }
|
---|
259 | else
|
---|
260 | {
|
---|
261 | alert('Missing fields');
|
---|
262 | }
|
---|
263 | }
|
---|
264 |
|
---|
265 | function deleteBoth(button) {
|
---|
266 |
|
---|
267 | let temp=button.parentElement;
|
---|
268 | let value=temp.getAttribute('data-id');
|
---|
269 | const url = pageType === 'events' ? `/api/news/deleteEvent?userId=${value}` : `/api/coupons/deleteCoupon?userId=${value}`;
|
---|
270 | fetch(url, {
|
---|
271 | method: 'DELETE',
|
---|
272 | headers: {
|
---|
273 | 'Content-Type': 'application/json'
|
---|
274 | }
|
---|
275 | })
|
---|
276 | .then(r => {
|
---|
277 | if(r.ok){
|
---|
278 | console.log('Element deleted successfully');
|
---|
279 | }
|
---|
280 | else{
|
---|
281 | console.error('Failed to delete element');
|
---|
282 | }
|
---|
283 | })
|
---|
284 | .catch(error => {
|
---|
285 | console.log("error deleting");
|
---|
286 | });
|
---|
287 |
|
---|
288 | const newItem = button.parentElement;
|
---|
289 | pageType === 'events' ? newsList.removeChild(newItem) : couponsList.removeChild(newItem);
|
---|
290 |
|
---|
291 | }
|
---|
292 |
|
---|
293 | function edit(button) {
|
---|
294 | showForm();
|
---|
295 | const newsItem = button.parentElement;
|
---|
296 | const param1 = newsItem.querySelector('h3').textContent;
|
---|
297 | const param2 = newsItem.querySelector('p').textContent;
|
---|
298 |
|
---|
299 | if(pageType==='events'){
|
---|
300 | document.getElementById('text').value = param2;
|
---|
301 | let importantValue=newsItem.querySelector('img').getAttribute("data-attribute");
|
---|
302 | document.getElementById('main-image').innerHTML=`<img src="${importantValue}" style="width: 20%; height: 20%;">`;
|
---|
303 | }
|
---|
304 | else if(pageType==='coupons'){
|
---|
305 | const description=newsItem.querySelector('div').textContent;
|
---|
306 | document.getElementById('code').value = param2;
|
---|
307 | document.getElementById('code').setAttribute('data-initial',param2);
|
---|
308 | document.getElementById('description').value = description;
|
---|
309 | document.getElementById('description').setAttribute('data-initial',description);
|
---|
310 | }
|
---|
311 | document.getElementById('title').value = param1;
|
---|
312 | document.getElementById('title').setAttribute('data-initial', param1);
|
---|
313 |
|
---|
314 | }
|
---|
315 |
|
---|