@dropins/storefront-requisition-list 1.0.0-beta2 → 1.0.0-beta4

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.
Files changed (39) hide show
  1. package/api/fragments/RequisitionListItemsFragment.graphql.d.ts +1 -1
  2. package/api/index.d.ts +1 -0
  3. package/api/refineProduct/enrichConfigurableProducts.d.ts +10 -0
  4. package/api/refineProduct/index.d.ts +18 -0
  5. package/api.js +2 -2
  6. package/api.js.map +1 -1
  7. package/chunks/PaginationItemsCounter.js +4 -0
  8. package/chunks/PaginationItemsCounter.js.map +1 -0
  9. package/chunks/RequisitionListView.js +1 -1
  10. package/chunks/RequisitionListView.js.map +1 -1
  11. package/chunks/addRequisitionListItemsToCart.js +11 -37
  12. package/chunks/addRequisitionListItemsToCart.js.map +1 -1
  13. package/chunks/getRequisitionLists.js +3 -3
  14. package/chunks/getRequisitionLists.js.map +1 -1
  15. package/chunks/updateRequisitionList.js +34 -6
  16. package/chunks/updateRequisitionList.js.map +1 -1
  17. package/components/PaginationItemsCounter/PaginationItemsCounter.d.ts +10 -0
  18. package/components/PaginationItemsCounter/index.d.ts +19 -0
  19. package/components/ProductListTable/ProductListTable.d.ts +1 -1
  20. package/components/RequisitionListGridWrapper/RequisitionListGridWrapper.d.ts +4 -3
  21. package/components/index.d.ts +1 -0
  22. package/containers/RequisitionListGrid/RequisitionListGrid.d.ts +5 -0
  23. package/containers/RequisitionListGrid.js +1 -1
  24. package/containers/RequisitionListGrid.js.map +1 -1
  25. package/containers/RequisitionListSelector.js +2 -2
  26. package/containers/RequisitionListSelector.js.map +1 -1
  27. package/containers/RequisitionListView/RequisitionListView.d.ts +5 -0
  28. package/containers/RequisitionListView.js +1 -1
  29. package/containers/RequisitionListView.js.map +1 -1
  30. package/data/models/item.d.ts +22 -1
  31. package/data/transforms/transform-requisition-list.d.ts +4 -2
  32. package/hooks/useRequisitionListGrid.d.ts +1 -0
  33. package/i18n/en_US.json.d.ts +12 -3
  34. package/package.json +1 -1
  35. package/render.js +3 -3
  36. package/render.js.map +1 -1
  37. package/chunks/PageSizePicker.js +0 -4
  38. package/chunks/PageSizePicker.js.map +0 -1
  39. /package/api/{getRequisitionList → refineProduct}/graphql/refineProduct.d.ts +0 -0
@@ -1,6 +1,32 @@
1
1
  /*! Copyright 2025 Adobe
2
2
  All Rights Reserved. */
