Skip to content

Commit e4203dd

Browse files
authored
fix(OtpInput): should show mask char in readonly/disabled status (#6212)
* refactor: 重构 DOM 使用 input 元素 * chore: 移除 console.log 语句 * refactor: 增加只读禁用逻辑 * style: 精简样式 * refactor: 格式化逻辑 * test: 更新单元测试
1 parent 80ef545 commit e4203dd

File tree

5 files changed

+12
-26
lines changed

5 files changed

+12
-26
lines changed

src/BootstrapBlazor/Components/Input/OtpInput.razor

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,8 @@
44
<div @attributes="AdditionalAttributes" id="@Id" class="@ClassString">
55
@for (var index = 0; index < Digits; index++)
66
{
7-
@if(IsReadonly || IsDisabled)
8-
{
9-
<span class="@ItemClassString">
10-
@GetValueString(index)
11-
</span>
12-
}
13-
else
14-
{
15-
<input type="@TypeString" class="@InputClassString"
16-
maxlength="@MaxLengthString" inputmode="@TypeModeString" placeholder="@PlaceHolder"
17-
value="@GetValueString(index)" />
18-
}
7+
<input type="@TypeString" class="@InputClassString"
8+
maxlength="@MaxLengthString" inputmode="@TypeModeString" placeholder="@PlaceHolder"
9+
value="@GetValueString(index)" readonly="@ReadonlyString" disabled="@DisabledString" />
1910
}
2011
</div>

src/BootstrapBlazor/Components/Input/OtpInput.razor.cs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,6 @@ public partial class OtpInput
3939
.AddClassFromAttributes(AdditionalAttributes)
4040
.Build();
4141

42-
private string? ItemClassString => CssBuilder.Default("bb-opt-item")
43-
.AddClass("disabled", IsDisabled)
44-
.AddClass(ValidCss)
45-
.Build();
46-
4742
private string? InputClassString => CssBuilder.Default("bb-opt-item")
4843
.AddClass("input-number-fix", Type == OtpInputType.Number)
4944
.AddClass(ValidCss)
@@ -68,6 +63,10 @@ public partial class OtpInput
6863
_ => null
6964
};
7065

66+
private string? ReadonlyString => IsReadonly ? "readonly" : null;
67+
68+
private string? DisabledString => IsDisabled ? "disabled" : null;
69+
7170
private char[] _values = [];
7271

7372
/// <summary>
@@ -99,7 +98,6 @@ protected override void OnParametersSet()
9998
return _values[index] != 0 ? _values[index] : null;
10099
}
101100

102-
103101
/// <summary>
104102
/// Trigger value changed event callback. Trigger by JavaScript.
105103
/// </summary>

src/BootstrapBlazor/Components/Input/OtpInput.razor.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,9 @@ export function init(id, invoke, method) {
5050
if (e.clipboardData && e.clipboardData.getData) {
5151
const pastedText = e.clipboardData.getData('text/plain');
5252
const inputs = [...el.querySelectorAll('.bb-opt-item')];
53+
if (inputs.find(i => i.getAttribute('disabled') || i.getAttribute('readonly'))) {
54+
return;
55+
}
5356
for (const index in inputs) {
5457
const input = inputs[index];
5558
if (index < pastedText.length) {
@@ -67,7 +70,6 @@ export function init(id, invoke, method) {
6770

6871
const setValue = (el, invoke, method) => {
6972
const val = [...el.querySelectorAll('.bb-opt-item')].map(input => input.value).join('');
70-
console.log(val);
7173
invoke.invokeMethodAsync(method, val);
7274
}
7375

src/BootstrapBlazor/Components/Input/OtpInput.razor.scss

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,6 @@
2121
margin-right: var(--bb-opt-item-margin);
2222
}
2323

24-
&.disabled {
25-
background-color: var(--bs-secondary-bg);
26-
cursor: not-allowed;
27-
}
28-
2924
&[type] {
3025
padding: 0;
3126
text-align: center;

test/UnitTest/Components/OtpInputTest.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public void Readonly_Ok()
3737
});
3838

3939
var item = cut.Find(".bb-opt-item");
40-
Assert.Equal("<span class=\"bb-opt-item\"></span>", item.OuterHtml);
40+
Assert.Contains("readonly=\"readonly\"", item.OuterHtml);
4141

4242
cut.SetParametersAndRender(pb =>
4343
{
@@ -51,7 +51,7 @@ public void Readonly_Ok()
5151
pb.Add(a => a.IsDisabled, true);
5252
});
5353
item = cut.Find(".bb-opt-item");
54-
Assert.Equal("<span class=\"bb-opt-item disabled\"></span>", item.OuterHtml);
54+
Assert.Contains("disabled=\"disabled\"", item.OuterHtml);
5555
}
5656

5757
[Fact]

0 commit comments

Comments
 (0)