docs: rename contact page references to offline page in changelog

refactor(frontend): rename contact page to offline page and update routes/components

feat(frontend): add preset templates suite for offline contact page
This commit is contained in:
ryan
2026-08-08 21:27:21 +08:00
parent f083da20f2
commit fda727cf53
12 changed files with 651 additions and 54 deletions
@@ -25,28 +25,28 @@ import {
import { ScopeDomainDialog } from './scope-domain-dialog';
import {
defaultContactPageFields,
defaultOfflinePageFields,
invalidateResponseQueries,
KEY_SW_DOMAINS,
KEY_SW_ENABLED,
KEY_SW_HTML,
mapOptionsToContactFields,
type ContactPageFields,
mapOptionsToOfflineFields,
type OfflinePageFields,
} from './shared';
export function ContactPageTab({
export function OfflinePageTab({
optionMap,
}: {
optionMap: Record<string, string>;
}) {
const queryClient = useQueryClient();
const [fields, setFields] = useState<ContactPageFields>(
defaultContactPageFields,
const [fields, setFields] = useState<OfflinePageFields>(
defaultOfflinePageFields,
);
const [scopeOpen, setScopeOpen] = useState(false);
useEffect(() => {
setFields(mapOptionsToContactFields(optionMap));
setFields(mapOptionsToOfflineFields(optionMap));
}, [optionMap]);
const zonesQuery = useQuery({
@@ -72,7 +72,7 @@ export function ContactPageTab({
]);
},
onSuccess: async () => {
toast.success('联系页已保存,请前往版本发布使配置生效');
toast.success('离线页已保存,请前往版本发布使配置生效');
await invalidateResponseQueries(queryClient);
},
onError: (error) => {
@@ -88,7 +88,7 @@ export function ContactPageTab({
<CardTitle className='text-base'>离线兜底</CardTitle>
<CardDescription>
启用后给启用 HTTPS 的网站下发 Service
Worker,域名被墙时浏览器从缓存展示此联系页。
Worker,域名被墙时浏览器从缓存展示此离线页。
</CardDescription>
</div>
<Button
@@ -186,13 +186,13 @@ export function ContactPageTab({
</div>
<div className='flex shrink-0 flex-wrap gap-2'>
<Button variant='outline' size='sm' asChild>
<Link href='/responses/contact/preview'>
<Link href='/responses/offline/preview'>
<Expand className='size-3.5' />
真实预览
</Link>
</Button>
<Button size='sm' asChild>
<Link href='/responses/contact/edit'>
<Link href='/responses/offline/edit'>
<Pencil className='size-3.5' />
编辑
</Link>
@@ -202,7 +202,7 @@ export function ContactPageTab({
<CardContent>
<div className='overflow-hidden rounded-md border bg-muted/30'>
<iframe
title='离线联系页预览'
title='离线页预览'
sandbox=''
srcDoc={fields.html}
className='h-[32rem] w-full bg-background'
@@ -28,13 +28,13 @@ export const defaultErrorPageFields: ErrorPageFields = {
html: '',
};
export type ContactPageFields = {
export type OfflinePageFields = {
enabled: boolean;
html: string;
domains: string[];
};
export const defaultContactPageFields: ContactPageFields = {
export const defaultOfflinePageFields: OfflinePageFields = {
enabled: false,
html: '',
domains: [],
@@ -72,9 +72,9 @@ export function mapOptionsToErrorFields(
};
}
export function mapOptionsToContactFields(
export function mapOptionsToOfflineFields(
optionMap: Record<string, string>,
): ContactPageFields {
): OfflinePageFields {
return {
enabled: optionMap[KEY_SW_ENABLED] === 'true',
html: optionMap[KEY_SW_HTML] ?? '',