Files
what-to-eat/apps/web/app/utils/recipe.ts
T

48 lines
1.6 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import type { RecipeItem } from '~/types'
import { trackCookEvent } from './analytics'
/**
* B 站搜索链接:按菜名搜索,结果里挑选当下最热门的教程
*/
export function getRecipeSearchLink(name: string) {
return `https://search.bilibili.com/all?keyword=${encodeURIComponent(name)}`
}
/**
* 收录的原视频地址:优先使用收录的链接,否则拼出 B 站视频地址;两者都没有时返回空字符串
*/
export function getRecipeVideoLink(recipe: Pick<RecipeItem, 'link' | 'bv'>) {
if (recipe.link)
return recipe.link
return recipe.bv ? `https://www.bilibili.com/video/${recipe.bv}` : ''
}
/**
* 菜谱的做法链接:跳转 B 站按菜名搜索,具体收录的视频作为次级入口(见 getRecipeVideoLink)
* 没有菜名时(不正常的数据)退回视频链接
*/
export function getRecipeLink(recipe: Pick<RecipeItem, 'name' | 'link' | 'bv'>) {
return recipe.name ? getRecipeSearchLink(recipe.name) : getRecipeVideoLink(recipe)
}
export function openRecipe(recipe: Pick<RecipeItem, 'name' | 'link' | 'bv'>) {
const link = getRecipeLink(recipe)
if (!link)
return
trackCookEvent('click_recipe_video')
window.open(link, '_blank')
}
/**
* 反馈这道菜的问题:打开预填好菜名和视频的 GitHub Issue 表单
*/
export function getRecipeFeedbackLink(recipe: Pick<RecipeItem, 'name' | 'link' | 'bv'>) {
const params = new URLSearchParams({
template: 'recipe.yml',
title: `[菜谱] ${recipe.name}`,
name: recipe.name,
video: getRecipeVideoLink(recipe),
})
return `https://github.com/YunYouJun/cook/issues/new?${params}`
}