@deenruv/admin-ui-plugin 1.0.0
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.
- package/README.md +5 -0
- package/lib/admin-ui/123.1d21e707f57ee3b4.js +33 -0
- package/lib/admin-ui/123.1d21e707f57ee3b4.js.map +1 -0
- package/lib/admin-ui/132.9c69fc8bd3b0cec4.js +2 -0
- package/lib/admin-ui/132.9c69fc8bd3b0cec4.js.map +1 -0
- package/lib/admin-ui/153.7eec6efd3edd54b4.js +321 -0
- package/lib/admin-ui/153.7eec6efd3edd54b4.js.map +1 -0
- package/lib/admin-ui/3rdpartylicenses.txt +1393 -0
- package/lib/admin-ui/473.fc9f902d000ba044.js +2 -0
- package/lib/admin-ui/473.fc9f902d000ba044.js.map +1 -0
- package/lib/admin-ui/53.7f3fee856943b03f.js +86 -0
- package/lib/admin-ui/53.7f3fee856943b03f.js.map +1 -0
- package/lib/admin-ui/625.64b1900ed11327c1.js +46 -0
- package/lib/admin-ui/625.64b1900ed11327c1.js.map +1 -0
- package/lib/admin-ui/697.ff9c92dd4b564093.js +73 -0
- package/lib/admin-ui/697.ff9c92dd4b564093.js.map +1 -0
- package/lib/admin-ui/99.b9d2442a2288abdb.js +379 -0
- package/lib/admin-ui/99.b9d2442a2288abdb.js.map +1 -0
- package/lib/admin-ui/assets/.gitkeep +0 -0
- package/lib/admin-ui/assets/logo-login.webp +0 -0
- package/lib/admin-ui/assets/logo-top.webp +0 -0
- package/lib/admin-ui/common.868070cec3f2418e.js +2 -0
- package/lib/admin-ui/common.868070cec3f2418e.js.map +1 -0
- package/lib/admin-ui/deenruv-ui-config.json +290 -0
- package/lib/admin-ui/favicon.ico +0 -0
- package/lib/admin-ui/fonts/fonts.scss +253 -0
- package/lib/admin-ui/fonts/inter-cyrillic-ext.woff2 +0 -0
- package/lib/admin-ui/fonts/inter-cyrillic.woff2 +0 -0
- package/lib/admin-ui/fonts/inter-greek-ext.woff2 +0 -0
- package/lib/admin-ui/fonts/inter-greek.woff2 +0 -0
- package/lib/admin-ui/fonts/inter-latin-ext.woff2 +0 -0
- package/lib/admin-ui/fonts/inter-latin.woff2 +0 -0
- package/lib/admin-ui/fonts/inter-vietnamese.woff2 +0 -0
- package/lib/admin-ui/i18n-messages/ar.json +814 -0
- package/lib/admin-ui/i18n-messages/cs.json +814 -0
- package/lib/admin-ui/i18n-messages/de.json +814 -0
- package/lib/admin-ui/i18n-messages/en.json +814 -0
- package/lib/admin-ui/i18n-messages/es.json +814 -0
- package/lib/admin-ui/i18n-messages/fa.json +814 -0
- package/lib/admin-ui/i18n-messages/fr.json +814 -0
- package/lib/admin-ui/i18n-messages/he.json +814 -0
- package/lib/admin-ui/i18n-messages/hr.json +814 -0
- package/lib/admin-ui/i18n-messages/it.json +814 -0
- package/lib/admin-ui/i18n-messages/nb.json +812 -0
- package/lib/admin-ui/i18n-messages/ne.json +814 -0
- package/lib/admin-ui/i18n-messages/pl.json +814 -0
- package/lib/admin-ui/i18n-messages/pt_BR.json +814 -0
- package/lib/admin-ui/i18n-messages/pt_PT.json +814 -0
- package/lib/admin-ui/i18n-messages/ru.json +814 -0
- package/lib/admin-ui/i18n-messages/sv.json +807 -0
- package/lib/admin-ui/i18n-messages/uk.json +814 -0
- package/lib/admin-ui/i18n-messages/zh_Hans.json +814 -0
- package/lib/admin-ui/i18n-messages/zh_Hant.json +814 -0
- package/lib/admin-ui/index.html +14 -0
- package/lib/admin-ui/inter-cyrillic-ext.f62cc866835dd717.woff2 +0 -0
- package/lib/admin-ui/inter-cyrillic.fd42267cbb1bfdb0.woff2 +0 -0
- package/lib/admin-ui/inter-greek-ext.f876a5a3ea45d9a5.woff2 +0 -0
- package/lib/admin-ui/inter-greek.0455348926d6f41d.woff2 +0 -0
- package/lib/admin-ui/inter-latin-ext.7df16007e26681f5.woff2 +0 -0
- package/lib/admin-ui/inter-latin.40c45725dc5f525d.woff2 +0 -0
- package/lib/admin-ui/inter-vietnamese.530676b65c9e977f.woff2 +0 -0
- package/lib/admin-ui/main.a1f6ce60f6b53c40.js +3241 -0
- package/lib/admin-ui/main.a1f6ce60f6b53c40.js.map +1 -0
- package/lib/admin-ui/polyfills.34e462102e9d0666.js +2 -0
- package/lib/admin-ui/polyfills.34e462102e9d0666.js.map +1 -0
- package/lib/admin-ui/polyfills.ts +66 -0
- package/lib/admin-ui/runtime.12183b5e8f8cfd14.js +2 -0
- package/lib/admin-ui/runtime.12183b5e8f8cfd14.js.map +1 -0
- package/lib/admin-ui/styles/_mixins.scss +60 -0
- package/lib/admin-ui/styles/_variables.scss +11 -0
- package/lib/admin-ui/styles/component/prosemirror.scss +511 -0
- package/lib/admin-ui/styles/global/_buttons.scss +147 -0
- package/lib/admin-ui/styles/global/_clarity.scss +140 -0
- package/lib/admin-ui/styles/global/_forms.scss +187 -0
- package/lib/admin-ui/styles/global/_global.scss +41 -0
- package/lib/admin-ui/styles/global/_overrides.scss +165 -0
- package/lib/admin-ui/styles/global/_sass-overrides.scss +8 -0
- package/lib/admin-ui/styles/global/_utilities.scss +155 -0
- package/lib/admin-ui/styles/rtl.scss +143 -0
- package/lib/admin-ui/styles/styles.scss +19 -0
- package/lib/admin-ui/styles/theme/dark.scss +591 -0
- package/lib/admin-ui/styles/theme/default.scss +254 -0
- package/lib/admin-ui/styles/ui-extension-theme.scss +13 -0
- package/lib/admin-ui/styles.2de83a2df5e76526.css +3 -0
- package/lib/admin-ui/styles.2de83a2df5e76526.css.map +1 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.js +18 -0
- package/lib/index.js.map +1 -0
- package/lib/src/api/metrics.resolver.d.ts +8 -0
- package/lib/src/api/metrics.resolver.js +41 -0
- package/lib/src/api/metrics.resolver.js.map +1 -0
- package/lib/src/config/metrics-strategies.d.ts +39 -0
- package/lib/src/config/metrics-strategies.js +92 -0
- package/lib/src/config/metrics-strategies.js.map +1 -0
- package/lib/src/constants.d.ts +7 -0
- package/lib/src/constants.js +286 -0
- package/lib/src/constants.js.map +1 -0
- package/lib/src/plugin.d.ts +129 -0
- package/lib/src/plugin.js +332 -0
- package/lib/src/plugin.js.map +1 -0
- package/lib/src/service/metrics.service.d.ts +16 -0
- package/lib/src/service/metrics.service.js +144 -0
- package/lib/src/service/metrics.service.js.map +1 -0
- package/lib/src/types.d.ts +23 -0
- package/lib/src/types.js +14 -0
- package/lib/src/types.js.map +1 -0
- package/package.json +42 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"99.b9d2442a2288abdb.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_r1","id","member_r2","createdAt","member_r3","_c0","member_r4","name","member_r5","code","ZoneMemberListComponent_ng_template_23_vdr_chip_0_Template","ZoneMemberListComponent_ng_template_23_vdr_chip_1_Template","member_r6","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","_r2","cancel","add","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","_r1","section_r2","$implicit","ctx_r2","toggleAll","permissions","permission_r5","_r4","setPermission","description","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","save","AdminDetailComponent_ng_template_7_button_0_Template","entity_r5","customFields","channel_r7","_r6","selectedChannelId","channelId","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_13_Template","AdminDetailComponent_vdr_form_field_30_Template","AdminDetailComponent_vdr_form_field_32_Template","AdminDetailComponent_vdr_card_35_Template","AdminDetailComponent_li_43_Template","isNew$","updateButton_r8","deleteAdministratorsBulkAction","createBulkDeleteAction","location","requiresPermission","userPermissions","DeleteAdministrator","getItemName","bulkDelete","ids","deleteAdministrators","res","_c1","administrator_r1","administrator_r2","administrator_r3","updatedAt","_c2","administrator_r4","administrator_r5","role_r6","AdministratorListComponent_ng_template_32_vdr_chip_0_Template","administrator_r7","customField_r8","ctx_r8","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_17_Template","AdministratorListComponent_ng_template_20_Template","AdministratorListComponent_ng_template_23_Template","AdministratorListComponent_ng_template_26_Template","AdministratorListComponent_ng_template_29_Template","AdministratorListComponent_ng_template_32_Template","AdministratorListComponent_vdr_dt2_custom_field_column_33_Template","items$","itemsPerPage$","currentPage$","ctx_r1","saveButtonEnabled","_r3","ChannelDetailComponent_ng_template_7_button_0_Template","entity_r4","updatePermission","seller_r5","languageCode_r6","code_r7","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","controls","setValue","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_13_Template","ChannelDetailComponent_vdr_form_field_18_Template","ChannelDetailComponent_vdr_form_item_19_Template","ChannelDetailComponent_option_29_Template","ChannelDetailComponent_option_45_Template","ChannelDetailComponent_option_50_Template","ChannelDetailComponent_clr_alert_56_Template","ChannelDetailComponent_clr_alert_62_Template","ChannelDetailComponent_vdr_card_68_Template","deleteChannelsBulkAction","DeleteChannel","deleteChannels","channel_r1","channel_r2","channel_r3","channel_r4","channel_r5","customField_r6","ctx_r6","GET_CHANNEL_LIST","ChannelListComponent","GetChannelListDocument","isDefaultChannel","ChannelListComponent_a_5_Template","ChannelListComponent_ng_template_17_Template","ChannelListComponent_ng_template_20_Template","ChannelListComponent_ng_template_23_Template","ChannelListComponent_ng_template_26_Template","ChannelListComponent_ng_template_29_Template","ChannelListComponent_vdr_dt2_custom_field_column_30_Template","CountryDetailComponent_ng_template_11_button_0_Template","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_23_Template","CountryDetailComponent_vdr_card_36_Template","availableLanguages$","updateButton_r6","deleteCountriesBulkAction","DeleteSettings","DeleteCountry","deleteCountries","country_r1","country_r2","country_r3","country_r4","country_r5","CountryListComponent_ng_template_35_vdr_chip_0_Template","CountryListComponent_ng_template_35_vdr_chip_1_Template","country_r6","customField_r7","ctx_r7","GET_COUNTRY_LIST","CountryListComponent","CountryListComponent_a_8_Template","CountryListComponent_ng_template_20_Template","CountryListComponent_ng_template_23_Template","CountryListComponent_ng_template_26_Template","CountryListComponent_ng_template_29_Template","CountryListComponent_ng_template_32_Template","CountryListComponent_ng_template_35_Template","CountryListComponent_vdr_dt2_custom_field_column_36_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_25_Template","selectedHandler","PaymentMethodDetailComponent_ng_template_11_button_0_Template","removeChecker","selectedChecker","selectedCheckerDefinition","checker_r8","_r7","selectChecker","PaymentMethodDetailComponent_div_45_button_7_Template","checkers","_r9","removeHandler","selectedHandlerDefinition","handler_r11","_r10","selectHandler","PaymentMethodDetailComponent_div_49_button_7_Template","handlers","GET_PAYMENT_METHOD_DETAIL","PAYMENT_METHOD_FRAGMENT","PaymentMethodDetailComponent","checker","handler","UpdatePaymentMethod","getPaymentMethodOperations","paymentMethodEligibilityCheckers","paymentMethodHandlers","updateCode","currentCode","nameValue","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_23_Template","target","PaymentMethodDetailComponent_vdr_card_40_Template","PaymentMethodDetailComponent_vdr_configurable_input_44_Template","PaymentMethodDetailComponent_div_45_Template","PaymentMethodDetailComponent_vdr_configurable_input_48_Template","PaymentMethodDetailComponent_div_49_Template","updateButton_r12","deletePaymentMethodsBulkAction","DeletePaymentMethod","shouldRetryItem","response","retrying","deletePaymentMethods","assignPaymentMethodsToChannelBulkAction","createBulkAssignToChannelAction","bulkAssignToChannel","paymentMethodIds","channelIds","mutate","AssignPaymentMethodsToChannelDocument","assignPaymentMethodsToChannel","removePaymentMethodsFromChannelBulkAction","createBulkRemoveFromChannelAction","bulkRemoveFromChannel","RemovePaymentMethodsFromChannelDocument","removePaymentMethodsFromChannel","paymentMethod_r1","paymentMethod_r2","paymentMethod_r3","paymentMethod_r4","paymentMethod_r5","PaymentMethodListComponent_ng_template_35_vdr_chip_0_Template","PaymentMethodListComponent_ng_template_35_vdr_chip_1_Template","paymentMethod_r6","GET_PAYMENT_METHOD_LIST","PaymentMethodListComponent","GetPaymentMethodListDocument","paymentMethods","PaymentMethodListComponent_a_8_Template","PaymentMethodListComponent_ng_template_20_Template","PaymentMethodListComponent_ng_template_23_Template","PaymentMethodListComponent_ng_template_26_Template","PaymentMethodListComponent_ng_template_29_Template","PaymentMethodListComponent_ng_template_32_Template","PaymentMethodListComponent_ng_template_35_Template","PaymentMethodListComponent_vdr_dt2_custom_field_column_36_Template","entity_r1","GET_PROFILE_DETAIL","ProfileComponent","updateActiveAdministrator","ProfileComponent_vdr_card_11_Template","ProfileComponent_vdr_form_field_25_Template","ProfileComponent_vdr_card_30_Template","RoleDetailComponent_ng_template_7_button_0_Template","GET_ROLE_DETAIL","ROLE_FRAGMENT","RoleDetailComponent","change","currentPermissions","newValue","unique","createRole","updateRole","detectChanges","RoleDetailComponent_button_5_Template","RoleDetailComponent_ng_template_7_Template","RoleDetailComponent_vdr_card_13_Template","tmp_14_0","deleteRolesBulkAction","deleteRoles","role_r1","role_r2","role_r3","role_r4","RoleListComponent_ng_template_26_a_0_Template","RoleListComponent_ng_template_26_ng_template_1_Template","ctx_r5","isDefaultRole","defaultRole_r5","role_r7","RoleListComponent_ng_template_29_span_0_Template","channel_r8","RoleListComponent_ng_template_32_ng_container_0_vdr_chip_1_Template","role_r9","RoleListComponent_ng_template_32_ng_container_0_Template","permission_r10","role_r12","initialLimit","_r11","toggleDisplayLimit","RoleListComponent_ng_template_35_ng_container_0_button_4_ng_container_1_Template","RoleListComponent_ng_template_35_ng_container_0_button_4_ng_template_2_Template","displayLimit","collapse_r13","RoleListComponent_ng_template_35_ng_container_0_vdr_chip_2_Template","RoleListComponent_ng_template_35_ng_container_0_button_4_Template","RoleListComponent_ng_template_35_ng_container_0_Template","RoleListComponent_ng_template_35_ng_template_1_Template","defaultRole_r14","GET_ROLE_LIST","RoleListComponent","GetRoleListDocument","SUPER_ADMIN_ROLE_CODE","RoleListComponent_a_5_Template","RoleListComponent_ng_template_17_Template","RoleListComponent_ng_template_20_Template","RoleListComponent_ng_template_23_Template","RoleListComponent_ng_template_26_Template","RoleListComponent_ng_template_29_Template","RoleListComponent_ng_template_32_Template","RoleListComponent_ng_template_35_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_13_Template","SellerDetailComponent_vdr_card_22_Template","updateButton_r5","deleteSellersBulkAction","DeleteSeller","deleteSellers","seller_r1","seller_r2","seller_r3","seller_r4","customField_r5","SellerListComponent","GetSellerListDocument","SellerListComponent_a_5_Template","SellerListComponent_ng_template_17_Template","SellerListComponent_ng_template_20_Template","SellerListComponent_ng_template_23_Template","SellerListComponent_ng_template_26_Template","SellerListComponent_vdr_dt2_custom_field_column_27_Template","quote_r1","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_r3","quantity","ctx_r3","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","TestOrderBuilderComponent_table_0_Template","TestOrderBuilderComponent_ng_template_1_Template","emptyPlaceholder_r5","TestAddressFormComponent","addressChange","getAvailableCountries","initialValue","city","countryCode","postalCode","province","form","subscription","unsubscribe","TestAddressFormComponent_option_18_Template","quote","ShippingMethodTestResultComponent","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","selectedCalculator","ShippingMethodDetailComponent_ng_template_11_button_0_Template","handler_r6","checker_r9","_r8","ShippingMethodDetailComponent_div_44_button_7_Template","selectedCalculatorDefinition","calculator_r12","selectCalculator","ShippingMethodDetailComponent_div_48_button_7_Template","calculators","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_17_Template","ShippingMethodDetailComponent_option_38_Template","ShippingMethodDetailComponent_vdr_card_39_Template","ShippingMethodDetailComponent_vdr_configurable_input_43_Template","ShippingMethodDetailComponent_div_44_Template","ShippingMethodDetailComponent_vdr_configurable_input_47_Template","ShippingMethodDetailComponent_div_48_Template","updateButton_r13","tmp_28_0","deleteShippingMethodsBulkAction","DeleteShippingMethod","deleteShippingMethods","assignShippingMethodsToChannelBulkAction","shippingMethodIds","AssignShippingMethodsToChannelDocument","assignShippingMethodsToChannel","removeShippingMethodsFromChannelBulkAction","RemoveShippingMethodsFromChannelDocument","removeShippingMethodsFromChannel","shippingMethod_r1","shippingMethod_r2","shippingMethod_r3","shippingMethod_r4","shippingMethod_r5","shippingMethod_r6","shippingMethod_r7","GET_SHIPPING_METHOD_LIST","ShippingMethodListComponent","GetShippingMethodListDocument","shippingMethods","ShippingMethodListComponent_a_8_Template","ShippingMethodListComponent_ng_template_20_Template","ShippingMethodListComponent_ng_template_23_Template","ShippingMethodListComponent_ng_template_26_Template","ShippingMethodListComponent_ng_template_29_Template","ShippingMethodListComponent_ng_template_32_Template","ShippingMethodListComponent_ng_template_35_Template","ShippingMethodListComponent_ng_template_38_Template","ShippingMethodListComponent_vdr_dt2_custom_field_column_39_Template","StockLocationDetailComponent_ng_template_7_button_0_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_13_Template","StockLocationDetailComponent_vdr_card_27_Template","deleteStockLocationsBulkAction","DeleteStockLocation","DeleteCatalog","DeleteStockLocationsDocument","deleteStockLocations","DeletionResult","NOT_DELETED","assignStockLocationsToChannelBulkAction","UpdateCatalog","UpdateStockLocation","stockLocationIds","AssignStockLocationsToChannelDocument","assignStockLocationsToChannel","removeStockLocationsFromChannelBulkAction","RemoveStockLocationsFromChannelDocument","removeStockLocationsFromChannel","stockLocation_r1","stockLocation_r2","stockLocation_r3","stockLocation_r4","stockLocation_r5","field_r6","GET_STOCK_LOCATION_LIST","StockLocationListComponent","addFilters","addSorts","GetStockLocationListDocument","stockLocations","StockLocationListComponent_a_5_Template","StockLocationListComponent_ng_template_17_Template","StockLocationListComponent_ng_template_20_Template","StockLocationListComponent_ng_template_23_Template","StockLocationListComponent_ng_template_26_Template","StockLocationListComponent_ng_template_29_Template","StockLocationListComponent_vdr_dt2_custom_field_column_30_Template","TaxCategoryDetailComponent_ng_template_7_button_0_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_13_Template","TaxCategoryDetailComponent_vdr_card_27_Template","deleteTaxCategoriesBulkAction","DeleteTaxCategory","deleteTaxCategories","taxCategory_r1","taxCategory_r2","taxCategory_r3","taxCategory_r4","TaxCategoryListComponent_ng_template_29_vdr_chip_0_Template","taxCategory_r5","GET_TAX_CATEGORY_LIST","TaxCategoryListComponent","getCustomFieldsFor","GetTaxCategoryListDocument","taxCategories","TaxCategoryListComponent_a_5_Template","TaxCategoryListComponent_ng_template_17_Template","TaxCategoryListComponent_ng_template_20_Template","TaxCategoryListComponent_ng_template_23_Template","TaxCategoryListComponent_ng_template_26_Template","TaxCategoryListComponent_ng_template_29_Template","TaxCategoryListComponent_vdr_dt2_custom_field_column_30_Template","TaxRateDetailComponent_ng_template_7_button_0_Template","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_19_Template","TaxRateDetailComponent_option_37_Template","TaxRateDetailComponent_vdr_card_43_Template","deleteTaxRatesBulkAction","DeleteTaxRate","deleteTaxRates","taxRate_r1","taxRate_r2","taxRate_r3","taxRate_r4","taxRate_r5","taxRate_r6","taxRate_r7","taxRate_r8","TaxRateListComponent_ng_template_41_vdr_chip_0_Template","TaxRateListComponent_ng_template_41_vdr_chip_1_Template","taxRate_r9","customField_r10","ctx_r10","GET_TAX_RATE_LIST","TaxRateListComponent","GetTaxRateListDocument","taxRates","TaxRateListComponent_a_5_Template","TaxRateListComponent_ng_template_17_Template","TaxRateListComponent_ng_template_20_Template","TaxRateListComponent_ng_template_23_Template","TaxRateListComponent_ng_template_26_Template","TaxRateListComponent_ng_template_29_Template","TaxRateListComponent_ng_template_32_Template","TaxRateListComponent_ng_template_35_Template","TaxRateListComponent_ng_template_38_Template","TaxRateListComponent_ng_template_41_Template","TaxRateListComponent_vdr_dt2_custom_field_column_42_Template","TestShippingMethodsComponent","testEligibleShippingMethods","tmp_0_0","ZoneDetailComponent_ng_template_7_button_0_Template","GET_ZONE_DETAIL","ZoneDetailComponent","UpdateZone","createZone","updateZone","ZoneDetailComponent_button_5_Template","ZoneDetailComponent_ng_template_7_Template","ZoneDetailComponent_vdr_card_13_Template","ZoneDetailComponent_vdr_card_22_Template","deleteZonesBulkAction","DeleteZone","deleteZones","customerGroup_r3","customerGroup_r4","customerGroup_r5","customerGroup_r6","_c3","customerGroup_r7","ZoneListComponent_ng_template_12_ng_template_11_Template","ZoneListComponent_ng_template_12_ng_template_14_Template","ZoneListComponent_ng_template_12_ng_template_17_Template","ZoneListComponent_ng_template_12_ng_template_20_Template","ZoneListComponent_ng_template_12_ng_template_23_Template","ZoneListComponent_ng_template_12_vdr_dt2_custom_field_column_24_Template","activeIndex$","activeZone_r12","activeZone_r10","ngIf","addToZone","ZoneListComponent_ng_template_13_ng_container_0_vdr_zone_member_list_6_Template","_c4","activeZone$","ZoneListComponent_ng_template_13_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_12_Template","ZoneListComponent_ng_template_13_Template","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","hasRegisteredTabsAndBulkActions","bulkActionRegistryService","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"],"ignoreList":[],"sourceRoot":"webpack:///","sources":["../node_modules/.pnpm/rxjs@7.8.1/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/test-shipping-methods/test-shipping-methods.component.html","./src/lib/settings/src/components/zone-detail/zone-detail.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';\n\n@Directive({\n selector: '[vdrZoneMemberControls]',\n})\nexport class ZoneMemberControlsDirective {\n constructor(public templateRef: TemplateRef<any>) {}\n}\n","import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[vdrZoneMemberListHeader]',\n})\nexport class ZoneMemberListHeaderDirective {\n constructor(public templateRef: TemplateRef<any>) {}\n}\n","<vdr-data-table-2\n [id]=\"locationId\"\n [items]=\"filteredMembers$ | async\"\n [totalItems]=\"totalItems$ | async\"\n [itemsPerPage]=\"itemsPerPage\"\n [currentPage]=\"currentPage\"\n (itemsPerPageChange)=\"itemsPerPage = $event\"\n (pageChange)=\"currentPage = $event\"\n>\n <vdr-bulk-action-menu\n [locationId]=\"locationId\"\n [hostComponent]=\"this\"\n [selectionManager]=\"selectionManager\"\n ></vdr-bulk-action-menu>\n <vdr-dt2-search\n [searchTermControl]=\"filterTermControl\"\n [searchTermPlaceholder]=\"'common.search-by-name' | translate\"\n ></vdr-dt2-search>\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\n <ng-template let-member=\"item\">\n {{ member.id }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'common.created-at' | translate\" id=\"created-at\" [hiddenByDefault]=\"true\">\n <ng-template let-member=\"item\">\n {{ member.createdAt | localeDate : 'short' }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'common.updated-at' | translate\" id=\"updated-at\" [hiddenByDefault]=\"true\">\n <ng-template let-member=\"item\">\n {{ member.createdAt | localeDate : 'short' }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'common.name' | translate\" id=\"name\" [optional]=\"false\">\n <ng-template let-member=\"item\">\n <a class=\"button-ghost\" [routerLink]=\"['/settings/countries', member.id]\"\n ><span> {{ member.name }}</span>\n <clr-icon shape=\"arrow right\"></clr-icon>\n </a>\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'common.code' | translate\" id=\"code\">\n <ng-template let-member=\"item\">\n {{ member.code }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'common.enabled' | translate\" id=\"enabled\">\n <ng-template let-member=\"item\">\n <vdr-chip *ngIf=\"member.enabled\" colorType=\"success\">{{ 'common.enabled' | translate }}</vdr-chip>\n <vdr-chip *ngIf=\"!member.enabled\" colorType=\"warning\">{{ 'common.disabled' | translate }}</vdr-chip>\n </ng-template>\n </vdr-dt2-column>\n</vdr-data-table-2>\n","import {\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport {\n BulkActionLocationId,\n DataService,\n GetZoneListQuery,\n GetZoneMembersDocument,\n GetZoneMembersQuery,\n ItemOf,\n SelectionManager,\n} from '@deenruv/admin-ui/core';\nimport { BehaviorSubject, combineLatest, merge, Observable, of, Subject, switchMap } from 'rxjs';\nimport { map, startWith, take, takeUntil } from 'rxjs/operators';\n\nimport { ZoneMemberControlsDirective } from './zone-member-controls.directive';\nimport { ZoneMemberListHeaderDirective } from './zone-member-list-header.directive';\n\nexport type ZoneMember = { id: string; name: string; code: string };\n\n@Component({\n selector: 'vdr-zone-member-list',\n templateUrl: './zone-member-list.component.html',\n styleUrls: ['./zone-member-list.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ZoneMemberListComponent implements OnInit, OnChanges, OnDestroy {\n @Input() locationId: BulkActionLocationId;\n @Input() members?: ZoneMember[];\n @Input() selectedMemberIds: string[] = [];\n @Input() activeZone: ItemOf<GetZoneListQuery, 'zones'>;\n @Output() selectionChange = new EventEmitter<string[]>();\n @ContentChild(ZoneMemberListHeaderDirective) headerTemplate: ZoneMemberListHeaderDirective;\n @ContentChild(ZoneMemberControlsDirective) controlsTemplate: ZoneMemberControlsDirective;\n members$: Observable<NonNullable<GetZoneMembersQuery['zone']>['members'] | ZoneMember[]>;\n filterTermControl = new FormControl('');\n filteredMembers$: Observable<ZoneMember[]>;\n totalItems$: Observable<number>;\n currentPage = 1;\n itemsPerPage = 10;\n selectionManager = new SelectionManager<ZoneMember>({\n multiSelect: true,\n itemsAreEqual: (a, b) => a.id === b.id,\n additiveMode: true,\n });\n private membersInput$ = new Subject<ZoneMember[]>();\n private activeZoneInput$ = new BehaviorSubject<ItemOf<GetZoneListQuery, 'zones'> | undefined>(undefined);\n private destroy$ = new Subject<void>();\n private refresh$ = new Subject<void>();\n\n constructor(private dataService: DataService) {}\n\n ngOnInit() {\n const activeZoneMembers$ = merge(this.activeZoneInput$, this.refresh$).pipe(\n switchMap(activeZone =>\n this.activeZone\n ? this.dataService\n .query(GetZoneMembersDocument, { zoneId: this.activeZone.id })\n .mapSingle(({ zone }) => zone?.members ?? [])\n : of([]),\n ),\n );\n this.members$ = merge(activeZoneMembers$, this.membersInput$);\n\n this.members$.pipe(take(1)).subscribe(members => {\n this.selectionManager.setCurrentItems(\n members?.filter(m => this.selectedMemberIds.includes(m.id)) ?? [],\n );\n });\n this.selectionManager.selectionChanges$.pipe(takeUntil(this.destroy$)).subscribe(selection => {\n this.selectionChange.emit(selection.map(s => s.id));\n });\n this.filteredMembers$ = combineLatest(\n this.members$,\n this.filterTermControl.valueChanges.pipe(startWith('')),\n ).pipe(\n map(([members, filterTerm]) => {\n if (filterTerm) {\n const term = filterTerm?.toLocaleLowerCase() ?? '';\n return members.filter(\n m =>\n m.name.toLocaleLowerCase().includes(term) ||\n m.code.toLocaleLowerCase().includes(term),\n );\n } else {\n return members;\n }\n }),\n );\n this.totalItems$ = this.filteredMembers$.pipe(map(members => members.length));\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if ('members' in changes) {\n this.membersInput$.next(this.members ?? []);\n }\n if ('activeZone' in changes) {\n this.activeZoneInput$.next(this.activeZone);\n }\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n refresh() {\n this.refresh$.next();\n }\n}\n","<ng-template vdrDialogTitle>{{ 'settings.add-countries-to-zone' | translate: { zoneName: zoneName } }}</ng-template>\n\n<vdr-zone-member-list\n [members]=\"availableCountries$ | async\"\n [selectedMemberIds]=\"selectedMemberIds\"\n (selectionChange)=\"selectedMemberIds = $event\"\n>\n</vdr-zone-member-list>\n\n<ng-template vdrDialogButtons>\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\n <button type=\"submit\" (click)=\"add()\" [disabled]=\"!selectedMemberIds.length\" class=\"btn btn-primary\">\n {{ 'settings.add-countries-to-zone' | translate: { zoneName: zoneName } }}\n </button>\n</ng-template>\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\nimport {\n DataService,\n Dialog,\n GetCountryListDocument,\n GetCountryListQuery,\n GetZoneListQuery,\n GetZoneMembersDocument,\n GetZoneMembersQuery,\n ItemOf,\n} from '@deenruv/admin-ui/core';\nimport { gql } from 'apollo-angular';\nimport { Observable } from 'rxjs';\nimport { map, withLatestFrom } from 'rxjs/operators';\n\nexport const GET_ZONE_MEMBERS = gql`\n query GetZoneMembers($zoneId: ID!) {\n zone(id: $zoneId) {\n id\n createdAt\n updatedAt\n name\n members {\n createdAt\n updatedAt\n id\n name\n code\n enabled\n }\n }\n }\n`;\n\n@Component({\n selector: 'vdr-add-country-to-zone-dialog',\n templateUrl: './add-country-to-zone-dialog.component.html',\n styleUrls: ['./add-country-to-zone-dialog.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AddCountryToZoneDialogComponent implements Dialog<string[]>, OnInit {\n resolveWith: (result?: string[]) => void;\n zoneName: string;\n zoneId: string;\n currentMembers$: Observable<NonNullable<GetZoneMembersQuery['zone']>['members']>;\n availableCountries$: Observable<Array<ItemOf<GetCountryListQuery, 'countries'>>>;\n selectedMemberIds: string[] = [];\n\n constructor(private dataService: DataService) {}\n\n ngOnInit(): void {\n this.currentMembers$ = this.dataService\n .query(GetZoneMembersDocument, { zoneId: this.zoneId })\n .mapSingle(({ zone }) => zone?.members ?? []);\n this.availableCountries$ = this.dataService\n .query(GetCountryListDocument, {\n options: { take: 999 },\n })\n .mapStream(data => data.countries.items)\n .pipe(\n withLatestFrom(this.currentMembers$),\n map(([countries, currentMembers]) =>\n countries.filter(c => !currentMembers.find(cm => cm.id === c.id)),\n ),\n );\n }\n\n cancel() {\n this.resolveWith();\n }\n\n add() {\n this.resolveWith(this.selectedMemberIds);\n }\n}\n","<table class=\"table\">\n <tbody>\n <tr *ngFor=\"let section of gridData\">\n <td class=\"permission-group left\">\n <div><strong>{{ section.label | translate }}</strong></div>\n <small>{{ section.description | translate }}</small><br>\n <button *ngIf=\"1 < section.permissions.length && !readonly\" class=\"button-small\" (click)=\"toggleAll(section.permissions)\">\n {{ 'common.toggle-all' | translate }}\n </button>\n </td>\n <td *ngFor=\"let permission of section.permissions\" [attr.colspan]=\"section.permissions.length === 1 ? 4 : 1\">\n <vdr-select-toggle\n size=\"small\"\n [title]=\"permission.description\"\n [label]=\"permission.name\"\n [disabled]=\"readonly\"\n [selected]=\"activePermissions?.includes(permission.name)\"\n (selectedChange)=\"setPermission(permission.name, $event)\"\n ></vdr-select-toggle>\n </td>\n </tr>\n </tbody>\n</table>\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport { PermissionDefinition } from '@deenruv/admin-ui/core';\n\nexport interface PermissionGridRow {\n label: string;\n description: string;\n permissions: PermissionDefinition[];\n}\n\n/**\n * A table showing and allowing the setting of all possible CRUD permissions.\n */\n@Component({\n selector: 'vdr-permission-grid',\n templateUrl: './permission-grid.component.html',\n styleUrls: ['./permission-grid.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PermissionGridComponent implements OnInit {\n @Input() permissionDefinitions: PermissionDefinition[];\n @Input() activePermissions: string[];\n @Input() readonly = false;\n @Output() permissionChange = new EventEmitter<{ permission: string; value: boolean }>();\n gridData: PermissionGridRow[];\n\n ngOnInit() {\n this.buildGrid();\n }\n\n setPermission(permission: string, value: boolean) {\n if (!this.readonly) {\n this.permissionChange.emit({ permission, value });\n }\n }\n\n toggleAll(defs: PermissionDefinition[]) {\n const value = defs.some(d => !this.activePermissions.includes(d.name));\n for (const def of defs) {\n this.permissionChange.emit({ permission: def.name, value });\n }\n }\n\n private buildGrid() {\n const crudGroups = new Map<string, PermissionDefinition[]>();\n const nonCrud: PermissionDefinition[] = [];\n const crudRe = /^(Create|Read|Update|Delete)([a-zA-Z]+)$/;\n for (const def of this.permissionDefinitions) {\n const isCrud = crudRe.test(def.name);\n if (isCrud) {\n const groupName = def.name.match(crudRe)?.[2];\n if (groupName) {\n const existing = crudGroups.get(groupName);\n if (existing) {\n existing.push(def);\n } else {\n crudGroups.set(groupName, [def]);\n }\n }\n } else if (def.assignable) {\n nonCrud.push(def);\n }\n }\n this.gridData = [\n ...nonCrud.map(d => ({\n label: d.name,\n description: d.description,\n permissions: [d],\n })),\n ...Array.from(crudGroups.entries()).map(([label, defs]) => ({\n label,\n description: this.extractCrudDescription(defs[0]),\n permissions: defs,\n })),\n ];\n }\n\n private extractCrudDescription(def: PermissionDefinition): string {\n return def.description.replace(/Grants permission to [\\w]+/, 'Grants permissions on');\n }\n}\n","<vdr-page-block>\n <vdr-action-bar>\n <vdr-ab-left> </vdr-ab-left>\n <vdr-ab-right>\n <vdr-action-bar-items locationId=\"administrator-detail\" />\n <button\n class=\"btn btn-primary\"\n *ngIf=\"isNew$ | async; else updateButton\"\n (click)=\"create()\"\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\n >\n {{ 'common.create' | translate }}\n </button>\n <ng-template #updateButton>\n <button\n class=\"btn btn-primary\"\n (click)=\"save()\"\n *vdrIfPermissions=\"'UpdateAdministrator'\"\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\n >\n {{ 'common.update' | translate }}\n </button>\n </ng-template>\n <vdr-action-bar-dropdown-menu locationId=\"administrator-detail\" />\n </vdr-ab-right>\n </vdr-action-bar>\n</vdr-page-block>\n\n<form class=\"form\" [formGroup]=\"detailForm\">\n <vdr-page-detail-layout>\n <vdr-page-detail-sidebar>\n <vdr-card *ngIf=\"entity$ | async as entity\">\n <vdr-page-entity-info [entity]=\"entity\" />\n </vdr-card>\n </vdr-page-detail-sidebar>\n <vdr-page-block>\n <vdr-card>\n <div class=\"form-grid\">\n <vdr-form-field\n [label]=\"'settings.email-address-or-identifier' | translate\"\n for=\"emailAddress\"\n class=\"form-grid-span\"\n >\n <input\n id=\"emailAddress\"\n type=\"text\"\n formControlName=\"emailAddress\"\n [readonly]=\"!(['CreateAdministrator', 'UpdateAdministrator'] | hasPermission)\"\n />\n </vdr-form-field>\n <vdr-form-field [label]=\"'settings.first-name' | translate\" for=\"firstName\">\n <input\n id=\"firstName\"\n type=\"text\"\n formControlName=\"firstName\"\n [readonly]=\"!(['CreateAdministrator', 'UpdateAdministrator'] | hasPermission)\"\n />\n </vdr-form-field>\n <vdr-form-field [label]=\"'settings.last-name' | translate\" for=\"lastName\">\n <input\n id=\"lastName\"\n type=\"text\"\n formControlName=\"lastName\"\n [readonly]=\"!(['CreateAdministrator', 'UpdateAdministrator'] | hasPermission)\"\n />\n </vdr-form-field>\n <vdr-form-field\n *ngIf=\"isNew$ | async\"\n [label]=\"'settings.password' | translate\"\n for=\"password\"\n >\n <input id=\"password\" type=\"password\" formControlName=\"password\" />\n </vdr-form-field>\n <vdr-form-field\n *ngIf=\"\n !(isNew$ | async) &&\n (['CreateAdministrator', 'UpdateAdministrator'] | hasPermission)\n \"\n [label]=\"'settings.password' | translate\"\n for=\"password\"\n [readOnlyToggle]=\"true\"\n >\n <input id=\"password\" type=\"password\" formControlName=\"password\" />\n </vdr-form-field>\n </div>\n </vdr-card>\n\n <vdr-card\n formGroupName=\"customFields\"\n *ngIf=\"customFields.length\"\n [title]=\"'common.custom-fields' | translate\"\n >\n <vdr-tabbed-custom-fields\n entityName=\"Administrator\"\n [customFields]=\"customFields\"\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\n ></vdr-tabbed-custom-fields>\n </vdr-card>\n <vdr-custom-detail-component-host\n locationId=\"administrator-detail\"\n [entity$]=\"entity$\"\n [detailForm]=\"detailForm\"\n ></vdr-custom-detail-component-host>\n </vdr-page-block>\n </vdr-page-detail-layout>\n <vdr-page-block>\n <vdr-card [title]=\"'settings.roles' | translate\">\n <ng-select\n [items]=\"allRoles$ | async\"\n [multiple]=\"true\"\n [hideSelected]=\"true\"\n formControlName=\"roles\"\n (change)=\"rolesChanged($event)\"\n bindLabel=\"description\"\n ></ng-select>\n\n <ul class=\"nav mt-2\" role=\"tablist\">\n <li role=\"presentation\" class=\"nav-item\" *ngFor=\"let channel of getAvailableChannels()\">\n <button\n [id]=\"channel.channelId\"\n (click)=\"selectedChannelId = channel.channelId\"\n class=\"btn btn-link nav-link\"\n [class.active]=\"selectedChannelId === channel.channelId\"\n [attr.aria-selected]=\"selectedChannelId === channel.channelId\"\n type=\"button\"\n >\n {{ channel.channelCode | channelCodeToLabel | translate }}\n </button>\n </li>\n </ul>\n <vdr-permission-grid\n [activePermissions]=\"getPermissionsForSelectedChannel()\"\n [permissionDefinitions]=\"permissionDefinitions\"\n [readonly]=\"true\"\n ></vdr-permission-grid>\n </vdr-card>\n </vdr-page-block>\n</form>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { FormBuilder, Validators } from '@angular/forms';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport { ResultOf } from '@graphql-typed-document-node/core';\nimport {\n ADMINISTRATOR_FRAGMENT,\n CreateAdministratorInput,\n DataService,\n GetAdministratorDetailDocument,\n getCustomFieldsDefaults,\n LanguageCode,\n NotificationService,\n Permission,\n PermissionDefinition,\n RoleFragment,\n TypedBaseDetailComponent,\n UpdateAdministratorInput,\n} from '@deenruv/admin-ui/core';\nimport { CUSTOMER_ROLE_CODE } from '@deenruv/common/lib/shared-constants';\nimport { notNullOrUndefined } from '@deenruv/common/lib/shared-utils';\nimport { gql } from 'apollo-angular';\nimport { Observable } from 'rxjs';\nimport { mergeMap, take } from 'rxjs/operators';\n\nexport interface PermissionsByChannel {\n channelId: string;\n channelCode: string;\n permissions: { [K in Permission]: boolean };\n}\n\nexport const GET_ADMINISTRATOR_DETAIL = gql`\n query GetAdministratorDetail($id: ID!) {\n administrator(id: $id) {\n ...Administrator\n }\n }\n ${ADMINISTRATOR_FRAGMENT}\n`;\n\n@Component({\n selector: 'vdr-admin-detail',\n templateUrl: './admin-detail.component.html',\n styleUrls: ['./admin-detail.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AdminDetailComponent\n extends TypedBaseDetailComponent<typeof GetAdministratorDetailDocument, 'administrator'>\n implements OnInit, OnDestroy\n{\n customFields = this.getCustomFieldConfig('Administrator');\n detailForm = this.formBuilder.group({\n emailAddress: ['', Validators.required],\n firstName: ['', Validators.required],\n lastName: ['', Validators.required],\n password: [''],\n roles: [\n [] as NonNullable<\n ResultOf<typeof GetAdministratorDetailDocument>['administrator']\n >['user']['roles'],\n ],\n customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),\n });\n permissionDefinitions: PermissionDefinition[];\n allRoles$: Observable<RoleFragment[]>;\n selectedRoles: RoleFragment[] = [];\n selectedRolePermissions: { [channelId: string]: PermissionsByChannel } = {} as any;\n selectedChannelId: string | null = null;\n\n getAvailableChannels(): PermissionsByChannel[] {\n return Object.values(this.selectedRolePermissions);\n }\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.allRoles$ = this.dataService.administrator\n .getRoles(999)\n .mapStream(item => item.roles.items.filter(i => i.code !== CUSTOMER_ROLE_CODE));\n this.dataService.client.userStatus().single$.subscribe(({ userStatus }) => {\n if (\n !userStatus.permissions.includes(Permission.CreateAdministrator) &&\n !userStatus.permissions.includes(Permission.UpdateAdministrator)\n ) {\n const rolesSelect = this.detailForm.get('roles');\n if (rolesSelect) {\n rolesSelect.disable();\n }\n }\n });\n this.permissionDefinitions = this.serverConfigService.getPermissionDefinitions();\n }\n\n ngOnDestroy(): void {\n this.destroy();\n }\n\n rolesChanged(roles: RoleFragment[]) {\n this.buildPermissionsMap();\n }\n\n getPermissionsForSelectedChannel(): string[] {\n function getActivePermissions(input: PermissionsByChannel['permissions']): string[] {\n return Object.entries(input)\n .filter(([permission, active]) => active)\n .map(([permission, active]) => permission);\n }\n if (this.selectedChannelId) {\n const selectedChannel = this.selectedRolePermissions[this.selectedChannelId];\n if (selectedChannel) {\n const permissionMap = this.selectedRolePermissions[this.selectedChannelId].permissions;\n return getActivePermissions(permissionMap);\n }\n }\n const channels = Object.values(this.selectedRolePermissions);\n if (0 < channels.length) {\n this.selectedChannelId = channels[0].channelId;\n return getActivePermissions(channels[0].permissions);\n }\n return [];\n }\n\n create() {\n const { emailAddress, firstName, lastName, password, customFields, roles } = this.detailForm.value;\n if (!emailAddress || !firstName || !lastName || !password) {\n return;\n }\n const administrator: CreateAdministratorInput = {\n emailAddress,\n firstName,\n lastName,\n password,\n customFields,\n roleIds: roles?.map(role => role.id).filter(notNullOrUndefined) ?? [],\n };\n this.dataService.administrator.createAdministrator(administrator).subscribe(\n data => {\n this.notificationService.success(_('common.notify-create-success'), {\n entity: 'Administrator',\n });\n this.detailForm.markAsPristine();\n this.changeDetector.markForCheck();\n this.router.navigate(['../', data.createAdministrator.id], { relativeTo: this.route });\n },\n err => {\n this.notificationService.error(_('common.notify-create-error'), {\n entity: 'Administrator',\n });\n },\n );\n }\n\n save() {\n this.entity$\n .pipe(\n take(1),\n mergeMap(({ id }) => {\n const formValue = this.detailForm.value;\n const administrator: UpdateAdministratorInput = {\n id,\n emailAddress: formValue.emailAddress,\n firstName: formValue.firstName,\n lastName: formValue.lastName,\n password: formValue.password,\n customFields: formValue.customFields,\n roleIds: formValue.roles?.map(role => role.id),\n };\n return this.dataService.administrator.updateAdministrator(administrator);\n }),\n )\n .subscribe(\n data => {\n this.notificationService.success(_('common.notify-update-success'), {\n entity: 'Administrator',\n });\n this.detailForm.markAsPristine();\n this.changeDetector.markForCheck();\n },\n err => {\n this.notificationService.error(_('common.notify-update-error'), {\n entity: 'Administrator',\n });\n },\n );\n }\n\n protected setFormValues(\n entity: NonNullable<ResultOf<typeof GetAdministratorDetailDocument>['administrator']>,\n languageCode: LanguageCode,\n ) {\n this.detailForm.patchValue({\n emailAddress: entity.emailAddress,\n firstName: entity.firstName,\n lastName: entity.lastName,\n roles: entity.user.roles,\n });\n if (this.customFields.length) {\n this.setCustomFieldFormValues(this.customFields, this.detailForm.get(['customFields']), entity);\n }\n const passwordControl = this.detailForm.get('password');\n if (passwordControl) {\n if (!entity.id) {\n passwordControl.setValidators([Validators.required]);\n } else {\n passwordControl.setValidators([]);\n }\n }\n this.buildPermissionsMap();\n }\n\n private buildPermissionsMap() {\n const permissionsControl = this.detailForm.get('roles');\n if (permissionsControl) {\n const roles = permissionsControl.value;\n const channelIdPermissionsMap = new Map<string, Set<Permission>>();\n const channelIdCodeMap = new Map<string, string>();\n\n for (const role of roles ?? []) {\n for (const channel of role.channels) {\n const channelPermissions = channelIdPermissionsMap.get(channel.id);\n const permissionSet = channelPermissions || new Set<Permission>();\n\n role.permissions.forEach(p => permissionSet.add(p));\n channelIdPermissionsMap.set(channel.id, permissionSet);\n channelIdCodeMap.set(channel.id, channel.code);\n }\n }\n\n this.selectedRolePermissions = {} as any;\n for (const channelId of Array.from(channelIdPermissionsMap.keys())) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const permissionSet = channelIdPermissionsMap.get(channelId)!;\n const permissionsHash: { [K in Permission]: boolean } = {} as any;\n for (const def of this.serverConfigService.getPermissionDefinitions()) {\n permissionsHash[def.name] = permissionSet.has(def.name as Permission);\n }\n this.selectedRolePermissions[channelId] = {\n /* eslint-disable @typescript-eslint/no-non-null-assertion */\n channelId,\n channelCode: channelIdCodeMap.get(channelId)!,\n permissions: permissionsHash,\n /* eslint-enable @typescript-eslint/no-non-null-assertion */\n };\n }\n }\n }\n}\n","import {\n createBulkDeleteAction,\n GetAdministratorListQuery,\n ItemOf,\n Permission,\n} from '@deenruv/admin-ui/core';\nimport { map } from 'rxjs/operators';\n\nexport const deleteAdministratorsBulkAction = createBulkDeleteAction<\n ItemOf<GetAdministratorListQuery, 'administrators'>\n>({\n location: 'administrator-list',\n requiresPermission: userPermissions => userPermissions.includes(Permission.DeleteAdministrator),\n getItemName: item => item.firstName + ' ' + item.lastName,\n bulkDelete: (dataService, ids) =>\n dataService.administrator.deleteAdministrators(ids).pipe(map(res => res.deleteAdministrators)),\n});\n","<vdr-page-block>\n <vdr-action-bar>\n <vdr-ab-left> </vdr-ab-left>\n <vdr-ab-right>\n <vdr-action-bar-items locationId=\"administrator-list\" />\n <a\n class=\"btn btn-primary\"\n *vdrIfPermissions=\"['CreateAdministrator']\"\n [routerLink]=\"['./', 'create']\"\n >\n <clr-icon shape=\"plus\"></clr-icon>\n {{ 'admin.create-new-administrator' | translate }}\n </a>\n <vdr-action-bar-dropdown-menu locationId=\"administrator-list\" />\n </vdr-ab-right>\n </vdr-action-bar>\n</vdr-page-block>\n<vdr-data-table-2\n class=\"mt-2\"\n id=\"administrator-list\"\n [items]=\"items$ | async\"\n [itemsPerPage]=\"itemsPerPage$ | async\"\n [totalItems]=\"totalItems$ | async\"\n [currentPage]=\"currentPage$ | async\"\n [filters]=\"filters\"\n (pageChange)=\"setPageNumber($event)\"\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\n>\n <vdr-bulk-action-menu\n locationId=\"administrator-list\"\n [hostComponent]=\"this\"\n [selectionManager]=\"selectionManager\"\n />\n <vdr-dt2-search\n [searchTermControl]=\"searchTermControl\"\n [searchTermPlaceholder]=\"'catalog.filter-by-name' | translate\"\n />\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\n <ng-template let-administrator=\"item\">\n {{ administrator.id }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column\n [heading]=\"'common.created-at' | translate\" id=\"created-at\"\n [hiddenByDefault]=\"true\"\n [sort]=\"sorts.get('createdAt')\"\n >\n <ng-template let-administrator=\"item\">\n {{ administrator.createdAt | localeDate : 'short' }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column\n [heading]=\"'common.updated-at' | translate\" id=\"updated-at\"\n [hiddenByDefault]=\"true\"\n [sort]=\"sorts.get('updatedAt')\"\n >\n <ng-template let-administrator=\"item\">\n {{ administrator.updatedAt | localeDate : 'short' }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'common.name' | translate\" id=\"name\" [optional]=\"false\" [sort]=\"sorts.get('lastName')\">\n <ng-template let-administrator=\"item\">\n <a class=\"button-ghost\" [routerLink]=\"['./', administrator.id]\"\n ><span>{{ administrator.firstName }} {{ administrator.lastName }}</span>\n <clr-icon shape=\"arrow right\"></clr-icon>\n </a>\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'settings.email-address' | translate\" id=\"email-address\" [sort]=\"sorts.get('emailAddress')\">\n <ng-template let-administrator=\"item\">\n {{ administrator.emailAddress }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'settings.roles' | translate\" id=\"roles\">\n <ng-template let-administrator=\"item\">\n <vdr-chip *ngFor=\"let role of administrator.user.roles\">{{ role.description }}</vdr-chip>\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-custom-field-column\n *ngFor=\"let customField of customFields\"\n [customField]=\"customField\"\n [sorts]=\"sorts\"\n />\n</vdr-data-table-2>\n","import { Component } from '@angular/core';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n ADMINISTRATOR_FRAGMENT,\n GetAdministratorListDocument,\n LogicalOperator,\n TypedBaseListComponent,\n} from '@deenruv/admin-ui/core';\nimport { gql } from 'apollo-angular';\n\nexport const GET_ADMINISTRATOR_LIST = gql`\n query GetAdministratorList($options: AdministratorListOptions) {\n administrators(options: $options) {\n items {\n ...AdministratorListItem\n }\n totalItems\n }\n }\n fragment AdministratorListItem on Administrator {\n id\n createdAt\n updatedAt\n firstName\n lastName\n emailAddress\n user {\n id\n identifier\n lastLogin\n roles {\n id\n createdAt\n updatedAt\n code\n description\n }\n }\n }\n`;\n\n@Component({\n selector: 'vdr-administrator-list',\n templateUrl: './administrator-list.component.html',\n styleUrls: ['./administrator-list.component.scss'],\n})\nexport class AdministratorListComponent extends TypedBaseListComponent<\n typeof GetAdministratorListDocument,\n 'administrators'\n> {\n readonly customFields = this.getCustomFieldConfig('Administrator');\n readonly filters = this.createFilterCollection()\n .addIdFilter()\n .addDateFilters()\n .addFilter({\n name: 'firstName',\n type: { kind: 'text' },\n label: _('settings.first-name'),\n filterField: 'firstName',\n })\n .addFilter({\n name: 'lastName',\n type: { kind: 'text' },\n label: _('settings.last-name'),\n filterField: 'lastName',\n })\n .addFilter({\n name: 'emailAddress',\n type: { kind: 'text' },\n label: _('settings.email-address'),\n filterField: 'emailAddress',\n })\n .addCustomFieldFilters(this.customFields)\n .connectToRoute(this.route);\n\n readonly sorts = this.createSortCollection()\n .defaultSort('createdAt', 'DESC')\n .addSort({ name: 'createdAt' })\n .addSort({ name: 'updatedAt' })\n .addSort({ name: 'lastName' })\n .addSort({ name: 'emailAddress' })\n .addCustomFieldSorts(this.customFields)\n .connectToRoute(this.route);\n\n constructor() {\n super();\n super.configure({\n document: GetAdministratorListDocument,\n getItems: data => data.administrators,\n setVariables: (skip, take) => this.createSearchQuery(skip, take, this.searchTermControl.value),\n refreshListOnChanges: [this.filters.valueChanges, this.sorts.valueChanges],\n });\n }\n\n createSearchQuery(skip: number, take: number, searchTerm: string | null) {\n let _filter = {};\n let filterOperator: LogicalOperator = LogicalOperator.AND;\n\n if (searchTerm) {\n _filter = {\n emailAddress: {\n contains: searchTerm,\n },\n firstName: {\n contains: searchTerm,\n },\n lastName: {\n contains: searchTerm,\n },\n };\n filterOperator = LogicalOperator.OR;\n }\n return {\n options: {\n skip,\n take,\n filter: {\n ...(_filter ?? {}),\n ...this.filters.createFilterInput(),\n },\n sort: this.sorts.createSortInput(),\n filterOperator,\n },\n };\n }\n}\n","<vdr-page-block>\n <vdr-action-bar>\n <vdr-ab-left></vdr-ab-left>\n\n <vdr-ab-right>\n <vdr-action-bar-items locationId=\"channel-detail\" />\n <button\n class=\"btn btn-primary\"\n *ngIf=\"isNew$ | async; else updateButton\"\n (click)=\"create()\"\n [disabled]=\"!saveButtonEnabled()\"\n >\n {{ 'common.create' | translate }}\n </button>\n <ng-template #updateButton>\n <button\n class=\"btn btn-primary\"\n (click)=\"save()\"\n *vdrIfPermissions=\"['SuperAdmin', 'UpdateChannel']\"\n [disabled]=\"!saveButtonEnabled()\"\n >\n {{ 'common.update' | translate }}\n </button>\n </ng-template>\n <vdr-action-bar-dropdown-menu locationId=\"channel-detail\" />\n </vdr-ab-right>\n </vdr-action-bar>\n</vdr-page-block>\n\n<form class=\"form\" [formGroup]=\"detailForm\">\n <vdr-page-detail-layout>\n <vdr-page-detail-sidebar>\n <vdr-card *ngIf=\"entity$ | async as entity\">\n <vdr-page-entity-info [entity]=\"entity\" />\n </vdr-card>\n </vdr-page-detail-sidebar>\n <vdr-page-block>\n <vdr-card>\n <div class=\"form-grid\">\n <vdr-form-field\n class=\"form-grid-span\"\n *ngIf=\"entity?.code !== DEFAULT_CHANNEL_CODE\"\n [label]=\"'common.code' | translate\"\n for=\"code\"\n >\n <input\n id=\"code\"\n type=\"text\"\n [readonly]=\"!(updatePermission | hasPermission)\"\n formControlName=\"code\"\n />\n </vdr-form-field>\n <vdr-form-item\n class=\"form-grid-span\"\n *ngIf=\"entity?.code === DEFAULT_CHANNEL_CODE\"\n [label]=\"'common.code' | translate\"\n >\n {{ entity?.code | channelCodeToLabel | translate }}\n </vdr-form-item>\n <vdr-form-field [label]=\"'settings.channel-token' | translate\" for=\"token\">\n <input\n id=\"token\"\n type=\"text\"\n [readonly]=\"!(updatePermission | hasPermission)\"\n formControlName=\"token\"\n />\n </vdr-form-field>\n\n <vdr-form-field [label]=\"'common.seller' | translate\" for=\"sellerId\">\n <select\n name=\"sellerId\"\n formControlName=\"sellerId\"\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\n >\n <option selected value style=\"display: none\"></option>\n <option *ngFor=\"let seller of sellers$ | async\" [value]=\"seller.id\">\n {{ seller.name }}\n </option>\n </select>\n </vdr-form-field>\n <vdr-form-field\n [label]=\"'common.available-languages' | translate\"\n for=\"availableLanguageCodes\"\n >\n <vdr-language-code-selector\n formControlName=\"availableLanguageCodes\"\n [languageCodes]=\"availableLanguageCodes$ | async\"\n ></vdr-language-code-selector>\n </vdr-form-field>\n <vdr-form-field\n [label]=\"'common.available-currencies' | translate\"\n for=\"availableCurrencyCodes\"\n >\n <vdr-currency-code-selector\n formControlName=\"availableCurrencyCodes\"\n ></vdr-currency-code-selector>\n </vdr-form-field>\n </div>\n </vdr-card>\n <vdr-card [title]=\"'settings.defaults' | translate\">\n <div class=\"form-grid\">\n <vdr-form-field [label]=\"'common.default-language' | translate\" for=\"defaultLanguage\">\n <select\n name=\"defaultLanguageCode\"\n formControlName=\"defaultLanguageCode\"\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\n >\n <option\n *ngFor=\"let languageCode of detailForm.value.availableLanguageCodes\"\n [value]=\"languageCode\"\n >\n {{ languageCode | localeLanguageName }} ({{ languageCode | uppercase }})\n </option>\n </select>\n </vdr-form-field>\n <vdr-form-field [label]=\"'settings.default-currency' | translate\" for=\"defaultCurrency\">\n <select\n name=\"defaultCurrencyCode\"\n formControlName=\"defaultCurrencyCode\"\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\n >\n <option\n *ngFor=\"let code of detailForm.value.availableCurrencyCodes\"\n [value]=\"code\"\n >\n {{ code | localeCurrencyName }}\n </option>\n </select>\n </vdr-form-field>\n <div>\n <vdr-form-field\n [label]=\"'settings.default-tax-zone' | translate\"\n for=\"defaultTaxZoneId\"\n >\n <vdr-zone-selector\n formControlName=\"defaultTaxZoneId\"\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\n ></vdr-zone-selector>\n </vdr-form-field>\n <clr-alert\n *ngIf=\"detailForm.value.code && !detailForm.value.defaultTaxZoneId\"\n clrAlertType=\"danger\"\n [clrAlertClosable]=\"false\"\n >\n <clr-alert-item>\n <span class=\"alert-text\">\n {{ 'error.no-default-tax-zone-set' | translate }}\n </span>\n </clr-alert-item>\n </clr-alert>\n </div>\n\n <div>\n <vdr-form-field\n [label]=\"'settings.default-shipping-zone' | translate\"\n for=\"defaultShippingZoneId\"\n >\n <vdr-zone-selector\n name=\"defaultShippingZoneId\"\n formControlName=\"defaultShippingZoneId\"\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\n ></vdr-zone-selector>\n </vdr-form-field>\n <clr-alert\n *ngIf=\"detailForm.value.code && !detailForm.value.defaultShippingZoneId\"\n clrAlertType=\"danger\"\n [clrAlertClosable]=\"false\"\n >\n <clr-alert-item>\n <span class=\"alert-text\">\n {{ 'error.no-default-shipping-zone-set' | translate }}\n </span>\n </clr-alert-item>\n </clr-alert>\n </div>\n <vdr-form-field\n [label]=\"'settings.prices-include-tax' | translate\"\n for=\"pricesIncludeTax\"\n >\n <clr-toggle-wrapper>\n <input\n type=\"checkbox\"\n clrToggle\n id=\"pricesIncludeTax\"\n formControlName=\"pricesIncludeTax\"\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\n />\n </clr-toggle-wrapper>\n </vdr-form-field>\n </div>\n </vdr-card>\n <vdr-card\n formGroupName=\"customFields\"\n *ngIf=\"customFields.length\"\n [title]=\"'common.custom-fields' | translate\"\n >\n <vdr-tabbed-custom-fields\n entityName=\"Channel\"\n [customFields]=\"customFields\"\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\n ></vdr-tabbed-custom-fields>\n </vdr-card>\n <vdr-custom-detail-component-host\n locationId=\"channel-detail\"\n [entity$]=\"entity$\"\n [detailForm]=\"detailForm\"\n ></vdr-custom-detail-component-host>\n </vdr-page-block>\n </vdr-page-detail-layout>\n</form>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { FormBuilder, Validators } from '@angular/forms';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n CHANNEL_FRAGMENT,\n ChannelFragment,\n CreateChannelInput,\n CurrencyCode,\n DataService,\n GetChannelDetailDocument,\n getCustomFieldsDefaults,\n GetSellersQuery,\n LanguageCode,\n NotificationService,\n Permission,\n ServerConfigService,\n TypedBaseDetailComponent,\n UpdateChannelInput,\n} from '@deenruv/admin-ui/core';\nimport { DEFAULT_CHANNEL_CODE } from '@deenruv/common/lib/shared-constants';\nimport { gql } from 'apollo-angular';\nimport { Observable } from 'rxjs';\nimport { map, mergeMap, take, takeUntil } from 'rxjs/operators';\n\nexport const GET_CHANNEL_DETAIL = gql`\n query GetChannelDetail($id: ID!) {\n channel(id: $id) {\n ...Channel\n }\n }\n ${CHANNEL_FRAGMENT}\n`;\n\n@Component({\n selector: 'vdr-channel-detail',\n templateUrl: './channel-detail.component.html',\n styleUrls: ['./channel-detail.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ChannelDetailComponent\n extends TypedBaseDetailComponent<typeof GetChannelDetailDocument, 'channel'>\n implements OnInit, OnDestroy\n{\n DEFAULT_CHANNEL_CODE = DEFAULT_CHANNEL_CODE;\n customFields = this.getCustomFieldConfig('Channel');\n // zones$: Observable<Array<ItemOf<GetZoneListQuery, 'zones'>>>;\n sellers$: Observable<GetSellersQuery['sellers']['items']>;\n detailForm = this.formBuilder.group({\n code: ['', Validators.required],\n token: ['', Validators.required],\n pricesIncludeTax: [false],\n availableLanguageCodes: [[] as string[]],\n availableCurrencyCodes: [[] as string[]],\n defaultCurrencyCode: ['' as CurrencyCode, Validators.required],\n defaultShippingZoneId: ['', Validators.required],\n defaultLanguageCode: [undefined as LanguageCode | undefined, Validators.required],\n defaultTaxZoneId: ['', Validators.required],\n sellerId: ['', Validators.required],\n customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),\n });\n\n availableLanguageCodes$: Observable<LanguageCode[]>;\n readonly updatePermission = [Permission.SuperAdmin, Permission.UpdateChannel, Permission.CreateChannel];\n\n constructor(\n protected serverConfigService: ServerConfigService,\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 // TODO: make this lazy-loaded autocomplete\n this.sellers$ = this.dataService.settings.getSellerList().mapSingle(data => data.sellers.items);\n this.availableLanguageCodes$ = this.serverConfigService.getAvailableLanguages();\n this.detailForm.controls.availableCurrencyCodes.valueChanges\n .pipe(takeUntil(this.destroy$))\n .subscribe(value => {\n if (value) {\n const defaultCurrencyCode = this.detailForm.controls.defaultCurrencyCode.value;\n if (defaultCurrencyCode && !value.includes(defaultCurrencyCode)) {\n this.detailForm.controls.defaultCurrencyCode.setValue(value[0] as CurrencyCode);\n }\n }\n });\n this.detailForm.controls.availableLanguageCodes.valueChanges\n .pipe(takeUntil(this.destroy$))\n .subscribe(value => {\n if (value) {\n const defaultLanguageCode = this.detailForm.controls.defaultLanguageCode.value;\n if (defaultLanguageCode && !value.includes(defaultLanguageCode)) {\n this.detailForm.controls.defaultLanguageCode.setValue(value[0] as LanguageCode);\n }\n }\n });\n }\n\n ngOnDestroy() {\n this.destroy();\n }\n\n saveButtonEnabled(): boolean {\n return this.detailForm.dirty && this.detailForm.valid;\n }\n\n create() {\n if (!this.detailForm.dirty) {\n return;\n }\n const {\n code,\n token,\n defaultLanguageCode,\n pricesIncludeTax,\n defaultCurrencyCode,\n defaultShippingZoneId,\n defaultTaxZoneId,\n customFields,\n sellerId,\n } = this.detailForm.value;\n if (\n !code ||\n !token ||\n !defaultLanguageCode ||\n !defaultCurrencyCode ||\n !defaultShippingZoneId ||\n !defaultTaxZoneId\n ) {\n return;\n }\n const input: CreateChannelInput = {\n code,\n token,\n defaultLanguageCode,\n pricesIncludeTax: !!pricesIncludeTax,\n defaultCurrencyCode,\n defaultShippingZoneId,\n defaultTaxZoneId,\n customFields,\n sellerId,\n };\n this.dataService.settings\n .createChannel(input)\n .pipe(\n mergeMap(({ createChannel }) =>\n this.dataService.auth.currentUser().single$.pipe(\n map(({ me }) => ({\n me,\n createChannel,\n })),\n ),\n ),\n mergeMap(({ me, createChannel }) =>\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.dataService.client.updateUserChannels(me!.channels).pipe(map(() => createChannel)),\n ),\n )\n .subscribe(data => {\n switch (data.__typename) {\n case 'Channel':\n this.notificationService.success(_('common.notify-create-success'), {\n entity: 'Channel',\n });\n this.detailForm.markAsPristine();\n this.changeDetector.markForCheck();\n this.router.navigate(['../', data.id], { relativeTo: this.route });\n break;\n case 'LanguageNotAvailableError':\n this.notificationService.error(data.message);\n break;\n }\n });\n }\n\n save() {\n if (!this.detailForm.dirty) {\n return;\n }\n const formValue = this.detailForm.value;\n this.entity$\n .pipe(\n take(1),\n mergeMap(channel => {\n const input = {\n id: channel.id,\n code: formValue.code,\n token: formValue.token,\n pricesIncludeTax: formValue.pricesIncludeTax,\n availableLanguageCodes: formValue.availableLanguageCodes,\n availableCurrencyCodes: formValue.availableCurrencyCodes,\n defaultCurrencyCode: formValue.defaultCurrencyCode,\n defaultShippingZoneId: formValue.defaultShippingZoneId,\n defaultLanguageCode: formValue.defaultLanguageCode,\n defaultTaxZoneId: formValue.defaultTaxZoneId,\n customFields: formValue.customFields,\n sellerId: formValue.sellerId,\n } as UpdateChannelInput;\n return this.dataService.settings.updateChannel(input);\n }),\n )\n .subscribe(({ updateChannel }) => {\n switch (updateChannel.__typename) {\n case 'Channel':\n this.notificationService.success(_('common.notify-update-success'), {\n entity: 'Channel',\n });\n this.detailForm.markAsPristine();\n this.changeDetector.markForCheck();\n break;\n case 'LanguageNotAvailableError':\n this.notificationService.error(updateChannel.message);\n }\n });\n }\n\n /**\n * Update the form values when the entity changes.\n */\n protected setFormValues(entity: ChannelFragment, languageCode: LanguageCode): void {\n this.detailForm.patchValue({\n code: entity.code,\n token: entity.token || this.generateToken(),\n pricesIncludeTax: entity.pricesIncludeTax,\n availableLanguageCodes: entity.availableLanguageCodes,\n availableCurrencyCodes: entity.availableCurrencyCodes,\n defaultCurrencyCode: entity.defaultCurrencyCode,\n defaultShippingZoneId: entity.defaultShippingZone?.id ?? '',\n defaultLanguageCode: entity.defaultLanguageCode,\n defaultTaxZoneId: entity.defaultTaxZone?.id ?? '',\n sellerId: entity.seller?.id ?? '',\n });\n if (this.customFields.length) {\n this.setCustomFieldFormValues(this.customFields, this.detailForm.get(['customFields']), entity);\n }\n if (entity.code === DEFAULT_CHANNEL_CODE) {\n const codeControl = this.detailForm.get('code');\n if (codeControl) {\n codeControl.disable();\n }\n }\n }\n\n private generateToken(): string {\n return Array.from(crypto.getRandomValues(new Uint8Array(10)))\n .map(b => b.toString(16).padStart(2, '0'))\n .join('');\n }\n}\n","import { createBulkDeleteAction, GetChannelsQuery, ItemOf, Permission } from '@deenruv/admin-ui/core';\nimport { map, mergeMap } from 'rxjs/operators';\n\nexport const deleteChannelsBulkAction = createBulkDeleteAction<ItemOf<GetChannelsQuery, 'channels'>>({\n location: 'channel-list',\n requiresPermission: userPermissions =>\n userPermissions.includes(Permission.SuperAdmin) || userPermissions.includes(Permission.DeleteChannel),\n getItemName: item => item.code,\n bulkDelete: (dataService, ids) => {\n return dataService.settings.deleteChannels(ids).pipe(\n mergeMap(({ deleteChannels }) =>\n dataService.auth.currentUser().single$.pipe(\n map(({ me }) => ({\n me,\n deleteChannels,\n })),\n ),\n ),\n mergeMap(({ me, deleteChannels }) =>\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n dataService.client.updateUserChannels(me!.channels).pipe(map(() => deleteChannels)),\n ),\n );\n },\n});\n","<vdr-page-block>\n <vdr-action-bar>\n <vdr-ab-left> </vdr-ab-left>\n <vdr-ab-right>\n <vdr-action-bar-items locationId=\"channel-list\" />\n <a class=\"btn btn-primary\" *vdrIfPermissions=\"['SuperAdmin', 'CreateChannel']\" [routerLink]=\"['./', 'create']\">\n <clr-icon shape=\"plus\"></clr-icon>\n {{ 'settings.create-new-channel' | translate }}\n </a>\n <vdr-action-bar-dropdown-menu locationId=\"channel-list\" />\n </vdr-ab-right>\n </vdr-action-bar>\n</vdr-page-block>\n<vdr-data-table-2\n class=\"mt-2\"\n id=\"channel-list\"\n [items]=\"items$ | async\"\n [itemsPerPage]=\"itemsPerPage$ | async\"\n [totalItems]=\"totalItems$ | async\"\n [currentPage]=\"currentPage$ | async\"\n [filters]=\"filters\"\n (pageChange)=\"setPageNumber($event)\"\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\n>\n <vdr-bulk-action-menu\n locationId=\"channel-list\"\n [hostComponent]=\"this\"\n [selectionManager]=\"selectionManager\"\n />\n <vdr-dt2-search\n [searchTermControl]=\"searchTermControl\"\n [searchTermPlaceholder]=\"'catalog.filter-by-name' | translate\"\n />\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\n <ng-template let-channel=\"item\">\n {{ channel.id }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column\n [heading]=\"'common.created-at' | translate\" id=\"created-at\"\n [hiddenByDefault]=\"true\"\n [sort]=\"sorts.get('createdAt')\"\n >\n <ng-template let-channel=\"item\">\n {{ channel.createdAt | localeDate : 'short' }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column\n [heading]=\"'common.updated-at' | translate\" id=\"updated-at\"\n [hiddenByDefault]=\"true\"\n [sort]=\"sorts.get('updatedAt')\"\n >\n <ng-template let-channel=\"item\">\n {{ channel.updatedAt | localeDate : 'short' }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'common.code' | translate\" id=\"code\" [optional]=\"false\" [sort]=\"sorts.get('code')\">\n <ng-template let-channel=\"item\">\n <a class=\"button-ghost\" [routerLink]=\"['./', channel.id]\"\n ><span>{{ channel.code | channelCodeToLabel | translate }}</span>\n <clr-icon shape=\"arrow right\"></clr-icon>\n </a>\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'settings.channel-token' | translate\" id=\"channel-token\" [sort]=\"sorts.get('token')\">\n <ng-template let-channel=\"item\">\n {{ channel.token }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-custom-field-column *ngFor=\"let customField of customFields\" [customField]=\"customField\" [sorts]=\"sorts\" />\n</vdr-data-table-2>\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport { CHANNEL_FRAGMENT, GetChannelListDocument, TypedBaseListComponent } from '@deenruv/admin-ui/core';\nimport { DEFAULT_CHANNEL_CODE } from '@deenruv/common/lib/shared-constants';\nimport { gql } from 'apollo-angular';\n\nexport const GET_CHANNEL_LIST = gql`\n query GetChannelList($options: ChannelListOptions) {\n channels(options: $options) {\n items {\n ...Channel\n }\n totalItems\n }\n }\n ${CHANNEL_FRAGMENT}\n`;\n\n@Component({\n selector: 'vdr-channel-list',\n templateUrl: './channel-list.component.html',\n styleUrls: ['./channel-list.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ChannelListComponent\n extends TypedBaseListComponent<typeof GetChannelListDocument, 'channels'>\n implements OnInit\n{\n readonly customFields = this.getCustomFieldConfig('Channel');\n readonly filters = this.createFilterCollection()\n .addIdFilter()\n .addDateFilters()\n .addFilter({\n name: 'code',\n type: { kind: 'text' },\n label: _('common.code'),\n filterField: 'code',\n })\n .addFilter({\n name: 'token',\n type: { kind: 'text' },\n label: _('settings.channel-token'),\n filterField: 'token',\n })\n .addCustomFieldFilters(this.customFields)\n .connectToRoute(this.route);\n\n readonly sorts = this.createSortCollection()\n .defaultSort('createdAt', 'DESC')\n .addSort({ name: 'createdAt' })\n .addSort({ name: 'updatedAt' })\n .addSort({ name: 'code' })\n .addSort({ name: 'token' })\n .addCustomFieldSorts(this.customFields)\n .connectToRoute(this.route);\n\n constructor() {\n super();\n super.configure({\n document: GetChannelListDocument,\n getItems: data => data.channels,\n setVariables: (skip, take) => ({\n options: {\n skip,\n take,\n filter: {\n code: {\n contains: this.searchTermControl.value,\n },\n ...this.filters.createFilterInput(),\n },\n sort: this.sorts.createSortInput(),\n },\n }),\n refreshListOnChanges: [this.filters.valueChanges, this.sorts.valueChanges],\n });\n }\n\n isDefaultChannel(channelCode: string): boolean {\n return channelCode === DEFAULT_CHANNEL_CODE;\n }\n}\n","<vdr-page-block\n ><vdr-action-bar>\n <vdr-ab-left>\n <vdr-language-selector\n [disabled]=\"isNew$ | async\"\n [availableLanguageCodes]=\"availableLanguages$ | async\"\n [currentLanguageCode]=\"languageCode$ | async\"\n (languageCodeChange)=\"setLanguage($event)\"\n />\n </vdr-ab-left>\n <vdr-ab-right>\n <vdr-action-bar-items locationId=\"country-detail\" />\n <button\n class=\"btn btn-primary\"\n *ngIf=\"isNew$ | async; else updateButton\"\n (click)=\"create()\"\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\n >\n {{ 'common.create' | translate }}\n </button>\n <ng-template #updateButton>\n <button\n class=\"btn btn-primary\"\n *vdrIfPermissions=\"updatePermission\"\n (click)=\"save()\"\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\n >\n {{ 'common.update' | translate }}\n </button>\n </ng-template>\n <vdr-action-bar-dropdown-menu locationId=\"country-detail\" />\n </vdr-ab-right>\n </vdr-action-bar>\n</vdr-page-block>\n\n<form class=\"form\" [formGroup]=\"detailForm\">\n <vdr-page-detail-layout>\n <vdr-page-detail-sidebar>\n <vdr-card>\n <vdr-form-field [label]=\"'common.enabled' | translate\" for=\"enabled\">\n <clr-toggle-wrapper>\n <input\n type=\"checkbox\"\n clrToggle\n id=\"enabled\"\n formControlName=\"enabled\"\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\n />\n </clr-toggle-wrapper>\n </vdr-form-field>\n </vdr-card>\n <vdr-card *ngIf=\"entity$ | async as entity\">\n <vdr-page-entity-info [entity]=\"entity\" />\n </vdr-card>\n </vdr-page-detail-sidebar>\n <vdr-page-block>\n <vdr-card>\n <div class=\"form-grid\">\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\n <input\n id=\"name\"\n type=\"text\"\n formControlName=\"name\"\n [readonly]=\"!(updatePermission | hasPermission)\"\n />\n </vdr-form-field>\n <vdr-form-field [label]=\"'common.code' | translate\" for=\"code\">\n <input\n id=\"code\"\n type=\"text\"\n formControlName=\"code\"\n [readonly]=\"!(updatePermission | hasPermission)\"\n />\n </vdr-form-field>\n </div>\n </vdr-card>\n <vdr-card\n formGroupName=\"customFields\"\n *ngIf=\"customFields.length\"\n [title]=\"'common.custom-fields' | translate\"\n >\n <vdr-tabbed-custom-fields\n entityName=\"Region\"\n [customFields]=\"customFields\"\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\n ></vdr-tabbed-custom-fields>\n </vdr-card>\n <vdr-custom-detail-component-host\n locationId=\"country-detail\"\n [entity$]=\"entity$\"\n [detailForm]=\"detailForm\"\n ></vdr-custom-detail-component-host>\n </vdr-page-block>\n </vdr-page-detail-layout>\n</form>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { FormBuilder, Validators } from '@angular/forms';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n COUNTRY_FRAGMENT,\n CountryFragment,\n createUpdatedTranslatable,\n DataService,\n findTranslation,\n GetCountryDetailDocument,\n getCustomFieldsDefaults,\n LanguageCode,\n NotificationService,\n Permission,\n TypedBaseDetailComponent,\n UpdateCountryInput,\n} from '@deenruv/admin-ui/core';\nimport { gql } from 'apollo-angular';\nimport { combineLatest } from 'rxjs';\nimport { mergeMap, take } from 'rxjs/operators';\n\nexport const GET_COUNTRY_DETAIL = gql`\n query GetCountryDetail($id: ID!) {\n country(id: $id) {\n ...Country\n }\n }\n ${COUNTRY_FRAGMENT}\n`;\n\n@Component({\n selector: 'vdr-country-detail',\n templateUrl: './country-detail.component.html',\n styleUrls: ['./country-detail.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CountryDetailComponent\n extends TypedBaseDetailComponent<typeof GetCountryDetailDocument, 'country'>\n implements OnInit, OnDestroy\n{\n customFields = this.getCustomFieldConfig('Region');\n detailForm = this.formBuilder.group({\n code: ['', Validators.required],\n name: ['', Validators.required],\n enabled: [true],\n customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),\n });\n readonly updatePermission = [Permission.UpdateSettings, Permission.UpdateCountry];\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 }\n\n ngOnDestroy(): void {\n this.destroy();\n }\n\n create() {\n if (!this.detailForm.dirty) {\n return;\n }\n\n const formValue = this.detailForm.value;\n const input = createUpdatedTranslatable({\n translatable: {\n id: '',\n createdAt: '',\n updatedAt: '',\n code: '',\n name: '',\n enabled: false,\n translations: [],\n } as CountryFragment,\n updatedFields: formValue,\n languageCode: this.languageCode,\n customFieldConfig: this.customFields,\n defaultTranslation: {\n name: formValue.name ?? '',\n languageCode: this.languageCode,\n },\n });\n this.dataService.settings.createCountry(input).subscribe(\n data => {\n this.notificationService.success(_('common.notify-create-success'), {\n entity: 'Country',\n });\n this.detailForm.markAsPristine();\n this.changeDetector.markForCheck();\n this.router.navigate(['../', data.createCountry.id], { relativeTo: this.route });\n },\n err => {\n this.notificationService.error(_('common.notify-create-error'), {\n entity: 'Country',\n });\n },\n );\n }\n\n save() {\n combineLatest(this.entity$, this.languageCode$)\n .pipe(\n take(1),\n mergeMap(([country, languageCode]) => {\n const formValue = this.detailForm.value;\n const input: UpdateCountryInput = createUpdatedTranslatable({\n translatable: country,\n updatedFields: formValue,\n customFieldConfig: this.customFields,\n languageCode,\n defaultTranslation: {\n name: formValue.name ?? '',\n languageCode,\n },\n });\n return this.dataService.settings.updateCountry(input);\n }),\n )\n .subscribe(\n data => {\n this.notificationService.success(_('common.notify-update-success'), {\n entity: 'Country',\n });\n this.detailForm.markAsPristine();\n this.changeDetector.markForCheck();\n },\n err => {\n this.notificationService.error(_('common.notify-update-error'), {\n entity: 'Country',\n });\n },\n );\n }\n\n protected setFormValues(country: CountryFragment, languageCode: LanguageCode): void {\n const currentTranslation = findTranslation(country, languageCode);\n\n this.detailForm.patchValue({\n code: country.code,\n name: currentTranslation ? currentTranslation.name : '',\n enabled: country.enabled,\n });\n\n if (this.customFields.length) {\n this.setCustomFieldFormValues(\n this.customFields,\n this.detailForm.get(['customFields']),\n country,\n currentTranslation,\n );\n }\n }\n}\n","import { createBulkDeleteAction, GetCountryListQuery, ItemOf, Permission } from '@deenruv/admin-ui/core';\nimport { map } from 'rxjs/operators';\n\nexport const deleteCountriesBulkAction = createBulkDeleteAction<ItemOf<GetCountryListQuery, 'countries'>>({\n location: 'country-list',\n requiresPermission: userPermissions =>\n userPermissions.includes(Permission.DeleteSettings) ||\n userPermissions.includes(Permission.DeleteCountry),\n getItemName: item => item.name,\n bulkDelete: (dataService, ids) =>\n dataService.settings.deleteCountries(ids).pipe(map(res => res.deleteCountries)),\n});\n","<vdr-page-block>\n <vdr-action-bar>\n <vdr-ab-left>\n <vdr-language-selector\n [availableLanguageCodes]=\"availableLanguages$ | async\"\n [currentLanguageCode]=\"contentLanguage$ | async\"\n (languageCodeChange)=\"setLanguage($event)\"\n />\n </vdr-ab-left>\n <vdr-ab-right>\n <vdr-action-bar-items locationId=\"country-list\" />\n <a\n class=\"btn btn-primary\"\n *vdrIfPermissions=\"['CreateSettings', 'CreateCountry']\"\n [routerLink]=\"['./', 'create']\"\n >\n <clr-icon shape=\"plus\"></clr-icon>\n {{ 'settings.create-new-country' | translate }}\n </a>\n <vdr-action-bar-dropdown-menu locationId=\"country-list\" />\n </vdr-ab-right>\n </vdr-action-bar>\n</vdr-page-block>\n<vdr-data-table-2\n class=\"mt-2\"\n id=\"country-list\"\n [items]=\"items$ | async\"\n [itemsPerPage]=\"itemsPerPage$ | async\"\n [totalItems]=\"totalItems$ | async\"\n [currentPage]=\"currentPage$ | async\"\n [filters]=\"filters\"\n (pageChange)=\"setPageNumber($event)\"\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\n>\n <vdr-bulk-action-menu\n locationId=\"country-list\"\n [hostComponent]=\"this\"\n [selectionManager]=\"selectionManager\"\n />\n <vdr-dt2-search\n [searchTermControl]=\"searchTermControl\"\n [searchTermPlaceholder]=\"'catalog.filter-by-name' | translate\"\n />\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\n <ng-template let-country=\"item\">\n {{ country.id }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column\n [heading]=\"'common.created-at' | translate\"\n id=\"created-at\"\n [hiddenByDefault]=\"true\"\n [sort]=\"sorts.get('createdAt')\"\n >\n <ng-template let-country=\"item\">\n {{ country.createdAt | localeDate : 'short' }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column\n [heading]=\"'common.updated-at' | translate\"\n id=\"updated-at\"\n [hiddenByDefault]=\"true\"\n [sort]=\"sorts.get('updatedAt')\"\n >\n <ng-template let-country=\"item\">\n {{ country.updatedAt | localeDate : 'short' }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column\n [heading]=\"'common.name' | translate\"\n id=\"name\"\n [optional]=\"false\"\n [sort]=\"sorts.get('name')\"\n >\n <ng-template let-country=\"item\">\n <a class=\"button-ghost\" [routerLink]=\"['./', country.id]\"\n ><span>{{ country.name }}</span>\n <clr-icon shape=\"arrow right\"></clr-icon>\n </a>\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'common.code' | translate\" id=\"code\" [sort]=\"sorts.get('code')\">\n <ng-template let-country=\"item\">\n {{ country.code }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'common.enabled' | translate\" id=\"enabled\">\n <ng-template let-country=\"item\">\n <vdr-chip *ngIf=\"country.enabled\" colorType=\"success\">{{\n 'common.enabled' | translate\n }}</vdr-chip>\n <vdr-chip *ngIf=\"!country.enabled\" colorType=\"warning\">{{\n 'common.disabled' | translate\n }}</vdr-chip>\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-custom-field-column\n *ngFor=\"let customField of customFields\"\n [customField]=\"customField\"\n [sorts]=\"sorts\"\n />\n</vdr-data-table-2>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport { GetCountryListDocument, TypedBaseListComponent } from '@deenruv/admin-ui/core';\nimport { gql } from 'apollo-angular';\n\nexport const GET_COUNTRY_LIST = gql`\n query GetCountryList($options: CountryListOptions) {\n countries(options: $options) {\n items {\n ...CountryListItem\n }\n totalItems\n }\n }\n fragment CountryListItem on Country {\n id\n createdAt\n updatedAt\n code\n name\n type\n enabled\n }\n`;\n\n@Component({\n selector: 'vdr-country-list',\n templateUrl: './country-list.component.html',\n styleUrls: ['./country-list.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CountryListComponent extends TypedBaseListComponent<typeof GetCountryListDocument, 'countries'> {\n readonly customFields = this.getCustomFieldConfig('Region');\n readonly filters = this.createFilterCollection()\n .addIdFilter()\n .addDateFilters()\n .addFilter({\n name: 'name',\n type: { kind: 'text' },\n label: _('common.name'),\n filterField: 'name',\n })\n .addFilter({\n name: 'code',\n type: { kind: 'text' },\n label: _('common.code'),\n filterField: 'code',\n })\n .addFilter({\n name: 'enabled',\n type: { kind: 'boolean' },\n label: _('common.enabled'),\n filterField: 'enabled',\n })\n .addCustomFieldFilters(this.customFields)\n .connectToRoute(this.route);\n\n readonly sorts = this.createSortCollection()\n .defaultSort('name', 'ASC')\n .addSort({ name: 'createdAt' })\n .addSort({ name: 'updatedAt' })\n .addSort({ name: 'name' })\n .addSort({ name: 'code' })\n .addCustomFieldSorts(this.customFields)\n .connectToRoute(this.route);\n\n constructor() {\n super();\n super.configure({\n document: GetCountryListDocument,\n getItems: data => data.countries,\n setVariables: (skip, take) => ({\n options: {\n skip,\n take,\n filter: {\n name: {\n contains: this.searchTermControl.value,\n },\n ...this.filters.createFilterInput(),\n },\n sort: this.sorts.createSortInput(),\n },\n }),\n refreshListOnChanges: [this.filters.valueChanges, this.sorts.valueChanges],\n });\n }\n}\n","<vdr-page-block>\n <vdr-action-bar>\n <vdr-ab-right>\n <vdr-action-bar-items locationId=\"global-setting-detail\" />\n <button\n class=\"btn btn-primary\"\n (click)=\"save()\"\n *vdrIfPermissions=\"updatePermission\"\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\n >\n {{ 'common.update' | translate }}\n </button>\n <vdr-action-bar-dropdown-menu locationId=\"global-setting-detail\" />\n </vdr-ab-right>\n </vdr-action-bar>\n</vdr-page-block>\n\n<form class=\"form\" [formGroup]=\"detailForm\">\n <vdr-page-block>\n <vdr-card>\n <div class=\"form-grid\">\n <vdr-form-field\n [label]=\"'common.available-languages' | translate\"\n for=\"availableLanguages\"\n [tooltip]=\"'settings.global-available-languages-tooltip' | translate\"\n >\n <vdr-language-code-selector\n formControlName=\"availableLanguages\"\n [languageCodes]=\"languageCodes\"\n ></vdr-language-code-selector>\n </vdr-form-field>\n <vdr-form-field\n [label]=\"'settings.global-out-of-stock-threshold' | translate\"\n for=\"outOfStockThreshold\"\n [tooltip]=\"'settings.global-out-of-stock-threshold-tooltip' | translate\"\n >\n <input\n id=\"outOfStockThreshold\"\n type=\"number\"\n formControlName=\"outOfStockThreshold\"\n [readonly]=\"!(updatePermission | hasPermission)\"\n />\n </vdr-form-field>\n <vdr-form-field\n [label]=\"'settings.track-inventory-default' | translate\"\n for=\"enabled\"\n [tooltip]=\"'catalog.track-inventory-tooltip' | translate\"\n >\n <clr-toggle-wrapper>\n <input\n type=\"checkbox\"\n clrToggle\n name=\"enabled\"\n formControlName=\"trackInventory\"\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\n />\n </clr-toggle-wrapper>\n </vdr-form-field>\n </div>\n </vdr-card>\n <vdr-card\n formGroupName=\"customFields\"\n *ngIf=\"customFields.length\"\n [title]=\"'common.custom-fields' | translate\"\n >\n <vdr-tabbed-custom-fields\n entityName=\"GlobalSettings\"\n [customFields]=\"customFields\"\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\n [readonly]=\"!(updatePermission | hasPermission)\"\n ></vdr-tabbed-custom-fields>\n </vdr-card>\n\n <vdr-custom-detail-component-host\n locationId=\"global-settings-detail\"\n [entity$]=\"entity$\"\n [detailForm]=\"detailForm\"\n ></vdr-custom-detail-component-host>\n </vdr-page-block>\n</form>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { FormBuilder, Validators } from '@angular/forms';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n DataService,\n getCustomFieldsDefaults,\n GetGlobalSettingsDetailDocument,\n GlobalSettings,\n LanguageCode,\n NotificationService,\n Permission,\n TypedBaseDetailComponent,\n} from '@deenruv/admin-ui/core';\nimport { gql } from 'apollo-angular';\nimport { switchMap, tap, withLatestFrom } from 'rxjs/operators';\n\nexport const GET_GLOBAL_SETTINGS_DETAIL = gql`\n query GetGlobalSettingsDetail {\n globalSettings {\n ...GlobalSettingsDetail\n }\n }\n fragment GlobalSettingsDetail on GlobalSettings {\n id\n createdAt\n updatedAt\n availableLanguages\n trackInventory\n outOfStockThreshold\n }\n`;\n\n@Component({\n selector: 'vdr-global-settings',\n templateUrl: './global-settings.component.html',\n styleUrls: ['./global-settings.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GlobalSettingsComponent\n extends TypedBaseDetailComponent<typeof GetGlobalSettingsDetailDocument, 'globalSettings'>\n implements OnInit, OnDestroy\n{\n customFields = this.getCustomFieldConfig('GlobalSettings');\n detailForm = this.formBuilder.group({\n availableLanguages: [[] as LanguageCode[]],\n trackInventory: false,\n outOfStockThreshold: [0, Validators.required],\n customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),\n });\n languageCodes = Object.values(LanguageCode);\n readonly updatePermission = [Permission.UpdateSettings, Permission.UpdateGlobalSettings];\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(): void {\n this.init();\n this.dataService.client.userStatus().single$.subscribe(({ userStatus }) => {\n if (!userStatus.permissions.includes(Permission.UpdateSettings)) {\n const languagesSelect = this.detailForm.get('availableLanguages');\n if (languagesSelect) {\n languagesSelect.disable();\n }\n }\n });\n }\n\n ngOnDestroy() {\n this.destroy();\n }\n\n save() {\n if (!this.detailForm.dirty) {\n return;\n }\n\n this.dataService.settings\n .updateGlobalSettings(this.detailForm.value)\n .pipe(\n tap(({ updateGlobalSettings }) => {\n switch (updateGlobalSettings.__typename) {\n case 'GlobalSettings':\n this.detailForm.markAsPristine();\n this.changeDetector.markForCheck();\n this.notificationService.success(_('common.notify-update-success'), {\n entity: 'Settings',\n });\n break;\n case 'ChannelDefaultLanguageError':\n this.notificationService.error(updateGlobalSettings.message);\n }\n }),\n switchMap(() => this.serverConfigService.refreshGlobalSettings()),\n withLatestFrom(this.dataService.client.uiState().single$),\n )\n .subscribe(([{ globalSettings }, { uiState }]) => {\n const availableLangs = globalSettings.availableLanguages;\n if (availableLangs.length && !availableLangs.includes(uiState.contentLanguage)) {\n this.dataService.client.setContentLanguage(availableLangs[0]).subscribe();\n }\n });\n }\n\n protected setFormValues(entity: GlobalSettings, languageCode: LanguageCode): void {\n this.detailForm.patchValue({\n availableLanguages: entity.availableLanguages,\n trackInventory: entity.trackInventory,\n outOfStockThreshold: entity.outOfStockThreshold,\n });\n if (this.customFields.length) {\n this.setCustomFieldFormValues(this.customFields, this.detailForm.get('customFields'), entity);\n }\n }\n}\n","<vdr-page-block\n ><vdr-action-bar>\n <vdr-ab-left>\n <vdr-language-selector\n [disabled]=\"isNew$ | async\"\n [availableLanguageCodes]=\"availableLanguages$ | async\"\n [currentLanguageCode]=\"languageCode$ | async\"\n (languageCodeChange)=\"setLanguage($event)\"\n />\n </vdr-ab-left>\n\n <vdr-ab-right>\n <vdr-action-bar-items locationId=\"payment-method-detail\" />\n <button\n class=\"btn btn-primary\"\n *ngIf=\"isNew$ | async; else updateButton\"\n [disabled]=\"detailForm.pristine || detailForm.invalid || !selectedHandler\"\n (click)=\"create()\"\n >\n {{ 'common.create' | translate }}\n </button>\n <ng-template #updateButton>\n <button\n *vdrIfPermissions=\"updatePermission\"\n class=\"btn btn-primary\"\n (click)=\"save()\"\n [disabled]=\"detailForm.pristine || detailForm.invalid || !selectedHandler\"\n >\n {{ 'common.update' | translate }}\n </button>\n </ng-template>\n <vdr-action-bar-dropdown-menu locationId=\"payment-method-detail\" />\n </vdr-ab-right>\n </vdr-action-bar>\n</vdr-page-block>\n\n<form class=\"form\" [formGroup]=\"detailForm\">\n <vdr-page-detail-layout>\n <vdr-page-detail-sidebar>\n <vdr-card>\n <vdr-form-field [label]=\"'common.enabled' | translate\" for=\"description\">\n <clr-toggle-wrapper>\n <input\n type=\"checkbox\"\n clrToggle\n id=\"enabled\"\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\n formControlName=\"enabled\"\n />\n </clr-toggle-wrapper>\n </vdr-form-field>\n </vdr-card>\n <vdr-card *ngIf=\"entity$ | async as entity\">\n <vdr-page-entity-info [entity]=\"entity\" />\n </vdr-card>\n </vdr-page-detail-sidebar>\n <vdr-page-block>\n <vdr-card>\n <div class=\"form-grid\">\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\n <input\n id=\"name\"\n type=\"text\"\n formControlName=\"name\"\n [readonly]=\"!(updatePermission | hasPermission)\"\n (input)=\"updateCode(entity?.code, $event.target.value)\"\n />\n </vdr-form-field>\n <vdr-form-field\n [label]=\"'common.code' | translate\"\n for=\"code\"\n [readOnlyToggle]=\"updatePermission | hasPermission\"\n >\n <input\n id=\"code\"\n type=\"text\"\n formControlName=\"code\"\n [readonly]=\"!(updatePermission | hasPermission)\"\n />\n </vdr-form-field>\n <vdr-rich-text-editor\n class=\"form-grid-span\"\n formControlName=\"description\"\n [readonly]=\"!(updatePermission | hasPermission)\"\n [label]=\"'common.description' | translate\"\n ></vdr-rich-text-editor>\n </div>\n </vdr-card>\n\n <vdr-card\n formGroupName=\"customFields\"\n *ngIf=\"customFields.length\"\n [title]=\"'common.custom-fields' | translate\"\n >\n <vdr-tabbed-custom-fields\n entityName=\"PaymentMethod\"\n [customFields]=\"customFields\"\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\n ></vdr-tabbed-custom-fields>\n </vdr-card>\n\n <vdr-custom-detail-component-host\n locationId=\"payment-method-detail\"\n [entity$]=\"entity$\"\n [detailForm]=\"detailForm\"\n ></vdr-custom-detail-component-host>\n\n <vdr-card [title]=\"'settings.payment-eligibility-checker' | translate\">\n <vdr-configurable-input\n *ngIf=\"selectedChecker && selectedCheckerDefinition\"\n [operation]=\"selectedChecker\"\n [operationDefinition]=\"selectedCheckerDefinition\"\n [readonly]=\"!(updatePermission | hasPermission)\"\n (remove)=\"removeChecker()\"\n formControlName=\"checker\"\n ></vdr-configurable-input>\n <div *ngIf=\"!selectedChecker || !selectedCheckerDefinition\">\n <vdr-dropdown>\n <button class=\"btn btn-outline\" vdrDropdownTrigger>\n <clr-icon shape=\"plus\"></clr-icon>\n {{ 'common.select' | translate }}\n </button>\n <vdr-dropdown-menu vdrPosition=\"bottom-left\">\n <button\n *ngFor=\"let checker of checkers\"\n type=\"button\"\n vdrDropdownItem\n (click)=\"selectChecker(checker)\"\n >\n {{ checker.description }}\n </button>\n </vdr-dropdown-menu>\n </vdr-dropdown>\n </div>\n </vdr-card>\n <vdr-card [title]=\"'settings.payment-handler' | translate\">\n <vdr-configurable-input\n *ngIf=\"selectedHandler && selectedHandlerDefinition\"\n [operation]=\"selectedHandler\"\n [operationDefinition]=\"selectedHandlerDefinition\"\n [readonly]=\"!(updatePermission | hasPermission)\"\n (remove)=\"removeHandler()\"\n formControlName=\"handler\"\n ></vdr-configurable-input>\n <div *ngIf=\"!selectedHandler || !selectedHandlerDefinition\">\n <vdr-dropdown>\n <button class=\"btn btn-outline\" vdrDropdownTrigger>\n <clr-icon shape=\"plus\"></clr-icon>\n {{ 'common.select' | translate }}\n </button>\n <vdr-dropdown-menu vdrPosition=\"bottom-left\">\n <button\n *ngFor=\"let handler of handlers\"\n type=\"button\"\n vdrDropdownItem\n (click)=\"selectHandler(handler)\"\n >\n {{ handler.description }}\n </button>\n </vdr-dropdown-menu>\n </vdr-dropdown>\n </div>\n </vdr-card>\n </vdr-page-block>\n </vdr-page-detail-layout>\n</form>\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 '@deenruv/admin-ui/core';\nimport { normalizeString } from '@deenruv/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 {\n createBulkAssignToChannelAction,\n AssignPaymentMethodsToChannelDocument,\n RemovePaymentMethodsFromChannelDocument,\n createBulkDeleteAction,\n createBulkRemoveFromChannelAction,\n GetPaymentMethodListQuery,\n ItemOf,\n Permission,\n} from '@deenruv/admin-ui/core';\nimport { gql } from 'apollo-angular';\nimport { map } from 'rxjs/operators';\n\nexport const deletePaymentMethodsBulkAction = createBulkDeleteAction<\n ItemOf<GetPaymentMethodListQuery, 'paymentMethods'>\n>({\n location: 'payment-method-list',\n requiresPermission: userPermissions =>\n userPermissions.includes(Permission.DeletePaymentMethod) ||\n userPermissions.includes(Permission.DeleteSettings),\n getItemName: item => item.name,\n shouldRetryItem: (response, item) => !!response.message,\n bulkDelete: (dataService, ids, retrying) =>\n dataService.settings.deletePaymentMethods(ids, retrying).pipe(map(res => res.deletePaymentMethods)),\n});\n\nconst ASSIGN_PAYMENT_METHODS_TO_CHANNEL = gql`\n mutation AssignPaymentMethodsToChannel($input: AssignPaymentMethodsToChannelInput!) {\n assignPaymentMethodsToChannel(input: $input) {\n id\n name\n }\n }\n`;\n\nconst REMOVE_PAYMENT_METHODS_FROM_CHANNEL = gql`\n mutation RemovePaymentMethodsFromChannel($input: RemovePaymentMethodsFromChannelInput!) {\n removePaymentMethodsFromChannel(input: $input) {\n id\n name\n }\n }\n`;\nexport const assignPaymentMethodsToChannelBulkAction = createBulkAssignToChannelAction<\n ItemOf<GetPaymentMethodListQuery, 'paymentMethods'>\n>({\n location: 'payment-method-list',\n requiresPermission: userPermissions =>\n userPermissions.includes(Permission.UpdatePaymentMethod) ||\n userPermissions.includes(Permission.UpdateSettings),\n getItemName: item => item.name,\n bulkAssignToChannel: (dataService, paymentMethodIds, channelIds) =>\n channelIds.map(channelId =>\n dataService\n .mutate(AssignPaymentMethodsToChannelDocument, {\n input: {\n channelId,\n paymentMethodIds,\n },\n })\n .pipe(map(res => res.assignPaymentMethodsToChannel)),\n ),\n});\n\nexport const removePaymentMethodsFromChannelBulkAction = createBulkRemoveFromChannelAction<\n ItemOf<GetPaymentMethodListQuery, 'paymentMethods'>\n>({\n location: 'payment-method-list',\n requiresPermission: userPermissions =>\n userPermissions.includes(Permission.DeletePaymentMethod) ||\n userPermissions.includes(Permission.DeleteSettings),\n getItemName: item => item.name,\n bulkRemoveFromChannel: (dataService, paymentMethodIds, channelId) =>\n dataService\n .mutate(RemovePaymentMethodsFromChannelDocument, {\n input: {\n channelId,\n paymentMethodIds,\n },\n })\n .pipe(map(res => res.removePaymentMethodsFromChannel)),\n});\n","<vdr-page-block>\n <vdr-action-bar>\n <vdr-ab-left>\n <vdr-language-selector\n [availableLanguageCodes]=\"availableLanguages$ | async\"\n [currentLanguageCode]=\"contentLanguage$ | async\"\n (languageCodeChange)=\"setLanguage($event)\"\n />\n </vdr-ab-left>\n <vdr-ab-right>\n <vdr-action-bar-items locationId=\"payment-method-list\" />\n <a\n class=\"btn btn-primary\"\n *vdrIfPermissions=\"['CreateSettings', 'CreatePaymentMethod']\"\n [routerLink]=\"['./', 'create']\"\n >\n <clr-icon shape=\"plus\"></clr-icon>\n {{ 'settings.create-new-payment-method' | translate }}\n </a>\n <vdr-action-bar-dropdown-menu locationId=\"payment-method-list\" />\n </vdr-ab-right>\n </vdr-action-bar>\n</vdr-page-block>\n<vdr-data-table-2\n id=\"payment-method-list\"\n [items]=\"items$ | async\"\n [itemsPerPage]=\"itemsPerPage$ | async\"\n [totalItems]=\"totalItems$ | async\"\n [currentPage]=\"currentPage$ | async\"\n [filters]=\"filters\"\n (pageChange)=\"setPageNumber($event)\"\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\n>\n <vdr-bulk-action-menu\n locationId=\"payment-method-list\"\n [hostComponent]=\"this\"\n [selectionManager]=\"selectionManager\"\n ></vdr-bulk-action-menu>\n <vdr-dt2-search\n [searchTermControl]=\"searchTermControl\"\n [searchTermPlaceholder]=\"'catalog.filter-by-name' | translate\"\n ></vdr-dt2-search>\n <vdr-dt2-column\n [heading]=\"'common.id' | translate\"\n id=\"id\"\n [hiddenByDefault]=\"true\"\n [sort]=\"sorts.get('id')\"\n >\n <ng-template let-paymentMethod=\"item\">\n {{ paymentMethod.id }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column\n [heading]=\"'common.created-at' | translate\"\n id=\"created-at\"\n [hiddenByDefault]=\"true\"\n [sort]=\"sorts.get('createdAt')\"\n >\n <ng-template let-paymentMethod=\"item\">\n {{ paymentMethod.createdAt | localeDate : 'short' }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column\n [heading]=\"'common.updated-at' | translate\"\n id=\"updated-at\"\n [hiddenByDefault]=\"true\"\n [sort]=\"sorts.get('updatedAt')\"\n >\n <ng-template let-paymentMethod=\"item\">\n {{ paymentMethod.updatedAt | localeDate : 'short' }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column\n [heading]=\"'common.name' | translate\"\n id=\"name\"\n [optional]=\"false\"\n [sort]=\"sorts.get('name')\"\n >\n <ng-template let-paymentMethod=\"item\">\n <a class=\"button-ghost\" [routerLink]=\"['./', paymentMethod.id]\"\n ><span>{{ paymentMethod.name }}</span>\n <clr-icon shape=\"arrow right\"></clr-icon>\n </a>\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'common.code' | translate\" id=\"code\" [sort]=\"sorts.get('code')\">\n <ng-template let-paymentMethod=\"item\">\n {{ paymentMethod.code }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'common.enabled' | translate\" id=\"enabled\">\n <ng-template let-paymentMethod=\"item\">\n <vdr-chip *ngIf=\"paymentMethod.enabled\" colorType=\"success\">{{\n 'common.enabled' | translate\n }}</vdr-chip>\n <vdr-chip *ngIf=\"!paymentMethod.enabled\" colorType=\"warning\">{{\n 'common.disabled' | translate\n }}</vdr-chip>\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-custom-field-column\n *ngFor=\"let customField of customFields\"\n [customField]=\"customField\"\n [sorts]=\"sorts\"\n />\n</vdr-data-table-2>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport { GetPaymentMethodListDocument, TypedBaseListComponent } from '@deenruv/admin-ui/core';\nimport { gql } from 'apollo-angular';\n\nexport const GET_PAYMENT_METHOD_LIST = gql`\n query GetPaymentMethodList($options: PaymentMethodListOptions!) {\n paymentMethods(options: $options) {\n items {\n ...PaymentMethodListItem\n }\n totalItems\n }\n }\n fragment PaymentMethodListItem on PaymentMethod {\n id\n createdAt\n updatedAt\n name\n description\n code\n enabled\n }\n`;\n\n@Component({\n selector: 'vdr-payment-method-list',\n templateUrl: './payment-method-list.component.html',\n styleUrls: ['./payment-method-list.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PaymentMethodListComponent extends TypedBaseListComponent<\n typeof GetPaymentMethodListDocument,\n 'paymentMethods'\n> {\n readonly customFields = this.getCustomFieldConfig('PaymentMethod');\n readonly filters = this.createFilterCollection()\n .addIdFilter()\n .addDateFilters()\n .addFilter({\n name: 'name',\n type: { kind: 'text' },\n label: _('common.name'),\n filterField: 'name',\n })\n .addFilter({\n name: 'code',\n type: { kind: 'text' },\n label: _('common.code'),\n filterField: 'code',\n })\n .addFilter({\n name: 'enabled',\n type: { kind: 'boolean' },\n label: _('common.enabled'),\n filterField: 'enabled',\n })\n .addFilter({\n name: 'description',\n type: { kind: 'text' },\n label: _('common.description'),\n filterField: 'description',\n })\n .addCustomFieldFilters(this.customFields)\n .connectToRoute(this.route);\n\n readonly sorts = this.createSortCollection()\n .defaultSort('createdAt', 'DESC')\n .addSort({ name: 'id' })\n .addSort({ name: 'createdAt' })\n .addSort({ name: 'updatedAt' })\n .addSort({ name: 'name' })\n .addSort({ name: 'code' })\n .addSort({ name: 'description' })\n .addCustomFieldSorts(this.customFields)\n .connectToRoute(this.route);\n\n constructor() {\n super();\n super.configure({\n document: GetPaymentMethodListDocument,\n getItems: data => data.paymentMethods,\n setVariables: (skip, take) => ({\n options: {\n skip,\n take,\n filter: {\n name: {\n contains: this.searchTermControl.value,\n },\n ...this.filters.createFilterInput(),\n },\n sort: this.sorts.createSortInput(),\n },\n }),\n refreshListOnChanges: [this.filters.valueChanges, this.sorts.valueChanges],\n });\n }\n}\n","<vdr-page-block>\n <vdr-action-bar>\n <vdr-ab-left></vdr-ab-left>\n <vdr-ab-right>\n <vdr-action-bar-items locationId=\"profile\"></vdr-action-bar-items>\n <button\n class=\"btn btn-primary\"\n (click)=\"save()\"\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\n >\n {{ 'common.update' | translate }}\n </button>\n </vdr-ab-right>\n </vdr-action-bar>\n</vdr-page-block>\n\n<form class=\"form\" [formGroup]=\"detailForm\">\n <vdr-page-detail-layout>\n <vdr-page-detail-sidebar>\n <vdr-card *ngIf=\"entity$ | async as entity\">\n <vdr-page-entity-info [entity]=\"entity\" />\n </vdr-card>\n </vdr-page-detail-sidebar>\n <vdr-page-block>\n <vdr-card>\n <div class=\"form-grid\">\n <vdr-form-field [label]=\"'settings.email-address' | translate\" for=\"emailAddress\">\n <input id=\"emailAddress\" type=\"text\" formControlName=\"emailAddress\" />\n </vdr-form-field>\n <vdr-form-field [label]=\"'settings.first-name' | translate\" for=\"firstName\">\n <input id=\"firstName\" type=\"text\" formControlName=\"firstName\" />\n </vdr-form-field>\n <vdr-form-field [label]=\"'settings.last-name' | translate\" for=\"lastName\">\n <input id=\"lastName\" type=\"text\" formControlName=\"lastName\" />\n </vdr-form-field>\n <vdr-form-field\n *ngIf=\"isNew$ | async\"\n [label]=\"'settings.password' | translate\"\n for=\"password\"\n >\n <input id=\"password\" type=\"password\" formControlName=\"password\" />\n </vdr-form-field>\n <vdr-form-field\n [label]=\"'settings.password' | translate\"\n for=\"password\"\n [readOnlyToggle]=\"true\"\n >\n <input id=\"password\" type=\"password\" formControlName=\"password\" />\n </vdr-form-field>\n </div>\n </vdr-card>\n <vdr-card\n formGroupName=\"customFields\"\n *ngIf=\"customFields.length\"\n [title]=\"'common.custom-fields' | translate\"\n >\n <vdr-tabbed-custom-fields\n entityName=\"Administrator\"\n [customFields]=\"customFields\"\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\n ></vdr-tabbed-custom-fields>\n </vdr-card>\n <vdr-custom-detail-component-host\n locationId=\"administrator-profile\"\n [entity$]=\"entity$\"\n [detailForm]=\"detailForm\"\n ></vdr-custom-detail-component-host>\n </vdr-page-block>\n </vdr-page-detail-layout>\n</form>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { FormBuilder, Validators } from '@angular/forms';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n Administrator,\n DataService,\n getCustomFieldsDefaults,\n GetProfileDetailDocument,\n LanguageCode,\n NotificationService,\n TypedBaseDetailComponent,\n UpdateActiveAdministratorInput,\n} from '@deenruv/admin-ui/core';\nimport { gql } from 'apollo-angular';\nimport { mergeMap, take } from 'rxjs/operators';\n\nexport const GET_PROFILE_DETAIL = gql`\n query GetProfileDetail {\n activeAdministrator {\n ...ProfileDetail\n }\n }\n fragment ProfileDetail on Administrator {\n id\n createdAt\n updatedAt\n firstName\n lastName\n emailAddress\n user {\n id\n lastLogin\n verified\n }\n }\n`;\n\n@Component({\n selector: 'vdr-profile',\n templateUrl: './profile.component.html',\n styleUrls: ['./profile.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ProfileComponent\n extends TypedBaseDetailComponent<typeof GetProfileDetailDocument, 'activeAdministrator'>\n implements OnInit, OnDestroy\n{\n customFields = this.getCustomFieldConfig('Administrator');\n detailForm = this.formBuilder.group({\n emailAddress: ['', Validators.required],\n firstName: ['', Validators.required],\n lastName: ['', Validators.required],\n password: [''],\n customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),\n });\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 }\n\n ngOnDestroy(): void {\n this.destroy();\n }\n\n save() {\n this.entity$\n .pipe(\n take(1),\n mergeMap(({ id }) => {\n const formValue = this.detailForm.value;\n const administrator: UpdateActiveAdministratorInput = {\n emailAddress: formValue.emailAddress,\n firstName: formValue.firstName,\n lastName: formValue.lastName,\n password: formValue.password,\n customFields: formValue.customFields,\n };\n return this.dataService.administrator.updateActiveAdministrator(administrator);\n }),\n )\n .subscribe(\n data => {\n this.notificationService.success(_('common.notify-update-success'), {\n entity: 'Administrator',\n });\n this.detailForm.markAsPristine();\n this.changeDetector.markForCheck();\n },\n err => {\n this.notificationService.error(_('common.notify-update-error'), {\n entity: 'Administrator',\n });\n },\n );\n }\n\n protected setFormValues(administrator: Administrator, languageCode: LanguageCode): void {\n this.detailForm.patchValue({\n emailAddress: administrator.emailAddress,\n firstName: administrator.firstName,\n lastName: administrator.lastName,\n });\n if (this.customFields.length) {\n this.setCustomFieldFormValues(\n this.customFields,\n this.detailForm.get('customFields'),\n administrator,\n );\n }\n }\n}\n","<vdr-page-block>\n <vdr-action-bar>\n <vdr-ab-left></vdr-ab-left>\n <vdr-ab-right>\n <vdr-action-bar-items locationId=\"role-detail\" />\n <button\n class=\"btn btn-primary\"\n *ngIf=\"isNew$ | async; else updateButton\"\n (click)=\"create()\"\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\n >\n {{ 'common.create' | translate }}\n </button>\n <ng-template #updateButton>\n <button\n class=\"btn btn-primary\"\n (click)=\"save()\"\n *vdrIfPermissions=\"'UpdateAdministrator'\"\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\n >\n {{ 'common.update' | translate }}\n </button>\n </ng-template>\n <vdr-action-bar-dropdown-menu locationId=\"role-detail\" />\n </vdr-ab-right>\n </vdr-action-bar>\n</vdr-page-block>\n\n<form class=\"form\" [formGroup]=\"detailForm\">\n <vdr-page-detail-layout>\n <vdr-page-detail-sidebar>\n <vdr-card *ngIf=\"entity$ | async as entity\">\n <vdr-page-entity-info [entity]=\"entity\" />\n </vdr-card>\n </vdr-page-detail-sidebar>\n <vdr-page-block>\n <vdr-card>\n <div class=\"form-grid\">\n <vdr-form-field [label]=\"'common.description' | translate\" for=\"description\">\n <input\n id=\"description\"\n type=\"text\"\n formControlName=\"description\"\n [readonly]=\"!('UpdateAdministrator' | hasPermission)\"\n (input)=\"updateCode($event.target.value)\"\n />\n </vdr-form-field>\n <vdr-form-field\n [label]=\"'common.code' | translate\"\n for=\"code\"\n [readOnlyToggle]=\"'UpdateAdministrator' | hasPermission\"\n >\n <input\n id=\"code\"\n type=\"text\"\n formControlName=\"code\"\n [readonly]=\"!('UpdateAdministrator' | hasPermission)\"\n />\n </vdr-form-field>\n </div>\n </vdr-card>\n </vdr-page-block>\n </vdr-page-detail-layout>\n <vdr-page-block class=\"mt-2\">\n <vdr-card [title]=\"'settings.permissions' | translate\">\n <vdr-form-field [label]=\"'settings.channel' | translate\">\n <vdr-channel-assignment-control\n formControlName=\"channelIds\"\n [vdrDisabled]=\"!('UpdateAdministrator' | hasPermission)\"\n ></vdr-channel-assignment-control>\n </vdr-form-field>\n <vdr-permission-grid\n class=\"mt-2\"\n [permissionDefinitions]=\"permissionDefinitions\"\n [activePermissions]=\"detailForm.get('permissions')?.value\"\n (permissionChange)=\"setPermission($event)\"\n [readonly]=\"!('UpdateAdministrator' | hasPermission)\"\n ></vdr-permission-grid>\n </vdr-card>\n </vdr-page-block>\n</form>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { FormBuilder, Validators } from '@angular/forms';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n CreateRoleInput,\n DataService,\n GetRoleDetailDocument,\n LanguageCode,\n NotificationService,\n Permission,\n Role,\n ROLE_FRAGMENT,\n TypedBaseDetailComponent,\n UpdateRoleInput,\n} from '@deenruv/admin-ui/core';\nimport { normalizeString } from '@deenruv/common/lib/normalize-string';\nimport { unique } from '@deenruv/common/lib/unique';\nimport { gql } from 'apollo-angular';\nimport { mergeMap, take } from 'rxjs/operators';\n\nexport const GET_ROLE_DETAIL = gql`\n query GetRoleDetail($id: ID!) {\n role(id: $id) {\n ...Role\n }\n }\n ${ROLE_FRAGMENT}\n`;\n\n@Component({\n selector: 'vdr-role-detail',\n templateUrl: './role-detail.component.html',\n styleUrls: ['./role-detail.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RoleDetailComponent\n extends TypedBaseDetailComponent<typeof GetRoleDetailDocument, 'role'>\n implements OnInit, OnDestroy\n{\n detailForm = this.formBuilder.group({\n code: ['', Validators.required],\n description: ['', Validators.required],\n channelIds: [[] as string[]],\n permissions: [[] as Permission[]],\n });\n permissionDefinitions = this.serverConfigService.getPermissionDefinitions();\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 }\n\n ngOnDestroy(): void {\n this.destroy();\n }\n\n updateCode(nameValue: string) {\n const codeControl = this.detailForm.get(['code']);\n if (codeControl && codeControl.pristine) {\n codeControl.setValue(normalizeString(nameValue, '-'));\n }\n }\n\n setPermission(change: { permission: string; value: boolean }) {\n const permissionsControl = this.detailForm.get('permissions');\n if (permissionsControl) {\n const currentPermissions = permissionsControl.value as string[];\n const newValue = (\n change.value === true\n ? unique([...currentPermissions, change.permission])\n : currentPermissions.filter(p => p !== change.permission)\n ) as Permission[];\n permissionsControl.setValue(newValue);\n permissionsControl.markAsDirty();\n }\n }\n\n create() {\n const { code, description, permissions, channelIds } = this.detailForm.value;\n if (!code || !description) {\n return;\n }\n const role: CreateRoleInput = {\n code,\n description,\n permissions: permissions ?? [],\n channelIds,\n };\n this.dataService.administrator.createRole(role).subscribe(\n data => {\n this.notificationService.success(_('common.notify-create-success'), { entity: 'Role' });\n this.detailForm.markAsPristine();\n this.changeDetector.markForCheck();\n this.router.navigate(['../', data.createRole.id], { relativeTo: this.route });\n },\n err => {\n this.notificationService.error(_('common.notify-create-error'), {\n entity: 'Role',\n });\n },\n );\n }\n\n save() {\n this.entity$\n .pipe(\n take(1),\n mergeMap(({ id }) => {\n const formValue = this.detailForm.value;\n const role: UpdateRoleInput = { id, ...formValue };\n return this.dataService.administrator.updateRole(role);\n }),\n )\n .subscribe(\n data => {\n this.notificationService.success(_('common.notify-update-success'), { entity: 'Role' });\n this.detailForm.markAsPristine();\n this.changeDetector.markForCheck();\n },\n err => {\n this.notificationService.error(_('common.notify-update-error'), {\n entity: 'Role',\n });\n },\n );\n }\n\n protected setFormValues(role: Role, languageCode: LanguageCode): void {\n this.detailForm.patchValue({\n description: role.description,\n code: role.code,\n channelIds: role.channels.map(c => c.id),\n permissions: role.permissions,\n });\n // This was required to get the channel selector component to\n // correctly display its contents. A while spent debugging the root\n // cause did not yield a solution, therefore this next line.\n this.changeDetector.detectChanges();\n }\n}\n","import { createBulkDeleteAction, GetRolesQuery, ItemOf, Permission } from '@deenruv/admin-ui/core';\nimport { map } from 'rxjs/operators';\n\nexport const deleteRolesBulkAction = createBulkDeleteAction<ItemOf<GetRolesQuery, 'roles'>>({\n location: 'role-list',\n requiresPermission: userPermissions => userPermissions.includes(Permission.DeleteAdministrator),\n getItemName: item => item.description,\n bulkDelete: (dataService, ids) =>\n dataService.administrator.deleteRoles(ids).pipe(map(res => res.deleteRoles)),\n});\n","<vdr-page-block>\n <vdr-action-bar>\n <vdr-ab-left> </vdr-ab-left>\n <vdr-ab-right>\n <vdr-action-bar-items locationId=\"role-list\" />\n <a\n class=\"btn btn-primary\"\n *vdrIfPermissions=\"['CreateAdministrator']\"\n [routerLink]=\"['./', 'create']\"\n >\n <clr-icon shape=\"plus\"></clr-icon>\n {{ 'settings.create-new-role' | translate }}\n </a>\n <vdr-action-bar-dropdown-menu locationId=\"role-list\" />\n </vdr-ab-right>\n </vdr-action-bar>\n</vdr-page-block>\n<vdr-data-table-2\n id=\"role-list\"\n [items]=\"items$ | async\"\n [itemsPerPage]=\"itemsPerPage$ | async\"\n [totalItems]=\"totalItems$ | async\"\n [currentPage]=\"currentPage$ | async\"\n [filters]=\"filters\"\n (pageChange)=\"setPageNumber($event)\"\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\n>\n <vdr-bulk-action-menu\n locationId=\"role-list\"\n [hostComponent]=\"this\"\n [selectionManager]=\"selectionManager\"\n />\n <vdr-dt2-search\n [searchTermControl]=\"searchTermControl\"\n [searchTermPlaceholder]=\"'catalog.filter-by-name' | translate\"\n />\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\n <ng-template let-role=\"item\">\n {{ role.id }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column\n [heading]=\"'common.created-at' | translate\" id=\"created-at\"\n [hiddenByDefault]=\"true\"\n [sort]=\"sorts.get('createdAt')\"\n >\n <ng-template let-role=\"item\">\n {{ role.createdAt | localeDate : 'short' }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column\n [heading]=\"'common.updated-at' | translate\" id=\"updated-at\"\n [hiddenByDefault]=\"true\"\n [sort]=\"sorts.get('updatedAt')\"\n >\n <ng-template let-role=\"item\">\n {{ role.updatedAt | localeDate : 'short' }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column\n [heading]=\"'common.description' | translate\" id=\"description\"\n [optional]=\"false\"\n [sort]=\"sorts.get('description')\"\n >\n <ng-template let-role=\"item\">\n <a\n *ngIf=\"!isDefaultRole(role); else defaultRole\"\n class=\"button-ghost\"\n [routerLink]=\"['./', role.id]\"\n ><span>{{ role.description }}</span>\n <clr-icon shape=\"arrow right\"></clr-icon>\n </a>\n <ng-template #defaultRole>\n {{ role.description }}\n </ng-template>\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'common.code' | translate\" id=\"code\" [sort]=\"sorts.get('code')\">\n <ng-template let-role=\"item\">\n <span *ngIf=\"!isDefaultRole(role)\">{{ role.code }}</span>\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'settings.channel' | translate\" id=\"channel\">\n <ng-template let-role=\"item\">\n <ng-container *ngIf=\"!isDefaultRole(role)\">\n <vdr-chip *ngFor=\"let channel of role.channels\">\n <vdr-channel-badge [channelCode]=\"channel.code\"></vdr-channel-badge>\n <div class=\"ml-1\">{{ channel.code | channelCodeToLabel | translate }}</div>\n </vdr-chip>\n </ng-container>\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'settings.permissions' | translate\" id=\"permissions\">\n <ng-template let-role=\"item\">\n <ng-container *ngIf=\"!isDefaultRole(role); else defaultRole\">\n <div class=\"permissions-list\">\n <vdr-chip\n *ngFor=\"let permission of role.permissions | slice : 0 : displayLimit[role.id] || 3\"\n >{{ permission }}</vdr-chip\n >\n <button\n class=\"button-small\"\n *ngIf=\"role.permissions.length > initialLimit\"\n (click)=\"toggleDisplayLimit(role)\"\n >\n <ng-container\n *ngIf=\"(displayLimit[role.id] || 0) < role.permissions.length; else collapse\"\n >\n <clr-icon shape=\"plus\"></clr-icon>\n {{ role.permissions.length - initialLimit }}\n </ng-container>\n <ng-template #collapse>\n <clr-icon shape=\"minus\"></clr-icon>\n </ng-template>\n </button>\n </div>\n </ng-container>\n <ng-template #defaultRole>\n <span class=\"default-role-label\">{{ 'settings.default-role-label' | translate }}</span>\n </ng-template>\n </ng-template>\n </vdr-dt2-column>\n</vdr-data-table-2>\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n GetRoleListDocument,\n GetRolesQuery,\n ItemOf,\n Role,\n ROLE_FRAGMENT,\n TypedBaseListComponent,\n} from '@deenruv/admin-ui/core';\nimport { CUSTOMER_ROLE_CODE, SUPER_ADMIN_ROLE_CODE } from '@deenruv/common/lib/shared-constants';\nimport { gql } from 'apollo-angular';\n\nexport const GET_ROLE_LIST = gql`\n query GetRoleList($options: RoleListOptions) {\n roles(options: $options) {\n items {\n ...Role\n }\n totalItems\n }\n }\n ${ROLE_FRAGMENT}\n`;\n\n@Component({\n selector: 'vdr-role-list',\n templateUrl: './role-list.component.html',\n styleUrls: ['./role-list.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RoleListComponent\n extends TypedBaseListComponent<typeof GetRoleListDocument, 'roles'>\n implements OnInit\n{\n readonly initialLimit = 3;\n displayLimit: { [id: string]: number } = {};\n readonly filters = this.createFilterCollection()\n .addIdFilter()\n .addDateFilters()\n .addFilter({\n name: 'code',\n type: { kind: 'text' },\n label: _('common.code'),\n filterField: 'code',\n })\n .connectToRoute(this.route);\n\n readonly sorts = this.createSortCollection()\n .defaultSort('createdAt', 'DESC')\n .addSort({ name: 'createdAt' })\n .addSort({ name: 'updatedAt' })\n .addSort({ name: 'code' })\n .addSort({ name: 'description' })\n .connectToRoute(this.route);\n\n constructor() {\n super();\n super.configure({\n document: GetRoleListDocument,\n getItems: data => data.roles,\n setVariables: (skip, take) => ({\n options: {\n skip,\n take,\n filter: {\n code: {\n contains: this.searchTermControl.value,\n },\n ...this.filters.createFilterInput(),\n },\n sort: this.sorts.createSortInput(),\n },\n }),\n refreshListOnChanges: [this.filters.valueChanges, this.sorts.valueChanges],\n });\n }\n\n toggleDisplayLimit(role: ItemOf<GetRolesQuery, 'roles'>) {\n if (this.displayLimit[role.id] === role.permissions.length) {\n this.displayLimit[role.id] = this.initialLimit;\n } else {\n this.displayLimit[role.id] = role.permissions.length;\n }\n }\n\n isDefaultRole(role: Role): boolean {\n return role.code === SUPER_ADMIN_ROLE_CODE || role.code === CUSTOMER_ROLE_CODE;\n }\n}\n","<vdr-page-block>\n <vdr-action-bar>\n <vdr-ab-left> </vdr-ab-left>\n\n <vdr-ab-right>\n <vdr-action-bar-items locationId=\"seller-detail\" />\n <button\n class=\"btn btn-primary\"\n *ngIf=\"isNew$ | async; else updateButton\"\n (click)=\"create()\"\n [disabled]=\"!saveButtonEnabled()\"\n >\n {{ 'common.create' | translate }}\n </button>\n <ng-template #updateButton>\n <button\n class=\"btn btn-primary\"\n (click)=\"save()\"\n *vdrIfPermissions=\"['SuperAdmin', 'UpdateSeller']\"\n [disabled]=\"!saveButtonEnabled()\"\n >\n {{ 'common.update' | translate }}\n </button>\n </ng-template>\n <vdr-action-bar-dropdown-menu locationId=\"seller-detail\" />\n </vdr-ab-right>\n </vdr-action-bar>\n</vdr-page-block>\n\n<form class=\"form\" [formGroup]=\"detailForm\">\n <vdr-page-detail-layout>\n <vdr-page-detail-sidebar>\n <vdr-card *ngIf=\"entity$ | async as entity\">\n <vdr-page-entity-info [entity]=\"entity\" />\n </vdr-card>\n </vdr-page-detail-sidebar>\n <vdr-page-block>\n <vdr-card>\n <div class=\"form-grid\">\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\n <input\n id=\"name\"\n type=\"text\"\n [readonly]=\"!(updatePermission | hasPermission)\"\n formControlName=\"name\"\n />\n </vdr-form-field>\n </div>\n </vdr-card>\n <vdr-card\n formGroupName=\"customFields\"\n *ngIf=\"customFields.length\"\n [title]=\"'common.custom-fields' | translate\"\n >\n <vdr-tabbed-custom-fields\n entityName=\"Seller\"\n [customFields]=\"customFields\"\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\n ></vdr-tabbed-custom-fields>\n </vdr-card>\n <vdr-custom-detail-component-host\n locationId=\"seller-detail\"\n [entity$]=\"entity$\"\n [detailForm]=\"detailForm\"\n ></vdr-custom-detail-component-host>\n </vdr-page-block>\n </vdr-page-detail-layout>\n</form>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { FormBuilder, Validators } from '@angular/forms';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n CreateSellerInput,\n DataService,\n getCustomFieldsDefaults,\n GetSellerDetailDocument,\n LanguageCode,\n NotificationService,\n Permission,\n SellerFragment,\n TypedBaseDetailComponent,\n UpdateSellerInput,\n} from '@deenruv/admin-ui/core';\nimport { gql } from 'apollo-angular';\nimport { mergeMap, take } from 'rxjs/operators';\n\nexport const GET_SELLER_DETAIL = gql`\n query GetSellerDetail($id: ID!) {\n seller(id: $id) {\n ...SellerDetail\n }\n }\n fragment SellerDetail on Seller {\n id\n createdAt\n updatedAt\n name\n }\n`;\n\n@Component({\n selector: 'vdr-seller-detail',\n templateUrl: './seller-detail.component.html',\n styleUrls: ['./seller-detail.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SellerDetailComponent\n extends TypedBaseDetailComponent<typeof GetSellerDetailDocument, 'seller'>\n implements OnInit, OnDestroy\n{\n customFields = this.getCustomFieldConfig('Seller');\n detailForm = this.formBuilder.group({\n name: ['', Validators.required],\n customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),\n });\n readonly updatePermission = [Permission.SuperAdmin, Permission.UpdateSeller, Permission.CreateSeller];\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 }\n\n ngOnDestroy() {\n this.destroy();\n }\n\n saveButtonEnabled(): boolean {\n return this.detailForm.dirty && this.detailForm.valid;\n }\n\n create() {\n if (!this.detailForm.dirty) {\n return;\n }\n const formValue = this.detailForm.value;\n if (!formValue.name) {\n return;\n }\n const input: CreateSellerInput = {\n name: formValue.name,\n customFields: formValue.customFields,\n };\n this.dataService.settings.createSeller(input).subscribe(data => {\n switch (data.createSeller.__typename) {\n case 'Seller':\n this.notificationService.success(_('common.notify-create-success'), {\n entity: 'Seller',\n });\n this.detailForm.markAsPristine();\n this.changeDetector.markForCheck();\n this.router.navigate(['../', data.createSeller.id], { relativeTo: this.route });\n break;\n }\n });\n }\n\n save() {\n if (!this.detailForm.dirty) {\n return;\n }\n const formValue = this.detailForm.value;\n this.entity$\n .pipe(\n take(1),\n mergeMap(seller => {\n const input = {\n id: seller.id,\n name: formValue.name,\n customFields: formValue.customFields,\n } as UpdateSellerInput;\n return this.dataService.settings.updateSeller(input);\n }),\n )\n .subscribe(({ updateSeller }) => {\n switch (updateSeller.__typename) {\n case 'Seller':\n this.notificationService.success(_('common.notify-update-success'), {\n entity: 'Seller',\n });\n this.detailForm.markAsPristine();\n this.changeDetector.markForCheck();\n break;\n // case 'LanguageNotAvailableError':\n // this.notificationService.error(updateSeller.message);\n }\n });\n }\n\n /**\n * Update the form values when the entity changes.\n */\n protected setFormValues(entity: SellerFragment, languageCode: LanguageCode): void {\n this.detailForm.patchValue({\n name: entity.name,\n });\n if (this.customFields.length) {\n this.setCustomFieldFormValues(this.customFields, this.detailForm.get(['customFields']), entity);\n }\n }\n}\n","import { createBulkDeleteAction, GetSellersQuery, ItemOf, Permission } from '@deenruv/admin-ui/core';\nimport { map } from 'rxjs/operators';\n\nexport const deleteSellersBulkAction = createBulkDeleteAction<ItemOf<GetSellersQuery, 'sellers'>>({\n location: 'seller-list',\n requiresPermission: userPermissions => userPermissions.includes(Permission.DeleteSeller),\n getItemName: item => item.name,\n bulkDelete: (dataService, ids) =>\n dataService.settings.deleteSellers(ids).pipe(map(res => res.deleteSellers)),\n});\n","<vdr-page-block>\n <vdr-action-bar>\n <vdr-ab-left> </vdr-ab-left>\n <vdr-ab-right>\n <vdr-action-bar-items locationId=\"seller-list\" />\n <a class=\"btn btn-primary\" *vdrIfPermissions=\"['SuperAdmin', 'CreateSeller']\" [routerLink]=\"['./', 'create']\">\n <clr-icon shape=\"plus\"></clr-icon>\n {{ 'settings.create-new-seller' | translate }}\n </a>\n <vdr-action-bar-dropdown-menu locationId=\"seller-list\" />\n </vdr-ab-right>\n </vdr-action-bar>\n</vdr-page-block>\n<vdr-data-table-2\n id=\"seller-list\"\n [items]=\"items$ | async\"\n [itemsPerPage]=\"itemsPerPage$ | async\"\n [totalItems]=\"totalItems$ | async\"\n [currentPage]=\"currentPage$ | async\"\n [filters]=\"filters\"\n (pageChange)=\"setPageNumber($event)\"\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\n>\n <vdr-bulk-action-menu\n locationId=\"seller-list\"\n [hostComponent]=\"this\"\n [selectionManager]=\"selectionManager\"\n />\n <vdr-dt2-search\n [searchTermControl]=\"searchTermControl\"\n [searchTermPlaceholder]=\"'catalog.filter-by-name' | translate\"\n />\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\n <ng-template let-seller=\"item\">{{ seller.id }}</ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column\n [heading]=\"'common.created-at' | translate\" id=\"created-at\"\n [hiddenByDefault]=\"true\"\n [sort]=\"sorts.get('createdAt')\"\n >\n <ng-template let-seller=\"item\">\n {{ seller.createdAt | localeDate : 'short' }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column\n [heading]=\"'common.updated-at' | translate\" id=\"updated-at\"\n [hiddenByDefault]=\"true\"\n [sort]=\"sorts.get('updatedAt')\"\n >\n <ng-template let-seller=\"item\">\n {{ seller.updatedAt | localeDate : 'short' }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'common.name' | translate\" id=\"name\" [optional]=\"false\" [sort]=\"sorts.get('name')\">\n <ng-template let-seller=\"item\">\n <a class=\"button-ghost\" [routerLink]=\"['./', seller.id]\"\n ><span>{{ seller.name }}</span>\n <clr-icon shape=\"arrow right\"></clr-icon>\n </a>\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-custom-field-column *ngFor=\"let customField of customFields\" [customField]=\"customField\" [sorts]=\"sorts\" />\n</vdr-data-table-2>\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport { GetSellerListDocument, TypedBaseListComponent } from '@deenruv/admin-ui/core';\nimport { gql } from 'apollo-angular';\n\nconst GET_SELLER_LIST = gql`\n query GetSellerList($options: SellerListOptions) {\n sellers(options: $options) {\n items {\n ...SellerListItem\n }\n totalItems\n }\n }\n fragment SellerListItem on Seller {\n id\n createdAt\n updatedAt\n name\n }\n`;\n\n@Component({\n selector: 'vdr-seller-list',\n templateUrl: './seller-list.component.html',\n styleUrls: ['./seller-list.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SellerListComponent\n extends TypedBaseListComponent<typeof GetSellerListDocument, 'sellers'>\n implements OnInit\n{\n readonly customFields = this.getCustomFieldConfig('Seller');\n readonly filters = this.createFilterCollection()\n .addIdFilter()\n .addDateFilters()\n .addFilter({\n name: 'name',\n type: { kind: 'text' },\n label: _('common.name'),\n filterField: 'name',\n })\n .addCustomFieldFilters(this.customFields)\n .connectToRoute(this.route);\n\n readonly sorts = this.createSortCollection()\n .defaultSort('createdAt', 'DESC')\n .addSort({ name: 'createdAt' })\n .addSort({ name: 'updatedAt' })\n .addSort({ name: 'name' })\n .addCustomFieldSorts(this.customFields)\n .connectToRoute(this.route);\n\n constructor() {\n super();\n super.configure({\n document: GetSellerListDocument,\n getItems: data => data.sellers,\n setVariables: (skip, take) => ({\n options: {\n skip,\n take,\n filter: {\n name: {\n contains: this.searchTermControl.value,\n },\n ...this.filters.createFilterInput(),\n },\n sort: this.sorts.createSortInput(),\n },\n }),\n refreshListOnChanges: [this.filters.valueChanges, this.sorts.valueChanges],\n });\n }\n}\n","<vdr-card class=\"test-result\" [title]=\"'settings.test-result' | translate\">\n <div class=\"card-span\" *ngFor=\"let quote of testResult\">\n <div class=\"result-details\" [class.stale]=\"testDataUpdated\">\n <vdr-labeled-data [label]=\"'settings.shipping-method' | translate\">\n {{ quote.name }}\n </vdr-labeled-data>\n <div class=\"price-row\">\n <vdr-labeled-data [label]=\"'common.price' | translate\">\n {{ quote.price | localeCurrency: currencyCode }}\n </vdr-labeled-data>\n <vdr-labeled-data [label]=\"'common.price-with-tax' | translate\">\n {{ quote.priceWithTax | localeCurrency: currencyCode }}\n </vdr-labeled-data>\n </div>\n <vdr-object-tree *ngIf=\"quote.metadata\" [value]=\"quote.metadata\"></vdr-object-tree>\n </div>\n </div>\n <div class=\"card-span\" *ngIf=\"testResult?.length === 0\">\n <clr-icon shape=\"ban\" class=\"is-solid error\"></clr-icon>\n {{ 'settings.no-eligible-shipping-methods' | translate }}\n </div>\n <div class=\"card-footer\">\n <button class=\"btn btn-secondary\" (click)=\"runTest.emit()\" [disabled]=\"!okToRun\">\n {{ 'settings.test-shipping-methods' | translate }}\n </button>\n </div>\n</vdr-card>\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\n\nimport { CurrencyCode, ShippingMethodQuote } from '@deenruv/admin-ui/core';\n\n@Component({\n selector: 'vdr-shipping-eligibility-test-result',\n templateUrl: './shipping-eligibility-test-result.component.html',\n styleUrls: ['./shipping-eligibility-test-result.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShippingEligibilityTestResultComponent {\n @Input() testResult: ShippingMethodQuote[];\n @Input() okToRun = false;\n @Input() testDataUpdated = false;\n @Input() currencyCode: CurrencyCode;\n @Output() runTest = new EventEmitter<void>();\n}\n","<table class=\"order-table table\" *ngIf=\"lines.length; else emptyPlaceholder\">\n <thead>\n <tr>\n <th></th>\n <th>{{ 'order.product-name' | translate }}</th>\n <th>{{ 'order.product-sku' | translate }}</th>\n <th>{{ 'order.unit-price' | translate }}</th>\n <th>{{ 'order.quantity' | translate }}</th>\n <th>{{ 'order.total' | translate }}</th>\n </tr>\n </thead>\n <tr *ngFor=\"let line of lines\" class=\"order-line\">\n <td class=\"align-middle thumb\">\n <img [src]=\"line.preview + '?preset=tiny'\" />\n </td>\n <td class=\"align-middle name\">{{ line.name }}</td>\n <td class=\"align-middle sku\">{{ line.sku }}</td>\n <td class=\"align-middle unit-price\">\n {{ line.unitPriceWithTax | localeCurrency : currencyCode }}\n </td>\n <td class=\"align-middle quantity\">\n <input [(ngModel)]=\"line.quantity\" (change)=\"updateQuantity()\" type=\"number\" max=\"9999\" min=\"1\" />\n <button class=\"icon-button\" (click)=\"removeLine(line)\">\n <clr-icon shape=\"trash\"></clr-icon>\n </button>\n </td>\n <td class=\"align-middle total\">\n {{ line.unitPriceWithTax * line.quantity | localeCurrency : currencyCode }}\n </td>\n </tr>\n <tr class=\"sub-total\">\n <td class=\"left\">{{ 'order.sub-total' | translate }}</td>\n <td></td>\n <td></td>\n <td></td>\n <td></td>\n <td>{{ subTotal | localeCurrency : currencyCode }}</td>\n </tr>\n</table>\n\n<ng-template #emptyPlaceholder>\n <div class=\"card-block empty-placeholder card-span\">\n <div class=\"empty-text\">{{ 'settings.add-products-to-test-order' | translate }}</div>\n <clr-icon shape=\"arrow\" dir=\"down\" size=\"96\"></clr-icon>\n </div>\n</ng-template>\n<div class=\"card-block\">\n <vdr-product-variant-selector (productSelected)=\"selectResult($event)\"> </vdr-product-variant-selector>\n</div>\n","import { ChangeDetectionStrategy, Component, EventEmitter, OnInit, Output } from '@angular/core';\nimport {\n CurrencyCode,\n DataService,\n LocalStorageService,\n ProductSelectorSearchQuery,\n} from '@deenruv/admin-ui/core';\n\ntype SearchItem = ProductSelectorSearchQuery['search']['items'][number];\n\nexport interface TestOrderLine {\n id: string;\n name: string;\n preview: string;\n sku: string;\n unitPriceWithTax: number;\n quantity: number;\n}\n\n@Component({\n selector: 'vdr-test-order-builder',\n templateUrl: './test-order-builder.component.html',\n styleUrls: ['./test-order-builder.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TestOrderBuilderComponent implements OnInit {\n @Output() orderLinesChange = new EventEmitter<TestOrderLine[]>();\n lines: TestOrderLine[] = [];\n currencyCode: CurrencyCode;\n get subTotal(): number {\n return this.lines.reduce((sum, l) => sum + l.unitPriceWithTax * l.quantity, 0);\n }\n\n constructor(\n private dataService: DataService,\n private localStorageService: LocalStorageService,\n ) {}\n\n ngOnInit() {\n this.lines = this.loadFromLocalStorage();\n if (this.lines) {\n this.orderLinesChange.emit(this.lines);\n }\n this.dataService.settings.getActiveChannel('cache-first').single$.subscribe(result => {\n this.currencyCode = result.activeChannel.defaultCurrencyCode;\n });\n }\n\n selectResult(result: SearchItem) {\n if (result) {\n this.addToLines(result);\n }\n }\n\n private addToLines(result: SearchItem) {\n if (!this.lines.find(l => l.id === result.productVariantId)) {\n this.lines.push({\n id: result.productVariantId,\n name: result.productVariantName,\n preview: result.productAsset?.preview ?? '',\n quantity: 1,\n sku: result.sku,\n unitPriceWithTax:\n (result.priceWithTax.__typename === 'SinglePrice' && result.priceWithTax.value) || 0,\n });\n this.persistToLocalStorage();\n this.orderLinesChange.emit(this.lines);\n }\n }\n\n updateQuantity() {\n this.persistToLocalStorage();\n this.orderLinesChange.emit(this.lines);\n }\n\n removeLine(line: TestOrderLine) {\n this.lines = this.lines.filter(l => l.id !== line.id);\n this.persistToLocalStorage();\n this.orderLinesChange.emit(this.lines);\n }\n\n private persistToLocalStorage() {\n this.localStorageService.setForCurrentLocation('shippingTestOrder', this.lines);\n }\n\n private loadFromLocalStorage(): TestOrderLine[] {\n return this.localStorageService.getForCurrentLocation('shippingTestOrder') || [];\n }\n}\n","<div class=\"card\">\n <div class=\"card-header\">\n {{ 'settings.test-address' | translate }}\n </div>\n <div class=\"card-block\">\n <form [formGroup]=\"form\" class=\"form-grid\">\n <vdr-form-field [label]=\"'customer.city' | translate\">\n <input formControlName=\"city\" type=\"text\" />\n </vdr-form-field>\n <vdr-form-field [label]=\"'customer.province' | translate\">\n <input formControlName=\"province\" type=\"text\" />\n </vdr-form-field>\n <vdr-form-field [label]=\"'customer.postal-code' | translate\">\n <input formControlName=\"postalCode\" type=\"text\" />\n </vdr-form-field>\n <vdr-form-field [label]=\"'customer.country' | translate\">\n <select name=\"countryCode\" formControlName=\"countryCode\" >\n <option *ngFor=\"let country of availableCountries$ | async\" [value]=\"country.code\">\n {{ country.name }}\n </option>\n </select>\n </vdr-form-field>\n </form>\n </div>\n</div>\n","import { ChangeDetectionStrategy, Component, EventEmitter, OnDestroy, OnInit, Output } from '@angular/core';\nimport { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms';\nimport { DataService, GetAvailableCountriesQuery, ItemOf, LocalStorageService } from '@deenruv/admin-ui/core';\nimport { Observable, Subscription } from 'rxjs';\n\nexport interface TestAddress {\n city: string;\n province: string;\n postalCode: string;\n countryCode: string;\n}\n\n@Component({\n selector: 'vdr-test-address-form',\n templateUrl: './test-address-form.component.html',\n styleUrls: ['./test-address-form.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TestAddressFormComponent implements OnInit, OnDestroy {\n @Output() addressChange = new EventEmitter<TestAddress>();\n availableCountries$: Observable<Array<ItemOf<GetAvailableCountriesQuery, 'countries'>>>;\n form: UntypedFormGroup;\n private subscription: Subscription;\n\n constructor(\n private formBuilder: UntypedFormBuilder,\n private dataService: DataService,\n private localStorageService: LocalStorageService,\n ) {}\n\n ngOnInit() {\n this.availableCountries$ = this.dataService.settings\n .getAvailableCountries()\n .mapSingle(result => result.countries.items);\n const storedValue = this.localStorageService.getForCurrentLocation('shippingTestAddress');\n const initialValue: TestAddress = storedValue\n ? storedValue\n : {\n city: '',\n countryCode: '',\n postalCode: '',\n province: '',\n };\n this.addressChange.emit(initialValue);\n\n this.form = this.formBuilder.group(initialValue);\n this.subscription = this.form.valueChanges.subscribe(value => {\n this.localStorageService.setForCurrentLocation('shippingTestAddress', value);\n this.addressChange.emit(value);\n });\n }\n\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n}\n","<div\n class=\"test-result card\"\n [ngClass]=\"{\n success: testResult?.eligible === true,\n error: testResult?.eligible === false,\n unknown: !testResult\n }\"\n>\n <div class=\"card-header\">\n {{ 'settings.test-result' | translate }}\n </div>\n <div class=\"card-block\">\n <div class=\"result-details\" [class.stale]=\"testDataUpdated\">\n <vdr-labeled-data [label]=\"'settings.eligible' | translate\">\n <div class=\"eligible-icon\">\n <clr-icon\n shape=\"success-standard\"\n class=\"is-solid success\"\n *ngIf=\"testResult?.eligible\"\n ></clr-icon>\n <clr-icon\n shape=\"ban\"\n class=\"is-solid error\"\n *ngIf=\"testResult?.eligible === false\"\n ></clr-icon>\n <clr-icon shape=\"unknown-status\" *ngIf=\"!testResult\"></clr-icon>\n </div>\n {{ testResult?.eligible }}\n </vdr-labeled-data>\n <div class=\"price-row\">\n <vdr-labeled-data\n [label]=\"'common.price' | translate\"\n *ngIf=\"testResult?.quote?.price != null\"\n >\n {{ testResult.quote?.price | localeCurrency: currencyCode }}\n </vdr-labeled-data>\n <vdr-labeled-data\n [label]=\"'common.price-with-tax' | translate\"\n *ngIf=\"testResult?.quote?.priceWithTax != null\"\n >\n {{ testResult.quote?.priceWithTax | localeCurrency: currencyCode }}\n </vdr-labeled-data>\n </div>\n <vdr-object-tree\n *ngIf=\"testResult?.quote?.metadata\"\n [value]=\"testResult?.quote?.metadata\"\n ></vdr-object-tree>\n </div>\n </div>\n <div class=\"card-footer\">\n <button class=\"btn btn-secondary\" (click)=\"runTest.emit()\" [disabled]=\"!okToRun\">\n {{ 'settings.test-shipping-method' | translate }}\n </button>\n </div>\n</div>\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\n\nimport { CurrencyCode, TestShippingMethodResult } from '@deenruv/admin-ui/core';\n\n@Component({\n selector: 'vdr-shipping-method-test-result',\n templateUrl: './shipping-method-test-result.component.html',\n styleUrls: ['./shipping-method-test-result.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShippingMethodTestResultComponent {\n @Input() testResult: TestShippingMethodResult;\n @Input() okToRun = false;\n @Input() testDataUpdated = false;\n @Input() currencyCode: CurrencyCode;\n @Output() runTest = new EventEmitter<void>();\n}\n","<vdr-page-block>\n <vdr-action-bar>\n <vdr-ab-left>\n <vdr-language-selector\n [disabled]=\"isNew$ | async\"\n [availableLanguageCodes]=\"availableLanguages$ | async\"\n [currentLanguageCode]=\"languageCode$ | async\"\n (languageCodeChange)=\"setLanguage($event)\"\n />\n </vdr-ab-left>\n\n <vdr-ab-right>\n <vdr-action-bar-items locationId=\"shipping-method-detail\" />\n <button\n class=\"btn btn-primary\"\n *ngIf=\"isNew$ | async; else updateButton\"\n (click)=\"create()\"\n [disabled]=\"\n detailForm.pristine || detailForm.invalid || !selectedChecker || !selectedCalculator\n \"\n >\n {{ 'common.create' | translate }}\n </button>\n <ng-template #updateButton>\n <button\n class=\"btn btn-primary\"\n (click)=\"save()\"\n *vdrIfPermissions=\"updatePermission\"\n [disabled]=\"\n detailForm.pristine || detailForm.invalid || !selectedChecker || !selectedCalculator\n \"\n >\n {{ 'common.update' | translate }}\n </button>\n </ng-template>\n <vdr-action-bar-dropdown-menu locationId=\"shipping-method-detail\" />\n </vdr-ab-right>\n </vdr-action-bar>\n</vdr-page-block>\n\n<form class=\"form\" [formGroup]=\"detailForm\">\n <vdr-page-detail-layout>\n <vdr-page-detail-sidebar>\n <vdr-card *ngIf=\"entity$ | async as entity\">\n <vdr-page-entity-info [entity]=\"entity\" />\n </vdr-card>\n </vdr-page-detail-sidebar>\n <vdr-page-block>\n <vdr-card>\n <div class=\"form-grid\">\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\n <input\n id=\"name\"\n type=\"text\"\n formControlName=\"name\"\n [readonly]=\"!(updatePermission | hasPermission)\"\n (input)=\"updateCode(entity?.code, $event.target.value)\"\n />\n </vdr-form-field>\n <vdr-form-field\n [label]=\"'common.code' | translate\"\n for=\"code\"\n [readOnlyToggle]=\"updatePermission | hasPermission\"\n >\n <input\n id=\"code\"\n type=\"text\"\n formControlName=\"code\"\n [readonly]=\"!(updatePermission | hasPermission)\"\n />\n </vdr-form-field>\n <vdr-rich-text-editor\n class=\"form-grid-span\"\n formControlName=\"description\"\n [readonly]=\"!(updatePermission | hasPermission)\"\n [label]=\"'common.description' | translate\"\n ></vdr-rich-text-editor>\n <vdr-form-field\n [label]=\"'settings.fulfillment-handler' | translate\"\n for=\"fulfillmentHandler\"\n >\n <select\n name=\"fulfillmentHandler\"\n formControlName=\"fulfillmentHandler\"\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\n >\n <option *ngFor=\"let handler of fulfillmentHandlers\" [value]=\"handler.code\">\n {{ handler.code }}: {{ handler.description }}\n </option>\n </select>\n </vdr-form-field>\n </div>\n </vdr-card>\n\n <vdr-card\n formGroupName=\"customFields\"\n *ngIf=\"customFields.length\"\n [title]=\"'common.custom-fields' | translate\"\n >\n <vdr-tabbed-custom-fields\n entityName=\"ShippingMethod\"\n [customFields]=\"customFields\"\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\n ></vdr-tabbed-custom-fields>\n </vdr-card>\n\n <vdr-custom-detail-component-host\n locationId=\"shipping-method-detail\"\n [entity$]=\"entity$\"\n [detailForm]=\"detailForm\"\n ></vdr-custom-detail-component-host>\n\n <vdr-card [title]=\"'settings.shipping-eligibility-checker' | translate\">\n <vdr-configurable-input\n class=\"card-span\"\n *ngIf=\"selectedChecker && selectedCheckerDefinition\"\n [operation]=\"selectedChecker\"\n [operationDefinition]=\"selectedCheckerDefinition\"\n [readonly]=\"!(updatePermission | hasPermission)\"\n (remove)=\"selectedChecker = null\"\n formControlName=\"checker\"\n ></vdr-configurable-input>\n <div *ngIf=\"!selectedChecker || !selectedCheckerDefinition\" class=\"card-span\">\n <vdr-dropdown>\n <button class=\"btn btn-outline\" vdrDropdownTrigger>\n <clr-icon shape=\"plus\"></clr-icon>\n {{ 'common.select' | translate }}\n </button>\n <vdr-dropdown-menu vdrPosition=\"bottom-left\">\n <button\n *ngFor=\"let checker of checkers\"\n type=\"button\"\n vdrDropdownItem\n (click)=\"selectChecker(checker)\"\n >\n {{ checker.description }}\n </button>\n </vdr-dropdown-menu>\n </vdr-dropdown>\n </div>\n </vdr-card>\n <vdr-card [title]=\"'settings.shipping-calculator' | translate\">\n <vdr-configurable-input\n class=\"card-span\"\n *ngIf=\"selectedCalculator && selectedCalculatorDefinition\"\n [operation]=\"selectedCalculator\"\n [operationDefinition]=\"selectedCalculatorDefinition\"\n [readonly]=\"!(updatePermission | hasPermission)\"\n (remove)=\"selectedCalculator = null\"\n formControlName=\"calculator\"\n ></vdr-configurable-input>\n <div *ngIf=\"!selectedCalculator || !selectedCalculatorDefinition\" class=\"card-span\">\n <vdr-dropdown>\n <button class=\"btn btn-outline\" vdrDropdownTrigger>\n <clr-icon shape=\"plus\"></clr-icon>\n {{ 'common.select' | translate }}\n </button>\n <vdr-dropdown-menu vdrPosition=\"bottom-left\">\n <button\n *ngFor=\"let calculator of calculators\"\n type=\"button\"\n vdrDropdownItem\n (click)=\"selectCalculator(calculator)\"\n >\n {{ calculator.description }}\n </button>\n </vdr-dropdown-menu>\n </vdr-dropdown>\n </div>\n </vdr-card>\n <vdr-card [title]=\"'settings.test-shipping-method' | translate\">\n <vdr-test-order-builder\n class=\"card-span\"\n (orderLinesChange)=\"setTestOrderLines($event)\"\n ></vdr-test-order-builder>\n <vdr-test-address-form\n (addressChange)=\"setTestAddress($event)\"\n class=\"mt-2\"\n ></vdr-test-address-form>\n <vdr-shipping-method-test-result\n class=\"mt-2\"\n [currencyCode]=\"(activeChannel$ | async)?.currencyCode\"\n [okToRun]=\"allTestDataPresent() && testDataUpdated && detailForm.valid\"\n [testDataUpdated]=\"testDataUpdated\"\n [testResult]=\"testResult$ | async\"\n (runTest)=\"runTest()\"\n ></vdr-shipping-method-test-result>\n </vdr-card>\n </vdr-page-block>\n </vdr-page-detail-layout>\n</form>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { FormBuilder, Validators } from '@angular/forms';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n configurableDefinitionToInstance,\n ConfigurableOperation,\n ConfigurableOperationDefinition,\n CreateShippingMethodInput,\n createUpdatedTranslatable,\n DataService,\n findTranslation,\n GetActiveChannelQuery,\n getConfigArgValue,\n getCustomFieldsDefaults,\n GetShippingMethodDetailDocument,\n GetShippingMethodDetailQuery,\n LanguageCode,\n NotificationService,\n Permission,\n SHIPPING_METHOD_FRAGMENT,\n ShippingMethodFragment,\n TestShippingMethodInput,\n TestShippingMethodResult,\n toConfigurableOperationInput,\n TypedBaseDetailComponent,\n UpdateShippingMethodInput,\n} from '@deenruv/admin-ui/core';\nimport { normalizeString } from '@deenruv/common/lib/normalize-string';\nimport { gql } from 'apollo-angular';\nimport { combineLatest, merge, Observable, of, Subject } from 'rxjs';\nimport { mergeMap, switchMap, take, takeUntil } from 'rxjs/operators';\n\nimport { TestAddress } from '../test-address-form/test-address-form.component';\nimport { TestOrderLine } from '../test-order-builder/test-order-builder.component';\n\nexport const GET_SHIPPING_METHOD_DETAIL = gql`\n query GetShippingMethodDetail($id: ID!) {\n shippingMethod(id: $id) {\n ...ShippingMethod\n }\n }\n ${SHIPPING_METHOD_FRAGMENT}\n`;\n\n@Component({\n selector: 'vdr-shipping-method-detail',\n templateUrl: './shipping-method-detail.component.html',\n styleUrls: ['./shipping-method-detail.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShippingMethodDetailComponent\n extends TypedBaseDetailComponent<typeof GetShippingMethodDetailDocument, 'shippingMethod'>\n implements OnInit, OnDestroy\n{\n customFields = this.getCustomFieldConfig('ShippingMethod');\n detailForm = this.formBuilder.group({\n code: ['', Validators.required],\n name: ['', Validators.required],\n description: '',\n fulfillmentHandler: ['', Validators.required],\n checker: {} as NonNullable<GetShippingMethodDetailQuery['shippingMethod']>['checker'],\n calculator: {} as NonNullable<GetShippingMethodDetailQuery['shippingMethod']>['calculator'],\n customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),\n });\n checkers: ConfigurableOperationDefinition[] = [];\n calculators: ConfigurableOperationDefinition[] = [];\n fulfillmentHandlers: ConfigurableOperationDefinition[] = [];\n selectedChecker?: ConfigurableOperation | null;\n selectedCheckerDefinition?: ConfigurableOperationDefinition;\n selectedCalculator?: ConfigurableOperation | null;\n selectedCalculatorDefinition?: ConfigurableOperationDefinition;\n activeChannel$: Observable<GetActiveChannelQuery['activeChannel']>;\n testAddress: TestAddress;\n testOrderLines: TestOrderLine[];\n testDataUpdated = false;\n testResult$: Observable<TestShippingMethodResult | undefined>;\n readonly updatePermission = [Permission.UpdateSettings, Permission.UpdateShippingMethod];\n private fetchTestResult$ = new Subject<[TestAddress, TestOrderLine[]]>();\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.shippingMethod.getShippingMethodOperations().single$.subscribe(data => {\n this.checkers = data.shippingEligibilityCheckers;\n this.calculators = data.shippingCalculators;\n this.fulfillmentHandlers = data.fulfillmentHandlers;\n this.changeDetector.markForCheck();\n this.selectedCheckerDefinition = data.shippingEligibilityCheckers.find(\n c => c.code === this.entity?.checker?.code,\n );\n this.selectedCalculatorDefinition = data.shippingCalculators.find(\n c => c.code === this.entity?.calculator?.code,\n );\n });\n\n this.activeChannel$ = this.dataService.settings\n .getActiveChannel()\n .mapStream(data => data.activeChannel);\n\n this.testResult$ = this.fetchTestResult$.pipe(\n switchMap(([address, lines]) => {\n const { checker, calculator } = this.detailForm.value;\n if (!this.selectedChecker || !this.selectedCalculator || !checker || !calculator) {\n return of(undefined);\n }\n const input: TestShippingMethodInput = {\n shippingAddress: { ...address, streetLine1: 'test' },\n lines: lines.map(l => ({ productVariantId: l.id, quantity: l.quantity })),\n checker: toConfigurableOperationInput(this.selectedChecker, checker),\n calculator: toConfigurableOperationInput(this.selectedCalculator, calculator),\n };\n return this.dataService.shippingMethod\n .testShippingMethod(input)\n .mapSingle(result => result.testShippingMethod);\n }),\n );\n\n /* eslint-disable @typescript-eslint/no-non-null-assertion */\n merge(\n this.detailForm.get(['checker'])!.valueChanges,\n this.detailForm.get(['calculator'])!.valueChanges,\n )\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => (this.testDataUpdated = true));\n /* eslint-enable @typescript-eslint/no-non-null-assertion */\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 selectCalculator(calculator: ConfigurableOperationDefinition) {\n this.selectedCalculatorDefinition = calculator;\n this.selectedCalculator = configurableDefinitionToInstance(calculator);\n const formControl = this.detailForm.get('calculator');\n if (formControl) {\n formControl.clearValidators();\n formControl.updateValueAndValidity({ onlySelf: true });\n formControl.patchValue(this.selectedCalculator);\n }\n this.detailForm.markAsDirty();\n }\n\n create() {\n const selectedChecker = this.selectedChecker;\n const selectedCalculator = this.selectedCalculator;\n const { checker, calculator } = this.detailForm.value;\n if (!selectedChecker || !selectedCalculator || !checker || !calculator) {\n return;\n }\n const formValue = this.detailForm.value;\n const input = {\n ...(this.getUpdatedShippingMethod(\n {\n createdAt: '',\n updatedAt: '',\n id: '',\n code: '',\n name: '',\n description: '',\n fulfillmentHandlerCode: '',\n checker: undefined as any,\n calculator: undefined as any,\n translations: [],\n },\n this.detailForm,\n this.languageCode,\n ) as CreateShippingMethodInput),\n checker: toConfigurableOperationInput(selectedChecker, checker),\n calculator: toConfigurableOperationInput(selectedCalculator, calculator),\n };\n this.dataService.shippingMethod.createShippingMethod(input).subscribe(\n data => {\n this.notificationService.success(_('common.notify-create-success'), {\n entity: 'ShippingMethod',\n });\n this.detailForm.markAsPristine();\n this.changeDetector.markForCheck();\n this.router.navigate(['../', data.createShippingMethod.id], { relativeTo: this.route });\n },\n err => {\n this.notificationService.error(_('common.notify-create-error'), {\n entity: 'ShippingMethod',\n });\n },\n );\n }\n\n save() {\n const selectedChecker = this.selectedChecker;\n const selectedCalculator = this.selectedCalculator;\n const { checker, calculator } = this.detailForm.value;\n if (!selectedChecker || !selectedCalculator || !checker || !calculator) {\n return;\n }\n combineLatest([this.entity$, this.languageCode$])\n .pipe(\n take(1),\n mergeMap(([shippingMethod, languageCode]) => {\n const formValue = this.detailForm.value;\n const input = {\n ...(this.getUpdatedShippingMethod(\n shippingMethod,\n this.detailForm,\n languageCode,\n ) as UpdateShippingMethodInput),\n checker: toConfigurableOperationInput(selectedChecker, checker),\n calculator: toConfigurableOperationInput(selectedCalculator, calculator),\n };\n return this.dataService.shippingMethod.updateShippingMethod(input);\n }),\n )\n .subscribe(\n data => {\n this.notificationService.success(_('common.notify-update-success'), {\n entity: 'ShippingMethod',\n });\n this.detailForm.markAsPristine();\n this.changeDetector.markForCheck();\n },\n err => {\n // eslint-disable-next-line no-console\n console.error(err);\n this.notificationService.error(_('common.notify-update-error'), {\n entity: 'ShippingMethod',\n });\n },\n );\n }\n\n setTestOrderLines(event: TestOrderLine[]) {\n this.testOrderLines = event;\n this.testDataUpdated = true;\n }\n\n setTestAddress(event: TestAddress) {\n this.testAddress = event;\n this.testDataUpdated = true;\n }\n\n allTestDataPresent(): boolean {\n return !!(\n this.testAddress &&\n this.testOrderLines &&\n this.testOrderLines.length &&\n this.selectedChecker &&\n this.selectedCalculator\n );\n }\n\n runTest() {\n this.fetchTestResult$.next([this.testAddress, this.testOrderLines]);\n this.testDataUpdated = false;\n }\n\n /**\n * Given a ShippingMethod and the value of the detailForm, this method creates an updated copy which\n * can then be persisted to the API.\n */\n private getUpdatedShippingMethod(\n shippingMethod: NonNullable<GetShippingMethodDetailQuery['shippingMethod']>,\n formGroup: typeof this.detailForm,\n languageCode: LanguageCode,\n ): Omit<CreateShippingMethodInput | UpdateShippingMethodInput, 'checker' | 'calculator'> {\n const formValue = formGroup.value;\n const input = createUpdatedTranslatable({\n translatable: shippingMethod,\n updatedFields: formValue,\n customFieldConfig: this.customFields,\n languageCode,\n defaultTranslation: {\n languageCode,\n name: shippingMethod.name || '',\n description: shippingMethod.description || '',\n },\n });\n return { ...input, fulfillmentHandler: formValue.fulfillmentHandler };\n }\n\n protected setFormValues(shippingMethod: ShippingMethodFragment, languageCode: LanguageCode): void {\n const currentTranslation = findTranslation(shippingMethod, languageCode);\n this.detailForm.patchValue({\n name: currentTranslation?.name ?? '',\n description: currentTranslation?.description ?? '',\n code: shippingMethod.code,\n fulfillmentHandler: shippingMethod.fulfillmentHandlerCode,\n checker: shippingMethod.checker || {},\n calculator: shippingMethod.calculator || {},\n });\n if (!this.selectedChecker) {\n this.selectedChecker = shippingMethod.checker && {\n code: shippingMethod.checker.code,\n args: shippingMethod.checker.args.map(a => ({ ...a, value: getConfigArgValue(a.value) })),\n };\n }\n if (!this.selectedCalculator) {\n this.selectedCalculator = shippingMethod.calculator && {\n code: shippingMethod.calculator?.code,\n args: shippingMethod.calculator?.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 shippingMethod,\n currentTranslation,\n );\n }\n }\n}\n","import {\n createBulkAssignToChannelAction,\n createBulkDeleteAction,\n createBulkRemoveFromChannelAction,\n GetShippingMethodListQuery,\n GetRolesQuery,\n ItemOf,\n Permission,\n AssignShippingMethodsToChannelDocument,\n RemoveShippingMethodsFromChannelDocument,\n} from '@deenruv/admin-ui/core';\nimport { gql } from 'apollo-angular';\nimport { map } from 'rxjs/operators';\n\nexport const deleteShippingMethodsBulkAction = createBulkDeleteAction<\n ItemOf<GetShippingMethodListQuery, 'shippingMethods'>\n>({\n location: 'shipping-method-list',\n requiresPermission: userPermissions => userPermissions.includes(Permission.DeleteShippingMethod),\n getItemName: item => item.name,\n bulkDelete: (dataService, ids) =>\n dataService.shippingMethod.deleteShippingMethods(ids).pipe(map(res => res.deleteShippingMethods)),\n});\n\nconst ASSIGN_SHIPPING_METHODS_TO_CHANNEL = gql`\n mutation AssignShippingMethodsToChannel($input: AssignShippingMethodsToChannelInput!) {\n assignShippingMethodsToChannel(input: $input) {\n id\n name\n }\n }\n`;\n\nconst REMOVE_SHIPPING_METHODS_FROM_CHANNEL = gql`\n mutation RemoveShippingMethodsFromChannel($input: RemoveShippingMethodsFromChannelInput!) {\n removeShippingMethodsFromChannel(input: $input) {\n id\n name\n }\n }\n`;\nexport const assignShippingMethodsToChannelBulkAction = createBulkAssignToChannelAction<\n ItemOf<GetShippingMethodListQuery, 'shippingMethods'>\n>({\n location: 'shipping-method-list',\n requiresPermission: userPermissions =>\n userPermissions.includes(Permission.UpdateShippingMethod) ||\n userPermissions.includes(Permission.UpdateSettings),\n getItemName: item => item.name,\n bulkAssignToChannel: (dataService, shippingMethodIds, channelIds) =>\n channelIds.map(channelId =>\n dataService\n .mutate(AssignShippingMethodsToChannelDocument, {\n input: {\n channelId,\n shippingMethodIds,\n },\n })\n .pipe(map(res => res.assignShippingMethodsToChannel)),\n ),\n});\n\nexport const removeShippingMethodsFromChannelBulkAction = createBulkRemoveFromChannelAction<\n ItemOf<GetShippingMethodListQuery, 'shippingMethods'>\n>({\n location: 'shipping-method-list',\n requiresPermission: userPermissions =>\n userPermissions.includes(Permission.DeleteShippingMethod) ||\n userPermissions.includes(Permission.DeleteSettings),\n getItemName: item => item.name,\n bulkRemoveFromChannel: (dataService, shippingMethodIds, channelId) =>\n dataService\n .mutate(RemoveShippingMethodsFromChannelDocument, {\n input: {\n channelId,\n shippingMethodIds,\n },\n })\n .pipe(map(res => res.removeShippingMethodsFromChannel)),\n});\n","<vdr-page-block>\n <vdr-action-bar>\n <vdr-ab-left>\n <vdr-language-selector\n [availableLanguageCodes]=\"availableLanguages$ | async\"\n [currentLanguageCode]=\"contentLanguage$ | async\"\n (languageCodeChange)=\"setLanguage($event)\"\n />\n </vdr-ab-left>\n <vdr-ab-right>\n <vdr-action-bar-items locationId=\"shipping-method-list\" />\n <a\n class=\"btn btn-primary\"\n *vdrIfPermissions=\"['CreateSettings', 'CreateShippingMethod']\"\n [routerLink]=\"['./', 'create']\"\n >\n <clr-icon shape=\"plus\"></clr-icon>\n {{ 'settings.create-new-shipping-method' | translate }}\n </a>\n <vdr-action-bar-dropdown-menu locationId=\"shipping-method-list\" />\n </vdr-ab-right>\n </vdr-action-bar>\n</vdr-page-block>\n<vdr-data-table-2\n id=\"shipping-method-list\"\n [items]=\"items$ | async\"\n [itemsPerPage]=\"itemsPerPage$ | async\"\n [totalItems]=\"totalItems$ | async\"\n [currentPage]=\"currentPage$ | async\"\n [filters]=\"filters\"\n (pageChange)=\"setPageNumber($event)\"\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\n>\n <vdr-bulk-action-menu\n locationId=\"shipping-method-list\"\n [hostComponent]=\"this\"\n [selectionManager]=\"selectionManager\"\n />\n <vdr-dt2-search\n [searchTermControl]=\"searchTermControl\"\n [searchTermPlaceholder]=\"'catalog.filter-by-name' | translate\"\n />\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\n <ng-template let-shippingMethod=\"item\">\n {{ shippingMethod.id }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column\n [heading]=\"'common.created-at' | translate\" id=\"created-at\"\n [hiddenByDefault]=\"true\"\n [sort]=\"sorts.get('createdAt')\"\n >\n <ng-template let-shippingMethod=\"item\">\n {{ shippingMethod.createdAt | localeDate : 'short' }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column\n [heading]=\"'common.updated-at' | translate\" id=\"updated-at\"\n [hiddenByDefault]=\"true\"\n [sort]=\"sorts.get('updatedAt')\"\n >\n <ng-template let-shippingMethod=\"item\">\n {{ shippingMethod.updatedAt | localeDate : 'short' }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'common.name' | translate\" id=\"name\" [optional]=\"false\" [sort]=\"sorts.get('name')\">\n <ng-template let-shippingMethod=\"item\">\n <a class=\"button-ghost\" [routerLink]=\"['./', shippingMethod.id]\"\n ><span>{{ shippingMethod.name }}</span>\n <clr-icon shape=\"arrow right\"></clr-icon>\n </a>\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'common.code' | translate\" id=\"code\" [sort]=\"sorts.get('code')\">\n <ng-template let-shippingMethod=\"item\">\n {{ shippingMethod.code }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column\n [heading]=\"'common.description' | translate\" id=\"description\"\n [sort]=\"sorts.get('description')\"\n [hiddenByDefault]=\"true\"\n >\n <ng-template let-shippingMethod=\"item\">\n {{ shippingMethod.description }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'settings.fulfillment-handler' | translate\" id=\"fulfillment-handler\" [sort]=\"sorts.get('fulfillmentHandlerCode')\">\n <ng-template let-shippingMethod=\"item\">\n {{ shippingMethod.fulfillmentHandlerCode }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-custom-field-column\n *ngFor=\"let customField of customFields\"\n [customField]=\"customField\"\n [sorts]=\"sorts\"\n />\n</vdr-data-table-2>\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport { GetShippingMethodListDocument, TypedBaseListComponent } from '@deenruv/admin-ui/core';\nimport { gql } from 'apollo-angular';\n\nexport const GET_SHIPPING_METHOD_LIST = gql`\n query GetShippingMethodList($options: ShippingMethodListOptions) {\n shippingMethods(options: $options) {\n items {\n ...ShippingMethodListItem\n }\n totalItems\n }\n }\n fragment ShippingMethodListItem on ShippingMethod {\n id\n createdAt\n updatedAt\n code\n name\n description\n fulfillmentHandlerCode\n }\n`;\n\n@Component({\n selector: 'vdr-shipping-method-list',\n templateUrl: './shipping-method-list.component.html',\n styleUrls: ['./shipping-method-list.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShippingMethodListComponent\n extends TypedBaseListComponent<typeof GetShippingMethodListDocument, 'shippingMethods'>\n implements OnInit\n{\n readonly customFields = this.getCustomFieldConfig('ShippingMethod');\n readonly filters = this.createFilterCollection()\n .addIdFilter()\n .addDateFilters()\n .addFilter({\n name: 'name',\n type: { kind: 'text' },\n label: _('common.name'),\n filterField: 'name',\n })\n .addFilter({\n name: 'code',\n type: { kind: 'text' },\n label: _('common.code'),\n filterField: 'code',\n })\n .addFilter({\n name: 'description',\n type: { kind: 'text' },\n label: _('common.description'),\n filterField: 'description',\n })\n .addFilter({\n name: 'fulfillmentHandler',\n type: { kind: 'text' },\n label: _('settings.fulfillment-handler'),\n filterField: 'fulfillmentHandlerCode',\n })\n .addCustomFieldFilters(this.customFields)\n .connectToRoute(this.route);\n\n readonly sorts = this.createSortCollection()\n .defaultSort('createdAt', 'DESC')\n .addSort({ name: 'createdAt' })\n .addSort({ name: 'updatedAt' })\n .addSort({ name: 'name' })\n .addSort({ name: 'code' })\n .addSort({ name: 'description' })\n .addSort({ name: 'fulfillmentHandlerCode' })\n .addCustomFieldSorts(this.customFields)\n .connectToRoute(this.route);\n\n constructor() {\n super();\n super.configure({\n document: GetShippingMethodListDocument,\n getItems: data => data.shippingMethods,\n setVariables: (skip, take) => ({\n options: {\n skip,\n take,\n filter: {\n name: {\n contains: this.searchTermControl.value,\n },\n ...this.filters.createFilterInput(),\n },\n sort: this.sorts.createSortInput(),\n },\n }),\n refreshListOnChanges: [this.filters.valueChanges, this.sorts.valueChanges],\n });\n }\n}\n","<vdr-page-block>\n <vdr-action-bar>\n <vdr-ab-left></vdr-ab-left>\n\n <vdr-ab-right>\n <vdr-action-bar-items locationId=\"stock-location-detail\" />\n <button\n class=\"btn btn-primary\"\n *ngIf=\"isNew$ | async; else updateButton\"\n (click)=\"create()\"\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\n >\n {{ 'common.create' | translate }}\n </button>\n <ng-template #updateButton>\n <button\n class=\"btn btn-primary\"\n (click)=\"save()\"\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\n *vdrIfPermissions=\"'UpdateStockLocation'\"\n >\n {{ 'common.update' | translate }}\n </button>\n </ng-template>\n <vdr-action-bar-dropdown-menu locationId=\"stock-location-detail\" />\n </vdr-ab-right>\n </vdr-action-bar>\n</vdr-page-block>\n\n<form class=\"form\" [formGroup]=\"detailForm\">\n <vdr-page-detail-layout>\n <vdr-page-detail-sidebar>\n <vdr-card *ngIf=\"entity$ | async as entity\">\n <vdr-page-entity-info [entity]=\"entity\" />\n </vdr-card>\n </vdr-page-detail-sidebar>\n <vdr-page-block>\n <vdr-card>\n <div class=\"form-grid\">\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\n <input\n id=\"name\"\n type=\"text\"\n formControlName=\"name\"\n [readonly]=\"!('UpdateStockLocation' | hasPermission)\"\n />\n </vdr-form-field>\n <vdr-form-field\n class=\"form-grid-span\"\n [label]=\"'common.description' | translate\"\n for=\"slug\"\n [errors]=\"{ pattern: 'catalog.slug-pattern-error' | translate }\"\n >\n <vdr-rich-text-editor\n formControlName=\"description\"\n [readonly]=\"!('UpdateStockLocation' | hasPermission)\"\n ></vdr-rich-text-editor>\n </vdr-form-field>\n </div>\n </vdr-card>\n <vdr-card\n formGroupName=\"customFields\"\n *ngIf=\"customFields.length\"\n [title]=\"'common.custom-fields' | translate\"\n >\n <vdr-tabbed-custom-fields\n entityName=\"StockLocation\"\n [customFields]=\"customFields\"\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\n ></vdr-tabbed-custom-fields>\n </vdr-card>\n <vdr-custom-detail-component-host\n locationId=\"stock-location-detail\"\n [entity$]=\"entity$\"\n [detailForm]=\"detailForm\"\n ></vdr-custom-detail-component-host>\n </vdr-page-block>\n </vdr-page-detail-layout>\n</form>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { FormBuilder, Validators } from '@angular/forms';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n CreateStockLocationDocument,\n CreateStockLocationInput,\n DataService,\n getCustomFieldsDefaults,\n GetStockLocationDetailDocument,\n NotificationService,\n StockLocationDetailFragment,\n TypedBaseDetailComponent,\n UpdateStockLocationDocument,\n UpdateStockLocationInput,\n} from '@deenruv/admin-ui/core';\nimport { gql } from 'apollo-angular';\nimport { mergeMap, take } from 'rxjs/operators';\n\nconst STOCK_LOCATION_DETAIL_FRAGMENT = gql`\n fragment StockLocationDetail on StockLocation {\n id\n createdAt\n updatedAt\n name\n description\n }\n`;\n\nexport const GET_STOCK_LOCATION_DETAIL = gql`\n query GetStockLocationDetail($id: ID!) {\n stockLocation(id: $id) {\n ...StockLocationDetail\n }\n }\n ${STOCK_LOCATION_DETAIL_FRAGMENT}\n`;\n\nexport const CREATE_STOCK_LOCATION = gql`\n mutation CreateStockLocation($input: CreateStockLocationInput!) {\n createStockLocation(input: $input) {\n ...StockLocationDetail\n }\n }\n ${STOCK_LOCATION_DETAIL_FRAGMENT}\n`;\n\nexport const UPDATE_STOCK_LOCATION = gql`\n mutation UpdateStockLocation($input: UpdateStockLocationInput!) {\n updateStockLocation(input: $input) {\n ...StockLocationDetail\n }\n }\n ${STOCK_LOCATION_DETAIL_FRAGMENT}\n`;\n\n@Component({\n selector: 'vdr-stock-location-detail',\n templateUrl: './stock-location-detail.component.html',\n styleUrls: ['./stock-location-detail.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class StockLocationDetailComponent\n extends TypedBaseDetailComponent<typeof GetStockLocationDetailDocument, 'stockLocation'>\n implements OnInit, OnDestroy\n{\n customFields = this.getCustomFieldConfig('StockLocation');\n detailForm = this.formBuilder.group({\n name: ['', Validators.required],\n description: [''],\n customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),\n });\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 }\n\n ngOnDestroy() {\n this.destroy();\n }\n\n create() {\n if (!this.detailForm.dirty) {\n return;\n }\n const { name, description, customFields } = this.detailForm.value;\n if (!name) {\n return;\n }\n const input = {\n name,\n description,\n customFields,\n } satisfies CreateStockLocationInput;\n this.dataService.mutate(CreateStockLocationDocument, { input }).subscribe(\n data => {\n this.notificationService.success(_('common.notify-create-success'), {\n entity: 'StockLocation',\n });\n this.detailForm.markAsPristine();\n this.changeDetector.markForCheck();\n this.router.navigate(['../', data.createStockLocation.id], { relativeTo: this.route });\n },\n err => {\n this.notificationService.error(_('common.notify-create-error'), {\n entity: 'StockLocation',\n });\n },\n );\n }\n\n save() {\n if (!this.detailForm.dirty) {\n return;\n }\n const formValue = this.detailForm.value;\n this.entity$\n .pipe(\n take(1),\n mergeMap(taxRate => {\n const input = {\n id: taxRate.id,\n name: formValue.name,\n description: formValue.description,\n customFields: formValue.customFields,\n } satisfies UpdateStockLocationInput;\n return this.dataService.mutate(UpdateStockLocationDocument, { input });\n }),\n )\n .subscribe(\n data => {\n this.notificationService.success(_('common.notify-update-success'), {\n entity: 'StockLocation',\n });\n this.detailForm.markAsPristine();\n this.changeDetector.markForCheck();\n },\n err => {\n this.notificationService.error(_('common.notify-update-error'), {\n entity: 'StockLocation',\n });\n },\n );\n }\n\n /**\n * Update the form values when the entity changes.\n */\n protected setFormValues(entity: StockLocationDetailFragment): void {\n this.detailForm.patchValue({\n name: entity.name,\n description: entity.description,\n });\n if (this.customFields.length) {\n this.setCustomFieldFormValues(this.customFields, this.detailForm.get('customFields'), entity);\n }\n }\n}\n","import {\n AssignStockLocationsToChannelDocument,\n createBulkAssignToChannelAction,\n createBulkDeleteAction,\n createBulkRemoveFromChannelAction,\n DeleteStockLocationsDocument,\n DeletionResult,\n GetStockLocationListQuery,\n ItemOf,\n Permission,\n RemoveStockLocationsFromChannelDocument,\n} from '@deenruv/admin-ui/core';\nimport { gql } from 'apollo-angular';\nimport { map } from 'rxjs/operators';\n\nconst DELETE_STOCK_LOCATIONS = gql`\n mutation DeleteStockLocations($input: [DeleteStockLocationInput!]!) {\n deleteStockLocations(input: $input) {\n result\n message\n }\n }\n`;\n\nconst ASSIGN_STOCK_LOCATIONS_TO_CHANNEL = gql`\n mutation AssignStockLocationsToChannel($input: AssignStockLocationsToChannelInput!) {\n assignStockLocationsToChannel(input: $input) {\n id\n name\n }\n }\n`;\n\nconst REMOVE_STOCK_LOCATIONS_FROM_CHANNEL = gql`\n mutation RemoveStockLocationsFromChannel($input: RemoveStockLocationsFromChannelInput!) {\n removeStockLocationsFromChannel(input: $input) {\n id\n name\n }\n }\n`;\n\nexport const deleteStockLocationsBulkAction = createBulkDeleteAction<\n ItemOf<GetStockLocationListQuery, 'stockLocations'>\n>({\n location: 'stock-location-list',\n requiresPermission: userPermissions =>\n userPermissions.includes(Permission.DeleteStockLocation) ||\n userPermissions.includes(Permission.DeleteCatalog),\n getItemName: item => item.name,\n bulkDelete: (dataService, ids) =>\n dataService\n .mutate(DeleteStockLocationsDocument, {\n input: ids.map(id => ({ id })),\n })\n .pipe(map(res => res.deleteStockLocations)),\n shouldRetryItem: response => response.result === DeletionResult.NOT_DELETED,\n});\n\nexport const assignStockLocationsToChannelBulkAction = createBulkAssignToChannelAction<\n ItemOf<GetStockLocationListQuery, 'stockLocations'>\n>({\n location: 'stock-location-list',\n requiresPermission: userPermissions =>\n userPermissions.includes(Permission.UpdateCatalog) ||\n userPermissions.includes(Permission.UpdateStockLocation),\n getItemName: item => item.name,\n bulkAssignToChannel: (dataService, stockLocationIds, channelIds) =>\n channelIds.map(channelId =>\n dataService\n .mutate(AssignStockLocationsToChannelDocument, {\n input: {\n channelId,\n stockLocationIds,\n },\n })\n .pipe(map(res => res.assignStockLocationsToChannel)),\n ),\n});\n\nexport const removeStockLocationsFromChannelBulkAction = createBulkRemoveFromChannelAction<\n ItemOf<GetStockLocationListQuery, 'stockLocations'>\n>({\n location: 'stock-location-list',\n requiresPermission: userPermissions =>\n userPermissions.includes(Permission.DeleteCatalog) ||\n userPermissions.includes(Permission.DeleteStockLocation),\n getItemName: item => item.name,\n bulkRemoveFromChannel: (dataService, stockLocationIds, channelId) =>\n dataService\n .mutate(RemoveStockLocationsFromChannelDocument, {\n input: {\n channelId,\n stockLocationIds,\n },\n })\n .pipe(map(res => res.removeStockLocationsFromChannel)),\n});\n","<vdr-page-block>\n <vdr-action-bar>\n <vdr-ab-left> </vdr-ab-left>\n <vdr-ab-right>\n <vdr-action-bar-items locationId=\"stock-location-list\" />\n <a\n class=\"button primary\"\n *vdrIfPermissions=\"['CreateStockLocation']\"\n [routerLink]=\"['./', 'create']\"\n >\n <clr-icon shape=\"plus\"></clr-icon>\n {{ 'catalog.create-new-stock-location' | translate }}\n </a>\n <vdr-action-bar-dropdown-menu locationId=\"stock-location-list\" />\n </vdr-ab-right>\n </vdr-action-bar>\n</vdr-page-block>\n<vdr-data-table-2\n class=\"mt-2\"\n id=\"stock-location-list\"\n [items]=\"items$ | async\"\n [itemsPerPage]=\"itemsPerPage$ | async\"\n [totalItems]=\"totalItems$ | async\"\n [currentPage]=\"currentPage$ | async\"\n [filters]=\"filters\"\n (pageChange)=\"setPageNumber($event)\"\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\n>\n <vdr-bulk-action-menu\n locationId=\"stock-location-list\"\n [hostComponent]=\"this\"\n [selectionManager]=\"selectionManager\"\n />\n <vdr-dt2-search\n [searchTermControl]=\"searchTermControl\"\n [searchTermPlaceholder]=\"'catalog.filter-by-name' | translate\"\n />\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\" [sort]=\"sorts.get('id')\">\n <ng-template let-stockLocation=\"item\">\n {{ stockLocation.id }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column\n [heading]=\"'common.created-at' | translate\" id=\"created-at\"\n [hiddenByDefault]=\"true\"\n [sort]=\"sorts.get('createdAt')\"\n >\n <ng-template let-stockLocation=\"item\">\n {{ stockLocation.createdAt | localeDate : 'short' }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column\n [heading]=\"'common.updated-at' | translate\" id=\"updated-at\"\n [hiddenByDefault]=\"true\"\n [sort]=\"sorts.get('updatedAt')\"\n >\n <ng-template let-stockLocation=\"item\">\n {{ stockLocation.updatedAt | localeDate : 'short' }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'common.name' | translate\" id=\"name\" [optional]=\"false\" [sort]=\"sorts.get('name')\">\n <ng-template let-stockLocation=\"item\">\n <a class=\"button-ghost\" [routerLink]=\"['./', stockLocation.id]\"\n ><span>{{ stockLocation.name }}</span\n ><clr-icon shape=\"arrow right\"\n /></a>\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'common.description' | translate\" id=\"description\" [sort]=\"sorts.get('description')\">\n <ng-template let-stockLocation=\"item\">\n <div class=\"description\" [innerHTML]=\"stockLocation.description\"></div>\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-custom-field-column\n *ngFor=\"let field of customFields\"\n [customField]=\"field\"\n [sorts]=\"sorts\" />\n</vdr-data-table-2>\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport { GetStockLocationListDocument, TypedBaseListComponent } from '@deenruv/admin-ui/core';\nimport { gql } from 'apollo-angular';\n\nexport const GET_STOCK_LOCATION_LIST = gql`\n query GetStockLocationList($options: StockLocationListOptions) {\n stockLocations(options: $options) {\n items {\n ...StockLocationListItem\n }\n totalItems\n }\n }\n fragment StockLocationListItem on StockLocation {\n id\n createdAt\n updatedAt\n name\n description\n }\n`;\n\n@Component({\n selector: 'vdr-stock-location-list',\n templateUrl: './stock-location-list.component.html',\n styleUrls: ['./stock-location-list.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class StockLocationListComponent\n extends TypedBaseListComponent<typeof GetStockLocationListDocument, 'stockLocations'>\n implements OnInit\n{\n readonly customFields = this.getCustomFieldConfig('StockLocation');\n readonly filters = this.createFilterCollection()\n .addIdFilter()\n .addDateFilters()\n .addFilters([\n {\n name: 'enabled',\n type: { kind: 'text' },\n label: _('common.enabled'),\n filterField: 'name',\n },\n {\n name: 'sku',\n type: { kind: 'text' },\n label: _('catalog.sku'),\n filterField: 'description',\n },\n ])\n .addCustomFieldFilters(this.customFields)\n .connectToRoute(this.route);\n\n readonly sorts = this.createSortCollection()\n .addSorts([\n { name: 'id' },\n { name: 'createdAt' },\n { name: 'updatedAt' },\n { name: 'name' },\n { name: 'description' },\n ])\n .addCustomFieldSorts(this.customFields)\n .connectToRoute(this.route);\n\n constructor() {\n super();\n this.configure({\n document: GetStockLocationListDocument,\n getItems: data => data.stockLocations,\n setVariables: (skip, take) => ({\n options: {\n skip,\n take,\n filter: {\n name: {\n contains: this.searchTermControl.value,\n },\n ...this.filters.createFilterInput(),\n },\n sort: this.sorts.createSortInput(),\n },\n }),\n refreshListOnChanges: [this.sorts.valueChanges, this.filters.valueChanges],\n });\n }\n}\n","<vdr-page-block>\n <vdr-action-bar>\n <vdr-ab-left> </vdr-ab-left>\n\n <vdr-ab-right>\n <vdr-action-bar-items locationId=\"tax-category-detail\" />\n <button\n class=\"btn btn-primary\"\n *ngIf=\"isNew$ | async; else updateButton\"\n (click)=\"create()\"\n [disabled]=\"!saveButtonEnabled()\"\n >\n {{ 'common.create' | translate }}\n </button>\n <ng-template #updateButton>\n <button\n class=\"btn btn-primary\"\n (click)=\"save()\"\n [disabled]=\"!saveButtonEnabled()\"\n *vdrIfPermissions=\"updatePermission\"\n >\n {{ 'common.update' | translate }}\n </button>\n </ng-template>\n <vdr-action-bar-dropdown-menu locationId=\"tax-category-detail\" />\n </vdr-ab-right>\n </vdr-action-bar>\n</vdr-page-block>\n<form class=\"form\" [formGroup]=\"detailForm\">\n <vdr-page-detail-layout>\n <vdr-page-detail-sidebar>\n <vdr-card *ngIf=\"entity$ | async as entity\">\n <vdr-page-entity-info [entity]=\"entity\" />\n </vdr-card>\n </vdr-page-detail-sidebar>\n <vdr-page-block>\n <vdr-card>\n <div class=\"form-grid\">\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\n <input\n id=\"name\"\n type=\"text\"\n formControlName=\"name\"\n [readonly]=\"!(updatePermission | hasPermission)\"\n />\n </vdr-form-field>\n <vdr-form-field [label]=\"'common.default-tax-category' | translate\" for=\"isDefault\">\n <clr-toggle-wrapper>\n <input\n type=\"checkbox\"\n clrToggle\n id=\"isDefault\"\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\n formControlName=\"isDefault\"\n />\n </clr-toggle-wrapper>\n </vdr-form-field>\n </div>\n </vdr-card>\n <vdr-card\n formGroupName=\"customFields\"\n *ngIf=\"customFields.length\"\n [title]=\"'common.custom-fields' | translate\"\n >\n <vdr-tabbed-custom-fields\n entityName=\"TaxCategory\"\n [customFields]=\"customFields\"\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\n ></vdr-tabbed-custom-fields>\n </vdr-card>\n <vdr-custom-detail-component-host\n locationId=\"tax-category-detail\"\n [entity$]=\"entity$\"\n [detailForm]=\"detailForm\"\n ></vdr-custom-detail-component-host>\n </vdr-page-block>\n </vdr-page-detail-layout>\n</form>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { FormBuilder, Validators } from '@angular/forms';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n CreateTaxCategoryInput,\n DataService,\n getCustomFieldsDefaults,\n GetTaxCategoryDetailDocument,\n LanguageCode,\n NotificationService,\n Permission,\n TAX_CATEGORY_FRAGMENT,\n TaxCategoryFragment,\n TypedBaseDetailComponent,\n UpdateTaxCategoryInput,\n} from '@deenruv/admin-ui/core';\nimport { gql } from 'apollo-angular';\nimport { mergeMap, take } from 'rxjs/operators';\n\nexport const GET_TAX_CATEGORY_DETAIL = gql`\n query GetTaxCategoryDetail($id: ID!) {\n taxCategory(id: $id) {\n ...TaxCategory\n }\n }\n ${TAX_CATEGORY_FRAGMENT}\n`;\n\n@Component({\n selector: 'vdr-tax-detail',\n templateUrl: './tax-category-detail.component.html',\n styleUrls: ['./tax-category-detail.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TaxCategoryDetailComponent\n extends TypedBaseDetailComponent<typeof GetTaxCategoryDetailDocument, 'taxCategory'>\n implements OnInit, OnDestroy\n{\n customFields = this.getCustomFieldConfig('TaxCategory');\n detailForm = this.formBuilder.group({\n name: ['', Validators.required],\n isDefault: false,\n customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),\n });\n readonly updatePermission = [Permission.UpdateSettings, Permission.UpdateTaxCategory];\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 }\n\n ngOnDestroy() {\n this.destroy();\n }\n\n saveButtonEnabled(): boolean {\n return this.detailForm.dirty && this.detailForm.valid;\n }\n\n create() {\n if (!this.detailForm.dirty) {\n return;\n }\n const formValue = this.detailForm.value;\n const input = {\n name: formValue.name,\n isDefault: formValue.isDefault,\n customFields: formValue.customFields,\n } as CreateTaxCategoryInput;\n this.dataService.settings.createTaxCategory(input).subscribe(\n data => {\n this.notificationService.success(_('common.notify-create-success'), {\n entity: 'TaxCategory',\n });\n this.detailForm.markAsPristine();\n this.changeDetector.markForCheck();\n this.router.navigate(['../', data.createTaxCategory.id], { relativeTo: this.route });\n },\n err => {\n this.notificationService.error(_('common.notify-create-error'), {\n entity: 'TaxCategory',\n });\n },\n );\n }\n\n save() {\n if (!this.detailForm.dirty) {\n return;\n }\n const formValue = this.detailForm.value;\n this.entity$\n .pipe(\n take(1),\n mergeMap(taxCategory => {\n const input = {\n id: taxCategory.id,\n name: formValue.name,\n isDefault: formValue.isDefault,\n customFields: formValue.customFields,\n } as UpdateTaxCategoryInput;\n return this.dataService.settings.updateTaxCategory(input);\n }),\n )\n .subscribe(\n data => {\n this.notificationService.success(_('common.notify-update-success'), {\n entity: 'TaxCategory',\n });\n this.detailForm.markAsPristine();\n this.changeDetector.markForCheck();\n },\n err => {\n this.notificationService.error(_('common.notify-update-error'), {\n entity: 'TaxCategory',\n });\n },\n );\n }\n\n /**\n * Update the form values when the entity changes.\n */\n protected setFormValues(entity: TaxCategoryFragment, languageCode: LanguageCode): void {\n this.detailForm.patchValue({\n name: entity.name,\n isDefault: entity.isDefault,\n });\n if (this.customFields.length) {\n this.setCustomFieldFormValues(this.customFields, this.detailForm.get('customFields'), entity);\n }\n }\n}\n","import { createBulkDeleteAction, GetTaxCategoryListQuery, ItemOf, Permission } from '@deenruv/admin-ui/core';\nimport { map } from 'rxjs/operators';\n\nexport const deleteTaxCategoriesBulkAction = createBulkDeleteAction<\n ItemOf<GetTaxCategoryListQuery, 'taxCategories'>\n>({\n location: 'tax-category-list',\n requiresPermission: userPermissions =>\n userPermissions.includes(Permission.DeleteSettings) ||\n userPermissions.includes(Permission.DeleteTaxCategory),\n getItemName: item => item.name,\n bulkDelete: (dataService, ids) =>\n dataService.settings.deleteTaxCategories(ids).pipe(map(res => res.deleteTaxCategories)),\n});\n","<vdr-page-block>\n <vdr-action-bar>\n <vdr-ab-left> </vdr-ab-left>\n <vdr-ab-right>\n <vdr-action-bar-items locationId=\"tax-category-list\" />\n <a\n class=\"btn btn-primary\"\n *vdrIfPermissions=\"['CreateSettings', 'CreateTaxCategory']\"\n [routerLink]=\"['./', 'create']\"\n >\n <clr-icon shape=\"plus\"></clr-icon>\n {{ 'settings.create-new-tax-category' | translate }}\n </a>\n <vdr-action-bar-dropdown-menu locationId=\"tax-category-list\" />\n </vdr-ab-right>\n </vdr-action-bar>\n</vdr-page-block>\n<vdr-data-table-2\n id=\"tax-category-list\"\n [items]=\"items$ | async\"\n [itemsPerPage]=\"itemsPerPage$ | async\"\n [totalItems]=\"totalItems$ | async\"\n [currentPage]=\"currentPage$ | async\"\n [filters]=\"filters\"\n (pageChange)=\"setPageNumber($event)\"\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\n>\n <vdr-bulk-action-menu\n locationId=\"tax-category-list\"\n [hostComponent]=\"this\"\n [selectionManager]=\"selectionManager\"\n />\n <vdr-dt2-search\n [searchTermControl]=\"searchTermControl\"\n [searchTermPlaceholder]=\"'catalog.filter-by-name' | translate\"\n />\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\n <ng-template let-taxCategory=\"item\">\n {{ taxCategory.id }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column\n [heading]=\"'common.created-at' | translate\" id=\"created-at\"\n [hiddenByDefault]=\"true\"\n [sort]=\"sorts.get('createdAt')\"\n >\n <ng-template let-taxCategory=\"item\">\n {{ taxCategory.createdAt | localeDate : 'short' }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column\n [heading]=\"'common.updated-at' | translate\" id=\"updated-at\"\n [hiddenByDefault]=\"true\"\n [sort]=\"sorts.get('updatedAt')\"\n >\n <ng-template let-taxCategory=\"item\">\n {{ taxCategory.updatedAt | localeDate : 'short' }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'common.name' | translate\" id=\"name\" [optional]=\"false\" [sort]=\"sorts.get('name')\">\n <ng-template let-taxCategory=\"item\">\n <a class=\"button-ghost\" [routerLink]=\"['./', taxCategory.id]\"\n ><span>{{ taxCategory.name }}</span>\n <clr-icon shape=\"arrow right\"></clr-icon>\n </a>\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'common.default-tax-category' | translate\" id=\"default-tax-category\">\n <ng-template let-taxCategory=\"item\">\n <vdr-chip *ngIf=\"taxCategory.isDefault\">{{ 'common.default-tax-category' | translate }}</vdr-chip>\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-custom-field-column *ngFor=\"let customField of customFields\" [customField]=\"customField\" [sorts]=\"sorts\" />\n</vdr-data-table-2>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n GetTaxCategoryListDocument,\n TAX_CATEGORY_FRAGMENT,\n TypedBaseListComponent,\n} from '@deenruv/admin-ui/core';\nimport { gql } from 'apollo-angular';\n\nexport const GET_TAX_CATEGORY_LIST = gql`\n query GetTaxCategoryList($options: TaxCategoryListOptions) {\n taxCategories(options: $options) {\n items {\n ...TaxCategory\n }\n totalItems\n }\n }\n ${TAX_CATEGORY_FRAGMENT}\n`;\n\n@Component({\n selector: 'vdr-tax-list',\n templateUrl: './tax-category-list.component.html',\n styleUrls: ['./tax-category-list.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TaxCategoryListComponent extends TypedBaseListComponent<\n typeof GetTaxCategoryListDocument,\n 'taxCategories'\n> {\n readonly customFields = this.serverConfigService.getCustomFieldsFor('TaxCategory');\n readonly filters = this.createFilterCollection()\n .addIdFilter()\n .addFilter({\n name: 'name',\n type: { kind: 'text' },\n label: _('common.name'),\n filterField: 'name',\n })\n .addCustomFieldFilters(this.customFields)\n .connectToRoute(this.route);\n\n readonly sorts = this.createSortCollection()\n .defaultSort('createdAt', 'DESC')\n .addSort({ name: 'createdAt' })\n .addSort({ name: 'updatedAt' })\n .addSort({ name: 'name' })\n .addCustomFieldSorts(this.customFields)\n .connectToRoute(this.route);\n\n constructor() {\n super();\n super.configure({\n document: GetTaxCategoryListDocument,\n getItems: data => data.taxCategories,\n setVariables: (skip, take) => ({\n options: {\n skip,\n take,\n filter: {\n name: {\n contains: this.searchTermControl.value,\n },\n ...this.filters.createFilterInput(),\n },\n sort: this.sorts.createSortInput(),\n },\n }),\n refreshListOnChanges: [this.filters.valueChanges, this.sorts.valueChanges],\n });\n }\n}\n","<vdr-page-block>\n <vdr-action-bar>\n <vdr-ab-left></vdr-ab-left>\n\n <vdr-ab-right>\n <vdr-action-bar-items locationId=\"tax-rate-detail\" />\n <button\n class=\"btn btn-primary\"\n *ngIf=\"isNew$ | async; else updateButton\"\n (click)=\"create()\"\n [disabled]=\"!saveButtonEnabled()\"\n >\n {{ 'common.create' | translate }}\n </button>\n <ng-template #updateButton>\n <button\n class=\"btn btn-primary\"\n (click)=\"save()\"\n [disabled]=\"!saveButtonEnabled()\"\n *vdrIfPermissions=\"updatePermission\"\n >\n {{ 'common.update' | translate }}\n </button>\n </ng-template>\n <vdr-action-bar-dropdown-menu locationId=\"tax-rate-detail\" />\n </vdr-ab-right>\n </vdr-action-bar>\n</vdr-page-block>\n\n<form class=\"form\" [formGroup]=\"detailForm\">\n <vdr-page-detail-layout>\n <vdr-page-detail-sidebar>\n <vdr-card>\n <vdr-form-field [label]=\"'common.enabled' | translate\" for=\"enabled\">\n <clr-toggle-wrapper>\n <input\n type=\"checkbox\"\n clrToggle\n id=\"enabled\"\n formControlName=\"enabled\"\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\n />\n </clr-toggle-wrapper>\n </vdr-form-field>\n </vdr-card>\n <vdr-card *ngIf=\"entity$ | async as entity\">\n <vdr-page-entity-info [entity]=\"entity\" />\n </vdr-card>\n </vdr-page-detail-sidebar>\n <vdr-page-block>\n <vdr-card>\n <div class=\"form-grid\">\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\n <input\n id=\"name\"\n type=\"text\"\n formControlName=\"name\"\n [readonly]=\"!(updatePermission | hasPermission)\"\n />\n </vdr-form-field>\n <vdr-form-field [label]=\"'settings.rate' | translate\" for=\"value\">\n <vdr-affixed-input suffix=\"%\">\n <input\n id=\"value\"\n type=\"number\"\n step=\"0.1\"\n formControlName=\"value\"\n [readonly]=\"!(updatePermission | hasPermission)\"\n />\n </vdr-affixed-input>\n </vdr-form-field>\n <vdr-form-field [label]=\"'settings.tax-category' | translate\" for=\"taxCategoryId\">\n <select\n name=\"taxCategoryId\"\n formControlName=\"taxCategoryId\"\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\n >\n <option\n *ngFor=\"let taxCategory of taxCategories$ | async\"\n [value]=\"taxCategory.id\"\n >\n {{ taxCategory.name }}\n </option>\n </select>\n </vdr-form-field>\n <vdr-form-field [label]=\"'settings.zone' | translate\" for=\"zoneId\">\n <vdr-zone-selector\n name=\"zoneId\"\n formControlName=\"zoneId\"\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\n >\n </vdr-zone-selector>\n </vdr-form-field>\n </div>\n </vdr-card>\n <vdr-card\n formGroupName=\"customFields\"\n *ngIf=\"customFields.length\"\n [title]=\"'common.custom-fields' | translate\"\n >\n <vdr-tabbed-custom-fields\n entityName=\"TaxRate\"\n [customFields]=\"customFields\"\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\n ></vdr-tabbed-custom-fields>\n </vdr-card>\n <vdr-custom-detail-component-host\n locationId=\"tax-rate-detail\"\n [entity$]=\"entity$\"\n [detailForm]=\"detailForm\"\n ></vdr-custom-detail-component-host>\n </vdr-page-block>\n </vdr-page-detail-layout>\n</form>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { FormBuilder, Validators } from '@angular/forms';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n CreateTaxRateInput,\n CustomerGroup,\n DataService,\n getCustomFieldsDefaults,\n GetTaxRateDetailDocument,\n LanguageCode,\n NotificationService,\n Permission,\n TAX_RATE_FRAGMENT,\n TaxCategoryFragment,\n TaxRateFragment,\n TypedBaseDetailComponent,\n UpdateTaxRateInput,\n} from '@deenruv/admin-ui/core';\nimport { gql } from 'apollo-angular';\nimport { Observable } from 'rxjs';\nimport { mergeMap, take } from 'rxjs/operators';\n\nexport const GET_TAX_RATE_DETAIL = gql`\n query GetTaxRateDetail($id: ID!) {\n taxRate(id: $id) {\n ...TaxRate\n }\n }\n ${TAX_RATE_FRAGMENT}\n`;\n\n@Component({\n selector: 'vdr-tax-rate-detail',\n templateUrl: './tax-rate-detail.component.html',\n styleUrls: ['./tax-rate-detail.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TaxRateDetailComponent\n extends TypedBaseDetailComponent<typeof GetTaxRateDetailDocument, 'taxRate'>\n implements OnInit, OnDestroy\n{\n customFields = this.getCustomFieldConfig('TaxRate');\n detailForm = this.formBuilder.group({\n name: ['', Validators.required],\n enabled: [true],\n value: [0, Validators.required],\n taxCategoryId: ['', Validators.required],\n zoneId: ['', Validators.required],\n customerGroupId: [''],\n customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),\n });\n taxCategories$: Observable<TaxCategoryFragment[]>;\n groups$: Observable<CustomerGroup[]>;\n readonly updatePermission = [Permission.UpdateSettings, Permission.UpdateTaxRate];\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.taxCategories$ = this.dataService.settings\n .getTaxCategories({ take: 100 })\n .mapSingle(data => data.taxCategories.items);\n }\n\n ngOnDestroy() {\n this.destroy();\n }\n\n saveButtonEnabled(): boolean {\n return this.detailForm.dirty && this.detailForm.valid;\n }\n\n create() {\n if (!this.detailForm.dirty) {\n return;\n }\n const { name, enabled, value, taxCategoryId, zoneId, customerGroupId, customFields } =\n this.detailForm.value;\n if (!name || enabled == null || value == null || !taxCategoryId || !zoneId) {\n return;\n }\n const formValue = this.detailForm.value;\n const input = {\n name,\n enabled,\n value,\n categoryId: taxCategoryId,\n zoneId,\n customerGroupId: formValue.customerGroupId,\n customFields: formValue.customFields,\n } satisfies CreateTaxRateInput;\n this.dataService.settings.createTaxRate(input).subscribe(\n data => {\n this.notificationService.success(_('common.notify-create-success'), {\n entity: 'TaxRate',\n });\n this.detailForm.markAsPristine();\n this.changeDetector.markForCheck();\n this.router.navigate(['../', data.createTaxRate.id], { relativeTo: this.route });\n },\n err => {\n this.notificationService.error(_('common.notify-create-error'), {\n entity: 'TaxRate',\n });\n },\n );\n }\n\n save() {\n if (!this.detailForm.dirty) {\n return;\n }\n const formValue = this.detailForm.value;\n this.entity$\n .pipe(\n take(1),\n mergeMap(taxRate => {\n const input = {\n id: taxRate.id,\n name: formValue.name,\n enabled: formValue.enabled,\n value: formValue.value,\n categoryId: formValue.taxCategoryId,\n zoneId: formValue.zoneId,\n customerGroupId: formValue.customerGroupId,\n customFields: formValue.customFields,\n } satisfies UpdateTaxRateInput;\n return this.dataService.settings.updateTaxRate(input);\n }),\n )\n .subscribe(\n data => {\n this.notificationService.success(_('common.notify-update-success'), {\n entity: 'TaxRate',\n });\n this.detailForm.markAsPristine();\n this.changeDetector.markForCheck();\n },\n err => {\n this.notificationService.error(_('common.notify-update-error'), {\n entity: 'TaxRate',\n });\n },\n );\n }\n\n /**\n * Update the form values when the entity changes.\n */\n protected setFormValues(entity: TaxRateFragment, languageCode: LanguageCode): void {\n this.detailForm.patchValue({\n name: entity.name,\n enabled: entity.enabled,\n value: entity.value,\n taxCategoryId: entity.category ? entity.category.id : '',\n zoneId: entity.zone ? entity.zone.id : '',\n customerGroupId: entity.customerGroup ? entity.customerGroup.id : '',\n });\n if (this.customFields.length) {\n this.setCustomFieldFormValues(this.customFields, this.detailForm.get('customFields'), entity);\n }\n }\n}\n","import { createBulkDeleteAction, GetTaxRateListQuery, ItemOf, Permission } from '@deenruv/admin-ui/core';\nimport { map } from 'rxjs/operators';\n\nexport const deleteTaxRatesBulkAction = createBulkDeleteAction<ItemOf<GetTaxRateListQuery, 'taxRates'>>({\n location: 'tax-rate-list',\n requiresPermission: userPermissions =>\n userPermissions.includes(Permission.DeleteSettings) ||\n userPermissions.includes(Permission.DeleteTaxRate),\n getItemName: item => item.name,\n bulkDelete: (dataService, ids) =>\n dataService.settings.deleteTaxRates(ids).pipe(map(res => res.deleteTaxRates)),\n});\n","<vdr-page-block>\n <vdr-action-bar>\n <vdr-ab-left> </vdr-ab-left>\n <vdr-ab-right>\n <vdr-action-bar-items locationId=\"tax-rate-list\" />\n <a\n class=\"btn btn-primary\"\n *vdrIfPermissions=\"['CreateSettings', 'CreateTaxRate']\"\n [routerLink]=\"['./', 'create']\"\n >\n <clr-icon shape=\"plus\"></clr-icon>\n {{ 'settings.create-new-tax-rate' | translate }}\n </a>\n <vdr-action-bar-dropdown-menu locationId=\"tax-rate-list\" />\n </vdr-ab-right>\n </vdr-action-bar>\n</vdr-page-block>\n<vdr-data-table-2\n id=\"tax-rate-list\"\n [items]=\"items$ | async\"\n [itemsPerPage]=\"itemsPerPage$ | async\"\n [totalItems]=\"totalItems$ | async\"\n [currentPage]=\"currentPage$ | async\"\n [filters]=\"filters\"\n (pageChange)=\"setPageNumber($event)\"\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\n>\n <vdr-bulk-action-menu\n locationId=\"tax-rate-list\"\n [hostComponent]=\"this\"\n [selectionManager]=\"selectionManager\"\n />\n <vdr-dt2-search\n [searchTermControl]=\"searchTermControl\"\n [searchTermPlaceholder]=\"'catalog.filter-by-name' | translate\"\n />\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\n <ng-template let-taxRate=\"item\">\n {{ taxRate.id }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column\n [heading]=\"'common.created-at' | translate\" id=\"created-at\"\n [hiddenByDefault]=\"true\"\n [sort]=\"sorts.get('createdAt')\"\n >\n <ng-template let-taxRate=\"item\">\n {{ taxRate.createdAt | localeDate : 'short' }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column\n [heading]=\"'common.updated-at' | translate\" id=\"updated-at\"\n [hiddenByDefault]=\"true\"\n [sort]=\"sorts.get('updatedAt')\"\n >\n <ng-template let-taxRate=\"item\">\n {{ taxRate.updatedAt | localeDate : 'short' }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'common.name' | translate\" id=\"name\" [optional]=\"false\" [sort]=\"sorts.get('name')\">\n <ng-template let-taxRate=\"item\">\n <a class=\"button-ghost\" [routerLink]=\"['./', taxRate.id]\"\n ><span>{{ taxRate.name }}</span>\n <clr-icon shape=\"arrow right\"></clr-icon>\n </a>\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'settings.tax-category' | translate\" id=\"tax-category\">\n <ng-template let-taxRate=\"item\">\n {{ taxRate.category.name }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'settings.zone' | translate\" id=\"zone\">\n <ng-template let-taxRate=\"item\">\n {{ taxRate.zone.name }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'customer.customer-group' | translate\" id=\"customer-group\" [hiddenByDefault]=\"true\">\n <ng-template let-taxRate=\"item\">\n {{ taxRate.customerGroup?.name }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'settings.tax-rate' | translate\" id=\"tax-rate\" [sort]=\"sorts.get('value')\">\n <ng-template let-taxRate=\"item\"> {{ taxRate.value }}% </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'common.enabled' | translate\" id=\"enabled\">\n <ng-template let-taxRate=\"item\">\n <vdr-chip *ngIf=\"taxRate.enabled\" colorType=\"success\">{{\n 'common.enabled' | translate\n }}</vdr-chip>\n <vdr-chip *ngIf=\"!taxRate.enabled\" colorType=\"warning\">{{\n 'common.disabled' | translate\n }}</vdr-chip>\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-custom-field-column *ngFor=\"let customField of customFields\" [customField]=\"customField\" [sorts]=\"sorts\" />\n</vdr-data-table-2>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport { GetTaxRateListDocument, TAX_RATE_FRAGMENT, TypedBaseListComponent } from '@deenruv/admin-ui/core';\nimport { gql } from 'apollo-angular';\n\nexport const GET_TAX_RATE_LIST = gql`\n query GetTaxRateList($options: TaxRateListOptions) {\n taxRates(options: $options) {\n items {\n ...TaxRate\n }\n totalItems\n }\n }\n ${TAX_RATE_FRAGMENT}\n`;\n\n@Component({\n selector: 'vdr-tax-rate-list',\n templateUrl: './tax-rate-list.component.html',\n styleUrls: ['./tax-rate-list.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TaxRateListComponent extends TypedBaseListComponent<typeof GetTaxRateListDocument, 'taxRates'> {\n readonly customFields = this.getCustomFieldConfig('TaxRate');\n readonly filters = this.createFilterCollection()\n .addIdFilter()\n .addDateFilters()\n .addFilter({\n name: 'name',\n type: { kind: 'text' },\n label: _('common.name'),\n filterField: 'name',\n })\n .addFilter({\n name: 'enabled',\n type: { kind: 'boolean' },\n label: _('common.enabled'),\n filterField: 'enabled',\n })\n .addFilter({\n name: 'value',\n type: { kind: 'number' },\n label: _('common.value'),\n filterField: 'value',\n })\n .addCustomFieldFilters(this.customFields)\n .connectToRoute(this.route);\n\n readonly sorts = this.createSortCollection()\n .defaultSort('createdAt', 'DESC')\n .addSort({ name: 'createdAt' })\n .addSort({ name: 'updatedAt' })\n .addSort({ name: 'name' })\n .addSort({ name: 'value' })\n .addCustomFieldSorts(this.customFields)\n .connectToRoute(this.route);\n\n constructor() {\n super();\n super.configure({\n document: GetTaxRateListDocument,\n getItems: data => data.taxRates,\n setVariables: (skip, take) => ({\n options: {\n skip,\n take,\n filter: {\n name: {\n contains: this.searchTermControl.value,\n },\n ...this.filters.createFilterInput(),\n },\n sort: this.sorts.createSortInput(),\n },\n }),\n refreshListOnChanges: [this.filters.valueChanges, this.sorts.valueChanges],\n });\n }\n}\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\nimport {\n DataService,\n GetActiveChannelQuery,\n ShippingMethodQuote,\n TestEligibleShippingMethodsInput,\n} from '@deenruv/admin-ui/core';\nimport { Observable, Subject } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\nimport { TestAddress } from '../test-address-form/test-address-form.component';\nimport { TestOrderLine } from '../test-order-builder/test-order-builder.component';\n\n@Component({\n selector: 'vdr-test-shipping-methods',\n templateUrl: './test-shipping-methods.component.html',\n styleUrls: ['./test-shipping-methods.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TestShippingMethodsComponent implements OnInit {\n activeChannel$: Observable<GetActiveChannelQuery['activeChannel']>;\n testAddress: TestAddress;\n testOrderLines: TestOrderLine[];\n testDataUpdated = false;\n testResult$: Observable<ShippingMethodQuote[] | undefined>;\n private fetchTestResult$ = new Subject<[TestAddress, TestOrderLine[]]>();\n\n constructor(private dataService: DataService) {}\n\n ngOnInit() {\n this.activeChannel$ = this.dataService.settings\n .getActiveChannel()\n .mapStream(data => data.activeChannel);\n this.testResult$ = this.fetchTestResult$.pipe(\n switchMap(([address, lines]) => {\n const input: TestEligibleShippingMethodsInput = {\n shippingAddress: { ...address, streetLine1: 'test' },\n lines: lines.map(l => ({ productVariantId: l.id, quantity: l.quantity })),\n };\n return this.dataService.shippingMethod\n .testEligibleShippingMethods(input)\n .mapSingle(result => result.testEligibleShippingMethods);\n }),\n );\n }\n\n setTestOrderLines(event: TestOrderLine[]) {\n this.testOrderLines = event;\n this.testDataUpdated = true;\n }\n\n setTestAddress(event: TestAddress) {\n this.testAddress = event;\n this.testDataUpdated = true;\n }\n\n allTestDataPresent(): boolean {\n return !!(this.testAddress && this.testOrderLines && this.testOrderLines.length);\n }\n\n runTest() {\n this.fetchTestResult$.next([this.testAddress, this.testOrderLines]);\n this.testDataUpdated = false;\n }\n}\n","<vdr-page-block>\n <div class=\"test-wrapper\">\n <div class=\"\">\n <vdr-test-order-builder (orderLinesChange)=\"setTestOrderLines($event)\"></vdr-test-order-builder>\n </div>\n <div class=\"\">\n <vdr-test-address-form (addressChange)=\"setTestAddress($event)\"></vdr-test-address-form>\n <vdr-shipping-eligibility-test-result\n class=\"mt-1\"\n [currencyCode]=\"(activeChannel$ | async)?.currencyCode\"\n [okToRun]=\"allTestDataPresent()\"\n [testDataUpdated]=\"testDataUpdated\"\n [testResult]=\"testResult$ | async\"\n (runTest)=\"runTest()\"\n ></vdr-shipping-eligibility-test-result>\n </div>\n </div>\n</vdr-page-block>\n","<vdr-page-block>\n <vdr-action-bar>\n <vdr-ab-left> </vdr-ab-left>\n\n <vdr-ab-right>\n <vdr-action-bar-items locationId=\"zone-detail\" />\n <button\n class=\"btn btn-primary\"\n *ngIf=\"isNew$ | async; else updateButton\"\n (click)=\"create()\"\n [disabled]=\"!saveButtonEnabled()\"\n >\n {{ 'common.create' | translate }}\n </button>\n <ng-template #updateButton>\n <button\n class=\"btn btn-primary\"\n (click)=\"save()\"\n [disabled]=\"!saveButtonEnabled()\"\n *vdrIfPermissions=\"updatePermission\"\n >\n {{ 'common.update' | translate }}\n </button>\n </ng-template>\n <vdr-action-bar-dropdown-menu locationId=\"zone-detail\" />\n </vdr-ab-right>\n </vdr-action-bar>\n</vdr-page-block>\n<form class=\"form\" [formGroup]=\"detailForm\">\n <vdr-page-detail-layout>\n <vdr-page-detail-sidebar>\n <vdr-card *ngIf=\"entity$ | async as entity\">\n <vdr-page-entity-info [entity]=\"entity\" />\n </vdr-card>\n </vdr-page-detail-sidebar>\n <vdr-page-block>\n <vdr-card>\n <div class=\"form-grid\">\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\n <input\n id=\"name\"\n type=\"text\"\n formControlName=\"name\"\n [readonly]=\"!(updatePermission | hasPermission)\"\n />\n </vdr-form-field>\n </div>\n </vdr-card>\n <vdr-card\n formGroupName=\"customFields\"\n *ngIf=\"customFields.length\"\n [title]=\"'common.custom-fields' | translate\"\n >\n <vdr-tabbed-custom-fields\n entityName=\"Zone\"\n [customFields]=\"customFields\"\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\n ></vdr-tabbed-custom-fields>\n </vdr-card>\n <vdr-custom-detail-component-host\n locationId=\"zone-detail\"\n [entity$]=\"entity$\"\n [detailForm]=\"detailForm\"\n ></vdr-custom-detail-component-host>\n </vdr-page-block>\n </vdr-page-detail-layout>\n</form>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { FormBuilder, Validators } from '@angular/forms';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n CreateZoneInput,\n DataService,\n getCustomFieldsDefaults,\n GetZoneDetailDocument,\n GetZoneDetailQuery,\n LanguageCode,\n NotificationService,\n Permission,\n TypedBaseDetailComponent,\n UpdateTaxCategoryInput,\n} from '@deenruv/admin-ui/core';\nimport { gql } from 'apollo-angular';\nimport { mergeMap, take } from 'rxjs/operators';\n\nexport const GET_ZONE_DETAIL = gql`\n query GetZoneDetail($id: ID!) {\n zone(id: $id) {\n ...ZoneDetail\n }\n }\n fragment ZoneDetail on Zone {\n id\n createdAt\n updatedAt\n name\n }\n`;\n\n@Component({\n selector: 'vdr-zone-detail',\n templateUrl: './zone-detail.component.html',\n styleUrls: ['./zone-detail.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ZoneDetailComponent\n extends TypedBaseDetailComponent<typeof GetZoneDetailDocument, 'zone'>\n implements OnInit, OnDestroy\n{\n customFields = this.getCustomFieldConfig('Zone');\n detailForm = this.formBuilder.group({\n name: ['', Validators.required],\n customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),\n });\n readonly updatePermission = [Permission.UpdateSettings, Permission.UpdateZone];\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 }\n\n ngOnDestroy() {\n this.destroy();\n }\n\n saveButtonEnabled(): boolean {\n return this.detailForm.dirty && this.detailForm.valid;\n }\n\n create() {\n if (!this.detailForm.dirty) {\n return;\n }\n const { name, customFields } = this.detailForm.value;\n if (!name) {\n return;\n }\n const input = {\n name,\n customFields,\n } satisfies CreateZoneInput;\n this.dataService.settings.createZone(input).subscribe(\n data => {\n this.notificationService.success(_('common.notify-create-success'), {\n entity: 'Zone',\n });\n this.detailForm.markAsPristine();\n this.changeDetector.markForCheck();\n this.router.navigate(['../', data.createZone.id], { relativeTo: this.route });\n },\n err => {\n this.notificationService.error(_('common.notify-create-error'), {\n entity: 'Zone',\n });\n },\n );\n }\n\n save() {\n if (!this.detailForm.dirty) {\n return;\n }\n const formValue = this.detailForm.value;\n this.entity$\n .pipe(\n take(1),\n mergeMap(zone => {\n const input = {\n id: zone.id,\n name: formValue.name,\n customFields: formValue.customFields,\n } satisfies UpdateTaxCategoryInput;\n return this.dataService.settings.updateZone(input);\n }),\n )\n .subscribe(\n data => {\n this.notificationService.success(_('common.notify-update-success'), {\n entity: 'Zone',\n });\n this.detailForm.markAsPristine();\n this.changeDetector.markForCheck();\n },\n err => {\n this.notificationService.error(_('common.notify-update-error'), {\n entity: 'Zone',\n });\n },\n );\n }\n\n /**\n * Update the form values when the entity changes.\n */\n protected setFormValues(\n entity: NonNullable<GetZoneDetailQuery['zone']>,\n languageCode: LanguageCode,\n ): void {\n this.detailForm.patchValue({\n name: entity.name,\n });\n if (this.customFields.length) {\n this.setCustomFieldFormValues(this.customFields, this.detailForm.get('customFields'), entity);\n }\n }\n}\n","import { createBulkDeleteAction, GetZoneListQuery, ItemOf, Permission } from '@deenruv/admin-ui/core';\nimport { map } from 'rxjs/operators';\n\nexport const deleteZonesBulkAction = createBulkDeleteAction<ItemOf<GetZoneListQuery, 'zones'>>({\n location: 'zone-list',\n requiresPermission: userPermissions =>\n userPermissions.includes(Permission.DeleteSettings) ||\n userPermissions.includes(Permission.DeleteZone),\n getItemName: item => item.name,\n bulkDelete: (dataService, ids) => dataService.settings.deleteZones(ids).pipe(map(res => res.deleteZones)),\n});\n","<vdr-page-block>\n <vdr-action-bar>\n <vdr-ab-left>\n <vdr-language-selector\n [availableLanguageCodes]=\"availableLanguages$ | async\"\n [currentLanguageCode]=\"contentLanguage$ | async\"\n (languageCodeChange)=\"setLanguage($event)\"\n />\n </vdr-ab-left>\n <vdr-ab-right>\n <vdr-action-bar-items locationId=\"zone-list\" />\n <a\n class=\"btn btn-primary\"\n *vdrIfPermissions=\"['CreateSettings', 'CreateZone']\"\n [routerLink]=\"['./', 'create']\"\n >\n <clr-icon shape=\"plus\"></clr-icon>\n {{ 'settings.create-new-zone' | translate }}\n </a>\n <vdr-action-bar-dropdown-menu locationId=\"zone-list\" />\n </vdr-ab-right>\n </vdr-action-bar>\n</vdr-page-block>\n<vdr-split-view [rightPanelOpen]=\"activeZone$ | async\" (closeClicked)=\"closeMembers()\">\n <ng-template vdrSplitViewLeft>\n <vdr-data-table-2\n id=\"zone-list\"\n [items]=\"items$ | async\"\n [itemsPerPage]=\"itemsPerPage$ | async\"\n [totalItems]=\"totalItems$ | async\"\n [currentPage]=\"currentPage$ | async\"\n [filters]=\"filters\"\n [activeIndex]=\"activeIndex$ | async\"\n (pageChange)=\"setPageNumber($event)\"\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\n >\n <vdr-bulk-action-menu\n locationId=\"zone-list\"\n [hostComponent]=\"this\"\n [selectionManager]=\"selectionManager\"\n />\n <vdr-dt2-search\n [searchTermControl]=\"searchTermControl\"\n [searchTermPlaceholder]=\"'common.search-by-name' | translate\"\n />\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\n <ng-template let-customerGroup=\"item\">\n {{ customerGroup.id }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column\n [heading]=\"'common.created-at' | translate\" id=\"created-at\"\n [hiddenByDefault]=\"true\"\n [sort]=\"sorts.get('createdAt')\"\n >\n <ng-template let-customerGroup=\"item\">\n {{ customerGroup.createdAt | localeDate : 'short' }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column\n [heading]=\"'common.updated-at' | translate\" id=\"updated-at\"\n [hiddenByDefault]=\"true\"\n [sort]=\"sorts.get('updatedAt')\"\n >\n <ng-template let-customerGroup=\"item\">\n {{ customerGroup.updatedAt | localeDate : 'short' }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column\n [heading]=\"'common.name' | translate\" id=\"name\"\n [optional]=\"false\"\n [sort]=\"sorts.get('name')\"\n >\n <ng-template let-customerGroup=\"item\">\n <a class=\"button-ghost\" [routerLink]=\"['./', customerGroup.id]\"\n ><span>{{ customerGroup.name }}</span>\n <clr-icon shape=\"arrow right\"></clr-icon>\n </a>\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'common.view-contents' | translate\" id=\"view-contents\" [optional]=\"false\">\n <ng-template let-customerGroup=\"item\">\n <a\n class=\"button-small bg-weight-150\"\n [routerLink]=\"['./', { contents: customerGroup.id }]\"\n queryParamsHandling=\"preserve\"\n >\n <span>{{ 'settings.view-zone-members' | translate }}</span>\n <clr-icon shape=\"file-group\"></clr-icon>\n </a>\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-custom-field-column\n *ngFor=\"let customField of customFields\"\n [customField]=\"customField\"\n [sort]=\"sorts\"\n />\n </vdr-data-table-2>\n </ng-template>\n <ng-template vdrSplitViewRight [splitViewTitle]=\"(activeZone$ | async)?.name\">\n <ng-container *ngIf=\"activeZone$ | async as activeZone\">\n <button class=\"button-ghost ml-4\" (click)=\"addToZone(activeZone)\">\n <clr-icon shape=\"plus\"></clr-icon>\n <span>{{\n 'settings.add-countries-to-zone' | translate : { zoneName: activeZone.name }\n }}</span>\n </button>\n <vdr-zone-member-list\n *ngIf=\"activeZone$ | async as activeZone\"\n locationId=\"zone-members-list\"\n [selectedMemberIds]=\"selectedMemberIds\"\n [activeZone]=\"activeZone\"\n (selectionChange)=\"selectedMemberIds = $event\"\n />\n </ng-container>\n </ng-template>\n</vdr-split-view>\n","import { ChangeDetectionStrategy, Component, OnInit, ViewChild } from '@angular/core';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n DataService,\n GetZoneListDocument,\n GetZoneListQuery,\n ItemOf,\n LanguageCode,\n LogicalOperator,\n ModalService,\n NotificationService,\n TypedBaseListComponent,\n} from '@deenruv/admin-ui/core';\nimport { gql } from 'apollo-angular';\nimport { combineLatest, EMPTY, Observable } from 'rxjs';\nimport { distinctUntilChanged, map, mapTo, switchMap, tap } from 'rxjs/operators';\n\nimport { AddCountryToZoneDialogComponent } from '../add-country-to-zone-dialog/add-country-to-zone-dialog.component';\nimport { ZoneMemberListComponent } from '../zone-member-list/zone-member-list.component';\n\nexport const GET_ZONE_LIST = gql`\n query GetZoneList($options: ZoneListOptions) {\n zones(options: $options) {\n items {\n ...ZoneListItem\n }\n totalItems\n }\n }\n fragment ZoneListItem on Zone {\n id\n createdAt\n updatedAt\n name\n }\n`;\n\n@Component({\n selector: 'vdr-zone-list',\n templateUrl: './zone-list.component.html',\n styleUrls: ['./zone-list.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ZoneListComponent\n extends TypedBaseListComponent<typeof GetZoneListDocument, 'zones'>\n implements OnInit\n{\n activeZone$: Observable<ItemOf<GetZoneListQuery, 'zones'> | undefined>;\n activeIndex$: Observable<number>;\n selectedMemberIds: string[] = [];\n @ViewChild(ZoneMemberListComponent) zoneMemberList: ZoneMemberListComponent;\n readonly customFields = this.serverConfigService.getCustomFieldsFor('Zone');\n readonly filters = this.createFilterCollection()\n .addIdFilter()\n .addDateFilters()\n .addFilter({\n name: 'name',\n type: { kind: 'text' },\n label: _('common.name'),\n filterField: 'name',\n })\n .addCustomFieldFilters(this.customFields)\n .connectToRoute(this.route);\n\n readonly sorts = this.createSortCollection()\n .defaultSort('createdAt', 'DESC')\n .addSort({ name: 'createdAt' })\n .addSort({ name: 'updatedAt' })\n .addSort({ name: 'name' })\n .addCustomFieldSorts(this.customFields)\n .connectToRoute(this.route);\n\n constructor(\n protected dataService: DataService,\n private notificationService: NotificationService,\n private modalService: ModalService,\n ) {\n super();\n super.configure({\n document: GetZoneListDocument,\n getItems: data => data.zones,\n setVariables: (skip, take) => ({\n options: {\n skip,\n take,\n filter: {\n name: {\n contains: this.searchTermControl.value,\n },\n ...this.filters.createFilterInput(),\n },\n filterOperator: this.searchTermControl.value ? LogicalOperator.OR : LogicalOperator.AND,\n sort: this.sorts.createSortInput(),\n },\n }),\n refreshListOnChanges: [this.filters.valueChanges, this.sorts.valueChanges],\n });\n }\n\n ngOnInit(): void {\n super.ngOnInit();\n const activeZoneId$ = this.route.paramMap.pipe(\n map(pm => pm.get('contents')),\n distinctUntilChanged(),\n tap(() => (this.selectedMemberIds = [])),\n );\n this.activeZone$ = combineLatest(this.items$, activeZoneId$).pipe(\n map(([zones, activeZoneId]) => {\n if (activeZoneId) {\n return zones.find(z => z.id === activeZoneId);\n }\n }),\n );\n this.activeIndex$ = combineLatest(this.items$, activeZoneId$).pipe(\n map(([zones, activeZoneId]) => {\n if (activeZoneId) {\n return zones.findIndex(g => g.id === activeZoneId);\n } else {\n return -1;\n }\n }),\n );\n }\n\n setLanguage(code: LanguageCode) {\n this.dataService.client.setContentLanguage(code).subscribe();\n }\n\n closeMembers() {\n const params = { ...this.route.snapshot.params };\n delete params.contents;\n this.router.navigate(['./', params], { relativeTo: this.route, queryParamsHandling: 'preserve' });\n }\n\n addToZone(zone: ItemOf<GetZoneListQuery, 'zones'>) {\n this.modalService\n .fromComponent(AddCountryToZoneDialogComponent, {\n locals: {\n zoneName: zone.name,\n zoneId: zone.id,\n },\n size: 'md',\n })\n .pipe(\n switchMap(memberIds =>\n memberIds\n ? this.dataService.settings\n .addMembersToZone(zone.id, memberIds)\n .pipe(mapTo(memberIds))\n : EMPTY,\n ),\n )\n .subscribe({\n next: result => {\n this.notificationService.success(_(`settings.add-countries-to-zone-success`), {\n countryCount: result.length,\n zoneName: zone.name,\n });\n this.refreshMemberList();\n },\n error: err => {\n this.notificationService.error(err);\n },\n });\n }\n\n refreshMemberList() {\n this.zoneMemberList?.refresh();\n }\n}\n","import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport { BulkAction, DataService, NotificationService, Permission } from '@deenruv/admin-ui/core';\nimport { ZoneMember, ZoneMemberListComponent } from './zone-member-list.component';\n\nexport const removeZoneMembersBulkAction: BulkAction<ZoneMember, ZoneMemberListComponent> = {\n location: 'zone-members-list',\n label: _('settings.remove-from-zone'),\n icon: 'trash',\n iconClass: 'is-danger',\n requiresPermission: Permission.UpdateCustomerGroup,\n onClick: ({ injector, selection, hostComponent, clearSelection }) => {\n const dataService = injector.get(DataService);\n const notificationService = injector.get(NotificationService);\n\n const zone = hostComponent.activeZone;\n const memberIds = selection.map(s => s.id);\n\n dataService.settings.removeMembersFromZone(zone.id, memberIds).subscribe({\n complete: () => {\n notificationService.success(_(`settings.remove-countries-from-zone-success`), {\n countryCount: memberIds.length,\n zoneName: zone.name,\n });\n hostComponent.refresh();\n clearSelection();\n },\n });\n },\n};\n","import { Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { AdministratorFragment, BaseEntityResolver, DataService } from '@deenruv/admin-ui/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ProfileResolver extends BaseEntityResolver<AdministratorFragment> {\n constructor(router: Router, dataService: DataService) {\n super(\n router,\n {\n __typename: 'Administrator' as const,\n id: '',\n createdAt: '',\n updatedAt: '',\n emailAddress: '',\n firstName: '',\n lastName: '',\n user: { roles: [] } as any,\n },\n id =>\n dataService.administrator\n .getActiveAdministrator()\n .mapStream(data => data.activeAdministrator),\n );\n }\n}\n","import { inject } from '@angular/core';\nimport { Route } from '@angular/router';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n DataService,\n GetGlobalSettingsDetailDocument,\n GetProfileDetailDocument,\n PageComponent,\n PageService,\n} from '@deenruv/admin-ui/core';\nimport { of } from 'rxjs';\n\nexport const createRoutes = (pageService: PageService): Route[] => [\n {\n path: 'profile',\n component: PageComponent,\n data: {\n breadcrumb: _('breadcrumb.profile'),\n },\n resolve: {\n detail: () =>\n inject(DataService)\n .query(GetProfileDetailDocument)\n .mapSingle(data => ({ entity: of(data.activeAdministrator) })),\n },\n children: pageService.getPageTabRoutes('profile'),\n },\n {\n path: 'administrators',\n component: PageComponent,\n data: {\n locationId: 'administrator-list',\n breadcrumb: _('breadcrumb.administrators'),\n },\n children: pageService.getPageTabRoutes('administrator-list'),\n },\n {\n path: 'administrators/:id',\n component: PageComponent,\n data: {\n locationId: 'administrator-detail',\n breadcrumb: { label: _('breadcrumb.administrators'), link: ['../', 'administrators'] },\n },\n children: pageService.getPageTabRoutes('administrator-detail'),\n },\n {\n path: 'channels',\n component: PageComponent,\n data: {\n locationId: 'channel-list',\n breadcrumb: _('breadcrumb.channels'),\n },\n children: pageService.getPageTabRoutes('channel-list'),\n },\n {\n path: 'channels/:id',\n component: PageComponent,\n data: {\n locationId: 'channel-detail',\n breadcrumb: { label: _('breadcrumb.channels'), link: ['../', 'channels'] },\n },\n children: pageService.getPageTabRoutes('channel-detail'),\n },\n {\n path: 'stock-locations',\n component: PageComponent,\n data: {\n locationId: 'stock-location-list',\n breadcrumb: _('breadcrumb.stock-locations'),\n },\n children: pageService.getPageTabRoutes('stock-location-list'),\n },\n {\n path: 'stock-locations/:id',\n component: PageComponent,\n data: {\n locationId: 'stock-location-detail',\n breadcrumb: { label: _('breadcrumb.stock-locations'), link: ['../', 'stock-locations'] },\n },\n children: pageService.getPageTabRoutes('stock-location-detail'),\n },\n {\n path: 'sellers',\n component: PageComponent,\n data: {\n locationId: 'seller-list',\n breadcrumb: _('breadcrumb.sellers'),\n },\n children: pageService.getPageTabRoutes('seller-list'),\n },\n {\n path: 'sellers/:id',\n component: PageComponent,\n data: {\n locationId: 'seller-detail',\n breadcrumb: { label: _('breadcrumb.sellers'), link: ['../', 'sellers'] },\n },\n children: pageService.getPageTabRoutes('seller-detail'),\n },\n {\n path: 'roles',\n component: PageComponent,\n data: {\n locationId: 'role-list',\n breadcrumb: _('breadcrumb.roles'),\n },\n children: pageService.getPageTabRoutes('role-list'),\n },\n {\n path: 'roles/:id',\n component: PageComponent,\n data: {\n locationId: 'role-detail',\n breadcrumb: { label: _('breadcrumb.roles'), link: ['../', 'roles'] },\n },\n children: pageService.getPageTabRoutes('role-detail'),\n },\n {\n path: 'tax-categories',\n component: PageComponent,\n data: {\n locationId: 'tax-category-list',\n breadcrumb: _('breadcrumb.tax-categories'),\n },\n children: pageService.getPageTabRoutes('tax-category-list'),\n },\n {\n path: 'tax-categories/:id',\n component: PageComponent,\n data: {\n locationId: 'tax-category-detail',\n breadcrumb: { label: _('breadcrumb.tax-categories'), link: ['../', 'tax-categories'] },\n },\n children: pageService.getPageTabRoutes('tax-category-detail'),\n },\n {\n path: 'tax-rates',\n component: PageComponent,\n data: {\n locationId: 'tax-rate-list',\n breadcrumb: _('breadcrumb.tax-rates'),\n },\n children: pageService.getPageTabRoutes('tax-rate-list'),\n },\n {\n path: 'tax-rates/:id',\n component: PageComponent,\n data: {\n locationId: 'tax-rate-detail',\n breadcrumb: { label: _('breadcrumb.tax-rates'), link: ['../', 'tax-rates'] },\n },\n children: pageService.getPageTabRoutes('tax-rate-detail'),\n },\n {\n path: 'countries',\n component: PageComponent,\n data: {\n locationId: 'country-list',\n breadcrumb: _('breadcrumb.countries'),\n },\n children: pageService.getPageTabRoutes('country-list'),\n },\n {\n path: 'countries/:id',\n component: PageComponent,\n data: {\n locationId: 'country-detail',\n breadcrumb: { label: _('breadcrumb.countries'), link: ['../', 'countries'] },\n },\n children: pageService.getPageTabRoutes('country-detail'),\n },\n {\n path: 'zones',\n component: PageComponent,\n data: {\n locationId: 'zone-list',\n breadcrumb: _('breadcrumb.zones'),\n },\n children: pageService.getPageTabRoutes('zone-list'),\n },\n {\n path: 'zones/:id',\n component: PageComponent,\n data: {\n locationId: 'zone-detail',\n breadcrumb: { label: _('breadcrumb.zones'), link: ['../', 'zones'] },\n },\n children: pageService.getPageTabRoutes('zone-detail'),\n },\n {\n path: 'shipping-methods',\n component: PageComponent,\n data: {\n locationId: 'shipping-method-list',\n breadcrumb: _('breadcrumb.shipping-methods'),\n },\n children: pageService.getPageTabRoutes('shipping-method-list'),\n },\n {\n path: 'shipping-methods/:id',\n component: PageComponent,\n data: {\n locationId: 'shipping-method-detail',\n breadcrumb: { label: _('breadcrumb.shipping-methods'), link: ['../', 'shipping-methods'] },\n },\n children: pageService.getPageTabRoutes('shipping-method-detail'),\n },\n {\n path: 'payment-methods',\n component: PageComponent,\n data: {\n locationId: 'payment-method-list',\n breadcrumb: _('breadcrumb.payment-methods'),\n },\n children: pageService.getPageTabRoutes('payment-method-list'),\n },\n {\n path: 'payment-methods/:id',\n component: PageComponent,\n data: {\n locationId: 'payment-method-detail',\n breadcrumb: { label: _('breadcrumb.payment-methods'), link: ['../', 'payment-methods'] },\n },\n children: pageService.getPageTabRoutes('payment-method-detail'),\n },\n {\n path: 'global-settings',\n component: PageComponent,\n data: {\n breadcrumb: _('breadcrumb.global-settings'),\n locationId: 'global-setting-detail',\n },\n resolve: {\n detail: () =>\n inject(DataService)\n .query(GetGlobalSettingsDetailDocument)\n .mapSingle(data => ({ entity: of(data.globalSettings) })),\n },\n children: pageService.getPageTabRoutes('global-setting-detail'),\n },\n];\n","import { NgModule } from '@angular/core';\nimport { RouterModule, ROUTES } from '@angular/router';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n BulkActionRegistryService,\n detailComponentWithResolver,\n GetAdministratorDetailDocument,\n GetChannelDetailDocument,\n GetCountryDetailDocument,\n GetPaymentMethodDetailDocument,\n GetRoleDetailDocument,\n GetSellerDetailDocument,\n GetShippingMethodDetailDocument,\n GetStockLocationDetailDocument,\n GetTaxCategoryDetailDocument,\n GetTaxRateDetailDocument,\n GetZoneDetailDocument,\n PageService,\n SharedModule,\n} from '@deenruv/admin-ui/core';\nimport { DEFAULT_CHANNEL_CODE } from '@deenruv/common/lib/shared-constants';\n\nimport { AddCountryToZoneDialogComponent } from './components/add-country-to-zone-dialog/add-country-to-zone-dialog.component';\nimport { AdminDetailComponent } from './components/admin-detail/admin-detail.component';\nimport { deleteAdministratorsBulkAction } from './components/administrator-list/administrator-list-bulk-actions';\nimport { AdministratorListComponent } from './components/administrator-list/administrator-list.component';\nimport { ChannelDetailComponent } from './components/channel-detail/channel-detail.component';\nimport { deleteChannelsBulkAction } from './components/channel-list/channel-list-bulk-actions';\nimport { ChannelListComponent } from './components/channel-list/channel-list.component';\nimport { CountryDetailComponent } from './components/country-detail/country-detail.component';\nimport { deleteCountriesBulkAction } from './components/country-list/country-list-bulk-actions';\nimport { CountryListComponent } from './components/country-list/country-list.component';\nimport { GlobalSettingsComponent } from './components/global-settings/global-settings.component';\nimport { PaymentMethodDetailComponent } from './components/payment-method-detail/payment-method-detail.component';\nimport {\n assignPaymentMethodsToChannelBulkAction,\n deletePaymentMethodsBulkAction,\n removePaymentMethodsFromChannelBulkAction,\n} from './components/payment-method-list/payment-method-list-bulk-actions';\nimport { PaymentMethodListComponent } from './components/payment-method-list/payment-method-list.component';\nimport { PermissionGridComponent } from './components/permission-grid/permission-grid.component';\nimport { ProfileComponent } from './components/profile/profile.component';\nimport { RoleDetailComponent } from './components/role-detail/role-detail.component';\nimport { deleteRolesBulkAction } from './components/role-list/role-list-bulk-actions';\nimport { RoleListComponent } from './components/role-list/role-list.component';\nimport { SellerDetailComponent } from './components/seller-detail/seller-detail.component';\nimport { deleteSellersBulkAction } from './components/seller-list/seller-list-bulk-actions';\nimport { SellerListComponent } from './components/seller-list/seller-list.component';\nimport { ShippingEligibilityTestResultComponent } from './components/shipping-eligibility-test-result/shipping-eligibility-test-result.component';\nimport { ShippingMethodDetailComponent } from './components/shipping-method-detail/shipping-method-detail.component';\nimport {\n assignShippingMethodsToChannelBulkAction,\n deleteShippingMethodsBulkAction,\n removeShippingMethodsFromChannelBulkAction,\n} from './components/shipping-method-list/shipping-method-list-bulk-actions';\nimport { ShippingMethodListComponent } from './components/shipping-method-list/shipping-method-list.component';\nimport { ShippingMethodTestResultComponent } from './components/shipping-method-test-result/shipping-method-test-result.component';\nimport { StockLocationDetailComponent } from './components/stock-location-detail/stock-location-detail.component';\nimport {\n assignStockLocationsToChannelBulkAction,\n deleteStockLocationsBulkAction,\n removeStockLocationsFromChannelBulkAction,\n} from './components/stock-location-list/stock-location-list-bulk-actions';\nimport { StockLocationListComponent } from './components/stock-location-list/stock-location-list.component';\nimport { TaxCategoryDetailComponent } from './components/tax-category-detail/tax-category-detail.component';\nimport { deleteTaxCategoriesBulkAction } from './components/tax-category-list/tax-category-list-bulk-actions';\nimport { TaxCategoryListComponent } from './components/tax-category-list/tax-category-list.component';\nimport { TaxRateDetailComponent } from './components/tax-rate-detail/tax-rate-detail.component';\nimport { deleteTaxRatesBulkAction } from './components/tax-rate-list/tax-rate-list-bulk-actions';\nimport { TaxRateListComponent } from './components/tax-rate-list/tax-rate-list.component';\nimport { TestAddressFormComponent } from './components/test-address-form/test-address-form.component';\nimport { TestOrderBuilderComponent } from './components/test-order-builder/test-order-builder.component';\nimport { TestShippingMethodsComponent } from './components/test-shipping-methods/test-shipping-methods.component';\nimport { ZoneDetailComponent } from './components/zone-detail/zone-detail.component';\nimport { deleteZonesBulkAction } from './components/zone-list/zone-list-bulk-actions';\nimport { ZoneListComponent } from './components/zone-list/zone-list.component';\nimport { ZoneMemberControlsDirective } from './components/zone-member-list/zone-member-controls.directive';\nimport { removeZoneMembersBulkAction } from './components/zone-member-list/zone-member-list-bulk-actions';\nimport { ZoneMemberListHeaderDirective } from './components/zone-member-list/zone-member-list-header.directive';\nimport { ZoneMemberListComponent } from './components/zone-member-list/zone-member-list.component';\nimport { createRoutes } from './settings.routes';\n\n@NgModule({\n imports: [SharedModule, RouterModule.forChild([])],\n providers: [\n {\n provide: ROUTES,\n useFactory: (pageService: PageService) => createRoutes(pageService),\n multi: true,\n deps: [PageService],\n },\n ],\n declarations: [\n TaxCategoryListComponent,\n TaxCategoryDetailComponent,\n AdministratorListComponent,\n RoleListComponent,\n RoleDetailComponent,\n AdminDetailComponent,\n PermissionGridComponent,\n CountryListComponent,\n CountryDetailComponent,\n TaxRateListComponent,\n TaxRateDetailComponent,\n ChannelListComponent,\n ChannelDetailComponent,\n ShippingMethodListComponent,\n ShippingMethodDetailComponent,\n PaymentMethodListComponent,\n PaymentMethodDetailComponent,\n GlobalSettingsComponent,\n TestOrderBuilderComponent,\n TestAddressFormComponent,\n SellerDetailComponent,\n SellerListComponent,\n ShippingMethodTestResultComponent,\n ShippingEligibilityTestResultComponent,\n ZoneListComponent,\n AddCountryToZoneDialogComponent,\n ZoneMemberListComponent,\n ZoneMemberListHeaderDirective,\n ZoneMemberControlsDirective,\n ProfileComponent,\n TestShippingMethodsComponent,\n ZoneDetailComponent,\n StockLocationListComponent,\n StockLocationDetailComponent,\n ],\n})\nexport class SettingsModule {\n private static hasRegisteredTabsAndBulkActions = false;\n\n constructor(bulkActionRegistryService: BulkActionRegistryService, pageService: PageService) {\n if (SettingsModule.hasRegisteredTabsAndBulkActions) {\n return;\n }\n bulkActionRegistryService.registerBulkAction(deleteSellersBulkAction);\n\n bulkActionRegistryService.registerBulkAction(deleteChannelsBulkAction);\n\n bulkActionRegistryService.registerBulkAction(deleteAdministratorsBulkAction);\n\n bulkActionRegistryService.registerBulkAction(deleteRolesBulkAction);\n\n bulkActionRegistryService.registerBulkAction(assignShippingMethodsToChannelBulkAction);\n bulkActionRegistryService.registerBulkAction(removeShippingMethodsFromChannelBulkAction);\n bulkActionRegistryService.registerBulkAction(deleteShippingMethodsBulkAction);\n\n bulkActionRegistryService.registerBulkAction(assignPaymentMethodsToChannelBulkAction);\n bulkActionRegistryService.registerBulkAction(removePaymentMethodsFromChannelBulkAction);\n bulkActionRegistryService.registerBulkAction(deletePaymentMethodsBulkAction);\n\n bulkActionRegistryService.registerBulkAction(deleteTaxCategoriesBulkAction);\n\n bulkActionRegistryService.registerBulkAction(deleteTaxRatesBulkAction);\n\n bulkActionRegistryService.registerBulkAction(deleteCountriesBulkAction);\n\n bulkActionRegistryService.registerBulkAction(deleteZonesBulkAction);\n\n bulkActionRegistryService.registerBulkAction(removeZoneMembersBulkAction);\n\n bulkActionRegistryService.registerBulkAction(assignStockLocationsToChannelBulkAction);\n bulkActionRegistryService.registerBulkAction(removeStockLocationsFromChannelBulkAction);\n bulkActionRegistryService.registerBulkAction(deleteStockLocationsBulkAction);\n\n pageService.registerPageTab({\n priority: 0,\n location: 'seller-list',\n tab: _('breadcrumb.sellers'),\n route: '',\n component: SellerListComponent,\n });\n pageService.registerPageTab({\n priority: 0,\n location: 'seller-detail',\n tab: _('settings.seller'),\n route: '',\n component: detailComponentWithResolver({\n component: SellerDetailComponent,\n query: GetSellerDetailDocument,\n entityKey: 'seller',\n getBreadcrumbs: entity => [\n {\n label: entity ? entity.name : _('settings.create-new-seller'),\n link: [entity?.id],\n },\n ],\n }),\n });\n pageService.registerPageTab({\n priority: 0,\n location: 'channel-list',\n tab: _('breadcrumb.channels'),\n route: '',\n component: ChannelListComponent,\n });\n pageService.registerPageTab({\n priority: 0,\n location: 'channel-detail',\n tab: _('settings.channel'),\n route: '',\n component: detailComponentWithResolver({\n component: ChannelDetailComponent,\n query: GetChannelDetailDocument,\n entityKey: 'channel',\n getBreadcrumbs: entity => [\n {\n label: entity\n ? entity.code === DEFAULT_CHANNEL_CODE\n ? 'common.default-channel'\n : entity.code\n : _('settings.create-new-channel'),\n link: [entity?.id],\n },\n ],\n }),\n });\n pageService.registerPageTab({\n priority: 0,\n location: 'administrator-list',\n tab: _('breadcrumb.administrators'),\n route: '',\n component: AdministratorListComponent,\n });\n pageService.registerPageTab({\n priority: 0,\n location: 'administrator-detail',\n tab: _('settings.administrator'),\n route: '',\n component: detailComponentWithResolver({\n component: AdminDetailComponent,\n query: GetAdministratorDetailDocument,\n entityKey: 'administrator',\n getBreadcrumbs: entity => [\n {\n label: entity\n ? `${entity.firstName} ${entity.lastName}`\n : _('admin.create-new-administrator'),\n link: [entity?.id],\n },\n ],\n }),\n });\n pageService.registerPageTab({\n priority: 0,\n location: 'role-list',\n tab: _('breadcrumb.roles'),\n route: '',\n component: RoleListComponent,\n });\n pageService.registerPageTab({\n priority: 0,\n location: 'role-detail',\n tab: _('settings.role'),\n route: '',\n component: detailComponentWithResolver({\n component: RoleDetailComponent,\n query: GetRoleDetailDocument,\n entityKey: 'role',\n getBreadcrumbs: entity => [\n {\n label: entity ? entity.description : _('settings.create-new-role'),\n link: [entity?.id],\n },\n ],\n }),\n });\n pageService.registerPageTab({\n priority: 0,\n location: 'shipping-method-list',\n tab: _('breadcrumb.shipping-methods'),\n route: '',\n component: ShippingMethodListComponent,\n });\n pageService.registerPageTab({\n priority: 0,\n location: 'shipping-method-detail',\n tab: _('settings.shipping-method'),\n route: '',\n component: detailComponentWithResolver({\n component: ShippingMethodDetailComponent,\n query: GetShippingMethodDetailDocument,\n entityKey: 'shippingMethod',\n getBreadcrumbs: entity => [\n {\n label: entity ? entity.name : _('settings.create-new-shipping-method'),\n link: [entity?.id],\n },\n ],\n }),\n });\n pageService.registerPageTab({\n priority: 0,\n location: 'shipping-method-list',\n tab: _('settings.test-shipping-methods'),\n route: 'test',\n component: TestShippingMethodsComponent,\n });\n pageService.registerPageTab({\n priority: 0,\n location: 'payment-method-list',\n tab: _('breadcrumb.payment-methods'),\n route: '',\n component: PaymentMethodListComponent,\n });\n pageService.registerPageTab({\n priority: 0,\n location: 'payment-method-detail',\n tab: _('settings.payment-method'),\n route: '',\n component: detailComponentWithResolver({\n component: PaymentMethodDetailComponent,\n query: GetPaymentMethodDetailDocument,\n entityKey: 'paymentMethod',\n getBreadcrumbs: entity => [\n {\n label: entity ? entity.name : _('settings.create-new-payment-method'),\n link: [entity?.id],\n },\n ],\n }),\n });\n pageService.registerPageTab({\n priority: 0,\n location: 'tax-category-list',\n tab: _('breadcrumb.tax-categories'),\n route: '',\n component: TaxCategoryListComponent,\n });\n pageService.registerPageTab({\n priority: 0,\n location: 'tax-category-detail',\n tab: _('settings.tax-category'),\n route: '',\n component: detailComponentWithResolver({\n component: TaxCategoryDetailComponent,\n query: GetTaxCategoryDetailDocument,\n entityKey: 'taxCategory',\n getBreadcrumbs: entity => [\n {\n label: entity ? entity.name : _('settings.create-new-tax-category'),\n link: [entity?.id],\n },\n ],\n }),\n });\n pageService.registerPageTab({\n priority: 0,\n location: 'tax-rate-list',\n tab: _('breadcrumb.tax-rates'),\n route: '',\n component: TaxRateListComponent,\n });\n pageService.registerPageTab({\n priority: 0,\n location: 'tax-rate-detail',\n tab: _('settings.tax-rate'),\n route: '',\n component: detailComponentWithResolver({\n component: TaxRateDetailComponent,\n query: GetTaxRateDetailDocument,\n entityKey: 'taxRate',\n getBreadcrumbs: entity => [\n {\n label: entity ? entity.name : _('settings.create-new-tax-rate'),\n link: [entity?.id],\n },\n ],\n }),\n });\n pageService.registerPageTab({\n priority: 0,\n location: 'country-list',\n tab: _('breadcrumb.countries'),\n route: '',\n component: CountryListComponent,\n });\n pageService.registerPageTab({\n priority: 0,\n location: 'country-detail',\n tab: _('settings.country'),\n route: '',\n component: detailComponentWithResolver({\n component: CountryDetailComponent,\n query: GetCountryDetailDocument,\n entityKey: 'country',\n getBreadcrumbs: entity => [\n {\n label: entity ? entity.name : _('settings.create-new-country'),\n link: [entity?.id],\n },\n ],\n }),\n });\n pageService.registerPageTab({\n priority: 0,\n location: 'zone-list',\n tab: _('breadcrumb.zones'),\n route: '',\n component: ZoneListComponent,\n });\n pageService.registerPageTab({\n priority: 0,\n location: 'zone-detail',\n tab: _('settings.zone'),\n route: '',\n component: detailComponentWithResolver({\n component: ZoneDetailComponent,\n query: GetZoneDetailDocument,\n entityKey: 'zone',\n getBreadcrumbs: entity => [\n {\n label: entity ? entity.name : _('settings.create-new-zone'),\n link: [entity?.id],\n },\n ],\n }),\n });\n pageService.registerPageTab({\n priority: 0,\n location: 'global-setting-detail',\n tab: _('breadcrumb.global-settings'),\n route: '',\n component: GlobalSettingsComponent,\n });\n pageService.registerPageTab({\n priority: 0,\n location: 'profile',\n tab: _('breadcrumb.profile'),\n route: '',\n component: ProfileComponent,\n });\n\n pageService.registerPageTab({\n priority: 0,\n location: 'stock-location-list',\n tab: _('catalog.stock-locations'),\n route: '',\n component: StockLocationListComponent,\n });\n pageService.registerPageTab({\n priority: 0,\n location: 'stock-location-detail',\n tab: _('catalog.stock-location'),\n route: '',\n component: detailComponentWithResolver({\n component: StockLocationDetailComponent,\n query: GetStockLocationDetailDocument,\n entityKey: 'stockLocation',\n getBreadcrumbs: entity => [\n {\n label: entity ? entity.name : _('catalog.create-new-stock-location'),\n link: [entity?.id],\n },\n ],\n }),\n });\n SettingsModule.hasRegisteredTabsAndBulkActions = true;\n }\n}\n"],"x_google_ignoreList":[0]}
|