packages/issue-dashboard-widgets/widgets/distribution-reports/app/distribution-report-axises.js (92 lines of code) (raw):

import ReportModel from '../../../../lib/reporting-components/report-model/report-model'; import { getReportTypePresentation, isTypeWithEditableXAxis } from './distribution-report-types'; const SortOrderComparators = { getAscComparatorForProperty: propertyName => (firstColumn, secondColumn) => { const firstValue = ReportModel.getSizeValue(firstColumn[propertyName]); const secondValue = ReportModel.getSizeValue(secondColumn[propertyName]); if (firstValue === secondValue) { return 0; } return firstValue < secondValue ? -1 : 1; }, countIndexAsc: (firstColumn, secondColumn) => SortOrderComparators.getAscComparatorForProperty('size')( firstColumn, secondColumn ), countIndexDesc: (firstColumn, secondColumn) => SortOrderComparators.countIndexAsc(secondColumn, firstColumn), displayNameAsc: (firstColumn, secondColumn) => SortOrderComparators.getAscComparatorForProperty('naturalSortIndex')( firstColumn, secondColumn ), displayNameDesc: (firstColumn, secondColumn) => SortOrderComparators.displayNameAsc(secondColumn, firstColumn) }; const SortOrder = { ByCount: { Asc: 'COUNT_INDEX_ASC', Desc: 'COUNT_INDEX_DESC' }, Naturally: { Asc: 'DISPLAY_NAME_ASC', Desc: 'DISPLAY_NAME_DESC' }, All: ['COUNT_INDEX_ASC', 'COUNT_INDEX_DESC', 'DISPLAY_NAME_ASC', 'DISPLAY_NAME_DESC'], getSortOrderComparator: sortOrder => ({ [SortOrder.ByCount.Asc]: SortOrderComparators.countIndexAsc, [SortOrder.ByCount.Desc]: SortOrderComparators.countIndexDesc, [SortOrder.Naturally.Asc]: SortOrderComparators.displayNameAsc, [SortOrder.Naturally.Desc]: SortOrderComparators.displayNameDesc })[sortOrder], applySortOrderToColumns: (report, columnsPropertyName, sortOrder) => { if (report.data && report.data[columnsPropertyName]) { report.data[columnsPropertyName] = report.data[columnsPropertyName].sort( SortOrder.getSortOrderComparator(sortOrder) ); } }, getMainAxisSortOrder: report => (report.ysortOrder ? report.ysortOrder : (report.xsortOrder || SortOrder.ByCount.Desc)), setMainAxisSortOrder: (report, newMainSortOrder) => { if (report.ysortOrder) { report.ysortOrder = newMainSortOrder; SortOrder.applySortOrderToColumns(report, 'ycolumns', newMainSortOrder); } else { report.xsortOrder = newMainSortOrder; SortOrder.applySortOrderToColumns(report, 'columns', newMainSortOrder); } return report; }, getSecondaryAxisSortOrder: report => (report.yaxis ? report.xsortOrder : undefined), setSecondaryAxisSortOrder: (report, secondarySortOrder) => { if (report.yaxis) { report.xsortOrder = secondarySortOrder; SortOrder.applySortOrderToColumns(report, 'xcolumns', secondarySortOrder); } return report; }, isEditable: report => isTypeWithEditableXAxis(report) && report.editable }; const DistributionReportAxises = { SortOrder, getMainAxis: report => report.yaxis || report.xaxis, getSecondaryAxis: report => (report.yaxis ? report.xaxis : undefined), getMainAxisPresentation: report => getReportTypePresentation(report), getSecondaryAxisPresentation: report => { const secondaryAxis = DistributionReportAxises.getSecondaryAxis(report); return secondaryAxis && secondaryAxis.field && secondaryAxis.field.presentation; } }; export default DistributionReportAxises;