mirror of
https://github.com/grafana/grafana.git
synced 2025-02-15 10:03:33 -06:00
* Search: add search wrapper * Search: add DashboardSearch.tsx * Search: enable search * Search: update types * Search: useReducer for saving search results * Search: use default query * Search: add toggle custom action * Search: add onQueryChange * Search: debounce search * Search: pas dispatch as a prop * Search: add tag filter * Search: Fix types * Search: revert changes * Search: close overlay on esc * Search: enable tag filtering * Search: clear query * Search: add autofocus to search field * Search: Rename close to closeSearch * Search: Add no results message * Search: Add loading state * Search: Remove Select from Forms namespace * Remove Add selectedIndex * Remove Add getFlattenedSections * Remove Enable selecting items * Search: add hasId * Search: preselect first item * Search: Add utils tests * Search: Fix moving selection down * Search: Add findSelected * Search: Add type to section * Search: Handle Enter key press on item highlight * Search: Move reducer et al. to separate files * Search: Remove redundant render check * Search: Close overlay on Esc and ArrowLeft press * Search: Add close button * Search: Document utils * Search: use Icon for remove icon * Search: Add DashboardSearch.test.tsx * Search: Move test data to a separate file * Search: Finalise DashboardSearch.test.tsx * Add search reducer tests * Search: Add search results loading indicator * Search: Remove inline function * Search: Do not mutate item * Search: Tweak utils * Search: Do not clear query on tag clear * Search: Fix folder:current search * Search: Fix results scroll * Search: Update tests * Search: Close overlay on cog icon click * Add mobile styles for close button * Search: Use CustomScrollbar * Search: Memoize TagList.tsx * Search: Fix type errors * Search: More strictNullChecks fixes * Search: Consistent handler names * Search: Fix search items types in test * Search: Fix merge conflicts * Search: Fix strictNullChecks errors
203 lines
7.6 KiB
TypeScript
203 lines
7.6 KiB
TypeScript
import { react2AngularDirective } from 'app/core/utils/react2angular';
|
|
import { QueryEditor as StackdriverQueryEditor } from 'app/plugins/datasource/stackdriver/components/QueryEditor';
|
|
import { AnnotationQueryEditor as StackdriverAnnotationQueryEditor } from 'app/plugins/datasource/stackdriver/components/AnnotationQueryEditor';
|
|
import { AnnotationQueryEditor as CloudWatchAnnotationQueryEditor } from 'app/plugins/datasource/cloudwatch/components/AnnotationQueryEditor';
|
|
import PageHeader from './components/PageHeader/PageHeader';
|
|
import EmptyListCTA from './components/EmptyListCTA/EmptyListCTA';
|
|
import { TagFilter } from './components/TagFilter/TagFilter';
|
|
import { SideMenu } from './components/sidemenu/SideMenu';
|
|
import { MetricSelect } from './components/Select/MetricSelect';
|
|
import AppNotificationList from './components/AppNotifications/AppNotificationList';
|
|
import {
|
|
ColorPicker,
|
|
DataLinksEditor,
|
|
DataSourceHttpSettings,
|
|
GraphContextMenu,
|
|
SecretFormField,
|
|
SeriesColorPickerPopoverWithTheme,
|
|
UnitPicker,
|
|
Icon,
|
|
} from '@grafana/ui';
|
|
import { FunctionEditor } from 'app/plugins/datasource/graphite/FunctionEditor';
|
|
import ReactProfileWrapper from 'app/features/profile/ReactProfileWrapper';
|
|
import { LokiAnnotationsQueryEditor } from '../plugins/datasource/loki/components/AnnotationsQueryEditor';
|
|
import { HelpModal } from './components/help/HelpModal';
|
|
import { Footer } from './components/Footer/Footer';
|
|
import { FolderPicker } from 'app/core/components/Select/FolderPicker';
|
|
import {
|
|
SaveDashboardAsButtonConnected,
|
|
SaveDashboardButtonConnected,
|
|
} from '../features/dashboard/components/SaveDashboard/SaveDashboardButton';
|
|
import { VariableEditorContainer } from '../features/variables/editor/VariableEditorContainer';
|
|
import { SearchField, SearchResults, SearchWrapper, SearchResultsFilter } from '../features/search';
|
|
|
|
export function registerAngularDirectives() {
|
|
react2AngularDirective('footer', Footer, []);
|
|
react2AngularDirective('icon', Icon, [
|
|
'color',
|
|
'name',
|
|
'size',
|
|
'type',
|
|
['onClick', { watchDepth: 'reference', wrapApply: true }],
|
|
]);
|
|
react2AngularDirective('helpModal', HelpModal, []);
|
|
react2AngularDirective('sidemenu', SideMenu, []);
|
|
react2AngularDirective('functionEditor', FunctionEditor, ['func', 'onRemove', 'onMoveLeft', 'onMoveRight']);
|
|
react2AngularDirective('appNotificationsList', AppNotificationList, []);
|
|
react2AngularDirective('pageHeader', PageHeader, ['model', 'noTabs']);
|
|
react2AngularDirective('emptyListCta', EmptyListCTA, [
|
|
'title',
|
|
'buttonIcon',
|
|
'buttonLink',
|
|
'buttonTitle',
|
|
['onClick', { watchDepth: 'reference', wrapApply: true }],
|
|
'proTip',
|
|
'proTipLink',
|
|
'proTipLinkTitle',
|
|
'proTipTarget',
|
|
'infoBox',
|
|
'infoBoxTitle',
|
|
]);
|
|
//Search
|
|
react2AngularDirective('searchField', SearchField, [
|
|
'query',
|
|
'autoFocus',
|
|
['onChange', { watchDepth: 'reference' }],
|
|
['onKeyDown', { watchDepth: 'reference' }],
|
|
]);
|
|
react2AngularDirective('searchResults', SearchResults, [
|
|
'results',
|
|
'editable',
|
|
'selectors',
|
|
['onSelectionChanged', { watchDepth: 'reference' }],
|
|
['onTagSelected', { watchDepth: 'reference' }],
|
|
['onFolderExpanding', { watchDepth: 'reference' }],
|
|
['onToggleSelection', { watchDepth: 'reference' }],
|
|
]);
|
|
react2AngularDirective('searchFilters', SearchResultsFilter, [
|
|
'allChecked',
|
|
'canMove',
|
|
'canDelete',
|
|
'tagFilterOptions',
|
|
'selectedStarredFilter',
|
|
'selectedTagFilter',
|
|
['onSelectAllChanged', { watchDepth: 'reference' }],
|
|
['deleteItem', { watchDepth: 'reference' }],
|
|
['moveTo', { watchDepth: 'reference' }],
|
|
['onStarredFilterChange', { watchDepth: 'reference' }],
|
|
['onTagFilterChange', { watchDepth: 'reference' }],
|
|
]);
|
|
react2AngularDirective('searchWrapper', SearchWrapper, []);
|
|
react2AngularDirective('tagFilter', TagFilter, [
|
|
'tags',
|
|
['onChange', { watchDepth: 'reference' }],
|
|
['tagOptions', { watchDepth: 'reference' }],
|
|
]);
|
|
react2AngularDirective('colorPicker', ColorPicker, [
|
|
'color',
|
|
['onChange', { watchDepth: 'reference', wrapApply: true }],
|
|
]);
|
|
react2AngularDirective('seriesColorPickerPopover', SeriesColorPickerPopoverWithTheme, [
|
|
'color',
|
|
'series',
|
|
'onColorChange',
|
|
'onToggleAxis',
|
|
]);
|
|
react2AngularDirective('unitPicker', UnitPicker, [
|
|
'value',
|
|
'width',
|
|
['onChange', { watchDepth: 'reference', wrapApply: true }],
|
|
]);
|
|
react2AngularDirective('metricSelect', MetricSelect, [
|
|
'options',
|
|
'onChange',
|
|
'value',
|
|
'isSearchable',
|
|
'className',
|
|
'placeholder',
|
|
['variables', { watchDepth: 'reference' }],
|
|
]);
|
|
react2AngularDirective('stackdriverQueryEditor', StackdriverQueryEditor, [
|
|
'target',
|
|
'onQueryChange',
|
|
'onExecuteQuery',
|
|
['events', { watchDepth: 'reference' }],
|
|
['datasource', { watchDepth: 'reference' }],
|
|
['templateSrv', { watchDepth: 'reference' }],
|
|
]);
|
|
react2AngularDirective('stackdriverAnnotationQueryEditor', StackdriverAnnotationQueryEditor, [
|
|
'target',
|
|
'onQueryChange',
|
|
['datasource', { watchDepth: 'reference' }],
|
|
['templateSrv', { watchDepth: 'reference' }],
|
|
]);
|
|
react2AngularDirective('cloudwatchAnnotationQueryEditor', CloudWatchAnnotationQueryEditor, [
|
|
'query',
|
|
'onChange',
|
|
['datasource', { watchDepth: 'reference' }],
|
|
]);
|
|
react2AngularDirective('secretFormField', SecretFormField, [
|
|
'value',
|
|
'isConfigured',
|
|
'inputWidth',
|
|
'labelWidth',
|
|
['onReset', { watchDepth: 'reference', wrapApply: true }],
|
|
['onChange', { watchDepth: 'reference', wrapApply: true }],
|
|
]);
|
|
react2AngularDirective('graphContextMenu', GraphContextMenu, [
|
|
'x',
|
|
'y',
|
|
'items',
|
|
['onClose', { watchDepth: 'reference', wrapApply: true }],
|
|
['getContextMenuSource', { watchDepth: 'reference', wrapApply: true }],
|
|
['formatSourceDate', { watchDepth: 'reference', wrapApply: true }],
|
|
]);
|
|
|
|
// We keep the drilldown terminology here because of as using data-* directive
|
|
// being in conflict with HTML data attributes
|
|
react2AngularDirective('drilldownLinksEditor', DataLinksEditor, [
|
|
'value',
|
|
'suggestions',
|
|
['onChange', { watchDepth: 'reference', wrapApply: true }],
|
|
]);
|
|
|
|
react2AngularDirective('reactProfileWrapper', ReactProfileWrapper, []);
|
|
|
|
react2AngularDirective('lokiAnnotationsQueryEditor', LokiAnnotationsQueryEditor, [
|
|
'expr',
|
|
'onChange',
|
|
['datasource', { watchDepth: 'reference' }],
|
|
]);
|
|
react2AngularDirective('datasourceHttpSettingsNext', DataSourceHttpSettings, [
|
|
'defaultUrl',
|
|
'showAccessOptions',
|
|
'dataSourceConfig',
|
|
['onChange', { watchDepth: 'reference', wrapApply: true }],
|
|
]);
|
|
react2AngularDirective('folderPicker', FolderPicker, [
|
|
'labelClass',
|
|
'rootName',
|
|
'enableCreateNew',
|
|
'enableReset',
|
|
'initialTitle',
|
|
'initialFolderId',
|
|
'dashboardId',
|
|
'onCreateFolder',
|
|
['enterFolderCreation', { watchDepth: 'reference', wrapApply: true }],
|
|
['exitFolderCreation', { watchDepth: 'reference', wrapApply: true }],
|
|
['onLoad', { watchDepth: 'reference', wrapApply: true }],
|
|
['onChange', { watchDepth: 'reference', wrapApply: true }],
|
|
]);
|
|
react2AngularDirective('saveDashboardButton', SaveDashboardButtonConnected, [
|
|
['getDashboard', { watchDepth: 'reference', wrapApply: true }],
|
|
['onSaveSuccess', { watchDepth: 'reference', wrapApply: true }],
|
|
['dashboard', { watchDepth: 'reference', wrapApply: true }],
|
|
]);
|
|
react2AngularDirective('saveDashboardAsButton', SaveDashboardAsButtonConnected, [
|
|
'variant',
|
|
['getDashboard', { watchDepth: 'reference', wrapApply: true }],
|
|
['onSaveSuccess', { watchDepth: 'reference', wrapApply: true }],
|
|
]);
|
|
react2AngularDirective('variableEditorContainer', VariableEditorContainer, []);
|
|
}
|