Merge add_toasters: handle 422 method and add toaster into course editor

See https://gitlab.com/Chill-Projet/chill-bundles/-/merge_requests/221

Squashed commit of the following:

commit 4f68f83aba74a88898779037aeb24d45c622759e
Author: Julien Fastré <julien.fastre@champs-libres.coop>
Date:   Thu Nov 25 12:07:37 2021 +0100

    scope in course editor: show toast when error, instead of restoring the
    previous state

commit fdca8c1c87a4972bb6107bb16ab76844a28cae72
Merge: 53d6e68f8 b97f49782
Author: Julien Fastré <julien.fastre@champs-libres.coop>
Date:   Wed Nov 24 17:39:27 2021 +0100

    Merge remote-tracking branch 'origin/add_toasters' into add_toasters

commit 53d6e68f8c5e158ac1848403d18146690ffeacf2
Author: Julien Fastré <julien.fastre@champs-libres.coop>
Date:   Wed Nov 24 17:38:52 2021 +0100

    better validation messages

commit b97f497822fa6f6057e3b1cf3697044192ea9052
Author: Julie Lenaerts <julielenaerts@gmail.com>
Date:   Wed Nov 24 17:36:59 2021 +0100

    methods added to api.js again so they can be imported in other bundles still. To be refactored later with general makeFetch method?

commit e6089f75b4f66669cbd84f496c3b867901de9c8c
Author: Julien Fastré <julien.fastre@champs-libres.coop>
Date:   Wed Nov 24 17:20:05 2021 +0100

    fix validator for participation overlaps

commit e47e6741b9f179dae63f39a596b7ba7410b3ac88
Merge: 25a80fcb2 05385509e
Author: Julien Fastré <julien.fastre@champs-libres.coop>
Date:   Wed Nov 24 16:31:50 2021 +0100

    Merge remote-tracking branch 'origin/master' into add_toasters

commit 25a80fcb26cfb3ab7afab0abc1fcb6c0d0af7a6d
Author: Julie Lenaerts <julielenaerts@gmail.com>
Date:   Tue Nov 23 18:22:35 2021 +0100

    error object/message changed if not 422 or 403

commit 0c602cee8c127ab7f0723819a691a98c4e0615e2
Author: Julie Lenaerts <julielenaerts@gmail.com>
Date:   Tue Nov 23 17:13:47 2021 +0100

    Toasts displayed with differentiation between different errors

    error objects created accordingly

commit 252e57a06da1101e4ebc025974b247c472b8c2ed
Author: Julie Lenaerts <julielenaerts@gmail.com>
Date:   Tue Nov 23 17:12:55 2021 +0100

    generic makeFetch implemented almost everywhere

    api.js file no longer needs to contain a separate function to make an api call.

commit 8532eeee7656f6f9761168fb5e2102778ee932b7
Author: Julie Lenaerts <julielenaerts@gmail.com>
Date:   Tue Nov 23 17:10:48 2021 +0100

    Moved generic api methods into one file apiMethods.js

     imports adapted throughout bundles

commit c44bd5e75b32d5fbc8951247324ebf5fb85f3b37
Author: Julie Lenaerts <julielenaerts@gmail.com>
Date:   Tue Nov 23 11:27:24 2021 +0100

    migration deleted

commit dbeee090f46b3653c306a1825dcb05637e1f9b31
Author: Julie Lenaerts <julielenaerts@gmail.com>
Date:   Tue Nov 23 11:27:13 2021 +0100

    toast plugin initialized with options in the root

commit ec3919e357ee26f6c5016360d2083d19688217f4
Merge: 1ab401b5d b8889ed58
Author: Julie Lenaerts <julielenaerts@gmail.com>
Date:   Tue Nov 23 10:52:24 2021 +0100

    merge conflicts fixed

commit 1ab401b5d55a28f9c027ee539da58ef1da3d797c
Author: Julie Lenaerts <julielenaerts@gmail.com>
Date:   Tue Nov 23 10:40:02 2021 +0100

    add options when vue toast plugin is loaded

