Answer on candidate (#72)

* Add Penalty Seconds on tests

* Refactors and start of candidate answer relation

* Add breadcrumbs and UI consistency updates across backoffice templates

* Add breadcrumbs and UI consistency updates across backoffice templates

* Add Dutch translations for email verification and security messages

* Rector

* Refactor for code consistency and type safety assertions across repositories and entities

* Refactor candidate-related logic to optimize queries, improve template separation, and add "Answer Mapping" functionality.

* Cleanup

* Update Symfony

* Add coderabbit config

* Fixes from coderabbit
This commit is contained in:
2026-03-22 22:40:25 +01:00
committed by GitHub
parent d0896ceec7
commit 18a6090366
56 changed files with 2389 additions and 580 deletions
+3 -4
View File
@@ -1,5 +1,4 @@
import * as bootstrap from 'bootstrap'
import './bootstrap.js';
import 'bootstrap/dist/css/bootstrap.min.css'
import 'bootstrap/dist/css/bootstrap.min.css';
import './styles/backoffice.scss';
import './stimulus.js';
import './bootstrap.js';
+1 -5
View File
@@ -1,5 +1 @@
import { startStimulusApp } from '@symfony/stimulus-bundle';
const app = startStimulusApp();
// register any custom, 3rd party controllers here
// app.register('some_controller_name', SomeImportedController);
import * as bootstrap from 'bootstrap'
+1 -1
View File
@@ -2,7 +2,7 @@
"controllers": {
"@symfony/ux-turbo": {
"turbo-core": {
"enabled": false,
"enabled": true,
"fetch": "eager"
},
"mercure-turbo-stream": {
+16 -5
View File
@@ -1,17 +1,28 @@
import {Controller} from '@hotwired/stimulus';
import * as bootstrap from 'bootstrap'
import {Tooltip, Modal} from 'bootstrap';
export default class extends Controller {
static targets = ['clearModal', 'deleteModal'];
connect() {
const tooltipTriggerList = document.querySelectorAll('[data-bs-toggle="tooltip"]')
const tooltipList = [...tooltipTriggerList].map(tooltipTriggerEl => new bootstrap.Tooltip(tooltipTriggerEl))
this.tooltips = [];
const tooltipTriggerList = this.element.querySelectorAll('[data-bs-toggle="tooltip"]');
[...tooltipTriggerList].forEach(tooltipTriggerEl => {
this.tooltips.push(Tooltip.getOrCreateInstance(tooltipTriggerEl));
});
}
disconnect() {
this.tooltips.forEach(tooltip => tooltip.dispose());
}
clearQuiz() {
new bootstrap.Modal('#clearQuizModal').show();
const modal = Modal.getOrCreateInstance(this.clearModalTarget);
modal.show();
}
deleteQuiz() {
new bootstrap.Modal('#deleteQuizModal').show();
const modal = Modal.getOrCreateInstance(this.deleteModalTarget);
modal.show();
}
}
+8 -4
View File
@@ -2,9 +2,13 @@ import {Controller} from '@hotwired/stimulus';
export default class extends Controller {
next() {
const currentUrl = window.location.href;
const urlParts = currentUrl.split('/');
urlParts.pop();
window.location.href = urlParts.join('/');
const currentUrl = new URL(window.location.href);
const pathParts = currentUrl.pathname.split('/');
// Remove the last segment
pathParts.pop();
// Update the pathname
currentUrl.pathname = pathParts.join('/');
// Navigate
window.location.href = currentUrl.href;
}
}
+3 -5
View File
@@ -1,6 +1,4 @@
import 'bootstrap/dist/css/bootstrap.min.css';
import './styles/quiz.scss';
import './stimulus.js';
import './bootstrap.js';
import 'bootstrap/dist/css/bootstrap.min.css'
import * as bootstrap from 'bootstrap'
import './styles/app.scss'
+3
View File
@@ -0,0 +1,3 @@
import { startStimulusApp } from '@symfony/stimulus-bundle';
const app = startStimulusApp();
-2
View File
@@ -1,2 +0,0 @@
// register any custom, 3rd party controllers here
// app.register('some_controller_name', SomeImportedController);