{"version":3,"file":"js/chunk.67c0a3ee88fee3d1.js","mappings":"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","sources":["webpack:///./src/components/group/GroupPostDetailTools/index.tsx","webpack:///./src/api/homepage.ts"],"sourcesContent":["import * as api from '@/api/group';\nimport * as api2 from '@/api/homepage';\nimport bookmarkedSvg from '@/static/imgs/bookmarked.svg';\nimport bookmarkSvg from '@/static/imgs/post-detail-bookmark.svg';\nimport likePainSvg from '@/static/imgs/post-detail-like-pain.svg';\nimport likeSvg from '@/static/imgs/post-detail-like.svg';\nimport sharePlainSvg from '@/static/imgs/share-plain.svg';\nimport { useSharedData } from '@ns/mpa';\nimport { Button, Input, message, Popover } from 'antd';\nimport ClipboardJS from 'clipboard';\nimport { useEffect, useState } from 'react';\nimport './index.scss';\ntype GroupPostDetailToolsProps = {\n  uid: string;\n  like_count: number;\n  user_like_status: boolean;\n  user_bookmark_status: boolean;\n};\nconst clipboard = new ClipboardJS('#copyBtn');\n\nclipboard.on('success', () => {\n  message.success('复制成功');\n});\n\nconst GroupPostDetailTools: React.FC<{ isMobile?: boolean }> = ({\n  isMobile,\n}) => {\n  const post = useSharedData<GroupPostDetailToolsProps>('post');\n  const [bookmarkStatus, setBookmarkStatus] = useState(\n    post.user_bookmark_status,\n  );\n  const [likeStatus, setLikeStatus] = useState(post.user_like_status);\n  const [likeCount, setLikeCount] = useState(post.like_count);\n\n  useEffect(() => {\n    return () => {\n      clipboard.destroy();\n    };\n  }, []);\n  return (\n    <div className=\"group-post-detail-tools flex space-between items-center\">\n      <div\n        className={`flex items-center ${\n          !isMobile\n            ? 'border-1px border-solid border-hex-E5E6EB rounded-6px p-8px'\n            : ''\n        }  cursor-pointer ${likeStatus ? 'active' : ''}`}\n        onClick={async () => {\n          if (likeStatus) {\n            await api.unlikeGroupPost(post.uid);\n            setLikeCount(likeCount - 1);\n          } else {\n            await api.likeGroupPost(post.uid);\n            setLikeCount(likeCount + 1);\n            try {\n              const usertaskRes = await api2.getUnreadUserTask();\n              if (usertaskRes.jifen && usertaskRes.building_score)\n                message.success(\n                  `积分+${usertaskRes.jifen},共建值+${usertaskRes.building_score}`,\n                );\n              if (usertaskRes.jifen && !usertaskRes.building_score)\n                message.success(`积分+${usertaskRes.jifen}`);\n              if (!usertaskRes.jifen && usertaskRes.building_score)\n                message.success(`共建值+${usertaskRes.building_score}`);\n            } catch (e) {}\n          }\n          setLikeStatus(!likeStatus);\n        }}\n      >\n        <img\n          className=\"mr-4px w-24px h-24px\"\n          src={likeStatus ? likeSvg : likePainSvg}\n        />\n        <div>{likeCount}</div>\n      </div>\n      <div\n        className={`flex items-center ${\n          !isMobile\n            ? 'border-1px border-solid border-hex-E5E6EB rounded-6px p-8px'\n            : ''\n        } cursor-pointer ml-10px ${bookmarkStatus ? 'active' : ''}`}\n        onClick={async () => {\n          if (bookmarkStatus) {\n            await api.unbookmarkGroupPost(post.uid);\n          } else {\n            await api.bookmarkGroupPost(post.uid);\n          }\n          setBookmarkStatus(!bookmarkStatus);\n        }}\n      >\n        <img\n          className=\"mr-4px w-24px h-24px\"\n          src={bookmarkStatus ? bookmarkedSvg : bookmarkSvg}\n        />\n        <div>收藏</div>\n      </div>\n      {!isMobile && (\n        <Popover\n          content={\n            <div data-flex>\n              <Input defaultValue={window.location.href} />\n              <Button id=\"copyBtn\" data-clipboard-text={window.location.href}>\n                复制\n              </Button>\n            </div>\n          }\n          title=\"分享的链接\"\n          trigger={'click'}\n        >\n          <div className=\"flex items-center border-1px border-solid border-hex-E5E6EB rounded-6px p-8px cursor-pointer ml-10px\">\n            <img className=\"mr-4px w-24px h-24px\" src={sharePlainSvg} />\n            <span>分享</span>\n          </div>\n        </Popover>\n      )}\n    </div>\n  );\n};\n\nexport default GroupPostDetailTools;\n","import request from './request';\n\n// 获取广告内容\nexport async function areaDetail(areaCode: string) {\n  return request<API.Homepage.Area>(`/api/publicity/areas/${areaCode}`, {\n    skipErrorHandler: true,\n  });\n}\n\n// 获取广告弹窗内容\nexport async function getPopDetail() {\n  return request<API.Homepage.Pop>(`/api/publicity/pop`, {\n    skipErrorHandler: true,\n  });\n}\n\n// 活动列表\nexport async function listActivities(\n  params: API.Homepage.ActivityForListParams,\n) {\n  return request<API.Homepage.ActivityForList[]>(`/api/activity/activities`, {\n    params,\n  });\n}\n\n// 获取社区表单\nexport async function listCommunityForms(\n  params: API.Homepage.FormForListParams,\n) {\n  return request<API.PageResponse<API.Homepage.FormForList>>(\n    '/api/crf/community/forms',\n    { params },\n  );\n}\n\n/**\n * 贡献排行榜\n * @param statsType\n * portal_rank: 总榜\n * portal_rank_last30d: 月榜\n */\nexport async function rankForList(params: API.Homepage.RankForListParams) {\n  return request<API.ToolPageResponse<API.Homepage.RankForList>>(\n    '/api/stats/rank/ranks',\n    { params },\n  );\n}\n\n/**\n * 科研导航-首页展示\n * @returns\n */\nexport async function navigationForList() {\n  return request<API.ToolPageResponse<API.Homepage.NavigationForList>>(\n    '/api/tools/navigation/navigations/index',\n  );\n}\n\n/**\n * 工具广场\n * @returns\n */\nexport async function toolsForList() {\n  return request<API.ToolPageResponse<API.Homepage.ToolForList>>(\n    '/api/tools/portal',\n  );\n}\n\n/**\n * 收藏\n * @param navigationId\n * @returns\n */\nexport async function navigationBookmark(navigationId: number) {\n  return request(`/api/tools/navigation/${navigationId}/like`, {\n    method: 'POST',\n  });\n}\n\n/**\n * 取消收藏\n * @param navigationId\n * @returns\n */\nexport async function navigationUnbookmark(navigationId: number) {\n  return request(`/api/tools/navigation/${navigationId}/unlike`, {\n    method: 'POST',\n  });\n}\n\n/**\n *\n * @returns\n */\nexport async function getStats() {\n  return request<API.Homepage.StatsDetail>('/api/stats/threads/count');\n}\n\n// 积分任务列表\nexport async function listTasks(params: { is_jifen_enabled?: number }) {\n  return request<API.Homepage.TaskForList[]>('/api/task/tasks', {\n    // 首页会自动调用该接口,用户未登录时屏蔽报错\n    // FIXME 注意,原则上,这里不应该设置 skipErrorHandler,而应该在业务组件中判断,若用户未登录,则不调用该接口\n    skipErrorHandler: true,\n    params,\n  });\n}\n\n// 触发任务事件通知\nexport async function taskSignals(data: API.Homepage.TaskCheckSignalsData) {\n  return request<API.Homepage.TaskForList[]>('/api/task/signals', {\n    method: 'POST',\n    data,\n  });\n}\n// 签到\nexport async function taskCheck(data: API.Homepage.TaskCheckData) {\n  return request<API.Homepage.TaskForList[]>('/api/task/check', {\n    method: 'POST',\n    data,\n  });\n}\n// 用户签到详情\nexport async function getUsercheck(params: { device_t: number }) {\n  return request<API.Homepage.TaskUsercheckDetail>('/api/task/usercheck', {\n    params,\n    // 首页会自动调用该接口,用户未登录时屏蔽报错\n    // FIXME 注意,原则上,这里不应该设置 skipErrorHandler,而应该在业务组件中判断,若用户未登录,则不调用该接口\n    skipErrorHandler: true,\n  });\n}\n\n// 共建积分概要\nexport async function getBuildingOverview() {\n  return request<API.Homepage.BuildingOverviewDetail>(\n    '/api/task/building-overview',\n  );\n}\n\n// 共建榜前10\nexport async function getBuildingRank(params: { kind: 'all' | 'week' }) {\n  return request<API.Homepage.BuildingRankForGet>(\n    '/api/task/stat/building-rank',\n    { params },\n  );\n}\n\n// 用户勋章列表\nexport async function getUserMedal(uid: string | null) {\n  return request<API.Homepage.UserMedalForList[]>(\n    `/api/task/users/${uid}/user-medal`,\n  );\n}\n\n// 获取用户完成任务的提示\nexport async function getUnreadUserTask() {\n  return request<API.Homepage.UnreadUserTaskForGet>(\n    '/api/task/get-unread-user-task',\n  );\n}\n\n// 获取用户勋章提示\nexport async function getUnreadUserMedal() {\n  return request<API.Homepage.UnreadUserMedalForGet>(\n    '/api/task/get-unread-user-medal',\n  );\n}\n\n// 最新动态\nexport async function listEvents(params: API.PageParams) {\n  return request<API.ToolPageResponse<API.Homepage.EventForList>>(\n    '/api/event/events',\n    {\n      params,\n    },\n  );\n}\n\n// 获取用户是否有机构工作台\nexport async function getHasDashboard() {\n  return request<API.Homepage.HasJoinedDashboard>(\n    '/api/system/userinfo/dashboard',\n  );\n}\n"],"names":["clipboard","ClipboardJS","on","message","isMobile","post","useSharedData","useState","user_bookmark_status","bookmarkStatus","setBookmarkStatus","user_like_status","likeStatus","setLikeStatus","like_count","likeCount","setLikeCount","useEffect","destroy","className","onClick","api","uid","api2","usertaskRes","jifen","building_score","src","likeSvg","likePainSvg","bookmarkedSvg","bookmarkSvg","content","defaultValue","window","location","href","id","title","trigger","sharePlainSvg","areaDetail","areaCode","request","skipErrorHandler","getPopDetail","listActivities","params","listCommunityForms","navigationForList","toolsForList","navigationBookmark","navigationId","method","navigationUnbookmark","getStats","listTasks","taskCheck","data","getUsercheck","getBuildingOverview","getBuildingRank","getUserMedal","getUnreadUserTask","getUnreadUserMedal","listEvents"],"sourceRoot":""}