mirror of
https://github.com/strapi/strapi.git
synced 2025-09-19 05:23:05 +00:00
component feedback
This commit is contained in:
parent
345b8ac158
commit
aebb87b5e5
@ -297,13 +297,6 @@ function ListView({
|
|||||||
startActions={
|
startActions={
|
||||||
<>
|
<>
|
||||||
{isSearchable && (
|
{isSearchable && (
|
||||||
// <Search
|
|
||||||
// label={formatMessage(
|
|
||||||
// { id: 'app.component.search.label', defaultMessage: 'Search for {target}' },
|
|
||||||
// { target: headerLayoutTitle }
|
|
||||||
// )}
|
|
||||||
// trackedEvent="didSearch"
|
|
||||||
// />
|
|
||||||
<SearchURLQuery
|
<SearchURLQuery
|
||||||
label={formatMessage(
|
label={formatMessage(
|
||||||
{ id: 'app.component.search.label', defaultMessage: 'Search for {target}' },
|
{ id: 'app.component.search.label', defaultMessage: 'Search for {target}' },
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import React, { useEffect, useState, useRef } from 'react';
|
import React, { useLayoutEffect, useState, useRef } from 'react';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import { useIntl } from 'react-intl';
|
import { useIntl } from 'react-intl';
|
||||||
import SearchIcon from '@strapi/icons/Search';
|
import SearchIcon from '@strapi/icons/Search';
|
||||||
@ -10,35 +10,24 @@ import useTracking from '../../hooks/useTracking';
|
|||||||
const SearchURLQuery = ({ label, trackedEvent }) => {
|
const SearchURLQuery = ({ label, trackedEvent }) => {
|
||||||
const wrapperRef = useRef(null);
|
const wrapperRef = useRef(null);
|
||||||
const iconButtonRef = useRef(null);
|
const iconButtonRef = useRef(null);
|
||||||
const isMountedRef = useRef(false);
|
|
||||||
const [didSearch, setDidSearch] = useState(false);
|
|
||||||
|
|
||||||
const [isOpen, setIsOpen] = useState(false);
|
|
||||||
const [{ query }, setQuery] = useQueryParams();
|
const [{ query }, setQuery] = useQueryParams();
|
||||||
const [value, setValue] = useState(query?._q || '');
|
const [value, setValue] = useState(query?._q || '');
|
||||||
|
const [isOpen, setIsOpen] = useState(!!value);
|
||||||
const { formatMessage } = useIntl();
|
const { formatMessage } = useIntl();
|
||||||
const { trackUsage } = useTracking();
|
const { trackUsage } = useTracking();
|
||||||
|
|
||||||
const handleToggle = () => setIsOpen(prev => !prev);
|
const handleToggle = () => setIsOpen(prev => !prev);
|
||||||
|
|
||||||
useEffect(() => {
|
useLayoutEffect(() => {
|
||||||
if (isMountedRef.current) {
|
if (isOpen) {
|
||||||
if (isOpen) {
|
setTimeout(() => {
|
||||||
wrapperRef.current.querySelector('input').focus();
|
wrapperRef.current.querySelector('input').focus();
|
||||||
}
|
}, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
isMountedRef.current = true;
|
|
||||||
}, [isOpen]);
|
}, [isOpen]);
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
if (value && !isOpen) {
|
|
||||||
handleToggle();
|
|
||||||
}
|
|
||||||
}, [value, isOpen]);
|
|
||||||
|
|
||||||
const handleClear = () => {
|
const handleClear = () => {
|
||||||
setDidSearch(false);
|
|
||||||
setValue('');
|
setValue('');
|
||||||
setQuery({ _q: '' }, 'remove');
|
setQuery({ _q: '' }, 'remove');
|
||||||
};
|
};
|
||||||
@ -46,14 +35,16 @@ const SearchURLQuery = ({ label, trackedEvent }) => {
|
|||||||
const handleSubmit = e => {
|
const handleSubmit = e => {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
|
||||||
setQuery({ _q: value, page: 1 });
|
if (value) {
|
||||||
};
|
if (trackedEvent) {
|
||||||
|
trackUsage(trackedEvent);
|
||||||
useEffect(() => {
|
}
|
||||||
if (didSearch && trackedEvent) {
|
setQuery({ _q: value, page: 1 });
|
||||||
trackUsage(trackedEvent);
|
} else {
|
||||||
|
handleToggle();
|
||||||
|
setQuery({ _q: '' }, 'remove');
|
||||||
}
|
}
|
||||||
}, [didSearch, trackedEvent, trackUsage]);
|
};
|
||||||
|
|
||||||
if (isOpen) {
|
if (isOpen) {
|
||||||
return (
|
return (
|
||||||
@ -61,10 +52,7 @@ const SearchURLQuery = ({ label, trackedEvent }) => {
|
|||||||
<SearchForm onSubmit={handleSubmit}>
|
<SearchForm onSubmit={handleSubmit}>
|
||||||
<Searchbar
|
<Searchbar
|
||||||
name="search"
|
name="search"
|
||||||
onChange={({ target: { value } }) => {
|
onChange={({ target: { value } }) => setValue(value)}
|
||||||
setDidSearch(true);
|
|
||||||
setValue(value);
|
|
||||||
}}
|
|
||||||
value={value}
|
value={value}
|
||||||
clearLabel={formatMessage({ id: 'clearLabel', defaultMessage: 'Clear' })}
|
clearLabel={formatMessage({ id: 'clearLabel', defaultMessage: 'Clear' })}
|
||||||
onClear={handleClear}
|
onClear={handleClear}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user