bugfix: standardize loading states and add save spinner to Create pages (cherry picked from commit 7fb61714feea55d4c765b094c2e5f513ee5da3ba)
212 lines
8.3 KiB
Plaintext
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> |