Fix functioning of show hide

This commit is contained in:
Julie Lenaerts 2024-07-23 19:59:10 +02:00
parent 50bd9f32c3
commit 0a6f3a99da
4 changed files with 77 additions and 63 deletions

View File

@ -141,23 +141,25 @@ class WorkflowStepType extends AbstractType
'mapped' => false,
'multiple' => false,
'expanded' => true,
'label' => 'workflow.Type of signature',
'label' => 'workflow.signature_zone.type of signature',
'choices' => [
'person' => 'person',
'user' => 'user',
'workflow.signature_zone.persons' => 'person',
'workflow.signature_zone.user' => 'user',
],
])
->add('futurePersonSignatures', PickPersonDynamicType::class, [
'label' => 'workflow.person signatures',
'label' => 'workflow.signature_zone.person signatures',
'multiple' => true,
'data' => []
])
->add('futureUserSignature', PickUserDynamicType::class, [
'label' => 'workflow.user signatures',
'label' => 'workflow.signature_zone.user signature',
'multiple' => false,
])
->add('futureDestUsers', PickUserDynamicType::class, [
'label' => 'workflow.dest for next steps',
'multiple' => true,
'data' => [],
'suggested' => $options['suggested_users'],
])
->add('futureCcUsers', PickUserDynamicType::class, [

View File

@ -7,69 +7,20 @@ window.addEventListener('DOMContentLoaded', function() {
personSignatureField = document.querySelector('#person-signature-field');
userSignatureField = document.querySelector('#user-signature-field');
signatureTypeChoices = document.querySelector('#signature-type-choice');
;
personChoice = document.querySelector('#workflow_step_isPersonOrUserSignature_0');
userChoice = document.querySelector('#workflow_step_isPersonOrUserSignature_1');
signatureZone = document.querySelector('#signature-zone');
;
let
transitionFilterContainer = document.querySelector('#transitionFilter'),
transitionsContainer = document.querySelector('#transitions')
;
// ShowHide instance for personSignatureField
new ShowHide({
debug: false,
froms: [signatureTypeChoices],
container: [personSignatureField],
test: function(froms, event) {
// console.log('froms', froms)
for (let container of froms) {
if (container.children.length === 0) {
console.log('im empty dont show person or user picker');
return false
} else {
return container.querySelector('input[value="person"]').checked;
}
}
return false;
},
});
// ShowHide instance for signatureTypeChoices. This should always be present in the DOM and we toggle visibility.
// The field is not mapped and so not submitted with the form. Without it's presence upon DOM loading other show hides do not function well.
signatureTypeChoices.style.display = 'none';
// ShowHide instance for userSignatureField
new ShowHide({
debug: false,
froms: [signatureTypeChoices],
container: [userSignatureField],
test: function(froms, event) {
for (let container of froms) {
if (container.children.length === 0) {
console.log('im empty dont show person or user picker');
return false
} else {
return container.querySelector('input[value="person"]').checked;
}
}
return false;
},
});
// ShowHide instance for signatureTypeChoices
new ShowHide({
debug: false,
load_event: null,
froms: [divTransitions],
container: [signatureTypeChoices],
test: function(froms, event) {
for (let transition of froms) {
for (let input of transition.querySelectorAll('input')) {
if (input.checked) {
const inputData = JSON.parse(input.getAttribute('data-is-signature'))
return inputData.includes('person') && inputData.includes('user');
}
}
}
return false;
}
});
// ShowHide instance for future dest users
new ShowHide({
@ -82,7 +33,16 @@ window.addEventListener('DOMContentLoaded', function() {
for (let input of transition.querySelectorAll('input')) {
if (input.checked) {
const inputData = JSON.parse(input.getAttribute('data-is-signature'))
return !(inputData.includes('person') || inputData.includes('user'));
if (inputData.includes('person') || inputData.includes('user')) {
signatureTypeChoices.style.display = '';
return false;
} else {
personChoice.checked = false
userChoice.checked = false
signatureTypeChoices.style.display = 'none';
return true;
}
}
}
}
@ -90,6 +50,53 @@ window.addEventListener('DOMContentLoaded', function() {
}
});
// ShowHide signature zone
new ShowHide({
debug: false,
load_event: null,
froms: [divTransitions],
container: [signatureZone],
test: function(froms, event) {
for (let transition of froms) {
for (let input of transition.querySelectorAll('input')) {
if (input.checked) {
const inputData = JSON.parse(input.getAttribute('data-is-signature'))
if (inputData.includes('person') || inputData.includes('user')) {
signatureTypeChoices.style.display = '';
return true;
}
}
}
}
return false;
}
});
// ShowHides for personSignatureField or userSignatureField within signature zone
new ShowHide({
debug: false,
froms: [signatureTypeChoices],
container: [personSignatureField],
test: function(froms, event) {
for (let container of froms) {
return personChoice.checked;
}
return false;
},
});
new ShowHide({
debug: false,
froms: [signatureTypeChoices],
container: [userSignatureField],
test: function(froms, event) {
for (let container of froms) {
return userChoice.checked;
}
return false;
},
});
if (null !== divTransitions) {
new ShowHide({
load_event: null,

View File

@ -58,7 +58,7 @@
{{ form_row(transition_form.transition) }}
</div>
<div id="futureSignatures">
<div id="signature-zone">
<div id="signature-type-choice">
{{ form_row(transition_form.isPersonOrUserSignature) }}
{{ form_errors(transition_form.isPersonOrUserSignature) }}

View File

@ -536,6 +536,11 @@ workflow:
docType: Type de document
docNumber: Numéro de document
docExpiration: Date d'expiration
type of signature: Type de signature
person signatures: Selectionner usagers pour signer
user signature: Selectionner utilisateur pour signer
persons: Usagers
user: Utilisateur
Subscribe final: Recevoir une notification à l'étape finale