commit ad4e630bdd87c8ec16455bab0c2b053c1d838050
Author: Julie Lenaerts <julielenaerts@gmail.com>
Date:   Mon Nov 22 18:58:44 2021 +0100

    fixes to throw and catch error

commit 1c19748866d738bcb9e336f1035d9d78c6941d34
Author: Julie Lenaerts <julielenaerts@gmail.com>
Date:   Wed Nov 17 20:22:06 2021 +0100

    toast added to banner

commit 35949b90532b60161e14e815a78b3b69b053b62d
Author: Julie Lenaerts <julielenaerts@gmail.com>
Date:   Wed Nov 17 20:16:35 2021 +0100

    few more actions using makeFetch

commit e94c13e396f496565955294aec360db37f92374b
Author: Julie Lenaerts <julielenaerts@gmail.com>
Date:   Wed Nov 17 19:48:58 2021 +0100

    For accompanyingcourse app general makeFetch + displayToast implemented

commit 35eac75edf2c8d39ee2a04f119bb99a946fe3ea9
Author: Julie Lenaerts <julielenaerts@gmail.com>
Date:   Wed Nov 17 17:12:31 2021 +0100

    general makeFetch method implemented + toasts displayed in progress

commit 541bb10547bd7b96815a22a755ecf7f809d8cc87
Author: Julie Lenaerts <julielenaerts@gmail.com>
Date:   Wed Nov 17 12:36:20 2021 +0100

    general fetch method adjusted and tested on addParticipation: works

commit b7f27e8079bc815d88ffc925ec7a4fae3fba5f02
Author: Julie Lenaerts <julielenaerts@gmail.com>
Date:   Wed Nov 17 11:50:09 2021 +0100

    changelog updated

commit 028519ee3e93991aeb3131656e5f17e728ebdb1c
Author: Julie Lenaerts <julielenaerts@gmail.com>
Date:   Wed Nov 17 11:42:55 2021 +0100

    adjustment of error message using templating render

