Allow Pick*Type to submit the form when selection an entity, and apply inside Event

This commit is contained in:
Julien Fastré 2023-11-28 12:35:19 +01:00
parent e902b6d409
commit 9b9c2774ad
Signed by: julienfastre
GPG Key ID: BDE2190974723FCB
10 changed files with 48 additions and 26 deletions

View File

@ -411,20 +411,17 @@ final class EventController extends AbstractController
] ]
); );
$builder->add('person_id', PickPersonDynamicType::class, ['as_id' => true, 'multiple' => false]); $builder->add('person_id', PickPersonDynamicType::class, [
'as_id' => true,
'multiple' => false,
'submit_on_adding_new_entity' => true,
'label' => 'Add a participation',
]);
$builder->add('event_id', HiddenType::class, [ $builder->add('event_id', HiddenType::class, [
'data' => $event->getId(), 'data' => $event->getId(),
]); ]);
$builder->add(
'submit',
SubmitType::class,
[
'label' => 'Add a participation',
]
);
return $builder->getForm(); return $builder->getForm();
} }

View File

@ -101,7 +101,12 @@ final readonly class EventListController
] ]
); );
$builder->add('person_id', PickPersonDynamicType::class, ['as_id' => true, 'multiple' => false]); $builder->add('person_id', PickPersonDynamicType::class, [
'as_id' => true,
'multiple' => false,
'submit_on_adding_new_entity' => true,
'label' => 'Add a participation',
]);
$builder->add('event_id', HiddenType::class, [ $builder->add('event_id', HiddenType::class, [
'data' => $event->getId(), 'data' => $event->getId(),

View File

@ -60,18 +60,13 @@
{% endif %} {% endif %}
</div> </div>
{% endif %} {% endif %}
{#
<div class="item-row"> <div class="item-row">
<div class="item-col"> <div class="item-col">
{{ form_start(eventForms[e.id]) }} {{ form_start(eventForms[e.id]) }}
{{ form_widget(eventForms[e.id].person_id) }} {{ form_widget(eventForms[e.id].person_id) }}
<ul class="record_actions">
<li><button type="submit" class="btn btn-create"></button></li>
</ul>
{{ form_end(eventForms[e.id]) }} {{ form_end(eventForms[e.id]) }}
</div> </div>
</div> </div>
#}
<div class="item-row separator"> <div class="item-row separator">
<div class="item-col item-meta"> <div class="item-col item-meta">
</div> </div>

View File

@ -136,11 +136,8 @@
'class' : 'custom-select', 'class' : 'custom-select',
'style': 'min-width: 15em; max-width: 18em; display: inline-block;' 'style': 'min-width: 15em; max-width: 18em; display: inline-block;'
}} ) }} }} ) }}
<div class="input-group-append">
{{ form_widget(form_add_participation_by_person.submit, { 'attr' : { 'class' : 'btn btn-create' } } ) }}
</div> </div>
</div> <input type="hidden" name="returnPath" value="{{ app.request.requestUri }}" />
{{ form_rest(form_add_participation_by_person) }}
{{ form_end(form_add_participation_by_person) }} {{ form_end(form_add_participation_by_person) }}
</div> </div>

View File

@ -43,6 +43,7 @@ class PickUserDynamicType extends AbstractType
$view->vars['uniqid'] = uniqid('pick_user_dyn'); $view->vars['uniqid'] = uniqid('pick_user_dyn');
$view->vars['suggested'] = []; $view->vars['suggested'] = [];
$view->vars['as_id'] = true === $options['as_id'] ? '1' : '0'; $view->vars['as_id'] = true === $options['as_id'] ? '1' : '0';
$view->vars['submit_on_adding_new_entity'] = true === $options['submit_on_adding_new_entity'] ? '1' : '0';
foreach ($options['suggested'] as $user) { foreach ($options['suggested'] as $user) {
$view->vars['suggested'][] = $this->normalizer->normalize($user, 'json', ['groups' => 'read']); $view->vars['suggested'][] = $this->normalizer->normalize($user, 'json', ['groups' => 'read']);
@ -58,7 +59,9 @@ class PickUserDynamicType extends AbstractType
->setDefault('suggested', []) ->setDefault('suggested', [])
// if set to true, only the id will be set inside the content. The denormalization will not work. // if set to true, only the id will be set inside the content. The denormalization will not work.
->setDefault('as_id', false) ->setDefault('as_id', false)
->setAllowedTypes('as_id', ['bool']); ->setAllowedTypes('as_id', ['bool'])
->setDefault('submit_on_adding_new_entity', false)
->setAllowedTypes('submit_on_adding_new_entity', ['bool']);
} }
public function getBlockPrefix() public function getBlockPrefix()

View File

