@vendure/admin-ui 1.4.3 → 1.4.7

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.
Files changed (51) hide show
  1. package/bundles/vendure-admin-ui-catalog.umd.js +68 -28
  2. package/bundles/vendure-admin-ui-catalog.umd.js.map +1 -1
  3. package/bundles/vendure-admin-ui-core.umd.js +101 -40
  4. package/bundles/vendure-admin-ui-core.umd.js.map +1 -1
  5. package/bundles/vendure-admin-ui-dashboard.umd.js.map +1 -1
  6. package/bundles/vendure-admin-ui-settings.umd.js +1 -1
  7. package/bundles/vendure-admin-ui-settings.umd.js.map +1 -1
  8. package/catalog/components/facet-detail/facet-detail.component.d.ts +7 -2
  9. package/catalog/vendure-admin-ui-catalog.metadata.json +1 -1
  10. package/core/common/generated-types.d.ts +7 -7
  11. package/core/common/version.d.ts +1 -1
  12. package/core/data/utils/remove-readonly-custom-fields.d.ts +12 -3
  13. package/core/providers/i18n/i18n.service.d.ts +3 -1
  14. package/core/shared/directives/if-default-channel-active.directive.d.ts +1 -1
  15. package/core/shared/directives/if-multichannel.directive.d.ts +1 -1
  16. package/core/shared/pipes/locale-base.pipe.d.ts +5 -0
  17. package/core/vendure-admin-ui-core.metadata.json +1 -1
  18. package/esm2015/catalog/components/facet-detail/facet-detail.component.js +44 -16
  19. package/esm2015/catalog/components/product-list/product-list.component.js +2 -2
  20. package/esm2015/core/common/base-detail.component.js +4 -4
  21. package/esm2015/core/common/generated-types.js +1 -1
  22. package/esm2015/core/common/introspection-result.js +1 -1
  23. package/esm2015/core/common/utilities/create-updated-translatable.js +1 -1
  24. package/esm2015/core/common/version.js +2 -2
  25. package/esm2015/core/components/main-nav/main-nav.component.js +3 -3
  26. package/esm2015/core/data/utils/remove-readonly-custom-fields.js +15 -3
  27. package/esm2015/core/providers/i18n/i18n.service.js +14 -5
  28. package/esm2015/core/shared/components/rich-text-editor/prosemirror/prosemirror.service.js +2 -2
  29. package/esm2015/core/shared/components/tabbed-custom-fields/tabbed-custom-fields.component.js +3 -2
  30. package/esm2015/core/shared/directives/if-default-channel-active.directive.js +2 -2
  31. package/esm2015/core/shared/directives/if-multichannel.directive.js +2 -2
  32. package/esm2015/core/shared/dynamic-form-inputs/select-form-input/select-form-input.component.js +2 -2
  33. package/esm2015/core/shared/pipes/asset-preview.pipe.js +2 -2
  34. package/esm2015/core/shared/pipes/locale-base.pipe.js +23 -1
  35. package/esm2015/core/shared/pipes/locale-currency-name.pipe.js +4 -4
  36. package/esm2015/core/shared/pipes/locale-currency.pipe.js +2 -2
  37. package/esm2015/core/shared/pipes/locale-date.pipe.js +2 -2
  38. package/esm2015/core/shared/pipes/locale-language-name.pipe.js +2 -3
  39. package/esm2015/core/shared/pipes/locale-region-name.pipe.js +2 -3
  40. package/esm2015/dashboard/widgets/latest-orders-widget/latest-orders-widget.component.js +1 -1
  41. package/esm2015/settings/components/channel-list/channel-list.component.js +2 -2
  42. package/fesm2015/vendure-admin-ui-catalog.js +44 -16
  43. package/fesm2015/vendure-admin-ui-catalog.js.map +1 -1
  44. package/fesm2015/vendure-admin-ui-core.js +66 -26
  45. package/fesm2015/vendure-admin-ui-core.js.map +1 -1
  46. package/fesm2015/vendure-admin-ui-dashboard.js.map +1 -1
  47. package/fesm2015/vendure-admin-ui-settings.js +1 -1
  48. package/fesm2015/vendure-admin-ui-settings.js.map +1 -1
  49. package/package.json +11 -11
  50. package/settings/vendure-admin-ui-settings.metadata.json +1 -1
  51. package/static/i18n-messages/pt_PT.json +22 -22
