فهرست منبع

feat(admin-ui): Support filtering orders by transaction ID

Relates to #1520
Michael Bromley 3 سال پیش
والد
کامیت
74eac8f97e

+ 28 - 28
packages/admin-ui/i18n-coverage.json

@@ -1,70 +1,70 @@
 {
-  "generatedOn": "2022-07-22T10:22:58.599Z",
-  "lastCommit": "5a93bf0853c6ec2d2aa88915afaf1e72fa17b2b1",
+  "generatedOn": "2022-07-22T11:18:02.830Z",
+  "lastCommit": "25b0af7028d086c8b6fc67c974865f5b01657358",
   "translationStatus": {
     "cs": {
-      "tokenCount": 653,
-      "translatedCount": 592,
+      "tokenCount": 652,
+      "translatedCount": 591,
       "percentage": 91
     },
     "de": {
-      "tokenCount": 653,
-      "translatedCount": 571,
+      "tokenCount": 652,
+      "translatedCount": 570,
       "percentage": 87
     },
     "en": {
-      "tokenCount": 653,
+      "tokenCount": 652,
       "translatedCount": 651,
       "percentage": 100
     },
     "es": {
-      "tokenCount": 653,
-      "translatedCount": 624,
-      "percentage": 96
+      "tokenCount": 652,
+      "translatedCount": 622,
+      "percentage": 95
     },
     "fr": {
-      "tokenCount": 653,
-      "translatedCount": 614,
+      "tokenCount": 652,
+      "translatedCount": 612,
       "percentage": 94
     },
     "it": {
-      "tokenCount": 653,
-      "translatedCount": 622,
+      "tokenCount": 652,
+      "translatedCount": 620,
       "percentage": 95
     },
     "pl": {
-      "tokenCount": 653,
-      "translatedCount": 406,
+      "tokenCount": 652,
+      "translatedCount": 405,
       "percentage": 62
     },
     "pt_BR": {
-      "tokenCount": 653,
-      "translatedCount": 590,
+      "tokenCount": 652,
+      "translatedCount": 589,
       "percentage": 90
     },
     "pt_PT": {
-      "tokenCount": 653,
-      "translatedCount": 635,
+      "tokenCount": 652,
+      "translatedCount": 633,
       "percentage": 97
     },
     "ru": {
-      "tokenCount": 653,
-      "translatedCount": 621,
+      "tokenCount": 652,
+      "translatedCount": 619,
       "percentage": 95
     },
     "uk": {
-      "tokenCount": 653,
-      "translatedCount": 621,
+      "tokenCount": 652,
+      "translatedCount": 619,
       "percentage": 95
     },
     "zh_Hans": {
-      "tokenCount": 653,
-      "translatedCount": 558,
+      "tokenCount": 652,
+      "translatedCount": 557,
       "percentage": 85
     },
     "zh_Hant": {
-      "tokenCount": 653,
-      "translatedCount": 386,
+      "tokenCount": 652,
+      "translatedCount": 385,
       "percentage": 59
     }
   }

+ 2 - 10
packages/admin-ui/src/lib/order/src/components/order-list/order-list.component.html

@@ -19,19 +19,11 @@
                     <clr-icon shape="angle down"></clr-icon>
                 </button>
             </div>
-
-            <input
-                type="text"
-                name="searchTerm"
-                [formControl]="searchOrderCodeControl"
-                [placeholder]="'order.search-by-order-code' | translate"
-                class="search-input"
-            />
             <input
                 type="text"
                 name="searchTerm"
-                [formControl]="searchLastNameControl"
-                [placeholder]="'order.search-by-customer-last-name' | translate"
+                [formControl]="searchControl"
+                [placeholder]="'order.search-by-order-filters' | translate"
                 class="search-input"
             />
         </div>

+ 23 - 19
packages/admin-ui/src/lib/order/src/components/order-list/order-list.component.ts

@@ -7,13 +7,14 @@ import {
     DataService,
     GetOrderList,
     LocalStorageService,
+    LogicalOperator,
     OrderListOptions,
     ServerConfigService,
     SortOrder,
 } from '@vendure/admin-ui/core';
 import { Order } from '@vendure/common/lib/generated-types';
 import { merge, Observable } from 'rxjs';
-import { debounceTime, distinctUntilChanged, filter, map, skip, takeUntil, tap } from 'rxjs/operators';
+import { debounceTime, distinctUntilChanged, filter, map, takeUntil } from 'rxjs/operators';
 
 interface OrderFilterConfig {
     active?: boolean;
@@ -34,7 +35,9 @@ interface FilterPreset {
 })
 export class OrderListComponent
     extends BaseListComponent<GetOrderList.Query, GetOrderList.Items>
-    implements OnInit {
+    implements OnInit
+{
+    searchControl = new FormControl('');
     searchOrderCodeControl = new FormControl('');
     searchLastNameControl = new FormControl('');
     customFilterForm: FormGroup;
@@ -93,8 +96,7 @@ export class OrderListComponent
                 this.createQueryOptions(
                     skip,
                     take,
-                    this.searchOrderCodeControl.value,
-                    this.searchLastNameControl.value,
+                    this.searchControl.value,
                     this.route.snapshot.queryParamMap.get('filter') || 'open',
                 ),
         );
@@ -110,10 +112,7 @@ export class OrderListComponent
             map(qpm => qpm.get('filter') || 'open'),
             distinctUntilChanged(),
         );
-        const searchTerms$ = merge(
-            this.searchOrderCodeControl.valueChanges,
-            this.searchLastNameControl.valueChanges,
-        ).pipe(
+        const searchTerms$ = merge(this.searchControl.valueChanges).pipe(
             filter(value => 2 < value.length || value.length === 0),
             debounceTime(250),
         );
@@ -164,13 +163,13 @@ export class OrderListComponent
         // tslint:disable-next-line:no-shadowed-variable
         skip: number,
         take: number,
-        orderCodeSearchTerm: string,
-        customerNameSearchTerm: string,
+        searchTerm: string,
         activeFilterPreset?: string,
     ): { options: OrderListOptions } {
         const filterConfig = this.filterPresets.find(p => p.name === activeFilterPreset);
         // tslint:disable-next-line:no-shadowed-variable
-        const filter: any = {};
+        let filter: any = {};
+        let filterOperator: LogicalOperator = LogicalOperator.AND;
         if (filterConfig) {
             if (filterConfig.config.active != null) {
                 filter.active = {
@@ -209,15 +208,19 @@ export class OrderListComponent
                 };
             }
         }
-        if (customerNameSearchTerm) {
-            filter.customerLastName = {
-                contains: customerNameSearchTerm,
-            };
-        }
-        if (orderCodeSearchTerm) {
-            filter.code = {
-                contains: orderCodeSearchTerm,
+        if (searchTerm) {
+            filter = {
+                customerLastName: {
+                    contains: searchTerm,
+                },
+                transactionId: {
+                    contains: searchTerm,
+                },
+                code: {
+                    contains: searchTerm,
+                },
             };
+            filterOperator = LogicalOperator.OR;
         }
         return {
             options: {
@@ -229,6 +232,7 @@ export class OrderListComponent
                 sort: {
                     updatedAt: SortOrder.DESC,
                 },
+                filterOperator,
             },
         };
     }

+ 2 - 3
packages/admin-ui/src/lib/static/i18n-messages/cs.json

@@ -552,8 +552,7 @@
     "refund-with-amount": "Refundovat {amount}",
     "refunded-count": "{count} {count, plural, one {položka} other {položky}} refundovány",
     "removed-items": "Odebrané položky",
-    "search-by-customer-last-name": "",
-    "search-by-order-code": "Hledat na základě kódu objednávky",
+    "search-by-order-filters": "Hledat na základě kódu objednávky / Příjmení / ID transakce",
     "select-state": "Vyberte stav",
     "set-coupon-codes": "",
     "set-fulfillment-state": "Označit jako {state}",
@@ -684,4 +683,4 @@
     "job-result": "Výsledek úlohy",
     "job-state": "Stav úlohy"
   }
-}
+}

