some tweaks into PickAddressType

This commit is contained in:
Julien Fastré 2021-10-14 13:54:19 +02:00
parent 6fccc70e41
commit 9a02665053
6 changed files with 40 additions and 39 deletions

View File

@ -10,6 +10,7 @@ use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormInterface; use Symfony\Component\Form\FormInterface;
use Symfony\Component\Form\FormView; use Symfony\Component\Form\FormView;
use Symfony\Component\OptionsResolver\OptionsResolver; use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Contracts\Translation\TranslatorInterface;
/** /**
* Form type for picking an address. * Form type for picking an address.
@ -32,10 +33,14 @@ use Symfony\Component\OptionsResolver\OptionsResolver;
final class PickAddressType extends AbstractType final class PickAddressType extends AbstractType
{ {
private AddressToIdDataTransformer $addressToIdDataTransformer; private AddressToIdDataTransformer $addressToIdDataTransformer;
private TranslatorInterface $translator;
public function __construct(AddressToIdDataTransformer $addressToIdDataTransformer) public function __construct(
{ AddressToIdDataTransformer $addressToIdDataTransformer,
TranslatorInterface $translator
) {
$this->addressToIdDataTransformer = $addressToIdDataTransformer; $this->addressToIdDataTransformer = $addressToIdDataTransformer;
$this->translator = $translator;
} }
public function buildForm(FormBuilderInterface $builder, array $options) public function buildForm(FormBuilderInterface $builder, array $options)
@ -46,16 +51,20 @@ final class PickAddressType extends AbstractType
public function buildView(FormView $view, FormInterface $form, array $options) public function buildView(FormView $view, FormInterface $form, array $options)
{ {
$view->vars['uniqid'] = $view->vars['attr']['data-input-address'] =\uniqid('input_address_'); $view->vars['uniqid'] = $view->vars['attr']['data-input-address'] =\uniqid('input_address_');
$view->vars['attr']['data-use-valid-from'] = $options['useValidFrom']; $view->vars['attr']['data-use-valid-from'] = (int) $options['use_valid_from'];
$view->vars['attr']['data-use-valid-to'] = $options['useValidTo']; $view->vars['attr']['data-use-valid-to'] = (int) $options['use_valid_to'];
$view->vars['attr']['data-button-text-create'] = $this->translator->trans($options['button_text_create']);
$view->vars['attr']['data-button-text-update'] = $this->translator->trans($options['button_text_update']);
} }
public function configureOptions(OptionsResolver $resolver) public function configureOptions(OptionsResolver $resolver)
{ {
$resolver->setDefaults([ $resolver->setDefaults([
'class' => Address::class, 'class' => Address::class,
'useValidFrom' => false, 'use_valid_to' => false,
'useValidTo' => false, 'use_valid_from' => false,
'button_text_create' => 'Create an address',
'button_text_update' => 'Update address',
// reset default from hidden type // reset default from hidden type
'required' => true, 'required' => true,

View File

@ -267,6 +267,9 @@ export default {
title: { create: 'add_an_address_title', edit: 'edit_address' }, title: { create: 'add_an_address_title', edit: 'edit_address' },
openPanesInModal: true, openPanesInModal: true,
stickyActions: false, stickyActions: false,
// show a message when no address.
// if set to undefined, the value will be equivalent to false if stickyActions is false, true otherwise.
showMessageWhenNoAddress: undefined,
useDate: { useDate: {
validFrom: false, validFrom: false,
validTo: false validTo: false

View File

@ -15,7 +15,7 @@
<span v-if="forceRedirect">{{ $t('wait_redirection') }}</span> <span v-if="forceRedirect">{{ $t('wait_redirection') }}</span>
</div> </div>
<div v-if="noAddressWithStickyActions" class="mt-5"> <div v-if="showMessageWhenNoAddress" class="mt-5">
<p class="chill-no-data-statement"> <p class="chill-no-data-statement">
{{ $t('not_yet_address') }} {{ $t('not_yet_address') }}
</p> </p>
@ -50,8 +50,8 @@ export default {
}, },
props: [ props: [
'context', 'context',
'options',
'defaultz', 'defaultz',
'options',
'flag', 'flag',
'entity', 'entity',
'errorMsg', 'errorMsg',
@ -91,7 +91,11 @@ export default {
forceRedirect() { forceRedirect() {
return (!(this.context.backUrl === null || typeof this.context.backUrl === 'undefined')); return (!(this.context.backUrl === null || typeof this.context.backUrl === 'undefined'));
}, },
noAddressWithStickyActions() { showMessageWhenNoAddress() {
let showMessageWhenNoAddress = this.options.showMessageWhenNoAddress === undefined ? this.defaultz.showMessageWhenNoAddress : this.options.showMessageWhenNoAddress;
if (showMessageWhenNoAddress === true || showMessageWhenNoAddress === false) {
return !this.context.edit && !this.address.id && showMessageWhenNoAddress;
}
return !this.context.edit && !this.address.id && this.options.stickyActions; return !this.context.edit && !this.address.id && this.options.stickyActions;
} }
} }

View File

@ -14,8 +14,6 @@ inputs.forEach(el => {
addressId = el.value, addressId = el.value,
uniqid = el.dataset.inputAddress, uniqid = el.dataset.inputAddress,
container = document.querySelector('div[data-input-address-container="' + uniqid + '"]'), container = document.querySelector('div[data-input-address-container="' + uniqid + '"]'),
currentTarget = el,
i = 0,
isEdit = addressId !== '', isEdit = addressId !== '',
addressIdInt = addressId !== '' ? parseInt(addressId) : null addressIdInt = addressId !== '' ? parseInt(addressId) : null
; ;
@ -23,6 +21,7 @@ inputs.forEach(el => {
if (container === null) { if (container === null) {
throw Error("no container"); throw Error("no container");
} }
console.log('useValidFrom', el.dataset.useValidFrom === '1');
const app = createApp({ const app = createApp({
template: `<app v-bind:addAddress="this.addAddress" @address-created="associateToInput"></app>`, template: `<app v-bind:addAddress="this.addAddress" @address-created="associateToInput"></app>`,
@ -43,11 +42,11 @@ inputs.forEach(el => {
/// null value take default component value defined in AddAddress data() /// null value take default component value defined in AddAddress data()
button: { button: {
text: { text: {
create: null, create: el.dataset.buttonTextCreate || null,
edit: null, edit: el.dataset.buttonTextUpdate || null,
}, },
size: null, size: null,
displayText: false displayText: true
}, },
/// Modal title text if create or edit address (trans chain, see i18n) /// Modal title text if create or edit address (trans chain, see i18n)
@ -61,11 +60,12 @@ inputs.forEach(el => {
/// Display actions buttons of panes in a sticky-form-button navbar /// Display actions buttons of panes in a sticky-form-button navbar
stickyActions: false, stickyActions: false,
showMessageWhenNoAddress: true,
/// Use Date fields /// Use Date fields
useDate: { useDate: {
validFrom: el.dataset.useValidFrom === 'true', //boolean, default: false validFrom: el.dataset.useValidFrom === '1' || false, //boolean, default: false
validTo: el.dataset.useValidTo === 'true' //boolean, default: false validTo: el.dataset.useValidTo === '1' || false, //boolean, default: false
}, },
/// Don't display show renderbox Address: showPane display only a button /// Don't display show renderbox Address: showPane display only a button
@ -76,7 +76,6 @@ inputs.forEach(el => {
}, },
methods: { methods: {
associateToInput(payload) { associateToInput(payload) {
console.log(payload);
el.value = payload.addressId; el.value = payload.addressId;
} }
} }

View File

@ -84,6 +84,8 @@ address more:
extra: "" extra: ""
distribution: cedex distribution: cedex
Create a new address: Créer une nouvelle adresse Create a new address: Créer une nouvelle adresse
Create an address: Créer une adresse
Update address: Modifier l'adresse
#serach #serach
Your search is empty. Please provide search terms.: La recherche est vide. Merci de fournir des termes de recherche. Your search is empty. Please provide search terms.: La recherche est vide. Merci de fournir des termes de recherche.

View File

@ -89,28 +89,6 @@ class ThirdPartyType extends AbstractType
]) ])
; ;
/*
$builder
/*
->add('address', HiddenType::class)
->get('address')
->addModelTransformer(new CallbackTransformer(
function (?Address $address): string {
if (null === $address) {
return '';
}
return $address->getId();
},
function (?string $addressId): ?Address {
if (null === $addressId) {
return null;
}
return $this->om
->getRepository(Address::class)
->findOneBy(['id' => (int) $addressId]);
}
))*/
// Contact Person ThirdParty (child) // Contact Person ThirdParty (child)
if (ThirdParty::KIND_CONTACT === $options['kind'] || ThirdParty::KIND_CHILD === $options['kind']) { if (ThirdParty::KIND_CONTACT === $options['kind'] || ThirdParty::KIND_CHILD === $options['kind']) {
$builder $builder
@ -152,6 +130,12 @@ class ThirdPartyType extends AbstractType
->add('address', PickAddressType::class, [ ->add('address', PickAddressType::class, [
'label' => 'Address' 'label' => 'Address'
]) ])
->add('address2', PickAddressType::class, [
'label' => 'Address',
'use_valid_from' => true,
'use_valid_to' => true,
'mapped' => false,
])
->add('nameCompany', TextType::class, [ ->add('nameCompany', TextType::class, [
'label' => 'thirdparty.NameCompany', 'label' => 'thirdparty.NameCompany',
'required' => false 'required' => false