3
- import{events as _}from"@dropins/tools/event-bus.js";import{FetchGraphQL as l}from"@dropins/tools/fetch-graphql.js";const p=t=>{const e=t.map(o=>o.message).join(" ");throw Error(e)},{setEndpoint:R,setFetchGraphQlHeader:q,removeFetchGraphQlHeader:L,setFetchGraphQlHeaders:S,fetchGraphQl:c,getConfig:E}=new l().getMethods(),d=`
3
+ import{events as c}from"@dropins/tools/event-bus.js";import{FetchGraphQL as p}from"@dropins/tools/fetch-graphql.js";const d=e=>{const i=e.map(o=>o.message).join(" ");throw Error(i)},{setEndpoint:E,setFetchGraphQlHeader:v,removeFetchGraphQlHeader:y,setFetchGraphQlHeaders:h,fetchGraphQl:l,getConfig:N}=new p().getMethods(),f=`
4
+ query REFINE_PRODUCT(
5
+ $optionIds: [String!]!,
6
+ $sku: String!
7
+ ) {
8
+ refineProduct(
9
+ optionIds: $optionIds
10
+ sku: $sku
11
+ ) {
12
+ sku
13
+ name
14
+ images {
15
+ url
16
+ }
17
+ ... on SimpleProductView {
18
+ price {
19
+ final {
20
+ amount {
21
+ value
22
+ currency
23
+ }
24
+ }
25
+ }
26
+ }
27
+ }
28
+ }
29
+ `,I=e=>e.configurable_options.map(i=>btoa(`configurable/${atob(i.configurable_product_option_uid)}/${atob(i.configurable_product_option_value_uid)}`)),g=async e=>Promise.all(e.map(async i=>{if(!i.product||!i.configurable_options||i.configurable_options.length===0)return i;const o=I(i),{errors:s,data:n}=await l(f,{variables:{optionIds:o,sku:i.product.sku}});return s?(console.error("Failed to refine product:",s),i):n!=null&&n.refineProduct?{...i,configured_product:n.refineProduct}:i})),m=`
4
30
  fragment REQUISITION_LIST_FRAGMENT on RequisitionList {
5
31
  uid
6
32
  name
@@ -8,13 +34,15 @@ fragment REQUISITION_LIST_FRAGMENT on RequisitionList {
8
34
  items_count
9
35
  updated_at
10
36
  }
11
- `;function I(t){var e,o;return t?{uid:t.uid,name:t.name,description:t.description,updated_at:t.updated_at,items_count:t.items_count,items:m((e=t.items)==null?void 0:e.items),page_info:(o=t.items)==null?void 0:o.page_info}:null}function m(t){return t!=null&&t.length?t.map(e=>{var n,u;const o={uid:e.uid,sku:(n=e.product)==null?void 0:n.sku,quantity:e.quantity,customizable_options:e.customizable_options?e.customizable_options.map(i=>({uid:i.customizable_option_uid,is_required:i.is_required,label:i.label,sort_order:i.sort_order,type:i.type,values:i.values.map(r=>({uid:r.customizable_option_value_uid,label:r.label,price:r.price,value:r.value}))})):[],bundle_options:e.bundle_options||[],configurable_options:e.configurable_options?e.configurable_options.map(i=>({option_uid:i.configurable_product_option_uid,option_label:i.option_label,value_uid:i.configurable_product_option_value_uid,value_label:i.value_label})):[],samples:e.samples?e.samples.map(i=>({url:i.sample_url,sort_order:i.sort_order,title:i.title})):[],gift_card_options:e.gift_card_options||{}};return(u=e.configured_product)!=null&&u.name?{...o,configured_product:e.configured_product}:o}):[]}const g=`
37
+ `;function b(e){var i,o;return e?{uid:e.uid,name:e.name,description:e.description,updated_at:e.updated_at,items_count:e.items_count,items:T((i=e.items)==null?void 0:i.items),page_info:(o=e.items)==null?void 0:o.page_info}:null}function T(e){return e!=null&&e.length?e.map(i=>{var s,n,a,r;const o={uid:i.uid,sku:(s=i.product)==null?void 0:s.sku,quantity:i.quantity,stock_status:((n=i.product)==null?void 0:n.stock_status)||"IN_STOCK",only_x_left_in_stock:((a=i.product)==null?void 0:a.only_x_left_in_stock)??null,customizable_options:i.customizable_options?i.customizable_options.map(t=>({uid:t.customizable_option_uid,is_required:t.is_required,label:t.label,sort_order:t.sort_order,type:t.type,values:t.values.map(u=>({uid:u.customizable_option_value_uid,label:u.label,price:u.price,value:u.value}))})):[],bundle_options:i.bundle_options||[],configurable_options:i.configurable_options?i.configurable_options.map(t=>({option_uid:t.configurable_product_option_uid,option_label:t.option_label,value_uid:t.configurable_product_option_value_uid,value_label:t.value_label})):[],samples:i.samples?i.samples.map(t=>({url:t.sample_url,sort_order:t.sort_order,title:t.title})):[],gift_card_options:i.gift_card_options||{}};return(r=i.configured_product)!=null&&r.name?{...o,configured_product:i.configured_product}:o}):[]}const R=`
12
38
  fragment REQUISITION_LIST_ITEMS_FRAGMENT on RequistionListItems {
13
39
  items {
14
40
  uid
15
41
  quantity
16
42
  product {
17
43
  sku
44
+ stock_status
45
+ only_x_left_in_stock
18
46
  }
19
47
  customizable_options {
20
48
  customizable_option_uid
@@ -99,7 +127,7 @@ fragment REQUISITION_LIST_ITEMS_FRAGMENT on RequistionListItems {
99
127
  total_pages
100
128
  }
101
129
  }
102
- `,b=`
130
+ `,q=`
103
131
  mutation UPDATE_REQUISITION_LIST_MUTATION(
104
132
  $requisitionListUid: ID!,
105
133
  $name: String!,
@@ -122,7 +150,7 @@ fragment REQUISITION_LIST_ITEMS_FRAGMENT on RequistionListItems {
122
150
  }
123
151
  }
124
152
  }
125
- ${d}
126
- ${g}
127
- `,v=async(t,e,o,n,u)=>c(b,{variables:{requisitionListUid:t,name:e,description:o,pageSize:n,currentPage:u}}).then(({errors:i,data:r})=>{var a;if(i)return p(i);if(!((a=r==null?void 0:r.updateRequisitionList)!=null&&a.requisition_list))return null;const s=I(r.updateRequisitionList.requisition_list);return _.emit("requisitionList/data",s),s});export{d as R,q as a,S as b,g as c,c as f,E as g,p as h,L as r,R as s,I as t,v as u};
153
+ ${m}
154
+ ${R}
155
+ `,U=async(e,i,o,s,n)=>l(q,{variables:{requisitionListUid:e,name:i,description:o,pageSize:s,currentPage:n}}).then(async({errors:a,data:r})=>{var u,_;if(a)return d(a);if(!((u=r==null?void 0:r.updateRequisitionList)!=null&&u.requisition_list))return null;(_=r.updateRequisitionList.requisition_list.items)!=null&&_.items&&(r.updateRequisitionList.requisition_list.items.items=await g(r.updateRequisitionList.requisition_list.items.items));const t=b(r.updateRequisitionList.requisition_list);return c.emit("requisitionList/data",t),t});export{m as R,v as a,h as b,R as c,g as e,l as f,N as g,d as h,y as r,E as s,b as t,U as u};
128
156
  //# sourceMappingURL=updateRequisitionList.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"updateRequisitionList.js","sources":["/@dropins/storefront-requisition-list/src/lib/fetch-error.ts","/@dropins/storefront-requisition-list/src/api/fetch-graphql/fetch-graphql.ts","/@dropins/storefront-requisition-list/src/api/fragments/RequisitionListFragment.graphql.ts","/@dropins/storefront-requisition-list/src/data/transforms/transform-requisition-list.ts","/@dropins/storefront-requisition-list/src/api/fragments/RequisitionListItemsFragment.graphql.ts","/@dropins/storefront-requisition-list/src/api/updateRequisitionList/graphql/updateRequisitionList.ts","/@dropins/storefront-requisition-list/src/api/updateRequisitionList/updateRequisitionList.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/** Actions */\nexport const handleFetchError = (errors: Array<{ message: string }>) => {\n const errorMessage = errors.map((e: any) => e.message).join(' ');\n\n throw Error(errorMessage);\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 '@adobe-commerce/fetch-graphql';\n\nexport const {\n setEndpoint,\n setFetchGraphQlHeader,\n removeFetchGraphQlHeader,\n setFetchGraphQlHeaders,\n fetchGraphQl,\n getConfig,\n} = new FetchGraphQL().getMethods();\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 REQUISITION_LIST_FRAGMENT = `\nfragment REQUISITION_LIST_FRAGMENT on RequisitionList {\n uid\n name\n description\n items_count\n updated_at\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 *******************************************************************/\nimport { RequisitionList } from '../models/requisitionList';\nimport {\n Item,\n ConfiguredProduct,\n Link,\n Sample,\n BundleOption,\n ConfigurableOption,\n CustomizableOption,\n GiftCardOption,\n} from '@/requisitionList/data/models/item';\n\n// Interface for raw API response data for a requisition list\nexport interface RawRequisitionListData {\n name: string;\n description: string;\n uid: string;\n updated_at: string;\n items_count: number;\n items: {\n items: RawItemData[];\n page_info: {\n total_pages: number;\n current_page: number;\n page_size: number;\n };\n };\n}\n\nexport function transformRequisitionList(\n data: RawRequisitionListData\n): RequisitionList | null {\n if (!data) {\n return null;\n }\n\n return {\n uid: data.uid,\n name: data.name,\n description: data.description,\n updated_at: data.updated_at,\n items_count: data.items_count,\n items: transformItems(data.items?.items),\n page_info: data.items?.page_info,\n };\n}\n\n// Interface for raw item data\ninterface RawItemData {\n uid: string;\n product: {\n sku: string;\n };\n quantity: number;\n customizable_options?: CustomizableOption[];\n bundle_options?: BundleOption[];\n configurable_options?: ConfigurableOption[];\n configured_product?: ConfiguredProduct;\n links?: Link[];\n samples?: Sample[];\n gift_card_options?: GiftCardOption;\n}\n\nfunction transformItems(items: RawItemData[]): Item[] {\n if (!items?.length) return [];\n\n return items.map((item: RawItemData) => {\n const transformedItem = {\n uid: item.uid,\n sku: item.product?.sku,\n quantity: item.quantity,\n customizable_options: item.customizable_options\n ? item.customizable_options.map((option) => ({\n uid: option.customizable_option_uid,\n is_required: option.is_required,\n label: option.label,\n sort_order: option.sort_order,\n type: option.type,\n values: option.values.map((value) => ({\n uid: value.customizable_option_value_uid,\n label: value.label,\n price: value.price,\n value: value.value,\n })),\n }))\n : [],\n bundle_options: item.bundle_options || [],\n configurable_options: item.configurable_options\n ? item.configurable_options.map((option) => ({\n option_uid: option.configurable_product_option_uid,\n option_label: option.option_label,\n value_uid: option.configurable_product_option_value_uid,\n value_label: option.value_label,\n }))\n : [],\n samples: item.samples\n ? item.samples.map((sample) => ({\n url: sample.sample_url,\n sort_order: sample.sort_order,\n title: sample.title,\n }))\n : [],\n gift_card_options: item.gift_card_options || {},\n };\n\n if (item.configured_product?.name) {\n return {\n ...transformedItem,\n configured_product: item.configured_product,\n };\n }\n return transformedItem;\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\nexport const REQUISITION_LIST_ITEMS_FRAGMENT = `\nfragment REQUISITION_LIST_ITEMS_FRAGMENT on RequistionListItems {\n items {\n uid\n quantity\n product {\n sku\n }\n customizable_options {\n customizable_option_uid\n is_required\n label\n sort_order\n type\n values {\n customizable_option_value_uid\n label\n value\n price {\n type\n units\n value\n }\n }\n }\n ... on ConfigurableRequisitionListItem {\n configurable_options {\n configurable_product_option_uid\n configurable_product_option_value_uid\n option_label\n value_label\n }\n }\n ... on DownloadableRequisitionListItem {\n links {\n price\n sample_url\n sort_order\n title\n uid\n }\n samples {\n sample_url\n sort_order\n title\n }\n }\n ... on BundleRequisitionListItem {\n bundle_options {\n uid\n type\n label\n values {\n uid\n label\n quantity\n priceV2 {\n value\n currency\n }\n original_price {\n value\n currency\n }\n }\n }\n }\n ... on GiftCardRequisitionListItem {\n gift_card_options {\n amount {\n currency\n value\n }\n custom_giftcard_amount {\n currency\n value\n }\n message\n recipient_email\n recipient_name\n sender_name\n sender_email\n }\n }\n }\n page_info {\n page_size\n current_page\n total_pages\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 *******************************************************************/\nimport { REQUISITION_LIST_FRAGMENT } from '@/requisitionList/api/fragments/RequisitionListFragment.graphql';\nimport { REQUISITION_LIST_ITEMS_FRAGMENT } from '@/requisitionList/api/fragments/RequisitionListItemsFragment.graphql';\n\nexport const UPDATE_REQUISITION_LIST_MUTATION = `\n mutation UPDATE_REQUISITION_LIST_MUTATION(\n $requisitionListUid: ID!,\n $name: String!,\n $description: String,\n $pageSize: Int,\n $currentPage: Int\n ) {\n updateRequisitionList(\n requisitionListUid: $requisitionListUid\n input: {\n name: $name\n description: $description\n }\n ) {\n requisition_list {\n ...REQUISITION_LIST_FRAGMENT\n items(pageSize: $pageSize, currentPage: $currentPage) {\n ...REQUISITION_LIST_ITEMS_FRAGMENT\n }\n }\n }\n }\n${REQUISITION_LIST_FRAGMENT}\n${REQUISITION_LIST_ITEMS_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 { transformRequisitionList } from '@/requisitionList/data/transforms';\nimport { fetchGraphQl } from '@/requisitionList/api';\nimport { handleFetchError } from '@/requisitionList/lib/fetch-error';\nimport { RequisitionList } from '@/requisitionList/data/models/requisitionList';\nimport { UPDATE_REQUISITION_LIST_MUTATION } from '@/requisitionList/api/updateRequisitionList/graphql/updateRequisitionList';\nimport { events } from '@adobe-commerce/event-bus';\n\nexport const updateRequisitionList = async (\n requisitionListUid: string,\n name: string,\n description?: string,\n pageSize?: number,\n currentPage?: number\n): Promise<RequisitionList | null> => {\n return fetchGraphQl(UPDATE_REQUISITION_LIST_MUTATION, {\n variables: {\n requisitionListUid,\n name,\n description,\n pageSize,\n currentPage,\n },\n }).then(({ errors, data }) => {\n if (errors) return handleFetchError(errors);\n\n if (!data?.updateRequisitionList?.requisition_list) {\n return null;\n }\n\n const payload = transformRequisitionList(\n data.updateRequisitionList.requisition_list\n );\n\n events.emit('requisitionList/data', payload);\n\n return payload;\n });\n};\n"],"names":["handleFetchError","errors","errorMessage","e","setEndpoint","setFetchGraphQlHeader","removeFetchGraphQlHeader","setFetchGraphQlHeaders","fetchGraphQl","getConfig","FetchGraphQL","REQUISITION_LIST_FRAGMENT","transformRequisitionList","data","transformItems","_a","_b","items","item","transformedItem","option","value","sample","REQUISITION_LIST_ITEMS_FRAGMENT","UPDATE_REQUISITION_LIST_MUTATION","updateRequisitionList","requisitionListUid","name","description","pageSize","currentPage","payload","events"],"mappings":"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"}
1
+ {"version":3,"file":"updateRequisitionList.js","sources":["/@dropins/storefront-requisition-list/src/lib/fetch-error.ts","/@dropins/storefront-requisition-list/src/api/fetch-graphql/fetch-graphql.ts","/@dropins/storefront-requisition-list/src/api/refineProduct/graphql/refineProduct.ts","/@dropins/storefront-requisition-list/src/api/refineProduct/enrichConfigurableProducts.ts","/@dropins/storefront-requisition-list/src/api/fragments/RequisitionListFragment.graphql.ts","/@dropins/storefront-requisition-list/src/data/transforms/transform-requisition-list.ts","/@dropins/storefront-requisition-list/src/api/fragments/RequisitionListItemsFragment.graphql.ts","/@dropins/storefront-requisition-list/src/api/updateRequisitionList/graphql/updateRequisitionList.ts","/@dropins/storefront-requisition-list/src/api/updateRequisitionList/updateRequisitionList.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/** Actions */\nexport const handleFetchError = (errors: Array<{ message: string }>) => {\n const errorMessage = errors.map((e: any) => e.message).join(' ');\n\n throw Error(errorMessage);\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 '@adobe-commerce/fetch-graphql';\n\nexport const {\n setEndpoint,\n setFetchGraphQlHeader,\n removeFetchGraphQlHeader,\n setFetchGraphQlHeaders,\n fetchGraphQl,\n getConfig,\n} = new FetchGraphQL().getMethods();\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 REFINE_PRODUCT = `\n query REFINE_PRODUCT(\n $optionIds: [String!]!,\n $sku: String!\n ) {\n refineProduct(\n optionIds: $optionIds\n sku: $sku\n ) {\n sku\n name\n images {\n url\n }\n ... on SimpleProductView {\n price {\n final {\n amount {\n value\n currency\n }\n }\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 '@/requisitionList/api';\nimport { Item, ConfigurableOption } from '@/requisitionList/data/models/item';\nimport { REFINE_PRODUCT } from '@/requisitionList/api/refineProduct/graphql/refineProduct';\n\n/**\n * Encodes option UID string into base64 string for refineProduct query\n * Example: 'configurable/93/13' -> 'Y29uZmlndXJhYmxlLzkzLzEz'\n */\nconst encodeOptionUids = (item: Item): string[] => {\n return item.configurable_options.map((option: ConfigurableOption) => {\n return btoa(\n `configurable/${atob(option.configurable_product_option_uid)}/${atob(\n option.configurable_product_option_value_uid\n )}`\n );\n });\n};\n\n/**\n * Enriches configurable products with variant data by calling the refineProduct query\n *\n * @param items - Array of requisition list items\n * @returns Promise resolving to array of items with configured_product populated for configurable items\n */\nexport const enrichConfigurableProducts = async (\n items: Item[]\n): Promise<Item[]> => {\n return Promise.all(\n items.map(async (item: Item) => {\n // Skip non-configurable items or items with no options selected\n if (\n !item.product ||\n !item.configurable_options ||\n item.configurable_options.length === 0\n ) {\n return item;\n }\n\n const optionIds = encodeOptionUids(item);\n\n const { errors, data: refineData } = await fetchGraphQl(REFINE_PRODUCT, {\n variables: {\n optionIds,\n sku: item.product.sku,\n },\n });\n\n if (errors) {\n console.error('Failed to refine product:', errors);\n return item;\n }\n\n if (!refineData?.refineProduct) {\n return item;\n }\n\n return {\n ...item,\n configured_product: refineData.refineProduct,\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\nexport const REQUISITION_LIST_FRAGMENT = `\nfragment REQUISITION_LIST_FRAGMENT on RequisitionList {\n uid\n name\n description\n items_count\n updated_at\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 *******************************************************************/\nimport { RequisitionList } from '../models/requisitionList';\nimport {\n Item,\n ConfiguredProduct,\n Link,\n Sample,\n BundleOption,\n ConfigurableOption,\n RawCustomizableOption,\n GiftCardOption,\n} from '@/requisitionList/data/models/item';\n\n// Interface for raw API response data for a requisition list\nexport interface RawRequisitionListData {\n name: string;\n description: string;\n uid: string;\n updated_at: string;\n items_count: number;\n items: {\n items: RawItemData[];\n page_info: {\n total_pages: number;\n current_page: number;\n page_size: number;\n };\n };\n}\n\nexport function transformRequisitionList(\n data: RawRequisitionListData\n): RequisitionList | null {\n if (!data) {\n return null;\n }\n\n return {\n uid: data.uid,\n name: data.name,\n description: data.description,\n updated_at: data.updated_at,\n items_count: data.items_count,\n items: transformItems(data.items?.items),\n page_info: data.items?.page_info,\n };\n}\n\n// Interface for raw item data\ninterface RawItemData {\n uid: string;\n product: {\n sku: string;\n stock_status?: string;\n only_x_left_in_stock?: number | null;\n };\n quantity: number;\n customizable_options?: RawCustomizableOption[];\n bundle_options?: BundleOption[];\n configurable_options?: ConfigurableOption[];\n configured_product?: ConfiguredProduct;\n links?: Link[];\n samples?: Sample[];\n gift_card_options?: GiftCardOption;\n}\n\nfunction transformItems(items: RawItemData[]): Item[] {\n if (!items?.length) return [];\n\n return items.map((item: RawItemData) => {\n const transformedItem = {\n uid: item.uid,\n sku: item.product?.sku,\n quantity: item.quantity,\n stock_status: (item.product?.stock_status || 'IN_STOCK') as\n | 'IN_STOCK'\n | 'OUT_OF_STOCK',\n only_x_left_in_stock: item.product?.only_x_left_in_stock ?? null,\n customizable_options: item.customizable_options\n ? item.customizable_options.map((option) => ({\n uid: option.customizable_option_uid,\n is_required: option.is_required,\n label: option.label,\n sort_order: option.sort_order,\n type: option.type,\n values: option.values.map(\n (value: RawCustomizableOption['values'][number]) => ({\n uid: value.customizable_option_value_uid,\n label: value.label,\n price: value.price,\n value: value.value,\n })\n ),\n }))\n : [],\n bundle_options: item.bundle_options || [],\n configurable_options: item.configurable_options\n ? item.configurable_options.map((option) => ({\n option_uid: option.configurable_product_option_uid,\n option_label: option.option_label,\n value_uid: option.configurable_product_option_value_uid,\n value_label: option.value_label,\n }))\n : [],\n samples: item.samples\n ? item.samples.map((sample) => ({\n url: sample.sample_url,\n sort_order: sample.sort_order,\n title: sample.title,\n }))\n : [],\n gift_card_options: item.gift_card_options || {},\n };\n\n if (item.configured_product?.name) {\n return {\n ...transformedItem,\n configured_product: item.configured_product,\n };\n }\n return transformedItem;\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\nexport const REQUISITION_LIST_ITEMS_FRAGMENT = `\nfragment REQUISITION_LIST_ITEMS_FRAGMENT on RequistionListItems {\n items {\n uid\n quantity\n product {\n sku\n stock_status\n only_x_left_in_stock\n }\n customizable_options {\n customizable_option_uid\n is_required\n label\n sort_order\n type\n values {\n customizable_option_value_uid\n label\n value\n price {\n type\n units\n value\n }\n }\n }\n ... on ConfigurableRequisitionListItem {\n configurable_options {\n configurable_product_option_uid\n configurable_product_option_value_uid\n option_label\n value_label\n }\n }\n ... on DownloadableRequisitionListItem {\n links {\n price\n sample_url\n sort_order\n title\n uid\n }\n samples {\n sample_url\n sort_order\n title\n }\n }\n ... on BundleRequisitionListItem {\n bundle_options {\n uid\n type\n label\n values {\n uid\n label\n quantity\n priceV2 {\n value\n currency\n }\n original_price {\n value\n currency\n }\n }\n }\n }\n ... on GiftCardRequisitionListItem {\n gift_card_options {\n amount {\n currency\n value\n }\n custom_giftcard_amount {\n currency\n value\n }\n message\n recipient_email\n recipient_name\n sender_name\n sender_email\n }\n }\n }\n page_info {\n page_size\n current_page\n total_pages\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 *******************************************************************/\nimport { REQUISITION_LIST_FRAGMENT } from '@/requisitionList/api/fragments/RequisitionListFragment.graphql';\nimport { REQUISITION_LIST_ITEMS_FRAGMENT } from '@/requisitionList/api/fragments/RequisitionListItemsFragment.graphql';\n\nexport const UPDATE_REQUISITION_LIST_MUTATION = `\n mutation UPDATE_REQUISITION_LIST_MUTATION(\n $requisitionListUid: ID!,\n $name: String!,\n $description: String,\n $pageSize: Int,\n $currentPage: Int\n ) {\n updateRequisitionList(\n requisitionListUid: $requisitionListUid\n input: {\n name: $name\n description: $description\n }\n ) {\n requisition_list {\n ...REQUISITION_LIST_FRAGMENT\n items(pageSize: $pageSize, currentPage: $currentPage) {\n ...REQUISITION_LIST_ITEMS_FRAGMENT\n }\n }\n }\n }\n${REQUISITION_LIST_FRAGMENT}\n${REQUISITION_LIST_ITEMS_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 { transformRequisitionList } from '@/requisitionList/data/transforms';\nimport { fetchGraphQl } from '@/requisitionList/api';\nimport { enrichConfigurableProducts } from '@/requisitionList/api/refineProduct';\nimport { handleFetchError } from '@/requisitionList/lib/fetch-error';\nimport { RequisitionList } from '@/requisitionList/data/models/requisitionList';\nimport { UPDATE_REQUISITION_LIST_MUTATION } from '@/requisitionList/api/updateRequisitionList/graphql/updateRequisitionList';\nimport { events } from '@adobe-commerce/event-bus';\n\nexport const updateRequisitionList = async (\n requisitionListUid: string,\n name: string,\n description?: string,\n pageSize?: number,\n currentPage?: number\n): Promise<RequisitionList | null> => {\n return fetchGraphQl(UPDATE_REQUISITION_LIST_MUTATION, {\n variables: {\n requisitionListUid,\n name,\n description,\n pageSize,\n currentPage,\n },\n }).then(async ({ errors, data }) => {\n if (errors) return handleFetchError(errors);\n\n if (!data?.updateRequisitionList?.requisition_list) {\n return null;\n }\n\n // Enrich configurable products with variant data if items are present\n if (data.updateRequisitionList.requisition_list.items?.items) {\n data.updateRequisitionList.requisition_list.items.items =\n await enrichConfigurableProducts(\n data.updateRequisitionList.requisition_list.items.items\n );\n }\n\n const payload = transformRequisitionList(\n data.updateRequisitionList.requisition_list\n );\n\n events.emit('requisitionList/data', payload);\n\n return payload;\n });\n};\n"],"names":["handleFetchError","errors","errorMessage","e","setEndpoint","setFetchGraphQlHeader","removeFetchGraphQlHeader","setFetchGraphQlHeaders","fetchGraphQl","getConfig","FetchGraphQL","REFINE_PRODUCT","encodeOptionUids","item","option","enrichConfigurableProducts","items","optionIds","refineData","REQUISITION_LIST_FRAGMENT","transformRequisitionList","data","transformItems","_a","_b","transformedItem","_c","value","sample","_d","REQUISITION_LIST_ITEMS_FRAGMENT","UPDATE_REQUISITION_LIST_MUTATION","updateRequisitionList","requisitionListUid","name","description","pageSize","currentPage","payload","events"],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { FunctionComponent } from 'preact';
2
+ import { PageInfo } from '../../data/models';
3
+
4
+ export interface PaginationItemsCounterProps {
5
+ pageInfo?: PageInfo;
6
+ totalCount?: number;
7
+ className?: string;
8
+ }
9
+ export declare const PaginationItemsCounter: FunctionComponent<PaginationItemsCounterProps>;
10
+ //# sourceMappingURL=PaginationItemsCounter.d.ts.map
@@ -0,0 +1,19 @@
1
+ /********************************************************************
2
+ * ADOBE CONFIDENTIAL
3
+ * __________________
4
+ *
5
+ * Copyright 2025 Adobe
6
+ * All Rights Reserved.
7
+ *
8
+ * NOTICE: All information contained herein is, and remains
9
+ * the property of Adobe and its suppliers, if any. The intellectual
10
+ * and technical concepts contained herein are proprietary to Adobe
11
+ * and its suppliers and are protected by all applicable intellectual
12
+ * property laws, including trade secret and copyright laws.
13
+ * Dissemination of this information or reproduction of this material
14
+ * is strictly forbidden unless prior written permission is obtained
15
+ * from Adobe.
16
+ *******************************************************************/
17
+ export * from '.';
18
+ export { PaginationItemsCounter as default } from './PaginationItemsCounter';
19
+ //# sourceMappingURL=index.d.ts.map
@@ -10,7 +10,7 @@ export interface ProductListTableProps extends HTMLAttributes<HTMLDivElement | H
10
10
  pageSize: number;
11
11
  canEdit?: boolean;
12
12
  handleItemSelection: (itemUid: string, isSelected: boolean) => void;
13
- handleUpdateQuantity: (itemUid: string, newQuantity: number) => void;
13
+ handleUpdateQuantity: (itemUid: string, newQuantity: number) => Promise<void>;
14
14
  onAddToCart: (itemUids: string[] | undefined) => void;
15
15
  onDeleteItem: (itemUids: string[] | undefined) => void;
16
16
  }
@@ -8,10 +8,11 @@ export interface RequisitionListGridWrapperProps extends HTMLAttributes<HTMLDivE
8
8
  rows: Array<Record<string, VNode | string | number | undefined>>;
9
9
  skeletonRowCount: number;
10
10
  pageInfo?: {
11
- total_pages: number;
12
- current_page: number;
13
- page_size: number;
11
+ total_pages?: number;
12
+ current_page?: number;
13
+ page_size?: number;
14
14
  };
15
+ totalCount?: number;
15
16
  handlePageChange: (page?: number) => Promise<void>;
16
17
  handlePageSizeChange?: (pageSize: number) => Promise<void>;
17
18
  defaultPageSize?: number;
@@ -24,4 +24,5 @@ export * from './NotFound/NotFound';
24
24
  export * from './ProductListTable/ProductListTable';
25
25
  export * from './BatchActions/BatchActions';
26
26
  export * from './PageSizePicker/PageSizePicker';
27
+ export * from './PaginationItemsCounter/PaginationItemsCounter';
27
28
  //# sourceMappingURL=index.d.ts.map
@@ -3,6 +3,11 @@ import { Container, SlotProps } from '@dropins/tools/types/elsie/src/lib';
3
3
 
4
4
  export interface RequisitionListGridProps extends HTMLAttributes<HTMLDivElement> {
5
5
  routeRequisitionListDetails?: (uid: string) => string | void;
6
+ /**
7
+ * Fallback URL to redirect when requisition lists are not enabled.
8
+ * Defaults to '/customer/account'
9
+ */
10
+ fallbackRoute?: string;
6
11
  slots?: {
7
12
  Header?: SlotProps;
8
13
  };
@@ -1,4 +1,4 @@
1
1
  /*! Copyright 2025 Adobe
2
2
  All Rights Reserved. */
3
- import{jsxs as C,jsx as s,Fragment as F}from"@dropins/tools/preact-jsx-runtime.js";import{useState as M,useCallback as L,useMemo as x,useEffect as T}from"@dropins/tools/preact-compat.js";import{Button as N,Header as G,InLineAlert as U,Table as V,Pagination as B,Card as j}from"@dropins/tools/components.js";import{Slot as J,classes as v,VComponent as Z}from"@dropins/tools/lib.js";import{D as W,R as $}from"../chunks/RequisitionListForm.js";import"@dropins/tools/preact-hooks.js";import{R as K}from"../chunks/RequisitionListForm2.js";import"../chunks/state.js";import{events as w}from"@dropins/tools/event-bus.js";import{u as Q,E as X}from"../chunks/RequisitionListView.js";import"@dropins/tools/preact.js";import{R as Y}from"../chunks/RequisitionListActions.js";import{R as b}from"../chunks/RequisitionListModal.js";import{P as I}from"../chunks/PageSizePicker.js";import{useText as D}from"@dropins/tools/i18n.js";import{u as ii}from"../chunks/updateRequisitionList.js";import{d as ei}from"../chunks/deleteRequisitionList.js";import{g as z}from"../chunks/getRequisitionLists.js";import"@dropins/tools/fetch-graphql.js";function ti(c,l,t){const d=D({actionRename:"RequisitionList.RequisitionListView.actionRename",actionDeleteList:"RequisitionList.RequisitionListView.actionDeleteList"}),[e,a]=M(null),[f,g]=M(!1),[A,R]=M(!1),q=L(()=>{t&&t(),g(!0)},[t]),y=L(()=>g(!1),[]),u=x(()=>{if(c)return{handleOpenRenameModal:i=>{g(n=>n&&!1),c.handleOpenRenameModal(i)},handleOpenDeleteModal:i=>{g(n=>n&&!1),c.handleOpenDeleteModal(i)}}},[c]),r=L(async(i,n)=>{var o,p,h;R(!0);try{const m=await z(i,n),S=((o=m==null?void 0:m.page_info)==null?void 0:o.current_page)??1,E=((p=m==null?void 0:m.page_info)==null?void 0:p.total_pages)??0;if(!((((h=m==null?void 0:m.items)==null?void 0:h.length)??0)>0)&&S>1&&E>=S-1){const H=S-1,k=await z(H,n);a(k)}else a(m)}finally{R(!1)}},[]);T(()=>{const i=w.on("requisitionLists/data",n=>{n&&n.items&&a(n)},{eager:!0});return()=>{i==null||i.off()}},[]),T(()=>{e||r(1,W)},[e,r]);const O=L(i=>{var p,h;const n=i??((p=e==null?void 0:e.page_info)==null?void 0:p.current_page)??1,o=((h=e==null?void 0:e.page_info)==null?void 0:h.page_size)??W;return r(n,o)},[r,e]),P=L(async i=>{await r(1,i)},[r]);return{rows:x(()=>((e==null?void 0:e.items)??[]).map(i=>({name:C("div",{className:"requisition-list-grid-wrapper__name",children:[s("div",{className:"requisition-list-grid-wrapper__name__title",children:s("a",{href:"#",onClick:n=>{if(n.preventDefault(),l){const o=l(i.uid);typeof o=="string"&&(window.location.href=o)}},children:i.name})}),i.description&&s("div",{className:"requisition-list-grid-wrapper__name__description",children:i.description})]}),items_count:i.items_count,last_updated:new Date(i.updated_at).toLocaleString(),actions:C("div",{className:"requisition-list-grid-wrapper__actions",children:[s(N,{variant:"tertiary",type:"button","data-testid":"rename-button",onClick:()=>u==null?void 0:u.handleOpenRenameModal(i),children:d.actionRename}),s(N,{variant:"tertiary",type:"button","data-testid":"delete-button",onClick:()=>u==null?void 0:u.handleOpenDeleteModal(i),children:d.actionDeleteList})]})})),[e==null?void 0:e.items,d.actionRename,d.actionDeleteList,u,l]),isLoading:A||!e,pageInfo:e==null?void 0:e.page_info,handlePageChange:O,handlePageSizeChange:P,isAdding:f,handleAddNew:q,handleCancelCreate:y}}const Ai=({routeRequisitionListDetails:c,slots:l})=>{const[t,d]=M({type:null,isOpen:!1,isLoading:!1,requisitionList:null}),e=L(()=>{d({type:null,isOpen:!1,isLoading:!1,requisitionList:null})},[]),a=L(o=>{d({type:"rename",isOpen:!0,isLoading:!1,requisitionList:o})},[]),f=L(o=>{d({type:"delete",isOpen:!0,isLoading:!1,requisitionList:o})},[]),{rows:g,isLoading:A,pageInfo:R,handlePageChange:q,handlePageSizeChange:y,isAdding:u,handleAddNew:r,handleCancelCreate:O}=ti({handleOpenRenameModal:a,handleOpenDeleteModal:f},c,e),P=L(async o=>{if(t.requisitionList)try{await ii(t.requisitionList.uid,o.name,o.description),w.emit("requisitionList/alert",{action:"update",type:"success",context:"requisitionList"}),await q(),e()}catch{w.emit("requisitionList/alert",{action:"update",type:"error",context:"requisitionList"})}},[t.requisitionList,q,e]),_=async()=>{t.requisitionList&&(d({...t,isLoading:!0}),await ei(t.requisitionList.uid).then(async()=>{w.emit("requisitionList/alert",{type:"success",action:"delete",context:"requisitionList"})}).catch(()=>{w.emit("requisitionList/alert",{type:"error",action:"delete",context:"requisitionList"})}).finally(async()=>{await q(),e()}))},i=D({containerTitle:"RequisitionList.containerTitle",updateTitle:"RequisitionList.RequisitionListForm.updateTitle",deleteRequisitionListTitle:"RequisitionList.RequisitionListWrapper.deleteRequisitionListTitle",deleteRequisitionListMessage:"RequisitionList.RequisitionListWrapper.deleteRequisitionListMessage",cancelAction:"RequisitionList.RequisitionListWrapper.cancelAction",confirmAction:"RequisitionList.RequisitionListWrapper.confirmAction"}),n=L(()=>l!=null&&l.Header?s(J,{name:"Header","aria-label":i.containerTitle,title:i.containerTitle,slot:l.Header}):s(G,{"aria-label":i.containerTitle,role:"region",title:i.containerTitle}),[l,i.containerTitle]);return C(F,{children:[s(ni,{header:n(),rows:g,skeletonRowCount:10,isLoading:A,pageInfo:R,handlePageChange:q,handlePageSizeChange:y,defaultPageSize:10,isAdding:u,handleAddNew:r,handleCancelCreate:O}),t.type==="rename"&&t.isOpen&&t.requisitionList&&s(b,{isOpen:t.isOpen,isLoading:t.isLoading,title:i.updateTitle,modalContent:s($,{mode:"update",defaultValues:{name:t.requisitionList.name,description:t.requisitionList.description||""},onSubmit:P,onCancel:e}),handleModalOnClose:e}),t.type==="delete"&&t.isOpen&&s(b,{isOpen:t.isOpen,isLoading:t.isLoading,title:i.deleteRequisitionListTitle,modalContent:i.deleteRequisitionListMessage,confirmBtnCaption:i.confirmAction,closeBtnCaption:i.cancelAction,handleModalOnClose:e,handleModalOnConfirm:_})]})},ni=({className:c,isLoading:l=!1,header:t,rows:d=[],skeletonRowCount:e=10,pageInfo:a,handlePageChange:f,handlePageSizeChange:g,defaultPageSize:A=10,isAdding:R,handleAddNew:q,handleCancelCreate:y,...u})=>{const r=D({name:"RequisitionList.RequisitionListWrapper.name",itemsCount:"RequisitionList.RequisitionListWrapper.itemsCount",lastUpdated:"RequisitionList.RequisitionListWrapper.lastUpdated",actions:"RequisitionList.RequisitionListWrapper.actions",emptyList:"RequisitionList.RequisitionListWrapper.emptyList"}),O=((a==null?void 0:a.total_pages)??0)>0,P=!l&&d.length===0&&!O,{alert:_,setAlert:i,handleRequisitionListAlert:n}=Q();return T(()=>{const o=w.on("requisitionList/alert",n);try{const p=localStorage.getItem("requisitionListPendingAlert");if(p){const h=JSON.parse(p);n(h),localStorage.removeItem("requisitionListPendingAlert")}}catch{}return()=>{o==null||o.off()}},[n]),C("div",{...u,className:v(["requisition-list-grid-wrapper",c]),"data-testid":"requisition-list-grid-wrapper",children:[t&&s("div",{className:v(["requisition-list-grid-wrapper__header",c]),"data-testid":"requisition-list-grid-wrapper-header",children:s(Z,{node:t})}),_&&s("div",{className:"requisition-list__alert-wrapper",children:s(U,{heading:_.description,type:_.type,variant:"primary",onDismiss:()=>i(null)})}),P?s(X,{textContent:r.emptyList}):C(F,{children:[s(V,{columns:[{key:"name",label:r.name},{key:"items_count",label:r.itemsCount},{key:"last_updated",label:r.lastUpdated},{key:"actions",label:r.actions}],rowData:d,loading:l,skeletonRowCount:e}),s("div",{className:v(["requisition-list-grid-wrapper__pagination",c]),children:C("div",{className:"requisition-list-grid-wrapper__pagination-controls",children:[s(I,{currentPageSize:(a==null?void 0:a.page_size)||A,onPageSizeChange:g||(()=>Promise.resolve()),disabled:l}),a&&a.total_pages>1&&s(B,{totalPages:a.total_pages,currentPage:a.current_page,onChange:f})]})})]}),s("div",{className:v(["requisition-list-grid-wrapper__add-new",c]),children:R?s(j,{variant:"secondary",children:s(K,{mode:"create",onSuccess:async()=>{await f(),y(),n({type:"success",action:"create",context:"requisitionList"})},onError:()=>{n({type:"error",action:"create",context:"requisitionList"})},onCancel:y})}):s(Y,{onAddNew:q})})]})};export{Ai as RequisitionListGrid,Ai as default};
3
+ import{jsxs as h,jsx as t,Fragment as z}from"@dropins/tools/preact-jsx-runtime.js";import{useState as M,useCallback as q,useMemo as S,useEffect as T}from"@dropins/tools/preact-compat.js";import{Button as N,Header as G,InLineAlert as U,Table as V,Pagination as B,Card as j}from"@dropins/tools/components.js";import{Slot as J,classes as v,VComponent as Z}from"@dropins/tools/lib.js";import{D,R as $}from"../chunks/RequisitionListForm.js";import"@dropins/tools/preact-hooks.js";import{R as I}from"../chunks/RequisitionListForm2.js";import{events as y}from"@dropins/tools/event-bus.js";import"../chunks/state.js";import"@dropins/tools/preact.js";import{u as K,a as Q,E as X}from"../chunks/RequisitionListView.js";import{R as Y}from"../chunks/RequisitionListActions.js";import{R as x}from"../chunks/RequisitionListModal.js";import{N as ii,P as ei,a as ti}from"../chunks/PaginationItemsCounter.js";import{useText as E}from"@dropins/tools/i18n.js";import{g as W}from"../chunks/getRequisitionLists.js";import{d as ni}from"../chunks/deleteRequisitionList.js";import{u as si}from"../chunks/updateRequisitionList.js";import"@dropins/tools/fetch-graphql.js";function oi(u,L,d){const R=E({actionRename:"RequisitionList.RequisitionListView.actionRename",actionDeleteList:"RequisitionList.RequisitionListView.actionDeleteList"}),[i,a]=M(null),[p,f]=M(!1),[w,_]=M(!1),C=q(()=>{d&&d(),f(!0)},[d]),A=q(()=>f(!1),[]),c=S(()=>{if(u)return{handleOpenRenameModal:e=>{f(s=>s&&!1),u.handleOpenRenameModal(e)},handleOpenDeleteModal:e=>{f(s=>s&&!1),u.handleOpenDeleteModal(e)}}},[u]),l=q(async(e,s)=>{var r,n,m;_(!0);try{const o=await W(e,s),O=((r=o==null?void 0:o.page_info)==null?void 0:r.current_page)??1,F=((n=o==null?void 0:o.page_info)==null?void 0:n.total_pages)??0;if(!((((m=o==null?void 0:o.items)==null?void 0:m.length)??0)>0)&&O>1&&F>=O-1){const k=O-1,H=await W(k,s);a(H)}else a(o)}finally{_(!1)}},[]);T(()=>{const e=y.on("requisitionLists/data",s=>{s&&s.items&&a(s)},{eager:!0});return()=>{e==null||e.off()}},[]),T(()=>{i||l(1,D)},[i,l]);const g=q(e=>{var n,m;const s=e??((n=i==null?void 0:i.page_info)==null?void 0:n.current_page)??1,r=((m=i==null?void 0:i.page_info)==null?void 0:m.page_size)??D;return l(s,r)},[l,i]),b=q(async e=>{await l(1,e)},[l]);return{rows:S(()=>((i==null?void 0:i.items)??[]).map(e=>({name:h("div",{className:"requisition-list-grid-wrapper__name",children:[t("div",{className:"requisition-list-grid-wrapper__name__title",children:t("a",{href:"#",onClick:s=>{if(s.preventDefault(),L){const r=L(e.uid);typeof r=="string"&&(window.location.href=r)}},children:e.name})}),e.description&&t("div",{className:"requisition-list-grid-wrapper__name__description",children:e.description})]}),items_count:e.items_count,last_updated:new Date(e.updated_at).toLocaleString(),actions:h("div",{className:"requisition-list-grid-wrapper__actions",children:[t(N,{variant:"tertiary",type:"button","data-testid":"rename-button",onClick:()=>c==null?void 0:c.handleOpenRenameModal(e),children:R.actionRename}),t(N,{variant:"tertiary",type:"button","data-testid":"delete-button",onClick:()=>c==null?void 0:c.handleOpenDeleteModal(e),children:R.actionDeleteList})]})})),[i==null?void 0:i.items,R.actionRename,R.actionDeleteList,c,L]),isLoading:w||!i,pageInfo:i==null?void 0:i.page_info,totalCount:i==null?void 0:i.total_count,handlePageChange:g,handlePageSizeChange:b,isAdding:p,handleAddNew:C,handleCancelCreate:A}}const Oi=({routeRequisitionListDetails:u,fallbackRoute:L="/customer/account",slots:d})=>{const{isEnabled:R}=K(),[i,a]=M({type:null,isOpen:!1,isLoading:!1,requisitionList:null}),p=q(()=>{a({type:null,isOpen:!1,isLoading:!1,requisitionList:null})},[]),f=q(o=>{a({type:"rename",isOpen:!0,isLoading:!1,requisitionList:o})},[]),w=q(o=>{a({type:"delete",isOpen:!0,isLoading:!1,requisitionList:o})},[]),{rows:_,isLoading:C,pageInfo:A,totalCount:c,handlePageChange:l,handlePageSizeChange:g,isAdding:b,handleAddNew:P,handleCancelCreate:e}=oi({handleOpenRenameModal:f,handleOpenDeleteModal:w},u,p),s=q(async o=>{if(i.requisitionList)try{await si(i.requisitionList.uid,o.name,o.description),y.emit("requisitionList/alert",{action:"update",type:"success",context:"requisitionList"}),await l(),p()}catch{y.emit("requisitionList/alert",{action:"update",type:"error",context:"requisitionList"})}},[i.requisitionList,l,p]),r=async()=>{i.requisitionList&&(a({...i,isLoading:!0}),await ni(i.requisitionList.uid).then(async()=>{y.emit("requisitionList/alert",{type:"success",action:"delete",context:"requisitionList"})}).catch(()=>{y.emit("requisitionList/alert",{type:"error",action:"delete",context:"requisitionList"})}).finally(async()=>{await l(),p()}))},n=E({containerTitle:"RequisitionList.containerTitle",updateTitle:"RequisitionList.RequisitionListForm.updateTitle",deleteRequisitionListTitle:"RequisitionList.RequisitionListWrapper.deleteRequisitionListTitle",deleteRequisitionListMessage:"RequisitionList.RequisitionListWrapper.deleteRequisitionListMessage",cancelAction:"RequisitionList.RequisitionListWrapper.cancelAction",confirmAction:"RequisitionList.RequisitionListWrapper.confirmAction",notEnabledTitle:"RequisitionList.RequisitionListsNotEnabled.title",notEnabledMessage:"RequisitionList.RequisitionListsNotEnabled.message",notEnabledActionLabel:"RequisitionList.RequisitionListsNotEnabled.actionLabel"}),m=q(()=>d!=null&&d.Header?t(J,{name:"Header","aria-label":n.containerTitle,title:n.containerTitle,slot:d.Header}):t(G,{"aria-label":n.containerTitle,role:"region",title:n.containerTitle}),[d,n.containerTitle]);return R===!1?t(ii,{title:n.notEnabledTitle,message:n.notEnabledMessage,actionLabel:n.notEnabledActionLabel,onAction:()=>{window.location.href=L}}):h(z,{children:[t(ai,{header:m(),rows:_,skeletonRowCount:10,isLoading:C,pageInfo:A,totalCount:c,handlePageChange:l,handlePageSizeChange:g,defaultPageSize:10,isAdding:b,handleAddNew:P,handleCancelCreate:e}),i.type==="rename"&&i.isOpen&&i.requisitionList&&t(x,{isOpen:i.isOpen,isLoading:i.isLoading,title:n.updateTitle,modalContent:t($,{mode:"update",defaultValues:{name:i.requisitionList.name,description:i.requisitionList.description||""},onSubmit:s,onCancel:p}),handleModalOnClose:p}),i.type==="delete"&&i.isOpen&&t(x,{isOpen:i.isOpen,isLoading:i.isLoading,title:n.deleteRequisitionListTitle,modalContent:n.deleteRequisitionListMessage,confirmBtnCaption:n.confirmAction,closeBtnCaption:n.cancelAction,handleModalOnClose:p,handleModalOnConfirm:r})]})},ai=({className:u,isLoading:L=!1,header:d,rows:R=[],skeletonRowCount:i=10,pageInfo:a,totalCount:p=0,handlePageChange:f,handlePageSizeChange:w,defaultPageSize:_=10,isAdding:C,handleAddNew:A,handleCancelCreate:c,...l})=>{const g=E({name:"RequisitionList.RequisitionListWrapper.name",itemsCount:"RequisitionList.RequisitionListWrapper.itemsCount",lastUpdated:"RequisitionList.RequisitionListWrapper.lastUpdated",actions:"RequisitionList.RequisitionListWrapper.actions",emptyList:"RequisitionList.RequisitionListWrapper.emptyList",show:"RequisitionList.PageSizePicker.show"}),b=((a==null?void 0:a.total_pages)??0)>0,P=!L&&R.length===0&&!b,{alert:e,setAlert:s,handleRequisitionListAlert:r}=Q();return T(()=>{const n=y.on("requisitionList/alert",r);try{const m=localStorage.getItem("requisitionListPendingAlert");if(m){const o=JSON.parse(m);r(o),localStorage.removeItem("requisitionListPendingAlert")}}catch{}return()=>{n==null||n.off()}},[r]),h("div",{...l,className:v(["requisition-list-grid-wrapper",u]),"data-testid":"requisition-list-grid-wrapper",children:[d&&t("div",{className:v(["requisition-list-grid-wrapper__header",u]),"data-testid":"requisition-list-grid-wrapper-header",children:t(Z,{node:d})}),e&&t("div",{className:"requisition-list__alert-wrapper",children:t(U,{heading:e.description,type:e.type,variant:"primary",onDismiss:()=>s(null)})}),P?t(X,{textContent:g.emptyList}):h(z,{children:[t(V,{columns:[{key:"name",label:g.name},{key:"items_count",label:g.itemsCount},{key:"last_updated",label:g.lastUpdated},{key:"actions",label:g.actions}],rowData:R,loading:L,skeletonRowCount:i}),a&&h("div",{className:v(["requisition-list-grid-wrapper__pagination",u]),children:[t(ei,{pageInfo:a,totalCount:p}),(a.total_pages||0)>1&&t(B,{totalPages:a.total_pages,currentPage:a.current_page||1,onChange:f,disabled:L}),h("div",{className:"requisition-list-grid-wrapper__pagination-picker",children:[t("span",{children:g.show}),t(ti,{currentPageSize:a.page_size||_,onPageSizeChange:w||(()=>Promise.resolve()),disabled:L})]})]})]}),t("div",{className:v(["requisition-list-grid-wrapper__add-new",u]),children:C?t(j,{variant:"secondary",children:t(I,{mode:"create",onSuccess:async()=>{await f(),c(),r({type:"success",action:"create",context:"requisitionList"})},onError:()=>{r({type:"error",action:"create",context:"requisitionList"})},onCancel:c})}):t(Y,{onAddNew:A})})]})};export{Oi as RequisitionListGrid,Oi as default};
4
4
  //# sourceMappingURL=RequisitionListGrid.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RequisitionListGrid.js","sources":["/@dropins/storefront-requisition-list/src/hooks/useRequisitionListGrid.tsx","/@dropins/storefront-requisition-list/src/containers/RequisitionListGrid/RequisitionListGrid.tsx","/@dropins/storefront-requisition-list/src/components/RequisitionListGridWrapper/RequisitionListGridWrapper.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 { useMemo, useState, useCallback, useEffect } from 'preact/compat';\nimport { VNode } from 'preact';\nimport { Button } from '@adobe-commerce/elsie/components';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { RequisitionList as RequisitionListModel } from '@/requisitionList/data/models/requisitionList';\nimport { getRequisitionLists } from '@/requisitionList/api/getRequisitionLists';\nimport { RequisitionLists } from '@/requisitionList/data/models/requisitionLists';\nimport { events } from '@adobe-commerce/event-bus';\nimport { DEFAULT_PAGE_SIZE } from '@/requisitionList/lib/constants';\n\ntype Row = Record<string, VNode | string | number | undefined>;\ntype Callbacks = {\n handleOpenRenameModal: (rl: RequisitionListModel) => void;\n handleOpenDeleteModal: (rl: RequisitionListModel) => void;\n};\n\nexport function useRequisitionListGrid(\n callbacks?: Callbacks,\n routeRequisitionListDetails?: (uid: string) => string | void,\n closeModal?: () => void\n) {\n const translations = useText({\n actionRename: 'RequisitionList.RequisitionListView.actionRename',\n actionDeleteList: 'RequisitionList.RequisitionListView.actionDeleteList',\n });\n\n const [reqLists, setReqLists] = useState<RequisitionLists | null>(null);\n const [isAdding, setIsAdding] = useState(false);\n const [isFetching, setIsFetching] = useState(false);\n\n const handleAddNew = useCallback(() => {\n // Close any open modal before opening create form\n if (closeModal) {\n closeModal();\n }\n setIsAdding(true);\n }, [closeModal]);\n\n const handleCancelCreate = useCallback(() => setIsAdding(false), []);\n\n // Wrap callbacks to close create form when opening modals\n const wrappedCallbacks = useMemo(() => {\n if (!callbacks) return undefined;\n\n return {\n handleOpenRenameModal: (rl: RequisitionListModel) => {\n // Close create form if open - use functional update to avoid dependency on isAdding\n setIsAdding((current) => {\n if (current) return false;\n return current;\n });\n callbacks.handleOpenRenameModal(rl);\n },\n handleOpenDeleteModal: (rl: RequisitionListModel) => {\n // Close create form if open - use functional update to avoid dependency on isAdding\n setIsAdding((current) => {\n if (current) return false;\n return current;\n });\n callbacks.handleOpenDeleteModal(rl);\n },\n };\n }, [callbacks]);\n\n const fetchPage = useCallback(async (page: number, pageSize: number) => {\n setIsFetching(true);\n try {\n const data = await getRequisitionLists(page, pageSize);\n const currentPage = data?.page_info?.current_page ?? 1;\n const totalPages = data?.page_info?.total_pages ?? 0;\n const hasRows = (data?.items?.length ?? 0) > 0;\n\n if (!hasRows && currentPage > 1 && totalPages >= currentPage - 1) {\n const prev = currentPage - 1;\n const prevData = await getRequisitionLists(prev, pageSize);\n setReqLists(prevData);\n } else {\n setReqLists(data);\n }\n } finally {\n setIsFetching(false);\n }\n }, []);\n\n useEffect(() => {\n const requisitionListsEvent = events.on(\n 'requisitionLists/data',\n (data: RequisitionLists) => {\n if (data && data.items) {\n setReqLists(data);\n }\n },\n { eager: true }\n );\n return () => {\n requisitionListsEvent?.off();\n };\n }, []);\n\n useEffect(() => {\n if (!reqLists) {\n void fetchPage(1, DEFAULT_PAGE_SIZE);\n }\n }, [reqLists, fetchPage]);\n\n const handlePageChange = useCallback(\n (page?: number) => {\n const currentPage = page ?? reqLists?.page_info?.current_page ?? 1;\n const currentPageSize =\n reqLists?.page_info?.page_size ?? DEFAULT_PAGE_SIZE;\n return fetchPage(currentPage, currentPageSize);\n },\n [fetchPage, reqLists]\n );\n\n const handlePageSizeChange = useCallback(\n async (pageSize: number) => {\n // Reset to page 1 when changing page size\n await fetchPage(1, pageSize);\n },\n [fetchPage]\n );\n\n const rows: Row[] = useMemo(\n () =>\n (reqLists?.items ?? []).map((rl: RequisitionListModel) => {\n return {\n name: (\n <div className=\"requisition-list-grid-wrapper__name\">\n <div className=\"requisition-list-grid-wrapper__name__title\">\n <a\n href=\"#\"\n onClick={(e: Event): void => {\n e.preventDefault();\n if (routeRequisitionListDetails) {\n const result = routeRequisitionListDetails(rl.uid);\n if (typeof result === 'string') {\n window.location.href = result;\n }\n }\n }}\n >\n {rl.name}\n </a>\n </div>\n {rl.description && (\n <div className=\"requisition-list-grid-wrapper__name__description\">\n {rl.description}\n </div>\n )}\n </div>\n ),\n items_count: rl.items_count,\n last_updated: new Date(rl.updated_at).toLocaleString(),\n actions: (\n <div className=\"requisition-list-grid-wrapper__actions\">\n <Button\n variant=\"tertiary\"\n type=\"button\"\n data-testid=\"rename-button\"\n onClick={() => wrappedCallbacks?.handleOpenRenameModal(rl)}\n >\n {translations.actionRename}\n </Button>\n <Button\n variant=\"tertiary\"\n type=\"button\"\n data-testid=\"delete-button\"\n onClick={() => wrappedCallbacks?.handleOpenDeleteModal(rl)}\n >\n {translations.actionDeleteList}\n </Button>\n </div>\n ),\n };\n }),\n [\n reqLists?.items,\n translations.actionRename,\n translations.actionDeleteList,\n wrappedCallbacks,\n routeRequisitionListDetails,\n ]\n );\n\n return {\n rows,\n isLoading: isFetching || !reqLists,\n pageInfo: reqLists?.page_info,\n handlePageChange,\n handlePageSizeChange,\n isAdding,\n handleAddNew,\n handleCancelCreate,\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 { HTMLAttributes, useState, useCallback } from 'preact/compat';\nimport { Header } from '@adobe-commerce/elsie/components';\nimport { Container, Slot, SlotProps } from '@adobe-commerce/elsie/lib';\nimport { RequisitionList as RequisitionListModel } from '@/requisitionList/data/models/requisitionList';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport {\n RequisitionListGridWrapper,\n RequisitionListModal,\n RequisitionListForm,\n} from '@/requisitionList/components';\nimport { useRequisitionListGrid } from '@/requisitionList/hooks';\nimport { deleteRequisitionList } from '@/requisitionList/api/deleteRequisitionList/deleteRequisitionList';\nimport { updateRequisitionList } from '@/requisitionList/api/updateRequisitionList';\nimport { events } from '@adobe-commerce/event-bus';\n\nexport interface RequisitionListGridProps\n extends HTMLAttributes<HTMLDivElement> {\n routeRequisitionListDetails?: (uid: string) => string | void;\n slots?: {\n Header?: SlotProps;\n };\n}\n\nexport const RequisitionListGrid: Container<RequisitionListGridProps> = ({\n routeRequisitionListDetails,\n slots,\n}: RequisitionListGridProps) => {\n const [modal, setModal] = useState<{\n type: 'rename' | 'delete' | null;\n isOpen: boolean;\n isLoading: boolean;\n requisitionList: RequisitionListModel | null;\n }>({\n type: null,\n isOpen: false,\n isLoading: false,\n requisitionList: null,\n });\n\n const closeModal = useCallback(() => {\n setModal({\n type: null,\n isOpen: false,\n isLoading: false,\n requisitionList: null,\n });\n }, []);\n\n const handleOpenRenameModal = useCallback((rl: RequisitionListModel) => {\n setModal({\n type: 'rename',\n isOpen: true,\n isLoading: false,\n requisitionList: rl,\n });\n }, []);\n\n const handleOpenDeleteModal = useCallback((rl: RequisitionListModel) => {\n setModal({\n type: 'delete',\n isOpen: true,\n isLoading: false,\n requisitionList: rl,\n });\n }, []);\n\n const {\n rows,\n isLoading,\n pageInfo,\n handlePageChange,\n handlePageSizeChange,\n isAdding,\n handleAddNew,\n handleCancelCreate,\n } = useRequisitionListGrid(\n { handleOpenRenameModal, handleOpenDeleteModal },\n routeRequisitionListDetails,\n closeModal\n );\n\n const handleRenameSubmit = useCallback(\n async (values: { name: string; description?: string }) => {\n /* istanbul ignore next: Defensive check - modal.requisitionList should always be set when this function is called */\n if (!modal.requisitionList) return;\n\n try {\n await updateRequisitionList(\n modal.requisitionList.uid,\n values.name,\n values.description\n );\n events.emit('requisitionList/alert', {\n action: 'update',\n type: 'success',\n context: 'requisitionList',\n });\n await handlePageChange();\n closeModal();\n } catch (error) {\n events.emit('requisitionList/alert', {\n action: 'update',\n type: 'error',\n context: 'requisitionList',\n });\n }\n },\n [modal.requisitionList, handlePageChange, closeModal]\n );\n\n const handleDeleteConfirm = async () => {\n /* istanbul ignore next: Defensive check - modal.requisitionList should always be set when this function is called */\n if (!modal.requisitionList) return;\n setModal({ ...modal, isLoading: true });\n await deleteRequisitionList(modal.requisitionList.uid)\n .then(async () => {\n events.emit('requisitionList/alert', {\n type: 'success',\n action: 'delete',\n context: 'requisitionList',\n });\n })\n .catch(() => {\n events.emit('requisitionList/alert', {\n type: 'error',\n action: 'delete',\n context: 'requisitionList',\n });\n })\n .finally(async () => {\n await handlePageChange();\n closeModal();\n });\n };\n\n const translations = useText({\n containerTitle: `RequisitionList.containerTitle`,\n updateTitle: `RequisitionList.RequisitionListForm.updateTitle`,\n deleteRequisitionListTitle:\n 'RequisitionList.RequisitionListWrapper.deleteRequisitionListTitle',\n deleteRequisitionListMessage:\n 'RequisitionList.RequisitionListWrapper.deleteRequisitionListMessage',\n cancelAction: 'RequisitionList.RequisitionListWrapper.cancelAction',\n confirmAction: 'RequisitionList.RequisitionListWrapper.confirmAction',\n });\n\n const getHeader = useCallback(() => {\n if (slots?.Header) {\n return (\n <Slot\n name=\"Header\"\n aria-label={translations.containerTitle}\n title={translations.containerTitle}\n slot={slots.Header}\n />\n );\n }\n return (\n <Header\n aria-label={translations.containerTitle}\n role=\"region\"\n title={translations.containerTitle}\n />\n );\n }, [slots, translations.containerTitle]);\n\n return (\n <>\n <RequisitionListGridWrapper\n header={getHeader()}\n rows={rows}\n skeletonRowCount={10}\n isLoading={isLoading}\n pageInfo={pageInfo}\n handlePageChange={handlePageChange}\n handlePageSizeChange={handlePageSizeChange}\n defaultPageSize={10}\n isAdding={isAdding}\n handleAddNew={handleAddNew}\n handleCancelCreate={handleCancelCreate}\n />\n\n {/* Rename Modal */}\n {modal.type === 'rename' && modal.isOpen && modal.requisitionList && (\n <RequisitionListModal\n isOpen={modal.isOpen}\n isLoading={modal.isLoading}\n title={translations.updateTitle}\n modalContent={\n <RequisitionListForm\n mode=\"update\"\n defaultValues={{\n name: modal.requisitionList.name,\n description: modal.requisitionList.description || '',\n }}\n onSubmit={handleRenameSubmit}\n onCancel={closeModal}\n />\n }\n handleModalOnClose={closeModal}\n />\n )}\n\n {/* Delete Confirmation Modal */}\n {modal.type === 'delete' && modal.isOpen && (\n <RequisitionListModal\n isOpen={modal.isOpen}\n isLoading={modal.isLoading}\n title={translations.deleteRequisitionListTitle}\n modalContent={translations.deleteRequisitionListMessage}\n confirmBtnCaption={translations.confirmAction}\n closeBtnCaption={translations.cancelAction}\n handleModalOnClose={closeModal}\n handleModalOnConfirm={handleDeleteConfirm}\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 { HTMLAttributes, useEffect } from 'preact/compat';\nimport { FunctionComponent, VNode } from 'preact';\nimport { VComponent, classes } from '@adobe-commerce/elsie/lib';\nimport {\n RequisitionListActions,\n EmptyList,\n PageSizePicker,\n} from '@/requisitionList/components';\nimport { RequisitionListForm } from '@/requisitionList/containers';\nimport {\n Pagination,\n Card,\n Table,\n InLineAlert,\n} from '@adobe-commerce/elsie/components';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { events } from '@adobe-commerce/event-bus';\nimport '@/requisitionList/components/RequisitionListGridWrapper/RequisitionListGridWrapper.css';\nimport { useRequisitionListAlert } from '@/requisitionList/hooks';\n\nexport interface RequisitionListGridWrapperProps\n extends HTMLAttributes<HTMLDivElement> {\n className?: string;\n isLoading?: boolean;\n header?: VNode;\n rows: Array<Record<string, VNode | string | number | undefined>>;\n skeletonRowCount: number;\n pageInfo?: {\n total_pages: number;\n current_page: number;\n page_size: number;\n };\n handlePageChange: (page?: number) => Promise<void>;\n handlePageSizeChange?: (pageSize: number) => Promise<void>;\n defaultPageSize?: number;\n isAdding: boolean;\n handleAddNew: () => void;\n handleCancelCreate: () => void;\n}\n\nexport const RequisitionListGridWrapper: FunctionComponent<\n RequisitionListGridWrapperProps\n> = ({\n className,\n isLoading = false,\n header,\n rows = [],\n skeletonRowCount = 10,\n pageInfo,\n handlePageChange,\n handlePageSizeChange,\n defaultPageSize = 10,\n isAdding,\n handleAddNew,\n handleCancelCreate,\n ...props\n}) => {\n const translations = useText({\n name: `RequisitionList.RequisitionListWrapper.name`,\n itemsCount: `RequisitionList.RequisitionListWrapper.itemsCount`,\n lastUpdated: `RequisitionList.RequisitionListWrapper.lastUpdated`,\n actions: `RequisitionList.RequisitionListWrapper.actions`,\n emptyList: `RequisitionList.RequisitionListWrapper.emptyList`,\n });\n\n const hasAnyItems = (pageInfo?.total_pages ?? 0) > 0;\n const showEmptyList = !isLoading && rows.length === 0 && !hasAnyItems;\n\n const { alert, setAlert, handleRequisitionListAlert } =\n useRequisitionListAlert();\n\n useEffect(() => {\n const alertEvent = events.on('requisitionList/alert', handleRequisitionListAlert);\n\n // Check for pending alert in localStorage (e.g., after redirect from deletion)\n try {\n const pendingAlert = localStorage.getItem('requisitionListPendingAlert');\n if (pendingAlert) {\n const alertPayload = JSON.parse(pendingAlert);\n handleRequisitionListAlert(alertPayload);\n localStorage.removeItem('requisitionListPendingAlert');\n }\n } catch (e) {\n // Ignore localStorage errors (e.g., in private browsing mode)\n }\n\n return () => {\n alertEvent?.off();\n };\n }, [handleRequisitionListAlert]);\n\n return (\n <div\n {...props}\n className={classes(['requisition-list-grid-wrapper', className])}\n data-testid=\"requisition-list-grid-wrapper\"\n >\n {/* Requisition List Header */}\n {header && (\n <div\n className={classes([\n 'requisition-list-grid-wrapper__header',\n className,\n ])}\n data-testid=\"requisition-list-grid-wrapper-header\"\n >\n <VComponent node={header} />\n </div>\n )}\n {/* Requisition List alerts go here */}\n {alert && (\n <div className=\"requisition-list__alert-wrapper\">\n <InLineAlert\n heading={alert.description}\n type={alert.type}\n variant=\"primary\"\n onDismiss={() => setAlert(null)}\n />\n </div>\n )}\n\n {showEmptyList ? (\n <EmptyList textContent={translations.emptyList} />\n ) : (\n <>\n {/* Requisition Lists Table */}\n <Table\n columns={[\n { key: 'name', label: translations.name },\n { key: 'items_count', label: translations.itemsCount },\n { key: 'last_updated', label: translations.lastUpdated },\n { key: 'actions', label: translations.actions },\n ]}\n rowData={rows}\n loading={isLoading}\n skeletonRowCount={skeletonRowCount}\n />\n <div\n className={classes([\n 'requisition-list-grid-wrapper__pagination',\n className,\n ])}\n >\n <div className=\"requisition-list-grid-wrapper__pagination-controls\">\n <PageSizePicker\n currentPageSize={pageInfo?.page_size || defaultPageSize}\n onPageSizeChange={\n handlePageSizeChange || (() => Promise.resolve())\n }\n disabled={isLoading}\n />\n {pageInfo && pageInfo.total_pages > 1 && (\n <Pagination\n totalPages={pageInfo.total_pages}\n currentPage={pageInfo.current_page}\n onChange={handlePageChange}\n />\n )}\n </div>\n </div>\n </>\n )}\n\n {/* Requisition Lists Form */}\n <div\n className={classes([\n 'requisition-list-grid-wrapper__add-new',\n className,\n ])}\n >\n {isAdding ? (\n <Card variant=\"secondary\">\n <RequisitionListForm\n mode=\"create\"\n onSuccess={async () => {\n await handlePageChange();\n handleCancelCreate();\n handleRequisitionListAlert({\n type: 'success',\n action: 'create',\n context: 'requisitionList',\n });\n }}\n onError={() => {\n handleRequisitionListAlert({\n type: 'error',\n action: 'create',\n context: 'requisitionList',\n });\n }}\n onCancel={handleCancelCreate}\n />\n </Card>\n ) : (\n <RequisitionListActions onAddNew={handleAddNew} />\n )}\n </div>\n </div>\n );\n};\n"],"names":["useRequisitionListGrid","callbacks","routeRequisitionListDetails","closeModal","translations","useText","reqLists","setReqLists","useState","isAdding","setIsAdding","isFetching","setIsFetching","handleAddNew","useCallback","handleCancelCreate","wrappedCallbacks","useMemo","rl","current","fetchPage","page","pageSize","data","getRequisitionLists","currentPage","_a","totalPages","_b","_c","prev","prevData","useEffect","requisitionListsEvent","events","DEFAULT_PAGE_SIZE","handlePageChange","currentPageSize","handlePageSizeChange","jsxs","jsx","e","result","Button","RequisitionListGrid","slots","modal","setModal","handleOpenRenameModal","handleOpenDeleteModal","rows","isLoading","pageInfo","handleRenameSubmit","values","updateRequisitionList","handleDeleteConfirm","deleteRequisitionList","getHeader","Slot","Header","Fragment","RequisitionListGridWrapper","RequisitionListModal","RequisitionListForm","className","header","skeletonRowCount","defaultPageSize","props","hasAnyItems","showEmptyList","alert","setAlert","handleRequisitionListAlert","useRequisitionListAlert","alertEvent","pendingAlert","alertPayload","classes","VComponent","InLineAlert","EmptyList","Table","PageSizePicker","Pagination","Card","RequisitionListActions"],"mappings":"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"}
1
+ {"version":3,"file":"RequisitionListGrid.js","sources":["/@dropins/storefront-requisition-list/src/hooks/useRequisitionListGrid.tsx","/@dropins/storefront-requisition-list/src/containers/RequisitionListGrid/RequisitionListGrid.tsx","/@dropins/storefront-requisition-list/src/components/RequisitionListGridWrapper/RequisitionListGridWrapper.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 { useMemo, useState, useCallback, useEffect } from 'preact/compat';\nimport { VNode } from 'preact';\nimport { Button } from '@adobe-commerce/elsie/components';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { RequisitionList as RequisitionListModel } from '@/requisitionList/data/models/requisitionList';\nimport { getRequisitionLists } from '@/requisitionList/api/getRequisitionLists';\nimport { RequisitionLists } from '@/requisitionList/data/models/requisitionLists';\nimport { events } from '@adobe-commerce/event-bus';\nimport { DEFAULT_PAGE_SIZE } from '@/requisitionList/lib/constants';\n\ntype Row = Record<string, VNode | string | number | undefined>;\ntype Callbacks = {\n handleOpenRenameModal: (rl: RequisitionListModel) => void;\n handleOpenDeleteModal: (rl: RequisitionListModel) => void;\n};\n\nexport function useRequisitionListGrid(\n callbacks?: Callbacks,\n routeRequisitionListDetails?: (uid: string) => string | void,\n closeModal?: () => void\n) {\n const translations = useText({\n actionRename: 'RequisitionList.RequisitionListView.actionRename',\n actionDeleteList: 'RequisitionList.RequisitionListView.actionDeleteList',\n });\n\n const [reqLists, setReqLists] = useState<RequisitionLists | null>(null);\n const [isAdding, setIsAdding] = useState(false);\n const [isFetching, setIsFetching] = useState(false);\n\n const handleAddNew = useCallback(() => {\n // Close any open modal before opening create form\n if (closeModal) {\n closeModal();\n }\n setIsAdding(true);\n }, [closeModal]);\n\n const handleCancelCreate = useCallback(() => setIsAdding(false), []);\n\n // Wrap callbacks to close create form when opening modals\n const wrappedCallbacks = useMemo(() => {\n if (!callbacks) return undefined;\n\n return {\n handleOpenRenameModal: (rl: RequisitionListModel) => {\n // Close create form if open - use functional update to avoid dependency on isAdding\n setIsAdding((current) => {\n if (current) return false;\n return current;\n });\n callbacks.handleOpenRenameModal(rl);\n },\n handleOpenDeleteModal: (rl: RequisitionListModel) => {\n // Close create form if open - use functional update to avoid dependency on isAdding\n setIsAdding((current) => {\n if (current) return false;\n return current;\n });\n callbacks.handleOpenDeleteModal(rl);\n },\n };\n }, [callbacks]);\n\n const fetchPage = useCallback(async (page: number, pageSize: number) => {\n setIsFetching(true);\n try {\n const data = await getRequisitionLists(page, pageSize);\n const currentPage = data?.page_info?.current_page ?? 1;\n const totalPages = data?.page_info?.total_pages ?? 0;\n const hasRows = (data?.items?.length ?? 0) > 0;\n\n if (!hasRows && currentPage > 1 && totalPages >= currentPage - 1) {\n const prev = currentPage - 1;\n const prevData = await getRequisitionLists(prev, pageSize);\n setReqLists(prevData);\n } else {\n setReqLists(data);\n }\n } finally {\n setIsFetching(false);\n }\n }, []);\n\n useEffect(() => {\n const requisitionListsEvent = events.on(\n 'requisitionLists/data',\n (data: RequisitionLists) => {\n if (data && data.items) {\n setReqLists(data);\n }\n },\n { eager: true }\n );\n return () => {\n requisitionListsEvent?.off();\n };\n }, []);\n\n useEffect(() => {\n if (!reqLists) {\n void fetchPage(1, DEFAULT_PAGE_SIZE);\n }\n }, [reqLists, fetchPage]);\n\n const handlePageChange = useCallback(\n (page?: number) => {\n const currentPage = page ?? reqLists?.page_info?.current_page ?? 1;\n const currentPageSize =\n reqLists?.page_info?.page_size ?? DEFAULT_PAGE_SIZE;\n return fetchPage(currentPage, currentPageSize);\n },\n [fetchPage, reqLists]\n );\n\n const handlePageSizeChange = useCallback(\n async (pageSize: number) => {\n // Reset to page 1 when changing page size\n await fetchPage(1, pageSize);\n },\n [fetchPage]\n );\n\n const rows: Row[] = useMemo(\n () =>\n (reqLists?.items ?? []).map((rl: RequisitionListModel) => {\n return {\n name: (\n <div className=\"requisition-list-grid-wrapper__name\">\n <div className=\"requisition-list-grid-wrapper__name__title\">\n <a\n href=\"#\"\n onClick={(e: Event): void => {\n e.preventDefault();\n if (routeRequisitionListDetails) {\n const result = routeRequisitionListDetails(rl.uid);\n if (typeof result === 'string') {\n window.location.href = result;\n }\n }\n }}\n >\n {rl.name}\n </a>\n </div>\n {rl.description && (\n <div className=\"requisition-list-grid-wrapper__name__description\">\n {rl.description}\n </div>\n )}\n </div>\n ),\n items_count: rl.items_count,\n last_updated: new Date(rl.updated_at).toLocaleString(),\n actions: (\n <div className=\"requisition-list-grid-wrapper__actions\">\n <Button\n variant=\"tertiary\"\n type=\"button\"\n data-testid=\"rename-button\"\n onClick={() => wrappedCallbacks?.handleOpenRenameModal(rl)}\n >\n {translations.actionRename}\n </Button>\n <Button\n variant=\"tertiary\"\n type=\"button\"\n data-testid=\"delete-button\"\n onClick={() => wrappedCallbacks?.handleOpenDeleteModal(rl)}\n >\n {translations.actionDeleteList}\n </Button>\n </div>\n ),\n };\n }),\n [\n reqLists?.items,\n translations.actionRename,\n translations.actionDeleteList,\n wrappedCallbacks,\n routeRequisitionListDetails,\n ]\n );\n\n return {\n rows,\n isLoading: isFetching || !reqLists,\n pageInfo: reqLists?.page_info,\n totalCount: reqLists?.total_count,\n handlePageChange,\n handlePageSizeChange,\n isAdding,\n handleAddNew,\n handleCancelCreate,\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 { HTMLAttributes, useState, useCallback } from 'preact/compat';\nimport { Header } from '@adobe-commerce/elsie/components';\nimport { Container, Slot, SlotProps } from '@adobe-commerce/elsie/lib';\nimport { RequisitionList as RequisitionListModel } from '@/requisitionList/data/models/requisitionList';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport {\n RequisitionListGridWrapper,\n RequisitionListModal,\n RequisitionListForm,\n NotFound,\n} from '@/requisitionList/components';\nimport { useRequisitionListGrid } from '@/requisitionList/hooks/useRequisitionListGrid';\nimport { useRequisitionListEnabled } from '@/requisitionList/hooks/useRequisitionListEnabled';\nimport { deleteRequisitionList } from '@/requisitionList/api/deleteRequisitionList/deleteRequisitionList';\nimport { updateRequisitionList } from '@/requisitionList/api/updateRequisitionList';\nimport { events } from '@adobe-commerce/event-bus';\n\nexport interface RequisitionListGridProps\n extends HTMLAttributes<HTMLDivElement> {\n routeRequisitionListDetails?: (uid: string) => string | void;\n /**\n * Fallback URL to redirect when requisition lists are not enabled.\n * Defaults to '/customer/account'\n */\n fallbackRoute?: string;\n slots?: {\n Header?: SlotProps;\n };\n}\n\nexport const RequisitionListGrid: Container<RequisitionListGridProps> = ({\n routeRequisitionListDetails,\n fallbackRoute = '/customer/account',\n slots,\n}: RequisitionListGridProps) => {\n const { isEnabled } = useRequisitionListEnabled();\n\n const [modal, setModal] = useState<{\n type: 'rename' | 'delete' | null;\n isOpen: boolean;\n isLoading: boolean;\n requisitionList: RequisitionListModel | null;\n }>({\n type: null,\n isOpen: false,\n isLoading: false,\n requisitionList: null,\n });\n\n const closeModal = useCallback(() => {\n setModal({\n type: null,\n isOpen: false,\n isLoading: false,\n requisitionList: null,\n });\n }, []);\n\n const handleOpenRenameModal = useCallback((rl: RequisitionListModel) => {\n setModal({\n type: 'rename',\n isOpen: true,\n isLoading: false,\n requisitionList: rl,\n });\n }, []);\n\n const handleOpenDeleteModal = useCallback((rl: RequisitionListModel) => {\n setModal({\n type: 'delete',\n isOpen: true,\n isLoading: false,\n requisitionList: rl,\n });\n }, []);\n\n const {\n rows,\n isLoading,\n pageInfo,\n totalCount,\n handlePageChange,\n handlePageSizeChange,\n isAdding,\n handleAddNew,\n handleCancelCreate,\n } = useRequisitionListGrid(\n { handleOpenRenameModal, handleOpenDeleteModal },\n routeRequisitionListDetails,\n closeModal\n );\n\n const handleRenameSubmit = useCallback(\n async (values: { name: string; description?: string }) => {\n /* istanbul ignore next: Defensive check - modal.requisitionList should always be set when this function is called */\n if (!modal.requisitionList) return;\n\n try {\n await updateRequisitionList(\n modal.requisitionList.uid,\n values.name,\n values.description\n );\n events.emit('requisitionList/alert', {\n action: 'update',\n type: 'success',\n context: 'requisitionList',\n });\n await handlePageChange();\n closeModal();\n } catch (error) {\n events.emit('requisitionList/alert', {\n action: 'update',\n type: 'error',\n context: 'requisitionList',\n });\n }\n },\n [modal.requisitionList, handlePageChange, closeModal]\n );\n\n const handleDeleteConfirm = async () => {\n /* istanbul ignore next: Defensive check - modal.requisitionList should always be set when this function is called */\n if (!modal.requisitionList) return;\n setModal({ ...modal, isLoading: true });\n await deleteRequisitionList(modal.requisitionList.uid)\n .then(async () => {\n events.emit('requisitionList/alert', {\n type: 'success',\n action: 'delete',\n context: 'requisitionList',\n });\n })\n .catch(() => {\n events.emit('requisitionList/alert', {\n type: 'error',\n action: 'delete',\n context: 'requisitionList',\n });\n })\n .finally(async () => {\n await handlePageChange();\n closeModal();\n });\n };\n\n const translations = useText({\n containerTitle: `RequisitionList.containerTitle`,\n updateTitle: `RequisitionList.RequisitionListForm.updateTitle`,\n deleteRequisitionListTitle:\n 'RequisitionList.RequisitionListWrapper.deleteRequisitionListTitle',\n deleteRequisitionListMessage:\n 'RequisitionList.RequisitionListWrapper.deleteRequisitionListMessage',\n cancelAction: 'RequisitionList.RequisitionListWrapper.cancelAction',\n confirmAction: 'RequisitionList.RequisitionListWrapper.confirmAction',\n notEnabledTitle: `RequisitionList.RequisitionListsNotEnabled.title`,\n notEnabledMessage: `RequisitionList.RequisitionListsNotEnabled.message`,\n notEnabledActionLabel: `RequisitionList.RequisitionListsNotEnabled.actionLabel`,\n });\n\n const getHeader = useCallback(() => {\n if (slots?.Header) {\n return (\n <Slot\n name=\"Header\"\n aria-label={translations.containerTitle}\n title={translations.containerTitle}\n slot={slots.Header}\n />\n );\n }\n return (\n <Header\n aria-label={translations.containerTitle}\n role=\"region\"\n title={translations.containerTitle}\n />\n );\n }, [slots, translations.containerTitle]);\n\n if (isEnabled === false) {\n return (\n <NotFound\n title={translations.notEnabledTitle}\n message={translations.notEnabledMessage}\n actionLabel={translations.notEnabledActionLabel}\n onAction={() => {\n window.location.href = fallbackRoute;\n }}\n />\n );\n }\n\n return (\n <>\n <RequisitionListGridWrapper\n header={getHeader()}\n rows={rows}\n skeletonRowCount={10}\n isLoading={isLoading}\n pageInfo={pageInfo}\n totalCount={totalCount}\n handlePageChange={handlePageChange}\n handlePageSizeChange={handlePageSizeChange}\n defaultPageSize={10}\n isAdding={isAdding}\n handleAddNew={handleAddNew}\n handleCancelCreate={handleCancelCreate}\n />\n\n {/* Rename Modal */}\n {modal.type === 'rename' && modal.isOpen && modal.requisitionList && (\n <RequisitionListModal\n isOpen={modal.isOpen}\n isLoading={modal.isLoading}\n title={translations.updateTitle}\n modalContent={\n <RequisitionListForm\n mode=\"update\"\n defaultValues={{\n name: modal.requisitionList.name,\n description: modal.requisitionList.description || '',\n }}\n onSubmit={handleRenameSubmit}\n onCancel={closeModal}\n />\n }\n handleModalOnClose={closeModal}\n />\n )}\n\n {/* Delete Confirmation Modal */}\n {modal.type === 'delete' && modal.isOpen && (\n <RequisitionListModal\n isOpen={modal.isOpen}\n isLoading={modal.isLoading}\n title={translations.deleteRequisitionListTitle}\n modalContent={translations.deleteRequisitionListMessage}\n confirmBtnCaption={translations.confirmAction}\n closeBtnCaption={translations.cancelAction}\n handleModalOnClose={closeModal}\n handleModalOnConfirm={handleDeleteConfirm}\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 { HTMLAttributes, useEffect } from 'preact/compat';\nimport { FunctionComponent, VNode } from 'preact';\nimport { VComponent, classes } from '@adobe-commerce/elsie/lib';\nimport {\n RequisitionListActions,\n EmptyList,\n PageSizePicker,\n PaginationItemsCounter,\n} from '@/requisitionList/components';\nimport { RequisitionListForm } from '@/requisitionList/containers';\nimport {\n Pagination,\n Card,\n Table,\n InLineAlert,\n} from '@adobe-commerce/elsie/components';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { events } from '@adobe-commerce/event-bus';\nimport '@/requisitionList/components/RequisitionListGridWrapper/RequisitionListGridWrapper.css';\nimport { useRequisitionListAlert } from '@/requisitionList/hooks';\n\nexport interface RequisitionListGridWrapperProps\n extends HTMLAttributes<HTMLDivElement> {\n className?: string;\n isLoading?: boolean;\n header?: VNode;\n rows: Array<Record<string, VNode | string | number | undefined>>;\n skeletonRowCount: number;\n pageInfo?: {\n total_pages?: number;\n current_page?: number;\n page_size?: number;\n };\n totalCount?: number;\n handlePageChange: (page?: number) => Promise<void>;\n handlePageSizeChange?: (pageSize: number) => Promise<void>;\n defaultPageSize?: number;\n isAdding: boolean;\n handleAddNew: () => void;\n handleCancelCreate: () => void;\n}\n\nexport const RequisitionListGridWrapper: FunctionComponent<\n RequisitionListGridWrapperProps\n> = ({\n className,\n isLoading = false,\n header,\n rows = [],\n skeletonRowCount = 10,\n pageInfo,\n totalCount = 0,\n handlePageChange,\n handlePageSizeChange,\n defaultPageSize = 10,\n isAdding,\n handleAddNew,\n handleCancelCreate,\n ...props\n}) => {\n const translations = useText({\n name: `RequisitionList.RequisitionListWrapper.name`,\n itemsCount: `RequisitionList.RequisitionListWrapper.itemsCount`,\n lastUpdated: `RequisitionList.RequisitionListWrapper.lastUpdated`,\n actions: `RequisitionList.RequisitionListWrapper.actions`,\n emptyList: `RequisitionList.RequisitionListWrapper.emptyList`,\n show: `RequisitionList.PageSizePicker.show`,\n });\n\n const hasAnyItems = (pageInfo?.total_pages ?? 0) > 0;\n const showEmptyList = !isLoading && rows.length === 0 && !hasAnyItems;\n\n const { alert, setAlert, handleRequisitionListAlert } =\n useRequisitionListAlert();\n\n useEffect(() => {\n const alertEvent = events.on(\n 'requisitionList/alert',\n handleRequisitionListAlert\n );\n\n // Check for pending alert in localStorage (e.g., after redirect from deletion)\n try {\n const pendingAlert = localStorage.getItem('requisitionListPendingAlert');\n if (pendingAlert) {\n const alertPayload = JSON.parse(pendingAlert);\n handleRequisitionListAlert(alertPayload);\n localStorage.removeItem('requisitionListPendingAlert');\n }\n } catch (e) {\n // Ignore localStorage errors (e.g., in private browsing mode)\n }\n\n return () => {\n alertEvent?.off();\n };\n }, [handleRequisitionListAlert]);\n\n return (\n <div\n {...props}\n className={classes(['requisition-list-grid-wrapper', className])}\n data-testid=\"requisition-list-grid-wrapper\"\n >\n {/* Requisition List Header */}\n {header && (\n <div\n className={classes([\n 'requisition-list-grid-wrapper__header',\n className,\n ])}\n data-testid=\"requisition-list-grid-wrapper-header\"\n >\n <VComponent node={header} />\n </div>\n )}\n {/* Requisition List alerts go here */}\n {alert && (\n <div className=\"requisition-list__alert-wrapper\">\n <InLineAlert\n heading={alert.description}\n type={alert.type}\n variant=\"primary\"\n onDismiss={() => setAlert(null)}\n />\n </div>\n )}\n\n {showEmptyList ? (\n <EmptyList textContent={translations.emptyList} />\n ) : (\n <>\n {/* Requisition Lists Table */}\n <Table\n columns={[\n { key: 'name', label: translations.name },\n { key: 'items_count', label: translations.itemsCount },\n { key: 'last_updated', label: translations.lastUpdated },\n { key: 'actions', label: translations.actions },\n ]}\n rowData={rows}\n loading={isLoading}\n skeletonRowCount={skeletonRowCount}\n />\n {pageInfo && (\n <div\n className={classes([\n 'requisition-list-grid-wrapper__pagination',\n className,\n ])}\n >\n <PaginationItemsCounter\n pageInfo={pageInfo}\n totalCount={totalCount}\n />\n {(pageInfo.total_pages || 0) > 1 && (\n <Pagination\n totalPages={pageInfo.total_pages}\n currentPage={pageInfo.current_page || 1}\n onChange={handlePageChange}\n disabled={isLoading}\n />\n )}\n <div className=\"requisition-list-grid-wrapper__pagination-picker\">\n <span>{translations.show}</span>\n <PageSizePicker\n currentPageSize={pageInfo.page_size || defaultPageSize}\n onPageSizeChange={\n handlePageSizeChange || (() => Promise.resolve())\n }\n disabled={isLoading}\n />\n </div>\n </div>\n )}\n </>\n )}\n\n {/* Requisition Lists Form */}\n <div\n className={classes([\n 'requisition-list-grid-wrapper__add-new',\n className,\n ])}\n >\n {isAdding ? (\n <Card variant=\"secondary\">\n <RequisitionListForm\n mode=\"create\"\n onSuccess={async () => {\n await handlePageChange();\n handleCancelCreate();\n handleRequisitionListAlert({\n type: 'success',\n action: 'create',\n context: 'requisitionList',\n });\n }}\n onError={() => {\n handleRequisitionListAlert({\n type: 'error',\n action: 'create',\n context: 'requisitionList',\n });\n }}\n onCancel={handleCancelCreate}\n />\n </Card>\n ) : (\n <RequisitionListActions onAddNew={handleAddNew} />\n )}\n </div>\n </div>\n );\n};\n"],"names":["useRequisitionListGrid","callbacks","routeRequisitionListDetails","closeModal","translations","useText","reqLists","setReqLists","useState","isAdding","setIsAdding","isFetching","setIsFetching","handleAddNew","useCallback","handleCancelCreate","wrappedCallbacks","useMemo","rl","current","fetchPage","page","pageSize","data","getRequisitionLists","currentPage","_a","totalPages","_b","_c","prev","prevData","useEffect","requisitionListsEvent","events","DEFAULT_PAGE_SIZE","handlePageChange","currentPageSize","handlePageSizeChange","jsxs","jsx","e","result","Button","RequisitionListGrid","fallbackRoute","slots","isEnabled","useRequisitionListEnabled","modal","setModal","handleOpenRenameModal","handleOpenDeleteModal","rows","isLoading","pageInfo","totalCount","handleRenameSubmit","values","updateRequisitionList","handleDeleteConfirm","deleteRequisitionList","getHeader","Slot","Header","NotFound","Fragment","RequisitionListGridWrapper","RequisitionListModal","RequisitionListForm","className","header","skeletonRowCount","defaultPageSize","props","hasAnyItems","showEmptyList","alert","setAlert","handleRequisitionListAlert","useRequisitionListAlert","alertEvent","pendingAlert","alertPayload","classes","VComponent","InLineAlert","EmptyList","Table","PaginationItemsCounter","Pagination","PageSizePicker","Card","RequisitionListActions"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  /*! Copyright 2025 Adobe
2
2
  All Rights Reserved. */
3
- import{jsx as e,jsxs as m,Fragment as x}from"@dropins/tools/preact-jsx-runtime.js";import*as k from"@dropins/tools/preact-compat.js";import{useState as q,useEffect as T,useCallback as p,useMemo as D}from"@dropins/tools/preact-compat.js";import{Card as E,Icon as N,Button as F,InLineAlert as V}from"@dropins/tools/components.js";import{c as H,R as J,f as K,h as X,t as Y}from"../chunks/updateRequisitionList.js";import{events as I}from"@dropins/tools/event-bus.js";import"@dropins/tools/preact-hooks.js";import"@dropins/tools/lib.js";import"../chunks/RequisitionListForm.js";import{R as Z}from"../chunks/RequisitionListForm2.js";import{s as l,a as $,b,u as ii}from"../chunks/state.js";import{g as ti}from"../chunks/getRequisitionLists.js";import{u as si,S as P,E as ei}from"../chunks/RequisitionListView.js";import"@dropins/tools/preact.js";import{R as oi}from"../chunks/RequisitionListActions.js";import{R as ni}from"../chunks/RequisitionListModal.js";import{useText as ri}from"@dropins/tools/i18n.js";import"@dropins/tools/fetch-graphql.js";let L=0;const ai=()=>{const[u,o]=q(l.requisitionLists),[d,c]=q(l.requisitionListsLoading),[n,r]=q(L);return T(()=>{l.requisitionLists.length===0&&!l.requisitionListsLoading&&($(!0),ti(1,100).then(t=>{const i=(t==null?void 0:t.items)||[];b(i),L++}).catch(t=>{console.error("Error fetching requisition lists:",t),b([]),L++}).finally(()=>{$(!1)}))},[]),T(()=>{const t=I.on("requisitionLists/data",s=>{s&&(b(s),L++,r(L),o(l.requisitionLists),c(l.requisitionListsLoading))}),i=I.on("requisitionList/data",s=>{s&&(ii(s),L++,r(L),o([...l.requisitionLists]),c(l.requisitionListsLoading))});return()=>{t==null||t.off(),i==null||i.off()}},[]),T(()=>{n!==L&&(o(l.requisitionLists),c(l.requisitionListsLoading),r(L))},[n]),{lists:u,loading:d}},li=()=>{var d,c;const[u,o]=q(((d=l.config)==null?void 0:d.is_requisition_list_active)==="1"&&((c=l.config)==null?void 0:c.company_enabled)===!0);return T(()=>{const n=I.on("requisitionList/initialized",()=>{var r,t;o(((r=l.config)==null?void 0:r.is_requisition_list_active)==="1"&&((t=l.config)==null?void 0:t.company_enabled)===!0)});return()=>n==null?void 0:n.off()},[]),{isEnabled:u}},ci=`
3
+ import{jsx as s,jsxs as q,Fragment as x}from"@dropins/tools/preact-jsx-runtime.js";import*as k from"@dropins/tools/preact-compat.js";import{useState as p,useEffect as v,useCallback as m,useMemo as D}from"@dropins/tools/preact-compat.js";import{Card as y,Icon as E,Button as F,InLineAlert as V}from"@dropins/tools/components.js";import{c as H,R as J,f as K,h as X,t as Y}from"../chunks/updateRequisitionList.js";import{events as A}from"@dropins/tools/event-bus.js";import"@dropins/tools/preact-hooks.js";import"@dropins/tools/lib.js";import"../chunks/RequisitionListForm.js";import{R as Z}from"../chunks/RequisitionListForm2.js";import{u as ii,a as ti,S as $,E as si}from"../chunks/RequisitionListView.js";import"@dropins/tools/preact.js";import{s as l,a as P,b as N,u as ei}from"../chunks/state.js";import{g as oi}from"../chunks/getRequisitionLists.js";import{R as ni}from"../chunks/RequisitionListActions.js";import{R as ri}from"../chunks/RequisitionListModal.js";import{useText as ai}from"@dropins/tools/i18n.js";import"@dropins/tools/fetch-graphql.js";const li=`
4
4
  mutation ADD_PRODUCTS_TO_REQUISITION_LIST_MUTATION(
5
5
  $requisitionListUid: ID!,
6
6
  $requisitionListItems: [RequisitionListItemsInput!]!
@@ -19,5 +19,5 @@ import{jsx as e,jsxs as m,Fragment as x}from"@dropins/tools/preact-jsx-runtime.j
19
19
  }
20
20
  ${H}
21
21
  ${J}
22
- `,di=async(u,o)=>{var t;const d=o.map(i=>{const s={sku:i.sku,quantity:i.quantity};return i.parent_sku&&(s.parent_sku=i.parent_sku),i.selected_options&&i.selected_options.length>0&&(s.selected_options=i.selected_options),i.entered_options&&i.entered_options.length>0&&(s.entered_options=i.entered_options),s}),{errors:c,data:n}=await K(ci,{variables:{requisitionListUid:u,requisitionListItems:d}});if(c)return X(c);if(!((t=n==null?void 0:n.addProductsToRequisitionList)!=null&&t.requisition_list))return null;const r=Y(n.addProductsToRequisitionList.requisition_list);return I.emit("requisitionList/data",r),r},ui=u=>k.createElement("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...u},k.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M7.74512 9.87701L12.0001 14.132L16.2551 9.87701",stroke:"currentColor",strokeWidth:1,strokeLinecap:"square",strokeLinejoin:"round"})),Ai=({canCreate:u=!0,sku:o,selectedOptions:d,quantity:c=1,beforeAddProdToReqList:n})=>{const r=ri({createTitle:"RequisitionList.RequisitionListForm.createTitle",addToRequisitionList:"RequisitionList.RequisitionListForm.addToRequisitionList",emptyList:"RequisitionList.RequisitionListWrapper.emptyList",addToNewRequisitionList:"RequisitionList.RequisitionListSelector.addToNewRequisitionList",addToSelected:"RequisitionList.RequisitionListSelector.addToSelected"}),[t,i]=q(!1),[s,A]=q(null),{lists:_}=ai(),{isEnabled:O}=li(),{alert:f,setAlert:w,handleRequisitionListAlert:R}=si(),[U,M]=q({isOpen:!1,isLoading:!1}),g=p(()=>{M({isOpen:!0,isLoading:!1})},[]),S=p(()=>{M({isOpen:!1,isLoading:!1}),A(null),i(!1),w(null)},[w]),C=p(async a=>{try{const h={sku:o,quantity:c,...d&&d.length>0?{selected_options:d}:{}};await di(a,[h])}catch(h){throw console.error("Error adding product to list:",h),h}},[o,c,d]),v=p(async a=>{try{await C(a),R({action:"add",type:"success",context:"product",skus:[o]})}catch{R({action:"add",type:"error",context:"product",skus:[o]})}finally{setTimeout(()=>{S()},2e3)}},[o,C,S,R]),Q=p(a=>{a.preventDefault(),s&&v(s)},[s,v]),G=p(()=>{if(!n){g();return}Promise.resolve(n()).then(()=>{g()}).catch(()=>{})},[n,g]),y=D(()=>[...(_==null?void 0:_.map(a=>({value:a.uid,text:a.name})))??[]],[_]),j=D(()=>e("div",{className:"requisition-list-selector__available-lists",children:y.map(a=>m(E,{variant:s===a.value?"primary":"secondary",onClick:()=>{A(a.value)},children:[e(N,{source:P}),e("span",{children:a.text})]},a.value))}),[y,s]),z=y.length>0?t?m("button",{type:"button","aria-label":"Select a requisition list",role:"button",className:"requisition-list-actions","data-testid":"requisition-list-actions-button",onClick:()=>i(!1),children:[e("span",{className:"requisition-list-actions__title","data-testid":"requisition-list-actions-button-text",children:r.addToRequisitionList}),e(N,{source:ui,size:"32"})]}):e(E,{variant:"secondary",children:m("form",{onSubmit:Q,className:"requisition-list-selector__form",children:[j,e("div",{className:"requisition-list-form__actions",children:e(F,{type:"submit",disabled:!s,children:r.addToSelected})})]})}):e(ei,{textContent:r.emptyList}),W=t?e(E,{variant:"secondary",children:e(Z,{mode:"create",onSuccess:async a=>{await v(a.uid)},onError:()=>{R({action:"add",type:"error",context:"product",skus:[o]})},onCancel:()=>{i(!1)}})}):e(oi,{onAddNew:()=>{i(!0)}}),B=m(x,{children:[f&&e("div",{className:"requisition-list__alert-wrapper",children:e(V,{id:`requisition-list-selector__alert__${o}`,heading:f.description,type:f.type,variant:"primary",className:"requisition-list-selector__alert"},`requisition-list-selector__alert__${o}`)}),!f&&m(x,{children:[z,u&&W]})]});return O===null||!O?null:m("div",{className:"requisition-list-selector",children:[e(F,{"aria-label":r.addToRequisitionList,"data-testid":"requisition-list-selector",size:"medium",variant:"tertiary",icon:e(N,{source:P}),onClick:G}),U.isOpen&&e(ni,{isOpen:!0,isLoading:U.isLoading,title:r.addToRequisitionList,modalContent:B,handleModalOnClose:S})]})};export{Ai as RequisitionListSelector,Ai as default};
22
+ `,di=async(L,n)=>{var e;const u=n.map(i=>{const t={sku:i.sku,quantity:i.quantity};return i.parent_sku&&(t.parent_sku=i.parent_sku),i.selected_options&&i.selected_options.length>0&&(t.selected_options=i.selected_options),i.entered_options&&i.entered_options.length>0&&(t.entered_options=i.entered_options),t}),{errors:d,data:a}=await K(li,{variables:{requisitionListUid:L,requisitionListItems:u}});if(d)return X(d);if(!((e=a==null?void 0:a.addProductsToRequisitionList)!=null&&e.requisition_list))return null;const r=Y(a.addProductsToRequisitionList.requisition_list);return A.emit("requisitionList/data",r),r},ci=L=>k.createElement("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...L},k.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M7.74512 9.87701L12.0001 14.132L16.2551 9.87701",stroke:"currentColor",strokeWidth:1,strokeLinecap:"square",strokeLinejoin:"round"}));let c=0;const ui=()=>{const[L,n]=p(l.requisitionLists),[u,d]=p(l.requisitionListsLoading),[a,r]=p(c);return v(()=>{l.requisitionLists.length===0&&!l.requisitionListsLoading&&(P(!0),oi(1,100).then(e=>{const i=(e==null?void 0:e.items)||[];N(i),c++}).catch(e=>{console.error("Error fetching requisition lists:",e),N([]),c++}).finally(()=>{P(!1)}))},[]),v(()=>{const e=A.on("requisitionLists/data",t=>{t&&(N(t),c++,r(c),n(l.requisitionLists),d(l.requisitionListsLoading))}),i=A.on("requisitionList/data",t=>{t&&(ei(t),c++,r(c),n([...l.requisitionLists]),d(l.requisitionListsLoading))});return()=>{e==null||e.off(),i==null||i.off()}},[]),v(()=>{a!==c&&(n(l.requisitionLists),d(l.requisitionListsLoading),r(c))},[a]),{lists:L,loading:u}},Oi=({canCreate:L=!0,sku:n,selectedOptions:u,quantity:d=1,beforeAddProdToReqList:a})=>{const r=ai({createTitle:"RequisitionList.RequisitionListForm.createTitle",addToRequisitionList:"RequisitionList.RequisitionListForm.addToRequisitionList",emptyList:"RequisitionList.RequisitionListWrapper.emptyList",addToNewRequisitionList:"RequisitionList.RequisitionListSelector.addToNewRequisitionList",addToSelected:"RequisitionList.RequisitionListSelector.addToSelected"}),[e,i]=p(!1),[t,O]=p(null),{lists:R}=ui(),{isEnabled:w}=ii(),{alert:_,setAlert:U,handleRequisitionListAlert:f}=ti(),[b,M]=p({isOpen:!1,isLoading:!1}),T=m(()=>{M({isOpen:!0,isLoading:!1})},[]),I=m(()=>{M({isOpen:!1,isLoading:!1}),O(null),i(!1),U(null)},[U]),C=m(async o=>{try{const h={sku:n,quantity:d,...u&&u.length>0?{selected_options:u}:{}};await di(o,[h])}catch(h){throw console.error("Error adding product to list:",h),h}},[n,d,u]),S=m(async o=>{try{await C(o),f({action:"add",type:"success",context:"product",skus:[n]})}catch{f({action:"add",type:"error",context:"product",skus:[n]})}finally{setTimeout(()=>{I()},2e3)}},[n,C,I,f]),Q=m(o=>{o.preventDefault(),t&&S(t)},[t,S]),G=m(()=>{if(!a){T();return}Promise.resolve(a()).then(()=>{T()}).catch(()=>{})},[a,T]),g=D(()=>[...(R==null?void 0:R.map(o=>({value:o.uid,text:o.name})))??[]],[R]),j=D(()=>s("div",{className:"requisition-list-selector__available-lists",children:g.map(o=>q(y,{variant:t===o.value?"primary":"secondary",onClick:()=>{O(o.value)},children:[s(E,{source:$}),s("span",{children:o.text})]},o.value))}),[g,t]),W=g.length>0?e?q("button",{type:"button","aria-label":"Select a requisition list",role:"button",className:"requisition-list-actions","data-testid":"requisition-list-actions-button",onClick:()=>i(!1),children:[s("span",{className:"requisition-list-actions__title","data-testid":"requisition-list-actions-button-text",children:r.addToRequisitionList}),s(E,{source:ci,size:"32"})]}):s(y,{variant:"secondary",children:q("form",{onSubmit:Q,className:"requisition-list-selector__form",children:[j,s("div",{className:"requisition-list-form__actions",children:s(F,{type:"submit",disabled:!t,children:r.addToSelected})})]})}):s(si,{textContent:r.emptyList}),z=e?s(y,{variant:"secondary",children:s(Z,{mode:"create",onSuccess:async o=>{await S(o.uid)},onError:()=>{f({action:"add",type:"error",context:"product",skus:[n]})},onCancel:()=>{i(!1)}})}):s(ni,{onAddNew:()=>{i(!0)}}),B=q(x,{children:[_&&s("div",{className:"requisition-list__alert-wrapper",children:s(V,{id:`requisition-list-selector__alert__${n}`,heading:_.description,type:_.type,variant:"primary",className:"requisition-list-selector__alert"},`requisition-list-selector__alert__${n}`)}),!_&&q(x,{children:[W,L&&z]})]});return w===null||!w?null:q("div",{className:"requisition-list-selector",children:[s(F,{"aria-label":r.addToRequisitionList,"data-testid":"requisition-list-selector",size:"medium",variant:"tertiary",icon:s(E,{source:$}),onClick:G}),b.isOpen&&s(ri,{isOpen:!0,isLoading:b.isLoading,title:r.addToRequisitionList,modalContent:B,handleModalOnClose:I})]})};export{Oi as RequisitionListSelector,Oi as default};
23
23
  //# sourceMappingURL=RequisitionListSelector.js.map