Explorar o código

Merge branch 'fork/fix/2377-channel-aware-picker' into minor

Michael Bromley hai 1 ano
pai
achega
145af00be3

+ 9 - 7
packages/admin-ui/src/lib/catalog/src/components/collection-list/collection-list-bulk-actions.ts

@@ -79,13 +79,15 @@ export const assignCollectionsToChannelBulkAction = createBulkAssignToChannelAct
         userPermissions.includes(Permission.UpdateCatalog) ||
         userPermissions.includes(Permission.UpdateCollection),
     getItemName: item => item.name,
-    bulkAssignToChannel: (dataService, collectionIds, channelId) =>
-        dataService.collection
-            .assignCollectionsToChannel({
-                collectionIds,
-                channelId,
-            })
-            .pipe(map(res => res.assignCollectionsToChannel)),
+    bulkAssignToChannel: (dataService, collectionIds, channelIds) =>
+        channelIds.map(channelId =>
+            dataService.collection
+                .assignCollectionsToChannel({
+                    collectionIds,
+                    channelId,
+                })
+                .pipe(map(res => res.assignCollectionsToChannel)),
+        ),
 });
 
 export const removeCollectionsFromChannelBulkAction = createBulkRemoveFromChannelAction<

+ 9 - 8
packages/admin-ui/src/lib/catalog/src/components/facet-list/facet-list-bulk-actions.ts

@@ -12,7 +12,6 @@ import {
     ModalService,
     NotificationService,
     Permission,
-    RemoveFacetFromChannelResult,
     RemoveFacetsFromChannelMutation,
 } from '@vendure/admin-ui/core';
 import { unique } from '@vendure/common/lib/unique';
@@ -40,13 +39,15 @@ export const assignFacetsToChannelBulkAction = createBulkAssignToChannelAction<
         userPermissions.includes(Permission.UpdateCatalog) ||
         userPermissions.includes(Permission.UpdateFacet),
     getItemName: item => item.name,
-    bulkAssignToChannel: (dataService, facetIds, channelId) =>
-        dataService.facet
-            .assignFacetsToChannel({
-                facetIds,
-                channelId,
-            })
-            .pipe(map(res => res.assignFacetsToChannel)),
+    bulkAssignToChannel: (dataService, facetIds, channelIds) =>
+        channelIds.map(channelId =>
+            dataService.facet
+                .assignFacetsToChannel({
+                    facetIds,
+                    channelId,
+                })
+                .pipe(map(res => res.assignFacetsToChannel)),
+        ),
 });
 
 export const removeFacetsFromChannelBulkAction = createBulkRemoveFromChannelAction<

+ 13 - 10
packages/admin-ui/src/lib/core/src/common/utilities/bulk-action-utils.ts

