milestone 32: task-shaped configuration, file mode as a rendering, config status api
Gates / frontend (push) Successful in 1m22s
Gates / test (push) Successful in 1m54s
Gates / test-aarch64 (push) Successful in 7m57s
Gates / package (push) Successful in 5m29s
Gates / container (push) Successful in 10s
CI / gates (push) Successful in 32m51s
Gates / frontend (push) Successful in 1m22s
Gates / test (push) Successful in 1m54s
Gates / test-aarch64 (push) Successful in 7m57s
Gates / package (push) Successful in 5m29s
Gates / container (push) Successful in 10s
CI / gates (push) Successful in 32m51s
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
import type { ReactNode } from "react";
|
||||
import * as stylex from "@stylexjs/stylex";
|
||||
import InlineError from "@/lib/InlineError";
|
||||
import type { ConfigStatus } from "@/lib/types";
|
||||
import { styles as shared } from "@/ui/styles";
|
||||
import { useAuthority } from "./authority";
|
||||
import { styles } from "./styles";
|
||||
|
||||
/**
|
||||
* Guards a configuration rendering on resolved authority (D6).
|
||||
*
|
||||
* The two renderings — editable forms and file-mode definition lists — are
|
||||
* mutually exclusive answers to a question only the server can settle, so
|
||||
* neither is drawn until it has. Pending is a skeleton; a failed status query
|
||||
* is an error with a Retry, never a form drawn on a guess.
|
||||
*
|
||||
* Runtime actions do not pass through here. Pause, update now and reload
|
||||
* certificates work under every authority, so their pages render them beside
|
||||
* the gate rather than inside it.
|
||||
*/
|
||||
export default function AuthorityGate({ children }: { children: (status: ConfigStatus) => ReactNode }) {
|
||||
const authority = useAuthority();
|
||||
|
||||
if (authority.state === "pending") {
|
||||
return (
|
||||
<p role="status" {...stylex.props(styles.pending, shared.pulse)}>
|
||||
Checking which configuration source this server obeys…
|
||||
</p>
|
||||
);
|
||||
}
|
||||
|
||||
if (authority.state === "failed") {
|
||||
return (
|
||||
<div {...stylex.props(styles.blocked)}>
|
||||
<p>
|
||||
Configuration status unavailable. nxdns cannot say whether a file or the database owns this
|
||||
configuration, so nothing here can be edited until it answers.
|
||||
</p>
|
||||
<InlineError error={authority.error} onRetry={authority.retry} />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
return <>{children(authority.status)}</>;
|
||||
}
|
||||
Reference in New Issue
Block a user