@@ -915,8 +915,8 @@
915
915
  name: '',
916
916
  visible: true,
917
917
  customFields: _this.formBuilder.group(_this.customFields.reduce(function (hash, field) {
918
- var _b;
919
- return (Object.assign(Object.assign({}, hash), (_b = {}, _b[field.name] = '', _b)));
918
+ var _d;
919
+ return (Object.assign(Object.assign({}, hash), (_d = {}, _d[field.name] = '', _d)));
920
920
  }, {})),
921
921
  }),
922
922
  values: _this.formBuilder.array([]),
@@ -952,14 +952,36 @@
952
952
  return this.detailForm.get('values');
953
953
  };
954
954
  FacetDetailComponent.prototype.addFacetValue = function () {
955
+ var e_1, _d;
955
956
  var valuesFormArray = this.detailForm.get('values');
956
957
  if (valuesFormArray) {
957
- valuesFormArray.insert(valuesFormArray.length, this.formBuilder.group({
958
+ var valueGroup = this.formBuilder.group({
958
959
  id: '',
959
960
  name: ['', forms.Validators.required],
960
961
  code: '',
961
- }));
962
- this.values.push({ name: '', code: '' });
962
+ });
963
+ var newValue = { name: '', code: '' };
964
+ if (this.customValueFields.length) {
965
+ var customValueFieldsGroup = new forms.FormGroup({});
966
+ newValue.customFields = {};
967
+ try {
968
+ for (var _e = __values(this.customValueFields), _f = _e.next(); !_f.done; _f = _e.next()) {
969
+ var fieldDef = _f.value;
970
+ var key = fieldDef.name;
971
+ customValueFieldsGroup.addControl(key, new forms.FormControl());
972
+ }
973
+ }
974
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
975
+ finally {
976
+ try {
977
+ if (_f && !_f.done && (_d = _e.return)) _d.call(_e);
978
+ }
979
+ finally { if (e_1) throw e_1.error; }
980
+ }
981
+ valueGroup.addControl('customFields', customValueFieldsGroup);
982
+ }
983
+ valuesFormArray.insert(valuesFormArray.length, valueGroup);
984
+ this.values.push(newValue);
963
985
  }
964
986
  };
965
987
  FacetDetailComponent.prototype.create = function () {
@@ -969,8 +991,8 @@
969
991
  return;
970
992
  }
971
993
  rxjs.combineLatest(this.entity$, this.languageCode$)
