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 = `
`;
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 = `
`;
fragment.appendChild(card);
}
container.appendChild(fragment);
}
}
}