@ -25,7 +25,9 @@ function loadDynamicPicker(element) {
null : [ JSON.parse(input.value) ] null : [ JSON.parse(input.value) ]
) )
suggested = JSON.parse(el.dataset.suggested), suggested = JSON.parse(el.dataset.suggested),
as_id = parseInt(el.dataset.asId) === 1; as_id = parseInt(el.dataset.asId) === 1,
submit_on_adding_new_entity = parseInt(el.dataset.submitOnAddingNewEntity) === 1
label = el.dataset.label;
if (!isMultiple) { if (!isMultiple) {
if (input.value === '[]'){ if (input.value === '[]'){
@ -40,6 +42,7 @@ function loadDynamicPicker(element) {
':picked="picked" ' + ':picked="picked" ' +
':uniqid="uniqid" ' + ':uniqid="uniqid" ' +
':suggested="notPickedSuggested" ' + ':suggested="notPickedSuggested" ' +
':label="label" ' +
'@addNewEntity="addNewEntity" ' + '@addNewEntity="addNewEntity" ' +
'@removeEntity="removeEntity"></pick-entity>', '@removeEntity="removeEntity"></pick-entity>',
components: { components: {
@ -51,8 +54,10 @@ function loadDynamicPicker(element) {
types: JSON.parse(el.dataset.types), types: JSON.parse(el.dataset.types),
picked: picked === null ? [] : picked, picked: picked === null ? [] : picked,
uniqid: el.dataset.uniqid, uniqid: el.dataset.uniqid,
suggested: suggested, suggested,
as_id: as_id, as_id,
submit_on_adding_new_entity,
label,
} }
}, },
computed: { computed: {
@ -92,6 +97,10 @@ function loadDynamicPicker(element) {
} }
} }
} }
if (this.submit_on_adding_new_entity) {
input.form.submit();
}
}, },
removeEntity({entity}) { removeEntity({entity}) {
if (-1 === this.suggested.findIndex(e => e.type === entity.type && e.id === entity.id)) { if (-1 === this.suggested.findIndex(e => e.type === entity.type && e.id === entity.id)) {

View File

@ -56,6 +56,10 @@ export default {
suggested: { suggested: {
type: Array, type: Array,
default: [] default: []
},
label: {
type: String,
required: false,
} }
}, },
emits: ['addNewEntity', 'removeEntity'], emits: ['addNewEntity', 'removeEntity'],
@ -80,6 +84,10 @@ export default {
}; };
}, },
translatedListOfTypes() { translatedListOfTypes() {
if (this.label !== '') {
return this.label;
}
let trans = []; let trans = [];
this.types.forEach(t => { this.types.forEach(t => {
if (this.$props.multiple) { if (this.$props.multiple) {

View File

@ -257,7 +257,9 @@
data-multiple="{{ form.vars['multiple'] }}" data-multiple="{{ form.vars['multiple'] }}"
data-uniqid="{{ form.vars['uniqid'] }}" data-uniqid="{{ form.vars['uniqid'] }}"
data-suggested="{{ form.vars['suggested']|json_encode|escape('html_attr') }}" data-suggested="{{ form.vars['suggested']|json_encode|escape('html_attr') }}"
data-as-id="{{ form.vars['as_id'] }}"></div> data-as-id="{{ form.vars['as_id'] }}"
data-submit-on-adding-new-entity="{{ form.vars['submit_on_adding_new_entity'] }}"
data-label="{{ form.vars['label']|trans|escape('html_attr') }}"></div>
{% endblock %} {% endblock %}
{% block pick_postal_code_widget %} {% block pick_postal_code_widget %}

View File

@ -42,6 +42,7 @@ class PickPersonDynamicType extends AbstractType
$view->vars['uniqid'] = uniqid('pick_user_dyn'); $view->vars['uniqid'] = uniqid('pick_user_dyn');
$view->vars['suggested'] = []; $view->vars['suggested'] = [];
$view->vars['as_id'] = true === $options['as_id'] ? '1' : '0'; $view->vars['as_id'] = true === $options['as_id'] ? '1' : '0';
$view->vars['submit_on_adding_new_entity'] = true === $options['submit_on_adding_new_entity'] ? '1' : '0';
foreach ($options['suggested'] as $person) { foreach ($options['suggested'] as $person) {
$view->vars['suggested'][] = $this->normalizer->normalize($person, 'json', ['groups' => 'read']); $view->vars['suggested'][] = $this->normalizer->normalize($person, 'json', ['groups' => 'read']);
@ -56,7 +57,9 @@ class PickPersonDynamicType extends AbstractType
->setDefault('compound', false) ->setDefault('compound', false)
->setDefault('suggested', []) ->setDefault('suggested', [])
->setDefault('as_id', false) ->setDefault('as_id', false)
->setAllowedTypes('as_id', ['bool']); ->setAllowedTypes('as_id', ['bool'])
->setDefault('submit_on_adding_new_entity', false)
->setAllowedTypes('submit_on_adding_new_entity', ['bool']);
} }
public function getBlockPrefix() public function getBlockPrefix()

View File

@ -42,6 +42,7 @@ class PickThirdpartyDynamicType extends AbstractType
$view->vars['uniqid'] = uniqid('pick_user_dyn'); $view->vars['uniqid'] = uniqid('pick_user_dyn');
$view->vars['suggested'] = []; $view->vars['suggested'] = [];
$view->vars['as_id'] = true === $options['as_id'] ? '1' : '0'; $view->vars['as_id'] = true === $options['as_id'] ? '1' : '0';
$view->vars['submit_on_adding_new_entity'] = true === $options['submit_on_adding_new_entity'] ? '1' : '0';
foreach ($options['suggested'] as $tp) { foreach ($options['suggested'] as $tp) {
$view->vars['suggested'][] = $this->normalizer->normalize($tp, 'json', ['groups' => 'read']); $view->vars['suggested'][] = $this->normalizer->normalize($tp, 'json', ['groups' => 'read']);
@ -56,7 +57,9 @@ class PickThirdpartyDynamicType extends AbstractType
->setDefault('compound', false) ->setDefault('compound', false)
->setDefault('suggested', []) ->setDefault('suggested', [])
->setDefault('as_id', false) ->setDefault('as_id', false)
->setAllowedTypes('as_id', ['bool']); ->setAllowedTypes('as_id', ['bool'])
->setDefault('submit_on_adding_new_entity', false)
->setAllowedTypes('submit_on_adding_new_entity', ['bool']);
} }
public function getBlockPrefix() public function getBlockPrefix()