972
- .pipe(operators.take(1), operators.mergeMap(function (_b) {
973
- var _c = __read(_b, 2), facet = _c[0], languageCode = _c[1];
994
+ .pipe(operators.take(1), operators.mergeMap(function (_d) {
995
+ var _e = __read(_d, 2), facet = _e[0], languageCode = _e[1];
974
996
  var newFacet = _this.getUpdatedFacet(facet, facetForm, languageCode);
975
997
  return _this.dataService.facet.createFacet(newFacet);
976
998
  }), operators.switchMap(function (data) { return _this.dataService.facet.getAllFacets().single$.pipe(operators.mapTo(data)); }))
@@ -988,8 +1010,8 @@
988
1010
  FacetDetailComponent.prototype.save = function () {
989
1011
  var _this = this;
990
1012
  rxjs.combineLatest(this.entity$, this.languageCode$)
991
- .pipe(operators.take(1), operators.mergeMap(function (_b) {
992
- var _c = __read(_b, 2), facet = _c[0], languageCode = _c[1];
1013
+ .pipe(operators.take(1), operators.mergeMap(function (_d) {
1014
+ var _e = __read(_d, 2), facet = _e[0], languageCode = _e[1];
993
1015
  var facetGroup = _this.detailForm.get('facet');
994
1016
  var updateOperations = [];
995
1017
  if (facetGroup && facetGroup.dirty) {
@@ -1000,16 +1022,10 @@
1000
1022
  }
1001
1023
  var valuesArray = _this.detailForm.get('values');
1002
1024
  if (valuesArray && valuesArray.dirty) {
1003
- var newValues = valuesArray.controls
1004
- .filter(function (c) { return !c.value.id; })
1005
- .map(function (c) { return ({
1006
- facetId: facet.id,
1007
- code: c.value.code,
1008
- translations: [{ name: c.value.name, languageCode: languageCode }],
1009
- }); });
1010
- if (newValues.length) {
1025
+ var createdValues = _this.getCreatedFacetValues(facet, valuesArray, languageCode);
1026
+ if (createdValues.length) {
1011
1027
  updateOperations.push(_this.dataService.facet
1012
- .createFacetValues(newValues)
1028
+ .createFacetValues(createdValues)
1013
1029
  .pipe(operators.switchMap(function () { return _this.dataService.facet.getFacet(_this.id).single$; })));
1014
1030
  }
1015
1031
  var updatedValues = _this.getUpdatedFacetValues(facet, valuesArray, languageCode);
@@ -1093,7 +1109,8 @@
1093
1109
  var currentValuesFormArray = this.detailForm.get('values');
1094
1110
  this.values = __spreadArray([], __read(facet.values));
1095
1111
  facet.values.forEach(function (value, i) {
1096
- var e_1, _b;
1112
+ var e_2, _d;
1113
+ var _a, _b, _c;
1097
1114
  var valueTranslation = i2.findTranslation(value, languageCode);
1098
1115
  var group = {
1099
1116
  id: value.id,
@@ -1102,7 +1119,9 @@
1102
1119
  };
1103
1120
  var valueControl = currentValuesFormArray.at(i);
1104
1121
  if (valueControl) {
1105
- valueControl.setValue(group);
1122
+ (_a = valueControl.get('id')) === null || _a === void 0 ? void 0 : _a.setValue(group.id);
1123
+ (_b = valueControl.get('code')) === null || _b === void 0 ? void 0 : _b.setValue(group.code);
1124
+ (_c = valueControl.get('name')) === null || _c === void 0 ? void 0 : _c.setValue(group.name);
1106
1125
  }
1107
1126
  else {
1108
1127
  currentValuesFormArray.insert(i, _this.formBuilder.group(group));
@@ -1115,8 +1134,8 @@
1115
1134
  }
1116
1135
  if (customValueFieldsGroup) {
1117
1136
  try {
1118
- for (var _c = __values(_this.customValueFields), _d = _c.next(); !_d.done; _d = _c.next()) {
1119
- var fieldDef = _d.value;
1137
+ for (var _e = __values(_this.customValueFields), _f = _e.next(); !_f.done; _f = _e.next()) {
1138
+ var fieldDef = _f.value;
1120
1139
  var key = fieldDef.name;
1121
1140
  var fieldValue = fieldDef.type === 'localeString'
1122
1141
  ? valueTranslation.customFields[key]
@@ -1130,12 +1149,12 @@
1130
1149
  }
1131
1150
  }
1132
1151
  }
1133
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
1152
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
1134
1153
  finally {
1135
1154
  try {
1136
- if (_d && !_d.done && (_b = _c.return)) _b.call(_c);
1155
+ if (_f && !_f.done && (_d = _e.return)) _d.call(_e);
1137
1156
  }
1138
- finally { if (e_1) throw e_1.error; }
1157
+ finally { if (e_2) throw e_2.error; }
1139
1158
  }
1140
1159
  }
1141
1160
  }
@@ -1160,8 +1179,29 @@
1160
1179
  return input;
1161
1180
  };
1162
1181
  /**
1163
- * Given an array of facet values and the values from the detailForm, this method creates an new array
1164
- * which can be persisted to the API.
1182
+ * Given an array of facet values and the values from the detailForm, this method creates a new array
1183
+ * which can be persisted to the API via a createFacetValues mutation.
1184
+ */
1185
+ FacetDetailComponent.prototype.getCreatedFacetValues = function (facet, valuesFormArray, languageCode) {
1186
+ var _this = this;
1187
+ return valuesFormArray.controls
1188
+ .filter(function (c) { return !c.value.id; })
1189
+ .map(function (c) { return c.value; })
1190
+ .map(function (value) { return i2.createUpdatedTranslatable({
1191
+ translatable: Object.assign(Object.assign({}, value), { translations: [] }),
1192
+ updatedFields: value,
1193
+ customFieldConfig: _this.customValueFields,
1194
+ languageCode: languageCode,
1195
+ defaultTranslation: {
1196
+ languageCode: languageCode,
1197
+ name: '',
1198
+ },
1199
+ }); })
1200
+ .map(function (input) { return (Object.assign({ facetId: facet.id }, input)); });
1201
+ };
1202
+ /**
1203
+ * Given an array of facet values and the values from the detailForm, this method creates a new array
1204
+ * which can be persisted to the API via an updateFacetValues mutation.
1165
1205
  */
1166
1206
  FacetDetailComponent.prototype.getUpdatedFacetValues = function (facet, valuesFormArray, languageCode) {
1167
1207
  var _this = this;
@@ -2478,7 +2518,7 @@
2478
2518
  ProductListComponent.decorators = [
2479
2519
  { type: i0.Component, args: [{
2480
2520
  selector: 'vdr-products-list',
2481
- template: "<vdr-action-bar>\r\n <vdr-ab-left [grow]=\"true\">\r\n <div class=\"search-form\">\r\n <vdr-product-search-input\r\n #productSearchInputComponent\r\n [facetValueResults]=\"facetValues$ | async\"\r\n (searchTermChange)=\"setSearchTerm($event)\"\r\n (facetValueChange)=\"setFacetValueIds($event)\"\r\n ></vdr-product-search-input>\r\n <vdr-dropdown class=\"search-settings-menu mr3\">\r\n <button type=\"button\"\r\n class=\"icon-button search-index-button\"\r\n [title]=\"(pendingSearchIndexUpdates ? 'catalog.pending-search-index-updates' : 'catalog.search-index-controls') | translate \"\r\n vdrDropdownTrigger>\r\n <clr-icon shape=\"cog\"></clr-icon>\r\n <vdr-status-badge *ngIf=\"pendingSearchIndexUpdates\" type=\"warning\"> </vdr-status-badge>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <h4 class=\"dropdown-header\">{{ 'catalog.search-index-controls' | translate }}</h4>\r\n <ng-container *ngIf=\"pendingSearchIndexUpdates\">\r\n <button\r\n type=\"button\"\r\n class=\"run-updates-button\"\r\n vdrDropdownItem\r\n (click)=\"runPendingSearchIndexUpdates()\"\r\n [disabled]=\"!(['UpdateCatalog', 'UpdateProduct'] | hasPermission)\"\r\n >\r\n <vdr-status-badge type=\"warning\"> </vdr-status-badge>\r\n {{ 'catalog.run-pending-search-index-updates' | translate: { count: pendingSearchIndexUpdates } }}\r\n </button>\r\n <div class=\"dropdown-divider\"></div>\r\n </ng-container>\r\n <button\r\n type=\"button\"\r\n vdrDropdownItem\r\n (click)=\"rebuildSearchIndex()\"\r\n [disabled]=\"!(['UpdateCatalog', 'UpdateProduct'] | hasPermission)\"\r\n >\r\n {{ 'catalog.rebuild-search-index' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n <div class=\"flex wrap\">\r\n <clr-checkbox-wrapper class=\"mt2\">\r\n <input type=\"checkbox\" clrCheckbox [(ngModel)]=\"groupByProduct\" />\r\n <label>{{ 'catalog.group-by-product' | translate }}</label>\r\n </clr-checkbox-wrapper>\r\n <vdr-language-selector\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"contentLanguage$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </div>\r\n </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"product-list\"></vdr-action-bar-items>\r\n <a\r\n class=\"btn btn-primary\"\r\n [routerLink]=\"['./create']\"\r\n *vdrIfPermissions=\"['CreateCatalog', 'CreateProduct']\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n <span class=\"full-label\">{{ 'catalog.create-new-product' | translate }}</span>\r\n </a>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<vdr-data-table\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n>\r\n <ng-template let-result=\"item\">\r\n <td class=\"left align-middle\" [class.disabled]=\"!result.enabled\">\r\n <div class=\"image-placeholder\">\r\n <img\r\n *ngIf=\"\r\n groupByProduct\r\n ? result.productAsset\r\n : result.productVariantAsset || result.productAsset as asset;\r\n else imagePlaceholder\r\n \"\r\n [src]=\"asset | assetPreview: 'tiny'\"\r\n />\r\n <ng-template #imagePlaceholder>\r\n <div class=\"placeholder\">\r\n <clr-icon shape=\"image\" size=\"48\"></clr-icon>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </td>\r\n <td class=\"left align-middle\" [class.disabled]=\"!result.enabled\">\r\n {{ groupByProduct ? result.productName : result.productVariantName }}\r\n </td>\r\n <td class=\"align-middle\" [class.disabled]=\"!result.enabled\">\r\n <vdr-chip *ngIf=\"!result.enabled\">{{ 'common.disabled' | translate }}</vdr-chip>\r\n </td>\r\n <td class=\"right align-middle\" [class.disabled]=\"!result.enabled\">\r\n <vdr-table-row-action\r\n iconShape=\"edit\"\r\n [label]=\"'common.edit' | translate\"\r\n [linkTo]=\"['./', result.productId]\"\r\n ></vdr-table-row-action>\r\n </td>\r\n <td class=\"right align-middle\" [class.disabled]=\"!result.enabled\">\r\n <vdr-dropdown>\r\n <button type=\"button\" class=\"btn btn-link btn-sm\" vdrDropdownTrigger>\r\n {{ 'common.actions' | translate }}\r\n <clr-icon shape=\"caret down\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n type=\"button\"\r\n class=\"delete-button\"\r\n (click)=\"deleteProduct(result.productId)\"\r\n [disabled]=\"!(['DeleteCatalog', 'DeleteProduct'] | hasPermission)\"\r\n vdrDropdownItem\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </td>\r\n </ng-template>\r\n</vdr-data-table>\r\n",
2521
+ template: "<vdr-action-bar>\r\n <vdr-ab-left [grow]=\"true\">\r\n <div class=\"search-form\">\r\n <vdr-product-search-input\r\n #productSearchInputComponent\r\n [facetValueResults]=\"facetValues$ | async\"\r\n (searchTermChange)=\"setSearchTerm($event)\"\r\n (facetValueChange)=\"setFacetValueIds($event)\"\r\n ></vdr-product-search-input>\r\n <vdr-dropdown class=\"search-settings-menu mr3\">\r\n <button\r\n type=\"button\"\r\n class=\"icon-button search-index-button\"\r\n [title]=\"\r\n (pendingSearchIndexUpdates\r\n ? 'catalog.pending-search-index-updates'\r\n : 'catalog.search-index-controls'\r\n ) | translate\r\n \"\r\n vdrDropdownTrigger\r\n >\r\n <clr-icon shape=\"cog\"></clr-icon>\r\n <vdr-status-badge *ngIf=\"pendingSearchIndexUpdates\" type=\"warning\"> </vdr-status-badge>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <h4 class=\"dropdown-header\">{{ 'catalog.search-index-controls' | translate }}</h4>\r\n <ng-container *ngIf=\"pendingSearchIndexUpdates\">\r\n <button\r\n type=\"button\"\r\n class=\"run-updates-button\"\r\n vdrDropdownItem\r\n (click)=\"runPendingSearchIndexUpdates()\"\r\n [disabled]=\"!(['UpdateCatalog', 'UpdateProduct'] | hasPermission)\"\r\n >\r\n <vdr-status-badge type=\"warning\"> </vdr-status-badge>\r\n {{\r\n 'catalog.run-pending-search-index-updates'\r\n | translate: { count: pendingSearchIndexUpdates }\r\n }}\r\n </button>\r\n <div class=\"dropdown-divider\"></div>\r\n </ng-container>\r\n <button\r\n type=\"button\"\r\n vdrDropdownItem\r\n (click)=\"rebuildSearchIndex()\"\r\n [disabled]=\"!(['UpdateCatalog', 'UpdateProduct'] | hasPermission)\"\r\n >\r\n {{ 'catalog.rebuild-search-index' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n <div class=\"flex wrap\">\r\n <clr-checkbox-wrapper class=\"mt2\">\r\n <input type=\"checkbox\" clrCheckbox [(ngModel)]=\"groupByProduct\" (ngModelChange)=\"refresh()\" />\r\n <label>{{ 'catalog.group-by-product' | translate }}</label>\r\n </clr-checkbox-wrapper>\r\n <vdr-language-selector\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"contentLanguage$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </div>\r\n </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"product-list\"></vdr-action-bar-items>\r\n <a\r\n class=\"btn btn-primary\"\r\n [routerLink]=\"['./create']\"\r\n *vdrIfPermissions=\"['CreateCatalog', 'CreateProduct']\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n <span class=\"full-label\">{{ 'catalog.create-new-product' | translate }}</span>\r\n </a>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<vdr-data-table\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n>\r\n <ng-template let-result=\"item\">\r\n <td class=\"left align-middle\" [class.disabled]=\"!result.enabled\">\r\n <div class=\"image-placeholder\">\r\n <img\r\n *ngIf=\"\r\n groupByProduct\r\n ? result.productAsset\r\n : result.productVariantAsset || result.productAsset as asset;\r\n else imagePlaceholder\r\n \"\r\n [src]=\"asset | assetPreview: 'tiny'\"\r\n />\r\n <ng-template #imagePlaceholder>\r\n <div class=\"placeholder\">\r\n <clr-icon shape=\"image\" size=\"48\"></clr-icon>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </td>\r\n <td class=\"left align-middle\" [class.disabled]=\"!result.enabled\">\r\n {{ groupByProduct ? result.productName : result.productVariantName }}\r\n </td>\r\n <td class=\"align-middle\" [class.disabled]=\"!result.enabled\">\r\n <vdr-chip *ngIf=\"!result.enabled\">{{ 'common.disabled' | translate }}</vdr-chip>\r\n </td>\r\n <td class=\"right align-middle\" [class.disabled]=\"!result.enabled\">\r\n <vdr-table-row-action\r\n iconShape=\"edit\"\r\n [label]=\"'common.edit' | translate\"\r\n [linkTo]=\"['./', result.productId]\"\r\n ></vdr-table-row-action>\r\n </td>\r\n <td class=\"right align-middle\" [class.disabled]=\"!result.enabled\">\r\n <vdr-dropdown>\r\n <button type=\"button\" class=\"btn btn-link btn-sm\" vdrDropdownTrigger>\r\n {{ 'common.actions' | translate }}\r\n <clr-icon shape=\"caret down\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n type=\"button\"\r\n class=\"delete-button\"\r\n (click)=\"deleteProduct(result.productId)\"\r\n [disabled]=\"!(['DeleteCatalog', 'DeleteProduct'] | hasPermission)\"\r\n vdrDropdownItem\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </td>\r\n </ng-template>\r\n</vdr-data-table>\r\n",
2482
2522
  styles: [".image-placeholder{width:50px;height:50px;background-color:var(--color-component-bg-200)}.image-placeholder .placeholder{text-align:center;color:var(--color-grey-300)}.search-form{display:flex;align-items:center;width:100%;margin-bottom:6px}.search-input{min-width:300px}@media screen and (max-width: 768px){.search-input{min-width:100px}}.search-settings-menu{margin:0 12px}td.disabled{background-color:var(--color-component-bg-200)}.search-index-button{position:relative}.search-index-button vdr-status-badge{right:0;top:0}.run-updates-button{position:relative}.run-updates-button vdr-status-badge{left:10px;top:10px}\n"]
2483
2523
  },] }
2484
2524
  ];