@dropins/storefront-purchase-order 1.0.0-beta2 → 1.0.0-beta4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/LICENSE.md +59 -60
  2. package/api.js +5 -5
  3. package/api.js.map +1 -1
  4. package/chunks/addPurchaseOrderComment.js +2 -2
  5. package/chunks/addPurchaseOrderComment.js.map +1 -1
  6. package/chunks/currencyInfo.js +5 -5
  7. package/chunks/currencyInfo.js.map +1 -1
  8. package/chunks/fetch-graphql.js +1 -1
  9. package/chunks/fetch-graphql.js.map +1 -1
  10. package/chunks/getPurchaseOrderApprovalRule.js +2 -2
  11. package/chunks/getPurchaseOrderApprovalRule.js.map +1 -1
  12. package/chunks/getPurchaseOrderApprovalRules.js +3 -3
  13. package/chunks/getPurchaseOrderApprovalRules.js.map +1 -1
  14. package/chunks/getPurchaseOrders.js +3 -3
  15. package/chunks/getPurchaseOrders.js.map +1 -1
  16. package/chunks/placeOrderForPurchaseOrder.js +3 -3
  17. package/chunks/placeOrderForPurchaseOrder.js.map +1 -1
  18. package/chunks/rejectPurchaseOrders.js +4 -4
  19. package/chunks/rejectPurchaseOrders.js.map +1 -1
  20. package/containers/ApprovalRuleForm.js +1 -1
  21. package/containers/ApprovalRuleForm.js.map +1 -1
  22. package/containers/ApprovalRulesList.js +1 -1
  23. package/containers/ApprovalRulesList.js.map +1 -1
  24. package/containers/CompanyPurchaseOrders.js +1 -1
  25. package/containers/CompanyPurchaseOrders.js.map +1 -1
  26. package/containers/CustomerPurchaseOrders.js +1 -1
  27. package/containers/CustomerPurchaseOrders.js.map +1 -1
  28. package/containers/PurchaseOrderCommentForm.js +1 -1
  29. package/containers/PurchaseOrderCommentForm.js.map +1 -1
  30. package/containers/PurchaseOrderStatus.js +1 -1
  31. package/containers/PurchaseOrderStatus.js.map +1 -1
  32. package/containers/RequireApprovalPurchaseOrders.js +1 -1
  33. package/containers/RequireApprovalPurchaseOrders.js.map +1 -1
  34. package/package.json +1 -1
  35. package/render.js +1 -1
  36. package/chunks/fetch-error.js +0 -4
  37. package/chunks/fetch-error.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ApprovalRuleForm.js","sources":["/@dropins/storefront-purchase-order/src/lib/updateFormFieldValue.ts","/@dropins/storefront-purchase-order/src/lib/formValidation.ts","/@dropins/storefront-purchase-order/src/configs/approvalRuleForm.config.ts","/@dropins/storefront-purchase-order/src/lib/transformToFormValues.ts","/@dropins/storefront-purchase-order/src/lib/cleanAndDeep.ts","/@dropins/storefront-purchase-order/src/hooks/useApprovalRuleForm.tsx","/@dropins/storefront-purchase-order/src/components/ApprovalRuleForm/blocks/ErrorMessage.tsx","/@dropins/storefront-purchase-order/src/components/ApprovalRuleForm/blocks/Form.tsx","/@dropins/storefront-purchase-order/src/components/ApprovalRuleForm/ApprovalRuleForm.tsx","/@dropins/storefront-purchase-order/src/containers/ApprovalRuleForm/ApprovalRuleForm.tsx"],"sourcesContent":["/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport {\n ConditionAttributeType,\n ConditionOperatorType,\n FormValuesParams,\n} from '../types/hooks';\n\nexport const updateFormFieldValue = (\n formValues: FormValuesParams,\n key: string,\n value: string | number | boolean | string[]\n): FormValuesParams => {\n const newFormValues = { ...formValues };\n\n switch (key) {\n case 'status':\n newFormValues.status = value ? 'ENABLED' : 'DISABLED';\n break;\n case 'name':\n newFormValues.name = value as string;\n break;\n case 'description':\n newFormValues.description = value as string;\n break;\n case 'ruleType':\n newFormValues.condition.attribute = value as ConditionAttributeType;\n break;\n case 'ruleCondition':\n newFormValues.condition.operator = value as ConditionOperatorType;\n break;\n case 'ruleValue': {\n let numericValue =\n typeof value === 'string' ? value.replace(/[^\\d]/g, '') : String(value);\n\n if (numericValue === '') {\n if (newFormValues.condition.attribute === 'NUMBER_OF_SKUS') {\n newFormValues.condition.quantity = '';\n } else {\n newFormValues.condition.amount.value = '';\n }\n } else if (newFormValues.condition.attribute === 'NUMBER_OF_SKUS') {\n newFormValues.condition.quantity = +numericValue;\n } else {\n newFormValues.condition.amount.value = +numericValue;\n }\n break;\n }\n case 'ruleConditionCurrency':\n newFormValues.condition.amount.currency = value as string;\n break;\n case 'approvers':\n newFormValues.approvers = value as string[];\n break;\n case 'roleType':\n newFormValues.roleType = value as string;\n break;\n case 'appliesTo':\n newFormValues.appliesTo = value as string[];\n break;\n default:\n break;\n }\n\n return newFormValues;\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport {\n FormValuesParams,\n ValidationApprovalFormError,\n} from '@/b2b-purchase-order/types/hooks';\n\n/**\n * Validates all form fields and returns validation errors\n * This function contains the core validation logic for the approval rule form\n */\nexport const validateFormFields = (\n values: FormValuesParams\n): ValidationApprovalFormError => {\n const errors: ValidationApprovalFormError = {};\n\n // Validate rule name (required)\n if (!values.name || values.name.trim() === '') {\n errors.name = 'PurchaseOrders.approvalRuleForm.errorsMessages.required';\n }\n\n // Validate appliesTo when specific roles are selected\n if (\n values.roleType === 'specific_roles' &&\n (!values.appliesTo || values.appliesTo.length === 0)\n ) {\n errors.appliesTo =\n 'PurchaseOrders.approvalRuleForm.errorsMessages.approvers';\n }\n\n // Validate rule value based on condition type\n if (values.condition.attribute === 'NUMBER_OF_SKUS') {\n if (values.condition.quantity === '') {\n errors.ruleValue =\n 'PurchaseOrders.approvalRuleForm.errorsMessages.required';\n }\n } else if (values.condition.amount.value === '') {\n errors.ruleValue =\n 'PurchaseOrders.approvalRuleForm.errorsMessages.required';\n }\n\n // Validate approvers (required)\n if (!values.approvers || values.approvers.length === 0) {\n errors.approvers =\n 'PurchaseOrders.approvalRuleForm.errorsMessages.approvers';\n }\n\n return errors;\n};\n\n/**\n * Returns only the errors for fields that have been touched by the user\n * This prevents showing validation errors for fields the user hasn't interacted with yet\n */\nexport const getVisibleErrors = (\n allErrors: ValidationApprovalFormError,\n touchedFields: { [key: string]: boolean }\n): ValidationApprovalFormError => {\n const visibleErrors: ValidationApprovalFormError = {};\n\n // Only include errors for touched fields\n Object.keys(allErrors).forEach((errorKey) => {\n if (touchedFields[errorKey]) {\n visibleErrors[errorKey] = allErrors[errorKey];\n }\n });\n\n return visibleErrors;\n};\n\n/**\n * Updates errors based on new validation results and touched fields\n * This is used for incremental validation as the user fills out the form\n */\nexport const updateValidationErrors = (\n newErrors: ValidationApprovalFormError,\n currentErrors: ValidationApprovalFormError,\n touchedFields: { [key: string]: boolean }\n): ValidationApprovalFormError => {\n const updatedErrors: ValidationApprovalFormError = { ...currentErrors };\n\n // Add new errors for touched fields\n Object.keys(newErrors).forEach((errorKey) => {\n if (touchedFields[errorKey]) {\n updatedErrors[errorKey] = newErrors[errorKey];\n }\n });\n\n // Remove errors for fields that became valid\n Object.keys(updatedErrors).forEach((errorKey) => {\n if (touchedFields[errorKey] && !newErrors[errorKey]) {\n delete updatedErrors[errorKey];\n }\n });\n\n return updatedErrors;\n};\n","/********************************************************************\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 { FormValuesParams, FormState } from '@/b2b-purchase-order/types/hooks';\n\nexport const RULE_TYPE_OPTIONS_KEYS = {\n GRAND_TOTAL: 'ruleTypeGrandTotal',\n SHIPPING_INCL_TAX: 'ruleTypeShippingInclTax',\n NUMBER_OF_SKUS: 'ruleTypeNumberOfSkus',\n} as const;\n\nexport const CONDITION_OPERATORS_KEYS = {\n MORE_THAN: 'conditionOperatorMoreThan',\n LESS_THAN: 'conditionOperatorLessThan',\n MORE_THAN_OR_EQUAL_TO: 'conditionOperatorMoreThanOrEqualTo',\n LESS_THAN_OR_EQUAL_TO: 'conditionOperatorLessThanOrEqualTo',\n} as const;\n\nexport const APPLIES_TO_OPTIONS_KEYS = {\n ALL_USERS: 'appliesToAllUsers',\n SPECIFIC_ROLES: 'appliesToSpecificRoles',\n} as const;\n\n/**\n * Initial values for the approval rule form\n * Used when creating a new rule\n */\nexport const INITIAL_FORM_VALUES: FormValuesParams = {\n status: 'ENABLED',\n name: '',\n description: '',\n roleType: 'all_users',\n appliesTo: [],\n condition: {\n quantity: '',\n amount: {\n currency: 'USD',\n value: '',\n },\n attribute: 'GRAND_TOTAL',\n operator: 'MORE_THAN',\n },\n approvers: [],\n};\n\n/**\n * Initial state for the form reducer\n * Includes form values, loading states, and validation\n */\nexport const INITIAL_FORM_STATE: FormState = {\n formValues: INITIAL_FORM_VALUES,\n isLoading: false,\n submitError: null,\n availableAppliesTo: [],\n availableRequiresApprovalFrom: [],\n errors: {},\n touched: {},\n currencyCodesList: [{ text: 'USD', value: 'USD' }],\n};\n\n/**\n * Fields that must be touched (validated) on form submission\n */\nexport const REQUIRED_FIELDS_ON_SUBMIT = {\n name: true,\n appliesTo: true,\n ruleValue: true,\n approvers: true,\n} as const;\n\n/**\n * Translation keys for validation error messages\n */\nexport const VALIDATION_ERROR_KEYS = {\n REQUIRED: 'PurchaseOrders.approvalRuleForm.errorsMessages.required',\n APPROVERS: 'PurchaseOrders.approvalRuleForm.errorsMessages.approvers',\n FAILED_TO_LOAD: 'Failed to load metadata. Please try again.',\n FAILED_TO_CREATE: 'Failed to create approval rule. Please try again.',\n} as const;\n\n/**\n * Creates rule type options for the dropdown\n * @param t - Translation function\n */\n/**\n * Creates rule type options for the dropdown\n * @param t - Translation function\n */\nexport const createRuleTypeOptions = (t: Record<string, string>) => [\n {\n text: t[RULE_TYPE_OPTIONS_KEYS.GRAND_TOTAL],\n value: 'GRAND_TOTAL',\n },\n {\n text: t[RULE_TYPE_OPTIONS_KEYS.SHIPPING_INCL_TAX],\n value: 'SHIPPING_INCL_TAX',\n },\n {\n text: t[RULE_TYPE_OPTIONS_KEYS.NUMBER_OF_SKUS],\n value: 'NUMBER_OF_SKUS',\n },\n];\n\n/**\n * Creates condition operator options for the dropdown\n * @param t - Translation function\n */\nexport const createConditionOperators = (t: Record<string, string>) => [\n { text: t[CONDITION_OPERATORS_KEYS.MORE_THAN], value: 'MORE_THAN' },\n {\n text: t[CONDITION_OPERATORS_KEYS.LESS_THAN],\n value: 'LESS_THAN',\n },\n {\n text: t[CONDITION_OPERATORS_KEYS.MORE_THAN_OR_EQUAL_TO],\n value: 'MORE_THAN_OR_EQUAL_TO',\n },\n {\n text: t[CONDITION_OPERATORS_KEYS.LESS_THAN_OR_EQUAL_TO],\n value: 'LESS_THAN_OR_EQUAL_TO',\n },\n];\n\n/**\n * Creates \"applies to\" options for the dropdown\n * @param t - Translation function\n */\nexport const createAppliesToOptions = (t: Record<string, string>) => [\n { text: t[APPLIES_TO_OPTIONS_KEYS.ALL_USERS], value: 'all_users' },\n {\n text: t[APPLIES_TO_OPTIONS_KEYS.SPECIFIC_ROLES],\n value: 'specific_roles',\n },\n];\n","/********************************************************************\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 { PurchaseOrderApprovalRuleModel } from '@/b2b-purchase-order/data/models';\nimport {\n ConditionAttributeType,\n ConditionOperatorType,\n FormValuesParams,\n} from '@/b2b-purchase-order/types/hooks';\nimport {\n RULE_TYPE_OPTIONS_KEYS,\n CONDITION_OPERATORS_KEYS,\n} from '@/b2b-purchase-order/configs/approvalRuleForm.config';\n\n// Default values for form fields\nconst DEFAULT_STATUS = 'ENABLED';\nconst DEFAULT_ATTRIBUTE: ConditionAttributeType = 'GRAND_TOTAL';\nconst DEFAULT_OPERATOR: ConditionOperatorType = 'MORE_THAN';\nconst DEFAULT_CURRENCY = 'USD';\nconst DEFAULT_QUANTITY = 0;\nconst DEFAULT_AMOUNT_VALUE = 0;\n\n/**\n * Checks if the given attribute is a valid condition attribute type\n */\nconst isValidAttribute = (\n attribute: any\n): attribute is ConditionAttributeType => {\n return Object.keys(RULE_TYPE_OPTIONS_KEYS).includes(attribute);\n};\n\n/**\n * Checks if the given operator is a valid condition operator type\n */\nconst isValidOperator = (operator: any): operator is ConditionOperatorType => {\n return Object.keys(CONDITION_OPERATORS_KEYS).includes(operator);\n};\n\n/**\n * Transforms API response data to form values format\n * Handles all the necessary data conversions and provides safe defaults\n */\nexport const transformToFormValues = (\n data: PurchaseOrderApprovalRuleModel\n): FormValuesParams => {\n return {\n status: (data.status as 'ENABLED' | 'DISABLED') || DEFAULT_STATUS,\n name: data.name || '',\n description: data.description || '',\n roleType: data.appliesToRoles?.length > 0 ? 'specific_roles' : 'all_users',\n appliesTo: data.appliesToRoles?.map((role) => role.id) || [],\n condition: {\n quantity: data.condition?.quantity ?? DEFAULT_QUANTITY,\n amount: {\n currency: data.condition?.amount?.currency || DEFAULT_CURRENCY,\n value: data.condition?.amount?.value ?? DEFAULT_AMOUNT_VALUE,\n },\n attribute: isValidAttribute(data.condition?.attribute)\n ? data.condition.attribute\n : DEFAULT_ATTRIBUTE,\n operator: isValidOperator(data.condition?.operator)\n ? data.condition.operator\n : DEFAULT_OPERATOR,\n },\n approvers: data.approverRoles?.map((role) => role.id) || [],\n };\n};\n","/********************************************************************\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 { toSnakeCase } from './case-converter';\n\n/**\n * Checks if a value should be considered as \"has value\" for form submission\n * Empty strings and null/undefined are considered as no value\n * Zero (0) is considered as no value to match existing behavior\n */\nconst hasValue = (value: any): boolean => {\n return value !== null && value !== undefined && value !== '' && value !== 0;\n};\n\n/**\n * Cleans form values and converts to snake_case for API submission\n * - Handles role type logic (all_users vs specific_roles)\n * - Removes empty condition values (amount or quantity)\n * - Converts camelCase keys to snake_case\n */\nexport function cleanAndDeep(formValues: Record<string, any>): any {\n const { roleType, appliesTo, condition, ...restAll } = formValues;\n\n // Handle role type logic: all_users means empty appliesTo array\n const roleConfig =\n roleType === 'all_users' ? { appliesTo: [] } : { appliesTo };\n\n // Build condition config with only non-empty values\n let conditionConfig = {};\n\n if (condition) {\n const { amount, quantity, ...restCondition } = condition;\n\n const newCondition = { ...restCondition };\n\n // Only include amount if it has a valid value\n if (hasValue(amount?.value)) {\n newCondition.amount = amount;\n }\n\n // Only include quantity if it has a valid value\n if (hasValue(quantity)) {\n newCondition.quantity = quantity;\n }\n\n conditionConfig = newCondition;\n }\n\n // Convert to snake_case for API\n const result = toSnakeCase({\n ...restAll,\n ...roleConfig,\n condition: conditionConfig,\n });\n\n return result;\n}\n","/*******************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { useCallback, useEffect, useMemo, useReducer } from 'preact/hooks';\nimport {\n FormAction,\n FormState,\n UseApprovalRuleFormProps,\n UseApprovalRuleFormReturn,\n} from '@/b2b-purchase-order/types/hooks';\n\nimport {\n currencyInfo,\n getPurchaseOrderApprovalRule,\n createPurchaseOrderApprovalRule,\n updatePurchaseOrderApprovalRule,\n getPurchaseOrderApprovalRuleMetadata,\n} from '@/b2b-purchase-order/api';\nimport {\n updateFormFieldValue,\n validateFormFields,\n updateValidationErrors,\n transformToFormValues,\n cleanAndDeep,\n} from '@/b2b-purchase-order/lib';\nimport {\n INITIAL_FORM_STATE,\n REQUIRED_FIELDS_ON_SUBMIT,\n VALIDATION_ERROR_KEYS,\n createRuleTypeOptions,\n createConditionOperators,\n createAppliesToOptions,\n} from '@/b2b-purchase-order/configs';\n\n// Reducer function - handles all state updates in one place\nfunction formReducer(state: FormState, action: FormAction): FormState {\n switch (action.type) {\n case 'SET_LOADING':\n return { ...state, isLoading: action.payload };\n\n case 'SET_SUBMIT_ERROR':\n return { ...state, submitError: action.payload };\n\n case 'SET_FORM_VALUES':\n return { ...state, formValues: action.payload };\n\n case 'SET_AVAILABLE_APPLIES_TO':\n return { ...state, availableAppliesTo: action.payload };\n\n case 'SET_AVAILABLE_APPROVERS':\n return { ...state, availableRequiresApprovalFrom: action.payload };\n\n case 'SET_ERRORS':\n return { ...state, errors: action.payload };\n\n case 'SET_TOUCHED':\n return { ...state, touched: action.payload };\n\n case 'SET_CURRENCIES':\n return { ...state, currencyCodesList: action.payload };\n\n case 'UPDATE_FIELD': {\n const { key, value } = action.payload;\n const newFormValues = updateFormFieldValue(state.formValues, key, value);\n\n // Build new touched state\n const newTouched = { ...state.touched, [key]: true };\n\n // Special case: when roleType changes to specific_roles, mark appliesTo as touched\n if (key === 'roleType' && value === 'specific_roles') {\n newTouched.appliesTo = true;\n }\n\n // Validate and get updated errors\n const allErrors = validateFormFields(newFormValues);\n const newErrors = updateValidationErrors(\n allErrors,\n state.errors,\n newTouched\n );\n\n return {\n ...state,\n formValues: newFormValues,\n touched: newTouched,\n errors: newErrors,\n };\n }\n\n case 'TOUCH_FIELD': {\n const fieldName = action.payload;\n const newTouched = { ...state.touched, [fieldName]: true };\n\n // Validate and update errors for touched field\n const allErrors = validateFormFields(state.formValues);\n const newErrors = updateValidationErrors(\n allErrors,\n state.errors,\n newTouched\n );\n\n return {\n ...state,\n touched: newTouched,\n errors: newErrors,\n };\n }\n\n case 'MARK_FIELDS_TOUCHED': {\n const newTouched = { ...state.touched, ...action.payload };\n const allErrors = validateFormFields(state.formValues);\n const newErrors = updateValidationErrors(\n allErrors,\n state.errors,\n newTouched\n );\n\n return {\n ...state,\n touched: newTouched,\n errors: newErrors,\n };\n }\n\n default:\n return state;\n }\n}\n\nexport const useApprovalRuleForm = ({\n t,\n approvalRuleID,\n routeApprovalRulesList,\n onSubmit,\n onChange,\n permissions,\n loadingPermissions,\n}: UseApprovalRuleFormProps): UseApprovalRuleFormReturn => {\n const [state, dispatch] = useReducer(formReducer, INITIAL_FORM_STATE);\n\n // Memoize options to prevent re-creation on each render\n const ruleTypeOptions = useMemo(() => createRuleTypeOptions(t), [t]);\n const conditionOperators = useMemo(() => createConditionOperators(t), [t]);\n const appliesToOptions = useMemo(() => createAppliesToOptions(t), [t]);\n\n // Load initial data (currencies and approval rule metadata)\n useEffect(() => {\n dispatch({ type: 'SET_LOADING', payload: true });\n\n // Load currency codes\n currencyInfo()\n .then((data) => {\n dispatch({\n type: 'SET_CURRENCIES',\n payload: data.availableCurrencyCodes,\n });\n })\n .catch((error) => {\n console.error('Failed to fetch currencies:', error);\n });\n\n // Load metadata (available roles) first - always needed\n getPurchaseOrderApprovalRuleMetadata()\n .then((data) => {\n const { availableAppliesTo, availableRequiresApprovalFrom } = data;\n dispatch({\n type: 'SET_AVAILABLE_APPLIES_TO',\n payload: availableAppliesTo,\n });\n dispatch({\n type: 'SET_AVAILABLE_APPROVERS',\n payload: availableRequiresApprovalFrom,\n });\n\n // Then load approval rule data if in edit mode\n if (approvalRuleID) {\n return getPurchaseOrderApprovalRule(approvalRuleID);\n }\n return null;\n })\n .then((ruleData) => {\n if (ruleData) {\n // Edit mode: set form values from existing rule\n dispatch({\n type: 'SET_FORM_VALUES',\n payload: transformToFormValues(ruleData),\n });\n }\n dispatch({ type: 'SET_SUBMIT_ERROR', payload: null });\n })\n .catch((error) => {\n console.error('Failed to fetch data:', error);\n dispatch({\n type: 'SET_SUBMIT_ERROR',\n payload: VALIDATION_ERROR_KEYS.FAILED_TO_LOAD,\n });\n })\n .finally(() => {\n dispatch({ type: 'SET_LOADING', payload: false });\n });\n }, [approvalRuleID]);\n\n // Handler for field value changes\n const handleSetFormValues = useCallback(\n (key: string, value: string | number | boolean | string[]) => {\n dispatch({ type: 'UPDATE_FIELD', payload: { key, value } });\n if (onChange) {\n onChange({ ...state.formValues, [key]: value });\n }\n },\n [onChange, state.formValues]\n );\n\n // Handler for field touch (blur)\n const handleFieldTouch = useCallback(\n (fieldName: string) => {\n dispatch({ type: 'TOUCH_FIELD', payload: fieldName });\n if (onChange) {\n onChange(state.formValues);\n }\n },\n [onChange, state.formValues]\n );\n\n // Handler for form submission\n const handleSubmit = useCallback(async () => {\n dispatch({ type: 'SET_LOADING', payload: true });\n dispatch({ type: 'SET_SUBMIT_ERROR', payload: null });\n\n // Mark all required fields as touched to show all errors\n dispatch({\n type: 'MARK_FIELDS_TOUCHED',\n payload: REQUIRED_FIELDS_ON_SUBMIT,\n });\n\n // Validate form\n const validationErrors = validateFormFields(state.formValues);\n\n if (Object.keys(validationErrors).length > 0) {\n dispatch({ type: 'SET_ERRORS', payload: validationErrors });\n dispatch({ type: 'SET_LOADING', payload: false });\n return;\n }\n\n // Clean and prepare data for API\n const cleanedData = cleanAndDeep(state.formValues);\n\n // Submit to API (create or update based on approvalRuleID)\n try {\n let data;\n\n if (approvalRuleID) {\n // Update existing approval rule\n data = await updatePurchaseOrderApprovalRule({\n uid: approvalRuleID,\n ...cleanedData,\n });\n } else {\n // Create new approval rule\n data = await createPurchaseOrderApprovalRule(cleanedData);\n }\n\n if (!data.uid) {\n dispatch({\n type: 'SET_SUBMIT_ERROR',\n payload: VALIDATION_ERROR_KEYS.FAILED_TO_CREATE,\n });\n dispatch({ type: 'SET_LOADING', payload: false });\n return;\n }\n\n // Success - call onSubmit callback if provided\n if (onSubmit) {\n onSubmit(state.formValues as any);\n }\n\n if (routeApprovalRulesList) {\n window.location.href = routeApprovalRulesList();\n } else {\n dispatch({ type: 'SET_LOADING', payload: false });\n }\n } catch (error) {\n console.error('Failed to save approval rule:', error);\n dispatch({\n type: 'SET_SUBMIT_ERROR',\n payload: VALIDATION_ERROR_KEYS.FAILED_TO_CREATE,\n });\n dispatch({ type: 'SET_LOADING', payload: false });\n }\n }, [state.formValues, routeApprovalRulesList, approvalRuleID, onSubmit]);\n\n // Memoized: true if form is loading or permissions not loaded or missing required permission\n const formLoading = useMemo(() => {\n if (state.isLoading || loadingPermissions) return true;\n\n if (\n !permissions?.permissions.viewApprovalRules &&\n !permissions?.permissions.manageApprovalRules\n ) {\n return true;\n }\n\n return false;\n }, [state.isLoading, loadingPermissions, permissions]);\n\n return {\n availableAppliesTo: state.availableAppliesTo,\n availableRequiresApprovalFrom: state.availableRequiresApprovalFrom,\n formValues: state.formValues,\n ruleTypeOptions,\n conditionOperators,\n currencies: state.currencyCodesList,\n appliesToOptions,\n handleSetFormValues,\n handleSubmit,\n handleFieldTouch,\n errors: state.errors,\n touched: state.touched,\n isLoading: state.isLoading,\n formLoading,\n submitError: state.submitError,\n };\n};\n","/*******************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { Text } from '@adobe-commerce/elsie/i18n';\nimport { FunctionComponent } from 'preact';\n\nconst ErrorMessage: FunctionComponent<{\n touched?: boolean;\n error?: string;\n className?: string;\n}> = ({ touched = false, error, className = 'error-message' }) => {\n if (!touched || !error) {\n return null;\n }\n\n return (\n <span className={className}>\n <Text id={error} />\n </span>\n );\n};\n\nexport default ErrorMessage;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport {\n Input,\n Picker,\n TextArea,\n RadioButton,\n Checkbox,\n MultiSelect,\n Button,\n} from '@adobe-commerce/elsie/components';\nimport { ErrorMessage } from '@/b2b-purchase-order/components/ApprovalRuleForm/blocks';\nimport { CustomerRolePermissionsModel } from '@/b2b-purchase-order/data/models';\nimport { classes } from '@adobe-commerce/elsie/lib';\n\nconst Form = ({\n availableRequiresApprovalFrom,\n conditionOperators,\n availableAppliesTo,\n appliesToOptions,\n ruleTypeOptions,\n currencies,\n formValues,\n errors,\n touched,\n isLoading,\n permissions,\n handleSubmit,\n handleFieldTouch,\n handleSetFormValues,\n routeApprovalRulesList,\n t,\n}: {\n availableRequiresApprovalFrom: { id: string; name: string }[];\n conditionOperators: { value: string; text: string }[];\n availableAppliesTo: { id: string; name: string }[];\n appliesToOptions: { value: string; text: string }[];\n ruleTypeOptions: { value: string; text: string }[];\n currencies: { value: string; text: string }[];\n formValues: any;\n errors: Record<string, string>;\n touched: Record<string, boolean>;\n isLoading: boolean;\n permissions?: CustomerRolePermissionsModel;\n handleSubmit: () => void;\n handleFieldTouch: (field: string) => void;\n handleSetFormValues: (field: string, value: any) => void;\n routeApprovalRulesList?: () => string;\n t: Record<string, string>;\n}) => {\n const disabledInputField =\n isLoading || !permissions?.permissions?.viewApprovalRules;\n\n return (\n <form data-testid=\"approval-rule-form\">\n <Checkbox\n data-testid=\"status-toggle\"\n className=\"b2b-purchase-order-approval-rule-form__toggle\"\n disabled={disabledInputField}\n name=\"status\"\n label={t.formEnabled}\n checked={formValues.status === 'ENABLED'}\n onChange={(event) => {\n const value = (event.target as HTMLInputElement).checked;\n\n handleSetFormValues('status', value);\n }}\n />\n <div data-testid=\"name-input-container\">\n <Input\n data-testid=\"name-input\"\n className=\"b2b-purchase-order-approval-rule-form__name-input\"\n disabled={disabledInputField}\n name={'name'}\n floatingLabel={t.inputRuleNameFloatingLabel}\n placeholder={t.inputRuleNamePlaceholder}\n value={formValues.name}\n error={!!(touched.name && errors.name)}\n onChange={(event: Event) => {\n const value = (event.target as HTMLInputElement).value;\n\n handleSetFormValues('name', value);\n }}\n onBlur={() => handleFieldTouch('name')}\n />\n <ErrorMessage touched={touched.name} error={errors.name} />\n </div>\n <TextArea\n data-testid=\"description-textarea\"\n className=\"b2b-purchase-order-approval-rule-form__description\"\n disabled={disabledInputField}\n name=\"description\"\n label={t.textAreaDescriptionLabel}\n value={formValues.description}\n onChange={(event) => {\n const value = (event.target as HTMLTextAreaElement).value;\n handleSetFormValues('description', value);\n }}\n />\n <div\n data-testid=\"applies-to-section\"\n className=\"b2b-purchase-order-approval-rule-form__applies-to\"\n >\n <span className=\"b2b-purchase-order-approval-rule-form__applies-to-title\">\n {t.titleAppliesTo}\n </span>\n {appliesToOptions.map((option, index) => {\n return (\n <RadioButton\n key={option.value}\n data-testid={`applies-to-radio-${index}`}\n disabled={disabledInputField}\n name=\"radio-group\"\n value={option.value}\n label={option.text}\n checked={formValues.roleType === option.value}\n onChange={(event) => {\n const value = (event.target as HTMLInputElement).value;\n handleSetFormValues('roleType', value);\n }}\n />\n );\n })}\n {formValues.roleType === 'specific_roles' ? (\n <div\n data-testid=\"applies-to-multiselect-container\"\n className=\"b2b-purchase-order-approval-rule-form__applies-to-multiselect\"\n >\n <MultiSelect\n data-testid=\"applies-to-multiselect\"\n disabled={disabledInputField}\n name=\"appliesTo\"\n value={[...formValues.appliesTo]}\n options={availableAppliesTo.map((option) => ({\n value: option.id,\n label: option.name,\n }))}\n error={!!(touched.appliesTo && errors.appliesTo)}\n onChange={(value) => {\n handleSetFormValues('appliesTo', value as string[]);\n if (!touched.appliesTo) handleFieldTouch('appliesTo');\n }}\n />\n <ErrorMessage\n touched={touched.appliesTo}\n error={errors.appliesTo}\n />\n </div>\n ) : null}\n </div>\n <div\n data-testid=\"rule-type-section\"\n className=\"b2b-purchase-order-approval-rule-form__rule-type\"\n >\n <span className=\"b2b-purchase-order-approval-rule-form__rule-type-title\">\n {t.titleRuleType}\n </span>\n <Picker\n data-testid=\"rule-type-picker\"\n className=\"b2b-purchase-order-approval-rule-form__rule-type-picker\"\n disabled={disabledInputField}\n name=\"ruleType\"\n value={formValues.condition.attribute}\n options={ruleTypeOptions}\n handleSelect={(event) => {\n const value = (event.target as HTMLSelectElement).value;\n handleSetFormValues('ruleType', value);\n }}\n />\n </div>\n <div\n data-testid=\"rule-condition-section\"\n className=\"b2b-purchase-order-approval-rule-form__rule-condition\"\n >\n <span className=\"b2b-purchase-order-approval-rule-form__rule-condition-title\">\n {\n ruleTypeOptions.find(\n (item) => item.value === formValues.condition.attribute\n )?.text\n }\n </span>\n <div\n className={classes([\n 'b2b-purchase-order-approval-rule-form__rule-condition-container',\n [\n 'b2b-purchase-order-approval-rule-form__rule-condition-container--error',\n !!errors.ruleValue && touched.ruleValue,\n ],\n ])}\n >\n <Picker\n data-testid=\"rule-condition-picker\"\n className=\"b2b-purchase-order-approval-rule-form__rule-condition-picker\"\n disabled={disabledInputField}\n name=\"ruleCondition\"\n value={formValues.condition.operator}\n options={conditionOperators}\n handleSelect={(event) => {\n const value = (event.target as HTMLSelectElement).value;\n handleSetFormValues('ruleCondition', value);\n }}\n />\n <div data-testid=\"rule-value-container\">\n <Input\n data-testid=\"rule-value-input\"\n className=\"b2b-purchase-order-approval-rule-form__rule-value-input\"\n disabled={disabledInputField}\n name=\"ruleValue\"\n floatingLabel={\n formValues.condition.attribute === 'NUMBER_OF_SKUS'\n ? t.inputQuantityFloatingLabel\n : t.inputAmountFloatingLabel\n }\n placeholder={\n formValues.condition.attribute === 'NUMBER_OF_SKUS'\n ? t.inputQuantityPlaceholder\n : t.inputAmountPlaceholder\n }\n value={\n formValues.condition.attribute === 'NUMBER_OF_SKUS'\n ? formValues.condition.quantity\n : formValues.condition.amount.value\n }\n error={!!(touched.ruleValue && errors.ruleValue)}\n onChange={(event) => {\n const value = (event.target as HTMLInputElement).value;\n handleSetFormValues('ruleValue', value);\n }}\n onBlur={() => handleFieldTouch('ruleValue')}\n />\n <ErrorMessage\n touched={touched.ruleValue}\n error={errors.ruleValue}\n />\n </div>\n {formValues.condition.attribute !== 'NUMBER_OF_SKUS' ? (\n <Picker\n data-testid=\"rule-condition-currency-picker\"\n className=\"b2b-purchase-order-approval-rule-form__rule-condition-currency-picker\"\n disabled={disabledInputField}\n name=\"ruleConditionCurrency\"\n value={formValues.condition.amount.currency}\n options={currencies}\n handleSelect={(event) => {\n const value = (event.target as HTMLSelectElement).value;\n handleSetFormValues('ruleConditionCurrency', value);\n }}\n />\n ) : null}\n </div>\n </div>\n <div\n data-testid=\"approval-role-section\"\n className=\"b2b-purchase-order-approval-rule-form__approval-role\"\n >\n <span className=\"b2b-purchase-order-approval-rule-form__approval-role-title\">\n {t.titleRequiresApprovalRole}\n </span>\n <div className=\"b2b-purchase-order-approval-rule-form__approval-role-multiselect\">\n <MultiSelect\n data-testid=\"approvers-multiselect\"\n disabled={disabledInputField}\n name=\"approvers\"\n value={[...formValues.approvers]}\n options={availableRequiresApprovalFrom.map((option) => ({\n value: option.id,\n label: option.name,\n }))}\n error={!!(touched.approvers && errors.approvers)}\n onChange={(value) => {\n handleSetFormValues('approvers', value as string[]);\n if (!touched.approvers) handleFieldTouch('approvers');\n }}\n />\n <ErrorMessage touched={touched.approvers} error={errors.approvers} />\n </div>\n </div>\n <div\n data-testid=\"form-buttons\"\n className=\"b2b-purchase-order-approval-rule-form__buttons\"\n >\n <Button\n data-testid=\"save-button\"\n type=\"button\"\n disabled={disabledInputField}\n onClick={handleSubmit}\n >\n {t.buttonSave}\n </Button>\n\n <Button\n data-testid=\"cancel-button\"\n disabled={isLoading}\n variant=\"secondary\"\n type=\"button\"\n onClick={() => {\n window.location.href = routeApprovalRulesList?.() ?? '';\n }}\n >\n {t.buttonCancel}\n </Button>\n </div>\n </form>\n );\n};\n\nexport default Form;\n","/*******************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { FunctionComponent } from 'preact';\nimport { classes } from '@adobe-commerce/elsie/lib';\nimport { Card, InLineAlert } from '@adobe-commerce/elsie/components';\nimport {\n useApprovalRuleForm,\n useCustomerRolePermissions,\n} from '@/b2b-purchase-order/hooks';\nimport { ApprovalRuleFormProps } from '@/b2b-purchase-order/types/components';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { Form } from '@/b2b-purchase-order/components/ApprovalRuleForm/blocks';\nimport '@/b2b-purchase-order/components/ApprovalRuleForm/ApprovalRuleForm.css';\nimport {\n PurchaseOrdersHeader,\n FormLoader,\n} from '@/b2b-purchase-order/components';\n\nexport const ApprovalRuleForm: FunctionComponent<ApprovalRuleFormProps> = ({\n className,\n approvalRuleID,\n withHeader,\n withWrapper,\n routeApprovalRulesList,\n onSubmit,\n onChange,\n}) => {\n const t = useText({\n headerText: 'PurchaseOrders.approvalRuleForm.headerText',\n titleAppliesTo: 'PurchaseOrders.approvalRuleForm.titleAppliesTo',\n titleRuleType: 'PurchaseOrders.approvalRuleForm.titleRuleType',\n titleRequiresApprovalRole:\n 'PurchaseOrders.approvalRuleForm.titleRequiresApprovalRole',\n formEnabled: 'PurchaseOrders.approvalRuleForm.fields.enabled',\n formDisabled: 'PurchaseOrders.approvalRuleForm.fields.disabled',\n inputRuleNameFloatingLabel:\n 'PurchaseOrders.approvalRuleForm.fields.inputRuleName.floatingLabel',\n inputRuleNamePlaceholder:\n 'PurchaseOrders.approvalRuleForm.fields.inputRuleName.placeholder',\n textAreaDescriptionLabel:\n 'PurchaseOrders.approvalRuleForm.fields.textAreaDescription.label',\n appliesToAllUsers:\n 'PurchaseOrders.approvalRuleForm.fields.appliesTo.allUsers',\n appliesToSpecificRoles:\n 'PurchaseOrders.approvalRuleForm.fields.appliesTo.specificRoles',\n ruleTypeGrandTotal:\n 'PurchaseOrders.approvalRuleForm.fields.ruleTypeOptions.grandTotal',\n ruleTypeShippingInclTax:\n 'PurchaseOrders.approvalRuleForm.fields.ruleTypeOptions.shippingInclTax',\n ruleTypeNumberOfSkus:\n 'PurchaseOrders.approvalRuleForm.fields.ruleTypeOptions.numberOfSkus',\n conditionOperatorMoreThan:\n 'PurchaseOrders.approvalRuleForm.fields.conditionOperators.moreThan',\n conditionOperatorLessThan:\n 'PurchaseOrders.approvalRuleForm.fields.conditionOperators.lessThan',\n conditionOperatorMoreThanOrEqualTo:\n 'PurchaseOrders.approvalRuleForm.fields.conditionOperators.moreThanOrEqualTo',\n conditionOperatorLessThanOrEqualTo:\n 'PurchaseOrders.approvalRuleForm.fields.conditionOperators.lessThanOrEqualTo',\n inputQuantityFloatingLabel:\n 'PurchaseOrders.approvalRuleForm.fields.inputQuantity.floatingLabel',\n inputQuantityPlaceholder:\n 'PurchaseOrders.approvalRuleForm.fields.inputQuantity.placeholder',\n inputAmountFloatingLabel:\n 'PurchaseOrders.approvalRuleForm.fields.inputAmount.floatingLabel',\n inputAmountPlaceholder:\n 'PurchaseOrders.approvalRuleForm.fields.inputAmount.placeholder',\n buttonCancel: 'PurchaseOrders.approvalRuleForm.fields.buttons.cancel',\n buttonSave: 'PurchaseOrders.approvalRuleForm.fields.buttons.save',\n });\n const { permissions, loadingPermissions } = useCustomerRolePermissions();\n const {\n availableRequiresApprovalFrom,\n conditionOperators,\n availableAppliesTo,\n appliesToOptions,\n ruleTypeOptions,\n currencies,\n formValues,\n errors,\n touched,\n isLoading,\n submitError,\n formLoading,\n handleSubmit,\n handleFieldTouch,\n handleSetFormValues,\n } = useApprovalRuleForm({\n t,\n approvalRuleID,\n loadingPermissions,\n permissions,\n routeApprovalRulesList,\n onSubmit,\n onChange,\n });\n\n if (formLoading) {\n return (\n <FormLoader\n testId=\"b2b-purchase-order-approval-rule-form\"\n className={classes([\n 'b2b-purchase-order-approval-rule-form',\n className,\n ])}\n />\n );\n }\n\n const renderContentForm = (\n <>\n {!!submitError && <InLineAlert heading=\"\" description={submitError} />}\n <Form\n availableRequiresApprovalFrom={availableRequiresApprovalFrom}\n conditionOperators={conditionOperators}\n availableAppliesTo={availableAppliesTo}\n appliesToOptions={appliesToOptions}\n ruleTypeOptions={ruleTypeOptions}\n currencies={currencies}\n formValues={formValues}\n errors={errors}\n touched={touched}\n isLoading={isLoading}\n handleSubmit={handleSubmit}\n handleFieldTouch={handleFieldTouch}\n handleSetFormValues={handleSetFormValues}\n permissions={permissions}\n routeApprovalRulesList={routeApprovalRulesList}\n t={t}\n />\n </>\n );\n\n return (\n <div\n data-testid=\"b2b-purchase-order-approval-rule-form\"\n className={classes(['b2b-purchase-order-approval-rule-form', className])}\n >\n {withHeader ? <PurchaseOrdersHeader headerText={t.headerText} /> : null}\n {withWrapper ? (\n <Card variant=\"secondary\">{renderContentForm}</Card>\n ) : (\n renderContentForm\n )}\n </div>\n );\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { classes, Container } from '@adobe-commerce/elsie/lib';\nimport { ApprovalRuleFormProps } from '@/b2b-purchase-order/types/containers';\nimport { ApprovalRuleForm as ApprovalRuleFormComponent } from '@/b2b-purchase-order/components';\n\nexport const ApprovalRuleForm: Container<ApprovalRuleFormProps> = ({\n withHeader = true,\n withWrapper = true,\n className,\n approvalRuleID,\n routeApprovalRulesList,\n onSubmit,\n onChange,\n}) => {\n return (\n <div\n data-testid=\"b2b-purchase-order-approval-rule-form-container\"\n className={classes([\n 'b2b-purchase-order-approval-rule-form-container',\n className,\n ])}\n >\n <ApprovalRuleFormComponent\n withWrapper={withWrapper}\n withHeader={withHeader}\n approvalRuleID={approvalRuleID}\n routeApprovalRulesList={routeApprovalRulesList}\n onSubmit={onSubmit}\n onChange={onChange}\n />\n </div>\n );\n};\n"],"names":["updateFormFieldValue","formValues","key","value","newFormValues","numericValue","validateFormFields","values","errors","updateValidationErrors","newErrors","currentErrors","touchedFields","updatedErrors","errorKey","RULE_TYPE_OPTIONS_KEYS","CONDITION_OPERATORS_KEYS","APPLIES_TO_OPTIONS_KEYS","INITIAL_FORM_VALUES","INITIAL_FORM_STATE","REQUIRED_FIELDS_ON_SUBMIT","VALIDATION_ERROR_KEYS","createRuleTypeOptions","t","createConditionOperators","createAppliesToOptions","DEFAULT_STATUS","DEFAULT_ATTRIBUTE","DEFAULT_OPERATOR","DEFAULT_CURRENCY","DEFAULT_QUANTITY","DEFAULT_AMOUNT_VALUE","isValidAttribute","attribute","isValidOperator","operator","transformToFormValues","data","_a","_b","role","_c","_e","_d","_g","_f","_h","_i","_j","hasValue","cleanAndDeep","roleType","appliesTo","condition","restAll","roleConfig","conditionConfig","amount","quantity","restCondition","newCondition","toSnakeCase","formReducer","state","action","newTouched","allErrors","fieldName","useApprovalRuleForm","approvalRuleID","routeApprovalRulesList","onSubmit","onChange","permissions","loadingPermissions","dispatch","useReducer","ruleTypeOptions","useMemo","conditionOperators","appliesToOptions","useEffect","currencyInfo","error","getPurchaseOrderApprovalRuleMetadata","availableAppliesTo","availableRequiresApprovalFrom","getPurchaseOrderApprovalRule","ruleData","handleSetFormValues","useCallback","handleFieldTouch","handleSubmit","validationErrors","cleanedData","updatePurchaseOrderApprovalRule","createPurchaseOrderApprovalRule","formLoading","ErrorMessage","touched","className","Text","Form","currencies","isLoading","disabledInputField","jsxs","jsx","Checkbox","event","Input","TextArea","option","index","RadioButton","MultiSelect","Picker","item","classes","Button","ApprovalRuleForm","withHeader","withWrapper","useText","useCustomerRolePermissions","submitError","FormLoader","renderContentForm","Fragment","InLineAlert","PurchaseOrdersHeader","Card","ApprovalRuleFormComponent"],"mappings":"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"}
1
+ {"version":3,"file":"ApprovalRuleForm.js","sources":["/@dropins/storefront-purchase-order/src/lib/updateFormFieldValue.ts","/@dropins/storefront-purchase-order/src/lib/formValidation.ts","/@dropins/storefront-purchase-order/src/configs/approvalRuleForm.config.ts","/@dropins/storefront-purchase-order/src/lib/transformToFormValues.ts","/@dropins/storefront-purchase-order/src/lib/cleanAndDeep.ts","/@dropins/storefront-purchase-order/src/hooks/useApprovalRuleForm.tsx","/@dropins/storefront-purchase-order/src/components/ApprovalRuleForm/blocks/ErrorMessage.tsx","/@dropins/storefront-purchase-order/src/components/ApprovalRuleForm/blocks/Form.tsx","/@dropins/storefront-purchase-order/src/components/ApprovalRuleForm/ApprovalRuleForm.tsx","/@dropins/storefront-purchase-order/src/containers/ApprovalRuleForm/ApprovalRuleForm.tsx"],"sourcesContent":["/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport {\n ConditionAttributeType,\n ConditionOperatorType,\n FormValuesParams,\n} from '../types/hooks';\n\nexport const updateFormFieldValue = (\n formValues: FormValuesParams,\n key: string,\n value: string | number | boolean | string[]\n): FormValuesParams => {\n const newFormValues = { ...formValues };\n\n switch (key) {\n case 'status':\n newFormValues.status = value ? 'ENABLED' : 'DISABLED';\n break;\n case 'name':\n newFormValues.name = value as string;\n break;\n case 'description':\n newFormValues.description = value as string;\n break;\n case 'ruleType':\n newFormValues.condition.attribute = value as ConditionAttributeType;\n break;\n case 'ruleCondition':\n newFormValues.condition.operator = value as ConditionOperatorType;\n break;\n case 'ruleValue': {\n let numericValue =\n typeof value === 'string' ? value.replace(/[^\\d]/g, '') : String(value);\n\n if (numericValue === '') {\n if (newFormValues.condition.attribute === 'NUMBER_OF_SKUS') {\n newFormValues.condition.quantity = '';\n } else {\n newFormValues.condition.amount.value = '';\n }\n } else if (newFormValues.condition.attribute === 'NUMBER_OF_SKUS') {\n newFormValues.condition.quantity = +numericValue;\n } else {\n newFormValues.condition.amount.value = +numericValue;\n }\n break;\n }\n case 'ruleConditionCurrency':\n newFormValues.condition.amount.currency = value as string;\n break;\n case 'approvers':\n newFormValues.approvers = value as string[];\n break;\n case 'roleType':\n newFormValues.roleType = value as string;\n break;\n case 'appliesTo':\n newFormValues.appliesTo = value as string[];\n break;\n default:\n break;\n }\n\n return newFormValues;\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport {\n FormValuesParams,\n ValidationApprovalFormError,\n} from '@/b2b-purchase-order/types/hooks';\n\n/**\n * Validates all form fields and returns validation errors\n * This function contains the core validation logic for the approval rule form\n */\nexport const validateFormFields = (\n values: FormValuesParams\n): ValidationApprovalFormError => {\n const errors: ValidationApprovalFormError = {};\n\n // Validate rule name (required)\n if (!values.name || values.name.trim() === '') {\n errors.name = 'PurchaseOrders.approvalRuleForm.errorsMessages.required';\n }\n\n // Validate appliesTo when specific roles are selected\n if (\n values.roleType === 'specific_roles' &&\n (!values.appliesTo || values.appliesTo.length === 0)\n ) {\n errors.appliesTo =\n 'PurchaseOrders.approvalRuleForm.errorsMessages.approvers';\n }\n\n // Validate rule value based on condition type\n if (values.condition.attribute === 'NUMBER_OF_SKUS') {\n if (values.condition.quantity === '') {\n errors.ruleValue =\n 'PurchaseOrders.approvalRuleForm.errorsMessages.required';\n }\n } else if (values.condition.amount.value === '') {\n errors.ruleValue =\n 'PurchaseOrders.approvalRuleForm.errorsMessages.required';\n }\n\n // Validate approvers (required)\n if (!values.approvers || values.approvers.length === 0) {\n errors.approvers =\n 'PurchaseOrders.approvalRuleForm.errorsMessages.approvers';\n }\n\n return errors;\n};\n\n/**\n * Returns only the errors for fields that have been touched by the user\n * This prevents showing validation errors for fields the user hasn't interacted with yet\n */\nexport const getVisibleErrors = (\n allErrors: ValidationApprovalFormError,\n touchedFields: { [key: string]: boolean }\n): ValidationApprovalFormError => {\n const visibleErrors: ValidationApprovalFormError = {};\n\n // Only include errors for touched fields\n Object.keys(allErrors).forEach((errorKey) => {\n if (touchedFields[errorKey]) {\n visibleErrors[errorKey] = allErrors[errorKey];\n }\n });\n\n return visibleErrors;\n};\n\n/**\n * Updates errors based on new validation results and touched fields\n * This is used for incremental validation as the user fills out the form\n */\nexport const updateValidationErrors = (\n newErrors: ValidationApprovalFormError,\n currentErrors: ValidationApprovalFormError,\n touchedFields: { [key: string]: boolean }\n): ValidationApprovalFormError => {\n const updatedErrors: ValidationApprovalFormError = { ...currentErrors };\n\n // Add new errors for touched fields\n Object.keys(newErrors).forEach((errorKey) => {\n if (touchedFields[errorKey]) {\n updatedErrors[errorKey] = newErrors[errorKey];\n }\n });\n\n // Remove errors for fields that became valid\n Object.keys(updatedErrors).forEach((errorKey) => {\n if (touchedFields[errorKey] && !newErrors[errorKey]) {\n delete updatedErrors[errorKey];\n }\n });\n\n return updatedErrors;\n};\n","/********************************************************************\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 { FormValuesParams, FormState } from '@/b2b-purchase-order/types/hooks';\n\nexport const RULE_TYPE_OPTIONS_KEYS = {\n GRAND_TOTAL: 'ruleTypeGrandTotal',\n SHIPPING_INCL_TAX: 'ruleTypeShippingInclTax',\n NUMBER_OF_SKUS: 'ruleTypeNumberOfSkus',\n} as const;\n\nexport const CONDITION_OPERATORS_KEYS = {\n MORE_THAN: 'conditionOperatorMoreThan',\n LESS_THAN: 'conditionOperatorLessThan',\n MORE_THAN_OR_EQUAL_TO: 'conditionOperatorMoreThanOrEqualTo',\n LESS_THAN_OR_EQUAL_TO: 'conditionOperatorLessThanOrEqualTo',\n} as const;\n\nexport const APPLIES_TO_OPTIONS_KEYS = {\n ALL_USERS: 'appliesToAllUsers',\n SPECIFIC_ROLES: 'appliesToSpecificRoles',\n} as const;\n\n/**\n * Initial values for the approval rule form\n * Used when creating a new rule\n */\nexport const INITIAL_FORM_VALUES: FormValuesParams = {\n status: 'ENABLED',\n name: '',\n description: '',\n roleType: 'all_users',\n appliesTo: [],\n condition: {\n quantity: '',\n amount: {\n currency: 'USD',\n value: '',\n },\n attribute: 'GRAND_TOTAL',\n operator: 'MORE_THAN',\n },\n approvers: [],\n};\n\n/**\n * Initial state for the form reducer\n * Includes form values, loading states, and validation\n */\nexport const INITIAL_FORM_STATE: FormState = {\n formValues: INITIAL_FORM_VALUES,\n isLoading: false,\n submitError: null,\n availableAppliesTo: [],\n availableRequiresApprovalFrom: [],\n errors: {},\n touched: {},\n currencyCodesList: [{ text: 'USD', value: 'USD' }],\n};\n\n/**\n * Fields that must be touched (validated) on form submission\n */\nexport const REQUIRED_FIELDS_ON_SUBMIT = {\n name: true,\n appliesTo: true,\n ruleValue: true,\n approvers: true,\n} as const;\n\n/**\n * Translation keys for validation error messages\n */\nexport const VALIDATION_ERROR_KEYS = {\n REQUIRED: 'PurchaseOrders.approvalRuleForm.errorsMessages.required',\n APPROVERS: 'PurchaseOrders.approvalRuleForm.errorsMessages.approvers',\n FAILED_TO_LOAD: 'Failed to load metadata. Please try again.',\n FAILED_TO_CREATE: 'Failed to create approval rule. Please try again.',\n} as const;\n\n/**\n * Creates rule type options for the dropdown\n * @param t - Translation function\n */\n/**\n * Creates rule type options for the dropdown\n * @param t - Translation function\n */\nexport const createRuleTypeOptions = (t: Record<string, string>) => [\n {\n text: t[RULE_TYPE_OPTIONS_KEYS.GRAND_TOTAL],\n value: 'GRAND_TOTAL',\n },\n {\n text: t[RULE_TYPE_OPTIONS_KEYS.SHIPPING_INCL_TAX],\n value: 'SHIPPING_INCL_TAX',\n },\n {\n text: t[RULE_TYPE_OPTIONS_KEYS.NUMBER_OF_SKUS],\n value: 'NUMBER_OF_SKUS',\n },\n];\n\n/**\n * Creates condition operator options for the dropdown\n * @param t - Translation function\n */\nexport const createConditionOperators = (t: Record<string, string>) => [\n { text: t[CONDITION_OPERATORS_KEYS.MORE_THAN], value: 'MORE_THAN' },\n {\n text: t[CONDITION_OPERATORS_KEYS.LESS_THAN],\n value: 'LESS_THAN',\n },\n {\n text: t[CONDITION_OPERATORS_KEYS.MORE_THAN_OR_EQUAL_TO],\n value: 'MORE_THAN_OR_EQUAL_TO',\n },\n {\n text: t[CONDITION_OPERATORS_KEYS.LESS_THAN_OR_EQUAL_TO],\n value: 'LESS_THAN_OR_EQUAL_TO',\n },\n];\n\n/**\n * Creates \"applies to\" options for the dropdown\n * @param t - Translation function\n */\nexport const createAppliesToOptions = (t: Record<string, string>) => [\n { text: t[APPLIES_TO_OPTIONS_KEYS.ALL_USERS], value: 'all_users' },\n {\n text: t[APPLIES_TO_OPTIONS_KEYS.SPECIFIC_ROLES],\n value: 'specific_roles',\n },\n];\n","/********************************************************************\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 { PurchaseOrderApprovalRuleModel } from '@/b2b-purchase-order/data/models';\nimport {\n ConditionAttributeType,\n ConditionOperatorType,\n FormValuesParams,\n} from '@/b2b-purchase-order/types/hooks';\nimport {\n RULE_TYPE_OPTIONS_KEYS,\n CONDITION_OPERATORS_KEYS,\n} from '@/b2b-purchase-order/configs/approvalRuleForm.config';\n\n// Default values for form fields\nconst DEFAULT_STATUS = 'ENABLED';\nconst DEFAULT_ATTRIBUTE: ConditionAttributeType = 'GRAND_TOTAL';\nconst DEFAULT_OPERATOR: ConditionOperatorType = 'MORE_THAN';\nconst DEFAULT_CURRENCY = 'USD';\nconst DEFAULT_QUANTITY = 0;\nconst DEFAULT_AMOUNT_VALUE = 0;\n\n/**\n * Checks if the given attribute is a valid condition attribute type\n */\nconst isValidAttribute = (\n attribute: any\n): attribute is ConditionAttributeType => {\n return Object.keys(RULE_TYPE_OPTIONS_KEYS).includes(attribute);\n};\n\n/**\n * Checks if the given operator is a valid condition operator type\n */\nconst isValidOperator = (operator: any): operator is ConditionOperatorType => {\n return Object.keys(CONDITION_OPERATORS_KEYS).includes(operator);\n};\n\n/**\n * Transforms API response data to form values format\n * Handles all the necessary data conversions and provides safe defaults\n */\nexport const transformToFormValues = (\n data: PurchaseOrderApprovalRuleModel\n): FormValuesParams => {\n return {\n status: (data.status as 'ENABLED' | 'DISABLED') || DEFAULT_STATUS,\n name: data.name || '',\n description: data.description || '',\n roleType: data.appliesToRoles?.length > 0 ? 'specific_roles' : 'all_users',\n appliesTo: data.appliesToRoles?.map((role) => role.id) || [],\n condition: {\n quantity: data.condition?.quantity ?? DEFAULT_QUANTITY,\n amount: {\n currency: data.condition?.amount?.currency || DEFAULT_CURRENCY,\n value: data.condition?.amount?.value ?? DEFAULT_AMOUNT_VALUE,\n },\n attribute: isValidAttribute(data.condition?.attribute)\n ? data.condition.attribute\n : DEFAULT_ATTRIBUTE,\n operator: isValidOperator(data.condition?.operator)\n ? data.condition.operator\n : DEFAULT_OPERATOR,\n },\n approvers: data.approverRoles?.map((role) => role.id) || [],\n };\n};\n","/********************************************************************\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 { toSnakeCase } from './case-converter';\n\n/**\n * Checks if a value should be considered as \"has value\" for form submission\n * Empty strings and null/undefined are considered as no value\n * Zero (0) is considered as no value to match existing behavior\n */\nconst hasValue = (value: any): boolean => {\n return value !== null && value !== undefined && value !== '' && value !== 0;\n};\n\n/**\n * Cleans form values and converts to snake_case for API submission\n * - Handles role type logic (all_users vs specific_roles)\n * - Removes empty condition values (amount or quantity)\n * - Converts camelCase keys to snake_case\n */\nexport function cleanAndDeep(formValues: Record<string, any>): any {\n const { roleType, appliesTo, condition, ...restAll } = formValues;\n\n // Handle role type logic: all_users means empty appliesTo array\n const roleConfig =\n roleType === 'all_users' ? { appliesTo: [] } : { appliesTo };\n\n // Build condition config with only non-empty values\n let conditionConfig = {};\n\n if (condition) {\n const { amount, quantity, ...restCondition } = condition;\n\n const newCondition = { ...restCondition };\n\n // Only include amount if it has a valid value\n if (hasValue(amount?.value)) {\n newCondition.amount = amount;\n }\n\n // Only include quantity if it has a valid value\n if (hasValue(quantity)) {\n newCondition.quantity = quantity;\n }\n\n conditionConfig = newCondition;\n }\n\n // Convert to snake_case for API\n const result = toSnakeCase({\n ...restAll,\n ...roleConfig,\n condition: conditionConfig,\n });\n\n return result;\n}\n","/*******************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { useCallback, useEffect, useMemo, useReducer } from 'preact/hooks';\nimport {\n FormAction,\n FormState,\n UseApprovalRuleFormProps,\n UseApprovalRuleFormReturn,\n} from '@/b2b-purchase-order/types/hooks';\n\nimport {\n currencyInfo,\n getPurchaseOrderApprovalRule,\n createPurchaseOrderApprovalRule,\n updatePurchaseOrderApprovalRule,\n getPurchaseOrderApprovalRuleMetadata,\n} from '@/b2b-purchase-order/api';\nimport {\n updateFormFieldValue,\n validateFormFields,\n updateValidationErrors,\n transformToFormValues,\n cleanAndDeep,\n} from '@/b2b-purchase-order/lib';\nimport {\n INITIAL_FORM_STATE,\n REQUIRED_FIELDS_ON_SUBMIT,\n VALIDATION_ERROR_KEYS,\n createRuleTypeOptions,\n createConditionOperators,\n createAppliesToOptions,\n} from '@/b2b-purchase-order/configs';\n\n// Reducer function - handles all state updates in one place\nfunction formReducer(state: FormState, action: FormAction): FormState {\n switch (action.type) {\n case 'SET_LOADING':\n return { ...state, isLoading: action.payload };\n\n case 'SET_SUBMIT_ERROR':\n return { ...state, submitError: action.payload };\n\n case 'SET_FORM_VALUES':\n return { ...state, formValues: action.payload };\n\n case 'SET_AVAILABLE_APPLIES_TO':\n return { ...state, availableAppliesTo: action.payload };\n\n case 'SET_AVAILABLE_APPROVERS':\n return { ...state, availableRequiresApprovalFrom: action.payload };\n\n case 'SET_ERRORS':\n return { ...state, errors: action.payload };\n\n case 'SET_TOUCHED':\n return { ...state, touched: action.payload };\n\n case 'SET_CURRENCIES':\n return { ...state, currencyCodesList: action.payload };\n\n case 'UPDATE_FIELD': {\n const { key, value } = action.payload;\n const newFormValues = updateFormFieldValue(state.formValues, key, value);\n\n // Build new touched state\n const newTouched = { ...state.touched, [key]: true };\n\n // Special case: when roleType changes to specific_roles, mark appliesTo as touched\n if (key === 'roleType' && value === 'specific_roles') {\n newTouched.appliesTo = true;\n }\n\n // Validate and get updated errors\n const allErrors = validateFormFields(newFormValues);\n const newErrors = updateValidationErrors(\n allErrors,\n state.errors,\n newTouched\n );\n\n return {\n ...state,\n formValues: newFormValues,\n touched: newTouched,\n errors: newErrors,\n };\n }\n\n case 'TOUCH_FIELD': {\n const fieldName = action.payload;\n const newTouched = { ...state.touched, [fieldName]: true };\n\n // Validate and update errors for touched field\n const allErrors = validateFormFields(state.formValues);\n const newErrors = updateValidationErrors(\n allErrors,\n state.errors,\n newTouched\n );\n\n return {\n ...state,\n touched: newTouched,\n errors: newErrors,\n };\n }\n\n case 'MARK_FIELDS_TOUCHED': {\n const newTouched = { ...state.touched, ...action.payload };\n const allErrors = validateFormFields(state.formValues);\n const newErrors = updateValidationErrors(\n allErrors,\n state.errors,\n newTouched\n );\n\n return {\n ...state,\n touched: newTouched,\n errors: newErrors,\n };\n }\n\n default:\n return state;\n }\n}\n\nexport const useApprovalRuleForm = ({\n t,\n approvalRuleID,\n routeApprovalRulesList,\n onSubmit,\n onChange,\n permissions,\n loadingPermissions,\n}: UseApprovalRuleFormProps): UseApprovalRuleFormReturn => {\n const [state, dispatch] = useReducer(formReducer, INITIAL_FORM_STATE);\n\n // Memoize options to prevent re-creation on each render\n const ruleTypeOptions = useMemo(() => createRuleTypeOptions(t), [t]);\n const conditionOperators = useMemo(() => createConditionOperators(t), [t]);\n const appliesToOptions = useMemo(() => createAppliesToOptions(t), [t]);\n\n // Load initial data (currencies and approval rule metadata)\n useEffect(() => {\n dispatch({ type: 'SET_LOADING', payload: true });\n\n // Load currency codes\n currencyInfo()\n .then((data) => {\n dispatch({\n type: 'SET_CURRENCIES',\n payload: data.availableCurrencyCodes,\n });\n })\n .catch((error) => {\n console.error('Failed to fetch currencies:', error);\n });\n\n // Load metadata (available roles) first - always needed\n getPurchaseOrderApprovalRuleMetadata()\n .then((data) => {\n const { availableAppliesTo, availableRequiresApprovalFrom } = data;\n dispatch({\n type: 'SET_AVAILABLE_APPLIES_TO',\n payload: availableAppliesTo,\n });\n dispatch({\n type: 'SET_AVAILABLE_APPROVERS',\n payload: availableRequiresApprovalFrom,\n });\n\n // Then load approval rule data if in edit mode\n if (approvalRuleID) {\n return getPurchaseOrderApprovalRule(approvalRuleID);\n }\n return null;\n })\n .then((ruleData) => {\n if (ruleData) {\n // Edit mode: set form values from existing rule\n dispatch({\n type: 'SET_FORM_VALUES',\n payload: transformToFormValues(ruleData),\n });\n }\n dispatch({ type: 'SET_SUBMIT_ERROR', payload: null });\n })\n .catch((error) => {\n console.error('Failed to fetch data:', error);\n dispatch({\n type: 'SET_SUBMIT_ERROR',\n payload: error?.message || VALIDATION_ERROR_KEYS.FAILED_TO_LOAD,\n });\n })\n .finally(() => {\n dispatch({ type: 'SET_LOADING', payload: false });\n });\n }, [approvalRuleID]);\n\n // Handler for field value changes\n const handleSetFormValues = useCallback(\n (key: string, value: string | number | boolean | string[]) => {\n dispatch({ type: 'UPDATE_FIELD', payload: { key, value } });\n if (onChange) {\n onChange({ ...state.formValues, [key]: value });\n }\n },\n [onChange, state.formValues]\n );\n\n // Handler for field touch (blur)\n const handleFieldTouch = useCallback(\n (fieldName: string) => {\n dispatch({ type: 'TOUCH_FIELD', payload: fieldName });\n if (onChange) {\n onChange(state.formValues);\n }\n },\n [onChange, state.formValues]\n );\n\n // Handler for form submission\n const handleSubmit = useCallback(async () => {\n dispatch({ type: 'SET_LOADING', payload: true });\n dispatch({ type: 'SET_SUBMIT_ERROR', payload: null });\n\n // Mark all required fields as touched to show all errors\n dispatch({\n type: 'MARK_FIELDS_TOUCHED',\n payload: REQUIRED_FIELDS_ON_SUBMIT,\n });\n\n // Validate form\n const validationErrors = validateFormFields(state.formValues);\n\n if (Object.keys(validationErrors).length > 0) {\n dispatch({ type: 'SET_ERRORS', payload: validationErrors });\n dispatch({ type: 'SET_LOADING', payload: false });\n return;\n }\n\n // Clean and prepare data for API\n const cleanedData = cleanAndDeep(state.formValues);\n\n // Submit to API (create or update based on approvalRuleID)\n try {\n let data;\n\n if (approvalRuleID) {\n // Update existing approval rule\n data = await updatePurchaseOrderApprovalRule({\n uid: approvalRuleID,\n ...cleanedData,\n });\n } else {\n // Create new approval rule\n data = await createPurchaseOrderApprovalRule(cleanedData);\n }\n\n if (!data.uid) {\n dispatch({\n type: 'SET_SUBMIT_ERROR',\n payload: VALIDATION_ERROR_KEYS.FAILED_TO_CREATE,\n });\n dispatch({ type: 'SET_LOADING', payload: false });\n return;\n }\n\n // Success - call onSubmit callback if provided\n if (onSubmit) {\n onSubmit(state.formValues as any);\n }\n\n if (routeApprovalRulesList) {\n window.location.href = routeApprovalRulesList();\n } else {\n dispatch({ type: 'SET_LOADING', payload: false });\n }\n } catch (error: any) {\n console.error('Failed to save approval rule:', error);\n dispatch({\n type: 'SET_SUBMIT_ERROR',\n payload: error?.message || VALIDATION_ERROR_KEYS.FAILED_TO_CREATE,\n });\n dispatch({ type: 'SET_LOADING', payload: false });\n }\n }, [state.formValues, routeApprovalRulesList, approvalRuleID, onSubmit]);\n\n // Memoized: true if form is loading or permissions not loaded or missing required permission\n const formLoading = useMemo(() => {\n if (state.isLoading || loadingPermissions) return true;\n\n if (\n !permissions?.permissions.viewApprovalRules &&\n !permissions?.permissions.manageApprovalRules\n ) {\n return true;\n }\n\n return false;\n }, [state.isLoading, loadingPermissions, permissions]);\n\n return {\n availableAppliesTo: state.availableAppliesTo,\n availableRequiresApprovalFrom: state.availableRequiresApprovalFrom,\n formValues: state.formValues,\n ruleTypeOptions,\n conditionOperators,\n currencies: state.currencyCodesList,\n appliesToOptions,\n handleSetFormValues,\n handleSubmit,\n handleFieldTouch,\n errors: state.errors,\n touched: state.touched,\n isLoading: state.isLoading,\n formLoading,\n submitError: state.submitError,\n };\n};\n","/*******************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { Text } from '@adobe-commerce/elsie/i18n';\nimport { FunctionComponent } from 'preact';\n\nconst ErrorMessage: FunctionComponent<{\n touched?: boolean;\n error?: string;\n className?: string;\n}> = ({ touched = false, error, className = 'error-message' }) => {\n if (!touched || !error) {\n return null;\n }\n\n return (\n <span className={className}>\n <Text id={error} />\n </span>\n );\n};\n\nexport default ErrorMessage;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport {\n Input,\n Picker,\n TextArea,\n RadioButton,\n Checkbox,\n MultiSelect,\n Button,\n} from '@adobe-commerce/elsie/components';\nimport { ErrorMessage } from '@/b2b-purchase-order/components/ApprovalRuleForm/blocks';\nimport { CustomerRolePermissionsModel } from '@/b2b-purchase-order/data/models';\nimport { classes } from '@adobe-commerce/elsie/lib';\n\nconst Form = ({\n availableRequiresApprovalFrom,\n conditionOperators,\n availableAppliesTo,\n appliesToOptions,\n ruleTypeOptions,\n currencies,\n formValues,\n errors,\n touched,\n isLoading,\n permissions,\n handleSubmit,\n handleFieldTouch,\n handleSetFormValues,\n routeApprovalRulesList,\n t,\n}: {\n availableRequiresApprovalFrom: { id: string; name: string }[];\n conditionOperators: { value: string; text: string }[];\n availableAppliesTo: { id: string; name: string }[];\n appliesToOptions: { value: string; text: string }[];\n ruleTypeOptions: { value: string; text: string }[];\n currencies: { value: string; text: string }[];\n formValues: any;\n errors: Record<string, string>;\n touched: Record<string, boolean>;\n isLoading: boolean;\n permissions?: CustomerRolePermissionsModel;\n handleSubmit: () => void;\n handleFieldTouch: (field: string) => void;\n handleSetFormValues: (field: string, value: any) => void;\n routeApprovalRulesList?: () => string;\n t: Record<string, string>;\n}) => {\n const disabledInputField =\n isLoading || !permissions?.permissions?.viewApprovalRules;\n\n return (\n <form data-testid=\"approval-rule-form\">\n <Checkbox\n data-testid=\"status-toggle\"\n className=\"b2b-purchase-order-approval-rule-form__toggle\"\n disabled={disabledInputField}\n name=\"status\"\n label={t.formEnabled}\n checked={formValues.status === 'ENABLED'}\n onChange={(event) => {\n const value = (event.target as HTMLInputElement).checked;\n\n handleSetFormValues('status', value);\n }}\n />\n <div data-testid=\"name-input-container\">\n <Input\n data-testid=\"name-input\"\n className=\"b2b-purchase-order-approval-rule-form__name-input\"\n disabled={disabledInputField}\n name={'name'}\n floatingLabel={t.inputRuleNameFloatingLabel}\n placeholder={t.inputRuleNamePlaceholder}\n value={formValues.name}\n error={!!(touched.name && errors.name)}\n onChange={(event: Event) => {\n const value = (event.target as HTMLInputElement).value;\n\n handleSetFormValues('name', value);\n }}\n onBlur={() => handleFieldTouch('name')}\n />\n <ErrorMessage touched={touched.name} error={errors.name} />\n </div>\n <TextArea\n data-testid=\"description-textarea\"\n className=\"b2b-purchase-order-approval-rule-form__description\"\n disabled={disabledInputField}\n name=\"description\"\n label={t.textAreaDescriptionLabel}\n value={formValues.description}\n onChange={(event) => {\n const value = (event.target as HTMLTextAreaElement).value;\n handleSetFormValues('description', value);\n }}\n />\n <div\n data-testid=\"applies-to-section\"\n className=\"b2b-purchase-order-approval-rule-form__applies-to\"\n >\n <span className=\"b2b-purchase-order-approval-rule-form__applies-to-title\">\n {t.titleAppliesTo}\n </span>\n {appliesToOptions.map((option, index) => {\n return (\n <RadioButton\n key={option.value}\n data-testid={`applies-to-radio-${index}`}\n disabled={disabledInputField}\n name=\"radio-group\"\n value={option.value}\n label={option.text}\n checked={formValues.roleType === option.value}\n onChange={(event) => {\n const value = (event.target as HTMLInputElement).value;\n handleSetFormValues('roleType', value);\n }}\n />\n );\n })}\n {formValues.roleType === 'specific_roles' ? (\n <div\n data-testid=\"applies-to-multiselect-container\"\n className=\"b2b-purchase-order-approval-rule-form__applies-to-multiselect\"\n >\n <MultiSelect\n data-testid=\"applies-to-multiselect\"\n disabled={disabledInputField}\n name=\"appliesTo\"\n value={[...formValues.appliesTo]}\n options={availableAppliesTo.map((option) => ({\n value: option.id,\n label: option.name,\n }))}\n error={!!(touched.appliesTo && errors.appliesTo)}\n onChange={(value) => {\n handleSetFormValues('appliesTo', value as string[]);\n if (!touched.appliesTo) handleFieldTouch('appliesTo');\n }}\n />\n <ErrorMessage\n touched={touched.appliesTo}\n error={errors.appliesTo}\n />\n </div>\n ) : null}\n </div>\n <div\n data-testid=\"rule-type-section\"\n className=\"b2b-purchase-order-approval-rule-form__rule-type\"\n >\n <span className=\"b2b-purchase-order-approval-rule-form__rule-type-title\">\n {t.titleRuleType}\n </span>\n <Picker\n data-testid=\"rule-type-picker\"\n className=\"b2b-purchase-order-approval-rule-form__rule-type-picker\"\n disabled={disabledInputField}\n name=\"ruleType\"\n value={formValues.condition.attribute}\n options={ruleTypeOptions}\n handleSelect={(event) => {\n const value = (event.target as HTMLSelectElement).value;\n handleSetFormValues('ruleType', value);\n }}\n />\n </div>\n <div\n data-testid=\"rule-condition-section\"\n className=\"b2b-purchase-order-approval-rule-form__rule-condition\"\n >\n <span className=\"b2b-purchase-order-approval-rule-form__rule-condition-title\">\n {\n ruleTypeOptions.find(\n (item) => item.value === formValues.condition.attribute\n )?.text\n }\n </span>\n <div\n className={classes([\n 'b2b-purchase-order-approval-rule-form__rule-condition-container',\n [\n 'b2b-purchase-order-approval-rule-form__rule-condition-container--error',\n !!errors.ruleValue && touched.ruleValue,\n ],\n ])}\n >\n <Picker\n data-testid=\"rule-condition-picker\"\n className=\"b2b-purchase-order-approval-rule-form__rule-condition-picker\"\n disabled={disabledInputField}\n name=\"ruleCondition\"\n value={formValues.condition.operator}\n options={conditionOperators}\n handleSelect={(event) => {\n const value = (event.target as HTMLSelectElement).value;\n handleSetFormValues('ruleCondition', value);\n }}\n />\n <div data-testid=\"rule-value-container\">\n <Input\n data-testid=\"rule-value-input\"\n className=\"b2b-purchase-order-approval-rule-form__rule-value-input\"\n disabled={disabledInputField}\n name=\"ruleValue\"\n floatingLabel={\n formValues.condition.attribute === 'NUMBER_OF_SKUS'\n ? t.inputQuantityFloatingLabel\n : t.inputAmountFloatingLabel\n }\n placeholder={\n formValues.condition.attribute === 'NUMBER_OF_SKUS'\n ? t.inputQuantityPlaceholder\n : t.inputAmountPlaceholder\n }\n value={\n formValues.condition.attribute === 'NUMBER_OF_SKUS'\n ? formValues.condition.quantity\n : formValues.condition.amount.value\n }\n error={!!(touched.ruleValue && errors.ruleValue)}\n onChange={(event) => {\n const value = (event.target as HTMLInputElement).value;\n handleSetFormValues('ruleValue', value);\n }}\n onBlur={() => handleFieldTouch('ruleValue')}\n />\n <ErrorMessage\n touched={touched.ruleValue}\n error={errors.ruleValue}\n />\n </div>\n {formValues.condition.attribute !== 'NUMBER_OF_SKUS' ? (\n <Picker\n data-testid=\"rule-condition-currency-picker\"\n className=\"b2b-purchase-order-approval-rule-form__rule-condition-currency-picker\"\n disabled={disabledInputField}\n name=\"ruleConditionCurrency\"\n value={formValues.condition.amount.currency}\n options={currencies}\n handleSelect={(event) => {\n const value = (event.target as HTMLSelectElement).value;\n handleSetFormValues('ruleConditionCurrency', value);\n }}\n />\n ) : null}\n </div>\n </div>\n <div\n data-testid=\"approval-role-section\"\n className=\"b2b-purchase-order-approval-rule-form__approval-role\"\n >\n <span className=\"b2b-purchase-order-approval-rule-form__approval-role-title\">\n {t.titleRequiresApprovalRole}\n </span>\n <div className=\"b2b-purchase-order-approval-rule-form__approval-role-multiselect\">\n <MultiSelect\n data-testid=\"approvers-multiselect\"\n disabled={disabledInputField}\n name=\"approvers\"\n value={[...formValues.approvers]}\n options={availableRequiresApprovalFrom.map((option) => ({\n value: option.id,\n label: option.name,\n }))}\n error={!!(touched.approvers && errors.approvers)}\n onChange={(value) => {\n handleSetFormValues('approvers', value as string[]);\n if (!touched.approvers) handleFieldTouch('approvers');\n }}\n />\n <ErrorMessage touched={touched.approvers} error={errors.approvers} />\n </div>\n </div>\n <div\n data-testid=\"form-buttons\"\n className=\"b2b-purchase-order-approval-rule-form__buttons\"\n >\n <Button\n data-testid=\"save-button\"\n type=\"button\"\n disabled={disabledInputField}\n onClick={handleSubmit}\n >\n {t.buttonSave}\n </Button>\n\n <Button\n data-testid=\"cancel-button\"\n disabled={isLoading}\n variant=\"secondary\"\n type=\"button\"\n onClick={() => {\n window.location.href = routeApprovalRulesList?.() ?? '';\n }}\n >\n {t.buttonCancel}\n </Button>\n </div>\n </form>\n );\n};\n\nexport default Form;\n","/*******************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { FunctionComponent } from 'preact';\nimport { classes } from '@adobe-commerce/elsie/lib';\nimport { Card, InLineAlert } from '@adobe-commerce/elsie/components';\nimport {\n useApprovalRuleForm,\n useCustomerRolePermissions,\n} from '@/b2b-purchase-order/hooks';\nimport { ApprovalRuleFormProps } from '@/b2b-purchase-order/types/components';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { Form } from '@/b2b-purchase-order/components/ApprovalRuleForm/blocks';\nimport '@/b2b-purchase-order/components/ApprovalRuleForm/ApprovalRuleForm.css';\nimport {\n PurchaseOrdersHeader,\n FormLoader,\n} from '@/b2b-purchase-order/components';\n\nexport const ApprovalRuleForm: FunctionComponent<ApprovalRuleFormProps> = ({\n className,\n approvalRuleID,\n withHeader,\n withWrapper,\n routeApprovalRulesList,\n onSubmit,\n onChange,\n}) => {\n const t = useText({\n headerText: 'PurchaseOrders.approvalRuleForm.headerText',\n titleAppliesTo: 'PurchaseOrders.approvalRuleForm.titleAppliesTo',\n titleRuleType: 'PurchaseOrders.approvalRuleForm.titleRuleType',\n titleRequiresApprovalRole:\n 'PurchaseOrders.approvalRuleForm.titleRequiresApprovalRole',\n formEnabled: 'PurchaseOrders.approvalRuleForm.fields.enabled',\n formDisabled: 'PurchaseOrders.approvalRuleForm.fields.disabled',\n inputRuleNameFloatingLabel:\n 'PurchaseOrders.approvalRuleForm.fields.inputRuleName.floatingLabel',\n inputRuleNamePlaceholder:\n 'PurchaseOrders.approvalRuleForm.fields.inputRuleName.placeholder',\n textAreaDescriptionLabel:\n 'PurchaseOrders.approvalRuleForm.fields.textAreaDescription.label',\n appliesToAllUsers:\n 'PurchaseOrders.approvalRuleForm.fields.appliesTo.allUsers',\n appliesToSpecificRoles:\n 'PurchaseOrders.approvalRuleForm.fields.appliesTo.specificRoles',\n ruleTypeGrandTotal:\n 'PurchaseOrders.approvalRuleForm.fields.ruleTypeOptions.grandTotal',\n ruleTypeShippingInclTax:\n 'PurchaseOrders.approvalRuleForm.fields.ruleTypeOptions.shippingInclTax',\n ruleTypeNumberOfSkus:\n 'PurchaseOrders.approvalRuleForm.fields.ruleTypeOptions.numberOfSkus',\n conditionOperatorMoreThan:\n 'PurchaseOrders.approvalRuleForm.fields.conditionOperators.moreThan',\n conditionOperatorLessThan:\n 'PurchaseOrders.approvalRuleForm.fields.conditionOperators.lessThan',\n conditionOperatorMoreThanOrEqualTo:\n 'PurchaseOrders.approvalRuleForm.fields.conditionOperators.moreThanOrEqualTo',\n conditionOperatorLessThanOrEqualTo:\n 'PurchaseOrders.approvalRuleForm.fields.conditionOperators.lessThanOrEqualTo',\n inputQuantityFloatingLabel:\n 'PurchaseOrders.approvalRuleForm.fields.inputQuantity.floatingLabel',\n inputQuantityPlaceholder:\n 'PurchaseOrders.approvalRuleForm.fields.inputQuantity.placeholder',\n inputAmountFloatingLabel:\n 'PurchaseOrders.approvalRuleForm.fields.inputAmount.floatingLabel',\n inputAmountPlaceholder:\n 'PurchaseOrders.approvalRuleForm.fields.inputAmount.placeholder',\n buttonCancel: 'PurchaseOrders.approvalRuleForm.fields.buttons.cancel',\n buttonSave: 'PurchaseOrders.approvalRuleForm.fields.buttons.save',\n });\n const { permissions, loadingPermissions } = useCustomerRolePermissions();\n const {\n availableRequiresApprovalFrom,\n conditionOperators,\n availableAppliesTo,\n appliesToOptions,\n ruleTypeOptions,\n currencies,\n formValues,\n errors,\n touched,\n isLoading,\n submitError,\n formLoading,\n handleSubmit,\n handleFieldTouch,\n handleSetFormValues,\n } = useApprovalRuleForm({\n t,\n approvalRuleID,\n loadingPermissions,\n permissions,\n routeApprovalRulesList,\n onSubmit,\n onChange,\n });\n\n if (formLoading) {\n return (\n <FormLoader\n testId=\"b2b-purchase-order-approval-rule-form\"\n className={classes([\n 'b2b-purchase-order-approval-rule-form',\n className,\n ])}\n />\n );\n }\n\n const renderContentForm = (\n <>\n {!!submitError && <InLineAlert heading=\"\" description={submitError} />}\n <Form\n availableRequiresApprovalFrom={availableRequiresApprovalFrom}\n conditionOperators={conditionOperators}\n availableAppliesTo={availableAppliesTo}\n appliesToOptions={appliesToOptions}\n ruleTypeOptions={ruleTypeOptions}\n currencies={currencies}\n formValues={formValues}\n errors={errors}\n touched={touched}\n isLoading={isLoading}\n handleSubmit={handleSubmit}\n handleFieldTouch={handleFieldTouch}\n handleSetFormValues={handleSetFormValues}\n permissions={permissions}\n routeApprovalRulesList={routeApprovalRulesList}\n t={t}\n />\n </>\n );\n\n return (\n <div\n data-testid=\"b2b-purchase-order-approval-rule-form\"\n className={classes(['b2b-purchase-order-approval-rule-form', className])}\n >\n {withHeader ? <PurchaseOrdersHeader headerText={t.headerText} /> : null}\n {withWrapper ? (\n <Card variant=\"secondary\">{renderContentForm}</Card>\n ) : (\n renderContentForm\n )}\n </div>\n );\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { classes, Container } from '@adobe-commerce/elsie/lib';\nimport { ApprovalRuleFormProps } from '@/b2b-purchase-order/types/containers';\nimport { ApprovalRuleForm as ApprovalRuleFormComponent } from '@/b2b-purchase-order/components';\n\nexport const ApprovalRuleForm: Container<ApprovalRuleFormProps> = ({\n withHeader = true,\n withWrapper = true,\n className,\n approvalRuleID,\n routeApprovalRulesList,\n onSubmit,\n onChange,\n}) => {\n return (\n <div\n data-testid=\"b2b-purchase-order-approval-rule-form-container\"\n className={classes([\n 'b2b-purchase-order-approval-rule-form-container',\n className,\n ])}\n >\n <ApprovalRuleFormComponent\n withWrapper={withWrapper}\n withHeader={withHeader}\n approvalRuleID={approvalRuleID}\n routeApprovalRulesList={routeApprovalRulesList}\n onSubmit={onSubmit}\n onChange={onChange}\n />\n </div>\n );\n};\n"],"names":["updateFormFieldValue","formValues","key","value","newFormValues","numericValue","validateFormFields","values","errors","updateValidationErrors","newErrors","currentErrors","touchedFields","updatedErrors","errorKey","RULE_TYPE_OPTIONS_KEYS","CONDITION_OPERATORS_KEYS","APPLIES_TO_OPTIONS_KEYS","INITIAL_FORM_VALUES","INITIAL_FORM_STATE","REQUIRED_FIELDS_ON_SUBMIT","VALIDATION_ERROR_KEYS","createRuleTypeOptions","t","createConditionOperators","createAppliesToOptions","DEFAULT_STATUS","DEFAULT_ATTRIBUTE","DEFAULT_OPERATOR","DEFAULT_CURRENCY","DEFAULT_QUANTITY","DEFAULT_AMOUNT_VALUE","isValidAttribute","attribute","isValidOperator","operator","transformToFormValues","data","_a","_b","role","_c","_e","_d","_g","_f","_h","_i","_j","hasValue","cleanAndDeep","roleType","appliesTo","condition","restAll","roleConfig","conditionConfig","amount","quantity","restCondition","newCondition","toSnakeCase","formReducer","state","action","newTouched","allErrors","fieldName","useApprovalRuleForm","approvalRuleID","routeApprovalRulesList","onSubmit","onChange","permissions","loadingPermissions","dispatch","useReducer","ruleTypeOptions","useMemo","conditionOperators","appliesToOptions","useEffect","currencyInfo","error","getPurchaseOrderApprovalRuleMetadata","availableAppliesTo","availableRequiresApprovalFrom","getPurchaseOrderApprovalRule","ruleData","handleSetFormValues","useCallback","handleFieldTouch","handleSubmit","validationErrors","cleanedData","updatePurchaseOrderApprovalRule","createPurchaseOrderApprovalRule","formLoading","ErrorMessage","touched","className","Text","Form","currencies","isLoading","disabledInputField","jsxs","jsx","Checkbox","event","Input","TextArea","option","index","RadioButton","MultiSelect","Picker","item","classes","Button","ApprovalRuleForm","withHeader","withWrapper","useText","useCustomerRolePermissions","submitError","FormLoader","renderContentForm","Fragment","InLineAlert","PurchaseOrdersHeader","Card","ApprovalRuleFormComponent"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  /*! Copyright 2025 Adobe
2
2
  All Rights Reserved. */
3
- import{jsxs as L,jsx as r}from"@dropins/tools/preact-jsx-runtime.js";import{classes as le}from"@dropins/tools/lib.js";import{i as ne,g as oe,P as ie,d as ce}from"../chunks/pageSize.config.js";import{P as de}from"../chunks/PurchaseOrdersHeader.js";import"../chunks/PurchaseOrderHistoryLogContent.js";import{ActionButton as V,Tag as ue,Button as pe,Skeleton as he,SkeletonRow as me}from"@dropins/tools/components.js";import{useState as g,useEffect as W,useCallback as v,useMemo as X}from"@dropins/tools/preact-hooks.js";import{events as Y}from"@dropins/tools/event-bus.js";import{u as be}from"../chunks/useCustomerRolePermissions.js";import{g as ge,d as fe}from"../chunks/getPurchaseOrderApprovalRules.js";import{Text as f,useText as we}from"@dropins/tools/i18n.js";import"@dropins/tools/preact.js";import"../chunks/permissions.js";import"../chunks/fetch-graphql.js";import"@dropins/tools/fetch-graphql.js";import"../chunks/fetch-error.js";import"../chunks/transform-purchase-order-approval-rule.js";const ee=[{key:"ruleName",label:"Rule Name"},{key:"status",label:"Status"},{key:"createdBy",label:"Created By"},{key:"action",label:"Actions"}],Pe=20,Te=({routeApprovalRuleDetails:u,routeCreateApprovalRule:p,routeEditApprovalRule:h,setColumns:m,setRowsData:w,initialPageSize:$,permissions:y,loadingPermissions:S,t:l})=>{const[b,i]=g([]),[P,n]=g(!0),[k,o]=g(!0),[c,A]=g($),[U,x]=g({currentPage:1,totalPages:1,totalCount:0}),[T,O]=g(new Set);W(()=>{const s=Y.on("purchase-order/refresh",()=>{n(!0)},{eager:!0});return()=>{s==null||s.off()}},[]);const{currentPage:R,totalPages:N,totalCount:re}=U,I=v(s=>{x(t=>({...t,currentPage:s})),O(new Set),n(!0)},[]),se=v(s=>{const t=s.target.value;A(e=>e.map(a=>({...a,selected:a.value===t}))),I(1),O(new Set),n(!0)},[I]),H=v(s=>{O(t=>{const e=new Set(t);return e.has(s)?e.delete(s):e.add(s),e})},[]);W(()=>{var e;if(!P||S)return;o(!0);const s=(e=c==null?void 0:c.find(a=>a.selected))==null?void 0:e.value,t=parseInt(s??Pe.toString(),10);ge(R,t).then(a=>{var z,E;const j=(a==null?void 0:a.items)??[],B=(z=a==null?void 0:a.pageInfo)==null?void 0:z.currentPage,C=(E=a==null?void 0:a.pageInfo)==null?void 0:E.totalPages,D=a==null?void 0:a.totalCount;x({currentPage:B>C?C||1:B,totalPages:C,totalCount:D}),i(j)}).catch(a=>{console.error("Error fetching approval rules:",a),i([])}).finally(()=>{o(!1),n(!1)})},[P,R,c,N,S]);const _=v((s,t)=>{let e="";switch(t){case"new":{e=p==null?void 0:p(s);break}case"edit":{e=h==null?void 0:h(s);break}case"view":{e=u==null?void 0:u(s);break}}return ne(e??"")?e:"#"},[p,h,u]),ae=X(()=>(m==null?void 0:m(ee))??ee.map(s=>({...s,label:l[s.key]||s.label})),[m,l]),M=v((s,t)=>{s.preventDefault(),o(!0),fe(t).then(()=>{Y.emit("purchase-order/refresh",!0)}).finally(()=>{o(!1)})},[]),te=X(()=>{const s=b==null?void 0:b.map((e,a)=>{var G,Z,q,J,K,Q;const{isAdmin:j,permissions:{manageApprovalRules:B}}=y,C=T.has(a),D=j||B,z=r(V,{onClick:()=>H(a),children:r(f,{id:`PurchaseOrders.purchaseOrdersTable.buttons.${C?"expandedHidden":"expandedShow"}`})}),E=L("div",{className:"b2b-purchase-order-purchase-orders-table__row-details",children:[L("div",{className:"b2b-purchase-order-purchase-orders-table__row-details-content",children:[L("p",{children:[r("span",{children:r(f,{id:"PurchaseOrders.purchaseOrdersTable.expandedRowLabels.ruleType"})})," ",r(f,{id:`PurchaseOrders.purchaseOrdersTable.ruleTypes.${(Z=(G=e.condition)==null?void 0:G.attribute)==null?void 0:Z.toLocaleLowerCase()}`})]}),r("p",{children:r("span",{children:r(f,{id:"PurchaseOrders.purchaseOrdersTable.expandedRowLabels.appliesTo"})})}),r("ul",{children:((q=e==null?void 0:e.appliesToRoles)==null?void 0:q.length)<=0?r("li",{children:l.appliesToAll}):(J=e==null?void 0:e.appliesToRoles)==null?void 0:J.map((d,F)=>r("li",{children:d.name},F))}),r("p",{children:r("span",{children:r(f,{id:"PurchaseOrders.purchaseOrdersTable.expandedRowLabels.approver"})})}),r("ul",{children:(K=e==null?void 0:e.approverRoles)==null?void 0:K.map((d,F)=>r("li",{children:d==null?void 0:d.name},F))})]}),D?r("div",{className:"b2b-purchase-order-purchase-orders-table__row-details-action",children:L("div",{className:"b2b-purchase-order-purchase-orders-table__row-details-action-inner-wrapper",children:[r(V,{onClick:()=>{window.location.href=_(e.uid,"edit")},"aria-label":l.ariaLabelEditRule.replace("{{ruleName}}",e.name),"data-testid":`edit-approval-rule-${e.uid}`,children:l.actionEdit}),r(V,{onClick:d=>M(d,e.uid),"aria-label":l.ariaLabelDeleteRule.replace("{{ruleName}}",e.name),"data-testid":`delete-approval-rule-${e.uid}`,children:l.actionDelete})]})}):r("div",{className:"b2b-purchase-order-purchase-orders-table__row-details-action",children:r(V,{onClick:()=>{window.location.href=_(e.uid,"view")},"aria-label":l.ariaLabelViewRule.replace("{{ruleName}}",e.name),"data-testid":`view-approval-rule-${e.uid}`,children:l.actionView})})]});return{ruleName:e.name,status:r(ue,{className:`b2b-purchase-order-purchase-orders-table__status b2b-purchase-order-purchase-orders-table__status--${oe(e.status)}`,children:r(f,{id:`PurchaseOrders.purchaseOrdersTable.rulesStatus.${(Q=e.status)==null?void 0:Q.toLocaleLowerCase()}`})}),createdBy:e.createdBy,action:z,_rowDetails:E}});let t=s;if(w){const e=w(s);e!==void 0&&Array.isArray(e)&&(t=e)}return t},[b,T,y,w,l,_,M,H]);return{tableConfig:{columns:ae,rows:te,expandedRows:T},paginationConfig:{currentPage:R,totalPages:N,handlePageChange:I},pageSizeConfig:{pageSizeOptionsList:c,onChange:se},totalCount:re,loading:k,handleCreateUrl:_}},Ue=({routeCreateApprovalRule:u,routeEditApprovalRule:p,routeApprovalRuleDetails:h,setColumns:m,setRowsData:w,className:$="",withHeader:y=!0,withWrapper:S=!0,skeletonRowCount:l=5,initialPageSize:b=ce})=>{const i=we({headerText:"PurchaseOrders.approvalRulesList.containerTitle",ruleName:"PurchaseOrders.purchaseOrdersTable.tableColumns.ruleName",ruleType:"PurchaseOrders.purchaseOrdersTable.tableColumns.ruleType",appliesTo:"PurchaseOrders.purchaseOrdersTable.tableColumns.appliesTo",approver:"PurchaseOrders.purchaseOrdersTable.tableColumns.approver",createdBy:"PurchaseOrders.purchaseOrdersTable.tableColumns.createdBy",status:"PurchaseOrders.purchaseOrdersTable.tableColumns.status",actionEdit:"PurchaseOrders.purchaseOrdersTable.actionEdit",actionDelete:"PurchaseOrders.purchaseOrdersTable.actionDelete",addNewRule:"PurchaseOrders.approvalRulesList.buttons.newRule",actionView:"PurchaseOrders.purchaseOrdersTable.actionView",appliesToAll:"PurchaseOrders.purchaseOrdersTable.appliesToAll",emptyTitle:"PurchaseOrders.approvalRulesList.emptyTitle",ariaLabelEditRule:"PurchaseOrders.approvalRulesList.ariaLabel.editRule",ariaLabelDeleteRule:"PurchaseOrders.approvalRulesList.ariaLabel.deleteRule",ariaLabelViewRule:"PurchaseOrders.approvalRulesList.ariaLabel.viewRule"}),{permissions:P,loadingPermissions:n}=be(),{loading:k,tableConfig:o,paginationConfig:c,totalCount:A,pageSizeConfig:U,handleCreateUrl:x}=Te({routeCreateApprovalRule:u,routeEditApprovalRule:p,routeApprovalRuleDetails:h,setColumns:m,setRowsData:w,permissions:P,initialPageSize:b,loadingPermissions:n,t:i}),{isAdmin:T,permissions:{manageApprovalRules:O}}=P,R=T||O?r(pe,{variant:"primary",onClick:()=>{window.location.href=x("","new")},"data-testid":"add-new-rule-button",children:i.addNewRule}):null,N=k||n?r(he,{"data-testid":"approval-rules-skeleton",children:r(me,{variant:"row",size:"small"})}):R;return L("div",{className:le(["purchase-orders",$]),"data-testid":"purchase-orders-container",children:[y?r(de,{headerText:i.headerText}):null,r(ie,{totalCount:A,columns:o.columns,rows:o.rows,expandedRows:o.expandedRows,paginationConfig:c,loading:k||n,skeletonRowCount:l,pageSizeConfig:U,emptyTitle:i.emptyTitle,withWrapper:S,footer:N})]})};export{Ue as ApprovalRulesList,Ue as default};
3
+ import{jsxs as L,jsx as r}from"@dropins/tools/preact-jsx-runtime.js";import{classes as le}from"@dropins/tools/lib.js";import{i as ne,g as oe,P as ie,d as ce}from"../chunks/pageSize.config.js";import{P as de}from"../chunks/PurchaseOrdersHeader.js";import"../chunks/PurchaseOrderHistoryLogContent.js";import{ActionButton as V,Tag as ue,Button as pe,Skeleton as he,SkeletonRow as me}from"@dropins/tools/components.js";import{useState as f,useEffect as W,useCallback as v,useMemo as X}from"@dropins/tools/preact-hooks.js";import{events as Y}from"@dropins/tools/event-bus.js";import{u as be}from"../chunks/useCustomerRolePermissions.js";import{g as ge,d as fe}from"../chunks/getPurchaseOrderApprovalRules.js";import{Text as w,useText as we}from"@dropins/tools/i18n.js";import"@dropins/tools/preact.js";import"../chunks/permissions.js";import"../chunks/fetch-graphql.js";import"@dropins/tools/fetch-graphql.js";import"../chunks/transform-purchase-order-approval-rule.js";const ee=[{key:"ruleName",label:"Rule Name"},{key:"status",label:"Status"},{key:"createdBy",label:"Created By"},{key:"action",label:"Actions"}],Pe=20,Te=({routeApprovalRuleDetails:u,routeCreateApprovalRule:p,routeEditApprovalRule:h,setColumns:m,setRowsData:P,initialPageSize:$,permissions:y,loadingPermissions:S,t:l})=>{const[b,o]=f([]),[T,n]=f(!0),[k,i]=f(!0),[c,A]=f($),[U,x]=f({currentPage:1,totalPages:1,totalCount:0}),[O,g]=f(new Set);W(()=>{const s=Y.on("purchase-order/refresh",()=>{n(!0)},{eager:!0});return()=>{s==null||s.off()}},[]);const{currentPage:R,totalPages:N,totalCount:re}=U,I=v(s=>{x(t=>({...t,currentPage:s})),g(new Set),n(!0)},[]),se=v(s=>{const t=s.target.value;A(e=>e.map(a=>({...a,selected:a.value===t}))),I(1),g(new Set),n(!0)},[I]),H=v(s=>{g(t=>{const e=new Set(t);return e.has(s)?e.delete(s):e.add(s),e})},[]);W(()=>{var e;if(!T||S)return;i(!0);const s=(e=c==null?void 0:c.find(a=>a.selected))==null?void 0:e.value,t=parseInt(s??Pe.toString(),10);ge(R,t).then(a=>{var z,E;const j=(a==null?void 0:a.items)??[],B=(z=a==null?void 0:a.pageInfo)==null?void 0:z.currentPage,C=(E=a==null?void 0:a.pageInfo)==null?void 0:E.totalPages,D=a==null?void 0:a.totalCount;x({currentPage:B>C?C||1:B,totalPages:C,totalCount:D}),o(j)}).catch(a=>{console.error("Error fetching approval rules:",a),o([])}).finally(()=>{i(!1),n(!1)})},[T,R,c,N,S]);const _=v((s,t)=>{let e="";switch(t){case"new":{e=p==null?void 0:p(s);break}case"edit":{e=h==null?void 0:h(s);break}case"view":{e=u==null?void 0:u(s);break}}return ne(e??"")?e:"#"},[p,h,u]),ae=X(()=>(m==null?void 0:m(ee))??ee.map(s=>({...s,label:l[s.key]||s.label})),[m,l]),M=v((s,t)=>{s.preventDefault(),i(!0),fe(t).then(()=>{Y.emit("purchase-order/refresh",!0)}).finally(()=>{g(new Set)})},[]),te=X(()=>{const s=b==null?void 0:b.map((e,a)=>{var G,Z,q,J,K,Q;const{isAdmin:j,permissions:{manageApprovalRules:B}}=y,C=O.has(a),D=j||B,z=r(V,{onClick:()=>H(a),children:r(w,{id:`PurchaseOrders.purchaseOrdersTable.buttons.${C?"expandedHidden":"expandedShow"}`})}),E=L("div",{className:"b2b-purchase-order-purchase-orders-table__row-details",children:[L("div",{className:"b2b-purchase-order-purchase-orders-table__row-details-content",children:[L("p",{children:[r("span",{children:r(w,{id:"PurchaseOrders.purchaseOrdersTable.expandedRowLabels.ruleType"})})," ",r(w,{id:`PurchaseOrders.purchaseOrdersTable.ruleTypes.${(Z=(G=e.condition)==null?void 0:G.attribute)==null?void 0:Z.toLocaleLowerCase()}`})]}),r("p",{children:r("span",{children:r(w,{id:"PurchaseOrders.purchaseOrdersTable.expandedRowLabels.appliesTo"})})}),r("ul",{children:((q=e==null?void 0:e.appliesToRoles)==null?void 0:q.length)<=0?r("li",{children:l.appliesToAll}):(J=e==null?void 0:e.appliesToRoles)==null?void 0:J.map((d,F)=>r("li",{children:d.name},F))}),r("p",{children:r("span",{children:r(w,{id:"PurchaseOrders.purchaseOrdersTable.expandedRowLabels.approver"})})}),r("ul",{children:(K=e==null?void 0:e.approverRoles)==null?void 0:K.map((d,F)=>r("li",{children:d==null?void 0:d.name},F))})]}),D?r("div",{className:"b2b-purchase-order-purchase-orders-table__row-details-action",children:L("div",{className:"b2b-purchase-order-purchase-orders-table__row-details-action-inner-wrapper",children:[r(V,{onClick:()=>{window.location.href=_(e.uid,"edit")},"aria-label":l.ariaLabelEditRule.replace("{{ruleName}}",e.name),"data-testid":`edit-approval-rule-${e.uid}`,children:l.actionEdit}),r(V,{onClick:d=>M(d,e.uid),"aria-label":l.ariaLabelDeleteRule.replace("{{ruleName}}",e.name),"data-testid":`delete-approval-rule-${e.uid}`,children:l.actionDelete})]})}):r("div",{className:"b2b-purchase-order-purchase-orders-table__row-details-action",children:r(V,{onClick:()=>{window.location.href=_(e.uid,"view")},"aria-label":l.ariaLabelViewRule.replace("{{ruleName}}",e.name),"data-testid":`view-approval-rule-${e.uid}`,children:l.actionView})})]});return{ruleName:e.name,status:r(ue,{className:`b2b-purchase-order-purchase-orders-table__status b2b-purchase-order-purchase-orders-table__status--${oe(e.status)}`,children:r(w,{id:`PurchaseOrders.purchaseOrdersTable.rulesStatus.${(Q=e.status)==null?void 0:Q.toLocaleLowerCase()}`})}),createdBy:e.createdBy,action:z,_rowDetails:E}});let t=s;if(P){const e=P(s);e!==void 0&&Array.isArray(e)&&(t=e)}return t},[b,O,y,P,l,_,M,H]);return{tableConfig:{columns:ae,rows:te,expandedRows:O},paginationConfig:{currentPage:R,totalPages:N,handlePageChange:I},pageSizeConfig:{pageSizeOptionsList:c,onChange:se},totalCount:re,loading:k,handleCreateUrl:_}},Ae=({routeCreateApprovalRule:u,routeEditApprovalRule:p,routeApprovalRuleDetails:h,setColumns:m,setRowsData:P,className:$="",withHeader:y=!0,withWrapper:S=!0,skeletonRowCount:l=5,initialPageSize:b=ce})=>{const o=we({headerText:"PurchaseOrders.approvalRulesList.containerTitle",ruleName:"PurchaseOrders.purchaseOrdersTable.tableColumns.ruleName",ruleType:"PurchaseOrders.purchaseOrdersTable.tableColumns.ruleType",appliesTo:"PurchaseOrders.purchaseOrdersTable.tableColumns.appliesTo",approver:"PurchaseOrders.purchaseOrdersTable.tableColumns.approver",createdBy:"PurchaseOrders.purchaseOrdersTable.tableColumns.createdBy",status:"PurchaseOrders.purchaseOrdersTable.tableColumns.status",actionEdit:"PurchaseOrders.purchaseOrdersTable.actionEdit",actionDelete:"PurchaseOrders.purchaseOrdersTable.actionDelete",addNewRule:"PurchaseOrders.approvalRulesList.buttons.newRule",actionView:"PurchaseOrders.purchaseOrdersTable.actionView",appliesToAll:"PurchaseOrders.purchaseOrdersTable.appliesToAll",emptyTitle:"PurchaseOrders.approvalRulesList.emptyTitle",ariaLabelEditRule:"PurchaseOrders.approvalRulesList.ariaLabel.editRule",ariaLabelDeleteRule:"PurchaseOrders.approvalRulesList.ariaLabel.deleteRule",ariaLabelViewRule:"PurchaseOrders.approvalRulesList.ariaLabel.viewRule"}),{permissions:T,loadingPermissions:n}=be(),{loading:k,tableConfig:i,paginationConfig:c,totalCount:A,pageSizeConfig:U,handleCreateUrl:x}=Te({routeCreateApprovalRule:u,routeEditApprovalRule:p,routeApprovalRuleDetails:h,setColumns:m,setRowsData:P,permissions:T,initialPageSize:b,loadingPermissions:n,t:o}),{isAdmin:O,permissions:{manageApprovalRules:g}}=T,R=O||g?r(pe,{variant:"primary",onClick:()=>{window.location.href=x("","new")},"data-testid":"add-new-rule-button",children:o.addNewRule}):null,N=k||n?r(he,{"data-testid":"approval-rules-skeleton",children:r(me,{variant:"row",size:"small"})}):R;return L("div",{className:le(["purchase-orders",$]),"data-testid":"purchase-orders-container",children:[y?r(de,{headerText:o.headerText}):null,r(ie,{totalCount:A,columns:i.columns,rows:i.rows,expandedRows:i.expandedRows,paginationConfig:c,loading:k||n,skeletonRowCount:l,pageSizeConfig:U,emptyTitle:o.emptyTitle,withWrapper:S,footer:N})]})};export{Ae as ApprovalRulesList,Ae as default};
4
4
  //# sourceMappingURL=ApprovalRulesList.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ApprovalRulesList.js","sources":["/@dropins/storefront-purchase-order/src/configs/purchaseOrderApprovalRules.config.ts","/@dropins/storefront-purchase-order/src/hooks/useApprovalRulesList.tsx","/@dropins/storefront-purchase-order/src/containers/ApprovalRulesList/ApprovalRulesList.tsx"],"sourcesContent":["/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { Column } from '@/b2b-purchase-order/types/components';\n\nexport const defaultApprovalRulesColumns: Column[] = [\n { key: 'ruleName', label: 'Rule Name' },\n { key: 'status', label: 'Status' },\n {\n key: 'createdBy',\n label: 'Created By',\n },\n { key: 'action', label: 'Actions' },\n];\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport {\n UseApprovalRulesList,\n UseApprovalRulesListReturn,\n} from '@/b2b-purchase-order/types/hooks';\nimport { useCallback, useEffect, useMemo, useState } from 'preact/hooks';\nimport { events } from '@adobe-commerce/event-bus';\nimport { getStatusVariant, isValidUrl } from '@/b2b-purchase-order/lib';\nimport { Text } from '@adobe-commerce/elsie/i18n';\nimport { defaultApprovalRulesColumns } from '@/b2b-purchase-order/configs';\nimport {\n deletePurchaseOrderApprovalRule,\n getPurchaseOrderApprovalRules,\n} from '@/b2b-purchase-order/api';\nimport { PurchaseOrderApprovalRuleModel } from '@/b2b-purchase-order/data/models';\nimport { ActionButton, Tag } from '@adobe-commerce/elsie/components';\n\nconst DEFAULT_PAGE_SIZE = 20;\n\nexport const useApprovalRulesList = ({\n routeApprovalRuleDetails,\n routeCreateApprovalRule,\n routeEditApprovalRule,\n setColumns,\n setRowsData,\n initialPageSize,\n permissions,\n loadingPermissions,\n t,\n}: UseApprovalRulesList): UseApprovalRulesListReturn => {\n const [approvalRules, setApprovalRules] = useState<\n PurchaseOrderApprovalRuleModel[]\n >([]);\n const [shouldRefetch, setShouldRefetch] = useState(true);\n const [loading, setLoading] = useState<boolean>(true);\n const [pageSizeOptionsList, setPageSizeOptionsList] =\n useState(initialPageSize);\n const [pagination, setPagination] = useState({\n currentPage: 1,\n totalPages: 1,\n totalCount: 0,\n });\n const [expandedRowIndices, setExpandedRowIndices] = useState<Set<number>>(\n new Set()\n );\n\n // Refetch data on the purchase-order/refresh event\n useEffect(() => {\n const event = events.on(\n 'purchase-order/refresh',\n () => {\n setShouldRefetch(true);\n },\n { eager: true }\n );\n\n return () => {\n event?.off();\n };\n }, []);\n\n // Derive pagination values\n const { currentPage, totalPages, totalCount } = pagination;\n\n const handlePageChange = useCallback((page: number) => {\n setPagination((prev) => {\n return { ...prev, currentPage: page };\n });\n\n setExpandedRowIndices(new Set());\n setShouldRefetch(true);\n }, []);\n\n const handleChangePageSize = useCallback(\n (event: Event) => {\n const size = (event.target as HTMLSelectElement).value;\n\n setPageSizeOptionsList((prev) => {\n return prev.map((option) => ({\n ...option,\n selected: option.value === size,\n }));\n });\n\n // Reset the current page to 1 on page size change\n handlePageChange(1);\n\n setExpandedRowIndices(new Set());\n setShouldRefetch(true);\n },\n [handlePageChange]\n );\n\n const toggleExpandedRow = useCallback((rowIndex: number) => {\n setExpandedRowIndices((prev) => {\n const newSet = new Set(prev);\n if (newSet.has(rowIndex)) {\n newSet.delete(rowIndex);\n } else {\n newSet.add(rowIndex);\n }\n return newSet;\n });\n }, []);\n\n useEffect(() => {\n // Re-fetch controlled by shouldRefetch flag\n if (!shouldRefetch) {\n return;\n }\n\n // Don't fetch approval rules until permissions are loaded\n if (loadingPermissions) {\n return;\n }\n\n setLoading(true);\n const pageSize = pageSizeOptionsList?.find(\n (option) => option.selected\n )?.value;\n const selectedPageSize = parseInt(\n pageSize ?? DEFAULT_PAGE_SIZE.toString(),\n 10\n );\n\n getPurchaseOrderApprovalRules(currentPage, selectedPageSize)\n .then((data) => {\n const responseApprovalRules = data?.items ?? [];\n const responseCurrentPage = data?.pageInfo?.currentPage;\n const responseTotalPages = data?.pageInfo?.totalPages;\n const responseTotalCount = data?.totalCount;\n\n setPagination({\n currentPage:\n responseCurrentPage > responseTotalPages\n ? responseTotalPages || 1\n : responseCurrentPage,\n totalPages: responseTotalPages,\n totalCount: responseTotalCount,\n });\n setApprovalRules(responseApprovalRules);\n })\n .catch((error) => {\n console.error('Error fetching approval rules:', error);\n setApprovalRules([]);\n })\n .finally(() => {\n setLoading(false);\n setShouldRefetch(false);\n });\n }, [\n shouldRefetch,\n currentPage,\n pageSizeOptionsList,\n totalPages,\n loadingPermissions,\n ]);\n\n const handleCreateUrl = useCallback(\n (id: string, type: 'edit' | 'new' | 'view'): string => {\n let url = '';\n\n switch (type) {\n case 'new': {\n url = routeCreateApprovalRule?.(id) as string;\n break;\n }\n case 'edit': {\n url = routeEditApprovalRule?.(id) as string;\n break;\n }\n case 'view': {\n url = routeApprovalRuleDetails?.(id) as string;\n break;\n }\n }\n\n if (!isValidUrl(url ?? '')) return '#';\n\n return url;\n },\n [routeCreateApprovalRule, routeEditApprovalRule, routeApprovalRuleDetails]\n );\n\n const columns = useMemo(() => {\n return (\n setColumns?.(defaultApprovalRulesColumns) ??\n defaultApprovalRulesColumns.map((col) => ({\n ...col,\n label: t[col.key as keyof typeof t] || col.label,\n }))\n );\n }, [setColumns, t]);\n\n const handleDeleteRule = useCallback((e: Event, id: string) => {\n e.preventDefault();\n setLoading(true);\n deletePurchaseOrderApprovalRule(id)\n .then(() => {\n events.emit('purchase-order/refresh', true);\n })\n .finally(() => {\n setLoading(false);\n });\n }, []);\n\n const rows = useMemo(() => {\n const modifiedApprovalRules = approvalRules?.map((ar, rowIndex) => {\n const {\n isAdmin,\n permissions: { manageApprovalRules },\n } = permissions;\n\n const isExpanded = expandedRowIndices.has(rowIndex);\n const canManage = isAdmin || manageApprovalRules;\n\n // Main row action\n const action = (\n <ActionButton onClick={() => toggleExpandedRow(rowIndex)}>\n <Text\n id={`PurchaseOrders.purchaseOrdersTable.buttons.${\n isExpanded ? 'expandedHidden' : 'expandedShow'\n }`}\n />\n </ActionButton>\n );\n\n // Expanded row details\n const _rowDetails = (\n <div className=\"b2b-purchase-order-purchase-orders-table__row-details\">\n <div className=\"b2b-purchase-order-purchase-orders-table__row-details-content\">\n <p>\n <span>\n <Text id=\"PurchaseOrders.purchaseOrdersTable.expandedRowLabels.ruleType\" />\n </span>{' '}\n <Text\n id={`PurchaseOrders.purchaseOrdersTable.ruleTypes.${ar.condition?.attribute?.toLocaleLowerCase()}`}\n />\n </p>\n <p>\n <span>\n <Text id=\"PurchaseOrders.purchaseOrdersTable.expandedRowLabels.appliesTo\" />\n </span>\n </p>\n <ul>\n {ar?.appliesToRoles?.length <= 0 ? (\n <li>{t.appliesToAll}</li>\n ) : (\n ar?.appliesToRoles?.map((role, idx) => (\n <li key={idx}>{role.name}</li>\n ))\n )}\n </ul>\n <p>\n <span>\n <Text id=\"PurchaseOrders.purchaseOrdersTable.expandedRowLabels.approver\" />\n </span>\n </p>\n <ul>\n {ar?.approverRoles?.map((role, idx) => (\n <li key={idx}>{role?.name}</li>\n ))}\n </ul>\n </div>\n {canManage ? (\n <div className=\"b2b-purchase-order-purchase-orders-table__row-details-action\">\n <div className=\"b2b-purchase-order-purchase-orders-table__row-details-action-inner-wrapper\">\n <ActionButton\n onClick={() => {\n window.location.href = handleCreateUrl(ar.uid, 'edit');\n }}\n aria-label={t.ariaLabelEditRule.replace(\n '{{ruleName}}',\n ar.name\n )}\n data-testid={`edit-approval-rule-${ar.uid}`}\n >\n {t.actionEdit}\n </ActionButton>\n <ActionButton\n onClick={(e) => handleDeleteRule(e, ar.uid)}\n aria-label={t.ariaLabelDeleteRule.replace(\n '{{ruleName}}',\n ar.name\n )}\n data-testid={`delete-approval-rule-${ar.uid}`}\n >\n {t.actionDelete}\n </ActionButton>\n </div>\n </div>\n ) : (\n <div className=\"b2b-purchase-order-purchase-orders-table__row-details-action\">\n <ActionButton\n onClick={() => {\n window.location.href = handleCreateUrl(ar.uid, 'view');\n }}\n aria-label={t.ariaLabelViewRule.replace(\n '{{ruleName}}',\n ar.name\n )}\n data-testid={`view-approval-rule-${ar.uid}`}\n >\n {t.actionView}\n </ActionButton>\n </div>\n )}\n </div>\n );\n\n return {\n ruleName: ar.name,\n status: (\n <Tag\n className={`b2b-purchase-order-purchase-orders-table__status b2b-purchase-order-purchase-orders-table__status--${getStatusVariant(\n ar.status\n )}`}\n >\n <Text\n id={`PurchaseOrders.purchaseOrdersTable.rulesStatus.${ar.status?.toLocaleLowerCase()}`}\n />\n </Tag>\n ),\n createdBy: ar.createdBy,\n action,\n _rowDetails,\n };\n });\n\n let finalRows = modifiedApprovalRules;\n\n if (setRowsData) {\n const customRows = setRowsData(modifiedApprovalRules);\n // If setRowsData returns something, use it, otherwise keep original data\n if (customRows !== undefined && Array.isArray(customRows)) {\n finalRows = customRows as typeof modifiedApprovalRules;\n }\n }\n\n return finalRows;\n }, [\n approvalRules,\n expandedRowIndices,\n permissions,\n setRowsData,\n t,\n handleCreateUrl,\n handleDeleteRule,\n toggleExpandedRow,\n ]);\n\n return {\n tableConfig: {\n columns,\n rows,\n expandedRows: expandedRowIndices,\n },\n paginationConfig: {\n currentPage,\n totalPages,\n handlePageChange,\n },\n pageSizeConfig: {\n pageSizeOptionsList,\n onChange: handleChangePageSize,\n },\n totalCount,\n loading,\n handleCreateUrl,\n };\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { classes, Container } from '@adobe-commerce/elsie/lib';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport {\n PurchaseOrdersHeader,\n PurchaseOrdersTable,\n} from '@/b2b-purchase-order/components';\nimport { ApprovalRulesListProps } from '@/b2b-purchase-order/types/containers';\nimport {\n useApprovalRulesList,\n useCustomerRolePermissions,\n} from '@/b2b-purchase-order/hooks';\nimport {\n Button,\n Skeleton,\n SkeletonRow,\n} from '@adobe-commerce/elsie/components';\nimport { defaultPageSizeConfig } from '@/b2b-purchase-order/configs';\n\nexport const ApprovalRulesList: Container<ApprovalRulesListProps> = ({\n routeCreateApprovalRule,\n routeEditApprovalRule,\n routeApprovalRuleDetails,\n setColumns,\n setRowsData,\n className = '',\n withHeader = true,\n withWrapper = true,\n skeletonRowCount = 5,\n initialPageSize = defaultPageSizeConfig,\n}) => {\n const t = useText({\n headerText: 'PurchaseOrders.approvalRulesList.containerTitle',\n ruleName: 'PurchaseOrders.purchaseOrdersTable.tableColumns.ruleName',\n ruleType: 'PurchaseOrders.purchaseOrdersTable.tableColumns.ruleType',\n appliesTo: 'PurchaseOrders.purchaseOrdersTable.tableColumns.appliesTo',\n approver: 'PurchaseOrders.purchaseOrdersTable.tableColumns.approver',\n createdBy: 'PurchaseOrders.purchaseOrdersTable.tableColumns.createdBy',\n status: 'PurchaseOrders.purchaseOrdersTable.tableColumns.status',\n actionEdit: 'PurchaseOrders.purchaseOrdersTable.actionEdit',\n actionDelete: 'PurchaseOrders.purchaseOrdersTable.actionDelete',\n addNewRule: 'PurchaseOrders.approvalRulesList.buttons.newRule',\n actionView: 'PurchaseOrders.purchaseOrdersTable.actionView',\n appliesToAll: 'PurchaseOrders.purchaseOrdersTable.appliesToAll',\n emptyTitle: 'PurchaseOrders.approvalRulesList.emptyTitle',\n ariaLabelEditRule: 'PurchaseOrders.approvalRulesList.ariaLabel.editRule',\n ariaLabelDeleteRule:\n 'PurchaseOrders.approvalRulesList.ariaLabel.deleteRule',\n ariaLabelViewRule: 'PurchaseOrders.approvalRulesList.ariaLabel.viewRule',\n });\n\n const { permissions, loadingPermissions } = useCustomerRolePermissions();\n const {\n loading,\n tableConfig,\n paginationConfig,\n totalCount,\n pageSizeConfig,\n handleCreateUrl,\n } = useApprovalRulesList({\n routeCreateApprovalRule,\n routeEditApprovalRule,\n routeApprovalRuleDetails,\n setColumns,\n setRowsData,\n permissions,\n initialPageSize,\n loadingPermissions,\n t,\n });\n\n const {\n isAdmin,\n permissions: { manageApprovalRules },\n } = permissions;\n\n const renderFooterButton =\n isAdmin || manageApprovalRules ? (\n <Button\n variant=\"primary\"\n onClick={() => {\n window.location.href = handleCreateUrl('', 'new');\n }}\n data-testid=\"add-new-rule-button\"\n >\n {t.addNewRule}\n </Button>\n ) : null;\n\n const footerContent =\n loading || loadingPermissions ? (\n <Skeleton data-testid=\"approval-rules-skeleton\">\n <SkeletonRow variant=\"row\" size=\"small\" />\n </Skeleton>\n ) : (\n renderFooterButton\n );\n\n return (\n <div\n className={classes(['purchase-orders', className])}\n data-testid=\"purchase-orders-container\"\n >\n {withHeader ? <PurchaseOrdersHeader headerText={t.headerText} /> : null}\n <PurchaseOrdersTable\n totalCount={totalCount}\n columns={tableConfig.columns}\n rows={tableConfig.rows}\n expandedRows={tableConfig.expandedRows}\n paginationConfig={paginationConfig}\n loading={loading || loadingPermissions}\n skeletonRowCount={skeletonRowCount}\n pageSizeConfig={pageSizeConfig}\n emptyTitle={t.emptyTitle}\n withWrapper={withWrapper}\n footer={footerContent}\n />\n </div>\n );\n};\n"],"names":["defaultApprovalRulesColumns","DEFAULT_PAGE_SIZE","useApprovalRulesList","routeApprovalRuleDetails","routeCreateApprovalRule","routeEditApprovalRule","setColumns","setRowsData","initialPageSize","permissions","loadingPermissions","t","approvalRules","setApprovalRules","useState","shouldRefetch","setShouldRefetch","loading","setLoading","pageSizeOptionsList","setPageSizeOptionsList","pagination","setPagination","expandedRowIndices","setExpandedRowIndices","useEffect","event","events","currentPage","totalPages","totalCount","handlePageChange","useCallback","page","prev","handleChangePageSize","size","option","toggleExpandedRow","rowIndex","newSet","pageSize","_a","selectedPageSize","getPurchaseOrderApprovalRules","data","responseApprovalRules","responseCurrentPage","responseTotalPages","_b","responseTotalCount","error","handleCreateUrl","id","type","url","isValidUrl","columns","useMemo","col","handleDeleteRule","e","deletePurchaseOrderApprovalRule","rows","modifiedApprovalRules","ar","isAdmin","manageApprovalRules","isExpanded","canManage","action","jsx","ActionButton","Text","_rowDetails","jsxs","_c","_d","role","idx","_e","Tag","getStatusVariant","_f","finalRows","customRows","ApprovalRulesList","className","withHeader","withWrapper","skeletonRowCount","defaultPageSizeConfig","useText","useCustomerRolePermissions","tableConfig","paginationConfig","pageSizeConfig","renderFooterButton","Button","footerContent","Skeleton","SkeletonRow","classes","PurchaseOrdersHeader","PurchaseOrdersTable"],"mappings":"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"}
1
+ {"version":3,"file":"ApprovalRulesList.js","sources":["/@dropins/storefront-purchase-order/src/configs/purchaseOrderApprovalRules.config.ts","/@dropins/storefront-purchase-order/src/hooks/useApprovalRulesList.tsx","/@dropins/storefront-purchase-order/src/containers/ApprovalRulesList/ApprovalRulesList.tsx"],"sourcesContent":["/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { Column } from '@/b2b-purchase-order/types/components';\n\nexport const defaultApprovalRulesColumns: Column[] = [\n { key: 'ruleName', label: 'Rule Name' },\n { key: 'status', label: 'Status' },\n {\n key: 'createdBy',\n label: 'Created By',\n },\n { key: 'action', label: 'Actions' },\n];\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport {\n UseApprovalRulesList,\n UseApprovalRulesListReturn,\n} from '@/b2b-purchase-order/types/hooks';\nimport { useCallback, useEffect, useMemo, useState } from 'preact/hooks';\nimport { events } from '@adobe-commerce/event-bus';\nimport { getStatusVariant, isValidUrl } from '@/b2b-purchase-order/lib';\nimport { Text } from '@adobe-commerce/elsie/i18n';\nimport { defaultApprovalRulesColumns } from '@/b2b-purchase-order/configs';\nimport {\n deletePurchaseOrderApprovalRule,\n getPurchaseOrderApprovalRules,\n} from '@/b2b-purchase-order/api';\nimport { PurchaseOrderApprovalRuleModel } from '@/b2b-purchase-order/data/models';\nimport { ActionButton, Tag } from '@adobe-commerce/elsie/components';\n\nconst DEFAULT_PAGE_SIZE = 20;\n\nexport const useApprovalRulesList = ({\n routeApprovalRuleDetails,\n routeCreateApprovalRule,\n routeEditApprovalRule,\n setColumns,\n setRowsData,\n initialPageSize,\n permissions,\n loadingPermissions,\n t,\n}: UseApprovalRulesList): UseApprovalRulesListReturn => {\n const [approvalRules, setApprovalRules] = useState<\n PurchaseOrderApprovalRuleModel[]\n >([]);\n const [shouldRefetch, setShouldRefetch] = useState(true);\n const [loading, setLoading] = useState<boolean>(true);\n const [pageSizeOptionsList, setPageSizeOptionsList] =\n useState(initialPageSize);\n const [pagination, setPagination] = useState({\n currentPage: 1,\n totalPages: 1,\n totalCount: 0,\n });\n const [expandedRowIndices, setExpandedRowIndices] = useState<Set<number>>(\n new Set()\n );\n\n // Refetch data on the purchase-order/refresh event\n useEffect(() => {\n const event = events.on(\n 'purchase-order/refresh',\n () => {\n setShouldRefetch(true);\n },\n { eager: true }\n );\n\n return () => {\n event?.off();\n };\n }, []);\n\n // Derive pagination values\n const { currentPage, totalPages, totalCount } = pagination;\n\n const handlePageChange = useCallback((page: number) => {\n setPagination((prev) => {\n return { ...prev, currentPage: page };\n });\n\n setExpandedRowIndices(new Set());\n setShouldRefetch(true);\n }, []);\n\n const handleChangePageSize = useCallback(\n (event: Event) => {\n const size = (event.target as HTMLSelectElement).value;\n\n setPageSizeOptionsList((prev) => {\n return prev.map((option) => ({\n ...option,\n selected: option.value === size,\n }));\n });\n\n // Reset the current page to 1 on page size change\n handlePageChange(1);\n\n setExpandedRowIndices(new Set());\n setShouldRefetch(true);\n },\n [handlePageChange]\n );\n\n const toggleExpandedRow = useCallback((rowIndex: number) => {\n setExpandedRowIndices((prev) => {\n const newSet = new Set(prev);\n if (newSet.has(rowIndex)) {\n newSet.delete(rowIndex);\n } else {\n newSet.add(rowIndex);\n }\n return newSet;\n });\n }, []);\n\n useEffect(() => {\n // Re-fetch controlled by shouldRefetch flag\n if (!shouldRefetch) {\n return;\n }\n\n // Don't fetch approval rules until permissions are loaded\n if (loadingPermissions) {\n return;\n }\n\n setLoading(true);\n const pageSize = pageSizeOptionsList?.find(\n (option) => option.selected\n )?.value;\n const selectedPageSize = parseInt(\n pageSize ?? DEFAULT_PAGE_SIZE.toString(),\n 10\n );\n\n getPurchaseOrderApprovalRules(currentPage, selectedPageSize)\n .then((data) => {\n const responseApprovalRules = data?.items ?? [];\n const responseCurrentPage = data?.pageInfo?.currentPage;\n const responseTotalPages = data?.pageInfo?.totalPages;\n const responseTotalCount = data?.totalCount;\n\n setPagination({\n currentPage:\n responseCurrentPage > responseTotalPages\n ? responseTotalPages || 1\n : responseCurrentPage,\n totalPages: responseTotalPages,\n totalCount: responseTotalCount,\n });\n setApprovalRules(responseApprovalRules);\n })\n .catch((error) => {\n console.error('Error fetching approval rules:', error);\n setApprovalRules([]);\n })\n .finally(() => {\n setLoading(false);\n setShouldRefetch(false);\n });\n }, [\n shouldRefetch,\n currentPage,\n pageSizeOptionsList,\n totalPages,\n loadingPermissions,\n ]);\n\n const handleCreateUrl = useCallback(\n (id: string, type: 'edit' | 'new' | 'view'): string => {\n let url = '';\n\n switch (type) {\n case 'new': {\n url = routeCreateApprovalRule?.(id) as string;\n break;\n }\n case 'edit': {\n url = routeEditApprovalRule?.(id) as string;\n break;\n }\n case 'view': {\n url = routeApprovalRuleDetails?.(id) as string;\n break;\n }\n }\n\n if (!isValidUrl(url ?? '')) return '#';\n\n return url;\n },\n [routeCreateApprovalRule, routeEditApprovalRule, routeApprovalRuleDetails]\n );\n\n const columns = useMemo(() => {\n return (\n setColumns?.(defaultApprovalRulesColumns) ??\n defaultApprovalRulesColumns.map((col) => ({\n ...col,\n label: t[col.key as keyof typeof t] || col.label,\n }))\n );\n }, [setColumns, t]);\n\n const handleDeleteRule = useCallback((e: Event, id: string) => {\n e.preventDefault();\n setLoading(true);\n deletePurchaseOrderApprovalRule(id)\n .then(() => {\n events.emit('purchase-order/refresh', true);\n })\n .finally(() => {\n setExpandedRowIndices(new Set());\n });\n }, []);\n\n const rows = useMemo(() => {\n const modifiedApprovalRules = approvalRules?.map((ar, rowIndex) => {\n const {\n isAdmin,\n permissions: { manageApprovalRules },\n } = permissions;\n\n const isExpanded = expandedRowIndices.has(rowIndex);\n const canManage = isAdmin || manageApprovalRules;\n\n // Main row action\n const action = (\n <ActionButton onClick={() => toggleExpandedRow(rowIndex)}>\n <Text\n id={`PurchaseOrders.purchaseOrdersTable.buttons.${\n isExpanded ? 'expandedHidden' : 'expandedShow'\n }`}\n />\n </ActionButton>\n );\n\n // Expanded row details\n const _rowDetails = (\n <div className=\"b2b-purchase-order-purchase-orders-table__row-details\">\n <div className=\"b2b-purchase-order-purchase-orders-table__row-details-content\">\n <p>\n <span>\n <Text id=\"PurchaseOrders.purchaseOrdersTable.expandedRowLabels.ruleType\" />\n </span>{' '}\n <Text\n id={`PurchaseOrders.purchaseOrdersTable.ruleTypes.${ar.condition?.attribute?.toLocaleLowerCase()}`}\n />\n </p>\n <p>\n <span>\n <Text id=\"PurchaseOrders.purchaseOrdersTable.expandedRowLabels.appliesTo\" />\n </span>\n </p>\n <ul>\n {ar?.appliesToRoles?.length <= 0 ? (\n <li>{t.appliesToAll}</li>\n ) : (\n ar?.appliesToRoles?.map((role, idx) => (\n <li key={idx}>{role.name}</li>\n ))\n )}\n </ul>\n <p>\n <span>\n <Text id=\"PurchaseOrders.purchaseOrdersTable.expandedRowLabels.approver\" />\n </span>\n </p>\n <ul>\n {ar?.approverRoles?.map((role, idx) => (\n <li key={idx}>{role?.name}</li>\n ))}\n </ul>\n </div>\n {canManage ? (\n <div className=\"b2b-purchase-order-purchase-orders-table__row-details-action\">\n <div className=\"b2b-purchase-order-purchase-orders-table__row-details-action-inner-wrapper\">\n <ActionButton\n onClick={() => {\n window.location.href = handleCreateUrl(ar.uid, 'edit');\n }}\n aria-label={t.ariaLabelEditRule.replace(\n '{{ruleName}}',\n ar.name\n )}\n data-testid={`edit-approval-rule-${ar.uid}`}\n >\n {t.actionEdit}\n </ActionButton>\n <ActionButton\n onClick={(e) => handleDeleteRule(e, ar.uid)}\n aria-label={t.ariaLabelDeleteRule.replace(\n '{{ruleName}}',\n ar.name\n )}\n data-testid={`delete-approval-rule-${ar.uid}`}\n >\n {t.actionDelete}\n </ActionButton>\n </div>\n </div>\n ) : (\n <div className=\"b2b-purchase-order-purchase-orders-table__row-details-action\">\n <ActionButton\n onClick={() => {\n window.location.href = handleCreateUrl(ar.uid, 'view');\n }}\n aria-label={t.ariaLabelViewRule.replace(\n '{{ruleName}}',\n ar.name\n )}\n data-testid={`view-approval-rule-${ar.uid}`}\n >\n {t.actionView}\n </ActionButton>\n </div>\n )}\n </div>\n );\n\n return {\n ruleName: ar.name,\n status: (\n <Tag\n className={`b2b-purchase-order-purchase-orders-table__status b2b-purchase-order-purchase-orders-table__status--${getStatusVariant(\n ar.status\n )}`}\n >\n <Text\n id={`PurchaseOrders.purchaseOrdersTable.rulesStatus.${ar.status?.toLocaleLowerCase()}`}\n />\n </Tag>\n ),\n createdBy: ar.createdBy,\n action,\n _rowDetails,\n };\n });\n\n let finalRows = modifiedApprovalRules;\n\n if (setRowsData) {\n const customRows = setRowsData(modifiedApprovalRules);\n // If setRowsData returns something, use it, otherwise keep original data\n if (customRows !== undefined && Array.isArray(customRows)) {\n finalRows = customRows as typeof modifiedApprovalRules;\n }\n }\n\n return finalRows;\n }, [\n approvalRules,\n expandedRowIndices,\n permissions,\n setRowsData,\n t,\n handleCreateUrl,\n handleDeleteRule,\n toggleExpandedRow,\n ]);\n\n return {\n tableConfig: {\n columns,\n rows,\n expandedRows: expandedRowIndices,\n },\n paginationConfig: {\n currentPage,\n totalPages,\n handlePageChange,\n },\n pageSizeConfig: {\n pageSizeOptionsList,\n onChange: handleChangePageSize,\n },\n totalCount,\n loading,\n handleCreateUrl,\n };\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { classes, Container } from '@adobe-commerce/elsie/lib';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport {\n PurchaseOrdersHeader,\n PurchaseOrdersTable,\n} from '@/b2b-purchase-order/components';\nimport { ApprovalRulesListProps } from '@/b2b-purchase-order/types/containers';\nimport {\n useApprovalRulesList,\n useCustomerRolePermissions,\n} from '@/b2b-purchase-order/hooks';\nimport {\n Button,\n Skeleton,\n SkeletonRow,\n} from '@adobe-commerce/elsie/components';\nimport { defaultPageSizeConfig } from '@/b2b-purchase-order/configs';\n\nexport const ApprovalRulesList: Container<ApprovalRulesListProps> = ({\n routeCreateApprovalRule,\n routeEditApprovalRule,\n routeApprovalRuleDetails,\n setColumns,\n setRowsData,\n className = '',\n withHeader = true,\n withWrapper = true,\n skeletonRowCount = 5,\n initialPageSize = defaultPageSizeConfig,\n}) => {\n const t = useText({\n headerText: 'PurchaseOrders.approvalRulesList.containerTitle',\n ruleName: 'PurchaseOrders.purchaseOrdersTable.tableColumns.ruleName',\n ruleType: 'PurchaseOrders.purchaseOrdersTable.tableColumns.ruleType',\n appliesTo: 'PurchaseOrders.purchaseOrdersTable.tableColumns.appliesTo',\n approver: 'PurchaseOrders.purchaseOrdersTable.tableColumns.approver',\n createdBy: 'PurchaseOrders.purchaseOrdersTable.tableColumns.createdBy',\n status: 'PurchaseOrders.purchaseOrdersTable.tableColumns.status',\n actionEdit: 'PurchaseOrders.purchaseOrdersTable.actionEdit',\n actionDelete: 'PurchaseOrders.purchaseOrdersTable.actionDelete',\n addNewRule: 'PurchaseOrders.approvalRulesList.buttons.newRule',\n actionView: 'PurchaseOrders.purchaseOrdersTable.actionView',\n appliesToAll: 'PurchaseOrders.purchaseOrdersTable.appliesToAll',\n emptyTitle: 'PurchaseOrders.approvalRulesList.emptyTitle',\n ariaLabelEditRule: 'PurchaseOrders.approvalRulesList.ariaLabel.editRule',\n ariaLabelDeleteRule:\n 'PurchaseOrders.approvalRulesList.ariaLabel.deleteRule',\n ariaLabelViewRule: 'PurchaseOrders.approvalRulesList.ariaLabel.viewRule',\n });\n\n const { permissions, loadingPermissions } = useCustomerRolePermissions();\n const {\n loading,\n tableConfig,\n paginationConfig,\n totalCount,\n pageSizeConfig,\n handleCreateUrl,\n } = useApprovalRulesList({\n routeCreateApprovalRule,\n routeEditApprovalRule,\n routeApprovalRuleDetails,\n setColumns,\n setRowsData,\n permissions,\n initialPageSize,\n loadingPermissions,\n t,\n });\n\n const {\n isAdmin,\n permissions: { manageApprovalRules },\n } = permissions;\n\n const renderFooterButton =\n isAdmin || manageApprovalRules ? (\n <Button\n variant=\"primary\"\n onClick={() => {\n window.location.href = handleCreateUrl('', 'new');\n }}\n data-testid=\"add-new-rule-button\"\n >\n {t.addNewRule}\n </Button>\n ) : null;\n\n const footerContent =\n loading || loadingPermissions ? (\n <Skeleton data-testid=\"approval-rules-skeleton\">\n <SkeletonRow variant=\"row\" size=\"small\" />\n </Skeleton>\n ) : (\n renderFooterButton\n );\n\n return (\n <div\n className={classes(['purchase-orders', className])}\n data-testid=\"purchase-orders-container\"\n >\n {withHeader ? <PurchaseOrdersHeader headerText={t.headerText} /> : null}\n <PurchaseOrdersTable\n totalCount={totalCount}\n columns={tableConfig.columns}\n rows={tableConfig.rows}\n expandedRows={tableConfig.expandedRows}\n paginationConfig={paginationConfig}\n loading={loading || loadingPermissions}\n skeletonRowCount={skeletonRowCount}\n pageSizeConfig={pageSizeConfig}\n emptyTitle={t.emptyTitle}\n withWrapper={withWrapper}\n footer={footerContent}\n />\n </div>\n );\n};\n"],"names":["defaultApprovalRulesColumns","DEFAULT_PAGE_SIZE","useApprovalRulesList","routeApprovalRuleDetails","routeCreateApprovalRule","routeEditApprovalRule","setColumns","setRowsData","initialPageSize","permissions","loadingPermissions","t","approvalRules","setApprovalRules","useState","shouldRefetch","setShouldRefetch","loading","setLoading","pageSizeOptionsList","setPageSizeOptionsList","pagination","setPagination","expandedRowIndices","setExpandedRowIndices","useEffect","event","events","currentPage","totalPages","totalCount","handlePageChange","useCallback","page","prev","handleChangePageSize","size","option","toggleExpandedRow","rowIndex","newSet","pageSize","_a","selectedPageSize","getPurchaseOrderApprovalRules","data","responseApprovalRules","responseCurrentPage","responseTotalPages","_b","responseTotalCount","error","handleCreateUrl","id","type","url","isValidUrl","columns","useMemo","col","handleDeleteRule","e","deletePurchaseOrderApprovalRule","rows","modifiedApprovalRules","ar","isAdmin","manageApprovalRules","isExpanded","canManage","action","jsx","ActionButton","Text","_rowDetails","jsxs","_c","_d","role","idx","_e","Tag","getStatusVariant","_f","finalRows","customRows","ApprovalRulesList","className","withHeader","withWrapper","skeletonRowCount","defaultPageSizeConfig","useText","useCustomerRolePermissions","tableConfig","paginationConfig","pageSizeConfig","renderFooterButton","Button","footerContent","Skeleton","SkeletonRow","classes","PurchaseOrdersHeader","PurchaseOrdersTable"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  /*! Copyright 2025 Adobe
2
2
  All Rights Reserved. */
3
- import{jsxs as A,jsx as s}from"@dropins/tools/preact-jsx-runtime.js";import{classes as w}from"@dropins/tools/lib.js";import{P as y,d as R}from"../chunks/pageSize.config.js";import{P as N}from"../chunks/PurchaseOrdersHeader.js";import{P as S}from"../chunks/PurchaseOrdersTableActions.js";import"@dropins/tools/components.js";import{E as D,u as E}from"../chunks/usePurchaseOrders.js";import{u as j}from"../chunks/useCustomerRolePermissions.js";import"@dropins/tools/preact-hooks.js";import"@dropins/tools/event-bus.js";import"../chunks/PurchaseOrderHistoryLogContent.js";import"@dropins/tools/preact.js";import{useText as v}from"@dropins/tools/i18n.js";import"../chunks/formatDate.js";import"../chunks/rejectPurchaseOrders.js";import"../chunks/fetch-graphql.js";import"@dropins/tools/fetch-graphql.js";import"../chunks/fetch-error.js";import"../chunks/getPurchaseOrders.js";import"../chunks/case-converter.js";import"../chunks/permissions.js";const ee=({initialPageSize:t=R,routePurchaseOrderDetails:o,setColumns:d,setRowsData:u,className:c="",withHeader:l=!0,withWrapper:i=!0,skeletonRowCount:n=5})=>{const m=D.COMPANY_PURCHASE_ORDERS,e=v({headerText:"PurchaseOrders.companyPurchaseOrders.containerTitle",actionView:"PurchaseOrders.purchaseOrdersTable.actionView",poNumber:"PurchaseOrders.purchaseOrdersTable.tableColumns.poNumber",orderNumber:"PurchaseOrders.purchaseOrdersTable.tableColumns.orderNumber",createdDate:"PurchaseOrders.purchaseOrdersTable.tableColumns.createdDate",updatedDate:"PurchaseOrders.purchaseOrdersTable.tableColumns.updatedDate",createdBy:"PurchaseOrders.purchaseOrdersTable.tableColumns.createdBy",status:"PurchaseOrders.purchaseOrdersTable.tableColumns.status",total:"PurchaseOrders.purchaseOrdersTable.tableColumns.total",action:"PurchaseOrders.purchaseOrdersTable.tableColumns.action",selectAllAriaLabel:"PurchaseOrders.purchaseOrdersTable.tableColumns.selectAllAriaLabel",noPurchaseOrders:"PurchaseOrders.companyPurchaseOrders.noPurchaseOrders"}),{permissions:p,loadingPermissions:h}=j(),{totalCount:O,loading:a,tableConfig:r,paginationConfig:P,pageSizeConfig:b,selectedOrderIds:C,handleRejectSelected:T,handleApproveSelected:f,isAdmin:g,alertMessageConfig:x}=E({view:m,routePurchaseOrderDetails:o,setColumns:d,setRowsData:u,initialPageSize:t,permissions:p,loadingPermissions:h,t:e});return A("div",{className:w(["company-purchase-orders",c]),"data-testid":"company-purchase-orders-container",children:[l?s(N,{headerText:e.headerText}):null,s(y,{header:g?s(S,{loading:a,selectedCount:C.length,handleRejectSelected:T,handleApproveSelected:f}):null,totalCount:O,columns:r.columns,rows:r.rows,expandedRows:r.expandedRows,paginationConfig:P,loading:a,skeletonRowCount:n,pageSizeConfig:b,emptyTitle:e.noPurchaseOrders,alertMessageConfig:x,withWrapper:i})]})};export{ee as CompanyPurchaseOrders,ee as default};
3
+ import{jsxs as A,jsx as s}from"@dropins/tools/preact-jsx-runtime.js";import{classes as w}from"@dropins/tools/lib.js";import{P as y,d as R}from"../chunks/pageSize.config.js";import{P as N}from"../chunks/PurchaseOrdersHeader.js";import{P as S}from"../chunks/PurchaseOrdersTableActions.js";import"@dropins/tools/components.js";import{E as D,u as E}from"../chunks/usePurchaseOrders.js";import{u as j}from"../chunks/useCustomerRolePermissions.js";import"@dropins/tools/preact-hooks.js";import"@dropins/tools/event-bus.js";import"../chunks/PurchaseOrderHistoryLogContent.js";import"@dropins/tools/preact.js";import{useText as v}from"@dropins/tools/i18n.js";import"../chunks/formatDate.js";import"../chunks/rejectPurchaseOrders.js";import"../chunks/fetch-graphql.js";import"@dropins/tools/fetch-graphql.js";import"../chunks/getPurchaseOrders.js";import"../chunks/case-converter.js";import"../chunks/permissions.js";const $=({initialPageSize:t=R,routePurchaseOrderDetails:o,setColumns:d,setRowsData:u,className:c="",withHeader:l=!0,withWrapper:n=!0,skeletonRowCount:i=5})=>{const m=D.COMPANY_PURCHASE_ORDERS,e=v({headerText:"PurchaseOrders.companyPurchaseOrders.containerTitle",actionView:"PurchaseOrders.purchaseOrdersTable.actionView",poNumber:"PurchaseOrders.purchaseOrdersTable.tableColumns.poNumber",orderNumber:"PurchaseOrders.purchaseOrdersTable.tableColumns.orderNumber",createdDate:"PurchaseOrders.purchaseOrdersTable.tableColumns.createdDate",updatedDate:"PurchaseOrders.purchaseOrdersTable.tableColumns.updatedDate",createdBy:"PurchaseOrders.purchaseOrdersTable.tableColumns.createdBy",status:"PurchaseOrders.purchaseOrdersTable.tableColumns.status",total:"PurchaseOrders.purchaseOrdersTable.tableColumns.total",action:"PurchaseOrders.purchaseOrdersTable.tableColumns.action",selectAllAriaLabel:"PurchaseOrders.purchaseOrdersTable.tableColumns.selectAllAriaLabel",noPurchaseOrders:"PurchaseOrders.companyPurchaseOrders.noPurchaseOrders"}),{permissions:p,loadingPermissions:h}=j(),{totalCount:O,loading:a,tableConfig:r,paginationConfig:P,pageSizeConfig:b,selectedOrderIds:C,handleRejectSelected:T,handleApproveSelected:f,isAdmin:g,alertMessageConfig:x}=E({view:m,routePurchaseOrderDetails:o,setColumns:d,setRowsData:u,initialPageSize:t,permissions:p,loadingPermissions:h,t:e});return A("div",{className:w(["company-purchase-orders",c]),"data-testid":"company-purchase-orders-container",children:[l?s(N,{headerText:e.headerText}):null,s(y,{header:g?s(S,{loading:a,selectedCount:C.length,handleRejectSelected:T,handleApproveSelected:f}):null,totalCount:O,columns:r.columns,rows:r.rows,expandedRows:r.expandedRows,paginationConfig:P,loading:a,skeletonRowCount:i,pageSizeConfig:b,emptyTitle:e.noPurchaseOrders,alertMessageConfig:x,withWrapper:n})]})};export{$ as CompanyPurchaseOrders,$ as default};
4
4
  //# sourceMappingURL=CompanyPurchaseOrders.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CompanyPurchaseOrders.js","sources":["/@dropins/storefront-purchase-order/src/containers/CompanyPurchaseOrders/CompanyPurchaseOrders.tsx"],"sourcesContent":["/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { classes, Container } from '@adobe-commerce/elsie/lib';\nimport {\n PurchaseOrdersTable,\n PurchaseOrdersHeader,\n PurchaseOrdersTableActions,\n} from '@/b2b-purchase-order/components';\nimport {\n usePurchaseOrders,\n useCustomerRolePermissions,\n} from '@/b2b-purchase-order/hooks';\nimport { CompanyPurchaseOrdersProps } from '@/b2b-purchase-order/types/containers';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { EnumPurchaseOrdersView } from '@/b2b-purchase-order/types/api';\nimport { defaultPageSizeConfig } from '@/b2b-purchase-order/configs';\n\nexport const CompanyPurchaseOrders: Container<CompanyPurchaseOrdersProps> = ({\n initialPageSize = defaultPageSizeConfig,\n routePurchaseOrderDetails,\n setColumns,\n setRowsData,\n className = '',\n withHeader = true,\n withWrapper = true,\n skeletonRowCount = 5,\n}) => {\n const view = EnumPurchaseOrdersView.COMPANY_PURCHASE_ORDERS;\n\n const t = useText({\n headerText: 'PurchaseOrders.companyPurchaseOrders.containerTitle',\n actionView: 'PurchaseOrders.purchaseOrdersTable.actionView',\n poNumber: 'PurchaseOrders.purchaseOrdersTable.tableColumns.poNumber',\n orderNumber: 'PurchaseOrders.purchaseOrdersTable.tableColumns.orderNumber',\n createdDate: 'PurchaseOrders.purchaseOrdersTable.tableColumns.createdDate',\n updatedDate: 'PurchaseOrders.purchaseOrdersTable.tableColumns.updatedDate',\n createdBy: 'PurchaseOrders.purchaseOrdersTable.tableColumns.createdBy',\n status: 'PurchaseOrders.purchaseOrdersTable.tableColumns.status',\n total: 'PurchaseOrders.purchaseOrdersTable.tableColumns.total',\n action: 'PurchaseOrders.purchaseOrdersTable.tableColumns.action',\n selectAllAriaLabel:\n 'PurchaseOrders.purchaseOrdersTable.tableColumns.selectAllAriaLabel',\n noPurchaseOrders: 'PurchaseOrders.companyPurchaseOrders.noPurchaseOrders',\n });\n\n const { permissions, loadingPermissions } = useCustomerRolePermissions();\n const {\n totalCount,\n loading,\n tableConfig,\n paginationConfig,\n pageSizeConfig,\n selectedOrderIds,\n handleRejectSelected,\n handleApproveSelected,\n isAdmin,\n alertMessageConfig,\n } = usePurchaseOrders({\n view,\n routePurchaseOrderDetails,\n setColumns,\n setRowsData,\n initialPageSize,\n permissions,\n loadingPermissions,\n t,\n });\n\n return (\n <div\n className={classes(['company-purchase-orders', className])}\n data-testid=\"company-purchase-orders-container\"\n >\n {withHeader ? <PurchaseOrdersHeader headerText={t.headerText} /> : null}\n <PurchaseOrdersTable\n header={\n isAdmin ? (\n <PurchaseOrdersTableActions\n loading={loading}\n selectedCount={selectedOrderIds.length}\n handleRejectSelected={handleRejectSelected}\n handleApproveSelected={handleApproveSelected}\n />\n ) : null\n }\n totalCount={totalCount}\n columns={tableConfig.columns}\n rows={tableConfig.rows}\n expandedRows={tableConfig.expandedRows}\n paginationConfig={paginationConfig}\n loading={loading}\n skeletonRowCount={skeletonRowCount}\n pageSizeConfig={pageSizeConfig}\n emptyTitle={t.noPurchaseOrders}\n alertMessageConfig={alertMessageConfig}\n withWrapper={withWrapper}\n />\n </div>\n );\n};\n"],"names":["CompanyPurchaseOrders","initialPageSize","defaultPageSizeConfig","routePurchaseOrderDetails","setColumns","setRowsData","className","withHeader","withWrapper","skeletonRowCount","view","EnumPurchaseOrdersView","t","useText","permissions","loadingPermissions","useCustomerRolePermissions","totalCount","loading","tableConfig","paginationConfig","pageSizeConfig","selectedOrderIds","handleRejectSelected","handleApproveSelected","isAdmin","alertMessageConfig","usePurchaseOrders","jsxs","classes","jsx","PurchaseOrdersHeader","PurchaseOrdersTable","PurchaseOrdersTableActions"],"mappings":"66BAgCO,MAAMA,GAA+D,CAAC,CAC3E,gBAAAC,EAAkBC,EAClB,0BAAAC,EACA,WAAAC,EACA,YAAAC,EACA,UAAAC,EAAY,GACZ,WAAAC,EAAa,GACb,YAAAC,EAAc,GACd,iBAAAC,EAAmB,CACrB,IAAM,CACJ,MAAMC,EAAOC,EAAuB,wBAE9BC,EAAIC,EAAQ,CAChB,WAAY,sDACZ,WAAY,gDACZ,SAAU,2DACV,YAAa,8DACb,YAAa,8DACb,YAAa,8DACb,UAAW,4DACX,OAAQ,yDACR,MAAO,wDACP,OAAQ,yDACR,mBACE,qEACF,iBAAkB,uDAAA,CACnB,EAEK,CAAE,YAAAC,EAAa,mBAAAC,CAAA,EAAuBC,EAAA,EACtC,CACJ,WAAAC,EACA,QAAAC,EACA,YAAAC,EACA,iBAAAC,EACA,eAAAC,EACA,iBAAAC,EACA,qBAAAC,EACA,sBAAAC,EACA,QAAAC,EACA,mBAAAC,CAAA,EACEC,EAAkB,CACpB,KAAAjB,EACA,0BAAAP,EACA,WAAAC,EACA,YAAAC,EACA,gBAAAJ,EACA,YAAAa,EACA,mBAAAC,EACA,EAAAH,CAAA,CACD,EAED,OACEgB,EAAC,MAAA,CACC,UAAWC,EAAQ,CAAC,0BAA2BvB,CAAS,CAAC,EACzD,cAAY,oCAEX,SAAA,CAAAC,EAAauB,EAACC,EAAA,CAAqB,WAAYnB,EAAE,WAAY,EAAK,KACnEkB,EAACE,EAAA,CACC,OACEP,EACEK,EAACG,EAAA,CACC,QAAAf,EACA,cAAeI,EAAiB,OAChC,qBAAAC,EACA,sBAAAC,CAAA,CAAA,EAEA,KAEN,WAAAP,EACA,QAASE,EAAY,QACrB,KAAMA,EAAY,KAClB,aAAcA,EAAY,aAC1B,iBAAAC,EACA,QAAAF,EACA,iBAAAT,EACA,eAAAY,EACA,WAAYT,EAAE,iBACd,mBAAAc,EACA,YAAAlB,CAAA,CAAA,CACF,CAAA,CAAA,CAGN"}
1
+ {"version":3,"file":"CompanyPurchaseOrders.js","sources":["/@dropins/storefront-purchase-order/src/containers/CompanyPurchaseOrders/CompanyPurchaseOrders.tsx"],"sourcesContent":["/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { classes, Container } from '@adobe-commerce/elsie/lib';\nimport {\n PurchaseOrdersTable,\n PurchaseOrdersHeader,\n PurchaseOrdersTableActions,\n} from '@/b2b-purchase-order/components';\nimport {\n usePurchaseOrders,\n useCustomerRolePermissions,\n} from '@/b2b-purchase-order/hooks';\nimport { CompanyPurchaseOrdersProps } from '@/b2b-purchase-order/types/containers';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { EnumPurchaseOrdersView } from '@/b2b-purchase-order/types/api';\nimport { defaultPageSizeConfig } from '@/b2b-purchase-order/configs';\n\nexport const CompanyPurchaseOrders: Container<CompanyPurchaseOrdersProps> = ({\n initialPageSize = defaultPageSizeConfig,\n routePurchaseOrderDetails,\n setColumns,\n setRowsData,\n className = '',\n withHeader = true,\n withWrapper = true,\n skeletonRowCount = 5,\n}) => {\n const view = EnumPurchaseOrdersView.COMPANY_PURCHASE_ORDERS;\n\n const t = useText({\n headerText: 'PurchaseOrders.companyPurchaseOrders.containerTitle',\n actionView: 'PurchaseOrders.purchaseOrdersTable.actionView',\n poNumber: 'PurchaseOrders.purchaseOrdersTable.tableColumns.poNumber',\n orderNumber: 'PurchaseOrders.purchaseOrdersTable.tableColumns.orderNumber',\n createdDate: 'PurchaseOrders.purchaseOrdersTable.tableColumns.createdDate',\n updatedDate: 'PurchaseOrders.purchaseOrdersTable.tableColumns.updatedDate',\n createdBy: 'PurchaseOrders.purchaseOrdersTable.tableColumns.createdBy',\n status: 'PurchaseOrders.purchaseOrdersTable.tableColumns.status',\n total: 'PurchaseOrders.purchaseOrdersTable.tableColumns.total',\n action: 'PurchaseOrders.purchaseOrdersTable.tableColumns.action',\n selectAllAriaLabel:\n 'PurchaseOrders.purchaseOrdersTable.tableColumns.selectAllAriaLabel',\n noPurchaseOrders: 'PurchaseOrders.companyPurchaseOrders.noPurchaseOrders',\n });\n\n const { permissions, loadingPermissions } = useCustomerRolePermissions();\n const {\n totalCount,\n loading,\n tableConfig,\n paginationConfig,\n pageSizeConfig,\n selectedOrderIds,\n handleRejectSelected,\n handleApproveSelected,\n isAdmin,\n alertMessageConfig,\n } = usePurchaseOrders({\n view,\n routePurchaseOrderDetails,\n setColumns,\n setRowsData,\n initialPageSize,\n permissions,\n loadingPermissions,\n t,\n });\n\n return (\n <div\n className={classes(['company-purchase-orders', className])}\n data-testid=\"company-purchase-orders-container\"\n >\n {withHeader ? <PurchaseOrdersHeader headerText={t.headerText} /> : null}\n <PurchaseOrdersTable\n header={\n isAdmin ? (\n <PurchaseOrdersTableActions\n loading={loading}\n selectedCount={selectedOrderIds.length}\n handleRejectSelected={handleRejectSelected}\n handleApproveSelected={handleApproveSelected}\n />\n ) : null\n }\n totalCount={totalCount}\n columns={tableConfig.columns}\n rows={tableConfig.rows}\n expandedRows={tableConfig.expandedRows}\n paginationConfig={paginationConfig}\n loading={loading}\n skeletonRowCount={skeletonRowCount}\n pageSizeConfig={pageSizeConfig}\n emptyTitle={t.noPurchaseOrders}\n alertMessageConfig={alertMessageConfig}\n withWrapper={withWrapper}\n />\n </div>\n );\n};\n"],"names":["CompanyPurchaseOrders","initialPageSize","defaultPageSizeConfig","routePurchaseOrderDetails","setColumns","setRowsData","className","withHeader","withWrapper","skeletonRowCount","view","EnumPurchaseOrdersView","t","useText","permissions","loadingPermissions","useCustomerRolePermissions","totalCount","loading","tableConfig","paginationConfig","pageSizeConfig","selectedOrderIds","handleRejectSelected","handleApproveSelected","isAdmin","alertMessageConfig","usePurchaseOrders","jsxs","classes","jsx","PurchaseOrdersHeader","PurchaseOrdersTable","PurchaseOrdersTableActions"],"mappings":"44BAgCO,MAAMA,EAA+D,CAAC,CAC3E,gBAAAC,EAAkBC,EAClB,0BAAAC,EACA,WAAAC,EACA,YAAAC,EACA,UAAAC,EAAY,GACZ,WAAAC,EAAa,GACb,YAAAC,EAAc,GACd,iBAAAC,EAAmB,CACrB,IAAM,CACJ,MAAMC,EAAOC,EAAuB,wBAE9BC,EAAIC,EAAQ,CAChB,WAAY,sDACZ,WAAY,gDACZ,SAAU,2DACV,YAAa,8DACb,YAAa,8DACb,YAAa,8DACb,UAAW,4DACX,OAAQ,yDACR,MAAO,wDACP,OAAQ,yDACR,mBACE,qEACF,iBAAkB,uDAAA,CACnB,EAEK,CAAE,YAAAC,EAAa,mBAAAC,CAAA,EAAuBC,EAAA,EACtC,CACJ,WAAAC,EACA,QAAAC,EACA,YAAAC,EACA,iBAAAC,EACA,eAAAC,EACA,iBAAAC,EACA,qBAAAC,EACA,sBAAAC,EACA,QAAAC,EACA,mBAAAC,CAAA,EACEC,EAAkB,CACpB,KAAAjB,EACA,0BAAAP,EACA,WAAAC,EACA,YAAAC,EACA,gBAAAJ,EACA,YAAAa,EACA,mBAAAC,EACA,EAAAH,CAAA,CACD,EAED,OACEgB,EAAC,MAAA,CACC,UAAWC,EAAQ,CAAC,0BAA2BvB,CAAS,CAAC,EACzD,cAAY,oCAEX,SAAA,CAAAC,EAAauB,EAACC,EAAA,CAAqB,WAAYnB,EAAE,WAAY,EAAK,KACnEkB,EAACE,EAAA,CACC,OACEP,EACEK,EAACG,EAAA,CACC,QAAAf,EACA,cAAeI,EAAiB,OAChC,qBAAAC,EACA,sBAAAC,CAAA,CAAA,EAEA,KAEN,WAAAP,EACA,QAASE,EAAY,QACrB,KAAMA,EAAY,KAClB,aAAcA,EAAY,aAC1B,iBAAAC,EACA,QAAAF,EACA,iBAAAT,EACA,eAAAY,EACA,WAAYT,EAAE,iBACd,mBAAAc,EACA,YAAAlB,CAAA,CAAA,CACF,CAAA,CAAA,CAGN"}
@@ -1,4 +1,4 @@
1
1
  /*! Copyright 2025 Adobe
2
2
  All Rights Reserved. */
3
- import{jsxs as T,jsx as s}from"@dropins/tools/preact-jsx-runtime.js";import{classes as f}from"@dropins/tools/lib.js";import{P as g,d as x}from"../chunks/pageSize.config.js";import{P as w}from"../chunks/PurchaseOrdersHeader.js";import"../chunks/PurchaseOrderHistoryLogContent.js";import"@dropins/tools/components.js";import{E as R,u as D}from"../chunks/usePurchaseOrders.js";import{u as E}from"../chunks/useCustomerRolePermissions.js";import"@dropins/tools/preact-hooks.js";import"@dropins/tools/event-bus.js";import"@dropins/tools/preact.js";import{useText as N}from"@dropins/tools/i18n.js";import"../chunks/formatDate.js";import"../chunks/rejectPurchaseOrders.js";import"../chunks/fetch-graphql.js";import"@dropins/tools/fetch-graphql.js";import"../chunks/fetch-error.js";import"../chunks/getPurchaseOrders.js";import"../chunks/case-converter.js";import"../chunks/permissions.js";const Q=({initialPageSize:a=x,routePurchaseOrderDetails:t,setColumns:o,setRowsData:u,className:d="",withHeader:c=!0,withWrapper:i=!0,skeletonRowCount:m=5})=>{const l=R.CUSTOMER_PURCHASE_ORDERS,r=N({headerText:"PurchaseOrders.customerPurchaseOrders.containerTitle",actionView:"PurchaseOrders.purchaseOrdersTable.actionView",poNumber:"PurchaseOrders.purchaseOrdersTable.tableColumns.poNumber",orderNumber:"PurchaseOrders.purchaseOrdersTable.tableColumns.orderNumber",createdDate:"PurchaseOrders.purchaseOrdersTable.tableColumns.createdDate",updatedDate:"PurchaseOrders.purchaseOrdersTable.tableColumns.updatedDate",createdBy:"PurchaseOrders.purchaseOrdersTable.tableColumns.createdBy",status:"PurchaseOrders.purchaseOrdersTable.tableColumns.status",total:"PurchaseOrders.purchaseOrdersTable.tableColumns.total",action:"PurchaseOrders.purchaseOrdersTable.tableColumns.action",noPurchaseOrders:"PurchaseOrders.customerPurchaseOrders.noPurchaseOrders"}),{permissions:n,loadingPermissions:p}=E(),{pageSizeConfig:h,loading:O,paginationConfig:P,tableConfig:e,totalCount:b,alertMessageConfig:C}=D({view:l,routePurchaseOrderDetails:t,setColumns:o,setRowsData:u,initialPageSize:a,permissions:n,loadingPermissions:p,t:r});return T("div",{className:f(["purchase-orders",d]),"data-testid":"purchase-orders-container",children:[c?s(w,{headerText:r.headerText}):null,s(g,{totalCount:b,columns:e.columns,rows:e.rows,expandedRows:e.expandedRows,paginationConfig:P,loading:O,skeletonRowCount:m,pageSizeConfig:h,emptyTitle:r.noPurchaseOrders,alertMessageConfig:C,withWrapper:i})]})};export{Q as CustomerPurchaseOrders,Q as default};
3
+ import{jsxs as T,jsx as s}from"@dropins/tools/preact-jsx-runtime.js";import{classes as f}from"@dropins/tools/lib.js";import{P as g,d as x}from"../chunks/pageSize.config.js";import{P as w}from"../chunks/PurchaseOrdersHeader.js";import"../chunks/PurchaseOrderHistoryLogContent.js";import"@dropins/tools/components.js";import{E as R,u as D}from"../chunks/usePurchaseOrders.js";import{u as E}from"../chunks/useCustomerRolePermissions.js";import"@dropins/tools/preact-hooks.js";import"@dropins/tools/event-bus.js";import"@dropins/tools/preact.js";import{useText as N}from"@dropins/tools/i18n.js";import"../chunks/formatDate.js";import"../chunks/rejectPurchaseOrders.js";import"../chunks/fetch-graphql.js";import"@dropins/tools/fetch-graphql.js";import"../chunks/getPurchaseOrders.js";import"../chunks/case-converter.js";import"../chunks/permissions.js";const L=({initialPageSize:a=x,routePurchaseOrderDetails:t,setColumns:o,setRowsData:u,className:d="",withHeader:c=!0,withWrapper:i=!0,skeletonRowCount:m=5})=>{const l=R.CUSTOMER_PURCHASE_ORDERS,e=N({headerText:"PurchaseOrders.customerPurchaseOrders.containerTitle",actionView:"PurchaseOrders.purchaseOrdersTable.actionView",poNumber:"PurchaseOrders.purchaseOrdersTable.tableColumns.poNumber",orderNumber:"PurchaseOrders.purchaseOrdersTable.tableColumns.orderNumber",createdDate:"PurchaseOrders.purchaseOrdersTable.tableColumns.createdDate",updatedDate:"PurchaseOrders.purchaseOrdersTable.tableColumns.updatedDate",createdBy:"PurchaseOrders.purchaseOrdersTable.tableColumns.createdBy",status:"PurchaseOrders.purchaseOrdersTable.tableColumns.status",total:"PurchaseOrders.purchaseOrdersTable.tableColumns.total",action:"PurchaseOrders.purchaseOrdersTable.tableColumns.action",noPurchaseOrders:"PurchaseOrders.customerPurchaseOrders.noPurchaseOrders"}),{permissions:n,loadingPermissions:p}=E(),{pageSizeConfig:h,loading:O,paginationConfig:P,tableConfig:r,totalCount:b,alertMessageConfig:C}=D({view:l,routePurchaseOrderDetails:t,setColumns:o,setRowsData:u,initialPageSize:a,permissions:n,loadingPermissions:p,t:e});return T("div",{className:f(["purchase-orders",d]),"data-testid":"purchase-orders-container",children:[c?s(w,{headerText:e.headerText}):null,s(g,{totalCount:b,columns:r.columns,rows:r.rows,expandedRows:r.expandedRows,paginationConfig:P,loading:O,skeletonRowCount:m,pageSizeConfig:h,emptyTitle:e.noPurchaseOrders,alertMessageConfig:C,withWrapper:i})]})};export{L as CustomerPurchaseOrders,L as default};
4
4
  //# sourceMappingURL=CustomerPurchaseOrders.js.map