let Sheeps_mode = [ 'Користувач', 'Модератор', 'Адміністратор' ]; let Sheeps_icon = [ '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' ] const SheepsEvents = { initialized: false, init() { if (this.initialized) return; document.addEventListener('submit', async (e) => { const editorForm = e.target.closest('#sheep-editor'); if (editorForm) { e.preventDefault(); const sheepEditorButton = document.getElementById('sheep-editor-button'); const form = event.target; const formData = new FormData(form); const uuidValue = form.elements["uuid"].value; const sheep = Sheeps.sheeps_list.list.find(item => item.uuid === uuidValue); if (!sheep) { console.error("Sheep not found for uuid:", uuidValue); return; } sheep.name = form.elements["name"].value; sheep.group_id = Number(formData.get("group_id")); sheep.mode = formData.get("mode"); sheep.mode_title = ["Користувач", "Модератор", "Адміністратор"][sheep.mode] || "Користувач"; const permKeys = [ "can_view_sheeps", "can_view_schedule", "can_view_stand", "can_view_territory", "can_add_sheeps", "can_add_territory", "can_manager_territory", "can_add_stand", "can_manager_stand", "can_add_schedule" ]; for (const key of permKeys) { sheep.possibilities[key] = form.elements[key].checked; } sheepEditorButton.innerText = "Зачекайте..."; try { const uuid = localStorage.getItem('uuid'); const URL = `${CONFIG.api}sheep`; const response = await fetch(URL, { method: 'PUT', headers: { "Content-Type": "application/json", "Authorization": uuid }, body: JSON.stringify(sheep) }); if (response.ok) { sheepEditorButton.innerText = "Успішно збережено"; const data = await response.json(); console.log(data); Sheeps.sheeps_list.list = []; await Sheeps.sheeps_list.setHTML(); setTimeout(() => { sheepEditorButton.innerText = "Зберегти"; }, 3000); } else { console.error('Помилка збереження'); sheepEditorButton.innerText = "Помилка збереження"; } } catch (err) { console.error(err); sheepEditorButton.innerText = "Помилка збереження"; } // тот же код, что был в _onSheepEditorSubmit, но обращаемся к editorForm return; } const addedsForm = e.target.closest('#sheep-addeds'); if (addedsForm) { e.preventDefault(); const sheepAddedsButton = document.getElementById('sheep-addeds-button'); const form = event.target; const formData = new FormData(form); const data = Object.fromEntries(formData.entries()); sheepAddedsButton.innerText = "Зачекайте..."; try { const uuid = localStorage.getItem('uuid'); const URL = `${CONFIG.api}sheep`; const response = await fetch(URL, { method: 'POST', headers: { "Content-Type": "application/json", "Authorization": uuid }, body: JSON.stringify(data) }); if (response.ok) { sheepAddedsButton.innerText = "Вісника додано"; const data = await response.json(); console.log(data); Sheeps.sheeps_list.list = []; const randomNumber = Math.floor(Math.random() * Sheeps_icon.length); Sheeps.addeds.close(); await Sheeps.editor.setHTML(data.id, randomNumber); setTimeout(() => { sheepAddedsButton.innerText = "Додати"; }, 3000); } else { console.error('Помилка додавання'); sheepAddedsButton.innerText = "Помилка додавання"; } } catch (err) { console.error(err); sheepAddedsButton.innerText = "Помилка додавання"; } return; } }); this.initialized = true; } }; const Sheeps = { init: async (id) => { let html = await fetch('/lib/pages/sheeps/index.html').then((response) => response.text()); app.innerHTML = html; await Sheeps.sheeps_list.setHTML(); if (id) Sheeps.editor.setHTML(id); SheepsEvents.init(); }, sheeps_list: { list: [], loadAPI: async () => { let uuid = localStorage.getItem("uuid"); const URL = `${CONFIG.api}sheeps/list`; Sheeps.sheeps_list.list = await fetch(URL, { method: 'GET', headers: { "Content-Type": "application/json", "Authorization": uuid } }).then((response) => response.json()); return Sheeps.sheeps_list.list }, setHTML: async (search_value = null) => { let block_sheep_list = document.getElementById('block-sheeps-list'); let block_sheep_info = document.getElementById('block-sheep-info'); block_sheep_list.style.display = "flex"; block_sheep_info.style.display = ""; let list = Sheeps.sheeps_list.list.length > 0 ? Sheeps.sheeps_list.list : await Sheeps.sheeps_list.loadAPI(); Sheeps.sheeps_list.list.sort((a, b) => a.group_id - b.group_id); let block_sheeps = document.getElementById('block-sheeps-list'); let butt_add = USER.possibilities.can_add_sheeps ? ` ` : ""; let html = `

Всі вісники

${butt_add}
`; html += ` `; const accessTemplate = (p) => { let perms = []; if (p.can_view_sheeps) perms.push("View Sheeps"); if (p.can_view_schedule) perms.push("View Schedule"); if (p.can_view_stand) perms.push("View Stand"); if (p.can_view_territory) perms.push("View Territory"); if (p.can_add_sheeps) perms.push("Create Sheeps"); if (p.can_add_territory) perms.push("Create Territory"); if (p.can_manager_territory) perms.push("Manager Territory"); if (p.can_add_stand) perms.push("Create Stand"); if (p.can_manager_stand) perms.push("Manager Stand"); if (p.can_add_schedule) perms.push("Create Schedule"); return perms.map(p => `${p}`).join(''); }; for (const element of list) { if (search_value && !element.name.toLowerCase().includes(search_value)) { continue; // пропустить, если имя не содержит строку поиска } html += `
${Sheeps_icon[element.group_id]}

${element.name}

${element.mode_title}

Група №${element.group_id}

${accessTemplate(element.possibilities)}
`; } block_sheeps.innerHTML = html; } }, editor: { loadAPI: async (id) => { let uuid = localStorage.getItem("uuid"); const URL = `${CONFIG.api}sheep?id=${id}`; return await fetch(URL, { method: 'GET', headers: { "Content-Type": "application/json", "Authorization": uuid } }).then((response) => response.json()); }, setHTML: async (id, randomNumber) => { let sheep = await Sheeps.editor.loadAPI(id); console.log(sheep); Router.navigate(`sheeps/${id}`, true, false); let block_sheep_list = document.getElementById('block-sheeps-list'); let block_sheep_info = document.getElementById('block-sheep-info'); block_sheep_list.style.opacity = "0"; setTimeout(() => { block_sheep_info.style.display = "flex"; block_sheep_list.style.display = ""; }, 100) setTimeout(() => { block_sheep_info.style.opacity = "1"; }, 10) if (!randomNumber) randomNumber = Math.floor(Math.random() * Sheeps_icon.length); let sheep_mess = document.getElementById('sheep-mess'); let sheep_editor = document.getElementById('sheep-editor'); sheep_mess.style.opacity = "0"; sheep_editor.style.display = ""; setTimeout(() => { sheep_editor.style.opacity = "1"; }, 100) let sheep_editor_icon = document.getElementById('sheep-editor-icon'); let sheep_editor_uuid = document.getElementById('sheep-editor-uuid'); let sheep_editor_uuid_copy = document.getElementById('sheep-editor-uuid-copy'); let sheep_editor_name = document.getElementById('sheep-editor-name'); let sheep_editor_group_id = document.getElementById('sheep-editor-group_id'); let sheep_editor_mode = document.getElementById('sheep-editor-mode'); let editor_blocks_inputs_uuid_moder = document.getElementById('editor-blocks-inputs-uuid-moder'); let sheep_editor_uuid_moder = document.getElementById('sheep-editor-uuid-moder'); let sheep_editor_access_moder = document.getElementById('sheep-editor-access-moder'); let sheep_editor_can_view_sheeps = document.getElementById('sheep-editor-can_view_sheeps'); let sheep_editor_can_add_sheeps = document.getElementById('sheep-editor-can_add_sheeps'); let sheep_editor_can_add_territory = document.getElementById('sheep-editor-can_add_territory'); let sheep_editor_can_manager_territory = document.getElementById('sheep-editor-can_manager_territory'); let sheep_editor_can_add_stand = document.getElementById('sheep-editor-can_add_stand'); let sheep_editor_can_manager_stand = document.getElementById('sheep-editor-can_manager_stand'); let sheep_editor_can_add_schedule = document.getElementById('sheep-editor-can_add_schedule'); let sheep_editor_can_view_schedule = document.getElementById('sheep-editor-can_view_schedule'); let sheep_editor_can_view_stand = document.getElementById('sheep-editor-can_view_stand'); let sheep_editor_can_view_territory = document.getElementById('sheep-editor-can_view_territory'); sheep_editor_icon.innerHTML = Sheeps_icon[sheep.group_id]; sheep_editor_uuid.value = sheep.uuid; sheep_editor_uuid_copy.innerText = sheep.uuid; sheep_editor_uuid_copy.setAttribute("onclick", `clipboard('https://sheep-service.com/?uuid=${sheep.uuid}')`); sheep_editor_mode.value = sheep.mode; sheep_editor_name.value = sheep.name; sheep_editor_group_id.value = sheep.group_id; if (USER.mode == 2 && (sheep.mode != 0)) { sheep_editor_access_moder.style.display = ""; editor_blocks_inputs_uuid_moder.style.display = ""; sheep_editor_uuid_moder.innerText = sheep.uuid_manager; sheep_editor_uuid_moder.setAttribute("onclick", `clipboard('https://sheep-service.com/?uuid=${sheep.uuid_manager}')`); } else if (USER.mode == 2 && (sheep.mode == 0)) { sheep_editor_access_moder.style.display = "none"; editor_blocks_inputs_uuid_moder.style.display = "none"; sheep_editor_uuid_moder.innerText = ''; sheep_editor_uuid_moder.setAttribute("onclick", ``); } else { editor_blocks_inputs_uuid_moder.style.display = "none"; sheep_editor_uuid_moder.innerText = ''; sheep_editor_uuid_moder.setAttribute("onclick", ``); } sheep_editor_can_view_sheeps.checked = sheep.possibilities.can_view_sheeps; sheep_editor_can_add_sheeps.checked = sheep.possibilities.can_add_sheeps; sheep_editor_can_add_territory.checked = sheep.possibilities.can_add_territory; sheep_editor_can_manager_territory.checked = sheep.possibilities.can_manager_territory; sheep_editor_can_add_stand.checked = sheep.possibilities.can_add_stand; sheep_editor_can_manager_stand.checked = sheep.possibilities.can_manager_stand; sheep_editor_can_add_schedule.checked = sheep.possibilities.can_add_schedule; sheep_editor_can_view_schedule.checked = sheep.possibilities.can_view_schedule; sheep_editor_can_view_stand.checked = sheep.possibilities.can_view_stand; sheep_editor_can_view_territory.checked = sheep.possibilities.can_view_territory; if (USER.possibilities.can_manager_territory) { document.getElementById('editor-blocks-territory').style.display = "none"; document.getElementById(`editor-blocks-territory`).innerHTML = "Території вісника"; Sheeps.territory.house(id); Sheeps.territory.homestead(id); } if (USER.mode == 2) { document.getElementById('sheep-editor-button').style.display = ""; sheep_editor_mode.disabled = false; } else { sheep_editor_mode.disabled = true; } }, close: () => { let block_sheep_list = document.getElementById('block-sheeps-list'); let block_sheep_info = document.getElementById('block-sheep-info'); block_sheep_info.style.opacity = "0"; setTimeout(() => { block_sheep_list.style.display = "flex"; block_sheep_info.style.display = ""; }, 100); setTimeout(() => { block_sheep_list.style.opacity = "1"; }, 10); Router.navigate(`sheeps`); } }, addeds: { open: () => { let block_sheep_list = document.getElementById('block-sheeps-list'); let block_sheep_info = document.getElementById('block-sheep-info'); let block_sheep_addeds = document.getElementById('block-sheep-addeds'); block_sheep_list.style.opacity = "0"; block_sheep_info.style.opacity = "0"; setTimeout(() => { block_sheep_list.style.display = "none"; block_sheep_info.style.display = "none"; block_sheep_addeds.style.display = ""; }, 100) setTimeout(() => { block_sheep_addeds.style.opacity = "1"; }, 100) }, close: () => { let block_sheep_list = document.getElementById('block-sheeps-list'); let block_sheep_info = document.getElementById('block-sheep-info'); let block_sheep_addeds = document.getElementById('block-sheep-addeds'); block_sheep_addeds.style.opacity = "0"; setTimeout(() => { block_sheep_addeds.style.display = "none"; block_sheep_list.style.display = "flex"; block_sheep_info.style.display = ""; }, 100) setTimeout(() => { block_sheep_list.style.opacity = "1"; block_sheep_info.style.opacity = "1"; }, 10) } }, search: { open: () => { const sheepSearchForm = document.getElementById("block-sheeps-list-search"); sheepSearchForm.classList.toggle('active'); const current = sheepSearchForm.dataset.state; sheepSearchForm.dataset.state = current === 'open' ? 'closed' : 'open'; }, input: (value) => { console.log(value); search_value = value?.trim()?.toLowerCase() || ""; Sheeps.sheeps_list.setHTML(search_value); } }, territory: { async loadAPI(URL) { const uuid = localStorage.getItem("uuid"); const res = await fetch(URL, { headers: { "Content-Type": "application/json", "Authorization": uuid } }); return await res.json(); }, async house(id) { const URL = `${CONFIG.api}house/list?mode=admin&sheep_id=${id}`; const list = await Sheeps.territory.loadAPI(URL); if ((USER.possibilities.can_view_territory || USER.mode == 2) && list.length > 0) { document.getElementById('editor-blocks-territory').style.display = ""; Sheeps.territory.renderCards(list, "house"); } }, async homestead(id) { const URL = `${CONFIG.api}homestead/list?mode=admin&sheep_id=${id}`; const list = await Sheeps.territory.loadAPI(URL); if ((USER.possibilities.can_view_territory || USER.mode == 2) && list.length > 0) { document.getElementById('editor-blocks-territory').style.display = ""; Sheeps.territory.renderCards(list, "homestead"); } }, renderCards: (list, type) => { const container = document.getElementById(`editor-blocks-territory`); const fragment = document.createDocumentFragment(); for (const el of list) { const card = document.createElement("div"); card.innerHTML = `

${el.title} ${el.number}

`; fragment.appendChild(card); } container.appendChild(fragment); } } }