Assignees.tsx 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import { message } from "antd";
  2. import type {
  3. ITaskData,
  4. ITaskResponse,
  5. ITaskUpdateRequest,
  6. } from "../../api/task";
  7. import type { IUser } from "../auth/User";
  8. import EditableAvatarGroup from "../like/EditableAvatarGroup";
  9. import { useEffect, useState } from "react";
  10. import type { IDataType } from "../like/WatchAdd";
  11. import { patch } from "../../request";
  12. interface IWidget {
  13. task?: ITaskData;
  14. onChange?: (data: ITaskData[]) => void;
  15. }
  16. const Assignees = ({ task, onChange }: IWidget) => {
  17. const [data, setData] = useState<IUser[] | null>();
  18. useEffect(() => setData(task?.assignees), [task]);
  19. return (
  20. <>
  21. <EditableAvatarGroup
  22. users={data ?? undefined}
  23. onDelete={async (user: IUser) => {
  24. if (!task) {
  25. console.error("no task");
  26. return;
  27. }
  28. let users: string[] = [];
  29. if (task.assignees_id) {
  30. users = task.assignees_id.filter((value) => value !== user.id);
  31. }
  32. const setting: ITaskUpdateRequest = {
  33. id: task.id,
  34. studio_name: "",
  35. assignees_id: users,
  36. };
  37. const url = `/v2/task/${setting.id}`;
  38. console.info("api request", url, setting);
  39. patch<ITaskUpdateRequest, ITaskResponse>(url, setting).then(
  40. (json) => {
  41. console.info("api response", json);
  42. if (json.ok) {
  43. message.success("Success");
  44. onChange && onChange([json.data]);
  45. } else {
  46. message.error(json.message);
  47. }
  48. }
  49. );
  50. }}
  51. onFinish={async (values: IDataType) => {
  52. if (!task) {
  53. console.error("no task");
  54. return;
  55. }
  56. let users: string[] = [];
  57. if (task.assignees_id) {
  58. users = task.assignees_id;
  59. }
  60. if (values.user_id) {
  61. users = [...users, values.user_id];
  62. }
  63. const setting: ITaskUpdateRequest = {
  64. id: task.id,
  65. studio_name: "",
  66. assignees_id: users,
  67. };
  68. const url = `/v2/task/${setting.id}`;
  69. console.info("api request", url, setting);
  70. patch<ITaskUpdateRequest, ITaskResponse>(url, setting).then(
  71. (json) => {
  72. console.info("api response", json);
  73. if (json.ok) {
  74. message.success("Success");
  75. onChange && onChange([json.data]);
  76. } else {
  77. message.error(json.message);
  78. }
  79. }
  80. );
  81. }}
  82. />
  83. </>
  84. );
  85. };
  86. export default Assignees;