+ 2 - 3
packages/admin-ui/src/lib/static/i18n-messages/de.json

@@ -552,8 +552,7 @@
     "refund-with-amount": "Rückzahlung {amount}",
     "refunded-count": "{count} {count, plural, one {Artikel} other {Artikel}} erstattet",
     "removed-items": "Entfernte Artikel",
-    "search-by-customer-last-name": "",
-    "search-by-order-code": "Suche nach Bestellnummer",
+    "search-by-order-filters": "Suche nach Name / Bestellnummer / Transaktions-ID",
     "select-state": "Status auswählen",
     "set-coupon-codes": "",
     "set-fulfillment-state": "Abwicklungsstatus wählen",
@@ -684,4 +683,4 @@
     "job-result": "Job-Ergebnis",
     "job-state": "Job-Status"
   }
-}
+}

+ 1 - 2
packages/admin-ui/src/lib/static/i18n-messages/en.json

@@ -552,8 +552,7 @@
     "refund-with-amount": "Refund {amount}",
     "refunded-count": "{count} {count, plural, one {item} other {items}} refunded",
     "removed-items": "Removed items",
-    "search-by-customer-last-name": "Search by customer last name",
-    "search-by-order-code": "Search by order code",
+    "search-by-order-filters": "Search by name / code / transaction ID",
     "select-state": "Select state",
     "set-coupon-codes": "Set coupon codes",
     "set-fulfillment-state": "Mark as {state}",

