mirror of
https://github.com/billsonnn/nitro-react.git
synced 2025-02-21 10:52:36 +01:00
Navigator search
This commit is contained in:
parent
9d8e2e9e97
commit
9eec13d714
@ -1,5 +1,10 @@
|
|||||||
.nitro-navigator {
|
.nitro-navigator {
|
||||||
width: 400px;
|
width: 400px;
|
||||||
|
|
||||||
|
.content-area {
|
||||||
|
height: 450px;
|
||||||
|
max-height: 450px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@import './views/NavigatorViews';
|
@import './views/NavigatorViews';
|
||||||
|
@ -112,7 +112,7 @@ export const NavigatorView: FC<NavigatorViewProps> = props =>
|
|||||||
}) }
|
}) }
|
||||||
</NitroCardTabsView>
|
</NitroCardTabsView>
|
||||||
<NitroCardContentView>
|
<NitroCardContentView>
|
||||||
<NavigatorSearchView />
|
<NavigatorSearchView onSendSearch={ sendSearch } />
|
||||||
<NavigatorSearchResultSetView />
|
<NavigatorSearchResultSetView />
|
||||||
</NitroCardContentView>
|
</NitroCardContentView>
|
||||||
</NitroCardView> }
|
</NitroCardView> }
|
||||||
|
@ -1,4 +1,7 @@
|
|||||||
.nitro-navigator-result-list {
|
.nitro-navigator-search-result {
|
||||||
|
border: 1px solid #ced4da;
|
||||||
|
|
||||||
|
.nitro-navigator-result-list {
|
||||||
|
|
||||||
.nitro-navigator-result {
|
.nitro-navigator-result {
|
||||||
background: $grid-active-bg-color;
|
background: $grid-active-bg-color;
|
||||||
@ -27,4 +30,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -49,7 +49,7 @@ export const NavigatorSearchResultView: FC<NavigatorSearchResultViewProps> = pro
|
|||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="bg-white rounded mb-2 overflow-hidden">
|
<div className="nitro-navigator-search-result bg-white rounded mb-2 overflow-hidden">
|
||||||
<div className="d-flex flex-column">
|
<div className="d-flex flex-column">
|
||||||
<div className="d-flex align-items-center px-2 py-1 text-black">
|
<div className="d-flex align-items-center px-2 py-1 text-black">
|
||||||
<i className={ 'text-secondary fas ' + (isExtended ? 'fa-minus' : 'fa-plus') } onClick={ toggleExtended }></i>
|
<i className={ 'text-secondary fas ' + (isExtended ? 'fa-minus' : 'fa-plus') } onClick={ toggleExtended }></i>
|
||||||
@ -57,7 +57,7 @@ export const NavigatorSearchResultView: FC<NavigatorSearchResultViewProps> = pro
|
|||||||
<i className={ 'text-secondary fas ' + classNames({ 'fa-bars': (displayMode === NavigatorSearchResultViewDisplayMode.LIST), 'fa-th': displayMode >= NavigatorSearchResultViewDisplayMode.THUMBNAILS })}></i>
|
<i className={ 'text-secondary fas ' + classNames({ 'fa-bars': (displayMode === NavigatorSearchResultViewDisplayMode.LIST), 'fa-th': displayMode >= NavigatorSearchResultViewDisplayMode.THUMBNAILS })}></i>
|
||||||
</div>
|
</div>
|
||||||
{ isExtended &&
|
{ isExtended &&
|
||||||
<div className={ 'nitro-navigator-result-list mt-1 row row-cols-' + classNames({ '1': (displayMode === NavigatorSearchResultViewDisplayMode.LIST), '2': (displayMode >= NavigatorSearchResultViewDisplayMode.THUMBNAILS) }) }>
|
<div className={ 'nitro-navigator-result-list row row-cols-' + classNames({ '1': (displayMode === NavigatorSearchResultViewDisplayMode.LIST), '2': (displayMode >= NavigatorSearchResultViewDisplayMode.THUMBNAILS) }) }>
|
||||||
{ searchResult.rooms.length > 0 && searchResult.rooms.map((room, index) =>
|
{ searchResult.rooms.length > 0 && searchResult.rooms.map((room, index) =>
|
||||||
{
|
{
|
||||||
return <NavigatorSearchResultItemView key={ index } roomData={ room } />
|
return <NavigatorSearchResultItemView key={ index } roomData={ room } />
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { FC, useState } from 'react';
|
import React, { FC, useCallback, useEffect, useState } from 'react';
|
||||||
import { LocalizeText } from '../../../../utils/LocalizeText';
|
import { LocalizeText } from '../../../../utils/LocalizeText';
|
||||||
import { INavigatorSearchFilter, NavigatorSearchViewProps } from './NavigatorSearchView.types';
|
import { INavigatorSearchFilter, NavigatorSearchViewProps } from './NavigatorSearchView.types';
|
||||||
|
|
||||||
@ -27,13 +27,31 @@ export const NavigatorSearchView: FC<NavigatorSearchViewProps> = props =>
|
|||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
const [ searchFilter, setSearchFilter ] = useState<INavigatorSearchFilter>(searchFilters[0]);
|
const [ searchFilter, setSearchFilter ] = useState<number>(0);
|
||||||
const [ searchString, setSearchString ] = useState<string>(null);
|
const [ searchString, setSearchString ] = useState<string>('');
|
||||||
|
|
||||||
|
const search = useCallback(() =>
|
||||||
|
{
|
||||||
|
props.onSendSearch(searchFilters[searchFilter].query, searchString);
|
||||||
|
}, [ searchFilter, searchString ]);
|
||||||
|
|
||||||
|
useEffect(() =>
|
||||||
|
{
|
||||||
|
search();
|
||||||
|
}, [ searchFilter ]);
|
||||||
|
|
||||||
|
const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) =>
|
||||||
|
{
|
||||||
|
if (event.key === 'Enter')
|
||||||
|
{
|
||||||
|
search();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="d-flex w-100 mb-3">
|
<div className="d-flex w-100 mb-2">
|
||||||
<div>
|
<div>
|
||||||
<select className="form-select form-select-sm flex-shrink-1" onChange={ event => setSearchFilter(searchFilters[event.target.value]) }>
|
<select className="form-select form-select-sm flex-shrink-1" value={ searchFilter } onChange={ event => setSearchFilter(parseInt(event.target.value)) }>
|
||||||
{ searchFilters.map((filter, index) =>
|
{ searchFilters.map((filter, index) =>
|
||||||
{
|
{
|
||||||
return <option value={ index }>{ LocalizeText('navigator.filter.' + filter.name) }</option>
|
return <option value={ index }>{ LocalizeText('navigator.filter.' + filter.name) }</option>
|
||||||
@ -41,10 +59,10 @@ export const NavigatorSearchView: FC<NavigatorSearchViewProps> = props =>
|
|||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<div className="ms-2 flex-grow-1">
|
<div className="ms-2 flex-grow-1">
|
||||||
<input type="text" className="form-control form-control-sm" placeholder={ LocalizeText('navigator.filter.input.placeholder') } onChange={ event => setSearchString(event.target.value) } />
|
<input type="text" className="form-control form-control-sm" placeholder={ LocalizeText('navigator.filter.input.placeholder') } value={ searchString } onChange={ event => setSearchString(event.target.value) } onKeyDown={ event => handleKeyDown(event) } />
|
||||||
</div>
|
</div>
|
||||||
<div className="ms-2">
|
<div className="ms-2">
|
||||||
<button type="button" className="btn btn-primary btn-sm">
|
<button type="button" className="btn btn-primary btn-sm" onClick={ search }>
|
||||||
<i className="fas fa-search"></i>
|
<i className="fas fa-search"></i>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
export interface NavigatorSearchViewProps
|
export interface NavigatorSearchViewProps
|
||||||
{
|
{
|
||||||
|
onSendSearch: (code: string, data: string) => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface INavigatorSearchFilter
|
export interface INavigatorSearchFilter
|
||||||
|
Loading…
x
Reference in New Issue
Block a user