@dropins/storefront-purchase-order 0.0.5-alpha4 → 0.0.5-alpha6
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/api/index.d.ts +1 -0
- package/api/permissions.d.ts +11 -0
- package/api.js +8 -8
- package/api.js.map +1 -1
- package/chunks/permissions.js +4 -0
- package/chunks/permissions.js.map +1 -0
- package/chunks/useCustomerRolePermissions.js +1 -1
- package/chunks/useCustomerRolePermissions.js.map +1 -1
- package/containers/ApprovalRuleForm.js +1 -1
- package/containers/ApprovalRuleForm.js.map +1 -1
- package/containers/ApprovalRulesList.js +1 -1
- package/containers/ApprovalRulesList.js.map +1 -1
- package/containers/CompanyPurchaseOrders.js +1 -1
- package/containers/CompanyPurchaseOrders.js.map +1 -1
- package/containers/CustomerPurchaseOrders.js +1 -1
- package/containers/CustomerPurchaseOrders.js.map +1 -1
- package/containers/RequireApprovalPurchaseOrders.js +1 -1
- package/containers/RequireApprovalPurchaseOrders.js.map +1 -1
- package/mocks/storybook/events-data.d.ts +1 -5
- package/package.json +1 -1
package/api/index.d.ts
CHANGED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare const PO_PERMISSIONS: {
|
|
2
|
+
PO_ALL: string;
|
|
3
|
+
VIEW_CUSTOMER: string;
|
|
4
|
+
VIEW_SUBORDINATES: string;
|
|
5
|
+
VIEW_COMPANY: string;
|
|
6
|
+
AUTO_APPROVE: string;
|
|
7
|
+
SUPER_APPROVE: string;
|
|
8
|
+
VIEW_RULES: string;
|
|
9
|
+
MANAGE_RULES: string;
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=permissions.d.ts.map
|
package/api.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*! Copyright 2025 Adobe
|
|
2
2
|
All Rights Reserved. */
|
|
3
|
-
import{Initializer as w}from"@dropins/tools/lib.js";import{f as y,h as O}from"./chunks/fetch-graphql.js";import{g as m,r as rr,s as er,a as ar,b as tr}from"./chunks/fetch-graphql.js";import{h as
|
|
3
|
+
import{Initializer as w}from"@dropins/tools/lib.js";import{f as y,h as O}from"./chunks/fetch-graphql.js";import{g as m,r as rr,s as er,a as ar,b as tr}from"./chunks/fetch-graphql.js";import{h as R}from"./chunks/fetch-error.js";import{t as v,P as A}from"./chunks/rejectPurchaseOrders.js";import{a as ur,r as sr}from"./chunks/rejectPurchaseOrders.js";import{events as D}from"@dropins/tools/event-bus.js";import{c as _r,p as cr}from"./chunks/placeOrderForPurchaseOrder.js";import{a as nr,c as dr,g as pr,u as hr}from"./chunks/currencyInfo.js";import{d as gr,g as yr}from"./chunks/getPurchaseOrderApprovalRules.js";import{g as Rr}from"./chunks/getPurchaseOrders.js";import{g as Er}from"./chunks/getPurchaseOrderApprovalRule.js";import{P as br}from"./chunks/permissions.js";import"@dropins/tools/fetch-graphql.js";import"./chunks/transform-purchase-order-approval-rule.js";import"./chunks/case-converter.js";const S=`
|
|
4
4
|
fragment PURCHASE_ORDER_QUOTE_FRAGMENT on Cart {
|
|
5
5
|
__typename
|
|
6
6
|
id
|
|
@@ -403,7 +403,7 @@ import{Initializer as w}from"@dropins/tools/lib.js";import{f as y,h as O}from"./
|
|
|
403
403
|
}
|
|
404
404
|
}
|
|
405
405
|
${S}
|
|
406
|
-
`,U=async r=>{if(!r||r.trim()==="")throw new Error("Purchase Order UID is required");return y(I,{variables:{uid:r}}).then(i=>{var t,a,e;(t=i.errors)!=null&&t.length&&
|
|
406
|
+
`,U=async r=>{if(!r||r.trim()==="")throw new Error("Purchase Order UID is required");return y(I,{variables:{uid:r}}).then(i=>{var t,a,e;(t=i.errors)!=null&&t.length&&R(i.errors);const s=(e=(a=i.data)==null?void 0:a.customer)==null?void 0:e.purchase_order;if(!s)throw new Error("Failed to get purchase order");return{purchaseOrder:v(s)}}).catch(O)},C=new w({init:async r=>{var t,a;const i={};if(C.config.setConfig({...i,...r}),typeof(r==null?void 0:r.poRef)=="string"&&r.poRef.trim()!==""){const e=await U(r.poRef);(t=e==null?void 0:e.purchaseOrder)!=null&&t.quote&&D.emit("order/data",{...e.purchaseOrder.quote,poNumber:(a=e==null?void 0:e.purchaseOrder)==null?void 0:a.number})}},listeners:()=>[]}),B=C.config,T=`
|
|
407
407
|
mutation VALIDATE_PURCHASE_ORDERS($input: ValidatePurchaseOrdersInput!) {
|
|
408
408
|
validatePurchaseOrders(input: $input) {
|
|
409
409
|
errors {
|
|
@@ -415,8 +415,8 @@ import{Initializer as w}from"@dropins/tools/lib.js";import{f as y,h as O}from"./
|
|
|
415
415
|
}
|
|
416
416
|
}
|
|
417
417
|
}
|
|
418
|
-
${
|
|
419
|
-
`,J=async r=>{const i=Array.isArray(r)?r:[r];if(!i||i.length===0)throw new Error("Purchase Order UID(s) are required");if(i.some(t=>!t||t.trim()===""))throw new Error("All Purchase Order UIDs must be valid");return y(T,{variables:{input:{purchase_order_uids:i}}}).then(t=>{var e,l;(e=t.errors)!=null&&e.length&&
|
|
418
|
+
${A}
|
|
419
|
+
`,J=async r=>{const i=Array.isArray(r)?r:[r];if(!i||i.length===0)throw new Error("Purchase Order UID(s) are required");if(i.some(t=>!t||t.trim()===""))throw new Error("All Purchase Order UIDs must be valid");return y(T,{variables:{input:{purchase_order_uids:i}}}).then(t=>{var e,l;(e=t.errors)!=null&&e.length&&R(t.errors);const a=(l=t.data)==null?void 0:l.validatePurchaseOrders;return{errors:((a==null?void 0:a.errors)??[]).map(_=>({message:(_==null?void 0:_.message)??"",type:(_==null?void 0:_.type)??""})),purchaseOrders:((a==null?void 0:a.purchase_orders)||[]).map(v)}}).catch(O)},q=`
|
|
420
420
|
mutation ADD_PURCHASE_ORDER_COMMENT(
|
|
421
421
|
$purchaseOrderUid: ID!
|
|
422
422
|
$comment: String!
|
|
@@ -448,7 +448,7 @@ import{Initializer as w}from"@dropins/tools/lib.js";import{f as y,h as O}from"./
|
|
|
448
448
|
}
|
|
449
449
|
}
|
|
450
450
|
}
|
|
451
|
-
`,H=r=>{var s,t,a,e,l,_,c,n,
|
|
451
|
+
`,H=r=>{var s,t,a,e,l,_,c,o,n,d,p,h,f,g,E;const i=((t=(s=r==null?void 0:r.cart)==null?void 0:s.itemsV2)==null?void 0:t.items)??[];return{cart:{id:((a=r==null?void 0:r.cart)==null?void 0:a.id)??"",items:i.map(u=>{var P,b,x;return{uid:(u==null?void 0:u.uid)??"",quantity:(u==null?void 0:u.quantity)??0,product:{uid:((P=u==null?void 0:u.product)==null?void 0:P.uid)??"",name:((b=u==null?void 0:u.product)==null?void 0:b.name)??"",sku:((x=u==null?void 0:u.product)==null?void 0:x.sku)??""}}}),pagination:{currentPage:((_=(l=(e=r==null?void 0:r.cart)==null?void 0:e.itemsV2)==null?void 0:l.page_info)==null?void 0:_.current_page)??1,pageSize:((n=(o=(c=r==null?void 0:r.cart)==null?void 0:c.itemsV2)==null?void 0:o.page_info)==null?void 0:n.page_size)??20,totalPages:((h=(p=(d=r==null?void 0:r.cart)==null?void 0:d.itemsV2)==null?void 0:p.page_info)==null?void 0:h.total_pages)??0,totalCount:((g=(f=r==null?void 0:r.cart)==null?void 0:f.itemsV2)==null?void 0:g.total_count)??0}},userErrors:((E=r==null?void 0:r.user_errors)==null?void 0:E.map(u=>({message:(u==null?void 0:u.message)??""})))??[]}},$=r=>{var i,s,t,a,e,l,_,c,o,n,d,p,h,f,g;return{createdAt:(r==null?void 0:r.created_at)??"",text:(r==null?void 0:r.text)??"",uid:(r==null?void 0:r.uid)??"",author:{allowRemoteShoppingAssistance:((i=r==null?void 0:r.author)==null?void 0:i.allow_remote_shopping_assistance)??!1,confirmationStatus:((s=r==null?void 0:r.author)==null?void 0:s.confirmation_status)??"",createdAt:((t=r==null?void 0:r.author)==null?void 0:t.created_at)??"",dateOfBirth:((a=r==null?void 0:r.author)==null?void 0:a.date_of_birth)??"",email:((e=r==null?void 0:r.author)==null?void 0:e.email)??"",firstname:((l=r==null?void 0:r.author)==null?void 0:l.firstname)??"",gender:((_=r==null?void 0:r.author)==null?void 0:_.gender)??0,jobTitle:((c=r==null?void 0:r.author)==null?void 0:c.job_title)??"",lastname:((o=r==null?void 0:r.author)==null?void 0:o.lastname)??"",middlename:((n=r==null?void 0:r.author)==null?void 0:n.middlename)??"",prefix:((d=r==null?void 0:r.author)==null?void 0:d.prefix)??"",status:((p=r==null?void 0:r.author)==null?void 0:p.status)??"",structureId:((h=r==null?void 0:r.author)==null?void 0:h.structure_id)??"",suffix:((f=r==null?void 0:r.author)==null?void 0:f.suffix)??"",telephone:((g=r==null?void 0:r.author)==null?void 0:g.telephone)??""}}},K=async(r,i)=>{if(!r)throw new Error("Purchase Order ID is required");if(!i)throw new Error("Comment text is required");return y(q,{variables:{purchaseOrderUid:r,comment:i}}).then(t=>{var a,e,l;return(a=t.errors)!=null&&a.length&&R(t.errors),$((l=(e=t.data)==null?void 0:e.addPurchaseOrderComment)==null?void 0:l.comment)}).catch(O)},M=`
|
|
452
452
|
mutation ADD_PURCHASE_ORDER_ITEMS_TO_CART(
|
|
453
453
|
$purchaseOrderUid: ID!
|
|
454
454
|
$cartId: String!
|
|
@@ -483,7 +483,7 @@ import{Initializer as w}from"@dropins/tools/lib.js";import{f as y,h as O}from"./
|
|
|
483
483
|
}
|
|
484
484
|
}
|
|
485
485
|
}
|
|
486
|
-
`,W=async(r,i,s=!1)=>{if(!r)throw new Error("Purchase Order UID is required");if(!i)throw new Error("Cart ID is required");return y(
|
|
486
|
+
`,W=async(r,i,s=!1)=>{if(!r)throw new Error("Purchase Order UID is required");if(!i)throw new Error("Cart ID is required");return y(M,{variables:{purchaseOrderUid:r,cartId:i,replaceExistingCartItems:s}}).then(a=>{var l,_;(l=a.errors)!=null&&l.length&&R(a.errors);const e=(_=a.data)==null?void 0:_.addPurchaseOrderItemsToCart;if(!(e!=null&&e.cart))throw new Error("Failed to add purchase order items to cart");return H(e)}).catch(O)},F=`
|
|
487
487
|
mutation PLACE_PURCHASE_ORDER($input: PlacePurchaseOrderInput!) {
|
|
488
488
|
placePurchaseOrder(input: $input) {
|
|
489
489
|
purchase_order {
|
|
@@ -491,6 +491,6 @@ import{Initializer as w}from"@dropins/tools/lib.js";import{f as y,h as O}from"./
|
|
|
491
491
|
}
|
|
492
492
|
}
|
|
493
493
|
}
|
|
494
|
-
${
|
|
495
|
-
`,X=async r=>{if(!r||r.trim()==="")throw new Error("Cart ID is required");return y(
|
|
494
|
+
${A}
|
|
495
|
+
`,X=async r=>{if(!r||r.trim()==="")throw new Error("Cart ID is required");return y(F,{variables:{input:{cart_id:r}}}).then(s=>{var a,e,l;(a=s.errors)!=null&&a.length&&R(s.errors);const t=(l=(e=s.data)==null?void 0:e.placePurchaseOrder)==null?void 0:l.purchase_order;return{purchaseOrder:v(t)}}).catch(O)};export{br as PO_PERMISSIONS,K as addPurchaseOrderComment,W as addPurchaseOrderItemsToCart,ur as approvePurchaseOrders,_r as cancelPurchaseOrders,B as config,nr as createPurchaseOrderApprovalRule,dr as currencyInfo,gr as deletePurchaseOrderApprovalRule,y as fetchGraphQl,m as getConfig,U as getPurchaseOrder,Er as getPurchaseOrderApprovalRule,pr as getPurchaseOrderApprovalRuleMetadata,yr as getPurchaseOrderApprovalRules,Rr as getPurchaseOrders,C as initialize,cr as placeOrderForPurchaseOrder,X as placePurchaseOrder,sr as rejectPurchaseOrders,rr as removeFetchGraphQlHeader,er as setEndpoint,ar as setFetchGraphQlHeader,tr as setFetchGraphQlHeaders,hr as updatePurchaseOrderApprovalRule,J as validatePurchaseOrders};
|
|
496
496
|
//# sourceMappingURL=api.js.map
|
package/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sources":["/@dropins/storefront-purchase-order/src/api/graphql/PurchaseOrderQuoteFragment.ts","/@dropins/storefront-purchase-order/src/api/getPurchaseOrder/graphql/getPurchaseOrder.graphql.ts","/@dropins/storefront-purchase-order/src/api/getPurchaseOrder/getPurchaseOrder.ts","/@dropins/storefront-purchase-order/src/api/initialize/initialize.ts","/@dropins/storefront-purchase-order/src/api/validatePurchaseOrders/graphql/validatePurchaseOrders.graphql.ts","/@dropins/storefront-purchase-order/src/api/validatePurchaseOrders/validatePurchaseOrders.ts","/@dropins/storefront-purchase-order/src/api/addPurchaseOrderComment/graphql/addPurchaseOrderComment.graphql.ts","/@dropins/storefront-purchase-order/src/data/transforms/transform-cart.ts","/@dropins/storefront-purchase-order/src/data/transforms/transform-purchase-order-comment.ts","/@dropins/storefront-purchase-order/src/api/addPurchaseOrderComment/addPurchaseOrderComment.ts","/@dropins/storefront-purchase-order/src/api/addPurchaseOrderItemsToCart/graphql/addPurchaseOrderItemsToCart.graphql.ts","/@dropins/storefront-purchase-order/src/api/addPurchaseOrderItemsToCart/addPurchaseOrderItemsToCart.ts","/@dropins/storefront-purchase-order/src/api/placePurchaseOrder/graphql/placePurchaseOrder.graphql.ts","/@dropins/storefront-purchase-order/src/api/placePurchaseOrder/placePurchaseOrder.ts"],"sourcesContent":["/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\n/**\n * Limited Quote fragment for Purchase Order context\n * Some fields from full Cart type may not be available in purchase_order.quote\n */\nexport const PURCHASE_ORDER_QUOTE_FRAGMENT = /* GraphQL */ `\n fragment PURCHASE_ORDER_QUOTE_FRAGMENT on Cart {\n __typename\n id\n email\n is_virtual\n total_quantity\n applied_coupons {\n code\n }\n applied_gift_cards {\n code\n applied_balance {\n value\n currency\n }\n current_balance {\n value\n currency\n }\n expiration_date\n }\n applied_reward_points {\n money {\n value\n currency\n }\n points\n }\n applied_store_credit {\n applied_balance {\n value\n currency\n }\n current_balance {\n value\n currency\n }\n }\n available_gift_wrappings {\n uid\n design\n price {\n value\n currency\n }\n image {\n url\n label\n }\n }\n gift_message {\n from\n to\n message\n }\n gift_receipt_included\n gift_wrapping {\n uid\n design\n price {\n value\n currency\n }\n image {\n url\n label\n }\n }\n printed_card_included\n available_payment_methods {\n code\n title\n is_deferred\n }\n selected_payment_method {\n code\n title\n }\n billing_address {\n city\n company\n country {\n code\n label\n }\n firstname\n lastname\n postcode\n region {\n code\n label\n }\n street\n telephone\n custom_attributes {\n code\n }\n fax\n id\n middlename\n prefix\n suffix\n uid\n vat_id\n }\n shipping_addresses {\n city\n company\n country {\n code\n label\n }\n firstname\n lastname\n postcode\n region {\n code\n label\n }\n street\n telephone\n custom_attributes {\n code\n }\n fax\n id\n middlename\n prefix\n suffix\n uid\n vat_id\n available_shipping_methods {\n amount {\n value\n currency\n }\n carrier_code\n carrier_title\n method_code\n method_title\n }\n selected_shipping_method {\n amount {\n value\n currency\n }\n carrier_code\n carrier_title\n method_code\n method_title\n }\n }\n rules {\n uid\n }\n itemsV2(pageSize: 100, currentPage: 1) {\n items {\n uid\n quantity\n product {\n __typename\n uid\n name\n sku\n url_key\n canonical_url\n stock_status\n only_x_left_in_stock\n image {\n url\n label\n }\n small_image {\n url\n label\n }\n thumbnail {\n url\n label\n }\n price_range {\n maximum_price {\n regular_price {\n value\n currency\n }\n final_price {\n value\n currency\n }\n }\n }\n }\n prices {\n price {\n value\n currency\n }\n price_including_tax {\n value\n currency\n }\n original_item_price {\n value\n currency\n }\n original_row_total {\n value\n currency\n }\n row_total {\n value\n currency\n }\n row_total_including_tax {\n value\n currency\n }\n total_item_discount {\n value\n currency\n }\n discounts {\n label\n amount {\n value\n currency\n }\n }\n fixed_product_taxes {\n label\n amount {\n value\n currency\n }\n }\n }\n ... on SimpleCartItem {\n customizable_options {\n label\n values {\n label\n value\n }\n }\n }\n ... on ConfigurableCartItem {\n configurable_options {\n option_label\n value_label\n }\n }\n ... on BundleCartItem {\n bundle_options {\n uid\n label\n type\n values {\n uid\n label\n quantity\n }\n }\n }\n ... on DownloadableCartItem {\n links {\n uid\n title\n }\n }\n ... on GiftCardCartItem {\n sender_name\n sender_email\n recipient_name\n recipient_email\n message\n amount {\n value\n currency\n }\n }\n errors {\n code\n message\n }\n is_available\n max_qty\n min_qty\n not_available_message\n note_from_buyer {\n note_uid\n note\n created_at\n }\n note_from_seller {\n note_uid\n note\n created_at\n }\n }\n page_info {\n current_page\n page_size\n total_pages\n }\n total_count\n }\n prices {\n grand_total {\n value\n currency\n }\n grand_total_excluding_tax {\n value\n currency\n }\n subtotal_excluding_tax {\n value\n currency\n }\n subtotal_including_tax {\n value\n currency\n }\n subtotal_with_discount_excluding_tax {\n value\n currency\n }\n applied_taxes {\n label\n amount {\n value\n currency\n }\n }\n discounts {\n label\n amount {\n value\n currency\n }\n }\n gift_options {\n gift_wrapping_for_items {\n value\n currency\n }\n gift_wrapping_for_items_incl_tax {\n value\n currency\n }\n gift_wrapping_for_order {\n value\n currency\n }\n gift_wrapping_for_order_incl_tax {\n value\n currency\n }\n printed_card {\n value\n currency\n }\n printed_card_incl_tax {\n value\n currency\n }\n }\n }\n }\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { PURCHASE_ORDER_QUOTE_FRAGMENT } from '../../graphql/PurchaseOrderQuoteFragment';\n\nexport const GET_PURCHASE_ORDER = /* GraphQL */ `\n query GET_PURCHASE_ORDER($uid: ID!) {\n customer {\n purchase_order(uid: $uid) {\n uid\n number\n created_at\n updated_at\n status\n available_actions\n created_by {\n firstname\n lastname\n email\n }\n order {\n id\n number\n total {\n grand_total {\n value\n currency\n }\n }\n }\n quote {\n ...PURCHASE_ORDER_QUOTE_FRAGMENT\n }\n }\n }\n }\n ${PURCHASE_ORDER_QUOTE_FRAGMENT}\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { fetchGraphQl } from '@/b2b-purchase-order/api/fetch-graphql';\nimport { handleNetworkError } from '@/b2b-purchase-order/lib/network-error';\nimport { handleFetchError } from '@/b2b-purchase-order/lib/fetch-error';\nimport { GET_PURCHASE_ORDER } from '@/b2b-purchase-order/api/getPurchaseOrder/graphql/getPurchaseOrder.graphql';\nimport { transformPurchaseOrder } from '@/b2b-purchase-order/data/transforms/transform-purchase-order';\nimport { PurchaseOrderModel } from '@/b2b-purchase-order/data/models';\n\nexport const getPurchaseOrder = async (\n uid: string\n): Promise<{\n purchaseOrder: PurchaseOrderModel;\n}> => {\n if (!uid || uid.trim() === '') {\n throw new Error('Purchase Order UID is required');\n }\n\n return fetchGraphQl(GET_PURCHASE_ORDER, {\n variables: { uid },\n })\n .then((response: any) => {\n if (response.errors?.length) {\n handleFetchError(response.errors);\n }\n\n const result = response.data?.customer?.purchase_order;\n if (!result) {\n throw new Error('Failed to get purchase order');\n }\n\n return {\n purchaseOrder: transformPurchaseOrder(result),\n };\n })\n .catch(handleNetworkError);\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { Initializer } from '@adobe-commerce/elsie/lib';\nimport { Lang } from '@adobe-commerce/elsie/i18n';\nimport { getPurchaseOrder } from '../getPurchaseOrder';\nimport { events } from '@adobe-commerce/event-bus';\n\ntype ConfigProps = {\n langDefinitions?: Lang;\n poRef?: string;\n};\n\nexport const initialize = new Initializer<ConfigProps>({\n init: async (config) => {\n const defaultConfig = {};\n\n initialize.config.setConfig({ ...defaultConfig, ...config });\n\n const isValidPoRef =\n typeof config?.poRef === 'string' && config.poRef.trim() !== '';\n\n if (isValidPoRef) {\n const result = await getPurchaseOrder(config!.poRef!);\n\n if (result?.purchaseOrder?.quote) {\n events.emit('order/data', {\n ...result.purchaseOrder.quote,\n // @ts-ignore\n poNumber: result?.purchaseOrder?.number,\n });\n }\n }\n },\n\n listeners: () => [],\n});\n\nexport const config = initialize.config;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { PURCHASE_ORDERS_FRAGMENT } from '@/b2b-purchase-order/api/graphql/PurchaseOrdersFragment.graphql';\n\nexport const VALIDATE_PURCHASE_ORDERS = /* GraphQL */ `\n mutation VALIDATE_PURCHASE_ORDERS($input: ValidatePurchaseOrdersInput!) {\n validatePurchaseOrders(input: $input) {\n errors {\n message\n type\n }\n purchase_orders {\n ...PURCHASE_ORDERS_FRAGMENT\n }\n }\n }\n ${PURCHASE_ORDERS_FRAGMENT}\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\nimport { fetchGraphQl } from '@/b2b-purchase-order/api/fetch-graphql';\nimport { handleNetworkError } from '@/b2b-purchase-order/lib/network-error';\nimport { handleFetchError } from '@/b2b-purchase-order/lib/fetch-error';\nimport { VALIDATE_PURCHASE_ORDERS } from '@/b2b-purchase-order/api/validatePurchaseOrders/graphql/validatePurchaseOrders.graphql';\nimport { PurchaseOrderModel } from '@/b2b-purchase-order/data/models';\nimport { transformPurchaseOrder } from '@/b2b-purchase-order/data/transforms/transform-purchase-order';\n\nexport const validatePurchaseOrders = async (\n uids: string | string[]\n): Promise<{\n errors: { message: string; type: string }[];\n purchaseOrders: PurchaseOrderModel[];\n}> => {\n const uidArray = Array.isArray(uids) ? uids : [uids];\n\n if (!uidArray || uidArray.length === 0) {\n throw new Error('Purchase Order UID(s) are required');\n }\n\n if (uidArray.some((uid) => !uid || uid.trim() === '')) {\n throw new Error('All Purchase Order UIDs must be valid');\n }\n\n const input = {\n purchase_order_uids: uidArray,\n };\n\n return fetchGraphQl(VALIDATE_PURCHASE_ORDERS, {\n variables: { input },\n })\n .then((response: any) => {\n if (response.errors?.length) {\n handleFetchError(response.errors);\n }\n\n const data = response.data?.validatePurchaseOrders;\n\n return {\n errors: (data?.errors ?? []).map((error: any) => ({\n message: error?.message ?? '',\n type: error?.type ?? '',\n })),\n purchaseOrders: (data?.purchase_orders || []).map(\n transformPurchaseOrder\n ),\n };\n })\n .catch(handleNetworkError);\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nexport const ADD_PURCHASE_ORDER_COMMENT = /* GraphQL */ `\n mutation ADD_PURCHASE_ORDER_COMMENT(\n $purchaseOrderUid: ID!\n $comment: String!\n ) {\n addPurchaseOrderComment(\n input: { purchase_order_uid: $purchaseOrderUid, comment: $comment }\n ) {\n comment {\n created_at\n text\n uid\n author {\n allow_remote_shopping_assistance\n confirmation_status\n created_at\n date_of_birth\n email\n firstname\n gender\n job_title\n lastname\n middlename\n prefix\n status\n structure_id\n suffix\n telephone\n }\n }\n }\n }\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { CartModel } from '@/b2b-purchase-order/data/models';\n\nexport const transformCart = (data: any): CartModel => {\n const cartItems = data?.cart?.itemsV2?.items ?? [];\n\n return {\n cart: {\n id: data?.cart?.id ?? '',\n items: cartItems.map((item: any) => ({\n uid: item?.uid ?? '',\n quantity: item?.quantity ?? 0,\n product: {\n uid: item?.product?.uid ?? '',\n name: item?.product?.name ?? '',\n sku: item?.product?.sku ?? '',\n },\n })),\n pagination: {\n currentPage: data?.cart?.itemsV2?.page_info?.current_page ?? 1,\n pageSize: data?.cart?.itemsV2?.page_info?.page_size ?? 20,\n totalPages: data?.cart?.itemsV2?.page_info?.total_pages ?? 0,\n totalCount: data?.cart?.itemsV2?.total_count ?? 0,\n },\n },\n userErrors:\n data?.user_errors?.map((error: any) => ({\n message: error?.message ?? '',\n })) ?? [],\n };\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { PurchaseOrderCommentModel } from '@/b2b-purchase-order/data/models';\n\nexport const transformPurchaseOrderComment = (\n comment: any\n): PurchaseOrderCommentModel => {\n return {\n createdAt: comment?.created_at ?? '',\n text: comment?.text ?? '',\n uid: comment?.uid ?? '',\n author: {\n allowRemoteShoppingAssistance:\n comment?.author?.allow_remote_shopping_assistance ?? false,\n confirmationStatus: comment?.author?.confirmation_status ?? '',\n createdAt: comment?.author?.created_at ?? '',\n dateOfBirth: comment?.author?.date_of_birth ?? '',\n email: comment?.author?.email ?? '',\n firstname: comment?.author?.firstname ?? '',\n gender: comment?.author?.gender ?? 0,\n jobTitle: comment?.author?.job_title ?? '',\n lastname: comment?.author?.lastname ?? '',\n middlename: comment?.author?.middlename ?? '',\n prefix: comment?.author?.prefix ?? '',\n status: comment?.author?.status ?? '',\n structureId: comment?.author?.structure_id ?? '',\n suffix: comment?.author?.suffix ?? '',\n telephone: comment?.author?.telephone ?? '',\n },\n };\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { fetchGraphQl } from '@/b2b-purchase-order/api/fetch-graphql';\nimport { handleNetworkError } from '@/b2b-purchase-order/lib/network-error';\nimport { handleFetchError } from '@/b2b-purchase-order/lib/fetch-error';\nimport { ADD_PURCHASE_ORDER_COMMENT } from '@/b2b-purchase-order/api/addPurchaseOrderComment/graphql/addPurchaseOrderComment.graphql';\nimport { transformPurchaseOrderComment } from '@/b2b-purchase-order/data/transforms';\nimport { PurchaseOrderCommentModel } from '@/b2b-purchase-order/data/models';\n\nexport const addPurchaseOrderComment = async (\n uid: string,\n comment: string\n): Promise<PurchaseOrderCommentModel> => {\n if (!uid) {\n throw new Error('Purchase Order ID is required');\n }\n\n if (!comment) {\n throw new Error('Comment text is required');\n }\n\n const variables = {\n purchaseOrderUid: uid,\n comment,\n };\n\n return fetchGraphQl(ADD_PURCHASE_ORDER_COMMENT, {\n variables,\n })\n .then((response: any) => {\n if (response.errors?.length) {\n handleFetchError(response.errors);\n }\n\n return transformPurchaseOrderComment(\n response.data?.addPurchaseOrderComment?.comment\n );\n })\n .catch(handleNetworkError);\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nexport const ADD_PURCHASE_ORDER_ITEMS_TO_CART = /* GraphQL */ `\n mutation ADD_PURCHASE_ORDER_ITEMS_TO_CART(\n $purchaseOrderUid: ID!\n $cartId: String!\n $replaceExistingCartItems: Boolean!\n ) {\n addPurchaseOrderItemsToCart(\n input: {\n purchase_order_uid: $purchaseOrderUid\n cart_id: $cartId\n replace_existing_cart_items: $replaceExistingCartItems\n }\n ) {\n cart {\n id\n itemsV2 {\n items {\n uid\n quantity\n product {\n uid\n name\n sku\n }\n }\n page_info {\n current_page\n page_size\n total_pages\n }\n total_count\n }\n }\n }\n }\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { fetchGraphQl } from '@/b2b-purchase-order/api/fetch-graphql';\nimport { handleNetworkError } from '@/b2b-purchase-order/lib/network-error';\nimport { handleFetchError } from '@/b2b-purchase-order/lib/fetch-error';\nimport { transformCart } from '@/b2b-purchase-order/data/transforms';\nimport { ADD_PURCHASE_ORDER_ITEMS_TO_CART } from '@/b2b-purchase-order/api/addPurchaseOrderItemsToCart/graphql/addPurchaseOrderItemsToCart.graphql';\nimport { CartModel } from '@/b2b-purchase-order/data/models';\n\nexport const addPurchaseOrderItemsToCart = async (\n purchaseOrderUid: string,\n cartId: string,\n replaceExistingCartItems: boolean = false\n): Promise<CartModel> => {\n if (!purchaseOrderUid) {\n throw new Error('Purchase Order UID is required');\n }\n\n if (!cartId) {\n throw new Error('Cart ID is required');\n }\n\n const variables = {\n purchaseOrderUid,\n cartId,\n replaceExistingCartItems,\n };\n\n return fetchGraphQl(ADD_PURCHASE_ORDER_ITEMS_TO_CART, {\n variables,\n })\n .then((response: any) => {\n if (response.errors?.length) {\n handleFetchError(response.errors);\n }\n\n const cartData = response.data?.addPurchaseOrderItemsToCart;\n if (!cartData?.cart) {\n throw new Error('Failed to add purchase order items to cart');\n }\n\n return transformCart(cartData);\n })\n .catch(handleNetworkError);\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { PURCHASE_ORDERS_FRAGMENT } from '@/b2b-purchase-order/api/graphql/PurchaseOrdersFragment.graphql';\n\nexport const PLACE_PURCHASE_ORDER = /* GraphQL */ `\n mutation PLACE_PURCHASE_ORDER($input: PlacePurchaseOrderInput!) {\n placePurchaseOrder(input: $input) {\n purchase_order {\n ...PURCHASE_ORDERS_FRAGMENT\n }\n }\n }\n ${PURCHASE_ORDERS_FRAGMENT}\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { fetchGraphQl } from '@/b2b-purchase-order/api/fetch-graphql';\nimport { handleNetworkError } from '@/b2b-purchase-order/lib/network-error';\nimport { handleFetchError } from '@/b2b-purchase-order/lib/fetch-error';\nimport { PLACE_PURCHASE_ORDER } from '@/b2b-purchase-order/api/placePurchaseOrder/graphql/placePurchaseOrder.graphql';\nimport { transformPurchaseOrder } from '@/b2b-purchase-order/data/transforms/transform-purchase-order';\nimport { PurchaseOrderModel } from '@/b2b-purchase-order/data/models';\n\nexport const placePurchaseOrder = async (\n cartId: string\n): Promise<{ purchaseOrder: PurchaseOrderModel }> => {\n if (!cartId || cartId.trim() === '') {\n throw new Error('Cart ID is required');\n }\n\n const input = {\n cart_id: cartId,\n };\n\n return fetchGraphQl(PLACE_PURCHASE_ORDER, {\n variables: { input },\n })\n .then((response: any) => {\n if (response.errors?.length) {\n handleFetchError(response.errors);\n }\n\n const rawPurchaseOrder =\n response.data?.placePurchaseOrder?.purchase_order;\n return {\n purchaseOrder: transformPurchaseOrder(rawPurchaseOrder),\n };\n })\n .catch(handleNetworkError);\n};\n"],"names":["PURCHASE_ORDER_QUOTE_FRAGMENT","GET_PURCHASE_ORDER","getPurchaseOrder","uid","fetchGraphQl","response","_a","handleFetchError","result","_c","_b","transformPurchaseOrder","handleNetworkError","initialize","Initializer","config","defaultConfig","events","VALIDATE_PURCHASE_ORDERS","PURCHASE_ORDERS_FRAGMENT","validatePurchaseOrders","uids","uidArray","data","error","ADD_PURCHASE_ORDER_COMMENT","transformCart","cartItems","item","_f","_e","_d","_i","_h","_g","_l","_k","_j","_n","_m","_o","transformPurchaseOrderComment","comment","addPurchaseOrderComment","ADD_PURCHASE_ORDER_ITEMS_TO_CART","addPurchaseOrderItemsToCart","purchaseOrderUid","cartId","replaceExistingCartItems","cartData","PLACE_PURCHASE_ORDER","placePurchaseOrder","rawPurchaseOrder"],"mappings":"01BAqBO,MAAMA,EAA8C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,ECF9CC,EAAmC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IA+B5CD,CAA6B;AAAA,EC1BpBE,EAAmB,MAC9BC,GAGI,CACJ,GAAI,CAACA,GAAOA,EAAI,KAAA,IAAW,GACzB,MAAM,IAAI,MAAM,gCAAgC,EAGlD,OAAOC,EAAaH,EAAoB,CACtC,UAAW,CAAE,IAAAE,CAAA,CAAI,CAClB,EACE,KAAME,GAAkB,YACnBC,EAAAD,EAAS,SAAT,MAAAC,EAAiB,QACnBC,EAAiBF,EAAS,MAAM,EAGlC,MAAMG,GAASC,GAAAC,EAAAL,EAAS,OAAT,YAAAK,EAAe,WAAf,YAAAD,EAAyB,eACxC,GAAI,CAACD,EACH,MAAM,IAAI,MAAM,8BAA8B,EAGhD,MAAO,CACL,cAAeG,EAAuBH,CAAM,CAAA,CAEhD,CAAC,EACA,MAAMI,CAAkB,CAC7B,ECxBaC,EAAa,IAAIC,EAAyB,CACrD,KAAM,MAAOC,GAAW,SACtB,MAAMC,EAAgB,CAAA,EAOtB,GALAH,EAAW,OAAO,UAAU,CAAE,GAAGG,EAAe,GAAGD,EAAQ,EAGzD,OAAOA,GAAAA,YAAAA,EAAQ,QAAU,UAAYA,EAAO,MAAM,SAAW,GAE7C,CAChB,MAAMP,EAAS,MAAMN,EAAiBa,EAAQ,KAAM,GAEhDT,EAAAE,GAAA,YAAAA,EAAQ,gBAAR,MAAAF,EAAuB,OACzBW,EAAO,KAAK,aAAc,CACxB,GAAGT,EAAO,cAAc,MAExB,UAAUE,EAAAF,GAAA,YAAAA,EAAQ,gBAAR,YAAAE,EAAuB,MAAA,CAClC,CAEL,CACF,EAEA,UAAW,IAAM,CAAA,CACnB,CAAC,EAEYK,EAASF,EAAW,OCjCpBK,EAAyC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAYlDC,CAAwB;AAAA,ECRfC,EAAyB,MACpCC,GAII,CACJ,MAAMC,EAAW,MAAM,QAAQD,CAAI,EAAIA,EAAO,CAACA,CAAI,EAEnD,GAAI,CAACC,GAAYA,EAAS,SAAW,EACnC,MAAM,IAAI,MAAM,oCAAoC,EAGtD,GAAIA,EAAS,KAAMnB,GAAQ,CAACA,GAAOA,EAAI,SAAW,EAAE,EAClD,MAAM,IAAI,MAAM,uCAAuC,EAOzD,OAAOC,EAAac,EAA0B,CAC5C,UAAW,CAAE,MALD,CACZ,oBAAqBI,CAAA,CAIR,CAAM,CACpB,EACE,KAAMjB,GAAkB,UACnBC,EAAAD,EAAS,SAAT,MAAAC,EAAiB,QACnBC,EAAiBF,EAAS,MAAM,EAGlC,MAAMkB,GAAOb,EAAAL,EAAS,OAAT,YAAAK,EAAe,uBAE5B,MAAO,CACL,SAASa,GAAA,YAAAA,EAAM,SAAU,CAAA,GAAI,IAAKC,IAAgB,CAChD,SAASA,GAAA,YAAAA,EAAO,UAAW,GAC3B,MAAMA,GAAA,YAAAA,EAAO,OAAQ,EAAA,EACrB,EACF,iBAAiBD,GAAA,YAAAA,EAAM,kBAAmB,CAAA,GAAI,IAC5CZ,CAAA,CACF,CAEJ,CAAC,EACA,MAAMC,CAAkB,CAC7B,EC/Caa,EAA2C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,ECE3CC,EAAiBH,GAAyB,mCACrD,MAAMI,IAAYjB,GAAAJ,EAAAiB,GAAA,YAAAA,EAAM,OAAN,YAAAjB,EAAY,UAAZ,YAAAI,EAAqB,QAAS,CAAA,EAEhD,MAAO,CACL,KAAM,CACJ,KAAID,EAAAc,GAAA,YAAAA,EAAM,OAAN,YAAAd,EAAY,KAAM,GACtB,MAAOkB,EAAU,IAAKC,GAAA,WAAe,OACnC,KAAKA,GAAA,YAAAA,EAAM,MAAO,GAClB,UAAUA,GAAA,YAAAA,EAAM,WAAY,EAC5B,QAAS,CACP,MAAKtB,EAAAsB,GAAA,YAAAA,EAAM,UAAN,YAAAtB,EAAe,MAAO,GAC3B,OAAMI,EAAAkB,GAAA,YAAAA,EAAM,UAAN,YAAAlB,EAAe,OAAQ,GAC7B,MAAKD,EAAAmB,GAAA,YAAAA,EAAM,UAAN,YAAAnB,EAAe,MAAO,EAAA,CAC7B,EACA,EACF,WAAY,CACV,cAAaoB,GAAAC,GAAAC,EAAAR,GAAA,YAAAA,EAAM,OAAN,YAAAQ,EAAY,UAAZ,YAAAD,EAAqB,YAArB,YAAAD,EAAgC,eAAgB,EAC7D,WAAUG,GAAAC,GAAAC,EAAAX,GAAA,YAAAA,EAAM,OAAN,YAAAW,EAAY,UAAZ,YAAAD,EAAqB,YAArB,YAAAD,EAAgC,YAAa,GACvD,aAAYG,GAAAC,GAAAC,EAAAd,GAAA,YAAAA,EAAM,OAAN,YAAAc,EAAY,UAAZ,YAAAD,EAAqB,YAArB,YAAAD,EAAgC,cAAe,EAC3D,aAAYG,GAAAC,EAAAhB,GAAA,YAAAA,EAAM,OAAN,YAAAgB,EAAY,UAAZ,YAAAD,EAAqB,cAAe,CAAA,CAClD,EAEF,aACEE,EAAAjB,GAAA,YAAAA,EAAM,cAAN,YAAAiB,EAAmB,IAAKhB,IAAgB,CACtC,SAASA,GAAA,YAAAA,EAAO,UAAW,EAAA,MACtB,CAAA,CAAC,CAEd,EC3BaiB,EACXC,GAC8B,mCAC9B,MAAO,CACL,WAAWA,GAAA,YAAAA,EAAS,aAAc,GAClC,MAAMA,GAAA,YAAAA,EAAS,OAAQ,GACvB,KAAKA,GAAA,YAAAA,EAAS,MAAO,GACrB,OAAQ,CACN,gCACEpC,EAAAoC,GAAA,YAAAA,EAAS,SAAT,YAAApC,EAAiB,mCAAoC,GACvD,qBAAoBI,EAAAgC,GAAA,YAAAA,EAAS,SAAT,YAAAhC,EAAiB,sBAAuB,GAC5D,YAAWD,EAAAiC,GAAA,YAAAA,EAAS,SAAT,YAAAjC,EAAiB,aAAc,GAC1C,cAAasB,EAAAW,GAAA,YAAAA,EAAS,SAAT,YAAAX,EAAiB,gBAAiB,GAC/C,QAAOD,EAAAY,GAAA,YAAAA,EAAS,SAAT,YAAAZ,EAAiB,QAAS,GACjC,YAAWD,EAAAa,GAAA,YAAAA,EAAS,SAAT,YAAAb,EAAiB,YAAa,GACzC,SAAQK,EAAAQ,GAAA,YAAAA,EAAS,SAAT,YAAAR,EAAiB,SAAU,EACnC,WAAUD,EAAAS,GAAA,YAAAA,EAAS,SAAT,YAAAT,EAAiB,YAAa,GACxC,WAAUD,EAAAU,GAAA,YAAAA,EAAS,SAAT,YAAAV,EAAiB,WAAY,GACvC,aAAYK,EAAAK,GAAA,YAAAA,EAAS,SAAT,YAAAL,EAAiB,aAAc,GAC3C,SAAQD,EAAAM,GAAA,YAAAA,EAAS,SAAT,YAAAN,EAAiB,SAAU,GACnC,SAAQD,EAAAO,GAAA,YAAAA,EAAS,SAAT,YAAAP,EAAiB,SAAU,GACnC,cAAaI,EAAAG,GAAA,YAAAA,EAAS,SAAT,YAAAH,EAAiB,eAAgB,GAC9C,SAAQD,EAAAI,GAAA,YAAAA,EAAS,SAAT,YAAAJ,EAAiB,SAAU,GACnC,YAAWE,EAAAE,GAAA,YAAAA,EAAS,SAAT,YAAAF,EAAiB,YAAa,EAAA,CAC3C,CAEJ,ECrBaG,EAA0B,MACrCxC,EACAuC,IACuC,CACvC,GAAI,CAACvC,EACH,MAAM,IAAI,MAAM,+BAA+B,EAGjD,GAAI,CAACuC,EACH,MAAM,IAAI,MAAM,0BAA0B,EAQ5C,OAAOtC,EAAaqB,EAA4B,CAC9C,UANgB,CAChB,iBAAkBtB,EAClB,QAAAuC,CAAA,CAIA,CACD,EACE,KAAMrC,GAAkB,WACvB,OAAIC,EAAAD,EAAS,SAAT,MAAAC,EAAiB,QACnBC,EAAiBF,EAAS,MAAM,EAG3BoC,GACLhC,GAAAC,EAAAL,EAAS,OAAT,YAAAK,EAAe,0BAAf,YAAAD,EAAwC,OAAA,CAE5C,CAAC,EACA,MAAMG,CAAkB,CAC7B,ECrCagC,EAAiD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,ECOjDC,EAA8B,MACzCC,EACAC,EACAC,EAAoC,KACb,CACvB,GAAI,CAACF,EACH,MAAM,IAAI,MAAM,gCAAgC,EAGlD,GAAI,CAACC,EACH,MAAM,IAAI,MAAM,qBAAqB,EASvC,OAAO3C,EAAawC,EAAkC,CACpD,UAPgB,CAChB,iBAAAE,EACA,OAAAC,EACA,yBAAAC,CAAA,CAIA,CACD,EACE,KAAM3C,GAAkB,UACnBC,EAAAD,EAAS,SAAT,MAAAC,EAAiB,QACnBC,EAAiBF,EAAS,MAAM,EAGlC,MAAM4C,GAAWvC,EAAAL,EAAS,OAAT,YAAAK,EAAe,4BAChC,GAAI,EAACuC,GAAA,MAAAA,EAAU,MACb,MAAM,IAAI,MAAM,4CAA4C,EAG9D,OAAOvB,EAAcuB,CAAQ,CAC/B,CAAC,EACA,MAAMrC,CAAkB,CAC7B,ECxCasC,EAAqC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQ9C/B,CAAwB;AAAA,ECHfgC,EAAqB,MAChCJ,GACmD,CACnD,GAAI,CAACA,GAAUA,EAAO,KAAA,IAAW,GAC/B,MAAM,IAAI,MAAM,qBAAqB,EAOvC,OAAO3C,EAAa8C,EAAsB,CACxC,UAAW,CAAE,MALD,CACZ,QAASH,CAAA,CAII,CAAM,CACpB,EACE,KAAM1C,GAAkB,YACnBC,EAAAD,EAAS,SAAT,MAAAC,EAAiB,QACnBC,EAAiBF,EAAS,MAAM,EAGlC,MAAM+C,GACJ3C,GAAAC,EAAAL,EAAS,OAAT,YAAAK,EAAe,qBAAf,YAAAD,EAAmC,eACrC,MAAO,CACL,cAAeE,EAAuByC,CAAgB,CAAA,CAE1D,CAAC,EACA,MAAMxC,CAAkB,CAC7B"}
|
|
1
|
+
{"version":3,"file":"api.js","sources":["/@dropins/storefront-purchase-order/src/api/graphql/PurchaseOrderQuoteFragment.ts","/@dropins/storefront-purchase-order/src/api/getPurchaseOrder/graphql/getPurchaseOrder.graphql.ts","/@dropins/storefront-purchase-order/src/api/getPurchaseOrder/getPurchaseOrder.ts","/@dropins/storefront-purchase-order/src/api/initialize/initialize.ts","/@dropins/storefront-purchase-order/src/api/validatePurchaseOrders/graphql/validatePurchaseOrders.graphql.ts","/@dropins/storefront-purchase-order/src/api/validatePurchaseOrders/validatePurchaseOrders.ts","/@dropins/storefront-purchase-order/src/api/addPurchaseOrderComment/graphql/addPurchaseOrderComment.graphql.ts","/@dropins/storefront-purchase-order/src/data/transforms/transform-cart.ts","/@dropins/storefront-purchase-order/src/data/transforms/transform-purchase-order-comment.ts","/@dropins/storefront-purchase-order/src/api/addPurchaseOrderComment/addPurchaseOrderComment.ts","/@dropins/storefront-purchase-order/src/api/addPurchaseOrderItemsToCart/graphql/addPurchaseOrderItemsToCart.graphql.ts","/@dropins/storefront-purchase-order/src/api/addPurchaseOrderItemsToCart/addPurchaseOrderItemsToCart.ts","/@dropins/storefront-purchase-order/src/api/placePurchaseOrder/graphql/placePurchaseOrder.graphql.ts","/@dropins/storefront-purchase-order/src/api/placePurchaseOrder/placePurchaseOrder.ts"],"sourcesContent":["/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\n/**\n * Limited Quote fragment for Purchase Order context\n * Some fields from full Cart type may not be available in purchase_order.quote\n */\nexport const PURCHASE_ORDER_QUOTE_FRAGMENT = /* GraphQL */ `\n fragment PURCHASE_ORDER_QUOTE_FRAGMENT on Cart {\n __typename\n id\n email\n is_virtual\n total_quantity\n applied_coupons {\n code\n }\n applied_gift_cards {\n code\n applied_balance {\n value\n currency\n }\n current_balance {\n value\n currency\n }\n expiration_date\n }\n applied_reward_points {\n money {\n value\n currency\n }\n points\n }\n applied_store_credit {\n applied_balance {\n value\n currency\n }\n current_balance {\n value\n currency\n }\n }\n available_gift_wrappings {\n uid\n design\n price {\n value\n currency\n }\n image {\n url\n label\n }\n }\n gift_message {\n from\n to\n message\n }\n gift_receipt_included\n gift_wrapping {\n uid\n design\n price {\n value\n currency\n }\n image {\n url\n label\n }\n }\n printed_card_included\n available_payment_methods {\n code\n title\n is_deferred\n }\n selected_payment_method {\n code\n title\n }\n billing_address {\n city\n company\n country {\n code\n label\n }\n firstname\n lastname\n postcode\n region {\n code\n label\n }\n street\n telephone\n custom_attributes {\n code\n }\n fax\n id\n middlename\n prefix\n suffix\n uid\n vat_id\n }\n shipping_addresses {\n city\n company\n country {\n code\n label\n }\n firstname\n lastname\n postcode\n region {\n code\n label\n }\n street\n telephone\n custom_attributes {\n code\n }\n fax\n id\n middlename\n prefix\n suffix\n uid\n vat_id\n available_shipping_methods {\n amount {\n value\n currency\n }\n carrier_code\n carrier_title\n method_code\n method_title\n }\n selected_shipping_method {\n amount {\n value\n currency\n }\n carrier_code\n carrier_title\n method_code\n method_title\n }\n }\n rules {\n uid\n }\n itemsV2(pageSize: 100, currentPage: 1) {\n items {\n uid\n quantity\n product {\n __typename\n uid\n name\n sku\n url_key\n canonical_url\n stock_status\n only_x_left_in_stock\n image {\n url\n label\n }\n small_image {\n url\n label\n }\n thumbnail {\n url\n label\n }\n price_range {\n maximum_price {\n regular_price {\n value\n currency\n }\n final_price {\n value\n currency\n }\n }\n }\n }\n prices {\n price {\n value\n currency\n }\n price_including_tax {\n value\n currency\n }\n original_item_price {\n value\n currency\n }\n original_row_total {\n value\n currency\n }\n row_total {\n value\n currency\n }\n row_total_including_tax {\n value\n currency\n }\n total_item_discount {\n value\n currency\n }\n discounts {\n label\n amount {\n value\n currency\n }\n }\n fixed_product_taxes {\n label\n amount {\n value\n currency\n }\n }\n }\n ... on SimpleCartItem {\n customizable_options {\n label\n values {\n label\n value\n }\n }\n }\n ... on ConfigurableCartItem {\n configurable_options {\n option_label\n value_label\n }\n }\n ... on BundleCartItem {\n bundle_options {\n uid\n label\n type\n values {\n uid\n label\n quantity\n }\n }\n }\n ... on DownloadableCartItem {\n links {\n uid\n title\n }\n }\n ... on GiftCardCartItem {\n sender_name\n sender_email\n recipient_name\n recipient_email\n message\n amount {\n value\n currency\n }\n }\n errors {\n code\n message\n }\n is_available\n max_qty\n min_qty\n not_available_message\n note_from_buyer {\n note_uid\n note\n created_at\n }\n note_from_seller {\n note_uid\n note\n created_at\n }\n }\n page_info {\n current_page\n page_size\n total_pages\n }\n total_count\n }\n prices {\n grand_total {\n value\n currency\n }\n grand_total_excluding_tax {\n value\n currency\n }\n subtotal_excluding_tax {\n value\n currency\n }\n subtotal_including_tax {\n value\n currency\n }\n subtotal_with_discount_excluding_tax {\n value\n currency\n }\n applied_taxes {\n label\n amount {\n value\n currency\n }\n }\n discounts {\n label\n amount {\n value\n currency\n }\n }\n gift_options {\n gift_wrapping_for_items {\n value\n currency\n }\n gift_wrapping_for_items_incl_tax {\n value\n currency\n }\n gift_wrapping_for_order {\n value\n currency\n }\n gift_wrapping_for_order_incl_tax {\n value\n currency\n }\n printed_card {\n value\n currency\n }\n printed_card_incl_tax {\n value\n currency\n }\n }\n }\n }\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { PURCHASE_ORDER_QUOTE_FRAGMENT } from '../../graphql/PurchaseOrderQuoteFragment';\n\nexport const GET_PURCHASE_ORDER = /* GraphQL */ `\n query GET_PURCHASE_ORDER($uid: ID!) {\n customer {\n purchase_order(uid: $uid) {\n uid\n number\n created_at\n updated_at\n status\n available_actions\n created_by {\n firstname\n lastname\n email\n }\n order {\n id\n number\n total {\n grand_total {\n value\n currency\n }\n }\n }\n quote {\n ...PURCHASE_ORDER_QUOTE_FRAGMENT\n }\n }\n }\n }\n ${PURCHASE_ORDER_QUOTE_FRAGMENT}\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { fetchGraphQl } from '@/b2b-purchase-order/api/fetch-graphql';\nimport { handleNetworkError } from '@/b2b-purchase-order/lib/network-error';\nimport { handleFetchError } from '@/b2b-purchase-order/lib/fetch-error';\nimport { GET_PURCHASE_ORDER } from '@/b2b-purchase-order/api/getPurchaseOrder/graphql/getPurchaseOrder.graphql';\nimport { transformPurchaseOrder } from '@/b2b-purchase-order/data/transforms/transform-purchase-order';\nimport { PurchaseOrderModel } from '@/b2b-purchase-order/data/models';\n\nexport const getPurchaseOrder = async (\n uid: string\n): Promise<{\n purchaseOrder: PurchaseOrderModel;\n}> => {\n if (!uid || uid.trim() === '') {\n throw new Error('Purchase Order UID is required');\n }\n\n return fetchGraphQl(GET_PURCHASE_ORDER, {\n variables: { uid },\n })\n .then((response: any) => {\n if (response.errors?.length) {\n handleFetchError(response.errors);\n }\n\n const result = response.data?.customer?.purchase_order;\n if (!result) {\n throw new Error('Failed to get purchase order');\n }\n\n return {\n purchaseOrder: transformPurchaseOrder(result),\n };\n })\n .catch(handleNetworkError);\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { Initializer } from '@adobe-commerce/elsie/lib';\nimport { Lang } from '@adobe-commerce/elsie/i18n';\nimport { getPurchaseOrder } from '../getPurchaseOrder';\nimport { events } from '@adobe-commerce/event-bus';\n\ntype ConfigProps = {\n langDefinitions?: Lang;\n poRef?: string;\n};\n\nexport const initialize = new Initializer<ConfigProps>({\n init: async (config) => {\n const defaultConfig = {};\n\n initialize.config.setConfig({ ...defaultConfig, ...config });\n\n const isValidPoRef =\n typeof config?.poRef === 'string' && config.poRef.trim() !== '';\n\n if (isValidPoRef) {\n const result = await getPurchaseOrder(config!.poRef!);\n\n if (result?.purchaseOrder?.quote) {\n events.emit('order/data', {\n ...result.purchaseOrder.quote,\n // @ts-ignore\n poNumber: result?.purchaseOrder?.number,\n });\n }\n }\n },\n\n listeners: () => [],\n});\n\nexport const config = initialize.config;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { PURCHASE_ORDERS_FRAGMENT } from '@/b2b-purchase-order/api/graphql/PurchaseOrdersFragment.graphql';\n\nexport const VALIDATE_PURCHASE_ORDERS = /* GraphQL */ `\n mutation VALIDATE_PURCHASE_ORDERS($input: ValidatePurchaseOrdersInput!) {\n validatePurchaseOrders(input: $input) {\n errors {\n message\n type\n }\n purchase_orders {\n ...PURCHASE_ORDERS_FRAGMENT\n }\n }\n }\n ${PURCHASE_ORDERS_FRAGMENT}\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\nimport { fetchGraphQl } from '@/b2b-purchase-order/api/fetch-graphql';\nimport { handleNetworkError } from '@/b2b-purchase-order/lib/network-error';\nimport { handleFetchError } from '@/b2b-purchase-order/lib/fetch-error';\nimport { VALIDATE_PURCHASE_ORDERS } from '@/b2b-purchase-order/api/validatePurchaseOrders/graphql/validatePurchaseOrders.graphql';\nimport { PurchaseOrderModel } from '@/b2b-purchase-order/data/models';\nimport { transformPurchaseOrder } from '@/b2b-purchase-order/data/transforms/transform-purchase-order';\n\nexport const validatePurchaseOrders = async (\n uids: string | string[]\n): Promise<{\n errors: { message: string; type: string }[];\n purchaseOrders: PurchaseOrderModel[];\n}> => {\n const uidArray = Array.isArray(uids) ? uids : [uids];\n\n if (!uidArray || uidArray.length === 0) {\n throw new Error('Purchase Order UID(s) are required');\n }\n\n if (uidArray.some((uid) => !uid || uid.trim() === '')) {\n throw new Error('All Purchase Order UIDs must be valid');\n }\n\n const input = {\n purchase_order_uids: uidArray,\n };\n\n return fetchGraphQl(VALIDATE_PURCHASE_ORDERS, {\n variables: { input },\n })\n .then((response: any) => {\n if (response.errors?.length) {\n handleFetchError(response.errors);\n }\n\n const data = response.data?.validatePurchaseOrders;\n\n return {\n errors: (data?.errors ?? []).map((error: any) => ({\n message: error?.message ?? '',\n type: error?.type ?? '',\n })),\n purchaseOrders: (data?.purchase_orders || []).map(\n transformPurchaseOrder\n ),\n };\n })\n .catch(handleNetworkError);\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nexport const ADD_PURCHASE_ORDER_COMMENT = /* GraphQL */ `\n mutation ADD_PURCHASE_ORDER_COMMENT(\n $purchaseOrderUid: ID!\n $comment: String!\n ) {\n addPurchaseOrderComment(\n input: { purchase_order_uid: $purchaseOrderUid, comment: $comment }\n ) {\n comment {\n created_at\n text\n uid\n author {\n allow_remote_shopping_assistance\n confirmation_status\n created_at\n date_of_birth\n email\n firstname\n gender\n job_title\n lastname\n middlename\n prefix\n status\n structure_id\n suffix\n telephone\n }\n }\n }\n }\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { CartModel } from '@/b2b-purchase-order/data/models';\n\nexport const transformCart = (data: any): CartModel => {\n const cartItems = data?.cart?.itemsV2?.items ?? [];\n\n return {\n cart: {\n id: data?.cart?.id ?? '',\n items: cartItems.map((item: any) => ({\n uid: item?.uid ?? '',\n quantity: item?.quantity ?? 0,\n product: {\n uid: item?.product?.uid ?? '',\n name: item?.product?.name ?? '',\n sku: item?.product?.sku ?? '',\n },\n })),\n pagination: {\n currentPage: data?.cart?.itemsV2?.page_info?.current_page ?? 1,\n pageSize: data?.cart?.itemsV2?.page_info?.page_size ?? 20,\n totalPages: data?.cart?.itemsV2?.page_info?.total_pages ?? 0,\n totalCount: data?.cart?.itemsV2?.total_count ?? 0,\n },\n },\n userErrors:\n data?.user_errors?.map((error: any) => ({\n message: error?.message ?? '',\n })) ?? [],\n };\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { PurchaseOrderCommentModel } from '@/b2b-purchase-order/data/models';\n\nexport const transformPurchaseOrderComment = (\n comment: any\n): PurchaseOrderCommentModel => {\n return {\n createdAt: comment?.created_at ?? '',\n text: comment?.text ?? '',\n uid: comment?.uid ?? '',\n author: {\n allowRemoteShoppingAssistance:\n comment?.author?.allow_remote_shopping_assistance ?? false,\n confirmationStatus: comment?.author?.confirmation_status ?? '',\n createdAt: comment?.author?.created_at ?? '',\n dateOfBirth: comment?.author?.date_of_birth ?? '',\n email: comment?.author?.email ?? '',\n firstname: comment?.author?.firstname ?? '',\n gender: comment?.author?.gender ?? 0,\n jobTitle: comment?.author?.job_title ?? '',\n lastname: comment?.author?.lastname ?? '',\n middlename: comment?.author?.middlename ?? '',\n prefix: comment?.author?.prefix ?? '',\n status: comment?.author?.status ?? '',\n structureId: comment?.author?.structure_id ?? '',\n suffix: comment?.author?.suffix ?? '',\n telephone: comment?.author?.telephone ?? '',\n },\n };\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { fetchGraphQl } from '@/b2b-purchase-order/api/fetch-graphql';\nimport { handleNetworkError } from '@/b2b-purchase-order/lib/network-error';\nimport { handleFetchError } from '@/b2b-purchase-order/lib/fetch-error';\nimport { ADD_PURCHASE_ORDER_COMMENT } from '@/b2b-purchase-order/api/addPurchaseOrderComment/graphql/addPurchaseOrderComment.graphql';\nimport { transformPurchaseOrderComment } from '@/b2b-purchase-order/data/transforms';\nimport { PurchaseOrderCommentModel } from '@/b2b-purchase-order/data/models';\n\nexport const addPurchaseOrderComment = async (\n uid: string,\n comment: string\n): Promise<PurchaseOrderCommentModel> => {\n if (!uid) {\n throw new Error('Purchase Order ID is required');\n }\n\n if (!comment) {\n throw new Error('Comment text is required');\n }\n\n const variables = {\n purchaseOrderUid: uid,\n comment,\n };\n\n return fetchGraphQl(ADD_PURCHASE_ORDER_COMMENT, {\n variables,\n })\n .then((response: any) => {\n if (response.errors?.length) {\n handleFetchError(response.errors);\n }\n\n return transformPurchaseOrderComment(\n response.data?.addPurchaseOrderComment?.comment\n );\n })\n .catch(handleNetworkError);\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nexport const ADD_PURCHASE_ORDER_ITEMS_TO_CART = /* GraphQL */ `\n mutation ADD_PURCHASE_ORDER_ITEMS_TO_CART(\n $purchaseOrderUid: ID!\n $cartId: String!\n $replaceExistingCartItems: Boolean!\n ) {\n addPurchaseOrderItemsToCart(\n input: {\n purchase_order_uid: $purchaseOrderUid\n cart_id: $cartId\n replace_existing_cart_items: $replaceExistingCartItems\n }\n ) {\n cart {\n id\n itemsV2 {\n items {\n uid\n quantity\n product {\n uid\n name\n sku\n }\n }\n page_info {\n current_page\n page_size\n total_pages\n }\n total_count\n }\n }\n }\n }\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { fetchGraphQl } from '@/b2b-purchase-order/api/fetch-graphql';\nimport { handleNetworkError } from '@/b2b-purchase-order/lib/network-error';\nimport { handleFetchError } from '@/b2b-purchase-order/lib/fetch-error';\nimport { transformCart } from '@/b2b-purchase-order/data/transforms';\nimport { ADD_PURCHASE_ORDER_ITEMS_TO_CART } from '@/b2b-purchase-order/api/addPurchaseOrderItemsToCart/graphql/addPurchaseOrderItemsToCart.graphql';\nimport { CartModel } from '@/b2b-purchase-order/data/models';\n\nexport const addPurchaseOrderItemsToCart = async (\n purchaseOrderUid: string,\n cartId: string,\n replaceExistingCartItems: boolean = false\n): Promise<CartModel> => {\n if (!purchaseOrderUid) {\n throw new Error('Purchase Order UID is required');\n }\n\n if (!cartId) {\n throw new Error('Cart ID is required');\n }\n\n const variables = {\n purchaseOrderUid,\n cartId,\n replaceExistingCartItems,\n };\n\n return fetchGraphQl(ADD_PURCHASE_ORDER_ITEMS_TO_CART, {\n variables,\n })\n .then((response: any) => {\n if (response.errors?.length) {\n handleFetchError(response.errors);\n }\n\n const cartData = response.data?.addPurchaseOrderItemsToCart;\n if (!cartData?.cart) {\n throw new Error('Failed to add purchase order items to cart');\n }\n\n return transformCart(cartData);\n })\n .catch(handleNetworkError);\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { PURCHASE_ORDERS_FRAGMENT } from '@/b2b-purchase-order/api/graphql/PurchaseOrdersFragment.graphql';\n\nexport const PLACE_PURCHASE_ORDER = /* GraphQL */ `\n mutation PLACE_PURCHASE_ORDER($input: PlacePurchaseOrderInput!) {\n placePurchaseOrder(input: $input) {\n purchase_order {\n ...PURCHASE_ORDERS_FRAGMENT\n }\n }\n }\n ${PURCHASE_ORDERS_FRAGMENT}\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { fetchGraphQl } from '@/b2b-purchase-order/api/fetch-graphql';\nimport { handleNetworkError } from '@/b2b-purchase-order/lib/network-error';\nimport { handleFetchError } from '@/b2b-purchase-order/lib/fetch-error';\nimport { PLACE_PURCHASE_ORDER } from '@/b2b-purchase-order/api/placePurchaseOrder/graphql/placePurchaseOrder.graphql';\nimport { transformPurchaseOrder } from '@/b2b-purchase-order/data/transforms/transform-purchase-order';\nimport { PurchaseOrderModel } from '@/b2b-purchase-order/data/models';\n\nexport const placePurchaseOrder = async (\n cartId: string\n): Promise<{ purchaseOrder: PurchaseOrderModel }> => {\n if (!cartId || cartId.trim() === '') {\n throw new Error('Cart ID is required');\n }\n\n const input = {\n cart_id: cartId,\n };\n\n return fetchGraphQl(PLACE_PURCHASE_ORDER, {\n variables: { input },\n })\n .then((response: any) => {\n if (response.errors?.length) {\n handleFetchError(response.errors);\n }\n\n const rawPurchaseOrder =\n response.data?.placePurchaseOrder?.purchase_order;\n return {\n purchaseOrder: transformPurchaseOrder(rawPurchaseOrder),\n };\n })\n .catch(handleNetworkError);\n};\n"],"names":["PURCHASE_ORDER_QUOTE_FRAGMENT","GET_PURCHASE_ORDER","getPurchaseOrder","uid","fetchGraphQl","response","_a","handleFetchError","result","_c","_b","transformPurchaseOrder","handleNetworkError","initialize","Initializer","config","defaultConfig","events","VALIDATE_PURCHASE_ORDERS","PURCHASE_ORDERS_FRAGMENT","validatePurchaseOrders","uids","uidArray","data","error","ADD_PURCHASE_ORDER_COMMENT","transformCart","cartItems","item","_f","_e","_d","_i","_h","_g","_l","_k","_j","_n","_m","_o","transformPurchaseOrderComment","comment","addPurchaseOrderComment","ADD_PURCHASE_ORDER_ITEMS_TO_CART","addPurchaseOrderItemsToCart","purchaseOrderUid","cartId","replaceExistingCartItems","cartData","PLACE_PURCHASE_ORDER","placePurchaseOrder","rawPurchaseOrder"],"mappings":"u4BAqBO,MAAMA,EAA8C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/*! Copyright 2025 Adobe
|
|
2
|
+
All Rights Reserved. */
|
|
3
|
+
const r={PO_ALL:"Magento_PurchaseOrder::all",VIEW_CUSTOMER:"Magento_PurchaseOrder::view_purchase_orders",VIEW_SUBORDINATES:"Magento_PurchaseOrder::view_purchase_orders_for_subordinates",VIEW_COMPANY:"Magento_PurchaseOrder::view_purchase_orders_for_company",AUTO_APPROVE:"Magento_PurchaseOrder::autoapprove_purchase_order",SUPER_APPROVE:"Magento_PurchaseOrderRule::super_approve_purchase_order",VIEW_RULES:"Magento_PurchaseOrderRule::view_approval_rules",MANAGE_RULES:"Magento_PurchaseOrderRule::manage_approval_rules"};export{r as P};
|
|
4
|
+
//# sourceMappingURL=permissions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permissions.js","sources":["/@dropins/storefront-purchase-order/src/api/permissions.ts"],"sourcesContent":["export const PO_PERMISSIONS = {\n PO_ALL: 'Magento_PurchaseOrder::all',\n VIEW_CUSTOMER: 'Magento_PurchaseOrder::view_purchase_orders',\n VIEW_SUBORDINATES:\n 'Magento_PurchaseOrder::view_purchase_orders_for_subordinates',\n VIEW_COMPANY: 'Magento_PurchaseOrder::view_purchase_orders_for_company',\n AUTO_APPROVE: 'Magento_PurchaseOrder::autoapprove_purchase_order',\n SUPER_APPROVE: 'Magento_PurchaseOrderRule::super_approve_purchase_order',\n VIEW_RULES: 'Magento_PurchaseOrderRule::view_approval_rules',\n MANAGE_RULES: 'Magento_PurchaseOrderRule::manage_approval_rules',\n};\n"],"names":["PO_PERMISSIONS"],"mappings":"AAAO,MAAMA,EAAiB,CAC5B,OAAQ,6BACR,cAAe,8CACf,kBACE,+DACF,aAAc,0DACd,aAAc,oDACd,cAAe,0DACf,WAAY,iDACZ,aAAc,kDAChB"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
/*! Copyright 2025 Adobe
|
|
2
2
|
All Rights Reserved. */
|
|
3
|
-
import{useState as
|
|
3
|
+
import{useState as m,useEffect as p,useMemo as c}from"@dropins/tools/preact-hooks.js";import{events as u}from"@dropins/tools/event-bus.js";import{P as s}from"./permissions.js";const P=o=>{if(!o)return{isAdmin:!1,purchaseOrderEnabled:!1,role:{id:"",name:""},permissions:{purchaseOrderAll:!1,viewPurchaseOrders:!1,viewPurchaseOrdersForSubordinates:!1,viewPurchaseOrdersForCompany:!1,autoApprovePurchaseOrder:!1,superApprovePurchaseOrder:!1,viewApprovalRules:!1,manageApprovalRules:!1}};const r=o.admin===!0,e=a=>{const t=o[a];return t===!1?!1:t===!0?!0:r},n={purchaseOrderAll:e(s.PO_ALL),viewPurchaseOrders:e(s.VIEW_CUSTOMER),viewPurchaseOrdersForSubordinates:e(s.VIEW_SUBORDINATES),viewPurchaseOrdersForCompany:e(s.VIEW_COMPANY),autoApprovePurchaseOrder:e(s.AUTO_APPROVE),superApprovePurchaseOrder:e(s.SUPER_APPROVE),viewApprovalRules:e(s.VIEW_RULES),manageApprovalRules:e(s.MANAGE_RULES)},i=Object.values(o).some(a=>a===!1)?!1:Object.values(n).some(a=>a===!0);return{isAdmin:r,purchaseOrderEnabled:i,role:{id:"",name:r?"Company Administrator":""},permissions:n}},A=()=>{const o=u.lastPayload("auth/permissions"),[r,e]=m(o);p(()=>{const i=u.on("auth/permissions",a=>{e(a)},{eager:!0});return()=>{i==null||i.off()}},[]);const n=!r;return{permissions:c(()=>P(r),[r]),loadingPermissions:n}};export{A as u};
|
|
4
4
|
//# sourceMappingURL=useCustomerRolePermissions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCustomerRolePermissions.js","sources":["/@dropins/storefront-purchase-order/src/data/transforms/transform-customer-role-permissions.ts","/@dropins/storefront-purchase-order/src/hooks/useCustomerRolePermissions.tsx"],"sourcesContent":["/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { CustomerRolePermissionsModel } from '@/b2b-purchase-order/data/models/customer-role-permissions-model';\n\ntype PermissionsPayload = {\n admin?: boolean;\n [key: string]: boolean | undefined;\n};\n\n/**\n * Transforms flat permissions object from auth/permissions event into CustomerRolePermissionsModel\n *\n * Permission Logic:\n * - true: Permission granted\n * - false: Permission disabled (overrides admin privileges - indicates PO feature is disabled)\n * - Default: Admins get access, regular users don't\n *\n * @param permissionsData - Flat object with permission keys and admin flag\n * @returns CustomerRolePermissionsModel\n */\nexport const transformPermissions = (\n permissionsData: PermissionsPayload | null | undefined\n): CustomerRolePermissionsModel => {\n // Fallback for edge cases\n if (!permissionsData) {\n return {\n isAdmin: false,\n purchaseOrderEnabled: false,\n role: { id: '', name: '' },\n permissions: {\n purchaseOrderAll: false,\n viewPurchaseOrders: false,\n viewPurchaseOrdersForSubordinates: false,\n viewPurchaseOrdersForCompany: false,\n autoApprovePurchaseOrder: false,\n superApprovePurchaseOrder: false,\n viewApprovalRules: false,\n manageApprovalRules: false,\n },\n };\n }\n\n const isAdmin = permissionsData.admin === true;\n\n /**\n * Check if permission is granted\n * - false: Overrides admin (PO disabled)\n * - true: Permission granted\n * - Default: Use admin status\n */\n const hasPermission = (key: string): boolean => {\n const permissionValue = permissionsData[key];\n\n if (permissionValue === false) {\n return false;\n }\n\n if (permissionValue === true) {\n return true;\n }\n\n return isAdmin;\n };\n\n const permissions = {\n purchaseOrderAll: hasPermission(
|
|
1
|
+
{"version":3,"file":"useCustomerRolePermissions.js","sources":["/@dropins/storefront-purchase-order/src/data/transforms/transform-customer-role-permissions.ts","/@dropins/storefront-purchase-order/src/hooks/useCustomerRolePermissions.tsx"],"sourcesContent":["/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { CustomerRolePermissionsModel } from '@/b2b-purchase-order/data/models/customer-role-permissions-model';\nimport { PO_PERMISSIONS } from '@/b2b-purchase-order/api/permissions';\n\ntype PermissionsPayload = {\n admin?: boolean;\n [key: string]: boolean | undefined;\n};\n\n/**\n * Transforms flat permissions object from auth/permissions event into CustomerRolePermissionsModel\n *\n * Permission Logic:\n * - true: Permission granted\n * - false: Permission disabled (overrides admin privileges - indicates PO feature is disabled)\n * - Default: Admins get access, regular users don't\n *\n * @param permissionsData - Flat object with permission keys and admin flag\n * @returns CustomerRolePermissionsModel\n */\nexport const transformPermissions = (\n permissionsData: PermissionsPayload | null | undefined\n): CustomerRolePermissionsModel => {\n // Fallback for edge cases\n if (!permissionsData) {\n return {\n isAdmin: false,\n purchaseOrderEnabled: false,\n role: { id: '', name: '' },\n permissions: {\n purchaseOrderAll: false,\n viewPurchaseOrders: false,\n viewPurchaseOrdersForSubordinates: false,\n viewPurchaseOrdersForCompany: false,\n autoApprovePurchaseOrder: false,\n superApprovePurchaseOrder: false,\n viewApprovalRules: false,\n manageApprovalRules: false,\n },\n };\n }\n\n const isAdmin = permissionsData.admin === true;\n\n /**\n * Check if permission is granted\n * - false: Overrides admin (PO disabled)\n * - true: Permission granted\n * - Default: Use admin status\n */\n const hasPermission = (key: string): boolean => {\n const permissionValue = permissionsData[key];\n\n if (permissionValue === false) {\n return false;\n }\n\n if (permissionValue === true) {\n return true;\n }\n\n return isAdmin;\n };\n\n const permissions = {\n purchaseOrderAll: hasPermission(PO_PERMISSIONS.PO_ALL),\n viewPurchaseOrders: hasPermission(PO_PERMISSIONS.VIEW_CUSTOMER),\n viewPurchaseOrdersForSubordinates: hasPermission(\n PO_PERMISSIONS.VIEW_SUBORDINATES\n ),\n viewPurchaseOrdersForCompany: hasPermission(PO_PERMISSIONS.VIEW_COMPANY),\n autoApprovePurchaseOrder: hasPermission(PO_PERMISSIONS.AUTO_APPROVE),\n superApprovePurchaseOrder: hasPermission(PO_PERMISSIONS.SUPER_APPROVE),\n viewApprovalRules: hasPermission(PO_PERMISSIONS.VIEW_RULES),\n manageApprovalRules: hasPermission(PO_PERMISSIONS.MANAGE_RULES),\n };\n\n // Purchase orders are disabled if ANY permission in the payload is explicitly set to false\n // Otherwise enabled if user has at least one permission\n const hasExplicitlyDisabledPermission = Object.values(permissionsData).some(\n (value) => value === false\n );\n const purchaseOrderEnabled = hasExplicitlyDisabledPermission\n ? false\n : Object.values(permissions).some((permission) => permission === true);\n\n return {\n isAdmin,\n purchaseOrderEnabled,\n role: {\n id: '',\n name: isAdmin ? 'Company Administrator' : '',\n },\n permissions,\n };\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { useMemo, useState, useEffect } from 'preact/hooks';\nimport { events } from '@adobe-commerce/event-bus';\nimport { transformPermissions } from '@/b2b-purchase-order/data/transforms/transform-customer-role-permissions';\nimport { CustomerRolePermissionsModel } from '@/b2b-purchase-order/data/models';\n\n/**\n * Hook to consume customer role permissions from the auth/permissions event\n *\n * Initializes with last payload and subscribes to real-time updates.\n * Transforms permissions data where:\n * - true: Permission granted\n * - false: Permission disabled (overrides admin - PO feature disabled)\n * - Default: Admins get access, regular users don't\n *\n * @returns {permissions: CustomerRolePermissionsModel, loadingPermissions: boolean}\n */\nexport const useCustomerRolePermissions = (): {\n permissions: CustomerRolePermissionsModel;\n loadingPermissions: boolean;\n} => {\n // Initialize with the last payload from the auth/permissions event\n const initialPermissionsData = events.lastPayload('auth/permissions');\n\n // State to hold permissions data, updated when event is triggered\n const [permissionsData, setPermissionsData] = useState(\n initialPermissionsData\n );\n\n // Subscribe to auth/permissions event for real-time updates\n useEffect(() => {\n const subscription = events.on(\n 'auth/permissions',\n (payload) => {\n setPermissionsData(payload);\n },\n { eager: true }\n );\n\n // Cleanup subscription on unmount\n return () => {\n subscription?.off();\n };\n }, []);\n\n // We're loading if we don't have permissions data from the event yet\n const loadingPermissions = !permissionsData;\n\n // Transform and memoize the permissions data\n const permissions = useMemo(() => {\n return transformPermissions(permissionsData);\n }, [permissionsData]);\n\n return {\n permissions,\n loadingPermissions,\n };\n};\n"],"names":["transformPermissions","permissionsData","isAdmin","hasPermission","key","permissionValue","permissions","PO_PERMISSIONS","purchaseOrderEnabled","value","permission","useCustomerRolePermissions","initialPermissionsData","events","setPermissionsData","useState","useEffect","subscription","payload","loadingPermissions","useMemo"],"mappings":"gLAoCO,MAAMA,EACXC,GACiC,CAEjC,GAAI,CAACA,EACH,MAAO,CACL,QAAS,GACT,qBAAsB,GACtB,KAAM,CAAE,GAAI,GAAI,KAAM,EAAA,EACtB,YAAa,CACX,iBAAkB,GAClB,mBAAoB,GACpB,kCAAmC,GACnC,6BAA8B,GAC9B,yBAA0B,GAC1B,0BAA2B,GAC3B,kBAAmB,GACnB,oBAAqB,EAAA,CACvB,EAIJ,MAAMC,EAAUD,EAAgB,QAAU,GAQpCE,EAAiBC,GAAyB,CAC9C,MAAMC,EAAkBJ,EAAgBG,CAAG,EAE3C,OAAIC,IAAoB,GACf,GAGLA,IAAoB,GACf,GAGFH,CACT,EAEMI,EAAc,CAClB,iBAAkBH,EAAcI,EAAe,MAAM,EACrD,mBAAoBJ,EAAcI,EAAe,aAAa,EAC9D,kCAAmCJ,EACjCI,EAAe,iBAAA,EAEjB,6BAA8BJ,EAAcI,EAAe,YAAY,EACvE,yBAA0BJ,EAAcI,EAAe,YAAY,EACnE,0BAA2BJ,EAAcI,EAAe,aAAa,EACrE,kBAAmBJ,EAAcI,EAAe,UAAU,EAC1D,oBAAqBJ,EAAcI,EAAe,YAAY,CAAA,EAQ1DC,EAHkC,OAAO,OAAOP,CAAe,EAAE,KACpEQ,GAAUA,IAAU,EAAA,EAGnB,GACA,OAAO,OAAOH,CAAW,EAAE,KAAMI,GAAeA,IAAe,EAAI,EAEvE,MAAO,CACL,QAAAR,EACA,qBAAAM,EACA,KAAM,CACJ,GAAI,GACJ,KAAMN,EAAU,wBAA0B,EAAA,EAE5C,YAAAI,CAAA,CAEJ,EC9EaK,EAA6B,IAGrC,CAEH,MAAMC,EAAyBC,EAAO,YAAY,kBAAkB,EAG9D,CAACZ,EAAiBa,CAAkB,EAAIC,EAC5CH,CAAA,EAIFI,EAAU,IAAM,CACd,MAAMC,EAAeJ,EAAO,GAC1B,mBACCK,GAAY,CACXJ,EAAmBI,CAAO,CAC5B,EACA,CAAE,MAAO,EAAA,CAAK,EAIhB,MAAO,IAAM,CACXD,GAAA,MAAAA,EAAc,KAChB,CACF,EAAG,CAAA,CAAE,EAGL,MAAME,EAAqB,CAAClB,EAO5B,MAAO,CACL,YALkBmB,EAAQ,IACnBpB,EAAqBC,CAAe,EAC1C,CAACA,CAAe,CAAC,EAIlB,mBAAAkB,CAAA,CAEJ"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
/*! Copyright 2025 Adobe
|
|
2
2
|
All Rights Reserved. */
|
|
3
|
-
import{jsx as u,jsxs as E,Fragment as w}from"@dropins/tools/preact-jsx-runtime.js";import{classes as F}from"@dropins/tools/lib.js";import{Checkbox as Q,Input as k,TextArea as K,RadioButton as j,MultiSelect as B,Picker as U,Button as x,Card as Y,InLineAlert as X}from"@dropins/tools/components.js";import"@dropins/tools/event-bus.js";import"../chunks/FormLoader.js";import{useReducer as $,useMemo as y,useEffect as z,useCallback as g}from"@dropins/tools/preact-hooks.js";import{u as J}from"../chunks/useCustomerRolePermissions.js";import{c as W,g as Z,u as ee,a as re}from"../chunks/currencyInfo.js";import{t as ae}from"../chunks/case-converter.js";import{g as oe}from"../chunks/getPurchaseOrderApprovalRule.js";import{Text as le,useText as te}from"@dropins/tools/i18n.js";import{P as ie}from"../chunks/PurchaseOrdersHeader.js";import{F as se}from"../chunks/FormLoader2.js";import"../chunks/fetch-graphql.js";import"@dropins/tools/fetch-graphql.js";import"../chunks/fetch-error.js";import"../chunks/transform-purchase-order-approval-rule.js";const ne=(e,a,l)=>{const r={...e};switch(a){case"status":r.status=l?"ENABLED":"DISABLED";break;case"name":r.name=l;break;case"description":r.description=l;break;case"ruleType":r.condition.attribute=l;break;case"ruleCondition":r.condition.operator=l;break;case"ruleValue":{let t=typeof l=="string"?l.replace(/[^\d]/g,""):String(l);t===""?r.condition.attribute==="NUMBER_OF_SKUS"?r.condition.quantity="":r.condition.amount.value="":r.condition.attribute==="NUMBER_OF_SKUS"?r.condition.quantity=+t:r.condition.amount.value=+t;break}case"ruleConditionCurrency":r.condition.amount.currency=l;break;case"approvers":r.approvers=l;break;case"roleType":r.roleType=l;break;case"appliesTo":r.appliesTo=l;break}return r},L=e=>{const a={};return(!e.name||e.name.trim()==="")&&(a.name="PurchaseOrders.approvalRuleForm.errorsMessages.required"),e.roleType==="specific_roles"&&(!e.appliesTo||e.appliesTo.length===0)&&(a.appliesTo="PurchaseOrders.approvalRuleForm.errorsMessages.approvers"),e.condition.attribute==="NUMBER_OF_SKUS"?e.condition.quantity===""&&(a.ruleValue="PurchaseOrders.approvalRuleForm.errorsMessages.required"):e.condition.amount.value===""&&(a.ruleValue="PurchaseOrders.approvalRuleForm.errorsMessages.required"),(!e.approvers||e.approvers.length===0)&&(a.approvers="PurchaseOrders.approvalRuleForm.errorsMessages.approvers"),a},C=(e,a,l)=>{const r={...a};return Object.keys(e).forEach(t=>{l[t]&&(r[t]=e[t])}),Object.keys(r).forEach(t=>{l[t]&&!e[t]&&delete r[t]}),r},N={GRAND_TOTAL:"ruleTypeGrandTotal",SHIPPING_INCL_TAX:"ruleTypeShippingInclTax",NUMBER_OF_SKUS:"ruleTypeNumberOfSkus"},A={MORE_THAN:"conditionOperatorMoreThan",LESS_THAN:"conditionOperatorLessThan",MORE_THAN_OR_EQUAL_TO:"conditionOperatorMoreThanOrEqualTo",LESS_THAN_OR_EQUAL_TO:"conditionOperatorLessThanOrEqualTo"},q={ALL_USERS:"appliesToAllUsers",SPECIFIC_ROLES:"appliesToSpecificRoles"},pe={status:"ENABLED",name:"",description:"",roleType:"all_users",appliesTo:[],condition:{quantity:"",amount:{currency:"USD",value:""},attribute:"GRAND_TOTAL",operator:"MORE_THAN"},approvers:[]},ue={formValues:pe,isLoading:!1,submitError:null,availableAppliesTo:[],availableRequiresApprovalFrom:[],errors:{},touched:{},currencyCodesList:[{text:"USD",value:"USD"}]},ce={name:!0,appliesTo:!0,ruleValue:!0,approvers:!0},D={REQUIRED:"PurchaseOrders.approvalRuleForm.errorsMessages.required",APPROVERS:"PurchaseOrders.approvalRuleForm.errorsMessages.approvers",FAILED_TO_LOAD:"Failed to load metadata. Please try again.",FAILED_TO_CREATE:"Failed to create approval rule. Please try again."},de=e=>[{text:e[N.GRAND_TOTAL],value:"GRAND_TOTAL"},{text:e[N.SHIPPING_INCL_TAX],value:"SHIPPING_INCL_TAX"},{text:e[N.NUMBER_OF_SKUS],value:"NUMBER_OF_SKUS"}],Te=e=>[{text:e[A.MORE_THAN],value:"MORE_THAN"},{text:e[A.LESS_THAN],value:"LESS_THAN"},{text:e[A.MORE_THAN_OR_EQUAL_TO],value:"MORE_THAN_OR_EQUAL_TO"},{text:e[A.LESS_THAN_OR_EQUAL_TO],value:"LESS_THAN_OR_EQUAL_TO"}],me=e=>[{text:e[q.ALL_USERS],value:"all_users"},{text:e[q.SPECIFIC_ROLES],value:"specific_roles"}],_e="ENABLED",Ee="GRAND_TOTAL",Oe="MORE_THAN",ve="USD",be=0,Re=0,he=e=>Object.keys(N).includes(e),fe=e=>Object.keys(A).includes(e),Ae=e=>{var a,l,r,t,c,s,i,o,O,v;return{status:e.status||_e,name:e.name||"",description:e.description||"",roleType:((a=e.appliesToRoles)==null?void 0:a.length)>0?"specific_roles":"all_users",appliesTo:((l=e.appliesToRoles)==null?void 0:l.map(_=>_.id))||[],condition:{quantity:((r=e.condition)==null?void 0:r.quantity)??be,amount:{currency:((c=(t=e.condition)==null?void 0:t.amount)==null?void 0:c.currency)||ve,value:((i=(s=e.condition)==null?void 0:s.amount)==null?void 0:i.value)??Re},attribute:he((o=e.condition)==null?void 0:o.attribute)?e.condition.attribute:Ee,operator:fe((O=e.condition)==null?void 0:O.operator)?e.condition.operator:Oe},approvers:((v=e.approverRoles)==null?void 0:v.map(_=>_.id))||[]}},V=e=>e!=null&&e!==""&&e!==0;function ye(e){const{roleType:a,appliesTo:l,condition:r,...t}=e,c=a==="all_users"?{appliesTo:[]}:{appliesTo:l};let s={};if(r){const{amount:o,quantity:O,...v}=r,_={...v};V(o==null?void 0:o.value)&&(_.amount=o),V(O)&&(_.quantity=O),s=_}return ae({...t,...c,condition:s})}function Se(e,a){switch(a.type){case"SET_LOADING":return{...e,isLoading:a.payload};case"SET_SUBMIT_ERROR":return{...e,submitError:a.payload};case"SET_FORM_VALUES":return{...e,formValues:a.payload};case"SET_AVAILABLE_APPLIES_TO":return{...e,availableAppliesTo:a.payload};case"SET_AVAILABLE_APPROVERS":return{...e,availableRequiresApprovalFrom:a.payload};case"SET_ERRORS":return{...e,errors:a.payload};case"SET_TOUCHED":return{...e,touched:a.payload};case"SET_CURRENCIES":return{...e,currencyCodesList:a.payload};case"UPDATE_FIELD":{const{key:l,value:r}=a.payload,t=ne(e.formValues,l,r),c={...e.touched,[l]:!0};l==="roleType"&&r==="specific_roles"&&(c.appliesTo=!0);const s=L(t),i=C(s,e.errors,c);return{...e,formValues:t,touched:c,errors:i}}case"TOUCH_FIELD":{const l=a.payload,r={...e.touched,[l]:!0},t=L(e.formValues),c=C(t,e.errors,r);return{...e,touched:r,errors:c}}case"MARK_FIELDS_TOUCHED":{const l={...e.touched,...a.payload},r=L(e.formValues),t=C(r,e.errors,l);return{...e,touched:l,errors:t}}default:return e}}const Le=({t:e,approvalRuleID:a,routeApprovalRulesList:l,onSubmit:r,onChange:t,permissions:c,loadingPermissions:s})=>{const[i,o]=$(Se,ue),O=y(()=>de(e),[e]),v=y(()=>Te(e),[e]),_=y(()=>me(e),[e]);z(()=>{o({type:"SET_LOADING",payload:!0}),W().then(n=>{o({type:"SET_CURRENCIES",payload:n.availableCurrencyCodes})}).catch(n=>{console.error("Failed to fetch currencies:",n)}),Z().then(n=>{const{availableAppliesTo:b,availableRequiresApprovalFrom:R}=n;return o({type:"SET_AVAILABLE_APPLIES_TO",payload:b}),o({type:"SET_AVAILABLE_APPROVERS",payload:R}),a?oe(a):null}).then(n=>{n&&o({type:"SET_FORM_VALUES",payload:Ae(n)}),o({type:"SET_SUBMIT_ERROR",payload:null})}).catch(n=>{console.error("Failed to fetch data:",n),o({type:"SET_SUBMIT_ERROR",payload:D.FAILED_TO_LOAD})}).finally(()=>{o({type:"SET_LOADING",payload:!1})})},[a]);const h=g((n,b)=>{o({type:"UPDATE_FIELD",payload:{key:n,value:b}}),t&&t({...i.formValues,[n]:b})},[t,i.formValues]),m=g(n=>{o({type:"TOUCH_FIELD",payload:n}),t&&t(i.formValues)},[t,i.formValues]),f=g(async()=>{o({type:"SET_LOADING",payload:!0}),o({type:"SET_SUBMIT_ERROR",payload:null}),o({type:"MARK_FIELDS_TOUCHED",payload:ce});const n=L(i.formValues);if(Object.keys(n).length>0){o({type:"SET_ERRORS",payload:n}),o({type:"SET_LOADING",payload:!1});return}const b=ye(i.formValues);try{let R;if(a?R=await ee({uid:a,...b}):R=await re(b),!R.uid){o({type:"SET_SUBMIT_ERROR",payload:D.FAILED_TO_CREATE}),o({type:"SET_LOADING",payload:!1});return}r&&r(i.formValues),l?window.location.href=l():o({type:"SET_LOADING",payload:!1})}catch(R){console.error("Failed to save approval rule:",R),o({type:"SET_SUBMIT_ERROR",payload:D.FAILED_TO_CREATE}),o({type:"SET_LOADING",payload:!1})}},[i.formValues,l,a,r]),T=y(()=>!!(i.isLoading||s||!(c!=null&&c.permissions.viewApprovalRules)&&!(c!=null&&c.permissions.manageApprovalRules)),[i.isLoading,s,c]);return{availableAppliesTo:i.availableAppliesTo,availableRequiresApprovalFrom:i.availableRequiresApprovalFrom,formValues:i.formValues,ruleTypeOptions:O,conditionOperators:v,currencies:i.currencyCodesList,appliesToOptions:_,handleSetFormValues:h,handleSubmit:f,handleFieldTouch:m,errors:i.errors,touched:i.touched,isLoading:i.isLoading,formLoading:T,submitError:i.submitError}},S=({touched:e=!1,error:a,className:l="error-message"})=>!e||!a?null:u("span",{className:l,children:u(le,{id:a})}),Ne=({availableRequiresApprovalFrom:e,conditionOperators:a,availableAppliesTo:l,appliesToOptions:r,ruleTypeOptions:t,currencies:c,formValues:s,errors:i,touched:o,isLoading:O,permissions:v,handleSubmit:_,handleFieldTouch:h,handleSetFormValues:m,routeApprovalRulesList:f,t:T})=>{var b,R;const n=O||!((b=v==null?void 0:v.permissions)!=null&&b.viewApprovalRules);return E("form",{"data-testid":"approval-rule-form",children:[u(Q,{"data-testid":"status-toggle",className:"b2b-purchase-order-approval-rule-form__toggle",disabled:n,name:"status",label:T.formEnabled,checked:s.status==="ENABLED",onChange:p=>{const d=p.target.checked;m("status",d)}}),E("div",{"data-testid":"name-input-container",children:[u(k,{"data-testid":"name-input",className:"b2b-purchase-order-approval-rule-form__name-input",disabled:n,name:"name",floatingLabel:T.inputRuleNameFloatingLabel,placeholder:T.inputRuleNamePlaceholder,value:s.name,error:!!(o.name&&i.name),onChange:p=>{const d=p.target.value;m("name",d)},onBlur:()=>h("name")}),u(S,{touched:o.name,error:i.name})]}),u(K,{"data-testid":"description-textarea",className:"b2b-purchase-order-approval-rule-form__description",disabled:n,name:"description",label:T.textAreaDescriptionLabel,value:s.description,onChange:p=>{const d=p.target.value;m("description",d)}}),E("div",{"data-testid":"applies-to-section",className:"b2b-purchase-order-approval-rule-form__applies-to",children:[u("span",{className:"b2b-purchase-order-approval-rule-form__applies-to-title",children:T.titleAppliesTo}),r.map((p,d)=>u(j,{"data-testid":`applies-to-radio-${d}`,disabled:n,name:"radio-group",value:p.value,label:p.text,checked:s.roleType===p.value,onChange:P=>{const I=P.target.value;m("roleType",I)}},p.value)),s.roleType==="specific_roles"?E("div",{"data-testid":"applies-to-multiselect-container",className:"b2b-purchase-order-approval-rule-form__applies-to-multiselect",children:[u(B,{"data-testid":"applies-to-multiselect",disabled:n,name:"appliesTo",value:[...s.appliesTo],options:l.map(p=>({value:p.id,label:p.name})),error:!!(o.appliesTo&&i.appliesTo),onChange:p=>{m("appliesTo",p),o.appliesTo||h("appliesTo")}}),u(S,{touched:o.appliesTo,error:i.appliesTo})]}):null]}),E("div",{"data-testid":"rule-type-section",className:"b2b-purchase-order-approval-rule-form__rule-type",children:[u("span",{className:"b2b-purchase-order-approval-rule-form__rule-type-title",children:T.titleRuleType}),u(U,{"data-testid":"rule-type-picker",className:"b2b-purchase-order-approval-rule-form__rule-type-picker",disabled:n,name:"ruleType",value:s.condition.attribute,options:t,handleSelect:p=>{const d=p.target.value;m("ruleType",d)}})]}),E("div",{"data-testid":"rule-condition-section",className:"b2b-purchase-order-approval-rule-form__rule-condition",children:[u("span",{className:"b2b-purchase-order-approval-rule-form__rule-condition-title",children:(R=t.find(p=>p.value===s.condition.attribute))==null?void 0:R.text}),E("div",{className:F(["b2b-purchase-order-approval-rule-form__rule-condition-container",["b2b-purchase-order-approval-rule-form__rule-condition-container--error",!!i.ruleValue&&o.ruleValue]]),children:[u(U,{"data-testid":"rule-condition-picker",className:"b2b-purchase-order-approval-rule-form__rule-condition-picker",disabled:n,name:"ruleCondition",value:s.condition.operator,options:a,handleSelect:p=>{const d=p.target.value;m("ruleCondition",d)}}),E("div",{"data-testid":"rule-value-container",children:[u(k,{"data-testid":"rule-value-input",className:"b2b-purchase-order-approval-rule-form__rule-value-input",disabled:n,name:"ruleValue",floatingLabel:s.condition.attribute==="NUMBER_OF_SKUS"?T.inputQuantityFloatingLabel:T.inputAmountFloatingLabel,placeholder:s.condition.attribute==="NUMBER_OF_SKUS"?T.inputQuantityPlaceholder:T.inputAmountPlaceholder,value:s.condition.attribute==="NUMBER_OF_SKUS"?s.condition.quantity:s.condition.amount.value,error:!!(o.ruleValue&&i.ruleValue),onChange:p=>{const d=p.target.value;m("ruleValue",d)},onBlur:()=>h("ruleValue")}),u(S,{touched:o.ruleValue,error:i.ruleValue})]}),s.condition.attribute!=="NUMBER_OF_SKUS"?u(U,{"data-testid":"rule-condition-currency-picker",className:"b2b-purchase-order-approval-rule-form__rule-condition-currency-picker",disabled:n,name:"ruleConditionCurrency",value:s.condition.amount.currency,options:c,handleSelect:p=>{const d=p.target.value;m("ruleConditionCurrency",d)}}):null]})]}),E("div",{"data-testid":"approval-role-section",className:"b2b-purchase-order-approval-rule-form__approval-role",children:[u("span",{className:"b2b-purchase-order-approval-rule-form__approval-role-title",children:T.titleRequiresApprovalRole}),E("div",{className:"b2b-purchase-order-approval-rule-form__approval-role-multiselect",children:[u(B,{"data-testid":"approvers-multiselect",disabled:n,name:"approvers",value:[...s.approvers],options:e.map(p=>({value:p.id,label:p.name})),error:!!(o.approvers&&i.approvers),onChange:p=>{m("approvers",p),o.approvers||h("approvers")}}),u(S,{touched:o.approvers,error:i.approvers})]})]}),E("div",{"data-testid":"form-buttons",className:"b2b-purchase-order-approval-rule-form__buttons",children:[u(x,{"data-testid":"save-button",type:"button",disabled:n,onClick:_,children:T.buttonSave}),u(x,{"data-testid":"cancel-button",disabled:O,variant:"secondary",type:"button",onClick:()=>{window.location.href=(f==null?void 0:f())??""},children:T.buttonCancel})]})]})},Fe=({className:e,approvalRuleID:a,withHeader:l,withWrapper:r,routeApprovalRulesList:t,onSubmit:c,onChange:s})=>{const i=te({headerText:"PurchaseOrders.approvalRuleForm.headerText",titleAppliesTo:"PurchaseOrders.approvalRuleForm.titleAppliesTo",titleRuleType:"PurchaseOrders.approvalRuleForm.titleRuleType",titleRequiresApprovalRole:"PurchaseOrders.approvalRuleForm.titleRequiresApprovalRole",formEnabled:"PurchaseOrders.approvalRuleForm.fields.enabled",formDisabled:"PurchaseOrders.approvalRuleForm.fields.disabled",inputRuleNameFloatingLabel:"PurchaseOrders.approvalRuleForm.fields.inputRuleName.floatingLabel",inputRuleNamePlaceholder:"PurchaseOrders.approvalRuleForm.fields.inputRuleName.placeholder",textAreaDescriptionLabel:"PurchaseOrders.approvalRuleForm.fields.textAreaDescription.label",appliesToAllUsers:"PurchaseOrders.approvalRuleForm.fields.appliesTo.allUsers",appliesToSpecificRoles:"PurchaseOrders.approvalRuleForm.fields.appliesTo.specificRoles",ruleTypeGrandTotal:"PurchaseOrders.approvalRuleForm.fields.ruleTypeOptions.grandTotal",ruleTypeShippingInclTax:"PurchaseOrders.approvalRuleForm.fields.ruleTypeOptions.shippingInclTax",ruleTypeNumberOfSkus:"PurchaseOrders.approvalRuleForm.fields.ruleTypeOptions.numberOfSkus",conditionOperatorMoreThan:"PurchaseOrders.approvalRuleForm.fields.conditionOperators.moreThan",conditionOperatorLessThan:"PurchaseOrders.approvalRuleForm.fields.conditionOperators.lessThan",conditionOperatorMoreThanOrEqualTo:"PurchaseOrders.approvalRuleForm.fields.conditionOperators.moreThanOrEqualTo",conditionOperatorLessThanOrEqualTo:"PurchaseOrders.approvalRuleForm.fields.conditionOperators.lessThanOrEqualTo",inputQuantityFloatingLabel:"PurchaseOrders.approvalRuleForm.fields.inputQuantity.floatingLabel",inputQuantityPlaceholder:"PurchaseOrders.approvalRuleForm.fields.inputQuantity.placeholder",inputAmountFloatingLabel:"PurchaseOrders.approvalRuleForm.fields.inputAmount.floatingLabel",inputAmountPlaceholder:"PurchaseOrders.approvalRuleForm.fields.inputAmount.placeholder",buttonCancel:"PurchaseOrders.approvalRuleForm.fields.buttons.cancel",buttonSave:"PurchaseOrders.approvalRuleForm.fields.buttons.save"}),{permissions:o,loadingPermissions:O}=J(),{availableRequiresApprovalFrom:v,conditionOperators:_,availableAppliesTo:h,appliesToOptions:m,ruleTypeOptions:f,currencies:T,formValues:n,errors:b,touched:R,isLoading:p,submitError:d,formLoading:P,handleSubmit:I,handleFieldTouch:H,handleSetFormValues:G}=Le({t:i,approvalRuleID:a,loadingPermissions:O,permissions:o,routeApprovalRulesList:t,onSubmit:c,onChange:s});if(P)return u(se,{testId:"b2b-purchase-order-approval-rule-form",className:F(["b2b-purchase-order-approval-rule-form",e])});const M=E(w,{children:[!!d&&u(X,{heading:"",description:d}),u(Ne,{availableRequiresApprovalFrom:v,conditionOperators:_,availableAppliesTo:h,appliesToOptions:m,ruleTypeOptions:f,currencies:T,formValues:n,errors:b,touched:R,isLoading:p,handleSubmit:I,handleFieldTouch:H,handleSetFormValues:G,permissions:o,routeApprovalRulesList:t,t:i})]});return E("div",{"data-testid":"b2b-purchase-order-approval-rule-form",className:F(["b2b-purchase-order-approval-rule-form",e]),children:[l?u(ie,{headerText:i.headerText}):null,r?u(Y,{variant:"secondary",children:M}):M]})},je=({withHeader:e=!0,withWrapper:a=!0,className:l,approvalRuleID:r,routeApprovalRulesList:t,onSubmit:c,onChange:s})=>u("div",{"data-testid":"b2b-purchase-order-approval-rule-form-container",className:F(["b2b-purchase-order-approval-rule-form-container",l]),children:u(Fe,{withWrapper:a,withHeader:e,approvalRuleID:r,routeApprovalRulesList:t,onSubmit:c,onChange:s})});export{je as ApprovalRuleForm,je as default};
|
|
3
|
+
import{jsx as u,jsxs as E,Fragment as w}from"@dropins/tools/preact-jsx-runtime.js";import{classes as F}from"@dropins/tools/lib.js";import{Checkbox as Q,Input as k,TextArea as K,RadioButton as j,MultiSelect as B,Picker as U,Button as x,Card as Y,InLineAlert as X}from"@dropins/tools/components.js";import"@dropins/tools/event-bus.js";import"../chunks/FormLoader.js";import{useReducer as $,useMemo as y,useEffect as z,useCallback as g}from"@dropins/tools/preact-hooks.js";import{u as J}from"../chunks/useCustomerRolePermissions.js";import{c as W,g as Z,u as ee,a as re}from"../chunks/currencyInfo.js";import{t as ae}from"../chunks/case-converter.js";import{g as oe}from"../chunks/getPurchaseOrderApprovalRule.js";import{Text as le,useText as te}from"@dropins/tools/i18n.js";import{P as ie}from"../chunks/PurchaseOrdersHeader.js";import{F as se}from"../chunks/FormLoader2.js";import"../chunks/permissions.js";import"../chunks/fetch-graphql.js";import"@dropins/tools/fetch-graphql.js";import"../chunks/fetch-error.js";import"../chunks/transform-purchase-order-approval-rule.js";const ne=(e,a,l)=>{const r={...e};switch(a){case"status":r.status=l?"ENABLED":"DISABLED";break;case"name":r.name=l;break;case"description":r.description=l;break;case"ruleType":r.condition.attribute=l;break;case"ruleCondition":r.condition.operator=l;break;case"ruleValue":{let t=typeof l=="string"?l.replace(/[^\d]/g,""):String(l);t===""?r.condition.attribute==="NUMBER_OF_SKUS"?r.condition.quantity="":r.condition.amount.value="":r.condition.attribute==="NUMBER_OF_SKUS"?r.condition.quantity=+t:r.condition.amount.value=+t;break}case"ruleConditionCurrency":r.condition.amount.currency=l;break;case"approvers":r.approvers=l;break;case"roleType":r.roleType=l;break;case"appliesTo":r.appliesTo=l;break}return r},L=e=>{const a={};return(!e.name||e.name.trim()==="")&&(a.name="PurchaseOrders.approvalRuleForm.errorsMessages.required"),e.roleType==="specific_roles"&&(!e.appliesTo||e.appliesTo.length===0)&&(a.appliesTo="PurchaseOrders.approvalRuleForm.errorsMessages.approvers"),e.condition.attribute==="NUMBER_OF_SKUS"?e.condition.quantity===""&&(a.ruleValue="PurchaseOrders.approvalRuleForm.errorsMessages.required"):e.condition.amount.value===""&&(a.ruleValue="PurchaseOrders.approvalRuleForm.errorsMessages.required"),(!e.approvers||e.approvers.length===0)&&(a.approvers="PurchaseOrders.approvalRuleForm.errorsMessages.approvers"),a},C=(e,a,l)=>{const r={...a};return Object.keys(e).forEach(t=>{l[t]&&(r[t]=e[t])}),Object.keys(r).forEach(t=>{l[t]&&!e[t]&&delete r[t]}),r},N={GRAND_TOTAL:"ruleTypeGrandTotal",SHIPPING_INCL_TAX:"ruleTypeShippingInclTax",NUMBER_OF_SKUS:"ruleTypeNumberOfSkus"},A={MORE_THAN:"conditionOperatorMoreThan",LESS_THAN:"conditionOperatorLessThan",MORE_THAN_OR_EQUAL_TO:"conditionOperatorMoreThanOrEqualTo",LESS_THAN_OR_EQUAL_TO:"conditionOperatorLessThanOrEqualTo"},q={ALL_USERS:"appliesToAllUsers",SPECIFIC_ROLES:"appliesToSpecificRoles"},pe={status:"ENABLED",name:"",description:"",roleType:"all_users",appliesTo:[],condition:{quantity:"",amount:{currency:"USD",value:""},attribute:"GRAND_TOTAL",operator:"MORE_THAN"},approvers:[]},ue={formValues:pe,isLoading:!1,submitError:null,availableAppliesTo:[],availableRequiresApprovalFrom:[],errors:{},touched:{},currencyCodesList:[{text:"USD",value:"USD"}]},ce={name:!0,appliesTo:!0,ruleValue:!0,approvers:!0},D={REQUIRED:"PurchaseOrders.approvalRuleForm.errorsMessages.required",APPROVERS:"PurchaseOrders.approvalRuleForm.errorsMessages.approvers",FAILED_TO_LOAD:"Failed to load metadata. Please try again.",FAILED_TO_CREATE:"Failed to create approval rule. Please try again."},de=e=>[{text:e[N.GRAND_TOTAL],value:"GRAND_TOTAL"},{text:e[N.SHIPPING_INCL_TAX],value:"SHIPPING_INCL_TAX"},{text:e[N.NUMBER_OF_SKUS],value:"NUMBER_OF_SKUS"}],Te=e=>[{text:e[A.MORE_THAN],value:"MORE_THAN"},{text:e[A.LESS_THAN],value:"LESS_THAN"},{text:e[A.MORE_THAN_OR_EQUAL_TO],value:"MORE_THAN_OR_EQUAL_TO"},{text:e[A.LESS_THAN_OR_EQUAL_TO],value:"LESS_THAN_OR_EQUAL_TO"}],me=e=>[{text:e[q.ALL_USERS],value:"all_users"},{text:e[q.SPECIFIC_ROLES],value:"specific_roles"}],_e="ENABLED",Ee="GRAND_TOTAL",Oe="MORE_THAN",ve="USD",be=0,Re=0,he=e=>Object.keys(N).includes(e),fe=e=>Object.keys(A).includes(e),Ae=e=>{var a,l,r,t,c,s,i,o,O,v;return{status:e.status||_e,name:e.name||"",description:e.description||"",roleType:((a=e.appliesToRoles)==null?void 0:a.length)>0?"specific_roles":"all_users",appliesTo:((l=e.appliesToRoles)==null?void 0:l.map(_=>_.id))||[],condition:{quantity:((r=e.condition)==null?void 0:r.quantity)??be,amount:{currency:((c=(t=e.condition)==null?void 0:t.amount)==null?void 0:c.currency)||ve,value:((i=(s=e.condition)==null?void 0:s.amount)==null?void 0:i.value)??Re},attribute:he((o=e.condition)==null?void 0:o.attribute)?e.condition.attribute:Ee,operator:fe((O=e.condition)==null?void 0:O.operator)?e.condition.operator:Oe},approvers:((v=e.approverRoles)==null?void 0:v.map(_=>_.id))||[]}},V=e=>e!=null&&e!==""&&e!==0;function ye(e){const{roleType:a,appliesTo:l,condition:r,...t}=e,c=a==="all_users"?{appliesTo:[]}:{appliesTo:l};let s={};if(r){const{amount:o,quantity:O,...v}=r,_={...v};V(o==null?void 0:o.value)&&(_.amount=o),V(O)&&(_.quantity=O),s=_}return ae({...t,...c,condition:s})}function Se(e,a){switch(a.type){case"SET_LOADING":return{...e,isLoading:a.payload};case"SET_SUBMIT_ERROR":return{...e,submitError:a.payload};case"SET_FORM_VALUES":return{...e,formValues:a.payload};case"SET_AVAILABLE_APPLIES_TO":return{...e,availableAppliesTo:a.payload};case"SET_AVAILABLE_APPROVERS":return{...e,availableRequiresApprovalFrom:a.payload};case"SET_ERRORS":return{...e,errors:a.payload};case"SET_TOUCHED":return{...e,touched:a.payload};case"SET_CURRENCIES":return{...e,currencyCodesList:a.payload};case"UPDATE_FIELD":{const{key:l,value:r}=a.payload,t=ne(e.formValues,l,r),c={...e.touched,[l]:!0};l==="roleType"&&r==="specific_roles"&&(c.appliesTo=!0);const s=L(t),i=C(s,e.errors,c);return{...e,formValues:t,touched:c,errors:i}}case"TOUCH_FIELD":{const l=a.payload,r={...e.touched,[l]:!0},t=L(e.formValues),c=C(t,e.errors,r);return{...e,touched:r,errors:c}}case"MARK_FIELDS_TOUCHED":{const l={...e.touched,...a.payload},r=L(e.formValues),t=C(r,e.errors,l);return{...e,touched:l,errors:t}}default:return e}}const Le=({t:e,approvalRuleID:a,routeApprovalRulesList:l,onSubmit:r,onChange:t,permissions:c,loadingPermissions:s})=>{const[i,o]=$(Se,ue),O=y(()=>de(e),[e]),v=y(()=>Te(e),[e]),_=y(()=>me(e),[e]);z(()=>{o({type:"SET_LOADING",payload:!0}),W().then(n=>{o({type:"SET_CURRENCIES",payload:n.availableCurrencyCodes})}).catch(n=>{console.error("Failed to fetch currencies:",n)}),Z().then(n=>{const{availableAppliesTo:b,availableRequiresApprovalFrom:R}=n;return o({type:"SET_AVAILABLE_APPLIES_TO",payload:b}),o({type:"SET_AVAILABLE_APPROVERS",payload:R}),a?oe(a):null}).then(n=>{n&&o({type:"SET_FORM_VALUES",payload:Ae(n)}),o({type:"SET_SUBMIT_ERROR",payload:null})}).catch(n=>{console.error("Failed to fetch data:",n),o({type:"SET_SUBMIT_ERROR",payload:D.FAILED_TO_LOAD})}).finally(()=>{o({type:"SET_LOADING",payload:!1})})},[a]);const h=g((n,b)=>{o({type:"UPDATE_FIELD",payload:{key:n,value:b}}),t&&t({...i.formValues,[n]:b})},[t,i.formValues]),m=g(n=>{o({type:"TOUCH_FIELD",payload:n}),t&&t(i.formValues)},[t,i.formValues]),f=g(async()=>{o({type:"SET_LOADING",payload:!0}),o({type:"SET_SUBMIT_ERROR",payload:null}),o({type:"MARK_FIELDS_TOUCHED",payload:ce});const n=L(i.formValues);if(Object.keys(n).length>0){o({type:"SET_ERRORS",payload:n}),o({type:"SET_LOADING",payload:!1});return}const b=ye(i.formValues);try{let R;if(a?R=await ee({uid:a,...b}):R=await re(b),!R.uid){o({type:"SET_SUBMIT_ERROR",payload:D.FAILED_TO_CREATE}),o({type:"SET_LOADING",payload:!1});return}r&&r(i.formValues),l?window.location.href=l():o({type:"SET_LOADING",payload:!1})}catch(R){console.error("Failed to save approval rule:",R),o({type:"SET_SUBMIT_ERROR",payload:D.FAILED_TO_CREATE}),o({type:"SET_LOADING",payload:!1})}},[i.formValues,l,a,r]),T=y(()=>!!(i.isLoading||s||!(c!=null&&c.permissions.viewApprovalRules)&&!(c!=null&&c.permissions.manageApprovalRules)),[i.isLoading,s,c]);return{availableAppliesTo:i.availableAppliesTo,availableRequiresApprovalFrom:i.availableRequiresApprovalFrom,formValues:i.formValues,ruleTypeOptions:O,conditionOperators:v,currencies:i.currencyCodesList,appliesToOptions:_,handleSetFormValues:h,handleSubmit:f,handleFieldTouch:m,errors:i.errors,touched:i.touched,isLoading:i.isLoading,formLoading:T,submitError:i.submitError}},S=({touched:e=!1,error:a,className:l="error-message"})=>!e||!a?null:u("span",{className:l,children:u(le,{id:a})}),Ne=({availableRequiresApprovalFrom:e,conditionOperators:a,availableAppliesTo:l,appliesToOptions:r,ruleTypeOptions:t,currencies:c,formValues:s,errors:i,touched:o,isLoading:O,permissions:v,handleSubmit:_,handleFieldTouch:h,handleSetFormValues:m,routeApprovalRulesList:f,t:T})=>{var b,R;const n=O||!((b=v==null?void 0:v.permissions)!=null&&b.viewApprovalRules);return E("form",{"data-testid":"approval-rule-form",children:[u(Q,{"data-testid":"status-toggle",className:"b2b-purchase-order-approval-rule-form__toggle",disabled:n,name:"status",label:T.formEnabled,checked:s.status==="ENABLED",onChange:p=>{const d=p.target.checked;m("status",d)}}),E("div",{"data-testid":"name-input-container",children:[u(k,{"data-testid":"name-input",className:"b2b-purchase-order-approval-rule-form__name-input",disabled:n,name:"name",floatingLabel:T.inputRuleNameFloatingLabel,placeholder:T.inputRuleNamePlaceholder,value:s.name,error:!!(o.name&&i.name),onChange:p=>{const d=p.target.value;m("name",d)},onBlur:()=>h("name")}),u(S,{touched:o.name,error:i.name})]}),u(K,{"data-testid":"description-textarea",className:"b2b-purchase-order-approval-rule-form__description",disabled:n,name:"description",label:T.textAreaDescriptionLabel,value:s.description,onChange:p=>{const d=p.target.value;m("description",d)}}),E("div",{"data-testid":"applies-to-section",className:"b2b-purchase-order-approval-rule-form__applies-to",children:[u("span",{className:"b2b-purchase-order-approval-rule-form__applies-to-title",children:T.titleAppliesTo}),r.map((p,d)=>u(j,{"data-testid":`applies-to-radio-${d}`,disabled:n,name:"radio-group",value:p.value,label:p.text,checked:s.roleType===p.value,onChange:P=>{const I=P.target.value;m("roleType",I)}},p.value)),s.roleType==="specific_roles"?E("div",{"data-testid":"applies-to-multiselect-container",className:"b2b-purchase-order-approval-rule-form__applies-to-multiselect",children:[u(B,{"data-testid":"applies-to-multiselect",disabled:n,name:"appliesTo",value:[...s.appliesTo],options:l.map(p=>({value:p.id,label:p.name})),error:!!(o.appliesTo&&i.appliesTo),onChange:p=>{m("appliesTo",p),o.appliesTo||h("appliesTo")}}),u(S,{touched:o.appliesTo,error:i.appliesTo})]}):null]}),E("div",{"data-testid":"rule-type-section",className:"b2b-purchase-order-approval-rule-form__rule-type",children:[u("span",{className:"b2b-purchase-order-approval-rule-form__rule-type-title",children:T.titleRuleType}),u(U,{"data-testid":"rule-type-picker",className:"b2b-purchase-order-approval-rule-form__rule-type-picker",disabled:n,name:"ruleType",value:s.condition.attribute,options:t,handleSelect:p=>{const d=p.target.value;m("ruleType",d)}})]}),E("div",{"data-testid":"rule-condition-section",className:"b2b-purchase-order-approval-rule-form__rule-condition",children:[u("span",{className:"b2b-purchase-order-approval-rule-form__rule-condition-title",children:(R=t.find(p=>p.value===s.condition.attribute))==null?void 0:R.text}),E("div",{className:F(["b2b-purchase-order-approval-rule-form__rule-condition-container",["b2b-purchase-order-approval-rule-form__rule-condition-container--error",!!i.ruleValue&&o.ruleValue]]),children:[u(U,{"data-testid":"rule-condition-picker",className:"b2b-purchase-order-approval-rule-form__rule-condition-picker",disabled:n,name:"ruleCondition",value:s.condition.operator,options:a,handleSelect:p=>{const d=p.target.value;m("ruleCondition",d)}}),E("div",{"data-testid":"rule-value-container",children:[u(k,{"data-testid":"rule-value-input",className:"b2b-purchase-order-approval-rule-form__rule-value-input",disabled:n,name:"ruleValue",floatingLabel:s.condition.attribute==="NUMBER_OF_SKUS"?T.inputQuantityFloatingLabel:T.inputAmountFloatingLabel,placeholder:s.condition.attribute==="NUMBER_OF_SKUS"?T.inputQuantityPlaceholder:T.inputAmountPlaceholder,value:s.condition.attribute==="NUMBER_OF_SKUS"?s.condition.quantity:s.condition.amount.value,error:!!(o.ruleValue&&i.ruleValue),onChange:p=>{const d=p.target.value;m("ruleValue",d)},onBlur:()=>h("ruleValue")}),u(S,{touched:o.ruleValue,error:i.ruleValue})]}),s.condition.attribute!=="NUMBER_OF_SKUS"?u(U,{"data-testid":"rule-condition-currency-picker",className:"b2b-purchase-order-approval-rule-form__rule-condition-currency-picker",disabled:n,name:"ruleConditionCurrency",value:s.condition.amount.currency,options:c,handleSelect:p=>{const d=p.target.value;m("ruleConditionCurrency",d)}}):null]})]}),E("div",{"data-testid":"approval-role-section",className:"b2b-purchase-order-approval-rule-form__approval-role",children:[u("span",{className:"b2b-purchase-order-approval-rule-form__approval-role-title",children:T.titleRequiresApprovalRole}),E("div",{className:"b2b-purchase-order-approval-rule-form__approval-role-multiselect",children:[u(B,{"data-testid":"approvers-multiselect",disabled:n,name:"approvers",value:[...s.approvers],options:e.map(p=>({value:p.id,label:p.name})),error:!!(o.approvers&&i.approvers),onChange:p=>{m("approvers",p),o.approvers||h("approvers")}}),u(S,{touched:o.approvers,error:i.approvers})]})]}),E("div",{"data-testid":"form-buttons",className:"b2b-purchase-order-approval-rule-form__buttons",children:[u(x,{"data-testid":"save-button",type:"button",disabled:n,onClick:_,children:T.buttonSave}),u(x,{"data-testid":"cancel-button",disabled:O,variant:"secondary",type:"button",onClick:()=>{window.location.href=(f==null?void 0:f())??""},children:T.buttonCancel})]})]})},Fe=({className:e,approvalRuleID:a,withHeader:l,withWrapper:r,routeApprovalRulesList:t,onSubmit:c,onChange:s})=>{const i=te({headerText:"PurchaseOrders.approvalRuleForm.headerText",titleAppliesTo:"PurchaseOrders.approvalRuleForm.titleAppliesTo",titleRuleType:"PurchaseOrders.approvalRuleForm.titleRuleType",titleRequiresApprovalRole:"PurchaseOrders.approvalRuleForm.titleRequiresApprovalRole",formEnabled:"PurchaseOrders.approvalRuleForm.fields.enabled",formDisabled:"PurchaseOrders.approvalRuleForm.fields.disabled",inputRuleNameFloatingLabel:"PurchaseOrders.approvalRuleForm.fields.inputRuleName.floatingLabel",inputRuleNamePlaceholder:"PurchaseOrders.approvalRuleForm.fields.inputRuleName.placeholder",textAreaDescriptionLabel:"PurchaseOrders.approvalRuleForm.fields.textAreaDescription.label",appliesToAllUsers:"PurchaseOrders.approvalRuleForm.fields.appliesTo.allUsers",appliesToSpecificRoles:"PurchaseOrders.approvalRuleForm.fields.appliesTo.specificRoles",ruleTypeGrandTotal:"PurchaseOrders.approvalRuleForm.fields.ruleTypeOptions.grandTotal",ruleTypeShippingInclTax:"PurchaseOrders.approvalRuleForm.fields.ruleTypeOptions.shippingInclTax",ruleTypeNumberOfSkus:"PurchaseOrders.approvalRuleForm.fields.ruleTypeOptions.numberOfSkus",conditionOperatorMoreThan:"PurchaseOrders.approvalRuleForm.fields.conditionOperators.moreThan",conditionOperatorLessThan:"PurchaseOrders.approvalRuleForm.fields.conditionOperators.lessThan",conditionOperatorMoreThanOrEqualTo:"PurchaseOrders.approvalRuleForm.fields.conditionOperators.moreThanOrEqualTo",conditionOperatorLessThanOrEqualTo:"PurchaseOrders.approvalRuleForm.fields.conditionOperators.lessThanOrEqualTo",inputQuantityFloatingLabel:"PurchaseOrders.approvalRuleForm.fields.inputQuantity.floatingLabel",inputQuantityPlaceholder:"PurchaseOrders.approvalRuleForm.fields.inputQuantity.placeholder",inputAmountFloatingLabel:"PurchaseOrders.approvalRuleForm.fields.inputAmount.floatingLabel",inputAmountPlaceholder:"PurchaseOrders.approvalRuleForm.fields.inputAmount.placeholder",buttonCancel:"PurchaseOrders.approvalRuleForm.fields.buttons.cancel",buttonSave:"PurchaseOrders.approvalRuleForm.fields.buttons.save"}),{permissions:o,loadingPermissions:O}=J(),{availableRequiresApprovalFrom:v,conditionOperators:_,availableAppliesTo:h,appliesToOptions:m,ruleTypeOptions:f,currencies:T,formValues:n,errors:b,touched:R,isLoading:p,submitError:d,formLoading:P,handleSubmit:I,handleFieldTouch:H,handleSetFormValues:G}=Le({t:i,approvalRuleID:a,loadingPermissions:O,permissions:o,routeApprovalRulesList:t,onSubmit:c,onChange:s});if(P)return u(se,{testId:"b2b-purchase-order-approval-rule-form",className:F(["b2b-purchase-order-approval-rule-form",e])});const M=E(w,{children:[!!d&&u(X,{heading:"",description:d}),u(Ne,{availableRequiresApprovalFrom:v,conditionOperators:_,availableAppliesTo:h,appliesToOptions:m,ruleTypeOptions:f,currencies:T,formValues:n,errors:b,touched:R,isLoading:p,handleSubmit:I,handleFieldTouch:H,handleSetFormValues:G,permissions:o,routeApprovalRulesList:t,t:i})]});return E("div",{"data-testid":"b2b-purchase-order-approval-rule-form",className:F(["b2b-purchase-order-approval-rule-form",e]),children:[l?u(ie,{headerText:i.headerText}):null,r?u(Y,{variant:"secondary",children:M}):M]})},Ye=({withHeader:e=!0,withWrapper:a=!0,className:l,approvalRuleID:r,routeApprovalRulesList:t,onSubmit:c,onChange:s})=>u("div",{"data-testid":"b2b-purchase-order-approval-rule-form-container",className:F(["b2b-purchase-order-approval-rule-form-container",l]),children:u(Fe,{withWrapper:a,withHeader:e,approvalRuleID:r,routeApprovalRulesList:t,onSubmit:c,onChange:s})});export{Ye as ApprovalRuleForm,Ye as default};
|
|
4
4
|
//# sourceMappingURL=ApprovalRuleForm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ApprovalRuleForm.js","sources":["/@dropins/storefront-purchase-order/src/lib/updateFormFieldValue.ts","/@dropins/storefront-purchase-order/src/lib/formValidation.ts","/@dropins/storefront-purchase-order/src/configs/approvalRuleForm.config.ts","/@dropins/storefront-purchase-order/src/lib/transformToFormValues.ts","/@dropins/storefront-purchase-order/src/lib/cleanAndDeep.ts","/@dropins/storefront-purchase-order/src/hooks/useApprovalRuleForm.tsx","/@dropins/storefront-purchase-order/src/components/ApprovalRuleForm/blocks/ErrorMessage.tsx","/@dropins/storefront-purchase-order/src/components/ApprovalRuleForm/blocks/Form.tsx","/@dropins/storefront-purchase-order/src/components/ApprovalRuleForm/ApprovalRuleForm.tsx","/@dropins/storefront-purchase-order/src/containers/ApprovalRuleForm/ApprovalRuleForm.tsx"],"sourcesContent":["import {\n ConditionAttributeType,\n ConditionOperatorType,\n FormValuesParams,\n} from '../types/hooks';\n\nexport const updateFormFieldValue = (\n formValues: FormValuesParams,\n key: string,\n value: string | number | boolean | string[]\n): FormValuesParams => {\n const newFormValues = { ...formValues };\n\n switch (key) {\n case 'status':\n newFormValues.status = value ? 'ENABLED' : 'DISABLED';\n break;\n case 'name':\n newFormValues.name = value as string;\n break;\n case 'description':\n newFormValues.description = value as string;\n break;\n case 'ruleType':\n newFormValues.condition.attribute = value as ConditionAttributeType;\n break;\n case 'ruleCondition':\n newFormValues.condition.operator = value as ConditionOperatorType;\n break;\n case 'ruleValue': {\n let numericValue =\n typeof value === 'string' ? value.replace(/[^\\d]/g, '') : String(value);\n\n if (numericValue === '') {\n if (newFormValues.condition.attribute === 'NUMBER_OF_SKUS') {\n newFormValues.condition.quantity = '';\n } else {\n newFormValues.condition.amount.value = '';\n }\n } else if (newFormValues.condition.attribute === 'NUMBER_OF_SKUS') {\n newFormValues.condition.quantity = +numericValue;\n } else {\n newFormValues.condition.amount.value = +numericValue;\n }\n break;\n }\n case 'ruleConditionCurrency':\n newFormValues.condition.amount.currency = value as string;\n break;\n case 'approvers':\n newFormValues.approvers = value as string[];\n break;\n case 'roleType':\n newFormValues.roleType = value as string;\n break;\n case 'appliesTo':\n newFormValues.appliesTo = value as string[];\n break;\n default:\n break;\n }\n\n return newFormValues;\n};\n","import {\n FormValuesParams,\n ValidationApprovalFormError,\n} from '@/b2b-purchase-order/types/hooks';\n\n/**\n * Validates all form fields and returns validation errors\n * This function contains the core validation logic for the approval rule form\n */\nexport const validateFormFields = (\n values: FormValuesParams\n): ValidationApprovalFormError => {\n const errors: ValidationApprovalFormError = {};\n\n // Validate rule name (required)\n if (!values.name || values.name.trim() === '') {\n errors.name = 'PurchaseOrders.approvalRuleForm.errorsMessages.required';\n }\n\n // Validate appliesTo when specific roles are selected\n if (\n values.roleType === 'specific_roles' &&\n (!values.appliesTo || values.appliesTo.length === 0)\n ) {\n errors.appliesTo =\n 'PurchaseOrders.approvalRuleForm.errorsMessages.approvers';\n }\n\n // Validate rule value based on condition type\n if (values.condition.attribute === 'NUMBER_OF_SKUS') {\n if (values.condition.quantity === '') {\n errors.ruleValue =\n 'PurchaseOrders.approvalRuleForm.errorsMessages.required';\n }\n } else if (values.condition.amount.value === '') {\n errors.ruleValue =\n 'PurchaseOrders.approvalRuleForm.errorsMessages.required';\n }\n\n // Validate approvers (required)\n if (!values.approvers || values.approvers.length === 0) {\n errors.approvers =\n 'PurchaseOrders.approvalRuleForm.errorsMessages.approvers';\n }\n\n return errors;\n};\n\n/**\n * Returns only the errors for fields that have been touched by the user\n * This prevents showing validation errors for fields the user hasn't interacted with yet\n */\nexport const getVisibleErrors = (\n allErrors: ValidationApprovalFormError,\n touchedFields: { [key: string]: boolean }\n): ValidationApprovalFormError => {\n const visibleErrors: ValidationApprovalFormError = {};\n\n // Only include errors for touched fields\n Object.keys(allErrors).forEach((errorKey) => {\n if (touchedFields[errorKey]) {\n visibleErrors[errorKey] = allErrors[errorKey];\n }\n });\n\n return visibleErrors;\n};\n\n/**\n * Updates errors based on new validation results and touched fields\n * This is used for incremental validation as the user fills out the form\n */\nexport const updateValidationErrors = (\n newErrors: ValidationApprovalFormError,\n currentErrors: ValidationApprovalFormError,\n touchedFields: { [key: string]: boolean }\n): ValidationApprovalFormError => {\n const updatedErrors: ValidationApprovalFormError = { ...currentErrors };\n\n // Add new errors for touched fields\n Object.keys(newErrors).forEach((errorKey) => {\n if (touchedFields[errorKey]) {\n updatedErrors[errorKey] = newErrors[errorKey];\n }\n });\n\n // Remove errors for fields that became valid\n Object.keys(updatedErrors).forEach((errorKey) => {\n if (touchedFields[errorKey] && !newErrors[errorKey]) {\n delete updatedErrors[errorKey];\n }\n });\n\n return updatedErrors;\n};\n","import { FormValuesParams, FormState } from '@/b2b-purchase-order/types/hooks';\n\nexport const RULE_TYPE_OPTIONS_KEYS = {\n GRAND_TOTAL: 'ruleTypeGrandTotal',\n SHIPPING_INCL_TAX: 'ruleTypeShippingInclTax',\n NUMBER_OF_SKUS: 'ruleTypeNumberOfSkus',\n} as const;\n\nexport const CONDITION_OPERATORS_KEYS = {\n MORE_THAN: 'conditionOperatorMoreThan',\n LESS_THAN: 'conditionOperatorLessThan',\n MORE_THAN_OR_EQUAL_TO: 'conditionOperatorMoreThanOrEqualTo',\n LESS_THAN_OR_EQUAL_TO: 'conditionOperatorLessThanOrEqualTo',\n} as const;\n\nexport const APPLIES_TO_OPTIONS_KEYS = {\n ALL_USERS: 'appliesToAllUsers',\n SPECIFIC_ROLES: 'appliesToSpecificRoles',\n} as const;\n\n/**\n * Initial values for the approval rule form\n * Used when creating a new rule\n */\nexport const INITIAL_FORM_VALUES: FormValuesParams = {\n status: 'ENABLED',\n name: '',\n description: '',\n roleType: 'all_users',\n appliesTo: [],\n condition: {\n quantity: '',\n amount: {\n currency: 'USD',\n value: '',\n },\n attribute: 'GRAND_TOTAL',\n operator: 'MORE_THAN',\n },\n approvers: [],\n};\n\n/**\n * Initial state for the form reducer\n * Includes form values, loading states, and validation\n */\nexport const INITIAL_FORM_STATE: FormState = {\n formValues: INITIAL_FORM_VALUES,\n isLoading: false,\n submitError: null,\n availableAppliesTo: [],\n availableRequiresApprovalFrom: [],\n errors: {},\n touched: {},\n currencyCodesList: [{ text: 'USD', value: 'USD' }],\n};\n\n/**\n * Fields that must be touched (validated) on form submission\n */\nexport const REQUIRED_FIELDS_ON_SUBMIT = {\n name: true,\n appliesTo: true,\n ruleValue: true,\n approvers: true,\n} as const;\n\n/**\n * Translation keys for validation error messages\n */\nexport const VALIDATION_ERROR_KEYS = {\n REQUIRED: 'PurchaseOrders.approvalRuleForm.errorsMessages.required',\n APPROVERS: 'PurchaseOrders.approvalRuleForm.errorsMessages.approvers',\n FAILED_TO_LOAD: 'Failed to load metadata. Please try again.',\n FAILED_TO_CREATE: 'Failed to create approval rule. Please try again.',\n} as const;\n\n/**\n * Creates rule type options for the dropdown\n * @param t - Translation function\n */\n/**\n * Creates rule type options for the dropdown\n * @param t - Translation function\n */\nexport const createRuleTypeOptions = (t: Record<string, string>) => [\n {\n text: t[RULE_TYPE_OPTIONS_KEYS.GRAND_TOTAL],\n value: 'GRAND_TOTAL',\n },\n {\n text: t[RULE_TYPE_OPTIONS_KEYS.SHIPPING_INCL_TAX],\n value: 'SHIPPING_INCL_TAX',\n },\n {\n text: t[RULE_TYPE_OPTIONS_KEYS.NUMBER_OF_SKUS],\n value: 'NUMBER_OF_SKUS',\n },\n];\n\n/**\n * Creates condition operator options for the dropdown\n * @param t - Translation function\n */\nexport const createConditionOperators = (t: Record<string, string>) => [\n { text: t[CONDITION_OPERATORS_KEYS.MORE_THAN], value: 'MORE_THAN' },\n {\n text: t[CONDITION_OPERATORS_KEYS.LESS_THAN],\n value: 'LESS_THAN',\n },\n {\n text: t[CONDITION_OPERATORS_KEYS.MORE_THAN_OR_EQUAL_TO],\n value: 'MORE_THAN_OR_EQUAL_TO',\n },\n {\n text: t[CONDITION_OPERATORS_KEYS.LESS_THAN_OR_EQUAL_TO],\n value: 'LESS_THAN_OR_EQUAL_TO',\n },\n];\n\n/**\n * Creates \"applies to\" options for the dropdown\n * @param t - Translation function\n */\nexport const createAppliesToOptions = (t: Record<string, string>) => [\n { text: t[APPLIES_TO_OPTIONS_KEYS.ALL_USERS], value: 'all_users' },\n {\n text: t[APPLIES_TO_OPTIONS_KEYS.SPECIFIC_ROLES],\n value: 'specific_roles',\n },\n];\n","import { PurchaseOrderApprovalRuleModel } from '@/b2b-purchase-order/data/models';\nimport {\n ConditionAttributeType,\n ConditionOperatorType,\n FormValuesParams,\n} from '@/b2b-purchase-order/types/hooks';\nimport {\n RULE_TYPE_OPTIONS_KEYS,\n CONDITION_OPERATORS_KEYS,\n} from '@/b2b-purchase-order/configs/approvalRuleForm.config';\n\n// Default values for form fields\nconst DEFAULT_STATUS = 'ENABLED';\nconst DEFAULT_ATTRIBUTE: ConditionAttributeType = 'GRAND_TOTAL';\nconst DEFAULT_OPERATOR: ConditionOperatorType = 'MORE_THAN';\nconst DEFAULT_CURRENCY = 'USD';\nconst DEFAULT_QUANTITY = 0;\nconst DEFAULT_AMOUNT_VALUE = 0;\n\n/**\n * Checks if the given attribute is a valid condition attribute type\n */\nconst isValidAttribute = (\n attribute: any\n): attribute is ConditionAttributeType => {\n return Object.keys(RULE_TYPE_OPTIONS_KEYS).includes(attribute);\n};\n\n/**\n * Checks if the given operator is a valid condition operator type\n */\nconst isValidOperator = (operator: any): operator is ConditionOperatorType => {\n return Object.keys(CONDITION_OPERATORS_KEYS).includes(operator);\n};\n\n/**\n * Transforms API response data to form values format\n * Handles all the necessary data conversions and provides safe defaults\n */\nexport const transformToFormValues = (\n data: PurchaseOrderApprovalRuleModel\n): FormValuesParams => {\n return {\n status: (data.status as 'ENABLED' | 'DISABLED') || DEFAULT_STATUS,\n name: data.name || '',\n description: data.description || '',\n roleType: data.appliesToRoles?.length > 0 ? 'specific_roles' : 'all_users',\n appliesTo: data.appliesToRoles?.map((role) => role.id) || [],\n condition: {\n quantity: data.condition?.quantity ?? DEFAULT_QUANTITY,\n amount: {\n currency: data.condition?.amount?.currency || DEFAULT_CURRENCY,\n value: data.condition?.amount?.value ?? DEFAULT_AMOUNT_VALUE,\n },\n attribute: isValidAttribute(data.condition?.attribute)\n ? data.condition.attribute\n : DEFAULT_ATTRIBUTE,\n operator: isValidOperator(data.condition?.operator)\n ? data.condition.operator\n : DEFAULT_OPERATOR,\n },\n approvers: data.approverRoles?.map((role) => role.id) || [],\n };\n};\n","import { toSnakeCase } from './case-converter';\n\n/**\n * Checks if a value should be considered as \"has value\" for form submission\n * Empty strings and null/undefined are considered as no value\n * Zero (0) is considered as no value to match existing behavior\n */\nconst hasValue = (value: any): boolean => {\n return value !== null && value !== undefined && value !== '' && value !== 0;\n};\n\n/**\n * Cleans form values and converts to snake_case for API submission\n * - Handles role type logic (all_users vs specific_roles)\n * - Removes empty condition values (amount or quantity)\n * - Converts camelCase keys to snake_case\n */\nexport function cleanAndDeep(formValues: Record<string, any>): any {\n const { roleType, appliesTo, condition, ...restAll } = formValues;\n\n // Handle role type logic: all_users means empty appliesTo array\n const roleConfig =\n roleType === 'all_users' ? { appliesTo: [] } : { appliesTo };\n\n // Build condition config with only non-empty values\n let conditionConfig = {};\n\n if (condition) {\n const { amount, quantity, ...restCondition } = condition;\n\n const newCondition = { ...restCondition };\n\n // Only include amount if it has a valid value\n if (hasValue(amount?.value)) {\n newCondition.amount = amount;\n }\n\n // Only include quantity if it has a valid value\n if (hasValue(quantity)) {\n newCondition.quantity = quantity;\n }\n\n conditionConfig = newCondition;\n }\n\n // Convert to snake_case for API\n const result = toSnakeCase({\n ...restAll,\n ...roleConfig,\n condition: conditionConfig,\n });\n\n return result;\n}\n","/*******************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { useCallback, useEffect, useMemo, useReducer } from 'preact/hooks';\nimport {\n FormAction,\n FormState,\n UseApprovalRuleFormProps,\n UseApprovalRuleFormReturn,\n} from '@/b2b-purchase-order/types/hooks';\n\nimport {\n currencyInfo,\n getPurchaseOrderApprovalRule,\n createPurchaseOrderApprovalRule,\n updatePurchaseOrderApprovalRule,\n getPurchaseOrderApprovalRuleMetadata,\n} from '@/b2b-purchase-order/api';\nimport {\n updateFormFieldValue,\n validateFormFields,\n updateValidationErrors,\n transformToFormValues,\n cleanAndDeep,\n} from '@/b2b-purchase-order/lib';\nimport {\n INITIAL_FORM_STATE,\n REQUIRED_FIELDS_ON_SUBMIT,\n VALIDATION_ERROR_KEYS,\n createRuleTypeOptions,\n createConditionOperators,\n createAppliesToOptions,\n} from '@/b2b-purchase-order/configs';\n\n// Reducer function - handles all state updates in one place\nfunction formReducer(state: FormState, action: FormAction): FormState {\n switch (action.type) {\n case 'SET_LOADING':\n return { ...state, isLoading: action.payload };\n\n case 'SET_SUBMIT_ERROR':\n return { ...state, submitError: action.payload };\n\n case 'SET_FORM_VALUES':\n return { ...state, formValues: action.payload };\n\n case 'SET_AVAILABLE_APPLIES_TO':\n return { ...state, availableAppliesTo: action.payload };\n\n case 'SET_AVAILABLE_APPROVERS':\n return { ...state, availableRequiresApprovalFrom: action.payload };\n\n case 'SET_ERRORS':\n return { ...state, errors: action.payload };\n\n case 'SET_TOUCHED':\n return { ...state, touched: action.payload };\n\n case 'SET_CURRENCIES':\n return { ...state, currencyCodesList: action.payload };\n\n case 'UPDATE_FIELD': {\n const { key, value } = action.payload;\n const newFormValues = updateFormFieldValue(state.formValues, key, value);\n\n // Build new touched state\n const newTouched = { ...state.touched, [key]: true };\n\n // Special case: when roleType changes to specific_roles, mark appliesTo as touched\n if (key === 'roleType' && value === 'specific_roles') {\n newTouched.appliesTo = true;\n }\n\n // Validate and get updated errors\n const allErrors = validateFormFields(newFormValues);\n const newErrors = updateValidationErrors(\n allErrors,\n state.errors,\n newTouched\n );\n\n return {\n ...state,\n formValues: newFormValues,\n touched: newTouched,\n errors: newErrors,\n };\n }\n\n case 'TOUCH_FIELD': {\n const fieldName = action.payload;\n const newTouched = { ...state.touched, [fieldName]: true };\n\n // Validate and update errors for touched field\n const allErrors = validateFormFields(state.formValues);\n const newErrors = updateValidationErrors(\n allErrors,\n state.errors,\n newTouched\n );\n\n return {\n ...state,\n touched: newTouched,\n errors: newErrors,\n };\n }\n\n case 'MARK_FIELDS_TOUCHED': {\n const newTouched = { ...state.touched, ...action.payload };\n const allErrors = validateFormFields(state.formValues);\n const newErrors = updateValidationErrors(\n allErrors,\n state.errors,\n newTouched\n );\n\n return {\n ...state,\n touched: newTouched,\n errors: newErrors,\n };\n }\n\n default:\n return state;\n }\n}\n\nexport const useApprovalRuleForm = ({\n t,\n approvalRuleID,\n routeApprovalRulesList,\n onSubmit,\n onChange,\n permissions,\n loadingPermissions,\n}: UseApprovalRuleFormProps): UseApprovalRuleFormReturn => {\n const [state, dispatch] = useReducer(formReducer, INITIAL_FORM_STATE);\n\n // Memoize options to prevent re-creation on each render\n const ruleTypeOptions = useMemo(() => createRuleTypeOptions(t), [t]);\n const conditionOperators = useMemo(() => createConditionOperators(t), [t]);\n const appliesToOptions = useMemo(() => createAppliesToOptions(t), [t]);\n\n // Load initial data (currencies and approval rule metadata)\n useEffect(() => {\n dispatch({ type: 'SET_LOADING', payload: true });\n\n // Load currency codes\n currencyInfo()\n .then((data) => {\n dispatch({\n type: 'SET_CURRENCIES',\n payload: data.availableCurrencyCodes,\n });\n })\n .catch((error) => {\n console.error('Failed to fetch currencies:', error);\n });\n\n // Load metadata (available roles) first - always needed\n getPurchaseOrderApprovalRuleMetadata()\n .then((data) => {\n const { availableAppliesTo, availableRequiresApprovalFrom } = data;\n dispatch({\n type: 'SET_AVAILABLE_APPLIES_TO',\n payload: availableAppliesTo,\n });\n dispatch({\n type: 'SET_AVAILABLE_APPROVERS',\n payload: availableRequiresApprovalFrom,\n });\n\n // Then load approval rule data if in edit mode\n if (approvalRuleID) {\n return getPurchaseOrderApprovalRule(approvalRuleID);\n }\n return null;\n })\n .then((ruleData) => {\n if (ruleData) {\n // Edit mode: set form values from existing rule\n dispatch({\n type: 'SET_FORM_VALUES',\n payload: transformToFormValues(ruleData),\n });\n }\n dispatch({ type: 'SET_SUBMIT_ERROR', payload: null });\n })\n .catch((error) => {\n console.error('Failed to fetch data:', error);\n dispatch({\n type: 'SET_SUBMIT_ERROR',\n payload: VALIDATION_ERROR_KEYS.FAILED_TO_LOAD,\n });\n })\n .finally(() => {\n dispatch({ type: 'SET_LOADING', payload: false });\n });\n }, [approvalRuleID]);\n\n // Handler for field value changes\n const handleSetFormValues = useCallback(\n (key: string, value: string | number | boolean | string[]) => {\n dispatch({ type: 'UPDATE_FIELD', payload: { key, value } });\n if (onChange) {\n onChange({ ...state.formValues, [key]: value });\n }\n },\n [onChange, state.formValues]\n );\n\n // Handler for field touch (blur)\n const handleFieldTouch = useCallback(\n (fieldName: string) => {\n dispatch({ type: 'TOUCH_FIELD', payload: fieldName });\n if (onChange) {\n onChange(state.formValues);\n }\n },\n [onChange, state.formValues]\n );\n\n // Handler for form submission\n const handleSubmit = useCallback(async () => {\n dispatch({ type: 'SET_LOADING', payload: true });\n dispatch({ type: 'SET_SUBMIT_ERROR', payload: null });\n\n // Mark all required fields as touched to show all errors\n dispatch({\n type: 'MARK_FIELDS_TOUCHED',\n payload: REQUIRED_FIELDS_ON_SUBMIT,\n });\n\n // Validate form\n const validationErrors = validateFormFields(state.formValues);\n\n if (Object.keys(validationErrors).length > 0) {\n dispatch({ type: 'SET_ERRORS', payload: validationErrors });\n dispatch({ type: 'SET_LOADING', payload: false });\n return;\n }\n\n // Clean and prepare data for API\n const cleanedData = cleanAndDeep(state.formValues);\n\n // Submit to API (create or update based on approvalRuleID)\n try {\n let data;\n\n if (approvalRuleID) {\n // Update existing approval rule\n data = await updatePurchaseOrderApprovalRule({\n uid: approvalRuleID,\n ...cleanedData,\n });\n } else {\n // Create new approval rule\n data = await createPurchaseOrderApprovalRule(cleanedData);\n }\n\n if (!data.uid) {\n dispatch({\n type: 'SET_SUBMIT_ERROR',\n payload: VALIDATION_ERROR_KEYS.FAILED_TO_CREATE,\n });\n dispatch({ type: 'SET_LOADING', payload: false });\n return;\n }\n\n // Success - call onSubmit callback if provided\n if (onSubmit) {\n onSubmit(state.formValues as any);\n }\n\n if (routeApprovalRulesList) {\n window.location.href = routeApprovalRulesList();\n } else {\n dispatch({ type: 'SET_LOADING', payload: false });\n }\n } catch (error) {\n console.error('Failed to save approval rule:', error);\n dispatch({\n type: 'SET_SUBMIT_ERROR',\n payload: VALIDATION_ERROR_KEYS.FAILED_TO_CREATE,\n });\n dispatch({ type: 'SET_LOADING', payload: false });\n }\n }, [state.formValues, routeApprovalRulesList, approvalRuleID, onSubmit]);\n\n // Memoized: true if form is loading or permissions not loaded or missing required permission\n const formLoading = useMemo(() => {\n if (state.isLoading || loadingPermissions) return true;\n\n if (\n !permissions?.permissions.viewApprovalRules &&\n !permissions?.permissions.manageApprovalRules\n ) {\n return true;\n }\n\n return false;\n }, [state.isLoading, loadingPermissions, permissions]);\n\n return {\n availableAppliesTo: state.availableAppliesTo,\n availableRequiresApprovalFrom: state.availableRequiresApprovalFrom,\n formValues: state.formValues,\n ruleTypeOptions,\n conditionOperators,\n currencies: state.currencyCodesList,\n appliesToOptions,\n handleSetFormValues,\n handleSubmit,\n handleFieldTouch,\n errors: state.errors,\n touched: state.touched,\n isLoading: state.isLoading,\n formLoading,\n submitError: state.submitError,\n };\n};\n","/*******************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { Text } from '@adobe-commerce/elsie/i18n';\nimport { FunctionComponent } from 'preact';\n\nconst ErrorMessage: FunctionComponent<{\n touched?: boolean;\n error?: string;\n className?: string;\n}> = ({ touched = false, error, className = 'error-message' }) => {\n if (!touched || !error) {\n return null;\n }\n\n return (\n <span className={className}>\n <Text id={error} />\n </span>\n );\n};\n\nexport default ErrorMessage;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport {\n Input,\n Picker,\n TextArea,\n RadioButton,\n Checkbox,\n MultiSelect,\n Button,\n} from '@adobe-commerce/elsie/components';\nimport { ErrorMessage } from '@/b2b-purchase-order/components/ApprovalRuleForm/blocks';\nimport { CustomerRolePermissionsModel } from '@/b2b-purchase-order/data/models';\nimport { classes } from '@adobe-commerce/elsie/lib';\n\nconst Form = ({\n availableRequiresApprovalFrom,\n conditionOperators,\n availableAppliesTo,\n appliesToOptions,\n ruleTypeOptions,\n currencies,\n formValues,\n errors,\n touched,\n isLoading,\n permissions,\n handleSubmit,\n handleFieldTouch,\n handleSetFormValues,\n routeApprovalRulesList,\n t,\n}: {\n availableRequiresApprovalFrom: { id: string; name: string }[];\n conditionOperators: { value: string; text: string }[];\n availableAppliesTo: { id: string; name: string }[];\n appliesToOptions: { value: string; text: string }[];\n ruleTypeOptions: { value: string; text: string }[];\n currencies: { value: string; text: string }[];\n formValues: any;\n errors: Record<string, string>;\n touched: Record<string, boolean>;\n isLoading: boolean;\n permissions?: CustomerRolePermissionsModel;\n handleSubmit: () => void;\n handleFieldTouch: (field: string) => void;\n handleSetFormValues: (field: string, value: any) => void;\n routeApprovalRulesList?: () => string;\n t: Record<string, string>;\n}) => {\n const disabledInputField =\n isLoading || !permissions?.permissions?.viewApprovalRules;\n\n return (\n <form data-testid=\"approval-rule-form\">\n <Checkbox\n data-testid=\"status-toggle\"\n className=\"b2b-purchase-order-approval-rule-form__toggle\"\n disabled={disabledInputField}\n name=\"status\"\n label={t.formEnabled}\n checked={formValues.status === 'ENABLED'}\n onChange={(event) => {\n const value = (event.target as HTMLInputElement).checked;\n\n handleSetFormValues('status', value);\n }}\n />\n <div data-testid=\"name-input-container\">\n <Input\n data-testid=\"name-input\"\n className=\"b2b-purchase-order-approval-rule-form__name-input\"\n disabled={disabledInputField}\n name={'name'}\n floatingLabel={t.inputRuleNameFloatingLabel}\n placeholder={t.inputRuleNamePlaceholder}\n value={formValues.name}\n error={!!(touched.name && errors.name)}\n onChange={(event: Event) => {\n const value = (event.target as HTMLInputElement).value;\n\n handleSetFormValues('name', value);\n }}\n onBlur={() => handleFieldTouch('name')}\n />\n <ErrorMessage touched={touched.name} error={errors.name} />\n </div>\n <TextArea\n data-testid=\"description-textarea\"\n className=\"b2b-purchase-order-approval-rule-form__description\"\n disabled={disabledInputField}\n name=\"description\"\n label={t.textAreaDescriptionLabel}\n value={formValues.description}\n onChange={(event) => {\n const value = (event.target as HTMLTextAreaElement).value;\n handleSetFormValues('description', value);\n }}\n />\n <div\n data-testid=\"applies-to-section\"\n className=\"b2b-purchase-order-approval-rule-form__applies-to\"\n >\n <span className=\"b2b-purchase-order-approval-rule-form__applies-to-title\">\n {t.titleAppliesTo}\n </span>\n {appliesToOptions.map((option, index) => {\n return (\n <RadioButton\n key={option.value}\n data-testid={`applies-to-radio-${index}`}\n disabled={disabledInputField}\n name=\"radio-group\"\n value={option.value}\n label={option.text}\n checked={formValues.roleType === option.value}\n onChange={(event) => {\n const value = (event.target as HTMLInputElement).value;\n handleSetFormValues('roleType', value);\n }}\n />\n );\n })}\n {formValues.roleType === 'specific_roles' ? (\n <div\n data-testid=\"applies-to-multiselect-container\"\n className=\"b2b-purchase-order-approval-rule-form__applies-to-multiselect\"\n >\n <MultiSelect\n data-testid=\"applies-to-multiselect\"\n disabled={disabledInputField}\n name=\"appliesTo\"\n value={[...formValues.appliesTo]}\n options={availableAppliesTo.map((option) => ({\n value: option.id,\n label: option.name,\n }))}\n error={!!(touched.appliesTo && errors.appliesTo)}\n onChange={(value) => {\n handleSetFormValues('appliesTo', value as string[]);\n if (!touched.appliesTo) handleFieldTouch('appliesTo');\n }}\n />\n <ErrorMessage\n touched={touched.appliesTo}\n error={errors.appliesTo}\n />\n </div>\n ) : null}\n </div>\n <div\n data-testid=\"rule-type-section\"\n className=\"b2b-purchase-order-approval-rule-form__rule-type\"\n >\n <span className=\"b2b-purchase-order-approval-rule-form__rule-type-title\">\n {t.titleRuleType}\n </span>\n <Picker\n data-testid=\"rule-type-picker\"\n className=\"b2b-purchase-order-approval-rule-form__rule-type-picker\"\n disabled={disabledInputField}\n name=\"ruleType\"\n value={formValues.condition.attribute}\n options={ruleTypeOptions}\n handleSelect={(event) => {\n const value = (event.target as HTMLSelectElement).value;\n handleSetFormValues('ruleType', value);\n }}\n />\n </div>\n <div\n data-testid=\"rule-condition-section\"\n className=\"b2b-purchase-order-approval-rule-form__rule-condition\"\n >\n <span className=\"b2b-purchase-order-approval-rule-form__rule-condition-title\">\n {\n ruleTypeOptions.find(\n (item) => item.value === formValues.condition.attribute\n )?.text\n }\n </span>\n <div\n className={classes([\n 'b2b-purchase-order-approval-rule-form__rule-condition-container',\n [\n 'b2b-purchase-order-approval-rule-form__rule-condition-container--error',\n !!errors.ruleValue && touched.ruleValue,\n ],\n ])}\n >\n <Picker\n data-testid=\"rule-condition-picker\"\n className=\"b2b-purchase-order-approval-rule-form__rule-condition-picker\"\n disabled={disabledInputField}\n name=\"ruleCondition\"\n value={formValues.condition.operator}\n options={conditionOperators}\n handleSelect={(event) => {\n const value = (event.target as HTMLSelectElement).value;\n handleSetFormValues('ruleCondition', value);\n }}\n />\n <div data-testid=\"rule-value-container\">\n <Input\n data-testid=\"rule-value-input\"\n className=\"b2b-purchase-order-approval-rule-form__rule-value-input\"\n disabled={disabledInputField}\n name=\"ruleValue\"\n floatingLabel={\n formValues.condition.attribute === 'NUMBER_OF_SKUS'\n ? t.inputQuantityFloatingLabel\n : t.inputAmountFloatingLabel\n }\n placeholder={\n formValues.condition.attribute === 'NUMBER_OF_SKUS'\n ? t.inputQuantityPlaceholder\n : t.inputAmountPlaceholder\n }\n value={\n formValues.condition.attribute === 'NUMBER_OF_SKUS'\n ? formValues.condition.quantity\n : formValues.condition.amount.value\n }\n error={!!(touched.ruleValue && errors.ruleValue)}\n onChange={(event) => {\n const value = (event.target as HTMLInputElement).value;\n handleSetFormValues('ruleValue', value);\n }}\n onBlur={() => handleFieldTouch('ruleValue')}\n />\n <ErrorMessage\n touched={touched.ruleValue}\n error={errors.ruleValue}\n />\n </div>\n {formValues.condition.attribute !== 'NUMBER_OF_SKUS' ? (\n <Picker\n data-testid=\"rule-condition-currency-picker\"\n className=\"b2b-purchase-order-approval-rule-form__rule-condition-currency-picker\"\n disabled={disabledInputField}\n name=\"ruleConditionCurrency\"\n value={formValues.condition.amount.currency}\n options={currencies}\n handleSelect={(event) => {\n const value = (event.target as HTMLSelectElement).value;\n handleSetFormValues('ruleConditionCurrency', value);\n }}\n />\n ) : null}\n </div>\n </div>\n <div\n data-testid=\"approval-role-section\"\n className=\"b2b-purchase-order-approval-rule-form__approval-role\"\n >\n <span className=\"b2b-purchase-order-approval-rule-form__approval-role-title\">\n {t.titleRequiresApprovalRole}\n </span>\n <div className=\"b2b-purchase-order-approval-rule-form__approval-role-multiselect\">\n <MultiSelect\n data-testid=\"approvers-multiselect\"\n disabled={disabledInputField}\n name=\"approvers\"\n value={[...formValues.approvers]}\n options={availableRequiresApprovalFrom.map((option) => ({\n value: option.id,\n label: option.name,\n }))}\n error={!!(touched.approvers && errors.approvers)}\n onChange={(value) => {\n handleSetFormValues('approvers', value as string[]);\n if (!touched.approvers) handleFieldTouch('approvers');\n }}\n />\n <ErrorMessage touched={touched.approvers} error={errors.approvers} />\n </div>\n </div>\n <div\n data-testid=\"form-buttons\"\n className=\"b2b-purchase-order-approval-rule-form__buttons\"\n >\n <Button\n data-testid=\"save-button\"\n type=\"button\"\n disabled={disabledInputField}\n onClick={handleSubmit}\n >\n {t.buttonSave}\n </Button>\n\n <Button\n data-testid=\"cancel-button\"\n disabled={isLoading}\n variant=\"secondary\"\n type=\"button\"\n onClick={() => {\n window.location.href = routeApprovalRulesList?.() ?? '';\n }}\n >\n {t.buttonCancel}\n </Button>\n </div>\n </form>\n );\n};\n\nexport default Form;\n","/*******************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { FunctionComponent } from 'preact';\nimport { classes } from '@adobe-commerce/elsie/lib';\nimport { Card, InLineAlert } from '@adobe-commerce/elsie/components';\nimport {\n useApprovalRuleForm,\n useCustomerRolePermissions,\n} from '@/b2b-purchase-order/hooks';\nimport { ApprovalRuleFormProps } from '@/b2b-purchase-order/types/components';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { Form } from '@/b2b-purchase-order/components/ApprovalRuleForm/blocks';\nimport '@/b2b-purchase-order/components/ApprovalRuleForm/ApprovalRuleForm.css';\nimport {\n PurchaseOrdersHeader,\n FormLoader,\n} from '@/b2b-purchase-order/components';\n\nexport const ApprovalRuleForm: FunctionComponent<ApprovalRuleFormProps> = ({\n className,\n approvalRuleID,\n withHeader,\n withWrapper,\n routeApprovalRulesList,\n onSubmit,\n onChange,\n}) => {\n const t = useText({\n headerText: 'PurchaseOrders.approvalRuleForm.headerText',\n titleAppliesTo: 'PurchaseOrders.approvalRuleForm.titleAppliesTo',\n titleRuleType: 'PurchaseOrders.approvalRuleForm.titleRuleType',\n titleRequiresApprovalRole:\n 'PurchaseOrders.approvalRuleForm.titleRequiresApprovalRole',\n formEnabled: 'PurchaseOrders.approvalRuleForm.fields.enabled',\n formDisabled: 'PurchaseOrders.approvalRuleForm.fields.disabled',\n inputRuleNameFloatingLabel:\n 'PurchaseOrders.approvalRuleForm.fields.inputRuleName.floatingLabel',\n inputRuleNamePlaceholder:\n 'PurchaseOrders.approvalRuleForm.fields.inputRuleName.placeholder',\n textAreaDescriptionLabel:\n 'PurchaseOrders.approvalRuleForm.fields.textAreaDescription.label',\n appliesToAllUsers:\n 'PurchaseOrders.approvalRuleForm.fields.appliesTo.allUsers',\n appliesToSpecificRoles:\n 'PurchaseOrders.approvalRuleForm.fields.appliesTo.specificRoles',\n ruleTypeGrandTotal:\n 'PurchaseOrders.approvalRuleForm.fields.ruleTypeOptions.grandTotal',\n ruleTypeShippingInclTax:\n 'PurchaseOrders.approvalRuleForm.fields.ruleTypeOptions.shippingInclTax',\n ruleTypeNumberOfSkus:\n 'PurchaseOrders.approvalRuleForm.fields.ruleTypeOptions.numberOfSkus',\n conditionOperatorMoreThan:\n 'PurchaseOrders.approvalRuleForm.fields.conditionOperators.moreThan',\n conditionOperatorLessThan:\n 'PurchaseOrders.approvalRuleForm.fields.conditionOperators.lessThan',\n conditionOperatorMoreThanOrEqualTo:\n 'PurchaseOrders.approvalRuleForm.fields.conditionOperators.moreThanOrEqualTo',\n conditionOperatorLessThanOrEqualTo:\n 'PurchaseOrders.approvalRuleForm.fields.conditionOperators.lessThanOrEqualTo',\n inputQuantityFloatingLabel:\n 'PurchaseOrders.approvalRuleForm.fields.inputQuantity.floatingLabel',\n inputQuantityPlaceholder:\n 'PurchaseOrders.approvalRuleForm.fields.inputQuantity.placeholder',\n inputAmountFloatingLabel:\n 'PurchaseOrders.approvalRuleForm.fields.inputAmount.floatingLabel',\n inputAmountPlaceholder:\n 'PurchaseOrders.approvalRuleForm.fields.inputAmount.placeholder',\n buttonCancel: 'PurchaseOrders.approvalRuleForm.fields.buttons.cancel',\n buttonSave: 'PurchaseOrders.approvalRuleForm.fields.buttons.save',\n });\n const { permissions, loadingPermissions } = useCustomerRolePermissions();\n const {\n availableRequiresApprovalFrom,\n conditionOperators,\n availableAppliesTo,\n appliesToOptions,\n ruleTypeOptions,\n currencies,\n formValues,\n errors,\n touched,\n isLoading,\n submitError,\n formLoading,\n handleSubmit,\n handleFieldTouch,\n handleSetFormValues,\n } = useApprovalRuleForm({\n t,\n approvalRuleID,\n loadingPermissions,\n permissions,\n routeApprovalRulesList,\n onSubmit,\n onChange,\n });\n\n if (formLoading) {\n return (\n <FormLoader\n testId=\"b2b-purchase-order-approval-rule-form\"\n className={classes([\n 'b2b-purchase-order-approval-rule-form',\n className,\n ])}\n />\n );\n }\n\n const renderContentForm = (\n <>\n {!!submitError && <InLineAlert heading=\"\" description={submitError} />}\n <Form\n availableRequiresApprovalFrom={availableRequiresApprovalFrom}\n conditionOperators={conditionOperators}\n availableAppliesTo={availableAppliesTo}\n appliesToOptions={appliesToOptions}\n ruleTypeOptions={ruleTypeOptions}\n currencies={currencies}\n formValues={formValues}\n errors={errors}\n touched={touched}\n isLoading={isLoading}\n handleSubmit={handleSubmit}\n handleFieldTouch={handleFieldTouch}\n handleSetFormValues={handleSetFormValues}\n permissions={permissions}\n routeApprovalRulesList={routeApprovalRulesList}\n t={t}\n />\n </>\n );\n\n return (\n <div\n data-testid=\"b2b-purchase-order-approval-rule-form\"\n className={classes(['b2b-purchase-order-approval-rule-form', className])}\n >\n {withHeader ? <PurchaseOrdersHeader headerText={t.headerText} /> : null}\n {withWrapper ? (\n <Card variant=\"secondary\">{renderContentForm}</Card>\n ) : (\n renderContentForm\n )}\n </div>\n );\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { classes, Container } from '@adobe-commerce/elsie/lib';\nimport { ApprovalRuleFormProps } from '@/b2b-purchase-order/types/containers';\nimport { ApprovalRuleForm as ApprovalRuleFormComponent } from '@/b2b-purchase-order/components';\n\nexport const ApprovalRuleForm: Container<ApprovalRuleFormProps> = ({\n withHeader = true,\n withWrapper = true,\n className,\n approvalRuleID,\n routeApprovalRulesList,\n onSubmit,\n onChange,\n}) => {\n return (\n <div\n data-testid=\"b2b-purchase-order-approval-rule-form-container\"\n className={classes([\n 'b2b-purchase-order-approval-rule-form-container',\n className,\n ])}\n >\n <ApprovalRuleFormComponent\n withWrapper={withWrapper}\n withHeader={withHeader}\n approvalRuleID={approvalRuleID}\n routeApprovalRulesList={routeApprovalRulesList}\n onSubmit={onSubmit}\n onChange={onChange}\n />\n </div>\n );\n};\n"],"names":["updateFormFieldValue","formValues","key","value","newFormValues","numericValue","validateFormFields","values","errors","updateValidationErrors","newErrors","currentErrors","touchedFields","updatedErrors","errorKey","RULE_TYPE_OPTIONS_KEYS","CONDITION_OPERATORS_KEYS","APPLIES_TO_OPTIONS_KEYS","INITIAL_FORM_VALUES","INITIAL_FORM_STATE","REQUIRED_FIELDS_ON_SUBMIT","VALIDATION_ERROR_KEYS","createRuleTypeOptions","t","createConditionOperators","createAppliesToOptions","DEFAULT_STATUS","DEFAULT_ATTRIBUTE","DEFAULT_OPERATOR","DEFAULT_CURRENCY","DEFAULT_QUANTITY","DEFAULT_AMOUNT_VALUE","isValidAttribute","attribute","isValidOperator","operator","transformToFormValues","data","_a","_b","role","_c","_e","_d","_g","_f","_h","_i","_j","hasValue","cleanAndDeep","roleType","appliesTo","condition","restAll","roleConfig","conditionConfig","amount","quantity","restCondition","newCondition","toSnakeCase","formReducer","state","action","newTouched","allErrors","fieldName","useApprovalRuleForm","approvalRuleID","routeApprovalRulesList","onSubmit","onChange","permissions","loadingPermissions","dispatch","useReducer","ruleTypeOptions","useMemo","conditionOperators","appliesToOptions","useEffect","currencyInfo","error","getPurchaseOrderApprovalRuleMetadata","availableAppliesTo","availableRequiresApprovalFrom","getPurchaseOrderApprovalRule","ruleData","handleSetFormValues","useCallback","handleFieldTouch","handleSubmit","validationErrors","cleanedData","updatePurchaseOrderApprovalRule","createPurchaseOrderApprovalRule","formLoading","ErrorMessage","touched","className","Text","Form","currencies","isLoading","disabledInputField","jsxs","jsx","Checkbox","event","Input","TextArea","option","index","RadioButton","MultiSelect","Picker","item","classes","Button","ApprovalRuleForm","withHeader","withWrapper","useText","useCustomerRolePermissions","submitError","FormLoader","renderContentForm","Fragment","InLineAlert","PurchaseOrdersHeader","Card","ApprovalRuleFormComponent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ApprovalRuleForm.js","sources":["/@dropins/storefront-purchase-order/src/lib/updateFormFieldValue.ts","/@dropins/storefront-purchase-order/src/lib/formValidation.ts","/@dropins/storefront-purchase-order/src/configs/approvalRuleForm.config.ts","/@dropins/storefront-purchase-order/src/lib/transformToFormValues.ts","/@dropins/storefront-purchase-order/src/lib/cleanAndDeep.ts","/@dropins/storefront-purchase-order/src/hooks/useApprovalRuleForm.tsx","/@dropins/storefront-purchase-order/src/components/ApprovalRuleForm/blocks/ErrorMessage.tsx","/@dropins/storefront-purchase-order/src/components/ApprovalRuleForm/blocks/Form.tsx","/@dropins/storefront-purchase-order/src/components/ApprovalRuleForm/ApprovalRuleForm.tsx","/@dropins/storefront-purchase-order/src/containers/ApprovalRuleForm/ApprovalRuleForm.tsx"],"sourcesContent":["import {\n ConditionAttributeType,\n ConditionOperatorType,\n FormValuesParams,\n} from '../types/hooks';\n\nexport const updateFormFieldValue = (\n formValues: FormValuesParams,\n key: string,\n value: string | number | boolean | string[]\n): FormValuesParams => {\n const newFormValues = { ...formValues };\n\n switch (key) {\n case 'status':\n newFormValues.status = value ? 'ENABLED' : 'DISABLED';\n break;\n case 'name':\n newFormValues.name = value as string;\n break;\n case 'description':\n newFormValues.description = value as string;\n break;\n case 'ruleType':\n newFormValues.condition.attribute = value as ConditionAttributeType;\n break;\n case 'ruleCondition':\n newFormValues.condition.operator = value as ConditionOperatorType;\n break;\n case 'ruleValue': {\n let numericValue =\n typeof value === 'string' ? value.replace(/[^\\d]/g, '') : String(value);\n\n if (numericValue === '') {\n if (newFormValues.condition.attribute === 'NUMBER_OF_SKUS') {\n newFormValues.condition.quantity = '';\n } else {\n newFormValues.condition.amount.value = '';\n }\n } else if (newFormValues.condition.attribute === 'NUMBER_OF_SKUS') {\n newFormValues.condition.quantity = +numericValue;\n } else {\n newFormValues.condition.amount.value = +numericValue;\n }\n break;\n }\n case 'ruleConditionCurrency':\n newFormValues.condition.amount.currency = value as string;\n break;\n case 'approvers':\n newFormValues.approvers = value as string[];\n break;\n case 'roleType':\n newFormValues.roleType = value as string;\n break;\n case 'appliesTo':\n newFormValues.appliesTo = value as string[];\n break;\n default:\n break;\n }\n\n return newFormValues;\n};\n","import {\n FormValuesParams,\n ValidationApprovalFormError,\n} from '@/b2b-purchase-order/types/hooks';\n\n/**\n * Validates all form fields and returns validation errors\n * This function contains the core validation logic for the approval rule form\n */\nexport const validateFormFields = (\n values: FormValuesParams\n): ValidationApprovalFormError => {\n const errors: ValidationApprovalFormError = {};\n\n // Validate rule name (required)\n if (!values.name || values.name.trim() === '') {\n errors.name = 'PurchaseOrders.approvalRuleForm.errorsMessages.required';\n }\n\n // Validate appliesTo when specific roles are selected\n if (\n values.roleType === 'specific_roles' &&\n (!values.appliesTo || values.appliesTo.length === 0)\n ) {\n errors.appliesTo =\n 'PurchaseOrders.approvalRuleForm.errorsMessages.approvers';\n }\n\n // Validate rule value based on condition type\n if (values.condition.attribute === 'NUMBER_OF_SKUS') {\n if (values.condition.quantity === '') {\n errors.ruleValue =\n 'PurchaseOrders.approvalRuleForm.errorsMessages.required';\n }\n } else if (values.condition.amount.value === '') {\n errors.ruleValue =\n 'PurchaseOrders.approvalRuleForm.errorsMessages.required';\n }\n\n // Validate approvers (required)\n if (!values.approvers || values.approvers.length === 0) {\n errors.approvers =\n 'PurchaseOrders.approvalRuleForm.errorsMessages.approvers';\n }\n\n return errors;\n};\n\n/**\n * Returns only the errors for fields that have been touched by the user\n * This prevents showing validation errors for fields the user hasn't interacted with yet\n */\nexport const getVisibleErrors = (\n allErrors: ValidationApprovalFormError,\n touchedFields: { [key: string]: boolean }\n): ValidationApprovalFormError => {\n const visibleErrors: ValidationApprovalFormError = {};\n\n // Only include errors for touched fields\n Object.keys(allErrors).forEach((errorKey) => {\n if (touchedFields[errorKey]) {\n visibleErrors[errorKey] = allErrors[errorKey];\n }\n });\n\n return visibleErrors;\n};\n\n/**\n * Updates errors based on new validation results and touched fields\n * This is used for incremental validation as the user fills out the form\n */\nexport const updateValidationErrors = (\n newErrors: ValidationApprovalFormError,\n currentErrors: ValidationApprovalFormError,\n touchedFields: { [key: string]: boolean }\n): ValidationApprovalFormError => {\n const updatedErrors: ValidationApprovalFormError = { ...currentErrors };\n\n // Add new errors for touched fields\n Object.keys(newErrors).forEach((errorKey) => {\n if (touchedFields[errorKey]) {\n updatedErrors[errorKey] = newErrors[errorKey];\n }\n });\n\n // Remove errors for fields that became valid\n Object.keys(updatedErrors).forEach((errorKey) => {\n if (touchedFields[errorKey] && !newErrors[errorKey]) {\n delete updatedErrors[errorKey];\n }\n });\n\n return updatedErrors;\n};\n","import { FormValuesParams, FormState } from '@/b2b-purchase-order/types/hooks';\n\nexport const RULE_TYPE_OPTIONS_KEYS = {\n GRAND_TOTAL: 'ruleTypeGrandTotal',\n SHIPPING_INCL_TAX: 'ruleTypeShippingInclTax',\n NUMBER_OF_SKUS: 'ruleTypeNumberOfSkus',\n} as const;\n\nexport const CONDITION_OPERATORS_KEYS = {\n MORE_THAN: 'conditionOperatorMoreThan',\n LESS_THAN: 'conditionOperatorLessThan',\n MORE_THAN_OR_EQUAL_TO: 'conditionOperatorMoreThanOrEqualTo',\n LESS_THAN_OR_EQUAL_TO: 'conditionOperatorLessThanOrEqualTo',\n} as const;\n\nexport const APPLIES_TO_OPTIONS_KEYS = {\n ALL_USERS: 'appliesToAllUsers',\n SPECIFIC_ROLES: 'appliesToSpecificRoles',\n} as const;\n\n/**\n * Initial values for the approval rule form\n * Used when creating a new rule\n */\nexport const INITIAL_FORM_VALUES: FormValuesParams = {\n status: 'ENABLED',\n name: '',\n description: '',\n roleType: 'all_users',\n appliesTo: [],\n condition: {\n quantity: '',\n amount: {\n currency: 'USD',\n value: '',\n },\n attribute: 'GRAND_TOTAL',\n operator: 'MORE_THAN',\n },\n approvers: [],\n};\n\n/**\n * Initial state for the form reducer\n * Includes form values, loading states, and validation\n */\nexport const INITIAL_FORM_STATE: FormState = {\n formValues: INITIAL_FORM_VALUES,\n isLoading: false,\n submitError: null,\n availableAppliesTo: [],\n availableRequiresApprovalFrom: [],\n errors: {},\n touched: {},\n currencyCodesList: [{ text: 'USD', value: 'USD' }],\n};\n\n/**\n * Fields that must be touched (validated) on form submission\n */\nexport const REQUIRED_FIELDS_ON_SUBMIT = {\n name: true,\n appliesTo: true,\n ruleValue: true,\n approvers: true,\n} as const;\n\n/**\n * Translation keys for validation error messages\n */\nexport const VALIDATION_ERROR_KEYS = {\n REQUIRED: 'PurchaseOrders.approvalRuleForm.errorsMessages.required',\n APPROVERS: 'PurchaseOrders.approvalRuleForm.errorsMessages.approvers',\n FAILED_TO_LOAD: 'Failed to load metadata. Please try again.',\n FAILED_TO_CREATE: 'Failed to create approval rule. Please try again.',\n} as const;\n\n/**\n * Creates rule type options for the dropdown\n * @param t - Translation function\n */\n/**\n * Creates rule type options for the dropdown\n * @param t - Translation function\n */\nexport const createRuleTypeOptions = (t: Record<string, string>) => [\n {\n text: t[RULE_TYPE_OPTIONS_KEYS.GRAND_TOTAL],\n value: 'GRAND_TOTAL',\n },\n {\n text: t[RULE_TYPE_OPTIONS_KEYS.SHIPPING_INCL_TAX],\n value: 'SHIPPING_INCL_TAX',\n },\n {\n text: t[RULE_TYPE_OPTIONS_KEYS.NUMBER_OF_SKUS],\n value: 'NUMBER_OF_SKUS',\n },\n];\n\n/**\n * Creates condition operator options for the dropdown\n * @param t - Translation function\n */\nexport const createConditionOperators = (t: Record<string, string>) => [\n { text: t[CONDITION_OPERATORS_KEYS.MORE_THAN], value: 'MORE_THAN' },\n {\n text: t[CONDITION_OPERATORS_KEYS.LESS_THAN],\n value: 'LESS_THAN',\n },\n {\n text: t[CONDITION_OPERATORS_KEYS.MORE_THAN_OR_EQUAL_TO],\n value: 'MORE_THAN_OR_EQUAL_TO',\n },\n {\n text: t[CONDITION_OPERATORS_KEYS.LESS_THAN_OR_EQUAL_TO],\n value: 'LESS_THAN_OR_EQUAL_TO',\n },\n];\n\n/**\n * Creates \"applies to\" options for the dropdown\n * @param t - Translation function\n */\nexport const createAppliesToOptions = (t: Record<string, string>) => [\n { text: t[APPLIES_TO_OPTIONS_KEYS.ALL_USERS], value: 'all_users' },\n {\n text: t[APPLIES_TO_OPTIONS_KEYS.SPECIFIC_ROLES],\n value: 'specific_roles',\n },\n];\n","import { PurchaseOrderApprovalRuleModel } from '@/b2b-purchase-order/data/models';\nimport {\n ConditionAttributeType,\n ConditionOperatorType,\n FormValuesParams,\n} from '@/b2b-purchase-order/types/hooks';\nimport {\n RULE_TYPE_OPTIONS_KEYS,\n CONDITION_OPERATORS_KEYS,\n} from '@/b2b-purchase-order/configs/approvalRuleForm.config';\n\n// Default values for form fields\nconst DEFAULT_STATUS = 'ENABLED';\nconst DEFAULT_ATTRIBUTE: ConditionAttributeType = 'GRAND_TOTAL';\nconst DEFAULT_OPERATOR: ConditionOperatorType = 'MORE_THAN';\nconst DEFAULT_CURRENCY = 'USD';\nconst DEFAULT_QUANTITY = 0;\nconst DEFAULT_AMOUNT_VALUE = 0;\n\n/**\n * Checks if the given attribute is a valid condition attribute type\n */\nconst isValidAttribute = (\n attribute: any\n): attribute is ConditionAttributeType => {\n return Object.keys(RULE_TYPE_OPTIONS_KEYS).includes(attribute);\n};\n\n/**\n * Checks if the given operator is a valid condition operator type\n */\nconst isValidOperator = (operator: any): operator is ConditionOperatorType => {\n return Object.keys(CONDITION_OPERATORS_KEYS).includes(operator);\n};\n\n/**\n * Transforms API response data to form values format\n * Handles all the necessary data conversions and provides safe defaults\n */\nexport const transformToFormValues = (\n data: PurchaseOrderApprovalRuleModel\n): FormValuesParams => {\n return {\n status: (data.status as 'ENABLED' | 'DISABLED') || DEFAULT_STATUS,\n name: data.name || '',\n description: data.description || '',\n roleType: data.appliesToRoles?.length > 0 ? 'specific_roles' : 'all_users',\n appliesTo: data.appliesToRoles?.map((role) => role.id) || [],\n condition: {\n quantity: data.condition?.quantity ?? DEFAULT_QUANTITY,\n amount: {\n currency: data.condition?.amount?.currency || DEFAULT_CURRENCY,\n value: data.condition?.amount?.value ?? DEFAULT_AMOUNT_VALUE,\n },\n attribute: isValidAttribute(data.condition?.attribute)\n ? data.condition.attribute\n : DEFAULT_ATTRIBUTE,\n operator: isValidOperator(data.condition?.operator)\n ? data.condition.operator\n : DEFAULT_OPERATOR,\n },\n approvers: data.approverRoles?.map((role) => role.id) || [],\n };\n};\n","import { toSnakeCase } from './case-converter';\n\n/**\n * Checks if a value should be considered as \"has value\" for form submission\n * Empty strings and null/undefined are considered as no value\n * Zero (0) is considered as no value to match existing behavior\n */\nconst hasValue = (value: any): boolean => {\n return value !== null && value !== undefined && value !== '' && value !== 0;\n};\n\n/**\n * Cleans form values and converts to snake_case for API submission\n * - Handles role type logic (all_users vs specific_roles)\n * - Removes empty condition values (amount or quantity)\n * - Converts camelCase keys to snake_case\n */\nexport function cleanAndDeep(formValues: Record<string, any>): any {\n const { roleType, appliesTo, condition, ...restAll } = formValues;\n\n // Handle role type logic: all_users means empty appliesTo array\n const roleConfig =\n roleType === 'all_users' ? { appliesTo: [] } : { appliesTo };\n\n // Build condition config with only non-empty values\n let conditionConfig = {};\n\n if (condition) {\n const { amount, quantity, ...restCondition } = condition;\n\n const newCondition = { ...restCondition };\n\n // Only include amount if it has a valid value\n if (hasValue(amount?.value)) {\n newCondition.amount = amount;\n }\n\n // Only include quantity if it has a valid value\n if (hasValue(quantity)) {\n newCondition.quantity = quantity;\n }\n\n conditionConfig = newCondition;\n }\n\n // Convert to snake_case for API\n const result = toSnakeCase({\n ...restAll,\n ...roleConfig,\n condition: conditionConfig,\n });\n\n return result;\n}\n","/*******************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { useCallback, useEffect, useMemo, useReducer } from 'preact/hooks';\nimport {\n FormAction,\n FormState,\n UseApprovalRuleFormProps,\n UseApprovalRuleFormReturn,\n} from '@/b2b-purchase-order/types/hooks';\n\nimport {\n currencyInfo,\n getPurchaseOrderApprovalRule,\n createPurchaseOrderApprovalRule,\n updatePurchaseOrderApprovalRule,\n getPurchaseOrderApprovalRuleMetadata,\n} from '@/b2b-purchase-order/api';\nimport {\n updateFormFieldValue,\n validateFormFields,\n updateValidationErrors,\n transformToFormValues,\n cleanAndDeep,\n} from '@/b2b-purchase-order/lib';\nimport {\n INITIAL_FORM_STATE,\n REQUIRED_FIELDS_ON_SUBMIT,\n VALIDATION_ERROR_KEYS,\n createRuleTypeOptions,\n createConditionOperators,\n createAppliesToOptions,\n} from '@/b2b-purchase-order/configs';\n\n// Reducer function - handles all state updates in one place\nfunction formReducer(state: FormState, action: FormAction): FormState {\n switch (action.type) {\n case 'SET_LOADING':\n return { ...state, isLoading: action.payload };\n\n case 'SET_SUBMIT_ERROR':\n return { ...state, submitError: action.payload };\n\n case 'SET_FORM_VALUES':\n return { ...state, formValues: action.payload };\n\n case 'SET_AVAILABLE_APPLIES_TO':\n return { ...state, availableAppliesTo: action.payload };\n\n case 'SET_AVAILABLE_APPROVERS':\n return { ...state, availableRequiresApprovalFrom: action.payload };\n\n case 'SET_ERRORS':\n return { ...state, errors: action.payload };\n\n case 'SET_TOUCHED':\n return { ...state, touched: action.payload };\n\n case 'SET_CURRENCIES':\n return { ...state, currencyCodesList: action.payload };\n\n case 'UPDATE_FIELD': {\n const { key, value } = action.payload;\n const newFormValues = updateFormFieldValue(state.formValues, key, value);\n\n // Build new touched state\n const newTouched = { ...state.touched, [key]: true };\n\n // Special case: when roleType changes to specific_roles, mark appliesTo as touched\n if (key === 'roleType' && value === 'specific_roles') {\n newTouched.appliesTo = true;\n }\n\n // Validate and get updated errors\n const allErrors = validateFormFields(newFormValues);\n const newErrors = updateValidationErrors(\n allErrors,\n state.errors,\n newTouched\n );\n\n return {\n ...state,\n formValues: newFormValues,\n touched: newTouched,\n errors: newErrors,\n };\n }\n\n case 'TOUCH_FIELD': {\n const fieldName = action.payload;\n const newTouched = { ...state.touched, [fieldName]: true };\n\n // Validate and update errors for touched field\n const allErrors = validateFormFields(state.formValues);\n const newErrors = updateValidationErrors(\n allErrors,\n state.errors,\n newTouched\n );\n\n return {\n ...state,\n touched: newTouched,\n errors: newErrors,\n };\n }\n\n case 'MARK_FIELDS_TOUCHED': {\n const newTouched = { ...state.touched, ...action.payload };\n const allErrors = validateFormFields(state.formValues);\n const newErrors = updateValidationErrors(\n allErrors,\n state.errors,\n newTouched\n );\n\n return {\n ...state,\n touched: newTouched,\n errors: newErrors,\n };\n }\n\n default:\n return state;\n }\n}\n\nexport const useApprovalRuleForm = ({\n t,\n approvalRuleID,\n routeApprovalRulesList,\n onSubmit,\n onChange,\n permissions,\n loadingPermissions,\n}: UseApprovalRuleFormProps): UseApprovalRuleFormReturn => {\n const [state, dispatch] = useReducer(formReducer, INITIAL_FORM_STATE);\n\n // Memoize options to prevent re-creation on each render\n const ruleTypeOptions = useMemo(() => createRuleTypeOptions(t), [t]);\n const conditionOperators = useMemo(() => createConditionOperators(t), [t]);\n const appliesToOptions = useMemo(() => createAppliesToOptions(t), [t]);\n\n // Load initial data (currencies and approval rule metadata)\n useEffect(() => {\n dispatch({ type: 'SET_LOADING', payload: true });\n\n // Load currency codes\n currencyInfo()\n .then((data) => {\n dispatch({\n type: 'SET_CURRENCIES',\n payload: data.availableCurrencyCodes,\n });\n })\n .catch((error) => {\n console.error('Failed to fetch currencies:', error);\n });\n\n // Load metadata (available roles) first - always needed\n getPurchaseOrderApprovalRuleMetadata()\n .then((data) => {\n const { availableAppliesTo, availableRequiresApprovalFrom } = data;\n dispatch({\n type: 'SET_AVAILABLE_APPLIES_TO',\n payload: availableAppliesTo,\n });\n dispatch({\n type: 'SET_AVAILABLE_APPROVERS',\n payload: availableRequiresApprovalFrom,\n });\n\n // Then load approval rule data if in edit mode\n if (approvalRuleID) {\n return getPurchaseOrderApprovalRule(approvalRuleID);\n }\n return null;\n })\n .then((ruleData) => {\n if (ruleData) {\n // Edit mode: set form values from existing rule\n dispatch({\n type: 'SET_FORM_VALUES',\n payload: transformToFormValues(ruleData),\n });\n }\n dispatch({ type: 'SET_SUBMIT_ERROR', payload: null });\n })\n .catch((error) => {\n console.error('Failed to fetch data:', error);\n dispatch({\n type: 'SET_SUBMIT_ERROR',\n payload: VALIDATION_ERROR_KEYS.FAILED_TO_LOAD,\n });\n })\n .finally(() => {\n dispatch({ type: 'SET_LOADING', payload: false });\n });\n }, [approvalRuleID]);\n\n // Handler for field value changes\n const handleSetFormValues = useCallback(\n (key: string, value: string | number | boolean | string[]) => {\n dispatch({ type: 'UPDATE_FIELD', payload: { key, value } });\n if (onChange) {\n onChange({ ...state.formValues, [key]: value });\n }\n },\n [onChange, state.formValues]\n );\n\n // Handler for field touch (blur)\n const handleFieldTouch = useCallback(\n (fieldName: string) => {\n dispatch({ type: 'TOUCH_FIELD', payload: fieldName });\n if (onChange) {\n onChange(state.formValues);\n }\n },\n [onChange, state.formValues]\n );\n\n // Handler for form submission\n const handleSubmit = useCallback(async () => {\n dispatch({ type: 'SET_LOADING', payload: true });\n dispatch({ type: 'SET_SUBMIT_ERROR', payload: null });\n\n // Mark all required fields as touched to show all errors\n dispatch({\n type: 'MARK_FIELDS_TOUCHED',\n payload: REQUIRED_FIELDS_ON_SUBMIT,\n });\n\n // Validate form\n const validationErrors = validateFormFields(state.formValues);\n\n if (Object.keys(validationErrors).length > 0) {\n dispatch({ type: 'SET_ERRORS', payload: validationErrors });\n dispatch({ type: 'SET_LOADING', payload: false });\n return;\n }\n\n // Clean and prepare data for API\n const cleanedData = cleanAndDeep(state.formValues);\n\n // Submit to API (create or update based on approvalRuleID)\n try {\n let data;\n\n if (approvalRuleID) {\n // Update existing approval rule\n data = await updatePurchaseOrderApprovalRule({\n uid: approvalRuleID,\n ...cleanedData,\n });\n } else {\n // Create new approval rule\n data = await createPurchaseOrderApprovalRule(cleanedData);\n }\n\n if (!data.uid) {\n dispatch({\n type: 'SET_SUBMIT_ERROR',\n payload: VALIDATION_ERROR_KEYS.FAILED_TO_CREATE,\n });\n dispatch({ type: 'SET_LOADING', payload: false });\n return;\n }\n\n // Success - call onSubmit callback if provided\n if (onSubmit) {\n onSubmit(state.formValues as any);\n }\n\n if (routeApprovalRulesList) {\n window.location.href = routeApprovalRulesList();\n } else {\n dispatch({ type: 'SET_LOADING', payload: false });\n }\n } catch (error) {\n console.error('Failed to save approval rule:', error);\n dispatch({\n type: 'SET_SUBMIT_ERROR',\n payload: VALIDATION_ERROR_KEYS.FAILED_TO_CREATE,\n });\n dispatch({ type: 'SET_LOADING', payload: false });\n }\n }, [state.formValues, routeApprovalRulesList, approvalRuleID, onSubmit]);\n\n // Memoized: true if form is loading or permissions not loaded or missing required permission\n const formLoading = useMemo(() => {\n if (state.isLoading || loadingPermissions) return true;\n\n if (\n !permissions?.permissions.viewApprovalRules &&\n !permissions?.permissions.manageApprovalRules\n ) {\n return true;\n }\n\n return false;\n }, [state.isLoading, loadingPermissions, permissions]);\n\n return {\n availableAppliesTo: state.availableAppliesTo,\n availableRequiresApprovalFrom: state.availableRequiresApprovalFrom,\n formValues: state.formValues,\n ruleTypeOptions,\n conditionOperators,\n currencies: state.currencyCodesList,\n appliesToOptions,\n handleSetFormValues,\n handleSubmit,\n handleFieldTouch,\n errors: state.errors,\n touched: state.touched,\n isLoading: state.isLoading,\n formLoading,\n submitError: state.submitError,\n };\n};\n","/*******************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { Text } from '@adobe-commerce/elsie/i18n';\nimport { FunctionComponent } from 'preact';\n\nconst ErrorMessage: FunctionComponent<{\n touched?: boolean;\n error?: string;\n className?: string;\n}> = ({ touched = false, error, className = 'error-message' }) => {\n if (!touched || !error) {\n return null;\n }\n\n return (\n <span className={className}>\n <Text id={error} />\n </span>\n );\n};\n\nexport default ErrorMessage;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport {\n Input,\n Picker,\n TextArea,\n RadioButton,\n Checkbox,\n MultiSelect,\n Button,\n} from '@adobe-commerce/elsie/components';\nimport { ErrorMessage } from '@/b2b-purchase-order/components/ApprovalRuleForm/blocks';\nimport { CustomerRolePermissionsModel } from '@/b2b-purchase-order/data/models';\nimport { classes } from '@adobe-commerce/elsie/lib';\n\nconst Form = ({\n availableRequiresApprovalFrom,\n conditionOperators,\n availableAppliesTo,\n appliesToOptions,\n ruleTypeOptions,\n currencies,\n formValues,\n errors,\n touched,\n isLoading,\n permissions,\n handleSubmit,\n handleFieldTouch,\n handleSetFormValues,\n routeApprovalRulesList,\n t,\n}: {\n availableRequiresApprovalFrom: { id: string; name: string }[];\n conditionOperators: { value: string; text: string }[];\n availableAppliesTo: { id: string; name: string }[];\n appliesToOptions: { value: string; text: string }[];\n ruleTypeOptions: { value: string; text: string }[];\n currencies: { value: string; text: string }[];\n formValues: any;\n errors: Record<string, string>;\n touched: Record<string, boolean>;\n isLoading: boolean;\n permissions?: CustomerRolePermissionsModel;\n handleSubmit: () => void;\n handleFieldTouch: (field: string) => void;\n handleSetFormValues: (field: string, value: any) => void;\n routeApprovalRulesList?: () => string;\n t: Record<string, string>;\n}) => {\n const disabledInputField =\n isLoading || !permissions?.permissions?.viewApprovalRules;\n\n return (\n <form data-testid=\"approval-rule-form\">\n <Checkbox\n data-testid=\"status-toggle\"\n className=\"b2b-purchase-order-approval-rule-form__toggle\"\n disabled={disabledInputField}\n name=\"status\"\n label={t.formEnabled}\n checked={formValues.status === 'ENABLED'}\n onChange={(event) => {\n const value = (event.target as HTMLInputElement).checked;\n\n handleSetFormValues('status', value);\n }}\n />\n <div data-testid=\"name-input-container\">\n <Input\n data-testid=\"name-input\"\n className=\"b2b-purchase-order-approval-rule-form__name-input\"\n disabled={disabledInputField}\n name={'name'}\n floatingLabel={t.inputRuleNameFloatingLabel}\n placeholder={t.inputRuleNamePlaceholder}\n value={formValues.name}\n error={!!(touched.name && errors.name)}\n onChange={(event: Event) => {\n const value = (event.target as HTMLInputElement).value;\n\n handleSetFormValues('name', value);\n }}\n onBlur={() => handleFieldTouch('name')}\n />\n <ErrorMessage touched={touched.name} error={errors.name} />\n </div>\n <TextArea\n data-testid=\"description-textarea\"\n className=\"b2b-purchase-order-approval-rule-form__description\"\n disabled={disabledInputField}\n name=\"description\"\n label={t.textAreaDescriptionLabel}\n value={formValues.description}\n onChange={(event) => {\n const value = (event.target as HTMLTextAreaElement).value;\n handleSetFormValues('description', value);\n }}\n />\n <div\n data-testid=\"applies-to-section\"\n className=\"b2b-purchase-order-approval-rule-form__applies-to\"\n >\n <span className=\"b2b-purchase-order-approval-rule-form__applies-to-title\">\n {t.titleAppliesTo}\n </span>\n {appliesToOptions.map((option, index) => {\n return (\n <RadioButton\n key={option.value}\n data-testid={`applies-to-radio-${index}`}\n disabled={disabledInputField}\n name=\"radio-group\"\n value={option.value}\n label={option.text}\n checked={formValues.roleType === option.value}\n onChange={(event) => {\n const value = (event.target as HTMLInputElement).value;\n handleSetFormValues('roleType', value);\n }}\n />\n );\n })}\n {formValues.roleType === 'specific_roles' ? (\n <div\n data-testid=\"applies-to-multiselect-container\"\n className=\"b2b-purchase-order-approval-rule-form__applies-to-multiselect\"\n >\n <MultiSelect\n data-testid=\"applies-to-multiselect\"\n disabled={disabledInputField}\n name=\"appliesTo\"\n value={[...formValues.appliesTo]}\n options={availableAppliesTo.map((option) => ({\n value: option.id,\n label: option.name,\n }))}\n error={!!(touched.appliesTo && errors.appliesTo)}\n onChange={(value) => {\n handleSetFormValues('appliesTo', value as string[]);\n if (!touched.appliesTo) handleFieldTouch('appliesTo');\n }}\n />\n <ErrorMessage\n touched={touched.appliesTo}\n error={errors.appliesTo}\n />\n </div>\n ) : null}\n </div>\n <div\n data-testid=\"rule-type-section\"\n className=\"b2b-purchase-order-approval-rule-form__rule-type\"\n >\n <span className=\"b2b-purchase-order-approval-rule-form__rule-type-title\">\n {t.titleRuleType}\n </span>\n <Picker\n data-testid=\"rule-type-picker\"\n className=\"b2b-purchase-order-approval-rule-form__rule-type-picker\"\n disabled={disabledInputField}\n name=\"ruleType\"\n value={formValues.condition.attribute}\n options={ruleTypeOptions}\n handleSelect={(event) => {\n const value = (event.target as HTMLSelectElement).value;\n handleSetFormValues('ruleType', value);\n }}\n />\n </div>\n <div\n data-testid=\"rule-condition-section\"\n className=\"b2b-purchase-order-approval-rule-form__rule-condition\"\n >\n <span className=\"b2b-purchase-order-approval-rule-form__rule-condition-title\">\n {\n ruleTypeOptions.find(\n (item) => item.value === formValues.condition.attribute\n )?.text\n }\n </span>\n <div\n className={classes([\n 'b2b-purchase-order-approval-rule-form__rule-condition-container',\n [\n 'b2b-purchase-order-approval-rule-form__rule-condition-container--error',\n !!errors.ruleValue && touched.ruleValue,\n ],\n ])}\n >\n <Picker\n data-testid=\"rule-condition-picker\"\n className=\"b2b-purchase-order-approval-rule-form__rule-condition-picker\"\n disabled={disabledInputField}\n name=\"ruleCondition\"\n value={formValues.condition.operator}\n options={conditionOperators}\n handleSelect={(event) => {\n const value = (event.target as HTMLSelectElement).value;\n handleSetFormValues('ruleCondition', value);\n }}\n />\n <div data-testid=\"rule-value-container\">\n <Input\n data-testid=\"rule-value-input\"\n className=\"b2b-purchase-order-approval-rule-form__rule-value-input\"\n disabled={disabledInputField}\n name=\"ruleValue\"\n floatingLabel={\n formValues.condition.attribute === 'NUMBER_OF_SKUS'\n ? t.inputQuantityFloatingLabel\n : t.inputAmountFloatingLabel\n }\n placeholder={\n formValues.condition.attribute === 'NUMBER_OF_SKUS'\n ? t.inputQuantityPlaceholder\n : t.inputAmountPlaceholder\n }\n value={\n formValues.condition.attribute === 'NUMBER_OF_SKUS'\n ? formValues.condition.quantity\n : formValues.condition.amount.value\n }\n error={!!(touched.ruleValue && errors.ruleValue)}\n onChange={(event) => {\n const value = (event.target as HTMLInputElement).value;\n handleSetFormValues('ruleValue', value);\n }}\n onBlur={() => handleFieldTouch('ruleValue')}\n />\n <ErrorMessage\n touched={touched.ruleValue}\n error={errors.ruleValue}\n />\n </div>\n {formValues.condition.attribute !== 'NUMBER_OF_SKUS' ? (\n <Picker\n data-testid=\"rule-condition-currency-picker\"\n className=\"b2b-purchase-order-approval-rule-form__rule-condition-currency-picker\"\n disabled={disabledInputField}\n name=\"ruleConditionCurrency\"\n value={formValues.condition.amount.currency}\n options={currencies}\n handleSelect={(event) => {\n const value = (event.target as HTMLSelectElement).value;\n handleSetFormValues('ruleConditionCurrency', value);\n }}\n />\n ) : null}\n </div>\n </div>\n <div\n data-testid=\"approval-role-section\"\n className=\"b2b-purchase-order-approval-rule-form__approval-role\"\n >\n <span className=\"b2b-purchase-order-approval-rule-form__approval-role-title\">\n {t.titleRequiresApprovalRole}\n </span>\n <div className=\"b2b-purchase-order-approval-rule-form__approval-role-multiselect\">\n <MultiSelect\n data-testid=\"approvers-multiselect\"\n disabled={disabledInputField}\n name=\"approvers\"\n value={[...formValues.approvers]}\n options={availableRequiresApprovalFrom.map((option) => ({\n value: option.id,\n label: option.name,\n }))}\n error={!!(touched.approvers && errors.approvers)}\n onChange={(value) => {\n handleSetFormValues('approvers', value as string[]);\n if (!touched.approvers) handleFieldTouch('approvers');\n }}\n />\n <ErrorMessage touched={touched.approvers} error={errors.approvers} />\n </div>\n </div>\n <div\n data-testid=\"form-buttons\"\n className=\"b2b-purchase-order-approval-rule-form__buttons\"\n >\n <Button\n data-testid=\"save-button\"\n type=\"button\"\n disabled={disabledInputField}\n onClick={handleSubmit}\n >\n {t.buttonSave}\n </Button>\n\n <Button\n data-testid=\"cancel-button\"\n disabled={isLoading}\n variant=\"secondary\"\n type=\"button\"\n onClick={() => {\n window.location.href = routeApprovalRulesList?.() ?? '';\n }}\n >\n {t.buttonCancel}\n </Button>\n </div>\n </form>\n );\n};\n\nexport default Form;\n","/*******************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { FunctionComponent } from 'preact';\nimport { classes } from '@adobe-commerce/elsie/lib';\nimport { Card, InLineAlert } from '@adobe-commerce/elsie/components';\nimport {\n useApprovalRuleForm,\n useCustomerRolePermissions,\n} from '@/b2b-purchase-order/hooks';\nimport { ApprovalRuleFormProps } from '@/b2b-purchase-order/types/components';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { Form } from '@/b2b-purchase-order/components/ApprovalRuleForm/blocks';\nimport '@/b2b-purchase-order/components/ApprovalRuleForm/ApprovalRuleForm.css';\nimport {\n PurchaseOrdersHeader,\n FormLoader,\n} from '@/b2b-purchase-order/components';\n\nexport const ApprovalRuleForm: FunctionComponent<ApprovalRuleFormProps> = ({\n className,\n approvalRuleID,\n withHeader,\n withWrapper,\n routeApprovalRulesList,\n onSubmit,\n onChange,\n}) => {\n const t = useText({\n headerText: 'PurchaseOrders.approvalRuleForm.headerText',\n titleAppliesTo: 'PurchaseOrders.approvalRuleForm.titleAppliesTo',\n titleRuleType: 'PurchaseOrders.approvalRuleForm.titleRuleType',\n titleRequiresApprovalRole:\n 'PurchaseOrders.approvalRuleForm.titleRequiresApprovalRole',\n formEnabled: 'PurchaseOrders.approvalRuleForm.fields.enabled',\n formDisabled: 'PurchaseOrders.approvalRuleForm.fields.disabled',\n inputRuleNameFloatingLabel:\n 'PurchaseOrders.approvalRuleForm.fields.inputRuleName.floatingLabel',\n inputRuleNamePlaceholder:\n 'PurchaseOrders.approvalRuleForm.fields.inputRuleName.placeholder',\n textAreaDescriptionLabel:\n 'PurchaseOrders.approvalRuleForm.fields.textAreaDescription.label',\n appliesToAllUsers:\n 'PurchaseOrders.approvalRuleForm.fields.appliesTo.allUsers',\n appliesToSpecificRoles:\n 'PurchaseOrders.approvalRuleForm.fields.appliesTo.specificRoles',\n ruleTypeGrandTotal:\n 'PurchaseOrders.approvalRuleForm.fields.ruleTypeOptions.grandTotal',\n ruleTypeShippingInclTax:\n 'PurchaseOrders.approvalRuleForm.fields.ruleTypeOptions.shippingInclTax',\n ruleTypeNumberOfSkus:\n 'PurchaseOrders.approvalRuleForm.fields.ruleTypeOptions.numberOfSkus',\n conditionOperatorMoreThan:\n 'PurchaseOrders.approvalRuleForm.fields.conditionOperators.moreThan',\n conditionOperatorLessThan:\n 'PurchaseOrders.approvalRuleForm.fields.conditionOperators.lessThan',\n conditionOperatorMoreThanOrEqualTo:\n 'PurchaseOrders.approvalRuleForm.fields.conditionOperators.moreThanOrEqualTo',\n conditionOperatorLessThanOrEqualTo:\n 'PurchaseOrders.approvalRuleForm.fields.conditionOperators.lessThanOrEqualTo',\n inputQuantityFloatingLabel:\n 'PurchaseOrders.approvalRuleForm.fields.inputQuantity.floatingLabel',\n inputQuantityPlaceholder:\n 'PurchaseOrders.approvalRuleForm.fields.inputQuantity.placeholder',\n inputAmountFloatingLabel:\n 'PurchaseOrders.approvalRuleForm.fields.inputAmount.floatingLabel',\n inputAmountPlaceholder:\n 'PurchaseOrders.approvalRuleForm.fields.inputAmount.placeholder',\n buttonCancel: 'PurchaseOrders.approvalRuleForm.fields.buttons.cancel',\n buttonSave: 'PurchaseOrders.approvalRuleForm.fields.buttons.save',\n });\n const { permissions, loadingPermissions } = useCustomerRolePermissions();\n const {\n availableRequiresApprovalFrom,\n conditionOperators,\n availableAppliesTo,\n appliesToOptions,\n ruleTypeOptions,\n currencies,\n formValues,\n errors,\n touched,\n isLoading,\n submitError,\n formLoading,\n handleSubmit,\n handleFieldTouch,\n handleSetFormValues,\n } = useApprovalRuleForm({\n t,\n approvalRuleID,\n loadingPermissions,\n permissions,\n routeApprovalRulesList,\n onSubmit,\n onChange,\n });\n\n if (formLoading) {\n return (\n <FormLoader\n testId=\"b2b-purchase-order-approval-rule-form\"\n className={classes([\n 'b2b-purchase-order-approval-rule-form',\n className,\n ])}\n />\n );\n }\n\n const renderContentForm = (\n <>\n {!!submitError && <InLineAlert heading=\"\" description={submitError} />}\n <Form\n availableRequiresApprovalFrom={availableRequiresApprovalFrom}\n conditionOperators={conditionOperators}\n availableAppliesTo={availableAppliesTo}\n appliesToOptions={appliesToOptions}\n ruleTypeOptions={ruleTypeOptions}\n currencies={currencies}\n formValues={formValues}\n errors={errors}\n touched={touched}\n isLoading={isLoading}\n handleSubmit={handleSubmit}\n handleFieldTouch={handleFieldTouch}\n handleSetFormValues={handleSetFormValues}\n permissions={permissions}\n routeApprovalRulesList={routeApprovalRulesList}\n t={t}\n />\n </>\n );\n\n return (\n <div\n data-testid=\"b2b-purchase-order-approval-rule-form\"\n className={classes(['b2b-purchase-order-approval-rule-form', className])}\n >\n {withHeader ? <PurchaseOrdersHeader headerText={t.headerText} /> : null}\n {withWrapper ? (\n <Card variant=\"secondary\">{renderContentForm}</Card>\n ) : (\n renderContentForm\n )}\n </div>\n );\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { classes, Container } from '@adobe-commerce/elsie/lib';\nimport { ApprovalRuleFormProps } from '@/b2b-purchase-order/types/containers';\nimport { ApprovalRuleForm as ApprovalRuleFormComponent } from '@/b2b-purchase-order/components';\n\nexport const ApprovalRuleForm: Container<ApprovalRuleFormProps> = ({\n withHeader = true,\n withWrapper = true,\n className,\n approvalRuleID,\n routeApprovalRulesList,\n onSubmit,\n onChange,\n}) => {\n return (\n <div\n data-testid=\"b2b-purchase-order-approval-rule-form-container\"\n className={classes([\n 'b2b-purchase-order-approval-rule-form-container',\n className,\n ])}\n >\n <ApprovalRuleFormComponent\n withWrapper={withWrapper}\n withHeader={withHeader}\n approvalRuleID={approvalRuleID}\n routeApprovalRulesList={routeApprovalRulesList}\n onSubmit={onSubmit}\n onChange={onChange}\n />\n </div>\n );\n};\n"],"names":["updateFormFieldValue","formValues","key","value","newFormValues","numericValue","validateFormFields","values","errors","updateValidationErrors","newErrors","currentErrors","touchedFields","updatedErrors","errorKey","RULE_TYPE_OPTIONS_KEYS","CONDITION_OPERATORS_KEYS","APPLIES_TO_OPTIONS_KEYS","INITIAL_FORM_VALUES","INITIAL_FORM_STATE","REQUIRED_FIELDS_ON_SUBMIT","VALIDATION_ERROR_KEYS","createRuleTypeOptions","t","createConditionOperators","createAppliesToOptions","DEFAULT_STATUS","DEFAULT_ATTRIBUTE","DEFAULT_OPERATOR","DEFAULT_CURRENCY","DEFAULT_QUANTITY","DEFAULT_AMOUNT_VALUE","isValidAttribute","attribute","isValidOperator","operator","transformToFormValues","data","_a","_b","role","_c","_e","_d","_g","_f","_h","_i","_j","hasValue","cleanAndDeep","roleType","appliesTo","condition","restAll","roleConfig","conditionConfig","amount","quantity","restCondition","newCondition","toSnakeCase","formReducer","state","action","newTouched","allErrors","fieldName","useApprovalRuleForm","approvalRuleID","routeApprovalRulesList","onSubmit","onChange","permissions","loadingPermissions","dispatch","useReducer","ruleTypeOptions","useMemo","conditionOperators","appliesToOptions","useEffect","currencyInfo","error","getPurchaseOrderApprovalRuleMetadata","availableAppliesTo","availableRequiresApprovalFrom","getPurchaseOrderApprovalRule","ruleData","handleSetFormValues","useCallback","handleFieldTouch","handleSubmit","validationErrors","cleanedData","updatePurchaseOrderApprovalRule","createPurchaseOrderApprovalRule","formLoading","ErrorMessage","touched","className","Text","Form","currencies","isLoading","disabledInputField","jsxs","jsx","Checkbox","event","Input","TextArea","option","index","RadioButton","MultiSelect","Picker","item","classes","Button","ApprovalRuleForm","withHeader","withWrapper","useText","useCustomerRolePermissions","submitError","FormLoader","renderContentForm","Fragment","InLineAlert","PurchaseOrdersHeader","Card","ApprovalRuleFormComponent"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
/*! Copyright 2025 Adobe
|
|
2
2
|
All Rights Reserved. */
|
|
3
|
-
import{jsx as s,Fragment as j,jsxs as G}from"@dropins/tools/preact-jsx-runtime.js";import{classes as q}from"@dropins/tools/lib.js";import{i as J,P as K,d as Q}from"../chunks/pageSize.config.js";import{P as W}from"../chunks/PurchaseOrdersHeader.js";import"../chunks/FormLoader.js";import{Button as X,Skeleton as Y,SkeletonRow as ee}from"@dropins/tools/components.js";import{useState as P,useCallback as R,useEffect as ae,useMemo as F}from"@dropins/tools/preact-hooks.js";import"@dropins/tools/event-bus.js";import{u as re}from"../chunks/useCustomerRolePermissions.js";import{g as se,d as le}from"../chunks/getPurchaseOrderApprovalRules.js";import{Text as _,useText as te}from"@dropins/tools/i18n.js";import"../chunks/fetch-graphql.js";import"@dropins/tools/fetch-graphql.js";import"../chunks/fetch-error.js";import"../chunks/transform-purchase-order-approval-rule.js";const D=[{key:"action",label:"Action"},{key:"ruleName",label:"Rule Name"},{key:"status",label:"Status"},{key:"ruleType",label:"Rule Type"},{key:"createdBy",label:"Created By"},{key:"appliesTo",label:"Applies To"},{key:"approver",label:"Approver"}],ie=20,ne=({routeApprovalRuleDetails:c,routeCreateApprovalRule:u,routeEditApprovalRule:d,setColumns:p,setRowsData:b,initialPageSize:k,permissions:T,t:l})=>{const[h,O]=P([]),[m,g]=P(!1),[y,n]=P(!0),[i,S]=P(k),[v,w]=P({currentPage:1,totalPages:1,totalCount:0}),{currentPage:f,totalPages:L,totalCount:N}=v,x=R(a=>{const e=a.target.value;S(t=>t.map(r=>({...r,selected:r.value===e})))},[]),z=R(a=>{w(e=>({...e,currentPage:a}))},[]);ae(()=>{var t;const a=(t=i==null?void 0:i.find(r=>r.selected))==null?void 0:t.value,e=parseInt(a??ie.toString(),10);n(!0),se(f,e).then(r=>{r!=null&&r.pageInfo&&w({currentPage:r.pageInfo.currentPage,totalPages:r.pageInfo.totalPages,totalCount:r.totalCount}),O(r==null?void 0:r.items)}).catch(r=>{console.error("Error fetching approval rules:",r),O([])}).finally(()=>{n(!1),g(!1)})},[m,f,i,v.totalPages,L]);const C=R((a,e)=>{let t="";switch(e){case"new":{t=u==null?void 0:u(a);break}case"edit":{t=d==null?void 0:d(a);break}case"view":{t=c==null?void 0:c(a);break}}return J(t??"")?t:"#"},[u,d,c]),H=F(()=>(p==null?void 0:p(D))??D.map(a=>({...a,label:l[a.key]||a.label})),[p,l]),B=R((a,e)=>{a.preventDefault(),n(!0),le(e).then(()=>{g(!0)}).finally(()=>{n(!1)})},[]),M=F(()=>{const a=h==null?void 0:h.map(e=>{var V,E,I,$,A,U;const{isAdmin:t,permissions:{manageApprovalRules:r}}=T;return{ruleName:e.name,createdBy:e.createdBy,ruleType:s(_,{id:`PurchaseOrders.purchaseOrdersTable.ruleTypes.${(E=(V=e.condition)==null?void 0:V.attribute)==null?void 0:E.toLocaleLowerCase()}`}),status:s(_,{id:`PurchaseOrders.purchaseOrdersTable.rulesStatus.${(I=e.status)==null?void 0:I.toLocaleLowerCase()}`}),appliesTo:(($=e==null?void 0:e.appliesToRoles)==null?void 0:$.length)<=0?l.appliesToAll:(A=e==null?void 0:e.appliesToRoles)==null?void 0:A.map(o=>o.name).join(", "),approver:s(j,{children:(U=e==null?void 0:e.approverRoles)==null?void 0:U.map((o,Z)=>s("div",{children:o==null?void 0:o.name},Z))}),action:t||r?s(j,{children:G("div",{style:{display:"flex",gap:"8px"},children:[s("a",{href:C(e.uid,"edit"),"aria-label":l.ariaLabelEditRule.replace("{{ruleName}}",e.name),"data-testid":`edit-approval-rule-${e.uid}`,children:l.actionEdit}),s("a",{"data-testid":`delete-approval-rule-${e.uid}`,href:"#","aria-label":l.ariaLabelDeleteRule.replace("{{ruleName}}",e.name),onClick:o=>B(o,e.uid),children:l.actionDelete})]})}):s("a",{"data-testid":`view-approval-rule-${e.uid}`,href:C(e.uid,"view"),"aria-label":l.ariaLabelViewRule.replace("{{ruleName}}",e.name),children:l.actionView})}});return b?b(a):a},[h,b,T,l,C,B]);return{tableConfig:{columns:H,rows:M},paginationConfig:{currentPage:f,totalPages:L,handlePageChange:z},pageSizeConfig:{pageSizeOptionsList:i,onChange:x},totalCount:N,loading:y,handleCreateUrl:C}},
|
|
3
|
+
import{jsx as s,Fragment as j,jsxs as G}from"@dropins/tools/preact-jsx-runtime.js";import{classes as q}from"@dropins/tools/lib.js";import{i as J,P as K,d as Q}from"../chunks/pageSize.config.js";import{P as W}from"../chunks/PurchaseOrdersHeader.js";import"../chunks/FormLoader.js";import{Button as X,Skeleton as Y,SkeletonRow as ee}from"@dropins/tools/components.js";import{useState as P,useCallback as R,useEffect as ae,useMemo as F}from"@dropins/tools/preact-hooks.js";import"@dropins/tools/event-bus.js";import{u as re}from"../chunks/useCustomerRolePermissions.js";import{g as se,d as le}from"../chunks/getPurchaseOrderApprovalRules.js";import{Text as _,useText as te}from"@dropins/tools/i18n.js";import"../chunks/permissions.js";import"../chunks/fetch-graphql.js";import"@dropins/tools/fetch-graphql.js";import"../chunks/fetch-error.js";import"../chunks/transform-purchase-order-approval-rule.js";const D=[{key:"action",label:"Action"},{key:"ruleName",label:"Rule Name"},{key:"status",label:"Status"},{key:"ruleType",label:"Rule Type"},{key:"createdBy",label:"Created By"},{key:"appliesTo",label:"Applies To"},{key:"approver",label:"Approver"}],ie=20,ne=({routeApprovalRuleDetails:c,routeCreateApprovalRule:u,routeEditApprovalRule:d,setColumns:p,setRowsData:b,initialPageSize:k,permissions:T,t:l})=>{const[h,O]=P([]),[m,g]=P(!1),[y,n]=P(!0),[i,S]=P(k),[v,w]=P({currentPage:1,totalPages:1,totalCount:0}),{currentPage:f,totalPages:L,totalCount:N}=v,x=R(a=>{const e=a.target.value;S(t=>t.map(r=>({...r,selected:r.value===e})))},[]),z=R(a=>{w(e=>({...e,currentPage:a}))},[]);ae(()=>{var t;const a=(t=i==null?void 0:i.find(r=>r.selected))==null?void 0:t.value,e=parseInt(a??ie.toString(),10);n(!0),se(f,e).then(r=>{r!=null&&r.pageInfo&&w({currentPage:r.pageInfo.currentPage,totalPages:r.pageInfo.totalPages,totalCount:r.totalCount}),O(r==null?void 0:r.items)}).catch(r=>{console.error("Error fetching approval rules:",r),O([])}).finally(()=>{n(!1),g(!1)})},[m,f,i,v.totalPages,L]);const C=R((a,e)=>{let t="";switch(e){case"new":{t=u==null?void 0:u(a);break}case"edit":{t=d==null?void 0:d(a);break}case"view":{t=c==null?void 0:c(a);break}}return J(t??"")?t:"#"},[u,d,c]),H=F(()=>(p==null?void 0:p(D))??D.map(a=>({...a,label:l[a.key]||a.label})),[p,l]),B=R((a,e)=>{a.preventDefault(),n(!0),le(e).then(()=>{g(!0)}).finally(()=>{n(!1)})},[]),M=F(()=>{const a=h==null?void 0:h.map(e=>{var V,E,I,$,A,U;const{isAdmin:t,permissions:{manageApprovalRules:r}}=T;return{ruleName:e.name,createdBy:e.createdBy,ruleType:s(_,{id:`PurchaseOrders.purchaseOrdersTable.ruleTypes.${(E=(V=e.condition)==null?void 0:V.attribute)==null?void 0:E.toLocaleLowerCase()}`}),status:s(_,{id:`PurchaseOrders.purchaseOrdersTable.rulesStatus.${(I=e.status)==null?void 0:I.toLocaleLowerCase()}`}),appliesTo:(($=e==null?void 0:e.appliesToRoles)==null?void 0:$.length)<=0?l.appliesToAll:(A=e==null?void 0:e.appliesToRoles)==null?void 0:A.map(o=>o.name).join(", "),approver:s(j,{children:(U=e==null?void 0:e.approverRoles)==null?void 0:U.map((o,Z)=>s("div",{children:o==null?void 0:o.name},Z))}),action:t||r?s(j,{children:G("div",{style:{display:"flex",gap:"8px"},children:[s("a",{href:C(e.uid,"edit"),"aria-label":l.ariaLabelEditRule.replace("{{ruleName}}",e.name),"data-testid":`edit-approval-rule-${e.uid}`,children:l.actionEdit}),s("a",{"data-testid":`delete-approval-rule-${e.uid}`,href:"#","aria-label":l.ariaLabelDeleteRule.replace("{{ruleName}}",e.name),onClick:o=>B(o,e.uid),children:l.actionDelete})]})}):s("a",{"data-testid":`view-approval-rule-${e.uid}`,href:C(e.uid,"view"),"aria-label":l.ariaLabelViewRule.replace("{{ruleName}}",e.name),children:l.actionView})}});return b?b(a):a},[h,b,T,l,C,B]);return{tableConfig:{columns:H,rows:M},paginationConfig:{currentPage:f,totalPages:L,handlePageChange:z},pageSizeConfig:{pageSizeOptionsList:i,onChange:x},totalCount:N,loading:y,handleCreateUrl:C}},Le=({routeCreateApprovalRule:c,routeEditApprovalRule:u,routeApprovalRuleDetails:d,setColumns:p,setRowsData:b,className:k="",withHeader:T=!0,withWrapper:l=!0,skeletonRowCount:h=5,initialPageSize:O=Q})=>{const m=te({headerText:"PurchaseOrders.approvalRulesList.containerTitle",ruleName:"PurchaseOrders.purchaseOrdersTable.tableColumns.ruleName",ruleType:"PurchaseOrders.purchaseOrdersTable.tableColumns.ruleType",appliesTo:"PurchaseOrders.purchaseOrdersTable.tableColumns.appliesTo",approver:"PurchaseOrders.purchaseOrdersTable.tableColumns.approver",createdBy:"PurchaseOrders.purchaseOrdersTable.tableColumns.createdBy",status:"PurchaseOrders.purchaseOrdersTable.tableColumns.status",actionEdit:"PurchaseOrders.purchaseOrdersTable.actionEdit",actionDelete:"PurchaseOrders.purchaseOrdersTable.actionDelete",addNewRule:"PurchaseOrders.approvalRulesList.buttons.newRule",actionView:"PurchaseOrders.purchaseOrdersTable.actionView",appliesToAll:"PurchaseOrders.purchaseOrdersTable.appliesToAll",emptyTitle:"PurchaseOrders.approvalRulesList.emptyTitle",ariaLabelEditRule:"PurchaseOrders.approvalRulesList.ariaLabel.editRule",ariaLabelDeleteRule:"PurchaseOrders.approvalRulesList.ariaLabel.deleteRule",ariaLabelViewRule:"PurchaseOrders.approvalRulesList.ariaLabel.viewRule"}),{permissions:g,loadingPermissions:y}=re(),{loading:n,tableConfig:i,paginationConfig:S,totalCount:v,pageSizeConfig:w,handleCreateUrl:f}=ne({routeCreateApprovalRule:c,routeEditApprovalRule:u,routeApprovalRuleDetails:d,setColumns:p,setRowsData:b,permissions:g,initialPageSize:O,t:m}),{isAdmin:L,permissions:{manageApprovalRules:N}}=g,x=L||N?s(X,{variant:"primary",onClick:()=>{window.location.href=f("","new")},"data-testid":"add-new-rule-button",children:m.addNewRule}):null,z=n||y?s(Y,{"data-testid":"approval-rules-skeleton",children:s(ee,{variant:"row",size:"small"})}):x;return G("div",{className:q(["purchase-orders",k]),"data-testid":"purchase-orders-container",children:[T?s(W,{headerText:m.headerText}):null,s(K,{totalCount:v,columns:i.columns,rows:i.rows,paginationConfig:S,loading:n||y,skeletonRowCount:h,pageSizeConfig:w,emptyTitle:m.emptyTitle,withWrapper:l,footer:z})]})};export{Le as ApprovalRulesList,Le as default};
|
|
4
4
|
//# sourceMappingURL=ApprovalRulesList.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ApprovalRulesList.js","sources":["/@dropins/storefront-purchase-order/src/configs/purchaseOrderApprovalRules.config.ts","/@dropins/storefront-purchase-order/src/hooks/useApprovalRulesList.tsx","/@dropins/storefront-purchase-order/src/containers/ApprovalRulesList/ApprovalRulesList.tsx"],"sourcesContent":["/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { Column } from '@/b2b-purchase-order/types/components';\n\nexport const defaultApprovalRulesColumns: Column[] = [\n { key: 'action', label: 'Action' },\n { key: 'ruleName', label: 'Rule Name' },\n { key: 'status', label: 'Status' },\n { key: 'ruleType', label: 'Rule Type' },\n {\n key: 'createdBy',\n label: 'Created By',\n },\n {\n key: 'appliesTo',\n label: 'Applies To',\n },\n { key: 'approver', label: 'Approver' },\n];\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport {\n UseApprovalRulesList,\n UseApprovalRulesListReturn,\n} from '@/b2b-purchase-order/types/hooks';\nimport { useCallback, useState, useEffect, useMemo } from 'preact/hooks';\nimport { isValidUrl } from '@/b2b-purchase-order/lib';\nimport { Text } from '@adobe-commerce/elsie/i18n';\nimport { defaultApprovalRulesColumns } from '@/b2b-purchase-order/configs';\nimport {\n deletePurchaseOrderApprovalRule,\n getPurchaseOrderApprovalRules,\n} from '@/b2b-purchase-order/api';\nimport { PurchaseOrderApprovalRuleModel } from '@/b2b-purchase-order/data/models';\n\nconst DEFAULT_PAGE_SIZE = 20;\n\nexport const useApprovalRulesList = ({\n routeApprovalRuleDetails,\n routeCreateApprovalRule,\n routeEditApprovalRule,\n setColumns,\n setRowsData,\n initialPageSize,\n permissions,\n t,\n}: UseApprovalRulesList): UseApprovalRulesListReturn => {\n const [approvalRules, setApprovalRules] = useState<\n PurchaseOrderApprovalRuleModel[]\n >([]);\n const [shouldRefetch, setShouldRefetch] = useState(false);\n const [loading, setLoading] = useState<boolean>(true);\n const [pageSizeOptionsList, setPageSizeOptionsList] =\n useState(initialPageSize);\n const [pagination, setPagination] = useState({\n currentPage: 1,\n totalPages: 1,\n totalCount: 0,\n });\n\n // Derive pagination values\n const { currentPage, totalPages, totalCount } = pagination;\n\n const handleChangePageSize = useCallback((event: Event) => {\n const size = (event.target as HTMLSelectElement).value;\n\n setPageSizeOptionsList((prev) => {\n return prev.map((option) => ({\n ...option,\n selected: option.value === size,\n }));\n });\n }, []);\n\n const handlePageChange = useCallback((page: number) => {\n setPagination((prev) => ({ ...prev, currentPage: page }));\n }, []);\n\n useEffect(() => {\n const pageSize = pageSizeOptionsList?.find(\n (option) => option.selected\n )?.value;\n const selectedPageSize = parseInt(\n pageSize ?? DEFAULT_PAGE_SIZE.toString(),\n 10\n );\n\n setLoading(true);\n getPurchaseOrderApprovalRules(currentPage, selectedPageSize)\n .then((data) => {\n if (data?.pageInfo) {\n setPagination({\n currentPage: data.pageInfo.currentPage,\n totalPages: data.pageInfo.totalPages,\n totalCount: data.totalCount,\n });\n }\n\n setApprovalRules(data?.items);\n })\n .catch((error) => {\n console.error('Error fetching approval rules:', error);\n setApprovalRules([]);\n })\n .finally(() => {\n setLoading(false);\n setShouldRefetch(false);\n });\n }, [\n shouldRefetch,\n currentPage,\n pageSizeOptionsList,\n pagination.totalPages,\n totalPages,\n ]);\n\n const handleCreateUrl = useCallback(\n (id: string, type: 'edit' | 'new' | 'view'): string => {\n let url = '';\n\n switch (type) {\n case 'new': {\n url = routeCreateApprovalRule?.(id) as string;\n break;\n }\n case 'edit': {\n url = routeEditApprovalRule?.(id) as string;\n break;\n }\n case 'view': {\n url = routeApprovalRuleDetails?.(id) as string;\n break;\n }\n }\n\n if (!isValidUrl(url ?? '')) return '#';\n\n return url;\n },\n [routeCreateApprovalRule, routeEditApprovalRule, routeApprovalRuleDetails]\n );\n\n const columns = useMemo(() => {\n return (\n setColumns?.(defaultApprovalRulesColumns) ??\n defaultApprovalRulesColumns.map((col) => ({\n ...col,\n label: t[col.key as keyof typeof t] || col.label,\n }))\n );\n }, [setColumns, t]);\n\n const handleDeleteRule = useCallback((e: Event, id: string) => {\n e.preventDefault();\n setLoading(true);\n deletePurchaseOrderApprovalRule(id)\n .then(() => {\n setShouldRefetch(true);\n })\n .finally(() => {\n setLoading(false);\n });\n }, []);\n\n const rows = useMemo(() => {\n const modifiedApprovalRules = approvalRules?.map((ar) => {\n const {\n isAdmin,\n permissions: { manageApprovalRules },\n } = permissions;\n\n return {\n ruleName: ar.name,\n createdBy: ar.createdBy,\n ruleType: (\n <Text\n id={`PurchaseOrders.purchaseOrdersTable.ruleTypes.${ar.condition?.attribute?.toLocaleLowerCase()}`}\n />\n ),\n status: (\n <Text\n id={`PurchaseOrders.purchaseOrdersTable.rulesStatus.${ar.status?.toLocaleLowerCase()}`}\n />\n ),\n appliesTo:\n ar?.appliesToRoles?.length <= 0\n ? t.appliesToAll\n : ar?.appliesToRoles?.map((role) => role.name).join(', '),\n approver: (\n <>\n {ar?.approverRoles?.map((role, idx) => (\n <div key={idx}>{role?.name}</div>\n ))}\n </>\n ),\n action:\n isAdmin || manageApprovalRules ? (\n <>\n <div style={{ display: 'flex', gap: '8px' }}>\n <a\n href={handleCreateUrl(ar.uid, 'edit')}\n aria-label={t.ariaLabelEditRule.replace(\n '{{ruleName}}',\n ar.name\n )}\n data-testid={`edit-approval-rule-${ar.uid}`}\n >\n {t.actionEdit}\n </a>\n <a\n data-testid={`delete-approval-rule-${ar.uid}`}\n href=\"#\"\n aria-label={t.ariaLabelDeleteRule.replace(\n '{{ruleName}}',\n ar.name\n )}\n onClick={(e) => handleDeleteRule(e, ar.uid)}\n >\n {t.actionDelete}\n </a>\n </div>\n </>\n ) : (\n <a\n data-testid={`view-approval-rule-${ar.uid}`}\n href={handleCreateUrl(ar.uid, 'view')}\n aria-label={t.ariaLabelViewRule.replace('{{ruleName}}', ar.name)}\n >\n {t.actionView}\n </a>\n ),\n };\n });\n\n return setRowsData\n ? setRowsData(modifiedApprovalRules)\n : modifiedApprovalRules;\n }, [\n approvalRules,\n setRowsData,\n permissions,\n t,\n handleCreateUrl,\n handleDeleteRule,\n ]);\n\n return {\n tableConfig: {\n columns,\n rows,\n },\n paginationConfig: {\n currentPage,\n totalPages,\n handlePageChange,\n },\n pageSizeConfig: {\n pageSizeOptionsList,\n onChange: handleChangePageSize,\n },\n totalCount,\n loading,\n handleCreateUrl,\n };\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { classes, Container } from '@adobe-commerce/elsie/lib';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport {\n PurchaseOrdersHeader,\n PurchaseOrdersTable,\n} from '@/b2b-purchase-order/components';\nimport { ApprovalRulesListProps } from '@/b2b-purchase-order/types/containers';\nimport {\n useApprovalRulesList,\n useCustomerRolePermissions,\n} from '@/b2b-purchase-order/hooks';\nimport {\n Button,\n Skeleton,\n SkeletonRow,\n} from '@adobe-commerce/elsie/components';\nimport { defaultPageSizeConfig } from '@/b2b-purchase-order/configs';\n\nexport const ApprovalRulesList: Container<ApprovalRulesListProps> = ({\n routeCreateApprovalRule,\n routeEditApprovalRule,\n routeApprovalRuleDetails,\n setColumns,\n setRowsData,\n className = '',\n withHeader = true,\n withWrapper = true,\n skeletonRowCount = 5,\n initialPageSize = defaultPageSizeConfig,\n}) => {\n const t = useText({\n headerText: 'PurchaseOrders.approvalRulesList.containerTitle',\n ruleName: 'PurchaseOrders.purchaseOrdersTable.tableColumns.ruleName',\n ruleType: 'PurchaseOrders.purchaseOrdersTable.tableColumns.ruleType',\n appliesTo: 'PurchaseOrders.purchaseOrdersTable.tableColumns.appliesTo',\n approver: 'PurchaseOrders.purchaseOrdersTable.tableColumns.approver',\n createdBy: 'PurchaseOrders.purchaseOrdersTable.tableColumns.createdBy',\n status: 'PurchaseOrders.purchaseOrdersTable.tableColumns.status',\n actionEdit: 'PurchaseOrders.purchaseOrdersTable.actionEdit',\n actionDelete: 'PurchaseOrders.purchaseOrdersTable.actionDelete',\n addNewRule: 'PurchaseOrders.approvalRulesList.buttons.newRule',\n actionView: 'PurchaseOrders.purchaseOrdersTable.actionView',\n appliesToAll: 'PurchaseOrders.purchaseOrdersTable.appliesToAll',\n emptyTitle: 'PurchaseOrders.approvalRulesList.emptyTitle',\n ariaLabelEditRule: 'PurchaseOrders.approvalRulesList.ariaLabel.editRule',\n ariaLabelDeleteRule:\n 'PurchaseOrders.approvalRulesList.ariaLabel.deleteRule',\n ariaLabelViewRule: 'PurchaseOrders.approvalRulesList.ariaLabel.viewRule',\n });\n\n const { permissions, loadingPermissions } = useCustomerRolePermissions();\n const {\n loading,\n tableConfig,\n paginationConfig,\n totalCount,\n pageSizeConfig,\n handleCreateUrl,\n } = useApprovalRulesList({\n routeCreateApprovalRule,\n routeEditApprovalRule,\n routeApprovalRuleDetails,\n setColumns,\n setRowsData,\n permissions,\n initialPageSize,\n t,\n });\n\n const {\n isAdmin,\n permissions: { manageApprovalRules },\n } = permissions;\n\n const renderFooterButton =\n isAdmin || manageApprovalRules ? (\n <Button\n variant=\"primary\"\n onClick={() => {\n window.location.href = handleCreateUrl('', 'new');\n }}\n data-testid=\"add-new-rule-button\"\n >\n {t.addNewRule}\n </Button>\n ) : null;\n\n const footerContent =\n loading || loadingPermissions ? (\n <Skeleton data-testid=\"approval-rules-skeleton\">\n <SkeletonRow variant=\"row\" size=\"small\" />\n </Skeleton>\n ) : (\n renderFooterButton\n );\n\n return (\n <div\n className={classes(['purchase-orders', className])}\n data-testid=\"purchase-orders-container\"\n >\n {withHeader ? <PurchaseOrdersHeader headerText={t.headerText} /> : null}\n <PurchaseOrdersTable\n totalCount={totalCount}\n columns={tableConfig.columns}\n rows={tableConfig.rows}\n paginationConfig={paginationConfig}\n loading={loading || loadingPermissions}\n skeletonRowCount={skeletonRowCount}\n pageSizeConfig={pageSizeConfig}\n emptyTitle={t.emptyTitle}\n withWrapper={withWrapper}\n footer={footerContent}\n />\n </div>\n );\n};\n"],"names":["defaultApprovalRulesColumns","DEFAULT_PAGE_SIZE","useApprovalRulesList","routeApprovalRuleDetails","routeCreateApprovalRule","routeEditApprovalRule","setColumns","setRowsData","initialPageSize","permissions","t","approvalRules","setApprovalRules","useState","shouldRefetch","setShouldRefetch","loading","setLoading","pageSizeOptionsList","setPageSizeOptionsList","pagination","setPagination","currentPage","totalPages","totalCount","handleChangePageSize","useCallback","event","size","prev","option","handlePageChange","page","useEffect","pageSize","_a","selectedPageSize","getPurchaseOrderApprovalRules","data","error","handleCreateUrl","id","type","url","isValidUrl","columns","useMemo","col","handleDeleteRule","e","deletePurchaseOrderApprovalRule","rows","modifiedApprovalRules","ar","isAdmin","manageApprovalRules","jsx","Text","_b","_c","_d","_e","role","Fragment","_f","idx","jsxs","ApprovalRulesList","className","withHeader","withWrapper","skeletonRowCount","defaultPageSizeConfig","useText","loadingPermissions","useCustomerRolePermissions","tableConfig","paginationConfig","pageSizeConfig","renderFooterButton","Button","footerContent","Skeleton","SkeletonRow","classes","PurchaseOrdersHeader","PurchaseOrdersTable"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ApprovalRulesList.js","sources":["/@dropins/storefront-purchase-order/src/configs/purchaseOrderApprovalRules.config.ts","/@dropins/storefront-purchase-order/src/hooks/useApprovalRulesList.tsx","/@dropins/storefront-purchase-order/src/containers/ApprovalRulesList/ApprovalRulesList.tsx"],"sourcesContent":["/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { Column } from '@/b2b-purchase-order/types/components';\n\nexport const defaultApprovalRulesColumns: Column[] = [\n { key: 'action', label: 'Action' },\n { key: 'ruleName', label: 'Rule Name' },\n { key: 'status', label: 'Status' },\n { key: 'ruleType', label: 'Rule Type' },\n {\n key: 'createdBy',\n label: 'Created By',\n },\n {\n key: 'appliesTo',\n label: 'Applies To',\n },\n { key: 'approver', label: 'Approver' },\n];\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport {\n UseApprovalRulesList,\n UseApprovalRulesListReturn,\n} from '@/b2b-purchase-order/types/hooks';\nimport { useCallback, useState, useEffect, useMemo } from 'preact/hooks';\nimport { isValidUrl } from '@/b2b-purchase-order/lib';\nimport { Text } from '@adobe-commerce/elsie/i18n';\nimport { defaultApprovalRulesColumns } from '@/b2b-purchase-order/configs';\nimport {\n deletePurchaseOrderApprovalRule,\n getPurchaseOrderApprovalRules,\n} from '@/b2b-purchase-order/api';\nimport { PurchaseOrderApprovalRuleModel } from '@/b2b-purchase-order/data/models';\n\nconst DEFAULT_PAGE_SIZE = 20;\n\nexport const useApprovalRulesList = ({\n routeApprovalRuleDetails,\n routeCreateApprovalRule,\n routeEditApprovalRule,\n setColumns,\n setRowsData,\n initialPageSize,\n permissions,\n t,\n}: UseApprovalRulesList): UseApprovalRulesListReturn => {\n const [approvalRules, setApprovalRules] = useState<\n PurchaseOrderApprovalRuleModel[]\n >([]);\n const [shouldRefetch, setShouldRefetch] = useState(false);\n const [loading, setLoading] = useState<boolean>(true);\n const [pageSizeOptionsList, setPageSizeOptionsList] =\n useState(initialPageSize);\n const [pagination, setPagination] = useState({\n currentPage: 1,\n totalPages: 1,\n totalCount: 0,\n });\n\n // Derive pagination values\n const { currentPage, totalPages, totalCount } = pagination;\n\n const handleChangePageSize = useCallback((event: Event) => {\n const size = (event.target as HTMLSelectElement).value;\n\n setPageSizeOptionsList((prev) => {\n return prev.map((option) => ({\n ...option,\n selected: option.value === size,\n }));\n });\n }, []);\n\n const handlePageChange = useCallback((page: number) => {\n setPagination((prev) => ({ ...prev, currentPage: page }));\n }, []);\n\n useEffect(() => {\n const pageSize = pageSizeOptionsList?.find(\n (option) => option.selected\n )?.value;\n const selectedPageSize = parseInt(\n pageSize ?? DEFAULT_PAGE_SIZE.toString(),\n 10\n );\n\n setLoading(true);\n getPurchaseOrderApprovalRules(currentPage, selectedPageSize)\n .then((data) => {\n if (data?.pageInfo) {\n setPagination({\n currentPage: data.pageInfo.currentPage,\n totalPages: data.pageInfo.totalPages,\n totalCount: data.totalCount,\n });\n }\n\n setApprovalRules(data?.items);\n })\n .catch((error) => {\n console.error('Error fetching approval rules:', error);\n setApprovalRules([]);\n })\n .finally(() => {\n setLoading(false);\n setShouldRefetch(false);\n });\n }, [\n shouldRefetch,\n currentPage,\n pageSizeOptionsList,\n pagination.totalPages,\n totalPages,\n ]);\n\n const handleCreateUrl = useCallback(\n (id: string, type: 'edit' | 'new' | 'view'): string => {\n let url = '';\n\n switch (type) {\n case 'new': {\n url = routeCreateApprovalRule?.(id) as string;\n break;\n }\n case 'edit': {\n url = routeEditApprovalRule?.(id) as string;\n break;\n }\n case 'view': {\n url = routeApprovalRuleDetails?.(id) as string;\n break;\n }\n }\n\n if (!isValidUrl(url ?? '')) return '#';\n\n return url;\n },\n [routeCreateApprovalRule, routeEditApprovalRule, routeApprovalRuleDetails]\n );\n\n const columns = useMemo(() => {\n return (\n setColumns?.(defaultApprovalRulesColumns) ??\n defaultApprovalRulesColumns.map((col) => ({\n ...col,\n label: t[col.key as keyof typeof t] || col.label,\n }))\n );\n }, [setColumns, t]);\n\n const handleDeleteRule = useCallback((e: Event, id: string) => {\n e.preventDefault();\n setLoading(true);\n deletePurchaseOrderApprovalRule(id)\n .then(() => {\n setShouldRefetch(true);\n })\n .finally(() => {\n setLoading(false);\n });\n }, []);\n\n const rows = useMemo(() => {\n const modifiedApprovalRules = approvalRules?.map((ar) => {\n const {\n isAdmin,\n permissions: { manageApprovalRules },\n } = permissions;\n\n return {\n ruleName: ar.name,\n createdBy: ar.createdBy,\n ruleType: (\n <Text\n id={`PurchaseOrders.purchaseOrdersTable.ruleTypes.${ar.condition?.attribute?.toLocaleLowerCase()}`}\n />\n ),\n status: (\n <Text\n id={`PurchaseOrders.purchaseOrdersTable.rulesStatus.${ar.status?.toLocaleLowerCase()}`}\n />\n ),\n appliesTo:\n ar?.appliesToRoles?.length <= 0\n ? t.appliesToAll\n : ar?.appliesToRoles?.map((role) => role.name).join(', '),\n approver: (\n <>\n {ar?.approverRoles?.map((role, idx) => (\n <div key={idx}>{role?.name}</div>\n ))}\n </>\n ),\n action:\n isAdmin || manageApprovalRules ? (\n <>\n <div style={{ display: 'flex', gap: '8px' }}>\n <a\n href={handleCreateUrl(ar.uid, 'edit')}\n aria-label={t.ariaLabelEditRule.replace(\n '{{ruleName}}',\n ar.name\n )}\n data-testid={`edit-approval-rule-${ar.uid}`}\n >\n {t.actionEdit}\n </a>\n <a\n data-testid={`delete-approval-rule-${ar.uid}`}\n href=\"#\"\n aria-label={t.ariaLabelDeleteRule.replace(\n '{{ruleName}}',\n ar.name\n )}\n onClick={(e) => handleDeleteRule(e, ar.uid)}\n >\n {t.actionDelete}\n </a>\n </div>\n </>\n ) : (\n <a\n data-testid={`view-approval-rule-${ar.uid}`}\n href={handleCreateUrl(ar.uid, 'view')}\n aria-label={t.ariaLabelViewRule.replace('{{ruleName}}', ar.name)}\n >\n {t.actionView}\n </a>\n ),\n };\n });\n\n return setRowsData\n ? setRowsData(modifiedApprovalRules)\n : modifiedApprovalRules;\n }, [\n approvalRules,\n setRowsData,\n permissions,\n t,\n handleCreateUrl,\n handleDeleteRule,\n ]);\n\n return {\n tableConfig: {\n columns,\n rows,\n },\n paginationConfig: {\n currentPage,\n totalPages,\n handlePageChange,\n },\n pageSizeConfig: {\n pageSizeOptionsList,\n onChange: handleChangePageSize,\n },\n totalCount,\n loading,\n handleCreateUrl,\n };\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { classes, Container } from '@adobe-commerce/elsie/lib';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport {\n PurchaseOrdersHeader,\n PurchaseOrdersTable,\n} from '@/b2b-purchase-order/components';\nimport { ApprovalRulesListProps } from '@/b2b-purchase-order/types/containers';\nimport {\n useApprovalRulesList,\n useCustomerRolePermissions,\n} from '@/b2b-purchase-order/hooks';\nimport {\n Button,\n Skeleton,\n SkeletonRow,\n} from '@adobe-commerce/elsie/components';\nimport { defaultPageSizeConfig } from '@/b2b-purchase-order/configs';\n\nexport const ApprovalRulesList: Container<ApprovalRulesListProps> = ({\n routeCreateApprovalRule,\n routeEditApprovalRule,\n routeApprovalRuleDetails,\n setColumns,\n setRowsData,\n className = '',\n withHeader = true,\n withWrapper = true,\n skeletonRowCount = 5,\n initialPageSize = defaultPageSizeConfig,\n}) => {\n const t = useText({\n headerText: 'PurchaseOrders.approvalRulesList.containerTitle',\n ruleName: 'PurchaseOrders.purchaseOrdersTable.tableColumns.ruleName',\n ruleType: 'PurchaseOrders.purchaseOrdersTable.tableColumns.ruleType',\n appliesTo: 'PurchaseOrders.purchaseOrdersTable.tableColumns.appliesTo',\n approver: 'PurchaseOrders.purchaseOrdersTable.tableColumns.approver',\n createdBy: 'PurchaseOrders.purchaseOrdersTable.tableColumns.createdBy',\n status: 'PurchaseOrders.purchaseOrdersTable.tableColumns.status',\n actionEdit: 'PurchaseOrders.purchaseOrdersTable.actionEdit',\n actionDelete: 'PurchaseOrders.purchaseOrdersTable.actionDelete',\n addNewRule: 'PurchaseOrders.approvalRulesList.buttons.newRule',\n actionView: 'PurchaseOrders.purchaseOrdersTable.actionView',\n appliesToAll: 'PurchaseOrders.purchaseOrdersTable.appliesToAll',\n emptyTitle: 'PurchaseOrders.approvalRulesList.emptyTitle',\n ariaLabelEditRule: 'PurchaseOrders.approvalRulesList.ariaLabel.editRule',\n ariaLabelDeleteRule:\n 'PurchaseOrders.approvalRulesList.ariaLabel.deleteRule',\n ariaLabelViewRule: 'PurchaseOrders.approvalRulesList.ariaLabel.viewRule',\n });\n\n const { permissions, loadingPermissions } = useCustomerRolePermissions();\n const {\n loading,\n tableConfig,\n paginationConfig,\n totalCount,\n pageSizeConfig,\n handleCreateUrl,\n } = useApprovalRulesList({\n routeCreateApprovalRule,\n routeEditApprovalRule,\n routeApprovalRuleDetails,\n setColumns,\n setRowsData,\n permissions,\n initialPageSize,\n t,\n });\n\n const {\n isAdmin,\n permissions: { manageApprovalRules },\n } = permissions;\n\n const renderFooterButton =\n isAdmin || manageApprovalRules ? (\n <Button\n variant=\"primary\"\n onClick={() => {\n window.location.href = handleCreateUrl('', 'new');\n }}\n data-testid=\"add-new-rule-button\"\n >\n {t.addNewRule}\n </Button>\n ) : null;\n\n const footerContent =\n loading || loadingPermissions ? (\n <Skeleton data-testid=\"approval-rules-skeleton\">\n <SkeletonRow variant=\"row\" size=\"small\" />\n </Skeleton>\n ) : (\n renderFooterButton\n );\n\n return (\n <div\n className={classes(['purchase-orders', className])}\n data-testid=\"purchase-orders-container\"\n >\n {withHeader ? <PurchaseOrdersHeader headerText={t.headerText} /> : null}\n <PurchaseOrdersTable\n totalCount={totalCount}\n columns={tableConfig.columns}\n rows={tableConfig.rows}\n paginationConfig={paginationConfig}\n loading={loading || loadingPermissions}\n skeletonRowCount={skeletonRowCount}\n pageSizeConfig={pageSizeConfig}\n emptyTitle={t.emptyTitle}\n withWrapper={withWrapper}\n footer={footerContent}\n />\n </div>\n );\n};\n"],"names":["defaultApprovalRulesColumns","DEFAULT_PAGE_SIZE","useApprovalRulesList","routeApprovalRuleDetails","routeCreateApprovalRule","routeEditApprovalRule","setColumns","setRowsData","initialPageSize","permissions","t","approvalRules","setApprovalRules","useState","shouldRefetch","setShouldRefetch","loading","setLoading","pageSizeOptionsList","setPageSizeOptionsList","pagination","setPagination","currentPage","totalPages","totalCount","handleChangePageSize","useCallback","event","size","prev","option","handlePageChange","page","useEffect","pageSize","_a","selectedPageSize","getPurchaseOrderApprovalRules","data","error","handleCreateUrl","id","type","url","isValidUrl","columns","useMemo","col","handleDeleteRule","e","deletePurchaseOrderApprovalRule","rows","modifiedApprovalRules","ar","isAdmin","manageApprovalRules","jsx","Text","_b","_c","_d","_e","role","Fragment","_f","idx","jsxs","ApprovalRulesList","className","withHeader","withWrapper","skeletonRowCount","defaultPageSizeConfig","useText","loadingPermissions","useCustomerRolePermissions","tableConfig","paginationConfig","pageSizeConfig","renderFooterButton","Button","footerContent","Skeleton","SkeletonRow","classes","PurchaseOrdersHeader","PurchaseOrdersTable"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
/*! Copyright 2025 Adobe
|
|
2
2
|
All Rights Reserved. */
|
|
3
|
-
import{jsxs as y,jsx as r}from"@dropins/tools/preact-jsx-runtime.js";import{classes as x}from"@dropins/tools/lib.js";import{P as w,d as N}from"../chunks/pageSize.config.js";import{P as S}from"../chunks/PurchaseOrdersHeader.js";import{P as D}from"../chunks/PurchaseOrdersTableActions.js";import"@dropins/tools/components.js";import{E as R,u as E}from"../chunks/usePurchaseOrders.js";import{u as j}from"../chunks/useCustomerRolePermissions.js";import"@dropins/tools/preact-hooks.js";import"@dropins/tools/event-bus.js";import"../chunks/FormLoader.js";import{useText as v}from"@dropins/tools/i18n.js";import"../chunks/rejectPurchaseOrders.js";import"../chunks/fetch-graphql.js";import"@dropins/tools/fetch-graphql.js";import"../chunks/fetch-error.js";import"../chunks/getPurchaseOrders.js";import"../chunks/case-converter.js";const
|
|
3
|
+
import{jsxs as y,jsx as r}from"@dropins/tools/preact-jsx-runtime.js";import{classes as x}from"@dropins/tools/lib.js";import{P as w,d as N}from"../chunks/pageSize.config.js";import{P as S}from"../chunks/PurchaseOrdersHeader.js";import{P as D}from"../chunks/PurchaseOrdersTableActions.js";import"@dropins/tools/components.js";import{E as R,u as E}from"../chunks/usePurchaseOrders.js";import{u as j}from"../chunks/useCustomerRolePermissions.js";import"@dropins/tools/preact-hooks.js";import"@dropins/tools/event-bus.js";import"../chunks/FormLoader.js";import{useText as v}from"@dropins/tools/i18n.js";import"../chunks/rejectPurchaseOrders.js";import"../chunks/fetch-graphql.js";import"@dropins/tools/fetch-graphql.js";import"../chunks/fetch-error.js";import"../chunks/getPurchaseOrders.js";import"../chunks/case-converter.js";import"../chunks/permissions.js";const Z=({initialPageSize:t=N,routePurchaseOrderDetails:o,setColumns:u,setRowsData:d,className:c="",withHeader:l=!0,withWrapper:i=!0,skeletonRowCount:n=5})=>{const m=R.COMPANY_PURCHASE_ORDERS,e=v({headerText:"PurchaseOrders.companyPurchaseOrders.containerTitle",actionView:"PurchaseOrders.purchaseOrdersTable.actionView",poNumber:"PurchaseOrders.purchaseOrdersTable.tableColumns.poNumber",orderNumber:"PurchaseOrders.purchaseOrdersTable.tableColumns.orderNumber",createdDate:"PurchaseOrders.purchaseOrdersTable.tableColumns.createdDate",updatedDate:"PurchaseOrders.purchaseOrdersTable.tableColumns.updatedDate",createdBy:"PurchaseOrders.purchaseOrdersTable.tableColumns.createdBy",status:"PurchaseOrders.purchaseOrdersTable.tableColumns.status",total:"PurchaseOrders.purchaseOrdersTable.tableColumns.total",action:"PurchaseOrders.purchaseOrdersTable.tableColumns.action",selectAllAriaLabel:"PurchaseOrders.purchaseOrdersTable.tableColumns.selectAllAriaLabel",noPurchaseOrders:"PurchaseOrders.companyPurchaseOrders.noPurchaseOrders"}),{permissions:p,loadingPermissions:h}=j(),{totalCount:O,loading:s,tableConfig:a,paginationConfig:P,pageSizeConfig:b,selectedOrderIds:C,handleRejectSelected:T,handleApproveSelected:f,isAdmin:g,alertMessageConfig:A}=E({view:m,routePurchaseOrderDetails:o,setColumns:u,setRowsData:d,initialPageSize:t,permissions:p,loadingPermissions:h,t:e});return y("div",{className:x(["company-purchase-orders",c]),"data-testid":"company-purchase-orders-container",children:[l?r(S,{headerText:e.headerText}):null,r(w,{header:g?r(D,{loading:s,selectedCount:C.length,handleRejectSelected:T,handleApproveSelected:f}):null,totalCount:O,columns:a.columns,rows:a.rows,paginationConfig:P,loading:s,skeletonRowCount:n,pageSizeConfig:b,emptyTitle:e.noPurchaseOrders,alertMessageConfig:A,withWrapper:i})]})};export{Z as CompanyPurchaseOrders,Z as default};
|
|
4
4
|
//# sourceMappingURL=CompanyPurchaseOrders.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CompanyPurchaseOrders.js","sources":["/@dropins/storefront-purchase-order/src/containers/CompanyPurchaseOrders/CompanyPurchaseOrders.tsx"],"sourcesContent":["/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { classes, Container } from '@adobe-commerce/elsie/lib';\nimport {\n PurchaseOrdersTable,\n PurchaseOrdersHeader,\n PurchaseOrdersTableActions,\n} from '@/b2b-purchase-order/components';\nimport {\n usePurchaseOrders,\n useCustomerRolePermissions,\n} from '@/b2b-purchase-order/hooks';\nimport { CompanyPurchaseOrdersProps } from '@/b2b-purchase-order/types/containers';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { EnumPurchaseOrdersView } from '@/b2b-purchase-order/types/api';\nimport { defaultPageSizeConfig } from '@/b2b-purchase-order/configs';\n\nexport const CompanyPurchaseOrders: Container<CompanyPurchaseOrdersProps> = ({\n initialPageSize = defaultPageSizeConfig,\n routePurchaseOrderDetails,\n setColumns,\n setRowsData,\n className = '',\n withHeader = true,\n withWrapper = true,\n skeletonRowCount = 5,\n}) => {\n const view = EnumPurchaseOrdersView.COMPANY_PURCHASE_ORDERS;\n\n const t = useText({\n headerText: 'PurchaseOrders.companyPurchaseOrders.containerTitle',\n actionView: 'PurchaseOrders.purchaseOrdersTable.actionView',\n poNumber: 'PurchaseOrders.purchaseOrdersTable.tableColumns.poNumber',\n orderNumber: 'PurchaseOrders.purchaseOrdersTable.tableColumns.orderNumber',\n createdDate: 'PurchaseOrders.purchaseOrdersTable.tableColumns.createdDate',\n updatedDate: 'PurchaseOrders.purchaseOrdersTable.tableColumns.updatedDate',\n createdBy: 'PurchaseOrders.purchaseOrdersTable.tableColumns.createdBy',\n status: 'PurchaseOrders.purchaseOrdersTable.tableColumns.status',\n total: 'PurchaseOrders.purchaseOrdersTable.tableColumns.total',\n action: 'PurchaseOrders.purchaseOrdersTable.tableColumns.action',\n selectAllAriaLabel:\n 'PurchaseOrders.purchaseOrdersTable.tableColumns.selectAllAriaLabel',\n noPurchaseOrders: 'PurchaseOrders.companyPurchaseOrders.noPurchaseOrders',\n });\n\n const { permissions, loadingPermissions } = useCustomerRolePermissions();\n const {\n totalCount,\n loading,\n tableConfig,\n paginationConfig,\n pageSizeConfig,\n selectedOrderIds,\n handleRejectSelected,\n handleApproveSelected,\n isAdmin,\n alertMessageConfig,\n } = usePurchaseOrders({\n view,\n routePurchaseOrderDetails,\n setColumns,\n setRowsData,\n initialPageSize,\n permissions,\n loadingPermissions,\n t,\n });\n\n return (\n <div\n className={classes(['company-purchase-orders', className])}\n data-testid=\"company-purchase-orders-container\"\n >\n {withHeader ? <PurchaseOrdersHeader headerText={t.headerText} /> : null}\n <PurchaseOrdersTable\n header={\n isAdmin ? (\n <PurchaseOrdersTableActions\n loading={loading}\n selectedCount={selectedOrderIds.length}\n handleRejectSelected={handleRejectSelected}\n handleApproveSelected={handleApproveSelected}\n />\n ) : null\n }\n totalCount={totalCount}\n columns={tableConfig.columns}\n rows={tableConfig.rows}\n paginationConfig={paginationConfig}\n loading={loading}\n skeletonRowCount={skeletonRowCount}\n pageSizeConfig={pageSizeConfig}\n emptyTitle={t.noPurchaseOrders}\n alertMessageConfig={alertMessageConfig}\n withWrapper={withWrapper}\n />\n </div>\n );\n};\n"],"names":["CompanyPurchaseOrders","initialPageSize","defaultPageSizeConfig","routePurchaseOrderDetails","setColumns","setRowsData","className","withHeader","withWrapper","skeletonRowCount","view","EnumPurchaseOrdersView","t","useText","permissions","loadingPermissions","useCustomerRolePermissions","totalCount","loading","tableConfig","paginationConfig","pageSizeConfig","selectedOrderIds","handleRejectSelected","handleApproveSelected","isAdmin","alertMessageConfig","usePurchaseOrders","jsxs","classes","jsx","PurchaseOrdersHeader","PurchaseOrdersTable","PurchaseOrdersTableActions"],"mappings":"
|
|
1
|
+
{"version":3,"file":"CompanyPurchaseOrders.js","sources":["/@dropins/storefront-purchase-order/src/containers/CompanyPurchaseOrders/CompanyPurchaseOrders.tsx"],"sourcesContent":["/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { classes, Container } from '@adobe-commerce/elsie/lib';\nimport {\n PurchaseOrdersTable,\n PurchaseOrdersHeader,\n PurchaseOrdersTableActions,\n} from '@/b2b-purchase-order/components';\nimport {\n usePurchaseOrders,\n useCustomerRolePermissions,\n} from '@/b2b-purchase-order/hooks';\nimport { CompanyPurchaseOrdersProps } from '@/b2b-purchase-order/types/containers';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { EnumPurchaseOrdersView } from '@/b2b-purchase-order/types/api';\nimport { defaultPageSizeConfig } from '@/b2b-purchase-order/configs';\n\nexport const CompanyPurchaseOrders: Container<CompanyPurchaseOrdersProps> = ({\n initialPageSize = defaultPageSizeConfig,\n routePurchaseOrderDetails,\n setColumns,\n setRowsData,\n className = '',\n withHeader = true,\n withWrapper = true,\n skeletonRowCount = 5,\n}) => {\n const view = EnumPurchaseOrdersView.COMPANY_PURCHASE_ORDERS;\n\n const t = useText({\n headerText: 'PurchaseOrders.companyPurchaseOrders.containerTitle',\n actionView: 'PurchaseOrders.purchaseOrdersTable.actionView',\n poNumber: 'PurchaseOrders.purchaseOrdersTable.tableColumns.poNumber',\n orderNumber: 'PurchaseOrders.purchaseOrdersTable.tableColumns.orderNumber',\n createdDate: 'PurchaseOrders.purchaseOrdersTable.tableColumns.createdDate',\n updatedDate: 'PurchaseOrders.purchaseOrdersTable.tableColumns.updatedDate',\n createdBy: 'PurchaseOrders.purchaseOrdersTable.tableColumns.createdBy',\n status: 'PurchaseOrders.purchaseOrdersTable.tableColumns.status',\n total: 'PurchaseOrders.purchaseOrdersTable.tableColumns.total',\n action: 'PurchaseOrders.purchaseOrdersTable.tableColumns.action',\n selectAllAriaLabel:\n 'PurchaseOrders.purchaseOrdersTable.tableColumns.selectAllAriaLabel',\n noPurchaseOrders: 'PurchaseOrders.companyPurchaseOrders.noPurchaseOrders',\n });\n\n const { permissions, loadingPermissions } = useCustomerRolePermissions();\n const {\n totalCount,\n loading,\n tableConfig,\n paginationConfig,\n pageSizeConfig,\n selectedOrderIds,\n handleRejectSelected,\n handleApproveSelected,\n isAdmin,\n alertMessageConfig,\n } = usePurchaseOrders({\n view,\n routePurchaseOrderDetails,\n setColumns,\n setRowsData,\n initialPageSize,\n permissions,\n loadingPermissions,\n t,\n });\n\n return (\n <div\n className={classes(['company-purchase-orders', className])}\n data-testid=\"company-purchase-orders-container\"\n >\n {withHeader ? <PurchaseOrdersHeader headerText={t.headerText} /> : null}\n <PurchaseOrdersTable\n header={\n isAdmin ? (\n <PurchaseOrdersTableActions\n loading={loading}\n selectedCount={selectedOrderIds.length}\n handleRejectSelected={handleRejectSelected}\n handleApproveSelected={handleApproveSelected}\n />\n ) : null\n }\n totalCount={totalCount}\n columns={tableConfig.columns}\n rows={tableConfig.rows}\n paginationConfig={paginationConfig}\n loading={loading}\n skeletonRowCount={skeletonRowCount}\n pageSizeConfig={pageSizeConfig}\n emptyTitle={t.noPurchaseOrders}\n alertMessageConfig={alertMessageConfig}\n withWrapper={withWrapper}\n />\n </div>\n );\n};\n"],"names":["CompanyPurchaseOrders","initialPageSize","defaultPageSizeConfig","routePurchaseOrderDetails","setColumns","setRowsData","className","withHeader","withWrapper","skeletonRowCount","view","EnumPurchaseOrdersView","t","useText","permissions","loadingPermissions","useCustomerRolePermissions","totalCount","loading","tableConfig","paginationConfig","pageSizeConfig","selectedOrderIds","handleRejectSelected","handleApproveSelected","isAdmin","alertMessageConfig","usePurchaseOrders","jsxs","classes","jsx","PurchaseOrdersHeader","PurchaseOrdersTable","PurchaseOrdersTableActions"],"mappings":"w1BAgCO,MAAMA,EAA+D,CAAC,CAC3E,gBAAAC,EAAkBC,EAClB,0BAAAC,EACA,WAAAC,EACA,YAAAC,EACA,UAAAC,EAAY,GACZ,WAAAC,EAAa,GACb,YAAAC,EAAc,GACd,iBAAAC,EAAmB,CACrB,IAAM,CACJ,MAAMC,EAAOC,EAAuB,wBAE9BC,EAAIC,EAAQ,CAChB,WAAY,sDACZ,WAAY,gDACZ,SAAU,2DACV,YAAa,8DACb,YAAa,8DACb,YAAa,8DACb,UAAW,4DACX,OAAQ,yDACR,MAAO,wDACP,OAAQ,yDACR,mBACE,qEACF,iBAAkB,uDAAA,CACnB,EAEK,CAAE,YAAAC,EAAa,mBAAAC,CAAA,EAAuBC,EAAA,EACtC,CACJ,WAAAC,EACA,QAAAC,EACA,YAAAC,EACA,iBAAAC,EACA,eAAAC,EACA,iBAAAC,EACA,qBAAAC,EACA,sBAAAC,EACA,QAAAC,EACA,mBAAAC,CAAA,EACEC,EAAkB,CACpB,KAAAjB,EACA,0BAAAP,EACA,WAAAC,EACA,YAAAC,EACA,gBAAAJ,EACA,YAAAa,EACA,mBAAAC,EACA,EAAAH,CAAA,CACD,EAED,OACEgB,EAAC,MAAA,CACC,UAAWC,EAAQ,CAAC,0BAA2BvB,CAAS,CAAC,EACzD,cAAY,oCAEX,SAAA,CAAAC,EAAauB,EAACC,EAAA,CAAqB,WAAYnB,EAAE,WAAY,EAAK,KACnEkB,EAACE,EAAA,CACC,OACEP,EACEK,EAACG,EAAA,CACC,QAAAf,EACA,cAAeI,EAAiB,OAChC,qBAAAC,EACA,sBAAAC,CAAA,CAAA,EAEA,KAEN,WAAAP,EACA,QAASE,EAAY,QACrB,KAAMA,EAAY,KAClB,iBAAAC,EACA,QAAAF,EACA,iBAAAT,EACA,eAAAY,EACA,WAAYT,EAAE,iBACd,mBAAAc,EACA,YAAAlB,CAAA,CAAA,CACF,CAAA,CAAA,CAGN"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
/*! Copyright 2025 Adobe
|
|
2
2
|
All Rights Reserved. */
|
|
3
|
-
import{jsxs as T,jsx as s}from"@dropins/tools/preact-jsx-runtime.js";import{classes as f}from"@dropins/tools/lib.js";import{P as g,d as x}from"../chunks/pageSize.config.js";import{P as w}from"../chunks/PurchaseOrdersHeader.js";import"../chunks/FormLoader.js";import"@dropins/tools/components.js";import{E as D,u as E}from"../chunks/usePurchaseOrders.js";import{u as N}from"../chunks/useCustomerRolePermissions.js";import"@dropins/tools/preact-hooks.js";import"@dropins/tools/event-bus.js";import{useText as R}from"@dropins/tools/i18n.js";import"../chunks/rejectPurchaseOrders.js";import"../chunks/fetch-graphql.js";import"@dropins/tools/fetch-graphql.js";import"../chunks/fetch-error.js";import"../chunks/getPurchaseOrders.js";import"../chunks/case-converter.js";const
|
|
3
|
+
import{jsxs as T,jsx as s}from"@dropins/tools/preact-jsx-runtime.js";import{classes as f}from"@dropins/tools/lib.js";import{P as g,d as x}from"../chunks/pageSize.config.js";import{P as w}from"../chunks/PurchaseOrdersHeader.js";import"../chunks/FormLoader.js";import"@dropins/tools/components.js";import{E as D,u as E}from"../chunks/usePurchaseOrders.js";import{u as N}from"../chunks/useCustomerRolePermissions.js";import"@dropins/tools/preact-hooks.js";import"@dropins/tools/event-bus.js";import{useText as R}from"@dropins/tools/i18n.js";import"../chunks/rejectPurchaseOrders.js";import"../chunks/fetch-graphql.js";import"@dropins/tools/fetch-graphql.js";import"../chunks/fetch-error.js";import"../chunks/getPurchaseOrders.js";import"../chunks/case-converter.js";import"../chunks/permissions.js";const K=({initialPageSize:a=x,routePurchaseOrderDetails:t,setColumns:o,setRowsData:u,className:d="",withHeader:c=!0,withWrapper:i=!0,skeletonRowCount:m=5})=>{const l=D.CUSTOMER_PURCHASE_ORDERS,r=R({headerText:"PurchaseOrders.customerPurchaseOrders.containerTitle",actionView:"PurchaseOrders.purchaseOrdersTable.actionView",poNumber:"PurchaseOrders.purchaseOrdersTable.tableColumns.poNumber",orderNumber:"PurchaseOrders.purchaseOrdersTable.tableColumns.orderNumber",createdDate:"PurchaseOrders.purchaseOrdersTable.tableColumns.createdDate",updatedDate:"PurchaseOrders.purchaseOrdersTable.tableColumns.updatedDate",createdBy:"PurchaseOrders.purchaseOrdersTable.tableColumns.createdBy",status:"PurchaseOrders.purchaseOrdersTable.tableColumns.status",total:"PurchaseOrders.purchaseOrdersTable.tableColumns.total",action:"PurchaseOrders.purchaseOrdersTable.tableColumns.action",noPurchaseOrders:"PurchaseOrders.customerPurchaseOrders.noPurchaseOrders"}),{permissions:n,loadingPermissions:p}=N(),{pageSizeConfig:h,loading:O,paginationConfig:P,tableConfig:e,totalCount:b,alertMessageConfig:C}=E({view:l,routePurchaseOrderDetails:t,setColumns:o,setRowsData:u,initialPageSize:a,permissions:n,loadingPermissions:p,t:r});return T("div",{className:f(["purchase-orders",d]),"data-testid":"purchase-orders-container",children:[c?s(w,{headerText:r.headerText}):null,s(g,{totalCount:b,columns:e.columns,rows:e.rows,paginationConfig:P,loading:O,skeletonRowCount:m,pageSizeConfig:h,emptyTitle:r.noPurchaseOrders,alertMessageConfig:C,withWrapper:i})]})};export{K as CustomerPurchaseOrders,K as default};
|
|
4
4
|
//# sourceMappingURL=CustomerPurchaseOrders.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomerPurchaseOrders.js","sources":["/@dropins/storefront-purchase-order/src/containers/CustomerPurchaseOrders/CustomerPurchaseOrders.tsx"],"sourcesContent":["/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { classes, Container } from '@adobe-commerce/elsie/lib';\nimport {\n PurchaseOrdersTable,\n PurchaseOrdersHeader,\n} from '@/b2b-purchase-order/components';\nimport {\n usePurchaseOrders,\n useCustomerRolePermissions,\n} from '@/b2b-purchase-order/hooks';\nimport { CustomerPurchaseOrdersProps } from '@/b2b-purchase-order/types/containers';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { defaultPageSizeConfig } from '@/b2b-purchase-order/configs';\nimport { EnumPurchaseOrdersView } from '@/b2b-purchase-order/types/api';\n\nexport const CustomerPurchaseOrders: Container<CustomerPurchaseOrdersProps> = ({\n initialPageSize = defaultPageSizeConfig,\n routePurchaseOrderDetails,\n setColumns,\n setRowsData,\n className = '',\n withHeader = true,\n withWrapper = true,\n skeletonRowCount = 5,\n}) => {\n const view = EnumPurchaseOrdersView.CUSTOMER_PURCHASE_ORDERS;\n\n const t = useText({\n headerText: 'PurchaseOrders.customerPurchaseOrders.containerTitle',\n actionView: 'PurchaseOrders.purchaseOrdersTable.actionView',\n poNumber: 'PurchaseOrders.purchaseOrdersTable.tableColumns.poNumber',\n orderNumber: 'PurchaseOrders.purchaseOrdersTable.tableColumns.orderNumber',\n createdDate: 'PurchaseOrders.purchaseOrdersTable.tableColumns.createdDate',\n updatedDate: 'PurchaseOrders.purchaseOrdersTable.tableColumns.updatedDate',\n createdBy: 'PurchaseOrders.purchaseOrdersTable.tableColumns.createdBy',\n status: 'PurchaseOrders.purchaseOrdersTable.tableColumns.status',\n total: 'PurchaseOrders.purchaseOrdersTable.tableColumns.total',\n action: 'PurchaseOrders.purchaseOrdersTable.tableColumns.action',\n noPurchaseOrders: 'PurchaseOrders.customerPurchaseOrders.noPurchaseOrders',\n });\n\n const { permissions, loadingPermissions } = useCustomerRolePermissions();\n const {\n pageSizeConfig,\n loading,\n paginationConfig,\n tableConfig,\n totalCount,\n alertMessageConfig,\n } = usePurchaseOrders({\n view,\n routePurchaseOrderDetails,\n setColumns,\n setRowsData,\n initialPageSize,\n permissions,\n loadingPermissions,\n t,\n });\n\n return (\n <div\n className={classes(['purchase-orders', className])}\n data-testid=\"purchase-orders-container\"\n >\n {withHeader ? <PurchaseOrdersHeader headerText={t.headerText} /> : null}\n <PurchaseOrdersTable\n totalCount={totalCount}\n columns={tableConfig.columns}\n rows={tableConfig.rows}\n paginationConfig={paginationConfig}\n loading={loading}\n skeletonRowCount={skeletonRowCount}\n pageSizeConfig={pageSizeConfig}\n emptyTitle={t.noPurchaseOrders}\n alertMessageConfig={alertMessageConfig}\n withWrapper={withWrapper}\n />\n </div>\n );\n};\n"],"names":["CustomerPurchaseOrders","initialPageSize","defaultPageSizeConfig","routePurchaseOrderDetails","setColumns","setRowsData","className","withHeader","withWrapper","skeletonRowCount","view","EnumPurchaseOrdersView","t","useText","permissions","loadingPermissions","useCustomerRolePermissions","pageSizeConfig","loading","paginationConfig","tableConfig","totalCount","alertMessageConfig","usePurchaseOrders","jsxs","classes","jsx","PurchaseOrdersHeader","PurchaseOrdersTable"],"mappings":"
|
|
1
|
+
{"version":3,"file":"CustomerPurchaseOrders.js","sources":["/@dropins/storefront-purchase-order/src/containers/CustomerPurchaseOrders/CustomerPurchaseOrders.tsx"],"sourcesContent":["/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { classes, Container } from '@adobe-commerce/elsie/lib';\nimport {\n PurchaseOrdersTable,\n PurchaseOrdersHeader,\n} from '@/b2b-purchase-order/components';\nimport {\n usePurchaseOrders,\n useCustomerRolePermissions,\n} from '@/b2b-purchase-order/hooks';\nimport { CustomerPurchaseOrdersProps } from '@/b2b-purchase-order/types/containers';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { defaultPageSizeConfig } from '@/b2b-purchase-order/configs';\nimport { EnumPurchaseOrdersView } from '@/b2b-purchase-order/types/api';\n\nexport const CustomerPurchaseOrders: Container<CustomerPurchaseOrdersProps> = ({\n initialPageSize = defaultPageSizeConfig,\n routePurchaseOrderDetails,\n setColumns,\n setRowsData,\n className = '',\n withHeader = true,\n withWrapper = true,\n skeletonRowCount = 5,\n}) => {\n const view = EnumPurchaseOrdersView.CUSTOMER_PURCHASE_ORDERS;\n\n const t = useText({\n headerText: 'PurchaseOrders.customerPurchaseOrders.containerTitle',\n actionView: 'PurchaseOrders.purchaseOrdersTable.actionView',\n poNumber: 'PurchaseOrders.purchaseOrdersTable.tableColumns.poNumber',\n orderNumber: 'PurchaseOrders.purchaseOrdersTable.tableColumns.orderNumber',\n createdDate: 'PurchaseOrders.purchaseOrdersTable.tableColumns.createdDate',\n updatedDate: 'PurchaseOrders.purchaseOrdersTable.tableColumns.updatedDate',\n createdBy: 'PurchaseOrders.purchaseOrdersTable.tableColumns.createdBy',\n status: 'PurchaseOrders.purchaseOrdersTable.tableColumns.status',\n total: 'PurchaseOrders.purchaseOrdersTable.tableColumns.total',\n action: 'PurchaseOrders.purchaseOrdersTable.tableColumns.action',\n noPurchaseOrders: 'PurchaseOrders.customerPurchaseOrders.noPurchaseOrders',\n });\n\n const { permissions, loadingPermissions } = useCustomerRolePermissions();\n const {\n pageSizeConfig,\n loading,\n paginationConfig,\n tableConfig,\n totalCount,\n alertMessageConfig,\n } = usePurchaseOrders({\n view,\n routePurchaseOrderDetails,\n setColumns,\n setRowsData,\n initialPageSize,\n permissions,\n loadingPermissions,\n t,\n });\n\n return (\n <div\n className={classes(['purchase-orders', className])}\n data-testid=\"purchase-orders-container\"\n >\n {withHeader ? <PurchaseOrdersHeader headerText={t.headerText} /> : null}\n <PurchaseOrdersTable\n totalCount={totalCount}\n columns={tableConfig.columns}\n rows={tableConfig.rows}\n paginationConfig={paginationConfig}\n loading={loading}\n skeletonRowCount={skeletonRowCount}\n pageSizeConfig={pageSizeConfig}\n emptyTitle={t.noPurchaseOrders}\n alertMessageConfig={alertMessageConfig}\n withWrapper={withWrapper}\n />\n </div>\n );\n};\n"],"names":["CustomerPurchaseOrders","initialPageSize","defaultPageSizeConfig","routePurchaseOrderDetails","setColumns","setRowsData","className","withHeader","withWrapper","skeletonRowCount","view","EnumPurchaseOrdersView","t","useText","permissions","loadingPermissions","useCustomerRolePermissions","pageSizeConfig","loading","paginationConfig","tableConfig","totalCount","alertMessageConfig","usePurchaseOrders","jsxs","classes","jsx","PurchaseOrdersHeader","PurchaseOrdersTable"],"mappings":"4xBA+BO,MAAMA,EAAiE,CAAC,CAC7E,gBAAAC,EAAkBC,EAClB,0BAAAC,EACA,WAAAC,EACA,YAAAC,EACA,UAAAC,EAAY,GACZ,WAAAC,EAAa,GACb,YAAAC,EAAc,GACd,iBAAAC,EAAmB,CACrB,IAAM,CACJ,MAAMC,EAAOC,EAAuB,yBAE9BC,EAAIC,EAAQ,CAChB,WAAY,uDACZ,WAAY,gDACZ,SAAU,2DACV,YAAa,8DACb,YAAa,8DACb,YAAa,8DACb,UAAW,4DACX,OAAQ,yDACR,MAAO,wDACP,OAAQ,yDACR,iBAAkB,wDAAA,CACnB,EAEK,CAAE,YAAAC,EAAa,mBAAAC,CAAA,EAAuBC,EAAA,EACtC,CACJ,eAAAC,EACA,QAAAC,EACA,iBAAAC,EACA,YAAAC,EACA,WAAAC,EACA,mBAAAC,CAAA,EACEC,EAAkB,CACpB,KAAAb,EACA,0BAAAP,EACA,WAAAC,EACA,YAAAC,EACA,gBAAAJ,EACA,YAAAa,EACA,mBAAAC,EACA,EAAAH,CAAA,CACD,EAED,OACEY,EAAC,MAAA,CACC,UAAWC,EAAQ,CAAC,kBAAmBnB,CAAS,CAAC,EACjD,cAAY,4BAEX,SAAA,CAAAC,EAAamB,EAACC,EAAA,CAAqB,WAAYf,EAAE,WAAY,EAAK,KACnEc,EAACE,EAAA,CACC,WAAAP,EACA,QAASD,EAAY,QACrB,KAAMA,EAAY,KAClB,iBAAAD,EACA,QAAAD,EACA,iBAAAT,EACA,eAAAQ,EACA,WAAYL,EAAE,iBACd,mBAAAU,EACA,YAAAd,CAAA,CAAA,CACF,CAAA,CAAA,CAGN"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
/*! Copyright 2025 Adobe
|
|
2
2
|
All Rights Reserved. */
|
|
3
|
-
import{jsxs as v,jsx as r}from"@dropins/tools/preact-jsx-runtime.js";import{classes as R}from"@dropins/tools/lib.js";import{P as D,d as M}from"../chunks/pageSize.config.js";import{P as j}from"../chunks/PurchaseOrdersHeader.js";import{P as w}from"../chunks/PurchaseOrdersTableActions.js";import"@dropins/tools/components.js";import{E as x,u as E}from"../chunks/usePurchaseOrders.js";import{u as S}from"../chunks/useCustomerRolePermissions.js";import"@dropins/tools/preact-hooks.js";import"@dropins/tools/event-bus.js";import"../chunks/FormLoader.js";import{useText as q}from"@dropins/tools/i18n.js";import"../chunks/rejectPurchaseOrders.js";import"../chunks/fetch-graphql.js";import"@dropins/tools/fetch-graphql.js";import"../chunks/fetch-error.js";import"../chunks/getPurchaseOrders.js";import"../chunks/case-converter.js";const
|
|
3
|
+
import{jsxs as v,jsx as r}from"@dropins/tools/preact-jsx-runtime.js";import{classes as R}from"@dropins/tools/lib.js";import{P as D,d as M}from"../chunks/pageSize.config.js";import{P as j}from"../chunks/PurchaseOrdersHeader.js";import{P as w}from"../chunks/PurchaseOrdersTableActions.js";import"@dropins/tools/components.js";import{E as x,u as E}from"../chunks/usePurchaseOrders.js";import{u as S}from"../chunks/useCustomerRolePermissions.js";import"@dropins/tools/preact-hooks.js";import"@dropins/tools/event-bus.js";import"../chunks/FormLoader.js";import{useText as q}from"@dropins/tools/i18n.js";import"../chunks/rejectPurchaseOrders.js";import"../chunks/fetch-graphql.js";import"@dropins/tools/fetch-graphql.js";import"../chunks/fetch-error.js";import"../chunks/getPurchaseOrders.js";import"../chunks/case-converter.js";import"../chunks/permissions.js";const Z=({initialPageSize:o=M,routePurchaseOrderDetails:l,setColumns:d,setRowsData:u,className:c="",withHeader:i=!0,withWrapper:p=!0,skeletonRowCount:n=5})=>{const h=x.CUSTOMER_APPROVAL_PURCHASE_ORDERS,e=q({headerText:"PurchaseOrders.requireApprovalPurchaseOrders.containerTitle",actionView:"PurchaseOrders.purchaseOrdersTable.actionView",poNumber:"PurchaseOrders.purchaseOrdersTable.tableColumns.poNumber",orderNumber:"PurchaseOrders.purchaseOrdersTable.tableColumns.orderNumber",createdDate:"PurchaseOrders.purchaseOrdersTable.tableColumns.createdDate",updatedDate:"PurchaseOrders.purchaseOrdersTable.tableColumns.updatedDate",createdBy:"PurchaseOrders.purchaseOrdersTable.tableColumns.createdBy",status:"PurchaseOrders.purchaseOrdersTable.tableColumns.status",total:"PurchaseOrders.purchaseOrdersTable.tableColumns.total",action:"PurchaseOrders.purchaseOrdersTable.tableColumns.action",selectAllAriaLabel:"PurchaseOrders.purchaseOrdersTable.tableColumns.selectAllAriaLabel",noPurchaseOrders:"PurchaseOrders.requireApprovalPurchaseOrders.noPurchaseOrders",alertHeaderApprove:"PurchaseOrders.alertMessages.header.approve",alertHeaderReject:"PurchaseOrders.alertMessages.header.reject",alertHeaderError:"PurchaseOrders.alertMessages.header.error",alertDescriptionApprove:"PurchaseOrders.alertMessages.description.approve",alertDescriptionReject:"PurchaseOrders.alertMessages.description.reject",alertDescriptionError:"PurchaseOrders.alertMessages.description.error"}),{permissions:m,loadingPermissions:O}=S(),{totalCount:s,loading:a,tableConfig:t,paginationConfig:P,pageSizeConfig:b,selectedOrderIds:C,handleRejectSelected:T,handleApproveSelected:g,isRequireApprovalPOsView:f,alertMessageConfig:A}=E({view:h,routePurchaseOrderDetails:l,setColumns:d,setRowsData:u,initialPageSize:o,permissions:m,loadingPermissions:O,t:e});return v("div",{className:R(["require-approval-purchase-orders",c]),"data-testid":"require-approval-purchase-orders-container",children:[i?r(j,{headerText:e.headerText}):null,r(D,{header:f&&s>0?r(w,{loading:a,selectedCount:C.length,handleRejectSelected:T,handleApproveSelected:g}):null,totalCount:s,columns:t.columns,rows:t.rows,paginationConfig:P,loading:a,skeletonRowCount:n,pageSizeConfig:b,emptyTitle:e.noPurchaseOrders,alertMessageConfig:A,withWrapper:p})]})};export{Z as RequireApprovalPurchaseOrders,Z as default};
|
|
4
4
|
//# sourceMappingURL=RequireApprovalPurchaseOrders.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RequireApprovalPurchaseOrders.js","sources":["/@dropins/storefront-purchase-order/src/containers/RequireApprovalPurchaseOrders/RequireApprovalPurchaseOrders.tsx"],"sourcesContent":["/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { classes, Container } from '@adobe-commerce/elsie/lib';\nimport {\n PurchaseOrdersTable,\n PurchaseOrdersHeader,\n PurchaseOrdersTableActions,\n} from '@/b2b-purchase-order/components';\nimport {\n usePurchaseOrders,\n useCustomerRolePermissions,\n} from '@/b2b-purchase-order/hooks';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { defaultPageSizeConfig } from '@/b2b-purchase-order/configs';\nimport { EnumPurchaseOrdersView } from '@/b2b-purchase-order/types/api';\nimport { RequireApprovalPurchaseOrdersProps } from '@/b2b-purchase-order/types/containers';\n\nexport const RequireApprovalPurchaseOrders: Container<\n RequireApprovalPurchaseOrdersProps\n> = ({\n initialPageSize = defaultPageSizeConfig,\n routePurchaseOrderDetails,\n setColumns,\n setRowsData,\n className = '',\n withHeader = true,\n withWrapper = true,\n skeletonRowCount = 5,\n}) => {\n const view = EnumPurchaseOrdersView.CUSTOMER_APPROVAL_PURCHASE_ORDERS;\n\n const t = useText({\n headerText: 'PurchaseOrders.requireApprovalPurchaseOrders.containerTitle',\n actionView: 'PurchaseOrders.purchaseOrdersTable.actionView',\n poNumber: 'PurchaseOrders.purchaseOrdersTable.tableColumns.poNumber',\n orderNumber: 'PurchaseOrders.purchaseOrdersTable.tableColumns.orderNumber',\n createdDate: 'PurchaseOrders.purchaseOrdersTable.tableColumns.createdDate',\n updatedDate: 'PurchaseOrders.purchaseOrdersTable.tableColumns.updatedDate',\n createdBy: 'PurchaseOrders.purchaseOrdersTable.tableColumns.createdBy',\n status: 'PurchaseOrders.purchaseOrdersTable.tableColumns.status',\n total: 'PurchaseOrders.purchaseOrdersTable.tableColumns.total',\n action: 'PurchaseOrders.purchaseOrdersTable.tableColumns.action',\n selectAllAriaLabel:\n 'PurchaseOrders.purchaseOrdersTable.tableColumns.selectAllAriaLabel',\n noPurchaseOrders:\n 'PurchaseOrders.requireApprovalPurchaseOrders.noPurchaseOrders',\n alertHeaderApprove: 'PurchaseOrders.alertMessages.header.approve',\n alertHeaderReject: 'PurchaseOrders.alertMessages.header.reject',\n alertHeaderError: 'PurchaseOrders.alertMessages.header.error',\n alertDescriptionApprove: 'PurchaseOrders.alertMessages.description.approve',\n alertDescriptionReject: 'PurchaseOrders.alertMessages.description.reject',\n alertDescriptionError: 'PurchaseOrders.alertMessages.description.error',\n });\n\n const { permissions, loadingPermissions } = useCustomerRolePermissions();\n const {\n totalCount,\n loading,\n tableConfig,\n paginationConfig,\n pageSizeConfig,\n selectedOrderIds,\n handleRejectSelected,\n handleApproveSelected,\n isRequireApprovalPOsView,\n alertMessageConfig,\n } = usePurchaseOrders({\n view,\n routePurchaseOrderDetails,\n setColumns,\n setRowsData,\n initialPageSize,\n permissions,\n loadingPermissions,\n t,\n });\n\n return (\n <div\n className={classes(['require-approval-purchase-orders', className])}\n data-testid=\"require-approval-purchase-orders-container\"\n >\n {withHeader ? <PurchaseOrdersHeader headerText={t.headerText} /> : null}\n <PurchaseOrdersTable\n header={\n isRequireApprovalPOsView && totalCount > 0 ? (\n <PurchaseOrdersTableActions\n loading={loading}\n selectedCount={selectedOrderIds.length}\n handleRejectSelected={handleRejectSelected}\n handleApproveSelected={handleApproveSelected}\n />\n ) : null\n }\n totalCount={totalCount}\n columns={tableConfig.columns}\n rows={tableConfig.rows}\n paginationConfig={paginationConfig}\n loading={loading}\n skeletonRowCount={skeletonRowCount}\n pageSizeConfig={pageSizeConfig}\n emptyTitle={t.noPurchaseOrders}\n alertMessageConfig={alertMessageConfig}\n withWrapper={withWrapper}\n />\n </div>\n );\n};\n"],"names":["RequireApprovalPurchaseOrders","initialPageSize","defaultPageSizeConfig","routePurchaseOrderDetails","setColumns","setRowsData","className","withHeader","withWrapper","skeletonRowCount","view","EnumPurchaseOrdersView","t","useText","permissions","loadingPermissions","useCustomerRolePermissions","totalCount","loading","tableConfig","paginationConfig","pageSizeConfig","selectedOrderIds","handleRejectSelected","handleApproveSelected","isRequireApprovalPOsView","alertMessageConfig","usePurchaseOrders","jsxs","classes","jsx","PurchaseOrdersHeader","PurchaseOrdersTable","PurchaseOrdersTableActions"],"mappings":"
|
|
1
|
+
{"version":3,"file":"RequireApprovalPurchaseOrders.js","sources":["/@dropins/storefront-purchase-order/src/containers/RequireApprovalPurchaseOrders/RequireApprovalPurchaseOrders.tsx"],"sourcesContent":["/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { classes, Container } from '@adobe-commerce/elsie/lib';\nimport {\n PurchaseOrdersTable,\n PurchaseOrdersHeader,\n PurchaseOrdersTableActions,\n} from '@/b2b-purchase-order/components';\nimport {\n usePurchaseOrders,\n useCustomerRolePermissions,\n} from '@/b2b-purchase-order/hooks';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { defaultPageSizeConfig } from '@/b2b-purchase-order/configs';\nimport { EnumPurchaseOrdersView } from '@/b2b-purchase-order/types/api';\nimport { RequireApprovalPurchaseOrdersProps } from '@/b2b-purchase-order/types/containers';\n\nexport const RequireApprovalPurchaseOrders: Container<\n RequireApprovalPurchaseOrdersProps\n> = ({\n initialPageSize = defaultPageSizeConfig,\n routePurchaseOrderDetails,\n setColumns,\n setRowsData,\n className = '',\n withHeader = true,\n withWrapper = true,\n skeletonRowCount = 5,\n}) => {\n const view = EnumPurchaseOrdersView.CUSTOMER_APPROVAL_PURCHASE_ORDERS;\n\n const t = useText({\n headerText: 'PurchaseOrders.requireApprovalPurchaseOrders.containerTitle',\n actionView: 'PurchaseOrders.purchaseOrdersTable.actionView',\n poNumber: 'PurchaseOrders.purchaseOrdersTable.tableColumns.poNumber',\n orderNumber: 'PurchaseOrders.purchaseOrdersTable.tableColumns.orderNumber',\n createdDate: 'PurchaseOrders.purchaseOrdersTable.tableColumns.createdDate',\n updatedDate: 'PurchaseOrders.purchaseOrdersTable.tableColumns.updatedDate',\n createdBy: 'PurchaseOrders.purchaseOrdersTable.tableColumns.createdBy',\n status: 'PurchaseOrders.purchaseOrdersTable.tableColumns.status',\n total: 'PurchaseOrders.purchaseOrdersTable.tableColumns.total',\n action: 'PurchaseOrders.purchaseOrdersTable.tableColumns.action',\n selectAllAriaLabel:\n 'PurchaseOrders.purchaseOrdersTable.tableColumns.selectAllAriaLabel',\n noPurchaseOrders:\n 'PurchaseOrders.requireApprovalPurchaseOrders.noPurchaseOrders',\n alertHeaderApprove: 'PurchaseOrders.alertMessages.header.approve',\n alertHeaderReject: 'PurchaseOrders.alertMessages.header.reject',\n alertHeaderError: 'PurchaseOrders.alertMessages.header.error',\n alertDescriptionApprove: 'PurchaseOrders.alertMessages.description.approve',\n alertDescriptionReject: 'PurchaseOrders.alertMessages.description.reject',\n alertDescriptionError: 'PurchaseOrders.alertMessages.description.error',\n });\n\n const { permissions, loadingPermissions } = useCustomerRolePermissions();\n const {\n totalCount,\n loading,\n tableConfig,\n paginationConfig,\n pageSizeConfig,\n selectedOrderIds,\n handleRejectSelected,\n handleApproveSelected,\n isRequireApprovalPOsView,\n alertMessageConfig,\n } = usePurchaseOrders({\n view,\n routePurchaseOrderDetails,\n setColumns,\n setRowsData,\n initialPageSize,\n permissions,\n loadingPermissions,\n t,\n });\n\n return (\n <div\n className={classes(['require-approval-purchase-orders', className])}\n data-testid=\"require-approval-purchase-orders-container\"\n >\n {withHeader ? <PurchaseOrdersHeader headerText={t.headerText} /> : null}\n <PurchaseOrdersTable\n header={\n isRequireApprovalPOsView && totalCount > 0 ? (\n <PurchaseOrdersTableActions\n loading={loading}\n selectedCount={selectedOrderIds.length}\n handleRejectSelected={handleRejectSelected}\n handleApproveSelected={handleApproveSelected}\n />\n ) : null\n }\n totalCount={totalCount}\n columns={tableConfig.columns}\n rows={tableConfig.rows}\n paginationConfig={paginationConfig}\n loading={loading}\n skeletonRowCount={skeletonRowCount}\n pageSizeConfig={pageSizeConfig}\n emptyTitle={t.noPurchaseOrders}\n alertMessageConfig={alertMessageConfig}\n withWrapper={withWrapper}\n />\n </div>\n );\n};\n"],"names":["RequireApprovalPurchaseOrders","initialPageSize","defaultPageSizeConfig","routePurchaseOrderDetails","setColumns","setRowsData","className","withHeader","withWrapper","skeletonRowCount","view","EnumPurchaseOrdersView","t","useText","permissions","loadingPermissions","useCustomerRolePermissions","totalCount","loading","tableConfig","paginationConfig","pageSizeConfig","selectedOrderIds","handleRejectSelected","handleApproveSelected","isRequireApprovalPOsView","alertMessageConfig","usePurchaseOrders","jsxs","classes","jsx","PurchaseOrdersHeader","PurchaseOrdersTable","PurchaseOrdersTableActions"],"mappings":"w1BAgCO,MAAMA,EAET,CAAC,CACH,gBAAAC,EAAkBC,EAClB,0BAAAC,EACA,WAAAC,EACA,YAAAC,EACA,UAAAC,EAAY,GACZ,WAAAC,EAAa,GACb,YAAAC,EAAc,GACd,iBAAAC,EAAmB,CACrB,IAAM,CACJ,MAAMC,EAAOC,EAAuB,kCAE9BC,EAAIC,EAAQ,CAChB,WAAY,8DACZ,WAAY,gDACZ,SAAU,2DACV,YAAa,8DACb,YAAa,8DACb,YAAa,8DACb,UAAW,4DACX,OAAQ,yDACR,MAAO,wDACP,OAAQ,yDACR,mBACE,qEACF,iBACE,gEACF,mBAAoB,8CACpB,kBAAmB,6CACnB,iBAAkB,4CAClB,wBAAyB,mDACzB,uBAAwB,kDACxB,sBAAuB,gDAAA,CACxB,EAEK,CAAE,YAAAC,EAAa,mBAAAC,CAAA,EAAuBC,EAAA,EACtC,CACJ,WAAAC,EACA,QAAAC,EACA,YAAAC,EACA,iBAAAC,EACA,eAAAC,EACA,iBAAAC,EACA,qBAAAC,EACA,sBAAAC,EACA,yBAAAC,EACA,mBAAAC,CAAA,EACEC,EAAkB,CACpB,KAAAjB,EACA,0BAAAP,EACA,WAAAC,EACA,YAAAC,EACA,gBAAAJ,EACA,YAAAa,EACA,mBAAAC,EACA,EAAAH,CAAA,CACD,EAED,OACEgB,EAAC,MAAA,CACC,UAAWC,EAAQ,CAAC,mCAAoCvB,CAAS,CAAC,EAClE,cAAY,6CAEX,SAAA,CAAAC,EAAauB,EAACC,EAAA,CAAqB,WAAYnB,EAAE,WAAY,EAAK,KACnEkB,EAACE,EAAA,CACC,OACEP,GAA4BR,EAAa,EACvCa,EAACG,EAAA,CACC,QAAAf,EACA,cAAeI,EAAiB,OAChC,qBAAAC,EACA,sBAAAC,CAAA,CAAA,EAEA,KAEN,WAAAP,EACA,QAASE,EAAY,QACrB,KAAMA,EAAY,KAClB,iBAAAC,EACA,QAAAF,EACA,iBAAAT,EACA,eAAAY,EACA,WAAYT,EAAE,iBACd,mBAAAc,EACA,YAAAlB,CAAA,CAAA,CACF,CAAA,CAAA,CAGN"}
|
|
@@ -1,12 +1,8 @@
|
|
|
1
1
|
export declare const mockPermissions: {
|
|
2
|
+
[x: string]: boolean;
|
|
2
3
|
all: boolean;
|
|
3
4
|
'Magento_Company::index': boolean;
|
|
4
5
|
'Magento_Sales::all': boolean;
|
|
5
|
-
'Magento_PurchaseOrder::all': boolean;
|
|
6
|
-
'Magento_PurchaseOrder::view_purchase_orders': boolean;
|
|
7
|
-
'Magento_PurchaseOrderRule::super_approve_purchase_order': boolean;
|
|
8
6
|
'Magento_Company::user_management': boolean;
|
|
9
|
-
'Magento_PurchaseOrderRule::view_approval_rules': boolean;
|
|
10
|
-
'Magento_PurchaseOrderRule::manage_approval_rules': boolean;
|
|
11
7
|
};
|
|
12
8
|
//# sourceMappingURL=events-data.d.ts.map
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name": "@dropins/storefront-purchase-order", "version": "0.0.5-
|
|
1
|
+
{"name": "@dropins/storefront-purchase-order", "version": "0.0.5-alpha6", "@dropins/tools": "^1.6.0-alpha2", "license": "SEE LICENSE IN LICENSE.md"}
|