diff --git a/public/app/core/utils/sort_by_keys.ts b/public/app/core/utils/sort_by_keys.ts new file mode 100644 index 00000000000..e7cedc93116 --- /dev/null +++ b/public/app/core/utils/sort_by_keys.ts @@ -0,0 +1,23 @@ +import _ from 'lodash'; + +export default function sortByKeys(input) { + if (_.isArray(input)) { + var newArray = []; + _.forEach( + input, + function(item) { newArray.push(sortByKeys(item)); } + ); + return newArray; + } + + if (_.isPlainObject(input)) { + var sortedObject = {}; + _.forEach( + _.keys(input).sort(), + function(key) { sortedObject[key] = sortByKeys(input[key]); } + ); + return sortedObject; + } + + return input; +} diff --git a/public/app/features/dashboard/export/exporter.ts b/public/app/features/dashboard/export/exporter.ts index 5efcd498f67..e9f6bd197d4 100644 --- a/public/app/features/dashboard/export/exporter.ts +++ b/public/app/features/dashboard/export/exporter.ts @@ -3,6 +3,7 @@ import config from 'app/core/config'; import angular from 'angular'; import _ from 'lodash'; +import sortByKeys from 'app/core/utils/sort_by_keys'; import {DynamicDashboardSrv} from '../dynamic_dashboard_srv'; @@ -145,18 +146,14 @@ export class DashboardExporter { } } - requires = _.map(requires, req => { - return req; - }); - // make inputs and requires a top thing var newObj = {}; newObj["__inputs"] = inputs; - newObj["__requires"] = requires; + newObj["__requires"] = _.sortBy(requires, ['id']); _.defaults(newObj, saveModel); - return newObj; + return sortByKeys(newObj); }).catch(err => { console.log('Export failed:', err); return {