| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the 'License'); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an 'AS IS' BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| import { Component } from '@angular/core'; |
| import { TdDataTableService } from '@covalent/core/bundles/covalent-core.umd.min.js'; |
| import animations from '@flow-design-system/common/animations'; |
| import { MatDialog } from '@angular/material'; |
| import { FdsDialogService } from '@flow-design-system/dialogs'; |
| import { FdsSnackBarService } from '@flow-design-system/snackbars'; |
| import FdsService from 'webapp/services/fds.service.js'; |
| import FdsDemoDialog from 'webapp/components/flow-design-system/dialogs/demo/fds-demo-dialog.js'; |
| import html from './fds-demo.html'; |
| |
| const NUMBER_FORMAT = function (v) { |
| return v; |
| }; |
| const DECIMAL_FORMAT = function (v) { |
| return v.toFixed(2); |
| }; |
| const date = new Date(); |
| |
| /** |
| * FdsDemo constructor. |
| * |
| * @param FdsSnackBarService The FDS snack bar service module. |
| * @param FdsService The FDS service module. |
| * @param dialog The angular material dialog module. |
| * @param TdDialogService The covalent dialog service module. |
| * @param TdDataTableService The covalent data table service module. |
| * @constructor |
| */ |
| function FdsDemo(FdsSnackBarService, FdsService, dialog, TdDataTableService, FdsDialogService) { |
| this.fdsService = FdsService; |
| |
| //<editor-fold desc='Snack Bars'> |
| |
| this.snackBarService = FdsSnackBarService; |
| |
| //</editor-fold> |
| |
| //<editor-fold desc='Dialog'> |
| |
| this.dialog = dialog; |
| |
| //</editor-fold> |
| |
| //<editor-fold desc='Simple Dialogs'> |
| |
| this.dialogService = FdsDialogService; |
| |
| //</editor-fold> |
| |
| //<editor-fold desc='Expansion Panel'> |
| |
| this.expandCollapseExpansion1Msg = 'No expanded/collapsed detected yet'; |
| this.expansion1 = false; |
| this.disabled = false; |
| |
| //</editor-fold> |
| |
| //<editor-fold desc='Autocomplete'> |
| |
| this.currentState = ''; |
| this.reactiveStates = ''; |
| this.tdStates = []; |
| this.tdDisabled = false; |
| this.states = [ |
| {code: 'AL', name: 'Alabama'}, |
| {code: 'AK', name: 'Alaska'}, |
| {code: 'AZ', name: 'Arizona'}, |
| {code: 'AR', name: 'Arkansas'}, |
| {code: 'CA', name: 'California'}, |
| {code: 'CO', name: 'Colorado'}, |
| {code: 'CT', name: 'Connecticut'}, |
| {code: 'DE', name: 'Delaware'}, |
| {code: 'FL', name: 'Florida'}, |
| {code: 'GA', name: 'Georgia'}, |
| {code: 'HI', name: 'Hawaii'}, |
| {code: 'ID', name: 'Idaho'}, |
| {code: 'IL', name: 'Illinois'}, |
| {code: 'IN', name: 'Indiana'}, |
| {code: 'IA', name: 'Iowa'}, |
| {code: 'KS', name: 'Kansas'}, |
| {code: 'KY', name: 'Kentucky'}, |
| {code: 'LA', name: 'Louisiana'}, |
| {code: 'ME', name: 'Maine'}, |
| {code: 'MD', name: 'Maryland'}, |
| {code: 'MA', name: 'Massachusetts'}, |
| {code: 'MI', name: 'Michigan'}, |
| {code: 'MN', name: 'Minnesota'}, |
| {code: 'MS', name: 'Mississippi'}, |
| {code: 'MO', name: 'Missouri'}, |
| {code: 'MT', name: 'Montana'}, |
| {code: 'NE', name: 'Nebraska'}, |
| {code: 'NV', name: 'Nevada'}, |
| {code: 'NH', name: 'New Hampshire'}, |
| {code: 'NJ', name: 'New Jersey'}, |
| {code: 'NM', name: 'New Mexico'}, |
| {code: 'NY', name: 'New York'}, |
| {code: 'NC', name: 'North Carolina'}, |
| {code: 'ND', name: 'North Dakota'}, |
| {code: 'OH', name: 'Ohio'}, |
| {code: 'OK', name: 'Oklahoma'}, |
| {code: 'OR', name: 'Oregon'}, |
| {code: 'PA', name: 'Pennsylvania'}, |
| {code: 'RI', name: 'Rhode Island'}, |
| {code: 'SC', name: 'South Carolina'}, |
| {code: 'SD', name: 'South Dakota'}, |
| {code: 'TN', name: 'Tennessee'}, |
| {code: 'TX', name: 'Texas'}, |
| {code: 'UT', name: 'Utah'}, |
| {code: 'VT', name: 'Vermont'}, |
| {code: 'VA', name: 'Virginia'}, |
| {code: 'WA', name: 'Washington'}, |
| {code: 'WV', name: 'West Virginia'}, |
| {code: 'WI', name: 'Wisconsin'}, |
| {code: 'WY', name: 'Wyoming'}, |
| ]; |
| |
| //</editor-fold> |
| |
| //<editor-fold desc='Searchable Expansion Panels'> |
| |
| this.dataTableService = TdDataTableService; |
| |
| this.droplets = [{ |
| id: '23f6cc59-0156-1000-09b4-2b0610089090', |
| name: 'Decompression_Circular_Flow', |
| displayName: 'Decompressed Circular flow', |
| type: 'flow', |
| sublabel: 'A sublabel', |
| compliant: { |
| id: '25fd6vv87-3549-0001-05g6-4d4567890765', |
| label: 'Compliant', |
| type: 'certification' |
| }, |
| fleet: { |
| id: '23f6cc59-3549-0001-05g6-4d4567890765', |
| label: 'Fleet', |
| type: 'certification' |
| }, |
| prod: { |
| id: '52fd6vv87-3549-0001-05g6-4d4567890765', |
| label: 'Production Ready', |
| type: 'certification' |
| }, |
| secure: { |
| id: '32f6cc59-3549-0001-05g6-4d4567890765', |
| label: 'Secure', |
| type: 'certification' |
| }, |
| versions: [{ |
| id: '23f6cc59-0156-1000-06b4-2b0810089090', |
| revision: '1', |
| dependentFlows: [{ |
| id: '25fd6vv87-3549-0001-05g6-4d4567890765' |
| }], |
| created: date.setDate(date.getDate() - 1), |
| updated: new Date() |
| }, { |
| id: '25fd6vv87-3549-0001-05g6-4d4567890765', |
| revision: '2', |
| dependentFlows: [{ |
| id: '23f6cc59-0156-1000-06b4-2b0810089090' |
| }], |
| created: new Date(), |
| updated: new Date() |
| }], |
| flows: [], |
| extensions: [], |
| assets: [], |
| actions: [{ |
| 'name': 'Delete', |
| 'icon': 'fa fa-close', |
| 'tooltip': 'Delete User' |
| }, { |
| 'name': 'Manage', |
| 'icon': 'fa fa-user', |
| 'tooltip': 'Manage User' |
| }, { |
| 'name': 'Action 3', |
| 'icon': 'fa fa-question', |
| 'tooltip': 'Whatever else we want to do...' |
| }] |
| }, { |
| id: '25fd6vv87-3249-0001-05g6-4d4767890765', |
| name: 'DateConversion', |
| displayName: 'Date conversion', |
| type: 'asset', |
| sublabel: 'A sublabel', |
| compliant: { |
| id: '25fd6vv34-3549-0001-05g6-4d4567890765', |
| label: 'Compliant', |
| type: 'certification' |
| }, |
| prod: { |
| id: '52vn6vv87-3549-0001-05g6-4d4567890765', |
| label: 'Production Ready', |
| type: 'certification' |
| }, |
| versions: [{ |
| id: '23f6ic59-0156-1000-06b4-2b0810089090', |
| revision: '1', |
| dependentFlows: [{ |
| id: '23f6cc19-0156-1000-06b4-2b0810089090' |
| }], |
| created: new Date(), |
| updated: new Date() |
| }], |
| flows: [], |
| extensions: [], |
| assets: [], |
| actions: [{ |
| 'name': 'Delete', |
| 'icon': 'fa fa-close', |
| 'tooltip': 'Delete User' |
| }] |
| }, { |
| id: '52fd6vv87-3294-0001-05g6-4d4767890765', |
| name: 'nifi-email-bundle', |
| displayName: 'nifi-email-bundle', |
| type: 'extension', |
| sublabel: 'A sublabel', |
| compliant: { |
| id: '33fd6vv87-3549-0001-05g6-4d4567890765', |
| label: 'Compliant', |
| test: { |
| label: 'test' |
| }, |
| type: 'certification' |
| }, |
| versions: [{ |
| id: '23d3cc59-0156-1000-06b4-2b0810089090', |
| revision: '1', |
| dependentFlows: [{ |
| id: '23f6cc89-0156-1000-06b4-2b0810089090' |
| }], |
| created: new Date(), |
| updated: new Date() |
| }], |
| flows: [], |
| extensions: [], |
| assets: [], |
| actions: [{ |
| 'name': 'Delete', |
| 'icon': 'fa fa-close', |
| 'tooltip': 'Delete User' |
| }, { |
| 'name': 'Manage', |
| 'icon': 'fa fa-user', |
| 'tooltip': 'Manage User' |
| }] |
| }]; |
| |
| this.filteredDroplets = []; |
| |
| this.dropletColumns = [ |
| {name: 'id', label: 'ID', sortable: true}, |
| {name: 'name', label: 'Name', sortable: true}, |
| {name: 'displayName', label: 'Display Name', sortable: true}, |
| {name: 'sublabel', label: 'Label', sortable: true}, |
| {name: 'type', label: 'Type', sortable: true} |
| ]; |
| this.activeDropletColumn = this.dropletColumns[0]; |
| |
| this.autoCompleteDroplets = []; |
| this.dropletsSearchTerms = []; |
| |
| //</editor-fold> |
| |
| //<editor-fold desc='Data Tables'> |
| |
| this.data = [{ |
| 'id': 1, |
| 'name': 'Frozen yogurt', |
| 'type': 'Ice cream', |
| 'calories': 159.0, |
| 'fat': 6.0, |
| 'carbs': 24.0, |
| 'protein': 4.0, |
| 'sodium': 87.0, |
| 'calcium': 14.0, |
| 'iron': 1.0, |
| 'comments': 'I love froyo!', |
| 'actions': [{ |
| 'name': 'Action 1', |
| 'icon': 'fa fa-user', |
| 'tooltip': 'Manage Users' |
| }, { |
| 'name': 'Action 2', |
| 'icon': 'fa fa-key', |
| 'tooltip': 'Manage Permissions' |
| }] |
| }, { |
| 'id': 2, |
| 'name': 'Ice cream sandwich', |
| 'type': 'Ice cream', |
| 'calories': 237.0, |
| 'fat': 9.0, |
| 'carbs': 37.0, |
| 'protein': 4.3, |
| 'sodium': 129.0, |
| 'calcium': 8.0, |
| 'iron': 1.0, |
| 'actions': [{ |
| 'name': 'Action 1', |
| 'icon': 'fa fa-user', |
| 'tooltip': 'Manage Users' |
| }, { |
| 'name': 'Action 2', |
| 'icon': 'fa fa-key', |
| 'tooltip': 'Manage Permissions' |
| }, { |
| 'name': 'Action 3', |
| 'tooltip': 'Action 3' |
| }, { |
| 'name': 'Action 4', |
| 'disabled': true, |
| 'tooltip': 'Action 4' |
| }, { |
| 'name': 'Action 5', |
| 'tooltip': 'Action 5' |
| }] |
| }, { |
| 'id': 3, |
| 'name': 'Eclair', |
| 'type': 'Pastry', |
| 'calories': 262.0, |
| 'fat': 16.0, |
| 'carbs': 24.0, |
| 'protein': 6.0, |
| 'sodium': 337.0, |
| 'calcium': 6.0, |
| 'iron': 7.0, |
| 'actions': [{ |
| 'name': 'Action 1', |
| 'icon': 'fa fa-user', |
| 'tooltip': 'Manage Users' |
| }, { |
| 'name': 'Action 2', |
| 'icon': 'fa fa-key', |
| 'tooltip': 'Manage Permissions' |
| }, { |
| 'name': 'Action 3', |
| 'tooltip': 'Action 3' |
| }, { |
| 'name': 'Action 4', |
| 'disabled': true, |
| 'tooltip': 'Action 4' |
| }, { |
| 'name': 'Action 5', |
| 'tooltip': 'Action 5' |
| }], |
| }, { |
| 'id': 4, |
| 'name': 'Cupcake', |
| 'type': 'Pastry', |
| 'calories': 305.0, |
| 'fat': 3.7, |
| 'carbs': 67.0, |
| 'protein': 4.3, |
| 'sodium': 413.0, |
| 'calcium': 3.0, |
| 'iron': 8.0, |
| 'actions': [{ |
| 'name': 'Action 1', |
| 'icon': 'fa fa-user', |
| 'tooltip': 'Manage Users' |
| }, { |
| 'name': 'Action 2', |
| 'icon': 'fa fa-key', |
| 'tooltip': 'Manage Permissions' |
| }, { |
| 'name': 'Action 3', |
| 'tooltip': 'Action 3' |
| }, { |
| 'name': 'Action 4', |
| 'disabled': true, |
| 'tooltip': 'Action 4' |
| }, { |
| 'name': 'Action 5', |
| 'tooltip': 'Action 5' |
| }], |
| }, { |
| 'id': 5, |
| 'name': 'Jelly bean', |
| 'type': 'Candy', |
| 'calories': 375.0, |
| 'fat': 0.0, |
| 'carbs': 94.0, |
| 'protein': 0.0, |
| 'sodium': 50.0, |
| 'calcium': 0.0, |
| 'iron': 0.0, |
| }, { |
| 'id': 6, |
| 'name': 'Lollipop', |
| 'type': 'Candy', |
| 'calories': 392.0, |
| 'fat': 0.2, |
| 'carbs': 98.0, |
| 'protein': 0.0, |
| 'sodium': 38.0, |
| 'calcium': 0.0, |
| 'iron': 2.0, |
| }, { |
| 'id': 7, |
| 'name': 'Honeycomb', |
| 'type': 'Other', |
| 'calories': 408.0, |
| 'fat': 3.2, |
| 'carbs': 87.0, |
| 'protein': 6.5, |
| 'sodium': 562.0, |
| 'calcium': 0.0, |
| 'iron': 45.0, |
| }, { |
| 'id': 8, |
| 'name': 'Donut', |
| 'type': 'Pastry', |
| 'calories': 452.0, |
| 'fat': 25.0, |
| 'carbs': 51.0, |
| 'protein': 4.9, |
| 'sodium': 326.0, |
| 'calcium': 2.0, |
| 'iron': 22.0, |
| }, { |
| 'id': 9, |
| 'name': 'KitKat', |
| 'type': 'Candy', |
| 'calories': 518.0, |
| 'fat': 26.0, |
| 'carbs': 65.0, |
| 'protein': 7.0, |
| 'sodium': 54.0, |
| 'calcium': 12.0, |
| 'iron': 6.0, |
| }, { |
| 'id': 10, |
| 'name': 'Chocolate', |
| 'type': 'Candy', |
| 'calories': 518.0, |
| 'fat': 26.0, |
| 'carbs': 65.0, |
| 'protein': 7.0, |
| 'sodium': 54.0, |
| 'calcium': 12.0, |
| 'iron': 6.0, |
| }, { |
| 'id': 11, |
| 'name': 'Chamoy', |
| 'type': 'Candy', |
| 'calories': 518.0, |
| 'fat': 26.0, |
| 'carbs': 65.0, |
| 'protein': 7.0, |
| 'sodium': 54.0, |
| 'calcium': 12.0, |
| 'iron': 6.0, |
| }]; |
| |
| this.filteredData = this.data; |
| this.filteredTotal = this.data.length; |
| |
| this.columns = [ |
| {name: 'comments', label: 'Comments', width: 10}, |
| {name: 'name', label: 'Dessert (100g serving)', sortable: true, width: 10}, |
| {name: 'type', label: 'Type', sortable: true, width: 10}, |
| {name: 'calories', label: 'Calories', numeric: true, format: NUMBER_FORMAT, sortable: true, width: 10}, |
| {name: 'fat', label: 'Fat (g)', numeric: true, format: DECIMAL_FORMAT, sortable: true, width: 10}, |
| {name: 'carbs', label: 'Carbs (g)', numeric: true, format: NUMBER_FORMAT, sortable: true, width: 10}, |
| {name: 'protein', label: 'Protein (g)', numeric: true, format: DECIMAL_FORMAT, sortable: true, width: 10}, |
| {name: 'sodium', label: 'Sodium (mg)', numeric: true, format: NUMBER_FORMAT, sortable: true, width: 10}, |
| {name: 'calcium', label: 'Calcium (%)', numeric: true, format: NUMBER_FORMAT, sortable: true, width: 10}, |
| {name: 'iron', label: 'Iron (%)', numeric: true, format: NUMBER_FORMAT, width: 10}, |
| ]; |
| |
| this.allRowsSelected = false; |
| this.autoCompleteData = []; |
| this.selectedRows = []; |
| |
| this.searchTerm = []; |
| this.fromRow = 1; |
| this.currentPage = 1; |
| this.pageSize = 5; |
| this.pageCount = 0; |
| |
| //</editor-fold> |
| |
| //<editor-fold desc='Chips $ Autocomplete'> |
| |
| this.readOnly = false; |
| |
| this.items = [ |
| 'stepper', |
| 'expansion-panel', |
| 'markdown', |
| 'highlight', |
| 'loading', |
| 'media', |
| 'chips', |
| 'http', |
| 'json-formatter', |
| 'pipes', |
| 'need more?', |
| ]; |
| |
| this.itemsRequireMatch = this.items.slice(0, 6); |
| |
| //</editor-fold> |
| |
| //<editor-fold desc='Radios'> |
| |
| this.favoriteSeason = 'Autumn'; |
| |
| this.seasonOptions = [ |
| 'Winter', |
| 'Spring', |
| 'Summer', |
| 'Autumn', |
| ]; |
| |
| //</editor-fold> |
| |
| //<editor-fold desc='Select'> |
| |
| this.selectedValue = ''; |
| |
| this.foods = [ |
| {value: 'steak-0', viewValue: 'Steak'}, |
| {value: 'pizza-1', viewValue: 'Pizza'}, |
| {value: 'tacos-2', viewValue: 'Tacos'}, |
| ]; |
| |
| //</editor-fold> |
| |
| //<editor-fold desc='Checkbox'> |
| |
| this.user = { |
| agreesToTOS: false |
| }; |
| |
| this.groceries = [{ |
| bought: true, |
| name: 'Seitan', |
| }, { |
| bought: false, |
| name: 'Almond Meal Flour', |
| }, { |
| bought: false, |
| name: 'Organic Eggs', |
| }]; |
| |
| //</editor-fold> |
| |
| //<editor-fold desc='Slide Toggle'> |
| |
| this.systems = [{ |
| name: 'Lights', |
| on: false, |
| color: 'primary', |
| }, { |
| name: 'Surround Sound', |
| on: true, |
| color: 'accent', |
| }, { |
| name: 'T.V.', |
| on: true, |
| color: 'warn', |
| }]; |
| |
| this.house = { |
| lockHouse: false, |
| }; |
| |
| //</editor-fold> |
| } |
| |
| FdsDemo.prototype = { |
| constructor: FdsDemo, |
| |
| //<editor-fold desc='Autocomplete'> |
| |
| displayFn: function (value) { |
| return value && typeof value === 'object' ? value.name : value; |
| }, |
| |
| filterStates: function (val) { |
| return val ? this.states.filter(function (s) { |
| return s.name.match(new RegExp(val, 'gi')); |
| }) : this.states; |
| }, |
| |
| //</editor-fold> |
| |
| //<editor-fold desc='Snack Bars'> |
| |
| showSuccessSnackBar: function () { |
| this.snackBarService.openCoaster({ |
| title: 'Success', |
| message: 'Some help text regarding the successful event.', |
| verticalPosition: 'top', |
| horizontalPosition: 'right', |
| icon: 'fa fa-check-circle-o', |
| color: '#1EB475', |
| duration: 3000 |
| }); |
| }, |
| |
| showWarnSnackBar: function () { |
| this.snackBarService.openCoaster({ |
| title: 'Warning', |
| message: 'Some help text regarding the warning.', |
| verticalPosition: 'top', |
| horizontalPosition: 'left', |
| icon: 'fa fa-exclamation-triangle', |
| color: '#E98A40', |
| duration: 3000 |
| }); |
| }, |
| |
| showErrorSnackBar: function () { |
| this.snackBarService.openCoaster({ |
| title: 'Error', |
| message: 'Some help text regarding the critical error. This coaster will stay open until closed with the `x` or if another coaster is created.', |
| verticalPosition: 'bottom', |
| horizontalPosition: 'right', |
| icon: 'fa fa-times-circle-o', |
| color: '#EF6162' |
| }); |
| }, |
| |
| showRegularSnackBar: function () { |
| this.snackBarService.openCoaster({ |
| title: 'Regular', |
| message: 'Something interesting.', |
| verticalPosition: 'bottom', |
| horizontalPosition: 'left', |
| color: '#808793', |
| duration: 3000 |
| }); |
| }, |
| |
| //</editor-fold> |
| |
| //<editor-fold desc='Dialog'> |
| |
| openDialog: function () { |
| this.dialog.open(FdsDemoDialog); |
| }, |
| |
| //</editor-fold> |
| |
| //<editor-fold desc='Expansion Panel'> |
| |
| toggleExpansion1: function () { |
| if (!this.disabled) { |
| this.expansion1 = !this.expansion1; |
| } |
| }, |
| |
| toggleDisabled: function () { |
| this.disabled = !this.disabled; |
| }, |
| |
| expandExpansion1Event: function () { |
| this.expandCollapseExpansion1Msg = 'Expand event emitted.'; |
| }, |
| |
| collapseExpansion1Event: function () { |
| this.expandCollapseExpansion1Msg = 'Collapse event emitted.'; |
| }, |
| |
| //</editor-fold> |
| |
| //<editor-fold desc='Simple Dialogs'> |
| |
| openAlert: function () { |
| this.dialogService.openAlert({ |
| title: 'Alert', |
| disableClose: true, |
| message: 'This is how simple it is to create an alert with this wrapper service.', |
| }); |
| }, |
| |
| openConfirm: function () { |
| this.dialogService.openConfirm({ |
| title: 'Confirm', |
| message: 'This is how simple it is to create a confirm with this wrapper service. Do you agree?', |
| cancelButton: 'Disagree', |
| acceptButton: 'Agree', |
| }); |
| }, |
| |
| openPrompt: function () { |
| this.dialogService.openPrompt({ |
| title: 'Prompt', |
| message: 'This is how simple it is to create a prompt with this wrapper service. Prompt something.', |
| value: 'Populated value', |
| cancelButton: 'Cancel', |
| acceptButton: 'Ok', |
| }); |
| }, |
| |
| //</editor-fold> |
| |
| //<editor-fold desc='Searchable Expansion Panels'> |
| |
| isDropletFilterChecked: function (term) { |
| return (this.dropletsSearchTerms.indexOf(term) > -1); |
| }, |
| |
| getDropletTypeCount: function (type) { |
| return this.filteredDroplets.filter(function (droplet) { |
| return droplet.type === type; |
| }).length; |
| }, |
| |
| getDropletCertificationCount: function (certification) { |
| return this.filteredDroplets.filter(function (droplet) { |
| return Object.keys(droplet).find(function (key) { |
| if (key === certification && droplet[certification].type === 'certification') { |
| return droplet; |
| } |
| return null; |
| }); |
| }).length; |
| }, |
| |
| getSortBy: function () { |
| let sortByColumnLabel; |
| const arrayLength = this.dropletColumns.length; |
| for (let i = 0; i < arrayLength; i++) { |
| if (this.dropletColumns[i].active === true) { |
| sortByColumnLabel = this.dropletColumns[i].label; |
| break; |
| } |
| } |
| return sortByColumnLabel; |
| }, |
| |
| sortDroplets: function (column) { |
| if (column.sortable === true) { |
| // toggle column sort order |
| column.sortOrder = (column.sortOrder === 'ASC') ? 'DESC' : 'ASC'; |
| const sortOrder = column.sortOrder; |
| this.filterDroplets(column.name, sortOrder); |
| //only one column can be actively sorted so we reset all to inactive |
| this.dropletColumns.forEach(function (c) { |
| c.active = false; |
| }); |
| //and set this column as the actively sorted column |
| column.active = true; |
| this.activeDropletColumn = column; |
| } |
| }, |
| |
| toggleDropletsFilter: function (searchTerm) { |
| let applySearchTerm = true; |
| // check if the search term is already applied and remove it if true |
| if (this.dropletsSearchTerms.length > 0) { |
| const arrayLength = this.dropletsSearchTerms.length; |
| for (let i = 0; i < arrayLength; i++) { |
| const index = this.dropletsSearchTerms.indexOf(searchTerm); |
| if (index > -1) { |
| this.dropletsSearchTerms.splice(index, 1); |
| applySearchTerm = false; |
| } |
| } |
| } |
| |
| // if we just removed the search term do NOT apply it again |
| if (applySearchTerm) { |
| this.dropletsSearchTerms.push(searchTerm); |
| } |
| |
| this.filterDroplets(this.activeDropletColumn.name, this.activeDropletColumn.sortOrder); |
| }, |
| |
| filterDroplets: function (sortBy, sortOrder) { |
| // if `sortOrder` is `undefined` then use 'ASC' |
| if (sortOrder === undefined) { |
| sortOrder = 'ASC'; |
| } |
| // if `sortBy` is `undefined` then find the first sortable column in this.dropletColumns |
| if (sortBy === undefined) { |
| const arrayLength = this.dropletColumns.length; |
| for (let i = 0; i < arrayLength; i++) { |
| if (this.dropletColumns[i].sortable === true) { |
| sortBy = this.dropletColumns[i].name; |
| this.activeDropletColumn = this.dropletColumns[i]; |
| //only one column can be actively sorted so we reset all to inactive |
| this.dropletColumns.forEach(function (c) { |
| c.active = false; |
| }); |
| //and set this column as the actively sorted column |
| this.dropletColumns[i].active = true; |
| this.dropletColumns[i].sortOrder = sortOrder; |
| break; |
| } |
| } |
| } |
| |
| let newData = this.droplets; |
| |
| for (let i = 0; i < this.dropletsSearchTerms.length; i++) { |
| newData = this.filterData(newData, this.dropletsSearchTerms[i], true, this.activeDropletColumn.name); |
| } |
| |
| newData = this.dataTableService.sortData(newData, sortBy, sortOrder); |
| this.filteredDroplets = newData; |
| this.getAutoCompleteDroplets(); |
| }, |
| |
| getAutoCompleteDroplets: function () { |
| const self = this; |
| this.autoCompleteDroplets = []; |
| this.dropletColumns.forEach(function (c) { |
| self.filteredDroplets.forEach(function (r) { |
| return (r[c.name.toLowerCase()]) ? self.autoCompleteDroplets.push(r[c.name.toLowerCase()].toString()) : ''; |
| }); |
| }); |
| }, |
| |
| //</editor-fold> |
| |
| filterData: function (data, searchTerm, ignoreCase) { |
| let field = ''; |
| if (searchTerm.indexOf(':') > -1) { |
| field = searchTerm.split(':')[0].trim(); |
| searchTerm = searchTerm.split(':')[1].trim(); |
| } |
| const filter = searchTerm ? (ignoreCase ? searchTerm.toLowerCase() : searchTerm) : ''; |
| |
| if (filter) { |
| data = data.filter(function (item) { |
| const res = Object.keys(item).find(function (key) { |
| if (field.indexOf('.') > -1) { |
| const objArray = field.split('.'); |
| let obj = item; |
| const arrayLength = objArray.length; |
| for (let i = 0; i < arrayLength; i++) { |
| try { |
| obj = obj[objArray[i]]; |
| } catch (e) { |
| return false; |
| } |
| } |
| const preItemValue = ('' + obj); |
| const itemValue = ignoreCase ? preItemValue.toLowerCase() : preItemValue; |
| return itemValue.indexOf(filter) > -1; |
| } |
| |
| if (key !== field && field !== '') { |
| return false; |
| } |
| |
| const preItemValue = ('' + item[key]); |
| const itemValue = ignoreCase ? preItemValue.toLowerCase() : preItemValue; |
| return itemValue.indexOf(filter) > -1; |
| }); |
| return !(typeof res === 'undefined'); |
| }); |
| } |
| return data; |
| }, |
| |
| //<editor-fold desc='Data Tables'> |
| |
| sort: function (sortEvent, column) { |
| if (column.sortable) { |
| const sortBy = column.name; |
| column.sortOrder = (column.sortOrder === 'ASC') ? 'DESC' : 'ASC'; |
| const sortOrder = column.sortOrder; |
| this.filter(sortBy, sortOrder); |
| |
| //only one column can be actively sorted so we reset all to inactive |
| this.columns.forEach(function (c) { |
| c.active = false; |
| }); |
| //and set this column as the actively sorted column |
| column.active = true; |
| } |
| }, |
| |
| searchRemove: function (searchTerm) { |
| //only remove the first occurrence of the search term |
| const index = this.searchTerm.indexOf(searchTerm); |
| if (index !== -1) { |
| this.searchTerm.splice(index, 1); |
| } |
| this.fromRow = 1; |
| this.currentPage = 1; |
| this.filter(); |
| }, |
| |
| searchAdd: function (searchTerm) { |
| this.searchTerm.push(searchTerm); |
| this.fromRow = 1; |
| this.currentPage = 1; |
| this.filter(); |
| }, |
| |
| page: function (pagingEvent) { |
| this.fromRow = pagingEvent.fromRow; |
| this.currentPage = pagingEvent.page; |
| this.pageSize = pagingEvent.pageSize; |
| this.allRowsSelected = false; |
| this.filter(); |
| }, |
| |
| filter: function (sortBy, sortOrder) { |
| if (this.allRowsSelected) { |
| this.toggleSelectAll(); |
| } |
| this.deselectAll(); |
| let newData = this.data; |
| |
| for (let i = 0; i < this.searchTerm.length; i++) { |
| newData = this.filterData(newData, this.searchTerm[i], true); |
| } |
| this.filteredTotal = newData.length; |
| newData = this.dataTableService.sortData(newData, sortBy, sortOrder); |
| this.pageCount = newData.length; |
| newData = this.dataTableService.pageData(newData, this.fromRow, this.currentPage * this.pageSize); |
| this.filteredData = newData; |
| this.getAutoCompleteData(); |
| }, |
| |
| toggleSelect: function (row) { |
| if (this.allFilteredRowsSelected()) { |
| this.allRowsSelected = true; |
| } else { |
| this.allRowsSelected = false; |
| } |
| }, |
| |
| toggleSelectAll: function () { |
| if (this.allRowsSelected) { |
| this.selectAll(); |
| } else { |
| this.deselectAll(); |
| } |
| }, |
| |
| selectAll: function () { |
| this.filteredData.forEach(function (c) { |
| c.checked = true; |
| }); |
| }, |
| |
| deselectAll: function () { |
| this.filteredData.forEach(function (c) { |
| c.checked = false; |
| }); |
| }, |
| |
| allFilteredRowsSelected: function () { |
| let allFilteredRowsSelected = true; |
| this.filteredData.forEach(function (c) { |
| if (c.checked === undefined || c.checked === false) { |
| allFilteredRowsSelected = false; |
| } |
| }); |
| |
| return allFilteredRowsSelected; |
| }, |
| |
| areTooltipsOn: function () { |
| return this.columns[0].hasOwnProperty('tooltip'); |
| }, |
| |
| toggleTooltips: function () { |
| if (this.columns[0].tooltip) { |
| this.columns.forEach(function (c) { |
| delete c.tooltip; |
| }); |
| } else { |
| this.columns.forEach(function (c) { |
| c.tooltip = 'This is ' + c.label + '!'; |
| }); |
| } |
| }, |
| |
| openDataTablePrompt: function (row, name) { |
| this.dialogService.openPrompt({ |
| message: 'Enter comment?', |
| value: row[name], |
| }).afterClosed().subscribe(function (value) { |
| if (value !== undefined) { |
| row[name] = value; |
| } |
| }); |
| }, |
| |
| getAutoCompleteData: function () { |
| const self = this; |
| this.autoCompleteData = []; |
| this.columns.forEach(function (c) { |
| self.filteredData.forEach(function (r) { |
| return (r[c.name.toLowerCase()]) ? self.autoCompleteData.push(r[c.name.toLowerCase()].toString()) : ''; |
| }); |
| }); |
| }, |
| |
| //</editor-fold> |
| |
| //<editor-fold desc='Chips $ Autocomplete'> |
| |
| toggleReadOnly: function () { |
| this.readOnly = !this.readOnly; |
| }, |
| |
| //</editor-fold> |
| |
| //<editor-fold desc='Life Cycle Listeners'> |
| |
| /** |
| * Initialize the component |
| */ |
| ngOnInit: function () { |
| this.filter(); |
| this.filterDroplets(); |
| }, |
| |
| /** |
| * Respond after Angular checks the component's views and child views |
| */ |
| ngAfterViewChecked: function () { |
| this.fdsService.inProgress = false; |
| } |
| |
| //</editor-fold> |
| }; |
| |
| FdsDemo.annotations = [ |
| new Component({ |
| template: html, |
| animations: [animations.slideInLeftAnimation], |
| host: { |
| '[@routeAnimation]': 'routeAnimation' |
| } |
| }) |
| ]; |
| |
| FdsDemo.parameters = [ |
| FdsSnackBarService, |
| FdsService, |
| MatDialog, |
| TdDataTableService, |
| FdsDialogService |
| ]; |
| |
| export default FdsDemo; |