+ 2 - 3
packages/admin-ui/src/lib/static/i18n-messages/es.json

@@ -552,8 +552,7 @@
     "refund-with-amount": "Reembolso {amount}",
     "refunded-count": "{count} {count, plural, one {artículo} other {artículos}} {count, plural, one {reembolsado} other {reembolsados}}",
     "removed-items": "Artículos eliminados",
-    "search-by-customer-last-name": "Buscar por el apellido del cliente",
-    "search-by-order-code": "Buscar por el código de pedido",
+    "search-by-order-filters": "Buscar por el código de pedido / apellido del cliente / ID de transacción",
     "select-state": "Seleccionar estado",
     "set-coupon-codes": "",
     "set-fulfillment-state": "Fijar como {state}",
@@ -684,4 +683,4 @@
     "job-result": "Resultado",
     "job-state": "Estado"
   }
-}
+}

+ 2 - 3
packages/admin-ui/src/lib/static/i18n-messages/fr.json

@@ -552,8 +552,7 @@
     "refund-with-amount": "Rembourser {amount}",
     "refunded-count": "{count} {count, plural, one {article remboursé} other {articles remboursés}}",
     "removed-items": "Articles supprimés",
-    "search-by-customer-last-name": "Rechercher par nom du client",
-    "search-by-order-code": "Rehercher par numéro de commande",
+    "search-by-order-filters": "Rehercher par numéro de commande / nom du client / Numéro de transaction",
     "select-state": "Sélectionner un état",
     "set-coupon-codes": "",
     "set-fulfillment-state": "Marquer {state}",
@@ -684,4 +683,4 @@
     "job-result": "Résultat de la tâche",
     "job-state": "Etat de la tâche"
   }
-}
+}

+ 2 - 3
packages/admin-ui/src/lib/static/i18n-messages/it.json

@@ -552,8 +552,7 @@
     "refund-with-amount": "Rimborsa {amount}",
     "refunded-count": "Hai rimborsato {count} {count, plural, one {prodotto} other {prodotti}}",
     "removed-items": "Prodotti rimossi",
-    "search-by-customer-last-name": "Cerca per cognome cliente",
-    "search-by-order-code": "Cerca per codice ordine",
+    "search-by-order-filters": "Cerca per codice ordine / cognome cliente / ID transazione",
     "select-state": "Seleziona stato",
     "set-coupon-codes": "",
     "set-fulfillment-state": "Segna come {state}",
@@ -684,4 +683,4 @@
     "job-result": "Risultato operazione",
     "job-state": "Stato operazione"
   }
-}
+}

+ 2 - 3
packages/admin-ui/src/lib/static/i18n-messages/pl.json

@@ -552,8 +552,7 @@
     "refund-with-amount": "Zwróć {amount}",
     "refunded-count": "{count} {count, plural, one {zamówienie} other {zamówień}} zwrócono",
     "removed-items": "",
-    "search-by-customer-last-name": "",
-    "search-by-order-code": "Szukaj po numerze zamówienia",
+    "search-by-order-filters": "Szukaj po numerze zamówienia / Nazwisko / Numer transakcji",
     "select-state": "",
     "set-coupon-codes": "",
     "set-fulfillment-state": "",
@@ -684,4 +683,4 @@
     "job-result": "Rezultat zlecenia",
     "job-state": "Status zlecenia"
   }
-}
+}

+ 2 - 3
packages/admin-ui/src/lib/static/i18n-messages/pt_BR.json

@@ -552,8 +552,7 @@
     "refund-with-amount": "Reembolso {amount}",
     "refunded-count": "{count} {count, plural, one {item} other {items}} reembolsado",
     "removed-items": "Itens removidos",
