AddMember.tsx 2.8 KB

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