You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

88 lines
2.5KB

  1. import { Box, Grid, Stack, Typography } from "@mui/material";
  2. import { Dictionary } from "@types";
  3. import {
  4. 運営会社ログインユーザ,
  5. 顧客ログインユーザ一覧取得,
  6. } from "api/login-user";
  7. import { FormProvider, RHFTextField } from "components/hook-form";
  8. import useAPICall from "hooks/useAPICall";
  9. import useSearchConditionContext from "hooks/useSearchConditionContext";
  10. import { UseTableReturn } from "hooks/useTable";
  11. import { isEqual } from "lodash";
  12. import { useEffect, useState } from "react";
  13. import { useForm } from "react-hook-form";
  14. type FormProps = {
  15. name: string;
  16. email: string;
  17. };
  18. type CommonProps = {
  19. table: UseTableReturn<運営会社ログインユーザ>;
  20. };
  21. export default function SearchBox({ table }: CommonProps) {
  22. const [lastSendSearchCondition, setLastSendSearchCondition] =
  23. useState<object>({ default: false });
  24. const { condition, initialized, get, addCondition } =
  25. useSearchConditionContext();
  26. const form = useForm<FormProps>({
  27. defaultValues: {
  28. name: "",
  29. email: "",
  30. },
  31. });
  32. const { callAPI: call顧客一覧取得, makeSendData } = useAPICall({
  33. apiMethod: 顧客ログインユーザ一覧取得,
  34. form,
  35. backDrop: true,
  36. onSuccess: ({ data }) => {
  37. table.setRowData(data.list);
  38. },
  39. });
  40. const handleBlur = () => {
  41. addCondition(form.getValues());
  42. };
  43. const handleSubmit = async (data: FormProps) => {
  44. addCondition(data);
  45. };
  46. const fetch = async (data: Dictionary) => {
  47. const sendData = makeSendData(data);
  48. console.log({ sendData });
  49. if (!isEqual(sendData, lastSendSearchCondition)) {
  50. setLastSendSearchCondition(sendData);
  51. call顧客一覧取得(sendData);
  52. }
  53. };
  54. useEffect(() => {
  55. console.log({ initialized, condition });
  56. if (initialized) {
  57. fetch(condition);
  58. }
  59. }, [condition, initialized]);
  60. return (
  61. <FormProvider methods={form} onSubmit={form.handleSubmit(handleSubmit)}>
  62. <Box sx={{ p: 1, m: 1 }}>
  63. <Grid container spacing={2} mt={-1}>
  64. <Grid item xs={12} lg={6}>
  65. <Stack>
  66. <Typography>名前</Typography>
  67. <RHFTextField name="name" onBlur={handleBlur} />
  68. </Stack>
  69. </Grid>
  70. <Grid item xs={12} lg={6}>
  71. <Stack>
  72. <Typography>Email</Typography>
  73. <RHFTextField name="email" onBlur={handleBlur} />
  74. </Stack>
  75. </Grid>
  76. </Grid>
  77. </Box>
  78. </FormProvider>
  79. );
  80. }