Skip to content

Commit 8e44871

Browse files
committed
Add options to ContentSearch and ContentPicker which allow configuration of the debounced input delay.
Fix a few other lint issues.
1 parent 44bb5ca commit 8e44871

File tree

5 files changed

+29
-15
lines changed

5 files changed

+29
-15
lines changed

components/content-picker/index.tsx

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,11 @@ const ContentPickerWrapper = styled.div`
3535
width: 100%;
3636
`;
3737

38-
interface ContentPickerProps {
38+
export type ContentPickerOptions = {
39+
inputDelay: number;
40+
};
41+
42+
export interface ContentPickerProps {
3943
label?: string;
4044
hideLabelFromVision?: boolean;
4145
mode?: ContentSearchMode;
@@ -55,6 +59,7 @@ interface ContentPickerProps {
5559
renderItemType?: (props: NormalizedSuggestion) => string;
5660
renderItem?: (props: RenderItemComponentProps) => JSX.Element;
5761
PickedItemPreviewComponent?: React.ComponentType<{ item: PickedItemType }>;
62+
options?: ContentPickerOptions;
5863
}
5964

6065
export const ContentPicker: React.FC<ContentPickerProps> = ({
@@ -79,7 +84,10 @@ export const ContentPicker: React.FC<ContentPickerProps> = ({
7984
renderItemType = defaultRenderItemType,
8085
renderItem = undefined,
8186
PickedItemPreviewComponent = undefined,
87+
options,
8288
}) => {
89+
const searchOptions =
90+
options && options.inputDelay ? { inputDelay: options.inputDelay } : undefined;
8391
const currentPostId = select('core/editor')?.getCurrentPostId();
8492

8593
/**
@@ -147,6 +155,7 @@ export const ContentPicker: React.FC<ContentPickerProps> = ({
147155
fetchInitialResults={fetchInitialResults}
148156
renderItemType={renderItemType}
149157
renderItem={renderItem}
158+
options={searchOptions}
150159
/>
151160
) : (
152161
label && (

components/content-search/index.tsx

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -66,11 +66,9 @@ const StyledNoResults = styled.li`
6666
padding-left: 3px;
6767
`;
6868

69-
const ContentSearchNoResults: React.FC = () => (
70-
<StyledNoResults className="tenup-content-search-list-item components-button">
71-
{__('Nothing found.', '10up-block-components')}
72-
</StyledNoResults>
73-
);
69+
export type ContentSearchOptions = {
70+
inputDelay: number;
71+
};
7472

7573
export interface ContentSearchProps {
7674
onSelectItem: (item: NormalizedSuggestion) => void;
@@ -85,8 +83,15 @@ export interface ContentSearchProps {
8583
renderItemType?: (props: NormalizedSuggestion) => string;
8684
renderItem?: (props: RenderItemComponentProps) => JSX.Element;
8785
fetchInitialResults?: boolean;
86+
options?: ContentSearchOptions;
8887
}
8988

89+
const ContentSearchNoResults: React.FC = () => (
90+
<StyledNoResults className="tenup-content-search-list-item components-button">
91+
{__('Nothing found.', '10up-block-components')}
92+
</StyledNoResults>
93+
);
94+
9095
const ContentSearch: React.FC<ContentSearchProps> = ({
9196
onSelectItem = () => {
9297
console.log('Select!'); // eslint-disable-line no-console
@@ -102,8 +107,11 @@ const ContentSearch: React.FC<ContentSearchProps> = ({
102107
renderItemType = undefined,
103108
renderItem: SearchResultItem = SearchItem,
104109
fetchInitialResults,
110+
options,
105111
}) => {
106-
const [searchInput, setSearchString, searchString] = useDebouncedInput('');
112+
const debounceOptions =
113+
options && options.inputDelay ? { delay: options.inputDelay } : undefined;
114+
const [searchInput, setSearchString, searchString] = useDebouncedInput('', debounceOptions);
107115
const [isFocused, setIsFocused] = useState(false);
108116
const searchContainer = useRef<HTMLDivElement>(null);
109117

components/media-toolbar/index.tsx

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -72,19 +72,15 @@ export const MediaToolbar: React.FC<MediaToolbarProps> = ({
7272
name={mergedLabels.replace}
7373
/>
7474
{!!isOptional && (
75-
<ToolbarButton onClick={onRemove}>
76-
{mergedLabels.remove}
77-
</ToolbarButton>
75+
<ToolbarButton onClick={onRemove}>{mergedLabels.remove}</ToolbarButton>
7876
)}
7977
</>
8078
) : (
8179
<MediaUploadCheck>
8280
<MediaUpload
8381
onSelect={onSelect}
8482
render={({ open }) => (
85-
<ToolbarButton onClick={open}>
86-
{mergedLabels.add}
87-
</ToolbarButton>
83+
<ToolbarButton onClick={open}>{mergedLabels.add}</ToolbarButton>
8884
)}
8985
/>
9086
</MediaUploadCheck>

components/post-featured-image/index.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ import { useEntityProp } from '@wordpress/core-data';
22
import { usePost } from '../../hooks';
33
import { Image } from '../image';
44

5-
interface PostFeaturedImageProps extends Omit<React.ComponentProps<typeof Image>, 'id' | 'onSelect' | 'canEditImage'> {}
5+
interface PostFeaturedImageProps
6+
extends Omit<React.ComponentProps<typeof Image>, 'id' | 'onSelect' | 'canEditImage'> {}
67

78
export const PostFeaturedImage = (props: PostFeaturedImageProps) => {
89
const { postId, postType, isEditable } = usePost();

hooks/use-debounced-input/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ type DebouncedInputOptions = {
1515
*/
1616
export function useDebouncedInput(
1717
defaultValue: string = '',
18-
options: DebouncedInputOptions = { delay: 500 },
18+
options: DebouncedInputOptions = { delay: 350 },
1919
): [string, (value: string) => void, string] {
2020
const [input, setInput] = useState<string>(defaultValue);
2121
const [debouncedInput, setDebouncedState] = useState(defaultValue);

0 commit comments

Comments
 (0)