@@ -179,8 +179,8 @@ export type CreateBulkAssignToChannelActionConfig<ItemType> = Pick<
     bulkAssignToChannel: (
         dataService: DataService,
         ids: string[],
-        channelId: string,
-    ) => Observable<Array<Partial<ItemType>>>;
+        channelIds: string[],
+    ) => Array<Observable<Array<Partial<ItemType>>>>;
 };
 
 export function createBulkAssignToChannelAction<ItemType>(
@@ -211,13 +211,16 @@ export function createBulkAssignToChannelAction<ItemType>(
                 .pipe(
                     switchMap(result => {
                         if (result) {
-                            return config
-                                .bulkAssignToChannel(
-                                    dataService,
-                                    selection.map(c => c.id),
-                                    result.id,
-                                )
-                                .pipe(mapTo(result));
+                            const observables = config.bulkAssignToChannel(
+                                dataService,
+                                selection.map(c => c.id),
+                                result.map(c => c.id),
+                            );
+
+                            return from(observables).pipe(
+                                switchMap(res => res),
+                                mapTo(result),
+                            );
                         } else {
                             return EMPTY;
                         }
@@ -226,7 +229,7 @@ export function createBulkAssignToChannelAction<ItemType>(
                 .subscribe(result => {
                     notificationService.success(_('common.notify-assign-to-channel-success-with-count'), {
                         count: selection.length,
-                        channelCode: result.code,
+                        channelCode: result.map(c => c.code).join(', '),
                     });
                     clearSelection();
                 });

+ 10 - 5
packages/admin-ui/src/lib/core/src/shared/components/assign-to-channel-dialog/assign-to-channel-dialog.component.html

@@ -20,7 +20,7 @@
     <vdr-form-field [label]="'common.channel' | translate" class="mb-4">
         <vdr-channel-assignment-control
             clrInput
-            [multiple]="false"
+            [multiple]="true"
             [includeDefaultChannel]="false"
             [formControl]="selectedChannelIdControl"
         ></vdr-channel-assignment-control>
@@ -29,12 +29,17 @@
 
 <ng-template vdrDialogButtons>
     <button type="button" class="btn" (click)="cancel()">{{ 'common.cancel' | translate }}</button>
-    <button type="submit" (click)="assign()" [disabled]="!selectedChannel" class="btn btn-primary">
-        <ng-template [ngIf]="selectedChannel" [ngIfElse]="noSelection">
-            {{ 'catalog.assign-to-named-channel' | translate : { channelCode: selectedChannel?.code } }}
+    <button
+        type="submit"
+        (click)="assign()"
+        [disabled]="selectedChannels.length <= 0"
+        class="btn btn-primary"
+    >
+        <ng-template [ngIf]="selectedChannels.length > 0" [ngIfElse]="noSelection">
+            {{ 'catalog.assign-to-channels' | translate : { count: selectedChannels.length } }}
         </ng-template>
         <ng-template #noSelection>
-            {{ 'catalog.no-channel-selected' | translate }}
+            {{ 'catalog.no-channel-selected' | translate : { count: selectedChannels.length } }}
         </ng-template>
     </button>
 </ng-template>

+ 8 - 7
packages/admin-ui/src/lib/core/src/shared/components/assign-to-channel-dialog/assign-to-channel-dialog.component.ts

@@ -15,11 +15,12 @@ type Channel = ItemOf<GetChannelsQuery, 'channels'>;
     styleUrls: ['./assign-to-channel-dialog.component.scss'],
     changeDetection: ChangeDetectionStrategy.OnPush,
 })
-export class AssignToChannelDialogComponent implements OnInit, Dialog<Channel> {
-    selectedChannel: Channel | null | undefined;
+export class AssignToChannelDialogComponent implements OnInit, Dialog<Channel[]> {
+    selectedChannels: Channel[] = [];
+
     currentChannel: Channel;
     availableChannels: Channel[];
-    resolveWith: (result?: Channel) => void;
+    resolveWith: (result?: Channel[]) => void;
     selectedChannelIdControl = new UntypedFormControl();
 
     itemNames: string;
@@ -45,13 +46,13 @@ export class AssignToChannelDialogComponent implements OnInit, Dialog<Channel> {
     }
 
     selectChannel(channelIds: string[]) {
-        this.selectedChannel = this.availableChannels.find(c => c.id === channelIds[0]);
+        this.selectedChannels = this.availableChannels.filter(c => channelIds.includes(c.id));
     }
 
     assign() {
-        const selectedChannel = this.selectedChannel;
-        if (selectedChannel) {
-            this.resolveWith(selectedChannel);
+        const selectedChannels = this.selectedChannels;
+        if (selectedChannels.length > 0) {
+            this.resolveWith(selectedChannels);
         }
     }
 

+ 12 - 9
packages/admin-ui/src/lib/marketing/src/components/promotion-list/promotion-list-bulk-actions.ts

@@ -45,15 +45,18 @@ export const assignPromotionsToChannelBulkAction = createBulkAssignToChannelActi
     location: 'promotion-list',
     requiresPermission: Permission.UpdatePromotion,
     getItemName: item => item.name,
-    bulkAssignToChannel: (dataService, promotionIds, channelId) =>
-        dataService
-            .mutate(AssignPromotionsToChannelDocument, {
-                input: {
-                    channelId,
-                    promotionIds,
-                },
-            })
-            .pipe(map(res => res.assignPromotionsToChannel)),
+    bulkAssignToChannel: (dataService, promotionIds, channelIds) => {
+        return channelIds.map(channelId =>
+            dataService
+                .mutate(AssignPromotionsToChannelDocument, {
+                    input: {
+                        channelId,
+                        promotionIds,
+                    },
+                })
+                .pipe(map(res => res.assignPromotionsToChannel)),
+        );
+    },
 });
 
 export const removePromotionsFromChannelBulkAction = createBulkRemoveFromChannelAction<

+ 11 - 9
packages/admin-ui/src/lib/settings/src/components/payment-method-list/payment-method-list-bulk-actions.ts

@@ -49,15 +49,17 @@ export const assignPaymentMethodsToChannelBulkAction = createBulkAssignToChannel
         userPermissions.includes(Permission.UpdatePaymentMethod) ||
         userPermissions.includes(Permission.UpdateSettings),
     getItemName: item => item.name,
-    bulkAssignToChannel: (dataService, paymentMethodIds, channelId) =>
-        dataService
-            .mutate(AssignPaymentMethodsToChannelDocument, {
-                input: {
-                    channelId,
-                    paymentMethodIds,
-                },
-            })
-            .pipe(map(res => res.assignPaymentMethodsToChannel)),
+    bulkAssignToChannel: (dataService, paymentMethodIds, channelIds) =>
+        channelIds.map(channelId =>
+            dataService
+                .mutate(AssignPaymentMethodsToChannelDocument, {
+                    input: {
+                        channelId,
+                        paymentMethodIds,
+                    },
+                })
+                .pipe(map(res => res.assignPaymentMethodsToChannel)),
+        ),
 });
 
 export const removePaymentMethodsFromChannelBulkAction = createBulkRemoveFromChannelAction<

+ 11 - 9
packages/admin-ui/src/lib/settings/src/components/shipping-method-list/shipping-method-list-bulk-actions.ts

@@ -47,15 +47,17 @@ export const assignShippingMethodsToChannelBulkAction = createBulkAssignToChanne
         userPermissions.includes(Permission.UpdateShippingMethod) ||
         userPermissions.includes(Permission.UpdateSettings),
     getItemName: item => item.name,
-    bulkAssignToChannel: (dataService, shippingMethodIds, channelId) =>
-        dataService
-            .mutate(AssignShippingMethodsToChannelDocument, {
-                input: {
-                    channelId,
-                    shippingMethodIds,
-                },
-            })
-            .pipe(map(res => res.assignShippingMethodsToChannel)),
+    bulkAssignToChannel: (dataService, shippingMethodIds, channelIds) =>
+        channelIds.map(channelId =>
+            dataService
+                .mutate(AssignShippingMethodsToChannelDocument, {
+                    input: {
+                        channelId,
+                        shippingMethodIds,
+                    },
+                })
+                .pipe(map(res => res.assignShippingMethodsToChannel)),
+        ),
 });
 
 export const removeShippingMethodsFromChannelBulkAction = createBulkRemoveFromChannelAction<

+ 11 - 9
packages/admin-ui/src/lib/settings/src/components/stock-location-list/stock-location-list-bulk-actions.ts

@@ -65,15 +65,17 @@ export const assignStockLocationsToChannelBulkAction = createBulkAssignToChannel
         userPermissions.includes(Permission.UpdateCatalog) ||
         userPermissions.includes(Permission.UpdateStockLocation),
     getItemName: item => item.name,
-    bulkAssignToChannel: (dataService, stockLocationIds, channelId) =>
-        dataService
-            .mutate(AssignStockLocationsToChannelDocument, {
-                input: {
-                    channelId,
-                    stockLocationIds,
-                },
-            })
-            .pipe(map(res => res.assignStockLocationsToChannel)),
+    bulkAssignToChannel: (dataService, stockLocationIds, channelIds) =>
+        channelIds.map(channelId =>
+            dataService
+                .mutate(AssignStockLocationsToChannelDocument, {
+                    input: {
+                        channelId,
+                        stockLocationIds,
+                    },
+                })
+                .pipe(map(res => res.assignStockLocationsToChannel)),
+        ),
 });
 
 export const removeStockLocationsFromChannelBulkAction = createBulkRemoveFromChannelAction<

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

@@ -67,6 +67,7 @@
     "assign-product-to-channel-success": "Successfully assigned {count, plural, one {1 product} other {{count} products}} to { channel }",
     "assign-products-to-channel": "Assign products to channel",
     "assign-to-channel": "Assign to channel",
+    "assign-to-channels": "Assign to {count, plural, one {channel} other {channels}}",
     "assign-to-named-channel": "Assign to { channelCode }",
     "assign-variant-to-channel-success": "Successfully assigned {count, plural, one {1 product variant} other {{count} product variants}} to { channel }",
     "assign-variants-to-channel": "Assign product variants to channel",