@dropins/storefront-quote-management 0.0.1-alpha14 → 0.0.1-alpha15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/api/graphql/NegotiableQuoteFragment.d.ts +1 -1
- package/api/index.d.ts +1 -0
- package/api/requestNegotiableQuote/requestNegotiableQuote.d.ts +3 -0
- package/api/uploadFile/graphql/FinishUploadMutation.d.ts +10 -0
- package/api/uploadFile/graphql/InitiateUploadMutation.d.ts +10 -0
- package/api/uploadFile/index.d.ts +10 -0
- package/api/uploadFile/uploadFile.d.ts +12 -0
- package/api.js +8 -8
- package/api.js.map +1 -1
- package/chunks/ItemsQuoted.js +4 -0
- package/chunks/ItemsQuoted.js.map +1 -0
- package/chunks/NegotiableQuoteFragment.js +67 -21
- package/chunks/NegotiableQuoteFragment.js.map +1 -1
- package/chunks/QuoteCommentsList.js +4 -0
- package/chunks/QuoteCommentsList.js.map +1 -0
- package/chunks/QuoteHistoryLog.js +4 -0
- package/chunks/QuoteHistoryLog.js.map +1 -0
- package/chunks/ShippingAddressDisplay.js +4 -0
- package/chunks/ShippingAddressDisplay.js.map +1 -0
- package/chunks/transform-quote.js +1 -1
- package/chunks/transform-quote.js.map +1 -1
- package/chunks/uploadFile.js +41 -0
- package/chunks/uploadFile.js.map +1 -0
- package/components/QuoteCommentsList/QuoteCommentsList.d.ts +13 -0
- package/components/QuoteCommentsList/index.d.ts +11 -0
- package/components/QuoteHistoryLog/QuoteHistoryLog.d.ts +9 -0
- package/components/QuoteHistoryLog/index.d.ts +11 -0
- package/components/index.d.ts +2 -0
- package/containers/ItemsQuoted.js +1 -1
- package/containers/ItemsQuoted.js.map +1 -1
- package/containers/ManageNegotiableQuote/ManageNegotiableQuote.d.ts +10 -2
- package/containers/ManageNegotiableQuote.js +1 -1
- package/containers/ManageNegotiableQuote.js.map +1 -1
- package/containers/QuoteCommentsList/QuoteCommentsList.d.ts +9 -0
- package/containers/QuoteCommentsList/index.d.ts +11 -0
- package/containers/QuoteCommentsList.d.ts +3 -0
- package/containers/QuoteCommentsList.js +4 -0
- package/containers/QuoteCommentsList.js.map +1 -0
- package/containers/QuoteHistoryLog/QuoteHistoryLog.d.ts +9 -0
- package/containers/QuoteHistoryLog/index.d.ts +11 -0
- package/containers/QuoteHistoryLog.d.ts +3 -0
- package/containers/QuoteHistoryLog.js +4 -0
- package/containers/QuoteHistoryLog.js.map +1 -0
- package/containers/QuotesListTable.js +1 -1
- package/containers/QuotesListTable.js.map +1 -1
- package/containers/RequestNegotiableQuoteForm.js +1 -1
- package/containers/RequestNegotiableQuoteForm.js.map +1 -1
- package/containers/ShippingAddressDisplay/ShippingAddressDisplay.d.ts +10 -0
- package/containers/ShippingAddressDisplay/index.d.ts +11 -0
- package/containers/ShippingAddressDisplay.d.ts +1 -0
- package/containers/ShippingAddressDisplay.js +4 -0
- package/containers/ShippingAddressDisplay.js.map +1 -0
- package/containers/index.d.ts +3 -0
- package/data/models/negotiable-quote-model.d.ts +64 -0
- package/data/transforms/__fixtures__/negotiableQuoteData.d.ts +66 -0
- package/i18n/en_US.json.d.ts +41 -1
- package/package.json +1 -1
- package/render.js +7 -5
- package/render.js.map +1 -1
- package/utils/dateUtils.d.ts +15 -0
- package/chunks/requestNegotiableQuote.js +0 -25
- package/chunks/requestNegotiableQuote.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RequestNegotiableQuoteForm.js","sources":["../../node_modules/@adobe-commerce/elsie/src/icons/Add.svg","../../node_modules/@adobe-commerce/elsie/src/icons/CheckWithCircle.svg","/@dropins/storefront-quote-management/src/components/RequestNegotiableQuoteForm/RequestNegotiableQuoteForm.tsx","/@dropins/storefront-quote-management/src/containers/RequestNegotiableQuoteForm/RequestNegotiableQuoteForm.tsx"],"sourcesContent":["import * as React from \"react\";\nconst SvgAdd = (props) => /* @__PURE__ */ React.createElement(\"svg\", { id: \"Icon_Add_Base\", \"data-name\": \"Icon \\\\u2013 Add \\\\u2013 Base\", xmlns: \"http://www.w3.org/2000/svg\", width: 24, height: 24, viewBox: \"0 0 24 24\", ...props }, /* @__PURE__ */ React.createElement(\"g\", { id: \"Large\" }, /* @__PURE__ */ React.createElement(\"rect\", { id: \"Placement_area\", \"data-name\": \"Placement area\", width: 24, height: 24, fill: \"#fff\", opacity: 0 }), /* @__PURE__ */ React.createElement(\"g\", { id: \"Add_icon\", \"data-name\": \"Add icon\", transform: \"translate(9.734 9.737)\" }, /* @__PURE__ */ React.createElement(\"line\", { vectorEffect: \"non-scaling-stroke\", id: \"Line_579\", \"data-name\": \"Line 579\", y2: 12.7, transform: \"translate(2.216 -4.087)\", fill: \"none\", stroke: \"currentColor\" }), /* @__PURE__ */ React.createElement(\"line\", { vectorEffect: \"non-scaling-stroke\", id: \"Line_580\", \"data-name\": \"Line 580\", x2: 12.7, transform: \"translate(-4.079 2.263)\", fill: \"none\", stroke: \"currentColor\" }))));\nexport default SvgAdd;\n","import * as React from \"react\";\nconst SvgCheckWithCircle = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M0.75 12C0.75 5.78421 5.78421 0.75 12 0.75C18.2158 0.75 23.25 5.78421 23.25 12C23.25 18.2158 18.2158 23.25 12 23.25C5.78421 23.25 0.75 18.2158 0.75 12Z\", stroke: \"currentColor\" }), /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M6.75 12.762L10.2385 15.75L17.25 9\", stroke: \"currentColor\" }));\nexport default SvgCheckWithCircle;\n","/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nimport { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\nimport { classes, VComponent } from '@adobe-commerce/elsie/lib';\nimport '@/quote-management/components/RequestNegotiableQuoteForm/RequestNegotiableQuoteForm.css';\n\nexport interface RequestNegotiableQuoteFormProps extends Omit<HTMLAttributes<HTMLFormElement>, 'title'> {\n title: VNode;\n banner?: VNode;\n commentField?: VNode;\n quoteNameField?: VNode;\n attachFile?: VNode;\n requestButton?: VNode;\n saveButton?: VNode;\n onSubmit: (e: Event) => void;\n}\n\nexport const RequestNegotiableQuoteForm: FunctionComponent<RequestNegotiableQuoteFormProps> = ({\n className,\n title,\n banner,\n commentField,\n quoteNameField,\n attachFile,\n requestButton,\n saveButton,\n onSubmit,\n ...props\n}) => {\n return (\n <form {...props} className={classes(['request-negotiable-quote-form', className])} onSubmit={onSubmit}>\n {banner &&\n <VComponent\n node={banner}\n className={classes(['request-negotiable-quote-form__banner'])}\n />\n }\n {title &&\n <VComponent\n node={title}\n className={classes(['request-negotiable-quote-form__title'])}\n />\n }\n {commentField &&\n <VComponent\n node={commentField}\n className={classes(['request-negotiable-quote-form__comment-field'])}\n />\n }\n {quoteNameField &&\n <VComponent\n node={quoteNameField}\n className={classes(['request-negotiable-quote-form__quote-name-field'])}\n />\n }\n {attachFile &&\n <VComponent\n node={attachFile}\n className={classes(['request-negotiable-quote-form__attach-file-field'])}\n />\n }\n <div className={classes(['request-negotiable-quote-form__actions'])}>\n {requestButton &&\n <VComponent\n node={requestButton}\n className={classes(['request-negotiable-quote-form__request-button'])}\n />\n }\n {saveButton &&\n <VComponent\n node={saveButton}\n className={classes(['request-negotiable-quote-form__save-button'])}\n />\n }\n </div>\n </form>\n );\n};\n","/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nimport { HTMLAttributes, useCallback, useEffect, useState } from 'preact/compat';\nimport { Container, getFormErrors, getFormValues, Slot, SlotProps } from '@adobe-commerce/elsie/lib';\nimport { InLineAlert, Button, InputFile, TextArea, Input, Field, InLineAlertProps } from '@adobe-commerce/elsie/components';\nimport { WarningFilled, CheckWithCircle, Add } from '@adobe-commerce/elsie/icons';\nimport RequestNegotiableQuoteFormComponent from '@/quote-management/components/RequestNegotiableQuoteForm';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { events } from '@adobe-commerce/event-bus';\nimport { requestNegotiableQuote, RequestNegotiableQuoteInput } from '@/quote-management/api';\nimport { state } from '@/quote-management/lib/state';\n\nexport type RequestNegotiableQuoteHandlers = {\n onAttachFiles?: (files: File[]) => Promise<void>;\n onRequestNegotiableQuote?: typeof requestNegotiableQuote;\n onSaveNegotiableQuote?: typeof requestNegotiableQuote;\n onSubmitErrors?: (errors: Record<string, string>) => void;\n onError?: (props: {\n error: string,\n isFormDisabled: boolean,\n setIsFormDisabled: (isFormDisabled: boolean) => void,\n }) => void;\n};\n\nexport interface RequestNegotiableQuoteFormProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'onError'>,\n RequestNegotiableQuoteHandlers {\n cartId: string;\n slots?: {\n ErrorBanner?: SlotProps<{\n message: string,\n }>;\n SuccessBanner?: SlotProps<{\n message: string,\n }>;\n Title?: SlotProps<{\n text: string,\n }>;\n CommentField?: SlotProps<{\n formErrors: Record<string, string>;\n isFormDisabled: boolean;\n setFormErrors: (errors: Record<string, string>) => void;\n }>;\n QuoteNameField?: SlotProps<{\n formErrors: Record<string, string>;\n isFormDisabled: boolean;\n setFormErrors: (errors: Record<string, string>) => void;\n }>;\n AttachFileField?: SlotProps<{\n onChange: (files: File[]) => void, formErrors: Record<string, string>,\n isFormDisabled: boolean\n }>;\n RequestButton?: SlotProps<{\n requestNegotiableQuote: typeof requestNegotiableQuote;\n formErrors: Record<string, string>;\n isFormDisabled: boolean;\n setIsFormDisabled: (isFormDisabled: boolean) => void;\n }>;\n SaveDraftButton?: SlotProps<{\n requestNegotiableQuote: typeof requestNegotiableQuote;\n formErrors: Record<string, string>;\n isFormDisabled: boolean;\n setIsFormDisabled: (isFormDisabled: boolean) => void;\n }>;\n };\n}\n\nexport const RequestNegotiableQuoteForm: Container<RequestNegotiableQuoteFormProps> = ({\n cartId,\n slots,\n onRequestNegotiableQuote,\n onSaveNegotiableQuote,\n onAttachFiles,\n onSubmitErrors,\n onError,\n className,\n}) => {\n const [comment, setComment] = useState<string | undefined>(undefined);\n const [quoteName, setQuoteName] = useState<string | undefined>(undefined);\n const [, setAttachments] = useState<File[]>([]);\n const [error, setError] = useState<string | undefined>(undefined);\n const [formErrors, setFormErrors] = useState<Record<string, string>>({});\n const [success, setSuccess] = useState<string | undefined>(undefined);\n const [isFormDisabled, setIsFormDisabled] = useState<boolean>(false);\n\n const dictionary = useText({\n title: 'NegotiableQuote.Request.title',\n comment: 'NegotiableQuote.Request.comment',\n commentError: 'NegotiableQuote.Request.commentError',\n quoteName: 'NegotiableQuote.Request.quoteName',\n quoteNameError: 'NegotiableQuote.Request.quoteNameError',\n attachmentsError: 'NegotiableQuote.Request.attachmentsError',\n requestCta: 'NegotiableQuote.Request.requestCta',\n saveDraftCta: 'NegotiableQuote.Request.saveDraftCta',\n errorHeader: 'NegotiableQuote.Request.error.header',\n unauthenticated: 'NegotiableQuote.Request.error.unauthenticated',\n unauthorized: 'NegotiableQuote.Request.error.unauthorized',\n missingCart: 'NegotiableQuote.Request.error.missingCart',\n successHeader: 'NegotiableQuote.Request.success.header',\n submitSuccess: 'NegotiableQuote.Request.success.submitted',\n draftSuccess: 'NegotiableQuote.Request.success.draftSaved',\n });\n\n useEffect(() => {\n const permissionsEvent = events.on(\n 'quote-management/permissions',\n (permissions: typeof state.permissions) => {\n setError(undefined);\n if (!permissions.requestQuote) {\n setError(dictionary.unauthorized);\n setIsFormDisabled(true);\n }\n },\n { eager: true }\n );\n return () => permissionsEvent?.off();\n }, [dictionary.unauthorized]);\n\n useEffect(() => {\n const authenticatedEvent = events.on(\n 'authenticated',\n (authenticated: boolean) => {\n setError(undefined);\n if (!authenticated) {\n setError(dictionary.unauthenticated);\n setIsFormDisabled(true);\n }\n },\n { eager: true }\n );\n return () => authenticatedEvent?.off();\n }, [dictionary.unauthenticated]);\n\n useEffect(() => {\n if (!cartId) {\n setError(dictionary.missingCart);\n setIsFormDisabled(true);\n }\n }, [cartId, dictionary.missingCart]);\n\n useEffect(() => {\n if (error) {\n onError?.({ error, isFormDisabled, setIsFormDisabled });\n }\n }, [error, onError, isFormDisabled]);\n\n const handleAttachFiles = useCallback(async (files: File[]) => {\n setFormErrors(prev => ({ ...prev, attachments: '' }));\n setAttachments(files);\n onAttachFiles?.(files)?.catch(() => {\n setFormErrors(prev => ({ ...prev, attachments: dictionary.attachmentsError }));\n });\n }, [onAttachFiles, dictionary]);\n\n /*\n * This function is used to get the banner node.\n * It can be used to render a success or error banner depending on the success or error state.\n */\n const getBannerNode = () => {\n let inlineAlertProps: InLineAlertProps | undefined;\n let slotProps: any | undefined;\n\n if (success) {\n slotProps = {\n name: 'SuccessBanner',\n slot: slots?.SuccessBanner,\n context: {\n message: success,\n },\n 'data-testid': 'form-success-banner',\n };\n inlineAlertProps = {\n type: 'success',\n variant: 'primary',\n icon: <CheckWithCircle />,\n heading: dictionary.successHeader,\n description: success,\n className: 'request-negotiable-quote-form__success-banner',\n };\n }\n else if (error) {\n slotProps = {\n name: 'ErrorBanner',\n slot: slots?.ErrorBanner,\n context: {\n message: error,\n },\n 'data-testid': 'form-error-banner',\n };\n inlineAlertProps = {\n type: 'error',\n variant: 'primary',\n icon: <WarningFilled />,\n heading: dictionary.errorHeader,\n description: error,\n className: 'request-negotiable-quote-form__error-banner',\n };\n }\n\n if (slotProps && inlineAlertProps) {\n return <Slot {...slotProps}>\n <InLineAlert {...inlineAlertProps} />\n </Slot>;\n }\n\n return undefined;\n }\n\n /*\n * This function is used to validate the parent form of the button that was clicked.\n */\n const validateParentForm = (e: Event) => {\n setFormErrors({});\n const closestForm = (e.target as HTMLElement).closest('form') as HTMLFormElement;\n const formErrors = getFormErrors(closestForm);\n if (Object.keys(formErrors).length > 0) {\n setFormErrors(formErrors);\n onSubmitErrors?.(formErrors);\n }\n };\n\n const formSubmitHandler = (e: Event) => {\n e.preventDefault();\n setIsFormDisabled(true);\n\n const form = (e.target as HTMLFormElement);\n\n const currentFormErrors = getFormErrors(form);\n\n const mergedFormErrors = { ...currentFormErrors, ...formErrors };\n\n if (Object.keys(mergedFormErrors).length > 0) {\n onSubmitErrors?.(mergedFormErrors)\n return;\n }\n\n // Since we have multiple submit buttons, we need to determine which one was clicked.\n const buttonTarget = (e as SubmitEvent).submitter as HTMLButtonElement;\n\n const formValues = getFormValues(form);\n\n setComment(formValues.comment);\n setQuoteName(formValues.quoteName);\n\n const isDraft = buttonTarget?.dataset?.draft === 'true' || false;\n\n const contextData: RequestNegotiableQuoteInput = {\n cartId: cartId!,\n quoteName: formValues.quoteName,\n comment: formValues.comment,\n isDraft,\n }\n\n let submitHandler;\n let successMessage;\n\n if (isDraft) {\n submitHandler = onSaveNegotiableQuote ?? requestNegotiableQuote;\n successMessage = dictionary.draftSuccess;\n } else {\n submitHandler = onRequestNegotiableQuote ?? requestNegotiableQuote;\n successMessage = dictionary.submitSuccess;\n }\n\n submitHandler(contextData).then(() => {\n setSuccess(successMessage);\n })\n .catch(error => {\n setError(error.message);\n })\n };\n\n const titleNode = (\n <Slot name=\"Title\" slot={slots?.Title} context={{ text: dictionary.title }}>\n <span data-testid=\"form-title\">{dictionary.title}</span>\n </Slot>\n );\n\n const commentFieldNode = (\n <Slot\n name=\"CommentField\"\n slot={slots?.CommentField}\n context={{\n value: comment,\n required: true,\n errorMessage: formErrors.comment,\n setFormErrors,\n isFormDisabled\n } as any}\n >\n <TextArea\n name=\"comment\"\n value={comment}\n label={dictionary.comment}\n required\n autoComplete=\"off\"\n data-testid=\"form-comment-field\"\n errorMessage={formErrors.comment}\n disabled={isFormDisabled}\n />\n </Slot>\n );\n\n const quoteNameFieldNode = (\n <Slot\n name=\"QuoteNameField\"\n slot={slots?.QuoteNameField}\n context={{\n value: quoteName,\n required: true,\n errorMessage: formErrors.quoteName,\n setFormErrors,\n isFormDisabled\n } as any}\n >\n <Field\n error={formErrors.quoteName}\n disabled={isFormDisabled}\n >\n <Input\n value={quoteName}\n name=\"quoteName\"\n floatingLabel={dictionary.quoteName}\n required\n autoComplete=\"off\"\n data-testid=\"form-quote-name-field\"\n />\n </Field>\n </Slot>\n );\n\n const attachFileNode = (\n <Slot\n name=\"AttachFileField\"\n slot={slots?.AttachFileField}\n context={{ onChange: handleAttachFiles, formErrors, isFormDisabled }}\n >\n <InputFile\n onChange={(e: any) => {\n const files = Array.from(((e.target as HTMLInputElement).files!));\n\n if (files.length > 0) {\n handleAttachFiles(files)\n }\n }}\n icon={<Add />}\n disabled={isFormDisabled}\n data-testid=\"form-attach-file-field\"\n />\n </Slot>\n );\n\n const requestButtonNode = (\n <Slot\n name=\"RequestButton\"\n slot={slots?.RequestButton}\n context={\n {\n requestNegotiableQuote,\n formErrors,\n isFormDisabled,\n setIsFormDisabled\n }\n }\n >\n <Button\n type=\"submit\"\n data-testid=\"form-request-button\"\n onClick={validateParentForm}\n disabled={isFormDisabled}\n >\n {dictionary.requestCta}\n </Button>\n </Slot>\n );\n\n const saveButtonNode = (\n <Slot\n name=\"SaveDraftButton\"\n slot={slots?.SaveDraftButton}\n context={\n {\n requestNegotiableQuote,\n formErrors,\n isFormDisabled,\n setIsFormDisabled\n }\n }\n >\n <Button\n type=\"submit\"\n data-draft=\"true\"\n variant=\"secondary\"\n data-testid=\"form-save-draft-button\"\n onClick={validateParentForm}\n disabled={isFormDisabled}\n >\n {dictionary.saveDraftCta}\n </Button>\n </Slot>\n );\n\n return (\n <RequestNegotiableQuoteFormComponent\n title={titleNode}\n banner={getBannerNode()}\n commentField={commentFieldNode}\n quoteNameField={quoteNameFieldNode}\n attachFile={attachFileNode}\n requestButton={requestButtonNode}\n saveButton={saveButtonNode}\n onSubmit={formSubmitHandler}\n className={className}\n disabled={isFormDisabled}\n data-testid=\"form-container\"\n />\n );\n};\n"],"names":["SvgAdd","props","React","SvgCheckWithCircle","RequestNegotiableQuoteForm","className","title","banner","commentField","quoteNameField","attachFile","requestButton","saveButton","onSubmit","jsxs","classes","jsx","VComponent","cartId","slots","onRequestNegotiableQuote","onSaveNegotiableQuote","onAttachFiles","onSubmitErrors","onError","comment","setComment","useState","quoteName","setQuoteName","setAttachments","error","setError","formErrors","setFormErrors","success","setSuccess","isFormDisabled","setIsFormDisabled","dictionary","useText","useEffect","permissionsEvent","events","permissions","authenticatedEvent","authenticated","handleAttachFiles","useCallback","files","prev","_a","getBannerNode","inlineAlertProps","slotProps","CheckWithCircle","WarningFilled","Slot","InLineAlert","validateParentForm","e","closestForm","getFormErrors","formSubmitHandler","form","mergedFormErrors","buttonTarget","formValues","getFormValues","isDraft","contextData","submitHandler","successMessage","requestNegotiableQuote","titleNode","commentFieldNode","TextArea","quoteNameFieldNode","Field","Input","attachFileNode","InputFile","Add","requestButtonNode","Button","saveButtonNode","RequestNegotiableQuoteFormComponent"],"mappings":"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","x_google_ignoreList":[0,1]}
|
|
1
|
+
{"version":3,"file":"RequestNegotiableQuoteForm.js","sources":["../../node_modules/@adobe-commerce/elsie/src/icons/Add.svg","../../node_modules/@adobe-commerce/elsie/src/icons/CheckWithCircle.svg","/@dropins/storefront-quote-management/src/components/RequestNegotiableQuoteForm/RequestNegotiableQuoteForm.tsx","/@dropins/storefront-quote-management/src/containers/RequestNegotiableQuoteForm/RequestNegotiableQuoteForm.tsx"],"sourcesContent":["import * as React from \"react\";\nconst SvgAdd = (props) => /* @__PURE__ */ React.createElement(\"svg\", { id: \"Icon_Add_Base\", \"data-name\": \"Icon \\\\u2013 Add \\\\u2013 Base\", xmlns: \"http://www.w3.org/2000/svg\", width: 24, height: 24, viewBox: \"0 0 24 24\", ...props }, /* @__PURE__ */ React.createElement(\"g\", { id: \"Large\" }, /* @__PURE__ */ React.createElement(\"rect\", { id: \"Placement_area\", \"data-name\": \"Placement area\", width: 24, height: 24, fill: \"#fff\", opacity: 0 }), /* @__PURE__ */ React.createElement(\"g\", { id: \"Add_icon\", \"data-name\": \"Add icon\", transform: \"translate(9.734 9.737)\" }, /* @__PURE__ */ React.createElement(\"line\", { vectorEffect: \"non-scaling-stroke\", id: \"Line_579\", \"data-name\": \"Line 579\", y2: 12.7, transform: \"translate(2.216 -4.087)\", fill: \"none\", stroke: \"currentColor\" }), /* @__PURE__ */ React.createElement(\"line\", { vectorEffect: \"non-scaling-stroke\", id: \"Line_580\", \"data-name\": \"Line 580\", x2: 12.7, transform: \"translate(-4.079 2.263)\", fill: \"none\", stroke: \"currentColor\" }))));\nexport default SvgAdd;\n","import * as React from \"react\";\nconst SvgCheckWithCircle = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M0.75 12C0.75 5.78421 5.78421 0.75 12 0.75C18.2158 0.75 23.25 5.78421 23.25 12C23.25 18.2158 18.2158 23.25 12 23.25C5.78421 23.25 0.75 18.2158 0.75 12Z\", stroke: \"currentColor\" }), /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M6.75 12.762L10.2385 15.75L17.25 9\", stroke: \"currentColor\" }));\nexport default SvgCheckWithCircle;\n","/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nimport { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\nimport { classes, VComponent } from '@adobe-commerce/elsie/lib';\nimport '@/quote-management/components/RequestNegotiableQuoteForm/RequestNegotiableQuoteForm.css';\n\nexport interface RequestNegotiableQuoteFormProps extends Omit<HTMLAttributes<HTMLFormElement>, 'title'> {\n title: VNode;\n banner?: VNode;\n commentField?: VNode;\n quoteNameField?: VNode;\n attachFile?: VNode;\n requestButton?: VNode;\n saveButton?: VNode;\n onSubmit: (e: Event) => void;\n}\n\nexport const RequestNegotiableQuoteForm: FunctionComponent<RequestNegotiableQuoteFormProps> = ({\n className,\n title,\n banner,\n commentField,\n quoteNameField,\n attachFile,\n requestButton,\n saveButton,\n onSubmit,\n ...props\n}) => {\n return (\n <form {...props} className={classes(['request-negotiable-quote-form', className])} onSubmit={onSubmit}>\n {banner &&\n <VComponent\n node={banner}\n className={classes(['request-negotiable-quote-form__banner'])}\n />\n }\n {title &&\n <VComponent\n node={title}\n className={classes(['request-negotiable-quote-form__title'])}\n />\n }\n {commentField &&\n <VComponent\n node={commentField}\n className={classes(['request-negotiable-quote-form__comment-field'])}\n />\n }\n {quoteNameField &&\n <VComponent\n node={quoteNameField}\n className={classes(['request-negotiable-quote-form__quote-name-field'])}\n />\n }\n {attachFile &&\n <VComponent\n node={attachFile}\n className={classes(['request-negotiable-quote-form__attach-file-field'])}\n />\n }\n <div className={classes(['request-negotiable-quote-form__actions'])}>\n {requestButton &&\n <VComponent\n node={requestButton}\n className={classes(['request-negotiable-quote-form__request-button'])}\n />\n }\n {saveButton &&\n <VComponent\n node={saveButton}\n className={classes(['request-negotiable-quote-form__save-button'])}\n />\n }\n </div>\n </form>\n );\n};\n","/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nimport { HTMLAttributes, useCallback, useEffect, useState } from 'preact/compat';\nimport { Container, getFormErrors, getFormValues, Slot, SlotProps } from '@adobe-commerce/elsie/lib';\nimport { InLineAlert, Button, InputFile, TextArea, Input, Field, InLineAlertProps } from '@adobe-commerce/elsie/components';\nimport { WarningFilled, CheckWithCircle, Add } from '@adobe-commerce/elsie/icons';\nimport RequestNegotiableQuoteFormComponent from '@/quote-management/components/RequestNegotiableQuoteForm';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { events } from '@adobe-commerce/event-bus';\nimport { requestNegotiableQuote, RequestNegotiableQuoteInput, uploadFile } from '@/quote-management/api';\nimport { state } from '@/quote-management/lib/state';\n\nexport type RequestNegotiableQuoteHandlers = {\n onAttachFiles?: (files: File[]) => Promise<void>;\n onRequestNegotiableQuote?: typeof requestNegotiableQuote;\n onSaveNegotiableQuote?: typeof requestNegotiableQuote;\n onSubmitErrors?: (errors: Record<string, string>) => void;\n onError?: (props: {\n error: string,\n isFormDisabled: boolean,\n setIsFormDisabled: (isFormDisabled: boolean) => void,\n }) => void;\n};\n\nexport interface RequestNegotiableQuoteFormProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'onError'>,\n RequestNegotiableQuoteHandlers {\n cartId: string;\n slots?: {\n ErrorBanner?: SlotProps<{\n message: string,\n }>;\n SuccessBanner?: SlotProps<{\n message: string,\n }>;\n Title?: SlotProps<{\n text: string,\n }>;\n CommentField?: SlotProps<{\n formErrors: Record<string, string>;\n isFormDisabled: boolean;\n setFormErrors: (errors: Record<string, string>) => void;\n }>;\n QuoteNameField?: SlotProps<{\n formErrors: Record<string, string>;\n isFormDisabled: boolean;\n setFormErrors: (errors: Record<string, string>) => void;\n }>;\n AttachFileField?: SlotProps<{\n onChange: (files: File[]) => void, formErrors: Record<string, string>,\n isFormDisabled: boolean\n }>;\n RequestButton?: SlotProps<{\n requestNegotiableQuote: typeof requestNegotiableQuote;\n formErrors: Record<string, string>;\n isFormDisabled: boolean;\n setIsFormDisabled: (isFormDisabled: boolean) => void;\n }>;\n SaveDraftButton?: SlotProps<{\n requestNegotiableQuote: typeof requestNegotiableQuote;\n formErrors: Record<string, string>;\n isFormDisabled: boolean;\n setIsFormDisabled: (isFormDisabled: boolean) => void;\n }>;\n };\n}\n\nexport const RequestNegotiableQuoteForm: Container<RequestNegotiableQuoteFormProps> = ({\n cartId,\n slots,\n onRequestNegotiableQuote,\n onSaveNegotiableQuote,\n onAttachFiles,\n onSubmitErrors,\n onError,\n className,\n}) => {\n const [comment, setComment] = useState<string | undefined>(undefined);\n const [quoteName, setQuoteName] = useState<string | undefined>(undefined);\n const [attachmentKeys, setAttachmentKeys] = useState<{ key: string }[]>([]);\n const [error, setError] = useState<string | undefined>(undefined);\n const [formErrors, setFormErrors] = useState<Record<string, string>>({});\n const [success, setSuccess] = useState<string | undefined>(undefined);\n const [isFormDisabled, setIsFormDisabled] = useState<boolean>(false);\n\n const dictionary = useText({\n title: 'NegotiableQuote.Request.title',\n comment: 'NegotiableQuote.Request.comment',\n commentError: 'NegotiableQuote.Request.commentError',\n quoteName: 'NegotiableQuote.Request.quoteName',\n quoteNameError: 'NegotiableQuote.Request.quoteNameError',\n attachmentsError: 'NegotiableQuote.Request.attachmentsError',\n requestCta: 'NegotiableQuote.Request.requestCta',\n saveDraftCta: 'NegotiableQuote.Request.saveDraftCta',\n errorHeader: 'NegotiableQuote.Request.error.header',\n unauthenticated: 'NegotiableQuote.Request.error.unauthenticated',\n unauthorized: 'NegotiableQuote.Request.error.unauthorized',\n missingCart: 'NegotiableQuote.Request.error.missingCart',\n successHeader: 'NegotiableQuote.Request.success.header',\n submitSuccess: 'NegotiableQuote.Request.success.submitted',\n draftSuccess: 'NegotiableQuote.Request.success.draftSaved',\n });\n\n useEffect(() => {\n const permissionsEvent = events.on(\n 'quote-management/permissions',\n (permissions: typeof state.permissions) => {\n setError(undefined);\n if (!permissions.requestQuote) {\n setError(dictionary.unauthorized);\n setIsFormDisabled(true);\n }\n },\n { eager: true }\n );\n return () => permissionsEvent?.off();\n }, [dictionary.unauthorized]);\n\n useEffect(() => {\n const authenticatedEvent = events.on(\n 'authenticated',\n (authenticated: boolean) => {\n setError(undefined);\n if (!authenticated) {\n setError(dictionary.unauthenticated);\n setIsFormDisabled(true);\n }\n },\n { eager: true }\n );\n return () => authenticatedEvent?.off();\n }, [dictionary.unauthenticated]);\n\n useEffect(() => {\n if (!cartId) {\n setError(dictionary.missingCart);\n setIsFormDisabled(true);\n }\n }, [cartId, dictionary.missingCart]);\n\n useEffect(() => {\n if (error) {\n onError?.({ error, isFormDisabled, setIsFormDisabled });\n }\n }, [error, onError, isFormDisabled]);\n\n const handleAttachFiles = useCallback(async (files: File[]) => {\n /* istanbul ignore next: defensive guard; */\n if (!files?.length) return;\n\n setFormErrors(prev => ({ ...prev, attachments: '' }));\n\n if (onAttachFiles) {\n try {\n await onAttachFiles(files);\n } catch {\n setFormErrors(prev => ({ ...prev, attachments: dictionary.attachmentsError }));\n }\n return;\n }\n\n try {\n const uploaded = await Promise.all(files.map(uploadFile));\n setAttachmentKeys(uploaded.map(({ key }) => ({ key })));\n } catch {\n setFormErrors(prev => ({ ...prev, attachments: dictionary.attachmentsError }));\n }\n }, [onAttachFiles, dictionary]);\n\n /*\n * This function is used to get the banner node.\n * It can be used to render a success or error banner depending on the success or error state.\n */\n const getBannerNode = () => {\n let inlineAlertProps: InLineAlertProps | undefined;\n let slotProps: any | undefined;\n\n if (success) {\n slotProps = {\n name: 'SuccessBanner',\n slot: slots?.SuccessBanner,\n context: {\n message: success,\n },\n 'data-testid': 'form-success-banner',\n };\n inlineAlertProps = {\n type: 'success',\n variant: 'primary',\n icon: <CheckWithCircle />,\n heading: dictionary.successHeader,\n description: success,\n className: 'request-negotiable-quote-form__success-banner',\n };\n }\n else if (error) {\n slotProps = {\n name: 'ErrorBanner',\n slot: slots?.ErrorBanner,\n context: {\n message: error,\n },\n 'data-testid': 'form-error-banner',\n };\n inlineAlertProps = {\n type: 'error',\n variant: 'primary',\n icon: <WarningFilled />,\n heading: dictionary.errorHeader,\n description: error,\n className: 'request-negotiable-quote-form__error-banner',\n };\n }\n\n if (slotProps && inlineAlertProps) {\n return <Slot {...slotProps}>\n <InLineAlert {...inlineAlertProps} />\n </Slot>;\n }\n\n return undefined;\n }\n\n /*\n * This function is used to validate the parent form of the button that was clicked.\n */\n const validateParentForm = (e: Event) => {\n setFormErrors({});\n const closestForm = (e.target as HTMLElement).closest('form') as HTMLFormElement;\n const formErrors = getFormErrors(closestForm);\n if (Object.keys(formErrors).length > 0) {\n setFormErrors(formErrors);\n onSubmitErrors?.(formErrors);\n }\n };\n\n const formSubmitHandler = (e: Event) => {\n e.preventDefault();\n setIsFormDisabled(true);\n\n const form = (e.target as HTMLFormElement);\n\n const currentFormErrors = getFormErrors(form);\n\n const mergedFormErrors = { ...currentFormErrors, ...formErrors };\n\n if (Object.keys(mergedFormErrors).length > 0) {\n onSubmitErrors?.(mergedFormErrors)\n return;\n }\n\n // Since we have multiple submit buttons, we need to determine which one was clicked.\n const buttonTarget = (e as SubmitEvent).submitter as HTMLButtonElement;\n\n const formValues = getFormValues(form);\n\n setComment(formValues.comment);\n setQuoteName(formValues.quoteName);\n\n const isDraft = buttonTarget?.dataset?.draft === 'true' || false;\n\n const contextData: RequestNegotiableQuoteInput = {\n cartId: cartId!,\n quoteName: formValues.quoteName,\n comment: formValues.comment,\n attachments: attachmentKeys,\n isDraft,\n }\n\n let submitHandler;\n let successMessage;\n\n if (isDraft) {\n submitHandler = onSaveNegotiableQuote ?? requestNegotiableQuote;\n successMessage = dictionary.draftSuccess;\n } else {\n submitHandler = onRequestNegotiableQuote ?? requestNegotiableQuote;\n successMessage = dictionary.submitSuccess;\n }\n\n submitHandler(contextData).then(() => {\n setSuccess(successMessage);\n })\n .catch(error => {\n setError(error.message);\n })\n };\n\n const titleNode = (\n <Slot name=\"Title\" slot={slots?.Title} context={{ text: dictionary.title }}>\n <span data-testid=\"form-title\">{dictionary.title}</span>\n </Slot>\n );\n\n const commentFieldNode = (\n <Slot\n name=\"CommentField\"\n slot={slots?.CommentField}\n context={{\n value: comment,\n required: true,\n errorMessage: formErrors.comment,\n setFormErrors,\n isFormDisabled\n } as any}\n >\n <TextArea\n name=\"comment\"\n value={comment}\n label={dictionary.comment}\n required\n autoComplete=\"off\"\n data-testid=\"form-comment-field\"\n errorMessage={formErrors.comment}\n disabled={isFormDisabled}\n />\n </Slot>\n );\n\n const quoteNameFieldNode = (\n <Slot\n name=\"QuoteNameField\"\n slot={slots?.QuoteNameField}\n context={{\n value: quoteName,\n required: true,\n errorMessage: formErrors.quoteName,\n setFormErrors,\n isFormDisabled\n } as any}\n >\n <Field\n error={formErrors.quoteName}\n disabled={isFormDisabled}\n >\n <Input\n value={quoteName}\n name=\"quoteName\"\n floatingLabel={dictionary.quoteName}\n required\n autoComplete=\"off\"\n data-testid=\"form-quote-name-field\"\n />\n </Field>\n </Slot>\n );\n\n const attachFileNode = (\n <Slot\n name=\"AttachFileField\"\n slot={slots?.AttachFileField}\n context={{ onChange: handleAttachFiles, formErrors, isFormDisabled }}\n >\n <InputFile\n onChange={(e: Event) => {\n const target = e.target as HTMLInputElement;\n const fileList = target?.files;\n const files = fileList ? Array.from(fileList) : [];\n\n if (files.length > 0) {\n void handleAttachFiles(files);\n }\n }}\n icon={<Add />}\n disabled={isFormDisabled}\n data-testid=\"form-attach-file-field\"\n />\n </Slot>\n );\n\n const requestButtonNode = (\n <Slot\n name=\"RequestButton\"\n slot={slots?.RequestButton}\n context={\n {\n requestNegotiableQuote,\n formErrors,\n isFormDisabled,\n setIsFormDisabled\n }\n }\n >\n <Button\n type=\"submit\"\n data-testid=\"form-request-button\"\n onClick={validateParentForm}\n disabled={isFormDisabled}\n >\n {dictionary.requestCta}\n </Button>\n </Slot>\n );\n\n const saveButtonNode = (\n <Slot\n name=\"SaveDraftButton\"\n slot={slots?.SaveDraftButton}\n context={\n {\n requestNegotiableQuote,\n formErrors,\n isFormDisabled,\n setIsFormDisabled\n }\n }\n >\n <Button\n type=\"submit\"\n data-draft=\"true\"\n variant=\"secondary\"\n data-testid=\"form-save-draft-button\"\n onClick={validateParentForm}\n disabled={isFormDisabled}\n >\n {dictionary.saveDraftCta}\n </Button>\n </Slot>\n );\n\n return (\n <RequestNegotiableQuoteFormComponent\n title={titleNode}\n banner={getBannerNode()}\n commentField={commentFieldNode}\n quoteNameField={quoteNameFieldNode}\n attachFile={attachFileNode}\n requestButton={requestButtonNode}\n saveButton={saveButtonNode}\n onSubmit={formSubmitHandler}\n className={className}\n disabled={isFormDisabled}\n data-testid=\"form-container\"\n />\n );\n};\n"],"names":["SvgAdd","props","React","SvgCheckWithCircle","RequestNegotiableQuoteForm","className","title","banner","commentField","quoteNameField","attachFile","requestButton","saveButton","onSubmit","jsxs","classes","jsx","VComponent","cartId","slots","onRequestNegotiableQuote","onSaveNegotiableQuote","onAttachFiles","onSubmitErrors","onError","comment","setComment","useState","quoteName","setQuoteName","attachmentKeys","setAttachmentKeys","error","setError","formErrors","setFormErrors","success","setSuccess","isFormDisabled","setIsFormDisabled","dictionary","useText","useEffect","permissionsEvent","events","permissions","authenticatedEvent","authenticated","handleAttachFiles","useCallback","files","prev","uploaded","uploadFile","key","getBannerNode","inlineAlertProps","slotProps","CheckWithCircle","WarningFilled","Slot","InLineAlert","validateParentForm","e","closestForm","getFormErrors","formSubmitHandler","form","mergedFormErrors","buttonTarget","formValues","getFormValues","isDraft","_a","contextData","submitHandler","successMessage","requestNegotiableQuote","titleNode","commentFieldNode","TextArea","quoteNameFieldNode","Field","Input","attachFileNode","InputFile","target","fileList","Add","requestButtonNode","Button","saveButtonNode","RequestNegotiableQuoteFormComponent"],"mappings":"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","x_google_ignoreList":[0,1]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { HTMLAttributes } from 'preact/compat';
|
|
2
|
+
import { Container } from '@dropins/tools/types/elsie/src/lib';
|
|
3
|
+
import { NegotiableQuoteModel } from '../../data/models/negotiable-quote-model';
|
|
4
|
+
|
|
5
|
+
export interface ShippingAddressDisplayProps extends Omit<HTMLAttributes<HTMLDivElement>, 'loading'> {
|
|
6
|
+
quoteData?: NegotiableQuoteModel;
|
|
7
|
+
loading?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare const ShippingAddressDisplay: Container<ShippingAddressDisplayProps>;
|
|
10
|
+
//# sourceMappingURL=ShippingAddressDisplay.d.ts.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/********************************************************************
|
|
2
|
+
* Copyright 2025 Adobe
|
|
3
|
+
* All Rights Reserved.
|
|
4
|
+
*
|
|
5
|
+
* NOTICE: Adobe permits you to use, modify, and distribute this
|
|
6
|
+
* file in accordance with the terms of the Adobe license agreement
|
|
7
|
+
* accompanying it.
|
|
8
|
+
*******************************************************************/
|
|
9
|
+
export { ShippingAddressDisplay } from './ShippingAddressDisplay';
|
|
10
|
+
export type { ShippingAddressDisplayProps } from './ShippingAddressDisplay';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './ShippingAddressDisplay/index'
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/*! Copyright 2025 Adobe
|
|
2
|
+
All Rights Reserved. */
|
|
3
|
+
import{S as d}from"../chunks/ShippingAddressDisplay.js";import"@dropins/tools/preact-jsx-runtime.js";import"@dropins/tools/preact-compat.js";import"@dropins/tools/lib.js";import"@dropins/tools/components.js";import"@dropins/tools/i18n.js";import"@dropins/tools/event-bus.js";export{d as ShippingAddressDisplay};
|
|
4
|
+
//# sourceMappingURL=ShippingAddressDisplay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ShippingAddressDisplay.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
package/containers/index.d.ts
CHANGED
|
@@ -2,4 +2,7 @@ export * from './RequestNegotiableQuoteForm';
|
|
|
2
2
|
export * from './ManageNegotiableQuote';
|
|
3
3
|
export * from './ItemsQuoted';
|
|
4
4
|
export * from './QuotesListTable';
|
|
5
|
+
export * from './QuoteHistoryLog';
|
|
6
|
+
export * from './ShippingAddressDisplay';
|
|
7
|
+
export * from './QuoteCommentsList';
|
|
5
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -40,7 +40,13 @@ export interface NegotiableQuoteModel {
|
|
|
40
40
|
firstname: string;
|
|
41
41
|
lastname: string;
|
|
42
42
|
};
|
|
43
|
+
text: string;
|
|
44
|
+
attachments?: {
|
|
45
|
+
name: string;
|
|
46
|
+
url: string;
|
|
47
|
+
}[];
|
|
43
48
|
}[];
|
|
49
|
+
history?: NegotiableQuoteHistoryEntry[];
|
|
44
50
|
prices: {
|
|
45
51
|
subtotalExcludingTax?: Currency;
|
|
46
52
|
subtotalIncludingTax?: Currency;
|
|
@@ -99,6 +105,16 @@ export interface NegotiableQuoteCartItem {
|
|
|
99
105
|
price: Currency;
|
|
100
106
|
}[];
|
|
101
107
|
}[];
|
|
108
|
+
noteFromBuyer?: ItemNote[];
|
|
109
|
+
noteFromSeller?: ItemNote[];
|
|
110
|
+
}
|
|
111
|
+
export interface ItemNote {
|
|
112
|
+
createdAt: string;
|
|
113
|
+
creatorId: number;
|
|
114
|
+
creatorType: number;
|
|
115
|
+
negotiableQuoteItemUid: string;
|
|
116
|
+
note: string;
|
|
117
|
+
noteUid: string;
|
|
102
118
|
}
|
|
103
119
|
export interface Currency {
|
|
104
120
|
value: number;
|
|
@@ -136,6 +152,54 @@ export interface NegotiableQuotesListModel {
|
|
|
136
152
|
}>;
|
|
137
153
|
};
|
|
138
154
|
}
|
|
155
|
+
export interface NegotiableQuoteHistoryEntry {
|
|
156
|
+
author: {
|
|
157
|
+
firstname: string;
|
|
158
|
+
lastname: string;
|
|
159
|
+
};
|
|
160
|
+
changeType: NegotiableQuoteHistoryEntryChangeType;
|
|
161
|
+
changes: {
|
|
162
|
+
commentAdded?: {
|
|
163
|
+
comment: string;
|
|
164
|
+
};
|
|
165
|
+
customChanges?: {
|
|
166
|
+
new_value: string;
|
|
167
|
+
old_value: string;
|
|
168
|
+
title: string;
|
|
169
|
+
};
|
|
170
|
+
expiration?: {
|
|
171
|
+
newExpiration: string;
|
|
172
|
+
oldExpiration: string;
|
|
173
|
+
};
|
|
174
|
+
productsRemoved?: {
|
|
175
|
+
productsRemovedFromCatalog: string[];
|
|
176
|
+
productsRemovedFromQuote?: {
|
|
177
|
+
uid: string;
|
|
178
|
+
name: string;
|
|
179
|
+
sku: string;
|
|
180
|
+
quantity: number;
|
|
181
|
+
}[];
|
|
182
|
+
};
|
|
183
|
+
statuses?: {
|
|
184
|
+
changes: {
|
|
185
|
+
newStatus: string;
|
|
186
|
+
oldStatus: string;
|
|
187
|
+
}[];
|
|
188
|
+
};
|
|
189
|
+
total?: {
|
|
190
|
+
newPrice: Currency;
|
|
191
|
+
oldPrice: Currency;
|
|
192
|
+
};
|
|
193
|
+
};
|
|
194
|
+
createdAt: string;
|
|
195
|
+
uid: string;
|
|
196
|
+
}
|
|
197
|
+
export declare enum NegotiableQuoteHistoryEntryChangeType {
|
|
198
|
+
CREATED = "CREATED",
|
|
199
|
+
UPDATED = "UPDATED",
|
|
200
|
+
CLOSED = "CLOSED",
|
|
201
|
+
UPDATED_BY_SYSTEM = "UPDATED_BY_SYSTEM"
|
|
202
|
+
}
|
|
139
203
|
export declare enum NegotiableQuoteStatus {
|
|
140
204
|
NEW = "NEW",
|
|
141
205
|
SUBMITTED = "SUBMITTED",
|
|
@@ -35,6 +35,22 @@ export declare const mockGraphQLResponse: {
|
|
|
35
35
|
};
|
|
36
36
|
};
|
|
37
37
|
quantity: number;
|
|
38
|
+
note_from_buyer: {
|
|
39
|
+
created_at: string;
|
|
40
|
+
creator_id: number;
|
|
41
|
+
creator_type: number;
|
|
42
|
+
negotiable_quote_item_uid: string;
|
|
43
|
+
note: string;
|
|
44
|
+
note_uid: string;
|
|
45
|
+
}[];
|
|
46
|
+
note_from_seller: {
|
|
47
|
+
created_at: string;
|
|
48
|
+
creator_id: number;
|
|
49
|
+
creator_type: number;
|
|
50
|
+
negotiable_quote_item_uid: string;
|
|
51
|
+
note: string;
|
|
52
|
+
note_uid: string;
|
|
53
|
+
}[];
|
|
38
54
|
}[];
|
|
39
55
|
prices: {
|
|
40
56
|
subtotal_excluding_tax: {
|
|
@@ -124,6 +140,22 @@ export declare const mockQuoteData: {
|
|
|
124
140
|
}[];
|
|
125
141
|
};
|
|
126
142
|
quantity: number;
|
|
143
|
+
note_from_buyer: {
|
|
144
|
+
created_at: string;
|
|
145
|
+
creator_id: number;
|
|
146
|
+
creator_type: number;
|
|
147
|
+
negotiable_quote_item_uid: string;
|
|
148
|
+
note: string;
|
|
149
|
+
note_uid: string;
|
|
150
|
+
}[];
|
|
151
|
+
note_from_seller: {
|
|
152
|
+
created_at: string;
|
|
153
|
+
creator_id: number;
|
|
154
|
+
creator_type: number;
|
|
155
|
+
negotiable_quote_item_uid: string;
|
|
156
|
+
note: string;
|
|
157
|
+
note_uid: string;
|
|
158
|
+
}[];
|
|
127
159
|
configurable_options?: undefined;
|
|
128
160
|
bundle_options?: undefined;
|
|
129
161
|
} | {
|
|
@@ -169,6 +201,15 @@ export declare const mockQuoteData: {
|
|
|
169
201
|
option_label: string;
|
|
170
202
|
value_label: string;
|
|
171
203
|
}[];
|
|
204
|
+
note_from_buyer: {
|
|
205
|
+
created_at: string;
|
|
206
|
+
creator_id: number;
|
|
207
|
+
creator_type: number;
|
|
208
|
+
negotiable_quote_item_uid: string;
|
|
209
|
+
note: string;
|
|
210
|
+
note_uid: string;
|
|
211
|
+
}[];
|
|
212
|
+
note_from_seller: never[];
|
|
172
213
|
bundle_options?: undefined;
|
|
173
214
|
} | {
|
|
174
215
|
product: {
|
|
@@ -231,6 +272,22 @@ export declare const mockQuoteData: {
|
|
|
231
272
|
};
|
|
232
273
|
}[];
|
|
233
274
|
}[];
|
|
275
|
+
note_from_buyer: {
|
|
276
|
+
created_at: string;
|
|
277
|
+
creator_id: number;
|
|
278
|
+
creator_type: number;
|
|
279
|
+
negotiable_quote_item_uid: string;
|
|
280
|
+
note: string;
|
|
281
|
+
note_uid: string;
|
|
282
|
+
}[];
|
|
283
|
+
note_from_seller: {
|
|
284
|
+
created_at: string;
|
|
285
|
+
creator_id: number;
|
|
286
|
+
creator_type: number;
|
|
287
|
+
negotiable_quote_item_uid: string;
|
|
288
|
+
note: string;
|
|
289
|
+
note_uid: string;
|
|
290
|
+
}[];
|
|
234
291
|
configurable_options?: undefined;
|
|
235
292
|
})[];
|
|
236
293
|
history: {
|
|
@@ -331,6 +388,15 @@ export declare const mockNegotiableQuotesResponse: {
|
|
|
331
388
|
};
|
|
332
389
|
};
|
|
333
390
|
quantity: number;
|
|
391
|
+
note_from_buyer: {
|
|
392
|
+
created_at: string;
|
|
393
|
+
creator_id: number;
|
|
394
|
+
creator_type: number;
|
|
395
|
+
negotiable_quote_item_uid: string;
|
|
396
|
+
note: string;
|
|
397
|
+
note_uid: string;
|
|
398
|
+
}[];
|
|
399
|
+
note_from_seller: never[];
|
|
334
400
|
}[];
|
|
335
401
|
prices: {
|
|
336
402
|
subtotal_excluding_tax: {
|
package/i18n/en_US.json.d.ts
CHANGED
|
@@ -51,7 +51,9 @@ declare const _default: {
|
|
|
51
51
|
},
|
|
52
52
|
"quoteComments": {
|
|
53
53
|
"title": "Quote Comments",
|
|
54
|
-
"placeholder": "Add your comment"
|
|
54
|
+
"placeholder": "Add your comment",
|
|
55
|
+
"emptyState": "No comments yet",
|
|
56
|
+
"by": "by"
|
|
55
57
|
},
|
|
56
58
|
"productListTable": {
|
|
57
59
|
"headers": {
|
|
@@ -69,6 +71,11 @@ declare const _default: {
|
|
|
69
71
|
"remove": "Remove"
|
|
70
72
|
}
|
|
71
73
|
},
|
|
74
|
+
"tabbedContent": {
|
|
75
|
+
"itemsQuoted": "Items quoted",
|
|
76
|
+
"comments": "Comments",
|
|
77
|
+
"historyLog": "History log"
|
|
78
|
+
},
|
|
72
79
|
"quotePricesSummary": {
|
|
73
80
|
"subtotal": {
|
|
74
81
|
"excludingTax": "Quote Subtotal (excluding tax)"
|
|
@@ -116,6 +123,39 @@ declare const _default: {
|
|
|
116
123
|
}
|
|
117
124
|
}
|
|
118
125
|
},
|
|
126
|
+
"historyLog": {
|
|
127
|
+
"changeTypes": {
|
|
128
|
+
"created": "Quote Created",
|
|
129
|
+
"updated": "Quote Updated",
|
|
130
|
+
"statusChanged": "Status Changed",
|
|
131
|
+
"commentAdded": "Comment Added",
|
|
132
|
+
"expirationChanged": "Expiration Changed"
|
|
133
|
+
},
|
|
134
|
+
"noteTypes": {
|
|
135
|
+
"buyerNoteAdded": "Buyer Note Added",
|
|
136
|
+
"sellerNoteAdded": "Seller Note Added"
|
|
137
|
+
},
|
|
138
|
+
"authorLabels": {
|
|
139
|
+
"buyer": "(Buyer)",
|
|
140
|
+
"seller": "(Seller)"
|
|
141
|
+
},
|
|
142
|
+
"changeDetails": {
|
|
143
|
+
"comment": "Comment: \"{comment}\"",
|
|
144
|
+
"statusChangedFromTo": "Status changed from {oldStatus} to {newStatus}",
|
|
145
|
+
"statusSetTo": "Status set to {newStatus}",
|
|
146
|
+
"expirationChangedFromTo": "Expiration changed from {oldExpiration} to {newExpiration}",
|
|
147
|
+
"expirationSetTo": "Expiration set to {newExpiration}",
|
|
148
|
+
"totalChangedFromTo": "Total changed from {oldTotal} to {newTotal}",
|
|
149
|
+
"customChange": "{title}: changed from \"{oldValue}\" to \"{newValue}\"",
|
|
150
|
+
"productsRemovedFromCatalog": "Products removed from catalog: {products}",
|
|
151
|
+
"productsRemovedFromQuote": "Products removed from quote: {products}",
|
|
152
|
+
"noDetailsAvailable": "No details available"
|
|
153
|
+
},
|
|
154
|
+
"emptyState": "No history available for this quote."
|
|
155
|
+
},
|
|
156
|
+
"dateUtils": {
|
|
157
|
+
"never": "Never"
|
|
158
|
+
},
|
|
119
159
|
"QuoteManagement": {
|
|
120
160
|
"QuotesListTable": {
|
|
121
161
|
"quoteName": "Quote Name",
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name": "@dropins/storefront-quote-management", "version": "0.0.1-
|
|
1
|
+
{"name": "@dropins/storefront-quote-management", "version": "0.0.1-alpha15", "@dropins/tools": "1.6.0-beta1", "license": "SEE LICENSE IN LICENSE.md"}
|
package/render.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
/*! Copyright 2025 Adobe
|
|
2
2
|
All Rights Reserved. */
|
|
3
|
-
(function(o,a){try{if(typeof document<"u"){const e=document.createElement("style"),
|
|
4
|
-
.quote-management-actions-bar__container{container-type:inline-size;container-name:actions-bar-container}.quote-management-actions-bar{background:var(--color-neutral-200);padding:var(--spacing-xsmall);display:flex;gap:var(--spacing-small);justify-content:space-between;align-items:center}.quote-management-actions-bar__dropdown{width:max-content}.quote-management-actions-bar__buttons{display:flex}.quote-management-actions-bar__button>span{font:var(--type-body-2-default-font);letter-spacing:var(--type-body-2-default-letter-spacing)}@container actions-bar-container (max-width: 768px){.quote-management-actions-bar{flex-direction:column;align-items:flex-start;gap:var(--spacing-xsmall)}.quote-management-actions-bar__dropdown{width:100%}.quote-management-actions-bar__buttons{flex-direction:column;align-items:flex-start;gap:var(--spacing-xsmall);width:100%}.quote-management-actions-bar__button{width:100%}}.quote-management-manage-negotiable-quote{display:grid;gap:var(--spacing-small);color:var(--color-neutral-800);width:100%;container-type:inline-size}.quote-management-manage-negotiable-quote__header{display:flex;gap:var(--spacing-big);align-items:center}.quote-management-manage-negotiable-quote__quote-name>*{font:var(--type-headline-1-font);letter-spacing:var(--type-headline-1-letter-spacing);margin:0}.quote-management-manage-negotiable-quote__quote-status>*{font:var(--type-details-caption-1-font);letter-spacing:var(--type-details-caption-1-letter-spacing);border:2px solid var(--color-neutral-300);padding:var(--spacing-xxsmall)}.quote-management-manage-negotiable-quote__banner{width:100%}.quote-management-manage-negotiable-quote__details{display:flex;flex-direction:row;gap:var(--spacing-xsmall);justify-content:space-between;align-items:center;flex-wrap:wrap}.quote-management-manage-negotiable-quote__detail{display:flex;flex-wrap:wrap;gap:var(--spacing-xxsmall);align-items:baseline}.quote-management-manage-negotiable-quote__detail-title{font:var(--type-body-2-emphasized-font);letter-spacing:var(--type-body-2-emphasized-letter-spacing)}.quote-management-manage-negotiable-quote__detail-content{font:var(--type-body-2-font);letter-spacing:var(--type-body-2-letter-spacing)}.quote-management-manage-negotiable-quote__item-actions{justify-content:flex-start}.quote-management-manage-negotiable-quote__quote-actions{display:flex;justify-content:flex-end;flex-wrap:wrap;gap:var(--spacing-xsmall)}.quote-management-manage-negotiable-quote__shipping-information-container{display:flex;flex-direction:column;gap:var(--spacing-xsmall)}.quote-management-manage-negotiable-quote__shipping-information-title>*{font:var(--type-body-2-emphasized-font);letter-spacing:var(--type-body-2-emphasized-letter-spacing);margin:0}.quote-management-manage-negotiable-quote__quote-comments-container{display:flex;flex-direction:column;gap:var(--spacing-xsmall)}.quote-management-manage-negotiable-quote__quote-comments-title>*{font:var(--type-body-2-emphasized-font);letter-spacing:var(--type-body-2-emphasized-letter-spacing);margin:0}.quote-management-manage-negotiable-quote__footer{display:flex;gap:var(--spacing-small);justify-content:flex-start}@container (max-width: 768px){.quote-management-manage-negotiable-quote__header{flex-direction:column}.quote-management-manage-negotiable-quote__action-bar{flex-direction:column;align-items:flex-start}.quote-management-manage-negotiable-quote__quote-actions{justify-content:flex-start}}.negotiable-quote-summary{display:grid;position:relative;grid-auto-flow:row;padding:var(--spacing-medium)}.negotiable-quote-summary__primary{background-color:var(--color-neutral-200)}.negotiable-quote-summary__secondary{background-color:var(--color-neutral-50)}.negotiable-quote-summary__content{display:grid;gap:var(--spacing-xsmall);margin-top:var(--spacing-small)}.negotiable-quote-summary__heading{display:grid;font:var(--type-headline-2-strong-font);letter-spacing:var(--type-headline-2-strong-letter-spacing);color:var(--color-neutral-800);gap:var(--spacing-small)}.negotiable-quote-summary__discount .negotiable-quote-summary__label,.negotiable-quote-summary__discount .negotiable-quote-summary__price{color:var(--color-warning-800)}.negotiable-quote-summary__taxes .dropin-divider:last-child{margin-bottom:0}.negotiable-quote-summary__total{margin-top:var(--spacing-medium)}.negotiable-quote-summary__divider-primary,.negotiable-quote-summary__divider-secondary{width:100%;margin:0}.negotiable-quote-summary__divider-secondary{margin:0}.negotiable-quote-summary__taxEntry.negotiable-quote-summary__entry{margin-top:0}.negotiable-quote-summary__entry,.negotiable-quote-summary__taxEntry{display:grid;grid-template-columns:1fr 1fr;gap:var(--spacing-xxsmall);align-items:center;color:var(--color-neutral-800)}.negotiable-quote-summary__caption{font:var(--type-details-caption-2-font);letter-spacing:var(--type-details-caption-2-letter-spacing);grid-column:span 2;color:var(--color-neutral-700)}.negotiable-quote-summary__primaryAction{margin-top:var(--spacing-small);grid-template-columns:1fr}.negotiable-quote-summary__shipping--edit{display:grid;grid-column:1 / span 2;gap:var(--spacing-small);padding-top:var(--spacing-small);padding-left:var(--spacing-small)}a.negotiable-quote-summary__shippingLink{text-decoration:underline}.negotiable-quote-summary__shipping--hide{display:none!important}.negotiable-quote-summary__shipping--edit button{width:var(--spacing-huge);justify-self:end}.negotiable-quote-summary__shipping--zip,.negotiable-quote-summary__shipping--state{background-color:var(--color-neutral-50)}.negotiable-quote-summary__taxes .dropin-accordion-section__content-container{gap:var(--spacing-small);margin:var(--spacing-small) 0}.negotiable-quote-summary--loading{opacity:.4;pointer-events:none}.negotiable-quote-summary__spinner{margin:0 auto;position:absolute;z-index:999;left:0;right:0;top:calc(50% - (var(--size) / 2));bottom:0}.negotiable-quote-summary__label,.negotiable-quote-summary__price{font:var(--type-body-1-default-font);letter-spacing:var(--type-body-1-default-letter-spacing)}.negotiable-quote-summary__price{text-align:right;text-transform:uppercase}.negotiable-quote-summary__label--muted{font:var(--type-body-2-default-font);letter-spacing:var(--type-body-2-default-letter-spacing);color:var(--color-neutral-700)}.negotiable-quote-summary__price--muted{font:var(--type-body-2-default-font);letter-spacing:var(--type-body-2-default-letter-spacing)}.negotiable-quote-summary__label--bold,.negotiable-quote-summary__price--bold{font:var(--type-body-1-emphasized-font);letter-spacing:var(--type-body-1-emphasized-letter-spacing)}.quote-management-quote-summary-list{container-type:inline-size;container-name:quote-summary-list}.quote-management-quote-summary-list__background--secondary{background-color:var(--color-neutral-200)}.quote-management-quote-summary-list__heading{display:grid;row-gap:var(--spacing-xsmall);padding:var(--spacing-medium) 0 0 0;font:var(--type-headline-1-font);letter-spacing:var(--type-headline-1-letter-spacing);color:var(--color-neutral-800)}.quote-management-quote-summary-list__heading--full-width{width:100%}.quote-management-quote-summary-list__heading-divider{width:100%;margin:var(--spacing-xxsmall) 0 var(--spacing-medium) 0}.quote-management-quote-summary-list__content{display:grid;grid-template-columns:1fr;padding:0}.quote-management-quote-summary-list__out-of-stock-message{margin:calc(-1 * var(--spacing-xsmall)) 0 var(--spacing-medium) 0}.quote-management-quote-summary-list-footer__action,.quote-management-quote-summary-list-footer__action:focus .quote-management-quote-summary-list-footer__action:active,.quote-management-quote-summary-list-footer__action:link{font:var(--type-body-2-strong-font);margin:0 auto;width:auto;margin-top:var(--spacing-medium);margin-bottom:var(--spacing-medium)}.quote-management-quote-summary-list-footer__action:hover{text-decoration:underline;text-underline-offset:var(--spacing-xxsmall);background:transparent;color:var(--color-brand-700)}.quote-management-quote-summary-list-footer__action:visited{background-color:transparent}.quote-management-quote-summary-list-accordion{border-left:var(--shape-border-width-2) solid var(--color-neutral-400);border-right:var(--shape-border-width-2) solid var(--color-neutral-400)}.quote-management-quote-summary-list-accordion__section{margin:var(--spacing-medium)}.dropin-cart-item__quantity{width:fit-content}@container quote-summary-list (width >= 768px){.quote-management-quote-summary-list__out-of-stock-message{margin:calc(-1 * var(--spacing-small)) 0 var(--spacing-xxbig) 0}}@container quote-summary-list (width >= 1024px){.quote-management-quote-summary-list__content,.quote-management-quote-summary-list__heading{grid-column:1 / span 8}.quote-management-quote-summary-list__heading--full-width{grid-column:1 / span 12}.quote-management-quote-summary-list__content{padding:0}}.quotes-list-table__empty-state{padding:var(--spacing-large);text-align:center;color:var(--color-neutral-600);border-top:var(--shape-border-width-1) solid var(--color-neutral-200)}.quotes-list-table__footer{display:flex;justify-content:space-between;align-items:center;padding:var(--spacing-medium);border-top:var(--shape-border-width-1) solid var(--color-neutral-200);gap:var(--spacing-medium)}.quotes-list-table__item-range{flex:1;color:var(--color-neutral-800);font:var(--type-body-2-default-font);letter-spacing:var(--type-body-2-default-letter-spacing)}.quotes-list-table__pagination{flex:0 0 auto;display:flex;justify-content:center}.quotes-list-table__page-size-picker{flex:1;display:flex;justify-content:flex-end;align-items:center;gap:var(--spacing-small);color:var(--color-neutral-800);font:var(--type-body-2-default-font);letter-spacing:var(--type-body-2-default-letter-spacing)}.quotes-list-table__page-size-picker>span{display:inline-flex;align-items:baseline}.quotes-list-table__page-size-picker .dropin-picker{display:inline-flex;align-items:center;margin:0 var(--spacing-xsmall);vertical-align:center}.quotes-list-table__page-size-picker .dropin-picker__select{height:auto;min-height:var(--sizing-medium);line-height:1.2;vertical-align:baseline}.quote-management-tabbed-content{width:100%}.quote-management-tabbed-content__tabs{display:flex;margin-bottom:-1px}.quote-management-tabbed-content__tab{background:var(--color-neutral-100);color:var(--color-neutral-700);border:solid 1px var(--color-neutral-400);padding:var(--spacing-xsmall) var(--spacing-medium);margin-left:-1px;cursor:pointer;font:var(--type-body-2-font);letter-spacing:var(--type-body-2-letter-spacing)}.quote-management-tabbed-content__tab:first-child{margin-left:unset}.quote-management-tabbed-content__tab:hover{background:var(--color-neutral-300);color:var(--color-neutral-700)}.quote-management-tabbed-content__tab--active{background:var(--color-neutral-50);color:var(--color-neutral-800);border-bottom:none}.quote-management-tabbed-content__tab--active:hover{background:var(--color-neutral-50);color:var(--color-neutral-800)}.quote-management-tabbed-content__active-tab-content{background:var(--color-neutral-50);padding:var(--spacing-small);border:solid 1px var(--color-neutral-400)}
|
|
5
|
-
.
|
|
6
|
-
.quote-management-
|
|
7
|
-
|
|
3
|
+
(function(o,a){try{if(typeof document<"u"){const e=document.createElement("style"),r=a.styleId;for(const t in a.attributes)e.setAttribute(t,a.attributes[t]);e.setAttribute("data-dropin",r),e.appendChild(document.createTextNode(o));const n=document.querySelector('style[data-dropin="sdk"]');if(n)n.after(e);else{const t=document.querySelector('link[rel="stylesheet"], style');t?t.before(e):document.head.append(e)}}}catch(e){console.error("dropin-styles (injectCodeFunction)",e)}})(`.request-negotiable-quote-form{display:grid;gap:var(--spacing-small);align-items:flex-end;color:var(--color-neutral-800);width:100%}.request-negotiable-quote-form input:user-invalid,.request-negotiable-quote-form textarea:user-invalid{border-color:var(--color-alert-800)}.request-negotiable-quote-form__title{font:var(--type-body-1-emphasized-font);letter-spacing:var(--type-body-1-emphasized-letter-spacing)}.request-negotiable-quote-form__actions,.request-negotiable-quote-form [data-slot=AttachFileField]{display:flex;gap:var(--spacing-small)}.request-negotiable-quote-form__actions{justify-content:flex-start}.request-negotiable-quote-form__attach-file-field{justify-content:end}.request-negotiable-quote-form__attach-file-field label{background:none;color:var(--color-brand-500);font:var(--type-body-1-strong-font)}.request-negotiable-quote-form__attach-file-field label:hover{background:none}.request-negotiable-quote-form__error-banner svg{color:var(--color-alert-800)}
|
|
4
|
+
.quote-management-quote-history-log{padding:var(--spacing-small)}.quote-management-quote-history-log__entries{display:flex;flex-direction:column;gap:var(--spacing-small)}.quote-management-quote-history-log__entry{border:1px solid var(--color-neutral-400);padding:var(--spacing-small);background-color:var(--color-neutral-50)}.quote-management-quote-history-log__entry-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:var(--spacing-xsmall);flex-wrap:wrap;gap:var(--spacing-xsmall)}.quote-management-quote-history-log__entry-meta{display:flex;flex-direction:column;gap:var(--spacing-xxsmall)}.quote-management-quote-history-log__entry-date,.quote-management-quote-history-log__entry-author{font:var(--type-body-2-emphasized-font);letter-spacing:var(--type-body-1-emphasized-letter-spacing);color:var(--color-neutral-800)}.quote-management-quote-history-log__entry-type{background-color:var(--color-neutral-200);color:var(--color-neutral-800);padding:var(--spacing-xxsmall) var(--spacing-xsmall);font:var(--type-details-caption-1-font);letter-spacing:var(--type-details-caption-1-letter-spacing);white-space:nowrap;border:1px solid var(--color-neutral-300)}.quote-management-quote-history-log__entry-changes{display:flex;flex-direction:column;gap:var(--spacing-xxsmall)}.quote-management-quote-history-log__entry-change{font:var(--type-body-2-font);letter-spacing:var(--type-body-2-letter-spacing);color:var(--color-neutral-700);padding-left:var(--spacing-small);position:relative}.quote-management-quote-history-log__entry-change:before{position:absolute;left:0;color:var(--color-neutral-600);font-weight:700}.quote-management-quote-history-log__empty{text-align:center;color:var(--color-neutral-700);font:var(--type-body-1-font);letter-spacing:var(--type-body-1-letter-spacing);font-style:italic;padding:var(--spacing-big)}@media only screen and (min-width: 768px){.quote-management-quote-history-log__entry-header{flex-wrap:nowrap}.quote-management-quote-history-log__entry-meta{flex-direction:row;gap:var(--spacing-xsmall);align-items:center}}
|
|
5
|
+
.quote-management-quote-comments-list{list-style:none;padding:0;margin:0}.quote-management-quote-comments-list__empty-state{color:var(--color-neutral-800);font:var(--type-body-2-font);letter-spacing:var(--type-body-2-letter-spacing);padding:var(--spacing-small) 0;margin:0;list-style:none}.quote-management-quote-comments-list__item{padding:var(--spacing-small) 0;border-bottom:1px solid var(--color-neutral-300)}.quote-management-quote-comments-list__item:last-child{border-bottom:none}.quote-management-quote-comments-list__header{display:flex;align-items:baseline;margin-bottom:var(--spacing-xxsmall);gap:var(--spacing-xxsmall)}.quote-management-quote-comments-list__date,.quote-management-quote-comments-list__by,.quote-management-quote-comments-list__author{font:var(--type-body-2-emphasized-font);letter-spacing:var(--type-body-2-emphasized-letter-spacing);color:var(--color-neutral-800)}.quote-management-quote-comments-list__date{white-space:nowrap}.quote-management-quote-comments-list__text{font:var(--type-body-2-font);letter-spacing:var(--type-body-2-letter-spacing);color:var(--color-neutral-800);margin:0;word-wrap:break-word}@media only screen and (min-width: 768px){.quote-management-quote-comments-list__item{padding:var(--spacing-medium) 0}}
|
|
6
|
+
.quote-management-shipping-address-display{display:flex;flex-direction:column;gap:var(--spacing-xsmall);font:var(--type-body-2-default-font);letter-spacing:var(--type-body-2-default-letter-spacing);color:var(--color-neutral-800)}.quote-management-shipping-address-display__field{margin:0;word-wrap:break-word;overflow-wrap:break-word}.quote-management-shipping-address-display__name{font:var(--type-body-2-emphasized-font);letter-spacing:var(--type-body-2-emphasized-letter-spacing)}.quote-management-shipping-address-display--empty{padding:var(--spacing-medium);background-color:var(--color-neutral-50)}.quote-management-shipping-address-display__no-address{margin:0;color:var(--color-neutral-700);font-style:italic}
|
|
7
|
+
.quote-management-items-quoted{display:flex;flex-direction:column;gap:var(--spacing-big)}.quote-management-product-list-table-container{display:flex;flex-direction:column;gap:var(--spacing-small)}.quote-management-product-list-table__checkbox{align-self:center;justify-self:center}.quote-management-product-list-table__product-name-container{display:flex;flex-direction:column;gap:var(--spacing-xxsmall)}.quote-management-product-list-table__product-name{font:var(--type-body-1-font);letter-spacing:var(--type-body-1-letter-spacing)}.quote-management-product-list-table__configurable-option{display:flex;flex-direction:row;gap:var(--spacing-xxsmall)}.quote-management-product-list-table__configurable-option-label{font:var(--type-details-caption-1-font);letter-spacing:var(--type-details-caption-1-letter-spacing)}.quote-management-product-list-table__configurable-option-value{font:var(--type-details-caption-2-font);letter-spacing:var(--type-details-caption-2-letter-spacing)}.quote-management-product-list-table__bundle-option{display:flex;flex-direction:column;gap:var(--spacing-xxsmall)}.quote-management-product-list-table__bundle-option-label{font:var(--type-details-caption-1-font);letter-spacing:var(--type-details-caption-1-letter-spacing)}.quote-management-product-list-table__bundle-option-values{display:flex;flex-direction:column;gap:var(--spacing-xxsmall)}.quote-management-product-list-table__bundle-option-value{display:flex;flex-direction:row;align-items:center;gap:var(--spacing-xxsmall);font:var(--type-details-caption-2-font);letter-spacing:var(--type-details-caption-2-letter-spacing)}.quote-management-product-list-table__bundle-option-value-original-price{font:var(--type-details-caption-2-font);letter-spacing:var(--type-details-caption-2-letter-spacing)}.quote-management-product-list-table__sku{font:var(--type-details-caption-1-font);letter-spacing:var(--type-details-caption-1-letter-spacing)}.quote-management-product-list-table__quantity{font:var(--type-body-1-font);letter-spacing:var(--type-body-1-letter-spacing);display:block;justify-self:center}.quote-management-product-list-table__discount-container{display:flex;flex-direction:row;flex-wrap:wrap;gap:var(--spacing-xxsmall);align-items:baseline}.quote-management-product-list-table-container__submit-container{display:flex;justify-content:flex-end}.quote-management-quote-prices-summary{font:var(--type-body-1-default-font);letter-spacing:var(--type-body-1-default-letter-spacing)}.quote-management-quote-prices-summary__entry{display:flex;flex-direction:row;justify-content:space-between;gap:10px;width:100%}.quote-management-quote-prices-summary__accordion,.quote-management-quote-prices-summary__label{flex-grow:1}.quote-management-quote-prices-summary__label--strong{font:var(--type-body-1-strong-font);letter-spacing:var(--type-body-1-strong-letter-spacing)}.quote-management-quote-prices-summary__value{flex-grow:1;text-align:right}
|
|
8
|
+
.quote-management-actions-bar__container{container-type:inline-size;container-name:actions-bar-container}.quote-management-actions-bar{background:var(--color-neutral-200);padding:var(--spacing-xsmall);display:flex;gap:var(--spacing-small);justify-content:space-between;align-items:center}.quote-management-actions-bar__dropdown{width:max-content}.quote-management-actions-bar__buttons{display:flex}.quote-management-actions-bar__button>span{font:var(--type-body-2-default-font);letter-spacing:var(--type-body-2-default-letter-spacing)}@container actions-bar-container (max-width: 768px){.quote-management-actions-bar{flex-direction:column;align-items:flex-start;gap:var(--spacing-xsmall)}.quote-management-actions-bar__dropdown{width:100%}.quote-management-actions-bar__buttons{flex-direction:column;align-items:flex-start;gap:var(--spacing-xsmall);width:100%}.quote-management-actions-bar__button{width:100%}}.quote-management-manage-negotiable-quote{display:grid;gap:var(--spacing-small);color:var(--color-neutral-800);width:100%;container-type:inline-size}.quote-management-manage-negotiable-quote__header{display:flex;gap:var(--spacing-big);align-items:center}.quote-management-manage-negotiable-quote__quote-name>*{font:var(--type-headline-1-font);letter-spacing:var(--type-headline-1-letter-spacing);margin:0}.quote-management-manage-negotiable-quote__quote-status>*{font:var(--type-details-caption-1-font);letter-spacing:var(--type-details-caption-1-letter-spacing);border:2px solid var(--color-neutral-300);padding:var(--spacing-xxsmall)}.quote-management-manage-negotiable-quote__banner{width:100%}.quote-management-manage-negotiable-quote__details{display:flex;flex-direction:row;gap:var(--spacing-xsmall);justify-content:space-between;align-items:center;flex-wrap:wrap}.quote-management-manage-negotiable-quote__detail{display:flex;flex-wrap:wrap;gap:var(--spacing-xxsmall);align-items:baseline}.quote-management-manage-negotiable-quote__detail-title{font:var(--type-body-2-emphasized-font);letter-spacing:var(--type-body-2-emphasized-letter-spacing)}.quote-management-manage-negotiable-quote__detail-content{font:var(--type-body-2-font);letter-spacing:var(--type-body-2-letter-spacing)}.quote-management-manage-negotiable-quote__item-actions{justify-content:flex-start}.quote-management-manage-negotiable-quote__quote-actions{display:flex;justify-content:flex-end;flex-wrap:wrap;gap:var(--spacing-xsmall)}.quote-management-manage-negotiable-quote__shipping-information-container{display:flex;flex-direction:column;gap:var(--spacing-xsmall)}.quote-management-manage-negotiable-quote__shipping-information-title>*{font:var(--type-body-2-emphasized-font);letter-spacing:var(--type-body-2-emphasized-letter-spacing);margin:0}.quote-management-manage-negotiable-quote__quote-comments-container{display:flex;flex-direction:column;gap:var(--spacing-xsmall)}.quote-management-manage-negotiable-quote__quote-comments-title>*{font:var(--type-body-2-emphasized-font);letter-spacing:var(--type-body-2-emphasized-letter-spacing);margin:0}.quote-management-manage-negotiable-quote__footer{display:flex;gap:var(--spacing-small);justify-content:flex-start}@container (max-width: 768px){.quote-management-manage-negotiable-quote__header{flex-direction:column}.quote-management-manage-negotiable-quote__action-bar{flex-direction:column;align-items:flex-start}.quote-management-manage-negotiable-quote__quote-actions{justify-content:flex-start}}.negotiable-quote-summary{display:grid;position:relative;grid-auto-flow:row;padding:var(--spacing-medium)}.negotiable-quote-summary__primary{background-color:var(--color-neutral-200)}.negotiable-quote-summary__secondary{background-color:var(--color-neutral-50)}.negotiable-quote-summary__content{display:grid;gap:var(--spacing-xsmall);margin-top:var(--spacing-small)}.negotiable-quote-summary__heading{display:grid;font:var(--type-headline-2-strong-font);letter-spacing:var(--type-headline-2-strong-letter-spacing);color:var(--color-neutral-800);gap:var(--spacing-small)}.negotiable-quote-summary__discount .negotiable-quote-summary__label,.negotiable-quote-summary__discount .negotiable-quote-summary__price{color:var(--color-warning-800)}.negotiable-quote-summary__taxes .dropin-divider:last-child{margin-bottom:0}.negotiable-quote-summary__total{margin-top:var(--spacing-medium)}.negotiable-quote-summary__divider-primary,.negotiable-quote-summary__divider-secondary{width:100%;margin:0}.negotiable-quote-summary__divider-secondary{margin:0}.negotiable-quote-summary__taxEntry.negotiable-quote-summary__entry{margin-top:0}.negotiable-quote-summary__entry,.negotiable-quote-summary__taxEntry{display:grid;grid-template-columns:1fr 1fr;gap:var(--spacing-xxsmall);align-items:center;color:var(--color-neutral-800)}.negotiable-quote-summary__caption{font:var(--type-details-caption-2-font);letter-spacing:var(--type-details-caption-2-letter-spacing);grid-column:span 2;color:var(--color-neutral-700)}.negotiable-quote-summary__primaryAction{margin-top:var(--spacing-small);grid-template-columns:1fr}.negotiable-quote-summary__shipping--edit{display:grid;grid-column:1 / span 2;gap:var(--spacing-small);padding-top:var(--spacing-small);padding-left:var(--spacing-small)}a.negotiable-quote-summary__shippingLink{text-decoration:underline}.negotiable-quote-summary__shipping--hide{display:none!important}.negotiable-quote-summary__shipping--edit button{width:var(--spacing-huge);justify-self:end}.negotiable-quote-summary__shipping--zip,.negotiable-quote-summary__shipping--state{background-color:var(--color-neutral-50)}.negotiable-quote-summary__taxes .dropin-accordion-section__content-container{gap:var(--spacing-small);margin:var(--spacing-small) 0}.negotiable-quote-summary--loading{opacity:.4;pointer-events:none}.negotiable-quote-summary__spinner{margin:0 auto;position:absolute;z-index:999;left:0;right:0;top:calc(50% - (var(--size) / 2));bottom:0}.negotiable-quote-summary__label,.negotiable-quote-summary__price{font:var(--type-body-1-default-font);letter-spacing:var(--type-body-1-default-letter-spacing)}.negotiable-quote-summary__price{text-align:right;text-transform:uppercase}.negotiable-quote-summary__label--muted{font:var(--type-body-2-default-font);letter-spacing:var(--type-body-2-default-letter-spacing);color:var(--color-neutral-700)}.negotiable-quote-summary__price--muted{font:var(--type-body-2-default-font);letter-spacing:var(--type-body-2-default-letter-spacing)}.negotiable-quote-summary__label--bold,.negotiable-quote-summary__price--bold{font:var(--type-body-1-emphasized-font);letter-spacing:var(--type-body-1-emphasized-letter-spacing)}.quote-management-quote-summary-list{container-type:inline-size;container-name:quote-summary-list}.quote-management-quote-summary-list__background--secondary{background-color:var(--color-neutral-200)}.quote-management-quote-summary-list__heading{display:grid;row-gap:var(--spacing-xsmall);padding:var(--spacing-medium) 0 0 0;font:var(--type-headline-1-font);letter-spacing:var(--type-headline-1-letter-spacing);color:var(--color-neutral-800)}.quote-management-quote-summary-list__heading--full-width{width:100%}.quote-management-quote-summary-list__heading-divider{width:100%;margin:var(--spacing-xxsmall) 0 var(--spacing-medium) 0}.quote-management-quote-summary-list__content{display:grid;grid-template-columns:1fr;padding:0}.quote-management-quote-summary-list__out-of-stock-message{margin:calc(-1 * var(--spacing-xsmall)) 0 var(--spacing-medium) 0}.quote-management-quote-summary-list-footer__action,.quote-management-quote-summary-list-footer__action:focus .quote-management-quote-summary-list-footer__action:active,.quote-management-quote-summary-list-footer__action:link{font:var(--type-body-2-strong-font);margin:0 auto;width:auto;margin-top:var(--spacing-medium);margin-bottom:var(--spacing-medium)}.quote-management-quote-summary-list-footer__action:hover{text-decoration:underline;text-underline-offset:var(--spacing-xxsmall);background:transparent;color:var(--color-brand-700)}.quote-management-quote-summary-list-footer__action:visited{background-color:transparent}.quote-management-quote-summary-list-accordion{border-left:var(--shape-border-width-2) solid var(--color-neutral-400);border-right:var(--shape-border-width-2) solid var(--color-neutral-400)}.quote-management-quote-summary-list-accordion__section{margin:var(--spacing-medium)}.dropin-cart-item__quantity{width:fit-content}@container quote-summary-list (width >= 768px){.quote-management-quote-summary-list__out-of-stock-message{margin:calc(-1 * var(--spacing-small)) 0 var(--spacing-xxbig) 0}}@container quote-summary-list (width >= 1024px){.quote-management-quote-summary-list__content,.quote-management-quote-summary-list__heading{grid-column:1 / span 8}.quote-management-quote-summary-list__heading--full-width{grid-column:1 / span 12}.quote-management-quote-summary-list__content{padding:0}}.quotes-list-table__empty-state{padding:var(--spacing-large);text-align:center;color:var(--color-neutral-600);border-top:var(--shape-border-width-1) solid var(--color-neutral-200)}.quotes-list-table__footer{display:flex;justify-content:space-between;align-items:center;padding:var(--spacing-medium);border-top:var(--shape-border-width-1) solid var(--color-neutral-200);gap:var(--spacing-medium)}.quotes-list-table__item-range{flex:1;color:var(--color-neutral-800);font:var(--type-body-2-default-font);letter-spacing:var(--type-body-2-default-letter-spacing)}.quotes-list-table__pagination{flex:0 0 auto;display:flex;justify-content:center}.quotes-list-table__page-size-picker{flex:1;display:flex;justify-content:flex-end;align-items:center;gap:var(--spacing-small);color:var(--color-neutral-800);font:var(--type-body-2-default-font);letter-spacing:var(--type-body-2-default-letter-spacing)}.quotes-list-table__page-size-picker>span{display:inline-flex;align-items:baseline}.quotes-list-table__page-size-picker .dropin-picker{display:inline-flex;align-items:center;margin:0 var(--spacing-xsmall);vertical-align:center}.quotes-list-table__page-size-picker .dropin-picker__select{height:auto;min-height:var(--sizing-medium);line-height:1.2;vertical-align:baseline}.quote-management-tabbed-content{width:100%}.quote-management-tabbed-content__tabs{display:flex;margin-bottom:-1px}.quote-management-tabbed-content__tab{background:var(--color-neutral-100);color:var(--color-neutral-700);border:solid 1px var(--color-neutral-400);padding:var(--spacing-xsmall) var(--spacing-medium);margin-left:-1px;cursor:pointer;font:var(--type-body-2-font);letter-spacing:var(--type-body-2-letter-spacing)}.quote-management-tabbed-content__tab:first-child{margin-left:unset}.quote-management-tabbed-content__tab:hover{background:var(--color-neutral-300);color:var(--color-neutral-700)}.quote-management-tabbed-content__tab--active{background:var(--color-neutral-50);color:var(--color-neutral-800);border-bottom:none}.quote-management-tabbed-content__tab--active:hover{background:var(--color-neutral-50);color:var(--color-neutral-800)}.quote-management-tabbed-content__active-tab-content{background:var(--color-neutral-50);padding:var(--spacing-small);border:solid 1px var(--color-neutral-400)}`,{styleId:"quote-management"});
|
|
9
|
+
import{jsx as t}from"@dropins/tools/preact-jsx-runtime.js";import{Render as s}from"@dropins/tools/lib.js";import{useState as i,useEffect as d}from"@dropins/tools/preact-hooks.js";import{UIProvider as u}from"@dropins/tools/components.js";import{events as l}from"@dropins/tools/event-bus.js";const c={Request:{title:"Request a Quote",comment:"Comment",commentError:"Please add your comment",quoteName:"Quote name",quoteNameError:"Please add a quote name",attachmentsError:"Error uploading attachments",requestCta:"Request a Quote",saveDraftCta:"Save as draft",error:{header:"Error",unauthenticated:"Please sign in to request a quote.",unauthorized:"You are not authorized to request a quote.",missingCart:"Could not find a valid cart."},success:{header:"Success",submitted:"Quote request submitted successfully!",draftSaved:"Quote saved as draft successfully!"}},Manage:{createdLabel:"Created:",salesRepLabel:"Sales Rep:",expiresLabel:"Expires:",actionsLabel:"Actions",actions:{remove:"Remove"},bannerTitle:"Alert",bannerStatusMessages:{submitted:"This quote is currently locked for editing. It will become available once released by the Merchant.",pending:"This quote is currently locked for editing. It will become available once released by the Merchant.",expired:"Your quote has expired and the product prices have been updated as per the latest prices in your catalog. You can either re-submit the quote to seller for further negotiation or go to checkout."},actionButtons:{close:"Close quote",delete:"Delete quote",print:"Print quote",createTemplate:"Create quote template",createCopy:"Create copy",sendForReview:"Send for review"},shippingInformation:{title:"Shipping Information"},shippingAddress:{noAddress:"No shipping address has been set for this quote."},quoteComments:{title:"Quote Comments",placeholder:"Add your comment",emptyState:"No comments yet",by:"by"},productListTable:{headers:{productName:"Product name",sku:"SKU",price:"Price",quantity:"Quantity",discount:"Discount",subtotal:"Subtotal",actions:"Actions"},submitButton:"Update",actions:{editNoteToSeller:"Edit note to seller",remove:"Remove"}},tabbedContent:{itemsQuoted:"Items quoted",comments:"Comments",historyLog:"History log"},quotePricesSummary:{subtotal:{excludingTax:"Quote Subtotal (excluding tax)"},appliedTaxes:"Applied Taxes",grandTotal:{includingTax:"Quote Grand Total (including tax)"}}},PriceSummary:{giftOptionsTax:{printedCard:{title:"Printed card",inclTax:"Including taxes",exclTax:"excluding taxes"},itemGiftWrapping:{title:"Item gift wrapping",inclTax:"Including taxes",exclTax:"excluding taxes"},orderGiftWrapping:{title:"Order gift wrapping",inclTax:"Including taxes",exclTax:"excluding taxes"}},subTotal:{label:"Subtotal",withTaxes:"Including taxes",withoutTaxes:"excluding taxes"},taxes:{total:"Tax Total",totalOnly:"Tax",breakdown:"Taxes",showBreakdown:"Show Tax Breakdown",hideBreakdown:"Hide Tax Breakdown"},total:{label:"Total",withoutTax:"Total excluding taxes",saved:"Total saved"}}},m={changeTypes:{created:"Quote Created",updated:"Quote Updated",statusChanged:"Status Changed",commentAdded:"Comment Added",expirationChanged:"Expiration Changed"},noteTypes:{buyerNoteAdded:"Buyer Note Added",sellerNoteAdded:"Seller Note Added"},authorLabels:{buyer:"(Buyer)",seller:"(Seller)"},changeDetails:{comment:'Comment: "{comment}"',statusChangedFromTo:"Status changed from {oldStatus} to {newStatus}",statusSetTo:"Status set to {newStatus}",expirationChangedFromTo:"Expiration changed from {oldExpiration} to {newExpiration}",expirationSetTo:"Expiration set to {newExpiration}",totalChangedFromTo:"Total changed from {oldTotal} to {newTotal}",customChange:'{title}: changed from "{oldValue}" to "{newValue}"',productsRemovedFromCatalog:"Products removed from catalog: {products}",productsRemovedFromQuote:"Products removed from quote: {products}",noDetailsAvailable:"No details available"},emptyState:"No history available for this quote."},p={never:"Never"},g={QuotesListTable:{quoteName:"Quote Name",created:"Created",createdBy:"Created By",status:"Status",lastUpdated:"Last Updated",quoteTemplate:"Quote Template",quoteTotal:"Quote Total",actions:"Action"}},x={NegotiableQuote:c,historyLog:m,dateUtils:p,QuoteManagement:g},h={default:x},T=({children:o})=>{const[a,r]=i("en_US");return d(()=>{const e=l.on("locale",n=>{r(n)},{eager:!0});return()=>{e==null||e.off()}},[]),t(u,{lang:a,langDefinitions:h,children:o})},C=new s(t(T,{}));export{C as render};
|
|
8
10
|
//# sourceMappingURL=render.js.map
|
package/render.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.js","sources":["/@dropins/storefront-quote-management/src/render/Provider.tsx","/@dropins/storefront-quote-management/src/render/render.tsx"],"sourcesContent":["import { FunctionComponent } from 'preact';\nimport { useState, useEffect } from 'preact/hooks';\nimport { UIProvider } from '@adobe-commerce/elsie/components';\nimport { Lang } from '@adobe-commerce/elsie/i18n';\nimport { events } from '@adobe-commerce/event-bus';\n\nimport en_US from '../i18n/en_US.json';\n\n// Langs\nconst langDefinitions = {\n default: en_US,\n};\n\ninterface CartProviderProps {\n children?: any;\n}\n\nexport const Provider: FunctionComponent<CartProviderProps> = ({\n children,\n}) => {\n const [lang, setLang] = useState<Lang>('en_US');\n\n // Events\n useEffect(() => {\n const localeEvent = events.on(\n 'locale',\n (locale: string) => {\n setLang(locale as Lang);\n },\n { eager: true }\n );\n return () => {\n localeEvent?.off();\n };\n }, []);\n\n return (\n <UIProvider lang={lang} langDefinitions={langDefinitions}>\n {children}\n </UIProvider>\n );\n};\n","import { Render } from '@adobe-commerce/elsie/lib';\nimport { Provider } from './Provider';\n\nexport const render = new Render(<Provider />);\n"],"names":["langDefinitions","en_US","Provider","children","lang","setLang","useState","useEffect","localeEvent","events","locale","jsx","UIProvider","render","Render"],"mappings":"
|
|
1
|
+
{"version":3,"file":"render.js","sources":["/@dropins/storefront-quote-management/src/render/Provider.tsx","/@dropins/storefront-quote-management/src/render/render.tsx"],"sourcesContent":["import { FunctionComponent } from 'preact';\nimport { useState, useEffect } from 'preact/hooks';\nimport { UIProvider } from '@adobe-commerce/elsie/components';\nimport { Lang } from '@adobe-commerce/elsie/i18n';\nimport { events } from '@adobe-commerce/event-bus';\n\nimport en_US from '../i18n/en_US.json';\n\n// Langs\nconst langDefinitions = {\n default: en_US,\n};\n\ninterface CartProviderProps {\n children?: any;\n}\n\nexport const Provider: FunctionComponent<CartProviderProps> = ({\n children,\n}) => {\n const [lang, setLang] = useState<Lang>('en_US');\n\n // Events\n useEffect(() => {\n const localeEvent = events.on(\n 'locale',\n (locale: string) => {\n setLang(locale as Lang);\n },\n { eager: true }\n );\n return () => {\n localeEvent?.off();\n };\n }, []);\n\n return (\n <UIProvider lang={lang} langDefinitions={langDefinitions}>\n {children}\n </UIProvider>\n );\n};\n","import { Render } from '@adobe-commerce/elsie/lib';\nimport { Provider } from './Provider';\n\nexport const render = new Render(<Provider />);\n"],"names":["langDefinitions","en_US","Provider","children","lang","setLang","useState","useEffect","localeEvent","events","locale","jsx","UIProvider","render","Render"],"mappings":"+nIASMA,EAAkB,CACtB,QAASC,CACX,EAMaC,EAAiD,CAAC,CAC7D,SAAAC,CACF,IAAM,CACJ,KAAM,CAACC,EAAMC,CAAO,EAAIC,EAAe,OAAO,EAG9C,OAAAC,EAAU,IAAM,CACd,MAAMC,EAAcC,EAAO,GACzB,SACCC,GAAmB,CAClBL,EAAQK,CAAc,CACxB,EACA,CAAE,MAAO,EAAA,CAAK,EAEhB,MAAO,IAAM,CACXF,GAAA,MAAAA,EAAa,KACf,CACF,EAAG,CAAA,CAAE,EAGHG,EAACC,EAAA,CAAW,KAAAR,EAAY,gBAAAJ,EACrB,SAAAG,CAAA,CACH,CAEJ,ECtCaU,EAAS,IAAIC,EAAOH,EAACT,IAAS,CAAE"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/********************************************************************
|
|
2
|
+
* Copyright 2025 Adobe
|
|
3
|
+
* All Rights Reserved.
|
|
4
|
+
*
|
|
5
|
+
* NOTICE: Adobe permits you to use, modify, and distribute this
|
|
6
|
+
* file in accordance with the terms of the Adobe license agreement
|
|
7
|
+
* accompanying it.
|
|
8
|
+
*******************************************************************/
|
|
9
|
+
/**
|
|
10
|
+
* Gets the user's timezone with fallback to UTC if detection fails
|
|
11
|
+
* @returns The user's timezone string (e.g., 'America/New_York') or 'UTC' as fallback
|
|
12
|
+
*/
|
|
13
|
+
export declare function formatExpirationDate(date: string, dateFormatter: Intl.DateTimeFormat): string;
|
|
14
|
+
export declare function getUserTimezone(): string;
|
|
15
|
+
//# sourceMappingURL=dateUtils.d.ts.map
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
/*! Copyright 2025 Adobe
|
|
2
|
-
All Rights Reserved. */
|
|
3
|
-
import{fetchGraphQl as c}from"@dropins/tools/fetch-graphql.js";import{events as f}from"@dropins/tools/event-bus.js";import{N}from"./NegotiableQuoteFragment.js";import{t as d}from"./transform-quote.js";const l=`
|
|
4
|
-
mutation REQUEST_NEGOTIABLE_QUOTE_MUTATION(
|
|
5
|
-
$cartId: ID!
|
|
6
|
-
$quoteName: String!
|
|
7
|
-
$comment: NegotiableQuoteCommentInput!
|
|
8
|
-
$isDraft: Boolean
|
|
9
|
-
) {
|
|
10
|
-
requestNegotiableQuote(
|
|
11
|
-
input: {
|
|
12
|
-
cart_id: $cartId
|
|
13
|
-
quote_name: $quoteName
|
|
14
|
-
comment: $comment
|
|
15
|
-
is_draft: $isDraft
|
|
16
|
-
}
|
|
17
|
-
) {
|
|
18
|
-
quote {
|
|
19
|
-
...NegotiableQuoteFragment
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
${N}
|
|
24
|
-
`,_=async s=>{const{cartId:e,quoteName:t,comment:r,isDraft:a}=s;if(!e)throw new Error("Cart ID is required");if(!t)throw new Error("Quote name is required");if(!r)throw new Error("Comment is required");return c(l,{variables:{cartId:e,quoteName:t,comment:{comment:r},isDraft:a}}).then(n=>{var m,u;const{errors:i}=n;if(i){const q=i.map(E=>E.message).join("; ");throw new Error(`Failed to request negotiable quote: ${q}`)}const o=d((u=(m=n.data)==null?void 0:m.requestNegotiableQuote)==null?void 0:u.quote);if(!o)throw new Error("Failed to transform quote data: Invalid response structure");return f.emit("quote-management/negotiable-quote-requested",{quote:o,input:{cartId:e,quoteName:t,comment:r,isDraft:a}}),o})};export{_ as r};
|
|
25
|
-
//# sourceMappingURL=requestNegotiableQuote.js.map
|