Initial commit
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
import { Category, Day, Project, Slot } from './types.uts'
|
||||
import { formatDate } from './format.uts'
|
||||
import { PROJECT_PLACEHOLDER_IMAGE } from './theme.uts'
|
||||
import { mediaUrl } from './api.uts'
|
||||
|
||||
export function decorateCategories(categories: Category[]): Category[] {
|
||||
const iconMap = ['heart', 'search', 'smile', 'service', 'user']
|
||||
const imageKeys = ['daily', 'clean', 'white', 'breath', 'child']
|
||||
const result: Category[] = []
|
||||
for (let categoryIndex = 0; categoryIndex < categories.length; categoryIndex += 1) {
|
||||
const category = categories[categoryIndex]
|
||||
const rawImageKey = category.image_key == null ? '' : category.image_key as string
|
||||
const imageKey = rawImageKey.length > 0 ? rawImageKey : imageKeys[categoryIndex % imageKeys.length]
|
||||
const projects: Project[] = []
|
||||
for (let projectIndex = 0; projectIndex < category.projects.length; projectIndex += 1) {
|
||||
const project = category.projects[projectIndex]
|
||||
const rawProjectImageKey = project.image_key == null ? '' : project.image_key as string
|
||||
const rawProjectImage = project.image == null ? '' : project.image as string
|
||||
const projectImageKey = rawProjectImageKey.length > 0 ? rawProjectImageKey : imageKey
|
||||
const projectImage = rawProjectImage.length > 0 ? mediaUrl(rawProjectImage) : ''
|
||||
projects.push({
|
||||
id: project.id,
|
||||
category_id: project.category_id,
|
||||
name: project.name,
|
||||
subtitle: project.subtitle,
|
||||
price_text: project.price_text,
|
||||
image: projectImage.length > 0 ? projectImage : PROJECT_PLACEHOLDER_IMAGE,
|
||||
image_key: projectImageKey,
|
||||
sortIndex: projectIndex + 1
|
||||
} as Project)
|
||||
}
|
||||
const rawIcon = category.icon == null ? '' : category.icon as string
|
||||
result.push({
|
||||
id: category.id,
|
||||
name: category.name,
|
||||
icon: rawIcon.length > 0 ? rawIcon : iconMap[categoryIndex % iconMap.length],
|
||||
image_key: imageKey,
|
||||
projects
|
||||
} as Category)
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
export function fallbackCategories(): Category[] {
|
||||
return [
|
||||
{ id: 'cat_meniscus_injury', name: '半月板损伤', image_key: 'daily', projects: [] } as Category,
|
||||
{ id: 'cat_synovitis', name: '滑膜炎', image_key: 'clean', projects: [] } as Category,
|
||||
{ id: 'cat_knee_arthritis', name: '膝关节炎', image_key: 'white', projects: [] } as Category,
|
||||
{ id: 'cat_lumbar_disc_herniation', name: '腰椎间盘突出', image_key: 'breath', projects: [] } as Category,
|
||||
{ id: 'cat_lumbar_muscle_strain', name: '腰肌劳损', image_key: 'child', projects: [] } as Category,
|
||||
{ id: 'cat_lumbar_spinal_stenosis', name: '腰椎管狭窄', image_key: 'daily', projects: [] } as Category,
|
||||
{ id: 'cat_cervical_spondylosis', name: '颈椎病', image_key: 'clean', projects: [] } as Category,
|
||||
{ id: 'cat_lumbar_spondylosis', name: '腰椎病', image_key: 'white', projects: [] } as Category
|
||||
]
|
||||
}
|
||||
|
||||
export function fallbackDays(projectId: string): Day[] {
|
||||
const starts = ['09:30', '10:30', '13:00', '14:00', '18:00', '19:00', '20:00']
|
||||
const base = new Date()
|
||||
const days: Day[] = []
|
||||
for (let i = 1; i <= 21; i += 1) {
|
||||
const date = new Date(base.getFullYear(), base.getMonth(), base.getDate() + i)
|
||||
const dateText = formatDate(date)
|
||||
const dayId = scheduleDayId(projectId, dateText)
|
||||
const slots: Slot[] = []
|
||||
for (let idx = 0; idx < starts.length; idx += 1) {
|
||||
const start = starts[idx]
|
||||
slots.push({
|
||||
id: slotId(dayId, start),
|
||||
start_time: start,
|
||||
status: 'available'
|
||||
} as Slot)
|
||||
}
|
||||
days.push({
|
||||
date: dateText,
|
||||
status: 'available',
|
||||
slots
|
||||
} as Day)
|
||||
}
|
||||
return days
|
||||
}
|
||||
|
||||
function scheduleDayId(projectId: string, dateText: string): string {
|
||||
return 'day_' + projectId + '_' + compactDate(dateText)
|
||||
}
|
||||
|
||||
function slotId(dayId: string, startTime: string): string {
|
||||
return 'slot_' + dayId + '_' + startTime.replace(':', '')
|
||||
}
|
||||
|
||||
function compactDate(dateText: string): string {
|
||||
return dateText.split('-').join('')
|
||||
}
|
||||
Reference in New Issue
Block a user