@dropins/storefront-requisition-list 1.2.0-alpha1 → 1.2.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"state.js","sources":["/@dropins/storefront-requisition-list/src/lib/state.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\nimport { RequisitionList } from '@/requisitionList/data/models/requisitionList';\n\nexport type StoreConfig = {\n is_requisition_list_active?: string;\n company_enabled?: boolean;\n [key: string]: any; // Allow additional config properties\n};\n\ntype State = {\n authenticated: boolean;\n config: StoreConfig | undefined;\n requisitionLists: RequisitionList[];\n requisitionListsLoading: boolean;\n requisitionListsVersion: number;\n};\n\nconst _state: State = (() => {\n return {\n authenticated: false,\n config: undefined,\n requisitionLists: [],\n requisitionListsLoading: false,\n requisitionListsVersion: 0,\n };\n})();\n\n// Proxy state to allow reactivity\nexport const state = new Proxy(_state, {\n set(target, key, value) {\n return Reflect.set(target, key, value);\n },\n get(target, key) {\n return target[key as keyof State];\n },\n});\n\n// Helper functions for managing requisition lists\nexport const setRequisitionLists = (lists: RequisitionList[]) => {\n state.requisitionLists = lists;\n state.requisitionListsVersion++;\n};\n\nexport const addRequisitionList = (list: RequisitionList) => {\n state.requisitionLists = [...state.requisitionLists, list];\n state.requisitionListsVersion++;\n};\n\nexport const updateRequisitionList = (list: RequisitionList) => {\n const exists = state.requisitionLists.some(\n (l: RequisitionList) => l.uid === list.uid\n );\n\n if (exists) {\n state.requisitionLists = state.requisitionLists.map((l: RequisitionList) =>\n l.uid === list.uid ? list : l\n );\n } else {\n state.requisitionLists = [...state.requisitionLists, list];\n }\n state.requisitionListsVersion++;\n};\n\nexport const getRequisitionListsFromState = () => {\n return state.requisitionLists;\n};\n\nexport const setRequisitionListsLoading = (loading: boolean) => {\n state.requisitionListsLoading = loading;\n};\n"],"names":["_state","state","target","key","value","setRequisitionLists","lists","updateRequisitionList","list","l","setRequisitionListsLoading","loading"],"mappings":"AAiCA,MAAMA,EACG,CACL,cAAe,GACf,OAAQ,OACR,iBAAkB,CAAA,EAClB,wBAAyB,GACzB,wBAAyB,CAAA,EAKhBC,EAAQ,IAAI,MAAMD,EAAQ,CACrC,IAAIE,EAAQC,EAAKC,EAAO,CACtB,OAAO,QAAQ,IAAIF,EAAQC,EAAKC,CAAK,CACvC,EACA,IAAIF,EAAQC,EAAK,CACf,OAAOD,EAAOC,CAAkB,CAClC,CACF,CAAC,EAGYE,EAAuBC,GAA6B,CAC/DL,EAAM,iBAAmBK,EACzBL,EAAM,yBACR,EAOaM,EAAyBC,GAA0B,CAC/CP,EAAM,iBAAiB,KACnCQ,GAAuBA,EAAE,MAAQD,EAAK,GAAA,EAIvCP,EAAM,iBAAmBA,EAAM,iBAAiB,IAAKQ,GACnDA,EAAE,MAAQD,EAAK,IAAMA,EAAOC,CAAA,EAG9BR,EAAM,iBAAmB,CAAC,GAAGA,EAAM,iBAAkBO,CAAI,EAE3DP,EAAM,yBACR,EAMaS,EAA8BC,GAAqB,CAC9DV,EAAM,wBAA0BU,CAClC"}
1
+ {"version":3,"file":"state.js","sources":["/@dropins/storefront-requisition-list/src/lib/state.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\nimport { RequisitionList } from '@/requisitionList/data/models/requisitionList';\n\nexport type StoreConfig = {\n is_requisition_list_active?: string;\n company_enabled?: boolean;\n [key: string]: any; // Allow additional config properties\n};\n\ntype State = {\n authenticated: boolean;\n config: StoreConfig | undefined;\n requisitionLists: RequisitionList[];\n requisitionListsLoading: boolean;\n requisitionListsVersion: number;\n};\n\nconst _state: State = (() => {\n return {\n authenticated: false,\n config: undefined,\n requisitionLists: [],\n requisitionListsLoading: false,\n requisitionListsVersion: 0,\n };\n})();\n\n// Proxy state to allow reactivity\nexport const state = new Proxy(_state, {\n set(target, key, value) {\n return Reflect.set(target, key, value);\n },\n get(target, key) {\n return target[key as keyof State];\n },\n});\n\n// Helper functions for managing requisition lists\nexport const setRequisitionLists = (lists: RequisitionList[]) => {\n state.requisitionLists = lists;\n state.requisitionListsVersion++;\n};\n\nexport const addRequisitionList = (list: RequisitionList) => {\n state.requisitionLists = [...state.requisitionLists, list];\n state.requisitionListsVersion++;\n};\n\nexport const updateRequisitionList = (list: RequisitionList) => {\n const exists = state.requisitionLists.some(\n (l: RequisitionList) => l.uid === list.uid\n );\n\n if (exists) {\n state.requisitionLists = state.requisitionLists.map((l: RequisitionList) =>\n l.uid === list.uid ? list : l\n );\n } else {\n state.requisitionLists = [...state.requisitionLists, list];\n }\n state.requisitionListsVersion++;\n};\n\nexport const getRequisitionListsFromState = () => {\n return state.requisitionLists;\n};\n\nexport const setRequisitionListsLoading = (loading: boolean) => {\n state.requisitionListsLoading = loading;\n};\n"],"names":["_state","state","target","key","value","setRequisitionLists","lists","updateRequisitionList","list","l","setRequisitionListsLoading","loading"],"mappings":"AAiCA,MAAMA,EACG,CACL,cAAe,GACf,OAAQ,OACR,iBAAkB,CAAC,EACnB,wBAAyB,GACzB,wBAAyB,CAC3B,EAIWC,EAAQ,IAAI,MAAMD,EAAQ,CACrC,IAAIE,EAAQC,EAAKC,EAAO,CACtB,OAAO,QAAQ,IAAIF,EAAQC,EAAKC,CAAK,CACvC,EACA,IAAIF,EAAQC,EAAK,CACf,OAAOD,EAAOC,CAAkB,CAAA,CAEpC,CAAC,EAGYE,EAAuBC,GAA6B,CAC/DL,EAAM,iBAAmBK,EACnBL,EAAA,yBACR,EAOaM,EAAyBC,GAA0B,CAC/CP,EAAM,iBAAiB,KACnCQ,GAAuBA,EAAE,MAAQD,EAAK,GACzC,EAGQP,EAAA,iBAAmBA,EAAM,iBAAiB,IAAKQ,GACnDA,EAAE,MAAQD,EAAK,IAAMA,EAAOC,CAC9B,EAEAR,EAAM,iBAAmB,CAAC,GAAGA,EAAM,iBAAkBO,CAAI,EAErDP,EAAA,yBACR,EAMaS,EAA8BC,GAAqB,CAC9DV,EAAM,wBAA0BU,CAClC"}
@@ -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 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 { handleFetchError } from '@/requisitionList/lib/fetch-error';\nimport { RequisitionList } from '@/requisitionList/data/models/requisitionList';\nimport { Item } from '@/requisitionList/data/models/item';\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 enrichConfigurableProducts?: (items: Item[]) => Promise<Item[]>\n): Promise<RequisitionList | null> => {\n const { errors, data } = await fetchGraphQl(UPDATE_REQUISITION_LIST_MUTATION, {\n variables: {\n requisitionListUid,\n name,\n description,\n pageSize,\n currentPage,\n },\n });\n\n if (errors) return handleFetchError(errors);\n\n if (!data?.updateRequisitionList?.requisition_list) {\n return null;\n }\n\n const rawList = data.updateRequisitionList.requisition_list;\n let payload = transformRequisitionList(rawList);\n if (payload?.items?.length && enrichConfigurableProducts) {\n payload = {\n ...payload,\n items: await enrichConfigurableProducts(payload.items),\n };\n }\n events.emit('requisitionList/data', payload);\n return payload;\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","_c","option","value","sample","_d","REQUISITION_LIST_ITEMS_FRAGMENT","UPDATE_REQUISITION_LIST_MUTATION","updateRequisitionList","requisitionListUid","name","description","pageSize","currentPage","enrichConfigurableProducts","rawList","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/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 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 { handleFetchError } from '@/requisitionList/lib/fetch-error';\nimport { RequisitionList } from '@/requisitionList/data/models/requisitionList';\nimport { Item } from '@/requisitionList/data/models/item';\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 enrichConfigurableProducts?: (items: Item[]) => Promise<Item[]>\n): Promise<RequisitionList | null> => {\n const { errors, data } = await fetchGraphQl(UPDATE_REQUISITION_LIST_MUTATION, {\n variables: {\n requisitionListUid,\n name,\n description,\n pageSize,\n currentPage,\n },\n });\n\n if (errors) return handleFetchError(errors);\n\n if (!data?.updateRequisitionList?.requisition_list) {\n return null;\n }\n\n const rawList = data.updateRequisitionList.requisition_list;\n let payload = transformRequisitionList(rawList);\n if (payload?.items?.length && enrichConfigurableProducts) {\n payload = {\n ...payload,\n items: await enrichConfigurableProducts(payload.items),\n };\n }\n events.emit('requisitionList/data', payload);\n return payload;\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","_c","option","value","sample","_d","REQUISITION_LIST_ITEMS_FRAGMENT","UPDATE_REQUISITION_LIST_MUTATION","updateRequisitionList","requisitionListUid","name","description","pageSize","currentPage","enrichConfigurableProducts","rawList","payload","events"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  /*! Copyright 2026 Adobe
2
2
  All Rights Reserved. */
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,VComponent as Z,classes as v}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};
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 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
+ {"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 +1 @@
1
- {"version":3,"file":"RequisitionListSelector.js","sources":["/@dropins/storefront-requisition-list/src/api/addProductsToRequisitionList/graphql/addProductsToRequisitionList.ts","/@dropins/storefront-requisition-list/src/api/addProductsToRequisitionList/addProductsToRequisitionList.ts","../../node_modules/@adobe-commerce/elsie/src/icons/ChevronDown.svg","/@dropins/storefront-requisition-list/src/hooks/useRequisitionLists.ts","/@dropins/storefront-requisition-list/src/containers/RequisitionListSelector/RequisitionListSelector.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 { REQUISITION_LIST_FRAGMENT } from '@/requisitionList/api/fragments/RequisitionListFragment.graphql';\nimport { REQUISITION_LIST_ITEMS_FRAGMENT } from '@/requisitionList/api/fragments/RequisitionListItemsFragment.graphql';\n\nexport const ADD_PRODUCTS_TO_REQUISITION_LIST_MUTATION = `\n mutation ADD_PRODUCTS_TO_REQUISITION_LIST_MUTATION(\n $requisitionListUid: ID!, \n $requisitionListItems: [RequisitionListItemsInput!]!\n ) {\n addProductsToRequisitionList(\n requisitionListUid: $requisitionListUid\n requisitionListItems: $requisitionListItems\n ) {\n requisition_list {\n ...REQUISITION_LIST_FRAGMENT\n items {\n ...REQUISITION_LIST_ITEMS_FRAGMENT\n }\n }\n }\n }\n${REQUISITION_LIST_ITEMS_FRAGMENT}\n${REQUISITION_LIST_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 { RequisitionList } from '@/requisitionList/data/models/requisitionList';\nimport { fetchGraphQl } from '@/requisitionList/api';\nimport { ADD_PRODUCTS_TO_REQUISITION_LIST_MUTATION } from '@/requisitionList/api/addProductsToRequisitionList/graphql/addProductsToRequisitionList';\nimport { handleFetchError } from '@/requisitionList/lib/fetch-error';\nimport { transformRequisitionList } from '@/requisitionList/data/transforms';\nimport { events } from '@adobe-commerce/event-bus';\n\n// Correct type for GraphQL RequisitionListItemsInput\nexport type RequisitionListItemsInput = {\n sku: string;\n quantity: number;\n parent_sku?: string;\n selected_options?: string[];\n entered_options?: Array<{ uid: string; value: string }>;\n};\n\nexport const addProductsToRequisitionList = async (\n requisitionListUid: string,\n requisitionListItems: Array<RequisitionListItemsInput>\n): Promise<RequisitionList | null> => {\n // Clean items before performing the mutation - remove empty fields\n const cleanedItems = requisitionListItems.map((item) => {\n const cleaned: any = {\n sku: item.sku,\n quantity: item.quantity,\n };\n\n if (item.parent_sku) cleaned.parent_sku = item.parent_sku;\n if (item.selected_options && item.selected_options.length > 0) {\n cleaned.selected_options = item.selected_options;\n }\n if (item.entered_options && item.entered_options.length > 0) {\n cleaned.entered_options = item.entered_options;\n }\n\n return cleaned;\n });\n\n const { errors, data } = await fetchGraphQl(\n ADD_PRODUCTS_TO_REQUISITION_LIST_MUTATION,\n {\n variables: {\n requisitionListUid,\n requisitionListItems: cleanedItems,\n },\n }\n );\n\n if (errors) return handleFetchError(errors);\n\n if (!data?.addProductsToRequisitionList?.requisition_list) {\n return null;\n }\n\n const payload = transformRequisitionList(\n data.addProductsToRequisitionList.requisition_list\n );\n events.emit('requisitionList/data', payload);\n return payload;\n};\n","import * as React from \"react\";\nconst SvgChevronDown = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.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\" }));\nexport default SvgChevronDown;\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 { useEffect, useState } from 'preact/compat';\nimport {\n state,\n setRequisitionLists,\n setRequisitionListsLoading,\n updateRequisitionList,\n} from '@/requisitionList/lib/state';\nimport { getRequisitionLists } from '@/requisitionList/api';\nimport { RequisitionList } from '@/requisitionList/data/models/requisitionList';\nimport { events } from '@adobe-commerce/event-bus';\n\nlet updateCounter = 0; // Counter to track updates across all hooks\n\nexport const useRequisitionLists = () => {\n const [lists, setLists] = useState<RequisitionList[]>(state.requisitionLists);\n const [loading, setLoading] = useState(state.requisitionListsLoading);\n const [lastUpdate, setLastUpdate] = useState(updateCounter);\n\n // Fetch lists if empty on mount\n useEffect(() => {\n if (state.requisitionLists.length === 0 && !state.requisitionListsLoading) {\n setRequisitionListsLoading(true);\n getRequisitionLists(1, 100)\n .then((res: { items: RequisitionList[] }) => {\n const newLists = res?.items || [];\n setRequisitionLists(newLists);\n updateCounter++;\n })\n .catch((error: any) => {\n console.error('Error fetching requisition lists:', error);\n setRequisitionLists([]);\n updateCounter++;\n })\n .finally(() => {\n setRequisitionListsLoading(false);\n });\n }\n }, []);\n\n // Listen to event bus updates\n useEffect(() => {\n const multiListListener = events.on(\n 'requisitionLists/data',\n (payload: RequisitionList[] | null) => {\n if (payload) {\n setRequisitionLists(payload);\n updateCounter++;\n setLastUpdate(updateCounter);\n setLists(state.requisitionLists);\n setLoading(state.requisitionListsLoading);\n }\n }\n );\n\n const singleListListener = events.on(\n 'requisitionList/data',\n (payload: RequisitionList | null) => {\n if (!payload) return;\n\n // Only the FIRST hook instance to receive this should update\n // Use the updateRequisitionList helper which handles both add and update\n updateRequisitionList(payload);\n updateCounter++;\n setLastUpdate(updateCounter);\n setLists([...state.requisitionLists]);\n setLoading(state.requisitionListsLoading);\n }\n );\n\n return () => {\n multiListListener?.off();\n singleListListener?.off();\n };\n }, []);\n\n // Sync with global state when it changes\n useEffect(() => {\n if (lastUpdate !== updateCounter) {\n setLists(state.requisitionLists);\n setLoading(state.requisitionListsLoading);\n setLastUpdate(updateCounter);\n }\n }, [lastUpdate]);\n\n return { lists, loading };\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, useCallback, useMemo, useState } from 'preact/compat';\nimport { Container } from '@adobe-commerce/elsie/lib';\nimport { RequisitionList } from '../../data/models/requisitionList.js';\nimport {\n Button,\n Card,\n Icon,\n InLineAlert,\n} from '@adobe-commerce/elsie/components';\nimport { addProductsToRequisitionList } from '@/requisitionList/api/addProductsToRequisitionList/addProductsToRequisitionList';\nimport {\n EmptyList,\n RequisitionListModal,\n RequisitionListActions,\n} from '@/requisitionList/components';\nimport { RequisitionListForm } from '@/requisitionList/containers';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { ChevronDown, List } from '@adobe-commerce/elsie/icons';\nimport { JSX } from 'preact';\nimport '@/requisitionList/containers/RequisitionListSelector/RequisitionListSelector.css';\nimport {\n useRequisitionLists,\n useRequisitionListAlert,\n useRequisitionListEnabled,\n} from '@/requisitionList/hooks';\n\nexport interface RequisitionListSelectorProps\n extends HTMLAttributes<HTMLDivElement> {\n canCreate?: boolean;\n sku: string;\n selectedOptions?: string[];\n quantity?: number;\n beforeAddProdToReqList?: () => Promise<void> | void;\n}\n\nexport const RequisitionListSelector: Container<\n RequisitionListSelectorProps\n> = ({\n canCreate = true,\n sku,\n selectedOptions,\n quantity = 1,\n beforeAddProdToReqList,\n}: RequisitionListSelectorProps) => {\n const translations = useText({\n createTitle: `RequisitionList.RequisitionListForm.createTitle`,\n addToRequisitionList: `RequisitionList.RequisitionListForm.addToRequisitionList`,\n emptyList: `RequisitionList.RequisitionListWrapper.emptyList`,\n addToNewRequisitionList: `RequisitionList.RequisitionListSelector.addToNewRequisitionList`,\n addToSelected: `RequisitionList.RequisitionListSelector.addToSelected`,\n });\n const [isAdding, setIsAdding] = useState(false);\n const [selectedReqListUid, setSelectedReqListUid] = useState<string | null>(\n null\n );\n const { lists } = useRequisitionLists();\n const { isEnabled } = useRequisitionListEnabled();\n\n const { alert, setAlert, handleRequisitionListAlert } =\n useRequisitionListAlert();\n\n const [modal, setModal] = useState<{\n isOpen: boolean;\n isLoading: boolean;\n }>({\n isOpen: false,\n isLoading: false,\n });\n\n const handleOpenModal = useCallback(() => {\n setModal({ isOpen: true, isLoading: false });\n }, []);\n\n const handleCloseModal = useCallback(() => {\n setModal({ isOpen: false, isLoading: false });\n setSelectedReqListUid(null);\n setIsAdding(false);\n setAlert(null);\n }, [setAlert]);\n\n const handleAddProdToReqList = useCallback(\n async (requisitionListUid: string) => {\n try {\n // Build the object dynamically, omitting selected_options if not present\n const itemToAdd = {\n sku,\n quantity,\n ...(selectedOptions && selectedOptions.length > 0\n ? { selected_options: selectedOptions }\n : {}),\n };\n\n await addProductsToRequisitionList(requisitionListUid, [itemToAdd]);\n } catch (error) {\n console.error('Error adding product to list:', error);\n throw error;\n }\n },\n [sku, quantity, selectedOptions]\n );\n\n const handleAddProductAndEmitAlert = useCallback(\n async (requisitionListUid: string) => {\n try {\n await handleAddProdToReqList(requisitionListUid);\n\n handleRequisitionListAlert({\n action: 'add',\n type: 'success',\n context: 'product',\n skus: [sku],\n });\n } catch {\n handleRequisitionListAlert({\n action: 'add',\n type: 'error',\n context: 'product',\n skus: [sku],\n });\n } finally {\n setTimeout(() => {\n handleCloseModal();\n }, 2000);\n }\n },\n [sku, handleAddProdToReqList, handleCloseModal, handleRequisitionListAlert]\n );\n\n const handleSubmit = useCallback(\n (event: JSX.TargetedEvent<HTMLFormElement, SubmitEvent>) => {\n event.preventDefault();\n if (!selectedReqListUid) return;\n handleAddProductAndEmitAlert(selectedReqListUid);\n },\n [selectedReqListUid, handleAddProductAndEmitAlert]\n );\n\n const handleOpenModalWithValidation = useCallback(() => {\n if (!beforeAddProdToReqList) {\n handleOpenModal();\n return;\n }\n\n Promise.resolve(beforeAddProdToReqList())\n .then(() => {\n handleOpenModal();\n })\n .catch(() => {\n // Validation failed - don't open modal\n });\n }, [beforeAddProdToReqList, handleOpenModal]);\n\n const reqListOptions = useMemo(\n () => [\n ...(lists?.map((reqList: RequisitionList) => ({\n value: reqList.uid,\n text: reqList.name,\n })) ?? []),\n ],\n [lists]\n );\n\n const availableReqLists = useMemo(\n () => (\n <div className=\"requisition-list-selector__available-lists\">\n {reqListOptions.map((option: { value: string; text: string }) => (\n <Card\n variant={\n selectedReqListUid === option.value ? 'primary' : 'secondary'\n }\n key={option.value}\n onClick={() => {\n setSelectedReqListUid(option.value);\n }}\n >\n <Icon source={List} />\n <span>{option.text}</span>\n </Card>\n ))}\n </div>\n ),\n [reqListOptions, selectedReqListUid]\n );\n\n const selectReqListSection =\n reqListOptions.length > 0 ? (\n isAdding ? (\n <button\n type=\"button\"\n aria-label=\"Select a requisition list\"\n role=\"button\"\n className=\"requisition-list-actions\"\n data-testid=\"requisition-list-actions-button\"\n onClick={() => setIsAdding(false)}\n >\n <span\n className=\"requisition-list-actions__title\"\n data-testid=\"requisition-list-actions-button-text\"\n >\n {translations.addToRequisitionList}\n </span>\n <Icon source={ChevronDown} size=\"32\" />\n </button>\n ) : (\n <Card variant=\"secondary\">\n <form\n onSubmit={handleSubmit}\n className=\"requisition-list-selector__form\"\n >\n {availableReqLists}\n <div className=\"requisition-list-form__actions\">\n <Button type=\"submit\" disabled={!selectedReqListUid}>\n {translations.addToSelected}\n </Button>\n </div>\n </form>\n </Card>\n )\n ) : (\n <EmptyList textContent={translations.emptyList} />\n );\n\n const createReqListSection = !isAdding ? (\n <RequisitionListActions\n onAddNew={() => {\n setIsAdding(true);\n }}\n />\n ) : (\n <Card variant=\"secondary\">\n <RequisitionListForm\n mode=\"create\"\n onSuccess={async (newList: RequisitionList) => {\n await handleAddProductAndEmitAlert(newList.uid);\n }}\n onError={() => {\n handleRequisitionListAlert({\n action: 'add',\n type: 'error',\n context: 'product',\n skus: [sku],\n });\n }}\n onCancel={() => {\n setIsAdding(false);\n }}\n />\n </Card>\n );\n\n const modalContent = (\n <>\n {alert && (\n <div className=\"requisition-list__alert-wrapper\">\n <InLineAlert\n key={`requisition-list-selector__alert__${sku}`}\n id={`requisition-list-selector__alert__${sku}`}\n heading={alert.description}\n type={alert.type}\n variant=\"primary\"\n className=\"requisition-list-selector__alert\"\n />\n </div>\n )}\n {!alert && (\n <>\n {selectReqListSection}\n {canCreate && createReqListSection}\n </>\n )}\n </>\n );\n\n // Early return after all hooks have been called\n if (isEnabled === null || !isEnabled) {\n return null;\n }\n\n return (\n <div className=\"requisition-list-selector\">\n <Button\n aria-label={translations.addToRequisitionList}\n data-testid=\"requisition-list-selector\"\n size=\"medium\"\n variant=\"tertiary\"\n icon={<Icon source={List} />}\n onClick={handleOpenModalWithValidation}\n />\n {modal.isOpen && (\n <RequisitionListModal\n isOpen\n isLoading={modal.isLoading}\n title={translations.addToRequisitionList}\n modalContent={modalContent}\n handleModalOnClose={handleCloseModal}\n />\n )}\n </div>\n );\n};\n"],"names":["ADD_PRODUCTS_TO_REQUISITION_LIST_MUTATION","REQUISITION_LIST_ITEMS_FRAGMENT","REQUISITION_LIST_FRAGMENT","addProductsToRequisitionList","requisitionListUid","requisitionListItems","cleanedItems","item","cleaned","errors","data","fetchGraphQl","handleFetchError","_a","payload","transformRequisitionList","events","SvgChevronDown","props","React","updateCounter","useRequisitionLists","lists","setLists","useState","state","loading","setLoading","lastUpdate","setLastUpdate","useEffect","setRequisitionListsLoading","getRequisitionLists","res","newLists","setRequisitionLists","error","multiListListener","singleListListener","updateRequisitionList","RequisitionListSelector","canCreate","sku","selectedOptions","quantity","beforeAddProdToReqList","translations","useText","isAdding","setIsAdding","selectedReqListUid","setSelectedReqListUid","isEnabled","useRequisitionListEnabled","alert","setAlert","handleRequisitionListAlert","useRequisitionListAlert","modal","setModal","handleOpenModal","useCallback","handleCloseModal","handleAddProdToReqList","itemToAdd","handleAddProductAndEmitAlert","handleSubmit","event","handleOpenModalWithValidation","reqListOptions","useMemo","reqList","availableReqLists","option","jsxs","Card","jsx","Icon","List","selectReqListSection","ChevronDown","Button","EmptyList","createReqListSection","RequisitionListForm","newList","RequisitionListActions","modalContent","Fragment","InLineAlert","RequisitionListModal"],"mappings":"+hCAoBO,MAAMA,GAA4C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBvDC,CAA+B;AAAA,EAC/BC,CAAyB;AAAA,ECLdC,GAA+B,MAC1CC,EACAC,IACoC,OAEpC,MAAMC,EAAeD,EAAqB,IAAKE,GAAS,CACtD,MAAMC,EAAe,CACnB,IAAKD,EAAK,IACV,SAAUA,EAAK,QAAA,EAGjB,OAAIA,EAAK,aAAYC,EAAQ,WAAaD,EAAK,YAC3CA,EAAK,kBAAoBA,EAAK,iBAAiB,OAAS,IAC1DC,EAAQ,iBAAmBD,EAAK,kBAE9BA,EAAK,iBAAmBA,EAAK,gBAAgB,OAAS,IACxDC,EAAQ,gBAAkBD,EAAK,iBAG1BC,CACT,CAAC,EAEK,CAAE,OAAAC,EAAQ,KAAAC,CAAA,EAAS,MAAMC,EAC7BX,GACA,CACE,UAAW,CACT,mBAAAI,EACA,qBAAsBE,CAAA,CACxB,CACF,EAGF,GAAIG,EAAQ,OAAOG,EAAiBH,CAAM,EAE1C,GAAI,GAACI,EAAAH,GAAA,YAAAA,EAAM,+BAAN,MAAAG,EAAoC,kBACvC,OAAO,KAGT,MAAMC,EAAUC,EACdL,EAAK,6BAA6B,gBAAA,EAEpC,OAAAM,EAAO,KAAK,uBAAwBF,CAAO,EACpCA,CACT,EC3EMG,GAAkBC,GAA0BC,EAAM,cAAc,MAAO,CAAE,MAAO,GAAI,OAAQ,GAAI,QAAS,YAAa,KAAM,OAAQ,MAAO,6BAA8B,GAAGD,CAAK,EAAoBC,EAAM,cAAc,OAAQ,CAAE,aAAc,qBAAsB,EAAG,kDAAmD,OAAQ,eAAgB,YAAa,EAAG,cAAe,SAAU,eAAgB,OAAO,CAAE,CAAC,EC2B9Z,IAAIC,EAAgB,EAEb,MAAMC,GAAsB,IAAM,CACvC,KAAM,CAACC,EAAOC,CAAQ,EAAIC,EAA4BC,EAAM,gBAAgB,EACtE,CAACC,EAASC,CAAU,EAAIH,EAASC,EAAM,uBAAuB,EAC9D,CAACG,EAAYC,CAAa,EAAIL,EAASJ,CAAa,EAG1D,OAAAU,EAAU,IAAM,CACVL,EAAM,iBAAiB,SAAW,GAAK,CAACA,EAAM,0BAChDM,EAA2B,EAAI,EAC/BC,GAAoB,EAAG,GAAG,EACvB,KAAMC,GAAsC,CAC3C,MAAMC,GAAWD,GAAA,YAAAA,EAAK,QAAS,CAAA,EAC/BE,EAAoBD,CAAQ,EAC5Bd,GACF,CAAC,EACA,MAAOgB,GAAe,CACrB,QAAQ,MAAM,oCAAqCA,CAAK,EACxDD,EAAoB,CAAA,CAAE,EACtBf,GACF,CAAC,EACA,QAAQ,IAAM,CACbW,EAA2B,EAAK,CAClC,CAAC,EAEP,EAAG,CAAA,CAAE,EAGLD,EAAU,IAAM,CACd,MAAMO,EAAoBrB,EAAO,GAC/B,wBACCF,GAAsC,CACjCA,IACFqB,EAAoBrB,CAAO,EAC3BM,IACAS,EAAcT,CAAa,EAC3BG,EAASE,EAAM,gBAAgB,EAC/BE,EAAWF,EAAM,uBAAuB,EAE5C,CAAA,EAGIa,EAAqBtB,EAAO,GAChC,uBACCF,GAAoC,CAC9BA,IAILyB,GAAsBzB,CAAO,EAC7BM,IACAS,EAAcT,CAAa,EAC3BG,EAAS,CAAC,GAAGE,EAAM,gBAAgB,CAAC,EACpCE,EAAWF,EAAM,uBAAuB,EAC1C,CAAA,EAGF,MAAO,IAAM,CACXY,GAAA,MAAAA,EAAmB,MACnBC,GAAA,MAAAA,EAAoB,KACtB,CACF,EAAG,CAAA,CAAE,EAGLR,EAAU,IAAM,CACVF,IAAeR,IACjBG,EAASE,EAAM,gBAAgB,EAC/BE,EAAWF,EAAM,uBAAuB,EACxCI,EAAcT,CAAa,EAE/B,EAAG,CAACQ,CAAU,CAAC,EAER,CAAE,MAAAN,EAAO,QAAAI,CAAA,CAClB,EClDac,GAET,CAAC,CACH,UAAAC,EAAY,GACZ,IAAAC,EACA,gBAAAC,EACA,SAAAC,EAAW,EACX,uBAAAC,CACF,IAAoC,CAClC,MAAMC,EAAeC,GAAQ,CAC3B,YAAa,kDACb,qBAAsB,2DACtB,UAAW,mDACX,wBAAyB,kEACzB,cAAe,uDAAA,CAChB,EACK,CAACC,EAAUC,CAAW,EAAIzB,EAAS,EAAK,EACxC,CAAC0B,EAAoBC,CAAqB,EAAI3B,EAClD,IAAA,EAEI,CAAE,MAAAF,CAAA,EAAUD,GAAA,EACZ,CAAE,UAAA+B,CAAA,EAAcC,GAAA,EAEhB,CAAE,MAAAC,EAAO,SAAAC,EAAU,2BAAAC,CAAA,EACvBC,GAAA,EAEI,CAACC,EAAOC,CAAQ,EAAInC,EAGvB,CACD,OAAQ,GACR,UAAW,EAAA,CACZ,EAEKoC,EAAkBC,EAAY,IAAM,CACxCF,EAAS,CAAE,OAAQ,GAAM,UAAW,GAAO,CAC7C,EAAG,CAAA,CAAE,EAECG,EAAmBD,EAAY,IAAM,CACzCF,EAAS,CAAE,OAAQ,GAAO,UAAW,GAAO,EAC5CR,EAAsB,IAAI,EAC1BF,EAAY,EAAK,EACjBM,EAAS,IAAI,CACf,EAAG,CAACA,CAAQ,CAAC,EAEPQ,EAAyBF,EAC7B,MAAOzD,GAA+B,CACpC,GAAI,CAEF,MAAM4D,EAAY,CAChB,IAAAtB,EACA,SAAAE,EACA,GAAID,GAAmBA,EAAgB,OAAS,EAC5C,CAAE,iBAAkBA,GACpB,CAAA,CAAC,EAGP,MAAMxC,GAA6BC,EAAoB,CAAC4D,CAAS,CAAC,CACpE,OAAS5B,EAAO,CACd,cAAQ,MAAM,gCAAiCA,CAAK,EAC9CA,CACR,CACF,EACA,CAACM,EAAKE,EAAUD,CAAe,CAAA,EAG3BsB,EAA+BJ,EACnC,MAAOzD,GAA+B,CACpC,GAAI,CACF,MAAM2D,EAAuB3D,CAAkB,EAE/CoD,EAA2B,CACzB,OAAQ,MACR,KAAM,UACN,QAAS,UACT,KAAM,CAACd,CAAG,CAAA,CACX,CACH,MAAQ,CACNc,EAA2B,CACzB,OAAQ,MACR,KAAM,QACN,QAAS,UACT,KAAM,CAACd,CAAG,CAAA,CACX,CACH,QAAA,CACE,WAAW,IAAM,CACfoB,EAAA,CACF,EAAG,GAAI,CACT,CACF,EACA,CAACpB,EAAKqB,EAAwBD,EAAkBN,CAA0B,CAAA,EAGtEU,EAAeL,EAClBM,GAA2D,CAC1DA,EAAM,eAAA,EACDjB,GACLe,EAA6Bf,CAAkB,CACjD,EACA,CAACA,EAAoBe,CAA4B,CAAA,EAG7CG,EAAgCP,EAAY,IAAM,CACtD,GAAI,CAAChB,EAAwB,CAC3Be,EAAA,EACA,MACF,CAEA,QAAQ,QAAQf,GAAwB,EACrC,KAAK,IAAM,CACVe,EAAA,CACF,CAAC,EACA,MAAM,IAAM,CAEb,CAAC,CACL,EAAG,CAACf,EAAwBe,CAAe,CAAC,EAEtCS,EAAiBC,EACrB,IAAM,CACJ,IAAIhD,GAAA,YAAAA,EAAO,IAAKiD,IAA8B,CAC5C,MAAOA,EAAQ,IACf,KAAMA,EAAQ,IAAA,MACT,CAAA,CAAC,EAEV,CAACjD,CAAK,CAAA,EAGFkD,EAAoBF,EACxB,MACG,MAAA,CAAI,UAAU,6CACZ,SAAAD,EAAe,IAAKI,GACnBC,EAACC,EAAA,CACC,QACEzB,IAAuBuB,EAAO,MAAQ,UAAY,YAGpD,QAAS,IAAM,CACbtB,EAAsBsB,EAAO,KAAK,CACpC,EAEA,SAAA,CAAAG,EAACC,EAAA,CAAK,OAAQC,CAAA,CAAM,EACpBF,EAAC,OAAA,CAAM,SAAAH,EAAO,IAAA,CAAK,CAAA,CAAA,EANdA,EAAO,KAAA,CAQf,EACH,EAEF,CAACJ,EAAgBnB,CAAkB,CAAA,EAG/B6B,EACJV,EAAe,OAAS,EACtBrB,EACE0B,EAAC,SAAA,CACC,KAAK,SACL,aAAW,4BACX,KAAK,SACL,UAAU,2BACV,cAAY,kCACZ,QAAS,IAAMzB,EAAY,EAAK,EAEhC,SAAA,CAAA2B,EAAC,OAAA,CACC,UAAU,kCACV,cAAY,uCAEX,SAAA9B,EAAa,oBAAA,CAAA,EAEhB8B,EAACC,EAAA,CAAK,OAAQG,GAAa,KAAK,IAAA,CAAK,CAAA,CAAA,CAAA,EAGvCJ,EAACD,EAAA,CAAK,QAAQ,YACZ,SAAAD,EAAC,OAAA,CACC,SAAUR,EACV,UAAU,kCAET,SAAA,CAAAM,EACDI,EAAC,MAAA,CAAI,UAAU,iCACb,SAAAA,EAACK,EAAA,CAAO,KAAK,SAAS,SAAU,CAAC/B,EAC9B,SAAAJ,EAAa,cAChB,CAAA,CACF,CAAA,CAAA,CAAA,EAEJ,EAGF8B,EAACM,GAAA,CAAU,YAAapC,EAAa,UAAW,EAG9CqC,EAAwBnC,EAO5B4B,EAACD,EAAA,CAAK,QAAQ,YACZ,SAAAC,EAACQ,EAAA,CACC,KAAK,SACL,UAAW,MAAOC,GAA6B,CAC7C,MAAMpB,EAA6BoB,EAAQ,GAAG,CAChD,EACA,QAAS,IAAM,CACb7B,EAA2B,CACzB,OAAQ,MACR,KAAM,QACN,QAAS,UACT,KAAM,CAACd,CAAG,CAAA,CACX,CACH,EACA,SAAU,IAAM,CACdO,EAAY,EAAK,CACnB,CAAA,CAAA,EAEJ,EAxBA2B,EAACU,GAAA,CACC,SAAU,IAAM,CACdrC,EAAY,EAAI,CAClB,CAAA,CAAA,EAwBEsC,EACJb,EAAAc,EAAA,CACG,SAAA,CAAAlC,GACCsB,EAAC,MAAA,CAAI,UAAU,kCACb,SAAAA,EAACa,EAAA,CAEC,GAAI,qCAAqC/C,CAAG,GAC5C,QAASY,EAAM,YACf,KAAMA,EAAM,KACZ,QAAQ,UACR,UAAU,kCAAA,EALL,qCAAqCZ,CAAG,EAAA,EAOjD,EAED,CAACY,GACAoB,EAAAc,EAAA,CACG,SAAA,CAAAT,EACAtC,GAAa0C,CAAA,CAAA,CAChB,CAAA,EAEJ,EAIF,OAAI/B,IAAc,MAAQ,CAACA,EAClB,KAIPsB,EAAC,MAAA,CAAI,UAAU,4BACb,SAAA,CAAAE,EAACK,EAAA,CACC,aAAYnC,EAAa,qBACzB,cAAY,4BACZ,KAAK,SACL,QAAQ,WACR,KAAM8B,EAACC,EAAA,CAAK,OAAQC,CAAA,CAAM,EAC1B,QAASV,CAAA,CAAA,EAEVV,EAAM,QACLkB,EAACc,GAAA,CACC,OAAM,GACN,UAAWhC,EAAM,UACjB,MAAOZ,EAAa,qBACpB,aAAAyC,EACA,mBAAoBzB,CAAA,CAAA,CACtB,EAEJ,CAEJ","x_google_ignoreList":[2]}
1
+ {"version":3,"file":"RequisitionListSelector.js","sources":["/@dropins/storefront-requisition-list/src/api/addProductsToRequisitionList/graphql/addProductsToRequisitionList.ts","/@dropins/storefront-requisition-list/src/api/addProductsToRequisitionList/addProductsToRequisitionList.ts","../../node_modules/@adobe-commerce/elsie/src/icons/ChevronDown.svg","/@dropins/storefront-requisition-list/src/hooks/useRequisitionLists.ts","/@dropins/storefront-requisition-list/src/containers/RequisitionListSelector/RequisitionListSelector.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 { REQUISITION_LIST_FRAGMENT } from '@/requisitionList/api/fragments/RequisitionListFragment.graphql';\nimport { REQUISITION_LIST_ITEMS_FRAGMENT } from '@/requisitionList/api/fragments/RequisitionListItemsFragment.graphql';\n\nexport const ADD_PRODUCTS_TO_REQUISITION_LIST_MUTATION = `\n mutation ADD_PRODUCTS_TO_REQUISITION_LIST_MUTATION(\n $requisitionListUid: ID!, \n $requisitionListItems: [RequisitionListItemsInput!]!\n ) {\n addProductsToRequisitionList(\n requisitionListUid: $requisitionListUid\n requisitionListItems: $requisitionListItems\n ) {\n requisition_list {\n ...REQUISITION_LIST_FRAGMENT\n items {\n ...REQUISITION_LIST_ITEMS_FRAGMENT\n }\n }\n }\n }\n${REQUISITION_LIST_ITEMS_FRAGMENT}\n${REQUISITION_LIST_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 { RequisitionList } from '@/requisitionList/data/models/requisitionList';\nimport { fetchGraphQl } from '@/requisitionList/api';\nimport { ADD_PRODUCTS_TO_REQUISITION_LIST_MUTATION } from '@/requisitionList/api/addProductsToRequisitionList/graphql/addProductsToRequisitionList';\nimport { handleFetchError } from '@/requisitionList/lib/fetch-error';\nimport { transformRequisitionList } from '@/requisitionList/data/transforms';\nimport { events } from '@adobe-commerce/event-bus';\n\n// Correct type for GraphQL RequisitionListItemsInput\nexport type RequisitionListItemsInput = {\n sku: string;\n quantity: number;\n parent_sku?: string;\n selected_options?: string[];\n entered_options?: Array<{ uid: string; value: string }>;\n};\n\nexport const addProductsToRequisitionList = async (\n requisitionListUid: string,\n requisitionListItems: Array<RequisitionListItemsInput>\n): Promise<RequisitionList | null> => {\n // Clean items before performing the mutation - remove empty fields\n const cleanedItems = requisitionListItems.map((item) => {\n const cleaned: any = {\n sku: item.sku,\n quantity: item.quantity,\n };\n\n if (item.parent_sku) cleaned.parent_sku = item.parent_sku;\n if (item.selected_options && item.selected_options.length > 0) {\n cleaned.selected_options = item.selected_options;\n }\n if (item.entered_options && item.entered_options.length > 0) {\n cleaned.entered_options = item.entered_options;\n }\n\n return cleaned;\n });\n\n const { errors, data } = await fetchGraphQl(\n ADD_PRODUCTS_TO_REQUISITION_LIST_MUTATION,\n {\n variables: {\n requisitionListUid,\n requisitionListItems: cleanedItems,\n },\n }\n );\n\n if (errors) return handleFetchError(errors);\n\n if (!data?.addProductsToRequisitionList?.requisition_list) {\n return null;\n }\n\n const payload = transformRequisitionList(\n data.addProductsToRequisitionList.requisition_list\n );\n events.emit('requisitionList/data', payload);\n return payload;\n};\n","import * as React from \"react\";\nconst SvgChevronDown = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.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\" }));\nexport default SvgChevronDown;\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 { useEffect, useState } from 'preact/compat';\nimport {\n state,\n setRequisitionLists,\n setRequisitionListsLoading,\n updateRequisitionList,\n} from '@/requisitionList/lib/state';\nimport { getRequisitionLists } from '@/requisitionList/api';\nimport { RequisitionList } from '@/requisitionList/data/models/requisitionList';\nimport { events } from '@adobe-commerce/event-bus';\n\nlet updateCounter = 0; // Counter to track updates across all hooks\n\nexport const useRequisitionLists = () => {\n const [lists, setLists] = useState<RequisitionList[]>(state.requisitionLists);\n const [loading, setLoading] = useState(state.requisitionListsLoading);\n const [lastUpdate, setLastUpdate] = useState(updateCounter);\n\n // Fetch lists if empty on mount\n useEffect(() => {\n if (state.requisitionLists.length === 0 && !state.requisitionListsLoading) {\n setRequisitionListsLoading(true);\n getRequisitionLists(1, 100)\n .then((res: { items: RequisitionList[] }) => {\n const newLists = res?.items || [];\n setRequisitionLists(newLists);\n updateCounter++;\n })\n .catch((error: any) => {\n console.error('Error fetching requisition lists:', error);\n setRequisitionLists([]);\n updateCounter++;\n })\n .finally(() => {\n setRequisitionListsLoading(false);\n });\n }\n }, []);\n\n // Listen to event bus updates\n useEffect(() => {\n const multiListListener = events.on(\n 'requisitionLists/data',\n (payload: RequisitionList[] | null) => {\n if (payload) {\n setRequisitionLists(payload);\n updateCounter++;\n setLastUpdate(updateCounter);\n setLists(state.requisitionLists);\n setLoading(state.requisitionListsLoading);\n }\n }\n );\n\n const singleListListener = events.on(\n 'requisitionList/data',\n (payload: RequisitionList | null) => {\n if (!payload) return;\n\n // Only the FIRST hook instance to receive this should update\n // Use the updateRequisitionList helper which handles both add and update\n updateRequisitionList(payload);\n updateCounter++;\n setLastUpdate(updateCounter);\n setLists([...state.requisitionLists]);\n setLoading(state.requisitionListsLoading);\n }\n );\n\n return () => {\n multiListListener?.off();\n singleListListener?.off();\n };\n }, []);\n\n // Sync with global state when it changes\n useEffect(() => {\n if (lastUpdate !== updateCounter) {\n setLists(state.requisitionLists);\n setLoading(state.requisitionListsLoading);\n setLastUpdate(updateCounter);\n }\n }, [lastUpdate]);\n\n return { lists, loading };\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, useCallback, useMemo, useState } from 'preact/compat';\nimport { Container } from '@adobe-commerce/elsie/lib';\nimport { RequisitionList } from '../../data/models/requisitionList.js';\nimport {\n Button,\n Card,\n Icon,\n InLineAlert,\n} from '@adobe-commerce/elsie/components';\nimport { addProductsToRequisitionList } from '@/requisitionList/api/addProductsToRequisitionList/addProductsToRequisitionList';\nimport {\n EmptyList,\n RequisitionListModal,\n RequisitionListActions,\n} from '@/requisitionList/components';\nimport { RequisitionListForm } from '@/requisitionList/containers';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { ChevronDown, List } from '@adobe-commerce/elsie/icons';\nimport { JSX } from 'preact';\nimport '@/requisitionList/containers/RequisitionListSelector/RequisitionListSelector.css';\nimport {\n useRequisitionLists,\n useRequisitionListAlert,\n useRequisitionListEnabled,\n} from '@/requisitionList/hooks';\n\nexport interface RequisitionListSelectorProps\n extends HTMLAttributes<HTMLDivElement> {\n canCreate?: boolean;\n sku: string;\n selectedOptions?: string[];\n quantity?: number;\n beforeAddProdToReqList?: () => Promise<void> | void;\n}\n\nexport const RequisitionListSelector: Container<\n RequisitionListSelectorProps\n> = ({\n canCreate = true,\n sku,\n selectedOptions,\n quantity = 1,\n beforeAddProdToReqList,\n}: RequisitionListSelectorProps) => {\n const translations = useText({\n createTitle: `RequisitionList.RequisitionListForm.createTitle`,\n addToRequisitionList: `RequisitionList.RequisitionListForm.addToRequisitionList`,\n emptyList: `RequisitionList.RequisitionListWrapper.emptyList`,\n addToNewRequisitionList: `RequisitionList.RequisitionListSelector.addToNewRequisitionList`,\n addToSelected: `RequisitionList.RequisitionListSelector.addToSelected`,\n });\n const [isAdding, setIsAdding] = useState(false);\n const [selectedReqListUid, setSelectedReqListUid] = useState<string | null>(\n null\n );\n const { lists } = useRequisitionLists();\n const { isEnabled } = useRequisitionListEnabled();\n\n const { alert, setAlert, handleRequisitionListAlert } =\n useRequisitionListAlert();\n\n const [modal, setModal] = useState<{\n isOpen: boolean;\n isLoading: boolean;\n }>({\n isOpen: false,\n isLoading: false,\n });\n\n const handleOpenModal = useCallback(() => {\n setModal({ isOpen: true, isLoading: false });\n }, []);\n\n const handleCloseModal = useCallback(() => {\n setModal({ isOpen: false, isLoading: false });\n setSelectedReqListUid(null);\n setIsAdding(false);\n setAlert(null);\n }, [setAlert]);\n\n const handleAddProdToReqList = useCallback(\n async (requisitionListUid: string) => {\n try {\n // Build the object dynamically, omitting selected_options if not present\n const itemToAdd = {\n sku,\n quantity,\n ...(selectedOptions && selectedOptions.length > 0\n ? { selected_options: selectedOptions }\n : {}),\n };\n\n await addProductsToRequisitionList(requisitionListUid, [itemToAdd]);\n } catch (error) {\n console.error('Error adding product to list:', error);\n throw error;\n }\n },\n [sku, quantity, selectedOptions]\n );\n\n const handleAddProductAndEmitAlert = useCallback(\n async (requisitionListUid: string) => {\n try {\n await handleAddProdToReqList(requisitionListUid);\n\n handleRequisitionListAlert({\n action: 'add',\n type: 'success',\n context: 'product',\n skus: [sku],\n });\n } catch {\n handleRequisitionListAlert({\n action: 'add',\n type: 'error',\n context: 'product',\n skus: [sku],\n });\n } finally {\n setTimeout(() => {\n handleCloseModal();\n }, 2000);\n }\n },\n [sku, handleAddProdToReqList, handleCloseModal, handleRequisitionListAlert]\n );\n\n const handleSubmit = useCallback(\n (event: JSX.TargetedEvent<HTMLFormElement, SubmitEvent>) => {\n event.preventDefault();\n if (!selectedReqListUid) return;\n handleAddProductAndEmitAlert(selectedReqListUid);\n },\n [selectedReqListUid, handleAddProductAndEmitAlert]\n );\n\n const handleOpenModalWithValidation = useCallback(() => {\n if (!beforeAddProdToReqList) {\n handleOpenModal();\n return;\n }\n\n Promise.resolve(beforeAddProdToReqList())\n .then(() => {\n handleOpenModal();\n })\n .catch(() => {\n // Validation failed - don't open modal\n });\n }, [beforeAddProdToReqList, handleOpenModal]);\n\n const reqListOptions = useMemo(\n () => [\n ...(lists?.map((reqList: RequisitionList) => ({\n value: reqList.uid,\n text: reqList.name,\n })) ?? []),\n ],\n [lists]\n );\n\n const availableReqLists = useMemo(\n () => (\n <div className=\"requisition-list-selector__available-lists\">\n {reqListOptions.map((option: { value: string; text: string }) => (\n <Card\n variant={\n selectedReqListUid === option.value ? 'primary' : 'secondary'\n }\n key={option.value}\n onClick={() => {\n setSelectedReqListUid(option.value);\n }}\n >\n <Icon source={List} />\n <span>{option.text}</span>\n </Card>\n ))}\n </div>\n ),\n [reqListOptions, selectedReqListUid]\n );\n\n const selectReqListSection =\n reqListOptions.length > 0 ? (\n isAdding ? (\n <button\n type=\"button\"\n aria-label=\"Select a requisition list\"\n role=\"button\"\n className=\"requisition-list-actions\"\n data-testid=\"requisition-list-actions-button\"\n onClick={() => setIsAdding(false)}\n >\n <span\n className=\"requisition-list-actions__title\"\n data-testid=\"requisition-list-actions-button-text\"\n >\n {translations.addToRequisitionList}\n </span>\n <Icon source={ChevronDown} size=\"32\" />\n </button>\n ) : (\n <Card variant=\"secondary\">\n <form\n onSubmit={handleSubmit}\n className=\"requisition-list-selector__form\"\n >\n {availableReqLists}\n <div className=\"requisition-list-form__actions\">\n <Button type=\"submit\" disabled={!selectedReqListUid}>\n {translations.addToSelected}\n </Button>\n </div>\n </form>\n </Card>\n )\n ) : (\n <EmptyList textContent={translations.emptyList} />\n );\n\n const createReqListSection = !isAdding ? (\n <RequisitionListActions\n onAddNew={() => {\n setIsAdding(true);\n }}\n />\n ) : (\n <Card variant=\"secondary\">\n <RequisitionListForm\n mode=\"create\"\n onSuccess={async (newList: RequisitionList) => {\n await handleAddProductAndEmitAlert(newList.uid);\n }}\n onError={() => {\n handleRequisitionListAlert({\n action: 'add',\n type: 'error',\n context: 'product',\n skus: [sku],\n });\n }}\n onCancel={() => {\n setIsAdding(false);\n }}\n />\n </Card>\n );\n\n const modalContent = (\n <>\n {alert && (\n <div className=\"requisition-list__alert-wrapper\">\n <InLineAlert\n key={`requisition-list-selector__alert__${sku}`}\n id={`requisition-list-selector__alert__${sku}`}\n heading={alert.description}\n type={alert.type}\n variant=\"primary\"\n className=\"requisition-list-selector__alert\"\n />\n </div>\n )}\n {!alert && (\n <>\n {selectReqListSection}\n {canCreate && createReqListSection}\n </>\n )}\n </>\n );\n\n // Early return after all hooks have been called\n if (isEnabled === null || !isEnabled) {\n return null;\n }\n\n return (\n <div className=\"requisition-list-selector\">\n <Button\n aria-label={translations.addToRequisitionList}\n data-testid=\"requisition-list-selector\"\n size=\"medium\"\n variant=\"tertiary\"\n icon={<Icon source={List} />}\n onClick={handleOpenModalWithValidation}\n />\n {modal.isOpen && (\n <RequisitionListModal\n isOpen\n isLoading={modal.isLoading}\n title={translations.addToRequisitionList}\n modalContent={modalContent}\n handleModalOnClose={handleCloseModal}\n />\n )}\n </div>\n );\n};\n"],"names":["ADD_PRODUCTS_TO_REQUISITION_LIST_MUTATION","REQUISITION_LIST_ITEMS_FRAGMENT","REQUISITION_LIST_FRAGMENT","addProductsToRequisitionList","requisitionListUid","requisitionListItems","cleanedItems","item","cleaned","errors","data","fetchGraphQl","handleFetchError","_a","payload","transformRequisitionList","events","SvgChevronDown","props","React","updateCounter","useRequisitionLists","lists","setLists","useState","state","loading","setLoading","lastUpdate","setLastUpdate","useEffect","setRequisitionListsLoading","getRequisitionLists","res","newLists","setRequisitionLists","error","multiListListener","singleListListener","updateRequisitionList","RequisitionListSelector","canCreate","sku","selectedOptions","quantity","beforeAddProdToReqList","translations","useText","isAdding","setIsAdding","selectedReqListUid","setSelectedReqListUid","isEnabled","useRequisitionListEnabled","alert","setAlert","handleRequisitionListAlert","useRequisitionListAlert","modal","setModal","handleOpenModal","useCallback","handleCloseModal","handleAddProdToReqList","itemToAdd","handleAddProductAndEmitAlert","handleSubmit","event","handleOpenModalWithValidation","reqListOptions","useMemo","reqList","availableReqLists","option","jsxs","Card","jsx","Icon","List","selectReqListSection","ChevronDown","Button","EmptyList","createReqListSection","RequisitionListForm","newList","RequisitionListActions","modalContent","Fragment","InLineAlert","RequisitionListModal"],"mappings":"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","x_google_ignoreList":[2]}