AddMember.tsx 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. import { useIntl } from "react-intl";
  2. import { ProForm, ProFormSelect } from "@ant-design/pro-components";
  3. import { Button, message, Popover } from "antd";
  4. import { UserAddOutlined } from "@ant-design/icons";
  5. import { get, post } from "../../request";
  6. import type { IUserListResponse } from "../../api/Auth";
  7. import type {
  8. IGroupMemberRequest,
  9. IGroupMemberResponse,
  10. } from "../../api/Group";
  11. import { useState } from "react";
  12. interface IFormData {
  13. userId: string;
  14. }
  15. interface IWidget {
  16. groupId?: string;
  17. onCreated?: Function;
  18. }
  19. const AddMemberWidget = ({ groupId, onCreated }: IWidget) => {
  20. const intl = useIntl();
  21. const [open, setOpen] = useState(false);
  22. const form = (
  23. <ProForm<IFormData>
  24. onFinish={async (values: IFormData) => {
  25. console.log(values);
  26. if (typeof groupId !== "undefined") {
  27. post<IGroupMemberRequest, IGroupMemberResponse>("/v2/group-member", {
  28. user_id: values.userId,
  29. group_id: groupId,
  30. }).then((json) => {
  31. console.log("add member", json);
  32. if (json.ok) {
  33. message.success(intl.formatMessage({ id: "flashes.success" }));
  34. setOpen(false);
  35. if (typeof onCreated !== "undefined") {
  36. onCreated();
  37. }
  38. }
  39. });
  40. }
  41. }}
  42. >
  43. <ProForm.Group>
  44. <ProFormSelect
  45. name="userId"
  46. label={intl.formatMessage({ id: "forms.fields.user.label" })}
  47. showSearch
  48. debounceTime={300}
  49. request={async ({ keyWords }) => {
  50. console.log("keyWord", keyWords);
  51. const json = await get<IUserListResponse>(
  52. `/v2/user?view=key&key=${keyWords}`
  53. );
  54. const userList = json.data.rows.map((item) => {
  55. return {
  56. value: item.id,
  57. label: `${item.userName}-${item.nickName}`,
  58. };
  59. });
  60. console.log("json", userList);
  61. return userList;
  62. }}
  63. placeholder={intl.formatMessage({
  64. id: "forms.message.user.required",
  65. })}
  66. rules={[
  67. {
  68. required: true,
  69. },
  70. ]}
  71. />
  72. </ProForm.Group>
  73. </ProForm>
  74. );
  75. return (
  76. <Popover
  77. placement="bottomLeft"
  78. arrowPointAtCenter
  79. content={form}
  80. trigger="click"
  81. open={open}
  82. onOpenChange={(open: boolean) => {
  83. setOpen(open);
  84. }}
  85. >
  86. <Button icon={<UserAddOutlined />} key="add" type="primary">
  87. {intl.formatMessage({ id: "buttons.group.add.member" })}
  88. </Button>
  89. </Popover>
  90. );
  91. };
  92. export default AddMemberWidget;