@vendure/admin-ui-plugin 2.1.4 → 2.1.5

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.
@@ -1 +1 @@
1
- {"version":3,"file":"818.a3413024616b3f72.js","mappings":"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","names":["withLatestFrom","inputs","project","popResultSelector","operate","source","subscriber","len","length","otherValues","Array","hasValue","map","ready","i","innerFrom","subscribe","createOperatorSubscriber","value","every","identity","noop","values","next","ZoneMemberControlsDirective","constructor","templateRef","this","i0","selectors","ZoneMemberListHeaderDirective","member_r6","id","member_r7","createdAt","member_r8","_c0","member_r9","name","member_r10","code","ZoneMemberListComponent_ng_template_23_vdr_chip_0_Template","ZoneMemberListComponent_ng_template_23_vdr_chip_1_Template","member_r11","enabled","ZoneMemberListComponent","dataService","selectedMemberIds","selectionChange","EventEmitter","filterTermControl","FormControl","currentPage","itemsPerPage","selectionManager","SelectionManager","multiSelect","itemsAreEqual","a","b","additiveMode","membersInput$","Subject","activeZoneInput$","BehaviorSubject","undefined","destroy$","refresh$","ngOnInit","activeZoneMembers$","merge","pipe","switchMap","activeZone","query","GetZoneMembersDocument","zoneId","mapSingle","zone","members","of","members$","take","setCurrentItems","filter","m","includes","selectionChanges$","takeUntil","selection","emit","s","filteredMembers$","combineLatest","valueChanges","startWith","filterTerm","term","toLocaleLowerCase","totalItems$","ngOnChanges","changes","ngOnDestroy","complete","refresh","i1","contentQueries","rf","ctx","dirIndex","$event","ZoneMemberListComponent_ng_template_8_Template","ZoneMemberListComponent_ng_template_11_Template","ZoneMemberListComponent_ng_template_14_Template","ZoneMemberListComponent_ng_template_17_Template","ZoneMemberListComponent_ng_template_20_Template","ZoneMemberListComponent_ng_template_23_Template","locationId","ctx_r0","zoneName","_r3","ctx_r2","cancel","ctx_r4","add","ctx_r1","GET_ZONE_MEMBERS","gql","AddCountryToZoneDialogComponent","currentMembers$","availableCountries$","GetCountryListDocument","options","mapStream","data","countries","items","currentMembers","c","find","cm","resolveWith","decls","vars","consts","template","AddCountryToZoneDialogComponent_ng_template_0_Template","AddCountryToZoneDialogComponent_ng_template_3_Template","_r6","section_r1","$implicit","toggleAll","permissions","permission_r7","_r9","ctx_r8","setPermission","description","ctx_r3","readonly","activePermissions","PermissionGridComponent_tr_2_button_10_Template","PermissionGridComponent_tr_2_td_11_Template","label","PermissionGridComponent","permissionChange","buildGrid","permission","defs","some","d","def","crudGroups","Map","nonCrud","crudRe","permissionDefinitions","test","groupName","match","existing","get","push","set","assignable","gridData","from","entries","extractCrudDescription","replace","outputs","PermissionGridComponent_tr_2_Template","create","detailForm","invalid","pristine","_r12","ctx_r11","save","ctx_r10","AdminDetailComponent_ng_template_7_button_0_Template","entity_r13","ctx_r6","customFields","channel_r14","_r16","ctx_r15","selectedChannelId","channelId","ctx_r7","channelCode","GET_ADMINISTRATOR_DETAIL","ADMINISTRATOR_FRAGMENT","AdminDetailComponent","TypedBaseDetailComponent","getAvailableChannels","Object","selectedRolePermissions","changeDetector","formBuilder","notificationService","super","getCustomFieldConfig","group","emailAddress","Validators","required","firstName","lastName","password","roles","getCustomFieldsDefaults","selectedRoles","init","allRoles$","administrator","getRoles","item","CUSTOMER_ROLE_CODE","client","userStatus","single$","Permission","CreateAdministrator","UpdateAdministrator","rolesSelect","disable","serverConfigService","getPermissionDefinitions","destroy","rolesChanged","buildPermissionsMap","getPermissionsForSelectedChannel","getActivePermissions","input","active","channels","roleIds","role","notNullOrUndefined","createAdministrator","success","_","entity","markAsPristine","markForCheck","router","navigate","relativeTo","route","err","error","entity$","mergeMap","formValue","updateAdministrator","setFormValues","languageCode","patchValue","user","setCustomFieldFormValues","passwordControl","setValidators","permissionsControl","channelIdPermissionsMap","channelIdCodeMap","channel","permissionSet","Set","forEach","p","keys","permissionsHash","has","i2","features","AdminDetailComponent_button_5_Template","AdminDetailComponent_ng_template_7_Template","AdminDetailComponent_vdr_card_12_Template","AdminDetailComponent_vdr_form_field_29_Template","AdminDetailComponent_vdr_form_field_31_Template","AdminDetailComponent_vdr_card_34_Template","AdminDetailComponent_li_42_Template","isNew$","_r1","deleteAdministratorsBulkAction","createBulkDeleteAction","location","requiresPermission","userPermissions","DeleteAdministrator","getItemName","bulkDelete","ids","deleteAdministrators","res","administrator_r8","administrator_r9","administrator_r10","updatedAt","_c1","administrator_r11","administrator_r12","role_r15","AdministratorListComponent_ng_template_31_vdr_chip_0_Template","administrator_r13","customField_r16","sorts","GET_ADMINISTRATOR_LIST","AdministratorListComponent","TypedBaseListComponent","filters","createFilterCollection","addIdFilter","addDateFilters","addFilter","type","kind","filterField","addCustomFieldFilters","connectToRoute","createSortCollection","defaultSort","addSort","addCustomFieldSorts","configure","document","GetAdministratorListDocument","getItems","administrators","setVariables","skip","createSearchQuery","searchTermControl","refreshListOnChanges","searchTerm","_filter","filterOperator","LogicalOperator","AND","contains","OR","createFilterInput","sort","createSortInput","AdministratorListComponent_a_5_Template","setPageNumber","setItemsPerPage","AdministratorListComponent_ng_template_16_Template","AdministratorListComponent_ng_template_19_Template","AdministratorListComponent_ng_template_22_Template","AdministratorListComponent_ng_template_25_Template","AdministratorListComponent_ng_template_28_Template","AdministratorListComponent_ng_template_31_Template","AdministratorListComponent_vdr_dt2_custom_field_column_32_Template","_c2","items$","itemsPerPage$","currentPage$","_r13","ctx_r12","saveButtonEnabled","ctx_r14","ChannelDetailComponent_ng_template_7_button_0_Template","entity_r17","updatePermission","ctx_r5","seller_r18","code_r19","languageCode_r20","GET_CHANNEL_DETAIL","CHANNEL_FRAGMENT","ChannelDetailComponent","DEFAULT_CHANNEL_CODE","token","pricesIncludeTax","availableLanguageCodes","availableCurrencyCodes","defaultCurrencyCode","defaultShippingZoneId","defaultLanguageCode","defaultTaxZoneId","sellerId","SuperAdmin","UpdateChannel","CreateChannel","sellers$","settings","getSellerList","sellers","availableLanguageCodes$","getAvailableLanguages","dirty","valid","createChannel","auth","currentUser","me","updateUserChannels","__typename","message","updateChannel","generateToken","defaultShippingZone","defaultTaxZone","seller","codeControl","crypto","getRandomValues","Uint8Array","toString","padStart","join","ChannelDetailComponent_button_5_Template","ChannelDetailComponent_ng_template_7_Template","ChannelDetailComponent_vdr_card_12_Template","ChannelDetailComponent_vdr_form_field_17_Template","ChannelDetailComponent_vdr_form_item_18_Template","ChannelDetailComponent_option_28_Template","ChannelDetailComponent_option_44_Template","ChannelDetailComponent_option_49_Template","ChannelDetailComponent_clr_alert_55_Template","ChannelDetailComponent_clr_alert_61_Template","ChannelDetailComponent_vdr_card_67_Template","deleteChannelsBulkAction","DeleteChannel","deleteChannels","channel_r7","channel_r8","channel_r9","channel_r10","channel_r11","customField_r12","GET_CHANNEL_LIST","ChannelListComponent","GetChannelListDocument","isDefaultChannel","ChannelListComponent_a_5_Template","ChannelListComponent_ng_template_16_Template","ChannelListComponent_ng_template_19_Template","ChannelListComponent_ng_template_22_Template","ChannelListComponent_ng_template_25_Template","ChannelListComponent_ng_template_28_Template","ChannelListComponent_vdr_dt2_custom_field_column_29_Template","CountryDetailComponent_ng_template_11_button_0_Template","entity_r10","GET_COUNTRY_DETAIL","COUNTRY_FRAGMENT","CountryDetailComponent","UpdateSettings","UpdateCountry","createUpdatedTranslatable","translatable","translations","updatedFields","customFieldConfig","defaultTranslation","createCountry","languageCode$","country","updateCountry","currentTranslation","findTranslation","setLanguage","CountryDetailComponent_button_9_Template","CountryDetailComponent_ng_template_11_Template","CountryDetailComponent_vdr_card_22_Template","CountryDetailComponent_vdr_card_35_Template","availableLanguages$","deleteCountriesBulkAction","DeleteSettings","DeleteCountry","deleteCountries","country_r8","country_r9","country_r10","country_r11","country_r12","CountryListComponent_ng_template_34_vdr_chip_0_Template","CountryListComponent_ng_template_34_vdr_chip_1_Template","country_r13","GET_COUNTRY_LIST","CountryListComponent","CountryListComponent_a_8_Template","CountryListComponent_ng_template_19_Template","CountryListComponent_ng_template_22_Template","CountryListComponent_ng_template_25_Template","CountryListComponent_ng_template_28_Template","CountryListComponent_ng_template_31_Template","CountryListComponent_ng_template_34_Template","CountryListComponent_vdr_dt2_custom_field_column_35_Template","contentLanguage$","GET_GLOBAL_SETTINGS_DETAIL","GlobalSettingsComponent","availableLanguages","trackInventory","outOfStockThreshold","languageCodes","LanguageCode","UpdateGlobalSettings","languagesSelect","updateGlobalSettings","tap","refreshGlobalSettings","uiState","globalSettings","availableLangs","contentLanguage","setContentLanguage","GlobalSettingsComponent_button_4_Template","GlobalSettingsComponent_vdr_card_24_Template","_r10","ctx_r9","selectedHandler","PaymentMethodDetailComponent_ng_template_11_button_0_Template","entity_r14","removeChecker","selectedChecker","selectedCheckerDefinition","checker_r18","_r20","ctx_r19","selectChecker","PaymentMethodDetailComponent_div_44_button_7_Template","checkers","_r22","ctx_r21","removeHandler","selectedHandlerDefinition","handler_r24","_r26","ctx_r25","selectHandler","PaymentMethodDetailComponent_div_48_button_7_Template","handlers","GET_PAYMENT_METHOD_DETAIL","PAYMENT_METHOD_FRAGMENT","PaymentMethodDetailComponent","checker","handler","UpdatePaymentMethod","getPaymentMethodOperations","paymentMethodEligibilityCheckers","paymentMethodHandlers","updateCode","currentCode","nameValue","setValue","normalizeString","configurableDefinitionToInstance","formControl","clearValidators","updateValueAndValidity","onlySelf","markAsDirty","getUpdatedPaymentMethod","createPaymentMethod","paymentMethod","updatePaymentMethod","formGroup","toConfigurableOperationInput","args","getConfigArgValue","PaymentMethodDetailComponent_button_9_Template","PaymentMethodDetailComponent_ng_template_11_Template","PaymentMethodDetailComponent_vdr_card_22_Template","target","PaymentMethodDetailComponent_vdr_card_39_Template","PaymentMethodDetailComponent_vdr_configurable_input_43_Template","PaymentMethodDetailComponent_div_44_Template","PaymentMethodDetailComponent_vdr_configurable_input_47_Template","PaymentMethodDetailComponent_div_48_Template","deletePaymentMethodsBulkAction","DeletePaymentMethod","shouldRetryItem","response","retrying","deletePaymentMethods","assignPaymentMethodsToChannelBulkAction","createBulkAssignToChannelAction","bulkAssignToChannel","paymentMethodIds","mutate","AssignPaymentMethodsToChannelDocument","assignPaymentMethodsToChannel","removePaymentMethodsFromChannelBulkAction","createBulkRemoveFromChannelAction","bulkRemoveFromChannel","RemovePaymentMethodsFromChannelDocument","removePaymentMethodsFromChannel","paymentMethod_r8","paymentMethod_r9","paymentMethod_r10","paymentMethod_r11","paymentMethod_r12","PaymentMethodListComponent_ng_template_34_vdr_chip_0_Template","PaymentMethodListComponent_ng_template_34_vdr_chip_1_Template","paymentMethod_r13","GET_PAYMENT_METHOD_LIST","PaymentMethodListComponent","GetPaymentMethodListDocument","paymentMethods","entity_r3","PaymentMethodListComponent_a_8_Template","PaymentMethodListComponent_ng_template_19_Template","PaymentMethodListComponent_ng_template_22_Template","PaymentMethodListComponent_ng_template_25_Template","PaymentMethodListComponent_ng_template_28_Template","PaymentMethodListComponent_ng_template_31_Template","PaymentMethodListComponent_ng_template_34_Template","PaymentMethodListComponent_vdr_dt2_custom_field_column_35_Template","GET_PROFILE_DETAIL","ProfileComponent","updateActiveAdministrator","ProfileComponent_vdr_card_11_Template","ProfileComponent_vdr_form_field_25_Template","ProfileComponent_vdr_card_30_Template","_r5","_r8","RoleDetailComponent_ng_template_7_button_0_Template","entity_r9","GET_ROLE_DETAIL","ROLE_FRAGMENT","RoleDetailComponent","channelIds","change","currentPermissions","newValue","unique","createRole","updateRole","detectChanges","RoleDetailComponent_button_5_Template","RoleDetailComponent_ng_template_7_Template","RoleDetailComponent_vdr_card_12_Template","tmp_13_0","deleteRolesBulkAction","deleteRoles","role_r8","role_r9","role_r10","role_r11","RoleListComponent_ng_template_25_a_0_Template","RoleListComponent_ng_template_25_ng_template_1_Template","isDefaultRole","role_r17","RoleListComponent_ng_template_28_span_0_Template","channel_r23","RoleListComponent_ng_template_31_ng_container_0_vdr_chip_1_Template","role_r20","RoleListComponent_ng_template_31_ng_container_0_Template","permission_r31","role_r25","ctx_r32","initialLimit","_r38","ctx_r36","toggleDisplayLimit","RoleListComponent_ng_template_34_ng_container_0_button_4_ng_container_1_Template","RoleListComponent_ng_template_34_ng_container_0_button_4_ng_template_2_Template","ctx_r30","displayLimit","_r33","RoleListComponent_ng_template_34_ng_container_0_vdr_chip_2_Template","RoleListComponent_ng_template_34_ng_container_0_button_4_Template","ctx_r26","RoleListComponent_ng_template_34_ng_container_0_Template","RoleListComponent_ng_template_34_ng_template_1_Template","_r27","GET_ROLE_LIST","RoleListComponent","GetRoleListDocument","SUPER_ADMIN_ROLE_CODE","RoleListComponent_a_5_Template","RoleListComponent_ng_template_16_Template","RoleListComponent_ng_template_19_Template","RoleListComponent_ng_template_22_Template","RoleListComponent_ng_template_25_Template","RoleListComponent_ng_template_28_Template","RoleListComponent_ng_template_31_Template","RoleListComponent_ng_template_34_Template","SellerDetailComponent_ng_template_7_button_0_Template","GET_SELLER_DETAIL","SellerDetailComponent","UpdateSeller","CreateSeller","createSeller","updateSeller","SellerDetailComponent_button_5_Template","SellerDetailComponent_ng_template_7_Template","SellerDetailComponent_vdr_card_12_Template","SellerDetailComponent_vdr_card_21_Template","deleteSellersBulkAction","DeleteSeller","deleteSellers","seller_r6","seller_r7","seller_r8","seller_r9","customField_r10","SellerListComponent","GetSellerListDocument","SellerListComponent_a_5_Template","SellerListComponent_ng_template_16_Template","SellerListComponent_ng_template_19_Template","SellerListComponent_ng_template_22_Template","SellerListComponent_ng_template_25_Template","SellerListComponent_vdr_dt2_custom_field_column_26_Template","quote_r2","metadata","ShippingEligibilityTestResultComponent_div_2_vdr_object_tree_14_Template","testDataUpdated","price","currencyCode","priceWithTax","ShippingEligibilityTestResultComponent","okToRun","runTest","testResult","ShippingEligibilityTestResultComponent_div_2_Template","ShippingEligibilityTestResultComponent_div_3_Template","line_r4","quantity","updateQuantity","removeLine","preview","sku","unitPriceWithTax","TestOrderBuilderComponent_table_0_tr_19_Template","lines","subTotal","TestOrderBuilderComponent","reduce","sum","l","localStorageService","orderLinesChange","loadFromLocalStorage","getActiveChannel","result","activeChannel","selectResult","addToLines","productVariantId","productVariantName","productAsset","persistToLocalStorage","line","setForCurrentLocation","getForCurrentLocation","country_r1","TestOrderBuilderComponent_table_0_Template","TestOrderBuilderComponent_ng_template_1_Template","TestAddressFormComponent","addressChange","getAvailableCountries","initialValue","city","countryCode","postalCode","province","form","subscription","unsubscribe","quote","TestAddressFormComponent_option_18_Template","ShippingMethodTestResultComponent","_r11","selectedCalculator","_r14","ctx_r13","ShippingMethodDetailComponent_ng_template_11_button_0_Template","entity_r15","handler_r16","_r18","ctx_r17","checker_r20","ShippingMethodDetailComponent_div_43_button_7_Template","_r24","ctx_r23","selectedCalculatorDefinition","calculator_r26","_r28","ctx_r27","selectCalculator","ShippingMethodDetailComponent_div_47_button_7_Template","calculators","ShippingMethodTestResultComponent_clr_icon_9_Template","ShippingMethodTestResultComponent_clr_icon_10_Template","ShippingMethodTestResultComponent_clr_icon_11_Template","ShippingMethodTestResultComponent_vdr_labeled_data_14_Template","ShippingMethodTestResultComponent_vdr_labeled_data_15_Template","ShippingMethodTestResultComponent_vdr_object_tree_16_Template","eligible","GET_SHIPPING_METHOD_DETAIL","SHIPPING_METHOD_FRAGMENT","ShippingMethodDetailComponent","fulfillmentHandler","calculator","fulfillmentHandlers","UpdateShippingMethod","fetchTestResult$","shippingMethod","getShippingMethodOperations","shippingEligibilityCheckers","shippingCalculators","activeChannel$","testResult$","address","shippingAddress","streetLine1","testShippingMethod","getUpdatedShippingMethod","fulfillmentHandlerCode","createShippingMethod","updateShippingMethod","console","setTestOrderLines","event","testOrderLines","setTestAddress","testAddress","allTestDataPresent","ShippingMethodDetailComponent_button_9_Template","ShippingMethodDetailComponent_ng_template_11_Template","ShippingMethodDetailComponent_vdr_card_16_Template","ShippingMethodDetailComponent_option_37_Template","ShippingMethodDetailComponent_vdr_card_38_Template","ShippingMethodDetailComponent_vdr_configurable_input_42_Template","ShippingMethodDetailComponent_div_43_Template","ShippingMethodDetailComponent_vdr_configurable_input_46_Template","ShippingMethodDetailComponent_div_47_Template","tmp_27_0","deleteShippingMethodsBulkAction","DeleteShippingMethod","deleteShippingMethods","assignShippingMethodsToChannelBulkAction","shippingMethodIds","AssignShippingMethodsToChannelDocument","assignShippingMethodsToChannel","removeShippingMethodsFromChannelBulkAction","RemoveShippingMethodsFromChannelDocument","removeShippingMethodsFromChannel","shippingMethod_r9","shippingMethod_r10","shippingMethod_r11","shippingMethod_r12","shippingMethod_r13","shippingMethod_r14","shippingMethod_r15","GET_SHIPPING_METHOD_LIST","ShippingMethodListComponent","GetShippingMethodListDocument","shippingMethods","StockLocationDetailComponent_ng_template_7_button_0_Template","ShippingMethodListComponent_a_8_Template","ShippingMethodListComponent_ng_template_19_Template","ShippingMethodListComponent_ng_template_22_Template","ShippingMethodListComponent_ng_template_25_Template","ShippingMethodListComponent_ng_template_28_Template","ShippingMethodListComponent_ng_template_31_Template","ShippingMethodListComponent_ng_template_34_Template","ShippingMethodListComponent_ng_template_37_Template","ShippingMethodListComponent_vdr_dt2_custom_field_column_38_Template","STOCK_LOCATION_DETAIL_FRAGMENT","GET_STOCK_LOCATION_DETAIL","CREATE_STOCK_LOCATION","UPDATE_STOCK_LOCATION","StockLocationDetailComponent","CreateStockLocationDocument","createStockLocation","taxRate","UpdateStockLocationDocument","StockLocationDetailComponent_button_5_Template","StockLocationDetailComponent_ng_template_7_Template","StockLocationDetailComponent_vdr_card_12_Template","StockLocationDetailComponent_vdr_card_26_Template","deleteStockLocationsBulkAction","DeleteStockLocation","DeleteCatalog","DeleteStockLocationsDocument","deleteStockLocations","DeletionResult","NOT_DELETED","assignStockLocationsToChannelBulkAction","UpdateCatalog","UpdateStockLocation","stockLocationIds","AssignStockLocationsToChannelDocument","assignStockLocationsToChannel","removeStockLocationsFromChannelBulkAction","RemoveStockLocationsFromChannelDocument","removeStockLocationsFromChannel","stockLocation_r7","stockLocation_r8","stockLocation_r9","stockLocation_r10","stockLocation_r11","field_r12","GET_STOCK_LOCATION_LIST","StockLocationListComponent","addFilters","addSorts","GetStockLocationListDocument","stockLocations","TaxCategoryDetailComponent_ng_template_7_button_0_Template","StockLocationListComponent_a_5_Template","StockLocationListComponent_ng_template_16_Template","StockLocationListComponent_ng_template_19_Template","StockLocationListComponent_ng_template_22_Template","StockLocationListComponent_ng_template_25_Template","StockLocationListComponent_ng_template_28_Template","StockLocationListComponent_vdr_dt2_custom_field_column_29_Template","GET_TAX_CATEGORY_DETAIL","TAX_CATEGORY_FRAGMENT","TaxCategoryDetailComponent","isDefault","UpdateTaxCategory","createTaxCategory","taxCategory","updateTaxCategory","TaxCategoryDetailComponent_button_5_Template","TaxCategoryDetailComponent_ng_template_7_Template","TaxCategoryDetailComponent_vdr_card_12_Template","TaxCategoryDetailComponent_vdr_card_26_Template","deleteTaxCategoriesBulkAction","DeleteTaxCategory","deleteTaxCategories","taxCategory_r7","taxCategory_r8","taxCategory_r9","taxCategory_r10","TaxCategoryListComponent_ng_template_28_vdr_chip_0_Template","taxCategory_r11","customField_r13","GET_TAX_CATEGORY_LIST","TaxCategoryListComponent","getCustomFieldsFor","GetTaxCategoryListDocument","taxCategories","TaxCategoryListComponent_a_5_Template","TaxCategoryListComponent_ng_template_16_Template","TaxCategoryListComponent_ng_template_19_Template","TaxCategoryListComponent_ng_template_22_Template","TaxCategoryListComponent_ng_template_25_Template","TaxCategoryListComponent_ng_template_28_Template","TaxCategoryListComponent_vdr_dt2_custom_field_column_29_Template","_r7","TaxRateDetailComponent_ng_template_7_button_0_Template","entity_r11","taxCategory_r12","GET_TAX_RATE_DETAIL","TAX_RATE_FRAGMENT","TaxRateDetailComponent","taxCategoryId","customerGroupId","UpdateTaxRate","taxCategories$","getTaxCategories","categoryId","createTaxRate","updateTaxRate","category","customerGroup","TaxRateDetailComponent_button_5_Template","TaxRateDetailComponent_ng_template_7_Template","TaxRateDetailComponent_vdr_card_18_Template","TaxRateDetailComponent_option_36_Template","TaxRateDetailComponent_vdr_card_42_Template","deleteTaxRatesBulkAction","DeleteTaxRate","deleteTaxRates","taxRate_r11","taxRate_r12","taxRate_r13","taxRate_r14","taxRate_r15","taxRate_r16","taxRate_r17","taxRate_r18","TaxRateListComponent_ng_template_40_vdr_chip_0_Template","TaxRateListComponent_ng_template_40_vdr_chip_1_Template","taxRate_r19","customField_r22","GET_TAX_RATE_LIST","TaxRateListComponent","GetTaxRateListDocument","taxRates","TaxRateListComponent_a_5_Template","TaxRateListComponent_ng_template_16_Template","TaxRateListComponent_ng_template_19_Template","TaxRateListComponent_ng_template_22_Template","TaxRateListComponent_ng_template_25_Template","TaxRateListComponent_ng_template_28_Template","TaxRateListComponent_ng_template_31_Template","TaxRateListComponent_ng_template_34_Template","TaxRateListComponent_ng_template_37_Template","TaxRateListComponent_ng_template_40_Template","TaxRateListComponent_vdr_dt2_custom_field_column_41_Template","TestShippingMethodsComponent","testEligibleShippingMethods","ZoneDetailComponent_ng_template_7_button_0_Template","tmp_0_0","GET_ZONE_DETAIL","ZoneDetailComponent","UpdateZone","createZone","updateZone","ZoneDetailComponent_button_5_Template","ZoneDetailComponent_ng_template_7_Template","ZoneDetailComponent_vdr_card_12_Template","ZoneDetailComponent_vdr_card_21_Template","deleteZonesBulkAction","DeleteZone","deleteZones","customerGroup_r9","customerGroup_r10","customerGroup_r11","customerGroup_r12","customerGroup_r13","customField_r14","ZoneListComponent_ng_template_11_ng_template_11_Template","ZoneListComponent_ng_template_11_ng_template_14_Template","ZoneListComponent_ng_template_11_ng_template_17_Template","ZoneListComponent_ng_template_11_ng_template_20_Template","ZoneListComponent_ng_template_11_ng_template_23_Template","ZoneListComponent_ng_template_11_vdr_dt2_custom_field_column_24_Template","activeIndex$","_r23","ctx_r22","ctx_r20","activeZone_r21","activeZone_r19","_r25","ngIf","ctx_r24","addToZone","ZoneListComponent_ng_template_12_ng_container_0_vdr_zone_member_list_6_Template","_c3","ctx_r18","activeZone$","ZoneListComponent_ng_template_12_ng_container_0_Template","GET_ZONE_LIST","ZoneListComponent","modalService","GetZoneListDocument","zones","activeZoneId$","paramMap","pm","distinctUntilChanged","activeZoneId","z","findIndex","g","closeMembers","params","snapshot","contents","queryParamsHandling","fromComponent","locals","size","memberIds","addMembersToZone","mapTo","EMPTY","countryCount","refreshMemberList","zoneMemberList","viewQuery","ZoneListComponent_a_8_Template","ZoneListComponent_ng_template_11_Template","ZoneListComponent_ng_template_12_Template","_c4","tmp_4_0","removeZoneMembersBulkAction","icon","iconClass","UpdateCustomerGroup","onClick","injector","hostComponent","clearSelection","DataService","NotificationService","removeMembersFromZone","ProfileResolver","BaseEntityResolver","getActiveAdministrator","activeAdministrator","factory","ɵfac","providedIn","createRoutes","pageService","path","component","PageComponent","breadcrumb","resolve","detail","inject","GetProfileDetailDocument","children","getPageTabRoutes","link","GetGlobalSettingsDetailDocument","SettingsModule","bulkActionRegistryService","hasRegisteredTabsAndBulkActions","registerBulkAction","registerPageTab","priority","tab","detailComponentWithResolver","GetSellerDetailDocument","entityKey","getBreadcrumbs","GetChannelDetailDocument","GetAdministratorDetailDocument","GetRoleDetailDocument","GetShippingMethodDetailDocument","GetPaymentMethodDetailDocument","GetTaxCategoryDetailDocument","GetTaxRateDetailDocument","GetCountryDetailDocument","GetZoneDetailDocument","GetStockLocationDetailDocument","provide","ROUTES","useFactory","multi","deps","PageService","imports","SharedModule","RouterModule","forChild"],"sourceRoot":"webpack:///","sources":["../node_modules/rxjs/dist/esm/internal/operators/withLatestFrom.js","./src/lib/settings/src/components/zone-member-list/zone-member-controls.directive.ts","./src/lib/settings/src/components/zone-member-list/zone-member-list-header.directive.ts","./src/lib/settings/src/components/zone-member-list/zone-member-list.component.html","./src/lib/settings/src/components/zone-member-list/zone-member-list.component.ts","./src/lib/settings/src/components/add-country-to-zone-dialog/add-country-to-zone-dialog.component.html","./src/lib/settings/src/components/add-country-to-zone-dialog/add-country-to-zone-dialog.component.ts","./src/lib/settings/src/components/permission-grid/permission-grid.component.html","./src/lib/settings/src/components/permission-grid/permission-grid.component.ts","./src/lib/settings/src/components/admin-detail/admin-detail.component.html","./src/lib/settings/src/components/admin-detail/admin-detail.component.ts","./src/lib/settings/src/components/administrator-list/administrator-list-bulk-actions.ts","./src/lib/settings/src/components/administrator-list/administrator-list.component.html","./src/lib/settings/src/components/administrator-list/administrator-list.component.ts","./src/lib/settings/src/components/channel-detail/channel-detail.component.html","./src/lib/settings/src/components/channel-detail/channel-detail.component.ts","./src/lib/settings/src/components/channel-list/channel-list-bulk-actions.ts","./src/lib/settings/src/components/channel-list/channel-list.component.html","./src/lib/settings/src/components/channel-list/channel-list.component.ts","./src/lib/settings/src/components/country-detail/country-detail.component.html","./src/lib/settings/src/components/country-detail/country-detail.component.ts","./src/lib/settings/src/components/country-list/country-list-bulk-actions.ts","./src/lib/settings/src/components/country-list/country-list.component.html","./src/lib/settings/src/components/country-list/country-list.component.ts","./src/lib/settings/src/components/global-settings/global-settings.component.html","./src/lib/settings/src/components/global-settings/global-settings.component.ts","./src/lib/settings/src/components/payment-method-detail/payment-method-detail.component.html","./src/lib/settings/src/components/payment-method-detail/payment-method-detail.component.ts","./src/lib/settings/src/components/payment-method-list/payment-method-list-bulk-actions.ts","./src/lib/settings/src/components/payment-method-list/payment-method-list.component.html","./src/lib/settings/src/components/payment-method-list/payment-method-list.component.ts","./src/lib/settings/src/components/profile/profile.component.html","./src/lib/settings/src/components/profile/profile.component.ts","./src/lib/settings/src/components/role-detail/role-detail.component.html","./src/lib/settings/src/components/role-detail/role-detail.component.ts","./src/lib/settings/src/components/role-list/role-list-bulk-actions.ts","./src/lib/settings/src/components/role-list/role-list.component.html","./src/lib/settings/src/components/role-list/role-list.component.ts","./src/lib/settings/src/components/seller-detail/seller-detail.component.html","./src/lib/settings/src/components/seller-detail/seller-detail.component.ts","./src/lib/settings/src/components/seller-list/seller-list-bulk-actions.ts","./src/lib/settings/src/components/seller-list/seller-list.component.html","./src/lib/settings/src/components/seller-list/seller-list.component.ts","./src/lib/settings/src/components/shipping-eligibility-test-result/shipping-eligibility-test-result.component.html","./src/lib/settings/src/components/shipping-eligibility-test-result/shipping-eligibility-test-result.component.ts","./src/lib/settings/src/components/test-order-builder/test-order-builder.component.html","./src/lib/settings/src/components/test-order-builder/test-order-builder.component.ts","./src/lib/settings/src/components/test-address-form/test-address-form.component.html","./src/lib/settings/src/components/test-address-form/test-address-form.component.ts","./src/lib/settings/src/components/shipping-method-test-result/shipping-method-test-result.component.html","./src/lib/settings/src/components/shipping-method-test-result/shipping-method-test-result.component.ts","./src/lib/settings/src/components/shipping-method-detail/shipping-method-detail.component.html","./src/lib/settings/src/components/shipping-method-detail/shipping-method-detail.component.ts","./src/lib/settings/src/components/shipping-method-list/shipping-method-list-bulk-actions.ts","./src/lib/settings/src/components/shipping-method-list/shipping-method-list.component.html","./src/lib/settings/src/components/shipping-method-list/shipping-method-list.component.ts","./src/lib/settings/src/components/stock-location-detail/stock-location-detail.component.html","./src/lib/settings/src/components/stock-location-detail/stock-location-detail.component.ts","./src/lib/settings/src/components/stock-location-list/stock-location-list-bulk-actions.ts","./src/lib/settings/src/components/stock-location-list/stock-location-list.component.html","./src/lib/settings/src/components/stock-location-list/stock-location-list.component.ts","./src/lib/settings/src/components/tax-category-detail/tax-category-detail.component.html","./src/lib/settings/src/components/tax-category-detail/tax-category-detail.component.ts","./src/lib/settings/src/components/tax-category-list/tax-category-list-bulk-actions.ts","./src/lib/settings/src/components/tax-category-list/tax-category-list.component.html","./src/lib/settings/src/components/tax-category-list/tax-category-list.component.ts","./src/lib/settings/src/components/tax-rate-detail/tax-rate-detail.component.html","./src/lib/settings/src/components/tax-rate-detail/tax-rate-detail.component.ts","./src/lib/settings/src/components/tax-rate-list/tax-rate-list-bulk-actions.ts","./src/lib/settings/src/components/tax-rate-list/tax-rate-list.component.html","./src/lib/settings/src/components/tax-rate-list/tax-rate-list.component.ts","./src/lib/settings/src/components/test-shipping-methods/test-shipping-methods.component.ts","./src/lib/settings/src/components/zone-detail/zone-detail.component.html","./src/lib/settings/src/components/test-shipping-methods/test-shipping-methods.component.html","./src/lib/settings/src/components/zone-detail/zone-detail.component.ts","./src/lib/settings/src/components/zone-list/zone-list-bulk-actions.ts","./src/lib/settings/src/components/zone-list/zone-list.component.html","./src/lib/settings/src/components/zone-list/zone-list.component.ts","./src/lib/settings/src/components/zone-member-list/zone-member-list-bulk-actions.ts","./src/lib/settings/src/providers/routing/profile-resolver.ts","./src/lib/settings/src/settings.routes.ts","./src/lib/settings/src/settings.module.ts"],"sourcesContent":["import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nimport { innerFrom } from '../observable/innerFrom';\nimport { identity } from '../util/identity';\nimport { noop } from '../util/noop';\nimport { popResultSelector } from '../util/args';\nexport function withLatestFrom(...inputs) {\n const project = popResultSelector(inputs);\n return operate((source, subscriber) => {\n const len = inputs.length;\n const otherValues = new Array(len);\n let hasValue = inputs.map(() => false);\n let ready = false;\n for (let i = 0; i < len; i++) {\n innerFrom(inputs[i]).subscribe(createOperatorSubscriber(subscriber, (value) => {\n otherValues[i] = value;\n if (!ready && !hasValue[i]) {\n hasValue[i] = true;\n (ready = hasValue.every(identity)) && (hasValue = null);\n }\n }, noop));\n }\n source.subscribe(createOperatorSubscriber(subscriber, (value) => {\n if (ready) {\n const values = [value, ...otherValues];\n subscriber.next(project ? project(...values) : values);\n }\n }));\n });\n}\n","import { Directive, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[vdrZoneMemberControls]',\r\n})\r\nexport class ZoneMemberControlsDirective {\r\n constructor(public templateRef: TemplateRef<any>) {}\r\n}\r\n","import { Directive, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[vdrZoneMemberListHeader]',\r\n})\r\nexport class ZoneMemberListHeaderDirective {\r\n constructor(public templateRef: TemplateRef<any>) {}\r\n}\r\n","<vdr-data-table-2\r\n [id]=\"locationId\"\r\n [items]=\"filteredMembers$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [itemsPerPage]=\"itemsPerPage\"\r\n [currentPage]=\"currentPage\"\r\n (itemsPerPageChange)=\"itemsPerPage = $event\"\r\n (pageChange)=\"currentPage = $event\"\r\n>\r\n <vdr-bulk-action-menu\r\n [locationId]=\"locationId\"\r\n [hostComponent]=\"this\"\r\n [selectionManager]=\"selectionManager\"\r\n ></vdr-bulk-action-menu>\r\n <vdr-dt2-search\r\n [searchTermControl]=\"filterTermControl\"\r\n [searchTermPlaceholder]=\"'common.search-by-name' | translate\"\r\n ></vdr-dt2-search>\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\r\n <ng-template let-member=\"item\">\r\n {{ member.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.created-at' | translate\" id=\"created-at\" [hiddenByDefault]=\"true\">\r\n <ng-template let-member=\"item\">\r\n {{ member.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.updated-at' | translate\" id=\"updated-at\" [hiddenByDefault]=\"true\">\r\n <ng-template let-member=\"item\">\r\n {{ member.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.name' | translate\" id=\"name\" [optional]=\"false\">\r\n <ng-template let-member=\"item\">\r\n <a class=\"button-ghost\" [routerLink]=\"['/settings/countries', member.id]\"\r\n ><span> {{ member.name }}</span>\r\n <clr-icon shape=\"arrow right\"></clr-icon>\r\n </a>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.code' | translate\" id=\"code\">\r\n <ng-template let-member=\"item\">\r\n {{ member.code }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.enabled' | translate\" id=\"enabled\">\r\n <ng-template let-member=\"item\">\r\n <vdr-chip *ngIf=\"member.enabled\" colorType=\"success\">{{ 'common.enabled' | translate }}</vdr-chip>\r\n <vdr-chip *ngIf=\"!member.enabled\" colorType=\"warning\">{{ 'common.disabled' | translate }}</vdr-chip>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n</vdr-data-table-2>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ContentChild,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n SimpleChanges,\r\n} from '@angular/core';\r\nimport { FormControl } from '@angular/forms';\r\nimport {\r\n BulkActionLocationId,\r\n DataService,\r\n GetZoneListQuery,\r\n GetZoneMembersDocument,\r\n GetZoneMembersQuery,\r\n ItemOf,\r\n SelectionManager,\r\n} from '@vendure/admin-ui/core';\r\nimport { BehaviorSubject, combineLatest, merge, Observable, of, Subject, switchMap } from 'rxjs';\r\nimport { map, startWith, take, takeUntil } from 'rxjs/operators';\r\n\r\nimport { ZoneMemberControlsDirective } from './zone-member-controls.directive';\r\nimport { ZoneMemberListHeaderDirective } from './zone-member-list-header.directive';\r\n\r\nexport type ZoneMember = { id: string; name: string; code: string };\r\n\r\n@Component({\r\n selector: 'vdr-zone-member-list',\r\n templateUrl: './zone-member-list.component.html',\r\n styleUrls: ['./zone-member-list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ZoneMemberListComponent implements OnInit, OnChanges, OnDestroy {\r\n @Input() locationId: BulkActionLocationId;\r\n @Input() members?: ZoneMember[];\r\n @Input() selectedMemberIds: string[] = [];\r\n @Input() activeZone: ItemOf<GetZoneListQuery, 'zones'>;\r\n @Output() selectionChange = new EventEmitter<string[]>();\r\n @ContentChild(ZoneMemberListHeaderDirective) headerTemplate: ZoneMemberListHeaderDirective;\r\n @ContentChild(ZoneMemberControlsDirective) controlsTemplate: ZoneMemberControlsDirective;\r\n members$: Observable<NonNullable<GetZoneMembersQuery['zone']>['members'] | ZoneMember[]>;\r\n filterTermControl = new FormControl('');\r\n filteredMembers$: Observable<ZoneMember[]>;\r\n totalItems$: Observable<number>;\r\n currentPage = 1;\r\n itemsPerPage = 10;\r\n selectionManager = new SelectionManager<ZoneMember>({\r\n multiSelect: true,\r\n itemsAreEqual: (a, b) => a.id === b.id,\r\n additiveMode: true,\r\n });\r\n private membersInput$ = new Subject<ZoneMember[]>();\r\n private activeZoneInput$ = new BehaviorSubject<ItemOf<GetZoneListQuery, 'zones'> | undefined>(undefined);\r\n private destroy$ = new Subject<void>();\r\n private refresh$ = new Subject<void>();\r\n\r\n constructor(private dataService: DataService) {}\r\n\r\n ngOnInit() {\r\n const activeZoneMembers$ = merge(this.activeZoneInput$, this.refresh$).pipe(\r\n switchMap(activeZone =>\r\n this.activeZone\r\n ? this.dataService\r\n .query(GetZoneMembersDocument, { zoneId: this.activeZone.id })\r\n .mapSingle(({ zone }) => zone?.members ?? [])\r\n : of([]),\r\n ),\r\n );\r\n this.members$ = merge(activeZoneMembers$, this.membersInput$);\r\n\r\n this.members$.pipe(take(1)).subscribe(members => {\r\n this.selectionManager.setCurrentItems(\r\n members?.filter(m => this.selectedMemberIds.includes(m.id)) ?? [],\r\n );\r\n });\r\n this.selectionManager.selectionChanges$.pipe(takeUntil(this.destroy$)).subscribe(selection => {\r\n this.selectionChange.emit(selection.map(s => s.id));\r\n });\r\n this.filteredMembers$ = combineLatest(\r\n this.members$,\r\n this.filterTermControl.valueChanges.pipe(startWith('')),\r\n ).pipe(\r\n map(([members, filterTerm]) => {\r\n if (filterTerm) {\r\n const term = filterTerm?.toLocaleLowerCase() ?? '';\r\n return members.filter(\r\n m =>\r\n m.name.toLocaleLowerCase().includes(term) ||\r\n m.code.toLocaleLowerCase().includes(term),\r\n );\r\n } else {\r\n return members;\r\n }\r\n }),\r\n );\r\n this.totalItems$ = this.filteredMembers$.pipe(map(members => members.length));\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if ('members' in changes) {\r\n this.membersInput$.next(this.members ?? []);\r\n }\r\n if ('activeZone' in changes) {\r\n this.activeZoneInput$.next(this.activeZone);\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n\r\n refresh() {\r\n this.refresh$.next();\r\n }\r\n}\r\n","<ng-template vdrDialogTitle>{{ 'settings.add-countries-to-zone' | translate: { zoneName: zoneName } }}</ng-template>\r\n\r\n<vdr-zone-member-list\r\n [members]=\"availableCountries$ | async\"\r\n [selectedMemberIds]=\"selectedMemberIds\"\r\n (selectionChange)=\"selectedMemberIds = $event\"\r\n>\r\n</vdr-zone-member-list>\r\n\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button type=\"submit\" (click)=\"add()\" [disabled]=\"!selectedMemberIds.length\" class=\"btn btn-primary\">\r\n {{ 'settings.add-countries-to-zone' | translate: { zoneName: zoneName } }}\r\n </button>\r\n</ng-template>\r\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport {\r\n DataService,\r\n Dialog,\r\n GetCountryListDocument,\r\n GetCountryListQuery,\r\n GetZoneListQuery,\r\n GetZoneMembersDocument,\r\n GetZoneMembersQuery,\r\n ItemOf,\r\n} from '@vendure/admin-ui/core';\r\nimport { gql } from 'apollo-angular';\r\nimport { Observable } from 'rxjs';\r\nimport { map, withLatestFrom } from 'rxjs/operators';\r\n\r\nexport const GET_ZONE_MEMBERS = gql`\r\n query GetZoneMembers($zoneId: ID!) {\r\n zone(id: $zoneId) {\r\n id\r\n createdAt\r\n updatedAt\r\n name\r\n members {\r\n createdAt\r\n updatedAt\r\n id\r\n name\r\n code\r\n enabled\r\n }\r\n }\r\n }\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-add-country-to-zone-dialog',\r\n templateUrl: './add-country-to-zone-dialog.component.html',\r\n styleUrls: ['./add-country-to-zone-dialog.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class AddCountryToZoneDialogComponent implements Dialog<string[]>, OnInit {\r\n resolveWith: (result?: string[]) => void;\r\n zoneName: string;\r\n zoneId: string;\r\n currentMembers$: Observable<NonNullable<GetZoneMembersQuery['zone']>['members']>;\r\n availableCountries$: Observable<Array<ItemOf<GetCountryListQuery, 'countries'>>>;\r\n selectedMemberIds: string[] = [];\r\n\r\n constructor(private dataService: DataService) {}\r\n\r\n ngOnInit(): void {\r\n this.currentMembers$ = this.dataService\r\n .query(GetZoneMembersDocument, { zoneId: this.zoneId })\r\n .mapSingle(({ zone }) => zone?.members ?? []);\r\n this.availableCountries$ = this.dataService\r\n .query(GetCountryListDocument, {\r\n options: { take: 999 },\r\n })\r\n .mapStream(data => data.countries.items)\r\n .pipe(\r\n withLatestFrom(this.currentMembers$),\r\n map(([countries, currentMembers]) =>\r\n countries.filter(c => !currentMembers.find(cm => cm.id === c.id)),\r\n ),\r\n );\r\n }\r\n\r\n cancel() {\r\n this.resolveWith();\r\n }\r\n\r\n add() {\r\n this.resolveWith(this.selectedMemberIds);\r\n }\r\n}\r\n","<table class=\"table\">\r\n <tbody>\r\n <tr *ngFor=\"let section of gridData\">\r\n <td class=\"permission-group left\">\r\n <div><strong>{{ section.label | translate }}</strong></div>\r\n <small>{{ section.description | translate }}</small><br>\r\n <button *ngIf=\"1 < section.permissions.length && !readonly\" class=\"button-small\" (click)=\"toggleAll(section.permissions)\">\r\n {{ 'common.toggle-all' | translate }}\r\n </button>\r\n </td>\r\n <td *ngFor=\"let permission of section.permissions\" [attr.colspan]=\"section.permissions.length === 1 ? 4 : 1\">\r\n <vdr-select-toggle\r\n size=\"small\"\r\n [title]=\"permission.description\"\r\n [label]=\"permission.name\"\r\n [disabled]=\"readonly\"\r\n [selected]=\"activePermissions?.includes(permission.name)\"\r\n (selectedChange)=\"setPermission(permission.name, $event)\"\r\n ></vdr-select-toggle>\r\n </td>\r\n </tr>\r\n </tbody>\r\n</table>\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport { PermissionDefinition } from '@vendure/admin-ui/core';\r\n\r\nexport interface PermissionGridRow {\r\n label: string;\r\n description: string;\r\n permissions: PermissionDefinition[];\r\n}\r\n\r\n/**\r\n * A table showing and allowing the setting of all possible CRUD permissions.\r\n */\r\n@Component({\r\n selector: 'vdr-permission-grid',\r\n templateUrl: './permission-grid.component.html',\r\n styleUrls: ['./permission-grid.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PermissionGridComponent implements OnInit {\r\n @Input() permissionDefinitions: PermissionDefinition[];\r\n @Input() activePermissions: string[];\r\n @Input() readonly = false;\r\n @Output() permissionChange = new EventEmitter<{ permission: string; value: boolean }>();\r\n gridData: PermissionGridRow[];\r\n\r\n ngOnInit() {\r\n this.buildGrid();\r\n }\r\n\r\n setPermission(permission: string, value: boolean) {\r\n if (!this.readonly) {\r\n this.permissionChange.emit({ permission, value });\r\n }\r\n }\r\n\r\n toggleAll(defs: PermissionDefinition[]) {\r\n const value = defs.some(d => !this.activePermissions.includes(d.name));\r\n for (const def of defs) {\r\n this.permissionChange.emit({ permission: def.name, value });\r\n }\r\n }\r\n\r\n private buildGrid() {\r\n const crudGroups = new Map<string, PermissionDefinition[]>();\r\n const nonCrud: PermissionDefinition[] = [];\r\n const crudRe = /^(Create|Read|Update|Delete)([a-zA-Z]+)$/;\r\n for (const def of this.permissionDefinitions) {\r\n const isCrud = crudRe.test(def.name);\r\n if (isCrud) {\r\n const groupName = def.name.match(crudRe)?.[2];\r\n if (groupName) {\r\n const existing = crudGroups.get(groupName);\r\n if (existing) {\r\n existing.push(def);\r\n } else {\r\n crudGroups.set(groupName, [def]);\r\n }\r\n }\r\n } else if (def.assignable) {\r\n nonCrud.push(def);\r\n }\r\n }\r\n this.gridData = [\r\n ...nonCrud.map(d => ({\r\n label: d.name,\r\n description: d.description,\r\n permissions: [d],\r\n })),\r\n ...Array.from(crudGroups.entries()).map(([label, defs]) => ({\r\n label,\r\n description: this.extractCrudDescription(defs[0]),\r\n permissions: defs,\r\n })),\r\n ];\r\n }\r\n\r\n private extractCrudDescription(def: PermissionDefinition): string {\r\n return def.description.replace(/Grants permission to [\\w]+/, 'Grants permissions on');\r\n }\r\n}\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left> </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"administrator-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"isNew$ | async; else updateButton\"\r\n (click)=\"create()\"\r\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n *vdrIfPermissions=\"'UpdateAdministrator'\"\r\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </ng-template>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n\r\n<form class=\"form\" [formGroup]=\"detailForm\">\r\n <vdr-page-detail-layout>\r\n <vdr-page-detail-sidebar>\r\n <vdr-card *ngIf=\"entity$ | async as entity\">\r\n <vdr-page-entity-info [entity]=\"entity\" />\r\n </vdr-card>\r\n </vdr-page-detail-sidebar>\r\n <vdr-page-block>\r\n <vdr-card>\r\n <div class=\"form-grid\">\r\n <vdr-form-field\r\n [label]=\"'settings.email-address-or-identifier' | translate\"\r\n for=\"emailAddress\"\r\n class=\"form-grid-span\"\r\n >\r\n <input\r\n id=\"emailAddress\"\r\n type=\"text\"\r\n formControlName=\"emailAddress\"\r\n [readonly]=\"!(['CreateAdministrator', 'UpdateAdministrator'] | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'settings.first-name' | translate\" for=\"firstName\">\r\n <input\r\n id=\"firstName\"\r\n type=\"text\"\r\n formControlName=\"firstName\"\r\n [readonly]=\"!(['CreateAdministrator', 'UpdateAdministrator'] | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'settings.last-name' | translate\" for=\"lastName\">\r\n <input\r\n id=\"lastName\"\r\n type=\"text\"\r\n formControlName=\"lastName\"\r\n [readonly]=\"!(['CreateAdministrator', 'UpdateAdministrator'] | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n *ngIf=\"isNew$ | async\"\r\n [label]=\"'settings.password' | translate\"\r\n for=\"password\"\r\n >\r\n <input id=\"password\" type=\"password\" formControlName=\"password\" />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n *ngIf=\"\r\n !(isNew$ | async) &&\r\n (['CreateAdministrator', 'UpdateAdministrator'] | hasPermission)\r\n \"\r\n [label]=\"'settings.password' | translate\"\r\n for=\"password\"\r\n [readOnlyToggle]=\"true\"\r\n >\r\n <input id=\"password\" type=\"password\" formControlName=\"password\" />\r\n </vdr-form-field>\r\n </div>\r\n </vdr-card>\r\n\r\n <vdr-card\r\n formGroupName=\"customFields\"\r\n *ngIf=\"customFields.length\"\r\n [title]=\"'common.custom-fields' | translate\"\r\n >\r\n <vdr-tabbed-custom-fields\r\n entityName=\"Administrator\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n ></vdr-tabbed-custom-fields>\r\n </vdr-card>\r\n <vdr-custom-detail-component-host\r\n locationId=\"administrator-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n </vdr-page-block>\r\n </vdr-page-detail-layout>\r\n <vdr-page-block>\r\n <vdr-card [title]=\"'settings.roles' | translate\">\r\n <ng-select\r\n [items]=\"allRoles$ | async\"\r\n [multiple]=\"true\"\r\n [hideSelected]=\"true\"\r\n formControlName=\"roles\"\r\n (change)=\"rolesChanged($event)\"\r\n bindLabel=\"description\"\r\n ></ng-select>\r\n\r\n <ul class=\"nav mt-2\" role=\"tablist\">\r\n <li role=\"presentation\" class=\"nav-item\" *ngFor=\"let channel of getAvailableChannels()\">\r\n <button\r\n [id]=\"channel.channelId\"\r\n (click)=\"selectedChannelId = channel.channelId\"\r\n class=\"btn btn-link nav-link\"\r\n [class.active]=\"selectedChannelId === channel.channelId\"\r\n [attr.aria-selected]=\"selectedChannelId === channel.channelId\"\r\n type=\"button\"\r\n >\r\n {{ channel.channelCode | channelCodeToLabel | translate }}\r\n </button>\r\n </li>\r\n </ul>\r\n <vdr-permission-grid\r\n [activePermissions]=\"getPermissionsForSelectedChannel()\"\r\n [permissionDefinitions]=\"permissionDefinitions\"\r\n [readonly]=\"true\"\r\n ></vdr-permission-grid>\r\n </vdr-card>\r\n </vdr-page-block>\r\n</form>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { FormBuilder, Validators } from '@angular/forms';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport { ResultOf } from '@graphql-typed-document-node/core';\r\nimport {\r\n ADMINISTRATOR_FRAGMENT,\r\n CreateAdministratorInput,\r\n DataService,\r\n GetAdministratorDetailDocument,\r\n getCustomFieldsDefaults,\r\n LanguageCode,\r\n NotificationService,\r\n Permission,\r\n PermissionDefinition,\r\n RoleFragment,\r\n TypedBaseDetailComponent,\r\n UpdateAdministratorInput,\r\n} from '@vendure/admin-ui/core';\r\nimport { CUSTOMER_ROLE_CODE } from '@vendure/common/lib/shared-constants';\r\nimport { notNullOrUndefined } from '@vendure/common/lib/shared-utils';\r\nimport { gql } from 'apollo-angular';\r\nimport { Observable } from 'rxjs';\r\nimport { mergeMap, take } from 'rxjs/operators';\r\n\r\nexport interface PermissionsByChannel {\r\n channelId: string;\r\n channelCode: string;\r\n permissions: { [K in Permission]: boolean };\r\n}\r\n\r\nexport const GET_ADMINISTRATOR_DETAIL = gql`\r\n query GetAdministratorDetail($id: ID!) {\r\n administrator(id: $id) {\r\n ...Administrator\r\n }\r\n }\r\n ${ADMINISTRATOR_FRAGMENT}\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-admin-detail',\r\n templateUrl: './admin-detail.component.html',\r\n styleUrls: ['./admin-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class AdminDetailComponent\r\n extends TypedBaseDetailComponent<typeof GetAdministratorDetailDocument, 'administrator'>\r\n implements OnInit, OnDestroy\r\n{\r\n customFields = this.getCustomFieldConfig('Administrator');\r\n detailForm = this.formBuilder.group({\r\n emailAddress: ['', Validators.required],\r\n firstName: ['', Validators.required],\r\n lastName: ['', Validators.required],\r\n password: [''],\r\n roles: [\r\n [] as NonNullable<\r\n ResultOf<typeof GetAdministratorDetailDocument>['administrator']\r\n >['user']['roles'],\r\n ],\r\n customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),\r\n });\r\n permissionDefinitions: PermissionDefinition[];\r\n allRoles$: Observable<RoleFragment[]>;\r\n selectedRoles: RoleFragment[] = [];\r\n selectedRolePermissions: { [channelId: string]: PermissionsByChannel } = {} as any;\r\n selectedChannelId: string | null = null;\r\n\r\n getAvailableChannels(): PermissionsByChannel[] {\r\n return Object.values(this.selectedRolePermissions);\r\n }\r\n\r\n constructor(\r\n private changeDetector: ChangeDetectorRef,\r\n protected dataService: DataService,\r\n private formBuilder: FormBuilder,\r\n private notificationService: NotificationService,\r\n ) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n this.init();\r\n this.allRoles$ = this.dataService.administrator\r\n .getRoles(999)\r\n .mapStream(item => item.roles.items.filter(i => i.code !== CUSTOMER_ROLE_CODE));\r\n this.dataService.client.userStatus().single$.subscribe(({ userStatus }) => {\r\n if (\r\n !userStatus.permissions.includes(Permission.CreateAdministrator) &&\r\n !userStatus.permissions.includes(Permission.UpdateAdministrator)\r\n ) {\r\n const rolesSelect = this.detailForm.get('roles');\r\n if (rolesSelect) {\r\n rolesSelect.disable();\r\n }\r\n }\r\n });\r\n this.permissionDefinitions = this.serverConfigService.getPermissionDefinitions();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy();\r\n }\r\n\r\n rolesChanged(roles: RoleFragment[]) {\r\n this.buildPermissionsMap();\r\n }\r\n\r\n getPermissionsForSelectedChannel(): string[] {\r\n function getActivePermissions(input: PermissionsByChannel['permissions']): string[] {\r\n return Object.entries(input)\r\n .filter(([permission, active]) => active)\r\n .map(([permission, active]) => permission);\r\n }\r\n if (this.selectedChannelId) {\r\n const selectedChannel = this.selectedRolePermissions[this.selectedChannelId];\r\n if (selectedChannel) {\r\n const permissionMap = this.selectedRolePermissions[this.selectedChannelId].permissions;\r\n return getActivePermissions(permissionMap);\r\n }\r\n }\r\n const channels = Object.values(this.selectedRolePermissions);\r\n if (0 < channels.length) {\r\n this.selectedChannelId = channels[0].channelId;\r\n return getActivePermissions(channels[0].permissions);\r\n }\r\n return [];\r\n }\r\n\r\n create() {\r\n const { emailAddress, firstName, lastName, password, customFields, roles } = this.detailForm.value;\r\n if (!emailAddress || !firstName || !lastName || !password) {\r\n return;\r\n }\r\n const administrator: CreateAdministratorInput = {\r\n emailAddress,\r\n firstName,\r\n lastName,\r\n password,\r\n customFields,\r\n roleIds: roles?.map(role => role.id).filter(notNullOrUndefined) ?? [],\r\n };\r\n this.dataService.administrator.createAdministrator(administrator).subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-create-success'), {\r\n entity: 'Administrator',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n this.router.navigate(['../', data.createAdministrator.id], { relativeTo: this.route });\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-create-error'), {\r\n entity: 'Administrator',\r\n });\r\n },\r\n );\r\n }\r\n\r\n save() {\r\n this.entity$\r\n .pipe(\r\n take(1),\r\n mergeMap(({ id }) => {\r\n const formValue = this.detailForm.value;\r\n const administrator: UpdateAdministratorInput = {\r\n id,\r\n emailAddress: formValue.emailAddress,\r\n firstName: formValue.firstName,\r\n lastName: formValue.lastName,\r\n password: formValue.password,\r\n customFields: formValue.customFields,\r\n roleIds: formValue.roles?.map(role => role.id),\r\n };\r\n return this.dataService.administrator.updateAdministrator(administrator);\r\n }),\r\n )\r\n .subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-update-success'), {\r\n entity: 'Administrator',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-update-error'), {\r\n entity: 'Administrator',\r\n });\r\n },\r\n );\r\n }\r\n\r\n protected setFormValues(\r\n entity: NonNullable<ResultOf<typeof GetAdministratorDetailDocument>['administrator']>,\r\n languageCode: LanguageCode,\r\n ) {\r\n this.detailForm.patchValue({\r\n emailAddress: entity.emailAddress,\r\n firstName: entity.firstName,\r\n lastName: entity.lastName,\r\n roles: entity.user.roles,\r\n });\r\n if (this.customFields.length) {\r\n this.setCustomFieldFormValues(this.customFields, this.detailForm.get(['customFields']), entity);\r\n }\r\n const passwordControl = this.detailForm.get('password');\r\n if (passwordControl) {\r\n if (!entity.id) {\r\n passwordControl.setValidators([Validators.required]);\r\n } else {\r\n passwordControl.setValidators([]);\r\n }\r\n }\r\n this.buildPermissionsMap();\r\n }\r\n\r\n private buildPermissionsMap() {\r\n const permissionsControl = this.detailForm.get('roles');\r\n if (permissionsControl) {\r\n const roles = permissionsControl.value;\r\n const channelIdPermissionsMap = new Map<string, Set<Permission>>();\r\n const channelIdCodeMap = new Map<string, string>();\r\n\r\n for (const role of roles ?? []) {\r\n for (const channel of role.channels) {\r\n const channelPermissions = channelIdPermissionsMap.get(channel.id);\r\n const permissionSet = channelPermissions || new Set<Permission>();\r\n\r\n role.permissions.forEach(p => permissionSet.add(p));\r\n channelIdPermissionsMap.set(channel.id, permissionSet);\r\n channelIdCodeMap.set(channel.id, channel.code);\r\n }\r\n }\r\n\r\n this.selectedRolePermissions = {} as any;\r\n for (const channelId of Array.from(channelIdPermissionsMap.keys())) {\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n const permissionSet = channelIdPermissionsMap.get(channelId)!;\r\n const permissionsHash: { [K in Permission]: boolean } = {} as any;\r\n for (const def of this.serverConfigService.getPermissionDefinitions()) {\r\n permissionsHash[def.name] = permissionSet.has(def.name as Permission);\r\n }\r\n this.selectedRolePermissions[channelId] = {\r\n /* eslint-disable @typescript-eslint/no-non-null-assertion */\r\n channelId,\r\n channelCode: channelIdCodeMap.get(channelId)!,\r\n permissions: permissionsHash,\r\n /* eslint-enable @typescript-eslint/no-non-null-assertion */\r\n };\r\n }\r\n }\r\n }\r\n}\r\n","import {\r\n createBulkDeleteAction,\r\n GetAdministratorListQuery,\r\n ItemOf,\r\n Permission,\r\n} from '@vendure/admin-ui/core';\r\nimport { map } from 'rxjs/operators';\r\n\r\nexport const deleteAdministratorsBulkAction = createBulkDeleteAction<\r\n ItemOf<GetAdministratorListQuery, 'administrators'>\r\n>({\r\n location: 'administrator-list',\r\n requiresPermission: userPermissions => userPermissions.includes(Permission.DeleteAdministrator),\r\n getItemName: item => item.firstName + ' ' + item.lastName,\r\n bulkDelete: (dataService, ids) =>\r\n dataService.administrator.deleteAdministrators(ids).pipe(map(res => res.deleteAdministrators)),\r\n});\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left> </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"administrator-list\"></vdr-action-bar-items>\r\n <a\r\n class=\"btn btn-primary\"\r\n *vdrIfPermissions=\"['CreateAdministrator']\"\r\n [routerLink]=\"['./', 'create']\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'admin.create-new-administrator' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n<vdr-data-table-2\r\n class=\"mt-2\"\r\n id=\"administrator-list\"\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n [filters]=\"filters\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n>\r\n <vdr-bulk-action-menu\r\n locationId=\"administrator-list\"\r\n [hostComponent]=\"this\"\r\n [selectionManager]=\"selectionManager\"\r\n />\r\n <vdr-dt2-search\r\n [searchTermControl]=\"searchTermControl\"\r\n [searchTermPlaceholder]=\"'catalog.filter-by-name' | translate\"\r\n />\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\r\n <ng-template let-administrator=\"item\">\r\n {{ administrator.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.created-at' | translate\" id=\"created-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('createdAt')\"\r\n >\r\n <ng-template let-administrator=\"item\">\r\n {{ administrator.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.updated-at' | translate\" id=\"updated-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('updatedAt')\"\r\n >\r\n <ng-template let-administrator=\"item\">\r\n {{ administrator.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.name' | translate\" id=\"name\" [optional]=\"false\" [sort]=\"sorts.get('lastName')\">\r\n <ng-template let-administrator=\"item\">\r\n <a class=\"button-ghost\" [routerLink]=\"['./', administrator.id]\"\r\n ><span>{{ administrator.firstName }} {{ administrator.lastName }}</span>\r\n <clr-icon shape=\"arrow right\"></clr-icon>\r\n </a>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'settings.email-address' | translate\" id=\"email-address\" [sort]=\"sorts.get('emailAddress')\">\r\n <ng-template let-administrator=\"item\">\r\n {{ administrator.emailAddress }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'settings.roles' | translate\" id=\"roles\">\r\n <ng-template let-administrator=\"item\">\r\n <vdr-chip *ngFor=\"let role of administrator.user.roles\">{{ role.description }}</vdr-chip>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-custom-field-column\r\n *ngFor=\"let customField of customFields\"\r\n [customField]=\"customField\"\r\n [sorts]=\"sorts\"\r\n />\r\n</vdr-data-table-2>\r\n","import { Component } from '@angular/core';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n ADMINISTRATOR_FRAGMENT,\r\n GetAdministratorListDocument,\r\n LogicalOperator,\r\n TypedBaseListComponent,\r\n} from '@vendure/admin-ui/core';\r\nimport { gql } from 'apollo-angular';\r\n\r\nexport const GET_ADMINISTRATOR_LIST = gql`\r\n query GetAdministratorList($options: AdministratorListOptions) {\r\n administrators(options: $options) {\r\n items {\r\n ...AdministratorListItem\r\n }\r\n totalItems\r\n }\r\n }\r\n fragment AdministratorListItem on Administrator {\r\n id\r\n createdAt\r\n updatedAt\r\n firstName\r\n lastName\r\n emailAddress\r\n user {\r\n id\r\n identifier\r\n lastLogin\r\n roles {\r\n id\r\n createdAt\r\n updatedAt\r\n code\r\n description\r\n }\r\n }\r\n }\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-administrator-list',\r\n templateUrl: './administrator-list.component.html',\r\n styleUrls: ['./administrator-list.component.scss'],\r\n})\r\nexport class AdministratorListComponent extends TypedBaseListComponent<\r\n typeof GetAdministratorListDocument,\r\n 'administrators'\r\n> {\r\n readonly customFields = this.getCustomFieldConfig('Administrator');\r\n readonly filters = this.createFilterCollection()\r\n .addIdFilter()\r\n .addDateFilters()\r\n .addFilter({\r\n name: 'firstName',\r\n type: { kind: 'text' },\r\n label: _('settings.first-name'),\r\n filterField: 'firstName',\r\n })\r\n .addFilter({\r\n name: 'lastName',\r\n type: { kind: 'text' },\r\n label: _('settings.last-name'),\r\n filterField: 'lastName',\r\n })\r\n .addFilter({\r\n name: 'emailAddress',\r\n type: { kind: 'text' },\r\n label: _('settings.email-address'),\r\n filterField: 'emailAddress',\r\n })\r\n .addCustomFieldFilters(this.customFields)\r\n .connectToRoute(this.route);\r\n\r\n readonly sorts = this.createSortCollection()\r\n .defaultSort('createdAt', 'DESC')\r\n .addSort({ name: 'createdAt' })\r\n .addSort({ name: 'updatedAt' })\r\n .addSort({ name: 'lastName' })\r\n .addSort({ name: 'emailAddress' })\r\n .addCustomFieldSorts(this.customFields)\r\n .connectToRoute(this.route);\r\n\r\n constructor() {\r\n super();\r\n super.configure({\r\n document: GetAdministratorListDocument,\r\n getItems: data => data.administrators,\r\n setVariables: (skip, take) => this.createSearchQuery(skip, take, this.searchTermControl.value),\r\n refreshListOnChanges: [this.filters.valueChanges, this.sorts.valueChanges],\r\n });\r\n }\r\n\r\n createSearchQuery(skip: number, take: number, searchTerm: string | null) {\r\n let _filter = {};\r\n let filterOperator: LogicalOperator = LogicalOperator.AND;\r\n\r\n if (searchTerm) {\r\n _filter = {\r\n emailAddress: {\r\n contains: searchTerm,\r\n },\r\n firstName: {\r\n contains: searchTerm,\r\n },\r\n lastName: {\r\n contains: searchTerm,\r\n },\r\n };\r\n filterOperator = LogicalOperator.OR;\r\n }\r\n return {\r\n options: {\r\n skip,\r\n take,\r\n filter: {\r\n ...(_filter ?? {}),\r\n ...this.filters.createFilterInput(),\r\n },\r\n sort: this.sorts.createSortInput(),\r\n filterOperator,\r\n },\r\n };\r\n }\r\n}\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left></vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"channel-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"isNew$ | async; else updateButton\"\r\n (click)=\"create()\"\r\n [disabled]=\"!saveButtonEnabled()\"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n *vdrIfPermissions=\"['SuperAdmin', 'UpdateChannel']\"\r\n [disabled]=\"!saveButtonEnabled()\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </ng-template>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n\r\n<form class=\"form\" [formGroup]=\"detailForm\">\r\n <vdr-page-detail-layout>\r\n <vdr-page-detail-sidebar>\r\n <vdr-card *ngIf=\"entity$ | async as entity\">\r\n <vdr-page-entity-info [entity]=\"entity\" />\r\n </vdr-card>\r\n </vdr-page-detail-sidebar>\r\n <vdr-page-block>\r\n <vdr-card>\r\n <div class=\"form-grid\">\r\n <vdr-form-field\r\n class=\"form-grid-span\"\r\n *ngIf=\"entity?.code !== DEFAULT_CHANNEL_CODE\"\r\n [label]=\"'common.code' | translate\"\r\n for=\"code\"\r\n >\r\n <input\r\n id=\"code\"\r\n type=\"text\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n formControlName=\"code\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-item\r\n class=\"form-grid-span\"\r\n *ngIf=\"entity?.code === DEFAULT_CHANNEL_CODE\"\r\n [label]=\"'common.code' | translate\"\r\n >\r\n {{ entity?.code | channelCodeToLabel | translate }}\r\n </vdr-form-item>\r\n <vdr-form-field [label]=\"'settings.channel-token' | translate\" for=\"token\">\r\n <input\r\n id=\"token\"\r\n type=\"text\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n formControlName=\"token\"\r\n />\r\n </vdr-form-field>\r\n\r\n <vdr-form-field [label]=\"'common.seller' | translate\" for=\"sellerId\">\r\n <select\r\n name=\"sellerId\"\r\n formControlName=\"sellerId\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n >\r\n <option selected value style=\"display: none\"></option>\r\n <option *ngFor=\"let seller of sellers$ | async\" [value]=\"seller.id\">\r\n {{ seller.name }}\r\n </option>\r\n </select>\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'common.available-languages' | translate\"\r\n for=\"availableLanguageCodes\"\r\n >\r\n <vdr-language-code-selector\r\n formControlName=\"availableLanguageCodes\"\r\n [languageCodes]=\"availableLanguageCodes$ | async\"\r\n ></vdr-language-code-selector>\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'common.available-currencies' | translate\"\r\n for=\"availableCurrencyCodes\"\r\n >\r\n <vdr-currency-code-selector\r\n formControlName=\"availableCurrencyCodes\"\r\n ></vdr-currency-code-selector>\r\n </vdr-form-field>\r\n </div>\r\n </vdr-card>\r\n <vdr-card [title]=\"'settings.defaults' | translate\">\r\n <div class=\"form-grid\">\r\n <vdr-form-field [label]=\"'settings.default-currency' | translate\" for=\"defaultTaxZoneId\">\r\n <select\r\n name=\"defaultCurrencyCode\"\r\n formControlName=\"defaultCurrencyCode\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n >\r\n <option\r\n *ngFor=\"let code of detailForm.value.availableCurrencyCodes\"\r\n [value]=\"code\"\r\n >\r\n {{ code | localeCurrencyName }}\r\n </option>\r\n </select>\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'common.default-language' | translate\" for=\"defaultLanguage\">\r\n <select\r\n name=\"defaultLanguageCode\"\r\n formControlName=\"defaultLanguageCode\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n >\r\n <option\r\n *ngFor=\"let languageCode of detailForm.value.availableLanguageCodes\"\r\n [value]=\"languageCode\"\r\n >\r\n {{ languageCode | localeLanguageName }} ({{ languageCode | uppercase }})\r\n </option>\r\n </select>\r\n </vdr-form-field>\r\n <div>\r\n <vdr-form-field\r\n [label]=\"'settings.default-tax-zone' | translate\"\r\n for=\"defaultTaxZoneId\"\r\n >\r\n <vdr-zone-selector\r\n formControlName=\"defaultTaxZoneId\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n ></vdr-zone-selector>\r\n </vdr-form-field>\r\n <clr-alert\r\n *ngIf=\"detailForm.value.code && !detailForm.value.defaultTaxZoneId\"\r\n clrAlertType=\"danger\"\r\n [clrAlertClosable]=\"false\"\r\n >\r\n <clr-alert-item>\r\n <span class=\"alert-text\">\r\n {{ 'error.no-default-tax-zone-set' | translate }}\r\n </span>\r\n </clr-alert-item>\r\n </clr-alert>\r\n </div>\r\n\r\n <div>\r\n <vdr-form-field\r\n [label]=\"'settings.default-shipping-zone' | translate\"\r\n for=\"defaultShippingZoneId\"\r\n >\r\n <vdr-zone-selector\r\n name=\"defaultShippingZoneId\"\r\n formControlName=\"defaultShippingZoneId\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n ></vdr-zone-selector>\r\n </vdr-form-field>\r\n <clr-alert\r\n *ngIf=\"detailForm.value.code && !detailForm.value.defaultShippingZoneId\"\r\n clrAlertType=\"warning\"\r\n [clrAlertClosable]=\"false\"\r\n >\r\n <clr-alert-item>\r\n <span class=\"alert-text\">\r\n {{ 'error.no-default-shipping-zone-set' | translate }}\r\n </span>\r\n </clr-alert-item>\r\n </clr-alert>\r\n </div>\r\n <vdr-form-field\r\n [label]=\"'settings.prices-include-tax' | translate\"\r\n for=\"pricesIncludeTax\"\r\n >\r\n <clr-toggle-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n clrToggle\r\n id=\"pricesIncludeTax\"\r\n formControlName=\"pricesIncludeTax\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </clr-toggle-wrapper>\r\n </vdr-form-field>\r\n </div>\r\n </vdr-card>\r\n <vdr-card\r\n formGroupName=\"customFields\"\r\n *ngIf=\"customFields.length\"\r\n [title]=\"'common.custom-fields' | translate\"\r\n >\r\n <vdr-tabbed-custom-fields\r\n entityName=\"Channel\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n ></vdr-tabbed-custom-fields>\r\n </vdr-card>\r\n <vdr-custom-detail-component-host\r\n locationId=\"channel-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n </vdr-page-block>\r\n </vdr-page-detail-layout>\r\n</form>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { FormBuilder, Validators } from '@angular/forms';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n CHANNEL_FRAGMENT,\r\n ChannelFragment,\r\n CreateChannelInput,\r\n CurrencyCode,\r\n DataService,\r\n GetChannelDetailDocument,\r\n getCustomFieldsDefaults,\r\n GetSellersQuery,\r\n LanguageCode,\r\n NotificationService,\r\n Permission,\r\n ServerConfigService,\r\n TypedBaseDetailComponent,\r\n UpdateChannelInput,\r\n} from '@vendure/admin-ui/core';\r\nimport { DEFAULT_CHANNEL_CODE } from '@vendure/common/lib/shared-constants';\r\nimport { gql } from 'apollo-angular';\r\nimport { Observable } from 'rxjs';\r\nimport { map, mergeMap, take } from 'rxjs/operators';\r\n\r\nexport const GET_CHANNEL_DETAIL = gql`\r\n query GetChannelDetail($id: ID!) {\r\n channel(id: $id) {\r\n ...Channel\r\n }\r\n }\r\n ${CHANNEL_FRAGMENT}\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-channel-detail',\r\n templateUrl: './channel-detail.component.html',\r\n styleUrls: ['./channel-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ChannelDetailComponent\r\n extends TypedBaseDetailComponent<typeof GetChannelDetailDocument, 'channel'>\r\n implements OnInit, OnDestroy\r\n{\r\n DEFAULT_CHANNEL_CODE = DEFAULT_CHANNEL_CODE;\r\n customFields = this.getCustomFieldConfig('Channel');\r\n // zones$: Observable<Array<ItemOf<GetZoneListQuery, 'zones'>>>;\r\n sellers$: Observable<GetSellersQuery['sellers']['items']>;\r\n detailForm = this.formBuilder.group({\r\n code: ['', Validators.required],\r\n token: ['', Validators.required],\r\n pricesIncludeTax: [false],\r\n availableLanguageCodes: [[] as string[]],\r\n availableCurrencyCodes: [[] as string[]],\r\n defaultCurrencyCode: ['' as CurrencyCode],\r\n defaultShippingZoneId: ['', Validators.required],\r\n defaultLanguageCode: [undefined as LanguageCode | undefined],\r\n defaultTaxZoneId: ['', Validators.required],\r\n sellerId: ['', Validators.required],\r\n customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),\r\n });\r\n\r\n availableLanguageCodes$: Observable<LanguageCode[]>;\r\n readonly updatePermission = [Permission.SuperAdmin, Permission.UpdateChannel, Permission.CreateChannel];\r\n\r\n constructor(\r\n protected serverConfigService: ServerConfigService,\r\n private changeDetector: ChangeDetectorRef,\r\n protected dataService: DataService,\r\n private formBuilder: FormBuilder,\r\n private notificationService: NotificationService,\r\n ) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n this.init();\r\n // this.zones$ = this.dataService.settings.getZones({ take: 100 }).mapSingle(data => data.zones.items);\r\n // TODO: make this lazy-loaded autocomplete\r\n this.sellers$ = this.dataService.settings.getSellerList().mapSingle(data => data.sellers.items);\r\n this.availableLanguageCodes$ = this.serverConfigService.getAvailableLanguages();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroy();\r\n }\r\n\r\n saveButtonEnabled(): boolean {\r\n return this.detailForm.dirty && this.detailForm.valid;\r\n }\r\n\r\n create() {\r\n if (!this.detailForm.dirty) {\r\n return;\r\n }\r\n const {\r\n code,\r\n token,\r\n defaultLanguageCode,\r\n pricesIncludeTax,\r\n defaultCurrencyCode,\r\n defaultShippingZoneId,\r\n defaultTaxZoneId,\r\n customFields,\r\n sellerId,\r\n } = this.detailForm.value;\r\n if (\r\n !code ||\r\n !token ||\r\n !defaultLanguageCode ||\r\n !defaultCurrencyCode ||\r\n !defaultShippingZoneId ||\r\n !defaultTaxZoneId\r\n ) {\r\n return;\r\n }\r\n const input: CreateChannelInput = {\r\n code,\r\n token,\r\n defaultLanguageCode,\r\n pricesIncludeTax: !!pricesIncludeTax,\r\n defaultCurrencyCode,\r\n defaultShippingZoneId,\r\n defaultTaxZoneId,\r\n customFields,\r\n sellerId,\r\n };\r\n this.dataService.settings\r\n .createChannel(input)\r\n .pipe(\r\n mergeMap(({ createChannel }) =>\r\n this.dataService.auth.currentUser().single$.pipe(\r\n map(({ me }) => ({\r\n me,\r\n createChannel,\r\n })),\r\n ),\r\n ),\r\n mergeMap(({ me, createChannel }) =>\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n this.dataService.client.updateUserChannels(me!.channels).pipe(map(() => createChannel)),\r\n ),\r\n )\r\n .subscribe(data => {\r\n switch (data.__typename) {\r\n case 'Channel':\r\n this.notificationService.success(_('common.notify-create-success'), {\r\n entity: 'Channel',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n this.router.navigate(['../', data.id], { relativeTo: this.route });\r\n break;\r\n case 'LanguageNotAvailableError':\r\n this.notificationService.error(data.message);\r\n break;\r\n }\r\n });\r\n }\r\n\r\n save() {\r\n if (!this.detailForm.dirty) {\r\n return;\r\n }\r\n const formValue = this.detailForm.value;\r\n this.entity$\r\n .pipe(\r\n take(1),\r\n mergeMap(channel => {\r\n const input = {\r\n id: channel.id,\r\n code: formValue.code,\r\n token: formValue.token,\r\n pricesIncludeTax: formValue.pricesIncludeTax,\r\n availableLanguageCodes: formValue.availableLanguageCodes,\r\n availableCurrencyCodes: formValue.availableCurrencyCodes,\r\n defaultCurrencyCode: formValue.defaultCurrencyCode,\r\n defaultShippingZoneId: formValue.defaultShippingZoneId,\r\n defaultLanguageCode: formValue.defaultLanguageCode,\r\n defaultTaxZoneId: formValue.defaultTaxZoneId,\r\n customFields: formValue.customFields,\r\n sellerId: formValue.sellerId,\r\n } as UpdateChannelInput;\r\n return this.dataService.settings.updateChannel(input);\r\n }),\r\n )\r\n .subscribe(({ updateChannel }) => {\r\n switch (updateChannel.__typename) {\r\n case 'Channel':\r\n this.notificationService.success(_('common.notify-update-success'), {\r\n entity: 'Channel',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n break;\r\n case 'LanguageNotAvailableError':\r\n this.notificationService.error(updateChannel.message);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Update the form values when the entity changes.\r\n */\r\n protected setFormValues(entity: ChannelFragment, languageCode: LanguageCode): void {\r\n this.detailForm.patchValue({\r\n code: entity.code,\r\n token: entity.token || this.generateToken(),\r\n pricesIncludeTax: entity.pricesIncludeTax,\r\n availableLanguageCodes: entity.availableLanguageCodes,\r\n availableCurrencyCodes: entity.availableCurrencyCodes,\r\n defaultCurrencyCode: entity.defaultCurrencyCode,\r\n defaultShippingZoneId: entity.defaultShippingZone?.id ?? '',\r\n defaultLanguageCode: entity.defaultLanguageCode,\r\n defaultTaxZoneId: entity.defaultTaxZone?.id ?? '',\r\n sellerId: entity.seller?.id ?? '',\r\n });\r\n if (this.customFields.length) {\r\n this.setCustomFieldFormValues(this.customFields, this.detailForm.get(['customFields']), entity);\r\n }\r\n if (entity.code === DEFAULT_CHANNEL_CODE) {\r\n const codeControl = this.detailForm.get('code');\r\n if (codeControl) {\r\n codeControl.disable();\r\n }\r\n }\r\n }\r\n\r\n private generateToken(): string {\r\n return Array.from(crypto.getRandomValues(new Uint8Array(10)))\r\n .map(b => b.toString(16).padStart(2, '0'))\r\n .join('');\r\n }\r\n}\r\n","import { createBulkDeleteAction, GetChannelsQuery, ItemOf, Permission } from '@vendure/admin-ui/core';\r\nimport { map, mergeMap } from 'rxjs/operators';\r\n\r\nexport const deleteChannelsBulkAction = createBulkDeleteAction<ItemOf<GetChannelsQuery, 'channels'>>({\r\n location: 'channel-list',\r\n requiresPermission: userPermissions =>\r\n userPermissions.includes(Permission.SuperAdmin) || userPermissions.includes(Permission.DeleteChannel),\r\n getItemName: item => item.code,\r\n bulkDelete: (dataService, ids) => {\r\n return dataService.settings.deleteChannels(ids).pipe(\r\n mergeMap(({ deleteChannels }) =>\r\n dataService.auth.currentUser().single$.pipe(\r\n map(({ me }) => ({\r\n me,\r\n deleteChannels,\r\n })),\r\n ),\r\n ),\r\n mergeMap(({ me, deleteChannels }) =>\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n dataService.client.updateUserChannels(me!.channels).pipe(map(() => deleteChannels)),\r\n ),\r\n );\r\n },\r\n});\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left> </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"channel-list\"></vdr-action-bar-items>\r\n <a class=\"btn btn-primary\" *vdrIfPermissions=\"['SuperAdmin', 'CreateChannel']\" [routerLink]=\"['./', 'create']\">\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'settings.create-new-channel' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n<vdr-data-table-2\r\n class=\"mt-2\"\r\n id=\"channel-list\"\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n [filters]=\"filters\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n>\r\n <vdr-bulk-action-menu\r\n locationId=\"channel-list\"\r\n [hostComponent]=\"this\"\r\n [selectionManager]=\"selectionManager\"\r\n />\r\n <vdr-dt2-search\r\n [searchTermControl]=\"searchTermControl\"\r\n [searchTermPlaceholder]=\"'catalog.filter-by-name' | translate\"\r\n />\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\r\n <ng-template let-channel=\"item\">\r\n {{ channel.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.created-at' | translate\" id=\"created-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('createdAt')\"\r\n >\r\n <ng-template let-channel=\"item\">\r\n {{ channel.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.updated-at' | translate\" id=\"updated-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('updatedAt')\"\r\n >\r\n <ng-template let-channel=\"item\">\r\n {{ channel.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.code' | translate\" id=\"code\" [optional]=\"false\" [sort]=\"sorts.get('code')\">\r\n <ng-template let-channel=\"item\">\r\n <a class=\"button-ghost\" [routerLink]=\"['./', channel.id]\"\r\n ><span>{{ channel.code | channelCodeToLabel | translate }}</span>\r\n <clr-icon shape=\"arrow right\"></clr-icon>\r\n </a>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'settings.channel-token' | translate\" id=\"channel-token\" [sort]=\"sorts.get('token')\">\r\n <ng-template let-channel=\"item\">\r\n {{ channel.token }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-custom-field-column *ngFor=\"let customField of customFields\" [customField]=\"customField\" [sorts]=\"sorts\" />\r\n</vdr-data-table-2>\r\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport { CHANNEL_FRAGMENT, GetChannelListDocument, TypedBaseListComponent } from '@vendure/admin-ui/core';\r\nimport { DEFAULT_CHANNEL_CODE } from '@vendure/common/lib/shared-constants';\r\nimport { gql } from 'apollo-angular';\r\n\r\nexport const GET_CHANNEL_LIST = gql`\r\n query GetChannelList($options: ChannelListOptions) {\r\n channels(options: $options) {\r\n items {\r\n ...Channel\r\n }\r\n totalItems\r\n }\r\n }\r\n ${CHANNEL_FRAGMENT}\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-channel-list',\r\n templateUrl: './channel-list.component.html',\r\n styleUrls: ['./channel-list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ChannelListComponent\r\n extends TypedBaseListComponent<typeof GetChannelListDocument, 'channels'>\r\n implements OnInit\r\n{\r\n readonly customFields = this.getCustomFieldConfig('Channel');\r\n readonly filters = this.createFilterCollection()\r\n .addIdFilter()\r\n .addDateFilters()\r\n .addFilter({\r\n name: 'code',\r\n type: { kind: 'text' },\r\n label: _('common.code'),\r\n filterField: 'code',\r\n })\r\n .addFilter({\r\n name: 'token',\r\n type: { kind: 'text' },\r\n label: _('settings.channel-token'),\r\n filterField: 'token',\r\n })\r\n .addCustomFieldFilters(this.customFields)\r\n .connectToRoute(this.route);\r\n\r\n readonly sorts = this.createSortCollection()\r\n .defaultSort('createdAt', 'DESC')\r\n .addSort({ name: 'createdAt' })\r\n .addSort({ name: 'updatedAt' })\r\n .addSort({ name: 'code' })\r\n .addSort({ name: 'token' })\r\n .addCustomFieldSorts(this.customFields)\r\n .connectToRoute(this.route);\r\n\r\n constructor() {\r\n super();\r\n super.configure({\r\n document: GetChannelListDocument,\r\n getItems: data => data.channels,\r\n setVariables: (skip, take) => ({\r\n options: {\r\n skip,\r\n take,\r\n filter: {\r\n code: {\r\n contains: this.searchTermControl.value,\r\n },\r\n ...this.filters.createFilterInput(),\r\n },\r\n sort: this.sorts.createSortInput(),\r\n },\r\n }),\r\n refreshListOnChanges: [this.filters.valueChanges, this.sorts.valueChanges],\r\n });\r\n }\r\n\r\n isDefaultChannel(channelCode: string): boolean {\r\n return channelCode === DEFAULT_CHANNEL_CODE;\r\n }\r\n}\r\n","<vdr-page-block\r\n ><vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-language-selector\r\n [disabled]=\"isNew$ | async\"\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"languageCode$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"country-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"isNew$ | async; else updateButton\"\r\n (click)=\"create()\"\r\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n class=\"btn btn-primary\"\r\n *vdrIfPermissions=\"updatePermission\"\r\n (click)=\"save()\"\r\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </ng-template>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n\r\n<form class=\"form\" [formGroup]=\"detailForm\">\r\n <vdr-page-detail-layout>\r\n <vdr-page-detail-sidebar>\r\n <vdr-card>\r\n <vdr-form-field [label]=\"'common.enabled' | translate\" for=\"enabled\">\r\n <clr-toggle-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n clrToggle\r\n id=\"enabled\"\r\n formControlName=\"enabled\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </clr-toggle-wrapper>\r\n </vdr-form-field>\r\n </vdr-card>\r\n <vdr-card *ngIf=\"entity$ | async as entity\">\r\n <vdr-page-entity-info [entity]=\"entity\" />\r\n </vdr-card>\r\n </vdr-page-detail-sidebar>\r\n <vdr-page-block>\r\n <vdr-card>\r\n <div class=\"form-grid\">\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input\r\n id=\"name\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'common.code' | translate\" for=\"code\">\r\n <input\r\n id=\"code\"\r\n type=\"text\"\r\n formControlName=\"code\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n </div>\r\n </vdr-card>\r\n <vdr-card\r\n formGroupName=\"customFields\"\r\n *ngIf=\"customFields.length\"\r\n [title]=\"'common.custom-fields' | translate\"\r\n >\r\n <vdr-tabbed-custom-fields\r\n entityName=\"Region\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n ></vdr-tabbed-custom-fields>\r\n </vdr-card>\r\n <vdr-custom-detail-component-host\r\n locationId=\"country-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n </vdr-page-block>\r\n </vdr-page-detail-layout>\r\n</form>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { FormBuilder, Validators } from '@angular/forms';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n COUNTRY_FRAGMENT,\r\n CountryFragment,\r\n createUpdatedTranslatable,\r\n DataService,\r\n findTranslation,\r\n GetCountryDetailDocument,\r\n getCustomFieldsDefaults,\r\n LanguageCode,\r\n NotificationService,\r\n Permission,\r\n TypedBaseDetailComponent,\r\n UpdateCountryInput,\r\n} from '@vendure/admin-ui/core';\r\nimport { gql } from 'apollo-angular';\r\nimport { combineLatest } from 'rxjs';\r\nimport { mergeMap, take } from 'rxjs/operators';\r\n\r\nexport const GET_COUNTRY_DETAIL = gql`\r\n query GetCountryDetail($id: ID!) {\r\n country(id: $id) {\r\n ...Country\r\n }\r\n }\r\n ${COUNTRY_FRAGMENT}\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-country-detail',\r\n templateUrl: './country-detail.component.html',\r\n styleUrls: ['./country-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class CountryDetailComponent\r\n extends TypedBaseDetailComponent<typeof GetCountryDetailDocument, 'country'>\r\n implements OnInit, OnDestroy\r\n{\r\n customFields = this.getCustomFieldConfig('Region');\r\n detailForm = this.formBuilder.group({\r\n code: ['', Validators.required],\r\n name: ['', Validators.required],\r\n enabled: [true],\r\n customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),\r\n });\r\n readonly updatePermission = [Permission.UpdateSettings, Permission.UpdateCountry];\r\n\r\n constructor(\r\n private changeDetector: ChangeDetectorRef,\r\n protected dataService: DataService,\r\n private formBuilder: FormBuilder,\r\n private notificationService: NotificationService,\r\n ) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n this.init();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy();\r\n }\r\n\r\n create() {\r\n if (!this.detailForm.dirty) {\r\n return;\r\n }\r\n\r\n const formValue = this.detailForm.value;\r\n const input = createUpdatedTranslatable({\r\n translatable: {\r\n id: '',\r\n createdAt: '',\r\n updatedAt: '',\r\n code: '',\r\n name: '',\r\n enabled: false,\r\n translations: [],\r\n } as CountryFragment,\r\n updatedFields: formValue,\r\n languageCode: this.languageCode,\r\n customFieldConfig: this.customFields,\r\n defaultTranslation: {\r\n name: formValue.name ?? '',\r\n languageCode: this.languageCode,\r\n },\r\n });\r\n this.dataService.settings.createCountry(input).subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-create-success'), {\r\n entity: 'Country',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n this.router.navigate(['../', data.createCountry.id], { relativeTo: this.route });\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-create-error'), {\r\n entity: 'Country',\r\n });\r\n },\r\n );\r\n }\r\n\r\n save() {\r\n combineLatest(this.entity$, this.languageCode$)\r\n .pipe(\r\n take(1),\r\n mergeMap(([country, languageCode]) => {\r\n const formValue = this.detailForm.value;\r\n const input: UpdateCountryInput = createUpdatedTranslatable({\r\n translatable: country,\r\n updatedFields: formValue,\r\n customFieldConfig: this.customFields,\r\n languageCode,\r\n defaultTranslation: {\r\n name: formValue.name ?? '',\r\n languageCode,\r\n },\r\n });\r\n return this.dataService.settings.updateCountry(input);\r\n }),\r\n )\r\n .subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-update-success'), {\r\n entity: 'Country',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-update-error'), {\r\n entity: 'Country',\r\n });\r\n },\r\n );\r\n }\r\n\r\n protected setFormValues(country: CountryFragment, languageCode: LanguageCode): void {\r\n const currentTranslation = findTranslation(country, languageCode);\r\n\r\n this.detailForm.patchValue({\r\n code: country.code,\r\n name: currentTranslation ? currentTranslation.name : '',\r\n enabled: country.enabled,\r\n });\r\n\r\n if (this.customFields.length) {\r\n this.setCustomFieldFormValues(\r\n this.customFields,\r\n this.detailForm.get(['customFields']),\r\n country,\r\n currentTranslation,\r\n );\r\n }\r\n }\r\n}\r\n","import { createBulkDeleteAction, GetCountryListQuery, ItemOf, Permission } from '@vendure/admin-ui/core';\r\nimport { map } from 'rxjs/operators';\r\n\r\nexport const deleteCountriesBulkAction = createBulkDeleteAction<ItemOf<GetCountryListQuery, 'countries'>>({\r\n location: 'country-list',\r\n requiresPermission: userPermissions =>\r\n userPermissions.includes(Permission.DeleteSettings) ||\r\n userPermissions.includes(Permission.DeleteCountry),\r\n getItemName: item => item.name,\r\n bulkDelete: (dataService, ids) =>\r\n dataService.settings.deleteCountries(ids).pipe(map(res => res.deleteCountries)),\r\n});\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left>\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></vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"country-list\"></vdr-action-bar-items>\r\n <a\r\n class=\"btn btn-primary\"\r\n *vdrIfPermissions=\"['CreateSettings', 'CreateCountry']\"\r\n [routerLink]=\"['./', 'create']\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'settings.create-new-country' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n<vdr-data-table-2\r\n class=\"mt-2\"\r\n id=\"country-list\"\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n [filters]=\"filters\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n>\r\n <vdr-bulk-action-menu\r\n locationId=\"country-list\"\r\n [hostComponent]=\"this\"\r\n [selectionManager]=\"selectionManager\"\r\n />\r\n <vdr-dt2-search\r\n [searchTermControl]=\"searchTermControl\"\r\n [searchTermPlaceholder]=\"'catalog.filter-by-name' | translate\"\r\n />\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\r\n <ng-template let-country=\"item\">\r\n {{ country.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.created-at' | translate\" id=\"created-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('createdAt')\"\r\n >\r\n <ng-template let-country=\"item\">\r\n {{ country.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.updated-at' | translate\" id=\"updated-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('updatedAt')\"\r\n >\r\n <ng-template let-country=\"item\">\r\n {{ country.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.name' | translate\" id=\"name\" [optional]=\"false\" [sort]=\"sorts.get('name')\">\r\n <ng-template let-country=\"item\">\r\n <a class=\"button-ghost\" [routerLink]=\"['./', country.id]\"\r\n ><span>{{ country.name }}</span>\r\n <clr-icon shape=\"arrow right\"></clr-icon>\r\n </a>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.code' | translate\" id=\"code\" [sort]=\"sorts.get('code')\">\r\n <ng-template let-country=\"item\">\r\n {{ country.code }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.enabled' | translate\" id=\"enabled\">\r\n <ng-template let-country=\"item\">\r\n <vdr-chip *ngIf=\"country.enabled\" colorType=\"success\">{{\r\n 'common.enabled' | translate\r\n }}</vdr-chip>\r\n <vdr-chip *ngIf=\"!country.enabled\" colorType=\"warning\">{{\r\n 'common.disabled' | translate\r\n }}</vdr-chip>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-custom-field-column\r\n *ngFor=\"let customField of customFields\"\r\n [customField]=\"customField\"\r\n [sorts]=\"sorts\"\r\n />\r\n</vdr-data-table-2>\r\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport { GetCountryListDocument, TypedBaseListComponent } from '@vendure/admin-ui/core';\r\nimport { gql } from 'apollo-angular';\r\n\r\nexport const GET_COUNTRY_LIST = gql`\r\n query GetCountryList($options: CountryListOptions) {\r\n countries(options: $options) {\r\n items {\r\n ...CountryListItem\r\n }\r\n totalItems\r\n }\r\n }\r\n fragment CountryListItem on Country {\r\n id\r\n createdAt\r\n updatedAt\r\n code\r\n name\r\n type\r\n enabled\r\n }\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-country-list',\r\n templateUrl: './country-list.component.html',\r\n styleUrls: ['./country-list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class CountryListComponent extends TypedBaseListComponent<typeof GetCountryListDocument, 'countries'> {\r\n readonly customFields = this.getCustomFieldConfig('Region');\r\n readonly filters = this.createFilterCollection()\r\n .addIdFilter()\r\n .addDateFilters()\r\n .addFilter({\r\n name: 'name',\r\n type: { kind: 'text' },\r\n label: _('common.name'),\r\n filterField: 'name',\r\n })\r\n .addFilter({\r\n name: 'code',\r\n type: { kind: 'text' },\r\n label: _('common.code'),\r\n filterField: 'code',\r\n })\r\n .addFilter({\r\n name: 'enabled',\r\n type: { kind: 'boolean' },\r\n label: _('common.enabled'),\r\n filterField: 'enabled',\r\n })\r\n .addCustomFieldFilters(this.customFields)\r\n .connectToRoute(this.route);\r\n\r\n readonly sorts = this.createSortCollection()\r\n .defaultSort('name', 'ASC')\r\n .addSort({ name: 'createdAt' })\r\n .addSort({ name: 'updatedAt' })\r\n .addSort({ name: 'name' })\r\n .addSort({ name: 'code' })\r\n .addCustomFieldSorts(this.customFields)\r\n .connectToRoute(this.route);\r\n\r\n constructor() {\r\n super();\r\n super.configure({\r\n document: GetCountryListDocument,\r\n getItems: data => data.countries,\r\n setVariables: (skip, take) => ({\r\n options: {\r\n skip,\r\n take,\r\n filter: {\r\n name: {\r\n contains: this.searchTermControl.value,\r\n },\r\n ...this.filters.createFilterInput(),\r\n },\r\n sort: this.sorts.createSortInput(),\r\n },\r\n }),\r\n refreshListOnChanges: [this.filters.valueChanges, this.sorts.valueChanges],\r\n });\r\n }\r\n}\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"global-settings-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n *vdrIfPermissions=\"updatePermission\"\r\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n\r\n<form class=\"form\" [formGroup]=\"detailForm\">\r\n <vdr-page-block>\r\n <vdr-card>\r\n <div class=\"form-grid\">\r\n <vdr-form-field\r\n [label]=\"'common.available-languages' | translate\"\r\n for=\"availableLanguages\"\r\n [tooltip]=\"'settings.global-available-languages-tooltip' | translate\"\r\n >\r\n <vdr-language-code-selector\r\n formControlName=\"availableLanguages\"\r\n [languageCodes]=\"languageCodes\"\r\n ></vdr-language-code-selector>\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'settings.global-out-of-stock-threshold' | translate\"\r\n for=\"outOfStockThreshold\"\r\n [tooltip]=\"'settings.global-out-of-stock-threshold-tooltip' | translate\"\r\n >\r\n <input\r\n id=\"outOfStockThreshold\"\r\n type=\"number\"\r\n formControlName=\"outOfStockThreshold\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'settings.track-inventory-default' | translate\"\r\n for=\"enabled\"\r\n [tooltip]=\"'catalog.track-inventory-tooltip' | translate\"\r\n >\r\n <clr-toggle-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n clrToggle\r\n name=\"enabled\"\r\n formControlName=\"trackInventory\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </clr-toggle-wrapper>\r\n </vdr-form-field>\r\n </div>\r\n </vdr-card>\r\n <vdr-card\r\n formGroupName=\"customFields\"\r\n *ngIf=\"customFields.length\"\r\n [title]=\"'common.custom-fields' | translate\"\r\n >\r\n <vdr-tabbed-custom-fields\r\n entityName=\"GlobalSettings\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </vdr-card>\r\n\r\n <vdr-custom-detail-component-host\r\n locationId=\"global-settings-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n </vdr-page-block>\r\n</form>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { FormBuilder, Validators } from '@angular/forms';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n DataService,\r\n getCustomFieldsDefaults,\r\n GetGlobalSettingsDetailDocument,\r\n GlobalSettings,\r\n LanguageCode,\r\n NotificationService,\r\n Permission,\r\n TypedBaseDetailComponent,\r\n} from '@vendure/admin-ui/core';\r\nimport { gql } from 'apollo-angular';\r\nimport { switchMap, tap, withLatestFrom } from 'rxjs/operators';\r\n\r\nexport const GET_GLOBAL_SETTINGS_DETAIL = gql`\r\n query GetGlobalSettingsDetail {\r\n globalSettings {\r\n ...GlobalSettingsDetail\r\n }\r\n }\r\n fragment GlobalSettingsDetail on GlobalSettings {\r\n id\r\n createdAt\r\n updatedAt\r\n availableLanguages\r\n trackInventory\r\n outOfStockThreshold\r\n }\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-global-settings',\r\n templateUrl: './global-settings.component.html',\r\n styleUrls: ['./global-settings.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class GlobalSettingsComponent\r\n extends TypedBaseDetailComponent<typeof GetGlobalSettingsDetailDocument, 'globalSettings'>\r\n implements OnInit, OnDestroy\r\n{\r\n customFields = this.getCustomFieldConfig('GlobalSettings');\r\n detailForm = this.formBuilder.group({\r\n availableLanguages: [[] as LanguageCode[]],\r\n trackInventory: false,\r\n outOfStockThreshold: [0, Validators.required],\r\n customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),\r\n });\r\n languageCodes = Object.values(LanguageCode);\r\n readonly updatePermission = [Permission.UpdateSettings, Permission.UpdateGlobalSettings];\r\n\r\n constructor(\r\n private changeDetector: ChangeDetectorRef,\r\n protected dataService: DataService,\r\n private formBuilder: FormBuilder,\r\n private notificationService: NotificationService,\r\n ) {\r\n super();\r\n }\r\n\r\n ngOnInit(): void {\r\n this.init();\r\n this.dataService.client.userStatus().single$.subscribe(({ userStatus }) => {\r\n if (!userStatus.permissions.includes(Permission.UpdateSettings)) {\r\n const languagesSelect = this.detailForm.get('availableLanguages');\r\n if (languagesSelect) {\r\n languagesSelect.disable();\r\n }\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroy();\r\n }\r\n\r\n save() {\r\n if (!this.detailForm.dirty) {\r\n return;\r\n }\r\n\r\n this.dataService.settings\r\n .updateGlobalSettings(this.detailForm.value)\r\n .pipe(\r\n tap(({ updateGlobalSettings }) => {\r\n switch (updateGlobalSettings.__typename) {\r\n case 'GlobalSettings':\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n this.notificationService.success(_('common.notify-update-success'), {\r\n entity: 'Settings',\r\n });\r\n break;\r\n case 'ChannelDefaultLanguageError':\r\n this.notificationService.error(updateGlobalSettings.message);\r\n }\r\n }),\r\n switchMap(() => this.serverConfigService.refreshGlobalSettings()),\r\n withLatestFrom(this.dataService.client.uiState().single$),\r\n )\r\n .subscribe(([{ globalSettings }, { uiState }]) => {\r\n const availableLangs = globalSettings.availableLanguages;\r\n if (availableLangs.length && !availableLangs.includes(uiState.contentLanguage)) {\r\n this.dataService.client.setContentLanguage(availableLangs[0]).subscribe();\r\n }\r\n });\r\n }\r\n\r\n protected setFormValues(entity: GlobalSettings, languageCode: LanguageCode): void {\r\n this.detailForm.patchValue({\r\n availableLanguages: entity.availableLanguages,\r\n trackInventory: entity.trackInventory,\r\n outOfStockThreshold: entity.outOfStockThreshold,\r\n });\r\n if (this.customFields.length) {\r\n this.setCustomFieldFormValues(this.customFields, this.detailForm.get('customFields'), entity);\r\n }\r\n }\r\n}\r\n","<vdr-page-block\r\n ><vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-language-selector\r\n [disabled]=\"isNew$ | async\"\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"languageCode$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"payment-method-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"isNew$ | async; else updateButton\"\r\n [disabled]=\"detailForm.pristine || detailForm.invalid || !selectedHandler\"\r\n (click)=\"create()\"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n *vdrIfPermissions=\"updatePermission\"\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n [disabled]=\"detailForm.pristine || detailForm.invalid || !selectedHandler\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </ng-template>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n\r\n<form class=\"form\" [formGroup]=\"detailForm\">\r\n <vdr-page-detail-layout>\r\n <vdr-page-detail-sidebar>\r\n <vdr-card>\r\n <vdr-form-field [label]=\"'common.enabled' | translate\" for=\"description\">\r\n <clr-toggle-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n clrToggle\r\n id=\"enabled\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n formControlName=\"enabled\"\r\n />\r\n </clr-toggle-wrapper>\r\n </vdr-form-field>\r\n </vdr-card>\r\n <vdr-card *ngIf=\"entity$ | async as entity\">\r\n <vdr-page-entity-info [entity]=\"entity\" />\r\n </vdr-card>\r\n </vdr-page-detail-sidebar>\r\n <vdr-page-block>\r\n <vdr-card>\r\n <div class=\"form-grid\">\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input\r\n id=\"name\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n (input)=\"updateCode(entity?.code, $event.target.value)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'common.code' | translate\"\r\n for=\"code\"\r\n [readOnlyToggle]=\"updatePermission | hasPermission\"\r\n >\r\n <input\r\n id=\"code\"\r\n type=\"text\"\r\n formControlName=\"code\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-rich-text-editor\r\n class=\"form-grid-span\"\r\n formControlName=\"description\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n [label]=\"'common.description' | translate\"\r\n ></vdr-rich-text-editor>\r\n </div>\r\n </vdr-card>\r\n\r\n <vdr-card\r\n formGroupName=\"customFields\"\r\n *ngIf=\"customFields.length\"\r\n [title]=\"'common.custom-fields' | translate\"\r\n >\r\n <vdr-tabbed-custom-fields\r\n entityName=\"PaymentMethod\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n ></vdr-tabbed-custom-fields>\r\n </vdr-card>\r\n\r\n <vdr-custom-detail-component-host\r\n locationId=\"payment-method-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n\r\n <vdr-card [title]=\"'settings.payment-eligibility-checker' | translate\">\r\n <vdr-configurable-input\r\n *ngIf=\"selectedChecker && selectedCheckerDefinition\"\r\n [operation]=\"selectedChecker\"\r\n [operationDefinition]=\"selectedCheckerDefinition\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n (remove)=\"removeChecker()\"\r\n formControlName=\"checker\"\r\n ></vdr-configurable-input>\r\n <div *ngIf=\"!selectedChecker || !selectedCheckerDefinition\">\r\n <vdr-dropdown>\r\n <button class=\"btn btn-outline\" vdrDropdownTrigger>\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'common.select' | translate }}\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-left\">\r\n <button\r\n *ngFor=\"let checker of checkers\"\r\n type=\"button\"\r\n vdrDropdownItem\r\n (click)=\"selectChecker(checker)\"\r\n >\r\n {{ checker.description }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </vdr-card>\r\n <vdr-card [title]=\"'settings.payment-handler' | translate\">\r\n <vdr-configurable-input\r\n *ngIf=\"selectedHandler && selectedHandlerDefinition\"\r\n [operation]=\"selectedHandler\"\r\n [operationDefinition]=\"selectedHandlerDefinition\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n (remove)=\"removeHandler()\"\r\n formControlName=\"handler\"\r\n ></vdr-configurable-input>\r\n <div *ngIf=\"!selectedHandler || !selectedHandlerDefinition\">\r\n <vdr-dropdown>\r\n <button class=\"btn btn-outline\" vdrDropdownTrigger>\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'common.select' | translate }}\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-left\">\r\n <button\r\n *ngFor=\"let handler of handlers\"\r\n type=\"button\"\r\n vdrDropdownItem\r\n (click)=\"selectHandler(handler)\"\r\n >\r\n {{ handler.description }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </vdr-card>\r\n </vdr-page-block>\r\n </vdr-page-detail-layout>\r\n</form>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { FormBuilder, UntypedFormGroup, Validators } from '@angular/forms';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n configurableDefinitionToInstance,\n ConfigurableOperation,\n ConfigurableOperationDefinition,\n CreatePaymentMethodInput,\n createUpdatedTranslatable,\n DataService,\n findTranslation,\n getConfigArgValue,\n getCustomFieldsDefaults,\n GetPaymentMethodDetailDocument,\n GetPaymentMethodDetailQuery,\n LanguageCode,\n NotificationService,\n PAYMENT_METHOD_FRAGMENT,\n PaymentMethodFragment,\n Permission,\n toConfigurableOperationInput,\n TypedBaseDetailComponent,\n UpdatePaymentMethodInput,\n} from '@vendure/admin-ui/core';\nimport { normalizeString } from '@vendure/common/lib/normalize-string';\nimport { gql } from 'apollo-angular';\nimport { combineLatest } from 'rxjs';\nimport { mergeMap, take } from 'rxjs/operators';\n\nexport const GET_PAYMENT_METHOD_DETAIL = gql`\n query GetPaymentMethodDetail($id: ID!) {\n paymentMethod(id: $id) {\n ...PaymentMethod\n }\n }\n ${PAYMENT_METHOD_FRAGMENT}\n`;\n\n@Component({\n selector: 'vdr-payment-method-detail',\n templateUrl: './payment-method-detail.component.html',\n styleUrls: ['./payment-method-detail.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PaymentMethodDetailComponent\n extends TypedBaseDetailComponent<typeof GetPaymentMethodDetailDocument, 'paymentMethod'>\n implements OnInit, OnDestroy\n{\n customFields = this.getCustomFieldConfig('PaymentMethod');\n detailForm = this.formBuilder.group({\n code: ['', Validators.required],\n name: ['', Validators.required],\n description: '',\n enabled: [true, Validators.required],\n checker: {} as NonNullable<GetPaymentMethodDetailQuery['paymentMethod']>['checker'],\n handler: {} as NonNullable<GetPaymentMethodDetailQuery['paymentMethod']>['handler'],\n customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),\n });\n checkers: ConfigurableOperationDefinition[] = [];\n handlers: ConfigurableOperationDefinition[] = [];\n selectedChecker?: ConfigurableOperation | null;\n selectedCheckerDefinition?: ConfigurableOperationDefinition;\n selectedHandler?: ConfigurableOperation | null;\n selectedHandlerDefinition?: ConfigurableOperationDefinition;\n readonly updatePermission = [Permission.UpdateSettings, Permission.UpdatePaymentMethod];\n\n constructor(\n private changeDetector: ChangeDetectorRef,\n protected dataService: DataService,\n private formBuilder: FormBuilder,\n private notificationService: NotificationService,\n ) {\n super();\n }\n\n ngOnInit() {\n this.init();\n this.dataService.settings.getPaymentMethodOperations().single$.subscribe(data => {\n this.checkers = data.paymentMethodEligibilityCheckers;\n this.handlers = data.paymentMethodHandlers;\n this.changeDetector.markForCheck();\n this.selectedCheckerDefinition = data.paymentMethodEligibilityCheckers.find(\n c => c.code === this.entity?.checker?.code,\n );\n this.selectedHandlerDefinition = data.paymentMethodHandlers.find(\n c => c.code === this.entity?.handler?.code,\n );\n });\n }\n\n ngOnDestroy(): void {\n this.destroy();\n }\n\n updateCode(currentCode: string | undefined, nameValue: string) {\n if (!currentCode) {\n const codeControl = this.detailForm.get('code');\n if (codeControl && codeControl.pristine) {\n codeControl.setValue(normalizeString(nameValue, '-'));\n }\n }\n }\n\n selectChecker(checker: ConfigurableOperationDefinition) {\n this.selectedCheckerDefinition = checker;\n this.selectedChecker = configurableDefinitionToInstance(checker);\n const formControl = this.detailForm.get('checker');\n if (formControl) {\n formControl.clearValidators();\n formControl.updateValueAndValidity({ onlySelf: true });\n formControl.patchValue(this.selectedChecker);\n }\n this.detailForm.markAsDirty();\n }\n\n selectHandler(handler: ConfigurableOperationDefinition) {\n this.selectedHandlerDefinition = handler;\n this.selectedHandler = configurableDefinitionToInstance(handler);\n const formControl = this.detailForm.get('handler');\n if (formControl) {\n formControl.clearValidators();\n formControl.updateValueAndValidity({ onlySelf: true });\n formControl.patchValue(this.selectedHandler);\n }\n this.detailForm.markAsDirty();\n }\n\n removeChecker() {\n this.selectedChecker = null;\n this.detailForm.markAsDirty();\n }\n\n removeHandler() {\n this.selectedHandler = null;\n this.detailForm.markAsDirty();\n }\n\n create() {\n const selectedChecker = this.selectedChecker;\n const selectedHandler = this.selectedHandler;\n if (!selectedHandler) {\n return;\n }\n const input = this.getUpdatedPaymentMethod(\n {\n id: '',\n createdAt: '',\n updatedAt: '',\n name: '',\n code: '',\n description: '',\n enabled: true,\n checker: undefined as any,\n handler: undefined as any,\n translations: [],\n },\n this.detailForm,\n this.languageCode,\n selectedHandler,\n selectedChecker,\n ) as CreatePaymentMethodInput;\n this.dataService.settings.createPaymentMethod(input).subscribe(\n data => {\n this.notificationService.success(_('common.notify-create-success'), {\n entity: 'PaymentMethod',\n });\n this.detailForm.markAsPristine();\n this.changeDetector.markForCheck();\n this.router.navigate(['../', data.createPaymentMethod.id], { relativeTo: this.route });\n },\n err => {\n this.notificationService.error(_('common.notify-create-error'), {\n entity: 'PaymentMethod',\n });\n },\n );\n }\n\n save() {\n const selectedChecker = this.selectedChecker;\n const selectedHandler = this.selectedHandler;\n if (!selectedHandler) {\n return;\n }\n combineLatest(this.entity$, this.languageCode$)\n .pipe(\n take(1),\n mergeMap(([paymentMethod, languageCode]) => {\n const input = this.getUpdatedPaymentMethod(\n paymentMethod,\n this.detailForm,\n languageCode,\n selectedHandler,\n selectedChecker,\n ) as UpdatePaymentMethodInput;\n return this.dataService.settings.updatePaymentMethod(input);\n }),\n )\n .subscribe(\n data => {\n this.notificationService.success(_('common.notify-update-success'), {\n entity: 'PaymentMethod',\n });\n this.detailForm.markAsPristine();\n this.changeDetector.markForCheck();\n },\n err => {\n this.notificationService.error(_('common.notify-update-error'), {\n entity: 'PaymentMethod',\n });\n },\n );\n }\n\n /**\n * Given a PaymentMethod and the value of the detailForm, this method creates an updated copy of it which\n * can then be persisted to the API.\n */\n private getUpdatedPaymentMethod(\n paymentMethod: PaymentMethodFragment,\n formGroup: UntypedFormGroup,\n languageCode: LanguageCode,\n selectedHandler: ConfigurableOperation,\n selectedChecker?: ConfigurableOperation | null,\n ): UpdatePaymentMethodInput | CreatePaymentMethodInput {\n const input = createUpdatedTranslatable({\n translatable: paymentMethod,\n updatedFields: formGroup.value,\n customFieldConfig: this.customFields,\n languageCode,\n defaultTranslation: {\n languageCode,\n name: paymentMethod.name || '',\n description: paymentMethod.description || '',\n },\n });\n return {\n ...input,\n checker: selectedChecker\n ? toConfigurableOperationInput(selectedChecker, formGroup.value.checker)\n : null,\n handler: toConfigurableOperationInput(selectedHandler, formGroup.value.handler),\n };\n }\n\n protected setFormValues(\n paymentMethod: NonNullable<GetPaymentMethodDetailQuery['paymentMethod']>,\n languageCode: LanguageCode,\n ): void {\n const currentTranslation = findTranslation(paymentMethod, languageCode);\n this.detailForm.patchValue({\n name: currentTranslation?.name,\n code: paymentMethod.code,\n description: currentTranslation?.description,\n enabled: paymentMethod.enabled,\n checker: paymentMethod.checker || ({} as any),\n handler: paymentMethod.handler || ({} as any),\n });\n if (!this.selectedChecker) {\n this.selectedChecker = paymentMethod.checker && {\n code: paymentMethod.checker.code,\n args: paymentMethod.checker.args.map(a => ({ ...a, value: getConfigArgValue(a.value) })),\n };\n }\n if (!this.selectedHandler) {\n this.selectedHandler = paymentMethod.handler && {\n code: paymentMethod.handler.code,\n args: paymentMethod.handler.args.map(a => ({ ...a, value: getConfigArgValue(a.value) })),\n };\n }\n if (this.customFields.length) {\n this.setCustomFieldFormValues(\n this.customFields,\n this.detailForm.get('customFields'),\n paymentMethod,\n currentTranslation,\n );\n }\n }\n}\n","import {\r\n createBulkAssignToChannelAction,\r\n AssignPaymentMethodsToChannelDocument,\r\n RemovePaymentMethodsFromChannelDocument,\r\n createBulkDeleteAction,\r\n createBulkRemoveFromChannelAction,\r\n GetPaymentMethodListQuery,\r\n ItemOf,\r\n Permission,\r\n} from '@vendure/admin-ui/core';\r\nimport { gql } from 'apollo-angular';\r\nimport { map } from 'rxjs/operators';\r\n\r\nexport const deletePaymentMethodsBulkAction = createBulkDeleteAction<\r\n ItemOf<GetPaymentMethodListQuery, 'paymentMethods'>\r\n>({\r\n location: 'payment-method-list',\r\n requiresPermission: userPermissions =>\r\n userPermissions.includes(Permission.DeletePaymentMethod) ||\r\n userPermissions.includes(Permission.DeleteSettings),\r\n getItemName: item => item.name,\r\n shouldRetryItem: (response, item) => !!response.message,\r\n bulkDelete: (dataService, ids, retrying) =>\r\n dataService.settings.deletePaymentMethods(ids, retrying).pipe(map(res => res.deletePaymentMethods)),\r\n});\r\n\r\nconst ASSIGN_PAYMENT_METHODS_TO_CHANNEL = gql`\r\n mutation AssignPaymentMethodsToChannel($input: AssignPaymentMethodsToChannelInput!) {\r\n assignPaymentMethodsToChannel(input: $input) {\r\n id\r\n name\r\n }\r\n }\r\n`;\r\n\r\nconst REMOVE_PAYMENT_METHODS_FROM_CHANNEL = gql`\r\n mutation RemovePaymentMethodsFromChannel($input: RemovePaymentMethodsFromChannelInput!) {\r\n removePaymentMethodsFromChannel(input: $input) {\r\n id\r\n name\r\n }\r\n }\r\n`;\r\nexport const assignPaymentMethodsToChannelBulkAction = createBulkAssignToChannelAction<\r\n ItemOf<GetPaymentMethodListQuery, 'paymentMethods'>\r\n>({\r\n location: 'payment-method-list',\r\n requiresPermission: userPermissions =>\r\n userPermissions.includes(Permission.UpdatePaymentMethod) ||\r\n userPermissions.includes(Permission.UpdateSettings),\r\n getItemName: item => item.name,\r\n bulkAssignToChannel: (dataService, paymentMethodIds, channelId) =>\r\n dataService\r\n .mutate(AssignPaymentMethodsToChannelDocument, {\r\n input: {\r\n channelId,\r\n paymentMethodIds,\r\n },\r\n })\r\n .pipe(map(res => res.assignPaymentMethodsToChannel)),\r\n});\r\n\r\nexport const removePaymentMethodsFromChannelBulkAction = createBulkRemoveFromChannelAction<\r\n ItemOf<GetPaymentMethodListQuery, 'paymentMethods'>\r\n>({\r\n location: 'payment-method-list',\r\n requiresPermission: userPermissions =>\r\n userPermissions.includes(Permission.DeletePaymentMethod) ||\r\n userPermissions.includes(Permission.DeleteSettings),\r\n getItemName: item => item.name,\r\n bulkRemoveFromChannel: (dataService, paymentMethodIds, channelId) =>\r\n dataService\r\n .mutate(RemovePaymentMethodsFromChannelDocument, {\r\n input: {\r\n channelId,\r\n paymentMethodIds,\r\n },\r\n })\r\n .pipe(map(res => res.removePaymentMethodsFromChannel)),\r\n});\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-language-selector\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"contentLanguage$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n /></vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"payment-method-list\"></vdr-action-bar-items>\r\n <a\r\n class=\"btn btn-primary\"\r\n *vdrIfPermissions=\"['CreateSettings', 'CreatePaymentMethod']\"\r\n [routerLink]=\"['./', 'create']\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'settings.create-new-payment-method' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n<vdr-data-table-2\r\n id=\"payment-method-list\"\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n [filters]=\"filters\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n>\r\n <vdr-bulk-action-menu\r\n locationId=\"payment-method-list\"\r\n [hostComponent]=\"this\"\r\n [selectionManager]=\"selectionManager\"\r\n ></vdr-bulk-action-menu>\r\n <vdr-dt2-search\r\n [searchTermControl]=\"searchTermControl\"\r\n [searchTermPlaceholder]=\"'catalog.filter-by-name' | translate\"\r\n ></vdr-dt2-search>\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\" [sort]=\"sorts.get('id')\">\r\n <ng-template let-paymentMethod=\"item\">\r\n {{ paymentMethod.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.created-at' | translate\" id=\"created-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('createdAt')\"\r\n >\r\n <ng-template let-paymentMethod=\"item\">\r\n {{ paymentMethod.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.updated-at' | translate\" id=\"updated-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('updatedAt')\"\r\n >\r\n <ng-template let-paymentMethod=\"item\">\r\n {{ paymentMethod.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.name' | translate\" id=\"name\" [optional]=\"false\" [sort]=\"sorts.get('name')\">\r\n <ng-template let-paymentMethod=\"item\">\r\n <a class=\"button-ghost\" [routerLink]=\"['./', paymentMethod.id]\"\r\n ><span>{{ paymentMethod.name }}</span>\r\n <clr-icon shape=\"arrow right\"></clr-icon>\r\n </a>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.code' | translate\" id=\"code\" [sort]=\"sorts.get('code')\">\r\n <ng-template let-paymentMethod=\"item\">\r\n {{ paymentMethod.code }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.enabled' | translate\" id=\"enabled\">\r\n <ng-template let-paymentMethod=\"item\">\r\n <vdr-chip *ngIf=\"paymentMethod.enabled\" colorType=\"success\">{{\r\n 'common.enabled' | translate\r\n }}</vdr-chip>\r\n <vdr-chip *ngIf=\"!paymentMethod.enabled\" colorType=\"warning\">{{\r\n 'common.disabled' | translate\r\n }}</vdr-chip>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-custom-field-column\r\n *ngFor=\"let customField of customFields\"\r\n [customField]=\"customField\"\r\n [sorts]=\"sorts\"\r\n />\r\n</vdr-data-table-2>\r\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport { GetPaymentMethodListDocument, TypedBaseListComponent } from '@vendure/admin-ui/core';\r\nimport { gql } from 'apollo-angular';\r\n\r\nexport const GET_PAYMENT_METHOD_LIST = gql`\r\n query GetPaymentMethodList($options: PaymentMethodListOptions!) {\r\n paymentMethods(options: $options) {\r\n items {\r\n ...PaymentMethodListItem\r\n }\r\n totalItems\r\n }\r\n }\r\n fragment PaymentMethodListItem on PaymentMethod {\r\n id\r\n createdAt\r\n updatedAt\r\n name\r\n description\r\n code\r\n enabled\r\n }\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-payment-method-list',\r\n templateUrl: './payment-method-list.component.html',\r\n styleUrls: ['./payment-method-list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PaymentMethodListComponent extends TypedBaseListComponent<\r\n typeof GetPaymentMethodListDocument,\r\n 'paymentMethods'\r\n> {\r\n readonly customFields = this.getCustomFieldConfig('PaymentMethod');\r\n readonly filters = this.createFilterCollection()\r\n .addIdFilter()\r\n .addDateFilters()\r\n .addFilter({\r\n name: 'name',\r\n type: { kind: 'text' },\r\n label: _('common.name'),\r\n filterField: 'name',\r\n })\r\n .addFilter({\r\n name: 'code',\r\n type: { kind: 'text' },\r\n label: _('common.code'),\r\n filterField: 'code',\r\n })\r\n .addFilter({\r\n name: 'enabled',\r\n type: { kind: 'boolean' },\r\n label: _('common.enabled'),\r\n filterField: 'enabled',\r\n })\r\n .addFilter({\r\n name: 'description',\r\n type: { kind: 'text' },\r\n label: _('common.description'),\r\n filterField: 'description',\r\n })\r\n .addCustomFieldFilters(this.customFields)\r\n .connectToRoute(this.route);\r\n\r\n readonly sorts = this.createSortCollection()\r\n .defaultSort('createdAt', 'DESC')\r\n .addSort({ name: 'id' })\r\n .addSort({ name: 'createdAt' })\r\n .addSort({ name: 'updatedAt' })\r\n .addSort({ name: 'name' })\r\n .addSort({ name: 'code' })\r\n .addSort({ name: 'description' })\r\n .addCustomFieldSorts(this.customFields)\r\n .connectToRoute(this.route);\r\n\r\n constructor() {\r\n super();\r\n super.configure({\r\n document: GetPaymentMethodListDocument,\r\n getItems: data => data.paymentMethods,\r\n setVariables: (skip, take) => ({\r\n options: {\r\n skip,\r\n take,\r\n filter: {\r\n name: {\r\n contains: this.searchTermControl.value,\r\n },\r\n ...this.filters.createFilterInput(),\r\n },\r\n sort: this.sorts.createSortInput(),\r\n },\r\n }),\r\n refreshListOnChanges: [this.filters.valueChanges, this.sorts.valueChanges],\r\n });\r\n }\r\n}\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left></vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"profile\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n\r\n<form class=\"form\" [formGroup]=\"detailForm\">\r\n <vdr-page-detail-layout>\r\n <vdr-page-detail-sidebar>\r\n <vdr-card *ngIf=\"entity$ | async as entity\">\r\n <vdr-page-entity-info [entity]=\"entity\" />\r\n </vdr-card>\r\n </vdr-page-detail-sidebar>\r\n <vdr-page-block>\r\n <vdr-card>\r\n <div class=\"form-grid\">\r\n <vdr-form-field [label]=\"'settings.email-address' | translate\" for=\"emailAddress\">\r\n <input id=\"emailAddress\" type=\"text\" formControlName=\"emailAddress\" />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'settings.first-name' | translate\" for=\"firstName\">\r\n <input id=\"firstName\" type=\"text\" formControlName=\"firstName\" />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'settings.last-name' | translate\" for=\"lastName\">\r\n <input id=\"lastName\" type=\"text\" formControlName=\"lastName\" />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n *ngIf=\"isNew$ | async\"\r\n [label]=\"'settings.password' | translate\"\r\n for=\"password\"\r\n >\r\n <input id=\"password\" type=\"password\" formControlName=\"password\" />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'settings.password' | translate\"\r\n for=\"password\"\r\n [readOnlyToggle]=\"true\"\r\n >\r\n <input id=\"password\" type=\"password\" formControlName=\"password\" />\r\n </vdr-form-field>\r\n </div>\r\n </vdr-card>\r\n <vdr-card\r\n formGroupName=\"customFields\"\r\n *ngIf=\"customFields.length\"\r\n [title]=\"'common.custom-fields' | translate\"\r\n >\r\n <vdr-tabbed-custom-fields\r\n entityName=\"Administrator\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n ></vdr-tabbed-custom-fields>\r\n </vdr-card>\r\n <vdr-custom-detail-component-host\r\n locationId=\"administrator-profile\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n </vdr-page-block>\r\n </vdr-page-detail-layout>\r\n</form>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { FormBuilder, Validators } from '@angular/forms';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n Administrator,\r\n DataService,\r\n getCustomFieldsDefaults,\r\n GetProfileDetailDocument,\r\n LanguageCode,\r\n NotificationService,\r\n TypedBaseDetailComponent,\r\n UpdateActiveAdministratorInput,\r\n} from '@vendure/admin-ui/core';\r\nimport { gql } from 'apollo-angular';\r\nimport { mergeMap, take } from 'rxjs/operators';\r\n\r\nexport const GET_PROFILE_DETAIL = gql`\r\n query GetProfileDetail {\r\n activeAdministrator {\r\n ...ProfileDetail\r\n }\r\n }\r\n fragment ProfileDetail on Administrator {\r\n id\r\n createdAt\r\n updatedAt\r\n firstName\r\n lastName\r\n emailAddress\r\n user {\r\n id\r\n lastLogin\r\n verified\r\n }\r\n }\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-profile',\r\n templateUrl: './profile.component.html',\r\n styleUrls: ['./profile.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ProfileComponent\r\n extends TypedBaseDetailComponent<typeof GetProfileDetailDocument, 'activeAdministrator'>\r\n implements OnInit, OnDestroy\r\n{\r\n customFields = this.getCustomFieldConfig('Administrator');\r\n detailForm = this.formBuilder.group({\r\n emailAddress: ['', Validators.required],\r\n firstName: ['', Validators.required],\r\n lastName: ['', Validators.required],\r\n password: [''],\r\n customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),\r\n });\r\n\r\n constructor(\r\n private changeDetector: ChangeDetectorRef,\r\n protected dataService: DataService,\r\n private formBuilder: FormBuilder,\r\n private notificationService: NotificationService,\r\n ) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n this.init();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy();\r\n }\r\n\r\n save() {\r\n this.entity$\r\n .pipe(\r\n take(1),\r\n mergeMap(({ id }) => {\r\n const formValue = this.detailForm.value;\r\n const administrator: UpdateActiveAdministratorInput = {\r\n emailAddress: formValue.emailAddress,\r\n firstName: formValue.firstName,\r\n lastName: formValue.lastName,\r\n password: formValue.password,\r\n customFields: formValue.customFields,\r\n };\r\n return this.dataService.administrator.updateActiveAdministrator(administrator);\r\n }),\r\n )\r\n .subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-update-success'), {\r\n entity: 'Administrator',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-update-error'), {\r\n entity: 'Administrator',\r\n });\r\n },\r\n );\r\n }\r\n\r\n protected setFormValues(administrator: Administrator, languageCode: LanguageCode): void {\r\n this.detailForm.patchValue({\r\n emailAddress: administrator.emailAddress,\r\n firstName: administrator.firstName,\r\n lastName: administrator.lastName,\r\n });\r\n if (this.customFields.length) {\r\n this.setCustomFieldFormValues(\r\n this.customFields,\r\n this.detailForm.get('customFields'),\r\n administrator,\r\n );\r\n }\r\n }\r\n}\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left></vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"role-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"isNew$ | async; else updateButton\"\r\n (click)=\"create()\"\r\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n *vdrIfPermissions=\"'UpdateAdministrator'\"\r\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </ng-template>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n\r\n<form class=\"form\" [formGroup]=\"detailForm\">\r\n <vdr-page-detail-layout>\r\n <vdr-page-detail-sidebar>\r\n <vdr-card *ngIf=\"entity$ | async as entity\">\r\n <vdr-page-entity-info [entity]=\"entity\" />\r\n </vdr-card>\r\n </vdr-page-detail-sidebar>\r\n <vdr-page-block>\r\n <vdr-card>\r\n <div class=\"form-grid\">\r\n <vdr-form-field [label]=\"'common.description' | translate\" for=\"description\">\r\n <input\r\n id=\"description\"\r\n type=\"text\"\r\n formControlName=\"description\"\r\n [readonly]=\"!('UpdateAdministrator' | hasPermission)\"\r\n (input)=\"updateCode($event.target.value)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'common.code' | translate\"\r\n for=\"code\"\r\n [readOnlyToggle]=\"'UpdateAdministrator' | hasPermission\"\r\n >\r\n <input\r\n id=\"code\"\r\n type=\"text\"\r\n formControlName=\"code\"\r\n [readonly]=\"!('UpdateAdministrator' | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n </div>\r\n </vdr-card>\r\n </vdr-page-block>\r\n </vdr-page-detail-layout>\r\n <vdr-page-block class=\"mt-2\">\r\n <vdr-card [title]=\"'settings.permissions' | translate\">\r\n <vdr-form-field [label]=\"'settings.channel' | translate\">\r\n <vdr-channel-assignment-control\r\n formControlName=\"channelIds\"\r\n [vdrDisabled]=\"!('UpdateAdministrator' | hasPermission)\"\r\n ></vdr-channel-assignment-control>\r\n </vdr-form-field>\r\n <vdr-permission-grid\r\n class=\"mt-2\"\r\n [permissionDefinitions]=\"permissionDefinitions\"\r\n [activePermissions]=\"detailForm.get('permissions')?.value\"\r\n (permissionChange)=\"setPermission($event)\"\r\n [readonly]=\"!('UpdateAdministrator' | hasPermission)\"\r\n ></vdr-permission-grid>\r\n </vdr-card>\r\n </vdr-page-block>\r\n</form>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { FormBuilder, Validators } from '@angular/forms';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n CreateRoleInput,\r\n DataService,\r\n GetRoleDetailDocument,\r\n LanguageCode,\r\n NotificationService,\r\n Permission,\r\n Role,\r\n ROLE_FRAGMENT,\r\n TypedBaseDetailComponent,\r\n UpdateRoleInput,\r\n} from '@vendure/admin-ui/core';\r\nimport { normalizeString } from '@vendure/common/lib/normalize-string';\r\nimport { unique } from '@vendure/common/lib/unique';\r\nimport { gql } from 'apollo-angular';\r\nimport { mergeMap, take } from 'rxjs/operators';\r\n\r\nexport const GET_ROLE_DETAIL = gql`\r\n query GetRoleDetail($id: ID!) {\r\n role(id: $id) {\r\n ...Role\r\n }\r\n }\r\n ${ROLE_FRAGMENT}\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-role-detail',\r\n templateUrl: './role-detail.component.html',\r\n styleUrls: ['./role-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class RoleDetailComponent\r\n extends TypedBaseDetailComponent<typeof GetRoleDetailDocument, 'role'>\r\n implements OnInit, OnDestroy\r\n{\r\n detailForm = this.formBuilder.group({\r\n code: ['', Validators.required],\r\n description: ['', Validators.required],\r\n channelIds: [[] as string[]],\r\n permissions: [[] as Permission[]],\r\n });\r\n permissionDefinitions = this.serverConfigService.getPermissionDefinitions();\r\n constructor(\r\n private changeDetector: ChangeDetectorRef,\r\n protected dataService: DataService,\r\n private formBuilder: FormBuilder,\r\n private notificationService: NotificationService,\r\n ) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n this.init();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy();\r\n }\r\n\r\n updateCode(nameValue: string) {\r\n const codeControl = this.detailForm.get(['code']);\r\n if (codeControl && codeControl.pristine) {\r\n codeControl.setValue(normalizeString(nameValue, '-'));\r\n }\r\n }\r\n\r\n setPermission(change: { permission: string; value: boolean }) {\r\n const permissionsControl = this.detailForm.get('permissions');\r\n if (permissionsControl) {\r\n const currentPermissions = permissionsControl.value as string[];\r\n const newValue = (\r\n change.value === true\r\n ? unique([...currentPermissions, change.permission])\r\n : currentPermissions.filter(p => p !== change.permission)\r\n ) as Permission[];\r\n permissionsControl.setValue(newValue);\r\n permissionsControl.markAsDirty();\r\n }\r\n }\r\n\r\n create() {\r\n const { code, description, permissions, channelIds } = this.detailForm.value;\r\n if (!code || !description) {\r\n return;\r\n }\r\n const role: CreateRoleInput = {\r\n code,\r\n description,\r\n permissions: permissions ?? [],\r\n channelIds,\r\n };\r\n this.dataService.administrator.createRole(role).subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-create-success'), { entity: 'Role' });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n this.router.navigate(['../', data.createRole.id], { relativeTo: this.route });\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-create-error'), {\r\n entity: 'Role',\r\n });\r\n },\r\n );\r\n }\r\n\r\n save() {\r\n this.entity$\r\n .pipe(\r\n take(1),\r\n mergeMap(({ id }) => {\r\n const formValue = this.detailForm.value;\r\n const role: UpdateRoleInput = { id, ...formValue };\r\n return this.dataService.administrator.updateRole(role);\r\n }),\r\n )\r\n .subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-update-success'), { entity: 'Role' });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-update-error'), {\r\n entity: 'Role',\r\n });\r\n },\r\n );\r\n }\r\n\r\n protected setFormValues(role: Role, languageCode: LanguageCode): void {\r\n this.detailForm.patchValue({\r\n description: role.description,\r\n code: role.code,\r\n channelIds: role.channels.map(c => c.id),\r\n permissions: role.permissions,\r\n });\r\n // This was required to get the channel selector component to\r\n // correctly display its contents. A while spent debugging the root\r\n // cause did not yield a solution, therefore this next line.\r\n this.changeDetector.detectChanges();\r\n }\r\n}\r\n","import { createBulkDeleteAction, GetRolesQuery, ItemOf, Permission } from '@vendure/admin-ui/core';\r\nimport { map } from 'rxjs/operators';\r\n\r\nexport const deleteRolesBulkAction = createBulkDeleteAction<ItemOf<GetRolesQuery, 'roles'>>({\r\n location: 'role-list',\r\n requiresPermission: userPermissions => userPermissions.includes(Permission.DeleteAdministrator),\r\n getItemName: item => item.description,\r\n bulkDelete: (dataService, ids) =>\r\n dataService.administrator.deleteRoles(ids).pipe(map(res => res.deleteRoles)),\r\n});\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left> </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"role-list\"></vdr-action-bar-items>\r\n <a\r\n class=\"btn btn-primary\"\r\n *vdrIfPermissions=\"['CreateAdministrator']\"\r\n [routerLink]=\"['./', 'create']\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'settings.create-new-role' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n<vdr-data-table-2\r\n id=\"role-list\"\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n [filters]=\"filters\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n>\r\n <vdr-bulk-action-menu\r\n locationId=\"role-list\"\r\n [hostComponent]=\"this\"\r\n [selectionManager]=\"selectionManager\"\r\n />\r\n <vdr-dt2-search\r\n [searchTermControl]=\"searchTermControl\"\r\n [searchTermPlaceholder]=\"'catalog.filter-by-name' | translate\"\r\n />\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\r\n <ng-template let-role=\"item\">\r\n {{ role.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.created-at' | translate\" id=\"created-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('createdAt')\"\r\n >\r\n <ng-template let-role=\"item\">\r\n {{ role.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.updated-at' | translate\" id=\"updated-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('updatedAt')\"\r\n >\r\n <ng-template let-role=\"item\">\r\n {{ role.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.description' | translate\" id=\"description\"\r\n [optional]=\"false\"\r\n [sort]=\"sorts.get('description')\"\r\n >\r\n <ng-template let-role=\"item\">\r\n <a\r\n *ngIf=\"!isDefaultRole(role); else defaultRole\"\r\n class=\"button-ghost\"\r\n [routerLink]=\"['./', role.id]\"\r\n ><span>{{ role.description }}</span>\r\n <clr-icon shape=\"arrow right\"></clr-icon>\r\n </a>\r\n <ng-template #defaultRole>\r\n {{ role.description }}\r\n </ng-template>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.code' | translate\" id=\"code\" [sort]=\"sorts.get('code')\">\r\n <ng-template let-role=\"item\">\r\n <span *ngIf=\"!isDefaultRole(role)\">{{ role.code }}</span>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'settings.channel' | translate\" id=\"channel\">\r\n <ng-template let-role=\"item\">\r\n <ng-container *ngIf=\"!isDefaultRole(role)\">\r\n <vdr-chip *ngFor=\"let channel of role.channels\">\r\n <vdr-channel-badge [channelCode]=\"channel.code\"></vdr-channel-badge>\r\n <div class=\"ml-1\">{{ channel.code | channelCodeToLabel | translate }}</div>\r\n </vdr-chip>\r\n </ng-container>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'settings.permissions' | translate\" id=\"permissions\">\r\n <ng-template let-role=\"item\">\r\n <ng-container *ngIf=\"!isDefaultRole(role); else defaultRole\">\r\n <div class=\"permissions-list\">\r\n <vdr-chip\r\n *ngFor=\"let permission of role.permissions | slice : 0 : displayLimit[role.id] || 3\"\r\n >{{ permission }}</vdr-chip\r\n >\r\n <button\r\n class=\"button-small\"\r\n *ngIf=\"role.permissions.length > initialLimit\"\r\n (click)=\"toggleDisplayLimit(role)\"\r\n >\r\n <ng-container\r\n *ngIf=\"(displayLimit[role.id] || 0) < role.permissions.length; else collapse\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ role.permissions.length - initialLimit }}\r\n </ng-container>\r\n <ng-template #collapse>\r\n <clr-icon shape=\"minus\"></clr-icon>\r\n </ng-template>\r\n </button>\r\n </div>\r\n </ng-container>\r\n <ng-template #defaultRole>\r\n <span class=\"default-role-label\">{{ 'settings.default-role-label' | translate }}</span>\r\n </ng-template>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n</vdr-data-table-2>\r\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n GetRoleListDocument,\r\n GetRolesQuery,\r\n ItemOf,\r\n Role,\r\n ROLE_FRAGMENT,\r\n TypedBaseListComponent,\r\n} from '@vendure/admin-ui/core';\r\nimport { CUSTOMER_ROLE_CODE, SUPER_ADMIN_ROLE_CODE } from '@vendure/common/lib/shared-constants';\r\nimport { gql } from 'apollo-angular';\r\n\r\nexport const GET_ROLE_LIST = gql`\r\n query GetRoleList($options: RoleListOptions) {\r\n roles(options: $options) {\r\n items {\r\n ...Role\r\n }\r\n totalItems\r\n }\r\n }\r\n ${ROLE_FRAGMENT}\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-role-list',\r\n templateUrl: './role-list.component.html',\r\n styleUrls: ['./role-list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class RoleListComponent\r\n extends TypedBaseListComponent<typeof GetRoleListDocument, 'roles'>\r\n implements OnInit\r\n{\r\n readonly initialLimit = 3;\r\n displayLimit: { [id: string]: number } = {};\r\n readonly filters = this.createFilterCollection()\r\n .addIdFilter()\r\n .addDateFilters()\r\n .addFilter({\r\n name: 'code',\r\n type: { kind: 'text' },\r\n label: _('common.code'),\r\n filterField: 'code',\r\n })\r\n .connectToRoute(this.route);\r\n\r\n readonly sorts = this.createSortCollection()\r\n .defaultSort('createdAt', 'DESC')\r\n .addSort({ name: 'createdAt' })\r\n .addSort({ name: 'updatedAt' })\r\n .addSort({ name: 'code' })\r\n .addSort({ name: 'description' })\r\n .connectToRoute(this.route);\r\n\r\n constructor() {\r\n super();\r\n super.configure({\r\n document: GetRoleListDocument,\r\n getItems: data => data.roles,\r\n setVariables: (skip, take) => ({\r\n options: {\r\n skip,\r\n take,\r\n filter: {\r\n code: {\r\n contains: this.searchTermControl.value,\r\n },\r\n ...this.filters.createFilterInput(),\r\n },\r\n sort: this.sorts.createSortInput(),\r\n },\r\n }),\r\n refreshListOnChanges: [this.filters.valueChanges, this.sorts.valueChanges],\r\n });\r\n }\r\n\r\n toggleDisplayLimit(role: ItemOf<GetRolesQuery, 'roles'>) {\r\n if (this.displayLimit[role.id] === role.permissions.length) {\r\n this.displayLimit[role.id] = this.initialLimit;\r\n } else {\r\n this.displayLimit[role.id] = role.permissions.length;\r\n }\r\n }\r\n\r\n isDefaultRole(role: Role): boolean {\r\n return role.code === SUPER_ADMIN_ROLE_CODE || role.code === CUSTOMER_ROLE_CODE;\r\n }\r\n}\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left> </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"seller-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"isNew$ | async; else updateButton\"\r\n (click)=\"create()\"\r\n [disabled]=\"!saveButtonEnabled()\"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n *vdrIfPermissions=\"['SuperAdmin', 'UpdateSeller']\"\r\n [disabled]=\"!saveButtonEnabled()\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </ng-template>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n\r\n<form class=\"form\" [formGroup]=\"detailForm\">\r\n <vdr-page-detail-layout>\r\n <vdr-page-detail-sidebar>\r\n <vdr-card *ngIf=\"entity$ | async as entity\">\r\n <vdr-page-entity-info [entity]=\"entity\" />\r\n </vdr-card>\r\n </vdr-page-detail-sidebar>\r\n <vdr-page-block>\r\n <vdr-card>\r\n <div class=\"form-grid\">\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input\r\n id=\"name\"\r\n type=\"text\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n formControlName=\"name\"\r\n />\r\n </vdr-form-field>\r\n </div>\r\n </vdr-card>\r\n <vdr-card\r\n formGroupName=\"customFields\"\r\n *ngIf=\"customFields.length\"\r\n [title]=\"'common.custom-fields' | translate\"\r\n >\r\n <vdr-tabbed-custom-fields\r\n entityName=\"Seller\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n ></vdr-tabbed-custom-fields>\r\n </vdr-card>\r\n <vdr-custom-detail-component-host\r\n locationId=\"seller-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n </vdr-page-block>\r\n </vdr-page-detail-layout>\r\n</form>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { FormBuilder, Validators } from '@angular/forms';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n CreateSellerInput,\r\n DataService,\r\n getCustomFieldsDefaults,\r\n GetSellerDetailDocument,\r\n LanguageCode,\r\n NotificationService,\r\n Permission,\r\n SellerFragment,\r\n TypedBaseDetailComponent,\r\n UpdateSellerInput,\r\n} from '@vendure/admin-ui/core';\r\nimport { gql } from 'apollo-angular';\r\nimport { mergeMap, take } from 'rxjs/operators';\r\n\r\nexport const GET_SELLER_DETAIL = gql`\r\n query GetSellerDetail($id: ID!) {\r\n seller(id: $id) {\r\n ...SellerDetail\r\n }\r\n }\r\n fragment SellerDetail on Seller {\r\n id\r\n createdAt\r\n updatedAt\r\n name\r\n }\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-seller-detail',\r\n templateUrl: './seller-detail.component.html',\r\n styleUrls: ['./seller-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SellerDetailComponent\r\n extends TypedBaseDetailComponent<typeof GetSellerDetailDocument, 'seller'>\r\n implements OnInit, OnDestroy\r\n{\r\n customFields = this.getCustomFieldConfig('Seller');\r\n detailForm = this.formBuilder.group({\r\n name: ['', Validators.required],\r\n customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),\r\n });\r\n readonly updatePermission = [Permission.SuperAdmin, Permission.UpdateSeller, Permission.CreateSeller];\r\n\r\n constructor(\r\n private changeDetector: ChangeDetectorRef,\r\n protected dataService: DataService,\r\n private formBuilder: FormBuilder,\r\n private notificationService: NotificationService,\r\n ) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n this.init();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroy();\r\n }\r\n\r\n saveButtonEnabled(): boolean {\r\n return this.detailForm.dirty && this.detailForm.valid;\r\n }\r\n\r\n create() {\r\n if (!this.detailForm.dirty) {\r\n return;\r\n }\r\n const formValue = this.detailForm.value;\r\n if (!formValue.name) {\r\n return;\r\n }\r\n const input: CreateSellerInput = {\r\n name: formValue.name,\r\n customFields: formValue.customFields,\r\n };\r\n this.dataService.settings.createSeller(input).subscribe(data => {\r\n switch (data.createSeller.__typename) {\r\n case 'Seller':\r\n this.notificationService.success(_('common.notify-create-success'), {\r\n entity: 'Seller',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n this.router.navigate(['../', data.createSeller.id], { relativeTo: this.route });\r\n break;\r\n }\r\n });\r\n }\r\n\r\n save() {\r\n if (!this.detailForm.dirty) {\r\n return;\r\n }\r\n const formValue = this.detailForm.value;\r\n this.entity$\r\n .pipe(\r\n take(1),\r\n mergeMap(seller => {\r\n const input = {\r\n id: seller.id,\r\n name: formValue.name,\r\n customFields: formValue.customFields,\r\n } as UpdateSellerInput;\r\n return this.dataService.settings.updateSeller(input);\r\n }),\r\n )\r\n .subscribe(({ updateSeller }) => {\r\n switch (updateSeller.__typename) {\r\n case 'Seller':\r\n this.notificationService.success(_('common.notify-update-success'), {\r\n entity: 'Seller',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n break;\r\n // case 'LanguageNotAvailableError':\r\n // this.notificationService.error(updateSeller.message);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Update the form values when the entity changes.\r\n */\r\n protected setFormValues(entity: SellerFragment, languageCode: LanguageCode): void {\r\n this.detailForm.patchValue({\r\n name: entity.name,\r\n });\r\n if (this.customFields.length) {\r\n this.setCustomFieldFormValues(this.customFields, this.detailForm.get(['customFields']), entity);\r\n }\r\n }\r\n}\r\n","import { createBulkDeleteAction, GetSellersQuery, ItemOf, Permission } from '@vendure/admin-ui/core';\r\nimport { map } from 'rxjs/operators';\r\n\r\nexport const deleteSellersBulkAction = createBulkDeleteAction<ItemOf<GetSellersQuery, 'sellers'>>({\r\n location: 'seller-list',\r\n requiresPermission: userPermissions => userPermissions.includes(Permission.DeleteSeller),\r\n getItemName: item => item.name,\r\n bulkDelete: (dataService, ids) =>\r\n dataService.settings.deleteSellers(ids).pipe(map(res => res.deleteSellers)),\r\n});\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left> </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"seller-list\"></vdr-action-bar-items>\r\n <a class=\"btn btn-primary\" *vdrIfPermissions=\"['SuperAdmin', 'CreateSeller']\" [routerLink]=\"['./', 'create']\">\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'settings.create-new-seller' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n<vdr-data-table-2\r\n id=\"seller-list\"\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n [filters]=\"filters\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n>\r\n <vdr-bulk-action-menu\r\n locationId=\"seller-list\"\r\n [hostComponent]=\"this\"\r\n [selectionManager]=\"selectionManager\"\r\n />\r\n <vdr-dt2-search\r\n [searchTermControl]=\"searchTermControl\"\r\n [searchTermPlaceholder]=\"'catalog.filter-by-name' | translate\"\r\n />\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\r\n <ng-template let-seller=\"item\">{{ seller.id }}</ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.created-at' | translate\" id=\"created-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('createdAt')\"\r\n >\r\n <ng-template let-seller=\"item\">\r\n {{ seller.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.updated-at' | translate\" id=\"updated-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('updatedAt')\"\r\n >\r\n <ng-template let-seller=\"item\">\r\n {{ seller.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.name' | translate\" id=\"name\" [optional]=\"false\" [sort]=\"sorts.get('name')\">\r\n <ng-template let-seller=\"item\">\r\n <a class=\"button-ghost\" [routerLink]=\"['./', seller.id]\"\r\n ><span>{{ seller.name }}</span>\r\n <clr-icon shape=\"arrow right\"></clr-icon>\r\n </a>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-custom-field-column *ngFor=\"let customField of customFields\" [customField]=\"customField\" [sorts]=\"sorts\" />\r\n</vdr-data-table-2>\r\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport { GetSellerListDocument, TypedBaseListComponent } from '@vendure/admin-ui/core';\r\nimport { gql } from 'apollo-angular';\r\n\r\nconst GET_SELLER_LIST = gql`\r\n query GetSellerList($options: SellerListOptions) {\r\n sellers(options: $options) {\r\n items {\r\n ...SellerListItem\r\n }\r\n totalItems\r\n }\r\n }\r\n fragment SellerListItem on Seller {\r\n id\r\n createdAt\r\n updatedAt\r\n name\r\n }\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-seller-list',\r\n templateUrl: './seller-list.component.html',\r\n styleUrls: ['./seller-list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SellerListComponent\r\n extends TypedBaseListComponent<typeof GetSellerListDocument, 'sellers'>\r\n implements OnInit\r\n{\r\n readonly customFields = this.getCustomFieldConfig('Seller');\r\n readonly filters = this.createFilterCollection()\r\n .addIdFilter()\r\n .addDateFilters()\r\n .addFilter({\r\n name: 'name',\r\n type: { kind: 'text' },\r\n label: _('common.name'),\r\n filterField: 'name',\r\n })\r\n .addCustomFieldFilters(this.customFields)\r\n .connectToRoute(this.route);\r\n\r\n readonly sorts = this.createSortCollection()\r\n .defaultSort('createdAt', 'DESC')\r\n .addSort({ name: 'createdAt' })\r\n .addSort({ name: 'updatedAt' })\r\n .addSort({ name: 'name' })\r\n .addCustomFieldSorts(this.customFields)\r\n .connectToRoute(this.route);\r\n\r\n constructor() {\r\n super();\r\n super.configure({\r\n document: GetSellerListDocument,\r\n getItems: data => data.sellers,\r\n setVariables: (skip, take) => ({\r\n options: {\r\n skip,\r\n take,\r\n filter: {\r\n name: {\r\n contains: this.searchTermControl.value,\r\n },\r\n ...this.filters.createFilterInput(),\r\n },\r\n sort: this.sorts.createSortInput(),\r\n },\r\n }),\r\n refreshListOnChanges: [this.filters.valueChanges, this.sorts.valueChanges],\r\n });\r\n }\r\n}\r\n","<vdr-card class=\"test-result\" [title]=\"'settings.test-result' | translate\">\r\n <div class=\"card-span\" *ngFor=\"let quote of testResult\">\r\n <div class=\"result-details\" [class.stale]=\"testDataUpdated\">\r\n <vdr-labeled-data [label]=\"'settings.shipping-method' | translate\">\r\n {{ quote.name }}\r\n </vdr-labeled-data>\r\n <div class=\"price-row\">\r\n <vdr-labeled-data [label]=\"'common.price' | translate\">\r\n {{ quote.price | localeCurrency: currencyCode }}\r\n </vdr-labeled-data>\r\n <vdr-labeled-data [label]=\"'common.price-with-tax' | translate\">\r\n {{ quote.priceWithTax | localeCurrency: currencyCode }}\r\n </vdr-labeled-data>\r\n </div>\r\n <vdr-object-tree *ngIf=\"quote.metadata\" [value]=\"quote.metadata\"></vdr-object-tree>\r\n </div>\r\n </div>\r\n <div class=\"card-span\" *ngIf=\"testResult?.length === 0\">\r\n <clr-icon shape=\"ban\" class=\"is-solid error\"></clr-icon>\r\n {{ 'settings.no-eligible-shipping-methods' | translate }}\r\n </div>\r\n <div class=\"card-footer\">\r\n <button class=\"btn btn-secondary\" (click)=\"runTest.emit()\" [disabled]=\"!okToRun\">\r\n {{ 'settings.test-shipping-methods' | translate }}\r\n </button>\r\n </div>\r\n</vdr-card>\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\r\n\r\nimport { CurrencyCode, ShippingMethodQuote } from '@vendure/admin-ui/core';\r\n\r\n@Component({\r\n selector: 'vdr-shipping-eligibility-test-result',\r\n templateUrl: './shipping-eligibility-test-result.component.html',\r\n styleUrls: ['./shipping-eligibility-test-result.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ShippingEligibilityTestResultComponent {\r\n @Input() testResult: ShippingMethodQuote[];\r\n @Input() okToRun = false;\r\n @Input() testDataUpdated = false;\r\n @Input() currencyCode: CurrencyCode;\r\n @Output() runTest = new EventEmitter<void>();\r\n}\r\n","<table class=\"order-table table\" *ngIf=\"lines.length; else emptyPlaceholder\">\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>{{ 'order.product-name' | translate }}</th>\r\n <th>{{ 'order.product-sku' | translate }}</th>\r\n <th>{{ 'order.unit-price' | translate }}</th>\r\n <th>{{ 'order.quantity' | translate }}</th>\r\n <th>{{ 'order.total' | translate }}</th>\r\n </tr>\r\n </thead>\r\n <tr *ngFor=\"let line of lines\" class=\"order-line\">\r\n <td class=\"align-middle thumb\">\r\n <img [src]=\"line.preview + '?preset=tiny'\" />\r\n </td>\r\n <td class=\"align-middle name\">{{ line.name }}</td>\r\n <td class=\"align-middle sku\">{{ line.sku }}</td>\r\n <td class=\"align-middle unit-price\">\r\n {{ line.unitPriceWithTax | localeCurrency : currencyCode }}\r\n </td>\r\n <td class=\"align-middle quantity\">\r\n <input [(ngModel)]=\"line.quantity\" (change)=\"updateQuantity()\" type=\"number\" max=\"9999\" min=\"1\" />\r\n <button class=\"icon-button\" (click)=\"removeLine(line)\">\r\n <clr-icon shape=\"trash\"></clr-icon>\r\n </button>\r\n </td>\r\n <td class=\"align-middle total\">\r\n {{ line.unitPriceWithTax * line.quantity | localeCurrency : currencyCode }}\r\n </td>\r\n </tr>\r\n <tr class=\"sub-total\">\r\n <td class=\"left\">{{ 'order.sub-total' | translate }}</td>\r\n <td></td>\r\n <td></td>\r\n <td></td>\r\n <td></td>\r\n <td>{{ subTotal | localeCurrency : currencyCode }}</td>\r\n </tr>\r\n</table>\r\n\r\n<ng-template #emptyPlaceholder>\r\n <div class=\"card-block empty-placeholder card-span\">\r\n <div class=\"empty-text\">{{ 'settings.add-products-to-test-order' | translate }}</div>\r\n <clr-icon shape=\"arrow\" dir=\"down\" size=\"96\"></clr-icon>\r\n </div>\r\n</ng-template>\r\n<div class=\"card-block\">\r\n <vdr-product-variant-selector (productSelected)=\"selectResult($event)\"> </vdr-product-variant-selector>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, OnInit, Output } from '@angular/core';\r\nimport {\r\n CurrencyCode,\r\n DataService,\r\n LocalStorageService,\r\n ProductSelectorSearchQuery,\r\n} from '@vendure/admin-ui/core';\r\n\r\ntype SearchItem = ProductSelectorSearchQuery['search']['items'][number];\r\n\r\nexport interface TestOrderLine {\r\n id: string;\r\n name: string;\r\n preview: string;\r\n sku: string;\r\n unitPriceWithTax: number;\r\n quantity: number;\r\n}\r\n\r\n@Component({\r\n selector: 'vdr-test-order-builder',\r\n templateUrl: './test-order-builder.component.html',\r\n styleUrls: ['./test-order-builder.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class TestOrderBuilderComponent implements OnInit {\r\n @Output() orderLinesChange = new EventEmitter<TestOrderLine[]>();\r\n lines: TestOrderLine[] = [];\r\n currencyCode: CurrencyCode;\r\n get subTotal(): number {\r\n return this.lines.reduce((sum, l) => sum + l.unitPriceWithTax * l.quantity, 0);\r\n }\r\n\r\n constructor(private dataService: DataService, private localStorageService: LocalStorageService) {}\r\n\r\n ngOnInit() {\r\n this.lines = this.loadFromLocalStorage();\r\n if (this.lines) {\r\n this.orderLinesChange.emit(this.lines);\r\n }\r\n this.dataService.settings.getActiveChannel('cache-first').single$.subscribe(result => {\r\n this.currencyCode = result.activeChannel.defaultCurrencyCode;\r\n });\r\n }\r\n\r\n selectResult(result: SearchItem) {\r\n if (result) {\r\n this.addToLines(result);\r\n }\r\n }\r\n\r\n private addToLines(result: SearchItem) {\r\n if (!this.lines.find(l => l.id === result.productVariantId)) {\r\n this.lines.push({\r\n id: result.productVariantId,\r\n name: result.productVariantName,\r\n preview: result.productAsset?.preview ?? '',\r\n quantity: 1,\r\n sku: result.sku,\r\n unitPriceWithTax:\r\n (result.priceWithTax.__typename === 'SinglePrice' && result.priceWithTax.value) || 0,\r\n });\r\n this.persistToLocalStorage();\r\n this.orderLinesChange.emit(this.lines);\r\n }\r\n }\r\n\r\n updateQuantity() {\r\n this.persistToLocalStorage();\r\n this.orderLinesChange.emit(this.lines);\r\n }\r\n\r\n removeLine(line: TestOrderLine) {\r\n this.lines = this.lines.filter(l => l.id !== line.id);\r\n this.persistToLocalStorage();\r\n this.orderLinesChange.emit(this.lines);\r\n }\r\n\r\n private persistToLocalStorage() {\r\n this.localStorageService.setForCurrentLocation('shippingTestOrder', this.lines);\r\n }\r\n\r\n private loadFromLocalStorage(): TestOrderLine[] {\r\n return this.localStorageService.getForCurrentLocation('shippingTestOrder') || [];\r\n }\r\n}\r\n","<div class=\"card\">\r\n <div class=\"card-header\">\r\n {{ 'settings.test-address' | translate }}\r\n </div>\r\n <div class=\"card-block\">\r\n <form [formGroup]=\"form\" class=\"form-grid\">\r\n <vdr-form-field [label]=\"'customer.city' | translate\">\r\n <input formControlName=\"city\" type=\"text\" />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'customer.province' | translate\">\r\n <input formControlName=\"province\" type=\"text\" />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'customer.postal-code' | translate\">\r\n <input formControlName=\"postalCode\" type=\"text\" />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'customer.country' | translate\">\r\n <select name=\"countryCode\" formControlName=\"countryCode\" >\r\n <option *ngFor=\"let country of availableCountries$ | async\" [value]=\"country.code\">\r\n {{ country.name }}\r\n </option>\r\n </select>\r\n </vdr-form-field>\r\n </form>\r\n </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, OnDestroy, OnInit, Output } from '@angular/core';\r\nimport { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms';\r\nimport { DataService, GetAvailableCountriesQuery, ItemOf, LocalStorageService } from '@vendure/admin-ui/core';\r\nimport { Observable, Subscription } from 'rxjs';\r\n\r\nexport interface TestAddress {\r\n city: string;\r\n province: string;\r\n postalCode: string;\r\n countryCode: string;\r\n}\r\n\r\n@Component({\r\n selector: 'vdr-test-address-form',\r\n templateUrl: './test-address-form.component.html',\r\n styleUrls: ['./test-address-form.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class TestAddressFormComponent implements OnInit, OnDestroy {\r\n @Output() addressChange = new EventEmitter<TestAddress>();\r\n availableCountries$: Observable<Array<ItemOf<GetAvailableCountriesQuery, 'countries'>>>;\r\n form: UntypedFormGroup;\r\n private subscription: Subscription;\r\n\r\n constructor(\r\n private formBuilder: UntypedFormBuilder,\r\n private dataService: DataService,\r\n private localStorageService: LocalStorageService,\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.availableCountries$ = this.dataService.settings\r\n .getAvailableCountries()\r\n .mapSingle(result => result.countries.items);\r\n const storedValue = this.localStorageService.getForCurrentLocation('shippingTestAddress');\r\n const initialValue: TestAddress = storedValue\r\n ? storedValue\r\n : {\r\n city: '',\r\n countryCode: '',\r\n postalCode: '',\r\n province: '',\r\n };\r\n this.addressChange.emit(initialValue);\r\n\r\n this.form = this.formBuilder.group(initialValue);\r\n this.subscription = this.form.valueChanges.subscribe(value => {\r\n this.localStorageService.setForCurrentLocation('shippingTestAddress', value);\r\n this.addressChange.emit(value);\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.subscription) {\r\n this.subscription.unsubscribe();\r\n }\r\n }\r\n}\r\n","<div\r\n class=\"test-result card\"\r\n [ngClass]=\"{\r\n success: testResult?.eligible === true,\r\n error: testResult?.eligible === false,\r\n unknown: !testResult\r\n }\"\r\n>\r\n <div class=\"card-header\">\r\n {{ 'settings.test-result' | translate }}\r\n </div>\r\n <div class=\"card-block\">\r\n <div class=\"result-details\" [class.stale]=\"testDataUpdated\">\r\n <vdr-labeled-data [label]=\"'settings.eligible' | translate\">\r\n <div class=\"eligible-icon\">\r\n <clr-icon\r\n shape=\"success-standard\"\r\n class=\"is-solid success\"\r\n *ngIf=\"testResult?.eligible\"\r\n ></clr-icon>\r\n <clr-icon\r\n shape=\"ban\"\r\n class=\"is-solid error\"\r\n *ngIf=\"testResult?.eligible === false\"\r\n ></clr-icon>\r\n <clr-icon shape=\"unknown-status\" *ngIf=\"!testResult\"></clr-icon>\r\n </div>\r\n {{ testResult?.eligible }}\r\n </vdr-labeled-data>\r\n <div class=\"price-row\">\r\n <vdr-labeled-data\r\n [label]=\"'common.price' | translate\"\r\n *ngIf=\"testResult?.quote?.price != null\"\r\n >\r\n {{ testResult.quote?.price | localeCurrency: currencyCode }}\r\n </vdr-labeled-data>\r\n <vdr-labeled-data\r\n [label]=\"'common.price-with-tax' | translate\"\r\n *ngIf=\"testResult?.quote?.priceWithTax != null\"\r\n >\r\n {{ testResult.quote?.priceWithTax | localeCurrency: currencyCode }}\r\n </vdr-labeled-data>\r\n </div>\r\n <vdr-object-tree\r\n *ngIf=\"testResult?.quote?.metadata\"\r\n [value]=\"testResult?.quote?.metadata\"\r\n ></vdr-object-tree>\r\n </div>\r\n </div>\r\n <div class=\"card-footer\">\r\n <button class=\"btn btn-secondary\" (click)=\"runTest.emit()\" [disabled]=\"!okToRun\">\r\n {{ 'settings.test-shipping-method' | translate }}\r\n </button>\r\n </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\r\n\r\nimport { CurrencyCode, TestShippingMethodResult } from '@vendure/admin-ui/core';\r\n\r\n@Component({\r\n selector: 'vdr-shipping-method-test-result',\r\n templateUrl: './shipping-method-test-result.component.html',\r\n styleUrls: ['./shipping-method-test-result.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ShippingMethodTestResultComponent {\r\n @Input() testResult: TestShippingMethodResult;\r\n @Input() okToRun = false;\r\n @Input() testDataUpdated = false;\r\n @Input() currencyCode: CurrencyCode;\r\n @Output() runTest = new EventEmitter<void>();\r\n}\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-language-selector\r\n [disabled]=\"isNew$ | async\"\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"languageCode$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"shipping-method-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"isNew$ | async; else updateButton\"\r\n (click)=\"create()\"\r\n [disabled]=\"\r\n detailForm.pristine || detailForm.invalid || !selectedChecker || !selectedCalculator\r\n \"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n *vdrIfPermissions=\"updatePermission\"\r\n [disabled]=\"\r\n detailForm.pristine || detailForm.invalid || !selectedChecker || !selectedCalculator\r\n \"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </ng-template>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n\r\n<form class=\"form\" [formGroup]=\"detailForm\">\r\n <vdr-page-detail-layout>\r\n <vdr-page-detail-sidebar>\r\n <vdr-card *ngIf=\"entity$ | async as entity\">\r\n <vdr-page-entity-info [entity]=\"entity\" />\r\n </vdr-card>\r\n </vdr-page-detail-sidebar>\r\n <vdr-page-block>\r\n <vdr-card>\r\n <div class=\"form-grid\">\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input\r\n id=\"name\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n (input)=\"updateCode(entity?.code, $event.target.value)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'common.code' | translate\"\r\n for=\"code\"\r\n [readOnlyToggle]=\"updatePermission | hasPermission\"\r\n >\r\n <input\r\n id=\"code\"\r\n type=\"text\"\r\n formControlName=\"code\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-rich-text-editor\r\n class=\"form-grid-span\"\r\n formControlName=\"description\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n [label]=\"'common.description' | translate\"\r\n ></vdr-rich-text-editor>\r\n <vdr-form-field\r\n [label]=\"'settings.fulfillment-handler' | translate\"\r\n for=\"fulfillmentHandler\"\r\n >\r\n <select\r\n name=\"fulfillmentHandler\"\r\n formControlName=\"fulfillmentHandler\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n >\r\n <option *ngFor=\"let handler of fulfillmentHandlers\" [value]=\"handler.code\">\r\n {{ handler.code }}: {{ handler.description }}\r\n </option>\r\n </select>\r\n </vdr-form-field>\r\n </div>\r\n </vdr-card>\r\n\r\n <vdr-card\r\n formGroupName=\"customFields\"\r\n *ngIf=\"customFields.length\"\r\n [title]=\"'common.custom-fields' | translate\"\r\n >\r\n <vdr-tabbed-custom-fields\r\n entityName=\"ShippingMethod\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n ></vdr-tabbed-custom-fields>\r\n </vdr-card>\r\n\r\n <vdr-custom-detail-component-host\r\n locationId=\"shipping-method-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n\r\n <vdr-card [title]=\"'settings.shipping-eligibility-checker' | translate\">\r\n <vdr-configurable-input\r\n class=\"card-span\"\r\n *ngIf=\"selectedChecker && selectedCheckerDefinition\"\r\n [operation]=\"selectedChecker\"\r\n [operationDefinition]=\"selectedCheckerDefinition\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n (remove)=\"selectedChecker = null\"\r\n formControlName=\"checker\"\r\n ></vdr-configurable-input>\r\n <div *ngIf=\"!selectedChecker || !selectedCheckerDefinition\" class=\"card-span\">\r\n <vdr-dropdown>\r\n <button class=\"btn btn-outline\" vdrDropdownTrigger>\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'common.select' | translate }}\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-left\">\r\n <button\r\n *ngFor=\"let checker of checkers\"\r\n type=\"button\"\r\n vdrDropdownItem\r\n (click)=\"selectChecker(checker)\"\r\n >\r\n {{ checker.description }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </vdr-card>\r\n <vdr-card [title]=\"'settings.shipping-calculator' | translate\">\r\n <vdr-configurable-input\r\n class=\"card-span\"\r\n *ngIf=\"selectedCalculator && selectedCalculatorDefinition\"\r\n [operation]=\"selectedCalculator\"\r\n [operationDefinition]=\"selectedCalculatorDefinition\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n (remove)=\"selectedCalculator = null\"\r\n formControlName=\"calculator\"\r\n ></vdr-configurable-input>\r\n <div *ngIf=\"!selectedCalculator || !selectedCalculatorDefinition\" class=\"card-span\">\r\n <vdr-dropdown>\r\n <button class=\"btn btn-outline\" vdrDropdownTrigger>\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'common.select' | translate }}\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-left\">\r\n <button\r\n *ngFor=\"let calculator of calculators\"\r\n type=\"button\"\r\n vdrDropdownItem\r\n (click)=\"selectCalculator(calculator)\"\r\n >\r\n {{ calculator.description }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </vdr-card>\r\n <vdr-card [title]=\"'settings.test-shipping-method' | translate\">\r\n <vdr-test-order-builder\r\n class=\"card-span\"\r\n (orderLinesChange)=\"setTestOrderLines($event)\"\r\n ></vdr-test-order-builder>\r\n <vdr-test-address-form\r\n (addressChange)=\"setTestAddress($event)\"\r\n class=\"mt-2\"\r\n ></vdr-test-address-form>\r\n <vdr-shipping-method-test-result\r\n class=\"mt-2\"\r\n [currencyCode]=\"(activeChannel$ | async)?.currencyCode\"\r\n [okToRun]=\"allTestDataPresent() && testDataUpdated && detailForm.valid\"\r\n [testDataUpdated]=\"testDataUpdated\"\r\n [testResult]=\"testResult$ | async\"\r\n (runTest)=\"runTest()\"\r\n ></vdr-shipping-method-test-result>\r\n </vdr-card>\r\n </vdr-page-block>\r\n </vdr-page-detail-layout>\r\n</form>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { FormBuilder, Validators } from '@angular/forms';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n configurableDefinitionToInstance,\r\n ConfigurableOperation,\r\n ConfigurableOperationDefinition,\r\n CreateShippingMethodInput,\r\n createUpdatedTranslatable,\r\n DataService,\r\n findTranslation,\r\n GetActiveChannelQuery,\r\n getConfigArgValue,\r\n getCustomFieldsDefaults,\r\n GetShippingMethodDetailDocument,\r\n GetShippingMethodDetailQuery,\r\n LanguageCode,\r\n NotificationService,\r\n Permission,\r\n SHIPPING_METHOD_FRAGMENT,\r\n ShippingMethodFragment,\r\n TestShippingMethodInput,\r\n TestShippingMethodResult,\r\n toConfigurableOperationInput,\r\n TypedBaseDetailComponent,\r\n UpdateShippingMethodInput,\r\n} from '@vendure/admin-ui/core';\r\nimport { normalizeString } from '@vendure/common/lib/normalize-string';\r\nimport { gql } from 'apollo-angular';\r\nimport { combineLatest, merge, Observable, of, Subject } from 'rxjs';\r\nimport { mergeMap, switchMap, take, takeUntil } from 'rxjs/operators';\r\n\r\nimport { TestAddress } from '../test-address-form/test-address-form.component';\r\nimport { TestOrderLine } from '../test-order-builder/test-order-builder.component';\r\n\r\nexport const GET_SHIPPING_METHOD_DETAIL = gql`\r\n query GetShippingMethodDetail($id: ID!) {\r\n shippingMethod(id: $id) {\r\n ...ShippingMethod\r\n }\r\n }\r\n ${SHIPPING_METHOD_FRAGMENT}\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-shipping-method-detail',\r\n templateUrl: './shipping-method-detail.component.html',\r\n styleUrls: ['./shipping-method-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ShippingMethodDetailComponent\r\n extends TypedBaseDetailComponent<typeof GetShippingMethodDetailDocument, 'shippingMethod'>\r\n implements OnInit, OnDestroy\r\n{\r\n customFields = this.getCustomFieldConfig('ShippingMethod');\r\n detailForm = this.formBuilder.group({\r\n code: ['', Validators.required],\r\n name: ['', Validators.required],\r\n description: '',\r\n fulfillmentHandler: ['', Validators.required],\r\n checker: {} as NonNullable<GetShippingMethodDetailQuery['shippingMethod']>['checker'],\r\n calculator: {} as NonNullable<GetShippingMethodDetailQuery['shippingMethod']>['calculator'],\r\n customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),\r\n });\r\n checkers: ConfigurableOperationDefinition[] = [];\r\n calculators: ConfigurableOperationDefinition[] = [];\r\n fulfillmentHandlers: ConfigurableOperationDefinition[] = [];\r\n selectedChecker?: ConfigurableOperation | null;\r\n selectedCheckerDefinition?: ConfigurableOperationDefinition;\r\n selectedCalculator?: ConfigurableOperation | null;\r\n selectedCalculatorDefinition?: ConfigurableOperationDefinition;\r\n activeChannel$: Observable<GetActiveChannelQuery['activeChannel']>;\r\n testAddress: TestAddress;\r\n testOrderLines: TestOrderLine[];\r\n testDataUpdated = false;\r\n testResult$: Observable<TestShippingMethodResult | undefined>;\r\n readonly updatePermission = [Permission.UpdateSettings, Permission.UpdateShippingMethod];\r\n private fetchTestResult$ = new Subject<[TestAddress, TestOrderLine[]]>();\r\n\r\n constructor(\r\n private changeDetector: ChangeDetectorRef,\r\n protected dataService: DataService,\r\n private formBuilder: FormBuilder,\r\n private notificationService: NotificationService,\r\n ) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n this.init();\r\n this.dataService.shippingMethod.getShippingMethodOperations().single$.subscribe(data => {\r\n this.checkers = data.shippingEligibilityCheckers;\r\n this.calculators = data.shippingCalculators;\r\n this.fulfillmentHandlers = data.fulfillmentHandlers;\r\n this.changeDetector.markForCheck();\r\n this.selectedCheckerDefinition = data.shippingEligibilityCheckers.find(\r\n c => c.code === this.entity?.checker?.code,\r\n );\r\n this.selectedCalculatorDefinition = data.shippingCalculators.find(\r\n c => c.code === this.entity?.calculator?.code,\r\n );\r\n });\r\n\r\n this.activeChannel$ = this.dataService.settings\r\n .getActiveChannel()\r\n .mapStream(data => data.activeChannel);\r\n\r\n this.testResult$ = this.fetchTestResult$.pipe(\r\n switchMap(([address, lines]) => {\r\n const { checker, calculator } = this.detailForm.value;\r\n if (!this.selectedChecker || !this.selectedCalculator || !checker || !calculator) {\r\n return of(undefined);\r\n }\r\n const input: TestShippingMethodInput = {\r\n shippingAddress: { ...address, streetLine1: 'test' },\r\n lines: lines.map(l => ({ productVariantId: l.id, quantity: l.quantity })),\r\n checker: toConfigurableOperationInput(this.selectedChecker, checker),\r\n calculator: toConfigurableOperationInput(this.selectedCalculator, calculator),\r\n };\r\n return this.dataService.shippingMethod\r\n .testShippingMethod(input)\r\n .mapSingle(result => result.testShippingMethod);\r\n }),\r\n );\r\n\r\n /* eslint-disable @typescript-eslint/no-non-null-assertion */\r\n merge(\r\n this.detailForm.get(['checker'])!.valueChanges,\r\n this.detailForm.get(['calculator'])!.valueChanges,\r\n )\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe(() => (this.testDataUpdated = true));\r\n /* eslint-enable @typescript-eslint/no-non-null-assertion */\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy();\r\n }\r\n\r\n updateCode(currentCode: string | undefined, nameValue: string) {\r\n if (!currentCode) {\r\n const codeControl = this.detailForm.get(['code']);\r\n if (codeControl && codeControl.pristine) {\r\n codeControl.setValue(normalizeString(nameValue, '-'));\r\n }\r\n }\r\n }\r\n\r\n selectChecker(checker: ConfigurableOperationDefinition) {\r\n this.selectedCheckerDefinition = checker;\r\n this.selectedChecker = configurableDefinitionToInstance(checker);\r\n const formControl = this.detailForm.get('checker');\r\n if (formControl) {\r\n formControl.clearValidators();\r\n formControl.updateValueAndValidity({ onlySelf: true });\r\n formControl.patchValue(this.selectedChecker);\r\n }\r\n this.detailForm.markAsDirty();\r\n }\r\n\r\n selectCalculator(calculator: ConfigurableOperationDefinition) {\r\n this.selectedCalculatorDefinition = calculator;\r\n this.selectedCalculator = configurableDefinitionToInstance(calculator);\r\n const formControl = this.detailForm.get('calculator');\r\n if (formControl) {\r\n formControl.clearValidators();\r\n formControl.updateValueAndValidity({ onlySelf: true });\r\n formControl.patchValue(this.selectedCalculator);\r\n }\r\n this.detailForm.markAsDirty();\r\n }\r\n\r\n create() {\r\n const selectedChecker = this.selectedChecker;\r\n const selectedCalculator = this.selectedCalculator;\r\n const { checker, calculator } = this.detailForm.value;\r\n if (!selectedChecker || !selectedCalculator || !checker || !calculator) {\r\n return;\r\n }\r\n const formValue = this.detailForm.value;\r\n const input = {\r\n ...(this.getUpdatedShippingMethod(\r\n {\r\n createdAt: '',\r\n updatedAt: '',\r\n id: '',\r\n code: '',\r\n name: '',\r\n description: '',\r\n fulfillmentHandlerCode: '',\r\n checker: undefined as any,\r\n calculator: undefined as any,\r\n translations: [],\r\n },\r\n this.detailForm,\r\n this.languageCode,\r\n ) as CreateShippingMethodInput),\r\n checker: toConfigurableOperationInput(selectedChecker, checker),\r\n calculator: toConfigurableOperationInput(selectedCalculator, calculator),\r\n };\r\n this.dataService.shippingMethod.createShippingMethod(input).subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-create-success'), {\r\n entity: 'ShippingMethod',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n this.router.navigate(['../', data.createShippingMethod.id], { relativeTo: this.route });\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-create-error'), {\r\n entity: 'ShippingMethod',\r\n });\r\n },\r\n );\r\n }\r\n\r\n save() {\r\n const selectedChecker = this.selectedChecker;\r\n const selectedCalculator = this.selectedCalculator;\r\n const { checker, calculator } = this.detailForm.value;\r\n if (!selectedChecker || !selectedCalculator || !checker || !calculator) {\r\n return;\r\n }\r\n combineLatest([this.entity$, this.languageCode$])\r\n .pipe(\r\n take(1),\r\n mergeMap(([shippingMethod, languageCode]) => {\r\n const formValue = this.detailForm.value;\r\n const input = {\r\n ...(this.getUpdatedShippingMethod(\r\n shippingMethod,\r\n this.detailForm,\r\n languageCode,\r\n ) as UpdateShippingMethodInput),\r\n checker: toConfigurableOperationInput(selectedChecker, checker),\r\n calculator: toConfigurableOperationInput(selectedCalculator, calculator),\r\n };\r\n return this.dataService.shippingMethod.updateShippingMethod(input);\r\n }),\r\n )\r\n .subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-update-success'), {\r\n entity: 'ShippingMethod',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n },\r\n err => {\r\n // eslint-disable-next-line no-console\r\n console.error(err);\r\n this.notificationService.error(_('common.notify-update-error'), {\r\n entity: 'ShippingMethod',\r\n });\r\n },\r\n );\r\n }\r\n\r\n setTestOrderLines(event: TestOrderLine[]) {\r\n this.testOrderLines = event;\r\n this.testDataUpdated = true;\r\n }\r\n\r\n setTestAddress(event: TestAddress) {\r\n this.testAddress = event;\r\n this.testDataUpdated = true;\r\n }\r\n\r\n allTestDataPresent(): boolean {\r\n return !!(\r\n this.testAddress &&\r\n this.testOrderLines &&\r\n this.testOrderLines.length &&\r\n this.selectedChecker &&\r\n this.selectedCalculator\r\n );\r\n }\r\n\r\n runTest() {\r\n this.fetchTestResult$.next([this.testAddress, this.testOrderLines]);\r\n this.testDataUpdated = false;\r\n }\r\n\r\n /**\r\n * Given a ShippingMethod and the value of the detailForm, this method creates an updated copy which\r\n * can then be persisted to the API.\r\n */\r\n private getUpdatedShippingMethod(\r\n shippingMethod: NonNullable<GetShippingMethodDetailQuery['shippingMethod']>,\r\n formGroup: typeof this.detailForm,\r\n languageCode: LanguageCode,\r\n ): Omit<CreateShippingMethodInput | UpdateShippingMethodInput, 'checker' | 'calculator'> {\r\n const formValue = formGroup.value;\r\n const input = createUpdatedTranslatable({\r\n translatable: shippingMethod,\r\n updatedFields: formValue,\r\n customFieldConfig: this.customFields,\r\n languageCode,\r\n defaultTranslation: {\r\n languageCode,\r\n name: shippingMethod.name || '',\r\n description: shippingMethod.description || '',\r\n },\r\n });\r\n return { ...input, fulfillmentHandler: formValue.fulfillmentHandler };\r\n }\r\n\r\n protected setFormValues(shippingMethod: ShippingMethodFragment, languageCode: LanguageCode): void {\r\n const currentTranslation = findTranslation(shippingMethod, languageCode);\r\n this.detailForm.patchValue({\r\n name: currentTranslation?.name ?? '',\r\n description: currentTranslation?.description ?? '',\r\n code: shippingMethod.code,\r\n fulfillmentHandler: shippingMethod.fulfillmentHandlerCode,\r\n checker: shippingMethod.checker || {},\r\n calculator: shippingMethod.calculator || {},\r\n });\r\n if (!this.selectedChecker) {\r\n this.selectedChecker = shippingMethod.checker && {\r\n code: shippingMethod.checker.code,\r\n args: shippingMethod.checker.args.map(a => ({ ...a, value: getConfigArgValue(a.value) })),\r\n };\r\n }\r\n if (!this.selectedCalculator) {\r\n this.selectedCalculator = shippingMethod.calculator && {\r\n code: shippingMethod.calculator?.code,\r\n args: shippingMethod.calculator?.args.map(a => ({ ...a, value: getConfigArgValue(a.value) })),\r\n };\r\n }\r\n if (this.customFields.length) {\r\n this.setCustomFieldFormValues(\r\n this.customFields,\r\n this.detailForm.get(['customFields']),\r\n shippingMethod,\r\n currentTranslation,\r\n );\r\n }\r\n }\r\n}\r\n","import {\r\n createBulkAssignToChannelAction,\r\n createBulkDeleteAction,\r\n createBulkRemoveFromChannelAction,\r\n GetShippingMethodListQuery,\r\n GetRolesQuery,\r\n ItemOf,\r\n Permission,\r\n AssignShippingMethodsToChannelDocument,\r\n RemoveShippingMethodsFromChannelDocument,\r\n} from '@vendure/admin-ui/core';\r\nimport { gql } from 'apollo-angular';\r\nimport { map } from 'rxjs/operators';\r\n\r\nexport const deleteShippingMethodsBulkAction = createBulkDeleteAction<\r\n ItemOf<GetShippingMethodListQuery, 'shippingMethods'>\r\n>({\r\n location: 'shipping-method-list',\r\n requiresPermission: userPermissions => userPermissions.includes(Permission.DeleteShippingMethod),\r\n getItemName: item => item.name,\r\n bulkDelete: (dataService, ids) =>\r\n dataService.shippingMethod.deleteShippingMethods(ids).pipe(map(res => res.deleteShippingMethods)),\r\n});\r\n\r\nconst ASSIGN_SHIPPING_METHODS_TO_CHANNEL = gql`\r\n mutation AssignShippingMethodsToChannel($input: AssignShippingMethodsToChannelInput!) {\r\n assignShippingMethodsToChannel(input: $input) {\r\n id\r\n name\r\n }\r\n }\r\n`;\r\n\r\nconst REMOVE_SHIPPING_METHODS_FROM_CHANNEL = gql`\r\n mutation RemoveShippingMethodsFromChannel($input: RemoveShippingMethodsFromChannelInput!) {\r\n removeShippingMethodsFromChannel(input: $input) {\r\n id\r\n name\r\n }\r\n }\r\n`;\r\nexport const assignShippingMethodsToChannelBulkAction = createBulkAssignToChannelAction<\r\n ItemOf<GetShippingMethodListQuery, 'shippingMethods'>\r\n>({\r\n location: 'shipping-method-list',\r\n requiresPermission: userPermissions =>\r\n userPermissions.includes(Permission.UpdateShippingMethod) ||\r\n userPermissions.includes(Permission.UpdateSettings),\r\n getItemName: item => item.name,\r\n bulkAssignToChannel: (dataService, shippingMethodIds, channelId) =>\r\n dataService\r\n .mutate(AssignShippingMethodsToChannelDocument, {\r\n input: {\r\n channelId,\r\n shippingMethodIds,\r\n },\r\n })\r\n .pipe(map(res => res.assignShippingMethodsToChannel)),\r\n});\r\n\r\nexport const removeShippingMethodsFromChannelBulkAction = createBulkRemoveFromChannelAction<\r\n ItemOf<GetShippingMethodListQuery, 'shippingMethods'>\r\n>({\r\n location: 'shipping-method-list',\r\n requiresPermission: userPermissions =>\r\n userPermissions.includes(Permission.DeleteShippingMethod) ||\r\n userPermissions.includes(Permission.DeleteSettings),\r\n getItemName: item => item.name,\r\n bulkRemoveFromChannel: (dataService, shippingMethodIds, channelId) =>\r\n dataService\r\n .mutate(RemoveShippingMethodsFromChannelDocument, {\r\n input: {\r\n channelId,\r\n shippingMethodIds,\r\n },\r\n })\r\n .pipe(map(res => res.removeShippingMethodsFromChannel)),\r\n});\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left>\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 ></vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"shipping-method-list\"></vdr-action-bar-items>\r\n <a\r\n class=\"btn btn-primary\"\r\n *vdrIfPermissions=\"['CreateSettings', 'CreateShippingMethod']\"\r\n [routerLink]=\"['./', 'create']\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'settings.create-new-shipping-method' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n<vdr-data-table-2\r\n id=\"shipping-method-list\"\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n [filters]=\"filters\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n>\r\n <vdr-bulk-action-menu\r\n locationId=\"shipping-method-list\"\r\n [hostComponent]=\"this\"\r\n [selectionManager]=\"selectionManager\"\r\n />\r\n <vdr-dt2-search\r\n [searchTermControl]=\"searchTermControl\"\r\n [searchTermPlaceholder]=\"'catalog.filter-by-name' | translate\"\r\n />\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\r\n <ng-template let-shippingMethod=\"item\">\r\n {{ shippingMethod.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.created-at' | translate\" id=\"created-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('createdAt')\"\r\n >\r\n <ng-template let-shippingMethod=\"item\">\r\n {{ shippingMethod.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.updated-at' | translate\" id=\"updated-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('updatedAt')\"\r\n >\r\n <ng-template let-shippingMethod=\"item\">\r\n {{ shippingMethod.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.name' | translate\" id=\"name\" [optional]=\"false\" [sort]=\"sorts.get('name')\">\r\n <ng-template let-shippingMethod=\"item\">\r\n <a class=\"button-ghost\" [routerLink]=\"['./', shippingMethod.id]\"\r\n ><span>{{ shippingMethod.name }}</span>\r\n <clr-icon shape=\"arrow right\"></clr-icon>\r\n </a>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.code' | translate\" id=\"code\" [sort]=\"sorts.get('code')\">\r\n <ng-template let-shippingMethod=\"item\">\r\n {{ shippingMethod.code }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.description' | translate\" id=\"description\"\r\n [sort]=\"sorts.get('description')\"\r\n [hiddenByDefault]=\"true\"\r\n >\r\n <ng-template let-shippingMethod=\"item\">\r\n {{ shippingMethod.description }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'settings.fulfillment-handler' | translate\" id=\"fulfillment-handler\" [sort]=\"sorts.get('fulfillmentHandlerCode')\">\r\n <ng-template let-shippingMethod=\"item\">\r\n {{ shippingMethod.fulfillmentHandlerCode }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-custom-field-column\r\n *ngFor=\"let customField of customFields\"\r\n [customField]=\"customField\"\r\n [sorts]=\"sorts\"\r\n />\r\n</vdr-data-table-2>\r\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport { GetShippingMethodListDocument, TypedBaseListComponent } from '@vendure/admin-ui/core';\r\nimport { gql } from 'apollo-angular';\r\n\r\nexport const GET_SHIPPING_METHOD_LIST = gql`\r\n query GetShippingMethodList($options: ShippingMethodListOptions) {\r\n shippingMethods(options: $options) {\r\n items {\r\n ...ShippingMethodListItem\r\n }\r\n totalItems\r\n }\r\n }\r\n fragment ShippingMethodListItem on ShippingMethod {\r\n id\r\n createdAt\r\n updatedAt\r\n code\r\n name\r\n description\r\n fulfillmentHandlerCode\r\n }\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-shipping-method-list',\r\n templateUrl: './shipping-method-list.component.html',\r\n styleUrls: ['./shipping-method-list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ShippingMethodListComponent\r\n extends TypedBaseListComponent<typeof GetShippingMethodListDocument, 'shippingMethods'>\r\n implements OnInit\r\n{\r\n readonly customFields = this.getCustomFieldConfig('ShippingMethod');\r\n readonly filters = this.createFilterCollection()\r\n .addIdFilter()\r\n .addDateFilters()\r\n .addFilter({\r\n name: 'name',\r\n type: { kind: 'text' },\r\n label: _('common.name'),\r\n filterField: 'name',\r\n })\r\n .addFilter({\r\n name: 'code',\r\n type: { kind: 'text' },\r\n label: _('common.code'),\r\n filterField: 'code',\r\n })\r\n .addFilter({\r\n name: 'description',\r\n type: { kind: 'text' },\r\n label: _('common.description'),\r\n filterField: 'description',\r\n })\r\n .addFilter({\r\n name: 'fulfillmentHandler',\r\n type: { kind: 'text' },\r\n label: _('settings.fulfillment-handler'),\r\n filterField: 'fulfillmentHandlerCode',\r\n })\r\n .addCustomFieldFilters(this.customFields)\r\n .connectToRoute(this.route);\r\n\r\n readonly sorts = this.createSortCollection()\r\n .defaultSort('createdAt', 'DESC')\r\n .addSort({ name: 'createdAt' })\r\n .addSort({ name: 'updatedAt' })\r\n .addSort({ name: 'name' })\r\n .addSort({ name: 'code' })\r\n .addSort({ name: 'description' })\r\n .addSort({ name: 'fulfillmentHandlerCode' })\r\n .addCustomFieldSorts(this.customFields)\r\n .connectToRoute(this.route);\r\n\r\n constructor() {\r\n super();\r\n super.configure({\r\n document: GetShippingMethodListDocument,\r\n getItems: data => data.shippingMethods,\r\n setVariables: (skip, take) => ({\r\n options: {\r\n skip,\r\n take,\r\n filter: {\r\n name: {\r\n contains: this.searchTermControl.value,\r\n },\r\n ...this.filters.createFilterInput(),\r\n },\r\n sort: this.sorts.createSortInput(),\r\n },\r\n }),\r\n refreshListOnChanges: [this.filters.valueChanges, this.sorts.valueChanges],\r\n });\r\n }\r\n}\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left></vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"stock-location-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"isNew$ | async; else updateButton\"\r\n (click)=\"create()\"\r\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\r\n *vdrIfPermissions=\"'UpdateStockLocation'\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </ng-template>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n\r\n<form class=\"form\" [formGroup]=\"detailForm\">\r\n <vdr-page-detail-layout>\r\n <vdr-page-detail-sidebar>\r\n <vdr-card *ngIf=\"entity$ | async as entity\">\r\n <vdr-page-entity-info [entity]=\"entity\" />\r\n </vdr-card>\r\n </vdr-page-detail-sidebar>\r\n <vdr-page-block>\r\n <vdr-card>\r\n <div class=\"form-grid\">\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input\r\n id=\"name\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!('UpdateStockLocation' | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n class=\"form-grid-span\"\r\n [label]=\"'common.description' | translate\"\r\n for=\"slug\"\r\n [errors]=\"{ pattern: 'catalog.slug-pattern-error' | translate }\"\r\n >\r\n <vdr-rich-text-editor\r\n formControlName=\"description\"\r\n [readonly]=\"!('UpdateStockLocation' | hasPermission)\"\r\n ></vdr-rich-text-editor>\r\n </vdr-form-field>\r\n </div>\r\n </vdr-card>\r\n <vdr-card\r\n formGroupName=\"customFields\"\r\n *ngIf=\"customFields.length\"\r\n [title]=\"'common.custom-fields' | translate\"\r\n >\r\n <vdr-tabbed-custom-fields\r\n entityName=\"StockLocation\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n ></vdr-tabbed-custom-fields>\r\n </vdr-card>\r\n <vdr-custom-detail-component-host\r\n locationId=\"stock-location-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n </vdr-page-block>\r\n </vdr-page-detail-layout>\r\n</form>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { FormBuilder, Validators } from '@angular/forms';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n CreateStockLocationDocument,\r\n CreateStockLocationInput,\r\n DataService,\r\n getCustomFieldsDefaults,\r\n GetStockLocationDetailDocument,\r\n NotificationService,\r\n StockLocationDetailFragment,\r\n TypedBaseDetailComponent,\r\n UpdateStockLocationDocument,\r\n UpdateStockLocationInput,\r\n} from '@vendure/admin-ui/core';\r\nimport { gql } from 'apollo-angular';\r\nimport { mergeMap, take } from 'rxjs/operators';\r\n\r\nconst STOCK_LOCATION_DETAIL_FRAGMENT = gql`\r\n fragment StockLocationDetail on StockLocation {\r\n id\r\n createdAt\r\n updatedAt\r\n name\r\n description\r\n }\r\n`;\r\n\r\nexport const GET_STOCK_LOCATION_DETAIL = gql`\r\n query GetStockLocationDetail($id: ID!) {\r\n stockLocation(id: $id) {\r\n ...StockLocationDetail\r\n }\r\n }\r\n ${STOCK_LOCATION_DETAIL_FRAGMENT}\r\n`;\r\n\r\nexport const CREATE_STOCK_LOCATION = gql`\r\n mutation CreateStockLocation($input: CreateStockLocationInput!) {\r\n createStockLocation(input: $input) {\r\n ...StockLocationDetail\r\n }\r\n }\r\n ${STOCK_LOCATION_DETAIL_FRAGMENT}\r\n`;\r\n\r\nexport const UPDATE_STOCK_LOCATION = gql`\r\n mutation UpdateStockLocation($input: UpdateStockLocationInput!) {\r\n updateStockLocation(input: $input) {\r\n ...StockLocationDetail\r\n }\r\n }\r\n ${STOCK_LOCATION_DETAIL_FRAGMENT}\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-stock-location-detail',\r\n templateUrl: './stock-location-detail.component.html',\r\n styleUrls: ['./stock-location-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class StockLocationDetailComponent\r\n extends TypedBaseDetailComponent<typeof GetStockLocationDetailDocument, 'stockLocation'>\r\n implements OnInit, OnDestroy\r\n{\r\n customFields = this.getCustomFieldConfig('StockLocation');\r\n detailForm = this.formBuilder.group({\r\n name: ['', Validators.required],\r\n description: [''],\r\n customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),\r\n });\r\n\r\n constructor(\r\n private changeDetector: ChangeDetectorRef,\r\n protected dataService: DataService,\r\n private formBuilder: FormBuilder,\r\n private notificationService: NotificationService,\r\n ) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n this.init();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroy();\r\n }\r\n\r\n create() {\r\n if (!this.detailForm.dirty) {\r\n return;\r\n }\r\n const { name, description, customFields } = this.detailForm.value;\r\n if (!name) {\r\n return;\r\n }\r\n const input = {\r\n name,\r\n description,\r\n customFields,\r\n } satisfies CreateStockLocationInput;\r\n this.dataService.mutate(CreateStockLocationDocument, { input }).subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-create-success'), {\r\n entity: 'StockLocation',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n this.router.navigate(['../', data.createStockLocation.id], { relativeTo: this.route });\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-create-error'), {\r\n entity: 'StockLocation',\r\n });\r\n },\r\n );\r\n }\r\n\r\n save() {\r\n if (!this.detailForm.dirty) {\r\n return;\r\n }\r\n const formValue = this.detailForm.value;\r\n this.entity$\r\n .pipe(\r\n take(1),\r\n mergeMap(taxRate => {\r\n const input = {\r\n id: taxRate.id,\r\n name: formValue.name,\r\n description: formValue.description,\r\n customFields: formValue.customFields,\r\n } satisfies UpdateStockLocationInput;\r\n return this.dataService.mutate(UpdateStockLocationDocument, { input });\r\n }),\r\n )\r\n .subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-update-success'), {\r\n entity: 'StockLocation',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-update-error'), {\r\n entity: 'StockLocation',\r\n });\r\n },\r\n );\r\n }\r\n\r\n /**\r\n * Update the form values when the entity changes.\r\n */\r\n protected setFormValues(entity: StockLocationDetailFragment): void {\r\n this.detailForm.patchValue({\r\n name: entity.name,\r\n description: entity.description,\r\n });\r\n if (this.customFields.length) {\r\n this.setCustomFieldFormValues(this.customFields, this.detailForm.get('customFields'), entity);\r\n }\r\n }\r\n}\r\n","import {\r\n AssignStockLocationsToChannelDocument,\r\n createBulkAssignToChannelAction,\r\n createBulkDeleteAction,\r\n createBulkRemoveFromChannelAction,\r\n DeleteStockLocationsDocument,\r\n DeletionResult,\r\n GetStockLocationListQuery,\r\n ItemOf,\r\n Permission,\r\n RemoveStockLocationsFromChannelDocument,\r\n} from '@vendure/admin-ui/core';\r\nimport { gql } from 'apollo-angular';\r\nimport { map } from 'rxjs/operators';\r\n\r\nconst DELETE_STOCK_LOCATIONS = gql`\r\n mutation DeleteStockLocations($input: [DeleteStockLocationInput!]!) {\r\n deleteStockLocations(input: $input) {\r\n result\r\n message\r\n }\r\n }\r\n`;\r\n\r\nconst ASSIGN_STOCK_LOCATIONS_TO_CHANNEL = gql`\r\n mutation AssignStockLocationsToChannel($input: AssignStockLocationsToChannelInput!) {\r\n assignStockLocationsToChannel(input: $input) {\r\n id\r\n name\r\n }\r\n }\r\n`;\r\n\r\nconst REMOVE_STOCK_LOCATIONS_FROM_CHANNEL = gql`\r\n mutation RemoveStockLocationsFromChannel($input: RemoveStockLocationsFromChannelInput!) {\r\n removeStockLocationsFromChannel(input: $input) {\r\n id\r\n name\r\n }\r\n }\r\n`;\r\n\r\nexport const deleteStockLocationsBulkAction = createBulkDeleteAction<\r\n ItemOf<GetStockLocationListQuery, 'stockLocations'>\r\n>({\r\n location: 'stock-location-list',\r\n requiresPermission: userPermissions =>\r\n userPermissions.includes(Permission.DeleteStockLocation) ||\r\n userPermissions.includes(Permission.DeleteCatalog),\r\n getItemName: item => item.name,\r\n bulkDelete: (dataService, ids) =>\r\n dataService\r\n .mutate(DeleteStockLocationsDocument, {\r\n input: ids.map(id => ({ id })),\r\n })\r\n .pipe(map(res => res.deleteStockLocations)),\r\n shouldRetryItem: response => response.result === DeletionResult.NOT_DELETED,\r\n});\r\n\r\nexport const assignStockLocationsToChannelBulkAction = createBulkAssignToChannelAction<\r\n ItemOf<GetStockLocationListQuery, 'stockLocations'>\r\n>({\r\n location: 'stock-location-list',\r\n requiresPermission: userPermissions =>\r\n userPermissions.includes(Permission.UpdateCatalog) ||\r\n userPermissions.includes(Permission.UpdateStockLocation),\r\n getItemName: item => item.name,\r\n bulkAssignToChannel: (dataService, stockLocationIds, channelId) =>\r\n dataService\r\n .mutate(AssignStockLocationsToChannelDocument, {\r\n input: {\r\n channelId,\r\n stockLocationIds,\r\n },\r\n })\r\n .pipe(map(res => res.assignStockLocationsToChannel)),\r\n});\r\n\r\nexport const removeStockLocationsFromChannelBulkAction = createBulkRemoveFromChannelAction<\r\n ItemOf<GetStockLocationListQuery, 'stockLocations'>\r\n>({\r\n location: 'stock-location-list',\r\n requiresPermission: userPermissions =>\r\n userPermissions.includes(Permission.DeleteCatalog) ||\r\n userPermissions.includes(Permission.DeleteStockLocation),\r\n getItemName: item => item.name,\r\n bulkRemoveFromChannel: (dataService, stockLocationIds, channelId) =>\r\n dataService\r\n .mutate(RemoveStockLocationsFromChannelDocument, {\r\n input: {\r\n channelId,\r\n stockLocationIds,\r\n },\r\n })\r\n .pipe(map(res => res.removeStockLocationsFromChannel)),\r\n});\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left> </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"stock-location-list\"></vdr-action-bar-items>\r\n <a\r\n class=\"button primary\"\r\n *vdrIfPermissions=\"['CreateStockLocation']\"\r\n [routerLink]=\"['./', 'create']\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.create-new-stock-location' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n<vdr-data-table-2\r\n class=\"mt-2\"\r\n id=\"stock-location-list\"\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n [filters]=\"filters\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n>\r\n <vdr-bulk-action-menu\r\n locationId=\"stock-location-list\"\r\n [hostComponent]=\"this\"\r\n [selectionManager]=\"selectionManager\"\r\n />\r\n <vdr-dt2-search\r\n [searchTermControl]=\"searchTermControl\"\r\n [searchTermPlaceholder]=\"'catalog.filter-by-name' | translate\"\r\n />\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\" [sort]=\"sorts.get('id')\">\r\n <ng-template let-stockLocation=\"item\">\r\n {{ stockLocation.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.created-at' | translate\" id=\"created-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('createdAt')\"\r\n >\r\n <ng-template let-stockLocation=\"item\">\r\n {{ stockLocation.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.updated-at' | translate\" id=\"updated-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('updatedAt')\"\r\n >\r\n <ng-template let-stockLocation=\"item\">\r\n {{ stockLocation.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.name' | translate\" id=\"name\" [optional]=\"false\" [sort]=\"sorts.get('name')\">\r\n <ng-template let-stockLocation=\"item\">\r\n <a class=\"button-ghost\" [routerLink]=\"['./', stockLocation.id]\"\r\n ><span>{{ stockLocation.name }}</span\r\n ><clr-icon shape=\"arrow right\"\r\n /></a>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.description' | translate\" id=\"description\" [sort]=\"sorts.get('description')\">\r\n <ng-template let-stockLocation=\"item\">\r\n <div class=\"description\" [innerHTML]=\"stockLocation.description\"></div>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-custom-field-column\r\n *ngFor=\"let field of customFields\"\r\n [customField]=\"field\"\r\n [sorts]=\"sorts\" />\r\n</vdr-data-table-2>\r\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport { GetStockLocationListDocument, TypedBaseListComponent } from '@vendure/admin-ui/core';\r\nimport { gql } from 'apollo-angular';\r\n\r\nexport const GET_STOCK_LOCATION_LIST = gql`\r\n query GetStockLocationList($options: StockLocationListOptions) {\r\n stockLocations(options: $options) {\r\n items {\r\n ...StockLocationListItem\r\n }\r\n totalItems\r\n }\r\n }\r\n fragment StockLocationListItem on StockLocation {\r\n id\r\n createdAt\r\n updatedAt\r\n name\r\n description\r\n }\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-stock-location-list',\r\n templateUrl: './stock-location-list.component.html',\r\n styleUrls: ['./stock-location-list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class StockLocationListComponent\r\n extends TypedBaseListComponent<typeof GetStockLocationListDocument, 'stockLocations'>\r\n implements OnInit\r\n{\r\n readonly customFields = this.getCustomFieldConfig('StockLocation');\r\n readonly filters = this.createFilterCollection()\r\n .addIdFilter()\r\n .addDateFilters()\r\n .addFilters([\r\n {\r\n name: 'enabled',\r\n type: { kind: 'text' },\r\n label: _('common.enabled'),\r\n filterField: 'name',\r\n },\r\n {\r\n name: 'sku',\r\n type: { kind: 'text' },\r\n label: _('catalog.sku'),\r\n filterField: 'description',\r\n },\r\n ])\r\n .addCustomFieldFilters(this.customFields)\r\n .connectToRoute(this.route);\r\n\r\n readonly sorts = this.createSortCollection()\r\n .addSorts([\r\n { name: 'id' },\r\n { name: 'createdAt' },\r\n { name: 'updatedAt' },\r\n { name: 'name' },\r\n { name: 'description' },\r\n ])\r\n .addCustomFieldSorts(this.customFields)\r\n .connectToRoute(this.route);\r\n\r\n constructor() {\r\n super();\r\n this.configure({\r\n document: GetStockLocationListDocument,\r\n getItems: data => data.stockLocations,\r\n setVariables: (skip, take) => ({\r\n options: {\r\n skip,\r\n take,\r\n filter: {\r\n name: {\r\n contains: this.searchTermControl.value,\r\n },\r\n ...this.filters.createFilterInput(),\r\n },\r\n sort: this.sorts.createSortInput(),\r\n },\r\n }),\r\n refreshListOnChanges: [this.sorts.valueChanges, this.filters.valueChanges],\r\n });\r\n }\r\n}\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left> </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"tax-category-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"isNew$ | async; else updateButton\"\r\n (click)=\"create()\"\r\n [disabled]=\"!saveButtonEnabled()\"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n [disabled]=\"!saveButtonEnabled()\"\r\n *vdrIfPermissions=\"updatePermission\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </ng-template>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n<form class=\"form\" [formGroup]=\"detailForm\">\r\n <vdr-page-detail-layout>\r\n <vdr-page-detail-sidebar>\r\n <vdr-card *ngIf=\"entity$ | async as entity\">\r\n <vdr-page-entity-info [entity]=\"entity\" />\r\n </vdr-card>\r\n </vdr-page-detail-sidebar>\r\n <vdr-page-block>\r\n <vdr-card>\r\n <div class=\"form-grid\">\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input\r\n id=\"name\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'common.default-tax-category' | translate\" for=\"isDefault\">\r\n <clr-toggle-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n clrToggle\r\n id=\"isDefault\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n formControlName=\"isDefault\"\r\n />\r\n </clr-toggle-wrapper>\r\n </vdr-form-field>\r\n </div>\r\n </vdr-card>\r\n <vdr-card\r\n formGroupName=\"customFields\"\r\n *ngIf=\"customFields.length\"\r\n [title]=\"'common.custom-fields' | translate\"\r\n >\r\n <vdr-tabbed-custom-fields\r\n entityName=\"TaxCategory\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n ></vdr-tabbed-custom-fields>\r\n </vdr-card>\r\n <vdr-custom-detail-component-host\r\n locationId=\"tax-category-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n </vdr-page-block>\r\n </vdr-page-detail-layout>\r\n</form>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { FormBuilder, Validators } from '@angular/forms';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n CreateTaxCategoryInput,\r\n DataService,\r\n getCustomFieldsDefaults,\r\n GetTaxCategoryDetailDocument,\r\n LanguageCode,\r\n NotificationService,\r\n Permission,\r\n TAX_CATEGORY_FRAGMENT,\r\n TaxCategoryFragment,\r\n TypedBaseDetailComponent,\r\n UpdateTaxCategoryInput,\r\n} from '@vendure/admin-ui/core';\r\nimport { gql } from 'apollo-angular';\r\nimport { mergeMap, take } from 'rxjs/operators';\r\n\r\nexport const GET_TAX_CATEGORY_DETAIL = gql`\r\n query GetTaxCategoryDetail($id: ID!) {\r\n taxCategory(id: $id) {\r\n ...TaxCategory\r\n }\r\n }\r\n ${TAX_CATEGORY_FRAGMENT}\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-tax-detail',\r\n templateUrl: './tax-category-detail.component.html',\r\n styleUrls: ['./tax-category-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class TaxCategoryDetailComponent\r\n extends TypedBaseDetailComponent<typeof GetTaxCategoryDetailDocument, 'taxCategory'>\r\n implements OnInit, OnDestroy\r\n{\r\n customFields = this.getCustomFieldConfig('TaxCategory');\r\n detailForm = this.formBuilder.group({\r\n name: ['', Validators.required],\r\n isDefault: false,\r\n customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),\r\n });\r\n readonly updatePermission = [Permission.UpdateSettings, Permission.UpdateTaxCategory];\r\n\r\n constructor(\r\n private changeDetector: ChangeDetectorRef,\r\n protected dataService: DataService,\r\n private formBuilder: FormBuilder,\r\n private notificationService: NotificationService,\r\n ) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n this.init();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroy();\r\n }\r\n\r\n saveButtonEnabled(): boolean {\r\n return this.detailForm.dirty && this.detailForm.valid;\r\n }\r\n\r\n create() {\r\n if (!this.detailForm.dirty) {\r\n return;\r\n }\r\n const formValue = this.detailForm.value;\r\n const input = {\r\n name: formValue.name,\r\n isDefault: formValue.isDefault,\r\n customFields: formValue.customFields,\r\n } as CreateTaxCategoryInput;\r\n this.dataService.settings.createTaxCategory(input).subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-create-success'), {\r\n entity: 'TaxCategory',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n this.router.navigate(['../', data.createTaxCategory.id], { relativeTo: this.route });\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-create-error'), {\r\n entity: 'TaxCategory',\r\n });\r\n },\r\n );\r\n }\r\n\r\n save() {\r\n if (!this.detailForm.dirty) {\r\n return;\r\n }\r\n const formValue = this.detailForm.value;\r\n this.entity$\r\n .pipe(\r\n take(1),\r\n mergeMap(taxCategory => {\r\n const input = {\r\n id: taxCategory.id,\r\n name: formValue.name,\r\n isDefault: formValue.isDefault,\r\n customFields: formValue.customFields,\r\n } as UpdateTaxCategoryInput;\r\n return this.dataService.settings.updateTaxCategory(input);\r\n }),\r\n )\r\n .subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-update-success'), {\r\n entity: 'TaxCategory',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-update-error'), {\r\n entity: 'TaxCategory',\r\n });\r\n },\r\n );\r\n }\r\n\r\n /**\r\n * Update the form values when the entity changes.\r\n */\r\n protected setFormValues(entity: TaxCategoryFragment, languageCode: LanguageCode): void {\r\n this.detailForm.patchValue({\r\n name: entity.name,\r\n isDefault: entity.isDefault,\r\n });\r\n if (this.customFields.length) {\r\n this.setCustomFieldFormValues(this.customFields, this.detailForm.get('customFields'), entity);\r\n }\r\n }\r\n}\r\n","import { createBulkDeleteAction, GetTaxCategoryListQuery, ItemOf, Permission } from '@vendure/admin-ui/core';\r\nimport { map } from 'rxjs/operators';\r\n\r\nexport const deleteTaxCategoriesBulkAction = createBulkDeleteAction<\r\n ItemOf<GetTaxCategoryListQuery, 'taxCategories'>\r\n>({\r\n location: 'tax-category-list',\r\n requiresPermission: userPermissions =>\r\n userPermissions.includes(Permission.DeleteSettings) ||\r\n userPermissions.includes(Permission.DeleteTaxCategory),\r\n getItemName: item => item.name,\r\n bulkDelete: (dataService, ids) =>\r\n dataService.settings.deleteTaxCategories(ids).pipe(map(res => res.deleteTaxCategories)),\r\n});\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left> </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"tax-category-list\"></vdr-action-bar-items>\r\n <a\r\n class=\"btn btn-primary\"\r\n *vdrIfPermissions=\"['CreateSettings', 'CreateTaxCategory']\"\r\n [routerLink]=\"['./', 'create']\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'settings.create-new-tax-category' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n<vdr-data-table-2\r\n id=\"tax-category-list\"\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n [filters]=\"filters\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n>\r\n <vdr-bulk-action-menu\r\n locationId=\"tax-category-list\"\r\n [hostComponent]=\"this\"\r\n [selectionManager]=\"selectionManager\"\r\n />\r\n <vdr-dt2-search\r\n [searchTermControl]=\"searchTermControl\"\r\n [searchTermPlaceholder]=\"'catalog.filter-by-name' | translate\"\r\n />\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\r\n <ng-template let-taxCategory=\"item\">\r\n {{ taxCategory.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.created-at' | translate\" id=\"created-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('createdAt')\"\r\n >\r\n <ng-template let-taxCategory=\"item\">\r\n {{ taxCategory.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.updated-at' | translate\" id=\"updated-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('updatedAt')\"\r\n >\r\n <ng-template let-taxCategory=\"item\">\r\n {{ taxCategory.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.name' | translate\" id=\"name\" [optional]=\"false\" [sort]=\"sorts.get('name')\">\r\n <ng-template let-taxCategory=\"item\">\r\n <a class=\"button-ghost\" [routerLink]=\"['./', taxCategory.id]\"\r\n ><span>{{ taxCategory.name }}</span>\r\n <clr-icon shape=\"arrow right\"></clr-icon>\r\n </a>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.default-tax-category' | translate\" id=\"default-tax-category\">\r\n <ng-template let-taxCategory=\"item\">\r\n <vdr-chip *ngIf=\"taxCategory.isDefault\">{{ 'common.default-tax-category' | translate }}</vdr-chip>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-custom-field-column *ngFor=\"let customField of customFields\" [customField]=\"customField\" [sorts]=\"sorts\" />\r\n</vdr-data-table-2>\r\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n GetTaxCategoryListDocument,\r\n TAX_CATEGORY_FRAGMENT,\r\n TypedBaseListComponent,\r\n} from '@vendure/admin-ui/core';\r\nimport { gql } from 'apollo-angular';\r\n\r\nexport const GET_TAX_CATEGORY_LIST = gql`\r\n query GetTaxCategoryList($options: TaxCategoryListOptions) {\r\n taxCategories(options: $options) {\r\n items {\r\n ...TaxCategory\r\n }\r\n totalItems\r\n }\r\n }\r\n ${TAX_CATEGORY_FRAGMENT}\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-tax-list',\r\n templateUrl: './tax-category-list.component.html',\r\n styleUrls: ['./tax-category-list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class TaxCategoryListComponent extends TypedBaseListComponent<\r\n typeof GetTaxCategoryListDocument,\r\n 'taxCategories'\r\n> {\r\n readonly customFields = this.serverConfigService.getCustomFieldsFor('TaxCategory');\r\n readonly filters = this.createFilterCollection()\r\n .addIdFilter()\r\n .addFilter({\r\n name: 'name',\r\n type: { kind: 'text' },\r\n label: _('common.name'),\r\n filterField: 'name',\r\n })\r\n .addCustomFieldFilters(this.customFields)\r\n .connectToRoute(this.route);\r\n\r\n readonly sorts = this.createSortCollection()\r\n .defaultSort('createdAt', 'DESC')\r\n .addSort({ name: 'createdAt' })\r\n .addSort({ name: 'updatedAt' })\r\n .addSort({ name: 'name' })\r\n .addCustomFieldSorts(this.customFields)\r\n .connectToRoute(this.route);\r\n\r\n constructor() {\r\n super();\r\n super.configure({\r\n document: GetTaxCategoryListDocument,\r\n getItems: data => data.taxCategories,\r\n setVariables: (skip, take) => ({\r\n options: {\r\n skip,\r\n take,\r\n filter: {\r\n name: {\r\n contains: this.searchTermControl.value,\r\n },\r\n ...this.filters.createFilterInput(),\r\n },\r\n sort: this.sorts.createSortInput(),\r\n },\r\n }),\r\n refreshListOnChanges: [this.filters.valueChanges, this.sorts.valueChanges],\r\n });\r\n }\r\n}\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left></vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"tax-rate-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"isNew$ | async; else updateButton\"\r\n (click)=\"create()\"\r\n [disabled]=\"!saveButtonEnabled()\"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n [disabled]=\"!saveButtonEnabled()\"\r\n *vdrIfPermissions=\"updatePermission\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </ng-template>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n\r\n<form class=\"form\" [formGroup]=\"detailForm\">\r\n <vdr-page-detail-layout>\r\n <vdr-page-detail-sidebar>\r\n <vdr-card>\r\n <vdr-form-field [label]=\"'common.enabled' | translate\" for=\"enabled\">\r\n <clr-toggle-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n clrToggle\r\n id=\"enabled\"\r\n formControlName=\"enabled\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </clr-toggle-wrapper>\r\n </vdr-form-field>\r\n </vdr-card>\r\n <vdr-card *ngIf=\"entity$ | async as entity\">\r\n <vdr-page-entity-info [entity]=\"entity\" />\r\n </vdr-card>\r\n </vdr-page-detail-sidebar>\r\n <vdr-page-block>\r\n <vdr-card>\r\n <div class=\"form-grid\">\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input\r\n id=\"name\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'settings.rate' | translate\" for=\"value\">\r\n <vdr-affixed-input suffix=\"%\">\r\n <input\r\n id=\"value\"\r\n type=\"number\"\r\n step=\"0.1\"\r\n formControlName=\"value\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </vdr-affixed-input>\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'settings.tax-category' | translate\" for=\"taxCategoryId\">\r\n <select\r\n name=\"taxCategoryId\"\r\n formControlName=\"taxCategoryId\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n >\r\n <option\r\n *ngFor=\"let taxCategory of taxCategories$ | async\"\r\n [value]=\"taxCategory.id\"\r\n >\r\n {{ taxCategory.name }}\r\n </option>\r\n </select>\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'settings.zone' | translate\" for=\"zoneId\">\r\n <vdr-zone-selector\r\n name=\"zoneId\"\r\n formControlName=\"zoneId\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n >\r\n </vdr-zone-selector>\r\n </vdr-form-field>\r\n </div>\r\n </vdr-card>\r\n <vdr-card\r\n formGroupName=\"customFields\"\r\n *ngIf=\"customFields.length\"\r\n [title]=\"'common.custom-fields' | translate\"\r\n >\r\n <vdr-tabbed-custom-fields\r\n entityName=\"TaxRate\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n ></vdr-tabbed-custom-fields>\r\n </vdr-card>\r\n <vdr-custom-detail-component-host\r\n locationId=\"tax-rate-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n </vdr-page-block>\r\n </vdr-page-detail-layout>\r\n</form>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { FormBuilder, Validators } from '@angular/forms';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n CreateTaxRateInput,\r\n CustomerGroup,\r\n DataService,\r\n getCustomFieldsDefaults,\r\n GetTaxRateDetailDocument,\r\n LanguageCode,\r\n NotificationService,\r\n Permission,\r\n TAX_RATE_FRAGMENT,\r\n TaxCategoryFragment,\r\n TaxRateFragment,\r\n TypedBaseDetailComponent,\r\n UpdateTaxRateInput,\r\n} from '@vendure/admin-ui/core';\r\nimport { gql } from 'apollo-angular';\r\nimport { Observable } from 'rxjs';\r\nimport { mergeMap, take } from 'rxjs/operators';\r\n\r\nexport const GET_TAX_RATE_DETAIL = gql`\r\n query GetTaxRateDetail($id: ID!) {\r\n taxRate(id: $id) {\r\n ...TaxRate\r\n }\r\n }\r\n ${TAX_RATE_FRAGMENT}\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-tax-rate-detail',\r\n templateUrl: './tax-rate-detail.component.html',\r\n styleUrls: ['./tax-rate-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class TaxRateDetailComponent\r\n extends TypedBaseDetailComponent<typeof GetTaxRateDetailDocument, 'taxRate'>\r\n implements OnInit, OnDestroy\r\n{\r\n customFields = this.getCustomFieldConfig('TaxRate');\r\n detailForm = this.formBuilder.group({\r\n name: ['', Validators.required],\r\n enabled: [true],\r\n value: [0, Validators.required],\r\n taxCategoryId: ['', Validators.required],\r\n zoneId: ['', Validators.required],\r\n customerGroupId: [''],\r\n customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),\r\n });\r\n taxCategories$: Observable<TaxCategoryFragment[]>;\r\n groups$: Observable<CustomerGroup[]>;\r\n readonly updatePermission = [Permission.UpdateSettings, Permission.UpdateTaxRate];\r\n\r\n constructor(\r\n private changeDetector: ChangeDetectorRef,\r\n protected dataService: DataService,\r\n private formBuilder: FormBuilder,\r\n private notificationService: NotificationService,\r\n ) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n this.init();\r\n this.taxCategories$ = this.dataService.settings\r\n .getTaxCategories({ take: 100 })\r\n .mapSingle(data => data.taxCategories.items);\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroy();\r\n }\r\n\r\n saveButtonEnabled(): boolean {\r\n return this.detailForm.dirty && this.detailForm.valid;\r\n }\r\n\r\n create() {\r\n if (!this.detailForm.dirty) {\r\n return;\r\n }\r\n const { name, enabled, value, taxCategoryId, zoneId, customerGroupId, customFields } =\r\n this.detailForm.value;\r\n if (!name || enabled == null || value == null || !taxCategoryId || !zoneId) {\r\n return;\r\n }\r\n const formValue = this.detailForm.value;\r\n const input = {\r\n name,\r\n enabled,\r\n value,\r\n categoryId: taxCategoryId,\r\n zoneId,\r\n customerGroupId: formValue.customerGroupId,\r\n customFields: formValue.customFields,\r\n } satisfies CreateTaxRateInput;\r\n this.dataService.settings.createTaxRate(input).subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-create-success'), {\r\n entity: 'TaxRate',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n this.router.navigate(['../', data.createTaxRate.id], { relativeTo: this.route });\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-create-error'), {\r\n entity: 'TaxRate',\r\n });\r\n },\r\n );\r\n }\r\n\r\n save() {\r\n if (!this.detailForm.dirty) {\r\n return;\r\n }\r\n const formValue = this.detailForm.value;\r\n this.entity$\r\n .pipe(\r\n take(1),\r\n mergeMap(taxRate => {\r\n const input = {\r\n id: taxRate.id,\r\n name: formValue.name,\r\n enabled: formValue.enabled,\r\n value: formValue.value,\r\n categoryId: formValue.taxCategoryId,\r\n zoneId: formValue.zoneId,\r\n customerGroupId: formValue.customerGroupId,\r\n customFields: formValue.customFields,\r\n } satisfies UpdateTaxRateInput;\r\n return this.dataService.settings.updateTaxRate(input);\r\n }),\r\n )\r\n .subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-update-success'), {\r\n entity: 'TaxRate',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-update-error'), {\r\n entity: 'TaxRate',\r\n });\r\n },\r\n );\r\n }\r\n\r\n /**\r\n * Update the form values when the entity changes.\r\n */\r\n protected setFormValues(entity: TaxRateFragment, languageCode: LanguageCode): void {\r\n this.detailForm.patchValue({\r\n name: entity.name,\r\n enabled: entity.enabled,\r\n value: entity.value,\r\n taxCategoryId: entity.category ? entity.category.id : '',\r\n zoneId: entity.zone ? entity.zone.id : '',\r\n customerGroupId: entity.customerGroup ? entity.customerGroup.id : '',\r\n });\r\n if (this.customFields.length) {\r\n this.setCustomFieldFormValues(this.customFields, this.detailForm.get('customFields'), entity);\r\n }\r\n }\r\n}\r\n","import { createBulkDeleteAction, GetTaxRateListQuery, ItemOf, Permission } from '@vendure/admin-ui/core';\r\nimport { map } from 'rxjs/operators';\r\n\r\nexport const deleteTaxRatesBulkAction = createBulkDeleteAction<ItemOf<GetTaxRateListQuery, 'taxRates'>>({\r\n location: 'tax-rate-list',\r\n requiresPermission: userPermissions =>\r\n userPermissions.includes(Permission.DeleteSettings) ||\r\n userPermissions.includes(Permission.DeleteTaxRate),\r\n getItemName: item => item.name,\r\n bulkDelete: (dataService, ids) =>\r\n dataService.settings.deleteTaxRates(ids).pipe(map(res => res.deleteTaxRates)),\r\n});\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left> </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"tax-rate-list\"></vdr-action-bar-items>\r\n <a\r\n class=\"btn btn-primary\"\r\n *vdrIfPermissions=\"['CreateSettings', 'CreateTaxRate']\"\r\n [routerLink]=\"['./', 'create']\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'settings.create-new-tax-rate' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n<vdr-data-table-2\r\n id=\"tax-rate-list\"\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n [filters]=\"filters\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n>\r\n <vdr-bulk-action-menu\r\n locationId=\"tax-rate-list\"\r\n [hostComponent]=\"this\"\r\n [selectionManager]=\"selectionManager\"\r\n />\r\n <vdr-dt2-search\r\n [searchTermControl]=\"searchTermControl\"\r\n [searchTermPlaceholder]=\"'catalog.filter-by-name' | translate\"\r\n />\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\r\n <ng-template let-taxRate=\"item\">\r\n {{ taxRate.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.created-at' | translate\" id=\"created-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('createdAt')\"\r\n >\r\n <ng-template let-taxRate=\"item\">\r\n {{ taxRate.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.updated-at' | translate\" id=\"updated-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('updatedAt')\"\r\n >\r\n <ng-template let-taxRate=\"item\">\r\n {{ taxRate.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.name' | translate\" id=\"name\" [optional]=\"false\" [sort]=\"sorts.get('name')\">\r\n <ng-template let-taxRate=\"item\">\r\n <a class=\"button-ghost\" [routerLink]=\"['./', taxRate.id]\"\r\n ><span>{{ taxRate.name }}</span>\r\n <clr-icon shape=\"arrow right\"></clr-icon>\r\n </a>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'settings.tax-category' | translate\" id=\"tax-category\">\r\n <ng-template let-taxRate=\"item\">\r\n {{ taxRate.category.name }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'settings.zone' | translate\" id=\"zone\">\r\n <ng-template let-taxRate=\"item\">\r\n {{ taxRate.zone.name }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'customer.customer-group' | translate\" id=\"customer-group\" [hiddenByDefault]=\"true\">\r\n <ng-template let-taxRate=\"item\">\r\n {{ taxRate.customerGroup?.name }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'settings.tax-rate' | translate\" id=\"tax-rate\" [sort]=\"sorts.get('value')\">\r\n <ng-template let-taxRate=\"item\"> {{ taxRate.value }}% </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.enabled' | translate\" id=\"enabled\">\r\n <ng-template let-taxRate=\"item\">\r\n <vdr-chip *ngIf=\"taxRate.enabled\" colorType=\"success\">{{\r\n 'common.enabled' | translate\r\n }}</vdr-chip>\r\n <vdr-chip *ngIf=\"!taxRate.enabled\" colorType=\"warning\">{{\r\n 'common.disabled' | translate\r\n }}</vdr-chip>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-custom-field-column *ngFor=\"let customField of customFields\" [customField]=\"customField\" [sorts]=\"sorts\" />\r\n</vdr-data-table-2>\r\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport { GetTaxRateListDocument, TAX_RATE_FRAGMENT, TypedBaseListComponent } from '@vendure/admin-ui/core';\r\nimport { gql } from 'apollo-angular';\r\n\r\nexport const GET_TAX_RATE_LIST = gql`\r\n query GetTaxRateList($options: TaxRateListOptions) {\r\n taxRates(options: $options) {\r\n items {\r\n ...TaxRate\r\n }\r\n totalItems\r\n }\r\n }\r\n ${TAX_RATE_FRAGMENT}\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-tax-rate-list',\r\n templateUrl: './tax-rate-list.component.html',\r\n styleUrls: ['./tax-rate-list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class TaxRateListComponent extends TypedBaseListComponent<typeof GetTaxRateListDocument, 'taxRates'> {\r\n readonly customFields = this.getCustomFieldConfig('TaxRate');\r\n readonly filters = this.createFilterCollection()\r\n .addIdFilter()\r\n .addDateFilters()\r\n .addFilter({\r\n name: 'name',\r\n type: { kind: 'text' },\r\n label: _('common.name'),\r\n filterField: 'name',\r\n })\r\n .addFilter({\r\n name: 'enabled',\r\n type: { kind: 'boolean' },\r\n label: _('common.enabled'),\r\n filterField: 'enabled',\r\n })\r\n .addFilter({\r\n name: 'value',\r\n type: { kind: 'number' },\r\n label: _('common.value'),\r\n filterField: 'value',\r\n })\r\n .addCustomFieldFilters(this.customFields)\r\n .connectToRoute(this.route);\r\n\r\n readonly sorts = this.createSortCollection()\r\n .defaultSort('createdAt', 'DESC')\r\n .addSort({ name: 'createdAt' })\r\n .addSort({ name: 'updatedAt' })\r\n .addSort({ name: 'name' })\r\n .addSort({ name: 'value' })\r\n .addCustomFieldSorts(this.customFields)\r\n .connectToRoute(this.route);\r\n\r\n constructor() {\r\n super();\r\n super.configure({\r\n document: GetTaxRateListDocument,\r\n getItems: data => data.taxRates,\r\n setVariables: (skip, take) => ({\r\n options: {\r\n skip,\r\n take,\r\n filter: {\r\n name: {\r\n contains: this.searchTermControl.value,\r\n },\r\n ...this.filters.createFilterInput(),\r\n },\r\n sort: this.sorts.createSortInput(),\r\n },\r\n }),\r\n refreshListOnChanges: [this.filters.valueChanges, this.sorts.valueChanges],\r\n });\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport {\r\n DataService,\r\n GetActiveChannelQuery,\r\n ShippingMethodQuote,\r\n TestEligibleShippingMethodsInput,\r\n} from '@vendure/admin-ui/core';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { switchMap } from 'rxjs/operators';\r\nimport { TestAddress } from '../test-address-form/test-address-form.component';\r\nimport { TestOrderLine } from '../test-order-builder/test-order-builder.component';\r\n\r\n@Component({\r\n selector: 'vdr-test-shipping-methods',\r\n templateUrl: './test-shipping-methods.component.html',\r\n styleUrls: ['./test-shipping-methods.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class TestShippingMethodsComponent implements OnInit {\r\n activeChannel$: Observable<GetActiveChannelQuery['activeChannel']>;\r\n testAddress: TestAddress;\r\n testOrderLines: TestOrderLine[];\r\n testDataUpdated = false;\r\n testResult$: Observable<ShippingMethodQuote[] | undefined>;\r\n private fetchTestResult$ = new Subject<[TestAddress, TestOrderLine[]]>();\r\n\r\n constructor(private dataService: DataService) {}\r\n\r\n ngOnInit() {\r\n this.activeChannel$ = this.dataService.settings\r\n .getActiveChannel()\r\n .mapStream(data => data.activeChannel);\r\n this.testResult$ = this.fetchTestResult$.pipe(\r\n switchMap(([address, lines]) => {\r\n const input: TestEligibleShippingMethodsInput = {\r\n shippingAddress: { ...address, streetLine1: 'test' },\r\n lines: lines.map(l => ({ productVariantId: l.id, quantity: l.quantity })),\r\n };\r\n return this.dataService.shippingMethod\r\n .testEligibleShippingMethods(input)\r\n .mapSingle(result => result.testEligibleShippingMethods);\r\n }),\r\n );\r\n }\r\n\r\n setTestOrderLines(event: TestOrderLine[]) {\r\n this.testOrderLines = event;\r\n this.testDataUpdated = true;\r\n }\r\n\r\n setTestAddress(event: TestAddress) {\r\n this.testAddress = event;\r\n this.testDataUpdated = true;\r\n }\r\n\r\n allTestDataPresent(): boolean {\r\n return !!(this.testAddress && this.testOrderLines && this.testOrderLines.length);\r\n }\r\n\r\n runTest() {\r\n this.fetchTestResult$.next([this.testAddress, this.testOrderLines]);\r\n this.testDataUpdated = false;\r\n }\r\n}\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left> </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"zone-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"isNew$ | async; else updateButton\"\r\n (click)=\"create()\"\r\n [disabled]=\"!saveButtonEnabled()\"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n [disabled]=\"!saveButtonEnabled()\"\r\n *vdrIfPermissions=\"updatePermission\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </ng-template>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n<form class=\"form\" [formGroup]=\"detailForm\">\r\n <vdr-page-detail-layout>\r\n <vdr-page-detail-sidebar>\r\n <vdr-card *ngIf=\"entity$ | async as entity\">\r\n <vdr-page-entity-info [entity]=\"entity\" />\r\n </vdr-card>\r\n </vdr-page-detail-sidebar>\r\n <vdr-page-block>\r\n <vdr-card>\r\n <div class=\"form-grid\">\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input\r\n id=\"name\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n </div>\r\n </vdr-card>\r\n <vdr-card\r\n formGroupName=\"customFields\"\r\n *ngIf=\"customFields.length\"\r\n [title]=\"'common.custom-fields' | translate\"\r\n >\r\n <vdr-tabbed-custom-fields\r\n entityName=\"Zone\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n ></vdr-tabbed-custom-fields>\r\n </vdr-card>\r\n <vdr-custom-detail-component-host\r\n locationId=\"zone-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n </vdr-page-block>\r\n </vdr-page-detail-layout>\r\n</form>\r\n","<vdr-page-block>\r\n <div class=\"test-wrapper\">\r\n <div class=\"\">\r\n <vdr-test-order-builder (orderLinesChange)=\"setTestOrderLines($event)\"></vdr-test-order-builder>\r\n </div>\r\n <div class=\"\">\r\n <vdr-test-address-form (addressChange)=\"setTestAddress($event)\"></vdr-test-address-form>\r\n <vdr-shipping-eligibility-test-result\r\n class=\"mt-1\"\r\n [currencyCode]=\"(activeChannel$ | async)?.currencyCode\"\r\n [okToRun]=\"allTestDataPresent()\"\r\n [testDataUpdated]=\"testDataUpdated\"\r\n [testResult]=\"testResult$ | async\"\r\n (runTest)=\"runTest()\"\r\n ></vdr-shipping-eligibility-test-result>\r\n </div>\r\n </div>\r\n</vdr-page-block>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { FormBuilder, Validators } from '@angular/forms';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n CreateZoneInput,\r\n DataService,\r\n getCustomFieldsDefaults,\r\n GetZoneDetailDocument,\r\n GetZoneDetailQuery,\r\n LanguageCode,\r\n NotificationService,\r\n Permission,\r\n TypedBaseDetailComponent,\r\n UpdateTaxCategoryInput,\r\n} from '@vendure/admin-ui/core';\r\nimport { gql } from 'apollo-angular';\r\nimport { mergeMap, take } from 'rxjs/operators';\r\n\r\nexport const GET_ZONE_DETAIL = gql`\r\n query GetZoneDetail($id: ID!) {\r\n zone(id: $id) {\r\n ...ZoneDetail\r\n }\r\n }\r\n fragment ZoneDetail on Zone {\r\n id\r\n createdAt\r\n updatedAt\r\n name\r\n }\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-zone-detail',\r\n templateUrl: './zone-detail.component.html',\r\n styleUrls: ['./zone-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ZoneDetailComponent\r\n extends TypedBaseDetailComponent<typeof GetZoneDetailDocument, 'zone'>\r\n implements OnInit, OnDestroy\r\n{\r\n customFields = this.getCustomFieldConfig('Zone');\r\n detailForm = this.formBuilder.group({\r\n name: ['', Validators.required],\r\n customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),\r\n });\r\n readonly updatePermission = [Permission.UpdateSettings, Permission.UpdateZone];\r\n\r\n constructor(\r\n private changeDetector: ChangeDetectorRef,\r\n protected dataService: DataService,\r\n private formBuilder: FormBuilder,\r\n private notificationService: NotificationService,\r\n ) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n this.init();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroy();\r\n }\r\n\r\n saveButtonEnabled(): boolean {\r\n return this.detailForm.dirty && this.detailForm.valid;\r\n }\r\n\r\n create() {\r\n if (!this.detailForm.dirty) {\r\n return;\r\n }\r\n const { name, customFields } = this.detailForm.value;\r\n if (!name) {\r\n return;\r\n }\r\n const input = {\r\n name,\r\n customFields,\r\n } satisfies CreateZoneInput;\r\n this.dataService.settings.createZone(input).subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-create-success'), {\r\n entity: 'Zone',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n this.router.navigate(['../', data.createZone.id], { relativeTo: this.route });\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-create-error'), {\r\n entity: 'Zone',\r\n });\r\n },\r\n );\r\n }\r\n\r\n save() {\r\n if (!this.detailForm.dirty) {\r\n return;\r\n }\r\n const formValue = this.detailForm.value;\r\n this.entity$\r\n .pipe(\r\n take(1),\r\n mergeMap(zone => {\r\n const input = {\r\n id: zone.id,\r\n name: formValue.name,\r\n customFields: formValue.customFields,\r\n } satisfies UpdateTaxCategoryInput;\r\n return this.dataService.settings.updateZone(input);\r\n }),\r\n )\r\n .subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-update-success'), {\r\n entity: 'Zone',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-update-error'), {\r\n entity: 'Zone',\r\n });\r\n },\r\n );\r\n }\r\n\r\n /**\r\n * Update the form values when the entity changes.\r\n */\r\n protected setFormValues(\r\n entity: NonNullable<GetZoneDetailQuery['zone']>,\r\n languageCode: LanguageCode,\r\n ): void {\r\n this.detailForm.patchValue({\r\n name: entity.name,\r\n });\r\n if (this.customFields.length) {\r\n this.setCustomFieldFormValues(this.customFields, this.detailForm.get('customFields'), entity);\r\n }\r\n }\r\n}\r\n","import { createBulkDeleteAction, GetZoneListQuery, ItemOf, Permission } from '@vendure/admin-ui/core';\r\nimport { map } from 'rxjs/operators';\r\n\r\nexport const deleteZonesBulkAction = createBulkDeleteAction<ItemOf<GetZoneListQuery, 'zones'>>({\r\n location: 'zone-list',\r\n requiresPermission: userPermissions =>\r\n userPermissions.includes(Permission.DeleteSettings) ||\r\n userPermissions.includes(Permission.DeleteZone),\r\n getItemName: item => item.name,\r\n bulkDelete: (dataService, ids) => dataService.settings.deleteZones(ids).pipe(map(res => res.deleteZones)),\r\n});\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-language-selector\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"contentLanguage$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n /></vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"zone-list\"></vdr-action-bar-items>\r\n <a\r\n class=\"btn btn-primary\"\r\n *vdrIfPermissions=\"['CreateSettings', 'CreateZone']\"\r\n [routerLink]=\"['./', 'create']\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'settings.create-new-zone' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n<vdr-split-view [rightPanelOpen]=\"activeZone$ | async\" (closeClicked)=\"closeMembers()\">\r\n <ng-template vdrSplitViewLeft>\r\n <vdr-data-table-2\r\n id=\"zone-list\"\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n [filters]=\"filters\"\r\n [activeIndex]=\"activeIndex$ | async\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n >\r\n <vdr-bulk-action-menu\r\n locationId=\"zone-list\"\r\n [hostComponent]=\"this\"\r\n [selectionManager]=\"selectionManager\"\r\n />\r\n <vdr-dt2-search\r\n [searchTermControl]=\"searchTermControl\"\r\n [searchTermPlaceholder]=\"'common.search-by-name' | translate\"\r\n />\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\r\n <ng-template let-customerGroup=\"item\">\r\n {{ customerGroup.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.created-at' | translate\" id=\"created-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('createdAt')\"\r\n >\r\n <ng-template let-customerGroup=\"item\">\r\n {{ customerGroup.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.updated-at' | translate\" id=\"updated-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('updatedAt')\"\r\n >\r\n <ng-template let-customerGroup=\"item\">\r\n {{ customerGroup.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.name' | translate\" id=\"name\"\r\n [optional]=\"false\"\r\n [sort]=\"sorts.get('name')\"\r\n >\r\n <ng-template let-customerGroup=\"item\">\r\n <a class=\"button-ghost\" [routerLink]=\"['./', customerGroup.id]\"\r\n ><span>{{ customerGroup.name }}</span>\r\n <clr-icon shape=\"arrow right\"></clr-icon>\r\n </a>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.view-contents' | translate\" id=\"view-contents\" [optional]=\"false\">\r\n <ng-template let-customerGroup=\"item\">\r\n <a\r\n class=\"button-small bg-weight-150\"\r\n [routerLink]=\"['./', { contents: customerGroup.id }]\"\r\n queryParamsHandling=\"preserve\"\r\n >\r\n <span>{{ 'settings.view-zone-members' | translate }}</span>\r\n <clr-icon shape=\"file-group\"></clr-icon>\r\n </a>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-custom-field-column\r\n *ngFor=\"let customField of customFields\"\r\n [customField]=\"customField\"\r\n [sort]=\"sorts\"\r\n />\r\n </vdr-data-table-2>\r\n </ng-template>\r\n <ng-template vdrSplitViewRight [splitViewTitle]=\"(activeZone$ | async)?.name\">\r\n <ng-container *ngIf=\"activeZone$ | async as activeZone\">\r\n <button class=\"button-ghost ml-4\" (click)=\"addToZone(activeZone)\">\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n <span>{{\r\n 'settings.add-countries-to-zone' | translate : { zoneName: activeZone.name }\r\n }}</span>\r\n </button>\r\n <vdr-zone-member-list\r\n *ngIf=\"activeZone$ | async as activeZone\"\r\n locationId=\"zone-members-list\"\r\n [selectedMemberIds]=\"selectedMemberIds\"\r\n [activeZone]=\"activeZone\"\r\n (selectionChange)=\"selectedMemberIds = $event\"\r\n />\r\n </ng-container>\r\n </ng-template>\r\n</vdr-split-view>\r\n","import { ChangeDetectionStrategy, Component, OnInit, ViewChild } from '@angular/core';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n DataService,\r\n GetZoneListDocument,\r\n GetZoneListQuery,\r\n ItemOf,\r\n LanguageCode,\r\n LogicalOperator,\r\n ModalService,\r\n NotificationService,\r\n TypedBaseListComponent,\r\n} from '@vendure/admin-ui/core';\r\nimport { gql } from 'apollo-angular';\r\nimport { combineLatest, EMPTY, Observable } from 'rxjs';\r\nimport { distinctUntilChanged, map, mapTo, switchMap, tap } from 'rxjs/operators';\r\n\r\nimport { AddCountryToZoneDialogComponent } from '../add-country-to-zone-dialog/add-country-to-zone-dialog.component';\r\nimport { ZoneMemberListComponent } from '../zone-member-list/zone-member-list.component';\r\n\r\nexport const GET_ZONE_LIST = gql`\r\n query GetZoneList($options: ZoneListOptions) {\r\n zones(options: $options) {\r\n items {\r\n ...ZoneListItem\r\n }\r\n totalItems\r\n }\r\n }\r\n fragment ZoneListItem on Zone {\r\n id\r\n createdAt\r\n updatedAt\r\n name\r\n }\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-zone-list',\r\n templateUrl: './zone-list.component.html',\r\n styleUrls: ['./zone-list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ZoneListComponent\r\n extends TypedBaseListComponent<typeof GetZoneListDocument, 'zones'>\r\n implements OnInit\r\n{\r\n activeZone$: Observable<ItemOf<GetZoneListQuery, 'zones'> | undefined>;\r\n activeIndex$: Observable<number>;\r\n selectedMemberIds: string[] = [];\r\n @ViewChild(ZoneMemberListComponent) zoneMemberList: ZoneMemberListComponent;\r\n readonly customFields = this.serverConfigService.getCustomFieldsFor('Zone');\r\n readonly filters = this.createFilterCollection()\r\n .addIdFilter()\r\n .addDateFilters()\r\n .addFilter({\r\n name: 'name',\r\n type: { kind: 'text' },\r\n label: _('common.name'),\r\n filterField: 'name',\r\n })\r\n .addCustomFieldFilters(this.customFields)\r\n .connectToRoute(this.route);\r\n\r\n readonly sorts = this.createSortCollection()\r\n .defaultSort('createdAt', 'DESC')\r\n .addSort({ name: 'createdAt' })\r\n .addSort({ name: 'updatedAt' })\r\n .addSort({ name: 'name' })\r\n .addCustomFieldSorts(this.customFields)\r\n .connectToRoute(this.route);\r\n\r\n constructor(\r\n protected dataService: DataService,\r\n private notificationService: NotificationService,\r\n private modalService: ModalService,\r\n ) {\r\n super();\r\n super.configure({\r\n document: GetZoneListDocument,\r\n getItems: data => data.zones,\r\n setVariables: (skip, take) => ({\r\n options: {\r\n skip,\r\n take,\r\n filter: {\r\n name: {\r\n contains: this.searchTermControl.value,\r\n },\r\n ...this.filters.createFilterInput(),\r\n },\r\n filterOperator: this.searchTermControl.value ? LogicalOperator.OR : LogicalOperator.AND,\r\n sort: this.sorts.createSortInput(),\r\n },\r\n }),\r\n refreshListOnChanges: [this.filters.valueChanges, this.sorts.valueChanges],\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n super.ngOnInit();\r\n const activeZoneId$ = this.route.paramMap.pipe(\r\n map(pm => pm.get('contents')),\r\n distinctUntilChanged(),\r\n tap(() => (this.selectedMemberIds = [])),\r\n );\r\n this.activeZone$ = combineLatest(this.items$, activeZoneId$).pipe(\r\n map(([zones, activeZoneId]) => {\r\n if (activeZoneId) {\r\n return zones.find(z => z.id === activeZoneId);\r\n }\r\n }),\r\n );\r\n this.activeIndex$ = combineLatest(this.items$, activeZoneId$).pipe(\r\n map(([zones, activeZoneId]) => {\r\n if (activeZoneId) {\r\n return zones.findIndex(g => g.id === activeZoneId);\r\n } else {\r\n return -1;\r\n }\r\n }),\r\n );\r\n }\r\n\r\n setLanguage(code: LanguageCode) {\r\n this.dataService.client.setContentLanguage(code).subscribe();\r\n }\r\n\r\n closeMembers() {\r\n const params = { ...this.route.snapshot.params };\r\n delete params.contents;\r\n this.router.navigate(['./', params], { relativeTo: this.route, queryParamsHandling: 'preserve' });\r\n }\r\n\r\n addToZone(zone: ItemOf<GetZoneListQuery, 'zones'>) {\r\n this.modalService\r\n .fromComponent(AddCountryToZoneDialogComponent, {\r\n locals: {\r\n zoneName: zone.name,\r\n zoneId: zone.id,\r\n },\r\n size: 'md',\r\n })\r\n .pipe(\r\n switchMap(memberIds =>\r\n memberIds\r\n ? this.dataService.settings\r\n .addMembersToZone(zone.id, memberIds)\r\n .pipe(mapTo(memberIds))\r\n : EMPTY,\r\n ),\r\n )\r\n .subscribe({\r\n next: result => {\r\n this.notificationService.success(_(`settings.add-countries-to-zone-success`), {\r\n countryCount: result.length,\r\n zoneName: zone.name,\r\n });\r\n this.refreshMemberList();\r\n },\r\n error: err => {\r\n this.notificationService.error(err);\r\n },\r\n });\r\n }\r\n\r\n refreshMemberList() {\r\n this.zoneMemberList?.refresh();\r\n }\r\n}\r\n","import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport { BulkAction, DataService, NotificationService, Permission } from '@vendure/admin-ui/core';\r\nimport { ZoneMember, ZoneMemberListComponent } from './zone-member-list.component';\r\n\r\nexport const removeZoneMembersBulkAction: BulkAction<ZoneMember, ZoneMemberListComponent> = {\r\n location: 'zone-members-list',\r\n label: _('settings.remove-from-zone'),\r\n icon: 'trash',\r\n iconClass: 'is-danger',\r\n requiresPermission: Permission.UpdateCustomerGroup,\r\n onClick: ({ injector, selection, hostComponent, clearSelection }) => {\r\n const dataService = injector.get(DataService);\r\n const notificationService = injector.get(NotificationService);\r\n\r\n const zone = hostComponent.activeZone;\r\n const memberIds = selection.map(s => s.id);\r\n\r\n dataService.settings.removeMembersFromZone(zone.id, memberIds).subscribe({\r\n complete: () => {\r\n notificationService.success(_(`settings.remove-countries-from-zone-success`), {\r\n countryCount: memberIds.length,\r\n zoneName: zone.name,\r\n });\r\n hostComponent.refresh();\r\n clearSelection();\r\n },\r\n });\r\n },\r\n};\r\n","import { Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { AdministratorFragment, BaseEntityResolver, DataService } from '@vendure/admin-ui/core';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ProfileResolver extends BaseEntityResolver<AdministratorFragment> {\r\n constructor(router: Router, dataService: DataService) {\r\n super(\r\n router,\r\n {\r\n __typename: 'Administrator' as const,\r\n id: '',\r\n createdAt: '',\r\n updatedAt: '',\r\n emailAddress: '',\r\n firstName: '',\r\n lastName: '',\r\n user: { roles: [] } as any,\r\n },\r\n id =>\r\n dataService.administrator\r\n .getActiveAdministrator()\r\n .mapStream(data => data.activeAdministrator),\r\n );\r\n }\r\n}\r\n","import { inject } from '@angular/core';\r\nimport { Route } from '@angular/router';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n DataService,\r\n GetGlobalSettingsDetailDocument,\r\n GetProfileDetailDocument,\r\n PageComponent,\r\n PageService,\r\n} from '@vendure/admin-ui/core';\r\nimport { of } from 'rxjs';\r\n\r\nexport const createRoutes = (pageService: PageService): Route[] => [\r\n {\r\n path: 'profile',\r\n component: PageComponent,\r\n data: {\r\n breadcrumb: _('breadcrumb.profile'),\r\n },\r\n resolve: {\r\n detail: () =>\r\n inject(DataService)\r\n .query(GetProfileDetailDocument)\r\n .mapSingle(data => ({ entity: of(data.activeAdministrator) })),\r\n },\r\n children: pageService.getPageTabRoutes('profile'),\r\n },\r\n {\r\n path: 'administrators',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'administrator-list',\r\n breadcrumb: _('breadcrumb.administrators'),\r\n },\r\n children: pageService.getPageTabRoutes('administrator-list'),\r\n },\r\n {\r\n path: 'administrators/:id',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'administrator-detail',\r\n breadcrumb: { label: _('breadcrumb.administrators'), link: ['../', 'administrators'] },\r\n },\r\n children: pageService.getPageTabRoutes('administrator-detail'),\r\n },\r\n {\r\n path: 'channels',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'channel-list',\r\n breadcrumb: _('breadcrumb.channels'),\r\n },\r\n children: pageService.getPageTabRoutes('channel-list'),\r\n },\r\n {\r\n path: 'channels/:id',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'channel-list',\r\n breadcrumb: { label: _('breadcrumb.channels'), link: ['../', 'channels'] },\r\n },\r\n children: pageService.getPageTabRoutes('channel-detail'),\r\n },\r\n {\r\n path: 'stock-locations',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'stock-location-list',\r\n breadcrumb: _('breadcrumb.stock-locations'),\r\n },\r\n children: pageService.getPageTabRoutes('stock-location-list'),\r\n },\r\n {\r\n path: 'stock-locations/:id',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'stock-location-list',\r\n breadcrumb: { label: _('breadcrumb.stock-locations'), link: ['../', 'stock-locations'] },\r\n },\r\n children: pageService.getPageTabRoutes('stock-location-detail'),\r\n },\r\n {\r\n path: 'sellers',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'seller-list',\r\n breadcrumb: _('breadcrumb.sellers'),\r\n },\r\n children: pageService.getPageTabRoutes('seller-list'),\r\n },\r\n {\r\n path: 'sellers/:id',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'seller-list',\r\n breadcrumb: { label: _('breadcrumb.sellers'), link: ['../', 'sellers'] },\r\n },\r\n children: pageService.getPageTabRoutes('seller-detail'),\r\n },\r\n {\r\n path: 'roles',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'role-list',\r\n breadcrumb: _('breadcrumb.roles'),\r\n },\r\n children: pageService.getPageTabRoutes('role-list'),\r\n },\r\n {\r\n path: 'roles/:id',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'role-detail',\r\n breadcrumb: { label: _('breadcrumb.roles'), link: ['../', 'roles'] },\r\n },\r\n children: pageService.getPageTabRoutes('role-detail'),\r\n },\r\n {\r\n path: 'tax-categories',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'tax-category-list',\r\n breadcrumb: _('breadcrumb.tax-categories'),\r\n },\r\n children: pageService.getPageTabRoutes('tax-category-list'),\r\n },\r\n {\r\n path: 'tax-categories/:id',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'tax-category-detail',\r\n breadcrumb: { label: _('breadcrumb.tax-categories'), link: ['../', 'tax-categories'] },\r\n },\r\n children: pageService.getPageTabRoutes('tax-category-detail'),\r\n },\r\n {\r\n path: 'tax-rates',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'tax-rate-list',\r\n breadcrumb: _('breadcrumb.tax-rates'),\r\n },\r\n children: pageService.getPageTabRoutes('tax-rate-list'),\r\n },\r\n {\r\n path: 'tax-rates/:id',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'tax-rate-detail',\r\n breadcrumb: { label: _('breadcrumb.tax-rates'), link: ['../', 'tax-rates'] },\r\n },\r\n children: pageService.getPageTabRoutes('tax-rate-detail'),\r\n },\r\n {\r\n path: 'countries',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'country-list',\r\n breadcrumb: _('breadcrumb.countries'),\r\n },\r\n children: pageService.getPageTabRoutes('country-list'),\r\n },\r\n {\r\n path: 'countries/:id',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'country-detail',\r\n breadcrumb: { label: _('breadcrumb.countries'), link: ['../', 'countries'] },\r\n },\r\n children: pageService.getPageTabRoutes('country-detail'),\r\n },\r\n {\r\n path: 'zones',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'zone-list',\r\n breadcrumb: _('breadcrumb.zones'),\r\n },\r\n children: pageService.getPageTabRoutes('zone-list'),\r\n },\r\n {\r\n path: 'zones/:id',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'zone-detail',\r\n breadcrumb: { label: _('breadcrumb.zones'), link: ['../', 'zones'] },\r\n },\r\n children: pageService.getPageTabRoutes('zone-detail'),\r\n },\r\n {\r\n path: 'shipping-methods',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'shipping-method-list',\r\n breadcrumb: _('breadcrumb.shipping-methods'),\r\n },\r\n children: pageService.getPageTabRoutes('shipping-method-list'),\r\n },\r\n {\r\n path: 'shipping-methods/:id',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'shipping-method-detail',\r\n breadcrumb: { label: _('breadcrumb.shipping-methods'), link: ['../', 'shipping-methods'] },\r\n },\r\n children: pageService.getPageTabRoutes('shipping-method-detail'),\r\n },\r\n {\r\n path: 'payment-methods',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'payment-method-list',\r\n breadcrumb: _('breadcrumb.payment-methods'),\r\n },\r\n children: pageService.getPageTabRoutes('payment-method-list'),\r\n },\r\n {\r\n path: 'payment-methods/:id',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'payment-method-detail',\r\n breadcrumb: { label: _('breadcrumb.payment-methods'), link: ['../', 'payment-methods'] },\r\n },\r\n children: pageService.getPageTabRoutes('payment-method-detail'),\r\n },\r\n {\r\n path: 'global-settings',\r\n component: PageComponent,\r\n data: {\r\n breadcrumb: _('breadcrumb.global-settings'),\r\n locationId: 'global-setting-detail',\r\n },\r\n resolve: {\r\n detail: () =>\r\n inject(DataService)\r\n .query(GetGlobalSettingsDetailDocument)\r\n .mapSingle(data => ({ entity: of(data.globalSettings) })),\r\n },\r\n children: pageService.getPageTabRoutes('global-setting-detail'),\r\n },\r\n];\r\n","import { NgModule } from '@angular/core';\r\nimport { RouterModule, ROUTES } from '@angular/router';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n BulkActionRegistryService,\r\n detailComponentWithResolver,\r\n GetAdministratorDetailDocument,\r\n GetChannelDetailDocument,\r\n GetCountryDetailDocument,\r\n GetPaymentMethodDetailDocument,\r\n GetRoleDetailDocument,\r\n GetSellerDetailDocument,\r\n GetShippingMethodDetailDocument,\r\n GetStockLocationDetailDocument,\r\n GetTaxCategoryDetailDocument,\r\n GetTaxRateDetailDocument,\r\n GetZoneDetailDocument,\r\n PageService,\r\n SharedModule,\r\n} from '@vendure/admin-ui/core';\r\nimport { DEFAULT_CHANNEL_CODE } from '@vendure/common/lib/shared-constants';\r\n\r\nimport { AddCountryToZoneDialogComponent } from './components/add-country-to-zone-dialog/add-country-to-zone-dialog.component';\r\nimport { AdminDetailComponent } from './components/admin-detail/admin-detail.component';\r\nimport { deleteAdministratorsBulkAction } from './components/administrator-list/administrator-list-bulk-actions';\r\nimport { AdministratorListComponent } from './components/administrator-list/administrator-list.component';\r\nimport { ChannelDetailComponent } from './components/channel-detail/channel-detail.component';\r\nimport { deleteChannelsBulkAction } from './components/channel-list/channel-list-bulk-actions';\r\nimport { ChannelListComponent } from './components/channel-list/channel-list.component';\r\nimport { CountryDetailComponent } from './components/country-detail/country-detail.component';\r\nimport { deleteCountriesBulkAction } from './components/country-list/country-list-bulk-actions';\r\nimport { CountryListComponent } from './components/country-list/country-list.component';\r\nimport { GlobalSettingsComponent } from './components/global-settings/global-settings.component';\r\nimport { PaymentMethodDetailComponent } from './components/payment-method-detail/payment-method-detail.component';\r\nimport {\r\n assignPaymentMethodsToChannelBulkAction,\r\n deletePaymentMethodsBulkAction,\r\n removePaymentMethodsFromChannelBulkAction,\r\n} from './components/payment-method-list/payment-method-list-bulk-actions';\r\nimport { PaymentMethodListComponent } from './components/payment-method-list/payment-method-list.component';\r\nimport { PermissionGridComponent } from './components/permission-grid/permission-grid.component';\r\nimport { ProfileComponent } from './components/profile/profile.component';\r\nimport { RoleDetailComponent } from './components/role-detail/role-detail.component';\r\nimport { deleteRolesBulkAction } from './components/role-list/role-list-bulk-actions';\r\nimport { RoleListComponent } from './components/role-list/role-list.component';\r\nimport { SellerDetailComponent } from './components/seller-detail/seller-detail.component';\r\nimport { deleteSellersBulkAction } from './components/seller-list/seller-list-bulk-actions';\r\nimport { SellerListComponent } from './components/seller-list/seller-list.component';\r\nimport { ShippingEligibilityTestResultComponent } from './components/shipping-eligibility-test-result/shipping-eligibility-test-result.component';\r\nimport { ShippingMethodDetailComponent } from './components/shipping-method-detail/shipping-method-detail.component';\r\nimport {\r\n assignShippingMethodsToChannelBulkAction,\r\n deleteShippingMethodsBulkAction,\r\n removeShippingMethodsFromChannelBulkAction,\r\n} from './components/shipping-method-list/shipping-method-list-bulk-actions';\r\nimport { ShippingMethodListComponent } from './components/shipping-method-list/shipping-method-list.component';\r\nimport { ShippingMethodTestResultComponent } from './components/shipping-method-test-result/shipping-method-test-result.component';\r\nimport { StockLocationDetailComponent } from './components/stock-location-detail/stock-location-detail.component';\r\nimport {\r\n assignStockLocationsToChannelBulkAction,\r\n deleteStockLocationsBulkAction,\r\n removeStockLocationsFromChannelBulkAction,\r\n} from './components/stock-location-list/stock-location-list-bulk-actions';\r\nimport { StockLocationListComponent } from './components/stock-location-list/stock-location-list.component';\r\nimport { TaxCategoryDetailComponent } from './components/tax-category-detail/tax-category-detail.component';\r\nimport { deleteTaxCategoriesBulkAction } from './components/tax-category-list/tax-category-list-bulk-actions';\r\nimport { TaxCategoryListComponent } from './components/tax-category-list/tax-category-list.component';\r\nimport { TaxRateDetailComponent } from './components/tax-rate-detail/tax-rate-detail.component';\r\nimport { deleteTaxRatesBulkAction } from './components/tax-rate-list/tax-rate-list-bulk-actions';\r\nimport { TaxRateListComponent } from './components/tax-rate-list/tax-rate-list.component';\r\nimport { TestAddressFormComponent } from './components/test-address-form/test-address-form.component';\r\nimport { TestOrderBuilderComponent } from './components/test-order-builder/test-order-builder.component';\r\nimport { TestShippingMethodsComponent } from './components/test-shipping-methods/test-shipping-methods.component';\r\nimport { ZoneDetailComponent } from './components/zone-detail/zone-detail.component';\r\nimport { deleteZonesBulkAction } from './components/zone-list/zone-list-bulk-actions';\r\nimport { ZoneListComponent } from './components/zone-list/zone-list.component';\r\nimport { ZoneMemberControlsDirective } from './components/zone-member-list/zone-member-controls.directive';\r\nimport { removeZoneMembersBulkAction } from './components/zone-member-list/zone-member-list-bulk-actions';\r\nimport { ZoneMemberListHeaderDirective } from './components/zone-member-list/zone-member-list-header.directive';\r\nimport { ZoneMemberListComponent } from './components/zone-member-list/zone-member-list.component';\r\nimport { createRoutes } from './settings.routes';\r\n\r\n@NgModule({\r\n imports: [SharedModule, RouterModule.forChild([])],\r\n providers: [\r\n {\r\n provide: ROUTES,\r\n useFactory: (pageService: PageService) => createRoutes(pageService),\r\n multi: true,\r\n deps: [PageService],\r\n },\r\n ],\r\n declarations: [\r\n TaxCategoryListComponent,\r\n TaxCategoryDetailComponent,\r\n AdministratorListComponent,\r\n RoleListComponent,\r\n RoleDetailComponent,\r\n AdminDetailComponent,\r\n PermissionGridComponent,\r\n CountryListComponent,\r\n CountryDetailComponent,\r\n TaxRateListComponent,\r\n TaxRateDetailComponent,\r\n ChannelListComponent,\r\n ChannelDetailComponent,\r\n ShippingMethodListComponent,\r\n ShippingMethodDetailComponent,\r\n PaymentMethodListComponent,\r\n PaymentMethodDetailComponent,\r\n GlobalSettingsComponent,\r\n TestOrderBuilderComponent,\r\n TestAddressFormComponent,\r\n SellerDetailComponent,\r\n SellerListComponent,\r\n ShippingMethodTestResultComponent,\r\n ShippingEligibilityTestResultComponent,\r\n ZoneListComponent,\r\n AddCountryToZoneDialogComponent,\r\n ZoneMemberListComponent,\r\n ZoneMemberListHeaderDirective,\r\n ZoneMemberControlsDirective,\r\n ProfileComponent,\r\n TestShippingMethodsComponent,\r\n ZoneDetailComponent,\r\n StockLocationListComponent,\r\n StockLocationDetailComponent,\r\n ],\r\n})\r\nexport class SettingsModule {\r\n private static hasRegisteredTabsAndBulkActions = false;\r\n\r\n constructor(bulkActionRegistryService: BulkActionRegistryService, pageService: PageService) {\r\n if (SettingsModule.hasRegisteredTabsAndBulkActions) {\r\n return;\r\n }\r\n bulkActionRegistryService.registerBulkAction(deleteSellersBulkAction);\r\n\r\n bulkActionRegistryService.registerBulkAction(deleteChannelsBulkAction);\r\n\r\n bulkActionRegistryService.registerBulkAction(deleteAdministratorsBulkAction);\r\n\r\n bulkActionRegistryService.registerBulkAction(deleteRolesBulkAction);\r\n\r\n bulkActionRegistryService.registerBulkAction(assignShippingMethodsToChannelBulkAction);\r\n bulkActionRegistryService.registerBulkAction(removeShippingMethodsFromChannelBulkAction);\r\n bulkActionRegistryService.registerBulkAction(deleteShippingMethodsBulkAction);\r\n\r\n bulkActionRegistryService.registerBulkAction(assignPaymentMethodsToChannelBulkAction);\r\n bulkActionRegistryService.registerBulkAction(removePaymentMethodsFromChannelBulkAction);\r\n bulkActionRegistryService.registerBulkAction(deletePaymentMethodsBulkAction);\r\n\r\n bulkActionRegistryService.registerBulkAction(deleteTaxCategoriesBulkAction);\r\n\r\n bulkActionRegistryService.registerBulkAction(deleteTaxRatesBulkAction);\r\n\r\n bulkActionRegistryService.registerBulkAction(deleteCountriesBulkAction);\r\n\r\n bulkActionRegistryService.registerBulkAction(deleteZonesBulkAction);\r\n\r\n bulkActionRegistryService.registerBulkAction(removeZoneMembersBulkAction);\r\n\r\n bulkActionRegistryService.registerBulkAction(assignStockLocationsToChannelBulkAction);\r\n bulkActionRegistryService.registerBulkAction(removeStockLocationsFromChannelBulkAction);\r\n bulkActionRegistryService.registerBulkAction(deleteStockLocationsBulkAction);\r\n\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'seller-list',\r\n tab: _('breadcrumb.sellers'),\r\n route: '',\r\n component: SellerListComponent,\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'seller-detail',\r\n tab: _('settings.seller'),\r\n route: '',\r\n component: detailComponentWithResolver({\r\n component: SellerDetailComponent,\r\n query: GetSellerDetailDocument,\r\n entityKey: 'seller',\r\n getBreadcrumbs: entity => [\r\n {\r\n label: entity ? entity.name : _('settings.create-new-seller'),\r\n link: [entity?.id],\r\n },\r\n ],\r\n }),\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'channel-list',\r\n tab: _('breadcrumb.channels'),\r\n route: '',\r\n component: ChannelListComponent,\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'channel-detail',\r\n tab: _('settings.channel'),\r\n route: '',\r\n component: detailComponentWithResolver({\r\n component: ChannelDetailComponent,\r\n query: GetChannelDetailDocument,\r\n entityKey: 'channel',\r\n getBreadcrumbs: entity => [\r\n {\r\n label: entity\r\n ? entity.code === DEFAULT_CHANNEL_CODE\r\n ? 'common.default-channel'\r\n : entity.code\r\n : _('settings.create-new-channel'),\r\n link: [entity?.id],\r\n },\r\n ],\r\n }),\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'administrator-list',\r\n tab: _('breadcrumb.administrators'),\r\n route: '',\r\n component: AdministratorListComponent,\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'administrator-detail',\r\n tab: _('settings.administrator'),\r\n route: '',\r\n component: detailComponentWithResolver({\r\n component: AdminDetailComponent,\r\n query: GetAdministratorDetailDocument,\r\n entityKey: 'administrator',\r\n getBreadcrumbs: entity => [\r\n {\r\n label: entity\r\n ? `${entity.firstName} ${entity.lastName}`\r\n : _('admin.create-new-administrator'),\r\n link: [entity?.id],\r\n },\r\n ],\r\n }),\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'role-list',\r\n tab: _('breadcrumb.roles'),\r\n route: '',\r\n component: RoleListComponent,\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'role-detail',\r\n tab: _('settings.role'),\r\n route: '',\r\n component: detailComponentWithResolver({\r\n component: RoleDetailComponent,\r\n query: GetRoleDetailDocument,\r\n entityKey: 'role',\r\n getBreadcrumbs: entity => [\r\n {\r\n label: entity ? entity.description : _('settings.create-new-role'),\r\n link: [entity?.id],\r\n },\r\n ],\r\n }),\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'shipping-method-list',\r\n tab: _('breadcrumb.shipping-methods'),\r\n route: '',\r\n component: ShippingMethodListComponent,\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'shipping-method-detail',\r\n tab: _('settings.shipping-method'),\r\n route: '',\r\n component: detailComponentWithResolver({\r\n component: ShippingMethodDetailComponent,\r\n query: GetShippingMethodDetailDocument,\r\n entityKey: 'shippingMethod',\r\n getBreadcrumbs: entity => [\r\n {\r\n label: entity ? entity.name : _('settings.create-new-shipping-method'),\r\n link: [entity?.id],\r\n },\r\n ],\r\n }),\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'shipping-method-list',\r\n tab: _('settings.test-shipping-methods'),\r\n route: 'test',\r\n component: TestShippingMethodsComponent,\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'payment-method-list',\r\n tab: _('breadcrumb.payment-methods'),\r\n route: '',\r\n component: PaymentMethodListComponent,\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'payment-method-detail',\r\n tab: _('settings.payment-method'),\r\n route: '',\r\n component: detailComponentWithResolver({\r\n component: PaymentMethodDetailComponent,\r\n query: GetPaymentMethodDetailDocument,\r\n entityKey: 'paymentMethod',\r\n getBreadcrumbs: entity => [\r\n {\r\n label: entity ? entity.name : _('settings.create-new-payment-method'),\r\n link: [entity?.id],\r\n },\r\n ],\r\n }),\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'tax-category-list',\r\n tab: _('breadcrumb.tax-categories'),\r\n route: '',\r\n component: TaxCategoryListComponent,\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'tax-category-detail',\r\n tab: _('settings.tax-category'),\r\n route: '',\r\n component: detailComponentWithResolver({\r\n component: TaxCategoryDetailComponent,\r\n query: GetTaxCategoryDetailDocument,\r\n entityKey: 'taxCategory',\r\n getBreadcrumbs: entity => [\r\n {\r\n label: entity ? entity.name : _('settings.create-new-tax-category'),\r\n link: [entity?.id],\r\n },\r\n ],\r\n }),\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'tax-rate-list',\r\n tab: _('breadcrumb.tax-rates'),\r\n route: '',\r\n component: TaxRateListComponent,\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'tax-rate-detail',\r\n tab: _('settings.tax-rate'),\r\n route: '',\r\n component: detailComponentWithResolver({\r\n component: TaxRateDetailComponent,\r\n query: GetTaxRateDetailDocument,\r\n entityKey: 'taxRate',\r\n getBreadcrumbs: entity => [\r\n {\r\n label: entity ? entity.name : _('settings.create-new-tax-rate'),\r\n link: [entity?.id],\r\n },\r\n ],\r\n }),\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'country-list',\r\n tab: _('breadcrumb.countries'),\r\n route: '',\r\n component: CountryListComponent,\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'country-detail',\r\n tab: _('settings.country'),\r\n route: '',\r\n component: detailComponentWithResolver({\r\n component: CountryDetailComponent,\r\n query: GetCountryDetailDocument,\r\n entityKey: 'country',\r\n getBreadcrumbs: entity => [\r\n {\r\n label: entity ? entity.name : _('settings.create-new-country'),\r\n link: [entity?.id],\r\n },\r\n ],\r\n }),\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'zone-list',\r\n tab: _('breadcrumb.zones'),\r\n route: '',\r\n component: ZoneListComponent,\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'zone-detail',\r\n tab: _('settings.zone'),\r\n route: '',\r\n component: detailComponentWithResolver({\r\n component: ZoneDetailComponent,\r\n query: GetZoneDetailDocument,\r\n entityKey: 'zone',\r\n getBreadcrumbs: entity => [\r\n {\r\n label: entity ? entity.name : _('settings.create-new-zone'),\r\n link: [entity?.id],\r\n },\r\n ],\r\n }),\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'global-setting-detail',\r\n tab: _('breadcrumb.global-settings'),\r\n route: '',\r\n component: GlobalSettingsComponent,\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'profile',\r\n tab: _('breadcrumb.profile'),\r\n route: '',\r\n component: ProfileComponent,\r\n });\r\n\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'stock-location-list',\r\n tab: _('catalog.stock-locations'),\r\n route: '',\r\n component: StockLocationListComponent,\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'stock-location-detail',\r\n tab: _('catalog.stock-location'),\r\n route: '',\r\n component: detailComponentWithResolver({\r\n component: StockLocationDetailComponent,\r\n query: GetStockLocationDetailDocument,\r\n entityKey: 'stockLocation',\r\n getBreadcrumbs: entity => [\r\n {\r\n label: entity ? entity.name : _('catalog.create-new-stock-location'),\r\n link: [entity?.id],\r\n },\r\n ],\r\n }),\r\n });\r\n SettingsModule.hasRegisteredTabsAndBulkActions = true;\r\n }\r\n}\r\n"],"x_google_ignoreList":[0]}
1
+ {"version":3,"file":"818.a3413024616b3f72.js","mappings":"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","names":["withLatestFrom","inputs","project","popResultSelector","operate","source","subscriber","len","length","otherValues","Array","hasValue","map","ready","i","innerFrom","subscribe","createOperatorSubscriber","value","every","identity","noop","values","next","ZoneMemberControlsDirective","constructor","templateRef","this","i0","selectors","ZoneMemberListHeaderDirective","member_r6","id","member_r7","createdAt","member_r8","_c0","member_r9","name","member_r10","code","ZoneMemberListComponent_ng_template_23_vdr_chip_0_Template","ZoneMemberListComponent_ng_template_23_vdr_chip_1_Template","member_r11","enabled","ZoneMemberListComponent","dataService","selectedMemberIds","selectionChange","EventEmitter","filterTermControl","FormControl","currentPage","itemsPerPage","selectionManager","SelectionManager","multiSelect","itemsAreEqual","a","b","additiveMode","membersInput$","Subject","activeZoneInput$","BehaviorSubject","undefined","destroy$","refresh$","ngOnInit","activeZoneMembers$","merge","pipe","switchMap","activeZone","query","GetZoneMembersDocument","zoneId","mapSingle","zone","members","of","members$","take","setCurrentItems","filter","m","includes","selectionChanges$","takeUntil","selection","emit","s","filteredMembers$","combineLatest","valueChanges","startWith","filterTerm","term","toLocaleLowerCase","totalItems$","ngOnChanges","changes","ngOnDestroy","complete","refresh","i1","contentQueries","rf","ctx","dirIndex","$event","ZoneMemberListComponent_ng_template_8_Template","ZoneMemberListComponent_ng_template_11_Template","ZoneMemberListComponent_ng_template_14_Template","ZoneMemberListComponent_ng_template_17_Template","ZoneMemberListComponent_ng_template_20_Template","ZoneMemberListComponent_ng_template_23_Template","locationId","ctx_r0","zoneName","_r3","ctx_r2","cancel","ctx_r4","add","ctx_r1","GET_ZONE_MEMBERS","gql","AddCountryToZoneDialogComponent","currentMembers$","availableCountries$","GetCountryListDocument","options","mapStream","data","countries","items","currentMembers","c","find","cm","resolveWith","decls","vars","consts","template","AddCountryToZoneDialogComponent_ng_template_0_Template","AddCountryToZoneDialogComponent_ng_template_3_Template","_r6","section_r1","$implicit","toggleAll","permissions","permission_r7","_r9","ctx_r8","setPermission","description","ctx_r3","readonly","activePermissions","PermissionGridComponent_tr_2_button_10_Template","PermissionGridComponent_tr_2_td_11_Template","label","PermissionGridComponent","permissionChange","buildGrid","permission","defs","some","d","def","crudGroups","Map","nonCrud","crudRe","permissionDefinitions","test","groupName","match","existing","get","push","set","assignable","gridData","from","entries","extractCrudDescription","replace","outputs","PermissionGridComponent_tr_2_Template","create","detailForm","invalid","pristine","_r12","ctx_r11","save","ctx_r10","AdminDetailComponent_ng_template_7_button_0_Template","entity_r13","ctx_r6","customFields","channel_r14","_r16","ctx_r15","selectedChannelId","channelId","ctx_r7","channelCode","GET_ADMINISTRATOR_DETAIL","ADMINISTRATOR_FRAGMENT","AdminDetailComponent","TypedBaseDetailComponent","getAvailableChannels","Object","selectedRolePermissions","changeDetector","formBuilder","notificationService","super","getCustomFieldConfig","group","emailAddress","Validators","required","firstName","lastName","password","roles","getCustomFieldsDefaults","selectedRoles","init","allRoles$","administrator","getRoles","item","CUSTOMER_ROLE_CODE","client","userStatus","single$","Permission","CreateAdministrator","UpdateAdministrator","rolesSelect","disable","serverConfigService","getPermissionDefinitions","destroy","rolesChanged","buildPermissionsMap","getPermissionsForSelectedChannel","getActivePermissions","input","active","channels","roleIds","role","notNullOrUndefined","createAdministrator","success","_","entity","markAsPristine","markForCheck","router","navigate","relativeTo","route","err","error","entity$","mergeMap","formValue","updateAdministrator","setFormValues","languageCode","patchValue","user","setCustomFieldFormValues","passwordControl","setValidators","permissionsControl","channelIdPermissionsMap","channelIdCodeMap","channel","permissionSet","Set","forEach","p","keys","permissionsHash","has","i2","features","AdminDetailComponent_button_5_Template","AdminDetailComponent_ng_template_7_Template","AdminDetailComponent_vdr_card_12_Template","AdminDetailComponent_vdr_form_field_29_Template","AdminDetailComponent_vdr_form_field_31_Template","AdminDetailComponent_vdr_card_34_Template","AdminDetailComponent_li_42_Template","isNew$","_r1","deleteAdministratorsBulkAction","createBulkDeleteAction","location","requiresPermission","userPermissions","DeleteAdministrator","getItemName","bulkDelete","ids","deleteAdministrators","res","administrator_r8","administrator_r9","administrator_r10","updatedAt","_c1","administrator_r11","administrator_r12","role_r15","AdministratorListComponent_ng_template_31_vdr_chip_0_Template","administrator_r13","customField_r16","sorts","GET_ADMINISTRATOR_LIST","AdministratorListComponent","TypedBaseListComponent","filters","createFilterCollection","addIdFilter","addDateFilters","addFilter","type","kind","filterField","addCustomFieldFilters","connectToRoute","createSortCollection","defaultSort","addSort","addCustomFieldSorts","configure","document","GetAdministratorListDocument","getItems","administrators","setVariables","skip","createSearchQuery","searchTermControl","refreshListOnChanges","searchTerm","_filter","filterOperator","LogicalOperator","AND","contains","OR","createFilterInput","sort","createSortInput","AdministratorListComponent_a_5_Template","setPageNumber","setItemsPerPage","AdministratorListComponent_ng_template_16_Template","AdministratorListComponent_ng_template_19_Template","AdministratorListComponent_ng_template_22_Template","AdministratorListComponent_ng_template_25_Template","AdministratorListComponent_ng_template_28_Template","AdministratorListComponent_ng_template_31_Template","AdministratorListComponent_vdr_dt2_custom_field_column_32_Template","_c2","items$","itemsPerPage$","currentPage$","_r13","ctx_r12","saveButtonEnabled","ctx_r14","ChannelDetailComponent_ng_template_7_button_0_Template","entity_r17","updatePermission","ctx_r5","seller_r18","code_r19","languageCode_r20","GET_CHANNEL_DETAIL","CHANNEL_FRAGMENT","ChannelDetailComponent","DEFAULT_CHANNEL_CODE","token","pricesIncludeTax","availableLanguageCodes","availableCurrencyCodes","defaultCurrencyCode","defaultShippingZoneId","defaultLanguageCode","defaultTaxZoneId","sellerId","SuperAdmin","UpdateChannel","CreateChannel","sellers$","settings","getSellerList","sellers","availableLanguageCodes$","getAvailableLanguages","dirty","valid","createChannel","auth","currentUser","me","updateUserChannels","__typename","message","updateChannel","generateToken","defaultShippingZone","defaultTaxZone","seller","codeControl","crypto","getRandomValues","Uint8Array","toString","padStart","join","ChannelDetailComponent_button_5_Template","ChannelDetailComponent_ng_template_7_Template","ChannelDetailComponent_vdr_card_12_Template","ChannelDetailComponent_vdr_form_field_17_Template","ChannelDetailComponent_vdr_form_item_18_Template","ChannelDetailComponent_option_28_Template","ChannelDetailComponent_option_44_Template","ChannelDetailComponent_option_49_Template","ChannelDetailComponent_clr_alert_55_Template","ChannelDetailComponent_clr_alert_61_Template","ChannelDetailComponent_vdr_card_67_Template","deleteChannelsBulkAction","DeleteChannel","deleteChannels","channel_r7","channel_r8","channel_r9","channel_r10","channel_r11","customField_r12","GET_CHANNEL_LIST","ChannelListComponent","GetChannelListDocument","isDefaultChannel","ChannelListComponent_a_5_Template","ChannelListComponent_ng_template_16_Template","ChannelListComponent_ng_template_19_Template","ChannelListComponent_ng_template_22_Template","ChannelListComponent_ng_template_25_Template","ChannelListComponent_ng_template_28_Template","ChannelListComponent_vdr_dt2_custom_field_column_29_Template","CountryDetailComponent_ng_template_11_button_0_Template","entity_r10","GET_COUNTRY_DETAIL","COUNTRY_FRAGMENT","CountryDetailComponent","UpdateSettings","UpdateCountry","createUpdatedTranslatable","translatable","translations","updatedFields","customFieldConfig","defaultTranslation","createCountry","languageCode$","country","updateCountry","currentTranslation","findTranslation","setLanguage","CountryDetailComponent_button_9_Template","CountryDetailComponent_ng_template_11_Template","CountryDetailComponent_vdr_card_22_Template","CountryDetailComponent_vdr_card_35_Template","availableLanguages$","deleteCountriesBulkAction","DeleteSettings","DeleteCountry","deleteCountries","country_r8","country_r9","country_r10","country_r11","country_r12","CountryListComponent_ng_template_34_vdr_chip_0_Template","CountryListComponent_ng_template_34_vdr_chip_1_Template","country_r13","GET_COUNTRY_LIST","CountryListComponent","CountryListComponent_a_8_Template","CountryListComponent_ng_template_19_Template","CountryListComponent_ng_template_22_Template","CountryListComponent_ng_template_25_Template","CountryListComponent_ng_template_28_Template","CountryListComponent_ng_template_31_Template","CountryListComponent_ng_template_34_Template","CountryListComponent_vdr_dt2_custom_field_column_35_Template","contentLanguage$","GET_GLOBAL_SETTINGS_DETAIL","GlobalSettingsComponent","availableLanguages","trackInventory","outOfStockThreshold","languageCodes","LanguageCode","UpdateGlobalSettings","languagesSelect","updateGlobalSettings","tap","refreshGlobalSettings","uiState","globalSettings","availableLangs","contentLanguage","setContentLanguage","GlobalSettingsComponent_button_4_Template","GlobalSettingsComponent_vdr_card_24_Template","_r10","ctx_r9","selectedHandler","PaymentMethodDetailComponent_ng_template_11_button_0_Template","entity_r14","removeChecker","selectedChecker","selectedCheckerDefinition","checker_r18","_r20","ctx_r19","selectChecker","PaymentMethodDetailComponent_div_44_button_7_Template","checkers","_r22","ctx_r21","removeHandler","selectedHandlerDefinition","handler_r24","_r26","ctx_r25","selectHandler","PaymentMethodDetailComponent_div_48_button_7_Template","handlers","GET_PAYMENT_METHOD_DETAIL","PAYMENT_METHOD_FRAGMENT","PaymentMethodDetailComponent","checker","handler","UpdatePaymentMethod","getPaymentMethodOperations","paymentMethodEligibilityCheckers","paymentMethodHandlers","updateCode","currentCode","nameValue","setValue","normalizeString","configurableDefinitionToInstance","formControl","clearValidators","updateValueAndValidity","onlySelf","markAsDirty","getUpdatedPaymentMethod","createPaymentMethod","paymentMethod","updatePaymentMethod","formGroup","toConfigurableOperationInput","args","getConfigArgValue","PaymentMethodDetailComponent_button_9_Template","PaymentMethodDetailComponent_ng_template_11_Template","PaymentMethodDetailComponent_vdr_card_22_Template","target","PaymentMethodDetailComponent_vdr_card_39_Template","PaymentMethodDetailComponent_vdr_configurable_input_43_Template","PaymentMethodDetailComponent_div_44_Template","PaymentMethodDetailComponent_vdr_configurable_input_47_Template","PaymentMethodDetailComponent_div_48_Template","deletePaymentMethodsBulkAction","DeletePaymentMethod","shouldRetryItem","response","retrying","deletePaymentMethods","assignPaymentMethodsToChannelBulkAction","createBulkAssignToChannelAction","bulkAssignToChannel","paymentMethodIds","mutate","AssignPaymentMethodsToChannelDocument","assignPaymentMethodsToChannel","removePaymentMethodsFromChannelBulkAction","createBulkRemoveFromChannelAction","bulkRemoveFromChannel","RemovePaymentMethodsFromChannelDocument","removePaymentMethodsFromChannel","paymentMethod_r8","paymentMethod_r9","paymentMethod_r10","paymentMethod_r11","paymentMethod_r12","PaymentMethodListComponent_ng_template_34_vdr_chip_0_Template","PaymentMethodListComponent_ng_template_34_vdr_chip_1_Template","paymentMethod_r13","GET_PAYMENT_METHOD_LIST","PaymentMethodListComponent","GetPaymentMethodListDocument","paymentMethods","entity_r3","PaymentMethodListComponent_a_8_Template","PaymentMethodListComponent_ng_template_19_Template","PaymentMethodListComponent_ng_template_22_Template","PaymentMethodListComponent_ng_template_25_Template","PaymentMethodListComponent_ng_template_28_Template","PaymentMethodListComponent_ng_template_31_Template","PaymentMethodListComponent_ng_template_34_Template","PaymentMethodListComponent_vdr_dt2_custom_field_column_35_Template","GET_PROFILE_DETAIL","ProfileComponent","updateActiveAdministrator","ProfileComponent_vdr_card_11_Template","ProfileComponent_vdr_form_field_25_Template","ProfileComponent_vdr_card_30_Template","_r5","_r8","RoleDetailComponent_ng_template_7_button_0_Template","entity_r9","GET_ROLE_DETAIL","ROLE_FRAGMENT","RoleDetailComponent","channelIds","change","currentPermissions","newValue","unique","createRole","updateRole","detectChanges","RoleDetailComponent_button_5_Template","RoleDetailComponent_ng_template_7_Template","RoleDetailComponent_vdr_card_12_Template","tmp_13_0","deleteRolesBulkAction","deleteRoles","role_r8","role_r9","role_r10","role_r11","RoleListComponent_ng_template_25_a_0_Template","RoleListComponent_ng_template_25_ng_template_1_Template","isDefaultRole","role_r17","RoleListComponent_ng_template_28_span_0_Template","channel_r23","RoleListComponent_ng_template_31_ng_container_0_vdr_chip_1_Template","role_r20","RoleListComponent_ng_template_31_ng_container_0_Template","permission_r31","role_r25","ctx_r32","initialLimit","_r38","ctx_r36","toggleDisplayLimit","RoleListComponent_ng_template_34_ng_container_0_button_4_ng_container_1_Template","RoleListComponent_ng_template_34_ng_container_0_button_4_ng_template_2_Template","ctx_r30","displayLimit","_r33","RoleListComponent_ng_template_34_ng_container_0_vdr_chip_2_Template","RoleListComponent_ng_template_34_ng_container_0_button_4_Template","ctx_r26","RoleListComponent_ng_template_34_ng_container_0_Template","RoleListComponent_ng_template_34_ng_template_1_Template","_r27","GET_ROLE_LIST","RoleListComponent","GetRoleListDocument","SUPER_ADMIN_ROLE_CODE","RoleListComponent_a_5_Template","RoleListComponent_ng_template_16_Template","RoleListComponent_ng_template_19_Template","RoleListComponent_ng_template_22_Template","RoleListComponent_ng_template_25_Template","RoleListComponent_ng_template_28_Template","RoleListComponent_ng_template_31_Template","RoleListComponent_ng_template_34_Template","SellerDetailComponent_ng_template_7_button_0_Template","GET_SELLER_DETAIL","SellerDetailComponent","UpdateSeller","CreateSeller","createSeller","updateSeller","SellerDetailComponent_button_5_Template","SellerDetailComponent_ng_template_7_Template","SellerDetailComponent_vdr_card_12_Template","SellerDetailComponent_vdr_card_21_Template","deleteSellersBulkAction","DeleteSeller","deleteSellers","seller_r6","seller_r7","seller_r8","seller_r9","customField_r10","SellerListComponent","GetSellerListDocument","SellerListComponent_a_5_Template","SellerListComponent_ng_template_16_Template","SellerListComponent_ng_template_19_Template","SellerListComponent_ng_template_22_Template","SellerListComponent_ng_template_25_Template","SellerListComponent_vdr_dt2_custom_field_column_26_Template","quote_r2","metadata","ShippingEligibilityTestResultComponent_div_2_vdr_object_tree_14_Template","testDataUpdated","price","currencyCode","priceWithTax","ShippingEligibilityTestResultComponent","okToRun","runTest","testResult","ShippingEligibilityTestResultComponent_div_2_Template","ShippingEligibilityTestResultComponent_div_3_Template","line_r4","quantity","updateQuantity","removeLine","preview","sku","unitPriceWithTax","TestOrderBuilderComponent_table_0_tr_19_Template","lines","subTotal","TestOrderBuilderComponent","reduce","sum","l","localStorageService","orderLinesChange","loadFromLocalStorage","getActiveChannel","result","activeChannel","selectResult","addToLines","productVariantId","productVariantName","productAsset","persistToLocalStorage","line","setForCurrentLocation","getForCurrentLocation","country_r1","TestOrderBuilderComponent_table_0_Template","TestOrderBuilderComponent_ng_template_1_Template","TestAddressFormComponent","addressChange","getAvailableCountries","initialValue","city","countryCode","postalCode","province","form","subscription","unsubscribe","quote","TestAddressFormComponent_option_18_Template","ShippingMethodTestResultComponent","_r11","selectedCalculator","_r14","ctx_r13","ShippingMethodDetailComponent_ng_template_11_button_0_Template","entity_r15","handler_r16","_r18","ctx_r17","checker_r20","ShippingMethodDetailComponent_div_43_button_7_Template","_r24","ctx_r23","selectedCalculatorDefinition","calculator_r26","_r28","ctx_r27","selectCalculator","ShippingMethodDetailComponent_div_47_button_7_Template","calculators","ShippingMethodTestResultComponent_clr_icon_9_Template","ShippingMethodTestResultComponent_clr_icon_10_Template","ShippingMethodTestResultComponent_clr_icon_11_Template","ShippingMethodTestResultComponent_vdr_labeled_data_14_Template","ShippingMethodTestResultComponent_vdr_labeled_data_15_Template","ShippingMethodTestResultComponent_vdr_object_tree_16_Template","eligible","GET_SHIPPING_METHOD_DETAIL","SHIPPING_METHOD_FRAGMENT","ShippingMethodDetailComponent","fulfillmentHandler","calculator","fulfillmentHandlers","UpdateShippingMethod","fetchTestResult$","shippingMethod","getShippingMethodOperations","shippingEligibilityCheckers","shippingCalculators","activeChannel$","testResult$","address","shippingAddress","streetLine1","testShippingMethod","getUpdatedShippingMethod","fulfillmentHandlerCode","createShippingMethod","updateShippingMethod","console","setTestOrderLines","event","testOrderLines","setTestAddress","testAddress","allTestDataPresent","ShippingMethodDetailComponent_button_9_Template","ShippingMethodDetailComponent_ng_template_11_Template","ShippingMethodDetailComponent_vdr_card_16_Template","ShippingMethodDetailComponent_option_37_Template","ShippingMethodDetailComponent_vdr_card_38_Template","ShippingMethodDetailComponent_vdr_configurable_input_42_Template","ShippingMethodDetailComponent_div_43_Template","ShippingMethodDetailComponent_vdr_configurable_input_46_Template","ShippingMethodDetailComponent_div_47_Template","tmp_27_0","deleteShippingMethodsBulkAction","DeleteShippingMethod","deleteShippingMethods","assignShippingMethodsToChannelBulkAction","shippingMethodIds","AssignShippingMethodsToChannelDocument","assignShippingMethodsToChannel","removeShippingMethodsFromChannelBulkAction","RemoveShippingMethodsFromChannelDocument","removeShippingMethodsFromChannel","shippingMethod_r9","shippingMethod_r10","shippingMethod_r11","shippingMethod_r12","shippingMethod_r13","shippingMethod_r14","shippingMethod_r15","GET_SHIPPING_METHOD_LIST","ShippingMethodListComponent","GetShippingMethodListDocument","shippingMethods","StockLocationDetailComponent_ng_template_7_button_0_Template","ShippingMethodListComponent_a_8_Template","ShippingMethodListComponent_ng_template_19_Template","ShippingMethodListComponent_ng_template_22_Template","ShippingMethodListComponent_ng_template_25_Template","ShippingMethodListComponent_ng_template_28_Template","ShippingMethodListComponent_ng_template_31_Template","ShippingMethodListComponent_ng_template_34_Template","ShippingMethodListComponent_ng_template_37_Template","ShippingMethodListComponent_vdr_dt2_custom_field_column_38_Template","STOCK_LOCATION_DETAIL_FRAGMENT","GET_STOCK_LOCATION_DETAIL","CREATE_STOCK_LOCATION","UPDATE_STOCK_LOCATION","StockLocationDetailComponent","CreateStockLocationDocument","createStockLocation","taxRate","UpdateStockLocationDocument","StockLocationDetailComponent_button_5_Template","StockLocationDetailComponent_ng_template_7_Template","StockLocationDetailComponent_vdr_card_12_Template","StockLocationDetailComponent_vdr_card_26_Template","deleteStockLocationsBulkAction","DeleteStockLocation","DeleteCatalog","DeleteStockLocationsDocument","deleteStockLocations","DeletionResult","NOT_DELETED","assignStockLocationsToChannelBulkAction","UpdateCatalog","UpdateStockLocation","stockLocationIds","AssignStockLocationsToChannelDocument","assignStockLocationsToChannel","removeStockLocationsFromChannelBulkAction","RemoveStockLocationsFromChannelDocument","removeStockLocationsFromChannel","stockLocation_r7","stockLocation_r8","stockLocation_r9","stockLocation_r10","stockLocation_r11","field_r12","GET_STOCK_LOCATION_LIST","StockLocationListComponent","addFilters","addSorts","GetStockLocationListDocument","stockLocations","TaxCategoryDetailComponent_ng_template_7_button_0_Template","StockLocationListComponent_a_5_Template","StockLocationListComponent_ng_template_16_Template","StockLocationListComponent_ng_template_19_Template","StockLocationListComponent_ng_template_22_Template","StockLocationListComponent_ng_template_25_Template","StockLocationListComponent_ng_template_28_Template","StockLocationListComponent_vdr_dt2_custom_field_column_29_Template","GET_TAX_CATEGORY_DETAIL","TAX_CATEGORY_FRAGMENT","TaxCategoryDetailComponent","isDefault","UpdateTaxCategory","createTaxCategory","taxCategory","updateTaxCategory","TaxCategoryDetailComponent_button_5_Template","TaxCategoryDetailComponent_ng_template_7_Template","TaxCategoryDetailComponent_vdr_card_12_Template","TaxCategoryDetailComponent_vdr_card_26_Template","deleteTaxCategoriesBulkAction","DeleteTaxCategory","deleteTaxCategories","taxCategory_r7","taxCategory_r8","taxCategory_r9","taxCategory_r10","TaxCategoryListComponent_ng_template_28_vdr_chip_0_Template","taxCategory_r11","customField_r13","GET_TAX_CATEGORY_LIST","TaxCategoryListComponent","getCustomFieldsFor","GetTaxCategoryListDocument","taxCategories","TaxCategoryListComponent_a_5_Template","TaxCategoryListComponent_ng_template_16_Template","TaxCategoryListComponent_ng_template_19_Template","TaxCategoryListComponent_ng_template_22_Template","TaxCategoryListComponent_ng_template_25_Template","TaxCategoryListComponent_ng_template_28_Template","TaxCategoryListComponent_vdr_dt2_custom_field_column_29_Template","_r7","TaxRateDetailComponent_ng_template_7_button_0_Template","entity_r11","taxCategory_r12","GET_TAX_RATE_DETAIL","TAX_RATE_FRAGMENT","TaxRateDetailComponent","taxCategoryId","customerGroupId","UpdateTaxRate","taxCategories$","getTaxCategories","categoryId","createTaxRate","updateTaxRate","category","customerGroup","TaxRateDetailComponent_button_5_Template","TaxRateDetailComponent_ng_template_7_Template","TaxRateDetailComponent_vdr_card_18_Template","TaxRateDetailComponent_option_36_Template","TaxRateDetailComponent_vdr_card_42_Template","deleteTaxRatesBulkAction","DeleteTaxRate","deleteTaxRates","taxRate_r11","taxRate_r12","taxRate_r13","taxRate_r14","taxRate_r15","taxRate_r16","taxRate_r17","taxRate_r18","TaxRateListComponent_ng_template_40_vdr_chip_0_Template","TaxRateListComponent_ng_template_40_vdr_chip_1_Template","taxRate_r19","customField_r22","GET_TAX_RATE_LIST","TaxRateListComponent","GetTaxRateListDocument","taxRates","TaxRateListComponent_a_5_Template","TaxRateListComponent_ng_template_16_Template","TaxRateListComponent_ng_template_19_Template","TaxRateListComponent_ng_template_22_Template","TaxRateListComponent_ng_template_25_Template","TaxRateListComponent_ng_template_28_Template","TaxRateListComponent_ng_template_31_Template","TaxRateListComponent_ng_template_34_Template","TaxRateListComponent_ng_template_37_Template","TaxRateListComponent_ng_template_40_Template","TaxRateListComponent_vdr_dt2_custom_field_column_41_Template","TestShippingMethodsComponent","testEligibleShippingMethods","ZoneDetailComponent_ng_template_7_button_0_Template","tmp_0_0","GET_ZONE_DETAIL","ZoneDetailComponent","UpdateZone","createZone","updateZone","ZoneDetailComponent_button_5_Template","ZoneDetailComponent_ng_template_7_Template","ZoneDetailComponent_vdr_card_12_Template","ZoneDetailComponent_vdr_card_21_Template","deleteZonesBulkAction","DeleteZone","deleteZones","customerGroup_r9","customerGroup_r10","customerGroup_r11","customerGroup_r12","customerGroup_r13","customField_r14","ZoneListComponent_ng_template_11_ng_template_11_Template","ZoneListComponent_ng_template_11_ng_template_14_Template","ZoneListComponent_ng_template_11_ng_template_17_Template","ZoneListComponent_ng_template_11_ng_template_20_Template","ZoneListComponent_ng_template_11_ng_template_23_Template","ZoneListComponent_ng_template_11_vdr_dt2_custom_field_column_24_Template","activeIndex$","_r23","ctx_r22","ctx_r20","activeZone_r21","activeZone_r19","_r25","ngIf","ctx_r24","addToZone","ZoneListComponent_ng_template_12_ng_container_0_vdr_zone_member_list_6_Template","_c3","ctx_r18","activeZone$","ZoneListComponent_ng_template_12_ng_container_0_Template","GET_ZONE_LIST","ZoneListComponent","modalService","GetZoneListDocument","zones","activeZoneId$","paramMap","pm","distinctUntilChanged","activeZoneId","z","findIndex","g","closeMembers","params","snapshot","contents","queryParamsHandling","fromComponent","locals","size","memberIds","addMembersToZone","mapTo","EMPTY","countryCount","refreshMemberList","zoneMemberList","viewQuery","ZoneListComponent_a_8_Template","ZoneListComponent_ng_template_11_Template","ZoneListComponent_ng_template_12_Template","_c4","tmp_4_0","removeZoneMembersBulkAction","icon","iconClass","UpdateCustomerGroup","onClick","injector","hostComponent","clearSelection","DataService","NotificationService","removeMembersFromZone","ProfileResolver","BaseEntityResolver","getActiveAdministrator","activeAdministrator","factory","ɵfac","providedIn","createRoutes","pageService","path","component","PageComponent","breadcrumb","resolve","detail","inject","GetProfileDetailDocument","children","getPageTabRoutes","link","GetGlobalSettingsDetailDocument","SettingsModule","bulkActionRegistryService","hasRegisteredTabsAndBulkActions","registerBulkAction","registerPageTab","priority","tab","detailComponentWithResolver","GetSellerDetailDocument","entityKey","getBreadcrumbs","GetChannelDetailDocument","GetAdministratorDetailDocument","GetRoleDetailDocument","GetShippingMethodDetailDocument","GetPaymentMethodDetailDocument","GetTaxCategoryDetailDocument","GetTaxRateDetailDocument","GetCountryDetailDocument","GetZoneDetailDocument","GetStockLocationDetailDocument","provide","ROUTES","useFactory","multi","deps","PageService","imports","SharedModule","RouterModule","forChild"],"sourceRoot":"webpack:///","sources":["../node_modules/rxjs/dist/esm/internal/operators/withLatestFrom.js","./src/lib/settings/src/components/zone-member-list/zone-member-controls.directive.ts","./src/lib/settings/src/components/zone-member-list/zone-member-list-header.directive.ts","./src/lib/settings/src/components/zone-member-list/zone-member-list.component.html","./src/lib/settings/src/components/zone-member-list/zone-member-list.component.ts","./src/lib/settings/src/components/add-country-to-zone-dialog/add-country-to-zone-dialog.component.html","./src/lib/settings/src/components/add-country-to-zone-dialog/add-country-to-zone-dialog.component.ts","./src/lib/settings/src/components/permission-grid/permission-grid.component.html","./src/lib/settings/src/components/permission-grid/permission-grid.component.ts","./src/lib/settings/src/components/admin-detail/admin-detail.component.html","./src/lib/settings/src/components/admin-detail/admin-detail.component.ts","./src/lib/settings/src/components/administrator-list/administrator-list-bulk-actions.ts","./src/lib/settings/src/components/administrator-list/administrator-list.component.html","./src/lib/settings/src/components/administrator-list/administrator-list.component.ts","./src/lib/settings/src/components/channel-detail/channel-detail.component.html","./src/lib/settings/src/components/channel-detail/channel-detail.component.ts","./src/lib/settings/src/components/channel-list/channel-list-bulk-actions.ts","./src/lib/settings/src/components/channel-list/channel-list.component.html","./src/lib/settings/src/components/channel-list/channel-list.component.ts","./src/lib/settings/src/components/country-detail/country-detail.component.html","./src/lib/settings/src/components/country-detail/country-detail.component.ts","./src/lib/settings/src/components/country-list/country-list-bulk-actions.ts","./src/lib/settings/src/components/country-list/country-list.component.html","./src/lib/settings/src/components/country-list/country-list.component.ts","./src/lib/settings/src/components/global-settings/global-settings.component.html","./src/lib/settings/src/components/global-settings/global-settings.component.ts","./src/lib/settings/src/components/payment-method-detail/payment-method-detail.component.html","./src/lib/settings/src/components/payment-method-detail/payment-method-detail.component.ts","./src/lib/settings/src/components/payment-method-list/payment-method-list-bulk-actions.ts","./src/lib/settings/src/components/payment-method-list/payment-method-list.component.html","./src/lib/settings/src/components/payment-method-list/payment-method-list.component.ts","./src/lib/settings/src/components/profile/profile.component.html","./src/lib/settings/src/components/profile/profile.component.ts","./src/lib/settings/src/components/role-detail/role-detail.component.html","./src/lib/settings/src/components/role-detail/role-detail.component.ts","./src/lib/settings/src/components/role-list/role-list-bulk-actions.ts","./src/lib/settings/src/components/role-list/role-list.component.html","./src/lib/settings/src/components/role-list/role-list.component.ts","./src/lib/settings/src/components/seller-detail/seller-detail.component.html","./src/lib/settings/src/components/seller-detail/seller-detail.component.ts","./src/lib/settings/src/components/seller-list/seller-list-bulk-actions.ts","./src/lib/settings/src/components/seller-list/seller-list.component.html","./src/lib/settings/src/components/seller-list/seller-list.component.ts","./src/lib/settings/src/components/shipping-eligibility-test-result/shipping-eligibility-test-result.component.html","./src/lib/settings/src/components/shipping-eligibility-test-result/shipping-eligibility-test-result.component.ts","./src/lib/settings/src/components/test-order-builder/test-order-builder.component.html","./src/lib/settings/src/components/test-order-builder/test-order-builder.component.ts","./src/lib/settings/src/components/test-address-form/test-address-form.component.html","./src/lib/settings/src/components/test-address-form/test-address-form.component.ts","./src/lib/settings/src/components/shipping-method-test-result/shipping-method-test-result.component.html","./src/lib/settings/src/components/shipping-method-test-result/shipping-method-test-result.component.ts","./src/lib/settings/src/components/shipping-method-detail/shipping-method-detail.component.html","./src/lib/settings/src/components/shipping-method-detail/shipping-method-detail.component.ts","./src/lib/settings/src/components/shipping-method-list/shipping-method-list-bulk-actions.ts","./src/lib/settings/src/components/shipping-method-list/shipping-method-list.component.html","./src/lib/settings/src/components/shipping-method-list/shipping-method-list.component.ts","./src/lib/settings/src/components/stock-location-detail/stock-location-detail.component.html","./src/lib/settings/src/components/stock-location-detail/stock-location-detail.component.ts","./src/lib/settings/src/components/stock-location-list/stock-location-list-bulk-actions.ts","./src/lib/settings/src/components/stock-location-list/stock-location-list.component.html","./src/lib/settings/src/components/stock-location-list/stock-location-list.component.ts","./src/lib/settings/src/components/tax-category-detail/tax-category-detail.component.html","./src/lib/settings/src/components/tax-category-detail/tax-category-detail.component.ts","./src/lib/settings/src/components/tax-category-list/tax-category-list-bulk-actions.ts","./src/lib/settings/src/components/tax-category-list/tax-category-list.component.html","./src/lib/settings/src/components/tax-category-list/tax-category-list.component.ts","./src/lib/settings/src/components/tax-rate-detail/tax-rate-detail.component.html","./src/lib/settings/src/components/tax-rate-detail/tax-rate-detail.component.ts","./src/lib/settings/src/components/tax-rate-list/tax-rate-list-bulk-actions.ts","./src/lib/settings/src/components/tax-rate-list/tax-rate-list.component.html","./src/lib/settings/src/components/tax-rate-list/tax-rate-list.component.ts","./src/lib/settings/src/components/test-shipping-methods/test-shipping-methods.component.ts","./src/lib/settings/src/components/zone-detail/zone-detail.component.html","./src/lib/settings/src/components/test-shipping-methods/test-shipping-methods.component.html","./src/lib/settings/src/components/zone-detail/zone-detail.component.ts","./src/lib/settings/src/components/zone-list/zone-list-bulk-actions.ts","./src/lib/settings/src/components/zone-list/zone-list.component.html","./src/lib/settings/src/components/zone-list/zone-list.component.ts","./src/lib/settings/src/components/zone-member-list/zone-member-list-bulk-actions.ts","./src/lib/settings/src/providers/routing/profile-resolver.ts","./src/lib/settings/src/settings.routes.ts","./src/lib/settings/src/settings.module.ts"],"sourcesContent":["import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nimport { innerFrom } from '../observable/innerFrom';\nimport { identity } from '../util/identity';\nimport { noop } from '../util/noop';\nimport { popResultSelector } from '../util/args';\nexport function withLatestFrom(...inputs) {\n const project = popResultSelector(inputs);\n return operate((source, subscriber) => {\n const len = inputs.length;\n const otherValues = new Array(len);\n let hasValue = inputs.map(() => false);\n let ready = false;\n for (let i = 0; i < len; i++) {\n innerFrom(inputs[i]).subscribe(createOperatorSubscriber(subscriber, (value) => {\n otherValues[i] = value;\n if (!ready && !hasValue[i]) {\n hasValue[i] = true;\n (ready = hasValue.every(identity)) && (hasValue = null);\n }\n }, noop));\n }\n source.subscribe(createOperatorSubscriber(subscriber, (value) => {\n if (ready) {\n const values = [value, ...otherValues];\n subscriber.next(project ? project(...values) : values);\n }\n }));\n });\n}\n","import { Directive, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[vdrZoneMemberControls]',\r\n})\r\nexport class ZoneMemberControlsDirective {\r\n constructor(public templateRef: TemplateRef<any>) {}\r\n}\r\n","import { Directive, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[vdrZoneMemberListHeader]',\r\n})\r\nexport class ZoneMemberListHeaderDirective {\r\n constructor(public templateRef: TemplateRef<any>) {}\r\n}\r\n","<vdr-data-table-2\r\n [id]=\"locationId\"\r\n [items]=\"filteredMembers$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [itemsPerPage]=\"itemsPerPage\"\r\n [currentPage]=\"currentPage\"\r\n (itemsPerPageChange)=\"itemsPerPage = $event\"\r\n (pageChange)=\"currentPage = $event\"\r\n>\r\n <vdr-bulk-action-menu\r\n [locationId]=\"locationId\"\r\n [hostComponent]=\"this\"\r\n [selectionManager]=\"selectionManager\"\r\n ></vdr-bulk-action-menu>\r\n <vdr-dt2-search\r\n [searchTermControl]=\"filterTermControl\"\r\n [searchTermPlaceholder]=\"'common.search-by-name' | translate\"\r\n ></vdr-dt2-search>\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\r\n <ng-template let-member=\"item\">\r\n {{ member.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.created-at' | translate\" id=\"created-at\" [hiddenByDefault]=\"true\">\r\n <ng-template let-member=\"item\">\r\n {{ member.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.updated-at' | translate\" id=\"updated-at\" [hiddenByDefault]=\"true\">\r\n <ng-template let-member=\"item\">\r\n {{ member.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.name' | translate\" id=\"name\" [optional]=\"false\">\r\n <ng-template let-member=\"item\">\r\n <a class=\"button-ghost\" [routerLink]=\"['/settings/countries', member.id]\"\r\n ><span> {{ member.name }}</span>\r\n <clr-icon shape=\"arrow right\"></clr-icon>\r\n </a>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.code' | translate\" id=\"code\">\r\n <ng-template let-member=\"item\">\r\n {{ member.code }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.enabled' | translate\" id=\"enabled\">\r\n <ng-template let-member=\"item\">\r\n <vdr-chip *ngIf=\"member.enabled\" colorType=\"success\">{{ 'common.enabled' | translate }}</vdr-chip>\r\n <vdr-chip *ngIf=\"!member.enabled\" colorType=\"warning\">{{ 'common.disabled' | translate }}</vdr-chip>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n</vdr-data-table-2>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ContentChild,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n SimpleChanges,\r\n} from '@angular/core';\r\nimport { FormControl } from '@angular/forms';\r\nimport {\r\n BulkActionLocationId,\r\n DataService,\r\n GetZoneListQuery,\r\n GetZoneMembersDocument,\r\n GetZoneMembersQuery,\r\n ItemOf,\r\n SelectionManager,\r\n} from '@vendure/admin-ui/core';\r\nimport { BehaviorSubject, combineLatest, merge, Observable, of, Subject, switchMap } from 'rxjs';\r\nimport { map, startWith, take, takeUntil } from 'rxjs/operators';\r\n\r\nimport { ZoneMemberControlsDirective } from './zone-member-controls.directive';\r\nimport { ZoneMemberListHeaderDirective } from './zone-member-list-header.directive';\r\n\r\nexport type ZoneMember = { id: string; name: string; code: string };\r\n\r\n@Component({\r\n selector: 'vdr-zone-member-list',\r\n templateUrl: './zone-member-list.component.html',\r\n styleUrls: ['./zone-member-list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ZoneMemberListComponent implements OnInit, OnChanges, OnDestroy {\r\n @Input() locationId: BulkActionLocationId;\r\n @Input() members?: ZoneMember[];\r\n @Input() selectedMemberIds: string[] = [];\r\n @Input() activeZone: ItemOf<GetZoneListQuery, 'zones'>;\r\n @Output() selectionChange = new EventEmitter<string[]>();\r\n @ContentChild(ZoneMemberListHeaderDirective) headerTemplate: ZoneMemberListHeaderDirective;\r\n @ContentChild(ZoneMemberControlsDirective) controlsTemplate: ZoneMemberControlsDirective;\r\n members$: Observable<NonNullable<GetZoneMembersQuery['zone']>['members'] | ZoneMember[]>;\r\n filterTermControl = new FormControl('');\r\n filteredMembers$: Observable<ZoneMember[]>;\r\n totalItems$: Observable<number>;\r\n currentPage = 1;\r\n itemsPerPage = 10;\r\n selectionManager = new SelectionManager<ZoneMember>({\r\n multiSelect: true,\r\n itemsAreEqual: (a, b) => a.id === b.id,\r\n additiveMode: true,\r\n });\r\n private membersInput$ = new Subject<ZoneMember[]>();\r\n private activeZoneInput$ = new BehaviorSubject<ItemOf<GetZoneListQuery, 'zones'> | undefined>(undefined);\r\n private destroy$ = new Subject<void>();\r\n private refresh$ = new Subject<void>();\r\n\r\n constructor(private dataService: DataService) {}\r\n\r\n ngOnInit() {\r\n const activeZoneMembers$ = merge(this.activeZoneInput$, this.refresh$).pipe(\r\n switchMap(activeZone =>\r\n this.activeZone\r\n ? this.dataService\r\n .query(GetZoneMembersDocument, { zoneId: this.activeZone.id })\r\n .mapSingle(({ zone }) => zone?.members ?? [])\r\n : of([]),\r\n ),\r\n );\r\n this.members$ = merge(activeZoneMembers$, this.membersInput$);\r\n\r\n this.members$.pipe(take(1)).subscribe(members => {\r\n this.selectionManager.setCurrentItems(\r\n members?.filter(m => this.selectedMemberIds.includes(m.id)) ?? [],\r\n );\r\n });\r\n this.selectionManager.selectionChanges$.pipe(takeUntil(this.destroy$)).subscribe(selection => {\r\n this.selectionChange.emit(selection.map(s => s.id));\r\n });\r\n this.filteredMembers$ = combineLatest(\r\n this.members$,\r\n this.filterTermControl.valueChanges.pipe(startWith('')),\r\n ).pipe(\r\n map(([members, filterTerm]) => {\r\n if (filterTerm) {\r\n const term = filterTerm?.toLocaleLowerCase() ?? '';\r\n return members.filter(\r\n m =>\r\n m.name.toLocaleLowerCase().includes(term) ||\r\n m.code.toLocaleLowerCase().includes(term),\r\n );\r\n } else {\r\n return members;\r\n }\r\n }),\r\n );\r\n this.totalItems$ = this.filteredMembers$.pipe(map(members => members.length));\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if ('members' in changes) {\r\n this.membersInput$.next(this.members ?? []);\r\n }\r\n if ('activeZone' in changes) {\r\n this.activeZoneInput$.next(this.activeZone);\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n\r\n refresh() {\r\n this.refresh$.next();\r\n }\r\n}\r\n","<ng-template vdrDialogTitle>{{ 'settings.add-countries-to-zone' | translate: { zoneName: zoneName } }}</ng-template>\r\n\r\n<vdr-zone-member-list\r\n [members]=\"availableCountries$ | async\"\r\n [selectedMemberIds]=\"selectedMemberIds\"\r\n (selectionChange)=\"selectedMemberIds = $event\"\r\n>\r\n</vdr-zone-member-list>\r\n\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button type=\"submit\" (click)=\"add()\" [disabled]=\"!selectedMemberIds.length\" class=\"btn btn-primary\">\r\n {{ 'settings.add-countries-to-zone' | translate: { zoneName: zoneName } }}\r\n </button>\r\n</ng-template>\r\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport {\r\n DataService,\r\n Dialog,\r\n GetCountryListDocument,\r\n GetCountryListQuery,\r\n GetZoneListQuery,\r\n GetZoneMembersDocument,\r\n GetZoneMembersQuery,\r\n ItemOf,\r\n} from '@vendure/admin-ui/core';\r\nimport { gql } from 'apollo-angular';\r\nimport { Observable } from 'rxjs';\r\nimport { map, withLatestFrom } from 'rxjs/operators';\r\n\r\nexport const GET_ZONE_MEMBERS = gql`\r\n query GetZoneMembers($zoneId: ID!) {\r\n zone(id: $zoneId) {\r\n id\r\n createdAt\r\n updatedAt\r\n name\r\n members {\r\n createdAt\r\n updatedAt\r\n id\r\n name\r\n code\r\n enabled\r\n }\r\n }\r\n }\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-add-country-to-zone-dialog',\r\n templateUrl: './add-country-to-zone-dialog.component.html',\r\n styleUrls: ['./add-country-to-zone-dialog.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class AddCountryToZoneDialogComponent implements Dialog<string[]>, OnInit {\r\n resolveWith: (result?: string[]) => void;\r\n zoneName: string;\r\n zoneId: string;\r\n currentMembers$: Observable<NonNullable<GetZoneMembersQuery['zone']>['members']>;\r\n availableCountries$: Observable<Array<ItemOf<GetCountryListQuery, 'countries'>>>;\r\n selectedMemberIds: string[] = [];\r\n\r\n constructor(private dataService: DataService) {}\r\n\r\n ngOnInit(): void {\r\n this.currentMembers$ = this.dataService\r\n .query(GetZoneMembersDocument, { zoneId: this.zoneId })\r\n .mapSingle(({ zone }) => zone?.members ?? []);\r\n this.availableCountries$ = this.dataService\r\n .query(GetCountryListDocument, {\r\n options: { take: 999 },\r\n })\r\n .mapStream(data => data.countries.items)\r\n .pipe(\r\n withLatestFrom(this.currentMembers$),\r\n map(([countries, currentMembers]) =>\r\n countries.filter(c => !currentMembers.find(cm => cm.id === c.id)),\r\n ),\r\n );\r\n }\r\n\r\n cancel() {\r\n this.resolveWith();\r\n }\r\n\r\n add() {\r\n this.resolveWith(this.selectedMemberIds);\r\n }\r\n}\r\n","<table class=\"table\">\r\n <tbody>\r\n <tr *ngFor=\"let section of gridData\">\r\n <td class=\"permission-group left\">\r\n <div><strong>{{ section.label | translate }}</strong></div>\r\n <small>{{ section.description | translate }}</small><br>\r\n <button *ngIf=\"1 < section.permissions.length && !readonly\" class=\"button-small\" (click)=\"toggleAll(section.permissions)\">\r\n {{ 'common.toggle-all' | translate }}\r\n </button>\r\n </td>\r\n <td *ngFor=\"let permission of section.permissions\" [attr.colspan]=\"section.permissions.length === 1 ? 4 : 1\">\r\n <vdr-select-toggle\r\n size=\"small\"\r\n [title]=\"permission.description\"\r\n [label]=\"permission.name\"\r\n [disabled]=\"readonly\"\r\n [selected]=\"activePermissions?.includes(permission.name)\"\r\n (selectedChange)=\"setPermission(permission.name, $event)\"\r\n ></vdr-select-toggle>\r\n </td>\r\n </tr>\r\n </tbody>\r\n</table>\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport { PermissionDefinition } from '@vendure/admin-ui/core';\r\n\r\nexport interface PermissionGridRow {\r\n label: string;\r\n description: string;\r\n permissions: PermissionDefinition[];\r\n}\r\n\r\n/**\r\n * A table showing and allowing the setting of all possible CRUD permissions.\r\n */\r\n@Component({\r\n selector: 'vdr-permission-grid',\r\n templateUrl: './permission-grid.component.html',\r\n styleUrls: ['./permission-grid.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PermissionGridComponent implements OnInit {\r\n @Input() permissionDefinitions: PermissionDefinition[];\r\n @Input() activePermissions: string[];\r\n @Input() readonly = false;\r\n @Output() permissionChange = new EventEmitter<{ permission: string; value: boolean }>();\r\n gridData: PermissionGridRow[];\r\n\r\n ngOnInit() {\r\n this.buildGrid();\r\n }\r\n\r\n setPermission(permission: string, value: boolean) {\r\n if (!this.readonly) {\r\n this.permissionChange.emit({ permission, value });\r\n }\r\n }\r\n\r\n toggleAll(defs: PermissionDefinition[]) {\r\n const value = defs.some(d => !this.activePermissions.includes(d.name));\r\n for (const def of defs) {\r\n this.permissionChange.emit({ permission: def.name, value });\r\n }\r\n }\r\n\r\n private buildGrid() {\r\n const crudGroups = new Map<string, PermissionDefinition[]>();\r\n const nonCrud: PermissionDefinition[] = [];\r\n const crudRe = /^(Create|Read|Update|Delete)([a-zA-Z]+)$/;\r\n for (const def of this.permissionDefinitions) {\r\n const isCrud = crudRe.test(def.name);\r\n if (isCrud) {\r\n const groupName = def.name.match(crudRe)?.[2];\r\n if (groupName) {\r\n const existing = crudGroups.get(groupName);\r\n if (existing) {\r\n existing.push(def);\r\n } else {\r\n crudGroups.set(groupName, [def]);\r\n }\r\n }\r\n } else if (def.assignable) {\r\n nonCrud.push(def);\r\n }\r\n }\r\n this.gridData = [\r\n ...nonCrud.map(d => ({\r\n label: d.name,\r\n description: d.description,\r\n permissions: [d],\r\n })),\r\n ...Array.from(crudGroups.entries()).map(([label, defs]) => ({\r\n label,\r\n description: this.extractCrudDescription(defs[0]),\r\n permissions: defs,\r\n })),\r\n ];\r\n }\r\n\r\n private extractCrudDescription(def: PermissionDefinition): string {\r\n return def.description.replace(/Grants permission to [\\w]+/, 'Grants permissions on');\r\n }\r\n}\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left> </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"administrator-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"isNew$ | async; else updateButton\"\r\n (click)=\"create()\"\r\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n *vdrIfPermissions=\"'UpdateAdministrator'\"\r\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </ng-template>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n\r\n<form class=\"form\" [formGroup]=\"detailForm\">\r\n <vdr-page-detail-layout>\r\n <vdr-page-detail-sidebar>\r\n <vdr-card *ngIf=\"entity$ | async as entity\">\r\n <vdr-page-entity-info [entity]=\"entity\" />\r\n </vdr-card>\r\n </vdr-page-detail-sidebar>\r\n <vdr-page-block>\r\n <vdr-card>\r\n <div class=\"form-grid\">\r\n <vdr-form-field\r\n [label]=\"'settings.email-address-or-identifier' | translate\"\r\n for=\"emailAddress\"\r\n class=\"form-grid-span\"\r\n >\r\n <input\r\n id=\"emailAddress\"\r\n type=\"text\"\r\n formControlName=\"emailAddress\"\r\n [readonly]=\"!(['CreateAdministrator', 'UpdateAdministrator'] | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'settings.first-name' | translate\" for=\"firstName\">\r\n <input\r\n id=\"firstName\"\r\n type=\"text\"\r\n formControlName=\"firstName\"\r\n [readonly]=\"!(['CreateAdministrator', 'UpdateAdministrator'] | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'settings.last-name' | translate\" for=\"lastName\">\r\n <input\r\n id=\"lastName\"\r\n type=\"text\"\r\n formControlName=\"lastName\"\r\n [readonly]=\"!(['CreateAdministrator', 'UpdateAdministrator'] | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n *ngIf=\"isNew$ | async\"\r\n [label]=\"'settings.password' | translate\"\r\n for=\"password\"\r\n >\r\n <input id=\"password\" type=\"password\" formControlName=\"password\" />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n *ngIf=\"\r\n !(isNew$ | async) &&\r\n (['CreateAdministrator', 'UpdateAdministrator'] | hasPermission)\r\n \"\r\n [label]=\"'settings.password' | translate\"\r\n for=\"password\"\r\n [readOnlyToggle]=\"true\"\r\n >\r\n <input id=\"password\" type=\"password\" formControlName=\"password\" />\r\n </vdr-form-field>\r\n </div>\r\n </vdr-card>\r\n\r\n <vdr-card\r\n formGroupName=\"customFields\"\r\n *ngIf=\"customFields.length\"\r\n [title]=\"'common.custom-fields' | translate\"\r\n >\r\n <vdr-tabbed-custom-fields\r\n entityName=\"Administrator\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n ></vdr-tabbed-custom-fields>\r\n </vdr-card>\r\n <vdr-custom-detail-component-host\r\n locationId=\"administrator-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n </vdr-page-block>\r\n </vdr-page-detail-layout>\r\n <vdr-page-block>\r\n <vdr-card [title]=\"'settings.roles' | translate\">\r\n <ng-select\r\n [items]=\"allRoles$ | async\"\r\n [multiple]=\"true\"\r\n [hideSelected]=\"true\"\r\n formControlName=\"roles\"\r\n (change)=\"rolesChanged($event)\"\r\n bindLabel=\"description\"\r\n ></ng-select>\r\n\r\n <ul class=\"nav mt-2\" role=\"tablist\">\r\n <li role=\"presentation\" class=\"nav-item\" *ngFor=\"let channel of getAvailableChannels()\">\r\n <button\r\n [id]=\"channel.channelId\"\r\n (click)=\"selectedChannelId = channel.channelId\"\r\n class=\"btn btn-link nav-link\"\r\n [class.active]=\"selectedChannelId === channel.channelId\"\r\n [attr.aria-selected]=\"selectedChannelId === channel.channelId\"\r\n type=\"button\"\r\n >\r\n {{ channel.channelCode | channelCodeToLabel | translate }}\r\n </button>\r\n </li>\r\n </ul>\r\n <vdr-permission-grid\r\n [activePermissions]=\"getPermissionsForSelectedChannel()\"\r\n [permissionDefinitions]=\"permissionDefinitions\"\r\n [readonly]=\"true\"\r\n ></vdr-permission-grid>\r\n </vdr-card>\r\n </vdr-page-block>\r\n</form>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { FormBuilder, Validators } from '@angular/forms';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport { ResultOf } from '@graphql-typed-document-node/core';\r\nimport {\r\n ADMINISTRATOR_FRAGMENT,\r\n CreateAdministratorInput,\r\n DataService,\r\n GetAdministratorDetailDocument,\r\n getCustomFieldsDefaults,\r\n LanguageCode,\r\n NotificationService,\r\n Permission,\r\n PermissionDefinition,\r\n RoleFragment,\r\n TypedBaseDetailComponent,\r\n UpdateAdministratorInput,\r\n} from '@vendure/admin-ui/core';\r\nimport { CUSTOMER_ROLE_CODE } from '@vendure/common/lib/shared-constants';\r\nimport { notNullOrUndefined } from '@vendure/common/lib/shared-utils';\r\nimport { gql } from 'apollo-angular';\r\nimport { Observable } from 'rxjs';\r\nimport { mergeMap, take } from 'rxjs/operators';\r\n\r\nexport interface PermissionsByChannel {\r\n channelId: string;\r\n channelCode: string;\r\n permissions: { [K in Permission]: boolean };\r\n}\r\n\r\nexport const GET_ADMINISTRATOR_DETAIL = gql`\r\n query GetAdministratorDetail($id: ID!) {\r\n administrator(id: $id) {\r\n ...Administrator\r\n }\r\n }\r\n ${ADMINISTRATOR_FRAGMENT}\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-admin-detail',\r\n templateUrl: './admin-detail.component.html',\r\n styleUrls: ['./admin-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class AdminDetailComponent\r\n extends TypedBaseDetailComponent<typeof GetAdministratorDetailDocument, 'administrator'>\r\n implements OnInit, OnDestroy\r\n{\r\n customFields = this.getCustomFieldConfig('Administrator');\r\n detailForm = this.formBuilder.group({\r\n emailAddress: ['', Validators.required],\r\n firstName: ['', Validators.required],\r\n lastName: ['', Validators.required],\r\n password: [''],\r\n roles: [\r\n [] as NonNullable<\r\n ResultOf<typeof GetAdministratorDetailDocument>['administrator']\r\n >['user']['roles'],\r\n ],\r\n customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),\r\n });\r\n permissionDefinitions: PermissionDefinition[];\r\n allRoles$: Observable<RoleFragment[]>;\r\n selectedRoles: RoleFragment[] = [];\r\n selectedRolePermissions: { [channelId: string]: PermissionsByChannel } = {} as any;\r\n selectedChannelId: string | null = null;\r\n\r\n getAvailableChannels(): PermissionsByChannel[] {\r\n return Object.values(this.selectedRolePermissions);\r\n }\r\n\r\n constructor(\r\n private changeDetector: ChangeDetectorRef,\r\n protected dataService: DataService,\r\n private formBuilder: FormBuilder,\r\n private notificationService: NotificationService,\r\n ) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n this.init();\r\n this.allRoles$ = this.dataService.administrator\r\n .getRoles(999)\r\n .mapStream(item => item.roles.items.filter(i => i.code !== CUSTOMER_ROLE_CODE));\r\n this.dataService.client.userStatus().single$.subscribe(({ userStatus }) => {\r\n if (\r\n !userStatus.permissions.includes(Permission.CreateAdministrator) &&\r\n !userStatus.permissions.includes(Permission.UpdateAdministrator)\r\n ) {\r\n const rolesSelect = this.detailForm.get('roles');\r\n if (rolesSelect) {\r\n rolesSelect.disable();\r\n }\r\n }\r\n });\r\n this.permissionDefinitions = this.serverConfigService.getPermissionDefinitions();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy();\r\n }\r\n\r\n rolesChanged(roles: RoleFragment[]) {\r\n this.buildPermissionsMap();\r\n }\r\n\r\n getPermissionsForSelectedChannel(): string[] {\r\n function getActivePermissions(input: PermissionsByChannel['permissions']): string[] {\r\n return Object.entries(input)\r\n .filter(([permission, active]) => active)\r\n .map(([permission, active]) => permission);\r\n }\r\n if (this.selectedChannelId) {\r\n const selectedChannel = this.selectedRolePermissions[this.selectedChannelId];\r\n if (selectedChannel) {\r\n const permissionMap = this.selectedRolePermissions[this.selectedChannelId].permissions;\r\n return getActivePermissions(permissionMap);\r\n }\r\n }\r\n const channels = Object.values(this.selectedRolePermissions);\r\n if (0 < channels.length) {\r\n this.selectedChannelId = channels[0].channelId;\r\n return getActivePermissions(channels[0].permissions);\r\n }\r\n return [];\r\n }\r\n\r\n create() {\r\n const { emailAddress, firstName, lastName, password, customFields, roles } = this.detailForm.value;\r\n if (!emailAddress || !firstName || !lastName || !password) {\r\n return;\r\n }\r\n const administrator: CreateAdministratorInput = {\r\n emailAddress,\r\n firstName,\r\n lastName,\r\n password,\r\n customFields,\r\n roleIds: roles?.map(role => role.id).filter(notNullOrUndefined) ?? [],\r\n };\r\n this.dataService.administrator.createAdministrator(administrator).subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-create-success'), {\r\n entity: 'Administrator',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n this.router.navigate(['../', data.createAdministrator.id], { relativeTo: this.route });\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-create-error'), {\r\n entity: 'Administrator',\r\n });\r\n },\r\n );\r\n }\r\n\r\n save() {\r\n this.entity$\r\n .pipe(\r\n take(1),\r\n mergeMap(({ id }) => {\r\n const formValue = this.detailForm.value;\r\n const administrator: UpdateAdministratorInput = {\r\n id,\r\n emailAddress: formValue.emailAddress,\r\n firstName: formValue.firstName,\r\n lastName: formValue.lastName,\r\n password: formValue.password,\r\n customFields: formValue.customFields,\r\n roleIds: formValue.roles?.map(role => role.id),\r\n };\r\n return this.dataService.administrator.updateAdministrator(administrator);\r\n }),\r\n )\r\n .subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-update-success'), {\r\n entity: 'Administrator',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-update-error'), {\r\n entity: 'Administrator',\r\n });\r\n },\r\n );\r\n }\r\n\r\n protected setFormValues(\r\n entity: NonNullable<ResultOf<typeof GetAdministratorDetailDocument>['administrator']>,\r\n languageCode: LanguageCode,\r\n ) {\r\n this.detailForm.patchValue({\r\n emailAddress: entity.emailAddress,\r\n firstName: entity.firstName,\r\n lastName: entity.lastName,\r\n roles: entity.user.roles,\r\n });\r\n if (this.customFields.length) {\r\n this.setCustomFieldFormValues(this.customFields, this.detailForm.get(['customFields']), entity);\r\n }\r\n const passwordControl = this.detailForm.get('password');\r\n if (passwordControl) {\r\n if (!entity.id) {\r\n passwordControl.setValidators([Validators.required]);\r\n } else {\r\n passwordControl.setValidators([]);\r\n }\r\n }\r\n this.buildPermissionsMap();\r\n }\r\n\r\n private buildPermissionsMap() {\r\n const permissionsControl = this.detailForm.get('roles');\r\n if (permissionsControl) {\r\n const roles = permissionsControl.value;\r\n const channelIdPermissionsMap = new Map<string, Set<Permission>>();\r\n const channelIdCodeMap = new Map<string, string>();\r\n\r\n for (const role of roles ?? []) {\r\n for (const channel of role.channels) {\r\n const channelPermissions = channelIdPermissionsMap.get(channel.id);\r\n const permissionSet = channelPermissions || new Set<Permission>();\r\n\r\n role.permissions.forEach(p => permissionSet.add(p));\r\n channelIdPermissionsMap.set(channel.id, permissionSet);\r\n channelIdCodeMap.set(channel.id, channel.code);\r\n }\r\n }\r\n\r\n this.selectedRolePermissions = {} as any;\r\n for (const channelId of Array.from(channelIdPermissionsMap.keys())) {\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n const permissionSet = channelIdPermissionsMap.get(channelId)!;\r\n const permissionsHash: { [K in Permission]: boolean } = {} as any;\r\n for (const def of this.serverConfigService.getPermissionDefinitions()) {\r\n permissionsHash[def.name] = permissionSet.has(def.name as Permission);\r\n }\r\n this.selectedRolePermissions[channelId] = {\r\n /* eslint-disable @typescript-eslint/no-non-null-assertion */\r\n channelId,\r\n channelCode: channelIdCodeMap.get(channelId)!,\r\n permissions: permissionsHash,\r\n /* eslint-enable @typescript-eslint/no-non-null-assertion */\r\n };\r\n }\r\n }\r\n }\r\n}\r\n","import {\r\n createBulkDeleteAction,\r\n GetAdministratorListQuery,\r\n ItemOf,\r\n Permission,\r\n} from '@vendure/admin-ui/core';\r\nimport { map } from 'rxjs/operators';\r\n\r\nexport const deleteAdministratorsBulkAction = createBulkDeleteAction<\r\n ItemOf<GetAdministratorListQuery, 'administrators'>\r\n>({\r\n location: 'administrator-list',\r\n requiresPermission: userPermissions => userPermissions.includes(Permission.DeleteAdministrator),\r\n getItemName: item => item.firstName + ' ' + item.lastName,\r\n bulkDelete: (dataService, ids) =>\r\n dataService.administrator.deleteAdministrators(ids).pipe(map(res => res.deleteAdministrators)),\r\n});\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left> </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"administrator-list\"></vdr-action-bar-items>\r\n <a\r\n class=\"btn btn-primary\"\r\n *vdrIfPermissions=\"['CreateAdministrator']\"\r\n [routerLink]=\"['./', 'create']\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'admin.create-new-administrator' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n<vdr-data-table-2\r\n class=\"mt-2\"\r\n id=\"administrator-list\"\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n [filters]=\"filters\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n>\r\n <vdr-bulk-action-menu\r\n locationId=\"administrator-list\"\r\n [hostComponent]=\"this\"\r\n [selectionManager]=\"selectionManager\"\r\n />\r\n <vdr-dt2-search\r\n [searchTermControl]=\"searchTermControl\"\r\n [searchTermPlaceholder]=\"'catalog.filter-by-name' | translate\"\r\n />\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\r\n <ng-template let-administrator=\"item\">\r\n {{ administrator.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.created-at' | translate\" id=\"created-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('createdAt')\"\r\n >\r\n <ng-template let-administrator=\"item\">\r\n {{ administrator.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.updated-at' | translate\" id=\"updated-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('updatedAt')\"\r\n >\r\n <ng-template let-administrator=\"item\">\r\n {{ administrator.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.name' | translate\" id=\"name\" [optional]=\"false\" [sort]=\"sorts.get('lastName')\">\r\n <ng-template let-administrator=\"item\">\r\n <a class=\"button-ghost\" [routerLink]=\"['./', administrator.id]\"\r\n ><span>{{ administrator.firstName }} {{ administrator.lastName }}</span>\r\n <clr-icon shape=\"arrow right\"></clr-icon>\r\n </a>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'settings.email-address' | translate\" id=\"email-address\" [sort]=\"sorts.get('emailAddress')\">\r\n <ng-template let-administrator=\"item\">\r\n {{ administrator.emailAddress }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'settings.roles' | translate\" id=\"roles\">\r\n <ng-template let-administrator=\"item\">\r\n <vdr-chip *ngFor=\"let role of administrator.user.roles\">{{ role.description }}</vdr-chip>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-custom-field-column\r\n *ngFor=\"let customField of customFields\"\r\n [customField]=\"customField\"\r\n [sorts]=\"sorts\"\r\n />\r\n</vdr-data-table-2>\r\n","import { Component } from '@angular/core';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n ADMINISTRATOR_FRAGMENT,\r\n GetAdministratorListDocument,\r\n LogicalOperator,\r\n TypedBaseListComponent,\r\n} from '@vendure/admin-ui/core';\r\nimport { gql } from 'apollo-angular';\r\n\r\nexport const GET_ADMINISTRATOR_LIST = gql`\r\n query GetAdministratorList($options: AdministratorListOptions) {\r\n administrators(options: $options) {\r\n items {\r\n ...AdministratorListItem\r\n }\r\n totalItems\r\n }\r\n }\r\n fragment AdministratorListItem on Administrator {\r\n id\r\n createdAt\r\n updatedAt\r\n firstName\r\n lastName\r\n emailAddress\r\n user {\r\n id\r\n identifier\r\n lastLogin\r\n roles {\r\n id\r\n createdAt\r\n updatedAt\r\n code\r\n description\r\n }\r\n }\r\n }\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-administrator-list',\r\n templateUrl: './administrator-list.component.html',\r\n styleUrls: ['./administrator-list.component.scss'],\r\n})\r\nexport class AdministratorListComponent extends TypedBaseListComponent<\r\n typeof GetAdministratorListDocument,\r\n 'administrators'\r\n> {\r\n readonly customFields = this.getCustomFieldConfig('Administrator');\r\n readonly filters = this.createFilterCollection()\r\n .addIdFilter()\r\n .addDateFilters()\r\n .addFilter({\r\n name: 'firstName',\r\n type: { kind: 'text' },\r\n label: _('settings.first-name'),\r\n filterField: 'firstName',\r\n })\r\n .addFilter({\r\n name: 'lastName',\r\n type: { kind: 'text' },\r\n label: _('settings.last-name'),\r\n filterField: 'lastName',\r\n })\r\n .addFilter({\r\n name: 'emailAddress',\r\n type: { kind: 'text' },\r\n label: _('settings.email-address'),\r\n filterField: 'emailAddress',\r\n })\r\n .addCustomFieldFilters(this.customFields)\r\n .connectToRoute(this.route);\r\n\r\n readonly sorts = this.createSortCollection()\r\n .defaultSort('createdAt', 'DESC')\r\n .addSort({ name: 'createdAt' })\r\n .addSort({ name: 'updatedAt' })\r\n .addSort({ name: 'lastName' })\r\n .addSort({ name: 'emailAddress' })\r\n .addCustomFieldSorts(this.customFields)\r\n .connectToRoute(this.route);\r\n\r\n constructor() {\r\n super();\r\n super.configure({\r\n document: GetAdministratorListDocument,\r\n getItems: data => data.administrators,\r\n setVariables: (skip, take) => this.createSearchQuery(skip, take, this.searchTermControl.value),\r\n refreshListOnChanges: [this.filters.valueChanges, this.sorts.valueChanges],\r\n });\r\n }\r\n\r\n createSearchQuery(skip: number, take: number, searchTerm: string | null) {\r\n let _filter = {};\r\n let filterOperator: LogicalOperator = LogicalOperator.AND;\r\n\r\n if (searchTerm) {\r\n _filter = {\r\n emailAddress: {\r\n contains: searchTerm,\r\n },\r\n firstName: {\r\n contains: searchTerm,\r\n },\r\n lastName: {\r\n contains: searchTerm,\r\n },\r\n };\r\n filterOperator = LogicalOperator.OR;\r\n }\r\n return {\r\n options: {\r\n skip,\r\n take,\r\n filter: {\r\n ...(_filter ?? {}),\r\n ...this.filters.createFilterInput(),\r\n },\r\n sort: this.sorts.createSortInput(),\r\n filterOperator,\r\n },\r\n };\r\n }\r\n}\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left></vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"channel-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"isNew$ | async; else updateButton\"\r\n (click)=\"create()\"\r\n [disabled]=\"!saveButtonEnabled()\"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n *vdrIfPermissions=\"['SuperAdmin', 'UpdateChannel']\"\r\n [disabled]=\"!saveButtonEnabled()\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </ng-template>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n\r\n<form class=\"form\" [formGroup]=\"detailForm\">\r\n <vdr-page-detail-layout>\r\n <vdr-page-detail-sidebar>\r\n <vdr-card *ngIf=\"entity$ | async as entity\">\r\n <vdr-page-entity-info [entity]=\"entity\" />\r\n </vdr-card>\r\n </vdr-page-detail-sidebar>\r\n <vdr-page-block>\r\n <vdr-card>\r\n <div class=\"form-grid\">\r\n <vdr-form-field\r\n class=\"form-grid-span\"\r\n *ngIf=\"entity?.code !== DEFAULT_CHANNEL_CODE\"\r\n [label]=\"'common.code' | translate\"\r\n for=\"code\"\r\n >\r\n <input\r\n id=\"code\"\r\n type=\"text\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n formControlName=\"code\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-item\r\n class=\"form-grid-span\"\r\n *ngIf=\"entity?.code === DEFAULT_CHANNEL_CODE\"\r\n [label]=\"'common.code' | translate\"\r\n >\r\n {{ entity?.code | channelCodeToLabel | translate }}\r\n </vdr-form-item>\r\n <vdr-form-field [label]=\"'settings.channel-token' | translate\" for=\"token\">\r\n <input\r\n id=\"token\"\r\n type=\"text\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n formControlName=\"token\"\r\n />\r\n </vdr-form-field>\r\n\r\n <vdr-form-field [label]=\"'common.seller' | translate\" for=\"sellerId\">\r\n <select\r\n name=\"sellerId\"\r\n formControlName=\"sellerId\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n >\r\n <option selected value style=\"display: none\"></option>\r\n <option *ngFor=\"let seller of sellers$ | async\" [value]=\"seller.id\">\r\n {{ seller.name }}\r\n </option>\r\n </select>\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'common.available-languages' | translate\"\r\n for=\"availableLanguageCodes\"\r\n >\r\n <vdr-language-code-selector\r\n formControlName=\"availableLanguageCodes\"\r\n [languageCodes]=\"availableLanguageCodes$ | async\"\r\n ></vdr-language-code-selector>\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'common.available-currencies' | translate\"\r\n for=\"availableCurrencyCodes\"\r\n >\r\n <vdr-currency-code-selector\r\n formControlName=\"availableCurrencyCodes\"\r\n ></vdr-currency-code-selector>\r\n </vdr-form-field>\r\n </div>\r\n </vdr-card>\r\n <vdr-card [title]=\"'settings.defaults' | translate\">\r\n <div class=\"form-grid\">\r\n <vdr-form-field [label]=\"'settings.default-currency' | translate\" for=\"defaultTaxZoneId\">\r\n <select\r\n name=\"defaultCurrencyCode\"\r\n formControlName=\"defaultCurrencyCode\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n >\r\n <option\r\n *ngFor=\"let code of detailForm.value.availableCurrencyCodes\"\r\n [value]=\"code\"\r\n >\r\n {{ code | localeCurrencyName }}\r\n </option>\r\n </select>\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'common.default-language' | translate\" for=\"defaultLanguage\">\r\n <select\r\n name=\"defaultLanguageCode\"\r\n formControlName=\"defaultLanguageCode\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n >\r\n <option\r\n *ngFor=\"let languageCode of detailForm.value.availableLanguageCodes\"\r\n [value]=\"languageCode\"\r\n >\r\n {{ languageCode | localeLanguageName }} ({{ languageCode | uppercase }})\r\n </option>\r\n </select>\r\n </vdr-form-field>\r\n <div>\r\n <vdr-form-field\r\n [label]=\"'settings.default-tax-zone' | translate\"\r\n for=\"defaultTaxZoneId\"\r\n >\r\n <vdr-zone-selector\r\n formControlName=\"defaultTaxZoneId\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n ></vdr-zone-selector>\r\n </vdr-form-field>\r\n <clr-alert\r\n *ngIf=\"detailForm.value.code && !detailForm.value.defaultTaxZoneId\"\r\n clrAlertType=\"danger\"\r\n [clrAlertClosable]=\"false\"\r\n >\r\n <clr-alert-item>\r\n <span class=\"alert-text\">\r\n {{ 'error.no-default-tax-zone-set' | translate }}\r\n </span>\r\n </clr-alert-item>\r\n </clr-alert>\r\n </div>\r\n\r\n <div>\r\n <vdr-form-field\r\n [label]=\"'settings.default-shipping-zone' | translate\"\r\n for=\"defaultShippingZoneId\"\r\n >\r\n <vdr-zone-selector\r\n name=\"defaultShippingZoneId\"\r\n formControlName=\"defaultShippingZoneId\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n ></vdr-zone-selector>\r\n </vdr-form-field>\r\n <clr-alert\r\n *ngIf=\"detailForm.value.code && !detailForm.value.defaultShippingZoneId\"\r\n clrAlertType=\"warning\"\r\n [clrAlertClosable]=\"false\"\r\n >\r\n <clr-alert-item>\r\n <span class=\"alert-text\">\r\n {{ 'error.no-default-shipping-zone-set' | translate }}\r\n </span>\r\n </clr-alert-item>\r\n </clr-alert>\r\n </div>\r\n <vdr-form-field\r\n [label]=\"'settings.prices-include-tax' | translate\"\r\n for=\"pricesIncludeTax\"\r\n >\r\n <clr-toggle-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n clrToggle\r\n id=\"pricesIncludeTax\"\r\n formControlName=\"pricesIncludeTax\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </clr-toggle-wrapper>\r\n </vdr-form-field>\r\n </div>\r\n </vdr-card>\r\n <vdr-card\r\n formGroupName=\"customFields\"\r\n *ngIf=\"customFields.length\"\r\n [title]=\"'common.custom-fields' | translate\"\r\n >\r\n <vdr-tabbed-custom-fields\r\n entityName=\"Channel\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n ></vdr-tabbed-custom-fields>\r\n </vdr-card>\r\n <vdr-custom-detail-component-host\r\n locationId=\"channel-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n </vdr-page-block>\r\n </vdr-page-detail-layout>\r\n</form>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { FormBuilder, Validators } from '@angular/forms';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n CHANNEL_FRAGMENT,\r\n ChannelFragment,\r\n CreateChannelInput,\r\n CurrencyCode,\r\n DataService,\r\n GetChannelDetailDocument,\r\n getCustomFieldsDefaults,\r\n GetSellersQuery,\r\n LanguageCode,\r\n NotificationService,\r\n Permission,\r\n ServerConfigService,\r\n TypedBaseDetailComponent,\r\n UpdateChannelInput,\r\n} from '@vendure/admin-ui/core';\r\nimport { DEFAULT_CHANNEL_CODE } from '@vendure/common/lib/shared-constants';\r\nimport { gql } from 'apollo-angular';\r\nimport { Observable } from 'rxjs';\r\nimport { map, mergeMap, take } from 'rxjs/operators';\r\n\r\nexport const GET_CHANNEL_DETAIL = gql`\r\n query GetChannelDetail($id: ID!) {\r\n channel(id: $id) {\r\n ...Channel\r\n }\r\n }\r\n ${CHANNEL_FRAGMENT}\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-channel-detail',\r\n templateUrl: './channel-detail.component.html',\r\n styleUrls: ['./channel-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ChannelDetailComponent\r\n extends TypedBaseDetailComponent<typeof GetChannelDetailDocument, 'channel'>\r\n implements OnInit, OnDestroy\r\n{\r\n DEFAULT_CHANNEL_CODE = DEFAULT_CHANNEL_CODE;\r\n customFields = this.getCustomFieldConfig('Channel');\r\n // zones$: Observable<Array<ItemOf<GetZoneListQuery, 'zones'>>>;\r\n sellers$: Observable<GetSellersQuery['sellers']['items']>;\r\n detailForm = this.formBuilder.group({\r\n code: ['', Validators.required],\r\n token: ['', Validators.required],\r\n pricesIncludeTax: [false],\r\n availableLanguageCodes: [[] as string[]],\r\n availableCurrencyCodes: [[] as string[]],\r\n defaultCurrencyCode: ['' as CurrencyCode],\r\n defaultShippingZoneId: ['', Validators.required],\r\n defaultLanguageCode: [undefined as LanguageCode | undefined],\r\n defaultTaxZoneId: ['', Validators.required],\r\n sellerId: ['', Validators.required],\r\n customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),\r\n });\r\n\r\n availableLanguageCodes$: Observable<LanguageCode[]>;\r\n readonly updatePermission = [Permission.SuperAdmin, Permission.UpdateChannel, Permission.CreateChannel];\r\n\r\n constructor(\r\n protected serverConfigService: ServerConfigService,\r\n private changeDetector: ChangeDetectorRef,\r\n protected dataService: DataService,\r\n private formBuilder: FormBuilder,\r\n private notificationService: NotificationService,\r\n ) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n this.init();\r\n // this.zones$ = this.dataService.settings.getZones({ take: 100 }).mapSingle(data => data.zones.items);\r\n // TODO: make this lazy-loaded autocomplete\r\n this.sellers$ = this.dataService.settings.getSellerList().mapSingle(data => data.sellers.items);\r\n this.availableLanguageCodes$ = this.serverConfigService.getAvailableLanguages();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroy();\r\n }\r\n\r\n saveButtonEnabled(): boolean {\r\n return this.detailForm.dirty && this.detailForm.valid;\r\n }\r\n\r\n create() {\r\n if (!this.detailForm.dirty) {\r\n return;\r\n }\r\n const {\r\n code,\r\n token,\r\n defaultLanguageCode,\r\n pricesIncludeTax,\r\n defaultCurrencyCode,\r\n defaultShippingZoneId,\r\n defaultTaxZoneId,\r\n customFields,\r\n sellerId,\r\n } = this.detailForm.value;\r\n if (\r\n !code ||\r\n !token ||\r\n !defaultLanguageCode ||\r\n !defaultCurrencyCode ||\r\n !defaultShippingZoneId ||\r\n !defaultTaxZoneId\r\n ) {\r\n return;\r\n }\r\n const input: CreateChannelInput = {\r\n code,\r\n token,\r\n defaultLanguageCode,\r\n pricesIncludeTax: !!pricesIncludeTax,\r\n defaultCurrencyCode,\r\n defaultShippingZoneId,\r\n defaultTaxZoneId,\r\n customFields,\r\n sellerId,\r\n };\r\n this.dataService.settings\r\n .createChannel(input)\r\n .pipe(\r\n mergeMap(({ createChannel }) =>\r\n this.dataService.auth.currentUser().single$.pipe(\r\n map(({ me }) => ({\r\n me,\r\n createChannel,\r\n })),\r\n ),\r\n ),\r\n mergeMap(({ me, createChannel }) =>\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n this.dataService.client.updateUserChannels(me!.channels).pipe(map(() => createChannel)),\r\n ),\r\n )\r\n .subscribe(data => {\r\n switch (data.__typename) {\r\n case 'Channel':\r\n this.notificationService.success(_('common.notify-create-success'), {\r\n entity: 'Channel',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n this.router.navigate(['../', data.id], { relativeTo: this.route });\r\n break;\r\n case 'LanguageNotAvailableError':\r\n this.notificationService.error(data.message);\r\n break;\r\n }\r\n });\r\n }\r\n\r\n save() {\r\n if (!this.detailForm.dirty) {\r\n return;\r\n }\r\n const formValue = this.detailForm.value;\r\n this.entity$\r\n .pipe(\r\n take(1),\r\n mergeMap(channel => {\r\n const input = {\r\n id: channel.id,\r\n code: formValue.code,\r\n token: formValue.token,\r\n pricesIncludeTax: formValue.pricesIncludeTax,\r\n availableLanguageCodes: formValue.availableLanguageCodes,\r\n availableCurrencyCodes: formValue.availableCurrencyCodes,\r\n defaultCurrencyCode: formValue.defaultCurrencyCode,\r\n defaultShippingZoneId: formValue.defaultShippingZoneId,\r\n defaultLanguageCode: formValue.defaultLanguageCode,\r\n defaultTaxZoneId: formValue.defaultTaxZoneId,\r\n customFields: formValue.customFields,\r\n sellerId: formValue.sellerId,\r\n } as UpdateChannelInput;\r\n return this.dataService.settings.updateChannel(input);\r\n }),\r\n )\r\n .subscribe(({ updateChannel }) => {\r\n switch (updateChannel.__typename) {\r\n case 'Channel':\r\n this.notificationService.success(_('common.notify-update-success'), {\r\n entity: 'Channel',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n break;\r\n case 'LanguageNotAvailableError':\r\n this.notificationService.error(updateChannel.message);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Update the form values when the entity changes.\r\n */\r\n protected setFormValues(entity: ChannelFragment, languageCode: LanguageCode): void {\r\n this.detailForm.patchValue({\r\n code: entity.code,\r\n token: entity.token || this.generateToken(),\r\n pricesIncludeTax: entity.pricesIncludeTax,\r\n availableLanguageCodes: entity.availableLanguageCodes,\r\n availableCurrencyCodes: entity.availableCurrencyCodes,\r\n defaultCurrencyCode: entity.defaultCurrencyCode,\r\n defaultShippingZoneId: entity.defaultShippingZone?.id ?? '',\r\n defaultLanguageCode: entity.defaultLanguageCode,\r\n defaultTaxZoneId: entity.defaultTaxZone?.id ?? '',\r\n sellerId: entity.seller?.id ?? '',\r\n });\r\n if (this.customFields.length) {\r\n this.setCustomFieldFormValues(this.customFields, this.detailForm.get(['customFields']), entity);\r\n }\r\n if (entity.code === DEFAULT_CHANNEL_CODE) {\r\n const codeControl = this.detailForm.get('code');\r\n if (codeControl) {\r\n codeControl.disable();\r\n }\r\n }\r\n }\r\n\r\n private generateToken(): string {\r\n return Array.from(crypto.getRandomValues(new Uint8Array(10)))\r\n .map(b => b.toString(16).padStart(2, '0'))\r\n .join('');\r\n }\r\n}\r\n","import { createBulkDeleteAction, GetChannelsQuery, ItemOf, Permission } from '@vendure/admin-ui/core';\r\nimport { map, mergeMap } from 'rxjs/operators';\r\n\r\nexport const deleteChannelsBulkAction = createBulkDeleteAction<ItemOf<GetChannelsQuery, 'channels'>>({\r\n location: 'channel-list',\r\n requiresPermission: userPermissions =>\r\n userPermissions.includes(Permission.SuperAdmin) || userPermissions.includes(Permission.DeleteChannel),\r\n getItemName: item => item.code,\r\n bulkDelete: (dataService, ids) => {\r\n return dataService.settings.deleteChannels(ids).pipe(\r\n mergeMap(({ deleteChannels }) =>\r\n dataService.auth.currentUser().single$.pipe(\r\n map(({ me }) => ({\r\n me,\r\n deleteChannels,\r\n })),\r\n ),\r\n ),\r\n mergeMap(({ me, deleteChannels }) =>\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n dataService.client.updateUserChannels(me!.channels).pipe(map(() => deleteChannels)),\r\n ),\r\n );\r\n },\r\n});\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left> </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"channel-list\"></vdr-action-bar-items>\r\n <a class=\"btn btn-primary\" *vdrIfPermissions=\"['SuperAdmin', 'CreateChannel']\" [routerLink]=\"['./', 'create']\">\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'settings.create-new-channel' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n<vdr-data-table-2\r\n class=\"mt-2\"\r\n id=\"channel-list\"\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n [filters]=\"filters\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n>\r\n <vdr-bulk-action-menu\r\n locationId=\"channel-list\"\r\n [hostComponent]=\"this\"\r\n [selectionManager]=\"selectionManager\"\r\n />\r\n <vdr-dt2-search\r\n [searchTermControl]=\"searchTermControl\"\r\n [searchTermPlaceholder]=\"'catalog.filter-by-name' | translate\"\r\n />\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\r\n <ng-template let-channel=\"item\">\r\n {{ channel.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.created-at' | translate\" id=\"created-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('createdAt')\"\r\n >\r\n <ng-template let-channel=\"item\">\r\n {{ channel.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.updated-at' | translate\" id=\"updated-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('updatedAt')\"\r\n >\r\n <ng-template let-channel=\"item\">\r\n {{ channel.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.code' | translate\" id=\"code\" [optional]=\"false\" [sort]=\"sorts.get('code')\">\r\n <ng-template let-channel=\"item\">\r\n <a class=\"button-ghost\" [routerLink]=\"['./', channel.id]\"\r\n ><span>{{ channel.code | channelCodeToLabel | translate }}</span>\r\n <clr-icon shape=\"arrow right\"></clr-icon>\r\n </a>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'settings.channel-token' | translate\" id=\"channel-token\" [sort]=\"sorts.get('token')\">\r\n <ng-template let-channel=\"item\">\r\n {{ channel.token }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-custom-field-column *ngFor=\"let customField of customFields\" [customField]=\"customField\" [sorts]=\"sorts\" />\r\n</vdr-data-table-2>\r\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport { CHANNEL_FRAGMENT, GetChannelListDocument, TypedBaseListComponent } from '@vendure/admin-ui/core';\r\nimport { DEFAULT_CHANNEL_CODE } from '@vendure/common/lib/shared-constants';\r\nimport { gql } from 'apollo-angular';\r\n\r\nexport const GET_CHANNEL_LIST = gql`\r\n query GetChannelList($options: ChannelListOptions) {\r\n channels(options: $options) {\r\n items {\r\n ...Channel\r\n }\r\n totalItems\r\n }\r\n }\r\n ${CHANNEL_FRAGMENT}\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-channel-list',\r\n templateUrl: './channel-list.component.html',\r\n styleUrls: ['./channel-list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ChannelListComponent\r\n extends TypedBaseListComponent<typeof GetChannelListDocument, 'channels'>\r\n implements OnInit\r\n{\r\n readonly customFields = this.getCustomFieldConfig('Channel');\r\n readonly filters = this.createFilterCollection()\r\n .addIdFilter()\r\n .addDateFilters()\r\n .addFilter({\r\n name: 'code',\r\n type: { kind: 'text' },\r\n label: _('common.code'),\r\n filterField: 'code',\r\n })\r\n .addFilter({\r\n name: 'token',\r\n type: { kind: 'text' },\r\n label: _('settings.channel-token'),\r\n filterField: 'token',\r\n })\r\n .addCustomFieldFilters(this.customFields)\r\n .connectToRoute(this.route);\r\n\r\n readonly sorts = this.createSortCollection()\r\n .defaultSort('createdAt', 'DESC')\r\n .addSort({ name: 'createdAt' })\r\n .addSort({ name: 'updatedAt' })\r\n .addSort({ name: 'code' })\r\n .addSort({ name: 'token' })\r\n .addCustomFieldSorts(this.customFields)\r\n .connectToRoute(this.route);\r\n\r\n constructor() {\r\n super();\r\n super.configure({\r\n document: GetChannelListDocument,\r\n getItems: data => data.channels,\r\n setVariables: (skip, take) => ({\r\n options: {\r\n skip,\r\n take,\r\n filter: {\r\n code: {\r\n contains: this.searchTermControl.value,\r\n },\r\n ...this.filters.createFilterInput(),\r\n },\r\n sort: this.sorts.createSortInput(),\r\n },\r\n }),\r\n refreshListOnChanges: [this.filters.valueChanges, this.sorts.valueChanges],\r\n });\r\n }\r\n\r\n isDefaultChannel(channelCode: string): boolean {\r\n return channelCode === DEFAULT_CHANNEL_CODE;\r\n }\r\n}\r\n","<vdr-page-block\r\n ><vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-language-selector\r\n [disabled]=\"isNew$ | async\"\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"languageCode$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"country-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"isNew$ | async; else updateButton\"\r\n (click)=\"create()\"\r\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n class=\"btn btn-primary\"\r\n *vdrIfPermissions=\"updatePermission\"\r\n (click)=\"save()\"\r\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </ng-template>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n\r\n<form class=\"form\" [formGroup]=\"detailForm\">\r\n <vdr-page-detail-layout>\r\n <vdr-page-detail-sidebar>\r\n <vdr-card>\r\n <vdr-form-field [label]=\"'common.enabled' | translate\" for=\"enabled\">\r\n <clr-toggle-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n clrToggle\r\n id=\"enabled\"\r\n formControlName=\"enabled\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </clr-toggle-wrapper>\r\n </vdr-form-field>\r\n </vdr-card>\r\n <vdr-card *ngIf=\"entity$ | async as entity\">\r\n <vdr-page-entity-info [entity]=\"entity\" />\r\n </vdr-card>\r\n </vdr-page-detail-sidebar>\r\n <vdr-page-block>\r\n <vdr-card>\r\n <div class=\"form-grid\">\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input\r\n id=\"name\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'common.code' | translate\" for=\"code\">\r\n <input\r\n id=\"code\"\r\n type=\"text\"\r\n formControlName=\"code\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n </div>\r\n </vdr-card>\r\n <vdr-card\r\n formGroupName=\"customFields\"\r\n *ngIf=\"customFields.length\"\r\n [title]=\"'common.custom-fields' | translate\"\r\n >\r\n <vdr-tabbed-custom-fields\r\n entityName=\"Region\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n ></vdr-tabbed-custom-fields>\r\n </vdr-card>\r\n <vdr-custom-detail-component-host\r\n locationId=\"country-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n </vdr-page-block>\r\n </vdr-page-detail-layout>\r\n</form>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { FormBuilder, Validators } from '@angular/forms';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n COUNTRY_FRAGMENT,\r\n CountryFragment,\r\n createUpdatedTranslatable,\r\n DataService,\r\n findTranslation,\r\n GetCountryDetailDocument,\r\n getCustomFieldsDefaults,\r\n LanguageCode,\r\n NotificationService,\r\n Permission,\r\n TypedBaseDetailComponent,\r\n UpdateCountryInput,\r\n} from '@vendure/admin-ui/core';\r\nimport { gql } from 'apollo-angular';\r\nimport { combineLatest } from 'rxjs';\r\nimport { mergeMap, take } from 'rxjs/operators';\r\n\r\nexport const GET_COUNTRY_DETAIL = gql`\r\n query GetCountryDetail($id: ID!) {\r\n country(id: $id) {\r\n ...Country\r\n }\r\n }\r\n ${COUNTRY_FRAGMENT}\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-country-detail',\r\n templateUrl: './country-detail.component.html',\r\n styleUrls: ['./country-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class CountryDetailComponent\r\n extends TypedBaseDetailComponent<typeof GetCountryDetailDocument, 'country'>\r\n implements OnInit, OnDestroy\r\n{\r\n customFields = this.getCustomFieldConfig('Region');\r\n detailForm = this.formBuilder.group({\r\n code: ['', Validators.required],\r\n name: ['', Validators.required],\r\n enabled: [true],\r\n customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),\r\n });\r\n readonly updatePermission = [Permission.UpdateSettings, Permission.UpdateCountry];\r\n\r\n constructor(\r\n private changeDetector: ChangeDetectorRef,\r\n protected dataService: DataService,\r\n private formBuilder: FormBuilder,\r\n private notificationService: NotificationService,\r\n ) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n this.init();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy();\r\n }\r\n\r\n create() {\r\n if (!this.detailForm.dirty) {\r\n return;\r\n }\r\n\r\n const formValue = this.detailForm.value;\r\n const input = createUpdatedTranslatable({\r\n translatable: {\r\n id: '',\r\n createdAt: '',\r\n updatedAt: '',\r\n code: '',\r\n name: '',\r\n enabled: false,\r\n translations: [],\r\n } as CountryFragment,\r\n updatedFields: formValue,\r\n languageCode: this.languageCode,\r\n customFieldConfig: this.customFields,\r\n defaultTranslation: {\r\n name: formValue.name ?? '',\r\n languageCode: this.languageCode,\r\n },\r\n });\r\n this.dataService.settings.createCountry(input).subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-create-success'), {\r\n entity: 'Country',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n this.router.navigate(['../', data.createCountry.id], { relativeTo: this.route });\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-create-error'), {\r\n entity: 'Country',\r\n });\r\n },\r\n );\r\n }\r\n\r\n save() {\r\n combineLatest(this.entity$, this.languageCode$)\r\n .pipe(\r\n take(1),\r\n mergeMap(([country, languageCode]) => {\r\n const formValue = this.detailForm.value;\r\n const input: UpdateCountryInput = createUpdatedTranslatable({\r\n translatable: country,\r\n updatedFields: formValue,\r\n customFieldConfig: this.customFields,\r\n languageCode,\r\n defaultTranslation: {\r\n name: formValue.name ?? '',\r\n languageCode,\r\n },\r\n });\r\n return this.dataService.settings.updateCountry(input);\r\n }),\r\n )\r\n .subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-update-success'), {\r\n entity: 'Country',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-update-error'), {\r\n entity: 'Country',\r\n });\r\n },\r\n );\r\n }\r\n\r\n protected setFormValues(country: CountryFragment, languageCode: LanguageCode): void {\r\n const currentTranslation = findTranslation(country, languageCode);\r\n\r\n this.detailForm.patchValue({\r\n code: country.code,\r\n name: currentTranslation ? currentTranslation.name : '',\r\n enabled: country.enabled,\r\n });\r\n\r\n if (this.customFields.length) {\r\n this.setCustomFieldFormValues(\r\n this.customFields,\r\n this.detailForm.get(['customFields']),\r\n country,\r\n currentTranslation,\r\n );\r\n }\r\n }\r\n}\r\n","import { createBulkDeleteAction, GetCountryListQuery, ItemOf, Permission } from '@vendure/admin-ui/core';\r\nimport { map } from 'rxjs/operators';\r\n\r\nexport const deleteCountriesBulkAction = createBulkDeleteAction<ItemOf<GetCountryListQuery, 'countries'>>({\r\n location: 'country-list',\r\n requiresPermission: userPermissions =>\r\n userPermissions.includes(Permission.DeleteSettings) ||\r\n userPermissions.includes(Permission.DeleteCountry),\r\n getItemName: item => item.name,\r\n bulkDelete: (dataService, ids) =>\r\n dataService.settings.deleteCountries(ids).pipe(map(res => res.deleteCountries)),\r\n});\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left>\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></vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"country-list\"></vdr-action-bar-items>\r\n <a\r\n class=\"btn btn-primary\"\r\n *vdrIfPermissions=\"['CreateSettings', 'CreateCountry']\"\r\n [routerLink]=\"['./', 'create']\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'settings.create-new-country' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n<vdr-data-table-2\r\n class=\"mt-2\"\r\n id=\"country-list\"\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n [filters]=\"filters\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n>\r\n <vdr-bulk-action-menu\r\n locationId=\"country-list\"\r\n [hostComponent]=\"this\"\r\n [selectionManager]=\"selectionManager\"\r\n />\r\n <vdr-dt2-search\r\n [searchTermControl]=\"searchTermControl\"\r\n [searchTermPlaceholder]=\"'catalog.filter-by-name' | translate\"\r\n />\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\r\n <ng-template let-country=\"item\">\r\n {{ country.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.created-at' | translate\" id=\"created-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('createdAt')\"\r\n >\r\n <ng-template let-country=\"item\">\r\n {{ country.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.updated-at' | translate\" id=\"updated-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('updatedAt')\"\r\n >\r\n <ng-template let-country=\"item\">\r\n {{ country.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.name' | translate\" id=\"name\" [optional]=\"false\" [sort]=\"sorts.get('name')\">\r\n <ng-template let-country=\"item\">\r\n <a class=\"button-ghost\" [routerLink]=\"['./', country.id]\"\r\n ><span>{{ country.name }}</span>\r\n <clr-icon shape=\"arrow right\"></clr-icon>\r\n </a>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.code' | translate\" id=\"code\" [sort]=\"sorts.get('code')\">\r\n <ng-template let-country=\"item\">\r\n {{ country.code }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.enabled' | translate\" id=\"enabled\">\r\n <ng-template let-country=\"item\">\r\n <vdr-chip *ngIf=\"country.enabled\" colorType=\"success\">{{\r\n 'common.enabled' | translate\r\n }}</vdr-chip>\r\n <vdr-chip *ngIf=\"!country.enabled\" colorType=\"warning\">{{\r\n 'common.disabled' | translate\r\n }}</vdr-chip>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-custom-field-column\r\n *ngFor=\"let customField of customFields\"\r\n [customField]=\"customField\"\r\n [sorts]=\"sorts\"\r\n />\r\n</vdr-data-table-2>\r\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport { GetCountryListDocument, TypedBaseListComponent } from '@vendure/admin-ui/core';\r\nimport { gql } from 'apollo-angular';\r\n\r\nexport const GET_COUNTRY_LIST = gql`\r\n query GetCountryList($options: CountryListOptions) {\r\n countries(options: $options) {\r\n items {\r\n ...CountryListItem\r\n }\r\n totalItems\r\n }\r\n }\r\n fragment CountryListItem on Country {\r\n id\r\n createdAt\r\n updatedAt\r\n code\r\n name\r\n type\r\n enabled\r\n }\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-country-list',\r\n templateUrl: './country-list.component.html',\r\n styleUrls: ['./country-list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class CountryListComponent extends TypedBaseListComponent<typeof GetCountryListDocument, 'countries'> {\r\n readonly customFields = this.getCustomFieldConfig('Region');\r\n readonly filters = this.createFilterCollection()\r\n .addIdFilter()\r\n .addDateFilters()\r\n .addFilter({\r\n name: 'name',\r\n type: { kind: 'text' },\r\n label: _('common.name'),\r\n filterField: 'name',\r\n })\r\n .addFilter({\r\n name: 'code',\r\n type: { kind: 'text' },\r\n label: _('common.code'),\r\n filterField: 'code',\r\n })\r\n .addFilter({\r\n name: 'enabled',\r\n type: { kind: 'boolean' },\r\n label: _('common.enabled'),\r\n filterField: 'enabled',\r\n })\r\n .addCustomFieldFilters(this.customFields)\r\n .connectToRoute(this.route);\r\n\r\n readonly sorts = this.createSortCollection()\r\n .defaultSort('name', 'ASC')\r\n .addSort({ name: 'createdAt' })\r\n .addSort({ name: 'updatedAt' })\r\n .addSort({ name: 'name' })\r\n .addSort({ name: 'code' })\r\n .addCustomFieldSorts(this.customFields)\r\n .connectToRoute(this.route);\r\n\r\n constructor() {\r\n super();\r\n super.configure({\r\n document: GetCountryListDocument,\r\n getItems: data => data.countries,\r\n setVariables: (skip, take) => ({\r\n options: {\r\n skip,\r\n take,\r\n filter: {\r\n name: {\r\n contains: this.searchTermControl.value,\r\n },\r\n ...this.filters.createFilterInput(),\r\n },\r\n sort: this.sorts.createSortInput(),\r\n },\r\n }),\r\n refreshListOnChanges: [this.filters.valueChanges, this.sorts.valueChanges],\r\n });\r\n }\r\n}\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"global-settings-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n *vdrIfPermissions=\"updatePermission\"\r\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n\r\n<form class=\"form\" [formGroup]=\"detailForm\">\r\n <vdr-page-block>\r\n <vdr-card>\r\n <div class=\"form-grid\">\r\n <vdr-form-field\r\n [label]=\"'common.available-languages' | translate\"\r\n for=\"availableLanguages\"\r\n [tooltip]=\"'settings.global-available-languages-tooltip' | translate\"\r\n >\r\n <vdr-language-code-selector\r\n formControlName=\"availableLanguages\"\r\n [languageCodes]=\"languageCodes\"\r\n ></vdr-language-code-selector>\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'settings.global-out-of-stock-threshold' | translate\"\r\n for=\"outOfStockThreshold\"\r\n [tooltip]=\"'settings.global-out-of-stock-threshold-tooltip' | translate\"\r\n >\r\n <input\r\n id=\"outOfStockThreshold\"\r\n type=\"number\"\r\n formControlName=\"outOfStockThreshold\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'settings.track-inventory-default' | translate\"\r\n for=\"enabled\"\r\n [tooltip]=\"'catalog.track-inventory-tooltip' | translate\"\r\n >\r\n <clr-toggle-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n clrToggle\r\n name=\"enabled\"\r\n formControlName=\"trackInventory\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </clr-toggle-wrapper>\r\n </vdr-form-field>\r\n </div>\r\n </vdr-card>\r\n <vdr-card\r\n formGroupName=\"customFields\"\r\n *ngIf=\"customFields.length\"\r\n [title]=\"'common.custom-fields' | translate\"\r\n >\r\n <vdr-tabbed-custom-fields\r\n entityName=\"GlobalSettings\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </vdr-card>\r\n\r\n <vdr-custom-detail-component-host\r\n locationId=\"global-settings-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n </vdr-page-block>\r\n</form>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { FormBuilder, Validators } from '@angular/forms';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n DataService,\r\n getCustomFieldsDefaults,\r\n GetGlobalSettingsDetailDocument,\r\n GlobalSettings,\r\n LanguageCode,\r\n NotificationService,\r\n Permission,\r\n TypedBaseDetailComponent,\r\n} from '@vendure/admin-ui/core';\r\nimport { gql } from 'apollo-angular';\r\nimport { switchMap, tap, withLatestFrom } from 'rxjs/operators';\r\n\r\nexport const GET_GLOBAL_SETTINGS_DETAIL = gql`\r\n query GetGlobalSettingsDetail {\r\n globalSettings {\r\n ...GlobalSettingsDetail\r\n }\r\n }\r\n fragment GlobalSettingsDetail on GlobalSettings {\r\n id\r\n createdAt\r\n updatedAt\r\n availableLanguages\r\n trackInventory\r\n outOfStockThreshold\r\n }\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-global-settings',\r\n templateUrl: './global-settings.component.html',\r\n styleUrls: ['./global-settings.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class GlobalSettingsComponent\r\n extends TypedBaseDetailComponent<typeof GetGlobalSettingsDetailDocument, 'globalSettings'>\r\n implements OnInit, OnDestroy\r\n{\r\n customFields = this.getCustomFieldConfig('GlobalSettings');\r\n detailForm = this.formBuilder.group({\r\n availableLanguages: [[] as LanguageCode[]],\r\n trackInventory: false,\r\n outOfStockThreshold: [0, Validators.required],\r\n customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),\r\n });\r\n languageCodes = Object.values(LanguageCode);\r\n readonly updatePermission = [Permission.UpdateSettings, Permission.UpdateGlobalSettings];\r\n\r\n constructor(\r\n private changeDetector: ChangeDetectorRef,\r\n protected dataService: DataService,\r\n private formBuilder: FormBuilder,\r\n private notificationService: NotificationService,\r\n ) {\r\n super();\r\n }\r\n\r\n ngOnInit(): void {\r\n this.init();\r\n this.dataService.client.userStatus().single$.subscribe(({ userStatus }) => {\r\n if (!userStatus.permissions.includes(Permission.UpdateSettings)) {\r\n const languagesSelect = this.detailForm.get('availableLanguages');\r\n if (languagesSelect) {\r\n languagesSelect.disable();\r\n }\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroy();\r\n }\r\n\r\n save() {\r\n if (!this.detailForm.dirty) {\r\n return;\r\n }\r\n\r\n this.dataService.settings\r\n .updateGlobalSettings(this.detailForm.value)\r\n .pipe(\r\n tap(({ updateGlobalSettings }) => {\r\n switch (updateGlobalSettings.__typename) {\r\n case 'GlobalSettings':\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n this.notificationService.success(_('common.notify-update-success'), {\r\n entity: 'Settings',\r\n });\r\n break;\r\n case 'ChannelDefaultLanguageError':\r\n this.notificationService.error(updateGlobalSettings.message);\r\n }\r\n }),\r\n switchMap(() => this.serverConfigService.refreshGlobalSettings()),\r\n withLatestFrom(this.dataService.client.uiState().single$),\r\n )\r\n .subscribe(([{ globalSettings }, { uiState }]) => {\r\n const availableLangs = globalSettings.availableLanguages;\r\n if (availableLangs.length && !availableLangs.includes(uiState.contentLanguage)) {\r\n this.dataService.client.setContentLanguage(availableLangs[0]).subscribe();\r\n }\r\n });\r\n }\r\n\r\n protected setFormValues(entity: GlobalSettings, languageCode: LanguageCode): void {\r\n this.detailForm.patchValue({\r\n availableLanguages: entity.availableLanguages,\r\n trackInventory: entity.trackInventory,\r\n outOfStockThreshold: entity.outOfStockThreshold,\r\n });\r\n if (this.customFields.length) {\r\n this.setCustomFieldFormValues(this.customFields, this.detailForm.get('customFields'), entity);\r\n }\r\n }\r\n}\r\n","<vdr-page-block\r\n ><vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-language-selector\r\n [disabled]=\"isNew$ | async\"\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"languageCode$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"payment-method-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"isNew$ | async; else updateButton\"\r\n [disabled]=\"detailForm.pristine || detailForm.invalid || !selectedHandler\"\r\n (click)=\"create()\"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n *vdrIfPermissions=\"updatePermission\"\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n [disabled]=\"detailForm.pristine || detailForm.invalid || !selectedHandler\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </ng-template>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n\r\n<form class=\"form\" [formGroup]=\"detailForm\">\r\n <vdr-page-detail-layout>\r\n <vdr-page-detail-sidebar>\r\n <vdr-card>\r\n <vdr-form-field [label]=\"'common.enabled' | translate\" for=\"description\">\r\n <clr-toggle-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n clrToggle\r\n id=\"enabled\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n formControlName=\"enabled\"\r\n />\r\n </clr-toggle-wrapper>\r\n </vdr-form-field>\r\n </vdr-card>\r\n <vdr-card *ngIf=\"entity$ | async as entity\">\r\n <vdr-page-entity-info [entity]=\"entity\" />\r\n </vdr-card>\r\n </vdr-page-detail-sidebar>\r\n <vdr-page-block>\r\n <vdr-card>\r\n <div class=\"form-grid\">\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input\r\n id=\"name\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n (input)=\"updateCode(entity?.code, $event.target.value)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'common.code' | translate\"\r\n for=\"code\"\r\n [readOnlyToggle]=\"updatePermission | hasPermission\"\r\n >\r\n <input\r\n id=\"code\"\r\n type=\"text\"\r\n formControlName=\"code\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-rich-text-editor\r\n class=\"form-grid-span\"\r\n formControlName=\"description\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n [label]=\"'common.description' | translate\"\r\n ></vdr-rich-text-editor>\r\n </div>\r\n </vdr-card>\r\n\r\n <vdr-card\r\n formGroupName=\"customFields\"\r\n *ngIf=\"customFields.length\"\r\n [title]=\"'common.custom-fields' | translate\"\r\n >\r\n <vdr-tabbed-custom-fields\r\n entityName=\"PaymentMethod\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n ></vdr-tabbed-custom-fields>\r\n </vdr-card>\r\n\r\n <vdr-custom-detail-component-host\r\n locationId=\"payment-method-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n\r\n <vdr-card [title]=\"'settings.payment-eligibility-checker' | translate\">\r\n <vdr-configurable-input\r\n *ngIf=\"selectedChecker && selectedCheckerDefinition\"\r\n [operation]=\"selectedChecker\"\r\n [operationDefinition]=\"selectedCheckerDefinition\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n (remove)=\"removeChecker()\"\r\n formControlName=\"checker\"\r\n ></vdr-configurable-input>\r\n <div *ngIf=\"!selectedChecker || !selectedCheckerDefinition\">\r\n <vdr-dropdown>\r\n <button class=\"btn btn-outline\" vdrDropdownTrigger>\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'common.select' | translate }}\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-left\">\r\n <button\r\n *ngFor=\"let checker of checkers\"\r\n type=\"button\"\r\n vdrDropdownItem\r\n (click)=\"selectChecker(checker)\"\r\n >\r\n {{ checker.description }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </vdr-card>\r\n <vdr-card [title]=\"'settings.payment-handler' | translate\">\r\n <vdr-configurable-input\r\n *ngIf=\"selectedHandler && selectedHandlerDefinition\"\r\n [operation]=\"selectedHandler\"\r\n [operationDefinition]=\"selectedHandlerDefinition\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n (remove)=\"removeHandler()\"\r\n formControlName=\"handler\"\r\n ></vdr-configurable-input>\r\n <div *ngIf=\"!selectedHandler || !selectedHandlerDefinition\">\r\n <vdr-dropdown>\r\n <button class=\"btn btn-outline\" vdrDropdownTrigger>\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'common.select' | translate }}\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-left\">\r\n <button\r\n *ngFor=\"let handler of handlers\"\r\n type=\"button\"\r\n vdrDropdownItem\r\n (click)=\"selectHandler(handler)\"\r\n >\r\n {{ handler.description }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </vdr-card>\r\n </vdr-page-block>\r\n </vdr-page-detail-layout>\r\n</form>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { FormBuilder, UntypedFormGroup, Validators } from '@angular/forms';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n configurableDefinitionToInstance,\r\n ConfigurableOperation,\r\n ConfigurableOperationDefinition,\r\n CreatePaymentMethodInput,\r\n createUpdatedTranslatable,\r\n DataService,\r\n findTranslation,\r\n getConfigArgValue,\r\n getCustomFieldsDefaults,\r\n GetPaymentMethodDetailDocument,\r\n GetPaymentMethodDetailQuery,\r\n LanguageCode,\r\n NotificationService,\r\n PAYMENT_METHOD_FRAGMENT,\r\n PaymentMethodFragment,\r\n Permission,\r\n toConfigurableOperationInput,\r\n TypedBaseDetailComponent,\r\n UpdatePaymentMethodInput,\r\n} from '@vendure/admin-ui/core';\r\nimport { normalizeString } from '@vendure/common/lib/normalize-string';\r\nimport { gql } from 'apollo-angular';\r\nimport { combineLatest } from 'rxjs';\r\nimport { mergeMap, take } from 'rxjs/operators';\r\n\r\nexport const GET_PAYMENT_METHOD_DETAIL = gql`\r\n query GetPaymentMethodDetail($id: ID!) {\r\n paymentMethod(id: $id) {\r\n ...PaymentMethod\r\n }\r\n }\r\n ${PAYMENT_METHOD_FRAGMENT}\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-payment-method-detail',\r\n templateUrl: './payment-method-detail.component.html',\r\n styleUrls: ['./payment-method-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PaymentMethodDetailComponent\r\n extends TypedBaseDetailComponent<typeof GetPaymentMethodDetailDocument, 'paymentMethod'>\r\n implements OnInit, OnDestroy\r\n{\r\n customFields = this.getCustomFieldConfig('PaymentMethod');\r\n detailForm = this.formBuilder.group({\r\n code: ['', Validators.required],\r\n name: ['', Validators.required],\r\n description: '',\r\n enabled: [true, Validators.required],\r\n checker: {} as NonNullable<GetPaymentMethodDetailQuery['paymentMethod']>['checker'],\r\n handler: {} as NonNullable<GetPaymentMethodDetailQuery['paymentMethod']>['handler'],\r\n customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),\r\n });\r\n checkers: ConfigurableOperationDefinition[] = [];\r\n handlers: ConfigurableOperationDefinition[] = [];\r\n selectedChecker?: ConfigurableOperation | null;\r\n selectedCheckerDefinition?: ConfigurableOperationDefinition;\r\n selectedHandler?: ConfigurableOperation | null;\r\n selectedHandlerDefinition?: ConfigurableOperationDefinition;\r\n readonly updatePermission = [Permission.UpdateSettings, Permission.UpdatePaymentMethod];\r\n\r\n constructor(\r\n private changeDetector: ChangeDetectorRef,\r\n protected dataService: DataService,\r\n private formBuilder: FormBuilder,\r\n private notificationService: NotificationService,\r\n ) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n this.init();\r\n this.dataService.settings.getPaymentMethodOperations().single$.subscribe(data => {\r\n this.checkers = data.paymentMethodEligibilityCheckers;\r\n this.handlers = data.paymentMethodHandlers;\r\n this.changeDetector.markForCheck();\r\n this.selectedCheckerDefinition = data.paymentMethodEligibilityCheckers.find(\r\n c => c.code === this.entity?.checker?.code,\r\n );\r\n this.selectedHandlerDefinition = data.paymentMethodHandlers.find(\r\n c => c.code === this.entity?.handler?.code,\r\n );\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy();\r\n }\r\n\r\n updateCode(currentCode: string | undefined, nameValue: string) {\r\n if (!currentCode) {\r\n const codeControl = this.detailForm.get('code');\r\n if (codeControl && codeControl.pristine) {\r\n codeControl.setValue(normalizeString(nameValue, '-'));\r\n }\r\n }\r\n }\r\n\r\n selectChecker(checker: ConfigurableOperationDefinition) {\r\n this.selectedCheckerDefinition = checker;\r\n this.selectedChecker = configurableDefinitionToInstance(checker);\r\n const formControl = this.detailForm.get('checker');\r\n if (formControl) {\r\n formControl.clearValidators();\r\n formControl.updateValueAndValidity({ onlySelf: true });\r\n formControl.patchValue(this.selectedChecker);\r\n }\r\n this.detailForm.markAsDirty();\r\n }\r\n\r\n selectHandler(handler: ConfigurableOperationDefinition) {\r\n this.selectedHandlerDefinition = handler;\r\n this.selectedHandler = configurableDefinitionToInstance(handler);\r\n const formControl = this.detailForm.get('handler');\r\n if (formControl) {\r\n formControl.clearValidators();\r\n formControl.updateValueAndValidity({ onlySelf: true });\r\n formControl.patchValue(this.selectedHandler);\r\n }\r\n this.detailForm.markAsDirty();\r\n }\r\n\r\n removeChecker() {\r\n this.selectedChecker = null;\r\n this.detailForm.markAsDirty();\r\n }\r\n\r\n removeHandler() {\r\n this.selectedHandler = null;\r\n this.detailForm.markAsDirty();\r\n }\r\n\r\n create() {\r\n const selectedChecker = this.selectedChecker;\r\n const selectedHandler = this.selectedHandler;\r\n if (!selectedHandler) {\r\n return;\r\n }\r\n const input = this.getUpdatedPaymentMethod(\r\n {\r\n id: '',\r\n createdAt: '',\r\n updatedAt: '',\r\n name: '',\r\n code: '',\r\n description: '',\r\n enabled: true,\r\n checker: undefined as any,\r\n handler: undefined as any,\r\n translations: [],\r\n },\r\n this.detailForm,\r\n this.languageCode,\r\n selectedHandler,\r\n selectedChecker,\r\n ) as CreatePaymentMethodInput;\r\n this.dataService.settings.createPaymentMethod(input).subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-create-success'), {\r\n entity: 'PaymentMethod',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n this.router.navigate(['../', data.createPaymentMethod.id], { relativeTo: this.route });\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-create-error'), {\r\n entity: 'PaymentMethod',\r\n });\r\n },\r\n );\r\n }\r\n\r\n save() {\r\n const selectedChecker = this.selectedChecker;\r\n const selectedHandler = this.selectedHandler;\r\n if (!selectedHandler) {\r\n return;\r\n }\r\n combineLatest(this.entity$, this.languageCode$)\r\n .pipe(\r\n take(1),\r\n mergeMap(([paymentMethod, languageCode]) => {\r\n const input = this.getUpdatedPaymentMethod(\r\n paymentMethod,\r\n this.detailForm,\r\n languageCode,\r\n selectedHandler,\r\n selectedChecker,\r\n ) as UpdatePaymentMethodInput;\r\n return this.dataService.settings.updatePaymentMethod(input);\r\n }),\r\n )\r\n .subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-update-success'), {\r\n entity: 'PaymentMethod',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-update-error'), {\r\n entity: 'PaymentMethod',\r\n });\r\n },\r\n );\r\n }\r\n\r\n /**\r\n * Given a PaymentMethod and the value of the detailForm, this method creates an updated copy of it which\r\n * can then be persisted to the API.\r\n */\r\n private getUpdatedPaymentMethod(\r\n paymentMethod: PaymentMethodFragment,\r\n formGroup: UntypedFormGroup,\r\n languageCode: LanguageCode,\r\n selectedHandler: ConfigurableOperation,\r\n selectedChecker?: ConfigurableOperation | null,\r\n ): UpdatePaymentMethodInput | CreatePaymentMethodInput {\r\n const input = createUpdatedTranslatable({\r\n translatable: paymentMethod,\r\n updatedFields: formGroup.value,\r\n customFieldConfig: this.customFields,\r\n languageCode,\r\n defaultTranslation: {\r\n languageCode,\r\n name: paymentMethod.name || '',\r\n description: paymentMethod.description || '',\r\n },\r\n });\r\n return {\r\n ...input,\r\n checker: selectedChecker\r\n ? toConfigurableOperationInput(selectedChecker, formGroup.value.checker)\r\n : null,\r\n handler: toConfigurableOperationInput(selectedHandler, formGroup.value.handler),\r\n };\r\n }\r\n\r\n protected setFormValues(\r\n paymentMethod: NonNullable<GetPaymentMethodDetailQuery['paymentMethod']>,\r\n languageCode: LanguageCode,\r\n ): void {\r\n const currentTranslation = findTranslation(paymentMethod, languageCode);\r\n this.detailForm.patchValue({\r\n name: currentTranslation?.name,\r\n code: paymentMethod.code,\r\n description: currentTranslation?.description,\r\n enabled: paymentMethod.enabled,\r\n checker: paymentMethod.checker || ({} as any),\r\n handler: paymentMethod.handler || ({} as any),\r\n });\r\n if (!this.selectedChecker) {\r\n this.selectedChecker = paymentMethod.checker && {\r\n code: paymentMethod.checker.code,\r\n args: paymentMethod.checker.args.map(a => ({ ...a, value: getConfigArgValue(a.value) })),\r\n };\r\n }\r\n if (!this.selectedHandler) {\r\n this.selectedHandler = paymentMethod.handler && {\r\n code: paymentMethod.handler.code,\r\n args: paymentMethod.handler.args.map(a => ({ ...a, value: getConfigArgValue(a.value) })),\r\n };\r\n }\r\n if (this.customFields.length) {\r\n this.setCustomFieldFormValues(\r\n this.customFields,\r\n this.detailForm.get('customFields'),\r\n paymentMethod,\r\n currentTranslation,\r\n );\r\n }\r\n }\r\n}\r\n","import {\r\n createBulkAssignToChannelAction,\r\n AssignPaymentMethodsToChannelDocument,\r\n RemovePaymentMethodsFromChannelDocument,\r\n createBulkDeleteAction,\r\n createBulkRemoveFromChannelAction,\r\n GetPaymentMethodListQuery,\r\n ItemOf,\r\n Permission,\r\n} from '@vendure/admin-ui/core';\r\nimport { gql } from 'apollo-angular';\r\nimport { map } from 'rxjs/operators';\r\n\r\nexport const deletePaymentMethodsBulkAction = createBulkDeleteAction<\r\n ItemOf<GetPaymentMethodListQuery, 'paymentMethods'>\r\n>({\r\n location: 'payment-method-list',\r\n requiresPermission: userPermissions =>\r\n userPermissions.includes(Permission.DeletePaymentMethod) ||\r\n userPermissions.includes(Permission.DeleteSettings),\r\n getItemName: item => item.name,\r\n shouldRetryItem: (response, item) => !!response.message,\r\n bulkDelete: (dataService, ids, retrying) =>\r\n dataService.settings.deletePaymentMethods(ids, retrying).pipe(map(res => res.deletePaymentMethods)),\r\n});\r\n\r\nconst ASSIGN_PAYMENT_METHODS_TO_CHANNEL = gql`\r\n mutation AssignPaymentMethodsToChannel($input: AssignPaymentMethodsToChannelInput!) {\r\n assignPaymentMethodsToChannel(input: $input) {\r\n id\r\n name\r\n }\r\n }\r\n`;\r\n\r\nconst REMOVE_PAYMENT_METHODS_FROM_CHANNEL = gql`\r\n mutation RemovePaymentMethodsFromChannel($input: RemovePaymentMethodsFromChannelInput!) {\r\n removePaymentMethodsFromChannel(input: $input) {\r\n id\r\n name\r\n }\r\n }\r\n`;\r\nexport const assignPaymentMethodsToChannelBulkAction = createBulkAssignToChannelAction<\r\n ItemOf<GetPaymentMethodListQuery, 'paymentMethods'>\r\n>({\r\n location: 'payment-method-list',\r\n requiresPermission: userPermissions =>\r\n userPermissions.includes(Permission.UpdatePaymentMethod) ||\r\n userPermissions.includes(Permission.UpdateSettings),\r\n getItemName: item => item.name,\r\n bulkAssignToChannel: (dataService, paymentMethodIds, channelId) =>\r\n dataService\r\n .mutate(AssignPaymentMethodsToChannelDocument, {\r\n input: {\r\n channelId,\r\n paymentMethodIds,\r\n },\r\n })\r\n .pipe(map(res => res.assignPaymentMethodsToChannel)),\r\n});\r\n\r\nexport const removePaymentMethodsFromChannelBulkAction = createBulkRemoveFromChannelAction<\r\n ItemOf<GetPaymentMethodListQuery, 'paymentMethods'>\r\n>({\r\n location: 'payment-method-list',\r\n requiresPermission: userPermissions =>\r\n userPermissions.includes(Permission.DeletePaymentMethod) ||\r\n userPermissions.includes(Permission.DeleteSettings),\r\n getItemName: item => item.name,\r\n bulkRemoveFromChannel: (dataService, paymentMethodIds, channelId) =>\r\n dataService\r\n .mutate(RemovePaymentMethodsFromChannelDocument, {\r\n input: {\r\n channelId,\r\n paymentMethodIds,\r\n },\r\n })\r\n .pipe(map(res => res.removePaymentMethodsFromChannel)),\r\n});\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-language-selector\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"contentLanguage$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n /></vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"payment-method-list\"></vdr-action-bar-items>\r\n <a\r\n class=\"btn btn-primary\"\r\n *vdrIfPermissions=\"['CreateSettings', 'CreatePaymentMethod']\"\r\n [routerLink]=\"['./', 'create']\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'settings.create-new-payment-method' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n<vdr-data-table-2\r\n id=\"payment-method-list\"\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n [filters]=\"filters\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n>\r\n <vdr-bulk-action-menu\r\n locationId=\"payment-method-list\"\r\n [hostComponent]=\"this\"\r\n [selectionManager]=\"selectionManager\"\r\n ></vdr-bulk-action-menu>\r\n <vdr-dt2-search\r\n [searchTermControl]=\"searchTermControl\"\r\n [searchTermPlaceholder]=\"'catalog.filter-by-name' | translate\"\r\n ></vdr-dt2-search>\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\" [sort]=\"sorts.get('id')\">\r\n <ng-template let-paymentMethod=\"item\">\r\n {{ paymentMethod.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.created-at' | translate\" id=\"created-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('createdAt')\"\r\n >\r\n <ng-template let-paymentMethod=\"item\">\r\n {{ paymentMethod.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.updated-at' | translate\" id=\"updated-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('updatedAt')\"\r\n >\r\n <ng-template let-paymentMethod=\"item\">\r\n {{ paymentMethod.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.name' | translate\" id=\"name\" [optional]=\"false\" [sort]=\"sorts.get('name')\">\r\n <ng-template let-paymentMethod=\"item\">\r\n <a class=\"button-ghost\" [routerLink]=\"['./', paymentMethod.id]\"\r\n ><span>{{ paymentMethod.name }}</span>\r\n <clr-icon shape=\"arrow right\"></clr-icon>\r\n </a>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.code' | translate\" id=\"code\" [sort]=\"sorts.get('code')\">\r\n <ng-template let-paymentMethod=\"item\">\r\n {{ paymentMethod.code }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.enabled' | translate\" id=\"enabled\">\r\n <ng-template let-paymentMethod=\"item\">\r\n <vdr-chip *ngIf=\"paymentMethod.enabled\" colorType=\"success\">{{\r\n 'common.enabled' | translate\r\n }}</vdr-chip>\r\n <vdr-chip *ngIf=\"!paymentMethod.enabled\" colorType=\"warning\">{{\r\n 'common.disabled' | translate\r\n }}</vdr-chip>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-custom-field-column\r\n *ngFor=\"let customField of customFields\"\r\n [customField]=\"customField\"\r\n [sorts]=\"sorts\"\r\n />\r\n</vdr-data-table-2>\r\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport { GetPaymentMethodListDocument, TypedBaseListComponent } from '@vendure/admin-ui/core';\r\nimport { gql } from 'apollo-angular';\r\n\r\nexport const GET_PAYMENT_METHOD_LIST = gql`\r\n query GetPaymentMethodList($options: PaymentMethodListOptions!) {\r\n paymentMethods(options: $options) {\r\n items {\r\n ...PaymentMethodListItem\r\n }\r\n totalItems\r\n }\r\n }\r\n fragment PaymentMethodListItem on PaymentMethod {\r\n id\r\n createdAt\r\n updatedAt\r\n name\r\n description\r\n code\r\n enabled\r\n }\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-payment-method-list',\r\n templateUrl: './payment-method-list.component.html',\r\n styleUrls: ['./payment-method-list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PaymentMethodListComponent extends TypedBaseListComponent<\r\n typeof GetPaymentMethodListDocument,\r\n 'paymentMethods'\r\n> {\r\n readonly customFields = this.getCustomFieldConfig('PaymentMethod');\r\n readonly filters = this.createFilterCollection()\r\n .addIdFilter()\r\n .addDateFilters()\r\n .addFilter({\r\n name: 'name',\r\n type: { kind: 'text' },\r\n label: _('common.name'),\r\n filterField: 'name',\r\n })\r\n .addFilter({\r\n name: 'code',\r\n type: { kind: 'text' },\r\n label: _('common.code'),\r\n filterField: 'code',\r\n })\r\n .addFilter({\r\n name: 'enabled',\r\n type: { kind: 'boolean' },\r\n label: _('common.enabled'),\r\n filterField: 'enabled',\r\n })\r\n .addFilter({\r\n name: 'description',\r\n type: { kind: 'text' },\r\n label: _('common.description'),\r\n filterField: 'description',\r\n })\r\n .addCustomFieldFilters(this.customFields)\r\n .connectToRoute(this.route);\r\n\r\n readonly sorts = this.createSortCollection()\r\n .defaultSort('createdAt', 'DESC')\r\n .addSort({ name: 'id' })\r\n .addSort({ name: 'createdAt' })\r\n .addSort({ name: 'updatedAt' })\r\n .addSort({ name: 'name' })\r\n .addSort({ name: 'code' })\r\n .addSort({ name: 'description' })\r\n .addCustomFieldSorts(this.customFields)\r\n .connectToRoute(this.route);\r\n\r\n constructor() {\r\n super();\r\n super.configure({\r\n document: GetPaymentMethodListDocument,\r\n getItems: data => data.paymentMethods,\r\n setVariables: (skip, take) => ({\r\n options: {\r\n skip,\r\n take,\r\n filter: {\r\n name: {\r\n contains: this.searchTermControl.value,\r\n },\r\n ...this.filters.createFilterInput(),\r\n },\r\n sort: this.sorts.createSortInput(),\r\n },\r\n }),\r\n refreshListOnChanges: [this.filters.valueChanges, this.sorts.valueChanges],\r\n });\r\n }\r\n}\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left></vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"profile\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n\r\n<form class=\"form\" [formGroup]=\"detailForm\">\r\n <vdr-page-detail-layout>\r\n <vdr-page-detail-sidebar>\r\n <vdr-card *ngIf=\"entity$ | async as entity\">\r\n <vdr-page-entity-info [entity]=\"entity\" />\r\n </vdr-card>\r\n </vdr-page-detail-sidebar>\r\n <vdr-page-block>\r\n <vdr-card>\r\n <div class=\"form-grid\">\r\n <vdr-form-field [label]=\"'settings.email-address' | translate\" for=\"emailAddress\">\r\n <input id=\"emailAddress\" type=\"text\" formControlName=\"emailAddress\" />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'settings.first-name' | translate\" for=\"firstName\">\r\n <input id=\"firstName\" type=\"text\" formControlName=\"firstName\" />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'settings.last-name' | translate\" for=\"lastName\">\r\n <input id=\"lastName\" type=\"text\" formControlName=\"lastName\" />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n *ngIf=\"isNew$ | async\"\r\n [label]=\"'settings.password' | translate\"\r\n for=\"password\"\r\n >\r\n <input id=\"password\" type=\"password\" formControlName=\"password\" />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'settings.password' | translate\"\r\n for=\"password\"\r\n [readOnlyToggle]=\"true\"\r\n >\r\n <input id=\"password\" type=\"password\" formControlName=\"password\" />\r\n </vdr-form-field>\r\n </div>\r\n </vdr-card>\r\n <vdr-card\r\n formGroupName=\"customFields\"\r\n *ngIf=\"customFields.length\"\r\n [title]=\"'common.custom-fields' | translate\"\r\n >\r\n <vdr-tabbed-custom-fields\r\n entityName=\"Administrator\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n ></vdr-tabbed-custom-fields>\r\n </vdr-card>\r\n <vdr-custom-detail-component-host\r\n locationId=\"administrator-profile\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n </vdr-page-block>\r\n </vdr-page-detail-layout>\r\n</form>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { FormBuilder, Validators } from '@angular/forms';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n Administrator,\r\n DataService,\r\n getCustomFieldsDefaults,\r\n GetProfileDetailDocument,\r\n LanguageCode,\r\n NotificationService,\r\n TypedBaseDetailComponent,\r\n UpdateActiveAdministratorInput,\r\n} from '@vendure/admin-ui/core';\r\nimport { gql } from 'apollo-angular';\r\nimport { mergeMap, take } from 'rxjs/operators';\r\n\r\nexport const GET_PROFILE_DETAIL = gql`\r\n query GetProfileDetail {\r\n activeAdministrator {\r\n ...ProfileDetail\r\n }\r\n }\r\n fragment ProfileDetail on Administrator {\r\n id\r\n createdAt\r\n updatedAt\r\n firstName\r\n lastName\r\n emailAddress\r\n user {\r\n id\r\n lastLogin\r\n verified\r\n }\r\n }\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-profile',\r\n templateUrl: './profile.component.html',\r\n styleUrls: ['./profile.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ProfileComponent\r\n extends TypedBaseDetailComponent<typeof GetProfileDetailDocument, 'activeAdministrator'>\r\n implements OnInit, OnDestroy\r\n{\r\n customFields = this.getCustomFieldConfig('Administrator');\r\n detailForm = this.formBuilder.group({\r\n emailAddress: ['', Validators.required],\r\n firstName: ['', Validators.required],\r\n lastName: ['', Validators.required],\r\n password: [''],\r\n customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),\r\n });\r\n\r\n constructor(\r\n private changeDetector: ChangeDetectorRef,\r\n protected dataService: DataService,\r\n private formBuilder: FormBuilder,\r\n private notificationService: NotificationService,\r\n ) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n this.init();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy();\r\n }\r\n\r\n save() {\r\n this.entity$\r\n .pipe(\r\n take(1),\r\n mergeMap(({ id }) => {\r\n const formValue = this.detailForm.value;\r\n const administrator: UpdateActiveAdministratorInput = {\r\n emailAddress: formValue.emailAddress,\r\n firstName: formValue.firstName,\r\n lastName: formValue.lastName,\r\n password: formValue.password,\r\n customFields: formValue.customFields,\r\n };\r\n return this.dataService.administrator.updateActiveAdministrator(administrator);\r\n }),\r\n )\r\n .subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-update-success'), {\r\n entity: 'Administrator',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-update-error'), {\r\n entity: 'Administrator',\r\n });\r\n },\r\n );\r\n }\r\n\r\n protected setFormValues(administrator: Administrator, languageCode: LanguageCode): void {\r\n this.detailForm.patchValue({\r\n emailAddress: administrator.emailAddress,\r\n firstName: administrator.firstName,\r\n lastName: administrator.lastName,\r\n });\r\n if (this.customFields.length) {\r\n this.setCustomFieldFormValues(\r\n this.customFields,\r\n this.detailForm.get('customFields'),\r\n administrator,\r\n );\r\n }\r\n }\r\n}\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left></vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"role-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"isNew$ | async; else updateButton\"\r\n (click)=\"create()\"\r\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n *vdrIfPermissions=\"'UpdateAdministrator'\"\r\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </ng-template>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n\r\n<form class=\"form\" [formGroup]=\"detailForm\">\r\n <vdr-page-detail-layout>\r\n <vdr-page-detail-sidebar>\r\n <vdr-card *ngIf=\"entity$ | async as entity\">\r\n <vdr-page-entity-info [entity]=\"entity\" />\r\n </vdr-card>\r\n </vdr-page-detail-sidebar>\r\n <vdr-page-block>\r\n <vdr-card>\r\n <div class=\"form-grid\">\r\n <vdr-form-field [label]=\"'common.description' | translate\" for=\"description\">\r\n <input\r\n id=\"description\"\r\n type=\"text\"\r\n formControlName=\"description\"\r\n [readonly]=\"!('UpdateAdministrator' | hasPermission)\"\r\n (input)=\"updateCode($event.target.value)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'common.code' | translate\"\r\n for=\"code\"\r\n [readOnlyToggle]=\"'UpdateAdministrator' | hasPermission\"\r\n >\r\n <input\r\n id=\"code\"\r\n type=\"text\"\r\n formControlName=\"code\"\r\n [readonly]=\"!('UpdateAdministrator' | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n </div>\r\n </vdr-card>\r\n </vdr-page-block>\r\n </vdr-page-detail-layout>\r\n <vdr-page-block class=\"mt-2\">\r\n <vdr-card [title]=\"'settings.permissions' | translate\">\r\n <vdr-form-field [label]=\"'settings.channel' | translate\">\r\n <vdr-channel-assignment-control\r\n formControlName=\"channelIds\"\r\n [vdrDisabled]=\"!('UpdateAdministrator' | hasPermission)\"\r\n ></vdr-channel-assignment-control>\r\n </vdr-form-field>\r\n <vdr-permission-grid\r\n class=\"mt-2\"\r\n [permissionDefinitions]=\"permissionDefinitions\"\r\n [activePermissions]=\"detailForm.get('permissions')?.value\"\r\n (permissionChange)=\"setPermission($event)\"\r\n [readonly]=\"!('UpdateAdministrator' | hasPermission)\"\r\n ></vdr-permission-grid>\r\n </vdr-card>\r\n </vdr-page-block>\r\n</form>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { FormBuilder, Validators } from '@angular/forms';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n CreateRoleInput,\r\n DataService,\r\n GetRoleDetailDocument,\r\n LanguageCode,\r\n NotificationService,\r\n Permission,\r\n Role,\r\n ROLE_FRAGMENT,\r\n TypedBaseDetailComponent,\r\n UpdateRoleInput,\r\n} from '@vendure/admin-ui/core';\r\nimport { normalizeString } from '@vendure/common/lib/normalize-string';\r\nimport { unique } from '@vendure/common/lib/unique';\r\nimport { gql } from 'apollo-angular';\r\nimport { mergeMap, take } from 'rxjs/operators';\r\n\r\nexport const GET_ROLE_DETAIL = gql`\r\n query GetRoleDetail($id: ID!) {\r\n role(id: $id) {\r\n ...Role\r\n }\r\n }\r\n ${ROLE_FRAGMENT}\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-role-detail',\r\n templateUrl: './role-detail.component.html',\r\n styleUrls: ['./role-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class RoleDetailComponent\r\n extends TypedBaseDetailComponent<typeof GetRoleDetailDocument, 'role'>\r\n implements OnInit, OnDestroy\r\n{\r\n detailForm = this.formBuilder.group({\r\n code: ['', Validators.required],\r\n description: ['', Validators.required],\r\n channelIds: [[] as string[]],\r\n permissions: [[] as Permission[]],\r\n });\r\n permissionDefinitions = this.serverConfigService.getPermissionDefinitions();\r\n constructor(\r\n private changeDetector: ChangeDetectorRef,\r\n protected dataService: DataService,\r\n private formBuilder: FormBuilder,\r\n private notificationService: NotificationService,\r\n ) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n this.init();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy();\r\n }\r\n\r\n updateCode(nameValue: string) {\r\n const codeControl = this.detailForm.get(['code']);\r\n if (codeControl && codeControl.pristine) {\r\n codeControl.setValue(normalizeString(nameValue, '-'));\r\n }\r\n }\r\n\r\n setPermission(change: { permission: string; value: boolean }) {\r\n const permissionsControl = this.detailForm.get('permissions');\r\n if (permissionsControl) {\r\n const currentPermissions = permissionsControl.value as string[];\r\n const newValue = (\r\n change.value === true\r\n ? unique([...currentPermissions, change.permission])\r\n : currentPermissions.filter(p => p !== change.permission)\r\n ) as Permission[];\r\n permissionsControl.setValue(newValue);\r\n permissionsControl.markAsDirty();\r\n }\r\n }\r\n\r\n create() {\r\n const { code, description, permissions, channelIds } = this.detailForm.value;\r\n if (!code || !description) {\r\n return;\r\n }\r\n const role: CreateRoleInput = {\r\n code,\r\n description,\r\n permissions: permissions ?? [],\r\n channelIds,\r\n };\r\n this.dataService.administrator.createRole(role).subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-create-success'), { entity: 'Role' });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n this.router.navigate(['../', data.createRole.id], { relativeTo: this.route });\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-create-error'), {\r\n entity: 'Role',\r\n });\r\n },\r\n );\r\n }\r\n\r\n save() {\r\n this.entity$\r\n .pipe(\r\n take(1),\r\n mergeMap(({ id }) => {\r\n const formValue = this.detailForm.value;\r\n const role: UpdateRoleInput = { id, ...formValue };\r\n return this.dataService.administrator.updateRole(role);\r\n }),\r\n )\r\n .subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-update-success'), { entity: 'Role' });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-update-error'), {\r\n entity: 'Role',\r\n });\r\n },\r\n );\r\n }\r\n\r\n protected setFormValues(role: Role, languageCode: LanguageCode): void {\r\n this.detailForm.patchValue({\r\n description: role.description,\r\n code: role.code,\r\n channelIds: role.channels.map(c => c.id),\r\n permissions: role.permissions,\r\n });\r\n // This was required to get the channel selector component to\r\n // correctly display its contents. A while spent debugging the root\r\n // cause did not yield a solution, therefore this next line.\r\n this.changeDetector.detectChanges();\r\n }\r\n}\r\n","import { createBulkDeleteAction, GetRolesQuery, ItemOf, Permission } from '@vendure/admin-ui/core';\r\nimport { map } from 'rxjs/operators';\r\n\r\nexport const deleteRolesBulkAction = createBulkDeleteAction<ItemOf<GetRolesQuery, 'roles'>>({\r\n location: 'role-list',\r\n requiresPermission: userPermissions => userPermissions.includes(Permission.DeleteAdministrator),\r\n getItemName: item => item.description,\r\n bulkDelete: (dataService, ids) =>\r\n dataService.administrator.deleteRoles(ids).pipe(map(res => res.deleteRoles)),\r\n});\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left> </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"role-list\"></vdr-action-bar-items>\r\n <a\r\n class=\"btn btn-primary\"\r\n *vdrIfPermissions=\"['CreateAdministrator']\"\r\n [routerLink]=\"['./', 'create']\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'settings.create-new-role' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n<vdr-data-table-2\r\n id=\"role-list\"\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n [filters]=\"filters\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n>\r\n <vdr-bulk-action-menu\r\n locationId=\"role-list\"\r\n [hostComponent]=\"this\"\r\n [selectionManager]=\"selectionManager\"\r\n />\r\n <vdr-dt2-search\r\n [searchTermControl]=\"searchTermControl\"\r\n [searchTermPlaceholder]=\"'catalog.filter-by-name' | translate\"\r\n />\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\r\n <ng-template let-role=\"item\">\r\n {{ role.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.created-at' | translate\" id=\"created-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('createdAt')\"\r\n >\r\n <ng-template let-role=\"item\">\r\n {{ role.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.updated-at' | translate\" id=\"updated-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('updatedAt')\"\r\n >\r\n <ng-template let-role=\"item\">\r\n {{ role.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.description' | translate\" id=\"description\"\r\n [optional]=\"false\"\r\n [sort]=\"sorts.get('description')\"\r\n >\r\n <ng-template let-role=\"item\">\r\n <a\r\n *ngIf=\"!isDefaultRole(role); else defaultRole\"\r\n class=\"button-ghost\"\r\n [routerLink]=\"['./', role.id]\"\r\n ><span>{{ role.description }}</span>\r\n <clr-icon shape=\"arrow right\"></clr-icon>\r\n </a>\r\n <ng-template #defaultRole>\r\n {{ role.description }}\r\n </ng-template>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.code' | translate\" id=\"code\" [sort]=\"sorts.get('code')\">\r\n <ng-template let-role=\"item\">\r\n <span *ngIf=\"!isDefaultRole(role)\">{{ role.code }}</span>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'settings.channel' | translate\" id=\"channel\">\r\n <ng-template let-role=\"item\">\r\n <ng-container *ngIf=\"!isDefaultRole(role)\">\r\n <vdr-chip *ngFor=\"let channel of role.channels\">\r\n <vdr-channel-badge [channelCode]=\"channel.code\"></vdr-channel-badge>\r\n <div class=\"ml-1\">{{ channel.code | channelCodeToLabel | translate }}</div>\r\n </vdr-chip>\r\n </ng-container>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'settings.permissions' | translate\" id=\"permissions\">\r\n <ng-template let-role=\"item\">\r\n <ng-container *ngIf=\"!isDefaultRole(role); else defaultRole\">\r\n <div class=\"permissions-list\">\r\n <vdr-chip\r\n *ngFor=\"let permission of role.permissions | slice : 0 : displayLimit[role.id] || 3\"\r\n >{{ permission }}</vdr-chip\r\n >\r\n <button\r\n class=\"button-small\"\r\n *ngIf=\"role.permissions.length > initialLimit\"\r\n (click)=\"toggleDisplayLimit(role)\"\r\n >\r\n <ng-container\r\n *ngIf=\"(displayLimit[role.id] || 0) < role.permissions.length; else collapse\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ role.permissions.length - initialLimit }}\r\n </ng-container>\r\n <ng-template #collapse>\r\n <clr-icon shape=\"minus\"></clr-icon>\r\n </ng-template>\r\n </button>\r\n </div>\r\n </ng-container>\r\n <ng-template #defaultRole>\r\n <span class=\"default-role-label\">{{ 'settings.default-role-label' | translate }}</span>\r\n </ng-template>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n</vdr-data-table-2>\r\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n GetRoleListDocument,\r\n GetRolesQuery,\r\n ItemOf,\r\n Role,\r\n ROLE_FRAGMENT,\r\n TypedBaseListComponent,\r\n} from '@vendure/admin-ui/core';\r\nimport { CUSTOMER_ROLE_CODE, SUPER_ADMIN_ROLE_CODE } from '@vendure/common/lib/shared-constants';\r\nimport { gql } from 'apollo-angular';\r\n\r\nexport const GET_ROLE_LIST = gql`\r\n query GetRoleList($options: RoleListOptions) {\r\n roles(options: $options) {\r\n items {\r\n ...Role\r\n }\r\n totalItems\r\n }\r\n }\r\n ${ROLE_FRAGMENT}\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-role-list',\r\n templateUrl: './role-list.component.html',\r\n styleUrls: ['./role-list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class RoleListComponent\r\n extends TypedBaseListComponent<typeof GetRoleListDocument, 'roles'>\r\n implements OnInit\r\n{\r\n readonly initialLimit = 3;\r\n displayLimit: { [id: string]: number } = {};\r\n readonly filters = this.createFilterCollection()\r\n .addIdFilter()\r\n .addDateFilters()\r\n .addFilter({\r\n name: 'code',\r\n type: { kind: 'text' },\r\n label: _('common.code'),\r\n filterField: 'code',\r\n })\r\n .connectToRoute(this.route);\r\n\r\n readonly sorts = this.createSortCollection()\r\n .defaultSort('createdAt', 'DESC')\r\n .addSort({ name: 'createdAt' })\r\n .addSort({ name: 'updatedAt' })\r\n .addSort({ name: 'code' })\r\n .addSort({ name: 'description' })\r\n .connectToRoute(this.route);\r\n\r\n constructor() {\r\n super();\r\n super.configure({\r\n document: GetRoleListDocument,\r\n getItems: data => data.roles,\r\n setVariables: (skip, take) => ({\r\n options: {\r\n skip,\r\n take,\r\n filter: {\r\n code: {\r\n contains: this.searchTermControl.value,\r\n },\r\n ...this.filters.createFilterInput(),\r\n },\r\n sort: this.sorts.createSortInput(),\r\n },\r\n }),\r\n refreshListOnChanges: [this.filters.valueChanges, this.sorts.valueChanges],\r\n });\r\n }\r\n\r\n toggleDisplayLimit(role: ItemOf<GetRolesQuery, 'roles'>) {\r\n if (this.displayLimit[role.id] === role.permissions.length) {\r\n this.displayLimit[role.id] = this.initialLimit;\r\n } else {\r\n this.displayLimit[role.id] = role.permissions.length;\r\n }\r\n }\r\n\r\n isDefaultRole(role: Role): boolean {\r\n return role.code === SUPER_ADMIN_ROLE_CODE || role.code === CUSTOMER_ROLE_CODE;\r\n }\r\n}\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left> </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"seller-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"isNew$ | async; else updateButton\"\r\n (click)=\"create()\"\r\n [disabled]=\"!saveButtonEnabled()\"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n *vdrIfPermissions=\"['SuperAdmin', 'UpdateSeller']\"\r\n [disabled]=\"!saveButtonEnabled()\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </ng-template>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n\r\n<form class=\"form\" [formGroup]=\"detailForm\">\r\n <vdr-page-detail-layout>\r\n <vdr-page-detail-sidebar>\r\n <vdr-card *ngIf=\"entity$ | async as entity\">\r\n <vdr-page-entity-info [entity]=\"entity\" />\r\n </vdr-card>\r\n </vdr-page-detail-sidebar>\r\n <vdr-page-block>\r\n <vdr-card>\r\n <div class=\"form-grid\">\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input\r\n id=\"name\"\r\n type=\"text\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n formControlName=\"name\"\r\n />\r\n </vdr-form-field>\r\n </div>\r\n </vdr-card>\r\n <vdr-card\r\n formGroupName=\"customFields\"\r\n *ngIf=\"customFields.length\"\r\n [title]=\"'common.custom-fields' | translate\"\r\n >\r\n <vdr-tabbed-custom-fields\r\n entityName=\"Seller\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n ></vdr-tabbed-custom-fields>\r\n </vdr-card>\r\n <vdr-custom-detail-component-host\r\n locationId=\"seller-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n </vdr-page-block>\r\n </vdr-page-detail-layout>\r\n</form>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { FormBuilder, Validators } from '@angular/forms';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n CreateSellerInput,\r\n DataService,\r\n getCustomFieldsDefaults,\r\n GetSellerDetailDocument,\r\n LanguageCode,\r\n NotificationService,\r\n Permission,\r\n SellerFragment,\r\n TypedBaseDetailComponent,\r\n UpdateSellerInput,\r\n} from '@vendure/admin-ui/core';\r\nimport { gql } from 'apollo-angular';\r\nimport { mergeMap, take } from 'rxjs/operators';\r\n\r\nexport const GET_SELLER_DETAIL = gql`\r\n query GetSellerDetail($id: ID!) {\r\n seller(id: $id) {\r\n ...SellerDetail\r\n }\r\n }\r\n fragment SellerDetail on Seller {\r\n id\r\n createdAt\r\n updatedAt\r\n name\r\n }\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-seller-detail',\r\n templateUrl: './seller-detail.component.html',\r\n styleUrls: ['./seller-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SellerDetailComponent\r\n extends TypedBaseDetailComponent<typeof GetSellerDetailDocument, 'seller'>\r\n implements OnInit, OnDestroy\r\n{\r\n customFields = this.getCustomFieldConfig('Seller');\r\n detailForm = this.formBuilder.group({\r\n name: ['', Validators.required],\r\n customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),\r\n });\r\n readonly updatePermission = [Permission.SuperAdmin, Permission.UpdateSeller, Permission.CreateSeller];\r\n\r\n constructor(\r\n private changeDetector: ChangeDetectorRef,\r\n protected dataService: DataService,\r\n private formBuilder: FormBuilder,\r\n private notificationService: NotificationService,\r\n ) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n this.init();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroy();\r\n }\r\n\r\n saveButtonEnabled(): boolean {\r\n return this.detailForm.dirty && this.detailForm.valid;\r\n }\r\n\r\n create() {\r\n if (!this.detailForm.dirty) {\r\n return;\r\n }\r\n const formValue = this.detailForm.value;\r\n if (!formValue.name) {\r\n return;\r\n }\r\n const input: CreateSellerInput = {\r\n name: formValue.name,\r\n customFields: formValue.customFields,\r\n };\r\n this.dataService.settings.createSeller(input).subscribe(data => {\r\n switch (data.createSeller.__typename) {\r\n case 'Seller':\r\n this.notificationService.success(_('common.notify-create-success'), {\r\n entity: 'Seller',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n this.router.navigate(['../', data.createSeller.id], { relativeTo: this.route });\r\n break;\r\n }\r\n });\r\n }\r\n\r\n save() {\r\n if (!this.detailForm.dirty) {\r\n return;\r\n }\r\n const formValue = this.detailForm.value;\r\n this.entity$\r\n .pipe(\r\n take(1),\r\n mergeMap(seller => {\r\n const input = {\r\n id: seller.id,\r\n name: formValue.name,\r\n customFields: formValue.customFields,\r\n } as UpdateSellerInput;\r\n return this.dataService.settings.updateSeller(input);\r\n }),\r\n )\r\n .subscribe(({ updateSeller }) => {\r\n switch (updateSeller.__typename) {\r\n case 'Seller':\r\n this.notificationService.success(_('common.notify-update-success'), {\r\n entity: 'Seller',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n break;\r\n // case 'LanguageNotAvailableError':\r\n // this.notificationService.error(updateSeller.message);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Update the form values when the entity changes.\r\n */\r\n protected setFormValues(entity: SellerFragment, languageCode: LanguageCode): void {\r\n this.detailForm.patchValue({\r\n name: entity.name,\r\n });\r\n if (this.customFields.length) {\r\n this.setCustomFieldFormValues(this.customFields, this.detailForm.get(['customFields']), entity);\r\n }\r\n }\r\n}\r\n","import { createBulkDeleteAction, GetSellersQuery, ItemOf, Permission } from '@vendure/admin-ui/core';\r\nimport { map } from 'rxjs/operators';\r\n\r\nexport const deleteSellersBulkAction = createBulkDeleteAction<ItemOf<GetSellersQuery, 'sellers'>>({\r\n location: 'seller-list',\r\n requiresPermission: userPermissions => userPermissions.includes(Permission.DeleteSeller),\r\n getItemName: item => item.name,\r\n bulkDelete: (dataService, ids) =>\r\n dataService.settings.deleteSellers(ids).pipe(map(res => res.deleteSellers)),\r\n});\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left> </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"seller-list\"></vdr-action-bar-items>\r\n <a class=\"btn btn-primary\" *vdrIfPermissions=\"['SuperAdmin', 'CreateSeller']\" [routerLink]=\"['./', 'create']\">\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'settings.create-new-seller' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n<vdr-data-table-2\r\n id=\"seller-list\"\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n [filters]=\"filters\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n>\r\n <vdr-bulk-action-menu\r\n locationId=\"seller-list\"\r\n [hostComponent]=\"this\"\r\n [selectionManager]=\"selectionManager\"\r\n />\r\n <vdr-dt2-search\r\n [searchTermControl]=\"searchTermControl\"\r\n [searchTermPlaceholder]=\"'catalog.filter-by-name' | translate\"\r\n />\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\r\n <ng-template let-seller=\"item\">{{ seller.id }}</ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.created-at' | translate\" id=\"created-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('createdAt')\"\r\n >\r\n <ng-template let-seller=\"item\">\r\n {{ seller.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.updated-at' | translate\" id=\"updated-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('updatedAt')\"\r\n >\r\n <ng-template let-seller=\"item\">\r\n {{ seller.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.name' | translate\" id=\"name\" [optional]=\"false\" [sort]=\"sorts.get('name')\">\r\n <ng-template let-seller=\"item\">\r\n <a class=\"button-ghost\" [routerLink]=\"['./', seller.id]\"\r\n ><span>{{ seller.name }}</span>\r\n <clr-icon shape=\"arrow right\"></clr-icon>\r\n </a>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-custom-field-column *ngFor=\"let customField of customFields\" [customField]=\"customField\" [sorts]=\"sorts\" />\r\n</vdr-data-table-2>\r\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport { GetSellerListDocument, TypedBaseListComponent } from '@vendure/admin-ui/core';\r\nimport { gql } from 'apollo-angular';\r\n\r\nconst GET_SELLER_LIST = gql`\r\n query GetSellerList($options: SellerListOptions) {\r\n sellers(options: $options) {\r\n items {\r\n ...SellerListItem\r\n }\r\n totalItems\r\n }\r\n }\r\n fragment SellerListItem on Seller {\r\n id\r\n createdAt\r\n updatedAt\r\n name\r\n }\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-seller-list',\r\n templateUrl: './seller-list.component.html',\r\n styleUrls: ['./seller-list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SellerListComponent\r\n extends TypedBaseListComponent<typeof GetSellerListDocument, 'sellers'>\r\n implements OnInit\r\n{\r\n readonly customFields = this.getCustomFieldConfig('Seller');\r\n readonly filters = this.createFilterCollection()\r\n .addIdFilter()\r\n .addDateFilters()\r\n .addFilter({\r\n name: 'name',\r\n type: { kind: 'text' },\r\n label: _('common.name'),\r\n filterField: 'name',\r\n })\r\n .addCustomFieldFilters(this.customFields)\r\n .connectToRoute(this.route);\r\n\r\n readonly sorts = this.createSortCollection()\r\n .defaultSort('createdAt', 'DESC')\r\n .addSort({ name: 'createdAt' })\r\n .addSort({ name: 'updatedAt' })\r\n .addSort({ name: 'name' })\r\n .addCustomFieldSorts(this.customFields)\r\n .connectToRoute(this.route);\r\n\r\n constructor() {\r\n super();\r\n super.configure({\r\n document: GetSellerListDocument,\r\n getItems: data => data.sellers,\r\n setVariables: (skip, take) => ({\r\n options: {\r\n skip,\r\n take,\r\n filter: {\r\n name: {\r\n contains: this.searchTermControl.value,\r\n },\r\n ...this.filters.createFilterInput(),\r\n },\r\n sort: this.sorts.createSortInput(),\r\n },\r\n }),\r\n refreshListOnChanges: [this.filters.valueChanges, this.sorts.valueChanges],\r\n });\r\n }\r\n}\r\n","<vdr-card class=\"test-result\" [title]=\"'settings.test-result' | translate\">\r\n <div class=\"card-span\" *ngFor=\"let quote of testResult\">\r\n <div class=\"result-details\" [class.stale]=\"testDataUpdated\">\r\n <vdr-labeled-data [label]=\"'settings.shipping-method' | translate\">\r\n {{ quote.name }}\r\n </vdr-labeled-data>\r\n <div class=\"price-row\">\r\n <vdr-labeled-data [label]=\"'common.price' | translate\">\r\n {{ quote.price | localeCurrency: currencyCode }}\r\n </vdr-labeled-data>\r\n <vdr-labeled-data [label]=\"'common.price-with-tax' | translate\">\r\n {{ quote.priceWithTax | localeCurrency: currencyCode }}\r\n </vdr-labeled-data>\r\n </div>\r\n <vdr-object-tree *ngIf=\"quote.metadata\" [value]=\"quote.metadata\"></vdr-object-tree>\r\n </div>\r\n </div>\r\n <div class=\"card-span\" *ngIf=\"testResult?.length === 0\">\r\n <clr-icon shape=\"ban\" class=\"is-solid error\"></clr-icon>\r\n {{ 'settings.no-eligible-shipping-methods' | translate }}\r\n </div>\r\n <div class=\"card-footer\">\r\n <button class=\"btn btn-secondary\" (click)=\"runTest.emit()\" [disabled]=\"!okToRun\">\r\n {{ 'settings.test-shipping-methods' | translate }}\r\n </button>\r\n </div>\r\n</vdr-card>\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\r\n\r\nimport { CurrencyCode, ShippingMethodQuote } from '@vendure/admin-ui/core';\r\n\r\n@Component({\r\n selector: 'vdr-shipping-eligibility-test-result',\r\n templateUrl: './shipping-eligibility-test-result.component.html',\r\n styleUrls: ['./shipping-eligibility-test-result.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ShippingEligibilityTestResultComponent {\r\n @Input() testResult: ShippingMethodQuote[];\r\n @Input() okToRun = false;\r\n @Input() testDataUpdated = false;\r\n @Input() currencyCode: CurrencyCode;\r\n @Output() runTest = new EventEmitter<void>();\r\n}\r\n","<table class=\"order-table table\" *ngIf=\"lines.length; else emptyPlaceholder\">\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>{{ 'order.product-name' | translate }}</th>\r\n <th>{{ 'order.product-sku' | translate }}</th>\r\n <th>{{ 'order.unit-price' | translate }}</th>\r\n <th>{{ 'order.quantity' | translate }}</th>\r\n <th>{{ 'order.total' | translate }}</th>\r\n </tr>\r\n </thead>\r\n <tr *ngFor=\"let line of lines\" class=\"order-line\">\r\n <td class=\"align-middle thumb\">\r\n <img [src]=\"line.preview + '?preset=tiny'\" />\r\n </td>\r\n <td class=\"align-middle name\">{{ line.name }}</td>\r\n <td class=\"align-middle sku\">{{ line.sku }}</td>\r\n <td class=\"align-middle unit-price\">\r\n {{ line.unitPriceWithTax | localeCurrency : currencyCode }}\r\n </td>\r\n <td class=\"align-middle quantity\">\r\n <input [(ngModel)]=\"line.quantity\" (change)=\"updateQuantity()\" type=\"number\" max=\"9999\" min=\"1\" />\r\n <button class=\"icon-button\" (click)=\"removeLine(line)\">\r\n <clr-icon shape=\"trash\"></clr-icon>\r\n </button>\r\n </td>\r\n <td class=\"align-middle total\">\r\n {{ line.unitPriceWithTax * line.quantity | localeCurrency : currencyCode }}\r\n </td>\r\n </tr>\r\n <tr class=\"sub-total\">\r\n <td class=\"left\">{{ 'order.sub-total' | translate }}</td>\r\n <td></td>\r\n <td></td>\r\n <td></td>\r\n <td></td>\r\n <td>{{ subTotal | localeCurrency : currencyCode }}</td>\r\n </tr>\r\n</table>\r\n\r\n<ng-template #emptyPlaceholder>\r\n <div class=\"card-block empty-placeholder card-span\">\r\n <div class=\"empty-text\">{{ 'settings.add-products-to-test-order' | translate }}</div>\r\n <clr-icon shape=\"arrow\" dir=\"down\" size=\"96\"></clr-icon>\r\n </div>\r\n</ng-template>\r\n<div class=\"card-block\">\r\n <vdr-product-variant-selector (productSelected)=\"selectResult($event)\"> </vdr-product-variant-selector>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, OnInit, Output } from '@angular/core';\r\nimport {\r\n CurrencyCode,\r\n DataService,\r\n LocalStorageService,\r\n ProductSelectorSearchQuery,\r\n} from '@vendure/admin-ui/core';\r\n\r\ntype SearchItem = ProductSelectorSearchQuery['search']['items'][number];\r\n\r\nexport interface TestOrderLine {\r\n id: string;\r\n name: string;\r\n preview: string;\r\n sku: string;\r\n unitPriceWithTax: number;\r\n quantity: number;\r\n}\r\n\r\n@Component({\r\n selector: 'vdr-test-order-builder',\r\n templateUrl: './test-order-builder.component.html',\r\n styleUrls: ['./test-order-builder.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class TestOrderBuilderComponent implements OnInit {\r\n @Output() orderLinesChange = new EventEmitter<TestOrderLine[]>();\r\n lines: TestOrderLine[] = [];\r\n currencyCode: CurrencyCode;\r\n get subTotal(): number {\r\n return this.lines.reduce((sum, l) => sum + l.unitPriceWithTax * l.quantity, 0);\r\n }\r\n\r\n constructor(private dataService: DataService, private localStorageService: LocalStorageService) {}\r\n\r\n ngOnInit() {\r\n this.lines = this.loadFromLocalStorage();\r\n if (this.lines) {\r\n this.orderLinesChange.emit(this.lines);\r\n }\r\n this.dataService.settings.getActiveChannel('cache-first').single$.subscribe(result => {\r\n this.currencyCode = result.activeChannel.defaultCurrencyCode;\r\n });\r\n }\r\n\r\n selectResult(result: SearchItem) {\r\n if (result) {\r\n this.addToLines(result);\r\n }\r\n }\r\n\r\n private addToLines(result: SearchItem) {\r\n if (!this.lines.find(l => l.id === result.productVariantId)) {\r\n this.lines.push({\r\n id: result.productVariantId,\r\n name: result.productVariantName,\r\n preview: result.productAsset?.preview ?? '',\r\n quantity: 1,\r\n sku: result.sku,\r\n unitPriceWithTax:\r\n (result.priceWithTax.__typename === 'SinglePrice' && result.priceWithTax.value) || 0,\r\n });\r\n this.persistToLocalStorage();\r\n this.orderLinesChange.emit(this.lines);\r\n }\r\n }\r\n\r\n updateQuantity() {\r\n this.persistToLocalStorage();\r\n this.orderLinesChange.emit(this.lines);\r\n }\r\n\r\n removeLine(line: TestOrderLine) {\r\n this.lines = this.lines.filter(l => l.id !== line.id);\r\n this.persistToLocalStorage();\r\n this.orderLinesChange.emit(this.lines);\r\n }\r\n\r\n private persistToLocalStorage() {\r\n this.localStorageService.setForCurrentLocation('shippingTestOrder', this.lines);\r\n }\r\n\r\n private loadFromLocalStorage(): TestOrderLine[] {\r\n return this.localStorageService.getForCurrentLocation('shippingTestOrder') || [];\r\n }\r\n}\r\n","<div class=\"card\">\r\n <div class=\"card-header\">\r\n {{ 'settings.test-address' | translate }}\r\n </div>\r\n <div class=\"card-block\">\r\n <form [formGroup]=\"form\" class=\"form-grid\">\r\n <vdr-form-field [label]=\"'customer.city' | translate\">\r\n <input formControlName=\"city\" type=\"text\" />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'customer.province' | translate\">\r\n <input formControlName=\"province\" type=\"text\" />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'customer.postal-code' | translate\">\r\n <input formControlName=\"postalCode\" type=\"text\" />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'customer.country' | translate\">\r\n <select name=\"countryCode\" formControlName=\"countryCode\" >\r\n <option *ngFor=\"let country of availableCountries$ | async\" [value]=\"country.code\">\r\n {{ country.name }}\r\n </option>\r\n </select>\r\n </vdr-form-field>\r\n </form>\r\n </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, OnDestroy, OnInit, Output } from '@angular/core';\r\nimport { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms';\r\nimport { DataService, GetAvailableCountriesQuery, ItemOf, LocalStorageService } from '@vendure/admin-ui/core';\r\nimport { Observable, Subscription } from 'rxjs';\r\n\r\nexport interface TestAddress {\r\n city: string;\r\n province: string;\r\n postalCode: string;\r\n countryCode: string;\r\n}\r\n\r\n@Component({\r\n selector: 'vdr-test-address-form',\r\n templateUrl: './test-address-form.component.html',\r\n styleUrls: ['./test-address-form.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class TestAddressFormComponent implements OnInit, OnDestroy {\r\n @Output() addressChange = new EventEmitter<TestAddress>();\r\n availableCountries$: Observable<Array<ItemOf<GetAvailableCountriesQuery, 'countries'>>>;\r\n form: UntypedFormGroup;\r\n private subscription: Subscription;\r\n\r\n constructor(\r\n private formBuilder: UntypedFormBuilder,\r\n private dataService: DataService,\r\n private localStorageService: LocalStorageService,\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.availableCountries$ = this.dataService.settings\r\n .getAvailableCountries()\r\n .mapSingle(result => result.countries.items);\r\n const storedValue = this.localStorageService.getForCurrentLocation('shippingTestAddress');\r\n const initialValue: TestAddress = storedValue\r\n ? storedValue\r\n : {\r\n city: '',\r\n countryCode: '',\r\n postalCode: '',\r\n province: '',\r\n };\r\n this.addressChange.emit(initialValue);\r\n\r\n this.form = this.formBuilder.group(initialValue);\r\n this.subscription = this.form.valueChanges.subscribe(value => {\r\n this.localStorageService.setForCurrentLocation('shippingTestAddress', value);\r\n this.addressChange.emit(value);\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.subscription) {\r\n this.subscription.unsubscribe();\r\n }\r\n }\r\n}\r\n","<div\r\n class=\"test-result card\"\r\n [ngClass]=\"{\r\n success: testResult?.eligible === true,\r\n error: testResult?.eligible === false,\r\n unknown: !testResult\r\n }\"\r\n>\r\n <div class=\"card-header\">\r\n {{ 'settings.test-result' | translate }}\r\n </div>\r\n <div class=\"card-block\">\r\n <div class=\"result-details\" [class.stale]=\"testDataUpdated\">\r\n <vdr-labeled-data [label]=\"'settings.eligible' | translate\">\r\n <div class=\"eligible-icon\">\r\n <clr-icon\r\n shape=\"success-standard\"\r\n class=\"is-solid success\"\r\n *ngIf=\"testResult?.eligible\"\r\n ></clr-icon>\r\n <clr-icon\r\n shape=\"ban\"\r\n class=\"is-solid error\"\r\n *ngIf=\"testResult?.eligible === false\"\r\n ></clr-icon>\r\n <clr-icon shape=\"unknown-status\" *ngIf=\"!testResult\"></clr-icon>\r\n </div>\r\n {{ testResult?.eligible }}\r\n </vdr-labeled-data>\r\n <div class=\"price-row\">\r\n <vdr-labeled-data\r\n [label]=\"'common.price' | translate\"\r\n *ngIf=\"testResult?.quote?.price != null\"\r\n >\r\n {{ testResult.quote?.price | localeCurrency: currencyCode }}\r\n </vdr-labeled-data>\r\n <vdr-labeled-data\r\n [label]=\"'common.price-with-tax' | translate\"\r\n *ngIf=\"testResult?.quote?.priceWithTax != null\"\r\n >\r\n {{ testResult.quote?.priceWithTax | localeCurrency: currencyCode }}\r\n </vdr-labeled-data>\r\n </div>\r\n <vdr-object-tree\r\n *ngIf=\"testResult?.quote?.metadata\"\r\n [value]=\"testResult?.quote?.metadata\"\r\n ></vdr-object-tree>\r\n </div>\r\n </div>\r\n <div class=\"card-footer\">\r\n <button class=\"btn btn-secondary\" (click)=\"runTest.emit()\" [disabled]=\"!okToRun\">\r\n {{ 'settings.test-shipping-method' | translate }}\r\n </button>\r\n </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\r\n\r\nimport { CurrencyCode, TestShippingMethodResult } from '@vendure/admin-ui/core';\r\n\r\n@Component({\r\n selector: 'vdr-shipping-method-test-result',\r\n templateUrl: './shipping-method-test-result.component.html',\r\n styleUrls: ['./shipping-method-test-result.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ShippingMethodTestResultComponent {\r\n @Input() testResult: TestShippingMethodResult;\r\n @Input() okToRun = false;\r\n @Input() testDataUpdated = false;\r\n @Input() currencyCode: CurrencyCode;\r\n @Output() runTest = new EventEmitter<void>();\r\n}\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-language-selector\r\n [disabled]=\"isNew$ | async\"\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"languageCode$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"shipping-method-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"isNew$ | async; else updateButton\"\r\n (click)=\"create()\"\r\n [disabled]=\"\r\n detailForm.pristine || detailForm.invalid || !selectedChecker || !selectedCalculator\r\n \"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n *vdrIfPermissions=\"updatePermission\"\r\n [disabled]=\"\r\n detailForm.pristine || detailForm.invalid || !selectedChecker || !selectedCalculator\r\n \"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </ng-template>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n\r\n<form class=\"form\" [formGroup]=\"detailForm\">\r\n <vdr-page-detail-layout>\r\n <vdr-page-detail-sidebar>\r\n <vdr-card *ngIf=\"entity$ | async as entity\">\r\n <vdr-page-entity-info [entity]=\"entity\" />\r\n </vdr-card>\r\n </vdr-page-detail-sidebar>\r\n <vdr-page-block>\r\n <vdr-card>\r\n <div class=\"form-grid\">\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input\r\n id=\"name\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n (input)=\"updateCode(entity?.code, $event.target.value)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'common.code' | translate\"\r\n for=\"code\"\r\n [readOnlyToggle]=\"updatePermission | hasPermission\"\r\n >\r\n <input\r\n id=\"code\"\r\n type=\"text\"\r\n formControlName=\"code\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-rich-text-editor\r\n class=\"form-grid-span\"\r\n formControlName=\"description\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n [label]=\"'common.description' | translate\"\r\n ></vdr-rich-text-editor>\r\n <vdr-form-field\r\n [label]=\"'settings.fulfillment-handler' | translate\"\r\n for=\"fulfillmentHandler\"\r\n >\r\n <select\r\n name=\"fulfillmentHandler\"\r\n formControlName=\"fulfillmentHandler\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n >\r\n <option *ngFor=\"let handler of fulfillmentHandlers\" [value]=\"handler.code\">\r\n {{ handler.code }}: {{ handler.description }}\r\n </option>\r\n </select>\r\n </vdr-form-field>\r\n </div>\r\n </vdr-card>\r\n\r\n <vdr-card\r\n formGroupName=\"customFields\"\r\n *ngIf=\"customFields.length\"\r\n [title]=\"'common.custom-fields' | translate\"\r\n >\r\n <vdr-tabbed-custom-fields\r\n entityName=\"ShippingMethod\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n ></vdr-tabbed-custom-fields>\r\n </vdr-card>\r\n\r\n <vdr-custom-detail-component-host\r\n locationId=\"shipping-method-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n\r\n <vdr-card [title]=\"'settings.shipping-eligibility-checker' | translate\">\r\n <vdr-configurable-input\r\n class=\"card-span\"\r\n *ngIf=\"selectedChecker && selectedCheckerDefinition\"\r\n [operation]=\"selectedChecker\"\r\n [operationDefinition]=\"selectedCheckerDefinition\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n (remove)=\"selectedChecker = null\"\r\n formControlName=\"checker\"\r\n ></vdr-configurable-input>\r\n <div *ngIf=\"!selectedChecker || !selectedCheckerDefinition\" class=\"card-span\">\r\n <vdr-dropdown>\r\n <button class=\"btn btn-outline\" vdrDropdownTrigger>\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'common.select' | translate }}\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-left\">\r\n <button\r\n *ngFor=\"let checker of checkers\"\r\n type=\"button\"\r\n vdrDropdownItem\r\n (click)=\"selectChecker(checker)\"\r\n >\r\n {{ checker.description }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </vdr-card>\r\n <vdr-card [title]=\"'settings.shipping-calculator' | translate\">\r\n <vdr-configurable-input\r\n class=\"card-span\"\r\n *ngIf=\"selectedCalculator && selectedCalculatorDefinition\"\r\n [operation]=\"selectedCalculator\"\r\n [operationDefinition]=\"selectedCalculatorDefinition\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n (remove)=\"selectedCalculator = null\"\r\n formControlName=\"calculator\"\r\n ></vdr-configurable-input>\r\n <div *ngIf=\"!selectedCalculator || !selectedCalculatorDefinition\" class=\"card-span\">\r\n <vdr-dropdown>\r\n <button class=\"btn btn-outline\" vdrDropdownTrigger>\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'common.select' | translate }}\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-left\">\r\n <button\r\n *ngFor=\"let calculator of calculators\"\r\n type=\"button\"\r\n vdrDropdownItem\r\n (click)=\"selectCalculator(calculator)\"\r\n >\r\n {{ calculator.description }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </vdr-card>\r\n <vdr-card [title]=\"'settings.test-shipping-method' | translate\">\r\n <vdr-test-order-builder\r\n class=\"card-span\"\r\n (orderLinesChange)=\"setTestOrderLines($event)\"\r\n ></vdr-test-order-builder>\r\n <vdr-test-address-form\r\n (addressChange)=\"setTestAddress($event)\"\r\n class=\"mt-2\"\r\n ></vdr-test-address-form>\r\n <vdr-shipping-method-test-result\r\n class=\"mt-2\"\r\n [currencyCode]=\"(activeChannel$ | async)?.currencyCode\"\r\n [okToRun]=\"allTestDataPresent() && testDataUpdated && detailForm.valid\"\r\n [testDataUpdated]=\"testDataUpdated\"\r\n [testResult]=\"testResult$ | async\"\r\n (runTest)=\"runTest()\"\r\n ></vdr-shipping-method-test-result>\r\n </vdr-card>\r\n </vdr-page-block>\r\n </vdr-page-detail-layout>\r\n</form>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { FormBuilder, Validators } from '@angular/forms';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n configurableDefinitionToInstance,\r\n ConfigurableOperation,\r\n ConfigurableOperationDefinition,\r\n CreateShippingMethodInput,\r\n createUpdatedTranslatable,\r\n DataService,\r\n findTranslation,\r\n GetActiveChannelQuery,\r\n getConfigArgValue,\r\n getCustomFieldsDefaults,\r\n GetShippingMethodDetailDocument,\r\n GetShippingMethodDetailQuery,\r\n LanguageCode,\r\n NotificationService,\r\n Permission,\r\n SHIPPING_METHOD_FRAGMENT,\r\n ShippingMethodFragment,\r\n TestShippingMethodInput,\r\n TestShippingMethodResult,\r\n toConfigurableOperationInput,\r\n TypedBaseDetailComponent,\r\n UpdateShippingMethodInput,\r\n} from '@vendure/admin-ui/core';\r\nimport { normalizeString } from '@vendure/common/lib/normalize-string';\r\nimport { gql } from 'apollo-angular';\r\nimport { combineLatest, merge, Observable, of, Subject } from 'rxjs';\r\nimport { mergeMap, switchMap, take, takeUntil } from 'rxjs/operators';\r\n\r\nimport { TestAddress } from '../test-address-form/test-address-form.component';\r\nimport { TestOrderLine } from '../test-order-builder/test-order-builder.component';\r\n\r\nexport const GET_SHIPPING_METHOD_DETAIL = gql`\r\n query GetShippingMethodDetail($id: ID!) {\r\n shippingMethod(id: $id) {\r\n ...ShippingMethod\r\n }\r\n }\r\n ${SHIPPING_METHOD_FRAGMENT}\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-shipping-method-detail',\r\n templateUrl: './shipping-method-detail.component.html',\r\n styleUrls: ['./shipping-method-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ShippingMethodDetailComponent\r\n extends TypedBaseDetailComponent<typeof GetShippingMethodDetailDocument, 'shippingMethod'>\r\n implements OnInit, OnDestroy\r\n{\r\n customFields = this.getCustomFieldConfig('ShippingMethod');\r\n detailForm = this.formBuilder.group({\r\n code: ['', Validators.required],\r\n name: ['', Validators.required],\r\n description: '',\r\n fulfillmentHandler: ['', Validators.required],\r\n checker: {} as NonNullable<GetShippingMethodDetailQuery['shippingMethod']>['checker'],\r\n calculator: {} as NonNullable<GetShippingMethodDetailQuery['shippingMethod']>['calculator'],\r\n customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),\r\n });\r\n checkers: ConfigurableOperationDefinition[] = [];\r\n calculators: ConfigurableOperationDefinition[] = [];\r\n fulfillmentHandlers: ConfigurableOperationDefinition[] = [];\r\n selectedChecker?: ConfigurableOperation | null;\r\n selectedCheckerDefinition?: ConfigurableOperationDefinition;\r\n selectedCalculator?: ConfigurableOperation | null;\r\n selectedCalculatorDefinition?: ConfigurableOperationDefinition;\r\n activeChannel$: Observable<GetActiveChannelQuery['activeChannel']>;\r\n testAddress: TestAddress;\r\n testOrderLines: TestOrderLine[];\r\n testDataUpdated = false;\r\n testResult$: Observable<TestShippingMethodResult | undefined>;\r\n readonly updatePermission = [Permission.UpdateSettings, Permission.UpdateShippingMethod];\r\n private fetchTestResult$ = new Subject<[TestAddress, TestOrderLine[]]>();\r\n\r\n constructor(\r\n private changeDetector: ChangeDetectorRef,\r\n protected dataService: DataService,\r\n private formBuilder: FormBuilder,\r\n private notificationService: NotificationService,\r\n ) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n this.init();\r\n this.dataService.shippingMethod.getShippingMethodOperations().single$.subscribe(data => {\r\n this.checkers = data.shippingEligibilityCheckers;\r\n this.calculators = data.shippingCalculators;\r\n this.fulfillmentHandlers = data.fulfillmentHandlers;\r\n this.changeDetector.markForCheck();\r\n this.selectedCheckerDefinition = data.shippingEligibilityCheckers.find(\r\n c => c.code === this.entity?.checker?.code,\r\n );\r\n this.selectedCalculatorDefinition = data.shippingCalculators.find(\r\n c => c.code === this.entity?.calculator?.code,\r\n );\r\n });\r\n\r\n this.activeChannel$ = this.dataService.settings\r\n .getActiveChannel()\r\n .mapStream(data => data.activeChannel);\r\n\r\n this.testResult$ = this.fetchTestResult$.pipe(\r\n switchMap(([address, lines]) => {\r\n const { checker, calculator } = this.detailForm.value;\r\n if (!this.selectedChecker || !this.selectedCalculator || !checker || !calculator) {\r\n return of(undefined);\r\n }\r\n const input: TestShippingMethodInput = {\r\n shippingAddress: { ...address, streetLine1: 'test' },\r\n lines: lines.map(l => ({ productVariantId: l.id, quantity: l.quantity })),\r\n checker: toConfigurableOperationInput(this.selectedChecker, checker),\r\n calculator: toConfigurableOperationInput(this.selectedCalculator, calculator),\r\n };\r\n return this.dataService.shippingMethod\r\n .testShippingMethod(input)\r\n .mapSingle(result => result.testShippingMethod);\r\n }),\r\n );\r\n\r\n /* eslint-disable @typescript-eslint/no-non-null-assertion */\r\n merge(\r\n this.detailForm.get(['checker'])!.valueChanges,\r\n this.detailForm.get(['calculator'])!.valueChanges,\r\n )\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe(() => (this.testDataUpdated = true));\r\n /* eslint-enable @typescript-eslint/no-non-null-assertion */\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy();\r\n }\r\n\r\n updateCode(currentCode: string | undefined, nameValue: string) {\r\n if (!currentCode) {\r\n const codeControl = this.detailForm.get(['code']);\r\n if (codeControl && codeControl.pristine) {\r\n codeControl.setValue(normalizeString(nameValue, '-'));\r\n }\r\n }\r\n }\r\n\r\n selectChecker(checker: ConfigurableOperationDefinition) {\r\n this.selectedCheckerDefinition = checker;\r\n this.selectedChecker = configurableDefinitionToInstance(checker);\r\n const formControl = this.detailForm.get('checker');\r\n if (formControl) {\r\n formControl.clearValidators();\r\n formControl.updateValueAndValidity({ onlySelf: true });\r\n formControl.patchValue(this.selectedChecker);\r\n }\r\n this.detailForm.markAsDirty();\r\n }\r\n\r\n selectCalculator(calculator: ConfigurableOperationDefinition) {\r\n this.selectedCalculatorDefinition = calculator;\r\n this.selectedCalculator = configurableDefinitionToInstance(calculator);\r\n const formControl = this.detailForm.get('calculator');\r\n if (formControl) {\r\n formControl.clearValidators();\r\n formControl.updateValueAndValidity({ onlySelf: true });\r\n formControl.patchValue(this.selectedCalculator);\r\n }\r\n this.detailForm.markAsDirty();\r\n }\r\n\r\n create() {\r\n const selectedChecker = this.selectedChecker;\r\n const selectedCalculator = this.selectedCalculator;\r\n const { checker, calculator } = this.detailForm.value;\r\n if (!selectedChecker || !selectedCalculator || !checker || !calculator) {\r\n return;\r\n }\r\n const formValue = this.detailForm.value;\r\n const input = {\r\n ...(this.getUpdatedShippingMethod(\r\n {\r\n createdAt: '',\r\n updatedAt: '',\r\n id: '',\r\n code: '',\r\n name: '',\r\n description: '',\r\n fulfillmentHandlerCode: '',\r\n checker: undefined as any,\r\n calculator: undefined as any,\r\n translations: [],\r\n },\r\n this.detailForm,\r\n this.languageCode,\r\n ) as CreateShippingMethodInput),\r\n checker: toConfigurableOperationInput(selectedChecker, checker),\r\n calculator: toConfigurableOperationInput(selectedCalculator, calculator),\r\n };\r\n this.dataService.shippingMethod.createShippingMethod(input).subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-create-success'), {\r\n entity: 'ShippingMethod',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n this.router.navigate(['../', data.createShippingMethod.id], { relativeTo: this.route });\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-create-error'), {\r\n entity: 'ShippingMethod',\r\n });\r\n },\r\n );\r\n }\r\n\r\n save() {\r\n const selectedChecker = this.selectedChecker;\r\n const selectedCalculator = this.selectedCalculator;\r\n const { checker, calculator } = this.detailForm.value;\r\n if (!selectedChecker || !selectedCalculator || !checker || !calculator) {\r\n return;\r\n }\r\n combineLatest([this.entity$, this.languageCode$])\r\n .pipe(\r\n take(1),\r\n mergeMap(([shippingMethod, languageCode]) => {\r\n const formValue = this.detailForm.value;\r\n const input = {\r\n ...(this.getUpdatedShippingMethod(\r\n shippingMethod,\r\n this.detailForm,\r\n languageCode,\r\n ) as UpdateShippingMethodInput),\r\n checker: toConfigurableOperationInput(selectedChecker, checker),\r\n calculator: toConfigurableOperationInput(selectedCalculator, calculator),\r\n };\r\n return this.dataService.shippingMethod.updateShippingMethod(input);\r\n }),\r\n )\r\n .subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-update-success'), {\r\n entity: 'ShippingMethod',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n },\r\n err => {\r\n // eslint-disable-next-line no-console\r\n console.error(err);\r\n this.notificationService.error(_('common.notify-update-error'), {\r\n entity: 'ShippingMethod',\r\n });\r\n },\r\n );\r\n }\r\n\r\n setTestOrderLines(event: TestOrderLine[]) {\r\n this.testOrderLines = event;\r\n this.testDataUpdated = true;\r\n }\r\n\r\n setTestAddress(event: TestAddress) {\r\n this.testAddress = event;\r\n this.testDataUpdated = true;\r\n }\r\n\r\n allTestDataPresent(): boolean {\r\n return !!(\r\n this.testAddress &&\r\n this.testOrderLines &&\r\n this.testOrderLines.length &&\r\n this.selectedChecker &&\r\n this.selectedCalculator\r\n );\r\n }\r\n\r\n runTest() {\r\n this.fetchTestResult$.next([this.testAddress, this.testOrderLines]);\r\n this.testDataUpdated = false;\r\n }\r\n\r\n /**\r\n * Given a ShippingMethod and the value of the detailForm, this method creates an updated copy which\r\n * can then be persisted to the API.\r\n */\r\n private getUpdatedShippingMethod(\r\n shippingMethod: NonNullable<GetShippingMethodDetailQuery['shippingMethod']>,\r\n formGroup: typeof this.detailForm,\r\n languageCode: LanguageCode,\r\n ): Omit<CreateShippingMethodInput | UpdateShippingMethodInput, 'checker' | 'calculator'> {\r\n const formValue = formGroup.value;\r\n const input = createUpdatedTranslatable({\r\n translatable: shippingMethod,\r\n updatedFields: formValue,\r\n customFieldConfig: this.customFields,\r\n languageCode,\r\n defaultTranslation: {\r\n languageCode,\r\n name: shippingMethod.name || '',\r\n description: shippingMethod.description || '',\r\n },\r\n });\r\n return { ...input, fulfillmentHandler: formValue.fulfillmentHandler };\r\n }\r\n\r\n protected setFormValues(shippingMethod: ShippingMethodFragment, languageCode: LanguageCode): void {\r\n const currentTranslation = findTranslation(shippingMethod, languageCode);\r\n this.detailForm.patchValue({\r\n name: currentTranslation?.name ?? '',\r\n description: currentTranslation?.description ?? '',\r\n code: shippingMethod.code,\r\n fulfillmentHandler: shippingMethod.fulfillmentHandlerCode,\r\n checker: shippingMethod.checker || {},\r\n calculator: shippingMethod.calculator || {},\r\n });\r\n if (!this.selectedChecker) {\r\n this.selectedChecker = shippingMethod.checker && {\r\n code: shippingMethod.checker.code,\r\n args: shippingMethod.checker.args.map(a => ({ ...a, value: getConfigArgValue(a.value) })),\r\n };\r\n }\r\n if (!this.selectedCalculator) {\r\n this.selectedCalculator = shippingMethod.calculator && {\r\n code: shippingMethod.calculator?.code,\r\n args: shippingMethod.calculator?.args.map(a => ({ ...a, value: getConfigArgValue(a.value) })),\r\n };\r\n }\r\n if (this.customFields.length) {\r\n this.setCustomFieldFormValues(\r\n this.customFields,\r\n this.detailForm.get(['customFields']),\r\n shippingMethod,\r\n currentTranslation,\r\n );\r\n }\r\n }\r\n}\r\n","import {\r\n createBulkAssignToChannelAction,\r\n createBulkDeleteAction,\r\n createBulkRemoveFromChannelAction,\r\n GetShippingMethodListQuery,\r\n GetRolesQuery,\r\n ItemOf,\r\n Permission,\r\n AssignShippingMethodsToChannelDocument,\r\n RemoveShippingMethodsFromChannelDocument,\r\n} from '@vendure/admin-ui/core';\r\nimport { gql } from 'apollo-angular';\r\nimport { map } from 'rxjs/operators';\r\n\r\nexport const deleteShippingMethodsBulkAction = createBulkDeleteAction<\r\n ItemOf<GetShippingMethodListQuery, 'shippingMethods'>\r\n>({\r\n location: 'shipping-method-list',\r\n requiresPermission: userPermissions => userPermissions.includes(Permission.DeleteShippingMethod),\r\n getItemName: item => item.name,\r\n bulkDelete: (dataService, ids) =>\r\n dataService.shippingMethod.deleteShippingMethods(ids).pipe(map(res => res.deleteShippingMethods)),\r\n});\r\n\r\nconst ASSIGN_SHIPPING_METHODS_TO_CHANNEL = gql`\r\n mutation AssignShippingMethodsToChannel($input: AssignShippingMethodsToChannelInput!) {\r\n assignShippingMethodsToChannel(input: $input) {\r\n id\r\n name\r\n }\r\n }\r\n`;\r\n\r\nconst REMOVE_SHIPPING_METHODS_FROM_CHANNEL = gql`\r\n mutation RemoveShippingMethodsFromChannel($input: RemoveShippingMethodsFromChannelInput!) {\r\n removeShippingMethodsFromChannel(input: $input) {\r\n id\r\n name\r\n }\r\n }\r\n`;\r\nexport const assignShippingMethodsToChannelBulkAction = createBulkAssignToChannelAction<\r\n ItemOf<GetShippingMethodListQuery, 'shippingMethods'>\r\n>({\r\n location: 'shipping-method-list',\r\n requiresPermission: userPermissions =>\r\n userPermissions.includes(Permission.UpdateShippingMethod) ||\r\n userPermissions.includes(Permission.UpdateSettings),\r\n getItemName: item => item.name,\r\n bulkAssignToChannel: (dataService, shippingMethodIds, channelId) =>\r\n dataService\r\n .mutate(AssignShippingMethodsToChannelDocument, {\r\n input: {\r\n channelId,\r\n shippingMethodIds,\r\n },\r\n })\r\n .pipe(map(res => res.assignShippingMethodsToChannel)),\r\n});\r\n\r\nexport const removeShippingMethodsFromChannelBulkAction = createBulkRemoveFromChannelAction<\r\n ItemOf<GetShippingMethodListQuery, 'shippingMethods'>\r\n>({\r\n location: 'shipping-method-list',\r\n requiresPermission: userPermissions =>\r\n userPermissions.includes(Permission.DeleteShippingMethod) ||\r\n userPermissions.includes(Permission.DeleteSettings),\r\n getItemName: item => item.name,\r\n bulkRemoveFromChannel: (dataService, shippingMethodIds, channelId) =>\r\n dataService\r\n .mutate(RemoveShippingMethodsFromChannelDocument, {\r\n input: {\r\n channelId,\r\n shippingMethodIds,\r\n },\r\n })\r\n .pipe(map(res => res.removeShippingMethodsFromChannel)),\r\n});\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left>\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 ></vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"shipping-method-list\"></vdr-action-bar-items>\r\n <a\r\n class=\"btn btn-primary\"\r\n *vdrIfPermissions=\"['CreateSettings', 'CreateShippingMethod']\"\r\n [routerLink]=\"['./', 'create']\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'settings.create-new-shipping-method' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n<vdr-data-table-2\r\n id=\"shipping-method-list\"\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n [filters]=\"filters\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n>\r\n <vdr-bulk-action-menu\r\n locationId=\"shipping-method-list\"\r\n [hostComponent]=\"this\"\r\n [selectionManager]=\"selectionManager\"\r\n />\r\n <vdr-dt2-search\r\n [searchTermControl]=\"searchTermControl\"\r\n [searchTermPlaceholder]=\"'catalog.filter-by-name' | translate\"\r\n />\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\r\n <ng-template let-shippingMethod=\"item\">\r\n {{ shippingMethod.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.created-at' | translate\" id=\"created-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('createdAt')\"\r\n >\r\n <ng-template let-shippingMethod=\"item\">\r\n {{ shippingMethod.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.updated-at' | translate\" id=\"updated-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('updatedAt')\"\r\n >\r\n <ng-template let-shippingMethod=\"item\">\r\n {{ shippingMethod.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.name' | translate\" id=\"name\" [optional]=\"false\" [sort]=\"sorts.get('name')\">\r\n <ng-template let-shippingMethod=\"item\">\r\n <a class=\"button-ghost\" [routerLink]=\"['./', shippingMethod.id]\"\r\n ><span>{{ shippingMethod.name }}</span>\r\n <clr-icon shape=\"arrow right\"></clr-icon>\r\n </a>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.code' | translate\" id=\"code\" [sort]=\"sorts.get('code')\">\r\n <ng-template let-shippingMethod=\"item\">\r\n {{ shippingMethod.code }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.description' | translate\" id=\"description\"\r\n [sort]=\"sorts.get('description')\"\r\n [hiddenByDefault]=\"true\"\r\n >\r\n <ng-template let-shippingMethod=\"item\">\r\n {{ shippingMethod.description }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'settings.fulfillment-handler' | translate\" id=\"fulfillment-handler\" [sort]=\"sorts.get('fulfillmentHandlerCode')\">\r\n <ng-template let-shippingMethod=\"item\">\r\n {{ shippingMethod.fulfillmentHandlerCode }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-custom-field-column\r\n *ngFor=\"let customField of customFields\"\r\n [customField]=\"customField\"\r\n [sorts]=\"sorts\"\r\n />\r\n</vdr-data-table-2>\r\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport { GetShippingMethodListDocument, TypedBaseListComponent } from '@vendure/admin-ui/core';\r\nimport { gql } from 'apollo-angular';\r\n\r\nexport const GET_SHIPPING_METHOD_LIST = gql`\r\n query GetShippingMethodList($options: ShippingMethodListOptions) {\r\n shippingMethods(options: $options) {\r\n items {\r\n ...ShippingMethodListItem\r\n }\r\n totalItems\r\n }\r\n }\r\n fragment ShippingMethodListItem on ShippingMethod {\r\n id\r\n createdAt\r\n updatedAt\r\n code\r\n name\r\n description\r\n fulfillmentHandlerCode\r\n }\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-shipping-method-list',\r\n templateUrl: './shipping-method-list.component.html',\r\n styleUrls: ['./shipping-method-list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ShippingMethodListComponent\r\n extends TypedBaseListComponent<typeof GetShippingMethodListDocument, 'shippingMethods'>\r\n implements OnInit\r\n{\r\n readonly customFields = this.getCustomFieldConfig('ShippingMethod');\r\n readonly filters = this.createFilterCollection()\r\n .addIdFilter()\r\n .addDateFilters()\r\n .addFilter({\r\n name: 'name',\r\n type: { kind: 'text' },\r\n label: _('common.name'),\r\n filterField: 'name',\r\n })\r\n .addFilter({\r\n name: 'code',\r\n type: { kind: 'text' },\r\n label: _('common.code'),\r\n filterField: 'code',\r\n })\r\n .addFilter({\r\n name: 'description',\r\n type: { kind: 'text' },\r\n label: _('common.description'),\r\n filterField: 'description',\r\n })\r\n .addFilter({\r\n name: 'fulfillmentHandler',\r\n type: { kind: 'text' },\r\n label: _('settings.fulfillment-handler'),\r\n filterField: 'fulfillmentHandlerCode',\r\n })\r\n .addCustomFieldFilters(this.customFields)\r\n .connectToRoute(this.route);\r\n\r\n readonly sorts = this.createSortCollection()\r\n .defaultSort('createdAt', 'DESC')\r\n .addSort({ name: 'createdAt' })\r\n .addSort({ name: 'updatedAt' })\r\n .addSort({ name: 'name' })\r\n .addSort({ name: 'code' })\r\n .addSort({ name: 'description' })\r\n .addSort({ name: 'fulfillmentHandlerCode' })\r\n .addCustomFieldSorts(this.customFields)\r\n .connectToRoute(this.route);\r\n\r\n constructor() {\r\n super();\r\n super.configure({\r\n document: GetShippingMethodListDocument,\r\n getItems: data => data.shippingMethods,\r\n setVariables: (skip, take) => ({\r\n options: {\r\n skip,\r\n take,\r\n filter: {\r\n name: {\r\n contains: this.searchTermControl.value,\r\n },\r\n ...this.filters.createFilterInput(),\r\n },\r\n sort: this.sorts.createSortInput(),\r\n },\r\n }),\r\n refreshListOnChanges: [this.filters.valueChanges, this.sorts.valueChanges],\r\n });\r\n }\r\n}\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left></vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"stock-location-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"isNew$ | async; else updateButton\"\r\n (click)=\"create()\"\r\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\r\n *vdrIfPermissions=\"'UpdateStockLocation'\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </ng-template>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n\r\n<form class=\"form\" [formGroup]=\"detailForm\">\r\n <vdr-page-detail-layout>\r\n <vdr-page-detail-sidebar>\r\n <vdr-card *ngIf=\"entity$ | async as entity\">\r\n <vdr-page-entity-info [entity]=\"entity\" />\r\n </vdr-card>\r\n </vdr-page-detail-sidebar>\r\n <vdr-page-block>\r\n <vdr-card>\r\n <div class=\"form-grid\">\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input\r\n id=\"name\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!('UpdateStockLocation' | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n class=\"form-grid-span\"\r\n [label]=\"'common.description' | translate\"\r\n for=\"slug\"\r\n [errors]=\"{ pattern: 'catalog.slug-pattern-error' | translate }\"\r\n >\r\n <vdr-rich-text-editor\r\n formControlName=\"description\"\r\n [readonly]=\"!('UpdateStockLocation' | hasPermission)\"\r\n ></vdr-rich-text-editor>\r\n </vdr-form-field>\r\n </div>\r\n </vdr-card>\r\n <vdr-card\r\n formGroupName=\"customFields\"\r\n *ngIf=\"customFields.length\"\r\n [title]=\"'common.custom-fields' | translate\"\r\n >\r\n <vdr-tabbed-custom-fields\r\n entityName=\"StockLocation\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n ></vdr-tabbed-custom-fields>\r\n </vdr-card>\r\n <vdr-custom-detail-component-host\r\n locationId=\"stock-location-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n </vdr-page-block>\r\n </vdr-page-detail-layout>\r\n</form>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { FormBuilder, Validators } from '@angular/forms';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n CreateStockLocationDocument,\r\n CreateStockLocationInput,\r\n DataService,\r\n getCustomFieldsDefaults,\r\n GetStockLocationDetailDocument,\r\n NotificationService,\r\n StockLocationDetailFragment,\r\n TypedBaseDetailComponent,\r\n UpdateStockLocationDocument,\r\n UpdateStockLocationInput,\r\n} from '@vendure/admin-ui/core';\r\nimport { gql } from 'apollo-angular';\r\nimport { mergeMap, take } from 'rxjs/operators';\r\n\r\nconst STOCK_LOCATION_DETAIL_FRAGMENT = gql`\r\n fragment StockLocationDetail on StockLocation {\r\n id\r\n createdAt\r\n updatedAt\r\n name\r\n description\r\n }\r\n`;\r\n\r\nexport const GET_STOCK_LOCATION_DETAIL = gql`\r\n query GetStockLocationDetail($id: ID!) {\r\n stockLocation(id: $id) {\r\n ...StockLocationDetail\r\n }\r\n }\r\n ${STOCK_LOCATION_DETAIL_FRAGMENT}\r\n`;\r\n\r\nexport const CREATE_STOCK_LOCATION = gql`\r\n mutation CreateStockLocation($input: CreateStockLocationInput!) {\r\n createStockLocation(input: $input) {\r\n ...StockLocationDetail\r\n }\r\n }\r\n ${STOCK_LOCATION_DETAIL_FRAGMENT}\r\n`;\r\n\r\nexport const UPDATE_STOCK_LOCATION = gql`\r\n mutation UpdateStockLocation($input: UpdateStockLocationInput!) {\r\n updateStockLocation(input: $input) {\r\n ...StockLocationDetail\r\n }\r\n }\r\n ${STOCK_LOCATION_DETAIL_FRAGMENT}\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-stock-location-detail',\r\n templateUrl: './stock-location-detail.component.html',\r\n styleUrls: ['./stock-location-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class StockLocationDetailComponent\r\n extends TypedBaseDetailComponent<typeof GetStockLocationDetailDocument, 'stockLocation'>\r\n implements OnInit, OnDestroy\r\n{\r\n customFields = this.getCustomFieldConfig('StockLocation');\r\n detailForm = this.formBuilder.group({\r\n name: ['', Validators.required],\r\n description: [''],\r\n customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),\r\n });\r\n\r\n constructor(\r\n private changeDetector: ChangeDetectorRef,\r\n protected dataService: DataService,\r\n private formBuilder: FormBuilder,\r\n private notificationService: NotificationService,\r\n ) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n this.init();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroy();\r\n }\r\n\r\n create() {\r\n if (!this.detailForm.dirty) {\r\n return;\r\n }\r\n const { name, description, customFields } = this.detailForm.value;\r\n if (!name) {\r\n return;\r\n }\r\n const input = {\r\n name,\r\n description,\r\n customFields,\r\n } satisfies CreateStockLocationInput;\r\n this.dataService.mutate(CreateStockLocationDocument, { input }).subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-create-success'), {\r\n entity: 'StockLocation',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n this.router.navigate(['../', data.createStockLocation.id], { relativeTo: this.route });\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-create-error'), {\r\n entity: 'StockLocation',\r\n });\r\n },\r\n );\r\n }\r\n\r\n save() {\r\n if (!this.detailForm.dirty) {\r\n return;\r\n }\r\n const formValue = this.detailForm.value;\r\n this.entity$\r\n .pipe(\r\n take(1),\r\n mergeMap(taxRate => {\r\n const input = {\r\n id: taxRate.id,\r\n name: formValue.name,\r\n description: formValue.description,\r\n customFields: formValue.customFields,\r\n } satisfies UpdateStockLocationInput;\r\n return this.dataService.mutate(UpdateStockLocationDocument, { input });\r\n }),\r\n )\r\n .subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-update-success'), {\r\n entity: 'StockLocation',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-update-error'), {\r\n entity: 'StockLocation',\r\n });\r\n },\r\n );\r\n }\r\n\r\n /**\r\n * Update the form values when the entity changes.\r\n */\r\n protected setFormValues(entity: StockLocationDetailFragment): void {\r\n this.detailForm.patchValue({\r\n name: entity.name,\r\n description: entity.description,\r\n });\r\n if (this.customFields.length) {\r\n this.setCustomFieldFormValues(this.customFields, this.detailForm.get('customFields'), entity);\r\n }\r\n }\r\n}\r\n","import {\r\n AssignStockLocationsToChannelDocument,\r\n createBulkAssignToChannelAction,\r\n createBulkDeleteAction,\r\n createBulkRemoveFromChannelAction,\r\n DeleteStockLocationsDocument,\r\n DeletionResult,\r\n GetStockLocationListQuery,\r\n ItemOf,\r\n Permission,\r\n RemoveStockLocationsFromChannelDocument,\r\n} from '@vendure/admin-ui/core';\r\nimport { gql } from 'apollo-angular';\r\nimport { map } from 'rxjs/operators';\r\n\r\nconst DELETE_STOCK_LOCATIONS = gql`\r\n mutation DeleteStockLocations($input: [DeleteStockLocationInput!]!) {\r\n deleteStockLocations(input: $input) {\r\n result\r\n message\r\n }\r\n }\r\n`;\r\n\r\nconst ASSIGN_STOCK_LOCATIONS_TO_CHANNEL = gql`\r\n mutation AssignStockLocationsToChannel($input: AssignStockLocationsToChannelInput!) {\r\n assignStockLocationsToChannel(input: $input) {\r\n id\r\n name\r\n }\r\n }\r\n`;\r\n\r\nconst REMOVE_STOCK_LOCATIONS_FROM_CHANNEL = gql`\r\n mutation RemoveStockLocationsFromChannel($input: RemoveStockLocationsFromChannelInput!) {\r\n removeStockLocationsFromChannel(input: $input) {\r\n id\r\n name\r\n }\r\n }\r\n`;\r\n\r\nexport const deleteStockLocationsBulkAction = createBulkDeleteAction<\r\n ItemOf<GetStockLocationListQuery, 'stockLocations'>\r\n>({\r\n location: 'stock-location-list',\r\n requiresPermission: userPermissions =>\r\n userPermissions.includes(Permission.DeleteStockLocation) ||\r\n userPermissions.includes(Permission.DeleteCatalog),\r\n getItemName: item => item.name,\r\n bulkDelete: (dataService, ids) =>\r\n dataService\r\n .mutate(DeleteStockLocationsDocument, {\r\n input: ids.map(id => ({ id })),\r\n })\r\n .pipe(map(res => res.deleteStockLocations)),\r\n shouldRetryItem: response => response.result === DeletionResult.NOT_DELETED,\r\n});\r\n\r\nexport const assignStockLocationsToChannelBulkAction = createBulkAssignToChannelAction<\r\n ItemOf<GetStockLocationListQuery, 'stockLocations'>\r\n>({\r\n location: 'stock-location-list',\r\n requiresPermission: userPermissions =>\r\n userPermissions.includes(Permission.UpdateCatalog) ||\r\n userPermissions.includes(Permission.UpdateStockLocation),\r\n getItemName: item => item.name,\r\n bulkAssignToChannel: (dataService, stockLocationIds, channelId) =>\r\n dataService\r\n .mutate(AssignStockLocationsToChannelDocument, {\r\n input: {\r\n channelId,\r\n stockLocationIds,\r\n },\r\n })\r\n .pipe(map(res => res.assignStockLocationsToChannel)),\r\n});\r\n\r\nexport const removeStockLocationsFromChannelBulkAction = createBulkRemoveFromChannelAction<\r\n ItemOf<GetStockLocationListQuery, 'stockLocations'>\r\n>({\r\n location: 'stock-location-list',\r\n requiresPermission: userPermissions =>\r\n userPermissions.includes(Permission.DeleteCatalog) ||\r\n userPermissions.includes(Permission.DeleteStockLocation),\r\n getItemName: item => item.name,\r\n bulkRemoveFromChannel: (dataService, stockLocationIds, channelId) =>\r\n dataService\r\n .mutate(RemoveStockLocationsFromChannelDocument, {\r\n input: {\r\n channelId,\r\n stockLocationIds,\r\n },\r\n })\r\n .pipe(map(res => res.removeStockLocationsFromChannel)),\r\n});\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left> </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"stock-location-list\"></vdr-action-bar-items>\r\n <a\r\n class=\"button primary\"\r\n *vdrIfPermissions=\"['CreateStockLocation']\"\r\n [routerLink]=\"['./', 'create']\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.create-new-stock-location' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n<vdr-data-table-2\r\n class=\"mt-2\"\r\n id=\"stock-location-list\"\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n [filters]=\"filters\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n>\r\n <vdr-bulk-action-menu\r\n locationId=\"stock-location-list\"\r\n [hostComponent]=\"this\"\r\n [selectionManager]=\"selectionManager\"\r\n />\r\n <vdr-dt2-search\r\n [searchTermControl]=\"searchTermControl\"\r\n [searchTermPlaceholder]=\"'catalog.filter-by-name' | translate\"\r\n />\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\" [sort]=\"sorts.get('id')\">\r\n <ng-template let-stockLocation=\"item\">\r\n {{ stockLocation.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.created-at' | translate\" id=\"created-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('createdAt')\"\r\n >\r\n <ng-template let-stockLocation=\"item\">\r\n {{ stockLocation.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.updated-at' | translate\" id=\"updated-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('updatedAt')\"\r\n >\r\n <ng-template let-stockLocation=\"item\">\r\n {{ stockLocation.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.name' | translate\" id=\"name\" [optional]=\"false\" [sort]=\"sorts.get('name')\">\r\n <ng-template let-stockLocation=\"item\">\r\n <a class=\"button-ghost\" [routerLink]=\"['./', stockLocation.id]\"\r\n ><span>{{ stockLocation.name }}</span\r\n ><clr-icon shape=\"arrow right\"\r\n /></a>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.description' | translate\" id=\"description\" [sort]=\"sorts.get('description')\">\r\n <ng-template let-stockLocation=\"item\">\r\n <div class=\"description\" [innerHTML]=\"stockLocation.description\"></div>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-custom-field-column\r\n *ngFor=\"let field of customFields\"\r\n [customField]=\"field\"\r\n [sorts]=\"sorts\" />\r\n</vdr-data-table-2>\r\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport { GetStockLocationListDocument, TypedBaseListComponent } from '@vendure/admin-ui/core';\r\nimport { gql } from 'apollo-angular';\r\n\r\nexport const GET_STOCK_LOCATION_LIST = gql`\r\n query GetStockLocationList($options: StockLocationListOptions) {\r\n stockLocations(options: $options) {\r\n items {\r\n ...StockLocationListItem\r\n }\r\n totalItems\r\n }\r\n }\r\n fragment StockLocationListItem on StockLocation {\r\n id\r\n createdAt\r\n updatedAt\r\n name\r\n description\r\n }\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-stock-location-list',\r\n templateUrl: './stock-location-list.component.html',\r\n styleUrls: ['./stock-location-list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class StockLocationListComponent\r\n extends TypedBaseListComponent<typeof GetStockLocationListDocument, 'stockLocations'>\r\n implements OnInit\r\n{\r\n readonly customFields = this.getCustomFieldConfig('StockLocation');\r\n readonly filters = this.createFilterCollection()\r\n .addIdFilter()\r\n .addDateFilters()\r\n .addFilters([\r\n {\r\n name: 'enabled',\r\n type: { kind: 'text' },\r\n label: _('common.enabled'),\r\n filterField: 'name',\r\n },\r\n {\r\n name: 'sku',\r\n type: { kind: 'text' },\r\n label: _('catalog.sku'),\r\n filterField: 'description',\r\n },\r\n ])\r\n .addCustomFieldFilters(this.customFields)\r\n .connectToRoute(this.route);\r\n\r\n readonly sorts = this.createSortCollection()\r\n .addSorts([\r\n { name: 'id' },\r\n { name: 'createdAt' },\r\n { name: 'updatedAt' },\r\n { name: 'name' },\r\n { name: 'description' },\r\n ])\r\n .addCustomFieldSorts(this.customFields)\r\n .connectToRoute(this.route);\r\n\r\n constructor() {\r\n super();\r\n this.configure({\r\n document: GetStockLocationListDocument,\r\n getItems: data => data.stockLocations,\r\n setVariables: (skip, take) => ({\r\n options: {\r\n skip,\r\n take,\r\n filter: {\r\n name: {\r\n contains: this.searchTermControl.value,\r\n },\r\n ...this.filters.createFilterInput(),\r\n },\r\n sort: this.sorts.createSortInput(),\r\n },\r\n }),\r\n refreshListOnChanges: [this.sorts.valueChanges, this.filters.valueChanges],\r\n });\r\n }\r\n}\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left> </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"tax-category-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"isNew$ | async; else updateButton\"\r\n (click)=\"create()\"\r\n [disabled]=\"!saveButtonEnabled()\"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n [disabled]=\"!saveButtonEnabled()\"\r\n *vdrIfPermissions=\"updatePermission\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </ng-template>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n<form class=\"form\" [formGroup]=\"detailForm\">\r\n <vdr-page-detail-layout>\r\n <vdr-page-detail-sidebar>\r\n <vdr-card *ngIf=\"entity$ | async as entity\">\r\n <vdr-page-entity-info [entity]=\"entity\" />\r\n </vdr-card>\r\n </vdr-page-detail-sidebar>\r\n <vdr-page-block>\r\n <vdr-card>\r\n <div class=\"form-grid\">\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input\r\n id=\"name\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'common.default-tax-category' | translate\" for=\"isDefault\">\r\n <clr-toggle-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n clrToggle\r\n id=\"isDefault\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n formControlName=\"isDefault\"\r\n />\r\n </clr-toggle-wrapper>\r\n </vdr-form-field>\r\n </div>\r\n </vdr-card>\r\n <vdr-card\r\n formGroupName=\"customFields\"\r\n *ngIf=\"customFields.length\"\r\n [title]=\"'common.custom-fields' | translate\"\r\n >\r\n <vdr-tabbed-custom-fields\r\n entityName=\"TaxCategory\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n ></vdr-tabbed-custom-fields>\r\n </vdr-card>\r\n <vdr-custom-detail-component-host\r\n locationId=\"tax-category-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n </vdr-page-block>\r\n </vdr-page-detail-layout>\r\n</form>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { FormBuilder, Validators } from '@angular/forms';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n CreateTaxCategoryInput,\r\n DataService,\r\n getCustomFieldsDefaults,\r\n GetTaxCategoryDetailDocument,\r\n LanguageCode,\r\n NotificationService,\r\n Permission,\r\n TAX_CATEGORY_FRAGMENT,\r\n TaxCategoryFragment,\r\n TypedBaseDetailComponent,\r\n UpdateTaxCategoryInput,\r\n} from '@vendure/admin-ui/core';\r\nimport { gql } from 'apollo-angular';\r\nimport { mergeMap, take } from 'rxjs/operators';\r\n\r\nexport const GET_TAX_CATEGORY_DETAIL = gql`\r\n query GetTaxCategoryDetail($id: ID!) {\r\n taxCategory(id: $id) {\r\n ...TaxCategory\r\n }\r\n }\r\n ${TAX_CATEGORY_FRAGMENT}\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-tax-detail',\r\n templateUrl: './tax-category-detail.component.html',\r\n styleUrls: ['./tax-category-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class TaxCategoryDetailComponent\r\n extends TypedBaseDetailComponent<typeof GetTaxCategoryDetailDocument, 'taxCategory'>\r\n implements OnInit, OnDestroy\r\n{\r\n customFields = this.getCustomFieldConfig('TaxCategory');\r\n detailForm = this.formBuilder.group({\r\n name: ['', Validators.required],\r\n isDefault: false,\r\n customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),\r\n });\r\n readonly updatePermission = [Permission.UpdateSettings, Permission.UpdateTaxCategory];\r\n\r\n constructor(\r\n private changeDetector: ChangeDetectorRef,\r\n protected dataService: DataService,\r\n private formBuilder: FormBuilder,\r\n private notificationService: NotificationService,\r\n ) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n this.init();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroy();\r\n }\r\n\r\n saveButtonEnabled(): boolean {\r\n return this.detailForm.dirty && this.detailForm.valid;\r\n }\r\n\r\n create() {\r\n if (!this.detailForm.dirty) {\r\n return;\r\n }\r\n const formValue = this.detailForm.value;\r\n const input = {\r\n name: formValue.name,\r\n isDefault: formValue.isDefault,\r\n customFields: formValue.customFields,\r\n } as CreateTaxCategoryInput;\r\n this.dataService.settings.createTaxCategory(input).subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-create-success'), {\r\n entity: 'TaxCategory',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n this.router.navigate(['../', data.createTaxCategory.id], { relativeTo: this.route });\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-create-error'), {\r\n entity: 'TaxCategory',\r\n });\r\n },\r\n );\r\n }\r\n\r\n save() {\r\n if (!this.detailForm.dirty) {\r\n return;\r\n }\r\n const formValue = this.detailForm.value;\r\n this.entity$\r\n .pipe(\r\n take(1),\r\n mergeMap(taxCategory => {\r\n const input = {\r\n id: taxCategory.id,\r\n name: formValue.name,\r\n isDefault: formValue.isDefault,\r\n customFields: formValue.customFields,\r\n } as UpdateTaxCategoryInput;\r\n return this.dataService.settings.updateTaxCategory(input);\r\n }),\r\n )\r\n .subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-update-success'), {\r\n entity: 'TaxCategory',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-update-error'), {\r\n entity: 'TaxCategory',\r\n });\r\n },\r\n );\r\n }\r\n\r\n /**\r\n * Update the form values when the entity changes.\r\n */\r\n protected setFormValues(entity: TaxCategoryFragment, languageCode: LanguageCode): void {\r\n this.detailForm.patchValue({\r\n name: entity.name,\r\n isDefault: entity.isDefault,\r\n });\r\n if (this.customFields.length) {\r\n this.setCustomFieldFormValues(this.customFields, this.detailForm.get('customFields'), entity);\r\n }\r\n }\r\n}\r\n","import { createBulkDeleteAction, GetTaxCategoryListQuery, ItemOf, Permission } from '@vendure/admin-ui/core';\r\nimport { map } from 'rxjs/operators';\r\n\r\nexport const deleteTaxCategoriesBulkAction = createBulkDeleteAction<\r\n ItemOf<GetTaxCategoryListQuery, 'taxCategories'>\r\n>({\r\n location: 'tax-category-list',\r\n requiresPermission: userPermissions =>\r\n userPermissions.includes(Permission.DeleteSettings) ||\r\n userPermissions.includes(Permission.DeleteTaxCategory),\r\n getItemName: item => item.name,\r\n bulkDelete: (dataService, ids) =>\r\n dataService.settings.deleteTaxCategories(ids).pipe(map(res => res.deleteTaxCategories)),\r\n});\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left> </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"tax-category-list\"></vdr-action-bar-items>\r\n <a\r\n class=\"btn btn-primary\"\r\n *vdrIfPermissions=\"['CreateSettings', 'CreateTaxCategory']\"\r\n [routerLink]=\"['./', 'create']\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'settings.create-new-tax-category' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n<vdr-data-table-2\r\n id=\"tax-category-list\"\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n [filters]=\"filters\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n>\r\n <vdr-bulk-action-menu\r\n locationId=\"tax-category-list\"\r\n [hostComponent]=\"this\"\r\n [selectionManager]=\"selectionManager\"\r\n />\r\n <vdr-dt2-search\r\n [searchTermControl]=\"searchTermControl\"\r\n [searchTermPlaceholder]=\"'catalog.filter-by-name' | translate\"\r\n />\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\r\n <ng-template let-taxCategory=\"item\">\r\n {{ taxCategory.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.created-at' | translate\" id=\"created-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('createdAt')\"\r\n >\r\n <ng-template let-taxCategory=\"item\">\r\n {{ taxCategory.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.updated-at' | translate\" id=\"updated-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('updatedAt')\"\r\n >\r\n <ng-template let-taxCategory=\"item\">\r\n {{ taxCategory.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.name' | translate\" id=\"name\" [optional]=\"false\" [sort]=\"sorts.get('name')\">\r\n <ng-template let-taxCategory=\"item\">\r\n <a class=\"button-ghost\" [routerLink]=\"['./', taxCategory.id]\"\r\n ><span>{{ taxCategory.name }}</span>\r\n <clr-icon shape=\"arrow right\"></clr-icon>\r\n </a>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.default-tax-category' | translate\" id=\"default-tax-category\">\r\n <ng-template let-taxCategory=\"item\">\r\n <vdr-chip *ngIf=\"taxCategory.isDefault\">{{ 'common.default-tax-category' | translate }}</vdr-chip>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-custom-field-column *ngFor=\"let customField of customFields\" [customField]=\"customField\" [sorts]=\"sorts\" />\r\n</vdr-data-table-2>\r\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n GetTaxCategoryListDocument,\r\n TAX_CATEGORY_FRAGMENT,\r\n TypedBaseListComponent,\r\n} from '@vendure/admin-ui/core';\r\nimport { gql } from 'apollo-angular';\r\n\r\nexport const GET_TAX_CATEGORY_LIST = gql`\r\n query GetTaxCategoryList($options: TaxCategoryListOptions) {\r\n taxCategories(options: $options) {\r\n items {\r\n ...TaxCategory\r\n }\r\n totalItems\r\n }\r\n }\r\n ${TAX_CATEGORY_FRAGMENT}\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-tax-list',\r\n templateUrl: './tax-category-list.component.html',\r\n styleUrls: ['./tax-category-list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class TaxCategoryListComponent extends TypedBaseListComponent<\r\n typeof GetTaxCategoryListDocument,\r\n 'taxCategories'\r\n> {\r\n readonly customFields = this.serverConfigService.getCustomFieldsFor('TaxCategory');\r\n readonly filters = this.createFilterCollection()\r\n .addIdFilter()\r\n .addFilter({\r\n name: 'name',\r\n type: { kind: 'text' },\r\n label: _('common.name'),\r\n filterField: 'name',\r\n })\r\n .addCustomFieldFilters(this.customFields)\r\n .connectToRoute(this.route);\r\n\r\n readonly sorts = this.createSortCollection()\r\n .defaultSort('createdAt', 'DESC')\r\n .addSort({ name: 'createdAt' })\r\n .addSort({ name: 'updatedAt' })\r\n .addSort({ name: 'name' })\r\n .addCustomFieldSorts(this.customFields)\r\n .connectToRoute(this.route);\r\n\r\n constructor() {\r\n super();\r\n super.configure({\r\n document: GetTaxCategoryListDocument,\r\n getItems: data => data.taxCategories,\r\n setVariables: (skip, take) => ({\r\n options: {\r\n skip,\r\n take,\r\n filter: {\r\n name: {\r\n contains: this.searchTermControl.value,\r\n },\r\n ...this.filters.createFilterInput(),\r\n },\r\n sort: this.sorts.createSortInput(),\r\n },\r\n }),\r\n refreshListOnChanges: [this.filters.valueChanges, this.sorts.valueChanges],\r\n });\r\n }\r\n}\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left></vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"tax-rate-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"isNew$ | async; else updateButton\"\r\n (click)=\"create()\"\r\n [disabled]=\"!saveButtonEnabled()\"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n [disabled]=\"!saveButtonEnabled()\"\r\n *vdrIfPermissions=\"updatePermission\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </ng-template>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n\r\n<form class=\"form\" [formGroup]=\"detailForm\">\r\n <vdr-page-detail-layout>\r\n <vdr-page-detail-sidebar>\r\n <vdr-card>\r\n <vdr-form-field [label]=\"'common.enabled' | translate\" for=\"enabled\">\r\n <clr-toggle-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n clrToggle\r\n id=\"enabled\"\r\n formControlName=\"enabled\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </clr-toggle-wrapper>\r\n </vdr-form-field>\r\n </vdr-card>\r\n <vdr-card *ngIf=\"entity$ | async as entity\">\r\n <vdr-page-entity-info [entity]=\"entity\" />\r\n </vdr-card>\r\n </vdr-page-detail-sidebar>\r\n <vdr-page-block>\r\n <vdr-card>\r\n <div class=\"form-grid\">\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input\r\n id=\"name\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'settings.rate' | translate\" for=\"value\">\r\n <vdr-affixed-input suffix=\"%\">\r\n <input\r\n id=\"value\"\r\n type=\"number\"\r\n step=\"0.1\"\r\n formControlName=\"value\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </vdr-affixed-input>\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'settings.tax-category' | translate\" for=\"taxCategoryId\">\r\n <select\r\n name=\"taxCategoryId\"\r\n formControlName=\"taxCategoryId\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n >\r\n <option\r\n *ngFor=\"let taxCategory of taxCategories$ | async\"\r\n [value]=\"taxCategory.id\"\r\n >\r\n {{ taxCategory.name }}\r\n </option>\r\n </select>\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'settings.zone' | translate\" for=\"zoneId\">\r\n <vdr-zone-selector\r\n name=\"zoneId\"\r\n formControlName=\"zoneId\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n >\r\n </vdr-zone-selector>\r\n </vdr-form-field>\r\n </div>\r\n </vdr-card>\r\n <vdr-card\r\n formGroupName=\"customFields\"\r\n *ngIf=\"customFields.length\"\r\n [title]=\"'common.custom-fields' | translate\"\r\n >\r\n <vdr-tabbed-custom-fields\r\n entityName=\"TaxRate\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n ></vdr-tabbed-custom-fields>\r\n </vdr-card>\r\n <vdr-custom-detail-component-host\r\n locationId=\"tax-rate-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n </vdr-page-block>\r\n </vdr-page-detail-layout>\r\n</form>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { FormBuilder, Validators } from '@angular/forms';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n CreateTaxRateInput,\r\n CustomerGroup,\r\n DataService,\r\n getCustomFieldsDefaults,\r\n GetTaxRateDetailDocument,\r\n LanguageCode,\r\n NotificationService,\r\n Permission,\r\n TAX_RATE_FRAGMENT,\r\n TaxCategoryFragment,\r\n TaxRateFragment,\r\n TypedBaseDetailComponent,\r\n UpdateTaxRateInput,\r\n} from '@vendure/admin-ui/core';\r\nimport { gql } from 'apollo-angular';\r\nimport { Observable } from 'rxjs';\r\nimport { mergeMap, take } from 'rxjs/operators';\r\n\r\nexport const GET_TAX_RATE_DETAIL = gql`\r\n query GetTaxRateDetail($id: ID!) {\r\n taxRate(id: $id) {\r\n ...TaxRate\r\n }\r\n }\r\n ${TAX_RATE_FRAGMENT}\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-tax-rate-detail',\r\n templateUrl: './tax-rate-detail.component.html',\r\n styleUrls: ['./tax-rate-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class TaxRateDetailComponent\r\n extends TypedBaseDetailComponent<typeof GetTaxRateDetailDocument, 'taxRate'>\r\n implements OnInit, OnDestroy\r\n{\r\n customFields = this.getCustomFieldConfig('TaxRate');\r\n detailForm = this.formBuilder.group({\r\n name: ['', Validators.required],\r\n enabled: [true],\r\n value: [0, Validators.required],\r\n taxCategoryId: ['', Validators.required],\r\n zoneId: ['', Validators.required],\r\n customerGroupId: [''],\r\n customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),\r\n });\r\n taxCategories$: Observable<TaxCategoryFragment[]>;\r\n groups$: Observable<CustomerGroup[]>;\r\n readonly updatePermission = [Permission.UpdateSettings, Permission.UpdateTaxRate];\r\n\r\n constructor(\r\n private changeDetector: ChangeDetectorRef,\r\n protected dataService: DataService,\r\n private formBuilder: FormBuilder,\r\n private notificationService: NotificationService,\r\n ) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n this.init();\r\n this.taxCategories$ = this.dataService.settings\r\n .getTaxCategories({ take: 100 })\r\n .mapSingle(data => data.taxCategories.items);\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroy();\r\n }\r\n\r\n saveButtonEnabled(): boolean {\r\n return this.detailForm.dirty && this.detailForm.valid;\r\n }\r\n\r\n create() {\r\n if (!this.detailForm.dirty) {\r\n return;\r\n }\r\n const { name, enabled, value, taxCategoryId, zoneId, customerGroupId, customFields } =\r\n this.detailForm.value;\r\n if (!name || enabled == null || value == null || !taxCategoryId || !zoneId) {\r\n return;\r\n }\r\n const formValue = this.detailForm.value;\r\n const input = {\r\n name,\r\n enabled,\r\n value,\r\n categoryId: taxCategoryId,\r\n zoneId,\r\n customerGroupId: formValue.customerGroupId,\r\n customFields: formValue.customFields,\r\n } satisfies CreateTaxRateInput;\r\n this.dataService.settings.createTaxRate(input).subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-create-success'), {\r\n entity: 'TaxRate',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n this.router.navigate(['../', data.createTaxRate.id], { relativeTo: this.route });\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-create-error'), {\r\n entity: 'TaxRate',\r\n });\r\n },\r\n );\r\n }\r\n\r\n save() {\r\n if (!this.detailForm.dirty) {\r\n return;\r\n }\r\n const formValue = this.detailForm.value;\r\n this.entity$\r\n .pipe(\r\n take(1),\r\n mergeMap(taxRate => {\r\n const input = {\r\n id: taxRate.id,\r\n name: formValue.name,\r\n enabled: formValue.enabled,\r\n value: formValue.value,\r\n categoryId: formValue.taxCategoryId,\r\n zoneId: formValue.zoneId,\r\n customerGroupId: formValue.customerGroupId,\r\n customFields: formValue.customFields,\r\n } satisfies UpdateTaxRateInput;\r\n return this.dataService.settings.updateTaxRate(input);\r\n }),\r\n )\r\n .subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-update-success'), {\r\n entity: 'TaxRate',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-update-error'), {\r\n entity: 'TaxRate',\r\n });\r\n },\r\n );\r\n }\r\n\r\n /**\r\n * Update the form values when the entity changes.\r\n */\r\n protected setFormValues(entity: TaxRateFragment, languageCode: LanguageCode): void {\r\n this.detailForm.patchValue({\r\n name: entity.name,\r\n enabled: entity.enabled,\r\n value: entity.value,\r\n taxCategoryId: entity.category ? entity.category.id : '',\r\n zoneId: entity.zone ? entity.zone.id : '',\r\n customerGroupId: entity.customerGroup ? entity.customerGroup.id : '',\r\n });\r\n if (this.customFields.length) {\r\n this.setCustomFieldFormValues(this.customFields, this.detailForm.get('customFields'), entity);\r\n }\r\n }\r\n}\r\n","import { createBulkDeleteAction, GetTaxRateListQuery, ItemOf, Permission } from '@vendure/admin-ui/core';\r\nimport { map } from 'rxjs/operators';\r\n\r\nexport const deleteTaxRatesBulkAction = createBulkDeleteAction<ItemOf<GetTaxRateListQuery, 'taxRates'>>({\r\n location: 'tax-rate-list',\r\n requiresPermission: userPermissions =>\r\n userPermissions.includes(Permission.DeleteSettings) ||\r\n userPermissions.includes(Permission.DeleteTaxRate),\r\n getItemName: item => item.name,\r\n bulkDelete: (dataService, ids) =>\r\n dataService.settings.deleteTaxRates(ids).pipe(map(res => res.deleteTaxRates)),\r\n});\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left> </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"tax-rate-list\"></vdr-action-bar-items>\r\n <a\r\n class=\"btn btn-primary\"\r\n *vdrIfPermissions=\"['CreateSettings', 'CreateTaxRate']\"\r\n [routerLink]=\"['./', 'create']\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'settings.create-new-tax-rate' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n<vdr-data-table-2\r\n id=\"tax-rate-list\"\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n [filters]=\"filters\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n>\r\n <vdr-bulk-action-menu\r\n locationId=\"tax-rate-list\"\r\n [hostComponent]=\"this\"\r\n [selectionManager]=\"selectionManager\"\r\n />\r\n <vdr-dt2-search\r\n [searchTermControl]=\"searchTermControl\"\r\n [searchTermPlaceholder]=\"'catalog.filter-by-name' | translate\"\r\n />\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\r\n <ng-template let-taxRate=\"item\">\r\n {{ taxRate.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.created-at' | translate\" id=\"created-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('createdAt')\"\r\n >\r\n <ng-template let-taxRate=\"item\">\r\n {{ taxRate.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.updated-at' | translate\" id=\"updated-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('updatedAt')\"\r\n >\r\n <ng-template let-taxRate=\"item\">\r\n {{ taxRate.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.name' | translate\" id=\"name\" [optional]=\"false\" [sort]=\"sorts.get('name')\">\r\n <ng-template let-taxRate=\"item\">\r\n <a class=\"button-ghost\" [routerLink]=\"['./', taxRate.id]\"\r\n ><span>{{ taxRate.name }}</span>\r\n <clr-icon shape=\"arrow right\"></clr-icon>\r\n </a>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'settings.tax-category' | translate\" id=\"tax-category\">\r\n <ng-template let-taxRate=\"item\">\r\n {{ taxRate.category.name }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'settings.zone' | translate\" id=\"zone\">\r\n <ng-template let-taxRate=\"item\">\r\n {{ taxRate.zone.name }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'customer.customer-group' | translate\" id=\"customer-group\" [hiddenByDefault]=\"true\">\r\n <ng-template let-taxRate=\"item\">\r\n {{ taxRate.customerGroup?.name }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'settings.tax-rate' | translate\" id=\"tax-rate\" [sort]=\"sorts.get('value')\">\r\n <ng-template let-taxRate=\"item\"> {{ taxRate.value }}% </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.enabled' | translate\" id=\"enabled\">\r\n <ng-template let-taxRate=\"item\">\r\n <vdr-chip *ngIf=\"taxRate.enabled\" colorType=\"success\">{{\r\n 'common.enabled' | translate\r\n }}</vdr-chip>\r\n <vdr-chip *ngIf=\"!taxRate.enabled\" colorType=\"warning\">{{\r\n 'common.disabled' | translate\r\n }}</vdr-chip>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-custom-field-column *ngFor=\"let customField of customFields\" [customField]=\"customField\" [sorts]=\"sorts\" />\r\n</vdr-data-table-2>\r\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport { GetTaxRateListDocument, TAX_RATE_FRAGMENT, TypedBaseListComponent } from '@vendure/admin-ui/core';\r\nimport { gql } from 'apollo-angular';\r\n\r\nexport const GET_TAX_RATE_LIST = gql`\r\n query GetTaxRateList($options: TaxRateListOptions) {\r\n taxRates(options: $options) {\r\n items {\r\n ...TaxRate\r\n }\r\n totalItems\r\n }\r\n }\r\n ${TAX_RATE_FRAGMENT}\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-tax-rate-list',\r\n templateUrl: './tax-rate-list.component.html',\r\n styleUrls: ['./tax-rate-list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class TaxRateListComponent extends TypedBaseListComponent<typeof GetTaxRateListDocument, 'taxRates'> {\r\n readonly customFields = this.getCustomFieldConfig('TaxRate');\r\n readonly filters = this.createFilterCollection()\r\n .addIdFilter()\r\n .addDateFilters()\r\n .addFilter({\r\n name: 'name',\r\n type: { kind: 'text' },\r\n label: _('common.name'),\r\n filterField: 'name',\r\n })\r\n .addFilter({\r\n name: 'enabled',\r\n type: { kind: 'boolean' },\r\n label: _('common.enabled'),\r\n filterField: 'enabled',\r\n })\r\n .addFilter({\r\n name: 'value',\r\n type: { kind: 'number' },\r\n label: _('common.value'),\r\n filterField: 'value',\r\n })\r\n .addCustomFieldFilters(this.customFields)\r\n .connectToRoute(this.route);\r\n\r\n readonly sorts = this.createSortCollection()\r\n .defaultSort('createdAt', 'DESC')\r\n .addSort({ name: 'createdAt' })\r\n .addSort({ name: 'updatedAt' })\r\n .addSort({ name: 'name' })\r\n .addSort({ name: 'value' })\r\n .addCustomFieldSorts(this.customFields)\r\n .connectToRoute(this.route);\r\n\r\n constructor() {\r\n super();\r\n super.configure({\r\n document: GetTaxRateListDocument,\r\n getItems: data => data.taxRates,\r\n setVariables: (skip, take) => ({\r\n options: {\r\n skip,\r\n take,\r\n filter: {\r\n name: {\r\n contains: this.searchTermControl.value,\r\n },\r\n ...this.filters.createFilterInput(),\r\n },\r\n sort: this.sorts.createSortInput(),\r\n },\r\n }),\r\n refreshListOnChanges: [this.filters.valueChanges, this.sorts.valueChanges],\r\n });\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport {\r\n DataService,\r\n GetActiveChannelQuery,\r\n ShippingMethodQuote,\r\n TestEligibleShippingMethodsInput,\r\n} from '@vendure/admin-ui/core';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { switchMap } from 'rxjs/operators';\r\nimport { TestAddress } from '../test-address-form/test-address-form.component';\r\nimport { TestOrderLine } from '../test-order-builder/test-order-builder.component';\r\n\r\n@Component({\r\n selector: 'vdr-test-shipping-methods',\r\n templateUrl: './test-shipping-methods.component.html',\r\n styleUrls: ['./test-shipping-methods.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class TestShippingMethodsComponent implements OnInit {\r\n activeChannel$: Observable<GetActiveChannelQuery['activeChannel']>;\r\n testAddress: TestAddress;\r\n testOrderLines: TestOrderLine[];\r\n testDataUpdated = false;\r\n testResult$: Observable<ShippingMethodQuote[] | undefined>;\r\n private fetchTestResult$ = new Subject<[TestAddress, TestOrderLine[]]>();\r\n\r\n constructor(private dataService: DataService) {}\r\n\r\n ngOnInit() {\r\n this.activeChannel$ = this.dataService.settings\r\n .getActiveChannel()\r\n .mapStream(data => data.activeChannel);\r\n this.testResult$ = this.fetchTestResult$.pipe(\r\n switchMap(([address, lines]) => {\r\n const input: TestEligibleShippingMethodsInput = {\r\n shippingAddress: { ...address, streetLine1: 'test' },\r\n lines: lines.map(l => ({ productVariantId: l.id, quantity: l.quantity })),\r\n };\r\n return this.dataService.shippingMethod\r\n .testEligibleShippingMethods(input)\r\n .mapSingle(result => result.testEligibleShippingMethods);\r\n }),\r\n );\r\n }\r\n\r\n setTestOrderLines(event: TestOrderLine[]) {\r\n this.testOrderLines = event;\r\n this.testDataUpdated = true;\r\n }\r\n\r\n setTestAddress(event: TestAddress) {\r\n this.testAddress = event;\r\n this.testDataUpdated = true;\r\n }\r\n\r\n allTestDataPresent(): boolean {\r\n return !!(this.testAddress && this.testOrderLines && this.testOrderLines.length);\r\n }\r\n\r\n runTest() {\r\n this.fetchTestResult$.next([this.testAddress, this.testOrderLines]);\r\n this.testDataUpdated = false;\r\n }\r\n}\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left> </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"zone-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"isNew$ | async; else updateButton\"\r\n (click)=\"create()\"\r\n [disabled]=\"!saveButtonEnabled()\"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n [disabled]=\"!saveButtonEnabled()\"\r\n *vdrIfPermissions=\"updatePermission\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </ng-template>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n<form class=\"form\" [formGroup]=\"detailForm\">\r\n <vdr-page-detail-layout>\r\n <vdr-page-detail-sidebar>\r\n <vdr-card *ngIf=\"entity$ | async as entity\">\r\n <vdr-page-entity-info [entity]=\"entity\" />\r\n </vdr-card>\r\n </vdr-page-detail-sidebar>\r\n <vdr-page-block>\r\n <vdr-card>\r\n <div class=\"form-grid\">\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input\r\n id=\"name\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n </div>\r\n </vdr-card>\r\n <vdr-card\r\n formGroupName=\"customFields\"\r\n *ngIf=\"customFields.length\"\r\n [title]=\"'common.custom-fields' | translate\"\r\n >\r\n <vdr-tabbed-custom-fields\r\n entityName=\"Zone\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n ></vdr-tabbed-custom-fields>\r\n </vdr-card>\r\n <vdr-custom-detail-component-host\r\n locationId=\"zone-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n </vdr-page-block>\r\n </vdr-page-detail-layout>\r\n</form>\r\n","<vdr-page-block>\r\n <div class=\"test-wrapper\">\r\n <div class=\"\">\r\n <vdr-test-order-builder (orderLinesChange)=\"setTestOrderLines($event)\"></vdr-test-order-builder>\r\n </div>\r\n <div class=\"\">\r\n <vdr-test-address-form (addressChange)=\"setTestAddress($event)\"></vdr-test-address-form>\r\n <vdr-shipping-eligibility-test-result\r\n class=\"mt-1\"\r\n [currencyCode]=\"(activeChannel$ | async)?.currencyCode\"\r\n [okToRun]=\"allTestDataPresent()\"\r\n [testDataUpdated]=\"testDataUpdated\"\r\n [testResult]=\"testResult$ | async\"\r\n (runTest)=\"runTest()\"\r\n ></vdr-shipping-eligibility-test-result>\r\n </div>\r\n </div>\r\n</vdr-page-block>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { FormBuilder, Validators } from '@angular/forms';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n CreateZoneInput,\r\n DataService,\r\n getCustomFieldsDefaults,\r\n GetZoneDetailDocument,\r\n GetZoneDetailQuery,\r\n LanguageCode,\r\n NotificationService,\r\n Permission,\r\n TypedBaseDetailComponent,\r\n UpdateTaxCategoryInput,\r\n} from '@vendure/admin-ui/core';\r\nimport { gql } from 'apollo-angular';\r\nimport { mergeMap, take } from 'rxjs/operators';\r\n\r\nexport const GET_ZONE_DETAIL = gql`\r\n query GetZoneDetail($id: ID!) {\r\n zone(id: $id) {\r\n ...ZoneDetail\r\n }\r\n }\r\n fragment ZoneDetail on Zone {\r\n id\r\n createdAt\r\n updatedAt\r\n name\r\n }\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-zone-detail',\r\n templateUrl: './zone-detail.component.html',\r\n styleUrls: ['./zone-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ZoneDetailComponent\r\n extends TypedBaseDetailComponent<typeof GetZoneDetailDocument, 'zone'>\r\n implements OnInit, OnDestroy\r\n{\r\n customFields = this.getCustomFieldConfig('Zone');\r\n detailForm = this.formBuilder.group({\r\n name: ['', Validators.required],\r\n customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),\r\n });\r\n readonly updatePermission = [Permission.UpdateSettings, Permission.UpdateZone];\r\n\r\n constructor(\r\n private changeDetector: ChangeDetectorRef,\r\n protected dataService: DataService,\r\n private formBuilder: FormBuilder,\r\n private notificationService: NotificationService,\r\n ) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n this.init();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroy();\r\n }\r\n\r\n saveButtonEnabled(): boolean {\r\n return this.detailForm.dirty && this.detailForm.valid;\r\n }\r\n\r\n create() {\r\n if (!this.detailForm.dirty) {\r\n return;\r\n }\r\n const { name, customFields } = this.detailForm.value;\r\n if (!name) {\r\n return;\r\n }\r\n const input = {\r\n name,\r\n customFields,\r\n } satisfies CreateZoneInput;\r\n this.dataService.settings.createZone(input).subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-create-success'), {\r\n entity: 'Zone',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n this.router.navigate(['../', data.createZone.id], { relativeTo: this.route });\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-create-error'), {\r\n entity: 'Zone',\r\n });\r\n },\r\n );\r\n }\r\n\r\n save() {\r\n if (!this.detailForm.dirty) {\r\n return;\r\n }\r\n const formValue = this.detailForm.value;\r\n this.entity$\r\n .pipe(\r\n take(1),\r\n mergeMap(zone => {\r\n const input = {\r\n id: zone.id,\r\n name: formValue.name,\r\n customFields: formValue.customFields,\r\n } satisfies UpdateTaxCategoryInput;\r\n return this.dataService.settings.updateZone(input);\r\n }),\r\n )\r\n .subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-update-success'), {\r\n entity: 'Zone',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-update-error'), {\r\n entity: 'Zone',\r\n });\r\n },\r\n );\r\n }\r\n\r\n /**\r\n * Update the form values when the entity changes.\r\n */\r\n protected setFormValues(\r\n entity: NonNullable<GetZoneDetailQuery['zone']>,\r\n languageCode: LanguageCode,\r\n ): void {\r\n this.detailForm.patchValue({\r\n name: entity.name,\r\n });\r\n if (this.customFields.length) {\r\n this.setCustomFieldFormValues(this.customFields, this.detailForm.get('customFields'), entity);\r\n }\r\n }\r\n}\r\n","import { createBulkDeleteAction, GetZoneListQuery, ItemOf, Permission } from '@vendure/admin-ui/core';\r\nimport { map } from 'rxjs/operators';\r\n\r\nexport const deleteZonesBulkAction = createBulkDeleteAction<ItemOf<GetZoneListQuery, 'zones'>>({\r\n location: 'zone-list',\r\n requiresPermission: userPermissions =>\r\n userPermissions.includes(Permission.DeleteSettings) ||\r\n userPermissions.includes(Permission.DeleteZone),\r\n getItemName: item => item.name,\r\n bulkDelete: (dataService, ids) => dataService.settings.deleteZones(ids).pipe(map(res => res.deleteZones)),\r\n});\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-language-selector\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"contentLanguage$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n /></vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"zone-list\"></vdr-action-bar-items>\r\n <a\r\n class=\"btn btn-primary\"\r\n *vdrIfPermissions=\"['CreateSettings', 'CreateZone']\"\r\n [routerLink]=\"['./', 'create']\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'settings.create-new-zone' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n<vdr-split-view [rightPanelOpen]=\"activeZone$ | async\" (closeClicked)=\"closeMembers()\">\r\n <ng-template vdrSplitViewLeft>\r\n <vdr-data-table-2\r\n id=\"zone-list\"\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n [filters]=\"filters\"\r\n [activeIndex]=\"activeIndex$ | async\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n >\r\n <vdr-bulk-action-menu\r\n locationId=\"zone-list\"\r\n [hostComponent]=\"this\"\r\n [selectionManager]=\"selectionManager\"\r\n />\r\n <vdr-dt2-search\r\n [searchTermControl]=\"searchTermControl\"\r\n [searchTermPlaceholder]=\"'common.search-by-name' | translate\"\r\n />\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\r\n <ng-template let-customerGroup=\"item\">\r\n {{ customerGroup.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.created-at' | translate\" id=\"created-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('createdAt')\"\r\n >\r\n <ng-template let-customerGroup=\"item\">\r\n {{ customerGroup.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.updated-at' | translate\" id=\"updated-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('updatedAt')\"\r\n >\r\n <ng-template let-customerGroup=\"item\">\r\n {{ customerGroup.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.name' | translate\" id=\"name\"\r\n [optional]=\"false\"\r\n [sort]=\"sorts.get('name')\"\r\n >\r\n <ng-template let-customerGroup=\"item\">\r\n <a class=\"button-ghost\" [routerLink]=\"['./', customerGroup.id]\"\r\n ><span>{{ customerGroup.name }}</span>\r\n <clr-icon shape=\"arrow right\"></clr-icon>\r\n </a>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.view-contents' | translate\" id=\"view-contents\" [optional]=\"false\">\r\n <ng-template let-customerGroup=\"item\">\r\n <a\r\n class=\"button-small bg-weight-150\"\r\n [routerLink]=\"['./', { contents: customerGroup.id }]\"\r\n queryParamsHandling=\"preserve\"\r\n >\r\n <span>{{ 'settings.view-zone-members' | translate }}</span>\r\n <clr-icon shape=\"file-group\"></clr-icon>\r\n </a>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-custom-field-column\r\n *ngFor=\"let customField of customFields\"\r\n [customField]=\"customField\"\r\n [sort]=\"sorts\"\r\n />\r\n </vdr-data-table-2>\r\n </ng-template>\r\n <ng-template vdrSplitViewRight [splitViewTitle]=\"(activeZone$ | async)?.name\">\r\n <ng-container *ngIf=\"activeZone$ | async as activeZone\">\r\n <button class=\"button-ghost ml-4\" (click)=\"addToZone(activeZone)\">\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n <span>{{\r\n 'settings.add-countries-to-zone' | translate : { zoneName: activeZone.name }\r\n }}</span>\r\n </button>\r\n <vdr-zone-member-list\r\n *ngIf=\"activeZone$ | async as activeZone\"\r\n locationId=\"zone-members-list\"\r\n [selectedMemberIds]=\"selectedMemberIds\"\r\n [activeZone]=\"activeZone\"\r\n (selectionChange)=\"selectedMemberIds = $event\"\r\n />\r\n </ng-container>\r\n </ng-template>\r\n</vdr-split-view>\r\n","import { ChangeDetectionStrategy, Component, OnInit, ViewChild } from '@angular/core';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n DataService,\r\n GetZoneListDocument,\r\n GetZoneListQuery,\r\n ItemOf,\r\n LanguageCode,\r\n LogicalOperator,\r\n ModalService,\r\n NotificationService,\r\n TypedBaseListComponent,\r\n} from '@vendure/admin-ui/core';\r\nimport { gql } from 'apollo-angular';\r\nimport { combineLatest, EMPTY, Observable } from 'rxjs';\r\nimport { distinctUntilChanged, map, mapTo, switchMap, tap } from 'rxjs/operators';\r\n\r\nimport { AddCountryToZoneDialogComponent } from '../add-country-to-zone-dialog/add-country-to-zone-dialog.component';\r\nimport { ZoneMemberListComponent } from '../zone-member-list/zone-member-list.component';\r\n\r\nexport const GET_ZONE_LIST = gql`\r\n query GetZoneList($options: ZoneListOptions) {\r\n zones(options: $options) {\r\n items {\r\n ...ZoneListItem\r\n }\r\n totalItems\r\n }\r\n }\r\n fragment ZoneListItem on Zone {\r\n id\r\n createdAt\r\n updatedAt\r\n name\r\n }\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-zone-list',\r\n templateUrl: './zone-list.component.html',\r\n styleUrls: ['./zone-list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ZoneListComponent\r\n extends TypedBaseListComponent<typeof GetZoneListDocument, 'zones'>\r\n implements OnInit\r\n{\r\n activeZone$: Observable<ItemOf<GetZoneListQuery, 'zones'> | undefined>;\r\n activeIndex$: Observable<number>;\r\n selectedMemberIds: string[] = [];\r\n @ViewChild(ZoneMemberListComponent) zoneMemberList: ZoneMemberListComponent;\r\n readonly customFields = this.serverConfigService.getCustomFieldsFor('Zone');\r\n readonly filters = this.createFilterCollection()\r\n .addIdFilter()\r\n .addDateFilters()\r\n .addFilter({\r\n name: 'name',\r\n type: { kind: 'text' },\r\n label: _('common.name'),\r\n filterField: 'name',\r\n })\r\n .addCustomFieldFilters(this.customFields)\r\n .connectToRoute(this.route);\r\n\r\n readonly sorts = this.createSortCollection()\r\n .defaultSort('createdAt', 'DESC')\r\n .addSort({ name: 'createdAt' })\r\n .addSort({ name: 'updatedAt' })\r\n .addSort({ name: 'name' })\r\n .addCustomFieldSorts(this.customFields)\r\n .connectToRoute(this.route);\r\n\r\n constructor(\r\n protected dataService: DataService,\r\n private notificationService: NotificationService,\r\n private modalService: ModalService,\r\n ) {\r\n super();\r\n super.configure({\r\n document: GetZoneListDocument,\r\n getItems: data => data.zones,\r\n setVariables: (skip, take) => ({\r\n options: {\r\n skip,\r\n take,\r\n filter: {\r\n name: {\r\n contains: this.searchTermControl.value,\r\n },\r\n ...this.filters.createFilterInput(),\r\n },\r\n filterOperator: this.searchTermControl.value ? LogicalOperator.OR : LogicalOperator.AND,\r\n sort: this.sorts.createSortInput(),\r\n },\r\n }),\r\n refreshListOnChanges: [this.filters.valueChanges, this.sorts.valueChanges],\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n super.ngOnInit();\r\n const activeZoneId$ = this.route.paramMap.pipe(\r\n map(pm => pm.get('contents')),\r\n distinctUntilChanged(),\r\n tap(() => (this.selectedMemberIds = [])),\r\n );\r\n this.activeZone$ = combineLatest(this.items$, activeZoneId$).pipe(\r\n map(([zones, activeZoneId]) => {\r\n if (activeZoneId) {\r\n return zones.find(z => z.id === activeZoneId);\r\n }\r\n }),\r\n );\r\n this.activeIndex$ = combineLatest(this.items$, activeZoneId$).pipe(\r\n map(([zones, activeZoneId]) => {\r\n if (activeZoneId) {\r\n return zones.findIndex(g => g.id === activeZoneId);\r\n } else {\r\n return -1;\r\n }\r\n }),\r\n );\r\n }\r\n\r\n setLanguage(code: LanguageCode) {\r\n this.dataService.client.setContentLanguage(code).subscribe();\r\n }\r\n\r\n closeMembers() {\r\n const params = { ...this.route.snapshot.params };\r\n delete params.contents;\r\n this.router.navigate(['./', params], { relativeTo: this.route, queryParamsHandling: 'preserve' });\r\n }\r\n\r\n addToZone(zone: ItemOf<GetZoneListQuery, 'zones'>) {\r\n this.modalService\r\n .fromComponent(AddCountryToZoneDialogComponent, {\r\n locals: {\r\n zoneName: zone.name,\r\n zoneId: zone.id,\r\n },\r\n size: 'md',\r\n })\r\n .pipe(\r\n switchMap(memberIds =>\r\n memberIds\r\n ? this.dataService.settings\r\n .addMembersToZone(zone.id, memberIds)\r\n .pipe(mapTo(memberIds))\r\n : EMPTY,\r\n ),\r\n )\r\n .subscribe({\r\n next: result => {\r\n this.notificationService.success(_(`settings.add-countries-to-zone-success`), {\r\n countryCount: result.length,\r\n zoneName: zone.name,\r\n });\r\n this.refreshMemberList();\r\n },\r\n error: err => {\r\n this.notificationService.error(err);\r\n },\r\n });\r\n }\r\n\r\n refreshMemberList() {\r\n this.zoneMemberList?.refresh();\r\n }\r\n}\r\n","import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport { BulkAction, DataService, NotificationService, Permission } from '@vendure/admin-ui/core';\r\nimport { ZoneMember, ZoneMemberListComponent } from './zone-member-list.component';\r\n\r\nexport const removeZoneMembersBulkAction: BulkAction<ZoneMember, ZoneMemberListComponent> = {\r\n location: 'zone-members-list',\r\n label: _('settings.remove-from-zone'),\r\n icon: 'trash',\r\n iconClass: 'is-danger',\r\n requiresPermission: Permission.UpdateCustomerGroup,\r\n onClick: ({ injector, selection, hostComponent, clearSelection }) => {\r\n const dataService = injector.get(DataService);\r\n const notificationService = injector.get(NotificationService);\r\n\r\n const zone = hostComponent.activeZone;\r\n const memberIds = selection.map(s => s.id);\r\n\r\n dataService.settings.removeMembersFromZone(zone.id, memberIds).subscribe({\r\n complete: () => {\r\n notificationService.success(_(`settings.remove-countries-from-zone-success`), {\r\n countryCount: memberIds.length,\r\n zoneName: zone.name,\r\n });\r\n hostComponent.refresh();\r\n clearSelection();\r\n },\r\n });\r\n },\r\n};\r\n","import { Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { AdministratorFragment, BaseEntityResolver, DataService } from '@vendure/admin-ui/core';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ProfileResolver extends BaseEntityResolver<AdministratorFragment> {\r\n constructor(router: Router, dataService: DataService) {\r\n super(\r\n router,\r\n {\r\n __typename: 'Administrator' as const,\r\n id: '',\r\n createdAt: '',\r\n updatedAt: '',\r\n emailAddress: '',\r\n firstName: '',\r\n lastName: '',\r\n user: { roles: [] } as any,\r\n },\r\n id =>\r\n dataService.administrator\r\n .getActiveAdministrator()\r\n .mapStream(data => data.activeAdministrator),\r\n );\r\n }\r\n}\r\n","import { inject } from '@angular/core';\r\nimport { Route } from '@angular/router';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n DataService,\r\n GetGlobalSettingsDetailDocument,\r\n GetProfileDetailDocument,\r\n PageComponent,\r\n PageService,\r\n} from '@vendure/admin-ui/core';\r\nimport { of } from 'rxjs';\r\n\r\nexport const createRoutes = (pageService: PageService): Route[] => [\r\n {\r\n path: 'profile',\r\n component: PageComponent,\r\n data: {\r\n breadcrumb: _('breadcrumb.profile'),\r\n },\r\n resolve: {\r\n detail: () =>\r\n inject(DataService)\r\n .query(GetProfileDetailDocument)\r\n .mapSingle(data => ({ entity: of(data.activeAdministrator) })),\r\n },\r\n children: pageService.getPageTabRoutes('profile'),\r\n },\r\n {\r\n path: 'administrators',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'administrator-list',\r\n breadcrumb: _('breadcrumb.administrators'),\r\n },\r\n children: pageService.getPageTabRoutes('administrator-list'),\r\n },\r\n {\r\n path: 'administrators/:id',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'administrator-detail',\r\n breadcrumb: { label: _('breadcrumb.administrators'), link: ['../', 'administrators'] },\r\n },\r\n children: pageService.getPageTabRoutes('administrator-detail'),\r\n },\r\n {\r\n path: 'channels',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'channel-list',\r\n breadcrumb: _('breadcrumb.channels'),\r\n },\r\n children: pageService.getPageTabRoutes('channel-list'),\r\n },\r\n {\r\n path: 'channels/:id',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'channel-list',\r\n breadcrumb: { label: _('breadcrumb.channels'), link: ['../', 'channels'] },\r\n },\r\n children: pageService.getPageTabRoutes('channel-detail'),\r\n },\r\n {\r\n path: 'stock-locations',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'stock-location-list',\r\n breadcrumb: _('breadcrumb.stock-locations'),\r\n },\r\n children: pageService.getPageTabRoutes('stock-location-list'),\r\n },\r\n {\r\n path: 'stock-locations/:id',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'stock-location-list',\r\n breadcrumb: { label: _('breadcrumb.stock-locations'), link: ['../', 'stock-locations'] },\r\n },\r\n children: pageService.getPageTabRoutes('stock-location-detail'),\r\n },\r\n {\r\n path: 'sellers',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'seller-list',\r\n breadcrumb: _('breadcrumb.sellers'),\r\n },\r\n children: pageService.getPageTabRoutes('seller-list'),\r\n },\r\n {\r\n path: 'sellers/:id',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'seller-list',\r\n breadcrumb: { label: _('breadcrumb.sellers'), link: ['../', 'sellers'] },\r\n },\r\n children: pageService.getPageTabRoutes('seller-detail'),\r\n },\r\n {\r\n path: 'roles',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'role-list',\r\n breadcrumb: _('breadcrumb.roles'),\r\n },\r\n children: pageService.getPageTabRoutes('role-list'),\r\n },\r\n {\r\n path: 'roles/:id',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'role-detail',\r\n breadcrumb: { label: _('breadcrumb.roles'), link: ['../', 'roles'] },\r\n },\r\n children: pageService.getPageTabRoutes('role-detail'),\r\n },\r\n {\r\n path: 'tax-categories',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'tax-category-list',\r\n breadcrumb: _('breadcrumb.tax-categories'),\r\n },\r\n children: pageService.getPageTabRoutes('tax-category-list'),\r\n },\r\n {\r\n path: 'tax-categories/:id',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'tax-category-detail',\r\n breadcrumb: { label: _('breadcrumb.tax-categories'), link: ['../', 'tax-categories'] },\r\n },\r\n children: pageService.getPageTabRoutes('tax-category-detail'),\r\n },\r\n {\r\n path: 'tax-rates',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'tax-rate-list',\r\n breadcrumb: _('breadcrumb.tax-rates'),\r\n },\r\n children: pageService.getPageTabRoutes('tax-rate-list'),\r\n },\r\n {\r\n path: 'tax-rates/:id',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'tax-rate-detail',\r\n breadcrumb: { label: _('breadcrumb.tax-rates'), link: ['../', 'tax-rates'] },\r\n },\r\n children: pageService.getPageTabRoutes('tax-rate-detail'),\r\n },\r\n {\r\n path: 'countries',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'country-list',\r\n breadcrumb: _('breadcrumb.countries'),\r\n },\r\n children: pageService.getPageTabRoutes('country-list'),\r\n },\r\n {\r\n path: 'countries/:id',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'country-detail',\r\n breadcrumb: { label: _('breadcrumb.countries'), link: ['../', 'countries'] },\r\n },\r\n children: pageService.getPageTabRoutes('country-detail'),\r\n },\r\n {\r\n path: 'zones',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'zone-list',\r\n breadcrumb: _('breadcrumb.zones'),\r\n },\r\n children: pageService.getPageTabRoutes('zone-list'),\r\n },\r\n {\r\n path: 'zones/:id',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'zone-detail',\r\n breadcrumb: { label: _('breadcrumb.zones'), link: ['../', 'zones'] },\r\n },\r\n children: pageService.getPageTabRoutes('zone-detail'),\r\n },\r\n {\r\n path: 'shipping-methods',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'shipping-method-list',\r\n breadcrumb: _('breadcrumb.shipping-methods'),\r\n },\r\n children: pageService.getPageTabRoutes('shipping-method-list'),\r\n },\r\n {\r\n path: 'shipping-methods/:id',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'shipping-method-detail',\r\n breadcrumb: { label: _('breadcrumb.shipping-methods'), link: ['../', 'shipping-methods'] },\r\n },\r\n children: pageService.getPageTabRoutes('shipping-method-detail'),\r\n },\r\n {\r\n path: 'payment-methods',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'payment-method-list',\r\n breadcrumb: _('breadcrumb.payment-methods'),\r\n },\r\n children: pageService.getPageTabRoutes('payment-method-list'),\r\n },\r\n {\r\n path: 'payment-methods/:id',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'payment-method-detail',\r\n breadcrumb: { label: _('breadcrumb.payment-methods'), link: ['../', 'payment-methods'] },\r\n },\r\n children: pageService.getPageTabRoutes('payment-method-detail'),\r\n },\r\n {\r\n path: 'global-settings',\r\n component: PageComponent,\r\n data: {\r\n breadcrumb: _('breadcrumb.global-settings'),\r\n locationId: 'global-setting-detail',\r\n },\r\n resolve: {\r\n detail: () =>\r\n inject(DataService)\r\n .query(GetGlobalSettingsDetailDocument)\r\n .mapSingle(data => ({ entity: of(data.globalSettings) })),\r\n },\r\n children: pageService.getPageTabRoutes('global-setting-detail'),\r\n },\r\n];\r\n","import { NgModule } from '@angular/core';\r\nimport { RouterModule, ROUTES } from '@angular/router';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n BulkActionRegistryService,\r\n detailComponentWithResolver,\r\n GetAdministratorDetailDocument,\r\n GetChannelDetailDocument,\r\n GetCountryDetailDocument,\r\n GetPaymentMethodDetailDocument,\r\n GetRoleDetailDocument,\r\n GetSellerDetailDocument,\r\n GetShippingMethodDetailDocument,\r\n GetStockLocationDetailDocument,\r\n GetTaxCategoryDetailDocument,\r\n GetTaxRateDetailDocument,\r\n GetZoneDetailDocument,\r\n PageService,\r\n SharedModule,\r\n} from '@vendure/admin-ui/core';\r\nimport { DEFAULT_CHANNEL_CODE } from '@vendure/common/lib/shared-constants';\r\n\r\nimport { AddCountryToZoneDialogComponent } from './components/add-country-to-zone-dialog/add-country-to-zone-dialog.component';\r\nimport { AdminDetailComponent } from './components/admin-detail/admin-detail.component';\r\nimport { deleteAdministratorsBulkAction } from './components/administrator-list/administrator-list-bulk-actions';\r\nimport { AdministratorListComponent } from './components/administrator-list/administrator-list.component';\r\nimport { ChannelDetailComponent } from './components/channel-detail/channel-detail.component';\r\nimport { deleteChannelsBulkAction } from './components/channel-list/channel-list-bulk-actions';\r\nimport { ChannelListComponent } from './components/channel-list/channel-list.component';\r\nimport { CountryDetailComponent } from './components/country-detail/country-detail.component';\r\nimport { deleteCountriesBulkAction } from './components/country-list/country-list-bulk-actions';\r\nimport { CountryListComponent } from './components/country-list/country-list.component';\r\nimport { GlobalSettingsComponent } from './components/global-settings/global-settings.component';\r\nimport { PaymentMethodDetailComponent } from './components/payment-method-detail/payment-method-detail.component';\r\nimport {\r\n assignPaymentMethodsToChannelBulkAction,\r\n deletePaymentMethodsBulkAction,\r\n removePaymentMethodsFromChannelBulkAction,\r\n} from './components/payment-method-list/payment-method-list-bulk-actions';\r\nimport { PaymentMethodListComponent } from './components/payment-method-list/payment-method-list.component';\r\nimport { PermissionGridComponent } from './components/permission-grid/permission-grid.component';\r\nimport { ProfileComponent } from './components/profile/profile.component';\r\nimport { RoleDetailComponent } from './components/role-detail/role-detail.component';\r\nimport { deleteRolesBulkAction } from './components/role-list/role-list-bulk-actions';\r\nimport { RoleListComponent } from './components/role-list/role-list.component';\r\nimport { SellerDetailComponent } from './components/seller-detail/seller-detail.component';\r\nimport { deleteSellersBulkAction } from './components/seller-list/seller-list-bulk-actions';\r\nimport { SellerListComponent } from './components/seller-list/seller-list.component';\r\nimport { ShippingEligibilityTestResultComponent } from './components/shipping-eligibility-test-result/shipping-eligibility-test-result.component';\r\nimport { ShippingMethodDetailComponent } from './components/shipping-method-detail/shipping-method-detail.component';\r\nimport {\r\n assignShippingMethodsToChannelBulkAction,\r\n deleteShippingMethodsBulkAction,\r\n removeShippingMethodsFromChannelBulkAction,\r\n} from './components/shipping-method-list/shipping-method-list-bulk-actions';\r\nimport { ShippingMethodListComponent } from './components/shipping-method-list/shipping-method-list.component';\r\nimport { ShippingMethodTestResultComponent } from './components/shipping-method-test-result/shipping-method-test-result.component';\r\nimport { StockLocationDetailComponent } from './components/stock-location-detail/stock-location-detail.component';\r\nimport {\r\n assignStockLocationsToChannelBulkAction,\r\n deleteStockLocationsBulkAction,\r\n removeStockLocationsFromChannelBulkAction,\r\n} from './components/stock-location-list/stock-location-list-bulk-actions';\r\nimport { StockLocationListComponent } from './components/stock-location-list/stock-location-list.component';\r\nimport { TaxCategoryDetailComponent } from './components/tax-category-detail/tax-category-detail.component';\r\nimport { deleteTaxCategoriesBulkAction } from './components/tax-category-list/tax-category-list-bulk-actions';\r\nimport { TaxCategoryListComponent } from './components/tax-category-list/tax-category-list.component';\r\nimport { TaxRateDetailComponent } from './components/tax-rate-detail/tax-rate-detail.component';\r\nimport { deleteTaxRatesBulkAction } from './components/tax-rate-list/tax-rate-list-bulk-actions';\r\nimport { TaxRateListComponent } from './components/tax-rate-list/tax-rate-list.component';\r\nimport { TestAddressFormComponent } from './components/test-address-form/test-address-form.component';\r\nimport { TestOrderBuilderComponent } from './components/test-order-builder/test-order-builder.component';\r\nimport { TestShippingMethodsComponent } from './components/test-shipping-methods/test-shipping-methods.component';\r\nimport { ZoneDetailComponent } from './components/zone-detail/zone-detail.component';\r\nimport { deleteZonesBulkAction } from './components/zone-list/zone-list-bulk-actions';\r\nimport { ZoneListComponent } from './components/zone-list/zone-list.component';\r\nimport { ZoneMemberControlsDirective } from './components/zone-member-list/zone-member-controls.directive';\r\nimport { removeZoneMembersBulkAction } from './components/zone-member-list/zone-member-list-bulk-actions';\r\nimport { ZoneMemberListHeaderDirective } from './components/zone-member-list/zone-member-list-header.directive';\r\nimport { ZoneMemberListComponent } from './components/zone-member-list/zone-member-list.component';\r\nimport { createRoutes } from './settings.routes';\r\n\r\n@NgModule({\r\n imports: [SharedModule, RouterModule.forChild([])],\r\n providers: [\r\n {\r\n provide: ROUTES,\r\n useFactory: (pageService: PageService) => createRoutes(pageService),\r\n multi: true,\r\n deps: [PageService],\r\n },\r\n ],\r\n declarations: [\r\n TaxCategoryListComponent,\r\n TaxCategoryDetailComponent,\r\n AdministratorListComponent,\r\n RoleListComponent,\r\n RoleDetailComponent,\r\n AdminDetailComponent,\r\n PermissionGridComponent,\r\n CountryListComponent,\r\n CountryDetailComponent,\r\n TaxRateListComponent,\r\n TaxRateDetailComponent,\r\n ChannelListComponent,\r\n ChannelDetailComponent,\r\n ShippingMethodListComponent,\r\n ShippingMethodDetailComponent,\r\n PaymentMethodListComponent,\r\n PaymentMethodDetailComponent,\r\n GlobalSettingsComponent,\r\n TestOrderBuilderComponent,\r\n TestAddressFormComponent,\r\n SellerDetailComponent,\r\n SellerListComponent,\r\n ShippingMethodTestResultComponent,\r\n ShippingEligibilityTestResultComponent,\r\n ZoneListComponent,\r\n AddCountryToZoneDialogComponent,\r\n ZoneMemberListComponent,\r\n ZoneMemberListHeaderDirective,\r\n ZoneMemberControlsDirective,\r\n ProfileComponent,\r\n TestShippingMethodsComponent,\r\n ZoneDetailComponent,\r\n StockLocationListComponent,\r\n StockLocationDetailComponent,\r\n ],\r\n})\r\nexport class SettingsModule {\r\n private static hasRegisteredTabsAndBulkActions = false;\r\n\r\n constructor(bulkActionRegistryService: BulkActionRegistryService, pageService: PageService) {\r\n if (SettingsModule.hasRegisteredTabsAndBulkActions) {\r\n return;\r\n }\r\n bulkActionRegistryService.registerBulkAction(deleteSellersBulkAction);\r\n\r\n bulkActionRegistryService.registerBulkAction(deleteChannelsBulkAction);\r\n\r\n bulkActionRegistryService.registerBulkAction(deleteAdministratorsBulkAction);\r\n\r\n bulkActionRegistryService.registerBulkAction(deleteRolesBulkAction);\r\n\r\n bulkActionRegistryService.registerBulkAction(assignShippingMethodsToChannelBulkAction);\r\n bulkActionRegistryService.registerBulkAction(removeShippingMethodsFromChannelBulkAction);\r\n bulkActionRegistryService.registerBulkAction(deleteShippingMethodsBulkAction);\r\n\r\n bulkActionRegistryService.registerBulkAction(assignPaymentMethodsToChannelBulkAction);\r\n bulkActionRegistryService.registerBulkAction(removePaymentMethodsFromChannelBulkAction);\r\n bulkActionRegistryService.registerBulkAction(deletePaymentMethodsBulkAction);\r\n\r\n bulkActionRegistryService.registerBulkAction(deleteTaxCategoriesBulkAction);\r\n\r\n bulkActionRegistryService.registerBulkAction(deleteTaxRatesBulkAction);\r\n\r\n bulkActionRegistryService.registerBulkAction(deleteCountriesBulkAction);\r\n\r\n bulkActionRegistryService.registerBulkAction(deleteZonesBulkAction);\r\n\r\n bulkActionRegistryService.registerBulkAction(removeZoneMembersBulkAction);\r\n\r\n bulkActionRegistryService.registerBulkAction(assignStockLocationsToChannelBulkAction);\r\n bulkActionRegistryService.registerBulkAction(removeStockLocationsFromChannelBulkAction);\r\n bulkActionRegistryService.registerBulkAction(deleteStockLocationsBulkAction);\r\n\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'seller-list',\r\n tab: _('breadcrumb.sellers'),\r\n route: '',\r\n component: SellerListComponent,\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'seller-detail',\r\n tab: _('settings.seller'),\r\n route: '',\r\n component: detailComponentWithResolver({\r\n component: SellerDetailComponent,\r\n query: GetSellerDetailDocument,\r\n entityKey: 'seller',\r\n getBreadcrumbs: entity => [\r\n {\r\n label: entity ? entity.name : _('settings.create-new-seller'),\r\n link: [entity?.id],\r\n },\r\n ],\r\n }),\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'channel-list',\r\n tab: _('breadcrumb.channels'),\r\n route: '',\r\n component: ChannelListComponent,\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'channel-detail',\r\n tab: _('settings.channel'),\r\n route: '',\r\n component: detailComponentWithResolver({\r\n component: ChannelDetailComponent,\r\n query: GetChannelDetailDocument,\r\n entityKey: 'channel',\r\n getBreadcrumbs: entity => [\r\n {\r\n label: entity\r\n ? entity.code === DEFAULT_CHANNEL_CODE\r\n ? 'common.default-channel'\r\n : entity.code\r\n : _('settings.create-new-channel'),\r\n link: [entity?.id],\r\n },\r\n ],\r\n }),\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'administrator-list',\r\n tab: _('breadcrumb.administrators'),\r\n route: '',\r\n component: AdministratorListComponent,\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'administrator-detail',\r\n tab: _('settings.administrator'),\r\n route: '',\r\n component: detailComponentWithResolver({\r\n component: AdminDetailComponent,\r\n query: GetAdministratorDetailDocument,\r\n entityKey: 'administrator',\r\n getBreadcrumbs: entity => [\r\n {\r\n label: entity\r\n ? `${entity.firstName} ${entity.lastName}`\r\n : _('admin.create-new-administrator'),\r\n link: [entity?.id],\r\n },\r\n ],\r\n }),\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'role-list',\r\n tab: _('breadcrumb.roles'),\r\n route: '',\r\n component: RoleListComponent,\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'role-detail',\r\n tab: _('settings.role'),\r\n route: '',\r\n component: detailComponentWithResolver({\r\n component: RoleDetailComponent,\r\n query: GetRoleDetailDocument,\r\n entityKey: 'role',\r\n getBreadcrumbs: entity => [\r\n {\r\n label: entity ? entity.description : _('settings.create-new-role'),\r\n link: [entity?.id],\r\n },\r\n ],\r\n }),\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'shipping-method-list',\r\n tab: _('breadcrumb.shipping-methods'),\r\n route: '',\r\n component: ShippingMethodListComponent,\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'shipping-method-detail',\r\n tab: _('settings.shipping-method'),\r\n route: '',\r\n component: detailComponentWithResolver({\r\n component: ShippingMethodDetailComponent,\r\n query: GetShippingMethodDetailDocument,\r\n entityKey: 'shippingMethod',\r\n getBreadcrumbs: entity => [\r\n {\r\n label: entity ? entity.name : _('settings.create-new-shipping-method'),\r\n link: [entity?.id],\r\n },\r\n ],\r\n }),\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'shipping-method-list',\r\n tab: _('settings.test-shipping-methods'),\r\n route: 'test',\r\n component: TestShippingMethodsComponent,\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'payment-method-list',\r\n tab: _('breadcrumb.payment-methods'),\r\n route: '',\r\n component: PaymentMethodListComponent,\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'payment-method-detail',\r\n tab: _('settings.payment-method'),\r\n route: '',\r\n component: detailComponentWithResolver({\r\n component: PaymentMethodDetailComponent,\r\n query: GetPaymentMethodDetailDocument,\r\n entityKey: 'paymentMethod',\r\n getBreadcrumbs: entity => [\r\n {\r\n label: entity ? entity.name : _('settings.create-new-payment-method'),\r\n link: [entity?.id],\r\n },\r\n ],\r\n }),\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'tax-category-list',\r\n tab: _('breadcrumb.tax-categories'),\r\n route: '',\r\n component: TaxCategoryListComponent,\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'tax-category-detail',\r\n tab: _('settings.tax-category'),\r\n route: '',\r\n component: detailComponentWithResolver({\r\n component: TaxCategoryDetailComponent,\r\n query: GetTaxCategoryDetailDocument,\r\n entityKey: 'taxCategory',\r\n getBreadcrumbs: entity => [\r\n {\r\n label: entity ? entity.name : _('settings.create-new-tax-category'),\r\n link: [entity?.id],\r\n },\r\n ],\r\n }),\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'tax-rate-list',\r\n tab: _('breadcrumb.tax-rates'),\r\n route: '',\r\n component: TaxRateListComponent,\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'tax-rate-detail',\r\n tab: _('settings.tax-rate'),\r\n route: '',\r\n component: detailComponentWithResolver({\r\n component: TaxRateDetailComponent,\r\n query: GetTaxRateDetailDocument,\r\n entityKey: 'taxRate',\r\n getBreadcrumbs: entity => [\r\n {\r\n label: entity ? entity.name : _('settings.create-new-tax-rate'),\r\n link: [entity?.id],\r\n },\r\n ],\r\n }),\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'country-list',\r\n tab: _('breadcrumb.countries'),\r\n route: '',\r\n component: CountryListComponent,\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'country-detail',\r\n tab: _('settings.country'),\r\n route: '',\r\n component: detailComponentWithResolver({\r\n component: CountryDetailComponent,\r\n query: GetCountryDetailDocument,\r\n entityKey: 'country',\r\n getBreadcrumbs: entity => [\r\n {\r\n label: entity ? entity.name : _('settings.create-new-country'),\r\n link: [entity?.id],\r\n },\r\n ],\r\n }),\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'zone-list',\r\n tab: _('breadcrumb.zones'),\r\n route: '',\r\n component: ZoneListComponent,\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'zone-detail',\r\n tab: _('settings.zone'),\r\n route: '',\r\n component: detailComponentWithResolver({\r\n component: ZoneDetailComponent,\r\n query: GetZoneDetailDocument,\r\n entityKey: 'zone',\r\n getBreadcrumbs: entity => [\r\n {\r\n label: entity ? entity.name : _('settings.create-new-zone'),\r\n link: [entity?.id],\r\n },\r\n ],\r\n }),\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'global-setting-detail',\r\n tab: _('breadcrumb.global-settings'),\r\n route: '',\r\n component: GlobalSettingsComponent,\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'profile',\r\n tab: _('breadcrumb.profile'),\r\n route: '',\r\n component: ProfileComponent,\r\n });\r\n\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'stock-location-list',\r\n tab: _('catalog.stock-locations'),\r\n route: '',\r\n component: StockLocationListComponent,\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'stock-location-detail',\r\n tab: _('catalog.stock-location'),\r\n route: '',\r\n component: detailComponentWithResolver({\r\n component: StockLocationDetailComponent,\r\n query: GetStockLocationDetailDocument,\r\n entityKey: 'stockLocation',\r\n getBreadcrumbs: entity => [\r\n {\r\n label: entity ? entity.name : _('catalog.create-new-stock-location'),\r\n link: [entity?.id],\r\n },\r\n ],\r\n }),\r\n });\r\n SettingsModule.hasRegisteredTabsAndBulkActions = true;\r\n }\r\n}\r\n"],"x_google_ignoreList":[0]}