| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- import { useEffect, useState } from "react";
- import type {
- ILikeListResponse,
- ILikeRequest,
- ILikeResponse,
- TLikeType,
- } from "../../api/like";
- import { get, post } from "../../request";
- import type { IUser } from "../auth/User";
- import type { IDataType } from "./WatchAdd";
- import EditableAvatarGroup from "./EditableAvatarGroup";
- interface IWidget {
- resId?: string;
- resType?: string;
- type?: TLikeType;
- }
- const LikeAvatar = ({ resId, resType, type }: IWidget) => {
- const [data, setData] = useState<IUser[]>();
- useEffect(() => {
- if (!resId) {
- return;
- }
- const url = `/v2/like?view=target&target_id=${resId}&type=${type}`;
- console.info("api request", url);
- get<ILikeListResponse>(url).then((json) => {
- console.info("api response", json);
- if (json.ok) {
- setData(json.data.rows.map((item) => item.user));
- }
- });
- }, [resId, type]);
- return (
- <>
- <EditableAvatarGroup
- users={data}
- onFinish={async (values: IDataType) => {
- if (!resId || !resType) {
- console.error("no resId or resType", resId, resType);
- return;
- }
- const update: ILikeRequest = {
- type: "watch",
- target_id: resId,
- target_type: resType,
- user_id: values.user_id,
- };
- const url = `/v2/like`;
- console.info("watch add api request", url, values);
- const add = await post<ILikeRequest, ILikeResponse>(url, update);
- console.debug("watch add api response", add);
- setData((origin) => {
- if (origin) {
- return [...origin, add.data.user];
- } else {
- return [add.data.user];
- }
- });
- }}
- />
- </>
- );
- };
- export default LikeAvatar;
|