Feat: Updating Shipping Method with new variables, for correct box env vars
This commit is contained in:
@@ -4,6 +4,7 @@ namespace Modules\Core\Shipping\Filament\Pages;
|
||||
|
||||
use Filament\Schemas\Schema;
|
||||
use Filament\Schemas\Components\Utilities\Get;
|
||||
use Filament\Forms\Components\Select;
|
||||
use Filament\Forms\Components\TextInput;
|
||||
use Filament\Tables\Columns\TextColumn;
|
||||
use Filament\Tables\Table;
|
||||
@@ -11,6 +12,7 @@ use Illuminate\Database\Eloquent\Model;
|
||||
use Lunar\Shipping\Filament\Resources\ShippingZoneResource\Pages\ManageShippingRates as BaseManageShippingRates;
|
||||
use Lunar\Shipping\Models\ShippingMethod;
|
||||
use Lunar\Shipping\Models\ShippingRate;
|
||||
use Modules\Core\Shipping\Support\ShippingMethodName;
|
||||
|
||||
/**
|
||||
* Bound in place of the vendor ManageShippingRates page via the container
|
||||
@@ -33,6 +35,16 @@ use Lunar\Shipping\Models\ShippingRate;
|
||||
* null-guard, which crashes on any rate with no basePrices row — routine
|
||||
* for a live rate that has never had a fallback price configured. Same
|
||||
* logic, just null-safe.
|
||||
*
|
||||
* Also replaces the vendor's `shipping_method_id` Select, which uses
|
||||
* ->relationship(titleAttribute: 'name') — Filament builds that option
|
||||
* list with `orderBy('name')`/`pluck('name', ...)` against the DB, but
|
||||
* ShippingMethod.name is now a locale-keyed JSON column (see database/
|
||||
* migrations/..._make_shipping_methods_name_translatable.php) that
|
||||
* Postgres has no default ordering operator for, crashing with
|
||||
* "could not identify an ordering operator for type json" the moment
|
||||
* this page loads. Resolved app-side instead via ShippingMethodName,
|
||||
* same as every other read site for this column.
|
||||
*/
|
||||
class ManageShippingRates extends BaseManageShippingRates
|
||||
{
|
||||
@@ -41,10 +53,30 @@ class ManageShippingRates extends BaseManageShippingRates
|
||||
$schema = parent::form($schema);
|
||||
|
||||
return $schema->components(
|
||||
$this->labelPriceFieldsAsFallbackWhenLive($schema->getComponents())
|
||||
$this->labelPriceFieldsAsFallbackWhenLive(
|
||||
$this->replaceShippingMethodField($schema->getComponents())
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
private function replaceShippingMethodField(array $components): array
|
||||
{
|
||||
return array_map(function ($component) {
|
||||
if (method_exists($component, 'getName') && $component->getName() === 'shipping_method_id') {
|
||||
return Select::make('shipping_method_id')
|
||||
->label($component->getLabel())
|
||||
->required()
|
||||
->live()
|
||||
->options(fn () => ShippingMethod::all()
|
||||
->mapWithKeys(fn (ShippingMethod $method) => [$method->id => ShippingMethodName::resolve($method)]))
|
||||
->searchable()
|
||||
->columnSpan(2);
|
||||
}
|
||||
|
||||
return $component;
|
||||
}, $components);
|
||||
}
|
||||
|
||||
private function labelPriceFieldsAsFallbackWhenLive(array $components): array
|
||||
{
|
||||
$isLive = fn (Get $get) => static::methodChargeBy($get('shipping_method_id')) === 'live';
|
||||
@@ -86,6 +118,14 @@ class ManageShippingRates extends BaseManageShippingRates
|
||||
|
||||
return $table->columns(
|
||||
array_map(function ($column) {
|
||||
if (method_exists($column, 'getName') && $column->getName() === 'shippingMethod.name') {
|
||||
return TextColumn::make('shippingMethod.name')
|
||||
->label(__('lunarpanel.shipping::relationmanagers.shipping_rates.table.shipping_method.label'))
|
||||
->state(fn (ShippingRate $record) => $record->shippingMethod
|
||||
? ShippingMethodName::resolve($record->shippingMethod)
|
||||
: null);
|
||||
}
|
||||
|
||||
if (method_exists($column, 'getName') && $column->getName() === 'basePrices.0') {
|
||||
return TextColumn::make('basePrices.0')
|
||||
->label(__('lunarpanel.shipping::relationmanagers.shipping_rates.table.price.label'))
|
||||
|
||||
Reference in New Issue
Block a user