
Security News
OWASP 2025 Top 10 Adds Software Supply Chain Failures, Ranked Top Community Concern
OWASP’s 2025 Top 10 introduces Software Supply Chain Failures as a new category, reflecting rising concern over dependency and build system risks.
merchi_product_form
Advanced tools
A React component library for rendering customizable e-commerce product forms for Merchi products. This package provides a seamless integration for Next.js applications, allowing for interactive product forms with various customization options.
# Using npm
npm install merchi_product_form
# Using yarn
yarn add merchi_product_form
import MerchiProductForm from 'merchi_product_form';
function ProductPage({ product }) {
return (
<MerchiProductForm
initProduct={product}
onBuyNow={(job) => console.log(job)}
onGetQuote={(job) => console.log(job)}
/>
);
}
Here's a complete example of how to use the MerchiProductForm component in a Next.js page:
import MerchiProductForm from 'merchi_product_form';
import { notFound } from 'next/navigation';
export async function fetchProduct(id) {
const url = `https://api.merchi.co/v6/products/${id}/`;
try {
const response = await fetch(url);
if (!response.ok) {
throw new Error(`HTTP error! Status: ${response.status}`);
}
const responseJson = await response.json();
return responseJson.product;
} catch (e) {
throw new Error(e);
}
}
export default async function Page({ params: { id } }) {
const initProduct = await fetchProduct(id);
if (!initProduct) return notFound();
const onBuyNow = (job) => {
// Handle buy now action
console.log('Buy now job:', job);
};
const onGetQuote = (job) => {
// Handle quote request
console.log('Quote request job:', job);
};
return (
<div className="product-container">
<MerchiProductForm
initProduct={initProduct}
onBuyNow={onBuyNow}
onGetQuote={onGetQuote}
showCurrency={true}
/>
</div>
);
}
The MerchiProductForm component accepts the following props:
| Name | Type | Default | Description |
|---|---|---|---|
apiUrl | string? | 'https://api.merchi.co/v6/' | The Merchi API endpoint URL |
initProduct | Product | required | The Merchi product object to use for the form |
allowAddToCart | boolean? | false | Controls if the add to cart button is shown |
btnNameAddToCart | string? | "Add to Cart" | The text on the add to cart button |
currentUser | User? | undefined | A Merchi client object to be used as the form's client |
draftApproveCallback | (job) => Promise<void> | null | null | Async callback function that is triggered when drafts are approved |
hideTitle | boolean? | false | Hide the product title |
hideCost | boolean? | false | Hide the cost (useful for quote requests) |
hideCountry | boolean? | false | Hide the country flag |
hideCalculatedPrice | boolean? | false | Hide calculated price (useful for quote requests) |
hideDomainName | boolean? | false | Hide product domain |
hideQuantityField | boolean? | false | Hide the quantity field |
hideRequestQuotationButton | boolean? | false | Hide request quote button |
hidePaymentUpfrontButton | boolean? | false | Hide buy now button |
isCartItem | boolean? | false | Used if the product form is being used in cart item context |
initJob | `job | cartItem` | undefined |
onAddToCart | (job) => void? | undefined | Callback function for the add to cart button |
onBuyNow | (job) => void? | undefined | Callback function for the buy now button |
onGetQuote | (job) => void? | undefined | Callback function for the get quote button |
onSubmit | (job) => void? | undefined | Callback function that returns the latest job data |
productFormId | string? | undefined | Optional ID to be applied to the product form |
showCurrency | boolean? | false | Show the currency symbol |
showCurrencyCode | boolean? | false | Show the currency code |
showFeatureDeadline | boolean? | false | Will display a countdown timer |
showGroupBuyStatus | boolean? | false | Will show the group buy status bar |
showUnitPrice | boolean? | false | Show the unit price to the user |
The component provides extensive CSS class customization options:
| Name | Type | Default | Description |
|---|---|---|---|
classNameAlertSellerEditable | string? | 'alert alert-light' | Class for the seller editable alert element |
classNameButtonSubmit | string? | 'btn btn-primary w-100 merchi-embed-form_button-submit' | Class for the Submit button element |
classNameButtonGroupAdd | string? | 'btn btn-white' | Class for the add group button element |
classNameButtonGroupRemove | string? | 'btn btn-danger' | Class for the delete group button element |
classNameButtonsSubmitContainer | string? | 'merchi-product-buttons-submit-container' | Class for the container of the submit buttons |
classNameButtonApproveDrafts | string? | 'btn btn-success' | Class for the approve drafts button element |
classNameButtonCloseDrafts | string? | 'btn btn-secondary' | Class for the close drafts button element |
classNameFileUploadContainer | string? | 'merchi-input-file-container' | Class for the input file container |
classNameFileUpload | string? | 'merchi-embed-form_dropzone' | Class for the dropzone container |
classNameFilePreviewContainer | string? | 'uploaded-variation-file' | Class for the file variation upload element |
classNameFileUploadTextContainer | string? | 'merchi-embed-form_dropzone-text-container' | Class for the dropzone text element |
classNameFilePreviewIconWrapper | string? | 'uploaded-variation-file-icon-wrapper' | Class for the upload variation icon wrapper |
classNameFileUploadButton | string? | 'btn btn-sm btn-link ml-auto' | Class for the file upload button element |
classNameFileUploadIcon | string? | 'merchi-embed-form_dropzone-icon' | Class for the form dropzone icon element |
classNameFileUploadIconSecond | string? | 'merchi-embed-form_dropzone-icon-plus' | Class for the form dropzone plus icon element |
classNameFileUploadIconContainer | string? | 'merchi-embed-form_dropzone-icon-container' | Class for the form dropzone icon container |
classNameFileListItem | string? | 'list-group-item no-z-index-hover' | Class for file list item element |
classNameFileButtonDownload | string? | 'btn btn-sm btn-secondary' | Class for the file download button element |
classNameFileButtonDelete | string? | 'btn btn-sm btn-danger ml-2' | Class for the file delete button element |
classNameFileListItemContainer | string? | 'list-group' | Class for the file item list |
classNameGroupsContainer | string? | 'merchi-embed-form_product-group-container' | Class for the product variation group container |
classNameGroupPriceContainer | string? | 'merchi-embed-form_product-group-total-cost' | Class for the variation group total cost |
classNameInput | string? | 'form-control' | Class for form inputs |
classNameInventoryStatus | string? | 'flex-fill' | Class for the inventory status element |
classNameInputContainer | string? | 'merchi-embed-form_product-group-input-qty-container' | Class for the input container |
classNameOptionContainer | string? | 'merchi-embed-form_checkbox_radio-item' | Class for the radio/checkbox container |
classNameOptionInput | string? | 'merchi-embed-form_checkbox_radio-input' | Class for the radio input |
classNameOptionLabel | string? | 'merchi-embed-form_checkbox_radio-label' | Class for the radio label |
classNameOptionSuper | string? | 'merchi-embed-form_checkbox_radio-super' | Class for the checkbox radio super |
classNameOptionsCheckboxRadioContainer | string? | '' | Class for the option checkbox/radio container |
classNameOptionImage | string? | 'merchi-embed-form_image-select-option-item-img' | Class for the variation image select element |
classNameOptionImageContainer | string? | 'merchi-embed-form_image-select-option-item-container' | Class for the variation image container element |
classNameOptionColour | string? | 'merchi-embed-form_color-select-option' | Class for the variation colour element |
classNameOptionColourContainer | string? | 'merchi-embed-form_color-select-item' | Class for the variation colour container element |
classNameProductTitle | string? | 'merchi-product-title' | Class for the product title element |
classNameProductOriginTitle | string? | 'merchi-product-origin-title' | Class for the product origin title element |
classNameProductTotalContainer | string? | 'merchi-embed-form_summary-product-cost-container' | Class for the product total cost container element |
classNameProductTotal | string? | 'merchi-embed-form_summary-product-cost' | Class for the product total cost element |
classNameQuantityLabelContainer | string? | 'merchi-embed-form_quantity-label-container' | Class for the product quantity label element |
classNameUnitPrice | string? | undefined | Class for the unit price element |
The component provides extensive customization options through class name props. Here are some of the most commonly used styling props:
<MerchiProductForm
initProduct={product}
classNameButtonSubmit="custom-submit-button"
classNameInput="custom-input"
classNameProductTitle="custom-product-title"
classNameProductTotal="custom-product-total"
/>
<MerchiProductForm
initProduct={product}
classNameGroupsContainer="custom-groups-container"
classNameOptionContainer="custom-option-container"
onBuyNow={handleBuyNow}
/>
<MerchiProductForm
initProduct={product}
classNameFileUploadContainer="custom-file-upload"
classNameFilePreviewContainer="custom-file-preview"
onGetQuote={handleQuoteRequest}
/>
Contributions are welcome! Please feel free to submit a Pull Request.
git checkout -b feature/amazing-feature)git commit -m 'Add some amazing feature')git push origin feature/amazing-feature)This project is licensed under the MIT License - see the LICENSE file for details.
For detailed information about all available props, please refer to the TypeScript definitions in the source code.
FAQs
A React component for Merchi product forms
The npm package merchi_product_form receives a total of 23 weekly downloads. As such, merchi_product_form popularity was classified as not popular.
We found that merchi_product_form demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
OWASP’s 2025 Top 10 introduces Software Supply Chain Failures as a new category, reflecting rising concern over dependency and build system risks.

Research
/Security News
Socket researchers discovered nine malicious NuGet packages that use time-delayed payloads to crash applications and corrupt industrial control systems.

Security News
Socket CTO Ahmad Nassri discusses why supply chain attacks now target developer machines and what AI means for the future of enterprise security.