mirror of
https://github.com/Sylius/Sylius.git
synced 2026-07-14 17:10:53 +00:00
[AdminBundle] Add LiveComponent for ProductVariant
This commit is contained in:
parent
6396f39ee9
commit
aae7407fa7
7 changed files with 119 additions and 10 deletions
|
|
@ -2,7 +2,14 @@ sylius_twig_hooks:
|
|||
hooks:
|
||||
'sylius_admin.product_variant.create.content':
|
||||
form:
|
||||
template: '@SyliusAdmin/product_variant/form.html.twig'
|
||||
component: 'sylius_admin:product_variant:form'
|
||||
props:
|
||||
resource: '@=_context.resource'
|
||||
product: '@=_context.resource.getProduct()'
|
||||
form: '@=_context.form'
|
||||
template: '@SyliusAdmin/product_variant/form.html.twig'
|
||||
configuration:
|
||||
render_rest: false
|
||||
priority: 0
|
||||
|
||||
'sylius_admin.product_variant.create.content.header':
|
||||
|
|
|
|||
|
|
@ -2,8 +2,14 @@ sylius_twig_hooks:
|
|||
hooks:
|
||||
'sylius_admin.product_variant.update.content':
|
||||
form:
|
||||
template: '@SyliusAdmin/product_variant/form.html.twig'
|
||||
component: 'sylius_admin:product_variant:form'
|
||||
props:
|
||||
resource: '@=_context.resource'
|
||||
product: '@=_context.resource.getProduct()'
|
||||
form: '@=_context.form'
|
||||
template: '@SyliusAdmin/product_variant/form.html.twig'
|
||||
configuration:
|
||||
render_rest: false
|
||||
method: 'PUT'
|
||||
priority: 0
|
||||
|
||||
|
|
|
|||
|
|
@ -63,6 +63,8 @@ sylius_admin_promotion_coupon_generate:
|
|||
_controller: sylius.controller.promotion_coupon::generateAction
|
||||
_sylius:
|
||||
template: "@SyliusAdmin/promotion_coupon/generate.html.twig"
|
||||
form:
|
||||
type: Sylius\Bundle\AdminBundle\Form\Type\PromotionCouponGeneratorInstructionType
|
||||
section: admin
|
||||
redirect:
|
||||
route: sylius_admin_promotion_coupon_index
|
||||
|
|
|
|||
|
|
@ -0,0 +1,34 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<!--
|
||||
|
||||
This file is part of the Sylius package.
|
||||
|
||||
(c) Sylius Sp. z o.o.
|
||||
|
||||
For the full copyright and license information, please view the LICENSE
|
||||
file that was distributed with this source code.
|
||||
|
||||
-->
|
||||
|
||||
<container
|
||||
xmlns="http://symfony.com/schema/dic/services"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd"
|
||||
>
|
||||
<services>
|
||||
<service
|
||||
id="sylius_admin.twig.component.product_variant.form"
|
||||
class="Sylius\Bundle\AdminBundle\Twig\Component\ProductVariant\FormComponent"
|
||||
>
|
||||
<argument type="service" id="sylius.repository.product_variant" />
|
||||
<argument type="service" id="form.factory" />
|
||||
<argument>%sylius.model.product_variant.class%</argument>
|
||||
<argument>Sylius\Bundle\AdminBundle\Form\Type\ProductVariantType</argument>
|
||||
<argument type="service" id="sylius.factory.product_variant" />
|
||||
<argument type="service" id="sylius.repository.product" />
|
||||
|
||||
<tag name="sylius.live_component.admin" key="sylius_admin:product_variant:form" />
|
||||
</service>
|
||||
</services>
|
||||
</container>
|
||||
|
|
@ -0,0 +1,64 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Sylius package.
|
||||
*
|
||||
* (c) Sylius Sp. z o.o.
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Sylius\Bundle\AdminBundle\Twig\Component\ProductVariant;
|
||||
|
||||
use Sylius\Bundle\UiBundle\Twig\Component\ResourceFormComponentTrait;
|
||||
use Sylius\Bundle\UiBundle\Twig\Component\TemplatePropTrait;
|
||||
use Sylius\Component\Core\Model\ProductInterface;
|
||||
use Sylius\Component\Core\Model\ProductVariantInterface;
|
||||
use Sylius\Component\Core\Repository\ProductRepositoryInterface;
|
||||
use Sylius\Component\Product\Factory\ProductVariantFactoryInterface;
|
||||
use Sylius\Resource\Doctrine\Persistence\RepositoryInterface;
|
||||
use Sylius\Resource\Model\ResourceInterface;
|
||||
use Symfony\Component\Form\FormFactoryInterface;
|
||||
use Symfony\UX\LiveComponent\Attribute\AsLiveComponent;
|
||||
use Symfony\UX\LiveComponent\Attribute\LiveProp;
|
||||
|
||||
#[AsLiveComponent]
|
||||
class FormComponent
|
||||
{
|
||||
/** @use ResourceFormComponentTrait<ProductVariantInterface> */
|
||||
use ResourceFormComponentTrait;
|
||||
use TemplatePropTrait;
|
||||
|
||||
#[LiveProp(hydrateWith: 'hydrateProduct', dehydrateWith: 'dehydrateProduct', fieldName: 'product')]
|
||||
public ProductInterface $product;
|
||||
|
||||
public function __construct(
|
||||
RepositoryInterface $productVariantRepository,
|
||||
FormFactoryInterface $formFactory,
|
||||
string $resourceClass,
|
||||
string $formClass,
|
||||
private readonly ProductVariantFactoryInterface $productFactory,
|
||||
private readonly ProductRepositoryInterface $productRepository,
|
||||
) {
|
||||
$this->initialize($productVariantRepository, $formFactory, $resourceClass, $formClass);
|
||||
}
|
||||
|
||||
public function hydrateProduct(mixed $value): ?ProductInterface
|
||||
{
|
||||
return $this->productRepository->find($value);
|
||||
}
|
||||
|
||||
public function dehydrateProduct(ProductInterface $product): mixed
|
||||
{
|
||||
return $product->getId();
|
||||
}
|
||||
|
||||
/** @return ProductVariantInterface */
|
||||
protected function createResource(): ResourceInterface
|
||||
{
|
||||
return $this->productFactory->createForProduct($this->product);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,11 +1,7 @@
|
|||
{% if form is not defined %}
|
||||
{% set form = hookable_metadata.context.form %}
|
||||
{% endif %}
|
||||
|
||||
{% form_theme form '@SyliusAdmin/shared/form_theme.html.twig' %}
|
||||
|
||||
<div class="container-xl">
|
||||
{{ form_start(form, {'attr': {'class': 'ui loadable form', 'novalidate': 'novalidate', 'id': form.vars.id}}) }}
|
||||
<div class="container-xl" {{ attributes }}>
|
||||
{{ form_start(form, {'attr': {'novalidate': 'novalidate', 'id': form.vars.id}}) }}
|
||||
<div class="row">
|
||||
{% if hookable_metadata.configuration.method is defined %}
|
||||
<input type="hidden" name="_method" value="{{ hookable_metadata.configuration.method }}" />
|
||||
|
|
@ -13,7 +9,7 @@
|
|||
{{ form_errors(form, sylius_test_form_attribute('form-validation-errors')) }}
|
||||
{{ form_widget(form._token) }}
|
||||
|
||||
{% hook 'form' with { form } %}
|
||||
{% hook 'form' with { form, resource } %}
|
||||
</div>
|
||||
{{ form_end(form, {render_rest: hookable.configuration.render_rest|default(false)}) }}
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ class PromotionCouponController extends ResourceController
|
|||
throw new NotFoundHttpException('Promotion not found.');
|
||||
}
|
||||
|
||||
$form = $this->container->get('form.factory')->create(PromotionCouponGeneratorInstructionType::class);
|
||||
$form = $this->container->get('form.factory')->create((string) $configuration->getFormType());
|
||||
$form->handleRequest($request);
|
||||
|
||||
if ($form->isSubmitted() && $form->isValid()) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue