iguazio.dashboard-controls 0.40.0-3.5.x → 0.40.1-3.5.x

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3916,201 +3916,6 @@ angular.module('angular-i18next', []).provider('i18next', [function () {
3916
3916
  })();
3917
3917
  'use strict';
3918
3918
 
3919
- (function () {
3920
- 'use strict';
3921
-
3922
- IgzActionCheckboxAllController.$inject = ['$scope', '$rootScope', 'lodash'];
3923
- angular.module('iguazio.dashboard-controls').component('igzActionCheckboxAll', {
3924
- bindings: {
3925
- itemsCountOriginal: '<itemsCount',
3926
- itemsType: '@?',
3927
- checkedItemsCount: '<?',
3928
- onCheckChange: '&?'
3929
- },
3930
- templateUrl: 'igz_controls/components/action-checkbox-all/action-checkbox-all.tpl.html',
3931
- controller: IgzActionCheckboxAllController
3932
- });
3933
-
3934
- function IgzActionCheckboxAllController($scope, $rootScope, lodash) {
3935
- var ctrl = this;
3936
-
3937
- ctrl.allItemsChecked = false;
3938
-
3939
- ctrl.$onInit = onInit;
3940
- ctrl.$onChanges = onChanges;
3941
- ctrl.$onDestroy = onDestroy;
3942
-
3943
- ctrl.onCheckAll = onCheckAll;
3944
-
3945
- //
3946
- // Hook methods
3947
- //
3948
-
3949
- /**
3950
- * Initialization method
3951
- */
3952
- function onInit() {
3953
- ctrl.checkedItemsCount = angular.isUndefined(ctrl.checkedItemsCount) ? 0 : ctrl.checkedItemsCount;
3954
- ctrl.itemsCount = angular.isUndefined(ctrl.itemsCount) ? 0 : ctrl.itemsCount;
3955
-
3956
- $scope.$on('action-checkbox_item-checked', toggleCheckedItem);
3957
- $scope.$on('action-checkbox-all_change-checked-items-count', changeItemsCheckedCount);
3958
- $scope.$on('action-checkbox-all_set-checked-items-count', setCheckedItemsCount);
3959
- }
3960
-
3961
- /**
3962
- * Changes method
3963
- * @param {Object} changes
3964
- */
3965
- function onChanges(changes) {
3966
- if (angular.isDefined(changes.itemsCountOriginal)) {
3967
- ctrl.itemsCount = ctrl.itemsCountOriginal;
3968
- testAllItemsChecked();
3969
- }
3970
- }
3971
-
3972
- /**
3973
- * Destructor method
3974
- */
3975
- function onDestroy() {
3976
- ctrl.checkedItemsCount = 0;
3977
-
3978
- $rootScope.$broadcast('action-checkbox-all_checked-items-count-change', {
3979
- checkedCount: ctrl.checkedItemsCount
3980
- });
3981
- }
3982
-
3983
- //
3984
- // Public methods
3985
- //
3986
-
3987
- /**
3988
- * Calls when Check all button is clicked.
3989
- */
3990
- function onCheckAll() {
3991
- ctrl.allItemsChecked = !ctrl.allItemsChecked;
3992
- ctrl.checkedItemsCount = ctrl.allItemsChecked ? ctrl.itemsCount : 0;
3993
-
3994
- $rootScope.$broadcast('action-checkbox-all_check-all', {
3995
- checked: ctrl.allItemsChecked,
3996
- checkedCount: ctrl.checkedItemsCount,
3997
- itemsType: !lodash.isEmpty(ctrl.itemsType) ? ctrl.itemsType : null
3998
- });
3999
-
4000
- if (angular.isFunction(ctrl.onCheckChange)) {
4001
- ctrl.onCheckChange({ checkedCount: ctrl.checkedItemsCount });
4002
- }
4003
- }
4004
-
4005
- //
4006
- // Private methods
4007
- //
4008
-
4009
- /**
4010
- * Calls on checked items count change
4011
- * @param {Object} event
4012
- * @param {Object} data
4013
- */
4014
- function changeItemsCheckedCount(event, data) {
4015
- if (data.changedCheckedItemsCount === 0) {
4016
- ctrl.checkedItemsCount = 0;
4017
- } else {
4018
- ctrl.checkedItemsCount += data.changedCheckedItemsCount;
4019
- }
4020
-
4021
- testAllItemsChecked();
4022
-
4023
- $rootScope.$broadcast('action-checkbox-all_checked-items-count-change', {
4024
- checkedCount: ctrl.checkedItemsCount
4025
- });
4026
- }
4027
-
4028
- /**
4029
- * Sets checked items count
4030
- * @param {Object} event
4031
- * @param {number} newCheckedItemsCount
4032
- */
4033
- function setCheckedItemsCount(event, newCheckedItemsCount) {
4034
- ctrl.checkedItemsCount = newCheckedItemsCount;
4035
-
4036
- testAllItemsChecked();
4037
-
4038
- $rootScope.$broadcast('action-checkbox-all_checked-items-count-change', {
4039
- checkedCount: ctrl.checkedItemsCount
4040
- });
4041
- }
4042
-
4043
- /**
4044
- * Calls on checkbox check/uncheck
4045
- * @param {Object} event
4046
- * @param {Object} data
4047
- */
4048
- function toggleCheckedItem(event, data) {
4049
- if (data.checked) {
4050
- ctrl.checkedItemsCount++;
4051
- } else {
4052
- ctrl.checkedItemsCount--;
4053
- }
4054
-
4055
- $rootScope.$broadcast('action-checkbox-all_checked-items-count-change', {
4056
- checkedCount: ctrl.checkedItemsCount
4057
- });
4058
-
4059
- testAllItemsChecked();
4060
-
4061
- // callback function is called to inform about checked items count
4062
- if (angular.isFunction(ctrl.onCheckChange)) {
4063
- ctrl.onCheckChange({ checkedCount: ctrl.checkedItemsCount });
4064
- }
4065
- }
4066
-
4067
- /**
4068
- * Updates items count and toggle allItemsChecked flag
4069
- */
4070
- function testAllItemsChecked() {
4071
- ctrl.allItemsChecked = ctrl.itemsCount > 0 && ctrl.checkedItemsCount === ctrl.itemsCount;
4072
- }
4073
- }
4074
- })();
4075
- 'use strict';
4076
-
4077
- (function () {
4078
- 'use strict';
4079
-
4080
- ActionCheckboxAllService.$inject = ['$rootScope'];
4081
- angular.module('iguazio.dashboard-controls').factory('ActionCheckboxAllService', ActionCheckboxAllService);
4082
-
4083
- function ActionCheckboxAllService($rootScope) {
4084
- return {
4085
- changeCheckedItemsCount: changeCheckedItemsCount,
4086
- setCheckedItemsCount: setCheckedItemsCount
4087
- };
4088
-
4089
- //
4090
- // Public methods
4091
- //
4092
-
4093
- /**
4094
- * Sends broadcast with count of changed checked items
4095
- * @param {number} changedCheckedItemsCount - number of changed checked items
4096
- */
4097
- function changeCheckedItemsCount(changedCheckedItemsCount) {
4098
- $rootScope.$broadcast('action-checkbox-all_change-checked-items-count', {
4099
- changedCheckedItemsCount: changedCheckedItemsCount
4100
- });
4101
- }
4102
-
4103
- /**
4104
- * Sends broadcast with count of checked items
4105
- * @param {number} checkedItemsCount
4106
- */
4107
- function setCheckedItemsCount(checkedItemsCount) {
4108
- $rootScope.$broadcast('action-checkbox-all_set-checked-items-count', checkedItemsCount);
4109
- }
4110
- }
4111
- })();
4112
- 'use strict';
4113
-
4114
3919
  (function () {
4115
3920
  'use strict';
4116
3921
 
@@ -4336,31 +4141,28 @@ angular.module('angular-i18next', []).provider('i18next', [function () {
4336
4141
  (function () {
4337
4142
  'use strict';
4338
4143
 
4339
- IgzActionPanel.$inject = ['$scope', '$rootScope', '$i18next', 'i18next', 'lodash'];
4340
- angular.module('iguazio.dashboard-controls').component('igzActionPanel', {
4144
+ IgzActionCheckboxAllController.$inject = ['$scope', '$rootScope', 'lodash'];
4145
+ angular.module('iguazio.dashboard-controls').component('igzActionCheckboxAll', {
4341
4146
  bindings: {
4342
- actions: '<',
4343
- onItemsCheckedCount: '&?'
4147
+ itemsCountOriginal: '<itemsCount',
4148
+ itemsType: '@?',
4149
+ checkedItemsCount: '<?',
4150
+ onCheckChange: '&?'
4344
4151
  },
4345
- templateUrl: 'igz_controls/components/action-panel/action-panel.tpl.html',
4346
- controller: IgzActionPanel,
4347
- transclude: true
4152
+ templateUrl: 'igz_controls/components/action-checkbox-all/action-checkbox-all.tpl.html',
4153
+ controller: IgzActionCheckboxAllController
4348
4154
  });
4349
4155
 
4350
- function IgzActionPanel($scope, $rootScope, $i18next, i18next, lodash) {
4156
+ function IgzActionCheckboxAllController($scope, $rootScope, lodash) {
4351
4157
  var ctrl = this;
4352
- var lng = i18next.language;
4353
-
4354
- var checkedItemsCount = 0;
4355
- var mainActionsCount = 5;
4356
4158
 
4357
- ctrl.mainActions = [];
4358
- ctrl.remainActions = [];
4159
+ ctrl.allItemsChecked = false;
4359
4160
 
4360
4161
  ctrl.$onInit = onInit;
4361
4162
  ctrl.$onChanges = onChanges;
4163
+ ctrl.$onDestroy = onDestroy;
4362
4164
 
4363
- ctrl.isActionPanelShown = isActionPanelShown;
4165
+ ctrl.onCheckAll = onCheckAll;
4364
4166
 
4365
4167
  //
4366
4168
  // Hook methods
@@ -4370,31 +4172,229 @@ angular.module('angular-i18next', []).provider('i18next', [function () {
4370
4172
  * Initialization method
4371
4173
  */
4372
4174
  function onInit() {
4373
- $scope.$on('action-checkbox-all_checked-items-count-change', onUpdateCheckedItemsCount);
4374
- $scope.$on('action-checkbox-all_check-all', onUpdateCheckedItemsCount);
4175
+ ctrl.checkedItemsCount = angular.isUndefined(ctrl.checkedItemsCount) ? 0 : ctrl.checkedItemsCount;
4176
+ ctrl.itemsCount = angular.isUndefined(ctrl.itemsCount) ? 0 : ctrl.itemsCount;
4375
4177
 
4376
- refreshActions();
4178
+ $scope.$on('action-checkbox_item-checked', toggleCheckedItem);
4179
+ $scope.$on('action-checkbox-all_change-checked-items-count', changeItemsCheckedCount);
4180
+ $scope.$on('action-checkbox-all_set-checked-items-count', setCheckedItemsCount);
4377
4181
  }
4378
4182
 
4379
4183
  /**
4380
- * On changes hook method
4184
+ * Changes method
4185
+ * @param {Object} changes
4381
4186
  */
4382
- function onChanges() {
4383
- refreshActions();
4187
+ function onChanges(changes) {
4188
+ if (angular.isDefined(changes.itemsCountOriginal)) {
4189
+ ctrl.itemsCount = ctrl.itemsCountOriginal;
4190
+ testAllItemsChecked();
4191
+ }
4384
4192
  }
4385
4193
 
4386
- //
4387
- // Private methods
4388
- //
4389
-
4390
4194
  /**
4391
- * Default action handler
4392
- * @param {Object} action
4393
- * @param {string} action.id - an action ID (e.g. delete, clone etc.)
4195
+ * Destructor method
4394
4196
  */
4395
- function defaultAction(action) {
4396
- $rootScope.$broadcast('action-panel_fire-action', {
4397
- action: action.id
4197
+ function onDestroy() {
4198
+ ctrl.checkedItemsCount = 0;
4199
+
4200
+ $rootScope.$broadcast('action-checkbox-all_checked-items-count-change', {
4201
+ checkedCount: ctrl.checkedItemsCount
4202
+ });
4203
+ }
4204
+
4205
+ //
4206
+ // Public methods
4207
+ //
4208
+
4209
+ /**
4210
+ * Calls when Check all button is clicked.
4211
+ */
4212
+ function onCheckAll() {
4213
+ ctrl.allItemsChecked = !ctrl.allItemsChecked;
4214
+ ctrl.checkedItemsCount = ctrl.allItemsChecked ? ctrl.itemsCount : 0;
4215
+
4216
+ $rootScope.$broadcast('action-checkbox-all_check-all', {
4217
+ checked: ctrl.allItemsChecked,
4218
+ checkedCount: ctrl.checkedItemsCount,
4219
+ itemsType: !lodash.isEmpty(ctrl.itemsType) ? ctrl.itemsType : null
4220
+ });
4221
+
4222
+ if (angular.isFunction(ctrl.onCheckChange)) {
4223
+ ctrl.onCheckChange({ checkedCount: ctrl.checkedItemsCount });
4224
+ }
4225
+ }
4226
+
4227
+ //
4228
+ // Private methods
4229
+ //
4230
+
4231
+ /**
4232
+ * Calls on checked items count change
4233
+ * @param {Object} event
4234
+ * @param {Object} data
4235
+ */
4236
+ function changeItemsCheckedCount(event, data) {
4237
+ if (data.changedCheckedItemsCount === 0) {
4238
+ ctrl.checkedItemsCount = 0;
4239
+ } else {
4240
+ ctrl.checkedItemsCount += data.changedCheckedItemsCount;
4241
+ }
4242
+
4243
+ testAllItemsChecked();
4244
+
4245
+ $rootScope.$broadcast('action-checkbox-all_checked-items-count-change', {
4246
+ checkedCount: ctrl.checkedItemsCount
4247
+ });
4248
+ }
4249
+
4250
+ /**
4251
+ * Sets checked items count
4252
+ * @param {Object} event
4253
+ * @param {number} newCheckedItemsCount
4254
+ */
4255
+ function setCheckedItemsCount(event, newCheckedItemsCount) {
4256
+ ctrl.checkedItemsCount = newCheckedItemsCount;
4257
+
4258
+ testAllItemsChecked();
4259
+
4260
+ $rootScope.$broadcast('action-checkbox-all_checked-items-count-change', {
4261
+ checkedCount: ctrl.checkedItemsCount
4262
+ });
4263
+ }
4264
+
4265
+ /**
4266
+ * Calls on checkbox check/uncheck
4267
+ * @param {Object} event
4268
+ * @param {Object} data
4269
+ */
4270
+ function toggleCheckedItem(event, data) {
4271
+ if (data.checked) {
4272
+ ctrl.checkedItemsCount++;
4273
+ } else {
4274
+ ctrl.checkedItemsCount--;
4275
+ }
4276
+
4277
+ $rootScope.$broadcast('action-checkbox-all_checked-items-count-change', {
4278
+ checkedCount: ctrl.checkedItemsCount
4279
+ });
4280
+
4281
+ testAllItemsChecked();
4282
+
4283
+ // callback function is called to inform about checked items count
4284
+ if (angular.isFunction(ctrl.onCheckChange)) {
4285
+ ctrl.onCheckChange({ checkedCount: ctrl.checkedItemsCount });
4286
+ }
4287
+ }
4288
+
4289
+ /**
4290
+ * Updates items count and toggle allItemsChecked flag
4291
+ */
4292
+ function testAllItemsChecked() {
4293
+ ctrl.allItemsChecked = ctrl.itemsCount > 0 && ctrl.checkedItemsCount === ctrl.itemsCount;
4294
+ }
4295
+ }
4296
+ })();
4297
+ 'use strict';
4298
+
4299
+ (function () {
4300
+ 'use strict';
4301
+
4302
+ ActionCheckboxAllService.$inject = ['$rootScope'];
4303
+ angular.module('iguazio.dashboard-controls').factory('ActionCheckboxAllService', ActionCheckboxAllService);
4304
+
4305
+ function ActionCheckboxAllService($rootScope) {
4306
+ return {
4307
+ changeCheckedItemsCount: changeCheckedItemsCount,
4308
+ setCheckedItemsCount: setCheckedItemsCount
4309
+ };
4310
+
4311
+ //
4312
+ // Public methods
4313
+ //
4314
+
4315
+ /**
4316
+ * Sends broadcast with count of changed checked items
4317
+ * @param {number} changedCheckedItemsCount - number of changed checked items
4318
+ */
4319
+ function changeCheckedItemsCount(changedCheckedItemsCount) {
4320
+ $rootScope.$broadcast('action-checkbox-all_change-checked-items-count', {
4321
+ changedCheckedItemsCount: changedCheckedItemsCount
4322
+ });
4323
+ }
4324
+
4325
+ /**
4326
+ * Sends broadcast with count of checked items
4327
+ * @param {number} checkedItemsCount
4328
+ */
4329
+ function setCheckedItemsCount(checkedItemsCount) {
4330
+ $rootScope.$broadcast('action-checkbox-all_set-checked-items-count', checkedItemsCount);
4331
+ }
4332
+ }
4333
+ })();
4334
+ 'use strict';
4335
+
4336
+ (function () {
4337
+ 'use strict';
4338
+
4339
+ IgzActionPanel.$inject = ['$scope', '$rootScope', '$i18next', 'i18next', 'lodash'];
4340
+ angular.module('iguazio.dashboard-controls').component('igzActionPanel', {
4341
+ bindings: {
4342
+ actions: '<',
4343
+ onItemsCheckedCount: '&?'
4344
+ },
4345
+ templateUrl: 'igz_controls/components/action-panel/action-panel.tpl.html',
4346
+ controller: IgzActionPanel,
4347
+ transclude: true
4348
+ });
4349
+
4350
+ function IgzActionPanel($scope, $rootScope, $i18next, i18next, lodash) {
4351
+ var ctrl = this;
4352
+ var lng = i18next.language;
4353
+
4354
+ var checkedItemsCount = 0;
4355
+ var mainActionsCount = 5;
4356
+
4357
+ ctrl.mainActions = [];
4358
+ ctrl.remainActions = [];
4359
+
4360
+ ctrl.$onInit = onInit;
4361
+ ctrl.$onChanges = onChanges;
4362
+
4363
+ ctrl.isActionPanelShown = isActionPanelShown;
4364
+
4365
+ //
4366
+ // Hook methods
4367
+ //
4368
+
4369
+ /**
4370
+ * Initialization method
4371
+ */
4372
+ function onInit() {
4373
+ $scope.$on('action-checkbox-all_checked-items-count-change', onUpdateCheckedItemsCount);
4374
+ $scope.$on('action-checkbox-all_check-all', onUpdateCheckedItemsCount);
4375
+
4376
+ refreshActions();
4377
+ }
4378
+
4379
+ /**
4380
+ * On changes hook method
4381
+ */
4382
+ function onChanges() {
4383
+ refreshActions();
4384
+ }
4385
+
4386
+ //
4387
+ // Private methods
4388
+ //
4389
+
4390
+ /**
4391
+ * Default action handler
4392
+ * @param {Object} action
4393
+ * @param {string} action.id - an action ID (e.g. delete, clone etc.)
4394
+ */
4395
+ function defaultAction(action) {
4396
+ $rootScope.$broadcast('action-panel_fire-action', {
4397
+ action: action.id
4398
4398
  });
4399
4399
  }
4400
4400
 
@@ -4511,66 +4511,129 @@ angular.module('angular-i18next', []).provider('i18next', [function () {
4511
4511
  (function () {
4512
4512
  'use strict';
4513
4513
 
4514
- /**
4515
- * @name igzAutoComplete
4516
- * @component
4517
- *
4518
- * @description
4519
- * An input field that wraps around `igzValidatingInputField` component and enriches it with auto-complete feature.
4520
- * The user enters input to the input field, and a suggestion drop-down menu is open according to the input value.
4521
- * An optional filter drop-down field is available to make it possible to populate the suggestion list according
4522
- * to different criteria, for example different properties of objects like first name or last name of person.
4523
- * The user can click on a suggestion from the menu to select it.
4524
- *
4525
- * @param {string} bordersMode - Forwarded to `bordersMode` attribute of `igzValidatingInputField` component. Please
4526
- * see that component's docs for more details (which also indicates its default value).
4527
- * @param {string} [browserAutoComplete='off'] - Forwarded to `autoComplete` attribute of `igzValidatingInputField`.
4528
- * Please see that component's docs for more details. Defaults to `'off'` because usually it is desired to
4529
- * cancel the built-in auto-completion feature of the web browser when using this component.
4530
- * @param {string} currentValue - The initial value to populate the input field on initialization.
4531
- * @param {Array} filterBy - A list of filter criteria. Each item will be rendered as an option in the filters
4532
- * drop-down menu.
4533
- * @param {string} filterBy[].label - The label of the drop-down menu option.
4534
- * @param {string} filterBy[].attribute - The value of the drop-down menu option that will be sent when invoking
4535
- * `onSuggestionSelected` for the parent component to use when compiling the list of suggestions.
4536
- * @param {string} [emptyMessage] - Optionally display a message when suggestion list is empty.
4537
- * @param {Object} formObject - The `<form>` element or `<ng-form>` directive containing this component. It will be
4538
- * forwarded to the `formObject` attribute of the `igzValidatingInputField` component.
4539
- * @param {string} inputName - The name of the filed, will be forwarded to the `inputName` attribute of the
4540
- * `igzValidatingInputField` component.
4541
- * @param {boolean} [isDisabled=false] - Set to `true` to make this field disabled. Forwarded to `isDisabled`
4542
- * attribute of the `igzValidatingInputField` component.
4543
- * @param {boolean} [isFocused=false] - Set to `true` to give focus to this field once it finished initializing.
4544
- * Forwarded to `isFocused` attribute of the `igzValidatingInputField` component.
4545
- * @param {boolean} [isRequired=false] - Set to `true` to make this field mandatory. The field will be invalid if it
4546
- * is empty. Forwarded to `validationIsRequired` attribute of the `igzValidatingInputField` component.
4547
- * @param {string} [noMatchPolicy='allow'] - Determines the behavior when the selected suggestion value or the value
4548
- * on blur does not match any suggestion on the current suggestion list. Could be one of:
4549
- * - `'allow'` (default): Allows the input value. The input field will be valid.
4550
- * - `'invalid'`: The input field will be invalid. The input will remain unchanged.
4551
- * - `'revert'`: Reverts the input field value bacl to the last valid value. The input field will be valid.
4552
- * @param {function} [onBlur] - A callback function for `blur` event. Invoked with `inputValue` and `inputName` when
4553
- * the field loses focus (if the focus moves from the input field to the suggestion menu - this function will
4554
- * _not_ be invoked).
4555
- * @param {function} [onEmptyData] - A callback function for the case when input is empty and `suggestionsOnEmpty`
4556
- * is false. Invoked without any argument.
4557
- * @param {function} [onTextChanged] - A callback function for changed text on losing focus. If it returns a
4558
- * rejected promise - it would tell this component the value is invalid.
4559
- * @param {function} [onSuggestionSelected] - A callback function for selecting suggestion from suggestion menu.
4560
- * If it returns a rejected promise - it would tell this component the value is invalid.
4561
- * @param {function} [onRequestSuggestions] - A callback function for retrieving suggestion list when input field
4562
- * value changes. It is invoked with:
4563
- * - `input`: The current input field's value
4564
- * - `filter`: The `attribute` property of the item in `filterBy` array that is corresponding to the selected
4565
- * option of the filter drop-down menu.
4566
- * - `inputName`: The name of the input field.
4567
- * Suggestion list should be an array of objects where each object has the following properties:
4568
- * - `value`: the value of the suggestion to use when selecting this suggestion from the drop-down menu.
4569
- * - `label`: the label to show for this suggestion on the drop-down menu.
4570
- * - `additionalInfo`: more text to show for the suggestion after the label in the drop-down menu.
4571
- * @param {boolean} [suggestionsOnEmpty=true] - Set to `false` in order to prevent invoking `onRequestSuggestions`
4572
- * when input value changed and is now empty, and invoke `onEmptyData` instead. Default is `true` which will
4573
- * invoke `onRequestSuggestions` when input value is empty.
4514
+ IgzCopyToClipboard.$inject = ['$i18next', 'i18next', 'lodash', 'DialogsService'];
4515
+ angular.module('iguazio.dashboard-controls').component('igzCopyToClipboard', {
4516
+ bindings: {
4517
+ tooltipPlacement: '@?',
4518
+ tooltipText: '@?',
4519
+ value: '<'
4520
+ },
4521
+ templateUrl: 'igz_controls/components/copy-to-clipboard/copy-to-clipboard.tpl.html',
4522
+ controller: IgzCopyToClipboard
4523
+ });
4524
+
4525
+ function IgzCopyToClipboard($i18next, i18next, lodash, DialogsService) {
4526
+ var ctrl = this;
4527
+ var lng = i18next.language;
4528
+
4529
+ ctrl.$onInit = onInit;
4530
+
4531
+ ctrl.copyToClipboard = copyToClipboard;
4532
+
4533
+ //
4534
+ // Hook methods
4535
+ //
4536
+
4537
+ /**
4538
+ * Initialization method
4539
+ */
4540
+ function onInit() {
4541
+ lodash.defaults(ctrl, {
4542
+ tooltipPlacement: 'top'
4543
+ });
4544
+ }
4545
+
4546
+ //
4547
+ // Public method
4548
+ //
4549
+
4550
+ /**
4551
+ * Copies a string to the clipboard.
4552
+ */
4553
+ function copyToClipboard() {
4554
+ if (document.queryCommandSupported && document.queryCommandSupported('copy')) {
4555
+ var textarea = document.createElement('textarea');
4556
+ textarea.textContent = ctrl.value;
4557
+ textarea.style.position = 'fixed';
4558
+ document.body.appendChild(textarea);
4559
+ textarea.select();
4560
+
4561
+ try {
4562
+ return document.execCommand('copy'); // Security exception may be thrown by some browsers.
4563
+ } catch (ex) {
4564
+ DialogsService.alert($i18next.t('common:COPY_TO_CLIPBOARD_FAILED', { lng: lng }), ex);
4565
+ } finally {
4566
+ document.body.removeChild(textarea);
4567
+ }
4568
+ }
4569
+ }
4570
+ }
4571
+ })();
4572
+ 'use strict';
4573
+
4574
+ (function () {
4575
+ 'use strict';
4576
+
4577
+ /**
4578
+ * @name igzAutoComplete
4579
+ * @component
4580
+ *
4581
+ * @description
4582
+ * An input field that wraps around `igzValidatingInputField` component and enriches it with auto-complete feature.
4583
+ * The user enters input to the input field, and a suggestion drop-down menu is open according to the input value.
4584
+ * An optional filter drop-down field is available to make it possible to populate the suggestion list according
4585
+ * to different criteria, for example different properties of objects like first name or last name of person.
4586
+ * The user can click on a suggestion from the menu to select it.
4587
+ *
4588
+ * @param {string} bordersMode - Forwarded to `bordersMode` attribute of `igzValidatingInputField` component. Please
4589
+ * see that component's docs for more details (which also indicates its default value).
4590
+ * @param {string} [browserAutoComplete='off'] - Forwarded to `autoComplete` attribute of `igzValidatingInputField`.
4591
+ * Please see that component's docs for more details. Defaults to `'off'` because usually it is desired to
4592
+ * cancel the built-in auto-completion feature of the web browser when using this component.
4593
+ * @param {string} currentValue - The initial value to populate the input field on initialization.
4594
+ * @param {Array} filterBy - A list of filter criteria. Each item will be rendered as an option in the filters
4595
+ * drop-down menu.
4596
+ * @param {string} filterBy[].label - The label of the drop-down menu option.
4597
+ * @param {string} filterBy[].attribute - The value of the drop-down menu option that will be sent when invoking
4598
+ * `onSuggestionSelected` for the parent component to use when compiling the list of suggestions.
4599
+ * @param {string} [emptyMessage] - Optionally display a message when suggestion list is empty.
4600
+ * @param {Object} formObject - The `<form>` element or `<ng-form>` directive containing this component. It will be
4601
+ * forwarded to the `formObject` attribute of the `igzValidatingInputField` component.
4602
+ * @param {string} inputName - The name of the filed, will be forwarded to the `inputName` attribute of the
4603
+ * `igzValidatingInputField` component.
4604
+ * @param {boolean} [isDisabled=false] - Set to `true` to make this field disabled. Forwarded to `isDisabled`
4605
+ * attribute of the `igzValidatingInputField` component.
4606
+ * @param {boolean} [isFocused=false] - Set to `true` to give focus to this field once it finished initializing.
4607
+ * Forwarded to `isFocused` attribute of the `igzValidatingInputField` component.
4608
+ * @param {boolean} [isRequired=false] - Set to `true` to make this field mandatory. The field will be invalid if it
4609
+ * is empty. Forwarded to `validationIsRequired` attribute of the `igzValidatingInputField` component.
4610
+ * @param {string} [noMatchPolicy='allow'] - Determines the behavior when the selected suggestion value or the value
4611
+ * on blur does not match any suggestion on the current suggestion list. Could be one of:
4612
+ * - `'allow'` (default): Allows the input value. The input field will be valid.
4613
+ * - `'invalid'`: The input field will be invalid. The input will remain unchanged.
4614
+ * - `'revert'`: Reverts the input field value bacl to the last valid value. The input field will be valid.
4615
+ * @param {function} [onBlur] - A callback function for `blur` event. Invoked with `inputValue` and `inputName` when
4616
+ * the field loses focus (if the focus moves from the input field to the suggestion menu - this function will
4617
+ * _not_ be invoked).
4618
+ * @param {function} [onEmptyData] - A callback function for the case when input is empty and `suggestionsOnEmpty`
4619
+ * is false. Invoked without any argument.
4620
+ * @param {function} [onTextChanged] - A callback function for changed text on losing focus. If it returns a
4621
+ * rejected promise - it would tell this component the value is invalid.
4622
+ * @param {function} [onSuggestionSelected] - A callback function for selecting suggestion from suggestion menu.
4623
+ * If it returns a rejected promise - it would tell this component the value is invalid.
4624
+ * @param {function} [onRequestSuggestions] - A callback function for retrieving suggestion list when input field
4625
+ * value changes. It is invoked with:
4626
+ * - `input`: The current input field's value
4627
+ * - `filter`: The `attribute` property of the item in `filterBy` array that is corresponding to the selected
4628
+ * option of the filter drop-down menu.
4629
+ * - `inputName`: The name of the input field.
4630
+ * Suggestion list should be an array of objects where each object has the following properties:
4631
+ * - `value`: the value of the suggestion to use when selecting this suggestion from the drop-down menu.
4632
+ * - `label`: the label to show for this suggestion on the drop-down menu.
4633
+ * - `additionalInfo`: more text to show for the suggestion after the label in the drop-down menu.
4634
+ * @param {boolean} [suggestionsOnEmpty=true] - Set to `false` in order to prevent invoking `onRequestSuggestions`
4635
+ * when input value changed and is now empty, and invoke `onEmptyData` instead. Default is `true` which will
4636
+ * invoke `onRequestSuggestions` when input value is empty.
4574
4637
  * @param {string} [placeholder] - Placeholder text to display when input is empty. Forwarded to `placeholderText`
4575
4638
  * attribute of the `igzValidatingInputField` component.
4576
4639
  * @param {Object} [tooltip] - Allows a tooltip hint to open when hovering the input field. This is useful for not
@@ -4956,69 +5019,6 @@ angular.module('angular-i18next', []).provider('i18next', [function () {
4956
5019
  })();
4957
5020
  'use strict';
4958
5021
 
4959
- (function () {
4960
- 'use strict';
4961
-
4962
- IgzCopyToClipboard.$inject = ['$i18next', 'i18next', 'lodash', 'DialogsService'];
4963
- angular.module('iguazio.dashboard-controls').component('igzCopyToClipboard', {
4964
- bindings: {
4965
- tooltipPlacement: '@?',
4966
- tooltipText: '@?',
4967
- value: '<'
4968
- },
4969
- templateUrl: 'igz_controls/components/copy-to-clipboard/copy-to-clipboard.tpl.html',
4970
- controller: IgzCopyToClipboard
4971
- });
4972
-
4973
- function IgzCopyToClipboard($i18next, i18next, lodash, DialogsService) {
4974
- var ctrl = this;
4975
- var lng = i18next.language;
4976
-
4977
- ctrl.$onInit = onInit;
4978
-
4979
- ctrl.copyToClipboard = copyToClipboard;
4980
-
4981
- //
4982
- // Hook methods
4983
- //
4984
-
4985
- /**
4986
- * Initialization method
4987
- */
4988
- function onInit() {
4989
- lodash.defaults(ctrl, {
4990
- tooltipPlacement: 'top'
4991
- });
4992
- }
4993
-
4994
- //
4995
- // Public method
4996
- //
4997
-
4998
- /**
4999
- * Copies a string to the clipboard.
5000
- */
5001
- function copyToClipboard() {
5002
- if (document.queryCommandSupported && document.queryCommandSupported('copy')) {
5003
- var textarea = document.createElement('textarea');
5004
- textarea.textContent = ctrl.value;
5005
- textarea.style.position = 'fixed';
5006
- document.body.appendChild(textarea);
5007
- textarea.select();
5008
-
5009
- try {
5010
- return document.execCommand('copy'); // Security exception may be thrown by some browsers.
5011
- } catch (ex) {
5012
- DialogsService.alert($i18next.t('common:COPY_TO_CLIPBOARD_FAILED', { lng: lng }), ex);
5013
- } finally {
5014
- document.body.removeChild(textarea);
5015
- }
5016
- }
5017
- }
5018
- }
5019
- })();
5020
- 'use strict';
5021
-
5022
5022
  /* eslint max-statements: ["error", 100] */
5023
5023
  /* eslint complexity: ["error", 12] */
5024
5024
  (function () {
@@ -5964,51 +5964,349 @@ angular.module('angular-i18next', []).provider('i18next', [function () {
5964
5964
  (function () {
5965
5965
  'use strict';
5966
5966
 
5967
- IgzMoreInfoController.$inject = ['$compile', '$document', '$element', '$sce', '$scope', '$timeout', 'lodash'];
5968
- angular.module('iguazio.dashboard-controls').component('igzMoreInfo', {
5967
+ angular.module('iguazio.dashboard-controls').component('igzNavigationTabs', {
5969
5968
  bindings: {
5970
- description: '@',
5971
- isDisabled: '<?',
5972
- trigger: '@?',
5973
- iconType: '@?',
5974
- isHtmlEnabled: '<?',
5975
- isDefaultTooltipEnabled: '<?',
5976
- isOpen: '<?',
5977
- defaultTooltipPlacement: '@?',
5978
- defaultTooltipPopupDelay: '@?'
5969
+ tabItems: '<'
5979
5970
  },
5980
- templateUrl: 'igz_controls/components/more-info/more-info.tpl.html',
5981
- controller: IgzMoreInfoController
5971
+ templateUrl: 'igz_controls/components/navigation-tabs/navigation-tabs.tpl.html'
5982
5972
  });
5973
+ })();
5974
+ 'use strict';
5983
5975
 
5984
- function IgzMoreInfoController($compile, $document, $element, $sce, $scope, $timeout, lodash) {
5985
- var ctrl = this;
5976
+ (function () {
5977
+ 'use strict';
5986
5978
 
5987
- ctrl.iconTypes = {
5988
- INFO: 'info',
5989
- WARN: 'warn'
5979
+ NavigationTabsService.$inject = ['$timeout', '$i18next', 'i18next', 'lodash', 'ConfigService', 'FunctionsService'];
5980
+ angular.module('iguazio.dashboard-controls').factory('NavigationTabsService', NavigationTabsService);
5981
+
5982
+ function NavigationTabsService($timeout, $i18next, i18next, lodash, ConfigService, FunctionsService) {
5983
+ return {
5984
+ getNavigationTabsConfig: getNavigationTabsConfig
5990
5985
  };
5991
5986
 
5992
- ctrl.selectedIconType = ctrl.iconTypes.INFO;
5987
+ //
5988
+ // Public methods
5989
+ //
5993
5990
 
5994
- ctrl.$onInit = onInit;
5995
- ctrl.$onChanges = onChanges;
5996
- ctrl.$onDestroy = onDestroy;
5991
+ /**
5992
+ * Returns navigation tabs config depending on current state
5993
+ * @param {string} state
5994
+ * @returns {Array}
5995
+ */
5996
+ function getNavigationTabsConfig(state) {
5997
+ var navigationTabsConfigs = {
5998
+ 'app.project': getProjectConfig(state),
5999
+ 'app.container': getContainersConfig(),
6000
+ 'app.cluster': getClusterConfig(),
6001
+ 'app.clusters': getClustersConfig(),
6002
+ 'app.app-cluster': getAppClustersConfig(),
6003
+ 'app.events': getEventsConfig(),
6004
+ 'app.storage-pool': getStoragePoolsConfig(),
6005
+ 'app.identity': getIdentityConfig(),
6006
+ 'app.control-panel': getControlPanelConfig(),
6007
+ 'app.tenant': getTenantConfig()
6008
+ };
6009
+ var stateTest = state.match(/^[^.]*.[^.]*/);
5997
6010
 
5998
- ctrl.handleQuestionMarkClick = handleQuestionMarkClick;
5999
- ctrl.isClickMode = isClickMode;
6011
+ return lodash.get(navigationTabsConfigs, stateTest[0], []);
6012
+ }
6000
6013
 
6001
6014
  //
6002
- // Hook methods
6015
+ // Private methods
6003
6016
  //
6004
6017
 
6005
6018
  /**
6006
- * Initialization method
6019
+ * Returns project navigation tabs config
6020
+ * @returns {Array.<Object>}
6007
6021
  */
6008
- function onInit() {
6009
- lodash.defaults(ctrl, {
6010
- defaultTooltipPlacement: ctrl.isDefaultTooltipEnabled ? 'auto' : 'right',
6011
- defaultTooltipPopupDelay: '0',
6022
+ function getProjectConfig(state) {
6023
+ var config = [];
6024
+ var lng = i18next.language;
6025
+
6026
+ if (state === 'app.project.functions' || state === 'app.project.api-gateways') {
6027
+ config = [{
6028
+ tabName: $i18next.t('common:FUNCTIONS', { lng: lng }),
6029
+ uiRoute: 'app.project.functions'
6030
+ }];
6031
+
6032
+ $timeout(function () {
6033
+ if (FunctionsService.isKubePlatform()) {
6034
+ config.push({
6035
+ tabName: $i18next.t('functions:API_GATEWAYS', { lng: lng }),
6036
+ uiRoute: 'app.project.api-gateways'
6037
+ });
6038
+ }
6039
+ });
6040
+ }
6041
+
6042
+ return config;
6043
+ }
6044
+
6045
+ /**
6046
+ * Returns containers navigation tabs config
6047
+ * @returns {Array.<Object>}
6048
+ */
6049
+ function getContainersConfig() {
6050
+ var lng = i18next.language;
6051
+ var config = [{
6052
+ tabName: $i18next.t('common:BROWSE', { lng: lng }),
6053
+ uiRoute: 'app.container.browser',
6054
+ capability: 'containers.browse'
6055
+ }, {
6056
+ tabName: $i18next.t('common:OVERVIEW', { lng: lng }),
6057
+ uiRoute: 'app.container.overview',
6058
+ capability: 'containers.overview'
6059
+ }, {
6060
+ tabName: $i18next.t('common:DATA_ACCESS_POLICY', { lng: lng }),
6061
+ uiRoute: 'app.container.data-access-policy',
6062
+ capability: 'containers.dataPolicy'
6063
+ }];
6064
+
6065
+ if (ConfigService.isDemoMode()) {
6066
+ config.push({
6067
+ tabName: $i18next.t('common:DATA_LIFECYCLE', { lng: lng }),
6068
+ uiRoute: 'app.container.data-lifecycle',
6069
+ capability: 'containers.dataLifecycle'
6070
+ });
6071
+
6072
+ config.splice(1, 0, {
6073
+ tabName: $i18next.t('common:ANALYTICS', { lng: lng }),
6074
+ uiRoute: 'app.container.analytics',
6075
+ capability: 'containers.analytics'
6076
+ });
6077
+ }
6078
+
6079
+ return config;
6080
+ }
6081
+
6082
+ /**
6083
+ * Returns cluster navigation tabs config
6084
+ * @returns {Array.<Object>}
6085
+ */
6086
+ function getClusterConfig() {
6087
+ var lng = i18next.language;
6088
+ var config = [{
6089
+ tabName: $i18next.t('common:NODES', { lng: lng }),
6090
+ uiRoute: 'app.cluster.nodes',
6091
+ capability: 'clusters.nodes'
6092
+ }];
6093
+
6094
+ if (ConfigService.isStagingMode()) {
6095
+ config.unshift({
6096
+ tabName: $i18next.t('common:OVERVIEW', { lng: lng }),
6097
+ uiRoute: 'app.cluster.overview',
6098
+ capability: 'clusters.overview'
6099
+ });
6100
+ }
6101
+
6102
+ return config;
6103
+ }
6104
+
6105
+ /**
6106
+ * Returns clusters navigation tabs config
6107
+ * @returns {Array.<Object>}
6108
+ */
6109
+ function getClustersConfig() {
6110
+ var lng = i18next.language;
6111
+
6112
+ return [{
6113
+ tabName: $i18next.t('common:DATA', { lng: lng }),
6114
+ id: 'data',
6115
+ uiRoute: 'app.clusters.data',
6116
+ capability: 'clusters'
6117
+ }, {
6118
+ tabName: $i18next.t('common:APPLICATION', { lng: lng }),
6119
+ id: 'app',
6120
+ uiRoute: 'app.clusters.app',
6121
+ capability: 'clusters'
6122
+ }, {
6123
+ tabName: $i18next.t('common:SUPPORT_LOGS', { lng: lng }),
6124
+ id: 'support-logs',
6125
+ uiRoute: 'app.clusters.support-logs',
6126
+ capability: 'clusters.collectLogs'
6127
+ }];
6128
+ }
6129
+
6130
+ /**
6131
+ * Returns app-clusters navigation tabs config
6132
+ * @returns {Array.<Object>}
6133
+ */
6134
+ function getAppClustersConfig() {
6135
+ var lng = i18next.language;
6136
+
6137
+ return [{
6138
+ tabName: $i18next.t('common:NODES', { lng: lng }),
6139
+ uiRoute: 'app.app-cluster.nodes',
6140
+ capability: 'clusters.nodes'
6141
+ }];
6142
+ }
6143
+
6144
+ /**
6145
+ * Returns storage pools navigation tabs config
6146
+ * @returns {Array.<Object>}
6147
+ */
6148
+ function getStoragePoolsConfig() {
6149
+ var lng = i18next.language;
6150
+ var config = [{
6151
+ tabName: $i18next.t('common:OVERVIEW', { lng: lng }),
6152
+ uiRoute: 'app.storage-pool.overview',
6153
+ capability: 'storagePools.overview'
6154
+ }, {
6155
+ tabName: $i18next.t('common:DEVICES', { lng: lng }),
6156
+ uiRoute: 'app.storage-pool.devices',
6157
+ capability: 'storagePools.listDevices'
6158
+ }];
6159
+
6160
+ if (ConfigService.isDemoMode()) {
6161
+ config.splice(1, 0, {
6162
+ tabName: $i18next.t('common:CONTAINERS', { lng: lng }),
6163
+ uiRoute: 'app.storage-pool.containers',
6164
+ capability: 'storagePools.listContainers'
6165
+ });
6166
+ }
6167
+
6168
+ return config;
6169
+ }
6170
+
6171
+ /**
6172
+ * Returns control panel navigation tabs config
6173
+ * @returns {Array.<Object>}
6174
+ */
6175
+ function getControlPanelConfig() {
6176
+ var lng = i18next.language;
6177
+
6178
+ return [{
6179
+ tabName: $i18next.t('common:LOGS', { lng: lng }),
6180
+ uiRoute: 'app.control-panel.logs'
6181
+ }];
6182
+ }
6183
+
6184
+ /**
6185
+ * Returns identity navigation tabs config
6186
+ * @returns {Array.<Object>}
6187
+ */
6188
+ function getIdentityConfig() {
6189
+ var lng = i18next.language;
6190
+ var platformType = lodash.get(ConfigService.dashboard, 'platformType', '');
6191
+
6192
+ return [{
6193
+ tabName: $i18next.t('common:USERS', { lng: lng }),
6194
+ uiRoute: 'app.identity.users',
6195
+ capability: 'identity.users'
6196
+ }, {
6197
+ tabName: $i18next.t('common:GROUPS', { lng: lng }),
6198
+ uiRoute: 'app.identity.groups',
6199
+ capability: 'identity.groups'
6200
+ }, {
6201
+ tabName: $i18next.t('common:IDP', { lng: lng }),
6202
+ uiRoute: 'app.identity.idp',
6203
+ capability: 'identity.idp'
6204
+ }, {
6205
+ tabName: $i18next.t('common:KEYLOACK_ADMIN_CONSOLE', { lng: lng }),
6206
+ href: lodash.get(ConfigService.dashboard, ['authentication', 'sso', 'console_urls', platformType], ''),
6207
+ hidden: !(lodash.get(ConfigService.dashboard, 'authentication.sso.mode') && platformType)
6208
+ }];
6209
+ }
6210
+
6211
+ /**
6212
+ * Returns events navigation tabs config
6213
+ * @returns {Array.<Object>}
6214
+ */
6215
+ function getEventsConfig() {
6216
+ var lng = i18next.language;
6217
+ var config = [{
6218
+ tabName: $i18next.t('common:EVENT_LOG', { lng: lng }),
6219
+ uiRoute: 'app.events.event-log',
6220
+ capability: 'events.eventLog'
6221
+ }, {
6222
+ tabName: $i18next.t('common:ALERTS', { lng: lng }),
6223
+ uiRoute: 'app.events.alerts',
6224
+ capability: 'events.alerts'
6225
+ }, {
6226
+ tabName: $i18next.t('common:AUDIT', { lng: lng }),
6227
+ uiRoute: 'app.events.audit',
6228
+ capability: 'events.audit'
6229
+ }, {
6230
+ tabName: $i18next.t('common:COMMUNICATION', { lng: lng }),
6231
+ uiRoute: 'app.events.communication',
6232
+ capability: 'events.communication'
6233
+ }];
6234
+
6235
+ if (ConfigService.isDemoMode()) {
6236
+ config.push({
6237
+ tabName: $i18next.t('common:ESCALATION', { lng: lng }),
6238
+ uiRoute: 'app.events.escalation',
6239
+ capability: 'events.escalations'
6240
+ });
6241
+ }
6242
+
6243
+ return config;
6244
+ }
6245
+
6246
+ /**
6247
+ * Returns tenants navigation tabs config
6248
+ * @returns {Array.<Object>}
6249
+ */
6250
+ function getTenantConfig() {
6251
+ var lng = i18next.language;
6252
+
6253
+ return [{
6254
+ tabName: $i18next.t('common:OVERVIEW', { lng: lng }),
6255
+ uiRoute: 'app.tenant.overview'
6256
+ }];
6257
+ }
6258
+ }
6259
+ })();
6260
+ 'use strict';
6261
+
6262
+ (function () {
6263
+ 'use strict';
6264
+
6265
+ IgzMoreInfoController.$inject = ['$compile', '$document', '$element', '$sce', '$scope', '$timeout', 'lodash'];
6266
+ angular.module('iguazio.dashboard-controls').component('igzMoreInfo', {
6267
+ bindings: {
6268
+ description: '@',
6269
+ isDisabled: '<?',
6270
+ trigger: '@?',
6271
+ iconType: '@?',
6272
+ isHtmlEnabled: '<?',
6273
+ isDefaultTooltipEnabled: '<?',
6274
+ isOpen: '<?',
6275
+ defaultTooltipPlacement: '@?',
6276
+ defaultTooltipPopupDelay: '@?'
6277
+ },
6278
+ templateUrl: 'igz_controls/components/more-info/more-info.tpl.html',
6279
+ controller: IgzMoreInfoController
6280
+ });
6281
+
6282
+ function IgzMoreInfoController($compile, $document, $element, $sce, $scope, $timeout, lodash) {
6283
+ var ctrl = this;
6284
+
6285
+ ctrl.iconTypes = {
6286
+ INFO: 'info',
6287
+ WARN: 'warn'
6288
+ };
6289
+
6290
+ ctrl.selectedIconType = ctrl.iconTypes.INFO;
6291
+
6292
+ ctrl.$onInit = onInit;
6293
+ ctrl.$onChanges = onChanges;
6294
+ ctrl.$onDestroy = onDestroy;
6295
+
6296
+ ctrl.handleQuestionMarkClick = handleQuestionMarkClick;
6297
+ ctrl.isClickMode = isClickMode;
6298
+
6299
+ //
6300
+ // Hook methods
6301
+ //
6302
+
6303
+ /**
6304
+ * Initialization method
6305
+ */
6306
+ function onInit() {
6307
+ lodash.defaults(ctrl, {
6308
+ defaultTooltipPlacement: ctrl.isDefaultTooltipEnabled ? 'auto' : 'right',
6309
+ defaultTooltipPopupDelay: '0',
6012
6310
  isDefaultTooltipEnabled: false,
6013
6311
  isDisabled: false,
6014
6312
  isHtmlEnabled: false
@@ -6457,498 +6755,200 @@ angular.module('angular-i18next', []).provider('i18next', [function () {
6457
6755
  }
6458
6756
 
6459
6757
  //
6460
- // Public methods
6461
- //
6462
-
6463
- /**
6464
- * Adds new item to options list.
6465
- * Available only for groups mode in dropdown.
6466
- * @param {string} inputValue - new item value
6467
- * @param {Object} group - new item's group model
6468
- * @param {string} name - group name
6469
- */
6470
- function addItem(inputValue, group, name) {
6471
- if (group.addingEnabled && !lodash.isEmpty(inputValue)) {
6472
- lodash.get(ctrl.optionList, name + '.options').unshift({
6473
- id: inputValue,
6474
- label: inputValue,
6475
- value: inputValue,
6476
- enableTooltip: false,
6477
- disabled: false,
6478
- checked: true,
6479
- filtered: false
6480
- });
6481
- }
6482
-
6483
- ctrl.toggleAddItemField(group, name);
6484
- ctrl.updateViewValue();
6485
- }
6486
-
6487
- /**
6488
- * Callback on 'Apply' changes.
6489
- */
6490
- function onApply() {
6491
- if (angular.isFunction(ctrl.dropdownApplyCallback)) {
6492
- toggleDropdown();
6493
-
6494
- ctrl.dropdownApplyCallback({ data: ctrl.optionList });
6495
- }
6496
- }
6497
-
6498
- /**
6499
- * Callback on 'Cancel' button
6500
- */
6501
- function onCancel() {
6502
- onSearchInputChange('');
6503
- toggleDropdown();
6504
- }
6505
-
6506
- /**
6507
- * Callback on master checkbox state changes.
6508
- * @param {Event} event - event object
6509
- * @param {string} name - group name
6510
- */
6511
- function onCheckAllItems(event, name) {
6512
- if (ctrl.groups && !lodash.isNil(name)) {
6513
- var options = lodash.get(ctrl.optionList, name + '.options');
6514
- var isAllItemsChecked = !lodash.get(ctrl.optionList, name + '.allItemsChecked');
6515
-
6516
- lodash.forEach(options, function (option) {
6517
- lodash.set(option, 'checked', isAllItemsChecked);
6518
- });
6519
-
6520
- lodash.assign(ctrl.optionList[name], {
6521
- allItemsChecked: isAllItemsChecked,
6522
- itemsChecked: isAllItemsChecked ? options.length : 0,
6523
- options: options
6524
- });
6525
- } else {
6526
- ctrl.isAllItemsChecked = !ctrl.isAllItemsChecked;
6527
- ctrl.checkedItemsCount = ctrl.isAllItemsChecked ? ctrl.optionList.length : 0;
6528
-
6529
- lodash.forEach(ctrl.optionList, function (option) {
6530
- option.checked = ctrl.isAllItemsChecked;
6531
- });
6532
- }
6533
- }
6534
-
6535
- /**
6536
- * Callback on search input changes.
6537
- * @param {string} searchData
6538
- */
6539
- function onSearchInputChange(searchData) {
6540
- if (lodash.isEmpty(searchData) || lodash.isNil(searchData)) {
6541
- lodash.forEach(ctrl.optionList, function (group) {
6542
- lodash.forEach(group.options, function (option) {
6543
- lodash.set(option, 'filtered', false);
6544
- });
6545
- });
6546
- } else {
6547
- lodash.forEach(ctrl.optionList, function (item) {
6548
- if (ctrl.groups) {
6549
- lodash.forEach(item.options, function (option) {
6550
- lodash.set(option, 'filtered', !lodash.startsWith(option.value.toLowerCase(), searchData));
6551
- });
6552
- } else {
6553
- lodash.set(item, 'filtered', !lodash.startsWith(item.value.toLowerCase(), searchData));
6554
- }
6555
- });
6556
- }
6557
- }
6558
-
6559
- /**
6560
- * Toggles add new item field visibility
6561
- * @param {Object} group - new item's group model
6562
- * @param {string} name - group name
6563
- */
6564
- function toggleAddItemField(group, name) {
6565
- if (group.addingEnabled) {
6566
- var isVisible = !lodash.get(ctrl.optionList, name + '.addItemInputVisible', false);
6567
-
6568
- lodash.set(ctrl.optionList, name + '.addItemInputVisible', isVisible);
6569
- }
6570
- }
6571
-
6572
- /**
6573
- * Toggles dropdown visibility
6574
- */
6575
- function toggleDropdown() {
6576
- ctrl.isDropdownOpened = !ctrl.isDropdownOpened;
6577
- }
6578
-
6579
- /**
6580
- * Toggles search input focus/blur for style changes
6581
- */
6582
- function toggleSearchInputFocus() {
6583
- ctrl.isSearchInputFocused = !ctrl.isSearchInputFocused;
6584
- }
6585
-
6586
- /**
6587
- * Sets a new state to the view-value, which is an array of strings corresponding to the checked options
6588
- */
6589
- function updateViewValue() {
6590
- var newViewValue = ctrl.groups ? {} : [];
6591
-
6592
- if (ctrl.groups) {
6593
- lodash.forEach(ctrl.optionList, function (group, key) {
6594
- var checkedItems = lodash.filter(group.options, 'checked');
6595
-
6596
- group.allItemsChecked = checkedItems.length === group.options.length;
6597
-
6598
- lodash.set(ctrl.optionList, key + '.itemsChecked', checkedItems.length);
6599
- lodash.set(newViewValue, key, lodash.map(checkedItems, 'value'));
6600
- });
6601
-
6602
- if (!ctrl.dropdownApply && angular.isFunction(ctrl.dropdownApplyCallback)) {
6603
- ctrl.dropdownApplyCallback({ data: ctrl.optionList });
6604
- }
6605
- } else {
6606
- var checkedItems = lodash.filter(ctrl.optionList, 'checked');
6607
-
6608
- if (ctrl.selectAllNone) {
6609
- ctrl.isAllItemsChecked = checkedItems.length === ctrl.optionList.length;
6610
- ctrl.checkedItemsCount = checkedItems.length;
6611
- }
6612
-
6613
- newViewValue = lodash.map(checkedItems, 'value');
6614
- }
6615
-
6616
- ctrl.ngModelCtrl.$setViewValue(newViewValue, 'change');
6617
- }
6618
-
6619
- /**
6620
- * Tests whether a provided option should be disabled or not.
6621
- * @param {{disabled: boolean}} option - the option to test
6622
- * @returns {boolean} `true` if this option should be disabled, or `false` otherwise
6623
- */
6624
- function isDisabled(option) {
6625
- return ctrl.disabled || option.disabled;
6626
- }
6627
-
6628
- //
6629
- // Private methods
6630
- //
6631
-
6632
- /**
6633
- * Checks the options that correspond to the string values inside the model, and un-checks the rest.
6634
- */
6635
- function updateOptionsState() {
6636
- if (ctrl.groups) {
6637
- lodash.forEach(ctrl.optionList, function (group, key) {
6638
- var viewValue = lodash.get(ctrl.ngModelCtrl.$viewValue, key, []);
6639
-
6640
- lodash.forEach(group.options, function (option) {
6641
- option.checked = group.allItemsChecked ? true : lodash.includes(viewValue, option.value);
6642
- });
6643
-
6644
- var checkedItems = lodash.filter(group.options, 'checked');
6645
-
6646
- group.allItemsChecked = checkedItems.length === group.options.length;
6647
- lodash.set(ctrl.optionList, key + '.itemsChecked', checkedItems.length);
6648
- });
6649
- } else {
6650
- lodash.forEach(ctrl.optionList, function (option) {
6651
- option.checked = lodash.includes(ctrl.ngModelCtrl.$viewValue, option.value);
6652
- });
6653
- }
6654
- }
6655
- }
6656
- })();
6657
- 'use strict';
6658
-
6659
- (function () {
6660
- 'use strict';
6661
-
6662
- angular.module('iguazio.dashboard-controls').component('igzNavigationTabs', {
6663
- bindings: {
6664
- tabItems: '<'
6665
- },
6666
- templateUrl: 'igz_controls/components/navigation-tabs/navigation-tabs.tpl.html'
6667
- });
6668
- })();
6669
- 'use strict';
6670
-
6671
- (function () {
6672
- 'use strict';
6673
-
6674
- NavigationTabsService.$inject = ['$timeout', '$i18next', 'i18next', 'lodash', 'ConfigService', 'FunctionsService'];
6675
- angular.module('iguazio.dashboard-controls').factory('NavigationTabsService', NavigationTabsService);
6676
-
6677
- function NavigationTabsService($timeout, $i18next, i18next, lodash, ConfigService, FunctionsService) {
6678
- return {
6679
- getNavigationTabsConfig: getNavigationTabsConfig
6680
- };
6681
-
6682
- //
6683
- // Public methods
6684
- //
6685
-
6686
- /**
6687
- * Returns navigation tabs config depending on current state
6688
- * @param {string} state
6689
- * @returns {Array}
6690
- */
6691
- function getNavigationTabsConfig(state) {
6692
- var navigationTabsConfigs = {
6693
- 'app.project': getProjectConfig(state),
6694
- 'app.container': getContainersConfig(),
6695
- 'app.cluster': getClusterConfig(),
6696
- 'app.clusters': getClustersConfig(),
6697
- 'app.app-cluster': getAppClustersConfig(),
6698
- 'app.events': getEventsConfig(),
6699
- 'app.storage-pool': getStoragePoolsConfig(),
6700
- 'app.identity': getIdentityConfig(),
6701
- 'app.control-panel': getControlPanelConfig(),
6702
- 'app.tenant': getTenantConfig()
6703
- };
6704
- var stateTest = state.match(/^[^.]*.[^.]*/);
6705
-
6706
- return lodash.get(navigationTabsConfigs, stateTest[0], []);
6707
- }
6708
-
6709
- //
6710
- // Private methods
6758
+ // Public methods
6711
6759
  //
6712
6760
 
6713
6761
  /**
6714
- * Returns project navigation tabs config
6715
- * @returns {Array.<Object>}
6762
+ * Adds new item to options list.
6763
+ * Available only for groups mode in dropdown.
6764
+ * @param {string} inputValue - new item value
6765
+ * @param {Object} group - new item's group model
6766
+ * @param {string} name - group name
6716
6767
  */
6717
- function getProjectConfig(state) {
6718
- var config = [];
6719
- var lng = i18next.language;
6720
-
6721
- if (state === 'app.project.functions' || state === 'app.project.api-gateways') {
6722
- config = [{
6723
- tabName: $i18next.t('common:FUNCTIONS', { lng: lng }),
6724
- uiRoute: 'app.project.functions'
6725
- }];
6726
-
6727
- $timeout(function () {
6728
- if (FunctionsService.isKubePlatform()) {
6729
- config.push({
6730
- tabName: $i18next.t('functions:API_GATEWAYS', { lng: lng }),
6731
- uiRoute: 'app.project.api-gateways'
6732
- });
6733
- }
6768
+ function addItem(inputValue, group, name) {
6769
+ if (group.addingEnabled && !lodash.isEmpty(inputValue)) {
6770
+ lodash.get(ctrl.optionList, name + '.options').unshift({
6771
+ id: inputValue,
6772
+ label: inputValue,
6773
+ value: inputValue,
6774
+ enableTooltip: false,
6775
+ disabled: false,
6776
+ checked: true,
6777
+ filtered: false
6734
6778
  });
6735
6779
  }
6736
6780
 
6737
- return config;
6781
+ ctrl.toggleAddItemField(group, name);
6782
+ ctrl.updateViewValue();
6738
6783
  }
6739
6784
 
6740
6785
  /**
6741
- * Returns containers navigation tabs config
6742
- * @returns {Array.<Object>}
6786
+ * Callback on 'Apply' changes.
6743
6787
  */
6744
- function getContainersConfig() {
6745
- var lng = i18next.language;
6746
- var config = [{
6747
- tabName: $i18next.t('common:BROWSE', { lng: lng }),
6748
- uiRoute: 'app.container.browser',
6749
- capability: 'containers.browse'
6750
- }, {
6751
- tabName: $i18next.t('common:OVERVIEW', { lng: lng }),
6752
- uiRoute: 'app.container.overview',
6753
- capability: 'containers.overview'
6754
- }, {
6755
- tabName: $i18next.t('common:DATA_ACCESS_POLICY', { lng: lng }),
6756
- uiRoute: 'app.container.data-access-policy',
6757
- capability: 'containers.dataPolicy'
6758
- }];
6759
-
6760
- if (ConfigService.isDemoMode()) {
6761
- config.push({
6762
- tabName: $i18next.t('common:DATA_LIFECYCLE', { lng: lng }),
6763
- uiRoute: 'app.container.data-lifecycle',
6764
- capability: 'containers.dataLifecycle'
6765
- });
6788
+ function onApply() {
6789
+ if (angular.isFunction(ctrl.dropdownApplyCallback)) {
6790
+ toggleDropdown();
6766
6791
 
6767
- config.splice(1, 0, {
6768
- tabName: $i18next.t('common:ANALYTICS', { lng: lng }),
6769
- uiRoute: 'app.container.analytics',
6770
- capability: 'containers.analytics'
6771
- });
6792
+ ctrl.dropdownApplyCallback({ data: ctrl.optionList });
6772
6793
  }
6773
-
6774
- return config;
6775
6794
  }
6776
6795
 
6777
6796
  /**
6778
- * Returns cluster navigation tabs config
6779
- * @returns {Array.<Object>}
6797
+ * Callback on 'Cancel' button
6780
6798
  */
6781
- function getClusterConfig() {
6782
- var lng = i18next.language;
6783
- var config = [{
6784
- tabName: $i18next.t('common:NODES', { lng: lng }),
6785
- uiRoute: 'app.cluster.nodes',
6786
- capability: 'clusters.nodes'
6787
- }];
6788
-
6789
- if (ConfigService.isStagingMode()) {
6790
- config.unshift({
6791
- tabName: $i18next.t('common:OVERVIEW', { lng: lng }),
6792
- uiRoute: 'app.cluster.overview',
6793
- capability: 'clusters.overview'
6794
- });
6795
- }
6796
-
6797
- return config;
6799
+ function onCancel() {
6800
+ onSearchInputChange('');
6801
+ toggleDropdown();
6798
6802
  }
6799
6803
 
6800
6804
  /**
6801
- * Returns clusters navigation tabs config
6802
- * @returns {Array.<Object>}
6805
+ * Callback on master checkbox state changes.
6806
+ * @param {Event} event - event object
6807
+ * @param {string} name - group name
6803
6808
  */
6804
- function getClustersConfig() {
6805
- var lng = i18next.language;
6809
+ function onCheckAllItems(event, name) {
6810
+ if (ctrl.groups && !lodash.isNil(name)) {
6811
+ var options = lodash.get(ctrl.optionList, name + '.options');
6812
+ var isAllItemsChecked = !lodash.get(ctrl.optionList, name + '.allItemsChecked');
6806
6813
 
6807
- return [{
6808
- tabName: $i18next.t('common:DATA', { lng: lng }),
6809
- id: 'data',
6810
- uiRoute: 'app.clusters.data',
6811
- capability: 'clusters'
6812
- }, {
6813
- tabName: $i18next.t('common:APPLICATION', { lng: lng }),
6814
- id: 'app',
6815
- uiRoute: 'app.clusters.app',
6816
- capability: 'clusters'
6817
- }, {
6818
- tabName: $i18next.t('common:SUPPORT_LOGS', { lng: lng }),
6819
- id: 'support-logs',
6820
- uiRoute: 'app.clusters.support-logs',
6821
- capability: 'clusters.collectLogs'
6822
- }];
6823
- }
6814
+ lodash.forEach(options, function (option) {
6815
+ lodash.set(option, 'checked', isAllItemsChecked);
6816
+ });
6824
6817
 
6825
- /**
6826
- * Returns app-clusters navigation tabs config
6827
- * @returns {Array.<Object>}
6828
- */
6829
- function getAppClustersConfig() {
6830
- var lng = i18next.language;
6818
+ lodash.assign(ctrl.optionList[name], {
6819
+ allItemsChecked: isAllItemsChecked,
6820
+ itemsChecked: isAllItemsChecked ? options.length : 0,
6821
+ options: options
6822
+ });
6823
+ } else {
6824
+ ctrl.isAllItemsChecked = !ctrl.isAllItemsChecked;
6825
+ ctrl.checkedItemsCount = ctrl.isAllItemsChecked ? ctrl.optionList.length : 0;
6831
6826
 
6832
- return [{
6833
- tabName: $i18next.t('common:NODES', { lng: lng }),
6834
- uiRoute: 'app.app-cluster.nodes',
6835
- capability: 'clusters.nodes'
6836
- }];
6827
+ lodash.forEach(ctrl.optionList, function (option) {
6828
+ option.checked = ctrl.isAllItemsChecked;
6829
+ });
6830
+ }
6837
6831
  }
6838
6832
 
6839
6833
  /**
6840
- * Returns storage pools navigation tabs config
6841
- * @returns {Array.<Object>}
6834
+ * Callback on search input changes.
6835
+ * @param {string} searchData
6842
6836
  */
6843
- function getStoragePoolsConfig() {
6844
- var lng = i18next.language;
6845
- var config = [{
6846
- tabName: $i18next.t('common:OVERVIEW', { lng: lng }),
6847
- uiRoute: 'app.storage-pool.overview',
6848
- capability: 'storagePools.overview'
6849
- }, {
6850
- tabName: $i18next.t('common:DEVICES', { lng: lng }),
6851
- uiRoute: 'app.storage-pool.devices',
6852
- capability: 'storagePools.listDevices'
6853
- }];
6854
-
6855
- if (ConfigService.isDemoMode()) {
6856
- config.splice(1, 0, {
6857
- tabName: $i18next.t('common:CONTAINERS', { lng: lng }),
6858
- uiRoute: 'app.storage-pool.containers',
6859
- capability: 'storagePools.listContainers'
6837
+ function onSearchInputChange(searchData) {
6838
+ if (lodash.isEmpty(searchData) || lodash.isNil(searchData)) {
6839
+ lodash.forEach(ctrl.optionList, function (group) {
6840
+ lodash.forEach(group.options, function (option) {
6841
+ lodash.set(option, 'filtered', false);
6842
+ });
6843
+ });
6844
+ } else {
6845
+ lodash.forEach(ctrl.optionList, function (item) {
6846
+ if (ctrl.groups) {
6847
+ lodash.forEach(item.options, function (option) {
6848
+ lodash.set(option, 'filtered', !lodash.startsWith(option.value.toLowerCase(), searchData));
6849
+ });
6850
+ } else {
6851
+ lodash.set(item, 'filtered', !lodash.startsWith(item.value.toLowerCase(), searchData));
6852
+ }
6860
6853
  });
6861
6854
  }
6862
-
6863
- return config;
6864
6855
  }
6865
6856
 
6866
6857
  /**
6867
- * Returns control panel navigation tabs config
6868
- * @returns {Array.<Object>}
6858
+ * Toggles add new item field visibility
6859
+ * @param {Object} group - new item's group model
6860
+ * @param {string} name - group name
6869
6861
  */
6870
- function getControlPanelConfig() {
6871
- var lng = i18next.language;
6862
+ function toggleAddItemField(group, name) {
6863
+ if (group.addingEnabled) {
6864
+ var isVisible = !lodash.get(ctrl.optionList, name + '.addItemInputVisible', false);
6872
6865
 
6873
- return [{
6874
- tabName: $i18next.t('common:LOGS', { lng: lng }),
6875
- uiRoute: 'app.control-panel.logs'
6876
- }];
6866
+ lodash.set(ctrl.optionList, name + '.addItemInputVisible', isVisible);
6867
+ }
6877
6868
  }
6878
6869
 
6879
6870
  /**
6880
- * Returns identity navigation tabs config
6881
- * @returns {Array.<Object>}
6871
+ * Toggles dropdown visibility
6882
6872
  */
6883
- function getIdentityConfig() {
6884
- var lng = i18next.language;
6885
- var platformType = lodash.get(ConfigService.dashboard, 'platformType', '');
6886
-
6887
- return [{
6888
- tabName: $i18next.t('common:USERS', { lng: lng }),
6889
- uiRoute: 'app.identity.users',
6890
- capability: 'identity.users'
6891
- }, {
6892
- tabName: $i18next.t('common:GROUPS', { lng: lng }),
6893
- uiRoute: 'app.identity.groups',
6894
- capability: 'identity.groups'
6895
- }, {
6896
- tabName: $i18next.t('common:IDP', { lng: lng }),
6897
- uiRoute: 'app.identity.idp',
6898
- capability: 'identity.idp'
6899
- }, {
6900
- tabName: $i18next.t('common:KEYLOACK_ADMIN_CONSOLE', { lng: lng }),
6901
- href: lodash.get(ConfigService.dashboard, ['authentication', 'sso', 'console_urls', platformType], ''),
6902
- hidden: !(lodash.get(ConfigService.dashboard, 'authentication.sso.mode') && platformType)
6903
- }];
6873
+ function toggleDropdown() {
6874
+ ctrl.isDropdownOpened = !ctrl.isDropdownOpened;
6904
6875
  }
6905
6876
 
6906
- /**
6907
- * Returns events navigation tabs config
6908
- * @returns {Array.<Object>}
6909
- */
6910
- function getEventsConfig() {
6911
- var lng = i18next.language;
6912
- var config = [{
6913
- tabName: $i18next.t('common:EVENT_LOG', { lng: lng }),
6914
- uiRoute: 'app.events.event-log',
6915
- capability: 'events.eventLog'
6916
- }, {
6917
- tabName: $i18next.t('common:ALERTS', { lng: lng }),
6918
- uiRoute: 'app.events.alerts',
6919
- capability: 'events.alerts'
6920
- }, {
6921
- tabName: $i18next.t('common:AUDIT', { lng: lng }),
6922
- uiRoute: 'app.events.audit',
6923
- capability: 'events.audit'
6924
- }, {
6925
- tabName: $i18next.t('common:COMMUNICATION', { lng: lng }),
6926
- uiRoute: 'app.events.communication',
6927
- capability: 'events.communication'
6928
- }];
6877
+ /**
6878
+ * Toggles search input focus/blur for style changes
6879
+ */
6880
+ function toggleSearchInputFocus() {
6881
+ ctrl.isSearchInputFocused = !ctrl.isSearchInputFocused;
6882
+ }
6929
6883
 
6930
- if (ConfigService.isDemoMode()) {
6931
- config.push({
6932
- tabName: $i18next.t('common:ESCALATION', { lng: lng }),
6933
- uiRoute: 'app.events.escalation',
6934
- capability: 'events.escalations'
6884
+ /**
6885
+ * Sets a new state to the view-value, which is an array of strings corresponding to the checked options
6886
+ */
6887
+ function updateViewValue() {
6888
+ var newViewValue = ctrl.groups ? {} : [];
6889
+
6890
+ if (ctrl.groups) {
6891
+ lodash.forEach(ctrl.optionList, function (group, key) {
6892
+ var checkedItems = lodash.filter(group.options, 'checked');
6893
+
6894
+ group.allItemsChecked = checkedItems.length === group.options.length;
6895
+
6896
+ lodash.set(ctrl.optionList, key + '.itemsChecked', checkedItems.length);
6897
+ lodash.set(newViewValue, key, lodash.map(checkedItems, 'value'));
6935
6898
  });
6899
+
6900
+ if (!ctrl.dropdownApply && angular.isFunction(ctrl.dropdownApplyCallback)) {
6901
+ ctrl.dropdownApplyCallback({ data: ctrl.optionList });
6902
+ }
6903
+ } else {
6904
+ var checkedItems = lodash.filter(ctrl.optionList, 'checked');
6905
+
6906
+ if (ctrl.selectAllNone) {
6907
+ ctrl.isAllItemsChecked = checkedItems.length === ctrl.optionList.length;
6908
+ ctrl.checkedItemsCount = checkedItems.length;
6909
+ }
6910
+
6911
+ newViewValue = lodash.map(checkedItems, 'value');
6936
6912
  }
6937
6913
 
6938
- return config;
6914
+ ctrl.ngModelCtrl.$setViewValue(newViewValue, 'change');
6939
6915
  }
6940
6916
 
6941
6917
  /**
6942
- * Returns tenants navigation tabs config
6943
- * @returns {Array.<Object>}
6918
+ * Tests whether a provided option should be disabled or not.
6919
+ * @param {{disabled: boolean}} option - the option to test
6920
+ * @returns {boolean} `true` if this option should be disabled, or `false` otherwise
6944
6921
  */
6945
- function getTenantConfig() {
6946
- var lng = i18next.language;
6922
+ function isDisabled(option) {
6923
+ return ctrl.disabled || option.disabled;
6924
+ }
6947
6925
 
6948
- return [{
6949
- tabName: $i18next.t('common:OVERVIEW', { lng: lng }),
6950
- uiRoute: 'app.tenant.overview'
6951
- }];
6926
+ //
6927
+ // Private methods
6928
+ //
6929
+
6930
+ /**
6931
+ * Checks the options that correspond to the string values inside the model, and un-checks the rest.
6932
+ */
6933
+ function updateOptionsState() {
6934
+ if (ctrl.groups) {
6935
+ lodash.forEach(ctrl.optionList, function (group, key) {
6936
+ var viewValue = lodash.get(ctrl.ngModelCtrl.$viewValue, key, []);
6937
+
6938
+ lodash.forEach(group.options, function (option) {
6939
+ option.checked = group.allItemsChecked ? true : lodash.includes(viewValue, option.value);
6940
+ });
6941
+
6942
+ var checkedItems = lodash.filter(group.options, 'checked');
6943
+
6944
+ group.allItemsChecked = checkedItems.length === group.options.length;
6945
+ lodash.set(ctrl.optionList, key + '.itemsChecked', checkedItems.length);
6946
+ });
6947
+ } else {
6948
+ lodash.forEach(ctrl.optionList, function (option) {
6949
+ option.checked = lodash.includes(ctrl.ngModelCtrl.$viewValue, option.value);
6950
+ });
6951
+ }
6952
6952
  }
6953
6953
  }
6954
6954
  })();
@@ -9019,38 +9019,60 @@ angular.module('angular-i18next', []).provider('i18next', [function () {
9019
9019
  (function () {
9020
9020
  'use strict';
9021
9021
 
9022
- IgzSplashScreenController.$inject = ['$scope', '$state', '$i18next', 'i18next'];
9023
- angular.module('iguazio.dashboard-controls').component('igzSplashScreen', {
9022
+ IgzToastStatusPanelController.$inject = ['$element', '$rootScope', '$timeout', '$transclude', 'lodash'];
9023
+ angular.module('iguazio.dashboard-controls').component('igzToastStatusPanel', {
9024
9024
  bindings: {
9025
- isSplashShowed: '<'
9025
+ onClose: '&?',
9026
+ panelMessages: '<',
9027
+ panelState: '<',
9028
+ permanent: '<?'
9026
9029
  },
9027
- templateUrl: 'igz_controls/components/splash-screen/splash-screen.tpl.html',
9028
- controller: IgzSplashScreenController
9030
+ templateUrl: 'igz_controls/components/toast-status-panel/toast-status-panel.tpl.html',
9031
+ controller: IgzToastStatusPanelController,
9032
+ transclude: true
9029
9033
  });
9030
9034
 
9031
- function IgzSplashScreenController($scope, $state, $i18next, i18next) {
9035
+ function IgzToastStatusPanelController($element, $rootScope, $timeout, $transclude, lodash) {
9032
9036
  var ctrl = this;
9033
- var lng = i18next.language;
9037
+ var statusIcons = {
9038
+ 'succeeded': 'igz-icon-tick-round',
9039
+ 'in-progress': 'igz-icon-properties',
9040
+ 'failed': 'igz-icon-block'
9041
+ };
9034
9042
 
9035
- // public properties
9036
- ctrl.isLoading = true;
9037
- ctrl.isAlertShowing = false;
9038
- ctrl.textToDisplay = $i18next.t('common:LOADING_CAPITALIZE_ELLIPSIS', { lng: lng });
9043
+ ctrl.isToastPanelShown = false;
9044
+ ctrl.isTranscludePassed = false;
9039
9045
 
9040
- ctrl.$onInit = onInit;
9046
+ ctrl.$onChanges = onChanges;
9041
9047
 
9042
- // public methods
9043
- ctrl.refreshPage = refreshPage;
9048
+ ctrl.closeToastPanel = closeToastPanel;
9049
+ ctrl.getState = getState;
9050
+ ctrl.getStateMessage = getStateMessage;
9051
+
9052
+ // checks if transclude template was passed
9053
+ $transclude(function (transclude) {
9054
+ ctrl.isTranscludePassed = transclude.length > 0 && !(
9055
+
9056
+ // a single text node with whitespace only, meaning there is nothing important between the opening
9057
+ // tag `<igz-toast-status-panel>` and the closing tag `</igz-toast-status-panel>`
9058
+ transclude.length === 1 && transclude[0].nodeType === 3 && transclude.text().trim() === '');
9059
+ });
9044
9060
 
9045
9061
  //
9046
9062
  // Hook methods
9047
9063
  //
9048
9064
 
9049
9065
  /**
9050
- * Initialization method
9066
+ * On changes method
9067
+ * @param {Object} changes
9051
9068
  */
9052
- function onInit() {
9053
- $scope.$on('splash-screen_show-error', showError);
9069
+ function onChanges(changes) {
9070
+ if (lodash.has(changes, 'panelState')) {
9071
+ ctrl.isToastPanelShown = !lodash.isNil(changes.panelState.currentValue);
9072
+ $element.find('.panel-status-icon').removeClass(lodash.get(statusIcons, changes.panelState.previousValue)).addClass(lodash.get(statusIcons, changes.panelState.currentValue));
9073
+ $element.find('.toast-status-panel').removeClass(changes.panelState.previousValue).addClass(changes.panelState.currentValue);
9074
+ $element.find('.panel-status').removeClass(changes.panelState.previousValue).addClass(changes.panelState.currentValue);
9075
+ }
9054
9076
  }
9055
9077
 
9056
9078
  //
@@ -9058,35 +9080,36 @@ angular.module('angular-i18next', []).provider('i18next', [function () {
9058
9080
  //
9059
9081
 
9060
9082
  /**
9061
- * Sends broadcast to refresh browse page
9083
+ * Shows/hides toast panel
9062
9084
  */
9063
- function refreshPage() {
9064
- ctrl.isLoading = true;
9065
- ctrl.isAlertShowing = false;
9085
+ function closeToastPanel() {
9086
+ ctrl.isToastPanelShown = false;
9087
+ ctrl.panelState = null;
9066
9088
 
9067
- $state.reload();
9068
- }
9089
+ if (lodash.isFunction(ctrl.onClose)) {
9090
+ ctrl.onClose();
9091
+ }
9069
9092
 
9070
- //
9071
- // Private methods
9072
- //
9093
+ $timeout(function () {
9094
+ $rootScope.$broadcast('igzWatchWindowResize::resize');
9095
+ });
9096
+ }
9073
9097
 
9074
9098
  /**
9075
- * Shows error text
9076
- * @param {Object} event - native broadcast event
9077
- * @param {string} data - broadcast data
9099
+ * Gets current state
9100
+ * @returns {?string} (e.g. "in-progress", "succeeded", "failed")
9078
9101
  */
9079
- function showError(event, data) {
9080
- if (angular.isDefined(data.textToDisplay)) {
9081
- ctrl.textToDisplay = data.textToDisplay;
9082
- }
9083
-
9084
- if (angular.isDefined(data.alertText)) {
9085
- ctrl.alertText = data.alertText;
9086
- }
9102
+ function getState() {
9103
+ return ctrl.panelState;
9104
+ }
9087
9105
 
9088
- ctrl.isLoading = false;
9089
- ctrl.isAlertShowing = true;
9106
+ /**
9107
+ * Gets status message of given state
9108
+ * @param {string} state (e.g. "in-progress", "succeeded", "failed")
9109
+ * @returns {string}
9110
+ */
9111
+ function getStateMessage(state) {
9112
+ return lodash.get(ctrl, ['panelMessages', state]);
9090
9113
  }
9091
9114
  }
9092
9115
  })();
@@ -9233,6 +9256,82 @@ angular.module('angular-i18next', []).provider('i18next', [function () {
9233
9256
  })();
9234
9257
  'use strict';
9235
9258
 
9259
+ (function () {
9260
+ 'use strict';
9261
+
9262
+ IgzSplashScreenController.$inject = ['$scope', '$state', '$i18next', 'i18next'];
9263
+ angular.module('iguazio.dashboard-controls').component('igzSplashScreen', {
9264
+ bindings: {
9265
+ isSplashShowed: '<'
9266
+ },
9267
+ templateUrl: 'igz_controls/components/splash-screen/splash-screen.tpl.html',
9268
+ controller: IgzSplashScreenController
9269
+ });
9270
+
9271
+ function IgzSplashScreenController($scope, $state, $i18next, i18next) {
9272
+ var ctrl = this;
9273
+ var lng = i18next.language;
9274
+
9275
+ // public properties
9276
+ ctrl.isLoading = true;
9277
+ ctrl.isAlertShowing = false;
9278
+ ctrl.textToDisplay = $i18next.t('common:LOADING_CAPITALIZE_ELLIPSIS', { lng: lng });
9279
+
9280
+ ctrl.$onInit = onInit;
9281
+
9282
+ // public methods
9283
+ ctrl.refreshPage = refreshPage;
9284
+
9285
+ //
9286
+ // Hook methods
9287
+ //
9288
+
9289
+ /**
9290
+ * Initialization method
9291
+ */
9292
+ function onInit() {
9293
+ $scope.$on('splash-screen_show-error', showError);
9294
+ }
9295
+
9296
+ //
9297
+ // Public methods
9298
+ //
9299
+
9300
+ /**
9301
+ * Sends broadcast to refresh browse page
9302
+ */
9303
+ function refreshPage() {
9304
+ ctrl.isLoading = true;
9305
+ ctrl.isAlertShowing = false;
9306
+
9307
+ $state.reload();
9308
+ }
9309
+
9310
+ //
9311
+ // Private methods
9312
+ //
9313
+
9314
+ /**
9315
+ * Shows error text
9316
+ * @param {Object} event - native broadcast event
9317
+ * @param {string} data - broadcast data
9318
+ */
9319
+ function showError(event, data) {
9320
+ if (angular.isDefined(data.textToDisplay)) {
9321
+ ctrl.textToDisplay = data.textToDisplay;
9322
+ }
9323
+
9324
+ if (angular.isDefined(data.alertText)) {
9325
+ ctrl.alertText = data.alertText;
9326
+ }
9327
+
9328
+ ctrl.isLoading = false;
9329
+ ctrl.isAlertShowing = true;
9330
+ }
9331
+ }
9332
+ })();
9333
+ 'use strict';
9334
+
9236
9335
  /* eslint max-statements: ["error", 60] */
9237
9336
  (function () {
9238
9337
  'use strict';
@@ -9770,105 +9869,6 @@ angular.module('angular-i18next', []).provider('i18next', [function () {
9770
9869
  })();
9771
9870
  'use strict';
9772
9871
 
9773
- (function () {
9774
- 'use strict';
9775
-
9776
- IgzToastStatusPanelController.$inject = ['$element', '$rootScope', '$timeout', '$transclude', 'lodash'];
9777
- angular.module('iguazio.dashboard-controls').component('igzToastStatusPanel', {
9778
- bindings: {
9779
- onClose: '&?',
9780
- panelMessages: '<',
9781
- panelState: '<',
9782
- permanent: '<?'
9783
- },
9784
- templateUrl: 'igz_controls/components/toast-status-panel/toast-status-panel.tpl.html',
9785
- controller: IgzToastStatusPanelController,
9786
- transclude: true
9787
- });
9788
-
9789
- function IgzToastStatusPanelController($element, $rootScope, $timeout, $transclude, lodash) {
9790
- var ctrl = this;
9791
- var statusIcons = {
9792
- 'succeeded': 'igz-icon-tick-round',
9793
- 'in-progress': 'igz-icon-properties',
9794
- 'failed': 'igz-icon-block'
9795
- };
9796
-
9797
- ctrl.isToastPanelShown = false;
9798
- ctrl.isTranscludePassed = false;
9799
-
9800
- ctrl.$onChanges = onChanges;
9801
-
9802
- ctrl.closeToastPanel = closeToastPanel;
9803
- ctrl.getState = getState;
9804
- ctrl.getStateMessage = getStateMessage;
9805
-
9806
- // checks if transclude template was passed
9807
- $transclude(function (transclude) {
9808
- ctrl.isTranscludePassed = transclude.length > 0 && !(
9809
-
9810
- // a single text node with whitespace only, meaning there is nothing important between the opening
9811
- // tag `<igz-toast-status-panel>` and the closing tag `</igz-toast-status-panel>`
9812
- transclude.length === 1 && transclude[0].nodeType === 3 && transclude.text().trim() === '');
9813
- });
9814
-
9815
- //
9816
- // Hook methods
9817
- //
9818
-
9819
- /**
9820
- * On changes method
9821
- * @param {Object} changes
9822
- */
9823
- function onChanges(changes) {
9824
- if (lodash.has(changes, 'panelState')) {
9825
- ctrl.isToastPanelShown = !lodash.isNil(changes.panelState.currentValue);
9826
- $element.find('.panel-status-icon').removeClass(lodash.get(statusIcons, changes.panelState.previousValue)).addClass(lodash.get(statusIcons, changes.panelState.currentValue));
9827
- $element.find('.toast-status-panel').removeClass(changes.panelState.previousValue).addClass(changes.panelState.currentValue);
9828
- $element.find('.panel-status').removeClass(changes.panelState.previousValue).addClass(changes.panelState.currentValue);
9829
- }
9830
- }
9831
-
9832
- //
9833
- // Public methods
9834
- //
9835
-
9836
- /**
9837
- * Shows/hides toast panel
9838
- */
9839
- function closeToastPanel() {
9840
- ctrl.isToastPanelShown = false;
9841
- ctrl.panelState = null;
9842
-
9843
- if (lodash.isFunction(ctrl.onClose)) {
9844
- ctrl.onClose();
9845
- }
9846
-
9847
- $timeout(function () {
9848
- $rootScope.$broadcast('igzWatchWindowResize::resize');
9849
- });
9850
- }
9851
-
9852
- /**
9853
- * Gets current state
9854
- * @returns {?string} (e.g. "in-progress", "succeeded", "failed")
9855
- */
9856
- function getState() {
9857
- return ctrl.panelState;
9858
- }
9859
-
9860
- /**
9861
- * Gets status message of given state
9862
- * @param {string} state (e.g. "in-progress", "succeeded", "failed")
9863
- * @returns {string}
9864
- */
9865
- function getStateMessage(state) {
9866
- return lodash.get(ctrl, ['panelMessages', state]);
9867
- }
9868
- }
9869
- })();
9870
- 'use strict';
9871
-
9872
9872
  (function () {
9873
9873
  'use strict';
9874
9874
 
@@ -10713,6 +10713,165 @@ angular.module('angular-i18next', []).provider('i18next', [function () {
10713
10713
  })();
10714
10714
  'use strict';
10715
10715
 
10716
+ (function () {
10717
+ 'use strict';
10718
+
10719
+ NclVersionConfigurationBasicSettingsController.$inject = ['$rootScope', '$timeout', '$i18next', 'i18next', 'lodash', 'ConfigService', 'DialogsService', 'FunctionsService', 'ValidationService'];
10720
+ angular.module('iguazio.dashboard-controls').component('nclVersionConfigurationBasicSettings', {
10721
+ bindings: {
10722
+ version: '<',
10723
+ onChangeCallback: '<',
10724
+ isFunctionDeploying: '&'
10725
+ },
10726
+ templateUrl: 'nuclio/functions/version/version-configuration/tabs/version-configuration-basic-settings/version-configuration-basic-settings.tpl.html',
10727
+ controller: NclVersionConfigurationBasicSettingsController
10728
+ });
10729
+
10730
+ function NclVersionConfigurationBasicSettingsController($rootScope, $timeout, $i18next, i18next, lodash, ConfigService, DialogsService, FunctionsService, ValidationService) {
10731
+ var ctrl = this;
10732
+ var lng = i18next.language;
10733
+
10734
+ ctrl.enableFunction = false;
10735
+ ctrl.enableTimeout = false;
10736
+ ctrl.timeout = {
10737
+ min: 0,
10738
+ sec: 0
10739
+ };
10740
+ ctrl.logLevelValues = [{
10741
+ id: 'error',
10742
+ name: $i18next.t('common:ERROR', { lng: lng })
10743
+ }, {
10744
+ id: 'warn',
10745
+ name: $i18next.t('common:WARNING', { lng: lng })
10746
+ }, {
10747
+ id: 'info',
10748
+ name: $i18next.t('common:INFO', { lng: lng })
10749
+ }, {
10750
+ id: 'debug',
10751
+ name: $i18next.t('common:DEBUG', { lng: lng })
10752
+ }];
10753
+
10754
+ ctrl.$onInit = onInit;
10755
+ ctrl.$onChanges = onChanges;
10756
+
10757
+ ctrl.isDemoMode = ConfigService.isDemoMode;
10758
+ ctrl.lodash = lodash;
10759
+ ctrl.validationRules = {
10760
+ integer: ValidationService.getValidationRules('integer')
10761
+ };
10762
+
10763
+ ctrl.inputValueCallback = inputValueCallback;
10764
+ ctrl.setPriority = setPriority;
10765
+ ctrl.updateEnableStatus = updateEnableStatus;
10766
+
10767
+ //
10768
+ // Hook methods
10769
+ //
10770
+
10771
+ /**
10772
+ * Initialization method
10773
+ */
10774
+ function onInit() {
10775
+ ctrl.platformIsKube = FunctionsService.isKubePlatform();
10776
+ }
10777
+
10778
+ /**
10779
+ * On changes hook method.
10780
+ * @param {Object} changes
10781
+ */
10782
+ function onChanges(changes) {
10783
+ if (angular.isDefined(changes.version)) {
10784
+ if (ctrl.isDemoMode()) {
10785
+ var timeoutSeconds = lodash.get(ctrl.version, 'spec.timeoutSeconds');
10786
+
10787
+ if (lodash.isNumber(timeoutSeconds)) {
10788
+ ctrl.timeout.min = Math.floor(timeoutSeconds / 60);
10789
+ ctrl.timeout.sec = Math.floor(timeoutSeconds % 60);
10790
+ }
10791
+ }
10792
+
10793
+ lodash.defaultsDeep(ctrl.version, {
10794
+ spec: {
10795
+ loggerSinks: [{ level: 'debug' }]
10796
+ }
10797
+ });
10798
+
10799
+ ctrl.enableFunction = !lodash.get(ctrl.version, 'spec.disable', false);
10800
+
10801
+ $timeout(function () {
10802
+ if (ctrl.basicSettingsForm.$invalid) {
10803
+ ctrl.basicSettingsForm.$setSubmitted();
10804
+ }
10805
+ });
10806
+ }
10807
+ }
10808
+
10809
+ //
10810
+ // Public methods
10811
+ //
10812
+
10813
+ /**
10814
+ * Update data callback
10815
+ * @param {string} newData
10816
+ * @param {string} field
10817
+ */
10818
+ function inputValueCallback(newData, field) {
10819
+ lodash.set(ctrl, field, lodash.includes(field, 'timeout') ? Number(newData) : newData);
10820
+
10821
+ if (lodash.includes(field, 'timeout')) {
10822
+ lodash.set(ctrl.version, 'spec.timeoutSeconds', ctrl.timeout.min * 60 + ctrl.timeout.sec);
10823
+ } else if (lodash.startsWith(field, 'spec.securityContext.') && newData === '') {
10824
+ lodash.unset(ctrl.version, field);
10825
+ } else {
10826
+ lodash.set(ctrl.version, field, newData);
10827
+ }
10828
+
10829
+ ctrl.basicSettingsForm.$setSubmitted();
10830
+ ctrl.onChangeCallback();
10831
+
10832
+ $timeout(function () {
10833
+ $rootScope.$broadcast('change-state-deploy-button', {
10834
+ component: 'settings',
10835
+ isDisabled: !ctrl.basicSettingsForm.$valid
10836
+ });
10837
+ });
10838
+ }
10839
+
10840
+ /**
10841
+ * Sets logger level
10842
+ * @param {Object} item
10843
+ */
10844
+ function setPriority(item) {
10845
+ lodash.set(ctrl.version, 'spec.loggerSinks[0].level', item.id);
10846
+
10847
+ ctrl.onChangeCallback();
10848
+ }
10849
+
10850
+ /**
10851
+ * Switches enable/disable function status
10852
+ */
10853
+ function updateEnableStatus() {
10854
+ var apiGateways = lodash.get(ctrl.version, 'status.apiGateways', []);
10855
+ var originallyDisabled = lodash.get(ctrl.version, 'ui.deployedVersion.spec.disable', false);
10856
+
10857
+ if (!lodash.isEmpty(apiGateways) && !ctrl.enableFunction && !originallyDisabled) {
10858
+ DialogsService.alert($i18next.t('functions:ERROR_MSG.DISABLE_API_GW_FUNCTION', {
10859
+ lng: lng,
10860
+ apiGatewayName: apiGateways[0]
10861
+ }));
10862
+
10863
+ // return checkbox to enabled state
10864
+ ctrl.enableFunction = true;
10865
+ } else {
10866
+ lodash.set(ctrl.version, 'spec.disable', !ctrl.enableFunction);
10867
+
10868
+ ctrl.onChangeCallback();
10869
+ }
10870
+ }
10871
+ }
10872
+ })();
10873
+ 'use strict';
10874
+
10716
10875
  (function () {
10717
10876
  'use strict';
10718
10877
 
@@ -10905,165 +11064,6 @@ angular.module('angular-i18next', []).provider('i18next', [function () {
10905
11064
  })();
10906
11065
  'use strict';
10907
11066
 
10908
- (function () {
10909
- 'use strict';
10910
-
10911
- NclVersionConfigurationBasicSettingsController.$inject = ['$rootScope', '$timeout', '$i18next', 'i18next', 'lodash', 'ConfigService', 'DialogsService', 'FunctionsService', 'ValidationService'];
10912
- angular.module('iguazio.dashboard-controls').component('nclVersionConfigurationBasicSettings', {
10913
- bindings: {
10914
- version: '<',
10915
- onChangeCallback: '<',
10916
- isFunctionDeploying: '&'
10917
- },
10918
- templateUrl: 'nuclio/functions/version/version-configuration/tabs/version-configuration-basic-settings/version-configuration-basic-settings.tpl.html',
10919
- controller: NclVersionConfigurationBasicSettingsController
10920
- });
10921
-
10922
- function NclVersionConfigurationBasicSettingsController($rootScope, $timeout, $i18next, i18next, lodash, ConfigService, DialogsService, FunctionsService, ValidationService) {
10923
- var ctrl = this;
10924
- var lng = i18next.language;
10925
-
10926
- ctrl.enableFunction = false;
10927
- ctrl.enableTimeout = false;
10928
- ctrl.timeout = {
10929
- min: 0,
10930
- sec: 0
10931
- };
10932
- ctrl.logLevelValues = [{
10933
- id: 'error',
10934
- name: $i18next.t('common:ERROR', { lng: lng })
10935
- }, {
10936
- id: 'warn',
10937
- name: $i18next.t('common:WARNING', { lng: lng })
10938
- }, {
10939
- id: 'info',
10940
- name: $i18next.t('common:INFO', { lng: lng })
10941
- }, {
10942
- id: 'debug',
10943
- name: $i18next.t('common:DEBUG', { lng: lng })
10944
- }];
10945
-
10946
- ctrl.$onInit = onInit;
10947
- ctrl.$onChanges = onChanges;
10948
-
10949
- ctrl.isDemoMode = ConfigService.isDemoMode;
10950
- ctrl.lodash = lodash;
10951
- ctrl.validationRules = {
10952
- integer: ValidationService.getValidationRules('integer')
10953
- };
10954
-
10955
- ctrl.inputValueCallback = inputValueCallback;
10956
- ctrl.setPriority = setPriority;
10957
- ctrl.updateEnableStatus = updateEnableStatus;
10958
-
10959
- //
10960
- // Hook methods
10961
- //
10962
-
10963
- /**
10964
- * Initialization method
10965
- */
10966
- function onInit() {
10967
- ctrl.platformIsKube = FunctionsService.isKubePlatform();
10968
- }
10969
-
10970
- /**
10971
- * On changes hook method.
10972
- * @param {Object} changes
10973
- */
10974
- function onChanges(changes) {
10975
- if (angular.isDefined(changes.version)) {
10976
- if (ctrl.isDemoMode()) {
10977
- var timeoutSeconds = lodash.get(ctrl.version, 'spec.timeoutSeconds');
10978
-
10979
- if (lodash.isNumber(timeoutSeconds)) {
10980
- ctrl.timeout.min = Math.floor(timeoutSeconds / 60);
10981
- ctrl.timeout.sec = Math.floor(timeoutSeconds % 60);
10982
- }
10983
- }
10984
-
10985
- lodash.defaultsDeep(ctrl.version, {
10986
- spec: {
10987
- loggerSinks: [{ level: 'debug' }]
10988
- }
10989
- });
10990
-
10991
- ctrl.enableFunction = !lodash.get(ctrl.version, 'spec.disable', false);
10992
-
10993
- $timeout(function () {
10994
- if (ctrl.basicSettingsForm.$invalid) {
10995
- ctrl.basicSettingsForm.$setSubmitted();
10996
- }
10997
- });
10998
- }
10999
- }
11000
-
11001
- //
11002
- // Public methods
11003
- //
11004
-
11005
- /**
11006
- * Update data callback
11007
- * @param {string} newData
11008
- * @param {string} field
11009
- */
11010
- function inputValueCallback(newData, field) {
11011
- lodash.set(ctrl, field, lodash.includes(field, 'timeout') ? Number(newData) : newData);
11012
-
11013
- if (lodash.includes(field, 'timeout')) {
11014
- lodash.set(ctrl.version, 'spec.timeoutSeconds', ctrl.timeout.min * 60 + ctrl.timeout.sec);
11015
- } else if (lodash.startsWith(field, 'spec.securityContext.') && newData === '') {
11016
- lodash.unset(ctrl.version, field);
11017
- } else {
11018
- lodash.set(ctrl.version, field, newData);
11019
- }
11020
-
11021
- ctrl.basicSettingsForm.$setSubmitted();
11022
- ctrl.onChangeCallback();
11023
-
11024
- $timeout(function () {
11025
- $rootScope.$broadcast('change-state-deploy-button', {
11026
- component: 'settings',
11027
- isDisabled: !ctrl.basicSettingsForm.$valid
11028
- });
11029
- });
11030
- }
11031
-
11032
- /**
11033
- * Sets logger level
11034
- * @param {Object} item
11035
- */
11036
- function setPriority(item) {
11037
- lodash.set(ctrl.version, 'spec.loggerSinks[0].level', item.id);
11038
-
11039
- ctrl.onChangeCallback();
11040
- }
11041
-
11042
- /**
11043
- * Switches enable/disable function status
11044
- */
11045
- function updateEnableStatus() {
11046
- var apiGateways = lodash.get(ctrl.version, 'status.apiGateways', []);
11047
- var originallyDisabled = lodash.get(ctrl.version, 'ui.deployedVersion.spec.disable', false);
11048
-
11049
- if (!lodash.isEmpty(apiGateways) && !ctrl.enableFunction && !originallyDisabled) {
11050
- DialogsService.alert($i18next.t('functions:ERROR_MSG.DISABLE_API_GW_FUNCTION', {
11051
- lng: lng,
11052
- apiGatewayName: apiGateways[0]
11053
- }));
11054
-
11055
- // return checkbox to enabled state
11056
- ctrl.enableFunction = true;
11057
- } else {
11058
- lodash.set(ctrl.version, 'spec.disable', !ctrl.enableFunction);
11059
-
11060
- ctrl.onChangeCallback();
11061
- }
11062
- }
11063
- }
11064
- })();
11065
- 'use strict';
11066
-
11067
11067
  (function () {
11068
11068
  'use strict';
11069
11069
 
@@ -16575,14 +16575,55 @@ angular.module('angular-i18next', []).provider('i18next', [function () {
16575
16575
  (function () {
16576
16576
  'use strict';
16577
16577
 
16578
- angular.module('iguazio.dashboard-controls').component('nclFunction', {
16579
- bindings: {},
16580
- templateUrl: 'nuclio/functions/function/ncl-function.tpl.html',
16581
- controller: NclFunctionController
16578
+ DeployDeletedFunctionDialogController.$inject = ['$state', '$rootScope', 'EventHelperService'];
16579
+ angular.module('iguazio.dashboard-controls').component('nclDeployDeletedFunctionDialog', {
16580
+ bindings: {
16581
+ closeDialog: '&',
16582
+ deploy: '&',
16583
+ version: '<'
16584
+ },
16585
+ templateUrl: 'nuclio/functions/deploy-deleted-function-dialog/deploy-deleted-function-dialog.tpl.html',
16586
+ controller: DeployDeletedFunctionDialogController
16582
16587
  });
16583
16588
 
16584
- function NclFunctionController() {
16589
+ function DeployDeletedFunctionDialogController($state, $rootScope, EventHelperService) {
16585
16590
  var ctrl = this;
16591
+
16592
+ ctrl.deployFunction = deployFunction;
16593
+ ctrl.goToFunctions = goToFunctions;
16594
+ ctrl.onClose = onClose;
16595
+
16596
+ //
16597
+ // Public methods
16598
+ //
16599
+
16600
+ /**
16601
+ * Closes dialog
16602
+ * @param {Event} [event]
16603
+ */
16604
+ function onClose(event) {
16605
+ if (angular.isUndefined(event) || event.keyCode === EventHelperService.ENTER) {
16606
+ ctrl.closeDialog();
16607
+ }
16608
+ }
16609
+
16610
+ /**
16611
+ * Redirect to functions panel
16612
+ */
16613
+ function goToFunctions() {
16614
+ $state.go('app.project.functions');
16615
+
16616
+ ctrl.closeDialog();
16617
+ }
16618
+
16619
+ /**
16620
+ * Deploy function
16621
+ * @param {Event} [event]
16622
+ */
16623
+ function deployFunction(event) {
16624
+ ctrl.deploy(event, ctrl.version);
16625
+ ctrl.closeDialog();
16626
+ }
16586
16627
  }
16587
16628
  })();
16588
16629
  'use strict';
@@ -16822,69 +16863,28 @@ var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = [
16822
16863
  _iterator.return();
16823
16864
  }
16824
16865
  } finally {
16825
- if (_didIteratorError) {
16826
- throw _iteratorError;
16827
- }
16828
- }
16829
- }
16830
- }
16831
- }
16832
- }
16833
- })();
16834
- 'use strict';
16835
-
16836
- (function () {
16837
- 'use strict';
16838
-
16839
- DeployDeletedFunctionDialogController.$inject = ['$state', '$rootScope', 'EventHelperService'];
16840
- angular.module('iguazio.dashboard-controls').component('nclDeployDeletedFunctionDialog', {
16841
- bindings: {
16842
- closeDialog: '&',
16843
- deploy: '&',
16844
- version: '<'
16845
- },
16846
- templateUrl: 'nuclio/functions/deploy-deleted-function-dialog/deploy-deleted-function-dialog.tpl.html',
16847
- controller: DeployDeletedFunctionDialogController
16848
- });
16849
-
16850
- function DeployDeletedFunctionDialogController($state, $rootScope, EventHelperService) {
16851
- var ctrl = this;
16852
-
16853
- ctrl.deployFunction = deployFunction;
16854
- ctrl.goToFunctions = goToFunctions;
16855
- ctrl.onClose = onClose;
16856
-
16857
- //
16858
- // Public methods
16859
- //
16860
-
16861
- /**
16862
- * Closes dialog
16863
- * @param {Event} [event]
16864
- */
16865
- function onClose(event) {
16866
- if (angular.isUndefined(event) || event.keyCode === EventHelperService.ENTER) {
16867
- ctrl.closeDialog();
16866
+ if (_didIteratorError) {
16867
+ throw _iteratorError;
16868
+ }
16869
+ }
16870
+ }
16868
16871
  }
16869
16872
  }
16873
+ }
16874
+ })();
16875
+ 'use strict';
16870
16876
 
16871
- /**
16872
- * Redirect to functions panel
16873
- */
16874
- function goToFunctions() {
16875
- $state.go('app.project.functions');
16877
+ (function () {
16878
+ 'use strict';
16876
16879
 
16877
- ctrl.closeDialog();
16878
- }
16880
+ angular.module('iguazio.dashboard-controls').component('nclFunction', {
16881
+ bindings: {},
16882
+ templateUrl: 'nuclio/functions/function/ncl-function.tpl.html',
16883
+ controller: NclFunctionController
16884
+ });
16879
16885
 
16880
- /**
16881
- * Deploy function
16882
- * @param {Event} [event]
16883
- */
16884
- function deployFunction(event) {
16885
- ctrl.deploy(event, ctrl.version);
16886
- ctrl.closeDialog();
16887
- }
16886
+ function NclFunctionController() {
16887
+ var ctrl = this;
16888
16888
  }
16889
16889
  })();
16890
16890
  'use strict';
@@ -17367,6 +17367,86 @@ var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = [
17367
17367
  })();
17368
17368
  'use strict';
17369
17369
 
17370
+ (function () {
17371
+ 'use strict';
17372
+
17373
+ OverrideFunctionDialogController.$inject = ['$state', 'lodash', 'EventHelperService'];
17374
+ angular.module('iguazio.dashboard-controls').component('nclOverrideFunctionDialog', {
17375
+ bindings: {
17376
+ closeDialog: '&',
17377
+ existingFunction: '<',
17378
+ newFunction: '<',
17379
+ project: '<'
17380
+ },
17381
+ templateUrl: 'nuclio/functions/override-function-dialog/override-function-dialog.tpl.html',
17382
+ controller: OverrideFunctionDialogController
17383
+ });
17384
+
17385
+ function OverrideFunctionDialogController($state, lodash, EventHelperService) {
17386
+ var ctrl = this;
17387
+
17388
+ ctrl.onClose = onClose;
17389
+ ctrl.openExistingFunction = openExistingFunction;
17390
+ ctrl.overrideFunction = overrideFunction;
17391
+
17392
+ //
17393
+ // Public methods
17394
+ //
17395
+
17396
+ /**
17397
+ * Closes dialog
17398
+ * @param {Event} [event]
17399
+ */
17400
+ function onClose(event) {
17401
+ if (angular.isUndefined(event) || event.keyCode === EventHelperService.ENTER) {
17402
+ ctrl.closeDialog();
17403
+ }
17404
+ }
17405
+
17406
+ /**
17407
+ * Opens the existing function
17408
+ */
17409
+ function openExistingFunction() {
17410
+ var projectName = lodash.get(ctrl.existingFunction, ['metadata', 'labels', 'nuclio.io/project-name']);
17411
+
17412
+ $state.go('app.project.function.edit.code', {
17413
+ id: projectName,
17414
+ projectId: projectName,
17415
+ projectNamespace: ctrl.project.metadata.namespace,
17416
+ functionId: ctrl.existingFunction.metadata.name
17417
+ });
17418
+
17419
+ ctrl.closeDialog();
17420
+ }
17421
+
17422
+ /**
17423
+ * Overrides the existing function
17424
+ */
17425
+ function overrideFunction() {
17426
+ lodash.merge(ctrl.newFunction, {
17427
+ status: {
17428
+ state: ''
17429
+ },
17430
+ ui: {
17431
+ overwrite: true
17432
+ }
17433
+ });
17434
+
17435
+ $state.go('app.project.function.edit.code', {
17436
+ isNewFunction: true,
17437
+ id: ctrl.project.metadata.name,
17438
+ projectId: ctrl.project.metadata.name,
17439
+ projectNamespace: ctrl.project.metadata.namespace,
17440
+ functionId: ctrl.newFunction.metadata.name,
17441
+ functionData: ctrl.newFunction
17442
+ });
17443
+
17444
+ ctrl.closeDialog();
17445
+ }
17446
+ }
17447
+ })();
17448
+ 'use strict';
17449
+
17370
17450
  /*eslint complexity: ["error", 15]*/
17371
17451
  (function () {
17372
17452
  'use strict';
@@ -17927,208 +18007,72 @@ var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = [
17927
18007
  '{{ .ResourceName }}': lodash.get(ctrl.version, 'metadata.name'),
17928
18008
  '{{ .ProjectName }}': lodash.get(ctrl.project, 'metadata.name'),
17929
18009
  '{{ .Namespace }}': lodash.get(ctrl.project, 'metadata.namespace')
17930
- };
17931
-
17932
- ctrl.version.ui.ingressHost = fillTemplate(ingressHostTemplate, parameters);
17933
- }
17934
-
17935
- /**
17936
- * Sets the function version to a new value.
17937
- * @param {Object} version - The new value.
17938
- */
17939
- function setVersion(version) {
17940
- var versionUi = ctrl.version.ui;
17941
- ctrl.version = version;
17942
- ctrl.version.ui = versionUi;
17943
- }
17944
-
17945
- /**
17946
- * Prevents change state if there are unsaved data
17947
- * @param {Event} transition
17948
- */
17949
- function stateChangeStart(transition) {
17950
- var toState = transition.$to();
17951
- if (lodash.get($state, 'params.functionId') !== transition.params('to').functionId && !VersionHelperService.isVersionDeployed(ctrl.version)) {
17952
- transition.abort();
17953
-
17954
- DialogsService.confirm($i18next.t('common:LEAVE_PAGE_CONFIRM', { lng: lng }), $i18next.t('common:LEAVE', { lng: lng }), $i18next.t('common:DONT_LEAVE', { lng: lng })).then(function () {
17955
-
17956
- // unsubscribe from broadcast event
17957
- deregisterFunction();
17958
- $state.go(toState.name, transition.params('to'));
17959
- });
17960
- }
17961
- }
17962
-
17963
- /**
17964
- * Terminates the interval of function state polling.
17965
- */
17966
- function terminateInterval() {
17967
- if (!lodash.isNil(interval)) {
17968
- $interval.cancel(interval);
17969
- interval = null;
17970
- }
17971
- }
17972
-
17973
- /**
17974
- * Updates the status tab header's indicator color and tooltip text and color to reflect the function's state.
17975
- */
17976
- function updateStatusTabIndicator() {
17977
- var state = lodash.get(ctrl.version, 'status.state');
17978
- var disabled = lodash.get(ctrl.version, 'spec.disable');
17979
-
17980
- var deployedStateToKind = {
17981
- ready: disabled ? '' : 'ready',
17982
- error: 'error',
17983
- unhealthy: 'error',
17984
- imported: '',
17985
- scaledToZero: ''
17986
- };
17987
- var kind = VersionHelperService.isVersionDeployed(ctrl.version) ? lodash.defaultTo(deployedStateToKind[state], 'building') : '';
17988
-
17989
- var statusTab = lodash.find(ctrl.navigationTabsConfig, { id: 'status' });
17990
- statusTab.indicator = {
17991
- lightClass: kind === '' ? '' : 'ncl-status-' + kind,
17992
- tooltipClass: kind === '' ? '' : 'ncl-status-tooltip-' + kind,
17993
- tooltipIconClass: kind === '' ? '' : 'ncl-icon-' + kind,
17994
- tooltipText: FunctionsService.getDisplayStatus(ctrl.version)
17995
- };
17996
- }
17997
- }
17998
- })();
17999
- 'use strict';
18000
-
18001
- (function () {
18002
- 'use strict';
18003
-
18004
- OverrideFunctionDialogController.$inject = ['$state', 'lodash', 'EventHelperService'];
18005
- angular.module('iguazio.dashboard-controls').component('nclOverrideFunctionDialog', {
18006
- bindings: {
18007
- closeDialog: '&',
18008
- existingFunction: '<',
18009
- newFunction: '<',
18010
- project: '<'
18011
- },
18012
- templateUrl: 'nuclio/functions/override-function-dialog/override-function-dialog.tpl.html',
18013
- controller: OverrideFunctionDialogController
18014
- });
18015
-
18016
- function OverrideFunctionDialogController($state, lodash, EventHelperService) {
18017
- var ctrl = this;
18018
-
18019
- ctrl.onClose = onClose;
18020
- ctrl.openExistingFunction = openExistingFunction;
18021
- ctrl.overrideFunction = overrideFunction;
18022
-
18023
- //
18024
- // Public methods
18025
- //
18026
-
18027
- /**
18028
- * Closes dialog
18029
- * @param {Event} [event]
18030
- */
18031
- function onClose(event) {
18032
- if (angular.isUndefined(event) || event.keyCode === EventHelperService.ENTER) {
18033
- ctrl.closeDialog();
18034
- }
18035
- }
18036
-
18037
- /**
18038
- * Opens the existing function
18039
- */
18040
- function openExistingFunction() {
18041
- var projectName = lodash.get(ctrl.existingFunction, ['metadata', 'labels', 'nuclio.io/project-name']);
18042
-
18043
- $state.go('app.project.function.edit.code', {
18044
- id: projectName,
18045
- projectId: projectName,
18046
- projectNamespace: ctrl.project.metadata.namespace,
18047
- functionId: ctrl.existingFunction.metadata.name
18048
- });
18049
-
18050
- ctrl.closeDialog();
18051
- }
18052
-
18053
- /**
18054
- * Overrides the existing function
18055
- */
18056
- function overrideFunction() {
18057
- lodash.merge(ctrl.newFunction, {
18058
- status: {
18059
- state: ''
18060
- },
18061
- ui: {
18062
- overwrite: true
18063
- }
18064
- });
18065
-
18066
- $state.go('app.project.function.edit.code', {
18067
- isNewFunction: true,
18068
- id: ctrl.project.metadata.name,
18069
- projectId: ctrl.project.metadata.name,
18070
- projectNamespace: ctrl.project.metadata.namespace,
18071
- functionId: ctrl.newFunction.metadata.name,
18072
- functionData: ctrl.newFunction
18073
- });
18010
+ };
18074
18011
 
18075
- ctrl.closeDialog();
18012
+ ctrl.version.ui.ingressHost = fillTemplate(ingressHostTemplate, parameters);
18076
18013
  }
18077
- }
18078
- })();
18079
- 'use strict';
18080
-
18081
- (function () {
18082
- 'use strict';
18083
-
18084
- NclDeployLogController.$inject = ['lodash'];
18085
- angular.module('iguazio.dashboard-controls').component('nclDeployLog', {
18086
- bindings: {
18087
- logEntries: '<'
18088
- },
18089
- templateUrl: 'nuclio/common/components/deploy-log/deploy-log.tpl.html',
18090
- controller: NclDeployLogController
18091
- });
18092
-
18093
- function NclDeployLogController(lodash) {
18094
- var ctrl = this;
18095
18014
 
18096
- ctrl.scrollCofig = {
18097
- advanced: {
18098
- updateOnContentResize: true
18099
- },
18100
- theme: 'light-thin'
18101
- };
18015
+ /**
18016
+ * Sets the function version to a new value.
18017
+ * @param {Object} version - The new value.
18018
+ */
18019
+ function setVersion(version) {
18020
+ var versionUi = ctrl.version.ui;
18021
+ ctrl.version = version;
18022
+ ctrl.version.ui = versionUi;
18023
+ }
18102
18024
 
18103
- ctrl.lodash = lodash;
18025
+ /**
18026
+ * Prevents change state if there are unsaved data
18027
+ * @param {Event} transition
18028
+ */
18029
+ function stateChangeStart(transition) {
18030
+ var toState = transition.$to();
18031
+ if (lodash.get($state, 'params.functionId') !== transition.params('to').functionId && !VersionHelperService.isVersionDeployed(ctrl.version)) {
18032
+ transition.abort();
18104
18033
 
18105
- ctrl.getLogLevel = getLogLevel;
18106
- ctrl.getLogParams = getLogParams;
18034
+ DialogsService.confirm($i18next.t('common:LEAVE_PAGE_CONFIRM', { lng: lng }), $i18next.t('common:LEAVE', { lng: lng }), $i18next.t('common:DONT_LEAVE', { lng: lng })).then(function () {
18107
18035
 
18108
- //
18109
- // Public methods
18110
- //
18036
+ // unsubscribe from broadcast event
18037
+ deregisterFunction();
18038
+ $state.go(toState.name, transition.params('to'));
18039
+ });
18040
+ }
18041
+ }
18111
18042
 
18112
18043
  /**
18113
- * Get log level display value
18114
- * @param {string} level - the level model value (one of: 'debug', 'info', 'warn', 'error')
18115
- * @returns {string} the log level display value
18044
+ * Terminates the interval of function state polling.
18116
18045
  */
18117
- function getLogLevel(level) {
18118
- return lodash.first(level).toUpperCase();
18046
+ function terminateInterval() {
18047
+ if (!lodash.isNil(interval)) {
18048
+ $interval.cancel(interval);
18049
+ interval = null;
18050
+ }
18119
18051
  }
18120
18052
 
18121
18053
  /**
18122
- * Get log parameters display value
18123
- * @param {string} logEntry - the log entry that includes the parameters
18124
- * @returns {string} the log level display value
18054
+ * Updates the status tab header's indicator color and tooltip text and color to reflect the function's state.
18125
18055
  */
18126
- function getLogParams(logEntry) {
18127
- var params = lodash.omit(logEntry, ['name', 'time', 'level', 'message', 'err']);
18056
+ function updateStatusTabIndicator() {
18057
+ var state = lodash.get(ctrl.version, 'status.state');
18058
+ var disabled = lodash.get(ctrl.version, 'spec.disable');
18128
18059
 
18129
- return lodash.isEmpty(params) ? '' : '[' + lodash.map(params, function (value, key) {
18130
- return key + ': ' + angular.toJson(value);
18131
- }).join(', ').replace(/\\n/g, '\n').replace(/\\"/g, '"') + ']';
18060
+ var deployedStateToKind = {
18061
+ ready: disabled ? '' : 'ready',
18062
+ error: 'error',
18063
+ unhealthy: 'error',
18064
+ imported: '',
18065
+ scaledToZero: ''
18066
+ };
18067
+ var kind = VersionHelperService.isVersionDeployed(ctrl.version) ? lodash.defaultTo(deployedStateToKind[state], 'building') : '';
18068
+
18069
+ var statusTab = lodash.find(ctrl.navigationTabsConfig, { id: 'status' });
18070
+ statusTab.indicator = {
18071
+ lightClass: kind === '' ? '' : 'ncl-status-' + kind,
18072
+ tooltipClass: kind === '' ? '' : 'ncl-status-tooltip-' + kind,
18073
+ tooltipIconClass: kind === '' ? '' : 'ncl-icon-' + kind,
18074
+ tooltipText: FunctionsService.getDisplayStatus(ctrl.version)
18075
+ };
18132
18076
  }
18133
18077
  }
18134
18078
  })();
@@ -18137,71 +18081,40 @@ var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = [
18137
18081
  (function () {
18138
18082
  'use strict';
18139
18083
 
18140
- NclCollapsingRowController.$inject = ['$i18next', '$timeout', 'i18next', 'lodash', 'DialogsService', 'FunctionsService', 'MaskService'];
18141
- angular.module('iguazio.dashboard-controls').component('nclCollapsingRow', {
18084
+ NclBreadcrumbsController.$inject = ['$scope', '$state', '$stateParams', '$transitions', 'lodash'];
18085
+ angular.module('iguazio.dashboard-controls').component('nclBreadcrumbs', {
18142
18086
  bindings: {
18143
- actionHandlerCallback: '&',
18144
- readOnly: '<?',
18145
- item: '<',
18146
- itemIndex: '<?',
18147
- type: '@',
18148
- deleteTestId: '@?'
18087
+ getProjects: '&',
18088
+ getFunctions: '&'
18149
18089
  },
18150
- templateUrl: 'nuclio/common/components/collapsing-row/collapsing-row.tpl.html',
18151
- controller: NclCollapsingRowController,
18152
- transclude: true
18090
+ templateUrl: 'nuclio/common/components/breadcrumbs/breadcrumbs.tpl.html',
18091
+ controller: NclBreadcrumbsController
18153
18092
  });
18154
18093
 
18155
- function NclCollapsingRowController($i18next, $timeout, i18next, lodash, DialogsService, FunctionsService, MaskService) {
18094
+ function NclBreadcrumbsController($scope, $state, $stateParams, $transitions, lodash) {
18156
18095
  var ctrl = this;
18157
- var lng = i18next.language;
18158
18096
 
18159
- ctrl.actions = [];
18097
+ ctrl.mainHeaderTitle = {};
18160
18098
 
18161
18099
  ctrl.$onInit = onInit;
18162
18100
 
18163
- ctrl.isNil = lodash.isNil;
18164
- ctrl.isNumber = lodash.isNumber;
18165
- ctrl.getMask = MaskService.getMask;
18166
-
18167
- ctrl.getAttributeValue = getAttributeValue;
18168
- ctrl.isVolumeType = isVolumeType;
18169
- ctrl.onCollapse = onCollapse;
18170
- ctrl.onClickAction = onClickAction;
18171
- ctrl.onFireAction = onFireAction;
18172
- ctrl.showDotMenu = showDotMenu;
18173
- ctrl.toggleItem = toggleItem;
18101
+ ctrl.goToProjectsList = goToProjectsList;
18102
+ ctrl.goToProjectScreen = goToProjectScreen;
18103
+ ctrl.goToFunctionScreen = goToFunctionScreen;
18174
18104
 
18175
18105
  //
18176
18106
  // Hook methods
18177
18107
  //
18178
18108
 
18179
18109
  /**
18180
- * Initialization method
18110
+ * Initialization function
18181
18111
  */
18182
18112
  function onInit() {
18183
- lodash.defaultsDeep(ctrl.item, {
18184
- ui: {
18185
- editModeActive: false,
18186
- expandable: true
18187
- }
18188
- });
18189
-
18190
- ctrl.classList = FunctionsService.getClassesList(ctrl.type);
18191
- ctrl.displayedAttributesFields = lodash.chain(ctrl.classList).find(function (aClass) {
18192
- return aClass.id === ctrl.item.kind;
18193
- }).get('fields', []).filter(function (field) {
18194
- return lodash.get(field, 'path', '').startsWith('attributes');
18195
- }).map(function (field) {
18196
- return field.name;
18197
- }).value();
18113
+ setMainHeaderTitle();
18198
18114
 
18199
- if (!lodash.isEmpty(ctrl.item.kind)) {
18200
- ctrl.selectedClass = lodash.find(ctrl.classList, ['id', ctrl.item.kind]);
18201
- ctrl.item.ui.selectedClass = ctrl.selectedClass;
18202
- }
18115
+ $scope.$on('update-main-header-title', setMainHeaderTitle);
18203
18116
 
18204
- ctrl.actions = initActions();
18117
+ $transitions.onSuccess({}, onStateChangeSuccess);
18205
18118
  }
18206
18119
 
18207
18120
  //
@@ -18209,87 +18122,26 @@ var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = [
18209
18122
  //
18210
18123
 
18211
18124
  /**
18212
- * Returns attribute value
18213
- * @param {string} key - attribute key
18214
- * @param {string|Object} value - attribute value
18215
- * @returns {string|Object}
18216
- */
18217
- function getAttributeValue(key, value) {
18218
- var attrValue = value;
18219
-
18220
- if (key === 'schedule') {
18221
- attrValue = '0 ' + value;
18222
- } else if (MaskService.commonSensitiveFields.includes(key) || key === 'sasl') {
18223
- attrValue = typeof value === 'string' ? MaskService.getMask(value) : MaskService.getObjectWithMask(value);
18224
- }
18225
-
18226
- return attrValue;
18227
- }
18228
-
18229
- /**
18230
- * Checks if input have to be visible for specific item type
18231
- * @returns {boolean}
18232
- */
18233
- function isVolumeType() {
18234
- return ctrl.type === 'volume';
18235
- }
18236
-
18237
- /**
18238
- * Changes item's expanded state
18239
- */
18240
- function onCollapse(event) {
18241
- if (!ctrl.item.ui.editModeActive) {
18242
- ctrl.actionHandlerCallback({
18243
- actionType: 'edit',
18244
- selectedItem: ctrl.item,
18245
- index: ctrl.itemIndex
18246
- });
18247
- event.stopPropagation();
18248
- } else {
18249
- $timeout(function () {
18250
- if (ctrl.item.ui.expandable) {
18251
- ctrl.item.ui.editModeActive = false;
18252
- }
18253
- });
18254
- }
18255
- }
18256
-
18257
- /**
18258
- * Handler on action click
18259
- * @param {Object} action - action that was clicked (e.g. `delete`)
18125
+ * Redirects to the projects screen
18260
18126
  */
18261
- function onClickAction(action) {
18262
- if (lodash.isNonEmpty(action.confirm)) {
18263
- showConfirmDialog(action);
18264
- } else {
18265
- onFireAction(action.id);
18266
- }
18127
+ function goToProjectsList() {
18128
+ $state.go('app.projects');
18267
18129
  }
18268
18130
 
18269
18131
  /**
18270
- * According to given action name calls proper action handler
18271
- * @param {string} actionType - a type of action
18132
+ * Redirects to the project screen
18272
18133
  */
18273
- function onFireAction(actionType) {
18274
- ctrl.actionHandlerCallback({
18275
- actionType: actionType,
18276
- selectedItem: ctrl.item,
18277
- index: ctrl.itemIndex
18134
+ function goToProjectScreen() {
18135
+ $state.go('app.project', {
18136
+ projectId: $stateParams.projectId
18278
18137
  });
18279
18138
  }
18280
18139
 
18281
18140
  /**
18282
- * Checks if show dot menu
18283
- */
18284
- function showDotMenu() {
18285
- return ctrl.actions.length > 1;
18286
- }
18287
-
18288
- /**
18289
- * Enables/disables item
18141
+ * Redirects to the function screen
18290
18142
  */
18291
- function toggleItem() {
18292
- ctrl.item.enable = !ctrl.item.enable;
18143
+ function goToFunctionScreen() {
18144
+ $state.go('app.project.function.edit.code');
18293
18145
  }
18294
18146
 
18295
18147
  //
@@ -18297,38 +18149,35 @@ var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = [
18297
18149
  //
18298
18150
 
18299
18151
  /**
18300
- * Shows confirm dialog
18301
- * @param {Object} action - e.g. `delete`
18152
+ * Dynamically set Main Header Title on broadcast and on initial page load
18153
+ * @param {Object} [event]
18154
+ * @param {Object} [data]
18302
18155
  */
18303
- function showConfirmDialog(action) {
18304
- var message = lodash.isNil(action.confirm.description) ? action.confirm.message : {
18305
- message: action.confirm.message,
18306
- description: action.confirm.description
18307
- };
18308
-
18309
- DialogsService.confirm(message, action.confirm.yesLabel, action.confirm.noLabel, action.confirm.type).then(function () {
18310
- onFireAction(action.id);
18311
- });
18156
+ function setMainHeaderTitle(event, data) {
18157
+ if (!lodash.isNil(data)) {
18158
+ lodash.assign(ctrl.mainHeaderTitle, data);
18159
+ } else {
18160
+ ctrl.mainHeaderTitle = { title: $state.current.data.mainHeaderTitle };
18161
+ }
18312
18162
  }
18313
18163
 
18314
18164
  /**
18315
- * Initializes actions
18316
- * @returns {Object[]} - list of actions
18165
+ * Dynamically pre-set Main Header Title on UI router state change, sets position of main wrapper and navigation
18166
+ * tabs config
18167
+ * Needed for better UX - header title changes correctly even before controller data resolved and broadcast
18168
+ * have been sent
18169
+ * @param {Object} transition
18317
18170
  */
18318
- function initActions() {
18319
- return [{
18320
- label: $i18next.t('common:DELETE', { lng: lng }),
18321
- id: 'delete',
18322
- icon: 'igz-icon-trash',
18323
- active: true,
18324
- confirm: {
18325
- message: $i18next.t('functions:DELETE_ITEM', { lng: lng }),
18326
- description: $i18next.t('functions:DELETE_DESCRIPTION', { lng: lng }),
18327
- yesLabel: $i18next.t('common:YES_DELETE', { lng: lng }),
18328
- noLabel: $i18next.t('common:CANCEL', { lng: lng }),
18329
- type: 'nuclio_alert'
18330
- }
18331
- }];
18171
+ function onStateChangeSuccess(transition) {
18172
+ var toState = transition.$to();
18173
+
18174
+ // Check to exclude prototypical inheritance of the `mainHeaderTitle` property from parent router state
18175
+ if (lodash.has(toState.data, 'mainHeaderTitle')) {
18176
+
18177
+ ctrl.mainHeaderTitle = {
18178
+ title: toState.data.mainHeaderTitle
18179
+ };
18180
+ }
18332
18181
  }
18333
18182
  }
18334
18183
  })();
@@ -18514,40 +18363,71 @@ var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = [
18514
18363
  (function () {
18515
18364
  'use strict';
18516
18365
 
18517
- NclBreadcrumbsController.$inject = ['$scope', '$state', '$stateParams', '$transitions', 'lodash'];
18518
- angular.module('iguazio.dashboard-controls').component('nclBreadcrumbs', {
18366
+ NclCollapsingRowController.$inject = ['$i18next', '$timeout', 'i18next', 'lodash', 'DialogsService', 'FunctionsService', 'MaskService'];
18367
+ angular.module('iguazio.dashboard-controls').component('nclCollapsingRow', {
18519
18368
  bindings: {
18520
- getProjects: '&',
18521
- getFunctions: '&'
18369
+ actionHandlerCallback: '&',
18370
+ readOnly: '<?',
18371
+ item: '<',
18372
+ itemIndex: '<?',
18373
+ type: '@',
18374
+ deleteTestId: '@?'
18522
18375
  },
18523
- templateUrl: 'nuclio/common/components/breadcrumbs/breadcrumbs.tpl.html',
18524
- controller: NclBreadcrumbsController
18376
+ templateUrl: 'nuclio/common/components/collapsing-row/collapsing-row.tpl.html',
18377
+ controller: NclCollapsingRowController,
18378
+ transclude: true
18525
18379
  });
18526
18380
 
18527
- function NclBreadcrumbsController($scope, $state, $stateParams, $transitions, lodash) {
18381
+ function NclCollapsingRowController($i18next, $timeout, i18next, lodash, DialogsService, FunctionsService, MaskService) {
18528
18382
  var ctrl = this;
18383
+ var lng = i18next.language;
18529
18384
 
18530
- ctrl.mainHeaderTitle = {};
18385
+ ctrl.actions = [];
18531
18386
 
18532
18387
  ctrl.$onInit = onInit;
18533
18388
 
18534
- ctrl.goToProjectsList = goToProjectsList;
18535
- ctrl.goToProjectScreen = goToProjectScreen;
18536
- ctrl.goToFunctionScreen = goToFunctionScreen;
18389
+ ctrl.isNil = lodash.isNil;
18390
+ ctrl.isNumber = lodash.isNumber;
18391
+ ctrl.getMask = MaskService.getMask;
18392
+
18393
+ ctrl.getAttributeValue = getAttributeValue;
18394
+ ctrl.isVolumeType = isVolumeType;
18395
+ ctrl.onCollapse = onCollapse;
18396
+ ctrl.onClickAction = onClickAction;
18397
+ ctrl.onFireAction = onFireAction;
18398
+ ctrl.showDotMenu = showDotMenu;
18399
+ ctrl.toggleItem = toggleItem;
18537
18400
 
18538
18401
  //
18539
18402
  // Hook methods
18540
18403
  //
18541
18404
 
18542
18405
  /**
18543
- * Initialization function
18406
+ * Initialization method
18544
18407
  */
18545
18408
  function onInit() {
18546
- setMainHeaderTitle();
18409
+ lodash.defaultsDeep(ctrl.item, {
18410
+ ui: {
18411
+ editModeActive: false,
18412
+ expandable: true
18413
+ }
18414
+ });
18547
18415
 
18548
- $scope.$on('update-main-header-title', setMainHeaderTitle);
18416
+ ctrl.classList = FunctionsService.getClassesList(ctrl.type);
18417
+ ctrl.displayedAttributesFields = lodash.chain(ctrl.classList).find(function (aClass) {
18418
+ return aClass.id === ctrl.item.kind;
18419
+ }).get('fields', []).filter(function (field) {
18420
+ return lodash.get(field, 'path', '').startsWith('attributes');
18421
+ }).map(function (field) {
18422
+ return field.name;
18423
+ }).value();
18549
18424
 
18550
- $transitions.onSuccess({}, onStateChangeSuccess);
18425
+ if (!lodash.isEmpty(ctrl.item.kind)) {
18426
+ ctrl.selectedClass = lodash.find(ctrl.classList, ['id', ctrl.item.kind]);
18427
+ ctrl.item.ui.selectedClass = ctrl.selectedClass;
18428
+ }
18429
+
18430
+ ctrl.actions = initActions();
18551
18431
  }
18552
18432
 
18553
18433
  //
@@ -18555,26 +18435,87 @@ var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = [
18555
18435
  //
18556
18436
 
18557
18437
  /**
18558
- * Redirects to the projects screen
18438
+ * Returns attribute value
18439
+ * @param {string} key - attribute key
18440
+ * @param {string|Object} value - attribute value
18441
+ * @returns {string|Object}
18559
18442
  */
18560
- function goToProjectsList() {
18561
- $state.go('app.projects');
18443
+ function getAttributeValue(key, value) {
18444
+ var attrValue = value;
18445
+
18446
+ if (key === 'schedule') {
18447
+ attrValue = '0 ' + value;
18448
+ } else if (MaskService.commonSensitiveFields.includes(key) || key === 'sasl') {
18449
+ attrValue = typeof value === 'string' ? MaskService.getMask(value) : MaskService.getObjectWithMask(value);
18450
+ }
18451
+
18452
+ return attrValue;
18562
18453
  }
18563
18454
 
18564
18455
  /**
18565
- * Redirects to the project screen
18456
+ * Checks if input have to be visible for specific item type
18457
+ * @returns {boolean}
18566
18458
  */
18567
- function goToProjectScreen() {
18568
- $state.go('app.project', {
18569
- projectId: $stateParams.projectId
18459
+ function isVolumeType() {
18460
+ return ctrl.type === 'volume';
18461
+ }
18462
+
18463
+ /**
18464
+ * Changes item's expanded state
18465
+ */
18466
+ function onCollapse(event) {
18467
+ if (!ctrl.item.ui.editModeActive) {
18468
+ ctrl.actionHandlerCallback({
18469
+ actionType: 'edit',
18470
+ selectedItem: ctrl.item,
18471
+ index: ctrl.itemIndex
18472
+ });
18473
+ event.stopPropagation();
18474
+ } else {
18475
+ $timeout(function () {
18476
+ if (ctrl.item.ui.expandable) {
18477
+ ctrl.item.ui.editModeActive = false;
18478
+ }
18479
+ });
18480
+ }
18481
+ }
18482
+
18483
+ /**
18484
+ * Handler on action click
18485
+ * @param {Object} action - action that was clicked (e.g. `delete`)
18486
+ */
18487
+ function onClickAction(action) {
18488
+ if (lodash.isNonEmpty(action.confirm)) {
18489
+ showConfirmDialog(action);
18490
+ } else {
18491
+ onFireAction(action.id);
18492
+ }
18493
+ }
18494
+
18495
+ /**
18496
+ * According to given action name calls proper action handler
18497
+ * @param {string} actionType - a type of action
18498
+ */
18499
+ function onFireAction(actionType) {
18500
+ ctrl.actionHandlerCallback({
18501
+ actionType: actionType,
18502
+ selectedItem: ctrl.item,
18503
+ index: ctrl.itemIndex
18570
18504
  });
18571
18505
  }
18572
18506
 
18573
18507
  /**
18574
- * Redirects to the function screen
18508
+ * Checks if show dot menu
18575
18509
  */
18576
- function goToFunctionScreen() {
18577
- $state.go('app.project.function.edit.code');
18510
+ function showDotMenu() {
18511
+ return ctrl.actions.length > 1;
18512
+ }
18513
+
18514
+ /**
18515
+ * Enables/disables item
18516
+ */
18517
+ function toggleItem() {
18518
+ ctrl.item.enable = !ctrl.item.enable;
18578
18519
  }
18579
18520
 
18580
18521
  //
@@ -18582,35 +18523,94 @@ var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = [
18582
18523
  //
18583
18524
 
18584
18525
  /**
18585
- * Dynamically set Main Header Title on broadcast and on initial page load
18586
- * @param {Object} [event]
18587
- * @param {Object} [data]
18526
+ * Shows confirm dialog
18527
+ * @param {Object} action - e.g. `delete`
18588
18528
  */
18589
- function setMainHeaderTitle(event, data) {
18590
- if (!lodash.isNil(data)) {
18591
- lodash.assign(ctrl.mainHeaderTitle, data);
18592
- } else {
18593
- ctrl.mainHeaderTitle = { title: $state.current.data.mainHeaderTitle };
18594
- }
18529
+ function showConfirmDialog(action) {
18530
+ var message = lodash.isNil(action.confirm.description) ? action.confirm.message : {
18531
+ message: action.confirm.message,
18532
+ description: action.confirm.description
18533
+ };
18534
+
18535
+ DialogsService.confirm(message, action.confirm.yesLabel, action.confirm.noLabel, action.confirm.type).then(function () {
18536
+ onFireAction(action.id);
18537
+ });
18538
+ }
18539
+
18540
+ /**
18541
+ * Initializes actions
18542
+ * @returns {Object[]} - list of actions
18543
+ */
18544
+ function initActions() {
18545
+ return [{
18546
+ label: $i18next.t('common:DELETE', { lng: lng }),
18547
+ id: 'delete',
18548
+ icon: 'igz-icon-trash',
18549
+ active: true,
18550
+ confirm: {
18551
+ message: $i18next.t('functions:DELETE_ITEM', { lng: lng }),
18552
+ description: $i18next.t('functions:DELETE_DESCRIPTION', { lng: lng }),
18553
+ yesLabel: $i18next.t('common:YES_DELETE', { lng: lng }),
18554
+ noLabel: $i18next.t('common:CANCEL', { lng: lng }),
18555
+ type: 'nuclio_alert'
18556
+ }
18557
+ }];
18558
+ }
18559
+ }
18560
+ })();
18561
+ 'use strict';
18562
+
18563
+ (function () {
18564
+ 'use strict';
18565
+
18566
+ NclDeployLogController.$inject = ['lodash'];
18567
+ angular.module('iguazio.dashboard-controls').component('nclDeployLog', {
18568
+ bindings: {
18569
+ logEntries: '<'
18570
+ },
18571
+ templateUrl: 'nuclio/common/components/deploy-log/deploy-log.tpl.html',
18572
+ controller: NclDeployLogController
18573
+ });
18574
+
18575
+ function NclDeployLogController(lodash) {
18576
+ var ctrl = this;
18577
+
18578
+ ctrl.scrollCofig = {
18579
+ advanced: {
18580
+ updateOnContentResize: true
18581
+ },
18582
+ theme: 'light-thin'
18583
+ };
18584
+
18585
+ ctrl.lodash = lodash;
18586
+
18587
+ ctrl.getLogLevel = getLogLevel;
18588
+ ctrl.getLogParams = getLogParams;
18589
+
18590
+ //
18591
+ // Public methods
18592
+ //
18593
+
18594
+ /**
18595
+ * Get log level display value
18596
+ * @param {string} level - the level model value (one of: 'debug', 'info', 'warn', 'error')
18597
+ * @returns {string} the log level display value
18598
+ */
18599
+ function getLogLevel(level) {
18600
+ return lodash.first(level).toUpperCase();
18595
18601
  }
18596
18602
 
18597
18603
  /**
18598
- * Dynamically pre-set Main Header Title on UI router state change, sets position of main wrapper and navigation
18599
- * tabs config
18600
- * Needed for better UX - header title changes correctly even before controller data resolved and broadcast
18601
- * have been sent
18602
- * @param {Object} transition
18604
+ * Get log parameters display value
18605
+ * @param {string} logEntry - the log entry that includes the parameters
18606
+ * @returns {string} the log level display value
18603
18607
  */
18604
- function onStateChangeSuccess(transition) {
18605
- var toState = transition.$to();
18606
-
18607
- // Check to exclude prototypical inheritance of the `mainHeaderTitle` property from parent router state
18608
- if (lodash.has(toState.data, 'mainHeaderTitle')) {
18608
+ function getLogParams(logEntry) {
18609
+ var params = lodash.omit(logEntry, ['name', 'time', 'level', 'message', 'err']);
18609
18610
 
18610
- ctrl.mainHeaderTitle = {
18611
- title: toState.data.mainHeaderTitle
18612
- };
18613
- }
18611
+ return lodash.isEmpty(params) ? '' : '[' + lodash.map(params, function (value, key) {
18612
+ return key + ': ' + angular.toJson(value);
18613
+ }).join(', ').replace(/\\n/g, '\n').replace(/\\"/g, '"') + ']';
18614
18614
  }
18615
18615
  }
18616
18616
  })();
@@ -21855,6 +21855,57 @@ var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = [
21855
21855
  })();
21856
21856
  'use strict';
21857
21857
 
21858
+ (function () {
21859
+ 'use strict';
21860
+
21861
+ NclVersionConfigurationController.$inject = ['lodash', 'ConfigService', 'VersionHelperService'];
21862
+ angular.module('iguazio.dashboard-controls').component('nclVersionConfiguration', {
21863
+ bindings: {
21864
+ version: '<',
21865
+ isFunctionDeploying: '&'
21866
+ },
21867
+ templateUrl: 'nuclio/functions/version/version-configuration/version-configuration.tpl.html',
21868
+ controller: NclVersionConfigurationController
21869
+ });
21870
+
21871
+ function NclVersionConfigurationController(lodash, ConfigService, VersionHelperService) {
21872
+ var ctrl = this;
21873
+
21874
+ ctrl.scrollConfig = {
21875
+ axis: 'y',
21876
+ advanced: {
21877
+ autoScrollOnFocus: false,
21878
+ updateOnContentResize: true
21879
+ }
21880
+ };
21881
+
21882
+ ctrl.isDemoMode = ConfigService.isDemoMode;
21883
+
21884
+ ctrl.isRuntimeBlockVisible = isRuntimeBlockVisible;
21885
+ ctrl.onConfigurationChangeCallback = onConfigurationChangeCallback;
21886
+
21887
+ //
21888
+ // Public methods
21889
+ //
21890
+
21891
+ /**
21892
+ * Checks if `Runtime Attributes` block is visible
21893
+ * @returns {boolean}
21894
+ */
21895
+ function isRuntimeBlockVisible() {
21896
+ return lodash.includes(['shell', 'java'], lodash.get(ctrl.version, 'spec.runtime'));
21897
+ }
21898
+
21899
+ /**
21900
+ * Checks if version's configuration was changed
21901
+ */
21902
+ function onConfigurationChangeCallback() {
21903
+ VersionHelperService.updateIsVersionChanged(ctrl.version);
21904
+ }
21905
+ }
21906
+ })();
21907
+ 'use strict';
21908
+
21858
21909
  (function () {
21859
21910
  'use strict';
21860
21911
 
@@ -21929,57 +21980,6 @@ var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = [
21929
21980
  })();
21930
21981
  'use strict';
21931
21982
 
21932
- (function () {
21933
- 'use strict';
21934
-
21935
- NclVersionConfigurationController.$inject = ['lodash', 'ConfigService', 'VersionHelperService'];
21936
- angular.module('iguazio.dashboard-controls').component('nclVersionConfiguration', {
21937
- bindings: {
21938
- version: '<',
21939
- isFunctionDeploying: '&'
21940
- },
21941
- templateUrl: 'nuclio/functions/version/version-configuration/version-configuration.tpl.html',
21942
- controller: NclVersionConfigurationController
21943
- });
21944
-
21945
- function NclVersionConfigurationController(lodash, ConfigService, VersionHelperService) {
21946
- var ctrl = this;
21947
-
21948
- ctrl.scrollConfig = {
21949
- axis: 'y',
21950
- advanced: {
21951
- autoScrollOnFocus: false,
21952
- updateOnContentResize: true
21953
- }
21954
- };
21955
-
21956
- ctrl.isDemoMode = ConfigService.isDemoMode;
21957
-
21958
- ctrl.isRuntimeBlockVisible = isRuntimeBlockVisible;
21959
- ctrl.onConfigurationChangeCallback = onConfigurationChangeCallback;
21960
-
21961
- //
21962
- // Public methods
21963
- //
21964
-
21965
- /**
21966
- * Checks if `Runtime Attributes` block is visible
21967
- * @returns {boolean}
21968
- */
21969
- function isRuntimeBlockVisible() {
21970
- return lodash.includes(['shell', 'java'], lodash.get(ctrl.version, 'spec.runtime'));
21971
- }
21972
-
21973
- /**
21974
- * Checks if version's configuration was changed
21975
- */
21976
- function onConfigurationChangeCallback() {
21977
- VersionHelperService.updateIsVersionChanged(ctrl.version);
21978
- }
21979
- }
21980
- })();
21981
- 'use strict';
21982
-
21983
21983
  (function () {
21984
21984
  'use strict';
21985
21985
 
@@ -24571,10 +24571,8 @@ try {
24571
24571
  module = angular.module('iguazio.dashboard-controls.templates', []);
24572
24572
  }
24573
24573
  module.run(['$templateCache', function($templateCache) {
24574
- $templateCache.put('igz_controls/components/action-checkbox-all/action-checkbox-all.tpl.html',
24575
- '<div class="action-checkbox-all"> <div class="check-item" data-ng-class="{\'igz-icon-checkbox-checked\': $ctrl.allItemsChecked,\n' +
24576
- ' \'igz-icon-checkbox-checked-few\': $ctrl.checkedItemsCount > 0 && !$ctrl.allItemsChecked,\n' +
24577
- ' \'igz-icon-checkbox-unchecked\': $ctrl.checkedItemsCount === 0}" data-ng-click="$ctrl.onCheckAll()"></div> </div> ');
24574
+ $templateCache.put('igz_controls/components/action-menu/action-menu.tpl.html',
24575
+ '<div class="igz-action-menu" data-ng-if="$ctrl.isVisible()"> <div class="menu-button {{$ctrl.iconClass}}" data-ng-class="{active: $ctrl.isMenuShown}" data-ng-click="$ctrl.toggleMenu($event)" data-uib-tooltip="{{ $ctrl.tooltipText }}" data-tooltip-enable="$ctrl.tooltipEnabled" data-tooltip-placement="top" data-tooltip-popup-delay="300" data-tooltip-append-to-body="true"> </div> <div class="menu-dropdown" data-ng-if="$ctrl.isMenuShown"> <div class="actions-list" data-ng-click="$ctrl.toggleMenu($event)"> <igz-action-item data-ng-repeat="action in $ctrl.actions track by action.id" data-action="action" data-actions="$ctrl.actions"> </igz-action-item> </div> <div class="shortcuts-list" data-ng-if="$ctrl.shortcuts && $ctrl.shortcuts.length > 0" data-ng-class="{\'first-block\': $ctrl.actions.length === 0}"> <div class="shortcuts-header">{{ \'common:SHORTCUTS\' | i18next }}</div> <div class="shortcuts-item" data-ng-repeat="shortcut in $ctrl.shortcuts" data-ng-click="$ctrl.showDetails($event, shortcut.state)"> {{shortcut.label}} </div> </div> </div> </div> ');
24578
24576
  }]);
24579
24577
  })();
24580
24578
 
@@ -24585,8 +24583,10 @@ try {
24585
24583
  module = angular.module('iguazio.dashboard-controls.templates', []);
24586
24584
  }
24587
24585
  module.run(['$templateCache', function($templateCache) {
24588
- $templateCache.put('igz_controls/components/action-menu/action-menu.tpl.html',
24589
- '<div class="igz-action-menu" data-ng-if="$ctrl.isVisible()"> <div class="menu-button {{$ctrl.iconClass}}" data-ng-class="{active: $ctrl.isMenuShown}" data-ng-click="$ctrl.toggleMenu($event)" data-uib-tooltip="{{ $ctrl.tooltipText }}" data-tooltip-enable="$ctrl.tooltipEnabled" data-tooltip-placement="top" data-tooltip-popup-delay="300" data-tooltip-append-to-body="true"> </div> <div class="menu-dropdown" data-ng-if="$ctrl.isMenuShown"> <div class="actions-list" data-ng-click="$ctrl.toggleMenu($event)"> <igz-action-item data-ng-repeat="action in $ctrl.actions track by action.id" data-action="action" data-actions="$ctrl.actions"> </igz-action-item> </div> <div class="shortcuts-list" data-ng-if="$ctrl.shortcuts && $ctrl.shortcuts.length > 0" data-ng-class="{\'first-block\': $ctrl.actions.length === 0}"> <div class="shortcuts-header">{{ \'common:SHORTCUTS\' | i18next }}</div> <div class="shortcuts-item" data-ng-repeat="shortcut in $ctrl.shortcuts" data-ng-click="$ctrl.showDetails($event, shortcut.state)"> {{shortcut.label}} </div> </div> </div> </div> ');
24586
+ $templateCache.put('igz_controls/components/action-checkbox-all/action-checkbox-all.tpl.html',
24587
+ '<div class="action-checkbox-all"> <div class="check-item" data-ng-class="{\'igz-icon-checkbox-checked\': $ctrl.allItemsChecked,\n' +
24588
+ ' \'igz-icon-checkbox-checked-few\': $ctrl.checkedItemsCount > 0 && !$ctrl.allItemsChecked,\n' +
24589
+ ' \'igz-icon-checkbox-unchecked\': $ctrl.checkedItemsCount === 0}" data-ng-click="$ctrl.onCheckAll()"></div> </div> ');
24590
24590
  }]);
24591
24591
  })();
24592
24592
 
@@ -24622,8 +24622,8 @@ try {
24622
24622
  module = angular.module('iguazio.dashboard-controls.templates', []);
24623
24623
  }
24624
24624
  module.run(['$templateCache', function($templateCache) {
24625
- $templateCache.put('igz_controls/components/auto-complete/auto-complete.tpl.html',
24626
- '<div class="auto-complete-wrapper"> <div class="input-row" data-ng-keydown="$ctrl.handleDropDownKeydown($event)"> <igz-validating-input-field class="auto-complete-input" data-field-type="input" data-is-focused="$ctrl.isFocused" data-update-data-callback="$ctrl.handleInputChange(newData)" data-item-blur-callback="$ctrl.handleInputBlur(event, inputValue, inputName)" data-input-value="$ctrl.currentValue" data-form-object="$ctrl.formObject" data-input-name="{{$ctrl.inputName}}" data-validation-is-required="$ctrl.isRequired" data-placeholder-text="{{$ctrl.placeholder}}" data-is-disabled="$ctrl.isDisabled" data-auto-complete="{{$ctrl.browserAutoComplete}}" data-trim="false" data-borders-mode="{{$ctrl.bordersMode}}" data-tooltip="$ctrl.tooltip"> </igz-validating-input-field> <igz-default-dropdown data-ng-if="$ctrl.isDropdownShown" class="auto-complete-filters" data-values-array="$ctrl.filters" data-selected-item="$ctrl.selectedFilter" data-item-select-callback="$ctrl.handleFilterChange(item, isItemChanged)" data-is-disabled="$ctrl.isDisabled"> </igz-default-dropdown> </div> <div class="suggestions-row"> <div class="auto-complete-suggestions-container" tabindex="-1" data-ng-if="$ctrl.isSuggestionsShown" data-ng-class="{\'auto-complete-suggestions-with-filters\': $ctrl.isDropdownShown}" data-ng-style="{\'top\': $ctrl.topPosition}" data-ng-scrollbars> <ul class="list" tabindex="-1"> <li class="list-item" tabindex="0" data-ng-repeat="item in $ctrl.suggestions track by $index" data-ng-click="$ctrl.handleSuggestionClick(item.value)" data-ng-keydown="$ctrl.handleSuggestionKeydown($event, item)"> <div class="list-item-block"> <span class="list-item-name" uib-tooltip="{{ item.label }}" data-tooltip-placement="auto" data-tooltip-popup-delay="200" data-tooltip-append-to-body="true"> {{ item.label }} </span> <span data-ng-if="item.additionalInfo" class="list-item-additional-info"> {{ item.additionalInfo }} </span> </div> </li> <li class="list-item readonly" data-ng-if="$ctrl.suggestions.length === 0 && $ctrl.loading" tabindex="-1"> <div class="list-item-block"> <span class="list-item-name">{{ \'common:LOADING_CAPITALIZE_ELLIPSIS\' | i18next }}</span> </div> </li> <li class="list-item readonly" data-ng-if="$ctrl.suggestions.length === 0 && !$ctrl.loading && $ctrl.emptyMessage" tabindex="-1"> <div class="list-item-block"> <span class="list-item-name">{{$ctrl.emptyMessage}}</span> </div> </li> <hr data-ng-if="$ctrl.isMoreLabelShown" tabindex="-1"> <li class="list-item readonly" data-ng-if="$ctrl.isMoreLabelShown" tabindex="-1"> <div class="list-item-block"> <span class="list-item-name">{{ \'common:MORE_ELLIPSIS\' | i18next }}</span> </div> </li> </ul> </div> </div> </div> ');
24625
+ $templateCache.put('igz_controls/components/copy-to-clipboard/copy-to-clipboard.tpl.html',
24626
+ '<div class="igz-action-item" data-ng-click="$ctrl.copyToClipboard()" data-uib-tooltip="{{ $ctrl.tooltipText ? $ctrl.tooltipText : \'common:TOOLTIP.COPY_TO_CLIPBOARD\' | i18next }}" data-tooltip-placement="{{ $ctrl.tooltipPlacement }}" data-tooltip-popup-delay="300" data-tooltip-append-to-body="true"> <div class="action-icon ncl-icon-copy"></div> </div> ');
24627
24627
  }]);
24628
24628
  })();
24629
24629
 
@@ -24634,8 +24634,8 @@ try {
24634
24634
  module = angular.module('iguazio.dashboard-controls.templates', []);
24635
24635
  }
24636
24636
  module.run(['$templateCache', function($templateCache) {
24637
- $templateCache.put('igz_controls/components/copy-to-clipboard/copy-to-clipboard.tpl.html',
24638
- '<div class="igz-action-item" data-ng-click="$ctrl.copyToClipboard()" data-uib-tooltip="{{ $ctrl.tooltipText ? $ctrl.tooltipText : \'common:TOOLTIP.COPY_TO_CLIPBOARD\' | i18next }}" data-tooltip-placement="{{ $ctrl.tooltipPlacement }}" data-tooltip-popup-delay="300" data-tooltip-append-to-body="true"> <div class="action-icon ncl-icon-copy"></div> </div> ');
24637
+ $templateCache.put('igz_controls/components/auto-complete/auto-complete.tpl.html',
24638
+ '<div class="auto-complete-wrapper"> <div class="input-row" data-ng-keydown="$ctrl.handleDropDownKeydown($event)"> <igz-validating-input-field class="auto-complete-input" data-field-type="input" data-is-focused="$ctrl.isFocused" data-update-data-callback="$ctrl.handleInputChange(newData)" data-item-blur-callback="$ctrl.handleInputBlur(event, inputValue, inputName)" data-input-value="$ctrl.currentValue" data-form-object="$ctrl.formObject" data-input-name="{{$ctrl.inputName}}" data-validation-is-required="$ctrl.isRequired" data-placeholder-text="{{$ctrl.placeholder}}" data-is-disabled="$ctrl.isDisabled" data-auto-complete="{{$ctrl.browserAutoComplete}}" data-trim="false" data-borders-mode="{{$ctrl.bordersMode}}" data-tooltip="$ctrl.tooltip"> </igz-validating-input-field> <igz-default-dropdown data-ng-if="$ctrl.isDropdownShown" class="auto-complete-filters" data-values-array="$ctrl.filters" data-selected-item="$ctrl.selectedFilter" data-item-select-callback="$ctrl.handleFilterChange(item, isItemChanged)" data-is-disabled="$ctrl.isDisabled"> </igz-default-dropdown> </div> <div class="suggestions-row"> <div class="auto-complete-suggestions-container" tabindex="-1" data-ng-if="$ctrl.isSuggestionsShown" data-ng-class="{\'auto-complete-suggestions-with-filters\': $ctrl.isDropdownShown}" data-ng-style="{\'top\': $ctrl.topPosition}" data-ng-scrollbars> <ul class="list" tabindex="-1"> <li class="list-item" tabindex="0" data-ng-repeat="item in $ctrl.suggestions track by $index" data-ng-click="$ctrl.handleSuggestionClick(item.value)" data-ng-keydown="$ctrl.handleSuggestionKeydown($event, item)"> <div class="list-item-block"> <span class="list-item-name" uib-tooltip="{{ item.label }}" data-tooltip-placement="auto" data-tooltip-popup-delay="200" data-tooltip-append-to-body="true"> {{ item.label }} </span> <span data-ng-if="item.additionalInfo" class="list-item-additional-info"> {{ item.additionalInfo }} </span> </div> </li> <li class="list-item readonly" data-ng-if="$ctrl.suggestions.length === 0 && $ctrl.loading" tabindex="-1"> <div class="list-item-block"> <span class="list-item-name">{{ \'common:LOADING_CAPITALIZE_ELLIPSIS\' | i18next }}</span> </div> </li> <li class="list-item readonly" data-ng-if="$ctrl.suggestions.length === 0 && !$ctrl.loading && $ctrl.emptyMessage" tabindex="-1"> <div class="list-item-block"> <span class="list-item-name">{{$ctrl.emptyMessage}}</span> </div> </li> <hr data-ng-if="$ctrl.isMoreLabelShown" tabindex="-1"> <li class="list-item readonly" data-ng-if="$ctrl.isMoreLabelShown" tabindex="-1"> <div class="list-item-block"> <span class="list-item-name">{{ \'common:MORE_ELLIPSIS\' | i18next }}</span> </div> </li> </ul> </div> </div> </div> ');
24639
24639
  }]);
24640
24640
  })();
24641
24641
 
@@ -24680,6 +24680,18 @@ module.run(['$templateCache', function($templateCache) {
24680
24680
  }]);
24681
24681
  })();
24682
24682
 
24683
+ (function(module) {
24684
+ try {
24685
+ module = angular.module('iguazio.dashboard-controls.templates');
24686
+ } catch (e) {
24687
+ module = angular.module('iguazio.dashboard-controls.templates', []);
24688
+ }
24689
+ module.run(['$templateCache', function($templateCache) {
24690
+ $templateCache.put('igz_controls/components/navigation-tabs/navigation-tabs.tpl.html',
24691
+ '<div class="igz-navigation-tabs clearfix"> <div data-ng-repeat="item in $ctrl.tabItems" data-ng-if="!item.hidden"> <div class="navigation-tab" data-ng-if="item.uiRoute" data-ui-sref="{{item.uiRoute}}" data-ui-sref-active="active" data-igz-capability-enforcer="{{item.capability}}"> {{item.tabName | uppercase}} </div> <a class="navigation-tab" data-ng-if="item.href" data-ng-href="{{item.href}}" target="_blank" data-ui-sref-active="active"> {{item.tabName | uppercase}} </a> </div> </div> ');
24692
+ }]);
24693
+ })();
24694
+
24683
24695
  (function(module) {
24684
24696
  try {
24685
24697
  module = angular.module('iguazio.dashboard-controls.templates');
@@ -24718,18 +24730,6 @@ module.run(['$templateCache', function($templateCache) {
24718
24730
  }]);
24719
24731
  })();
24720
24732
 
24721
- (function(module) {
24722
- try {
24723
- module = angular.module('iguazio.dashboard-controls.templates');
24724
- } catch (e) {
24725
- module = angular.module('iguazio.dashboard-controls.templates', []);
24726
- }
24727
- module.run(['$templateCache', function($templateCache) {
24728
- $templateCache.put('igz_controls/components/navigation-tabs/navigation-tabs.tpl.html',
24729
- '<div class="igz-navigation-tabs clearfix"> <div data-ng-repeat="item in $ctrl.tabItems" data-ng-if="!item.hidden"> <div class="navigation-tab" data-ng-if="item.uiRoute" data-ui-sref="{{item.uiRoute}}" data-ui-sref-active="active" data-igz-capability-enforcer="{{item.capability}}"> {{item.tabName | uppercase}} </div> <a class="navigation-tab" data-ng-if="item.href" data-ng-href="{{item.href}}" target="_blank" data-ui-sref-active="active"> {{item.tabName | uppercase}} </a> </div> </div> ');
24730
- }]);
24731
- })();
24732
-
24733
24733
  (function(module) {
24734
24734
  try {
24735
24735
  module = angular.module('iguazio.dashboard-controls.templates');
@@ -24816,8 +24816,8 @@ try {
24816
24816
  module = angular.module('iguazio.dashboard-controls.templates', []);
24817
24817
  }
24818
24818
  module.run(['$templateCache', function($templateCache) {
24819
- $templateCache.put('igz_controls/components/splash-screen/splash-screen.tpl.html',
24820
- '<div class="splash-screen" data-ng-hide="!$ctrl.isSplashShowed.value"> <div class="loading-splash-screen" data-ng-if="$ctrl.isLoading"> <div class="splash-logo-wrapper"> <div class="loader-fading-circle"> <div class="loader-circle1 loader-circle"></div> <div class="loader-circle2 loader-circle"></div> <div class="loader-circle3 loader-circle"></div> <div class="loader-circle4 loader-circle"></div> <div class="loader-circle5 loader-circle"></div> <div class="loader-circle6 loader-circle"></div> <div class="loader-circle7 loader-circle"></div> <div class="loader-circle8 loader-circle"></div> <div class="loader-circle9 loader-circle"></div> <div class="loader-circle10 loader-circle"></div> <div class="loader-circle11 loader-circle"></div> <div class="loader-circle12 loader-circle"></div> </div> </div> <div class="loading-text">{{$ctrl.textToDisplay}}</div> </div> <div class="alert-splash-screen" data-ng-if="$ctrl.isAlertShowing"> <div class="header"></div> <div class="notification-text">{{$ctrl.alertText}}</div> <div class="buttons"> <div class="refresh-button" data-ng-click="$ctrl.refreshPage()"> <span class="igz-icon-refresh"></span> {{ \'common:REFRESH\' | i18next }} </div> </div> </div> </div> ');
24819
+ $templateCache.put('igz_controls/components/toast-status-panel/toast-status-panel.tpl.html',
24820
+ '<div class="toast-status-panel" data-ng-show="$ctrl.isToastPanelShown"> <div class="btn-close igz-icon-close" data-ng-if="!$ctrl.permanent && $ctrl.panelState !== \'in-progress\'" data-ng-click="$ctrl.closeToastPanel()"> </div> <div class="panel-status"> <span class="panel-status-icon"></span> <div class="igz-scrollable-container msg-scrollable-container" data-ng-scrollbars> <div class="panel-status-msg" data-ng-if="$ctrl.isTranscludePassed" data-ng-transclude></div> <div class="panel-status-msg" data-ng-if="!$ctrl.isTranscludePassed"> {{$ctrl.getStateMessage($ctrl.panelState)}} </div> </div> </div> </div> ');
24821
24821
  }]);
24822
24822
  })();
24823
24823
 
@@ -24833,6 +24833,18 @@ module.run(['$templateCache', function($templateCache) {
24833
24833
  }]);
24834
24834
  })();
24835
24835
 
24836
+ (function(module) {
24837
+ try {
24838
+ module = angular.module('iguazio.dashboard-controls.templates');
24839
+ } catch (e) {
24840
+ module = angular.module('iguazio.dashboard-controls.templates', []);
24841
+ }
24842
+ module.run(['$templateCache', function($templateCache) {
24843
+ $templateCache.put('igz_controls/components/splash-screen/splash-screen.tpl.html',
24844
+ '<div class="splash-screen" data-ng-hide="!$ctrl.isSplashShowed.value"> <div class="loading-splash-screen" data-ng-if="$ctrl.isLoading"> <div class="splash-logo-wrapper"> <div class="loader-fading-circle"> <div class="loader-circle1 loader-circle"></div> <div class="loader-circle2 loader-circle"></div> <div class="loader-circle3 loader-circle"></div> <div class="loader-circle4 loader-circle"></div> <div class="loader-circle5 loader-circle"></div> <div class="loader-circle6 loader-circle"></div> <div class="loader-circle7 loader-circle"></div> <div class="loader-circle8 loader-circle"></div> <div class="loader-circle9 loader-circle"></div> <div class="loader-circle10 loader-circle"></div> <div class="loader-circle11 loader-circle"></div> <div class="loader-circle12 loader-circle"></div> </div> </div> <div class="loading-text">{{$ctrl.textToDisplay}}</div> </div> <div class="alert-splash-screen" data-ng-if="$ctrl.isAlertShowing"> <div class="header"></div> <div class="notification-text">{{$ctrl.alertText}}</div> <div class="buttons"> <div class="refresh-button" data-ng-click="$ctrl.refreshPage()"> <span class="igz-icon-refresh"></span> {{ \'common:REFRESH\' | i18next }} </div> </div> </div> </div> ');
24845
+ }]);
24846
+ })();
24847
+
24836
24848
  (function(module) {
24837
24849
  try {
24838
24850
  module = angular.module('iguazio.dashboard-controls.templates');
@@ -24862,18 +24874,6 @@ module.run(['$templateCache', function($templateCache) {
24862
24874
  }]);
24863
24875
  })();
24864
24876
 
24865
- (function(module) {
24866
- try {
24867
- module = angular.module('iguazio.dashboard-controls.templates');
24868
- } catch (e) {
24869
- module = angular.module('iguazio.dashboard-controls.templates', []);
24870
- }
24871
- module.run(['$templateCache', function($templateCache) {
24872
- $templateCache.put('igz_controls/components/toast-status-panel/toast-status-panel.tpl.html',
24873
- '<div class="toast-status-panel" data-ng-show="$ctrl.isToastPanelShown"> <div class="btn-close igz-icon-close" data-ng-if="!$ctrl.permanent && $ctrl.panelState !== \'in-progress\'" data-ng-click="$ctrl.closeToastPanel()"> </div> <div class="panel-status"> <span class="panel-status-icon"></span> <div class="igz-scrollable-container msg-scrollable-container" data-ng-scrollbars> <div class="panel-status-msg" data-ng-if="$ctrl.isTranscludePassed" data-ng-transclude></div> <div class="panel-status-msg" data-ng-if="!$ctrl.isTranscludePassed"> {{$ctrl.getStateMessage($ctrl.panelState)}} </div> </div> </div> </div> ');
24874
- }]);
24875
- })();
24876
-
24877
24877
  (function(module) {
24878
24878
  try {
24879
24879
  module = angular.module('iguazio.dashboard-controls.templates');
@@ -24914,8 +24914,8 @@ try {
24914
24914
  module = angular.module('iguazio.dashboard-controls.templates', []);
24915
24915
  }
24916
24916
  module.run(['$templateCache', function($templateCache) {
24917
- $templateCache.put('nuclio/functions/function/ncl-function.tpl.html',
24918
- '<section data-ui-view="function"></section>');
24917
+ $templateCache.put('nuclio/functions/deploy-deleted-function-dialog/deploy-deleted-function-dialog.tpl.html',
24918
+ '<div class="deploy-deleted-function-dialog"> <div class="close-button igz-icon-close" data-ng-click="$ctrl.onClose()"></div> <div class="title"> {{ \'functions:DELETED_FUNCTION_WHILE_DEPLOYING_MSG\' | i18next }} </div> <div class="buttons"> <button class="ncl-secondary-button igz-button-just-text" tabindex="0" data-ng-click="$ctrl.goToFunctions()"> {{ \'functions:GO_TO_FUNCTIONS\' | i18next }} </button> <button class="ncl-primary-button igz-button-primary" tabindex="1" data-ng-click="$ctrl.deployFunction($event)"> {{ \'functions:DEPLOY\' | i18next }} </button> </div> </div> ');
24919
24919
  }]);
24920
24920
  })();
24921
24921
 
@@ -24938,8 +24938,8 @@ try {
24938
24938
  module = angular.module('iguazio.dashboard-controls.templates', []);
24939
24939
  }
24940
24940
  module.run(['$templateCache', function($templateCache) {
24941
- $templateCache.put('nuclio/functions/deploy-deleted-function-dialog/deploy-deleted-function-dialog.tpl.html',
24942
- '<div class="deploy-deleted-function-dialog"> <div class="close-button igz-icon-close" data-ng-click="$ctrl.onClose()"></div> <div class="title"> {{ \'functions:DELETED_FUNCTION_WHILE_DEPLOYING_MSG\' | i18next }} </div> <div class="buttons"> <button class="ncl-secondary-button igz-button-just-text" tabindex="0" data-ng-click="$ctrl.goToFunctions()"> {{ \'functions:GO_TO_FUNCTIONS\' | i18next }} </button> <button class="ncl-primary-button igz-button-primary" tabindex="1" data-ng-click="$ctrl.deployFunction($event)"> {{ \'functions:DEPLOY\' | i18next }} </button> </div> </div> ');
24941
+ $templateCache.put('nuclio/functions/function/ncl-function.tpl.html',
24942
+ '<section data-ui-view="function"></section>');
24943
24943
  }]);
24944
24944
  })();
24945
24945
 
@@ -24964,12 +24964,8 @@ try {
24964
24964
  module = angular.module('iguazio.dashboard-controls.templates', []);
24965
24965
  }
24966
24966
  module.run(['$templateCache', function($templateCache) {
24967
- $templateCache.put('nuclio/functions/version/version.tpl.html',
24968
- '<div class="ncl-edit-version"> <igz-splash-screen data-is-splash-showed="$ctrl.isSplashShowed"></igz-splash-screen> <igz-info-page-actions-bar class="igz-component border-top"> <div class="actions-bar-right"> <div class="actions-bar-left"> <span class="ncl-icon-api-gateway" data-test-id="functions.item-name_api-gw.icon" data-ng-if="$ctrl.version.status.apiGateways.length > 0" data-uib-tooltip="{{ \'functions:TOOLTIP.USED_BY_API_GATEWAY\' | i18next:{apiGatewayName: $ctrl.version.status.apiGateways[0]} }}" data-tooltip-placement="top" data-tooltip-append-to-body="true" data-tooltip-popup-delay="200"> </span> </div> <div class="actions-bar-left actions-buttons-block actions-dropdown-block"> <igz-default-dropdown data-select-property-only="id" data-placeholder="{{ \'functions:PLACEHOLDER.ACTIONS\' | i18next }}" data-values-array="$ctrl.actions" data-is-disabled="!$ctrl.isFunctionDeployed" data-item-select-callback="$ctrl.onActionSelect(item)" data-skip-selection="true"> </igz-default-dropdown> </div> <div class="actions-bar-left"> <div class="igz-action-panel"> <div class="actions-list"> <igz-action-item-refresh data-is-disabled="!$ctrl.isFunctionDeployed" data-refresh="$ctrl.refreshFunction()"> </igz-action-item-refresh> </div> </div> </div> <div class="actions-bar-left actions-buttons-block"> <button class="ncl-new-entity-button igz-button-primary" data-ng-class="{\'disabled\': $ctrl.isDeployButtonDisabled()}" data-ng-click="$ctrl.isFunctionDeploying() || $ctrl.deployButtonClick($event)" data-uib-tooltip="{{ ($ctrl.version.status.state === \'building\' ? \'functions:TOOLTIP.DEPLOY_IN_PROGRESS\' :\n' +
24969
- ' $ctrl.version.ui.isTriggersChanged || $ctrl.version.ui.isVolumesChanged ? \'functions:TOOLTIP.APPLY_CHANGES_TO_DEPLOY\' :\n' +
24970
- ' \'functions:TOOLTIP.DEPLOY_INVALID_CONFIG\') | i18next }}" data-tooltip-enable="$ctrl.isDeployButtonDisabled()" data-tooltip-placement="left" data-tooltip-append-to-body="true" data-tooltip-popup-delay="200"> {{ \'functions:DEPLOY\' | i18next }} </button> </div> </div> </igz-info-page-actions-bar> <div data-ng-if="$ctrl.deployResult.shown" class="ncl-edit-version-execution-result deploy-result" data-ng-class="$ctrl.deployResult.status.state"> <div class="btn-close igz-icon-close" data-ng-if="!$ctrl.isFunctionDeploying()" data-ng-click="$ctrl.hideDeployResult()"></div> <div class="icon-collapsed general-content" data-ng-class="$ctrl.deployResult.collapsed ? \'igz-icon-right\' : \'igz-icon-down\'" data-ng-click="$ctrl.onDeployResultToggle()"></div> <div class="ncl-execution-result-status" data-ng-class="[$ctrl.deployResult.status.state, { collapsed: $ctrl.deployResult.collapsed }]"> <span class="result-status-icon" data-ng-class="$ctrl.deployResult.status.icon"></span> <span class="result-state">{{$ctrl.deployResult.status.text}}</span> </div> <div class="ncl-execution-result-block collapsed-block-content-wrapper" data-uib-collapse="$ctrl.deployResult.collapsed"> <div class="collapsed-block-title without-collapse"> {{ \'common:LOGS\' | i18next }} </div> <ncl-deploy-log data-log-entries="$ctrl.version.status.state === \'error\' ?\n' +
24971
- ' $ctrl.version.status.message :\n' +
24972
- ' $ctrl.version.status.logs"> </ncl-deploy-log> </div> </div> <ncl-navigation-tabs data-tab-items="$ctrl.navigationTabsConfig"></ncl-navigation-tabs> <section class="ncl-edit-version-view" data-ui-view="version"></section> </div> ');
24967
+ $templateCache.put('nuclio/functions/override-function-dialog/override-function-dialog.tpl.html',
24968
+ '<div class="override-function-dialog"> <div class="close-button igz-icon-close" data-ng-click="$ctrl.onClose()"></div> <div class="title"> {{ \'functions:NAME_IN_USE\' | i18next }} </div> <div class="buttons"> <button class="ncl-secondary-button igz-button-secondary function-redirect-button" data-test-id="functions.override_function_visit_function.button" tabindex="0" data-ng-click="$ctrl.openExistingFunction()"> {{ \'functions:GO_TO_EXISTING_FUNCTION\' | i18next }} </button> <button class="ncl-secondary-button igz-button-just-text" data-test-id="functions.override_function_cancel.button" tabindex="1" data-ng-click="$ctrl.onClose()" data-ng-keydown="$ctrl.onClose($event)"> {{ \'common:CANCEL\' | i18next }} </button> <button class="ncl-primary-button igz-button-primary" data-test-id="functions.override_function_override.button" tabindex="2" data-ng-click="$ctrl.overrideFunction()"> {{ \'functions:OVERWRITE\' | i18next }} </button> </div> </div> ');
24973
24969
  }]);
24974
24970
  })();
24975
24971
 
@@ -24980,8 +24976,12 @@ try {
24980
24976
  module = angular.module('iguazio.dashboard-controls.templates', []);
24981
24977
  }
24982
24978
  module.run(['$templateCache', function($templateCache) {
24983
- $templateCache.put('nuclio/functions/override-function-dialog/override-function-dialog.tpl.html',
24984
- '<div class="override-function-dialog"> <div class="close-button igz-icon-close" data-ng-click="$ctrl.onClose()"></div> <div class="title"> {{ \'functions:NAME_IN_USE\' | i18next }} </div> <div class="buttons"> <button class="ncl-secondary-button igz-button-secondary function-redirect-button" data-test-id="functions.override_function_visit_function.button" tabindex="0" data-ng-click="$ctrl.openExistingFunction()"> {{ \'functions:GO_TO_EXISTING_FUNCTION\' | i18next }} </button> <button class="ncl-secondary-button igz-button-just-text" data-test-id="functions.override_function_cancel.button" tabindex="1" data-ng-click="$ctrl.onClose()" data-ng-keydown="$ctrl.onClose($event)"> {{ \'common:CANCEL\' | i18next }} </button> <button class="ncl-primary-button igz-button-primary" data-test-id="functions.override_function_override.button" tabindex="2" data-ng-click="$ctrl.overrideFunction()"> {{ \'functions:OVERWRITE\' | i18next }} </button> </div> </div> ');
24979
+ $templateCache.put('nuclio/functions/version/version.tpl.html',
24980
+ '<div class="ncl-edit-version"> <igz-splash-screen data-is-splash-showed="$ctrl.isSplashShowed"></igz-splash-screen> <igz-info-page-actions-bar class="igz-component border-top"> <div class="actions-bar-right"> <div class="actions-bar-left"> <span class="ncl-icon-api-gateway" data-test-id="functions.item-name_api-gw.icon" data-ng-if="$ctrl.version.status.apiGateways.length > 0" data-uib-tooltip="{{ \'functions:TOOLTIP.USED_BY_API_GATEWAY\' | i18next:{apiGatewayName: $ctrl.version.status.apiGateways[0]} }}" data-tooltip-placement="top" data-tooltip-append-to-body="true" data-tooltip-popup-delay="200"> </span> </div> <div class="actions-bar-left actions-buttons-block actions-dropdown-block"> <igz-default-dropdown data-select-property-only="id" data-placeholder="{{ \'functions:PLACEHOLDER.ACTIONS\' | i18next }}" data-values-array="$ctrl.actions" data-is-disabled="!$ctrl.isFunctionDeployed" data-item-select-callback="$ctrl.onActionSelect(item)" data-skip-selection="true"> </igz-default-dropdown> </div> <div class="actions-bar-left"> <div class="igz-action-panel"> <div class="actions-list"> <igz-action-item-refresh data-is-disabled="!$ctrl.isFunctionDeployed" data-refresh="$ctrl.refreshFunction()"> </igz-action-item-refresh> </div> </div> </div> <div class="actions-bar-left actions-buttons-block"> <button class="ncl-new-entity-button igz-button-primary" data-ng-class="{\'disabled\': $ctrl.isDeployButtonDisabled()}" data-ng-click="$ctrl.isFunctionDeploying() || $ctrl.deployButtonClick($event)" data-uib-tooltip="{{ ($ctrl.version.status.state === \'building\' ? \'functions:TOOLTIP.DEPLOY_IN_PROGRESS\' :\n' +
24981
+ ' $ctrl.version.ui.isTriggersChanged || $ctrl.version.ui.isVolumesChanged ? \'functions:TOOLTIP.APPLY_CHANGES_TO_DEPLOY\' :\n' +
24982
+ ' \'functions:TOOLTIP.DEPLOY_INVALID_CONFIG\') | i18next }}" data-tooltip-enable="$ctrl.isDeployButtonDisabled()" data-tooltip-placement="left" data-tooltip-append-to-body="true" data-tooltip-popup-delay="200"> {{ \'functions:DEPLOY\' | i18next }} </button> </div> </div> </igz-info-page-actions-bar> <div data-ng-if="$ctrl.deployResult.shown" class="ncl-edit-version-execution-result deploy-result" data-ng-class="$ctrl.deployResult.status.state"> <div class="btn-close igz-icon-close" data-ng-if="!$ctrl.isFunctionDeploying()" data-ng-click="$ctrl.hideDeployResult()"></div> <div class="icon-collapsed general-content" data-ng-class="$ctrl.deployResult.collapsed ? \'igz-icon-right\' : \'igz-icon-down\'" data-ng-click="$ctrl.onDeployResultToggle()"></div> <div class="ncl-execution-result-status" data-ng-class="[$ctrl.deployResult.status.state, { collapsed: $ctrl.deployResult.collapsed }]"> <span class="result-status-icon" data-ng-class="$ctrl.deployResult.status.icon"></span> <span class="result-state">{{$ctrl.deployResult.status.text}}</span> </div> <div class="ncl-execution-result-block collapsed-block-content-wrapper" data-uib-collapse="$ctrl.deployResult.collapsed"> <div class="collapsed-block-title without-collapse"> {{ \'common:LOGS\' | i18next }} </div> <ncl-deploy-log data-log-entries="$ctrl.version.status.state === \'error\' ?\n' +
24983
+ ' $ctrl.version.status.message :\n' +
24984
+ ' $ctrl.version.status.logs"> </ncl-deploy-log> </div> </div> <ncl-navigation-tabs data-tab-items="$ctrl.navigationTabsConfig"></ncl-navigation-tabs> <section class="ncl-edit-version-view" data-ui-view="version"></section> </div> ');
24985
24985
  }]);
24986
24986
  })();
24987
24987
 
@@ -25052,8 +25052,8 @@ try {
25052
25052
  module = angular.module('iguazio.dashboard-controls.templates', []);
25053
25053
  }
25054
25054
  module.run(['$templateCache', function($templateCache) {
25055
- $templateCache.put('nuclio/common/components/deploy-log/deploy-log.tpl.html',
25056
- '<div class="ncl-deploy-log-wrapper"> <div class="log-panel igz-scrollable-container" data-ng-scrollbars data-ng-scrollbars-config="$ctrl.scrollConfig"> <div class="log-entry" data-ng-if="$ctrl.lodash.isArray($ctrl.logEntries)" data-ng-repeat="log in $ctrl.logEntries track by $index"> <span class="log-entry-time" data-ng-if="log.time">[{{log.time | date:\'HH:mm:ss.sss\'}}]</span> <span class="log-entry-level-{{log.level}}" data-ng-if="log.level">&nbsp;({{$ctrl.getLogLevel(log.level)}})</span> <span class="log-entry-message">&nbsp;{{log.message}}</span> <span class="log-entry-error" data-ng-if="log.err">&nbsp;{{log.err}}</span> <span class="log-entry-params">&nbsp;{{$ctrl.getLogParams(log)}}</span> </div> <div class="log-entry" data-ng-if="!$ctrl.lodash.isArray($ctrl.logEntries)"> {{$ctrl.logEntries}} </div> </div> </div> ');
25055
+ $templateCache.put('nuclio/common/components/breadcrumbs/breadcrumbs.tpl.html',
25056
+ '<span class="main-header-title"> <span class="main-header-title-text" data-ng-click="$ctrl.goToProjectsList()" data-ng-class="{\'disable-behavior\': !$ctrl.mainHeaderTitle.project && $ctrl.mainHeaderTitle.function !== \'Create function\'}"> {{ $ctrl.mainHeaderTitle.title | i18next }} </span> <span class="igz-icon-right ncl-header-subtitle"></span> </span> <span class="main-header-title" data-ng-if="$ctrl.mainHeaderTitle.project.metadata.name"> <span class="main-header-title-text" data-ng-click="$ctrl.goToProjectScreen()"> {{$ctrl.mainHeaderTitle.project.metadata.name}} </span> <ncl-breadcrumbs-dropdown data-state="$ctrl.mainHeaderTitle.state" data-title="$ctrl.mainHeaderTitle.project.metadata.name" data-project="$ctrl.mainHeaderTitle.project" data-type="projects" data-get-functions="$ctrl.getFunctions({id: id, enrichApiGateways: enrichApiGateways})" data-get-projects="$ctrl.getProjects()"> </ncl-breadcrumbs-dropdown> </span> <span class="main-header-title" data-ng-if="$ctrl.mainHeaderTitle.function && $ctrl.mainHeaderTitle.version"> <span class="main-header-title-text" data-ng-click="$ctrl.goToFunctionScreen()">{{$ctrl.mainHeaderTitle.function}}</span> <ncl-breadcrumbs-dropdown data-ng-if="$ctrl.mainHeaderTitle.version" data-state="$ctrl.mainHeaderTitle.state" data-title="$ctrl.mainHeaderTitle.function" data-project="$ctrl.mainHeaderTitle.project" data-type="functions" data-get-functions="$ctrl.getFunctions({id: id, enrichApiGateways: enrichApiGateways})" data-get-projects="$ctrl.getProjects()"> </ncl-breadcrumbs-dropdown> </span> <span data-ng-if="$ctrl.mainHeaderTitle.tab" class="ncl-bold-subtitle"> {{$ctrl.mainHeaderTitle.tab}} </span> <span data-ng-if="$ctrl.mainHeaderTitle.function === \'Create function\'" class="ncl-bold-subtitle"> {{$ctrl.mainHeaderTitle.function}} </span> <span data-ng-if="$ctrl.mainHeaderTitle.version" class="ncl-bold-subtitle"> {{$ctrl.mainHeaderTitle.version}} </span> ');
25057
25057
  }]);
25058
25058
  })();
25059
25059
 
@@ -25064,9 +25064,8 @@ try {
25064
25064
  module = angular.module('iguazio.dashboard-controls.templates', []);
25065
25065
  }
25066
25066
  module.run(['$templateCache', function($templateCache) {
25067
- $templateCache.put('nuclio/common/components/collapsing-row/collapsing-row.tpl.html',
25068
- '<div class="ncl-collapsing-row"> <div class="title-block common-table-row" data-ng-class="{\'collapsed\': !$ctrl.item.ui.editModeActive}"> <div class="common-table-cell row-collapse"> <span class="collapse-icon" data-ng-click="$ctrl.onCollapse($event)" data-ng-class="{\'collapsed igz-icon-right\': !$ctrl.item.ui.editModeActive,\n' +
25069
- ' \'igz-icon-down\': $ctrl.item.ui.editModeActive}"> </span> </div> <div data-ng-show="!$ctrl.item.ui.editModeActive" class="igz-row common-table-cells-container item-row"> <div class="item-name" data-ng-if="!$ctrl.isNil($ctrl.item.name)"> <div class="text-ellipsis"> {{$ctrl.item.name}} </div> <igz-more-info data-ng-if="$ctrl.item.ui.moreInfoMsg.name" data-trigger="click" data-is-html-enabled="true" data-is-open="$ctrl.item.ui.moreInfoMsg.name.isOpen" data-icon-type="{{$ctrl.item.ui.moreInfoMsg.name.type}}" data-description="{{$ctrl.item.ui.moreInfoMsg.name.description}}"> </igz-more-info> </div> <div class="text-ellipsis item-name" data-ng-if="!$ctrl.isNil($ctrl.item.volumeMount.name)"> {{ $ctrl.item.volumeMount.name }} </div> <div class="item-class" data-ng-if="!$ctrl.isNil($ctrl.item.ui.selectedClass)"> {{$ctrl.item.ui.selectedClass.name}} </div> <div class="item-class" data-ng-if="!$ctrl.isNil($ctrl.item.volume.hostPath)"> {{ \'common:HOST_PATH\' | i18next }} </div> <div class="item-class" data-ng-if="!$ctrl.isNil($ctrl.item.volume.flexVolume)"> {{ \'functions:V3IO\' | i18next }} </div> <div class="item-class" data-ng-if="!$ctrl.isNil($ctrl.item.volume.secret.secretName)"> {{ \'functions:SECRET\' | i18next }} </div> <div class="item-class" data-ng-if="!$ctrl.isNil($ctrl.item.volume.configMap.name)"> {{ \'functions:CONFIG_MAP\' | i18next }} </div> <div class="item-class" data-ng-if="!$ctrl.isNil($ctrl.item.volume.persistentVolumeClaim.claimName)"> {{ \'functions:PVC\' | i18next }} </div> <div class="igz-col-70 item-info"> <div data-ng-hide="$ctrl.item.ui.editModeActive" class="collapsed-item-info-block"> <span data-ng-if="!$ctrl.isNil($ctrl.item.url)"> <span class="field-label">{{ \'common:URL\' | i18next }}</span>:&nbsp;{{ $ctrl.item.url }};&nbsp; </span> <span data-ng-if="!$ctrl.isNil($ctrl.item.maxWorkers)"> <span class="field-label">{{ \'functions:MAX_WORKERS\' | i18next }}</span>:&nbsp;{{ $ctrl.item.maxWorkers }};&nbsp; </span> <span data-ng-if="$ctrl.isNumber($ctrl.item.workerAvailabilityTimeoutMilliseconds)"> <span class="field-label">{{ \'functions:WORKER_AVAILABILITY_TIMEOUT\' | i18next }}</span>:&nbsp;{{ $ctrl.item.workerAvailabilityTimeoutMilliseconds }};&nbsp; </span> <span data-ng-if="!$ctrl.isNil($ctrl.item.secret)"> <span class="field-label">{{ \'functions:SECRET\' | i18next }}</span>:&nbsp;{{ $ctrl.getMask($ctrl.item.secret) }};&nbsp; </span> <span data-ng-repeat="(key, value) in $ctrl.item.attributes" data-ng-if="$ctrl.displayedAttributesFields.includes(key)"> <span class="field-label">{{ key }}</span>:&nbsp;{{ $ctrl.getAttributeValue(key, value) }};&nbsp; </span> <span data-ng-if="!$ctrl.isNil($ctrl.item.annotations)"> <span class="field-label">{{ \'functions:ANNOTATIONS\' | i18next }}</span>:&nbsp;{{ $ctrl.item.annotations }};&nbsp; </span> <span data-ng-if="!$ctrl.isNil($ctrl.item.username)"> <span class="field-label">{{ \'common:USERNAME\' | i18next }}</span>:&nbsp;{{ $ctrl.item.username }};&nbsp; </span> <span data-ng-if="!$ctrl.isNil($ctrl.item.password)"> <span class="field-label">{{ \'common:PASSWORD\' | i18next }}</span>:&nbsp;{{ $ctrl.getMask($ctrl.item.password) }};&nbsp; </span> <span data-ng-if="!$ctrl.isNil($ctrl.item.volumeMount.mountPath)"> <span class="field-label">{{ \'functions:MOUNT_PATH\' | i18next }}</span>:&nbsp;{{ $ctrl.item.volumeMount.mountPath }};&nbsp; </span> <span data-ng-if="!$ctrl.isNil($ctrl.item.volume.hostPath)"> <span class="field-label">{{ \'common:HOST_PATH\' | i18next }}</span>:&nbsp;{{ $ctrl.item.volume.hostPath.path }};&nbsp; </span> <span data-ng-if="!$ctrl.isNil($ctrl.item.volumeMount.readOnly)"> <span class="field-label">{{ \'common:READ_ONLY\' | i18next }}</span>:&nbsp;{{ $ctrl.item.volumeMount.readOnly }};&nbsp; </span> <span data-ng-if="!$ctrl.isNil($ctrl.item.volume.flexVolume.options.container)"> <span class="field-label">{{ \'functions:CONTAINER_NAME\' | i18next }}</span>:&nbsp;{{ $ctrl.item.volume.flexVolume.options.container }};&nbsp; </span> <span data-ng-if="!$ctrl.isNil($ctrl.item.volume.flexVolume.options.subPath)"> <span class="field-label">{{ \'functions:SUB_PATH\' | i18next }}</span>:&nbsp;{{ $ctrl.item.volume.flexVolume.options.subPath }};&nbsp; </span> <span data-ng-if="!$ctrl.isNil($ctrl.item.volume.configMap.name)"> <span class="field-label">{{ \'functions:CONFIG_MAP_NAME\' | i18next }}</span>:&nbsp;{{ $ctrl.item.volume.configMap.name }};&nbsp; </span> <span data-ng-if="!$ctrl.isNil($ctrl.item.volume.persistentVolumeClaim.claimName)"> <span class="field-label">{{ \'functions:PERSISTENT_VOLUME_CLAIM_NAME\' | i18next }}</span>:&nbsp; {{ $ctrl.item.volume.persistentVolumeClaim.claimName }};&nbsp; </span> <span data-ng-if="!$ctrl.isNil($ctrl.item.workerAllocatorName)"> <span class="field-label">{{ \'functions:WORKER_ALLOCATOR_NAME\' | i18next }}</span>:&nbsp;{{ $ctrl.item.workerAllocatorName }};&nbsp; </span> </div> </div> </div> <div data-ng-transclude class="igz-col-100" data-ng-if="$ctrl.item.ui.editModeActive"></div> <div class="common-table-cell actions-menu" data-ng-hide="$ctrl.readOnly" data-ng-if="::$ctrl.showDotMenu()"> <igz-action-menu data-actions="$ctrl.actions" data-on-fire-action="$ctrl.onFireAction"> </igz-action-menu> </div> <div class="common-table-cell single-action" data-ng-hide="$ctrl.readOnly" data-ng-if="::!$ctrl.showDotMenu()"> <div class="igz-action-panel"> <div class="actions-list"> <div class="igz-action-item" data-test-id="{{$ctrl.deleteTestId}}" data-ng-click="$ctrl.onClickAction($ctrl.actions[0])" data-uib-tooltip="{{$ctrl.actions[0].label}}" data-tooltip-popup-delay="1000" data-tooltip-placement="bottom" data-tooltip-append-to-body="true"> <span class="action-icon" data-ng-class="$ctrl.actions[0].icon"> </span> </div> </div> </div> </div> </div> </div> ');
25067
+ $templateCache.put('nuclio/common/components/breadcrumbs-dropdown/breadcrumbs-dropdown.tpl.html',
25068
+ '<div class="ncl-breadcrumbs-dropdown dropdown" data-ng-class="{\'open\': $ctrl.showDropdownList}"> <span class="breadcrumb-toggle" data-ng-click="$ctrl.showDropdown()"> <span class="breadcrumb-arrow" data-ng-class="{\'ncl-dropdown-expanded\': $ctrl.showDropdownList}"> <span class="igz-icon-right"></span> </span> </span> <div class="dropdown-menu"> <div class="search-input"> <input type="text" placeholder="{{$ctrl.placeholder}}" data-ng-model="$ctrl.searchText"> <span class="igz-icon-search"></span> </div> <ul class="dropdown-list" data-ng-scrollbars> <li data-ng-repeat="item in $ctrl.itemsList | filter: $ctrl.searchText"> <a class="item-name" data-ng-click="$ctrl.showDetails($event, item)" data-uib-tooltip="{{item.name}}" data-tooltip-popup-delay="200" data-tooltip-append-to-body="true" data-tooltip-placement="top"> {{item.name}} </a> <span class="igz-icon-tick" data-ng-show="$ctrl.title === item.name"></span> </li> </ul> </div> </div> ');
25070
25069
  }]);
25071
25070
  })();
25072
25071
 
@@ -25077,8 +25076,9 @@ try {
25077
25076
  module = angular.module('iguazio.dashboard-controls.templates', []);
25078
25077
  }
25079
25078
  module.run(['$templateCache', function($templateCache) {
25080
- $templateCache.put('nuclio/common/components/breadcrumbs-dropdown/breadcrumbs-dropdown.tpl.html',
25081
- '<div class="ncl-breadcrumbs-dropdown dropdown" data-ng-class="{\'open\': $ctrl.showDropdownList}"> <span class="breadcrumb-toggle" data-ng-click="$ctrl.showDropdown()"> <span class="breadcrumb-arrow" data-ng-class="{\'ncl-dropdown-expanded\': $ctrl.showDropdownList}"> <span class="igz-icon-right"></span> </span> </span> <div class="dropdown-menu"> <div class="search-input"> <input type="text" placeholder="{{$ctrl.placeholder}}" data-ng-model="$ctrl.searchText"> <span class="igz-icon-search"></span> </div> <ul class="dropdown-list" data-ng-scrollbars> <li data-ng-repeat="item in $ctrl.itemsList | filter: $ctrl.searchText"> <a class="item-name" data-ng-click="$ctrl.showDetails($event, item)" data-uib-tooltip="{{item.name}}" data-tooltip-popup-delay="200" data-tooltip-append-to-body="true" data-tooltip-placement="top"> {{item.name}} </a> <span class="igz-icon-tick" data-ng-show="$ctrl.title === item.name"></span> </li> </ul> </div> </div> ');
25079
+ $templateCache.put('nuclio/common/components/collapsing-row/collapsing-row.tpl.html',
25080
+ '<div class="ncl-collapsing-row"> <div class="title-block common-table-row" data-ng-class="{\'collapsed\': !$ctrl.item.ui.editModeActive}"> <div class="common-table-cell row-collapse"> <span class="collapse-icon" data-ng-click="$ctrl.onCollapse($event)" data-ng-class="{\'collapsed igz-icon-right\': !$ctrl.item.ui.editModeActive,\n' +
25081
+ ' \'igz-icon-down\': $ctrl.item.ui.editModeActive}"> </span> </div> <div data-ng-show="!$ctrl.item.ui.editModeActive" class="igz-row common-table-cells-container item-row"> <div class="item-name" data-ng-if="!$ctrl.isNil($ctrl.item.name)"> <div class="text-ellipsis"> {{$ctrl.item.name}} </div> <igz-more-info data-ng-if="$ctrl.item.ui.moreInfoMsg.name" data-trigger="click" data-is-html-enabled="true" data-is-open="$ctrl.item.ui.moreInfoMsg.name.isOpen" data-icon-type="{{$ctrl.item.ui.moreInfoMsg.name.type}}" data-description="{{$ctrl.item.ui.moreInfoMsg.name.description}}"> </igz-more-info> </div> <div class="text-ellipsis item-name" data-ng-if="!$ctrl.isNil($ctrl.item.volumeMount.name)"> {{ $ctrl.item.volumeMount.name }} </div> <div class="item-class" data-ng-if="!$ctrl.isNil($ctrl.item.ui.selectedClass)"> {{$ctrl.item.ui.selectedClass.name}} </div> <div class="item-class" data-ng-if="!$ctrl.isNil($ctrl.item.volume.hostPath)"> {{ \'common:HOST_PATH\' | i18next }} </div> <div class="item-class" data-ng-if="!$ctrl.isNil($ctrl.item.volume.flexVolume)"> {{ \'functions:V3IO\' | i18next }} </div> <div class="item-class" data-ng-if="!$ctrl.isNil($ctrl.item.volume.secret.secretName)"> {{ \'functions:SECRET\' | i18next }} </div> <div class="item-class" data-ng-if="!$ctrl.isNil($ctrl.item.volume.configMap.name)"> {{ \'functions:CONFIG_MAP\' | i18next }} </div> <div class="item-class" data-ng-if="!$ctrl.isNil($ctrl.item.volume.persistentVolumeClaim.claimName)"> {{ \'functions:PVC\' | i18next }} </div> <div class="igz-col-70 item-info"> <div data-ng-hide="$ctrl.item.ui.editModeActive" class="collapsed-item-info-block"> <span data-ng-if="!$ctrl.isNil($ctrl.item.url)"> <span class="field-label">{{ \'common:URL\' | i18next }}</span>:&nbsp;{{ $ctrl.item.url }};&nbsp; </span> <span data-ng-if="!$ctrl.isNil($ctrl.item.maxWorkers)"> <span class="field-label">{{ \'functions:MAX_WORKERS\' | i18next }}</span>:&nbsp;{{ $ctrl.item.maxWorkers }};&nbsp; </span> <span data-ng-if="$ctrl.isNumber($ctrl.item.workerAvailabilityTimeoutMilliseconds)"> <span class="field-label">{{ \'functions:WORKER_AVAILABILITY_TIMEOUT\' | i18next }}</span>:&nbsp;{{ $ctrl.item.workerAvailabilityTimeoutMilliseconds }};&nbsp; </span> <span data-ng-if="!$ctrl.isNil($ctrl.item.secret)"> <span class="field-label">{{ \'functions:SECRET\' | i18next }}</span>:&nbsp;{{ $ctrl.getMask($ctrl.item.secret) }};&nbsp; </span> <span data-ng-repeat="(key, value) in $ctrl.item.attributes" data-ng-if="$ctrl.displayedAttributesFields.includes(key)"> <span class="field-label">{{ key }}</span>:&nbsp;{{ $ctrl.getAttributeValue(key, value) }};&nbsp; </span> <span data-ng-if="!$ctrl.isNil($ctrl.item.annotations)"> <span class="field-label">{{ \'functions:ANNOTATIONS\' | i18next }}</span>:&nbsp;{{ $ctrl.item.annotations }};&nbsp; </span> <span data-ng-if="!$ctrl.isNil($ctrl.item.username)"> <span class="field-label">{{ \'common:USERNAME\' | i18next }}</span>:&nbsp;{{ $ctrl.item.username }};&nbsp; </span> <span data-ng-if="!$ctrl.isNil($ctrl.item.password)"> <span class="field-label">{{ \'common:PASSWORD\' | i18next }}</span>:&nbsp;{{ $ctrl.getMask($ctrl.item.password) }};&nbsp; </span> <span data-ng-if="!$ctrl.isNil($ctrl.item.volumeMount.mountPath)"> <span class="field-label">{{ \'functions:MOUNT_PATH\' | i18next }}</span>:&nbsp;{{ $ctrl.item.volumeMount.mountPath }};&nbsp; </span> <span data-ng-if="!$ctrl.isNil($ctrl.item.volume.hostPath)"> <span class="field-label">{{ \'common:HOST_PATH\' | i18next }}</span>:&nbsp;{{ $ctrl.item.volume.hostPath.path }};&nbsp; </span> <span data-ng-if="!$ctrl.isNil($ctrl.item.volumeMount.readOnly)"> <span class="field-label">{{ \'common:READ_ONLY\' | i18next }}</span>:&nbsp;{{ $ctrl.item.volumeMount.readOnly }};&nbsp; </span> <span data-ng-if="!$ctrl.isNil($ctrl.item.volume.flexVolume.options.container)"> <span class="field-label">{{ \'functions:CONTAINER_NAME\' | i18next }}</span>:&nbsp;{{ $ctrl.item.volume.flexVolume.options.container }};&nbsp; </span> <span data-ng-if="!$ctrl.isNil($ctrl.item.volume.flexVolume.options.subPath)"> <span class="field-label">{{ \'functions:SUB_PATH\' | i18next }}</span>:&nbsp;{{ $ctrl.item.volume.flexVolume.options.subPath }};&nbsp; </span> <span data-ng-if="!$ctrl.isNil($ctrl.item.volume.configMap.name)"> <span class="field-label">{{ \'functions:CONFIG_MAP_NAME\' | i18next }}</span>:&nbsp;{{ $ctrl.item.volume.configMap.name }};&nbsp; </span> <span data-ng-if="!$ctrl.isNil($ctrl.item.volume.persistentVolumeClaim.claimName)"> <span class="field-label">{{ \'functions:PERSISTENT_VOLUME_CLAIM_NAME\' | i18next }}</span>:&nbsp; {{ $ctrl.item.volume.persistentVolumeClaim.claimName }};&nbsp; </span> <span data-ng-if="!$ctrl.isNil($ctrl.item.workerAllocatorName)"> <span class="field-label">{{ \'functions:WORKER_ALLOCATOR_NAME\' | i18next }}</span>:&nbsp;{{ $ctrl.item.workerAllocatorName }};&nbsp; </span> </div> </div> </div> <div data-ng-transclude class="igz-col-100" data-ng-if="$ctrl.item.ui.editModeActive"></div> <div class="common-table-cell actions-menu" data-ng-hide="$ctrl.readOnly" data-ng-if="::$ctrl.showDotMenu()"> <igz-action-menu data-actions="$ctrl.actions" data-on-fire-action="$ctrl.onFireAction"> </igz-action-menu> </div> <div class="common-table-cell single-action" data-ng-hide="$ctrl.readOnly" data-ng-if="::!$ctrl.showDotMenu()"> <div class="igz-action-panel"> <div class="actions-list"> <div class="igz-action-item" data-test-id="{{$ctrl.deleteTestId}}" data-ng-click="$ctrl.onClickAction($ctrl.actions[0])" data-uib-tooltip="{{$ctrl.actions[0].label}}" data-tooltip-popup-delay="1000" data-tooltip-placement="bottom" data-tooltip-append-to-body="true"> <span class="action-icon" data-ng-class="$ctrl.actions[0].icon"> </span> </div> </div> </div> </div> </div> </div> ');
25082
25082
  }]);
25083
25083
  })();
25084
25084
 
@@ -25089,8 +25089,8 @@ try {
25089
25089
  module = angular.module('iguazio.dashboard-controls.templates', []);
25090
25090
  }
25091
25091
  module.run(['$templateCache', function($templateCache) {
25092
- $templateCache.put('nuclio/common/components/breadcrumbs/breadcrumbs.tpl.html',
25093
- '<span class="main-header-title"> <span class="main-header-title-text" data-ng-click="$ctrl.goToProjectsList()" data-ng-class="{\'disable-behavior\': !$ctrl.mainHeaderTitle.project && $ctrl.mainHeaderTitle.function !== \'Create function\'}"> {{ $ctrl.mainHeaderTitle.title | i18next }} </span> <span class="igz-icon-right ncl-header-subtitle"></span> </span> <span class="main-header-title" data-ng-if="$ctrl.mainHeaderTitle.project.metadata.name"> <span class="main-header-title-text" data-ng-click="$ctrl.goToProjectScreen()"> {{$ctrl.mainHeaderTitle.project.metadata.name}} </span> <ncl-breadcrumbs-dropdown data-state="$ctrl.mainHeaderTitle.state" data-title="$ctrl.mainHeaderTitle.project.metadata.name" data-project="$ctrl.mainHeaderTitle.project" data-type="projects" data-get-functions="$ctrl.getFunctions({id: id, enrichApiGateways: enrichApiGateways})" data-get-projects="$ctrl.getProjects()"> </ncl-breadcrumbs-dropdown> </span> <span class="main-header-title" data-ng-if="$ctrl.mainHeaderTitle.function && $ctrl.mainHeaderTitle.version"> <span class="main-header-title-text" data-ng-click="$ctrl.goToFunctionScreen()">{{$ctrl.mainHeaderTitle.function}}</span> <ncl-breadcrumbs-dropdown data-ng-if="$ctrl.mainHeaderTitle.version" data-state="$ctrl.mainHeaderTitle.state" data-title="$ctrl.mainHeaderTitle.function" data-project="$ctrl.mainHeaderTitle.project" data-type="functions" data-get-functions="$ctrl.getFunctions({id: id, enrichApiGateways: enrichApiGateways})" data-get-projects="$ctrl.getProjects()"> </ncl-breadcrumbs-dropdown> </span> <span data-ng-if="$ctrl.mainHeaderTitle.tab" class="ncl-bold-subtitle"> {{$ctrl.mainHeaderTitle.tab}} </span> <span data-ng-if="$ctrl.mainHeaderTitle.function === \'Create function\'" class="ncl-bold-subtitle"> {{$ctrl.mainHeaderTitle.function}} </span> <span data-ng-if="$ctrl.mainHeaderTitle.version" class="ncl-bold-subtitle"> {{$ctrl.mainHeaderTitle.version}} </span> ');
25092
+ $templateCache.put('nuclio/common/components/deploy-log/deploy-log.tpl.html',
25093
+ '<div class="ncl-deploy-log-wrapper"> <div class="log-panel igz-scrollable-container" data-ng-scrollbars data-ng-scrollbars-config="$ctrl.scrollConfig"> <div class="log-entry" data-ng-if="$ctrl.lodash.isArray($ctrl.logEntries)" data-ng-repeat="log in $ctrl.logEntries track by $index"> <span class="log-entry-time" data-ng-if="log.time">[{{log.time | date:\'HH:mm:ss.sss\'}}]</span> <span class="log-entry-level-{{log.level}}" data-ng-if="log.level">&nbsp;({{$ctrl.getLogLevel(log.level)}})</span> <span class="log-entry-message">&nbsp;{{log.message}}</span> <span class="log-entry-error" data-ng-if="log.err">&nbsp;{{log.err}}</span> <span class="log-entry-params">&nbsp;{{$ctrl.getLogParams(log)}}</span> </div> <div class="log-entry" data-ng-if="!$ctrl.lodash.isArray($ctrl.logEntries)"> {{$ctrl.logEntries}} </div> </div> </div> ');
25094
25094
  }]);
25095
25095
  })();
25096
25096
 
@@ -25241,8 +25241,8 @@ try {
25241
25241
  module = angular.module('iguazio.dashboard-controls.templates', []);
25242
25242
  }
25243
25243
  module.run(['$templateCache', function($templateCache) {
25244
- $templateCache.put('nuclio/functions/version/version-monitoring/version-monitoring.tpl.html',
25245
- '<div class="ncl-version-monitoring ncl-version" data-igz-extend-background> <div class="igz-scrollable-container" data-ng-scrollbars data-ng-scrollbars-config="$ctrl.scrollConfig"> <div class="ncl-version-monitoring-wrapper"> <div class="row"> <div class="monitoring-block invocation-block"> <div class="internal-invocation-urls"> <span class="monitoring-block-title">{{ \'functions:INTERNAL_INVOCATION_URLS\' | i18next }}: </span> <ul class="invocation-url-list" ng-if="!$ctrl.isFunctionDeploying()"> <li class="monitoring-invocation-url-wrapper" data-ng-repeat="url in $ctrl.version.status.internalInvocationUrls"> <span>{{url}}</span> <div class="igz-action-panel"> <div class="actions-list"> <igz-copy-to-clipboard data-value="url"></igz-copy-to-clipboard> </div> </div> </li> </ul> <p data-ng-if="!$ctrl.version.status.internalInvocationUrls.length || $ctrl.isFunctionDeploying()" data-ng-i18next="common:N_A"></p> </div> <div class="external-invocation-urls"> <span class="monitoring-block-title">{{ \'functions:EXTERNAL_INVOCATION_URLS\' | i18next }}: </span> <igz-more-info data-description="{{ \'functions:TOOLTIP.TO_MAKE_FUNCTION_ACCESSIBLE\' | i18next:{functionId: $ctrl.version.metadata.name} }}" data-trigger="click" data-is-html-enabled="true"> </igz-more-info> <ul class="invocation-url-list" data-ng-if="$ctrl.version.status.externalInvocationUrls.length > 0 && !$ctrl.isFunctionDeploying()"> <li class="monitoring-invocation-url-wrapper" data-ng-repeat="url in $ctrl.version.status.externalInvocationUrls"> <span>{{url}}</span> <div class="igz-action-panel"> <div class="actions-list"> <igz-copy-to-clipboard data-value="url"></igz-copy-to-clipboard> </div> </div> </li> </ul> <p data-ng-if="!$ctrl.version.status.externalInvocationUrls || $ctrl.version.status.externalInvocationUrls.length === 0 || $ctrl.isFunctionDeploying()" data-ng-i18next="common:N_A"></p> </div> </div> </div> <div class="row"> <div class="monitoring-block ncl-monitoring-build-logger"> <span class="icon-collapsed general-content" data-ng-class="$ctrl.rowIsCollapsed.buildLog ? \'igz-icon-right\' : \'igz-icon-down\'" data-ng-click="$ctrl.onRowCollapse(\'buildLog\')"></span> <span class="monitoring-block-title"> {{ \'functions:BUILD_LOG\' | i18next }} </span> <div class="ncl-monitoring-build-logs collapsed-block-content-wrapper" data-uib-collapse="$ctrl.rowIsCollapsed.buildLog"> <ncl-deploy-log data-log-entries="$ctrl.version.status.logs"></ncl-deploy-log> </div> </div> </div> <div class="row" data-ng-if="$ctrl.checkIsErrorState()"> <div class="monitoring-block ncl-monitoring-error-logger"> <span class="icon-collapsed general-content" data-ng-class="$ctrl.rowIsCollapsed.errorLog ? \'igz-icon-right\' : \'igz-icon-down\'" data-ng-click="$ctrl.onRowCollapse(\'errorLog\')"> </span> <span class="monitoring-block-title"> {{ \'common:ERROR\' | i18next }} </span> <div class="ncl-monitoring-error-logs collapsed-block-content-wrapper" data-uib-collapse="$ctrl.rowIsCollapsed.errorLog"> <div class="error-panel igz-scrollable-container" data-ng-scrollbars data-ng-scrollbars-config="$ctrl.scrollConfig"> <div class="log-entry"> <span class="log-entry-error"> {{$ctrl.version.status.message}} </span> </div> </div> </div> </div> </div> </div> </div> </div> ');
25244
+ $templateCache.put('nuclio/functions/version/version-configuration/version-configuration.tpl.html',
25245
+ '<div class="ncl-version-configuration ncl-version" data-igz-extend-background> <div class="igz-scrollable-container" data-ng-scrollbars data-ng-scrollbars-config="$ctrl.scrollConfig"> <div class="ncl-version-configuration-wrapper"> <div class="row"> <ncl-version-configuration-basic-settings class="configuration-block" data-version="$ctrl.version" data-is-function-deploying="$ctrl.isFunctionDeploying()" data-on-change-callback="$ctrl.onConfigurationChangeCallback"> </ncl-version-configuration-basic-settings> <ncl-version-configuration-resources class="configuration-block" data-version="$ctrl.version" data-is-function-deploying="$ctrl.isFunctionDeploying()" data-on-change-callback="$ctrl.onConfigurationChangeCallback"> </ncl-version-configuration-resources> </div> <div class="row"> <ncl-version-configuration-environment-variables class="configuration-block" data-version="$ctrl.version" data-is-function-deploying="$ctrl.isFunctionDeploying()" data-on-change-callback="$ctrl.onConfigurationChangeCallback"> </ncl-version-configuration-environment-variables> </div> <div class="row"> <ncl-version-configuration-labels class="configuration-block" data-version="$ctrl.version" data-is-function-deploying="$ctrl.isFunctionDeploying()" data-on-change-callback="$ctrl.onConfigurationChangeCallback"> </ncl-version-configuration-labels> <ncl-version-configuration-annotations class="configuration-block" data-version="$ctrl.version" data-is-function-deploying="$ctrl.isFunctionDeploying()" data-on-change-callback="$ctrl.onConfigurationChangeCallback"> </ncl-version-configuration-annotations> </div> <div class="row"> <ncl-version-configuration-volumes class="configuration-block" data-version="$ctrl.version" data-is-function-deploying="$ctrl.isFunctionDeploying()" data-on-change-callback="$ctrl.onConfigurationChangeCallback()"> </ncl-version-configuration-volumes> <ncl-version-configuration-build class="configuration-block" data-version="$ctrl.version" data-is-function-deploying="$ctrl.isFunctionDeploying()" data-on-change-callback="$ctrl.onConfigurationChangeCallback"> </ncl-version-configuration-build> </div> <div class="row"> <ncl-version-configuration-logging data-ng-if="false" class="configuration-block" data-version="$ctrl.version" data-on-change-callback="$ctrl.onConfigurationChangeCallback"> </ncl-version-configuration-logging> <ncl-version-configuration-runtime-attributes data-ng-if="$ctrl.isRuntimeBlockVisible()" class="configuration-block runtime-attributes" data-version="$ctrl.version" data-is-function-deploying="$ctrl.isFunctionDeploying()" data-on-change-callback="$ctrl.onConfigurationChangeCallback"> </ncl-version-configuration-runtime-attributes> <div data-ng-if="$ctrl.isRuntimeBlockVisible()" class="configuration-block invisible"></div> </div> </div> </div> </div> ');
25246
25246
  }]);
25247
25247
  })();
25248
25248
 
@@ -25253,8 +25253,8 @@ try {
25253
25253
  module = angular.module('iguazio.dashboard-controls.templates', []);
25254
25254
  }
25255
25255
  module.run(['$templateCache', function($templateCache) {
25256
- $templateCache.put('nuclio/functions/version/version-configuration/version-configuration.tpl.html',
25257
- '<div class="ncl-version-configuration ncl-version" data-igz-extend-background> <div class="igz-scrollable-container" data-ng-scrollbars data-ng-scrollbars-config="$ctrl.scrollConfig"> <div class="ncl-version-configuration-wrapper"> <div class="row"> <ncl-version-configuration-basic-settings class="configuration-block" data-version="$ctrl.version" data-is-function-deploying="$ctrl.isFunctionDeploying()" data-on-change-callback="$ctrl.onConfigurationChangeCallback"> </ncl-version-configuration-basic-settings> <ncl-version-configuration-resources class="configuration-block" data-version="$ctrl.version" data-is-function-deploying="$ctrl.isFunctionDeploying()" data-on-change-callback="$ctrl.onConfigurationChangeCallback"> </ncl-version-configuration-resources> </div> <div class="row"> <ncl-version-configuration-environment-variables class="configuration-block" data-version="$ctrl.version" data-is-function-deploying="$ctrl.isFunctionDeploying()" data-on-change-callback="$ctrl.onConfigurationChangeCallback"> </ncl-version-configuration-environment-variables> </div> <div class="row"> <ncl-version-configuration-labels class="configuration-block" data-version="$ctrl.version" data-is-function-deploying="$ctrl.isFunctionDeploying()" data-on-change-callback="$ctrl.onConfigurationChangeCallback"> </ncl-version-configuration-labels> <ncl-version-configuration-annotations class="configuration-block" data-version="$ctrl.version" data-is-function-deploying="$ctrl.isFunctionDeploying()" data-on-change-callback="$ctrl.onConfigurationChangeCallback"> </ncl-version-configuration-annotations> </div> <div class="row"> <ncl-version-configuration-volumes class="configuration-block" data-version="$ctrl.version" data-is-function-deploying="$ctrl.isFunctionDeploying()" data-on-change-callback="$ctrl.onConfigurationChangeCallback()"> </ncl-version-configuration-volumes> <ncl-version-configuration-build class="configuration-block" data-version="$ctrl.version" data-is-function-deploying="$ctrl.isFunctionDeploying()" data-on-change-callback="$ctrl.onConfigurationChangeCallback"> </ncl-version-configuration-build> </div> <div class="row"> <ncl-version-configuration-logging data-ng-if="false" class="configuration-block" data-version="$ctrl.version" data-on-change-callback="$ctrl.onConfigurationChangeCallback"> </ncl-version-configuration-logging> <ncl-version-configuration-runtime-attributes data-ng-if="$ctrl.isRuntimeBlockVisible()" class="configuration-block runtime-attributes" data-version="$ctrl.version" data-is-function-deploying="$ctrl.isFunctionDeploying()" data-on-change-callback="$ctrl.onConfigurationChangeCallback"> </ncl-version-configuration-runtime-attributes> <div data-ng-if="$ctrl.isRuntimeBlockVisible()" class="configuration-block invisible"></div> </div> </div> </div> </div> ');
25256
+ $templateCache.put('nuclio/functions/version/version-monitoring/version-monitoring.tpl.html',
25257
+ '<div class="ncl-version-monitoring ncl-version" data-igz-extend-background> <div class="igz-scrollable-container" data-ng-scrollbars data-ng-scrollbars-config="$ctrl.scrollConfig"> <div class="ncl-version-monitoring-wrapper"> <div class="row"> <div class="monitoring-block invocation-block"> <div class="internal-invocation-urls"> <span class="monitoring-block-title">{{ \'functions:INTERNAL_INVOCATION_URLS\' | i18next }}: </span> <ul class="invocation-url-list" ng-if="!$ctrl.isFunctionDeploying()"> <li class="monitoring-invocation-url-wrapper" data-ng-repeat="url in $ctrl.version.status.internalInvocationUrls"> <span>{{url}}</span> <div class="igz-action-panel"> <div class="actions-list"> <igz-copy-to-clipboard data-value="url"></igz-copy-to-clipboard> </div> </div> </li> </ul> <p data-ng-if="!$ctrl.version.status.internalInvocationUrls.length || $ctrl.isFunctionDeploying()" data-ng-i18next="common:N_A"></p> </div> <div class="external-invocation-urls"> <span class="monitoring-block-title">{{ \'functions:EXTERNAL_INVOCATION_URLS\' | i18next }}: </span> <igz-more-info data-description="{{ \'functions:TOOLTIP.TO_MAKE_FUNCTION_ACCESSIBLE\' | i18next:{functionId: $ctrl.version.metadata.name} }}" data-trigger="click" data-is-html-enabled="true"> </igz-more-info> <ul class="invocation-url-list" data-ng-if="$ctrl.version.status.externalInvocationUrls.length > 0 && !$ctrl.isFunctionDeploying()"> <li class="monitoring-invocation-url-wrapper" data-ng-repeat="url in $ctrl.version.status.externalInvocationUrls"> <span>{{url}}</span> <div class="igz-action-panel"> <div class="actions-list"> <igz-copy-to-clipboard data-value="url"></igz-copy-to-clipboard> </div> </div> </li> </ul> <p data-ng-if="!$ctrl.version.status.externalInvocationUrls || $ctrl.version.status.externalInvocationUrls.length === 0 || $ctrl.isFunctionDeploying()" data-ng-i18next="common:N_A"></p> </div> </div> </div> <div class="row"> <div class="monitoring-block ncl-monitoring-build-logger"> <span class="icon-collapsed general-content" data-ng-class="$ctrl.rowIsCollapsed.buildLog ? \'igz-icon-right\' : \'igz-icon-down\'" data-ng-click="$ctrl.onRowCollapse(\'buildLog\')"></span> <span class="monitoring-block-title"> {{ \'functions:BUILD_LOG\' | i18next }} </span> <div class="ncl-monitoring-build-logs collapsed-block-content-wrapper" data-uib-collapse="$ctrl.rowIsCollapsed.buildLog"> <ncl-deploy-log data-log-entries="$ctrl.version.status.logs"></ncl-deploy-log> </div> </div> </div> <div class="row" data-ng-if="$ctrl.checkIsErrorState()"> <div class="monitoring-block ncl-monitoring-error-logger"> <span class="icon-collapsed general-content" data-ng-class="$ctrl.rowIsCollapsed.errorLog ? \'igz-icon-right\' : \'igz-icon-down\'" data-ng-click="$ctrl.onRowCollapse(\'errorLog\')"> </span> <span class="monitoring-block-title"> {{ \'common:ERROR\' | i18next }} </span> <div class="ncl-monitoring-error-logs collapsed-block-content-wrapper" data-uib-collapse="$ctrl.rowIsCollapsed.errorLog"> <div class="error-panel igz-scrollable-container" data-ng-scrollbars data-ng-scrollbars-config="$ctrl.scrollConfig"> <div class="log-entry"> <span class="log-entry-error"> {{$ctrl.version.status.message}} </span> </div> </div> </div> </div> </div> </div> </div> </div> ');
25258
25258
  }]);
25259
25259
  })();
25260
25260
 
@@ -25388,8 +25388,8 @@ try {
25388
25388
  module = angular.module('iguazio.dashboard-controls.templates', []);
25389
25389
  }
25390
25390
  module.run(['$templateCache', function($templateCache) {
25391
- $templateCache.put('nuclio/functions/version/version-configuration/tabs/version-configuration-annotations/version-configuration-annotations.tpl.html',
25392
- '<div class="ncl-version-configuration-annotations"> <div class="title"> <span>{{ \'functions:ANNOTATIONS\' | i18next }}</span> <igz-more-info data-description="{{$ctrl.tooltip}}" data-trigger="click" data-is-html-enabled="true"> </igz-more-info> </div> <form name="$ctrl.annotationsForm" class="annotations-wrapper" novalidate> <div data-ng-if="$ctrl.annotations.length > 0" class="table-headers"> <div class="key-header"> {{ \'common:KEY\' | i18next }} <igz-more-info data-description="{{$ctrl.keyTooltip}}" data-trigger="click" data-is-html-enabled="true"> </igz-more-info> </div> <div class="value-header"> {{ \'common:VALUE\' | i18next }} </div> </div> <div class="igz-scrollable-container scrollable-annotations" data-ng-scrollbars data-igz-ng-scrollbars-config="{{$ctrl.igzScrollConfig}}" data-ng-scrollbars-config="$ctrl.scrollConfig"> <div class="table-body" data-ng-repeat="annotation in $ctrl.annotations"> <ncl-key-value-input class="new-label-input" data-row-data="annotation" data-use-type="false" data-is-disabled="$ctrl.isFunctionDeploying()" data-item-index="$index" data-validation-rules="$ctrl.validationRules" data-action-handler-callback="$ctrl.handleAction(actionType, index)" data-change-data-callback="$ctrl.onChangeData(newData, index)" data-submit-on-fly="true"> </ncl-key-value-input> </div> </div> <div class="igz-create-button create-annotation-button" data-ng-class="{\'disabled\': $ctrl.isFunctionDeploying()}" data-ng-click="$ctrl.addNewAnnotation($event)"> <span class="igz-icon-add-round"></span> {{ \'functions:CREATE_NEW_ANNOTATION\' | i18next }} </div> </form> </div> ');
25391
+ $templateCache.put('nuclio/functions/version/version-configuration/tabs/version-configuration-basic-settings/version-configuration-basic-settings.tpl.html',
25392
+ '<div class="ncl-version-configuration-basic-settings"> <div class="title">{{ \'common:BASIC_SETTINGS\' | i18next }}</div> <form name="$ctrl.basicSettingsForm" class="basic-settings-wrapper" novalidate> <div class="row enable-checkbox"> <input type="checkbox" class="small" id="enable" data-ng-disabled="$ctrl.isFunctionDeploying()" data-ng-model="$ctrl.enableFunction" data-ng-change="$ctrl.updateEnableStatus()"> <label for="enable" class="checkbox-inline">{{ \'common:ENABLED\' | i18next }}</label> </div> <div class="row" data-ng-if="$ctrl.isDemoMode()"> <div class="timeout-block"> <div class="label"> <div class="timeout-checkbox"> <input type="checkbox" class="small" id="timeout" data-ng-disabled="$ctrl.isFunctionDeploying()" data-ng-model="$ctrl.enableTimeout"> <label for="timeout" class="checkbox-inline">{{ \'functions:TIMEOUT\' | i18next }}</label> </div> </div> <div class="timeout-values"> <div class="inputs"> <igz-validating-input-field data-field-type="input" data-input-name="min" data-input-value="$ctrl.timeout.min" data-is-focused="false" data-is-disabled="!$ctrl.enableTimeout" data-read-only="$ctrl.isFunctionDeploying()" data-update-data-callback="$ctrl.inputValueCallback(newData, field)" data-update-data-field="timeout.min" data-form-object="$ctrl.basicSettingsForm" data-validation-is-required="true" data-validation-rules="$ctrl.validationRules.integer" data-placeholder-text="{{ \'common:MIN\' | i18next }}..."> </igz-validating-input-field> <div class="values-label">{{ \'common:MIN\' | i18next }}</div> <igz-validating-input-field data-field-type="input" data-input-name="sec" data-input-value="$ctrl.timeout.sec" data-is-focused="false" data-is-disabled="!$ctrl.enableTimeout" data-read-only="$ctrl.isFunctionDeploying()" data-update-data-callback="$ctrl.inputValueCallback(newData, field)" data-update-data-field="timeout.sec" data-form-object="$ctrl.basicSettingsForm" data-validation-is-required="true" data-validation-rules="$ctrl.validationRules.integer" data-placeholder-text="{{ \'functions:SEC\' | i18next }}..."> </igz-validating-input-field> <div class="values-label">{{ \'functions:SEC\' | i18next }}</div> </div> </div> </div> </div> <div class="row"> <div class="description-block"> <div class="label">{{ \'common:DESCRIPTION\' | i18next }}</div> <igz-validating-input-field data-field-type="input" data-input-name="description" data-input-value="$ctrl.version.spec.description" data-is-focused="false" data-read-only="$ctrl.isFunctionDeploying()" data-update-data-callback="$ctrl.inputValueCallback(newData, field)" data-update-data-field="spec.description" data-form-object="$ctrl.basicSettingsForm" data-placeholder-text="{{ \'functions:PLACEHOLDER.ENTER_DESCRIPTION\' | i18next }}"> </igz-validating-input-field> </div> </div> <div class="row"> <div class="account-block"> <div class="label">{{ \'functions:SERVICE_ACCOUNT\' | i18next }}</div> <igz-validating-input-field data-field-type="input" data-input-name="serviceAccount" data-read-only="$ctrl.isFunctionDeploying()" data-input-value="$ctrl.version.spec.serviceAccount" data-update-data-callback="$ctrl.inputValueCallback(newData, field)" data-update-data-field="spec.serviceAccount" data-form-object="$ctrl.basicSettingsForm" data-placeholder-text="{{ \'functions:PLACEHOLDER.MY_SERVICE_ACCOUNT\' | i18next }}"> </igz-validating-input-field> </div> </div> <div class="row"> <div class="run-as-user-block"> <div class="label" data-ng-class="{asterisk: $ctrl.version.spec.securityContext.runAsGroup}"> {{ \'common:RUN_AS_USER\' | i18next }} </div> <igz-number-input data-allow-empty-field="true" data-validation-is-required="$ctrl.lodash.isNumber($ctrl.version.spec.securityContext.runAsGroup)" data-value-step="1" data-min-value="0" data-max-value="2147483647" data-is-disabled="$ctrl.isFunctionDeploying()" data-form-object="$ctrl.basicSettingsForm" data-input-name="run_as_user" data-update-number-input-callback="$ctrl.inputValueCallback(newData, field)" data-update-number-input-field="spec.securityContext.runAsUser" data-current-value="$ctrl.version.spec.securityContext.runAsUser"> </igz-number-input> </div> <div class="run-as-group-block"> <div class="label">{{ \'common:RUN_AS_GROUP\' | i18next }}</div> <igz-number-input data-allow-empty-field="true" data-value-step="1" data-min-value="0" data-max-value="2147483647" data-is-disabled="$ctrl.isFunctionDeploying()" data-form-object="$ctrl.basicSettingsForm" data-input-name="run_as_group" data-update-number-input-callback="$ctrl.inputValueCallback(newData, field)" data-update-number-input-field="spec.securityContext.runAsGroup" data-current-value="$ctrl.version.spec.securityContext.runAsGroup"> </igz-number-input> </div> <div class="fs-group-block" data-ng-if="!$ctrl.platformIsKube"> <div class="label">{{ \'common:FS_GROUP\' | i18next }}</div> <igz-number-input data-allow-empty-field="true" data-value-step="1" data-min-value="0" data-max-value="2147483647" data-is-disabled="$ctrl.isFunctionDeploying()" data-form-object="$ctrl.basicSettingsForm" data-input-name="fs_group" data-update-number-input-callback="$ctrl.inputValueCallback(newData, field)" data-update-number-input-field="spec.securityContext.fsGroup" data-current-value="$ctrl.version.spec.securityContext.fsGroup"> </igz-number-input> </div> </div> <div class="row"> <div class="logger-block"> <div class="logger-dropdown"> <span class="label">{{ \'functions:LOGGER_LEVEL\' | i18next }}</span> <igz-default-dropdown data-selected-item="$ctrl.version.spec.loggerSinks[0].level" data-select-property-only="id" data-values-array="$ctrl.logLevelValues" data-item-select-callback="$ctrl.setPriority(item)" data-read-only="$ctrl.isFunctionDeploying()" data-enable-overlap="true" data-prevent-drop-up="true"> </igz-default-dropdown> </div> <div class="logger-input" data-ng-if="$ctrl.isDemoMode()"> <span class="label">{{ \'functions:LOGGER_DESTINATION\' | i18next }}</span> <igz-validating-input-field data-field-type="input" data-input-name="arguments" data-read-only="$ctrl.isFunctionDeploying()" data-input-value="$ctrl.version.spec.loggerSinks[0].sink" data-update-data-callback="$ctrl.inputValueCallback(newData, field)" data-update-data-field="spec.loggerSinks[0].sink" data-form-object="$ctrl.basicSettingsForm" data-placeholder-text="{{ \'functions:PLACEHOLDER.ENTER_DESTINATION\' | i18next }}"> </igz-validating-input-field> </div> </div> </div> </form> </div> ');
25393
25393
  }]);
25394
25394
  })();
25395
25395
 
@@ -25400,8 +25400,8 @@ try {
25400
25400
  module = angular.module('iguazio.dashboard-controls.templates', []);
25401
25401
  }
25402
25402
  module.run(['$templateCache', function($templateCache) {
25403
- $templateCache.put('nuclio/functions/version/version-configuration/tabs/version-configuration-basic-settings/version-configuration-basic-settings.tpl.html',
25404
- '<div class="ncl-version-configuration-basic-settings"> <div class="title">{{ \'common:BASIC_SETTINGS\' | i18next }}</div> <form name="$ctrl.basicSettingsForm" class="basic-settings-wrapper" novalidate> <div class="row enable-checkbox"> <input type="checkbox" class="small" id="enable" data-ng-disabled="$ctrl.isFunctionDeploying()" data-ng-model="$ctrl.enableFunction" data-ng-change="$ctrl.updateEnableStatus()"> <label for="enable" class="checkbox-inline">{{ \'common:ENABLED\' | i18next }}</label> </div> <div class="row" data-ng-if="$ctrl.isDemoMode()"> <div class="timeout-block"> <div class="label"> <div class="timeout-checkbox"> <input type="checkbox" class="small" id="timeout" data-ng-disabled="$ctrl.isFunctionDeploying()" data-ng-model="$ctrl.enableTimeout"> <label for="timeout" class="checkbox-inline">{{ \'functions:TIMEOUT\' | i18next }}</label> </div> </div> <div class="timeout-values"> <div class="inputs"> <igz-validating-input-field data-field-type="input" data-input-name="min" data-input-value="$ctrl.timeout.min" data-is-focused="false" data-is-disabled="!$ctrl.enableTimeout" data-read-only="$ctrl.isFunctionDeploying()" data-update-data-callback="$ctrl.inputValueCallback(newData, field)" data-update-data-field="timeout.min" data-form-object="$ctrl.basicSettingsForm" data-validation-is-required="true" data-validation-rules="$ctrl.validationRules.integer" data-placeholder-text="{{ \'common:MIN\' | i18next }}..."> </igz-validating-input-field> <div class="values-label">{{ \'common:MIN\' | i18next }}</div> <igz-validating-input-field data-field-type="input" data-input-name="sec" data-input-value="$ctrl.timeout.sec" data-is-focused="false" data-is-disabled="!$ctrl.enableTimeout" data-read-only="$ctrl.isFunctionDeploying()" data-update-data-callback="$ctrl.inputValueCallback(newData, field)" data-update-data-field="timeout.sec" data-form-object="$ctrl.basicSettingsForm" data-validation-is-required="true" data-validation-rules="$ctrl.validationRules.integer" data-placeholder-text="{{ \'functions:SEC\' | i18next }}..."> </igz-validating-input-field> <div class="values-label">{{ \'functions:SEC\' | i18next }}</div> </div> </div> </div> </div> <div class="row"> <div class="description-block"> <div class="label">{{ \'common:DESCRIPTION\' | i18next }}</div> <igz-validating-input-field data-field-type="input" data-input-name="description" data-input-value="$ctrl.version.spec.description" data-is-focused="false" data-read-only="$ctrl.isFunctionDeploying()" data-update-data-callback="$ctrl.inputValueCallback(newData, field)" data-update-data-field="spec.description" data-form-object="$ctrl.basicSettingsForm" data-placeholder-text="{{ \'functions:PLACEHOLDER.ENTER_DESCRIPTION\' | i18next }}"> </igz-validating-input-field> </div> </div> <div class="row"> <div class="account-block"> <div class="label">{{ \'functions:SERVICE_ACCOUNT\' | i18next }}</div> <igz-validating-input-field data-field-type="input" data-input-name="serviceAccount" data-read-only="$ctrl.isFunctionDeploying()" data-input-value="$ctrl.version.spec.serviceAccount" data-update-data-callback="$ctrl.inputValueCallback(newData, field)" data-update-data-field="spec.serviceAccount" data-form-object="$ctrl.basicSettingsForm" data-placeholder-text="{{ \'functions:PLACEHOLDER.MY_SERVICE_ACCOUNT\' | i18next }}"> </igz-validating-input-field> </div> </div> <div class="row"> <div class="run-as-user-block"> <div class="label" data-ng-class="{asterisk: $ctrl.version.spec.securityContext.runAsGroup}"> {{ \'common:RUN_AS_USER\' | i18next }} </div> <igz-number-input data-allow-empty-field="true" data-validation-is-required="$ctrl.lodash.isNumber($ctrl.version.spec.securityContext.runAsGroup)" data-value-step="1" data-min-value="0" data-max-value="2147483647" data-is-disabled="$ctrl.isFunctionDeploying()" data-form-object="$ctrl.basicSettingsForm" data-input-name="run_as_user" data-update-number-input-callback="$ctrl.inputValueCallback(newData, field)" data-update-number-input-field="spec.securityContext.runAsUser" data-current-value="$ctrl.version.spec.securityContext.runAsUser"> </igz-number-input> </div> <div class="run-as-group-block"> <div class="label">{{ \'common:RUN_AS_GROUP\' | i18next }}</div> <igz-number-input data-allow-empty-field="true" data-value-step="1" data-min-value="0" data-max-value="2147483647" data-is-disabled="$ctrl.isFunctionDeploying()" data-form-object="$ctrl.basicSettingsForm" data-input-name="run_as_group" data-update-number-input-callback="$ctrl.inputValueCallback(newData, field)" data-update-number-input-field="spec.securityContext.runAsGroup" data-current-value="$ctrl.version.spec.securityContext.runAsGroup"> </igz-number-input> </div> <div class="fs-group-block" data-ng-if="!$ctrl.platformIsKube"> <div class="label">{{ \'common:FS_GROUP\' | i18next }}</div> <igz-number-input data-allow-empty-field="true" data-value-step="1" data-min-value="0" data-max-value="2147483647" data-is-disabled="$ctrl.isFunctionDeploying()" data-form-object="$ctrl.basicSettingsForm" data-input-name="fs_group" data-update-number-input-callback="$ctrl.inputValueCallback(newData, field)" data-update-number-input-field="spec.securityContext.fsGroup" data-current-value="$ctrl.version.spec.securityContext.fsGroup"> </igz-number-input> </div> </div> <div class="row"> <div class="logger-block"> <div class="logger-dropdown"> <span class="label">{{ \'functions:LOGGER_LEVEL\' | i18next }}</span> <igz-default-dropdown data-selected-item="$ctrl.version.spec.loggerSinks[0].level" data-select-property-only="id" data-values-array="$ctrl.logLevelValues" data-item-select-callback="$ctrl.setPriority(item)" data-read-only="$ctrl.isFunctionDeploying()" data-enable-overlap="true" data-prevent-drop-up="true"> </igz-default-dropdown> </div> <div class="logger-input" data-ng-if="$ctrl.isDemoMode()"> <span class="label">{{ \'functions:LOGGER_DESTINATION\' | i18next }}</span> <igz-validating-input-field data-field-type="input" data-input-name="arguments" data-read-only="$ctrl.isFunctionDeploying()" data-input-value="$ctrl.version.spec.loggerSinks[0].sink" data-update-data-callback="$ctrl.inputValueCallback(newData, field)" data-update-data-field="spec.loggerSinks[0].sink" data-form-object="$ctrl.basicSettingsForm" data-placeholder-text="{{ \'functions:PLACEHOLDER.ENTER_DESTINATION\' | i18next }}"> </igz-validating-input-field> </div> </div> </div> </form> </div> ');
25403
+ $templateCache.put('nuclio/functions/version/version-configuration/tabs/version-configuration-annotations/version-configuration-annotations.tpl.html',
25404
+ '<div class="ncl-version-configuration-annotations"> <div class="title"> <span>{{ \'functions:ANNOTATIONS\' | i18next }}</span> <igz-more-info data-description="{{$ctrl.tooltip}}" data-trigger="click" data-is-html-enabled="true"> </igz-more-info> </div> <form name="$ctrl.annotationsForm" class="annotations-wrapper" novalidate> <div data-ng-if="$ctrl.annotations.length > 0" class="table-headers"> <div class="key-header"> {{ \'common:KEY\' | i18next }} <igz-more-info data-description="{{$ctrl.keyTooltip}}" data-trigger="click" data-is-html-enabled="true"> </igz-more-info> </div> <div class="value-header"> {{ \'common:VALUE\' | i18next }} </div> </div> <div class="igz-scrollable-container scrollable-annotations" data-ng-scrollbars data-igz-ng-scrollbars-config="{{$ctrl.igzScrollConfig}}" data-ng-scrollbars-config="$ctrl.scrollConfig"> <div class="table-body" data-ng-repeat="annotation in $ctrl.annotations"> <ncl-key-value-input class="new-label-input" data-row-data="annotation" data-use-type="false" data-is-disabled="$ctrl.isFunctionDeploying()" data-item-index="$index" data-validation-rules="$ctrl.validationRules" data-action-handler-callback="$ctrl.handleAction(actionType, index)" data-change-data-callback="$ctrl.onChangeData(newData, index)" data-submit-on-fly="true"> </ncl-key-value-input> </div> </div> <div class="igz-create-button create-annotation-button" data-ng-class="{\'disabled\': $ctrl.isFunctionDeploying()}" data-ng-click="$ctrl.addNewAnnotation($event)"> <span class="igz-icon-add-round"></span> {{ \'functions:CREATE_NEW_ANNOTATION\' | i18next }} </div> </form> </div> ');
25405
25405
  }]);
25406
25406
  })();
25407
25407