Files
AdamuSw/src/Web/Shared/Components/ItemEdit/ItemEdit.razor
sven-n 30feae5a26 Merge pull request #819 from eduardosmaniotto/bugfix/merchant-and-loading
bugfix: standardize loading states and add save spinner to Create pages
(cherry picked from commit 7fb61714feea55d4c765b094c2e5f513ee5da3ba)
2026-07-23 11:37:22 +03:00

212 lines
8.3 KiB
Plaintext

@using MUnique.OpenMU.DataModel
@using MUnique.OpenMU.DataModel.Configuration.Items
@using MUnique.OpenMU.GameLogic
@using MUnique.OpenMU.Web.Shared.Services
@if (this._viewModel is null)
{
return;
}
<PageTitle>@this._viewModel.Definition?.Name.ToString()</PageTitle>
<EditForm Model="_viewModel" OnValidSubmit="OnValidSubmit">
<DataAnnotationsValidator />
<ByteField @bind-Value="@_viewModel.ItemSlot" />
<LookupField @bind-Value="@_viewModel.Definition" />
@if (this._viewModel.Definition?.MaximumItemLevel > 0)
{
<ByteField @bind-Value="@this._viewModel.Level" Min="0" Max="@this._viewModel.Definition?.MaximumItemLevel" />
}
@if (this.Item.IsWearable())
{
<NumberField @bind-Value="@this._viewModel.Durability" Min="1" Max="@this.Item.GetMaximumDurabilityOfOnePiece()"/>
}
else if (this.Item.IsStackable())
{
<ByteField @bind-Value="@this._viewModel.Amount" Min="1" Max="@(this.Item.Definition?.Durability ?? 1)" />
}
@if (this._viewModel.Definition?.IsTrainablePet() ?? false)
{
<NumberField @bind-Value="@this._viewModel.PetExperience" />
}
@if (this.Item.CanHaveSkill())
{
<BooleanField @bind-Value="@this._viewModel.HasSkill" />
}
@if (this._viewModel.PossibleLuckOption is not null)
{
<BooleanField @bind-Value="@this._viewModel.HasLuck" />
}
@if (this._viewModel.PossibleAncientSets.Any())
{
<LookupField
@bind-Value="@this._viewModel.AncientSet"
ExplicitLookupController="@(new EnumerableLookupController(this._viewModel.PossibleAncientSets))" />
@if (this._viewModel.AncientBonus is { } ancientBonus)
{
<div class="mb-3">
<label for="ancientBonusLevel">@MUnique.OpenMU.Web.Shared.Properties.Resources.AncientOptionLevel: </label>
<InputNumber id="ancientBonusLevel" class="form-control" min="1" max="2" @bind-Value="@ancientBonus.Level" />
<span>@MUnique.OpenMU.Web.Shared.Properties.Resources.Bonus: @ancientBonus</span>
</div>
}
}
@if (this._viewModel.PossibleExcellentOptions.Any())
{
<MultiLookupField
@bind-Value="@this._viewModel.ExcellentOptions"
CaptionFactory=@this.CaptionFactory
ExplicitLookupController="@(new EnumerableLookupController(this._viewModel.PossibleExcellentOptions.SelectMany(o => o.PossibleOptions)))" />
}
@if (this._viewModel.PossibleWingOptions.Any())
{
<MultiLookupField
@bind-Value="@this._viewModel.WingOptions"
CaptionFactory=@this.CaptionFactory
ExplicitLookupController="@(new EnumerableLookupController(this._viewModel.PossibleWingOptions.SelectMany(o => o.PossibleOptions)))" />
}
@if (this._viewModel.PossibleNormalOptions.Any())
{
@if (this._viewModel.PossibleNormalOptions.Count() > 1)
{
<LookupField
TObject="IncreasableItemOption"
@bind-Value="@this._viewModel.NormalOption"
CaptionFactory="@this.CaptionFactory"
ExplicitLookupController="@(new EnumerableLookupController(this._viewModel.PossibleNormalOptions))" />
}
else
{
<BooleanField @bind-Value="@this._viewModel.HasOption" />
}
@if (this._viewModel.NormalOptionLink is { } optionLink
&& optionLink.ItemOption?.LevelDependentOptions.Max(o => o.Level) is { } maxLevel and > 1)
{
<select class="form-select mb-3" @bind="@optionLink.Level">
@for (int level = 1; level < maxLevel + 1; level++)
{
@if ((optionLink.ItemOption.LevelDependentOptions.FirstOrDefault(ldo => ldo.Level == level)?.PowerUpDefinition
?? optionLink.ItemOption.PowerUpDefinition)
is { } powerUp && $"+{powerUp.Boost?.ConstantValue.Value} {powerUp.TargetAttribute}" is { } caption)
{
@if (level == optionLink.Level)
{
<option value="@level" selected>@caption</option>
}
else
{
<option value="@level">@caption</option>
}
}
}
</select>
}
}
@if (this._viewModel.PossibleHarmonyOptions.Any())
{
<LookupField
TObject="IncreasableItemOption"
@bind-Value="@this._viewModel.HarmonyOption"
CaptionFactory="@this.CaptionFactory"
ExplicitLookupController="@(new EnumerableLookupController(this._viewModel.PossibleHarmonyOptions))" />
@if (this._viewModel.HarmonyOptionLink is { } optionLink
&& optionLink.ItemOption?.LevelDependentOptions.Count > 1
&& optionLink.ItemOption?.LevelDependentOptions.Max(o => o.Level) is { } maxLevel and > 1
&& optionLink.ItemOption?.LevelDependentOptions.Min(o => o.Level) is { } minLevel and >= 0)
{
<select class="form-select mb-3" @bind="@optionLink.Level">
@for (int level = minLevel; level < maxLevel + 1; level++)
{
@if ((optionLink.ItemOption.LevelDependentOptions.FirstOrDefault(ldo => ldo.Level == level)?.PowerUpDefinition
?? optionLink.ItemOption.PowerUpDefinition) is { } powerUp
&& $"+{powerUp.Boost?.ConstantValue.Value} {powerUp.TargetAttribute} (Level {level})" is { } caption)
{
@if (level == optionLink.Level)
{
<option value="@level" selected>@caption</option>
}
else
{
<option value="@level">@caption</option>
}
}
}
</select>
}
}
@if (this._viewModel.Definition?.MaximumSockets > 0)
{
<NumberField
Min="1"
Max="@this._viewModel.Definition.MaximumSockets"
@bind-Value="@this._viewModel.SocketCount" />
<ul class="socket">
@foreach(var socket in _viewModel.Sockets.Where(s => s.SocketIndex < this._viewModel.SocketCount))
{
<li>
<LookupField
Label="@socket.Caption"
@bind-Value="@socket.Option"
ExplicitLookupController=@(new EnumerableLookupController(this._viewModel.PossibleSocketOptions))></LookupField>
@if (socket.Option is { } socketOption)
{
<NumberField
Min="1"
Max="@socketOption.Option.LevelDependentOptions.Max(o => o.Level)"
Label="@(Resources.OptionLevel + ":")" @bind-Value="socket.Level" />
}
else
{
<div></div>
}
</li>
}
</ul>
}
@if (this._viewModel.PossibleSocketBonusOptions.Any())
{
<LookupField
TObject="IncreasableItemOption"
@bind-Value="@this._viewModel.SocketBonusOption"
CaptionFactory="@this.CaptionFactory"
ExplicitLookupController="@(new EnumerableLookupController(this._viewModel.PossibleSocketBonusOptions))" />
}
@if (this._viewModel.PossibleFenrirOptions.Any())
{
<LookupField
@bind-Value="@this._viewModel.FenrirOption"
ExplicitLookupController="@(new EnumerableLookupController(ItemViewModel.FenrirOptions))" />
}
@if (this._viewModel.PossibleGuardianOption is { })
{
<BooleanField Label=@MUnique.OpenMU.Web.Shared.Properties.Resources.HasGuardianOption @bind-Value="@this._viewModel.HasGuardianOption" />
}
<ValidationSummary />
<div class="form-actions">
@if (this.OnValidSubmit.HasDelegate)
{
<button type="submit" class="btn btn-primary">@Resources.Save</button>
}
@if (this.OnCancel.HasDelegate)
{
<button type="button" class="btn btn-secondary" @onclick=@this.OnCancel>Cancel</button>
}
</div>
</EditForm>