-    "search-by-customer-last-name": "",
-    "search-by-order-code": "Buscar por código do pedido",
+    "search-by-order-filters": "Buscar por código do pedido / Sobrenome / Código ID da transação",
     "select-state": "Selecionar estado",
     "set-coupon-codes": "",
     "set-fulfillment-state": "Marcar como {state}",
@@ -684,4 +683,4 @@
     "job-result": "Resultado do trabalho",
     "job-state": "Estado do trabalho"
   }
-}
+}

+ 2 - 3
packages/admin-ui/src/lib/static/i18n-messages/pt_PT.json

@@ -552,8 +552,7 @@
     "refund-with-amount": "Reembolso {amount}",
     "refunded-count": "{count} {count, plural, one {item reembolsado} other {itens reembolsados}}",
     "removed-items": "Itens removidos",
-    "search-by-customer-last-name": "Pesquisar pelo apelido do cliente",
-    "search-by-order-code": "Pesqusiar pelo código da encomenda",
+    "search-by-order-filters": "Pesqusiar pelo código da encomenda / apelido do cliente / ID da transação",
     "select-state": "Seleccionar estado",
     "set-coupon-codes": "",
     "set-fulfillment-state": "Marcar como {state}",
@@ -684,4 +683,4 @@
     "job-result": "Resultado do trabalho",
     "job-state": "Estado do trabalho"
   }
-}
+}

+ 2 - 3
packages/admin-ui/src/lib/static/i18n-messages/ru.json

@@ -552,8 +552,7 @@
     "refund-with-amount": "Возврат {amount}",
     "refunded-count": "{count} {count, plural, one {позиция} other {позиций}} возвращен",
     "removed-items": "Удаленные позиции",
-    "search-by-customer-last-name": "Поиск по фамилии клиента",
-    "search-by-order-code": "Поиск по коду заказа",
+    "search-by-order-filters": "Поиск по фамилии клиента / коду заказа / ID транзакции",
     "select-state": "Выберите состояние",
     "set-coupon-codes": "",
     "set-fulfillment-state": "Отметить как {state}",
@@ -684,4 +683,4 @@
     "job-result": "Результат задания",
     "job-state": "Состояние задания"
   }
-}
+}

+ 2 - 3
packages/admin-ui/src/lib/static/i18n-messages/uk.json

@@ -552,8 +552,7 @@
     "refund-with-amount": "Повернення {amount}",
     "refunded-count": "{count} {count, plural, one {позиція} other {позицій}} повернено",
     "removed-items": "Видалені позиції",
-    "search-by-customer-last-name": "Пошук за прізвищем клієнта",
-    "search-by-order-code": "Пошук по коду замовлення",
+    "search-by-order-filters": "Пошук за коду замовлення / прізвищем клієнта / ID транзакції",
     "select-state": "Виберіть стан",
     "set-coupon-codes": "",
     "set-fulfillment-state": "Помітити як {state}",
@@ -684,4 +683,4 @@
     "job-result": "Результат завдання",
     "job-state": "Стан завдання"
   }
-}
+}

+ 2 - 3
packages/admin-ui/src/lib/static/i18n-messages/zh_Hans.json

@@ -552,8 +552,7 @@
     "refund-with-amount": "退款金额{amount}",
     "refunded-count": "{count}个商品已退款",
     "removed-items": "",
-    "search-by-customer-last-name": "",
-    "search-by-order-code": "输入要搜索的订单编号",
+    "search-by-order-filters": "输入要搜索的订单编号 / 姓 / 交易ID ",
     "select-state": "",
     "set-coupon-codes": "",
     "set-fulfillment-state": "",
@@ -684,4 +683,4 @@
     "job-result": "任务结果",
     "job-state": "任务状态"
   }
-}
+}

+ 2 - 3
packages/admin-ui/src/lib/static/i18n-messages/zh_Hant.json

@@ -552,8 +552,7 @@
     "refund-with-amount": "退款金額{amount}",
     "refunded-count": "{count}個商品已退款",
     "removed-items": "",
-    "search-by-customer-last-name": "",
-    "search-by-order-code": "輸入要搜索的訂單編號",
+    "search-by-order-filters": "輸入要搜索的訂單編號 / 姓 / 交易編號 ",
     "select-state": "",
     "set-coupon-codes": "",
     "set-fulfillment-state": "",
@@ -684,4 +683,4 @@
     "job-result": "",
     "job-state": ""
   }
-}
+}