Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 3627 | Mostrar el archivo completo | | | Autoría | Ultima modificación | Ver Log |

Rev 3627 Rev 3719
Línea 1... Línea 1...
1
import React, { useEffect, useState } from 'react';
1
import React, { useEffect, useState } from 'react';
2
import { Box } from '@mui/material';
2
import { Box } from '@mui/material';
3
 
3
 
4
import { useDebounce } from '@hooks';
4
import { useDebounce } from '@hooks';
5
import { useAlert, useApi } from '@shared/hooks';
5
import { useAlert, useApi } from '@shared/hooks';
6
import { searchUsers } from '@shared/services';
6
import { searchUsers } from '@shared/services';
7
 
7
 
8
import { List, ListItem, SearchBar, Spinner } from '@shared/components';
8
import { List, ListItem, SearchBar, Spinner } from '@shared/components';
9
 
9
 
10
export const SearchUserModal = ({ onSelect }) => {
10
export const SearchUserModal = ({ onSelect }) => {
11
  const [search, setSearch] = useState('');
11
  const [search, setSearch] = useState('');
12
  const debouncedSearch = useDebounce(search, 500);
12
  const debouncedSearch = useDebounce(search, 500);
13
 
13
 
14
  const { showError } = useAlert();
14
  const { showError } = useAlert();
15
 
15
 
16
  const { data, loading, execute } = useApi(searchUsers, {
16
  const { data, loading, execute } = useApi(searchUsers, {
17
    onError: (error) => showError(error.message)
17
    onError: (error) => showError(error.message)
18
  });
18
  });
19
 
19
 
20
  useEffect(() => {
20
  useEffect(() => {
21
    execute(debouncedSearch);
21
    execute(debouncedSearch);
22
  }, [debouncedSearch]);
22
  }, [debouncedSearch]);
23
 
23
 
24
  return (
24
  return (
25
    <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1 }}>
25
    <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1 }}>
26
      <SearchBar
26
      <SearchBar
27
        label='Busca un usuario'
27
        label='Busca un usuario'
28
        placeholder='Escribe el nombre del usuario'
28
        placeholder='Escribe el nombre del usuario'
29
        onChange={setSearch}
29
        onChange={setSearch}
30
        value={search}
30
        value={search}
31
      />
31
      />
32
      {loading ? (
32
      {loading ? (
33
        <Spinner />
33
        <Spinner />
34
      ) : (
34
      ) : (
35
        <List
35
        <List
36
          items={data?.current?.items ?? []}
36
          items={data?.current?.items ?? []}
37
          keyExtractor={(item) => item.uuid}
37
          keyExtractor={(item) => item.uuid}
38
          renderItem={(item) => (
38
          renderItem={(item) => (
39
            <ListItem title={item.name} image={item.image} onClick={() => onSelect(item)} />
39
            <ListItem title={item.name} image={item.image} onClick={() => onSelect(item)} />
40
          )}
40
          )}
41
          emptyMessage='No se encontraron usuarios'
41
          emptyMessage='No se encontraron usuarios'
42
        />
42
        />
43
      )}
43
      )}
44
    </Box>
44
    </Box>
45
  );
45
  );
46
};
46
};