瀏覽代碼

chore(admin-ui): Tidy up order list styles

Michael Bromley 2 年之前
父節點
當前提交
d7e4e106fe
共有 29 個文件被更改,包括 166 次插入146 次删除
  1. 19 19
      packages/admin-ui/i18n-coverage.json
  2. 5 6
      packages/admin-ui/src/lib/core/src/shared/components/customer-label/customer-label.component.html
  3. 3 2
      packages/admin-ui/src/lib/core/src/shared/components/data-table-2/data-table-column.component.ts
  4. 1 4
      packages/admin-ui/src/lib/core/src/shared/components/data-table-2/data-table2.component.html
  5. 21 1
      packages/admin-ui/src/lib/core/src/shared/components/data-table-2/data-table2.component.scss
  6. 2 4
      packages/admin-ui/src/lib/core/src/shared/components/data-table-2/data-table2.component.ts
  7. 1 0
      packages/admin-ui/src/lib/core/src/shared/components/data-table-column-picker/data-table-column-picker.component.html
  8. 1 1
      packages/admin-ui/src/lib/core/src/shared/components/data-table-filter-label/data-table-filter-label.component.html
  9. 2 0
      packages/admin-ui/src/lib/core/src/shared/components/page-header-description/page-header-description.component.scss
  10. 1 0
      packages/admin-ui/src/lib/core/src/shared/components/page-title/page-title.component.html
  11. 7 2
      packages/admin-ui/src/lib/core/src/shared/components/page-title/page-title.component.scss
  12. 19 85
      packages/admin-ui/src/lib/order/src/components/order-list/order-list.component.html
  13. 1 5
      packages/admin-ui/src/lib/order/src/components/order-list/order-list.component.ts
  14. 4 1
      packages/admin-ui/src/lib/static/i18n-messages/cs.json
  15. 4 1
      packages/admin-ui/src/lib/static/i18n-messages/de.json
  16. 5 2
      packages/admin-ui/src/lib/static/i18n-messages/en.json
  17. 4 1
      packages/admin-ui/src/lib/static/i18n-messages/es.json
  18. 4 1
      packages/admin-ui/src/lib/static/i18n-messages/fr.json
  19. 4 1
      packages/admin-ui/src/lib/static/i18n-messages/it.json
  20. 4 1
      packages/admin-ui/src/lib/static/i18n-messages/pl.json
  21. 4 1
      packages/admin-ui/src/lib/static/i18n-messages/pt_BR.json
  22. 4 1
      packages/admin-ui/src/lib/static/i18n-messages/pt_PT.json
  23. 4 1
      packages/admin-ui/src/lib/static/i18n-messages/ru.json
  24. 4 1
      packages/admin-ui/src/lib/static/i18n-messages/uk.json
  25. 4 1
      packages/admin-ui/src/lib/static/i18n-messages/zh_Hans.json
  26. 4 1
      packages/admin-ui/src/lib/static/i18n-messages/zh_Hant.json
  27. 27 2
      packages/admin-ui/src/lib/static/styles/global/_buttons.scss
  28. 1 1
      packages/admin-ui/src/lib/static/styles/styles.scss
  29. 2 0
      packages/admin-ui/src/lib/static/styles/theme/default.scss

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

