Skip to content

Commit

Permalink
feat (ui): distribution list - error handling
Browse files Browse the repository at this point in the history
  • Loading branch information
karpovr committed Dec 21, 2023
1 parent 88aab83 commit da0bfa6
Showing 1 changed file with 48 additions and 25 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,27 +5,38 @@ import CommonUtil from '/js/common/util.js';
export const pre = async function (individual, template, container, mode, extra) {
const select = template.querySelector('.select-list');
select.addEventListener('change', async () => {
veda.user.aspect['v-s:chosenDistributionList'] = select.value;
await veda.user.aspect.save();
try {
veda.user.aspect['v-s:chosenDistributionList'] = select.value;
await veda.user.aspect.save();
} catch (error) {
console.error('Ошибка при сохранении выбранного списка рассылки:', error);
alert('Произошла ошибка при сохранении выбранного списка рассылки. Пожалуйста, попробуйте еще раз.');
}
});

async function populateSelect () {
clear(select);
const lists = individual['v-s:hasDistributionList'];
for (const list of lists) {
await list.load();
const option = document.createElement('option');
option.value = list.id;
option.label = list['rdfs:label'].map(CommonUtil.formatValue).filter(Boolean);
if (individual.hasValue('v-s:chosenDistributionList', list.id)) {
option.selected = true;
try {
clear(select);
const lists = individual['v-s:hasDistributionList'];
for (const list of lists) {
await list.load();
const option = document.createElement('option');
option.value = list.id;
option.label = list['rdfs:label'].map(CommonUtil.formatValue).filter(Boolean);
if (individual.hasValue('v-s:chosenDistributionList', list.id)) {
option.selected = true;
}
select.appendChild(option);
}
select.appendChild(option);
}
if (!individual.hasValue('v-s:chosenDistributionList')) {
individual['v-s:chosenDistributionList'] = individual['v-s:hasDistributionList'][0];
if (!individual.hasValue('v-s:chosenDistributionList')) {
individual['v-s:chosenDistributionList'] = individual['v-s:hasDistributionList'][0];
}
} catch (error) {
console.error('Ошибка при заполнении списка выбора:', error);
alert('Произошла ошибка при заполнении списка выбора. Пожалуйста, попробуйте еще раз.');
}
}

individual.on('v-s:hasDistributionList', populateSelect);
template.addEventListener('remove', () => individual.off('v-s:hasDistributionList', populateSelect));
populateSelect();
Expand All @@ -38,6 +49,7 @@ export const pre = async function (individual, template, container, mode, extra)
buttons.forEach((button) => button.classList.add('hide'));
}
}

individual.on('v-s:hasDistributionList', toggleChosenButtons);
template.addEventListener('remove', () => individual.off('v-s:hasDistributionList', toggleChosenButtons));
toggleChosenButtons();
Expand All @@ -47,7 +59,7 @@ export const post = async function (individual, template, container, mode, extra
const select = template.querySelector('.select-list');
template.querySelector('button.create').addEventListener('click', () => {
const {target, rel} = extra;
const distributionList = new IndividualModel;
const distributionList = new IndividualModel();
distributionList['rdf:type'] = 'v-s:DistributionList';
distributionList['rdfs:label'] = 'Новый список';
distributionList['v-s:hasItem'] = target[rel].slice();
Expand All @@ -61,14 +73,20 @@ export const post = async function (individual, template, container, mode, extra
template.querySelector('button.delete').addEventListener('click', async () => {
const distributionListUri = select.value;
const distributionList = new IndividualModel(distributionListUri);
await veda.user.aspect.removeValue('v-s:hasDistributionList', distributionList);
await veda.user.aspect.removeValue('v-s:chosenDistributionList', distributionList);
await veda.user.aspect.save();
await distributionList.remove();
try {
await veda.user.aspect.removeValue('v-s:hasDistributionList', distributionList);
await veda.user.aspect.removeValue('v-s:chosenDistributionList', distributionList);
await veda.user.aspect.save();
await distributionList.remove();
} catch (error) {
console.error('Ошибка при удалении списка рассылки:', error);
alert('Произошла ошибка при удалении списка рассылки. Пожалуйста, попробуйте еще раз.');
}
});

const modal = $('#confirm-modal-template').html();
const tmpl = 'v-s:DistributionListTemplate';

function editList (distributionList) {
const $modal = $(modal);
const cntr = $('.modal-body', $modal);
Expand All @@ -77,12 +95,17 @@ export const post = async function (individual, template, container, mode, extra
$('body').append($modal);
distributionList.present(cntr, tmpl, 'edit').then(() => {
$('.modal-footer > .ok', $modal).on('click', async () => {
await distributionList.save();
if (!veda.user.aspect.hasValue('v-s:hasDistributionList', distributionList)) {
await veda.user.aspect.addValue('v-s:hasDistributionList', distributionList);
await veda.user.aspect.save();
try {
await distributionList.save();
if (!veda.user.aspect.hasValue('v-s:hasDistributionList', distributionList)) {
await veda.user.aspect.addValue('v-s:hasDistributionList', distributionList);
await veda.user.aspect.save();
}
select.querySelector(`[value="${distributionList.id}"]`).label = distributionList['rdfs:label'].map(CommonUtil.formatValue).filter(Boolean);
} catch (error) {
console.error('Ошибка при сохранении списка рассылки:', error);
alert('Произошла ошибка при сохранении списка рассылки. Пожалуйста, попробуйте еще раз.');
}
select.querySelector(`[value="${distributionList.id}"]`).label = distributionList['rdfs:label'].map(CommonUtil.formatValue).filter(Boolean);
});
$('.modal-footer > .cancel', $modal).on('click', async () => {
await distributionList.reset();
Expand Down

0 comments on commit da0bfa6

Please sign in to comment.