forked from UKSOURCE/ipv6
init
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
export interface MissionHeroData {
|
||||
badge: string;
|
||||
title: string;
|
||||
description: string;
|
||||
studentCount: string;
|
||||
image: string;
|
||||
imageAlt: string;
|
||||
coreValues: string[];
|
||||
}
|
||||
|
||||
export interface LeadershipData {
|
||||
heading: string;
|
||||
description: string;
|
||||
members: Array<{
|
||||
name: string;
|
||||
role: string;
|
||||
bio: string;
|
||||
avatar: string;
|
||||
social: { linkedin?: string; twitter?: string };
|
||||
}>;
|
||||
}
|
||||
|
||||
export interface LearningModelData {
|
||||
heading: string;
|
||||
description: string;
|
||||
async: { title: string; description: string; features: Array<{ icon: string; title: string; desc: string }> };
|
||||
sync: { title: string; description: string; features: Array<{ icon: string; title: string; desc: string }> };
|
||||
}
|
||||
|
||||
export interface AccreditationData {
|
||||
heading: string;
|
||||
description: string;
|
||||
badges: Array<{ icon: string; title: string; desc: string }>;
|
||||
stats: Array<{ value: string; label: string; isPrimary?: boolean }>;
|
||||
}
|
||||
|
||||
export interface SuccessStoriesData {
|
||||
heading: string;
|
||||
description: string;
|
||||
stories: Array<{ quote: string; name: string; program: string; avatar: string }>;
|
||||
}
|
||||
|
||||
export interface CTAData {
|
||||
heading: string;
|
||||
description: string;
|
||||
primaryButton: { label: string; href: string };
|
||||
secondaryButton: { label: string; href: string };
|
||||
}
|
||||
|
||||
export interface AboutData {
|
||||
hero: MissionHeroData;
|
||||
leadership: LeadershipData;
|
||||
learningModel: LearningModelData;
|
||||
accreditation: AccreditationData;
|
||||
successStories: SuccessStoriesData;
|
||||
cta: CTAData;
|
||||
}
|
||||
+136
@@ -0,0 +1,136 @@
|
||||
/**
|
||||
* Blog Types
|
||||
* Định nghĩa các interface cho Blog system
|
||||
*/
|
||||
|
||||
export interface BlogCategory {
|
||||
_id?: string;
|
||||
name: string;
|
||||
slug: string;
|
||||
description?: string;
|
||||
postCount?: number;
|
||||
isActive?: boolean;
|
||||
createdAt?: string;
|
||||
updatedAt?: string;
|
||||
}
|
||||
|
||||
export interface BlogTag {
|
||||
_id?: string;
|
||||
name: string;
|
||||
slug: string;
|
||||
postCount?: number;
|
||||
isActive?: boolean;
|
||||
createdAt?: string;
|
||||
updatedAt?: string;
|
||||
}
|
||||
|
||||
export interface BlogComment {
|
||||
_id?: string;
|
||||
postId?: string;
|
||||
authorName: string;
|
||||
authorAvatar?: string;
|
||||
content: string;
|
||||
createdAt: string;
|
||||
status?: 'pending' | 'approved' | 'rejected';
|
||||
parentId?: string;
|
||||
parentAuthorName?: string | null;
|
||||
}
|
||||
|
||||
export interface BlogPost {
|
||||
_id?: string;
|
||||
title: string;
|
||||
slug: string;
|
||||
excerpt: string;
|
||||
content: string;
|
||||
category: string[];
|
||||
tags: string[];
|
||||
author: string;
|
||||
status: 'draft' | 'published';
|
||||
publishedAt: string;
|
||||
isFeatured: boolean;
|
||||
featuredImage: string;
|
||||
galleryImages?: string[];
|
||||
quote?: string;
|
||||
contentAfterQuote?: string;
|
||||
commentsCount: number;
|
||||
comments?: BlogComment[];
|
||||
createdAt?: string;
|
||||
updatedAt?: string;
|
||||
}
|
||||
|
||||
export interface RecentPost {
|
||||
_id?: string;
|
||||
title: string;
|
||||
slug: string;
|
||||
thumbnail: string;
|
||||
publishedAt: string;
|
||||
originalPostId?: string;
|
||||
createdAt?: string;
|
||||
updatedAt?: string;
|
||||
}
|
||||
|
||||
export interface BlogPagination {
|
||||
current: number;
|
||||
total: number;
|
||||
limit: number;
|
||||
totalItems: number;
|
||||
}
|
||||
|
||||
export interface BlogListResponse {
|
||||
success: boolean;
|
||||
message: string;
|
||||
data: {
|
||||
blogs: BlogPost[];
|
||||
pagination: BlogPagination;
|
||||
};
|
||||
}
|
||||
|
||||
export interface BlogDetailResponse {
|
||||
success: boolean;
|
||||
message: string;
|
||||
data: BlogPost;
|
||||
}
|
||||
|
||||
export interface BlogFeaturedResponse {
|
||||
success: boolean;
|
||||
message: string;
|
||||
data: BlogPost[];
|
||||
}
|
||||
|
||||
export interface BlogRecentResponse {
|
||||
success: boolean;
|
||||
message: string;
|
||||
data: RecentPost[];
|
||||
}
|
||||
|
||||
export interface CategoryListResponse {
|
||||
success: boolean;
|
||||
message: string;
|
||||
data: BlogCategory[];
|
||||
}
|
||||
|
||||
export interface CategoryDetailResponse {
|
||||
success: boolean;
|
||||
message: string;
|
||||
data: BlogCategory;
|
||||
}
|
||||
|
||||
export interface TagListResponse {
|
||||
success: boolean;
|
||||
message: string;
|
||||
data: BlogTag[];
|
||||
}
|
||||
|
||||
export interface TagDetailResponse {
|
||||
success: boolean;
|
||||
message: string;
|
||||
data: BlogTag;
|
||||
}
|
||||
|
||||
export interface BlogQueryParams {
|
||||
page?: number;
|
||||
limit?: number;
|
||||
category?: string;
|
||||
tag?: string;
|
||||
search?: string;
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
export interface FooterData {
|
||||
brand: {
|
||||
logo: { image: string; href: string };
|
||||
description: string;
|
||||
social: Array<{ icon: string; href: string }>;
|
||||
};
|
||||
explore: {
|
||||
heading: string;
|
||||
links: Array<{ label: string; href: string }>;
|
||||
};
|
||||
contact: {
|
||||
heading: string;
|
||||
address: string;
|
||||
phone: string;
|
||||
email: string;
|
||||
};
|
||||
newsletter: {
|
||||
heading: string;
|
||||
description: string;
|
||||
placeholder: string;
|
||||
buttonText: string;
|
||||
};
|
||||
bottom: {
|
||||
copyright: string;
|
||||
links: Array<{ label: string; href: string }>;
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
export interface HeaderMenu {
|
||||
id: string;
|
||||
title: string;
|
||||
url: string;
|
||||
type?: 'internal' | 'external';
|
||||
children?: HeaderMenu[];
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
export interface HeaderLogo {
|
||||
image: string;
|
||||
href: string;
|
||||
}
|
||||
|
||||
export interface HeaderButton {
|
||||
label: string;
|
||||
href: string;
|
||||
}
|
||||
|
||||
export interface HeaderMenuItem {
|
||||
id: string;
|
||||
title: string;
|
||||
url: string;
|
||||
type: 'internal' | 'external';
|
||||
status: 'active' | 'inactive';
|
||||
children: HeaderMenuItem[];
|
||||
}
|
||||
|
||||
export interface HeaderData {
|
||||
logo: HeaderLogo;
|
||||
signInButton: HeaderButton;
|
||||
ctaButton: HeaderButton;
|
||||
status: 'active' | 'inactive';
|
||||
}
|
||||
|
||||
export interface NavLink {
|
||||
label: string;
|
||||
href: string;
|
||||
status?: 'active' | 'inactive';
|
||||
children?: { label: string; href: string; status?: 'active' | 'inactive' }[];
|
||||
}
|
||||
|
||||
export interface HeaderProps {
|
||||
logo: HeaderLogo;
|
||||
navLinks: NavLink[];
|
||||
actions: {
|
||||
signIn: HeaderButton;
|
||||
cta: HeaderButton;
|
||||
};
|
||||
status: 'active' | 'inactive';
|
||||
}
|
||||
@@ -0,0 +1,73 @@
|
||||
export interface HeroData {
|
||||
badge: string;
|
||||
title: string;
|
||||
description: string;
|
||||
searchPlaceholder: string;
|
||||
buttonLabel: string;
|
||||
image: string;
|
||||
imageAlt: string;
|
||||
floatingBadge: { icon: string; value: string; label: string };
|
||||
}
|
||||
|
||||
export interface QuickLinkItem {
|
||||
icon: string;
|
||||
title: string;
|
||||
description: string;
|
||||
linkText: string;
|
||||
href: string;
|
||||
}
|
||||
|
||||
|
||||
interface Feature {
|
||||
icon: string;
|
||||
title: string;
|
||||
description: string;
|
||||
}
|
||||
|
||||
interface Stat {
|
||||
value: string;
|
||||
label: string;
|
||||
image: string;
|
||||
imageAlt: string;
|
||||
}
|
||||
|
||||
export interface ValuePropData {
|
||||
badge: string;
|
||||
title: string;
|
||||
description: string;
|
||||
features: Feature[];
|
||||
stats: Stat[];
|
||||
}
|
||||
|
||||
export interface ProgramItem {
|
||||
category: string;
|
||||
image: string;
|
||||
duration: string;
|
||||
rating: string;
|
||||
title: string;
|
||||
description: string;
|
||||
studentCount: string;
|
||||
href: string;
|
||||
}
|
||||
|
||||
export interface ProgramsData {
|
||||
heading: string;
|
||||
description: string;
|
||||
items: ProgramItem[];
|
||||
}
|
||||
|
||||
export interface RequestInfoData {
|
||||
heading: string;
|
||||
description: string;
|
||||
phone: string;
|
||||
email: string;
|
||||
programs: string[];
|
||||
}
|
||||
|
||||
export interface HomeData {
|
||||
hero: HeroData;
|
||||
quickLinks: QuickLinkItem[];
|
||||
valueProp: ValuePropData;
|
||||
programs: ProgramsData;
|
||||
requestInfo: RequestInfoData;
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
/**
|
||||
* Export all types
|
||||
*/
|
||||
export * from './blog';
|
||||
export * from './header';
|
||||
@@ -0,0 +1,63 @@
|
||||
export interface FilterOption {
|
||||
label: string;
|
||||
count?: number;
|
||||
checked?: boolean;
|
||||
}
|
||||
|
||||
export interface FiltersData {
|
||||
levels: FilterOption[];
|
||||
fields: FilterOption[];
|
||||
durations: FilterOption[];
|
||||
}
|
||||
|
||||
export interface Course {
|
||||
id: string;
|
||||
title: string;
|
||||
description: string;
|
||||
icon: string;
|
||||
}
|
||||
|
||||
export interface Outcome {
|
||||
title: string;
|
||||
description: string;
|
||||
icon: string;
|
||||
}
|
||||
|
||||
export interface FAQ {
|
||||
question: string;
|
||||
answer: string;
|
||||
}
|
||||
|
||||
export interface Programme {
|
||||
id: string;
|
||||
level: string;
|
||||
fieldOfStudy?: string;
|
||||
title: string;
|
||||
description: string;
|
||||
duration: string;
|
||||
durationInMonths?: number;
|
||||
cost: string;
|
||||
selected?: boolean;
|
||||
link: string;
|
||||
shortName: string;
|
||||
// Detail fields
|
||||
detailBadge?: string;
|
||||
detailTitle?: string;
|
||||
detailDescription?: string;
|
||||
heroImage?: string;
|
||||
overview?: string;
|
||||
credits?: number;
|
||||
format?: string;
|
||||
coreCourses?: Course[];
|
||||
electives?: string[];
|
||||
outcomes?: Outcome[];
|
||||
faqs?: FAQ[];
|
||||
nextStartDate?: string;
|
||||
monthlyCost?: string;
|
||||
perCourseCost?: string;
|
||||
}
|
||||
|
||||
export interface ProgrammesData {
|
||||
filters: FiltersData;
|
||||
programmes: Programme[];
|
||||
}
|
||||
Reference in New Issue
Block a user