@@ -1,69 +1,69 @@
 {
-  "generatedOn": "2023-04-25T15:17:24.284Z",
-  "lastCommit": "8897a482886c91c5d1326ca76d19f4dcdc4069e4",
+  "generatedOn": "2023-04-25T20:32:51.405Z",
+  "lastCommit": "f03d16161ebfce6b6897d4f004587abd98950446",
   "translationStatus": {
     "cs": {
-      "tokenCount": 702,
+      "tokenCount": 705,
       "translatedCount": 585,
       "percentage": 83
     },
     "de": {
-      "tokenCount": 702,
+      "tokenCount": 705,
       "translatedCount": 568,
       "percentage": 81
     },
     "en": {
-      "tokenCount": 702,
-      "translatedCount": 690,
-      "percentage": 98
+      "tokenCount": 705,
+      "translatedCount": 705,
+      "percentage": 100
     },
     "es": {
-      "tokenCount": 702,
+      "tokenCount": 705,
       "translatedCount": 616,
-      "percentage": 88
+      "percentage": 87
     },
     "fr": {
-      "tokenCount": 702,
+      "tokenCount": 705,
       "translatedCount": 606,
       "percentage": 86
     },
     "it": {
-      "tokenCount": 702,
+      "tokenCount": 705,
       "translatedCount": 614,
       "percentage": 87
     },
     "pl": {
-      "tokenCount": 702,
+      "tokenCount": 705,
       "translatedCount": 408,
       "percentage": 58
     },
     "pt_BR": {
-      "tokenCount": 702,
+      "tokenCount": 705,
       "translatedCount": 583,
       "percentage": 83
     },
     "pt_PT": {
-      "tokenCount": 702,
+      "tokenCount": 705,
       "translatedCount": 627,
       "percentage": 89
     },
     "ru": {
-      "tokenCount": 702,
+      "tokenCount": 705,
       "translatedCount": 613,
       "percentage": 87
     },
     "uk": {
-      "tokenCount": 702,
+      "tokenCount": 705,
       "translatedCount": 613,
       "percentage": 87
     },
     "zh_Hans": {
-      "tokenCount": 702,
+      "tokenCount": 705,
       "translatedCount": 553,
-      "percentage": 79
+      "percentage": 78
     },
     "zh_Hant": {
-      "tokenCount": 702,
+      "tokenCount": 705,
       "translatedCount": 388,
       "percentage": 55
     }

+ 5 - 6
packages/admin-ui/src/lib/core/src/shared/components/customer-label/customer-label.component.html

@@ -1,7 +1,6 @@
-<clr-icon shape="user" [class.is-solid]="customer"></clr-icon>
-<div *ngIf="customer">
-    <a [routerLink]="['/customer', 'customers', customer.id]">
-        {{ customer.firstName }} {{ customer.lastName }}
-    </a>
-</div>
+<a *ngIf="customer" class="button-ghost" [routerLink]="['/customer', 'customers', customer.id]">
+    <clr-icon shape="user" [class.is-solid]="customer"></clr-icon>
+    <span>{{ customer.firstName }} {{ customer.lastName }}</span>
+    <clr-icon shape="arrow right"></clr-icon>
+</a>
 <div *ngIf="!customer">{{ 'common.guest' | translate }}</div>

+ 3 - 2
packages/admin-ui/src/lib/core/src/shared/components/data-table-2/data-table-column.component.ts

@@ -12,7 +12,8 @@ export class DataTable2ColumnComponent<T> implements OnInit {
     @Input() expand = false;
     @Input() heading: string;
     @Input() align: 'left' | 'right' | 'center' = 'left';
-    @Input() optional = false;
+    @Input() optional = true;
+    @Input() hiddenByDefault = false;
     #visible = true;
     #onColumnChangeFns: Array<() => void> = [];
     get visible() {
@@ -22,7 +23,7 @@ export class DataTable2ColumnComponent<T> implements OnInit {
     item: T;
 
     ngOnInit() {
-        this.#visible = this.optional ? false : true;
+        this.#visible = this.hiddenByDefault ? false : true;
     }
 
     setVisibility(isVisible: boolean) {

+ 1 - 4
packages/admin-ui/src/lib/core/src/shared/components/data-table-2/data-table2.component.html

@@ -61,7 +61,7 @@
                 trackBy: trackByFn
             "
         >
-            <td *ngIf="selectionManager" class="align-middle selection-col">
+            <td *ngIf="selectionManager" class="selection-col">
                 <input
                     type="checkbox"
                     clrCheckbox
@@ -83,9 +83,6 @@
                     <vdr-empty-placeholder [emptyStateLabel]="emptyStateLabel"></vdr-empty-placeholder>
                 </td>
             </tr>
-            <tr>
-                <td *ngFor="let column of visibleColumns" class="left align-middle"></td>
-            </tr>
         </ng-container>
     </tbody>
 </table>

+ 21 - 1
packages/admin-ui/src/lib/core/src/shared/components/data-table-2/data-table2.component.scss

@@ -54,11 +54,15 @@ th {
     font-weight: 400;
     background-color: var(--color-weight-100);
     padding: calc(var(--space-unit) * 4) calc(var(--space-unit) * 4);
-    box-shadow: inset -1px 6px 5px -3px #a5a5a540;
+    box-shadow: inset -1px 6px 5px 0px rgb(165 165 165 / 8%);
+    border: 1px solid var(--color-weight-200);
+    border-left-width: 0;
+    border-right-width: 0;
     input {
         width: 100%;
     }
     .filters {
+        margin-top: calc(var(--space-unit) * 1);
         display: flex;
         flex-wrap: wrap;
         gap: calc(var(--space-unit) * 0.5);
@@ -75,9 +79,25 @@ tr th:first-of-type {
     padding-left: calc(var(--space-unit) * 4);
 }
 
+// odd rows
+tbody tr:nth-child(even) {
+    background-color: var(--color-table-alternate-row-bg);
+}
+
+tbody tr:hover {
+    background-color: var(--color-weight-100);
+}
+
+.cell-link {
+    display: block;
+    width: 100%;
+    height: 100%;
+}
+
 .cell-content {
     display: flex;
     align-items: center;
+    color: var(--color-weight-700);
     &.left {
         justify-content: flex-start;
     }

+ 2 - 4
packages/admin-ui/src/lib/core/src/shared/components/data-table-2/data-table2.component.ts

@@ -19,7 +19,6 @@ import { LocalStorageService } from '@vendure/admin-ui/core';
 import { PaginationService } from 'ngx-pagination';
 import { Subscription } from 'rxjs';
 import { SelectionManager } from '../../../common/utilities/selection-manager';
-import { DataTableFilter } from '../../../providers/data-table-filter/data-table-filter';
 import { DataTableFilterCollection } from '../../../providers/data-table-filter/data-table-filter-collection';
 
 import { DataTable2ColumnComponent } from './data-table-column.component';
@@ -101,7 +100,6 @@ export class DataTable2Component<T> implements AfterContentInit, OnChanges, OnIn
     @Input() searchTermControl?: FormControl<string>;
     @Input() searchTermPlaceholder?: string;
     @Input() filters: DataTableFilterCollection;
-    @Input() activeFilters: DataTableFilter[] = [];
     @Output() pageChange = new EventEmitter<number>();
     @Output() itemsPerPageChange = new EventEmitter<number>();
 
@@ -177,14 +175,14 @@ export class DataTable2Component<T> implements AfterContentInit, OnChanges, OnIn
                 dataTableConfig[this.id] = { visibility: [] };
             }
             dataTableConfig[this.id].visibility = this.columns
-                .filter(c => (c.visible && c.optional) || (!c.visible && !c.optional))
+                .filter(c => (c.visible && c.hiddenByDefault) || (!c.visible && !c.hiddenByDefault))
                 .map(c => c.heading);
             this.localStorageService.set('dataTableConfig', dataTableConfig);
         };
 
         this.columns.forEach(column => {
             if (dataTableConfig?.[this.id]?.visibility.includes(column.heading)) {
-                column.setVisibility(column.optional);
+                column.setVisibility(column.hiddenByDefault);
             }
             column.onColumnChange(updateColumnVisibility);
         });

+ 1 - 0
packages/admin-ui/src/lib/core/src/shared/components/data-table-column-picker/data-table-column-picker.component.html

@@ -7,6 +7,7 @@
             <label>
                 <input
                     type="checkbox"
+                    [disabled]="column.optional === false"
                     [checked]="column.visible"
                     (change)="toggleColumn(column)"
                     class="mr-1"

+ 1 - 1
packages/admin-ui/src/lib/core/src/shared/components/data-table-filter-label/data-table-filter-label.component.html

@@ -11,7 +11,7 @@
         <span *ngIf="filter.value?.operator === 'notContains'">{{
             'common.operator-notContains' | translate
         }}</span>
-        <span *ngIf="filter.value?.operator === 'not-eq'">{{ 'common.operator-notEq' | translate }}</span>
+        <span *ngIf="filter.value?.operator === 'notEq'">{{ 'common.operator-not-eq' | translate }}</span>
         <span *ngIf="filter.value?.operator === 'regex'">{{ 'common.operator-regex' | translate }}</span>
         <span> "{{ filter.value?.term }}"</span>
     </ng-container>

+ 2 - 0
packages/admin-ui/src/lib/core/src/shared/components/page-header-description/page-header-description.component.scss

@@ -1,3 +1,5 @@
 :host {
+    display: block;
     max-width: 544px;
+    margin: calc(var(--space-unit) * 2) 0;
 }

+ 1 - 0
packages/admin-ui/src/lib/core/src/shared/components/page-title/page-title.component.html

@@ -1,3 +1,4 @@
 <div class="page-title">
     <h1>{{ (title$ | async) ?? '' | translate }}</h1>
+    <div class="title-actions"><ng-content></ng-content></div>
 </div>

+ 7 - 2
packages/admin-ui/src/lib/core/src/shared/components/page-title/page-title.component.scss

@@ -1,13 +1,18 @@
-@import "../../../../../static/styles/variables";
-
 :host {
     display: block;
 }
 
 .page-title {
+    display: flex;
+    gap: calc(var(--space-unit) * 2);
     h1 {
         margin-top: 0;
         color: var(--color-weight-900);
         font-weight: 600;
     }
 }
+
+.title-actions {
+    display: flex;
+    align-items: center;
+}

+ 19 - 85
packages/admin-ui/src/lib/order/src/components/order-list/order-list.component.html

@@ -1,89 +1,17 @@
-<!--<vdr-action-bar>
-    <vdr-ab-left>
-        <div class="search-form">
-            <div class="filter-presets btn-group btn-outline-primary" *ngIf="activePreset$ | async as activePreset">
-                <button
-                    class="btn"
-                    *ngFor="let preset of filterPresets"
-                    [class.btn-primary]="activePreset === preset.name"
-                    (click)="selectFilterPreset(preset.name)"
-                >
-                    {{ preset.label | translate }}
-                </button>
-                <button
-                    class="btn"
-                    [class.btn-primary]="activePreset === 'custom'"
-                    (click)="selectFilterPreset('custom')"
-                >
-                    {{ 'order.filter-custom' | translate }}
-                    <clr-icon shape="angle down"></clr-icon>
-                </button>
-            </div>
-            <input
-                type="text"
-                name="searchTerm"
-                [formControl]="searchControl"
-                [placeholder]="'order.search-by-order-filters' | translate"
-                class="search-input"
-            />
-        </div>
-        <div class="custom-filters" [class.expanded]="(activePreset$ | async) === 'custom'">
-            <form [formGroup]="customFilterForm">
-                <div class="flex align-center">
-                    <ng-select
-                        [items]="orderStates"
-                        appendTo="body"
-                        [addTag]="false"
-                        [multiple]="true"
-                        formControlName="states"
-                        [placeholder]="'state.all-orders' | translate"
-                        [clearable]="true"
-                        [searchable]="false"
-                    >
-                        <ng-template ng-option-tmp let-item="item">{{
-                            item | stateI18nToken | translate
-                        }}</ng-template>
-                        <ng-template ng-label-tmp let-item="item" let-clear="clear">
-                            <span class="ng-value-label"> {{ item | stateI18nToken | translate }}</span>
-                            <span class="ng-value-icon right" (click)="clear(item)" aria-hidden="true"
-                                >×</span
-                            >
-                        </ng-template>
-                    </ng-select>
-                    <button
-                        class="btn btn-secondary"
-                        [disabled]="customFilterForm.pristine"
-                        (click)="applyCustomFilters()"
-                    >
-                        {{ 'order.apply-filters' | translate }}
-                        <clr-icon shape="filter"></clr-icon>
-                    </button>
-                </div>
-                <div class="flex">
-                    <div>
-                        <label>{{ 'order.placed-at-start' | translate }}</label>
-                        <vdr-datetime-picker formControlName="placedAtStart"></vdr-datetime-picker>
-                    </div>
-                    <div>
-                        <label>{{ 'order.placed-at-end' | translate }}</label>
-                        <vdr-datetime-picker formControlName="placedAtEnd"></vdr-datetime-picker>
-                    </div>
-                </div>
-            </form>
-        </div>
-    </vdr-ab-left>
-    <vdr-ab-right>
+<vdr-page-header>
+    <vdr-page-title>
         <vdr-action-bar-items locationId="order-list"></vdr-action-bar-items>
         <ng-container *ngIf="canCreateDraftOrder">
-            <a class="btn btn-primary mt-1" *vdrIfPermissions="['CreateOrder']" [routerLink]="['./draft/create']">
+            <a
+                class="btn"
+                *vdrIfPermissions="['CreateOrder']"
+                [routerLink]="['./draft/create']"
+            >
                 <clr-icon shape="plus"></clr-icon>
                 {{ 'catalog.create-draft-order' | translate }}
             </a>
         </ng-container>
-    </vdr-ab-right>
-</vdr-action-bar>-->
-<vdr-page-header>
-    <vdr-page-title />
+    </vdr-page-title>
     <vdr-page-header-description>Description of the current page (if applicable)</vdr-page-header-description>
     <vdr-page-header-tabs
         [tabs]="[
@@ -107,17 +35,23 @@
         (pageChange)="setPageNumber($event)"
         (itemsPerPageChange)="setItemsPerPage($event)"
     >
-        <vdr-dt2-column [heading]="'common.code' | translate">
+        <vdr-dt2-column [heading]="'common.code' | translate" [optional]="false">
             <ng-template let-order="item">
-                {{ order.code }}
+                <a class="button-ghost" [routerLink]="['./', order.id]"
+                    ><span>{{ order.code }}</span>
+                    <clr-icon shape="arrow right"></clr-icon>
+                </a>
             </ng-template>
         </vdr-dt2-column>
         <vdr-dt2-column [heading]="'order.customer' | translate">
             <ng-template let-order="item">
-                <vdr-customer-label [customer]="order.customer"></vdr-customer-label>
+                <vdr-customer-label
+                    [customer]="order.customer"
+                    (click)="$event.stopPropagation()"
+                ></vdr-customer-label>
             </ng-template>
         </vdr-dt2-column>
-        <vdr-dt2-column [heading]="'order.order-type' | translate" [optional]="true">
+        <vdr-dt2-column [heading]="'order.order-type' | translate" [hiddenByDefault]="true">
             <ng-template let-order="item">
                 <vdr-chip>{{ order.type }}</vdr-chip>
             </ng-template>
@@ -137,7 +71,7 @@
                 {{ order.updatedAt | timeAgo }}
             </ng-template>
         </vdr-dt2-column>
-        <vdr-dt2-column [heading]="'order.placed-at' | translate" [optional]="true">
+        <vdr-dt2-column [heading]="'order.placed-at' | translate">
             <ng-template let-order="item">
                 {{ order.orderPlacedAt | localeDate : 'short' }}
             </ng-template>

+ 1 - 5
packages/admin-ui/src/lib/order/src/components/order-list/order-list.component.ts

@@ -16,12 +16,10 @@ import {
     OrderType,
     ServerConfigService,
     SortOrder,
-    StateI18nTokenPipe,
 } from '@vendure/admin-ui/core';
 import { Order } from '@vendure/common/lib/generated-types';
 import { merge } from 'rxjs';
 import { debounceTime, filter, takeUntil, tap } from 'rxjs/operators';
-import { DataTableFilter } from '../../../../core/src/providers/data-table-filter/data-table-filter';
 import { DataTableFilterService } from '../../../../core/src/providers/data-table-filter/data-table-filter.service';
 
 @Component({
@@ -36,7 +34,6 @@ export class OrderListComponent
 {
     searchControl = new UntypedFormControl('');
     orderStates = this.serverConfigService.getOrderProcessStates().map(item => item.name);
-    activeFilters: DataTableFilter[] = [];
     readonly filters = this.dataTableFilterService
         .createConfig<OrderFilterParameter>()
         .addFilter({
@@ -102,7 +99,7 @@ export class OrderListComponent
             (take, skip) => this.dataService.order.getOrders({ take, skip }).refetchOnChannelChange(),
             data => data.orders,
             // eslint-disable-next-line @typescript-eslint/no-shadow
-            (skip, take) => this.createQueryOptions(skip, take, this.searchControl.value, this.activeFilters),
+            (skip, take) => this.createQueryOptions(skip, take, this.searchControl.value),
         );
         this.canCreateDraftOrder = !!this.serverConfigService
             .getOrderProcessStates()
@@ -137,7 +134,6 @@ export class OrderListComponent
         skip: number,
         take: number,
         searchTerm: string,
-        activeFilters: DataTableFilter[] = [],
     ): { options: OrderListOptions } {
         let filterOperator: LogicalOperator = LogicalOperator.AND;
         let filterInput = this.filters.createFilterInput();

+ 4 - 1
packages/admin-ui/src/lib/static/i18n-messages/cs.json

@@ -94,6 +94,7 @@
     "confirm-delete-zone": "Smazat zónu?",
     "confirm-deletion-of-unused-variants-body": "",
     "confirm-deletion-of-unused-variants-title": "",
+    "create-draft-order": "",
     "create-new-collection": "Vytvořit kolekci",
     "create-new-facet": "Vytvořit nový atribut",
     "create-new-product": "Nový produkt",
@@ -229,6 +230,7 @@
     "edit-field": "Upravit pole",
     "edit-note": "Upravit poznámku",
     "enabled": "Zapnuto",
+    "end-date": "",
     "expand-entries": "Otevřít vstupy",
     "extension-running-in-separate-window": "Rozšíření běží v novém okně",
     "filter": "",
@@ -274,7 +276,6 @@
     "operator-not-contains": "",
     "operator-not-eq": "",
     "operator-notContains": "",
-    "operator-notEq": "",
     "operator-regex": "",
     "password": "Heslo",
     "price": "Cena",
@@ -291,11 +292,13 @@
     "select-items-with-count": "",
     "select-products": "",
     "select-relation-id": "",
+    "select-table-columns": "",
     "select-today": "Vybrat dnešní datum",
     "select-variants": "",
     "seller": "",
     "set-language": "",
     "short-date": "",
+    "start-date": "",
     "tags": "",
     "theme": "Motiv",
     "there-are-unsaved-changes": "Provedené změny nebyly uloženy. Přechod na jinou stránku způsobí ztrátu těchto změn.",

+ 4 - 1
packages/admin-ui/src/lib/static/i18n-messages/de.json

@@ -94,6 +94,7 @@
     "confirm-delete-zone": "Zone löschen?",
     "confirm-deletion-of-unused-variants-body": "",
     "confirm-deletion-of-unused-variants-title": "",
+    "create-draft-order": "",
     "create-new-collection": "Neue Kollektion anlegen",
     "create-new-facet": "Neue Facette erstellen",
     "create-new-product": "Neues Produkt",
@@ -229,6 +230,7 @@
     "edit-field": "Feld bearbeiten",
     "edit-note": "Notiz bearbeiten",
     "enabled": "Aktiviert",
+    "end-date": "",
     "expand-entries": "Einträge erweitern",
     "extension-running-in-separate-window": "Die Erweiterung läuft in einem separaten Fenster",
     "filter": "Filter",
@@ -274,7 +276,6 @@
     "operator-not-contains": "",
     "operator-not-eq": "",
     "operator-notContains": "",
-    "operator-notEq": "",
     "operator-regex": "",
     "password": "Passwort",
     "price": "Preis",
@@ -291,11 +292,13 @@
     "select-items-with-count": "",
     "select-products": "",
     "select-relation-id": "",
+    "select-table-columns": "",
     "select-today": "Heute auswählen",
     "select-variants": "",
     "seller": "",
     "set-language": "",
     "short-date": "",
+    "start-date": "",
     "tags": "Tags",
     "theme": "Theme",
     "there-are-unsaved-changes": "Es gibt ungespeicherte Änderungen. Wenn Sie wechseln, gehen diese Änderungen verloren.",

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

@@ -94,6 +94,7 @@
     "confirm-delete-zone": "Delete zone?",
     "confirm-deletion-of-unused-variants-body": "The following product variants have been made obsolete due to the addition of new options. They will be deleted during the creation of the new product variants.",
     "confirm-deletion-of-unused-variants-title": "Delete obsolete product variants?",
+    "create-draft-order": "Create draft order",
     "create-new-collection": "Create new collection",
     "create-new-facet": "Create new facet",
     "create-new-product": "New product",
@@ -229,6 +230,7 @@
     "edit-field": "Edit field",
     "edit-note": "Edit note",
     "enabled": "Enabled",
+    "end-date": "End date",
     "expand-entries": "Expand entries",
     "extension-running-in-separate-window": "Extension is running in a separate window",
     "filter": "Filter",
@@ -274,7 +276,6 @@
     "operator-not-contains": "does not contain",
     "operator-not-eq": "does not equal",
     "operator-notContains": "does not contain",
-    "operator-notEq": "",
     "operator-regex": "matches regex",
     "password": "Password",
     "price": "Price",
@@ -291,11 +292,13 @@
     "select-items-with-count": "Select { count } {count, plural, one {item} other {items}}",
     "select-products": "Select products",
     "select-relation-id": "Select relation ID",
+    "select-table-columns": "Select table columns",
     "select-today": "Select today",
     "select-variants": "Select variants",
     "seller": "Seller",
     "set-language": "Set language",
     "short-date": "Short date",
+    "start-date": "Start date",
     "tags": "Tags",
     "theme": "Theme",
     "there-are-unsaved-changes": "There are unsaved changes. Navigating away will cause these changes to be lost.",
@@ -733,4 +736,4 @@
     "job-result": "Job result",
     "job-state": "Job state"
   }
-}
+}

+ 4 - 1
packages/admin-ui/src/lib/static/i18n-messages/es.json

@@ -94,6 +94,7 @@
     "confirm-delete-zone": "¿Eliminar zona?",
     "confirm-deletion-of-unused-variants-body": "Las siguientes variantes de producto han quedado obsoletas debido a la incorporación de nuevas opciones. Se eliminarán durante la creación de las nuevas variantes de producto.",
     "confirm-deletion-of-unused-variants-title": "¿Eliminar variantes de producto obsoletas?",
+    "create-draft-order": "",
     "create-new-collection": "Crear nueva colección",
     "create-new-facet": "Crear nueva faceta",
     "create-new-product": "Crear nuevo producto",
@@ -229,6 +230,7 @@
     "edit-field": "Editar campo",
     "edit-note": "Editar nota",
     "enabled": "Habilitado",
+    "end-date": "",
     "expand-entries": "Mostrar entradas",
     "extension-running-in-separate-window": "La extensión se está ejecutando en una nueva ventana",
     "filter": "Filtro",
@@ -274,7 +276,6 @@
     "operator-not-contains": "",
     "operator-not-eq": "",
     "operator-notContains": "",
-    "operator-notEq": "",
     "operator-regex": "",
     "password": "Contraseña",
     "price": "Precio",
@@ -291,11 +292,13 @@
     "select-items-with-count": "",
     "select-products": "",
     "select-relation-id": "",
+    "select-table-columns": "",
     "select-today": "Hoy",
     "select-variants": "",
     "seller": "",
     "set-language": "",
     "short-date": "",
+    "start-date": "",
     "tags": "Etiquetas",
     "theme": "Tema",
     "there-are-unsaved-changes": "Hay cambios sin guardar. Si sale de este sitio sus cambios se perderán.",

+ 4 - 1
packages/admin-ui/src/lib/static/i18n-messages/fr.json

@@ -94,6 +94,7 @@
     "confirm-delete-zone": "Supprimer zone ?",
     "confirm-deletion-of-unused-variants-body": "",
     "confirm-deletion-of-unused-variants-title": "",
+    "create-draft-order": "",
     "create-new-collection": "Créer nouvelle collection",
     "create-new-facet": "Créer nouveau composant",
     "create-new-product": "Nouveau produit",
@@ -229,6 +230,7 @@
     "edit-field": "Editer champ",
     "edit-note": "Editer note",
     "enabled": "Activé",
+    "end-date": "",
     "expand-entries": "Développer les éléments",
     "extension-running-in-separate-window": "Extension fonctionne dans une fenêtre à part",
     "filter": "Filtre",
@@ -274,7 +276,6 @@
     "operator-not-contains": "",
     "operator-not-eq": "",
     "operator-notContains": "",
-    "operator-notEq": "",
     "operator-regex": "",
     "password": "Mot de passe",
     "price": "Prix",
@@ -291,11 +292,13 @@
     "select-items-with-count": "",
     "select-products": "",
     "select-relation-id": "",
+    "select-table-columns": "",
     "select-today": "Choisir aujourd'hui",
     "select-variants": "",
     "seller": "",
     "set-language": "",
     "short-date": "",
+    "start-date": "",
     "tags": "Mots-clés",
     "theme": "Thème",
     "there-are-unsaved-changes": "Il y a des changements non enregistrés. Naviguer ailleurs fera perdre ces changements.",

+ 4 - 1
packages/admin-ui/src/lib/static/i18n-messages/it.json

@@ -94,6 +94,7 @@
     "confirm-delete-zone": "Eliminare la zona?",
     "confirm-deletion-of-unused-variants-body": "Le seguenti varianti sono diventate obsolete a seguito dell'aggiunta di nuove opzioni. Queste verranno cancellate durante la creazione delle nuove varianti.",
     "confirm-deletion-of-unused-variants-title": "Cancellare le varianti obsolete?",
+    "create-draft-order": "",
     "create-new-collection": "Crea nuova Collezione",
     "create-new-facet": "Crea nuovo attributo",
     "create-new-product": "Crea nuovo prodotto",
@@ -229,6 +230,7 @@
     "edit-field": "Modifica campo",
     "edit-note": "Modifica nota",
     "enabled": "Abilitato",
+    "end-date": "",
     "expand-entries": "Espandi elementi",
     "extension-running-in-separate-window": "L'estensione è in esecuzione in un'altra finestra",
     "filter": "Filtra",
@@ -274,7 +276,6 @@
     "operator-not-contains": "",
     "operator-not-eq": "",
     "operator-notContains": "",
-    "operator-notEq": "",
     "operator-regex": "",
     "password": "Password",
     "price": "Prezzo",
@@ -291,11 +292,13 @@
     "select-items-with-count": "",
     "select-products": "",
     "select-relation-id": "",
+    "select-table-columns": "",
     "select-today": "Seleziona oggi",
     "select-variants": "",
     "seller": "",
     "set-language": "",
     "short-date": "",
+    "start-date": "",
     "tags": "Tag",
     "theme": "Tema",
     "there-are-unsaved-changes": "Ci sono modifiche non salvate. Lasciando questa pagina le modifiche andranno perse.",

+ 4 - 1
packages/admin-ui/src/lib/static/i18n-messages/pl.json

@@ -94,6 +94,7 @@
     "confirm-delete-zone": "",
     "confirm-deletion-of-unused-variants-body": "",
     "confirm-deletion-of-unused-variants-title": "",
+    "create-draft-order": "",
     "create-new-collection": "Utwórz nową kolekcje",
     "create-new-facet": "Utwórz faset",
     "create-new-product": "Nowy produkt",
@@ -229,6 +230,7 @@
     "edit-field": "Edytuj pole",
     "edit-note": "",
     "enabled": "Aktywny",
+    "end-date": "",
     "expand-entries": "",
     "extension-running-in-separate-window": "Rozszerzenie jest włączone w innym oknie",
     "filter": "",
@@ -274,7 +276,6 @@
     "operator-not-contains": "",
     "operator-not-eq": "",
     "operator-notContains": "",
-    "operator-notEq": "",
     "operator-regex": "",
     "password": "Hasło",
     "price": "Cena",
@@ -291,11 +292,13 @@
     "select-items-with-count": "",
     "select-products": "",
     "select-relation-id": "",
+    "select-table-columns": "",
     "select-today": "Wybierz dzisiaj",
     "select-variants": "",
     "seller": "",
     "set-language": "",
     "short-date": "",
+    "start-date": "",
     "tags": "",
     "theme": "",
     "there-are-unsaved-changes": "Są nie zapisane zmiany. Nawigacja do innej lokalizacji spowoduje utrate zmian.",

+ 4 - 1
packages/admin-ui/src/lib/static/i18n-messages/pt_BR.json

@@ -94,6 +94,7 @@
     "confirm-delete-zone": "Excluir zona?",
     "confirm-deletion-of-unused-variants-body": "",
     "confirm-deletion-of-unused-variants-title": "",
+    "create-draft-order": "",
     "create-new-collection": "Criar nova categoria",
     "create-new-facet": "Criar nova etiqueta",
     "create-new-product": "Novo produto",
@@ -229,6 +230,7 @@
     "edit-field": "Editar campo",
     "edit-note": "Editar nota",
     "enabled": "Habilitado",
+    "end-date": "",
     "expand-entries": "Expandir entradas",
     "extension-running-in-separate-window": "A extensão está sendo executada em uma janela separada",
     "filter": "Filtro",
@@ -274,7 +276,6 @@
     "operator-not-contains": "",
     "operator-not-eq": "",
     "operator-notContains": "",
-    "operator-notEq": "",
     "operator-regex": "",
     "password": "Senha",
     "price": "Preço",
@@ -291,11 +292,13 @@
     "select-items-with-count": "",
     "select-products": "",
     "select-relation-id": "",
+    "select-table-columns": "",
     "select-today": "Selecione hoje",
     "select-variants": "",
     "seller": "",
     "set-language": "",
     "short-date": "",
+    "start-date": "",
     "tags": "",
     "theme": "Tema",
     "there-are-unsaved-changes": "Há alterações não salvas. Navegar para outra página fará com que essas alterações sejam perdidas.",

+ 4 - 1
packages/admin-ui/src/lib/static/i18n-messages/pt_PT.json

@@ -94,6 +94,7 @@
     "confirm-delete-zone": "Eliminar região?",
     "confirm-deletion-of-unused-variants-body": "As variantes listadas abaixo estão obsoletas e serão eliminadas devido à adição de novas opções.",
     "confirm-deletion-of-unused-variants-title": "Eliminar as variantes obsoletas?",
+    "create-draft-order": "",
     "create-new-collection": "Criar nova categoria",
     "create-new-facet": "Criar nova etiqueta",
     "create-new-product": "Novo produto",
@@ -229,6 +230,7 @@
     "edit-field": "Editar campo",
     "edit-note": "Editar nota",
     "enabled": "Activo",
+    "end-date": "",
     "expand-entries": "Expandir entradas",
     "extension-running-in-separate-window": "A extensão está a ser executada em uma janela separada",
     "filter": "Filtro",
@@ -274,7 +276,6 @@
     "operator-not-contains": "",
     "operator-not-eq": "",
     "operator-notContains": "",
-    "operator-notEq": "",
     "operator-regex": "",
     "password": "Palavra passe",
     "price": "Preço",
@@ -291,11 +292,13 @@
     "select-items-with-count": "",
     "select-products": "",
     "select-relation-id": "",
+    "select-table-columns": "",
     "select-today": "Seleccione a data de hoje",
     "select-variants": "",
     "seller": "",
     "set-language": "Definir idioma",
     "short-date": "Data abreviada",
+    "start-date": "",
     "tags": "Tags",
     "theme": "Tema",
     "there-are-unsaved-changes": "Há alterações por guardar. Navegar para outra página fará com que essas alterações sejam perdidas.",

+ 4 - 1
packages/admin-ui/src/lib/static/i18n-messages/ru.json

@@ -94,6 +94,7 @@
     "confirm-delete-zone": "Удалить зону?",
     "confirm-deletion-of-unused-variants-body": "Следующие варианты товаров устарели из за добавления новых опций. Они будут удалены во время создания новых вариантов товара.",
     "confirm-deletion-of-unused-variants-title": "Удалить устаревшие варианты товара?",
+    "create-draft-order": "",
     "create-new-collection": "Создать новую коллекцию",
     "create-new-facet": "Создать новый тег",
     "create-new-product": "Создать новый товар",
@@ -229,6 +230,7 @@
     "edit-field": "Редактировать поле",
     "edit-note": "Редактировать заметку",
     "enabled": "Включен",
+    "end-date": "",
     "expand-entries": "Развернуть записи",
     "extension-running-in-separate-window": "Расширение работает в отдельном окне",
     "filter": "Фильтр",
@@ -274,7 +276,6 @@
     "operator-not-contains": "",
     "operator-not-eq": "",
     "operator-notContains": "",
-    "operator-notEq": "",
     "operator-regex": "",
     "password": "Пароль",
     "price": "Цена",
@@ -291,11 +292,13 @@
     "select-items-with-count": "",
     "select-products": "",
     "select-relation-id": "",
+    "select-table-columns": "",
     "select-today": "Выберите сегодня",
     "select-variants": "",
     "seller": "",
     "set-language": "",
     "short-date": "",
+    "start-date": "",
     "tags": "Теги",
     "theme": "Тема",
     "there-are-unsaved-changes": "Есть несохраненные изменения. Если вы выйдете, эти изменения будут потеряны.",

+ 4 - 1
packages/admin-ui/src/lib/static/i18n-messages/uk.json

@@ -94,6 +94,7 @@
     "confirm-delete-zone": "Видалити зону?",
     "confirm-deletion-of-unused-variants-body": "Наступні варіанти товару застаріли через додавання нових опцій. Вони будуть видалені під час створення нових варіантів товару.",
     "confirm-deletion-of-unused-variants-title": "Видалити застарілі варіанти товару?",
+    "create-draft-order": "",
     "create-new-collection": "Створити нову колекцію",
     "create-new-facet": "Створити новий тег",
     "create-new-product": "Створити новий товар",
@@ -229,6 +230,7 @@
     "edit-field": "Редагувати поле",
     "edit-note": "Редагувати замітку",
     "enabled": "Включений",
+    "end-date": "",
     "expand-entries": "Розгорнути записи",
     "extension-running-in-separate-window": "Розширення працює в окремому вікні",
     "filter": "Фільтр",
@@ -274,7 +276,6 @@
     "operator-not-contains": "",
     "operator-not-eq": "",
     "operator-notContains": "",
-    "operator-notEq": "",
     "operator-regex": "",
     "password": "Пароль",
     "price": "Ціна",
@@ -291,11 +292,13 @@
     "select-items-with-count": "",
     "select-products": "",
     "select-relation-id": "",
+    "select-table-columns": "",
     "select-today": "Виберіть сьогодні",
     "select-variants": "",
     "seller": "",
     "set-language": "",
     "short-date": "",
+    "start-date": "",
     "tags": "Теги",
     "theme": "Тема",
     "there-are-unsaved-changes": "Є незбережені зміни. Якщо ви вийдете, ці зміни будуть втрачені.",

+ 4 - 1
packages/admin-ui/src/lib/static/i18n-messages/zh_Hans.json

@@ -94,6 +94,7 @@
     "confirm-delete-zone": "确认删除分区么?",
     "confirm-deletion-of-unused-variants-body": "",
     "confirm-deletion-of-unused-variants-title": "",
+    "create-draft-order": "",
     "create-new-collection": "添加系列",
     "create-new-facet": "添加特征",
     "create-new-product": "添加商品",
@@ -229,6 +230,7 @@
     "edit-field": "编辑域",
     "edit-note": "编辑笔记",
     "enabled": "启用",
+    "end-date": "",
     "expand-entries": "展开",
     "extension-running-in-separate-window": "扩展已在另一个窗口启动",
     "filter": "过滤",
@@ -274,7 +276,6 @@
     "operator-not-contains": "",
     "operator-not-eq": "",
     "operator-notContains": "",
-    "operator-notEq": "",
     "operator-regex": "",
     "password": "密码",
     "price": "价格",
@@ -291,11 +292,13 @@
     "select-items-with-count": "",
     "select-products": "",
     "select-relation-id": "",
+    "select-table-columns": "",
     "select-today": "选择今天",
     "select-variants": "",
     "seller": "",
     "set-language": "",
     "short-date": "",
+    "start-date": "",
     "tags": "标签",
     "theme": "主题",
     "there-are-unsaved-changes": "修改尚未被保存,现在离开会导致您的修改会被删除",

+ 4 - 1
packages/admin-ui/src/lib/static/i18n-messages/zh_Hant.json

@@ -94,6 +94,7 @@
     "confirm-delete-zone": "",
     "confirm-deletion-of-unused-variants-body": "",
     "confirm-deletion-of-unused-variants-title": "",
+    "create-draft-order": "",
     "create-new-collection": "新增系列",
     "create-new-facet": "新增特徵",
     "create-new-product": "新增商品",
@@ -229,6 +230,7 @@
     "edit-field": "編辑域",
     "edit-note": "",
     "enabled": "启用",
+    "end-date": "",
     "expand-entries": "",
     "extension-running-in-separate-window": "扩展已在另一個窗口启動",
     "filter": "",
@@ -274,7 +276,6 @@
     "operator-not-contains": "",
     "operator-not-eq": "",
     "operator-notContains": "",
-    "operator-notEq": "",
     "operator-regex": "",
     "password": "密碼",
     "price": "價格",
@@ -291,11 +292,13 @@
     "select-items-with-count": "",
     "select-products": "",
     "select-relation-id": "",
+    "select-table-columns": "",
     "select-today": "選擇今天",
     "select-variants": "",
     "seller": "",
     "set-language": "",
     "short-date": "",
+    "start-date": "",
     "tags": "",
     "theme": "",
     "there-are-unsaved-changes": "變更尚未被儲存,離開會失去所有變更",

+ 27 - 2
packages/admin-ui/src/lib/static/styles/global/_buttons.scss

@@ -1,11 +1,11 @@
-.button {
+.button, .btn {
     display: flex;
     flex-direction: row;
     justify-content: flex-end;
     align-items: center;
     padding: var(--space-unit);
     font-size: var(--font-size-sm);
-    gap: 12px;
+    gap: var(--space-unit);
     border: none;
     border-radius: var(--border-radius-sm);
     cursor: pointer;
@@ -24,6 +24,31 @@
     }
 }
 
+.button-ghost {
+    display: flex;
+    flex-direction: row;
+    justify-content: flex-end;
+    align-items: center;
+    padding: 0 var(--space-unit);
+    height: calc(var(--space-unit) * 3);
+    font-size: var(--font-size-xs);
+    gap: 4px;
+    border: 1px solid var(--color-weight-300);
+    border-radius: var(--border-radius-lg);
+    cursor: pointer;
+    white-space: nowrap;
+    &:hover {
+        background-color: var(--color-primary-100);
+        color: var(--color-primary-700);
+    }
+}
+a.button-ghost:link, a.button-ghost:visited {
+    color: var(--color-weight-700);
+}
+a.button-ghost:hover {
+    color: var(--color-primary-700);
+}
+
 .button-small {
     display: flex;
     flex-direction: row;

+ 1 - 1
packages/admin-ui/src/lib/static/styles/styles.scss

@@ -1,6 +1,6 @@
 @import "global/sass-overrides";
+@import "global/clarity";
 @import "@clr/icons/clr-icons.min.css";
-@import "@clr/ui/src/utils/components.clarity";
 @import "@ng-select/ng-select/themes/default.theme.css";
 @import '@angular/cdk/overlay-prebuilt.css';
 @import "global/buttons";

+ 2 - 0
packages/admin-ui/src/lib/static/styles/theme/default.scss

@@ -151,6 +151,8 @@
     --color-left-nav-text: var(--color-text);
     --color-left-nav-text-hover: var(--color-primary-700);
 
+    --color-table-alternate-row-bg: hsl(0 0% 98% / 1);
+
     // Layout
     --layout-content-max-width: 1200px;