commit 508139b4476a46028a40b0b5300a8c65f79414a9
Author: Julie Lenaerts <julielenaerts@gmail.com>
Date:   Wed Nov 17 11:41:52 2021 +0100

    toast display for 422 errors on participations, requestor, resources + bugfix in requestor component (display of 'remove' btn if non-anonymous

commit 3e5d4862fcbbf5708f52c0038bf030dc0cbae5bb
Author: Julie Lenaerts <julielenaerts@gmail.com>
Date:   Tue Nov 16 15:38:03 2021 +0100

    debugging fetch method

commit 8b971a2357aac952ea6cd9487da20f4064c26a8d
Author: Julie Lenaerts <julielenaerts@gmail.com>
Date:   Tue Nov 16 14:31:45 2021 +0100

    general fetch method in _abstratAPI and testcase implementation; still needs to take care of commit into store

commit 05488740ab138ed279a4626310c5427d9f732793
Author: Julie Lenaerts <julielenaerts@gmail.com>
Date:   Tue Nov 16 11:13:28 2021 +0100

    testcase: toaster working when adding a resource to an accompanying course. Needs to be generalized

commit 5050e8a516107710216fa11aafcf852c52e1eb03
Author: Julie Lenaerts <julielenaerts@gmail.com>
Date:   Tue Nov 16 09:22:36 2021 +0100

    start of toaster popup

commit b8889ed58d3abb68d1c2859b31bf7428addda36e
Author: Julie Lenaerts <julielenaerts@gmail.com>
Date:   Mon Nov 22 18:58:44 2021 +0100

    fixes to throw and catch error

commit 0c017eb908e65919876d3bed69d3daa27699f2cc
Author: Julie Lenaerts <julielenaerts@gmail.com>
Date:   Wed Nov 17 20:22:06 2021 +0100

    toast added to banner

commit 80d8c5f12be4b0cfcded2948f385b4e3627e9afb
Author: Julie Lenaerts <julielenaerts@gmail.com>
Date:   Wed Nov 17 20:16:35 2021 +0100

    few more actions using makeFetch

commit 9cfcc61d995f75651902af97fe640f00f994ce9b
Author: Julie Lenaerts <julielenaerts@gmail.com>
Date:   Wed Nov 17 19:48:58 2021 +0100

    For accompanyingcourse app general makeFetch + displayToast implemented

commit 2855b0293a4a3fef2baf22fa035316bac13abf3f
Author: Julie Lenaerts <julielenaerts@gmail.com>
Date:   Wed Nov 17 17:12:31 2021 +0100

    general makeFetch method implemented + toasts displayed in progress

commit febbc8b9cdd9ec811546ce2948e2e1bded7c2116
Author: Julie Lenaerts <julielenaerts@gmail.com>
Date:   Wed Nov 17 12:36:20 2021 +0100

    general fetch method adjusted and tested on addParticipation: works

commit 16b59681b97cf995689aa464ae2a310c3efbb603
Author: Julie Lenaerts <julielenaerts@gmail.com>
Date:   Wed Nov 17 11:50:09 2021 +0100

    changelog updated

commit 41df29bdef84af010892708bfd0e37ff826f7aee
Author: Julie Lenaerts <julielenaerts@gmail.com>
Date:   Wed Nov 17 11:42:55 2021 +0100

    adjustment of error message using templating render

commit 8c98fe602c26e61285f12f5f7d58d646655f4caa
Author: Julie Lenaerts <julielenaerts@gmail.com>
Date:   Wed Nov 17 11:41:52 2021 +0100

    toast display for 422 errors on participations, requestor, resources + bugfix in requestor component (display of 'remove' btn if non-anonymous

commit 689ca8aa0ac249d577fe2ead5b3fcc0298dbad90
Author: Julie Lenaerts <julielenaerts@gmail.com>
Date:   Tue Nov 16 15:38:03 2021 +0100

    debugging fetch method

commit 07234c5fa996fb9f0352719ee366b34b093807eb
Author: Julie Lenaerts <julielenaerts@gmail.com>
Date:   Tue Nov 16 14:31:45 2021 +0100

    general fetch method in _abstratAPI and testcase implementation; still needs to take care of commit into store

commit 2a482516e952aa720b5aa8b4cb68ab33f93ce47b
Author: Julie Lenaerts <julielenaerts@gmail.com>
Date:   Tue Nov 16 11:13:28 2021 +0100

    testcase: toaster working when adding a resource to an accompanying course. Needs to be generalized

commit b7dcc5e7d4b1489a8edc175a0c2c1b0d649c6c0f
Author: Julie Lenaerts <julielenaerts@gmail.com>
Date:   Tue Nov 16 09:22:36 2021 +0100

    start of toaster popup
This commit is contained in:
2021-11-25 12:11:22 +01:00
parent 8a0d16dc53
commit 983cfb646c
29 changed files with 713 additions and 470 deletions

View File

@@ -0,0 +1,106 @@
/**
* Generic api method that can be adapted to any fetch request
*/
const makeFetch = (method, url, body) => {
return fetch(url, {
method: method,
headers: {
'Content-Type': 'application/json;charset=utf-8'
},
body: (body !== null) ? JSON.stringify(body) : null
})
.then(response => {
if (response.ok) {
return response.json();
}
if (response.status === 422) {
return response.json().then(response => {
throw ValidationException(response)
});
}
if (response.status === 403) {
return response.json().then(() => {
throw AccessException();
});
}
throw {
name: 'Exception',
sta: response.status,
txt: response.statusText,
err: new Error(),
violations: response.body
};
});
}
/**
* Fetch results with certain parameters
*/
const _fetchAction = (page, uri, params) => {
const item_per_page = 50;
if (params === undefined) {
params = {};
}
let url = uri + '?' + new URLSearchParams({ item_per_page, page, ...params });
return fetch(url, {
method: 'GET',
headers: {
'Content-Type': 'application/json;charset=utf-8'
},
}).then(response => {
if (response.ok) { return response.json(); }
throw Error({ m: response.statusText });
});
};
const fetchResults = async (uri, params) => {
let promises = [],
page = 1;
let firstData = await _fetchAction(page, uri, params);
promises.push(Promise.resolve(firstData.results));
if (firstData.pagination.more) {
do {
page = ++page;
promises.push(_fetchAction(page, uri, params).then(r => Promise.resolve(r.results)));
} while (page * firstData.pagination.items_per_page < firstData.count)
}
return Promise.all(promises).then(values => values.flat());
};
const fetchScopes = () => {
return fetchResults('/api/1.0/main/scope.json');
};
/**
* Error objects to be thrown
*/
const ValidationException = (response) => {
const error = {};
error.name = 'ValidationException';
error.violations = response.violations.map((violation) => `${violation.title}`);
return error;
}
const AccessException = () => {
const error = {};
error.name = 'AccessException';
error.violations = ['You are no longer permitted to perform this action'];
return error;
}
export {
makeFetch,
fetchResults,
fetchScopes
}

View File

@@ -1,39 +1,39 @@
const _fetchAction = (page, uri, params) => {
const item_per_page = 50;
if (params === undefined) {
params = {};
}
let url = uri + '?' + new URLSearchParams({ item_per_page, page, ...params });
// const _fetchAction = (page, uri, params) => {
// const item_per_page = 50;
// if (params === undefined) {
// params = {};
// }
// let url = uri + '?' + new URLSearchParams({ item_per_page, page, ...params });
return fetch(url, {
method: 'GET',
headers: {
'Content-Type': 'application/json;charset=utf-8'
},
}).then(response => {
if (response.ok) { return response.json(); }
throw Error({ m: response.statusText });
});
};
// return fetch(url, {
// method: 'GET',
// headers: {
// 'Content-Type': 'application/json;charset=utf-8'
// },
// }).then(response => {
// if (response.ok) { return response.json(); }
// throw Error({ m: response.statusText });
// });
// };
const fetchResults = async (uri, params) => {
let promises = [],
page = 1;
let firstData = await _fetchAction(page, uri, params);
// const fetchResults = async (uri, params) => {
// let promises = [],
// page = 1;
// let firstData = await _fetchAction(page, uri, params);
promises.push(Promise.resolve(firstData.results));
// promises.push(Promise.resolve(firstData.results));
if (firstData.pagination.more) {
do {
page = ++page;
promises.push(_fetchAction(page, uri, params).then(r => Promise.resolve(r.results)));
} while (page * firstData.pagination.items_per_page < firstData.count)
}
// if (firstData.pagination.more) {
// do {
// page = ++page;
// promises.push(_fetchAction(page, uri, params).then(r => Promise.resolve(r.results)));
// } while (page * firstData.pagination.items_per_page < firstData.count)
// }
return Promise.all(promises).then(values => values.flat());
};
// return Promise.all(promises).then(values => values.flat());
// };
export {
fetchResults
};
// export {
// fetchResults
// };

View File

@@ -1,9 +1,9 @@
import { fetchResults } from 'ChillMainAssets/lib/api/download.js';
// import { fetchResults } from 'ChillMainAssets/lib/api/download.js';
const fetchScopes = () => {
return fetchResults('/api/1.0/main/scope.json');
};
// const fetchScopes = () => {
// return fetchResults('/api/1.0/main/scope.json');
// };
export {
fetchScopes
};
// export {
// fetchScopes
// };

View File

@@ -13,7 +13,6 @@ export default {
methods : {
toggleBlur: function(e){
if(e.target.matches('.toggle')){
console.log(e);
e.target.previousElementSibling.classList.toggle("blur");
e.target.classList.toggle("fa-eye");
e.target.classList.toggle("fa-eye-slash");