mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
FolderPicker: Fixes not being able to create new folder (#27092)
* FolderPicker: Fixes not being able to create new folder * Update public/app/core/components/Select/FolderPicker.tsx Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com> * Refactor: Fixes import issues for tests that do not mock GrafanaBootConfig Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
This commit is contained in:
parent
451af74728
commit
3504009914
@ -11,6 +11,10 @@ jest.mock('@grafana/runtime', () => ({
|
|||||||
}),
|
}),
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
jest.mock('../../config', () => ({
|
||||||
|
getConfig: () => ({}),
|
||||||
|
}));
|
||||||
|
|
||||||
jest.mock('app/core/services/context_srv', () => ({
|
jest.mock('app/core/services/context_srv', () => ({
|
||||||
contextSrv: {
|
contextSrv: {
|
||||||
user: { orgId: 1 },
|
user: { orgId: 1 },
|
||||||
|
@ -4,9 +4,11 @@ import { AsyncSelect } from '@grafana/ui';
|
|||||||
import { AppEvents, SelectableValue } from '@grafana/data';
|
import { AppEvents, SelectableValue } from '@grafana/data';
|
||||||
import { getBackendSrv } from '@grafana/runtime';
|
import { getBackendSrv } from '@grafana/runtime';
|
||||||
import { selectors } from '@grafana/e2e-selectors';
|
import { selectors } from '@grafana/e2e-selectors';
|
||||||
|
|
||||||
import appEvents from '../../app_events';
|
import appEvents from '../../app_events';
|
||||||
import { contextSrv } from 'app/core/services/context_srv';
|
import { contextSrv } from 'app/core/services/context_srv';
|
||||||
import { DashboardSearchHit } from 'app/features/search/types';
|
import { DashboardSearchHit } from 'app/features/search/types';
|
||||||
|
import { createFolder } from 'app/features/manage-dashboards/state/actions';
|
||||||
|
|
||||||
export interface Props {
|
export interface Props {
|
||||||
onChange: ($folder: { title: string; id: number }) => void;
|
onChange: ($folder: { title: string; id: number }) => void;
|
||||||
@ -89,7 +91,7 @@ export class FolderPicker extends PureComponent<Props, State> {
|
|||||||
|
|
||||||
createNewFolder = async (folderName: string) => {
|
createNewFolder = async (folderName: string) => {
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
const newFolder = await getBackendSrv().createFolder({ title: folderName });
|
const newFolder = await createFolder({ title: folderName });
|
||||||
let folder = { value: -1, label: 'Not created' };
|
let folder = { value: -1, label: 'Not created' };
|
||||||
if (newFolder.id > -1) {
|
if (newFolder.id > -1) {
|
||||||
appEvents.emit(AppEvents.alertSuccess, ['Folder Created', 'OK']);
|
appEvents.emit(AppEvents.alertSuccess, ['Folder Created', 'OK']);
|
||||||
|
@ -1,10 +1,9 @@
|
|||||||
import { concatMap, filter } from 'rxjs/operators';
|
import { concatMap, filter } from 'rxjs/operators';
|
||||||
|
|
||||||
import { FetchQueue, FetchStatus } from './FetchQueue';
|
import { FetchQueue, FetchStatus } from './FetchQueue';
|
||||||
import { BackendSrvRequest } from '@grafana/runtime';
|
import { BackendSrvRequest, GrafanaBootConfig } from '@grafana/runtime';
|
||||||
import { isDataQuery } from '../utils/query';
|
import { isDataQuery } from '../utils/query';
|
||||||
import { ResponseQueue } from './ResponseQueue';
|
import { ResponseQueue } from './ResponseQueue';
|
||||||
import { getConfig } from '../config';
|
|
||||||
|
|
||||||
interface WorkerEntry {
|
interface WorkerEntry {
|
||||||
id: string;
|
id: string;
|
||||||
@ -12,8 +11,8 @@ interface WorkerEntry {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export class FetchQueueWorker {
|
export class FetchQueueWorker {
|
||||||
constructor(fetchQueue: FetchQueue, responseQueue: ResponseQueue, config = getConfig()) {
|
constructor(fetchQueue: FetchQueue, responseQueue: ResponseQueue, config: GrafanaBootConfig) {
|
||||||
const maxParallelRequests = config.http2Enabled ? 1000 : 5; // assuming that 1000 parallel requests are enough for http2
|
const maxParallelRequests = config?.http2Enabled ? 1000 : 5; // for tests that don't mock GrafanaBootConfig the config param will be undefined
|
||||||
|
|
||||||
// This will create an implicit live subscription for as long as this class lives.
|
// This will create an implicit live subscription for as long as this class lives.
|
||||||
// But as FetchQueueWorker is used by the singleton backendSrv that also lives for as long as Grafana app lives
|
// But as FetchQueueWorker is used by the singleton backendSrv that also lives for as long as Grafana app lives
|
||||||
|
@ -5,7 +5,7 @@ import { BackendSrv as BackendService, BackendSrvRequest, FetchError, FetchRespo
|
|||||||
import { AppEvents } from '@grafana/data';
|
import { AppEvents } from '@grafana/data';
|
||||||
|
|
||||||
import appEvents from 'app/core/app_events';
|
import appEvents from 'app/core/app_events';
|
||||||
import config from 'app/core/config';
|
import config, { getConfig } from 'app/core/config';
|
||||||
import { DashboardSearchHit } from 'app/features/search/types';
|
import { DashboardSearchHit } from 'app/features/search/types';
|
||||||
import { FolderDTO } from 'app/types';
|
import { FolderDTO } from 'app/types';
|
||||||
import { coreModule } from 'app/core/core_module';
|
import { coreModule } from 'app/core/core_module';
|
||||||
@ -54,7 +54,7 @@ export class BackendSrv implements BackendService {
|
|||||||
this.internalFetch = this.internalFetch.bind(this);
|
this.internalFetch = this.internalFetch.bind(this);
|
||||||
this.fetchQueue = new FetchQueue();
|
this.fetchQueue = new FetchQueue();
|
||||||
this.responseQueue = new ResponseQueue(this.fetchQueue, this.internalFetch);
|
this.responseQueue = new ResponseQueue(this.fetchQueue, this.internalFetch);
|
||||||
new FetchQueueWorker(this.fetchQueue, this.responseQueue);
|
new FetchQueueWorker(this.fetchQueue, this.responseQueue, getConfig());
|
||||||
}
|
}
|
||||||
|
|
||||||
async request<T = any>(options: BackendSrvRequest): Promise<T> {
|
async request<T = any>(options: BackendSrvRequest): Promise<T> {
|
||||||
|
Loading…
Reference in New Issue
Block a user