2023-12-04 15:12:49 +08:00
|
|
|
import { useEffect, useState } from 'react';
|
2024-04-07 10:10:25 +08:00
|
|
|
import { css } from 'antd-style';
|
2023-12-04 15:12:49 +08:00
|
|
|
import fetch from 'cross-fetch';
|
2019-12-26 15:27:52 +08:00
|
|
|
|
2022-09-27 21:50:35 +08:00
|
|
|
export interface Author {
|
|
|
|
avatar: string;
|
|
|
|
href: string;
|
|
|
|
type: 'design' | 'develop';
|
|
|
|
name: string;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface Article {
|
|
|
|
title: string;
|
|
|
|
href: string;
|
|
|
|
date: string;
|
|
|
|
type: 'design' | 'develop';
|
|
|
|
author: Author['name'];
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface Recommendation {
|
|
|
|
title?: string;
|
|
|
|
img?: string;
|
|
|
|
href?: string;
|
|
|
|
popularize?: boolean;
|
|
|
|
description?: string;
|
|
|
|
}
|
|
|
|
|
|
|
|
type SourceType = 'zhihu' | 'yuque';
|
|
|
|
export interface Extra {
|
|
|
|
title: string;
|
|
|
|
description: string;
|
|
|
|
date: string;
|
|
|
|
img: string;
|
|
|
|
source: SourceType;
|
|
|
|
href: string;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface Icon {
|
|
|
|
name: string;
|
|
|
|
href: string;
|
|
|
|
}
|
|
|
|
|
|
|
|
export type Articles = {
|
|
|
|
cn: Article[];
|
|
|
|
en: Article[];
|
|
|
|
};
|
|
|
|
|
|
|
|
export type Authors = Author[];
|
|
|
|
|
|
|
|
export type Recommendations = {
|
|
|
|
cn: Recommendation[];
|
|
|
|
en: Recommendation[];
|
|
|
|
};
|
|
|
|
|
|
|
|
export type Extras = {
|
|
|
|
cn: Extra[];
|
|
|
|
en: Extra[];
|
|
|
|
};
|
|
|
|
|
|
|
|
export type Icons = Icon[];
|
|
|
|
|
|
|
|
export type SiteData = {
|
|
|
|
articles: Articles;
|
|
|
|
authors: Authors;
|
|
|
|
recommendations: Recommendations;
|
|
|
|
extras: Extras;
|
|
|
|
icons: Icons;
|
|
|
|
};
|
|
|
|
|
2019-12-26 15:27:52 +08:00
|
|
|
export function preLoad(list: string[]) {
|
|
|
|
if (typeof window !== 'undefined') {
|
|
|
|
// 图处预加载;
|
|
|
|
const div = document.createElement('div');
|
|
|
|
div.style.display = 'none';
|
|
|
|
document.body.appendChild(div);
|
2022-11-19 13:47:33 +08:00
|
|
|
list.forEach((src) => {
|
2019-12-26 15:27:52 +08:00
|
|
|
const img = new Image();
|
|
|
|
img.src = src;
|
|
|
|
div.appendChild(img);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
2020-11-05 15:22:59 +08:00
|
|
|
|
2023-12-04 15:12:49 +08:00
|
|
|
export function useSiteData(): Partial<SiteData> | undefined {
|
|
|
|
const [data, setData] = useState<SiteData | undefined>(undefined);
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
|
|
fetch('https://render.alipay.com/p/h5data/antd4-config_website-h5data.json').then(
|
|
|
|
async (res) => {
|
|
|
|
setData(await res.json());
|
|
|
|
},
|
|
|
|
);
|
|
|
|
}, []);
|
|
|
|
|
|
|
|
return data;
|
2020-11-05 15:22:59 +08:00
|
|
|
}
|
2022-12-11 20:39:46 +08:00
|
|
|
|
2023-07-20 19:27:33 +08:00
|
|
|
export const getCarouselStyle = () => ({
|
2022-12-11 20:39:46 +08:00
|
|
|
carousel: css`
|
2022-12-19 13:23:28 +08:00
|
|
|
.slick-dots.slick-dots-bottom {
|
|
|
|
bottom: -22px;
|
|
|
|
li {
|
|
|
|
width: 6px;
|
|
|
|
height: 6px;
|
|
|
|
background: #e1eeff;
|
|
|
|
border-radius: 50%;
|
|
|
|
button {
|
2022-12-11 20:39:46 +08:00
|
|
|
height: 6px;
|
|
|
|
background: #e1eeff;
|
|
|
|
border-radius: 50%;
|
2022-12-19 13:23:28 +08:00
|
|
|
}
|
|
|
|
&.slick-active {
|
|
|
|
background: #4b9cff;
|
2022-12-11 20:39:46 +08:00
|
|
|
button {
|
|
|
|
background: #4b9cff;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2022-12-19 13:23:28 +08:00
|
|
|
}
|
|
|
|
`,
|
2022-12-11 20:39:46 +08:00
|
|
|
});
|