feat(sms): add real instance message workflow

This commit is contained in:
chick
2026-07-19 02:12:57 +08:00
parent 38a26c2ce1
commit 0112e3320a
17 changed files with 781 additions and 450 deletions
+8 -11
View File
@@ -55,6 +55,11 @@ function canRender(capability: InstanceCapability): boolean {
return capability.state === 'supported' || capability.state === 'degraded';
}
const CORE_MODULES = new Set<InstanceModule>(['overview', 'messages']);
function canOpen(module: InstanceModule, capability: InstanceCapability): boolean {
return CORE_MODULES.has(module) || canRender(capability);
}
function explanation(capability: InstanceCapability): string | null {
if (capability.state === 'supported') return null;
return capability.explanation?.trim() || DEFAULT_EXPLANATIONS[capability.state];
@@ -131,14 +136,6 @@ export function InstanceDetail({
<dt></dt>
<dd>{displayStatus(instance.status)}</dd>
</div>
<div>
<dt></dt>
<dd>{displayStatus(instance.authentication)}</dd>
</div>
<div>
<dt></dt>
<dd>{displayStatus(instance.freshness)}</dd>
</div>
</dl>
{origin ? (
<a href={origin} target="_blank" rel="noopener noreferrer">
@@ -153,7 +150,7 @@ export function InstanceDetail({
const reason = explanation(capability);
return (
<li key={item} data-capability-state={capability.state}>
{capability.state === 'supported' ? (
{canOpen(item, capability) ? (
<a
href={`/instances/${encodeURIComponent(instanceId)}/${item}`}
aria-current={module === item ? 'page' : undefined}
@@ -176,7 +173,7 @@ export function InstanceDetail({
<h1>{INSTANCE_MODULE_LABELS[module]}</h1>
{loading ? <p role="status"></p> : null}
{loadError ? <p role="alert">{loadError}</p> : null}
{!loading && canRender(activeCapability) ? (
{!loading && canOpen(module, activeCapability) ? (
<>
{activeCapability.state === 'degraded' ? (
<p data-capability-state="degraded">{explanation(activeCapability)}</p>
@@ -184,7 +181,7 @@ export function InstanceDetail({
{moduleContent ?? <p>{INSTANCE_MODULE_LABELS[module]}</p>}
</>
) : null}
{!loading && !canRender(activeCapability) ? (
{!loading && !canOpen(module, activeCapability) ? (
<p data-capability-state={activeCapability.state}>{explanation(activeCapability)}</p>
) : null}
</div>