Find this useful? Enter your email to receive occasional updates for securing PHP code.
Signing you up...
Thank you for signing up!
PHP Decode
{!! view_render_event('bagisto.admin.catalog.product.edit.form.types.grouped.before', ['pr..
Decoded Output download
<? {!! view_render_event('bagisto.admin.catalog.product.edit.form.types.grouped.before', ['product' => $product]) !!}
<v-group-products :errors="errors"></v-group-products>
{!! view_render_event('bagisto.admin.catalog.product.edit.form.types.grouped.after', ['product' => $product]) !!}
@pushOnce('scripts')
<script
type="text/x-template"
id="v-group-products-template"
>
<div class="box-shadow relative rounded bg-white dark:bg-gray-900">
<!-- Panel Header -->
<div class="mb-2.5 flex justify-between gap-5 p-4">
<div class="flex flex-col gap-2">
<p class="text-base font-semibold text-gray-800 dark:text-white">
@lang('admin::app.catalog.products.edit.types.grouped.title')
</p>
<p class="text-xs font-medium text-gray-500 dark:text-gray-300">
@lang('admin::app.catalog.products.edit.types.grouped.info')
</p>
</div>
<!-- Add Button -->
<div class="flex items-center gap-x-1">
<div
class="secondary-button"
@click="$refs.productSearch.openDrawer()"
>
@lang('admin::app.catalog.products.edit.types.grouped.add-btn')
</div>
</div>
</div>
<!-- Panel Content -->
<div
class="grid"
v-if="groupProducts.length"
>
<!-- Draggable Products -->
<draggable
ghost-class="draggable-ghost"
handle=".icon-drag"
v-bind="{animation: 200}"
:list="groupProducts"
item-key="id"
>
<template #item="{ element, index }">
<div class="flex justify-between gap-2.5 border-b border-slate-300 p-4 dark:border-gray-800">
<!-- Information -->
<div class="flex gap-2.5">
<!-- Drag Icon -->
<i class="icon-drag cursor-grab text-xl text-gray-600 transition-all dark:text-gray-300"></i>
<!-- Image -->
<div
class="relative h-[60px] max-h-[60px] w-full max-w-[60px] overflow-hidden rounded"
:class="{'overflow-hidden rounded border border-dashed border-gray-300 dark:border-gray-800 dark:mix-blend-exclusion dark:invert': ! element.associated_product.images.length}"
>
<template v-if="! element.associated_product.images.length">
<img src="{{ bagisto_asset('images/product-placeholders/front.svg') }}">
<p class="absolute bottom-1.5 w-full text-center text-[6px] font-semibold text-gray-400">
@lang('admin::app.catalog.products.edit.types.grouped.image-placeholder')
</p>
</template>
<template v-else>
<img :src="element.associated_product.images[0].url">
</template>
</div>
<!-- Details -->
<div class="grid place-content-start gap-1.5">
<p class="text-base font-semibold text-gray-800 dark:text-white">
@{{ element.associated_product.name }}
</p>
<p class="text-gray-600 dark:text-gray-300">
@{{ "@lang('admin::app.catalog.products.edit.types.grouped.sku')".replace(':sku', element.associated_product.sku) }}
</p>
</div>
</div>
<!-- Actions -->
<div class="grid place-content-start gap-1 ltr:text-right rtl:text-left">
<p class="font-semibold text-gray-800 dark:text-white">
@{{ $admin.formatPrice(element.associated_product.price) }}
</p>
<!-- Hidden Input -->
<input
type="hidden"
:name="'links[' + (element.id ? element.id : 'link_' + index) + '][associated_product_id]'"
:value="element.associated_product.id"
/>
<input
type="hidden"
:name="'links[' + (element.id ? element.id : 'link_' + index) + '][sort_order]'"
:value="index"
/>
<x-admin::form.control-group class="!mb-0">
<x-admin::form.control-group.label class="required !block">
@lang('admin::app.catalog.products.edit.types.grouped.default-qty')
</x-admin::form.control-group.label>
<v-field
type="text"
:name="'links[' + (element.id ? element.id : 'link_' + index) + '][qty]'"
v-model="element.qty"
class="min-h-[39px] w-[86px] rounded-md border px-3 py-2 text-sm text-gray-600 transition-all hover:border-gray-400 dark:border-gray-800 dark:bg-gray-900 dark:text-gray-300"
:class="[errors['links[' + (element.id ? element.id : 'link_' + index) + '][qty]'] ? 'border border-red-600 hover:border-red-600' : '']"
rules="required|numeric|min_value:1"
label="@lang('admin::app.catalog.products.edit.types.grouped.default-qty')"
>
</v-field>
<v-error-message
:name="'links[' + (element.id ? element.id : 'link_' + index) + '][qty]'"
v-slot="{ message }"
>
<p class="mt-1 text-xs italic text-red-600">
@{{ message }}
</p>
</v-error-message>
</x-admin::form.control-group>
<p
class="cursor-pointer text-red-600 transition-all hover:underline"
@click="remove(element)"
>
@lang('admin::app.catalog.products.edit.types.grouped.delete')
</p>
</div>
</div>
</template>
</draggable>
</div>
<!-- For Empty Variations -->
<div
class="grid justify-center justify-items-center gap-3.5 px-2.5 py-10"
v-else
>
<!-- Placeholder Image -->
<img
src="{{ bagisto_asset('images/icon-add-product.svg') }}"
class="h-20 w-20 dark:mix-blend-exclusion dark:invert"
/>
<!-- Add Variants Information -->
<div class="flex flex-col items-center gap-1.5">
<p class="text-base font-semibold text-gray-400">
@lang('admin::app.catalog.products.edit.types.grouped.empty-title')
</p>
<p class="text-gray-400">
@lang('admin::app.catalog.products.edit.types.grouped.empty-info')
</p>
</div>
<!-- Add Row Button -->
<div
class="secondary-button text-sm"
@click="$refs.productSearch.openDrawer()"
>
@lang('admin::app.catalog.products.edit.types.grouped.add-btn')
</div>
</div>
<!-- Product Search Blade Component -->
<x-admin::products.search
ref="productSearch"
::added-product-ids="addedProductIds"
::query-params="{type: 'simple'}"
@onProductAdded="addSelected($event)"
/>
</div>
</script>
<script type="module">
app.component('v-group-products', {
template: '#v-group-products-template',
props: ['errors'],
data() {
return {
groupProducts: @json($product->grouped_products()->with(['associated_product.inventory_indices', 'associated_product.images'])->orderBy('sort_order', 'asc')->get())
}
},
computed: {
addedProductIds() {
return this.groupProducts.map(product => product.associated_product.id);
}
},
methods: {
addSelected(selectedProducts) {
let self = this;
selectedProducts.forEach(function (product) {
self.groupProducts.push({
associated_product: product,
qty: 1,
});
});
},
remove(product) {
this.$emitter.emit('open-confirm-modal', {
agree: () => {
let index = this.groupProducts.indexOf(product)
this.groupProducts.splice(index, 1);
}
});
},
}
});
</script>
@endPushOnce ?>
Did this file decode correctly?
Original Code
{!! view_render_event('bagisto.admin.catalog.product.edit.form.types.grouped.before', ['product' => $product]) !!}
<v-group-products :errors="errors"></v-group-products>
{!! view_render_event('bagisto.admin.catalog.product.edit.form.types.grouped.after', ['product' => $product]) !!}
@pushOnce('scripts')
<script
type="text/x-template"
id="v-group-products-template"
>
<div class="box-shadow relative rounded bg-white dark:bg-gray-900">
<!-- Panel Header -->
<div class="mb-2.5 flex justify-between gap-5 p-4">
<div class="flex flex-col gap-2">
<p class="text-base font-semibold text-gray-800 dark:text-white">
@lang('admin::app.catalog.products.edit.types.grouped.title')
</p>
<p class="text-xs font-medium text-gray-500 dark:text-gray-300">
@lang('admin::app.catalog.products.edit.types.grouped.info')
</p>
</div>
<!-- Add Button -->
<div class="flex items-center gap-x-1">
<div
class="secondary-button"
@click="$refs.productSearch.openDrawer()"
>
@lang('admin::app.catalog.products.edit.types.grouped.add-btn')
</div>
</div>
</div>
<!-- Panel Content -->
<div
class="grid"
v-if="groupProducts.length"
>
<!-- Draggable Products -->
<draggable
ghost-class="draggable-ghost"
handle=".icon-drag"
v-bind="{animation: 200}"
:list="groupProducts"
item-key="id"
>
<template #item="{ element, index }">
<div class="flex justify-between gap-2.5 border-b border-slate-300 p-4 dark:border-gray-800">
<!-- Information -->
<div class="flex gap-2.5">
<!-- Drag Icon -->
<i class="icon-drag cursor-grab text-xl text-gray-600 transition-all dark:text-gray-300"></i>
<!-- Image -->
<div
class="relative h-[60px] max-h-[60px] w-full max-w-[60px] overflow-hidden rounded"
:class="{'overflow-hidden rounded border border-dashed border-gray-300 dark:border-gray-800 dark:mix-blend-exclusion dark:invert': ! element.associated_product.images.length}"
>
<template v-if="! element.associated_product.images.length">
<img src="{{ bagisto_asset('images/product-placeholders/front.svg') }}">
<p class="absolute bottom-1.5 w-full text-center text-[6px] font-semibold text-gray-400">
@lang('admin::app.catalog.products.edit.types.grouped.image-placeholder')
</p>
</template>
<template v-else>
<img :src="element.associated_product.images[0].url">
</template>
</div>
<!-- Details -->
<div class="grid place-content-start gap-1.5">
<p class="text-base font-semibold text-gray-800 dark:text-white">
@{{ element.associated_product.name }}
</p>
<p class="text-gray-600 dark:text-gray-300">
@{{ "@lang('admin::app.catalog.products.edit.types.grouped.sku')".replace(':sku', element.associated_product.sku) }}
</p>
</div>
</div>
<!-- Actions -->
<div class="grid place-content-start gap-1 ltr:text-right rtl:text-left">
<p class="font-semibold text-gray-800 dark:text-white">
@{{ $admin.formatPrice(element.associated_product.price) }}
</p>
<!-- Hidden Input -->
<input
type="hidden"
:name="'links[' + (element.id ? element.id : 'link_' + index) + '][associated_product_id]'"
:value="element.associated_product.id"
/>
<input
type="hidden"
:name="'links[' + (element.id ? element.id : 'link_' + index) + '][sort_order]'"
:value="index"
/>
<x-admin::form.control-group class="!mb-0">
<x-admin::form.control-group.label class="required !block">
@lang('admin::app.catalog.products.edit.types.grouped.default-qty')
</x-admin::form.control-group.label>
<v-field
type="text"
:name="'links[' + (element.id ? element.id : 'link_' + index) + '][qty]'"
v-model="element.qty"
class="min-h-[39px] w-[86px] rounded-md border px-3 py-2 text-sm text-gray-600 transition-all hover:border-gray-400 dark:border-gray-800 dark:bg-gray-900 dark:text-gray-300"
:class="[errors['links[' + (element.id ? element.id : 'link_' + index) + '][qty]'] ? 'border border-red-600 hover:border-red-600' : '']"
rules="required|numeric|min_value:1"
label="@lang('admin::app.catalog.products.edit.types.grouped.default-qty')"
>
</v-field>
<v-error-message
:name="'links[' + (element.id ? element.id : 'link_' + index) + '][qty]'"
v-slot="{ message }"
>
<p class="mt-1 text-xs italic text-red-600">
@{{ message }}
</p>
</v-error-message>
</x-admin::form.control-group>
<p
class="cursor-pointer text-red-600 transition-all hover:underline"
@click="remove(element)"
>
@lang('admin::app.catalog.products.edit.types.grouped.delete')
</p>
</div>
</div>
</template>
</draggable>
</div>
<!-- For Empty Variations -->
<div
class="grid justify-center justify-items-center gap-3.5 px-2.5 py-10"
v-else
>
<!-- Placeholder Image -->
<img
src="{{ bagisto_asset('images/icon-add-product.svg') }}"
class="h-20 w-20 dark:mix-blend-exclusion dark:invert"
/>
<!-- Add Variants Information -->
<div class="flex flex-col items-center gap-1.5">
<p class="text-base font-semibold text-gray-400">
@lang('admin::app.catalog.products.edit.types.grouped.empty-title')
</p>
<p class="text-gray-400">
@lang('admin::app.catalog.products.edit.types.grouped.empty-info')
</p>
</div>
<!-- Add Row Button -->
<div
class="secondary-button text-sm"
@click="$refs.productSearch.openDrawer()"
>
@lang('admin::app.catalog.products.edit.types.grouped.add-btn')
</div>
</div>
<!-- Product Search Blade Component -->
<x-admin::products.search
ref="productSearch"
::added-product-ids="addedProductIds"
::query-params="{type: 'simple'}"
@onProductAdded="addSelected($event)"
/>
</div>
</script>
<script type="module">
app.component('v-group-products', {
template: '#v-group-products-template',
props: ['errors'],
data() {
return {
groupProducts: @json($product->grouped_products()->with(['associated_product.inventory_indices', 'associated_product.images'])->orderBy('sort_order', 'asc')->get())
}
},
computed: {
addedProductIds() {
return this.groupProducts.map(product => product.associated_product.id);
}
},
methods: {
addSelected(selectedProducts) {
let self = this;
selectedProducts.forEach(function (product) {
self.groupProducts.push({
associated_product: product,
qty: 1,
});
});
},
remove(product) {
this.$emitter.emit('open-confirm-modal', {
agree: () => {
let index = this.groupProducts.indexOf(product)
this.groupProducts.splice(index, 1);
}
});
},
}
});
</script>
@endPushOnce
Function Calls
None |
Stats
MD5 | da254ccd21dff07cdad7da6dded5fa1d |
Eval Count | 0 |
Decode Time | 95 ms |