import {getLogInstance} from 'snail-log'; import openSnailApp from 'nw-app-snail'; import {isSnail} from 'snail-helpers'; import parseScheme from './parseScheme'; const H5_TYPES = [ { path: 'bookdetail', url: '/share/book/' }, { path: 'userinfo', url: '/share/user/' }, { path: 'bookreview', url: '/share/bookreview/' }, { path: 'question', url: '/share/question/' }, { path: 'subject', url: '/share/subject/' }, { path: 'author', url: '/share/author/' }, { path: 'topicDetail', url: '/share/topic/' }, { path: 'topicFeedDetail', url: '/share/feed/' } ] /** * 前往蜗牛的目标位置 * @param path 目标path * @param query 附加query */ const goSnail = ({path, query, hasLog = false, isEdit}: {path: string ,query: object, hasLog: boolean, isEdit: boolean}) => { const matchType = H5_TYPES.find(type => type.path === path); if(matchType && !isSnail()){ // console.log('Go h5 page'); const {url} = matchType; let id; if(path === 'subject'){ id = `${query.moduleId}/${query.entryId}`; }else{ id = Object.values(query)[0]; } if(hasLog){ setTimeout(() => { // console.log('go url with timeout', url + id); if(!isEdit){ location.href = url + id; } }, 300); }else{ // console.log('go url', url + id); if(!isEdit){ location.href = url + id; } } }else{ if(hasLog){ setTimeout(() => { // console.log('Open snail app with timeout', path, query); if(!isEdit){ openSnailApp({ path, query }) } }, 300); }else{ // console.log('Open snail app', path, query); if(!isEdit){ openSnailApp({ path, query }) } } } } /** * 处理蜗牛的schemeUrl的跳转,包含打点信息 * @param param0 对象类型的参数 * @param param0.target 跳转目标的schemeUrl,目前通过管理后台链接生成工具获取 * @param param0.logPointId 打点的id * @param param0.logQuery 打点的附加信息 * @param param0.isEdit 组件props中的isEdit字段,用于防止在编辑器中意外跳转 */ export const handleScheme = ({target, logPointId, logQuery, isEdit} : {target: string, logPointId: string, logQuery?: object, isEdit: boolean}) => { if(logPointId && !isEdit){ const log = getLogInstance(); log.sendLog(logPointId, logQuery); } if(target){ // console.log('handleScheme: ', target); const schemeData = parseScheme(target); if(schemeData){ const {path, query} = schemeData; goSnail({path, query, hasLog: !!logPointId, isEdit}); }else{ location.href = target; } } } /** * 处理path和query组成的对象类型的蜗牛跳转参数,path和query参数同nw-app-snail组件 * @param param0 对象类型的参数 * @param param0.path 跳转目标的path, * @param param0.query 跳转目标的query * @param param0.logPointId 打点的id * @param param0.logQuery 打点的附加信息 * @param param0.isEdit 组件props中的isEdit字段,用于防止在编辑器中意外跳转 */ export const handlePathQuery = ({path, query, logPointId, logQuery, isEdit} : {path: string, query: object, logPointId: string, logQuery: object, isEdit: boolean}) => { if(logPointId && !isEdit){ const log = getLogInstance(); log.sendLog(logPointId, logQuery); } if(path){ // console.log('handlePathQuery: ', path, query); goSnail({path, query, hasLog: !!logPointId, isEdit}); } }