063005fefa
- DriverTagPicker shell: modal chrome + per-driver picker body rendered as ChildContent. - 9 picker bodies (Modbus/AbCip/AbLegacy/S7/TwinCat/FOCAS/ OpcUaClient/Galaxy/Historian.Wonderware). 5 have computed builder logic + unit tests; 4 are free-text passthroughs (live browse for OPC UA + Galaxy is a documented follow-up). - Each typed driver page gets a "Pick address" button that opens the modal with the matching body. Picked address surfaces in the modal footer for manual copy — no JS interop in v1.
44 lines
1.3 KiB
Plaintext
44 lines
1.3 KiB
Plaintext
@* Static OPC UA Client address builder: NodeId free text → verbatim.
|
|
Live browse deferred to a follow-up phase. *@
|
|
|
|
<div class="alert alert-info py-2 px-3 mb-3 small">
|
|
<strong>Note:</strong> Live OPC UA node browse is deferred to a follow-up phase.
|
|
Enter the NodeId string manually below.
|
|
</div>
|
|
|
|
<div class="row g-3">
|
|
<div class="col-md-10">
|
|
<label class="form-label">NodeId</label>
|
|
<input type="text" class="form-control form-control-sm mono" placeholder="ns=2;s=Channel.Device.Tag"
|
|
@bind="_nodeId" @bind:after="OnChangedAsync" />
|
|
<div class="form-text">
|
|
OPC UA NodeId string, e.g. <code>ns=2;s=Channel.Device.Tag</code> or <code>i=1001</code>.
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="mt-3">
|
|
<span class="text-muted small">Result:</span>
|
|
<code class="mono ms-2">@_built</code>
|
|
</div>
|
|
|
|
@code {
|
|
[Parameter] public string CurrentAddress { get; set; } = "";
|
|
[Parameter] public EventCallback<string> CurrentAddressChanged { get; set; }
|
|
|
|
private string _nodeId = "";
|
|
private string _built = "";
|
|
|
|
protected override void OnInitialized()
|
|
{
|
|
_built = _nodeId;
|
|
_ = CurrentAddressChanged.InvokeAsync(_built);
|
|
}
|
|
|
|
private async Task OnChangedAsync()
|
|
{
|
|
_built = _nodeId;
|
|
await CurrentAddressChanged.InvokeAsync(_built);
|
|
}
|
|
}
|