mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Merge pull request #14999 from grafana/dashboard-component-organization
WIP: Re-organize components under features/dashboard
This commit is contained in:
commit
90787a5299
@ -236,7 +236,7 @@ export class KeybindingSrv {
|
|||||||
shareScope.dashboard = dashboard;
|
shareScope.dashboard = dashboard;
|
||||||
|
|
||||||
appEvents.emit('show-modal', {
|
appEvents.emit('show-modal', {
|
||||||
src: 'public/app/features/dashboard/partials/shareModal.html',
|
src: 'public/app/features/dashboard/components/ShareModal/template.html',
|
||||||
scope: shareScope,
|
scope: shareScope,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import './annotations/all';
|
import './annotations/all';
|
||||||
import './templating/all';
|
import './templating/all';
|
||||||
import './plugins/all';
|
import './plugins/all';
|
||||||
import './dashboard/all';
|
import './dashboard';
|
||||||
import './playlist/all';
|
import './playlist/all';
|
||||||
import './panel/all';
|
import './panel/all';
|
||||||
import './org/all';
|
import './org/all';
|
||||||
|
@ -1,13 +0,0 @@
|
|||||||
import coreModule from 'app/core/core_module';
|
|
||||||
|
|
||||||
export class AlertingSrv {
|
|
||||||
dashboard: any;
|
|
||||||
alerts: any[];
|
|
||||||
|
|
||||||
init(dashboard, alerts) {
|
|
||||||
this.dashboard = dashboard;
|
|
||||||
this.alerts = alerts || [];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
coreModule.service('alertingSrv', AlertingSrv);
|
|
@ -1,45 +0,0 @@
|
|||||||
import './dashboard_ctrl';
|
|
||||||
import './alerting_srv';
|
|
||||||
import './history/history';
|
|
||||||
import './dashboard_loader_srv';
|
|
||||||
import './dashnav/dashnav';
|
|
||||||
import './submenu/submenu';
|
|
||||||
import './save_as_modal';
|
|
||||||
import './save_modal';
|
|
||||||
import './save_provisioned_modal';
|
|
||||||
import './shareModalCtrl';
|
|
||||||
import './share_snapshot_ctrl';
|
|
||||||
import './dashboard_srv';
|
|
||||||
import './view_state_srv';
|
|
||||||
import './validation_srv';
|
|
||||||
import './time_srv';
|
|
||||||
import './unsaved_changes_srv';
|
|
||||||
import './unsaved_changes_modal';
|
|
||||||
import './timepicker/timepicker';
|
|
||||||
import './upload';
|
|
||||||
import './export/export_modal';
|
|
||||||
import './export_data/export_data_modal';
|
|
||||||
import './ad_hoc_filters';
|
|
||||||
import './repeat_option/repeat_option';
|
|
||||||
import './dashgrid/DashboardGridDirective';
|
|
||||||
import './dashgrid/RowOptions';
|
|
||||||
import './folder_picker/folder_picker';
|
|
||||||
import './move_to_folder_modal/move_to_folder';
|
|
||||||
import './settings/settings';
|
|
||||||
import './panellinks/module';
|
|
||||||
import './dashlinks/module';
|
|
||||||
|
|
||||||
// angular wrappers
|
|
||||||
import { react2AngularDirective } from 'app/core/utils/react2angular';
|
|
||||||
import DashboardPermissions from './permissions/DashboardPermissions';
|
|
||||||
|
|
||||||
react2AngularDirective('dashboardPermissions', DashboardPermissions, ['dashboardId', 'folder']);
|
|
||||||
|
|
||||||
import coreModule from 'app/core/core_module';
|
|
||||||
import { FolderDashboardsCtrl } from './folder_dashboards_ctrl';
|
|
||||||
import { DashboardImportCtrl } from './dashboard_import_ctrl';
|
|
||||||
import { CreateFolderCtrl } from './create_folder_ctrl';
|
|
||||||
|
|
||||||
coreModule.controller('FolderDashboardsCtrl', FolderDashboardsCtrl);
|
|
||||||
coreModule.controller('DashboardImportCtrl', DashboardImportCtrl);
|
|
||||||
coreModule.controller('CreateFolderCtrl', CreateFolderCtrl);
|
|
@ -0,0 +1 @@
|
|||||||
|
export { AdHocFiltersCtrl } from './AdHocFiltersCtrl';
|
@ -2,7 +2,7 @@ import angular from 'angular';
|
|||||||
import { saveAs } from 'file-saver';
|
import { saveAs } from 'file-saver';
|
||||||
|
|
||||||
import coreModule from 'app/core/core_module';
|
import coreModule from 'app/core/core_module';
|
||||||
import { DashboardExporter } from './exporter';
|
import { DashboardExporter } from './DashboardExporter';
|
||||||
|
|
||||||
export class DashExportCtrl {
|
export class DashExportCtrl {
|
||||||
dash: any;
|
dash: any;
|
||||||
@ -66,7 +66,7 @@ export class DashExportCtrl {
|
|||||||
export function dashExportDirective() {
|
export function dashExportDirective() {
|
||||||
return {
|
return {
|
||||||
restrict: 'E',
|
restrict: 'E',
|
||||||
templateUrl: 'public/app/features/dashboard/export/export_modal.html',
|
templateUrl: 'public/app/features/dashboard/components/DashExportModal/template.html',
|
||||||
controller: DashExportCtrl,
|
controller: DashExportCtrl,
|
||||||
bindToController: true,
|
bindToController: true,
|
||||||
controllerAs: 'ctrl',
|
controllerAs: 'ctrl',
|
@ -6,8 +6,8 @@ jest.mock('app/core/store', () => {
|
|||||||
|
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import config from 'app/core/config';
|
import config from 'app/core/config';
|
||||||
import { DashboardExporter } from '../export/exporter';
|
import { DashboardExporter } from './DashboardExporter';
|
||||||
import { DashboardModel } from '../dashboard_model';
|
import { DashboardModel } from '../../dashboard_model';
|
||||||
|
|
||||||
describe('given dashboard with repeated panels', () => {
|
describe('given dashboard with repeated panels', () => {
|
||||||
let dash, exported;
|
let dash, exported;
|
@ -1,6 +1,6 @@
|
|||||||
import config from 'app/core/config';
|
import config from 'app/core/config';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import { DashboardModel } from '../dashboard_model';
|
import { DashboardModel } from '../../dashboard_model';
|
||||||
|
|
||||||
export class DashboardExporter {
|
export class DashboardExporter {
|
||||||
constructor(private datasourceSrv) {}
|
constructor(private datasourceSrv) {}
|
@ -0,0 +1,2 @@
|
|||||||
|
export { DashboardExporter } from './DashboardExporter';
|
||||||
|
export { DashExportCtrl } from './DashExportCtrl';
|
@ -1,6 +1,6 @@
|
|||||||
import angular from 'angular';
|
import angular from 'angular';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import { iconMap } from './editor';
|
import { iconMap } from './DashLinksEditorCtrl';
|
||||||
|
|
||||||
function dashLinksContainer() {
|
function dashLinksContainer() {
|
||||||
return {
|
return {
|
@ -11,7 +11,7 @@ export let iconMap = {
|
|||||||
cloud: 'fa-cloud',
|
cloud: 'fa-cloud',
|
||||||
};
|
};
|
||||||
|
|
||||||
export class DashLinkEditorCtrl {
|
export class DashLinksEditorCtrl {
|
||||||
dashboard: any;
|
dashboard: any;
|
||||||
iconMap: any;
|
iconMap: any;
|
||||||
mode: any;
|
mode: any;
|
||||||
@ -65,8 +65,8 @@ export class DashLinkEditorCtrl {
|
|||||||
function dashLinksEditor() {
|
function dashLinksEditor() {
|
||||||
return {
|
return {
|
||||||
restrict: 'E',
|
restrict: 'E',
|
||||||
controller: DashLinkEditorCtrl,
|
controller: DashLinksEditorCtrl,
|
||||||
templateUrl: 'public/app/features/dashboard/dashlinks/editor.html',
|
templateUrl: 'public/app/features/dashboard/components/DashLinks/editor.html',
|
||||||
bindToController: true,
|
bindToController: true,
|
||||||
controllerAs: 'ctrl',
|
controllerAs: 'ctrl',
|
||||||
scope: {
|
scope: {
|
@ -0,0 +1,2 @@
|
|||||||
|
export { DashLinksContainerCtrl } from './DashLinksContainerCtrl';
|
||||||
|
export { DashLinksEditorCtrl } from './DashLinksEditorCtrl';
|
@ -1,7 +1,7 @@
|
|||||||
import moment from 'moment';
|
import moment from 'moment';
|
||||||
import angular from 'angular';
|
import angular from 'angular';
|
||||||
import { appEvents, NavModel } from 'app/core/core';
|
import { appEvents, NavModel } from 'app/core/core';
|
||||||
import { DashboardModel } from '../dashboard_model';
|
import { DashboardModel } from '../../dashboard_model';
|
||||||
|
|
||||||
export class DashNavCtrl {
|
export class DashNavCtrl {
|
||||||
dashboard: DashboardModel;
|
dashboard: DashboardModel;
|
||||||
@ -60,7 +60,7 @@ export class DashNavCtrl {
|
|||||||
modalScope.dashboard = this.dashboard;
|
modalScope.dashboard = this.dashboard;
|
||||||
|
|
||||||
appEvents.emit('show-modal', {
|
appEvents.emit('show-modal', {
|
||||||
src: 'public/app/features/dashboard/partials/shareModal.html',
|
src: 'public/app/features/dashboard/components/ShareModal/template.html',
|
||||||
scope: modalScope,
|
scope: modalScope,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -107,7 +107,7 @@ export class DashNavCtrl {
|
|||||||
export function dashNavDirective() {
|
export function dashNavDirective() {
|
||||||
return {
|
return {
|
||||||
restrict: 'E',
|
restrict: 'E',
|
||||||
templateUrl: 'public/app/features/dashboard/dashnav/dashnav.html',
|
templateUrl: 'public/app/features/dashboard/components/DashNav/template.html',
|
||||||
controller: DashNavCtrl,
|
controller: DashNavCtrl,
|
||||||
bindToController: true,
|
bindToController: true,
|
||||||
controllerAs: 'ctrl',
|
controllerAs: 'ctrl',
|
@ -0,0 +1 @@
|
|||||||
|
export { DashNavCtrl } from './DashNavCtrl';
|
@ -8,11 +8,11 @@ import {
|
|||||||
addDashboardPermission,
|
addDashboardPermission,
|
||||||
removeDashboardPermission,
|
removeDashboardPermission,
|
||||||
updateDashboardPermission,
|
updateDashboardPermission,
|
||||||
} from '../state/actions';
|
} from '../../state/actions';
|
||||||
import PermissionList from 'app/core/components/PermissionList/PermissionList';
|
import PermissionList from 'app/core/components/PermissionList/PermissionList';
|
||||||
import AddPermission from 'app/core/components/PermissionList/AddPermission';
|
import AddPermission from 'app/core/components/PermissionList/AddPermission';
|
||||||
import PermissionsInfo from 'app/core/components/PermissionList/PermissionsInfo';
|
import PermissionsInfo from 'app/core/components/PermissionList/PermissionsInfo';
|
||||||
import { connectWithStore } from '../../../core/utils/connectWithReduxStore';
|
import { connectWithStore } from 'app/core/utils/connectWithReduxStore';
|
||||||
|
|
||||||
export interface Props {
|
export interface Props {
|
||||||
dashboardId: number;
|
dashboardId: number;
|
@ -1,5 +1,5 @@
|
|||||||
import { coreModule, appEvents, contextSrv } from 'app/core/core';
|
import { coreModule, appEvents, contextSrv } from 'app/core/core';
|
||||||
import { DashboardModel } from '../dashboard_model';
|
import { DashboardModel } from '../../dashboard_model';
|
||||||
import $ from 'jquery';
|
import $ from 'jquery';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import angular from 'angular';
|
import angular from 'angular';
|
||||||
@ -230,7 +230,7 @@ export class SettingsCtrl {
|
|||||||
export function dashboardSettings() {
|
export function dashboardSettings() {
|
||||||
return {
|
return {
|
||||||
restrict: 'E',
|
restrict: 'E',
|
||||||
templateUrl: 'public/app/features/dashboard/settings/settings.html',
|
templateUrl: 'public/app/features/dashboard/components/DashboardSettings/template.html',
|
||||||
controller: SettingsCtrl,
|
controller: SettingsCtrl,
|
||||||
bindToController: true,
|
bindToController: true,
|
||||||
controllerAs: 'ctrl',
|
controllerAs: 'ctrl',
|
@ -0,0 +1 @@
|
|||||||
|
export { SettingsCtrl } from './SettingsCtrl';
|
@ -31,7 +31,7 @@ export class ExportDataModalCtrl {
|
|||||||
export function exportDataModal() {
|
export function exportDataModal() {
|
||||||
return {
|
return {
|
||||||
restrict: 'E',
|
restrict: 'E',
|
||||||
templateUrl: 'public/app/features/dashboard/export_data/export_data_modal.html',
|
templateUrl: 'public/app/features/dashboard/components/ExportDataModal/template.html',
|
||||||
controller: ExportDataModalCtrl,
|
controller: ExportDataModalCtrl,
|
||||||
controllerAs: 'ctrl',
|
controllerAs: 'ctrl',
|
||||||
scope: {
|
scope: {
|
@ -0,0 +1 @@
|
|||||||
|
export { ExportDataModalCtrl } from './ExportDataModalCtrl';
|
@ -168,7 +168,7 @@ export class FolderPickerCtrl {
|
|||||||
export function folderPicker() {
|
export function folderPicker() {
|
||||||
return {
|
return {
|
||||||
restrict: 'E',
|
restrict: 'E',
|
||||||
templateUrl: 'public/app/features/dashboard/folder_picker/folder_picker.html',
|
templateUrl: 'public/app/features/dashboard/components/FolderPicker/template.html',
|
||||||
controller: FolderPickerCtrl,
|
controller: FolderPickerCtrl,
|
||||||
bindToController: true,
|
bindToController: true,
|
||||||
controllerAs: 'ctrl',
|
controllerAs: 'ctrl',
|
@ -0,0 +1 @@
|
|||||||
|
export { FolderPickerCtrl } from './FolderPickerCtrl';
|
@ -1,4 +1,4 @@
|
|||||||
import { SaveDashboardAsModalCtrl } from '../save_as_modal';
|
import { SaveDashboardAsModalCtrl } from './SaveDashboardAsModalCtrl';
|
||||||
import { describe, it, expect } from 'test/lib/common';
|
import { describe, it, expect } from 'test/lib/common';
|
||||||
|
|
||||||
describe('saving dashboard as', () => {
|
describe('saving dashboard as', () => {
|
@ -1,4 +1,4 @@
|
|||||||
import { SaveDashboardModalCtrl } from '../save_modal';
|
import { SaveDashboardModalCtrl } from './SaveDashboardModalCtrl';
|
||||||
|
|
||||||
const setup = (timeChanged, variableValuesChanged, cb) => {
|
const setup = (timeChanged, variableValuesChanged, cb) => {
|
||||||
const dash = {
|
const dash = {
|
@ -1,4 +1,4 @@
|
|||||||
import { SaveProvisionedDashboardModalCtrl } from '../save_provisioned_modal';
|
import { SaveProvisionedDashboardModalCtrl } from './SaveProvisionedDashboardModalCtrl';
|
||||||
|
|
||||||
describe('SaveProvisionedDashboardModalCtrl', () => {
|
describe('SaveProvisionedDashboardModalCtrl', () => {
|
||||||
const json = {
|
const json = {
|
@ -0,0 +1,2 @@
|
|||||||
|
export { SaveDashboardAsModalCtrl } from './SaveDashboardAsModalCtrl';
|
||||||
|
export { SaveDashboardModalCtrl } from './SaveDashboardModalCtrl';
|
@ -1,7 +1,6 @@
|
|||||||
import '../shareModalCtrl';
|
|
||||||
import { ShareModalCtrl } from '../shareModalCtrl';
|
|
||||||
import config from 'app/core/config';
|
import config from 'app/core/config';
|
||||||
import { LinkSrv } from 'app/features/dashboard/panellinks/link_srv';
|
import { LinkSrv } from 'app/features/dashboard/panellinks/link_srv';
|
||||||
|
import { ShareModalCtrl } from './ShareModalCtrl';
|
||||||
|
|
||||||
describe('ShareModalCtrl', () => {
|
describe('ShareModalCtrl', () => {
|
||||||
const ctx = {
|
const ctx = {
|
@ -0,0 +1,2 @@
|
|||||||
|
export { ShareModalCtrl } from './ShareModalCtrl';
|
||||||
|
export { ShareSnapshotCtrl } from './ShareSnapshotCtrl';
|
@ -1,7 +1,7 @@
|
|||||||
import angular from 'angular';
|
import angular from 'angular';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
|
|
||||||
export class SubmenuCtrl {
|
export class SubMenuCtrl {
|
||||||
annotations: any;
|
annotations: any;
|
||||||
variables: any;
|
variables: any;
|
||||||
dashboard: any;
|
dashboard: any;
|
||||||
@ -29,8 +29,8 @@ export class SubmenuCtrl {
|
|||||||
export function submenuDirective() {
|
export function submenuDirective() {
|
||||||
return {
|
return {
|
||||||
restrict: 'E',
|
restrict: 'E',
|
||||||
templateUrl: 'public/app/features/dashboard/submenu/submenu.html',
|
templateUrl: 'public/app/features/dashboard/components/SubMenu/template.html',
|
||||||
controller: SubmenuCtrl,
|
controller: SubMenuCtrl,
|
||||||
bindToController: true,
|
bindToController: true,
|
||||||
controllerAs: 'ctrl',
|
controllerAs: 'ctrl',
|
||||||
scope: {
|
scope: {
|
@ -0,0 +1 @@
|
|||||||
|
export { SubMenuCtrl } from './SubMenuCtrl';
|
@ -159,7 +159,7 @@ export class TimePickerCtrl {
|
|||||||
export function settingsDirective() {
|
export function settingsDirective() {
|
||||||
return {
|
return {
|
||||||
restrict: 'E',
|
restrict: 'E',
|
||||||
templateUrl: 'public/app/features/dashboard/timepicker/settings.html',
|
templateUrl: 'public/app/features/dashboard/components/TimePicker/settings.html',
|
||||||
controller: TimePickerCtrl,
|
controller: TimePickerCtrl,
|
||||||
bindToController: true,
|
bindToController: true,
|
||||||
controllerAs: 'ctrl',
|
controllerAs: 'ctrl',
|
||||||
@ -172,7 +172,7 @@ export function settingsDirective() {
|
|||||||
export function timePickerDirective() {
|
export function timePickerDirective() {
|
||||||
return {
|
return {
|
||||||
restrict: 'E',
|
restrict: 'E',
|
||||||
templateUrl: 'public/app/features/dashboard/timepicker/timepicker.html',
|
templateUrl: 'public/app/features/dashboard/components/TimePicker/template.html',
|
||||||
controller: TimePickerCtrl,
|
controller: TimePickerCtrl,
|
||||||
bindToController: true,
|
bindToController: true,
|
||||||
controllerAs: 'ctrl',
|
controllerAs: 'ctrl',
|
||||||
@ -185,5 +185,5 @@ export function timePickerDirective() {
|
|||||||
angular.module('grafana.directives').directive('gfTimePickerSettings', settingsDirective);
|
angular.module('grafana.directives').directive('gfTimePickerSettings', settingsDirective);
|
||||||
angular.module('grafana.directives').directive('gfTimePicker', timePickerDirective);
|
angular.module('grafana.directives').directive('gfTimePicker', timePickerDirective);
|
||||||
|
|
||||||
import { inputDateDirective } from './input_date';
|
import { inputDateDirective } from './validation';
|
||||||
angular.module('grafana.directives').directive('inputDatetime', inputDateDirective);
|
angular.module('grafana.directives').directive('inputDatetime', inputDateDirective);
|
@ -0,0 +1 @@
|
|||||||
|
export { TimePickerCtrl } from './TimePickerCtrl';
|
@ -0,0 +1 @@
|
|||||||
|
export { UnsavedChangesModalCtrl } from './UnsavedChangesModalCtrl';
|
@ -1,6 +1,6 @@
|
|||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import { HistoryListCtrl } from 'app/features/dashboard/history/history';
|
import { HistoryListCtrl } from './HistoryListCtrl';
|
||||||
import { versions, compare, restore } from './history_mocks';
|
import { versions, compare, restore } from './__mocks__/history';
|
||||||
import $q from 'q';
|
import $q from 'q';
|
||||||
|
|
||||||
describe('HistoryListCtrl', () => {
|
describe('HistoryListCtrl', () => {
|
@ -1,12 +1,10 @@
|
|||||||
import './history_srv';
|
|
||||||
|
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import angular from 'angular';
|
import angular from 'angular';
|
||||||
import moment from 'moment';
|
import moment from 'moment';
|
||||||
|
|
||||||
import locationUtil from 'app/core/utils/location_util';
|
import locationUtil from 'app/core/utils/location_util';
|
||||||
import { DashboardModel } from '../dashboard_model';
|
import { DashboardModel } from '../../dashboard_model';
|
||||||
import { HistoryListOpts, RevisionsModel, CalculateDiffOptions, HistorySrv } from './history_srv';
|
import { HistoryListOpts, RevisionsModel, CalculateDiffOptions, HistorySrv } from './HistorySrv';
|
||||||
|
|
||||||
export class HistoryListCtrl {
|
export class HistoryListCtrl {
|
||||||
appending: boolean;
|
appending: boolean;
|
||||||
@ -200,7 +198,7 @@ export class HistoryListCtrl {
|
|||||||
export function dashboardHistoryDirective() {
|
export function dashboardHistoryDirective() {
|
||||||
return {
|
return {
|
||||||
restrict: 'E',
|
restrict: 'E',
|
||||||
templateUrl: 'public/app/features/dashboard/history/history.html',
|
templateUrl: 'public/app/features/dashboard/components/VersionHistory/template.html',
|
||||||
controller: HistoryListCtrl,
|
controller: HistoryListCtrl,
|
||||||
bindToController: true,
|
bindToController: true,
|
||||||
controllerAs: 'ctrl',
|
controllerAs: 'ctrl',
|
@ -1,7 +1,6 @@
|
|||||||
import '../history/history_srv';
|
import { versions, restore } from './__mocks__/history';
|
||||||
import { versions, restore } from './history_mocks';
|
import { HistorySrv } from './HistorySrv';
|
||||||
import { HistorySrv } from '../history/history_srv';
|
import { DashboardModel } from '../../dashboard_model';
|
||||||
import { DashboardModel } from '../dashboard_model';
|
|
||||||
jest.mock('app/core/store');
|
jest.mock('app/core/store');
|
||||||
|
|
||||||
describe('historySrv', () => {
|
describe('historySrv', () => {
|
@ -1,6 +1,6 @@
|
|||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import coreModule from 'app/core/core_module';
|
import coreModule from 'app/core/core_module';
|
||||||
import { DashboardModel } from '../dashboard_model';
|
import { DashboardModel } from '../../dashboard_model';
|
||||||
|
|
||||||
export interface HistoryListOpts {
|
export interface HistoryListOpts {
|
||||||
limit: number;
|
limit: number;
|
@ -0,0 +1,2 @@
|
|||||||
|
export { HistoryListCtrl } from './HistoryListCtrl';
|
||||||
|
export { HistorySrv } from './HistorySrv';
|
@ -22,7 +22,6 @@ export class DashboardCtrl {
|
|||||||
private keybindingSrv,
|
private keybindingSrv,
|
||||||
private timeSrv,
|
private timeSrv,
|
||||||
private variableSrv,
|
private variableSrv,
|
||||||
private alertingSrv,
|
|
||||||
private dashboardSrv,
|
private dashboardSrv,
|
||||||
private unsavedChangesSrv,
|
private unsavedChangesSrv,
|
||||||
private dashboardViewStateSrv,
|
private dashboardViewStateSrv,
|
||||||
@ -54,7 +53,6 @@ export class DashboardCtrl {
|
|||||||
|
|
||||||
// init services
|
// init services
|
||||||
this.timeSrv.init(dashboard);
|
this.timeSrv.init(dashboard);
|
||||||
this.alertingSrv.init(dashboard, data.alerts);
|
|
||||||
this.annotationsSrv.init(dashboard);
|
this.annotationsSrv.init(dashboard);
|
||||||
|
|
||||||
// template values service needs to initialize completely before
|
// template values service needs to initialize completely before
|
||||||
|
@ -1,25 +0,0 @@
|
|||||||
import { FolderPageLoader } from './folder_page_loader';
|
|
||||||
|
|
||||||
export class FolderPermissionsCtrl {
|
|
||||||
navModel: any;
|
|
||||||
folderId: number;
|
|
||||||
uid: string;
|
|
||||||
dashboard: any;
|
|
||||||
meta: any;
|
|
||||||
|
|
||||||
/** @ngInject */
|
|
||||||
constructor(private backendSrv, navModelSrv, private $routeParams, $location) {
|
|
||||||
if (this.$routeParams.uid) {
|
|
||||||
this.uid = $routeParams.uid;
|
|
||||||
|
|
||||||
new FolderPageLoader(this.backendSrv).load(this, this.uid, 'manage-folder-permissions').then(folder => {
|
|
||||||
if ($location.path() !== folder.meta.url) {
|
|
||||||
$location.path(`${folder.meta.url}/permissions`).replace();
|
|
||||||
}
|
|
||||||
|
|
||||||
this.dashboard = folder.dashboard;
|
|
||||||
this.meta = folder.meta;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
35
public/app/features/dashboard/index.ts
Normal file
35
public/app/features/dashboard/index.ts
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
import './dashboard_ctrl';
|
||||||
|
import './time_srv';
|
||||||
|
import './repeat_option/repeat_option';
|
||||||
|
import './dashgrid/DashboardGridDirective';
|
||||||
|
import './dashgrid/RowOptions';
|
||||||
|
import './panellinks/module';
|
||||||
|
|
||||||
|
// Services
|
||||||
|
import './services/DashboardViewStateSrv';
|
||||||
|
import './services/UnsavedChangesSrv';
|
||||||
|
import './services/DashboardLoaderSrv';
|
||||||
|
import './services/DashboardSrv';
|
||||||
|
|
||||||
|
// Components
|
||||||
|
import './components/DashLinks';
|
||||||
|
import './components/DashExportModal';
|
||||||
|
import './components/DashNav';
|
||||||
|
import './components/ExportDataModal';
|
||||||
|
import './components/FolderPicker';
|
||||||
|
import './components/VersionHistory';
|
||||||
|
import './components/DashboardSettings';
|
||||||
|
import './components/SubMenu';
|
||||||
|
import './components/TimePicker';
|
||||||
|
import './components/UnsavedChangesModal';
|
||||||
|
import './components/SaveModals';
|
||||||
|
import './components/ShareModal';
|
||||||
|
import './components/AdHocFilters';
|
||||||
|
|
||||||
|
import DashboardPermissions from './components/DashboardPermissions/DashboardPermissions';
|
||||||
|
|
||||||
|
// angular wrappers
|
||||||
|
import { react2AngularDirective } from 'app/core/utils/react2angular';
|
||||||
|
|
||||||
|
react2AngularDirective('dashboardPermissions', DashboardPermissions, ['dashboardId', 'folder']);
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
import { ChangeTracker } from 'app/features/dashboard/change_tracker';
|
import { ChangeTracker } from './ChangeTracker';
|
||||||
import { contextSrv } from 'app/core/services/context_srv';
|
import { contextSrv } from 'app/core/services/context_srv';
|
||||||
import { DashboardModel } from '../dashboard_model';
|
import { DashboardModel } from '../dashboard_model';
|
||||||
import { PanelModel } from '../panel_model';
|
import { PanelModel } from '../panel_model';
|
@ -1,6 +1,6 @@
|
|||||||
import angular from 'angular';
|
import angular from 'angular';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import { DashboardModel } from './dashboard_model';
|
import { DashboardModel } from '../dashboard_model';
|
||||||
|
|
||||||
export class ChangeTracker {
|
export class ChangeTracker {
|
||||||
current: any;
|
current: any;
|
@ -1,5 +1,5 @@
|
|||||||
import coreModule from 'app/core/core_module';
|
import coreModule from 'app/core/core_module';
|
||||||
import { DashboardModel } from './dashboard_model';
|
import { DashboardModel } from '../dashboard_model';
|
||||||
import locationUtil from 'app/core/utils/location_util';
|
import locationUtil from 'app/core/utils/location_util';
|
||||||
|
|
||||||
export class DashboardSrv {
|
export class DashboardSrv {
|
@ -1,7 +1,5 @@
|
|||||||
//import { describe, beforeEach, it, expect, angularMocks } from 'test/lib/common';
|
|
||||||
import 'app/features/dashboard/view_state_srv';
|
|
||||||
import config from 'app/core/config';
|
import config from 'app/core/config';
|
||||||
import { DashboardViewState } from '../view_state_srv';
|
import { DashboardViewStateSrv } from './DashboardViewStateSrv';
|
||||||
import { DashboardModel } from '../dashboard_model';
|
import { DashboardModel } from '../dashboard_model';
|
||||||
|
|
||||||
describe('when updating view state', () => {
|
describe('when updating view state', () => {
|
||||||
@ -33,7 +31,7 @@ describe('when updating view state', () => {
|
|||||||
location.search = jest.fn(() => {
|
location.search = jest.fn(() => {
|
||||||
return { fullscreen: true, edit: true, panelId: 1 };
|
return { fullscreen: true, edit: true, panelId: 1 };
|
||||||
});
|
});
|
||||||
viewState = new DashboardViewState($scope, location, {});
|
viewState = new DashboardViewStateSrv($scope, location, {});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should update querystring and view state', () => {
|
it('should update querystring and view state', () => {
|
||||||
@ -55,7 +53,7 @@ describe('when updating view state', () => {
|
|||||||
|
|
||||||
describe('to fullscreen false', () => {
|
describe('to fullscreen false', () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
viewState = new DashboardViewState($scope, location, {});
|
viewState = new DashboardViewStateSrv($scope, location, {});
|
||||||
});
|
});
|
||||||
it('should remove params from query string', () => {
|
it('should remove params from query string', () => {
|
||||||
viewState.update({ fullscreen: true, panelId: 1, edit: true });
|
viewState.update({ fullscreen: true, panelId: 1, edit: true });
|
@ -2,11 +2,11 @@ import angular from 'angular';
|
|||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import config from 'app/core/config';
|
import config from 'app/core/config';
|
||||||
import appEvents from 'app/core/app_events';
|
import appEvents from 'app/core/app_events';
|
||||||
import { DashboardModel } from './dashboard_model';
|
import { DashboardModel } from '../dashboard_model';
|
||||||
|
|
||||||
// represents the transient view state
|
// represents the transient view state
|
||||||
// like fullscreen panel & edit
|
// like fullscreen panel & edit
|
||||||
export class DashboardViewState {
|
export class DashboardViewStateSrv {
|
||||||
state: any;
|
state: any;
|
||||||
panelScopes: any;
|
panelScopes: any;
|
||||||
$scope: any;
|
$scope: any;
|
||||||
@ -168,7 +168,7 @@ export class DashboardViewState {
|
|||||||
export function dashboardViewStateSrv($location, $timeout) {
|
export function dashboardViewStateSrv($location, $timeout) {
|
||||||
return {
|
return {
|
||||||
create: $scope => {
|
create: $scope => {
|
||||||
return new DashboardViewState($scope, $location, $timeout);
|
return new DashboardViewStateSrv($scope, $location, $timeout);
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
@ -1,5 +1,5 @@
|
|||||||
import angular from 'angular';
|
import angular from 'angular';
|
||||||
import { ChangeTracker } from './change_tracker';
|
import { ChangeTracker } from './ChangeTracker';
|
||||||
|
|
||||||
/** @ngInject */
|
/** @ngInject */
|
||||||
export function unsavedChangesSrv(this: any, $rootScope, $q, $location, $timeout, contextSrv, dashboardSrv, $window) {
|
export function unsavedChangesSrv(this: any, $rootScope, $q, $location, $timeout, contextSrv, dashboardSrv, $window) {
|
@ -80,7 +80,7 @@ export const editPanelJson = (dashboard: DashboardModel, panel: PanelModel) => {
|
|||||||
|
|
||||||
export const sharePanel = (dashboard: DashboardModel, panel: PanelModel) => {
|
export const sharePanel = (dashboard: DashboardModel, panel: PanelModel) => {
|
||||||
appEvents.emit('show-modal', {
|
appEvents.emit('show-modal', {
|
||||||
src: 'public/app/features/dashboard/partials/shareModal.html',
|
src: 'public/app/features/dashboard/components/ShareModal/template.html',
|
||||||
model: {
|
model: {
|
||||||
dashboard: dashboard,
|
dashboard: dashboard,
|
||||||
panel: panel,
|
panel: panel,
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { DashboardImportCtrl } from '../dashboard_import_ctrl';
|
import { DashboardImportCtrl } from './DashboardImportCtrl';
|
||||||
import config from '../../../core/config';
|
import config from 'app/core/config';
|
||||||
|
|
||||||
describe('DashboardImportCtrl', () => {
|
describe('DashboardImportCtrl', () => {
|
||||||
const ctx: any = {};
|
const ctx: any = {};
|
@ -1,4 +1,4 @@
|
|||||||
import { FolderPageLoader } from './folder_page_loader';
|
import { FolderPageLoader } from './services/FolderPageLoader';
|
||||||
import locationUtil from 'app/core/utils/location_util';
|
import locationUtil from 'app/core/utils/location_util';
|
||||||
|
|
||||||
export class FolderDashboardsCtrl {
|
export class FolderDashboardsCtrl {
|
@ -46,7 +46,7 @@ export class MoveToFolderCtrl {
|
|||||||
export function moveToFolderModal() {
|
export function moveToFolderModal() {
|
||||||
return {
|
return {
|
||||||
restrict: 'E',
|
restrict: 'E',
|
||||||
templateUrl: 'public/app/features/dashboard/move_to_folder_modal/move_to_folder.html',
|
templateUrl: 'public/app/features/manage-dashboards/components/MoveToFolderModal/template.html',
|
||||||
controller: MoveToFolderCtrl,
|
controller: MoveToFolderCtrl,
|
||||||
bindToController: true,
|
bindToController: true,
|
||||||
controllerAs: 'ctrl',
|
controllerAs: 'ctrl',
|
@ -0,0 +1 @@
|
|||||||
|
export { MoveToFolderCtrl } from './MoveToFolderCtrl';
|
@ -0,0 +1 @@
|
|||||||
|
export { uploadDashboardDirective } from './uploadDashboardDirective';
|
@ -11,7 +11,7 @@ const template = `
|
|||||||
`;
|
`;
|
||||||
|
|
||||||
/** @ngInject */
|
/** @ngInject */
|
||||||
function uploadDashboardDirective(timer, $location) {
|
export function uploadDashboardDirective(timer, $location) {
|
||||||
return {
|
return {
|
||||||
restrict: 'E',
|
restrict: 'E',
|
||||||
template: template,
|
template: template,
|
@ -1,7 +1,21 @@
|
|||||||
import coreModule from 'app/core/core_module';
|
// Services
|
||||||
|
export { ValidationSrv } from './services/ValidationSrv';
|
||||||
|
|
||||||
|
// Components
|
||||||
|
export * from './components/MoveToFolderModal';
|
||||||
|
export * from './components/UploadDashboard';
|
||||||
|
|
||||||
|
// Controllers
|
||||||
import { DashboardListCtrl } from './DashboardListCtrl';
|
import { DashboardListCtrl } from './DashboardListCtrl';
|
||||||
import { SnapshotListCtrl } from './SnapshotListCtrl';
|
import { SnapshotListCtrl } from './SnapshotListCtrl';
|
||||||
|
import { FolderDashboardsCtrl } from './FolderDashboardsCtrl';
|
||||||
|
import { DashboardImportCtrl } from './DashboardImportCtrl';
|
||||||
|
import { CreateFolderCtrl } from './CreateFolderCtrl';
|
||||||
|
|
||||||
|
import coreModule from 'app/core/core_module';
|
||||||
|
|
||||||
coreModule.controller('DashboardListCtrl', DashboardListCtrl);
|
coreModule.controller('DashboardListCtrl', DashboardListCtrl);
|
||||||
coreModule.controller('SnapshotListCtrl', SnapshotListCtrl);
|
coreModule.controller('SnapshotListCtrl', SnapshotListCtrl);
|
||||||
|
coreModule.controller('FolderDashboardsCtrl', FolderDashboardsCtrl);
|
||||||
|
coreModule.controller('DashboardImportCtrl', DashboardImportCtrl);
|
||||||
|
coreModule.controller('CreateFolderCtrl', CreateFolderCtrl);
|
||||||
|
62
style_guides/frontend.md
Normal file
62
style_guides/frontend.md
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
# Frontend Style Guide
|
||||||
|
|
||||||
|
Generally we follow the Airbnb [React Style Guide](https://github.com/airbnb/javascript/tree/master/react).
|
||||||
|
|
||||||
|
## Table of Contents
|
||||||
|
|
||||||
|
1. [Basic Rules](#basic-rules)
|
||||||
|
1. [File & Component Organization](#Organization)
|
||||||
|
1. [Naming](#naming)
|
||||||
|
1. [Declaration](#declaration)
|
||||||
|
1. [Props](#props)
|
||||||
|
1. [Refs](#refs)
|
||||||
|
1. [Methods](#methods)
|
||||||
|
1. [Ordering](#ordering)
|
||||||
|
|
||||||
|
## Basic rules
|
||||||
|
|
||||||
|
* Try to keep files small and focused and break large components up into sub components.
|
||||||
|
|
||||||
|
## Organization
|
||||||
|
|
||||||
|
* Components and types that needs to be used by external plugins needs to go into @grafana/ui
|
||||||
|
* Components should get their own folder under features/xxx/components
|
||||||
|
* Sub components can live in that component folders, so not small component needs their own folder
|
||||||
|
* Place test next to their component file (same dir)
|
||||||
|
* Mocks in __mocks__ dir
|
||||||
|
* Test utils in __tests__ dir
|
||||||
|
* Component sass should live in the same folder as component code
|
||||||
|
* State logic & domain models should live in features/xxx/state
|
||||||
|
* Containers (pages) can live in feature root features/xxx
|
||||||
|
* up for debate?
|
||||||
|
|
||||||
|
## Props
|
||||||
|
|
||||||
|
* Name callback props & handlers with a "on" prefix.
|
||||||
|
|
||||||
|
```tsx
|
||||||
|
// good
|
||||||
|
onChange = () => {
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
render() {
|
||||||
|
return (
|
||||||
|
<MyComponent onChange={this.onChange} />
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// bad
|
||||||
|
handleChange = () => {
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
render() {
|
||||||
|
return (
|
||||||
|
<MyComponent changed={this.handleChange} />
|
||||||
|
);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user