{"version":3,"sources":["webpack://_N_E/./node_modules/core-js/internals/array-reduce.js","webpack://_N_E/./components/hooks/use-toggle-collect.ts","webpack://_N_E/./lib/format-time.ts","webpack://_N_E/./node_modules/core-js/modules/es.array.reduce.js","webpack://_N_E/./components/hooks/use-toggle-digg.ts","webpack://_N_E/./public/static/like-active.svg","webpack://_N_E/./components/hooks/use-optimistic-status.ts","webpack://_N_E/./public/static/reply.svg","webpack://_N_E/./lib/apply-https-img.ts","webpack://_N_E/./public/static/cheyouquan_icon.png","webpack://_N_E/./node_modules/invariant/browser.js","webpack://_N_E/./public/static/like-normal.svg","webpack://_N_E/./lib/noop-wrapper.ts","webpack://_N_E/./lib/format-duration.ts","webpack://_N_E/./components/hooks/use-login-check-callback.ts","webpack://_N_E/./public/static/v_blue_24.png","webpack://_N_E/./node_modules/react-intersection-observer/node_modules/@babel/runtime/helpers/esm/extends.js","webpack://_N_E/./node_modules/react-intersection-observer/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","webpack://_N_E/./node_modules/react-intersection-observer/node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://_N_E/./node_modules/react-intersection-observer/react-intersection-observer.esm.js","webpack://_N_E/./node_modules/react-intersection-observer/node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://_N_E/./node_modules/react-intersection-observer/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","webpack://_N_E/./components/new/links/community-link.tsx","webpack://_N_E/./components/new/community-card/interact.tsx"],"names":["aFunction","toObject","IndexedObject","toLength","createMethod","IS_RIGHT","that","callbackfn","argumentsLength","memo","O","self","length","index","i","TypeError","module","exports","left","right","collect","collectParams","fetch","getUrl","serializeObject","then","res","data","result","unCollect","useToggleCollect","id","collected","collectCount","useStatusCountUpdater","status","count","begin","rollback","curStatus","curCount","update","useOptimisticStatus","execute","useLoginCheckCallback","useCallback","group_id","useMemo","enter_method","formatTime","millisecondTimestamp","now","Date","nowTimestamp","getTime","fakeDate","getFullYear","getMonth","getDate","d","Number","delta","ONE_MINUTE","Math","floor","_hm","fixNumber","getHours","getMinutes","setDate","num","secToMin","seconds","min","sec","$","$reduce","arrayMethodIsStrict","arrayMethodUsesToLength","STRICT_METHOD","USES_TO_LENGTH","1","target","proto","forced","reduce","this","arguments","undefined","makeMap","raw","map","cellStyles","diggType","split","forEach","cellStyle","cellStyleDiggTypeMap","articleTypeDiggTypeMap","useToggleDigg","type","hasDigg","diggCount","groupId","articleType","state","useContext","GlobalStoreContext","userId","userData","user_id","method","headers","window","localStorage","getItem","body","aid","app_name","comment_id","item_id","action","errno","thread_id","digg_action","like_type","useState","setCurStatus","useEffect","setCurCount","prev","next","pendingRef","useRef","a","current","applyHttpsImage","url","replace","condition","format","b","c","e","f","error","Error","args","argIndex","name","framesToPop","noopWrapper","content","formatDuration","second","join","callback","commonParams","globalState","openLogin","LoginStoreContext","_extends","Object","assign","source","key","prototype","hasOwnProperty","call","apply","_assertThisInitialized","ReferenceError","_defineProperty","obj","value","defineProperty","enumerable","configurable","writable","INSTANCE_MAP","Map","OBSERVER_MAP","ROOT_IDS","consecutiveRootId","observe","element","options","threshold","_options","root","rootMargin","has","observerId","get","set","toString","getRootId","observerInstance","IntersectionObserver","onChange","instance","inView","observer","thresholds","Array","isArray","unobserve","itemsLeft","rootObserved","item","disconnect","changes","intersection","isIntersecting","intersectionRatio","some","_React$Component","subClass","superClass","InView","_this","_len","_key","concat","entry","node","observeNode","setState","props","create","constructor","__proto__","_proto","componentDidMount","componentDidUpdate","prevProps","prevState","triggerOnce","componentWillUnmount","_this$props","handleChange","render","_this$state","children","isPlainChildren","ref","handleNode","_this$props2","as","tag","excluded","sourceKeys","keys","indexOf","_objectWithoutPropertiesLoose","useInView","_React$useState","setRef","communityLink","Fragment","href","replyIcon","require","makeCollectNormalIcon","fill","theme","makeCollectActiveIcon","border","collectNormalIcon","collectActiveIcon","collectNormalIconBlack","collectActiveIconBlack","InteractButton","icon","style","className","text","size","linkWrapper","onClick","iconSize","paddingLeft","fontSize","height","leading","showCount","formatNumber","classNames","DiggButton","toggle","handleClick","stopPropagation","preventDefault","CollectButton","renderText","event","Interact","isOwnerDigg","questionStatus","questionDisplay","awardText","awardIcon","time","timeUnit","commentVisible","commentCount","diggVisible","selfHasDigg","commentText","collectVisible","communityId","communityName","commentLinkWrapper","onClickComment","onClickCollect","onClickCommunity","onClickDigg","communityLinkWrapper","handleClickCommunity","handleClickComment"],"mappings":"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","file":"static/chunks/acbdf84aca160c9dd753c9bc96746519ce17e43e.178e06912720f1a3362c.js","sourcesContent":["var aFunction = require('../internals/a-function');\nvar toObject = require('../internals/to-object');\nvar IndexedObject = require('../internals/indexed-object');\nvar toLength = require('../internals/to-length');\n\n// `Array.prototype.{ reduce, reduceRight }` methods implementation\nvar createMethod = function (IS_RIGHT) {\n return function (that, callbackfn, argumentsLength, memo) {\n aFunction(callbackfn);\n var O = toObject(that);\n var self = IndexedObject(O);\n var length = toLength(O.length);\n var index = IS_RIGHT ? length - 1 : 0;\n var i = IS_RIGHT ? -1 : 1;\n if (argumentsLength < 2) while (true) {\n if (index in self) {\n memo = self[index];\n index += i;\n break;\n }\n index += i;\n if (IS_RIGHT ? index < 0 : length <= index) {\n throw TypeError('Reduce of empty array with no initial value');\n }\n }\n for (;IS_RIGHT ? index >= 0 : length > index; index += i) if (index in self) {\n memo = callbackfn(memo, self[index], index, O);\n }\n return memo;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.reduce` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.reduce\n left: createMethod(false),\n // `Array.prototype.reduceRight` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.reduceright\n right: createMethod(true)\n};\n","import fetch from 'lib/decorated-fetch'\nimport getUrl from 'lib/url'\nimport serializeObject from '@arsenal/arsenal/modules/serializeObject'\nimport useOptimisticStatus, {\n useStatusCountUpdater,\n} from 'Components/hooks/use-optimistic-status'\nimport { useCallback, useMemo } from 'react'\nimport useLoginCheckCallback from 'Components/hooks/use-login-check-callback'\n\nexport interface ICollectParams {\n group_id?: string\n}\n\nfunction collect(collectParams: ICollectParams) {\n return fetch(\n getUrl(\n `/motor/pc/ugc/collect/user_collect?${serializeObject(collectParams)}`\n )\n ).then((res) => {\n return res?.data?.result\n })\n}\n\nfunction unCollect(collectParams: ICollectParams) {\n return fetch(\n getUrl(\n `/motor/pc/ugc/collect/user_uncollect?${serializeObject(collectParams)}`\n )\n ).then((res) => {\n return res?.data?.result\n })\n}\n\nfunction useToggleCollect({\n id,\n collected,\n collectCount,\n}: {\n id: string\n collected?: boolean\n collectCount?: number\n}) {\n const { begin, rollback, curStatus, curCount } = useStatusCountUpdater({\n status: collected,\n count: collectCount,\n })\n\n return {\n update: useOptimisticStatus<[boolean, number]>({\n execute: useLoginCheckCallback(\n useCallback(\n ([curStatus]) => {\n return (curStatus ? collect : unCollect)({\n group_id: id,\n })\n },\n [id]\n ),\n useMemo(\n () => ({\n enter_method: 'favorite',\n }),\n []\n )\n ),\n begin,\n rollback,\n }),\n curStatus,\n curCount,\n }\n}\n\nexport default useToggleCollect\n","/**\n * 将服务端传过来的时间戳(毫秒)转为格式化的字符串\n * @param {string|number} millisecondTimestamp 毫秒级时间戳\n * @return {string} 格式化时间\n */\nexport default function formatTime(millisecondTimestamp: string | number) {\n const ONE_MINUTE = 1000 * 60\n const ONE_HOUR = ONE_MINUTE * 60\n // var ONE_DAY = ONE_HOUR * 24;\n\n const now = new Date()\n const nowTimestamp = now.getTime()\n const fakeDate = new Date(now.getFullYear(), now.getMonth(), now.getDate())\n const d = new Date(Number(millisecondTimestamp))\n if (!Number(d.getTime())) {\n return ''\n }\n\n const delta = nowTimestamp - Number(millisecondTimestamp)\n\n if (delta < 0) {\n return ''\n } else if (delta < ONE_MINUTE) {\n return '刚刚'\n } else if (delta < ONE_HOUR) {\n return `${Math.floor(delta / ONE_MINUTE)}分钟前`\n } else if (delta < 24 * ONE_HOUR) {\n return `${Math.floor(delta / ONE_HOUR)}小时前`\n } else {\n const _hm = `${fixNumber(d.getHours())}:${fixNumber(d.getMinutes())}`\n let i = 0\n while (i++ <= 8) {\n fakeDate.setDate(fakeDate.getDate() - 1)\n if (millisecondTimestamp > fakeDate.getTime()) {\n if (i === 1) {\n return `昨天 ${_hm}`\n } else if (i === 2) {\n return `前天 ${_hm}`\n } else {\n return `${i}天前`\n }\n }\n }\n\n return `${\n (d.getFullYear() < now.getFullYear() ? `${d.getFullYear()}-` : '') +\n fixNumber(d.getMonth() + 1)\n }-${fixNumber(d.getDate())}`\n }\n}\n\nfunction fixNumber(num: number): string {\n if (num < 10) {\n return `0${num}`\n }\n return `${num}`\n}\n\nexport function secToMin(seconds: number) {\n const min = Math.floor(seconds / 60)\n const sec = seconds % 60\n return `${fixNumber(min)}:${fixNumber(sec)}`\n}\n\n/**\n * 将时间戳(毫秒)转为以天为单位\n */\nexport function formatTimeByday(millisecondTimestamp: string | number) {\n const now = new Date()\n const nowTimestamp = now.getTime()\n const fakeDate = new Date(now.getFullYear(), now.getMonth(), now.getDate())\n const d = new Date(Number(millisecondTimestamp))\n if (!Number(d.getTime())) {\n return ''\n }\n const delta = nowTimestamp - Number(millisecondTimestamp)\n if (delta < 0) {\n return ''\n }\n\n const dDate = new Date(d.getFullYear(), d.getMonth(), d.getDate())\n\n const diff = (fakeDate.getTime() - dDate.getTime()) / 1000 / 60 / 60 / 24\n\n if (diff < 1) {\n return '今天'\n }\n if (diff < 2) {\n return '昨天'\n }\n if (diff < 3) {\n return '前天'\n }\n if (diff < 9) {\n return `${Math.abs(diff)}天前`\n }\n\n return `${\n (d.getFullYear() < now.getFullYear() ? `${d.getFullYear()}-` : '') +\n fixNumber(d.getMonth() + 1)\n }-${fixNumber(d.getDate())}`\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar $reduce = require('../internals/array-reduce').left;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar STRICT_METHOD = arrayMethodIsStrict('reduce');\nvar USES_TO_LENGTH = arrayMethodUsesToLength('reduce', { 1: 0 });\n\n// `Array.prototype.reduce` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.reduce\n$({ target: 'Array', proto: true, forced: !STRICT_METHOD || !USES_TO_LENGTH }, {\n reduce: function reduce(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","import fetch from 'lib/decorated-fetch'\nimport serializeObject from '@arsenal/arsenal/modules/serializeObject'\nimport useOptimisticStatus, {\n useStatusCountUpdater,\n} from 'Components/hooks/use-optimistic-status'\nimport { useCallback, useContext, useEffect, useMemo, useState } from 'react'\nimport { GlobalStoreContext } from 'Components/store'\nimport useLoginCheckCallback from 'Components/hooks/use-login-check-callback'\n\nexport interface ICollectParams {\n group_id?: string\n user_id?: string\n}\n\nexport type DiggType =\n | 'digg_thread'\n | 'digg_ugc_video'\n | 'digg_pgc_article'\n | 'digg_pgc_video'\n | 'digg_car_review'\n | 'digg_essay'\n\nexport interface IToggleDiggParams {\n type?: 'community' | 'comment' // \"帖子\" | \"评论\"\n id?: string // 主id\n groupId?: string // 帖子id\n hasDigg?: boolean // 是否已点赞\n diggCount?: number // 点赞数\n cellStyle?: number // 帖子cellStyle,hooks内部根据cellStyle会自动映射点赞类型\n articleType?: number // 文章articleType,hooks内部根据articleType会自动映射点赞类型\n}\n\nfunction makeMap(raw: [string, DiggType][]) {\n return raw.reduce((map, [cellStyles, diggType]) => {\n cellStyles.split(',').forEach((cellStyle) => {\n map[cellStyle] = diggType\n })\n return map\n }, {} as Record)\n}\n\n// cell_style 与点赞类型的映射关系\nexport const cellStyleDiggTypeMap = makeMap([\n [\n '5309,1155,5619,5620,5621,5622,5623,8999,8998,8006,8005,8004,8007,8001,8003,8002,2316,2314,2362,2318,2328,2341',\n 'digg_thread',\n ],\n ['2363,2317,2307,2313', 'digg_ugc_video'],\n ['2000,2001,2002,2003,2008,2050,2051', 'digg_pgc_article'],\n ['2101,2100,2052,2053', 'digg_pgc_video'],\n ['2061,2062', 'digg_car_review'],\n ['2330,2332,2364', 'digg_essay'],\n])\n\n// articleType:\n// 0,未知;\n// 1,pgc 图文;\n// 2,pgc 视频(不含图文嵌视频);\n// 3,pgc 图文嵌视频;\n// 4,pgc 图集(当前合并到图文了);\n// 5,ugc 文字;\n// 6,ugc 小视频;\n// 7,ugc 图文;\n// 8,ugc 问答;\n// 9,UGC 长贴;\n// 10,ugc 投票;\n// 11,ugc 转发;\n// 12,ugc 长贴口碑;\n// 13,ugc 口碑\nexport const articleTypeDiggTypeMap = makeMap([\n ['1,3,4', 'digg_pgc_article'],\n ['2', 'digg_pgc_video'],\n ['6', 'digg_ugc_video'],\n // ['', 'digg_car_review'],\n ['9', 'digg_essay'],\n ['5,7,8,10,11,12,13', 'digg_thread'],\n])\n\nfunction useToggleDigg({\n id,\n type = 'community',\n hasDigg,\n diggCount,\n groupId,\n cellStyle,\n articleType,\n}: IToggleDiggParams) {\n const { state } = useContext(GlobalStoreContext)\n const userId = state?.userData?.user_id\n\n const { begin, rollback, curStatus, curCount } = useStatusCountUpdater({\n status: hasDigg,\n count: diggCount,\n })\n\n return {\n update: useOptimisticStatus<[boolean, number]>({\n execute: useLoginCheckCallback(\n useCallback(\n ([curStatus]) => {\n // 评论点赞\n if (type === 'comment') {\n return fetch(\n '/motor/proxy/comment_action/browser/2/data/v2/comment_action/',\n {\n method: 'POST',\n headers: {\n 'tt-anti-token':\n window.localStorage.getItem('tt-anti-token') || '',\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n body: serializeObject({\n aid: 1839,\n app_name: 'auto_web_pc',\n comment_id: id,\n item_id: groupId, //文章id\n group_id: groupId, //文章id\n action: curStatus ? 'digg' : 'cancel_digg',\n }),\n }\n ).then((res) => res?.errno === 0)\n } else {\n // 帖子点赞\n return fetch(`/motor/community/digg_like`, {\n method: 'POST',\n headers: {\n 'tt-anti-token':\n window.localStorage.getItem('tt-anti-token') || '',\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n body: serializeObject({\n aid: 1839,\n // user_id: userId,\n thread_id: id,\n group_id: id,\n digg_action: curStatus ? 'digg' : 'cancel_digg',\n like_type:\n articleTypeDiggTypeMap[articleType!] ||\n cellStyleDiggTypeMap[cellStyle!] ||\n 'digg_thread',\n }),\n }).then((res) => res?.status === 0)\n }\n },\n [userId, type, id, groupId, cellStyle]\n ),\n useMemo(\n () => ({\n enter_method: 'like',\n }),\n []\n )\n ),\n begin,\n rollback,\n }),\n curStatus,\n curCount,\n }\n}\n\nexport default useToggleDigg\n","module.exports = \"https://sf6-scmcdn2-tos.pstatp.com/motor/pc/_next/static/images/like-active-a98094d0c449c7fa7190737a9450d7e4.svg\";","// 点赞/关注/收藏 乐观更新\nimport { useCallback, useEffect, useRef, useState } from 'react'\n\nexport interface IStatusCountUpdaterParams {\n status?: boolean\n count?: number\n}\n\nexport function useStatusCountUpdater({\n status = false,\n count = 0,\n}: IStatusCountUpdaterParams) {\n const [curStatus, setCurStatus] = useState(status)\n\n useEffect(() => {\n setCurStatus(status)\n }, [status])\n\n const [curCount, setCurCount] = useState(count)\n\n useEffect(() => {\n setCurCount(count)\n }, [count])\n\n return {\n begin: useCallback<\n () => {\n prev: [boolean, number]\n next: [boolean, number]\n }\n >(() => {\n setCurStatus(!curStatus)\n setCurCount(curStatus ? curCount - 1 : curCount + 1)\n return {\n prev: [curStatus, curCount],\n next: [!curStatus, curStatus ? curCount - 1 : curCount + 1],\n }\n }, [curStatus, curCount]),\n rollback: useCallback(([curStatus, curCount]) => {\n setCurStatus(curStatus)\n setCurCount(curCount)\n }, []),\n curStatus,\n curCount,\n }\n}\n\nfunction useOptimisticStatus({\n begin,\n execute,\n rollback,\n}: {\n begin(): {\n prev: T\n next: T\n }\n execute(status: T): Promise | void // 请求方法,返回boolean表示执行成功还是失败\n rollback(status: T): void\n}) {\n const pendingRef = useRef(false)\n\n return useCallback(async () => {\n const { prev, next } = begin()\n if (execute) {\n if (pendingRef.current) {\n return\n }\n pendingRef.current = true\n try {\n const status = await execute(next)\n pendingRef.current = false\n if (status) {\n begin()\n } else {\n rollback(prev)\n }\n } catch (e) {\n pendingRef.current = false\n rollback(prev)\n }\n }\n }, [execute, begin, rollback])\n}\n\nexport default useOptimisticStatus\n","module.exports = \"data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyMCcgaGVpZ2h0PScyMCcgdmlld0JveD0nMCAwIDIwIDIwJz48ZyBmaWxsPSdub25lJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnPjxnIGZpbGw9JyMxRjIxMjknPjxwYXRoIGQ9J00xNS4wNDIgMGMuNDI4IDAgLjc4MS4zMi44My43MzRsLjAwNi4wOTcuMDI2IDExLjY2N2MuMDAxLjQyOC0uMzIyLjc4MS0uNzM4LjgzbC0uMDk4LjAwNUg5Ljc2NWwtMi40NjcgMi42NS0xLjIyNS0xLjEzMyAyLjcxNi0yLjkxN2MuMTM2LS4xNDYuMzE4LS4yMzcuNTE0LS4yNmwuMDk4LS4wMDZoNC44M2wtLjAyMy0xMEgxLjY3MXYxMGgzLjk3djEuNjY2SC44MzZjLS40MjkgMC0uNzgyLS4zMjEtLjgzLS43MzZMMCAxMi41Vi44MzNDMCAuNDA2LjMyMy4wNTMuNzM4LjAwNkwuODM2IDBoMTQuMjA2em0tOS42MSA1LjQxN3YyLjVIMy43NjF2LTIuNWgxLjY3MXptNi42ODUgMHYyLjVoLTEuNjd2LTIuNWgxLjY3em0tMy4zNDIgMHYyLjVINy4xMDN2LTIuNWgxLjY3MnonIHRyYW5zZm9ybT0ndHJhbnNsYXRlKC02ODEgLTE1MDIpIHRyYW5zbGF0ZSg2ODEgMTUwMSkgdHJhbnNsYXRlKDAgMSkgdHJhbnNsYXRlKDIuMDkgMi41KScvPjwvZz48L2c+PC9zdmc+Cg==\"","export default function applyHttpsImage(url?: string) {\n return (url || '').replace?.('http://', '//')\n}\n","module.exports = \"data:image/png;base64,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\"","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar invariant = function(condition, format, a, b, c, d, e, f) {\n if (process.env.NODE_ENV !== 'production') {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n }\n\n if (!condition) {\n var error;\n if (format === undefined) {\n error = new Error(\n 'Minified exception occurred; use the non-minified dev environment ' +\n 'for the full error message and additional helpful warnings.'\n );\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(\n format.replace(/%s/g, function() { return args[argIndex++]; })\n );\n error.name = 'Invariant Violation';\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n};\n\nmodule.exports = invariant;\n","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMjBweCIgaGVpZ2h0PSIyMHB4IiB2aWV3Qm94PSIwIDAgMjAgMjAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8ZyBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj4KICAgICAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTcyMS4wMDAwMDAsIC0zOTIwLjAwMDAwMCkiIGZpbGw9IiMxRjIxMjkiPgogICAgICAgICAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNzIxLjAwMDAwMCwgMzkyMC4wMDAwMDApIj4KICAgICAgICAgICAgICAgIDxnPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0yLjc5NjgwMDM1LDMuNzQ4Njk0OCBDNC42NDMyNTIzNiwyLjAwODQ2Mjg2IDcuNTUxNDkxMjUsMS45NzQxOTQxMyA5LjQ0Nzg5NDI4LDMuNjQ5ODk2NDUgTDkuNTQ4NTA3NTQsMy43NDEzMDIwNiBMOS42NTI0MzI0LDMuODQxNzEwMTQgTDkuOTk5NTgzMzMsNC4xODc5MTY2NyBMMTAuMzQ3NjE3OCwzLjg0MTY2MDE1IEMxMi4xODUyNTgzLDIuMDEwNTYyNjcgMTUuMTc1NzU5NCwxLjkzOTA4MDg2IDE3LjExMDcyOTMsMy42NjQyNDk1IEwxNy4yMTE1ODMzLDMuNzU2NzA3MDEgTDE3LjI5OTIwMjgsMy44NDE3MzE3NSBDMTkuMjAwODQxNSw1LjczNjY3OTc0IDE5LjIzMzA0MDIsOC43NDUzOTQ5MSAxNy40MDA3NDUsMTAuNjczMTExOSBMMTIuNTUyMzEyOCwxNS41OTExNDc5IEwxMS4zNjU1NDM0LDE0LjQyMDk1MjkgTDE2LjEyMjcxOTksOS41OTY0NDMwMyBDMTcuMzc2MjY3NCw4LjM0NzM1ODkzIDE3LjQwMjk1OTcsNi4zODQyNzExNSAxNi4yMTA1NDMzLDUuMTEyNDA2NjMgTDE2LjEzMTA0ODcsNS4wMzA0NTMzNyBMMTYuMDYwMDkxMyw0Ljk2MTU3NjA5IEMxNC44MjAyOTUxLDMuNzkzMTAxMTUgMTIuODQ0MjYzNCwzLjc5Mzk5MDQzIDExLjYwNTQxOSw0Ljk0Mzk4OTk5IEwxMS41MjM5Mzc3LDUuMDIyMzU4NzkgTDEwLjU4Nzg5NzUsNS45NTQ3ODg5NyBDMTAuMjc5Nzg2NSw2LjI2MTcxMTc0IDkuNzkxNDkxMjUsNi4yNzc4MTA0NCA5LjQ2NDQ3NzgxLDYuMDAzMTI0OTUgTDkuNDExNTI3NDcsNS45NTQ2NTE2IEw4LjQ4NTYwODA4LDUuMDMxNzE2MzggTDguNDAxMTY0MzgsNC45NTAxMDI3IEM3LjE4ODQxNzE1LDMuODE3NTU1OTUgNS4yNjg2NDQ4MywzLjc5NDI3NTk2IDQuMDMzMzQ3NzgsNC44NzYyODE4MyBMMy45NDgyOTIzMyw0Ljk1MzU2Mzg5IEwzLjg4NjU0Njc1LDUuMDEyODg1MDUgTDMuODAxMjE0MjQsNS4xMDA1MTQ3IEMyLjU5NDQ2MzM5LDYuMzgyMjExMzUgMi42MjQ5MzU4MSw4LjM0ODU1NzgyIDMuODcxNzE0NzYsOS41OTA5NDkzMiBMMTAuOTA5NzMxLDE2LjQ3MzQ5OTkgTDkuNzQ0NDU0MDksMTcuNjY1MDk4NiBMMi43MDA4NzI0OCwxMC43NzcwNTQzIEMwLjg0MTg5NDAzOCw4LjkyNDY5NDg3IDAuNzY1MDAxODc0LDUuOTk5MjM2NzkgMi41MDM3NjMxMiw0LjA1MDA3OTUzIEwyLjU5Njk1MzU1LDMuOTQ4NDA0ODUgTDIuNzA5MDc1NzIsMy44MzM1OTY0OSBMMi43OTY4MDAzNSwzLjc0ODY5NDggWiI+PC9wYXRoPgogICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICAgICAgPHJlY3Qgb3BhY2l0eT0iMCIgeD0iMCIgeT0iMCIgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIj48L3JlY3Q+CiAgICAgICAgICAgIDwvZz4KICAgICAgICA8L2c+CiAgICA8L2c+Cjwvc3ZnPg==\"","import { ReactNode } from 'react'\n\nexport type Wrapper = (content: ReactNode) => ReactNode\n\nconst noopWrapper: Wrapper = content => content\n\nexport default noopWrapper\n","/**\n * 将服务端传过来的时长(秒)格式化为时分秒\n * @param {number} 秒级\n * @return {string} 格式化为时分秒\n */\nexport default function formatDuration(second: number) {\n if (second < 3600) {\n return [Math.floor((second / 60) % 60), Math.floor(second % 60)]\n .join(':')\n .replace(/\\b(\\d)\\b/g, '0$1')\n } else {\n return [\n Math.floor(second / 60 / 60),\n Math.floor((second / 60) % 60),\n Math.floor(second % 60),\n ]\n .join(':')\n .replace(/\\b(\\d)\\b/g, '0$1')\n }\n}\n","import { useCallback, useContext } from 'react'\nimport { GlobalStoreContext } from 'Components/store'\nimport { LoginStoreContext } from 'New/login/login-store'\nimport { ILoginCommonParams } from 'New/login/context/view-context'\n\nfunction useLoginCheckCallback any>(\n callback: T,\n commonParams?: ILoginCommonParams\n) {\n const { state: globalState } = useContext(GlobalStoreContext)\n const { openLogin } = useContext(LoginStoreContext)\n\n return useCallback(\n (...args) => {\n if (globalState?.userData?.user_id) {\n return callback(...args)\n } else {\n openLogin(commonParams)\n }\n },\n [globalState?.userData?.user_id, callback, commonParams, openLogin]\n )\n}\n\nexport default useLoginCheckCallback\n","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAAw1BMVEUAAAD///////////////////////////////////////////////////////8IsP////8SsvoTtf9E0P8wxv8+zf/3/f9K1P85yv8ct/vy/P8KrfohvP4buv/f9v8mv//l+P/s+v8rwf/Y8/+K2//I8P+R3v+o6v+b4v9Gyf9Awvy36P+k5v+J4v9Y1/9l0/9a0P9kzf9PyPzR8v+x6/9r3P9w1v9T0P8jt/++7P6A1v541v593/9ZyP+q5P4nt/lsz/zC50zDAAAAD3RSTlMAvqY/Nfrz6+XZl4JlHogHpmSvAAAC3klEQVQ4y4WVi1qqQBCAA+96yuHiGoggBIiK19RS63Te/6nOzOwilmW/qLPs736zgDN3X6l2dK1Vr7c0vVO9u0ml3YQLmu3Kj2pVQyHczt92i8Xubb4Ncah9v/y9DuCOd/0LdmMXQL//JoMGiPGi/4XFWEDjKpc/NUhYvdITqP357D4AjPuW1bf6/fOHpcZjgIdP64KYWz8yF3CxdqUG6N6woXbO+74BY8vq0dFTB38UWJhJo7gmOiS9X0hAV/cCxIs89dh7VGB8hmZeBFRZ1iAvp1Lfz4v4LQndZCnjHDTeHbjStW37xRfI1iZWGBNL28bJiQu0xzZkKDJ7VwjA14R+p2Ix46nHDNooN2GFA9JTodhHUeQLRWgzK2jS9ka2JHZdgcvhOwuCDQ14HAYRT49wix3IKYzsyHeffZfZel40jWI5eA6knUMHL/KJ5ShYLr3piOcTh5hKOfPQRv0EOl64Ja8bBJ7nOHK1J5YxkxAHU0/aS7x4LZjgsso1opBxDCTl8OA40p5A664OlAK6LBsHNqboOj6Hm0K2oU5yQKBLchyOkCPK+YjIDQdtElCmNNhV8oaVZ8c4yuCD5CHZlIYGq8Ajdzgk2Rkxh5S/fMqHZDRWuEEd9h6DLu3r4F/wj1yU0fb2oONNybwhqohp4lx84aYGycrOoIO32x8SuDLLm9L9axCm6bDgQ5UepMmQMVFGkicFugOWhybOTqDJj2gsXSWflJthjDadJjmGNj/8oWfKU9KekZqsBwNUEZPxQqjIv1VKXpHG4CNLZidnMJCqIWdS0Io/bGQqSGYKVxEJqBalYGYqul22ldztmooZ6GWRSc9yt5RxoOyUikxZvtboEWSwqgbMWpavsjCuu4oB2xwUblEYy5Ibd0tYLYgBHq6K+exVWnSUK7/OuJhft4lYJV5ixtQmvm9A4TG6VKNjSA3op9YmxFP8PsV8Xqfvsc+t7WbTFIrbTfP3dvwfGkWPQGvg4pEAAAAASUVORK5CYII=\"","export default function _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}","export default function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","import _extends from '@babel/runtime/helpers/esm/extends';\nimport _objectWithoutPropertiesLoose from '@babel/runtime/helpers/esm/objectWithoutPropertiesLoose';\nimport _assertThisInitialized from '@babel/runtime/helpers/esm/assertThisInitialized';\nimport _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';\nimport _defineProperty from '@babel/runtime/helpers/esm/defineProperty';\nimport { createElement, Component, useRef, useState, useCallback, useDebugValue } from 'react';\nimport invariant from 'invariant';\n\nvar INSTANCE_MAP = new Map();\nvar OBSERVER_MAP = new Map();\nvar ROOT_IDS = new Map();\nvar consecutiveRootId = 0;\n/**\n * Generate a unique ID for the root element\n * @param root\n */\n\nfunction getRootId(root) {\n if (!root) return '';\n if (ROOT_IDS.has(root)) return ROOT_IDS.get(root);\n consecutiveRootId += 1;\n ROOT_IDS.set(root, consecutiveRootId.toString());\n return ROOT_IDS.get(root) + '_';\n}\n/**\n * Monitor element, and trigger callback when element becomes inView\n * @param element {HTMLElement}\n * @param callback {Function} Called with inView\n * @param options {Object} InterSection observer options\n * @param options.threshold {Number} Number between 0 and 1, indicating how much of the element should be inView before triggering\n * @param options.root {HTMLElement}\n * @param options.rootMargin {String} The CSS margin to apply to the root element.\n */\n\n\nfunction observe(element, callback, options) {\n if (options === void 0) {\n options = {};\n }\n\n // IntersectionObserver needs a threshold to trigger, so set it to 0 if it's not defined.\n // Modify the options object, since it's used in the onChange handler.\n if (!options.threshold) options.threshold = 0;\n var _options = options,\n root = _options.root,\n rootMargin = _options.rootMargin,\n threshold = _options.threshold; // Validate that the element is not being used in another \n\n invariant(!INSTANCE_MAP.has(element), \"react-intersection-observer: Trying to observe %s, but it's already being observed by another instance.\\nMake sure the `ref` is only used by a single instance.\\n\\n%s\", element);\n /* istanbul ignore if */\n\n if (!element) return; // Create a unique ID for this observer instance, based on the root, root margin and threshold.\n // An observer with the same options can be reused, so lets use this fact\n\n var observerId = getRootId(root) + (rootMargin ? threshold.toString() + \"_\" + rootMargin : threshold.toString());\n var observerInstance = OBSERVER_MAP.get(observerId);\n\n if (!observerInstance) {\n observerInstance = new IntersectionObserver(onChange, options);\n /* istanbul ignore else */\n\n if (observerId) OBSERVER_MAP.set(observerId, observerInstance);\n }\n\n var instance = {\n callback: callback,\n element: element,\n inView: false,\n observerId: observerId,\n observer: observerInstance,\n // Make sure we have the thresholds value. It's undefined on a browser like Chrome 51.\n thresholds: observerInstance.thresholds || (Array.isArray(threshold) ? threshold : [threshold])\n };\n INSTANCE_MAP.set(element, instance);\n observerInstance.observe(element);\n return instance;\n}\n/**\n * Stop observing an element. If an element is removed from the DOM or otherwise destroyed,\n * make sure to call this method.\n * @param element {Element}\n */\n\nfunction unobserve(element) {\n if (!element) return;\n var instance = INSTANCE_MAP.get(element);\n\n if (instance) {\n var observerId = instance.observerId,\n observer = instance.observer;\n var root = observer.root;\n observer.unobserve(element); // Check if we are still observing any elements with the same threshold.\n\n var itemsLeft = false; // Check if we still have observers configured with the same root.\n\n var rootObserved = false;\n /* istanbul ignore else */\n\n if (observerId) {\n INSTANCE_MAP.forEach(function (item, key) {\n if (key !== element) {\n if (item.observerId === observerId) {\n itemsLeft = true;\n rootObserved = true;\n }\n\n if (item.observer.root === root) {\n rootObserved = true;\n }\n }\n });\n }\n\n if (!rootObserved && root) ROOT_IDS[\"delete\"](root);\n\n if (observer && !itemsLeft) {\n // No more elements to observe for threshold, disconnect observer\n observer.disconnect();\n } // Remove reference to element\n\n\n INSTANCE_MAP[\"delete\"](element);\n }\n}\n\nfunction onChange(changes) {\n changes.forEach(function (intersection) {\n var isIntersecting = intersection.isIntersecting,\n intersectionRatio = intersection.intersectionRatio,\n target = intersection.target;\n var instance = INSTANCE_MAP.get(target); // Firefox can report a negative intersectionRatio when scrolling.\n\n /* istanbul ignore else */\n\n if (instance && intersectionRatio >= 0) {\n // If threshold is an array, check if any of them intersects. This just triggers the onChange event multiple times.\n var inView = instance.thresholds.some(function (threshold) {\n return instance.inView ? intersectionRatio > threshold : intersectionRatio >= threshold;\n });\n\n if (isIntersecting !== undefined) {\n // If isIntersecting is defined, ensure that the element is actually intersecting.\n // Otherwise it reports a threshold of 0\n inView = inView && isIntersecting;\n }\n\n instance.inView = inView;\n instance.callback(inView, intersection);\n }\n });\n}\n\nfunction isPlainChildren(props) {\n return typeof props.children !== 'function';\n}\n/**\n * Monitors scroll, and triggers the children function with updated props\n *\n \n {({inView, ref}) => (\n

{`${inView}`}

\n )}\n
\n */\n\n\nvar InView =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inheritsLoose(InView, _React$Component);\n\n function InView() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n\n _defineProperty(_assertThisInitialized(_this), \"state\", {\n inView: false,\n entry: undefined\n });\n\n _defineProperty(_assertThisInitialized(_this), \"node\", null);\n\n _defineProperty(_assertThisInitialized(_this), \"handleNode\", function (node) {\n if (_this.node) unobserve(_this.node);\n _this.node = node ? node : null;\n\n _this.observeNode();\n });\n\n _defineProperty(_assertThisInitialized(_this), \"handleChange\", function (inView, entry) {\n // Only trigger a state update if inView has changed.\n // This prevents an unnecessary extra state update during mount, when the element stats outside the viewport\n if (inView !== _this.state.inView || inView) {\n _this.setState({\n inView: inView,\n entry: entry\n });\n }\n\n if (_this.props.onChange) {\n // If the user is actively listening for onChange, always trigger it\n _this.props.onChange(inView, entry);\n }\n });\n\n return _this;\n }\n\n var _proto = InView.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n /* istanbul ignore else */\n if (process.env.NODE_ENV !== 'production') {\n invariant(this.node, \"react-intersection-observer: No DOM node found. Make sure you forward \\\"ref\\\" to the root DOM element you want to observe.\");\n }\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {\n // If a IntersectionObserver option changed, reinit the observer\n if (prevProps.rootMargin !== this.props.rootMargin || prevProps.root !== this.props.root || prevProps.threshold !== this.props.threshold) {\n unobserve(this.node);\n this.observeNode();\n }\n\n if (prevState.inView !== this.state.inView) {\n if (this.state.inView && this.props.triggerOnce) {\n unobserve(this.node);\n this.node = null;\n }\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this.node) {\n unobserve(this.node);\n this.node = null;\n }\n };\n\n _proto.observeNode = function observeNode() {\n if (!this.node) return;\n var _this$props = this.props,\n threshold = _this$props.threshold,\n root = _this$props.root,\n rootMargin = _this$props.rootMargin;\n observe(this.node, this.handleChange, {\n threshold: threshold,\n root: root,\n rootMargin: rootMargin\n });\n };\n\n _proto.render = function render() {\n var _this$state = this.state,\n inView = _this$state.inView,\n entry = _this$state.entry;\n\n if (!isPlainChildren(this.props)) {\n return this.props.children({\n inView: inView,\n entry: entry,\n ref: this.handleNode\n });\n }\n\n var _this$props2 = this.props,\n children = _this$props2.children,\n as = _this$props2.as,\n tag = _this$props2.tag,\n triggerOnce = _this$props2.triggerOnce,\n threshold = _this$props2.threshold,\n root = _this$props2.root,\n rootMargin = _this$props2.rootMargin,\n props = _objectWithoutPropertiesLoose(_this$props2, [\"children\", \"as\", \"tag\", \"triggerOnce\", \"threshold\", \"root\", \"rootMargin\"]);\n\n return createElement(as || tag || 'div', _extends({\n ref: this.handleNode\n }, props), children);\n };\n\n return InView;\n}(Component);\n\n_defineProperty(InView, \"displayName\", 'InView');\n\n_defineProperty(InView, \"defaultProps\", {\n threshold: 0,\n triggerOnce: false\n});\n\n/* eslint-disable react-hooks/exhaustive-deps */\nfunction useInView(options) {\n if (options === void 0) {\n options = {};\n }\n\n var ref = useRef();\n\n var _React$useState = useState({\n inView: false,\n entry: undefined\n }),\n state = _React$useState[0],\n setState = _React$useState[1];\n\n var setRef = useCallback(function (node) {\n if (ref.current) {\n unobserve(ref.current);\n }\n\n if (node) {\n observe(node, function (inView, intersection) {\n setState({\n inView: inView,\n entry: intersection\n });\n\n if (inView && options.triggerOnce) {\n // If it should only trigger once, unobserve the element after it's inView\n unobserve(node);\n }\n }, options);\n } // Store a reference to the node\n\n\n ref.current = node;\n }, [options.threshold, options.root, options.rootMargin, options.triggerOnce]);\n useDebugValue(state.inView);\n return [setRef, state.inView, state.entry];\n}\n\nexport default InView;\nexport { InView, useInView };\n","export default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}","export default function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}","import { Wrapper } from 'lib/noop-wrapper'\nimport React from 'react'\nimport Link from 'next/link'\n\ninterface ICommunityLink {\n id?: string\n}\n\nfunction communityLink({ id }: ICommunityLink): Wrapper {\n return (content) =>\n id ? (\n \n \n {content}\n \n \n \n ) : (\n content\n )\n}\n\nexport default communityLink\n","import React, {\n CSSProperties,\n MouseEventHandler,\n useCallback,\n useMemo,\n MouseEvent,\n} from 'react'\nimport formatTime from 'lib/format-time'\nimport classNames from 'classnames'\nimport noopWrapper, { Wrapper } from 'lib/noop-wrapper'\nimport communityLink from 'Components/new/links/community-link'\nimport useToggleCollect from 'Components/hooks/use-toggle-collect'\nimport useToggleDigg, {\n IToggleDiggParams,\n} from 'Components/hooks/use-toggle-digg'\nimport formatNumber from '@arsenal/arsenal/modules/formatNumber'\n\nexport const replyIcon = require('static/reply.svg')\nexport const likeNormalIcon = require('static/like-normal.svg')\nexport const likeActiveIcon = require('static/like-active.svg')\n\nfunction makeCollectNormalIcon({ theme }: { theme: 'light' | 'black' }) {\n const fill = theme === 'black' ? '%23c9cbd6' : '%231F2129'\n return (\n `${\n 'data:image/svg+xml;utf8,' +\n '' +\n ' ' +\n ' ` +\n ` ` +\n ` ` +\n ` ` +\n ` ` +\n ` ` +\n ` ` +\n ``\n )\n}\n\nfunction makeCollectActiveIcon({ theme }: { theme: 'light' | 'black' }) {\n const border =\n theme === 'light'\n ? '' +\n '' +\n '' +\n ''\n : ''\n return (\n `${\n 'data:image/svg+xml;utf8,' +\n '' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ' '\n }${border} ` +\n ` ` +\n ` ` +\n ``\n )\n}\n\nexport const collectNormalIcon = makeCollectNormalIcon({ theme: 'light' })\nexport const collectActiveIcon = makeCollectActiveIcon({ theme: 'light' })\n\nexport const collectNormalIconBlack = makeCollectNormalIcon({ theme: 'black' })\nexport const collectActiveIconBlack = makeCollectActiveIcon({ theme: 'black' })\n\nexport const diggNormalIcon =\n 'data:image/svg+xml;utf8,' +\n '' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ''\n\nexport const diggActiveIcon =\n 'data:image/svg+xml;utf8,' +\n '' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ''\n\ninterface IButtonProps {\n icon?: string\n onClick?(event: MouseEvent): void\n style?: CSSProperties\n className?: string\n count?: number\n text?: string\n linkWrapper?: Wrapper\n size?: 'default' | 'small'\n}\n\nconst InteractButton: React.FC = ({\n icon,\n style,\n className,\n count,\n text,\n size = 'default',\n linkWrapper = noopWrapper,\n onClick,\n}) => {\n const [iconSize, paddingLeft, fontSize, height, leading] = useMemo(() => {\n switch (size) {\n case 'small':\n return [16, 2, 'tw-text-12', 'tw-h-18', 'tw-leading-18']\n default:\n return [20, 4, 'tw-text-16', 'tw-h-22', 'tw-leading-22']\n }\n }, [size])\n\n const showCount = useMemo(() => {\n return typeof count === 'number' && count > 0 ? formatNumber(count) : ''\n }, [count])\n\n return (\n \n \n {linkWrapper(\n \n {`${showCount}${text || ''}`}\n \n )}\n \n \n \n )\n}\n\ninterface IDiggButtonProps\n extends IToggleDiggParams,\n Omit {\n onClick?(status: boolean): void\n}\n\n// 点赞按钮\nexport const DiggButton: React.FC = ({\n id,\n type,\n hasDigg,\n diggCount,\n groupId,\n cellStyle,\n articleType,\n onClick,\n ...props\n}) => {\n const {\n update: toggle,\n curStatus,\n curCount,\n } = useToggleDigg({\n id,\n type,\n hasDigg,\n diggCount,\n groupId,\n cellStyle,\n articleType,\n })\n\n const handleClick = stopPropagation(\n preventDefault(\n useCallback(() => {\n if (onClick) {\n onClick(curStatus)\n }\n if (toggle) {\n toggle()\n }\n }, [onClick, curStatus, toggle])\n )\n )\n\n return (\n \n )\n}\n\ninterface ICollectButtonProps extends Omit {\n id?: string // 主id\n collected?: boolean // 当前是否点赞/收藏\n collectCount?: number // 点赞/收藏数\n showCount?: boolean\n theme?: 'light' | 'black'\n renderText?(status: boolean): string\n onClick?(status: boolean): void\n}\n\n// 收藏按钮\nexport const CollectButton: React.FC = ({\n theme = 'light',\n id,\n collected,\n collectCount,\n showCount = false,\n renderText,\n onClick,\n ...props\n}) => {\n const {\n update: toggle,\n curStatus,\n curCount,\n } = useToggleCollect({\n id: id || '',\n collected,\n collectCount,\n })\n\n const handleClick = stopPropagation(\n preventDefault(\n useCallback(() => {\n if (onClick) {\n onClick(curStatus)\n }\n if (toggle) {\n toggle()\n }\n }, [onClick, curStatus, toggle])\n )\n )\n\n return (\n \n )\n}\n\nexport function stopPropagation(callback?: MouseEventHandler) {\n return useCallback(\n (event: React.MouseEvent) => {\n event.stopPropagation()\n if (callback) {\n callback(event)\n }\n },\n [callback]\n )\n}\n\nexport function preventDefault(callback?: MouseEventHandler) {\n return useCallback(\n (event: React.MouseEvent) => {\n event.preventDefault()\n if (callback) {\n callback(event)\n }\n },\n [callback]\n )\n}\n\nexport interface IProps {\n id?: string // 主id 组件用于评论就传评论id 用于文章就传文章id\n diggType?: IToggleDiggParams['type']\n isOwnerDigg?: boolean // 圈主点赞\n questionStatus?: number // 答案状态\n questionDisplay?: string // 答案状态显示文字\n time?: number // 时间\n timeUnit?: string // 时间描述文字\n awardText?: string // 悬赏文字\n awardIcon?: string // 悬赏图标\n commentVisible?: boolean // 显示评论按钮\n commentCount?: number // 评论数\n diggVisible?: boolean // 显示点赞按钮\n diggCount?: number // 点赞数\n selfHasDigg?: boolean // 当前用户是否点赞\n groupId?: string // 文章id 用于对评论点赞\n cellStyle?: number // 点赞类型\n articleType?: number // 文章类型\n commentLinkWrapper?: Wrapper // 评论跳转链接\n commentText?: string // 评论按钮文字\n collectVisible?: boolean // 显示收藏按钮\n collected?: boolean // 是否收藏\n communityId?: string // 车友圈id\n communityName?: string // 车友圈名称\n onClickComment?(event: MouseEvent): void\n onClickCollect?(status: boolean): void\n onClickCommunity?(): void\n onClickDigg?(status: boolean): void\n}\n\nconst Interact: React.FC = ({\n id,\n diggType,\n isOwnerDigg,\n questionStatus,\n questionDisplay,\n awardText,\n awardIcon,\n time,\n timeUnit,\n commentVisible = true,\n commentCount,\n diggVisible = true,\n diggCount,\n selfHasDigg,\n groupId,\n cellStyle,\n articleType,\n commentText = '评论',\n collectVisible = true,\n collected,\n communityId,\n communityName,\n commentLinkWrapper = noopWrapper,\n onClickComment,\n onClickCollect,\n onClickCommunity,\n onClickDigg,\n}) => {\n const communityLinkWrapper = useMemo(\n () => communityLink({ id: communityId }),\n [communityId]\n )\n\n const handleClickCommunity = stopPropagation(onClickCommunity)\n\n const handleClickComment = stopPropagation(onClickComment)\n\n return (\n \n
\n
\n {communityName ? (\n \n {communityLinkWrapper(communityName)}\n \n ) : null}\n {isOwnerDigg ? (\n \n 圈主点赞\n \n ) : null}\n {time ? (\n \n {formatTime(time * 1000)}\n {timeUnit}\n \n ) : null}\n
\n
\n {questionStatus === 0 && awardText ? (\n \n {awardText}\n \n ) : null}\n {commentVisible ? (\n \n ) : null}\n {diggVisible ? (\n \n ) : null}\n {collectVisible ? (\n \n ) : null}\n {questionStatus ? (\n \n ) : null}\n
\n
\n \n
\n )\n}\n\nexport default Interact\n"],"sourceRoot":""}