From c2d081dbd74cb67e7eedbcc85db2f9d91d0e8c2c Mon Sep 17 00:00:00 2001 From: Maksymilian Fryc Date: Wed, 16 Aug 2017 15:52:26 +0200 Subject: [PATCH] Add sorting --- lib/components/SideMenu/side-menu.spec.ts | 12 +- lib/components/SideMenu/side-menu.ts | 12 +- lib/components/SideMenu/sort.ts | 204 ++++++++++++++++++++++ lib/services/menu.service.ts | 7 +- 4 files changed, 231 insertions(+), 4 deletions(-) create mode 100644 lib/components/SideMenu/sort.ts diff --git a/lib/components/SideMenu/side-menu.spec.ts b/lib/components/SideMenu/side-menu.spec.ts index b31e476d..35854907 100644 --- a/lib/components/SideMenu/side-menu.spec.ts +++ b/lib/components/SideMenu/side-menu.spec.ts @@ -3,7 +3,7 @@ import { getChildDebugElement } from '../../../tests/helpers'; import { Component } from '@angular/core'; import { OptionsService, MenuItem } from '../../services/index'; - +import { compareEndpoints, menuItemsList } from './sort'; import { inject, async @@ -64,6 +64,16 @@ describe('Redoc components', () => { component.activeItemCaption.should.be.equal(''); }); + it('should confirm that component is sorted', () => { + for(var i=0;i { let parentItem: MenuItem = { id: 'id', diff --git a/lib/components/SideMenu/side-menu.ts b/lib/components/SideMenu/side-menu.ts index c92b8424..fb7cad3c 100644 --- a/lib/components/SideMenu/side-menu.ts +++ b/lib/components/SideMenu/side-menu.ts @@ -15,7 +15,7 @@ import { trigger, state, animate, transition, style } from '@angular/core'; import { ScrollService, MenuService, OptionsService, MenuItem } from '../../services/'; import { PerfectScrollbar } from '../../shared/components'; import { BrowserDomAdapter as DOM } from '../../utils/browser-adapter'; - +import { compareEndpoints, menuItemsList } from './sort'; const global = window; @Component({ @@ -114,6 +114,16 @@ export class SideMenu implements OnInit, OnDestroy { init() { this.menuItems = this.menuService.items; + for(var i=0;i { + let sortOrderComparisonResult: number; + if(a.metadata.sortOrder != null && b.metadata.sortOrder != null) + sortOrderComparisonResult = a.metadata.sortOrder.localeCompare(b.metadata.sortOrder); + let operationComparisonResult: number; + if(a.metadata.operation != null && b.metadata.operation != null) + operationComparisonResult = a.metadata.operation.localeCompare(b.metadata.operation); + let nameComparisonResult: number = a.name.localeCompare(b.name); + + if(sortOrderComparisonResult != null && sortOrderComparisonResult !== 0) + return sortOrderComparisonResult; + else if(operationComparisonResult != null && operationComparisonResult !== 0) + return operationComparisonResult; + else + return nameComparisonResult; +} +export let menuItemsList = +[ + { + name: "Pagination", + id: "section/Pagination", + items: [] + }, + { + name: "JSONP", + id: "section/JSONP", + items: [] + }, + { + name: "Authentication", + id: "section/Authentication", + items: [] + }, + { + name: "pet", + id: "tag/pet", + items: [ + { + name: "Deletes a pet", + id: "/paths/~1pet~1{petId}/delete", + metadata: {operation: "delete"} + }, + { + name: "Find pet by ID", + id: "/paths/~1pet~1{petId}/get", + metadata: {operation: "get"} + }, + { + name: "Finds Pets by status", + id: "/paths/~1pet~1findByStatus/get", + metadata: {operation: "get"} + }, + { + name: "Finds Pets by tags", + id: "/paths/~1pet~1findByTags/get", + metadata: {operation: "get"} + }, + { + name: "Add a new pet to the store", + id: "/paths/~1pet/post", + metadata: {operation: "post"} + }, + { + name: "Updates a pet in the store with form data", + id: "/paths/~1pet~1{petId}/post", + metadata: {operation: "post"} + }, + { + name: "uploads an image", + id: "/paths/~1pet~1{petId}~1uploadImage/post", + metadata: {operation: "post"} + }, + { + name: "Update an existing pet", + id: "/paths/~1pet/put", + metadata: {operation: "put"} + } + ] + }, + { + name: "store", + id: "tag/store", + items: [ + { + name: "Delete purchase order by ID", + id: "/paths/~1store~1order~1{orderId}/delete", + metadata: {operation: "delete"} + }, + { + name: "Find purchase order by ID", + id: "/paths/~1store~1order~1{orderId}/get", + metadata: {operation: "get"} + }, + { + name: "Returns pet inventories by status", + id: "/paths/~1store~1inventory/get", + metadata: {operation: "get"} + }, + { + name: "Place an order for a pet", + id: "/paths/~1store~1order/post", + metadata: {operation: "post"} + } + ] + }, + { + name: "user", + id: "tag/user", + items: [ + { + name: "Delete user", + id: "/paths/~1user~1{username}/delete", + metadata: {operation: "delete"} + }, + { + name: "Get user by user name", + id: "/paths/~1user~1{username}/get", + metadata: {operation: "get"} + }, + { + name: "Logs out current logged in user session", + id: "/paths/~1user~1logout/get", + metadata: {operation: "get"} + }, + { + name: "Logs user into the system", + id: "/paths/~1user~1login/get", + metadata: {operation: "get"} + }, + { + name: "Create user", + id: "/paths/~1user/post", + metadata: {operation: "post"} + }, + { + name: "Creates list of users with given input array", + id: "/paths/~1user~1createWithArray/post", + metadata: {operation: "post"} + }, + { + name: "Creates list of users with given input array", + id: "/paths/~1user~1createWithList/post", + metadata: {operation: "post"} + }, + { + name: "Updated user", + id: "/paths/~1user~1{username}/put", + metadata: {operation: "put"} + } + ] + }, + { + name: "Pagination", + id: "tag/Pagination", + items: [ + { + name: "Finds Pets by status", + id: "/paths/~1pet~1findByStatus/get", + metadata: {operation: "get"} + }, + { + name: "Finds Pets by tags", + id: "/paths/~1pet~1findByTags/get", + metadata: {operation: "get"} + } + ] + }, + { + name: "JSONP", + id: "tag/JSONP", + items: [ + { + name: "Find pet by ID", + id: "/paths/~1pet~1{petId}/get", + metadata: {operation: "get"} + }, + { + name: "Find purchase order by ID", + id: "/paths/~1store~1order~1{orderId}/get", + metadata: {operation: "get"} + }, + { + name: "Finds Pets by status", + id: "/paths/~1pet~1findByStatus/get", + metadata: {operation: "get"} + }, + { + name: "Finds Pets by tags", + id: "/paths/~1pet~1findByTags/get", + metadata: {operation: "get"} + }, + { + name: "Get user by user name", + id: "/paths/~1user~1{username}/get", + metadata: {operation: "post"} + }, + { + name: "Returns pet inventories by status", + id: "/paths/~1store~1inventory/get", + metadata: {operation: "post"} + } + ] + } +]; \ No newline at end of file diff --git a/lib/services/menu.service.ts b/lib/services/menu.service.ts index b0873b27..5c71173a 100644 --- a/lib/services/menu.service.ts +++ b/lib/services/menu.service.ts @@ -332,6 +332,9 @@ export class MenuService { let res = []; for (let operationInfo of tag.operations) { + let xSortOrder; + let orderInfo = operationInfo['x-sort-order']; + if(orderInfo>=0 && orderInfo