> ## Documentation Index
> Fetch the complete documentation index at: https://docs.onelox.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Introduction

> Integrate your WMS using the ONELOX File Standard

export const FeatureList = ({features = [], additionalFeatures = [], type = 'data_source'}) => {
  let featuresByCategory = {};
  const categories = type === 'data_source' ? Features : FulfillerFeatures;
  const groups = type === 'data_source' ? Groups : FulfillerGroups;
  for (let featureCategory in categories) {
    let categoryFeatures = categories[featureCategory], integrationFeatures = featuresByCategory[groups[featureCategory].label] || [];
    for (let availableFeature in categoryFeatures) {
      let featureDefinition = categoryFeatures[availableFeature], integrationFeatureSupport = {
        label: featureDefinition.label,
        supported: false,
        comment: null
      };
      features.forEach(feature => {
        if (feature.id === featureDefinition.id) {
          integrationFeatureSupport.supported = feature.supported === undefined ? true : feature.supported;
          integrationFeatureSupport.comment = feature.comment || null;
        }
      });
      integrationFeatures.push(integrationFeatureSupport);
    }
    featuresByCategory[groups[featureCategory].label] = integrationFeatures;
  }
  if (additionalFeatures.length) {
    featuresByCategory[groups.additional.label] = additionalFeatures;
  }
  return FeatureTable.render(featuresByCategory);
};

export const FeatureTable = {
  renderTableHeader(heading) {
    return <tr>
                <th>{heading}</th>
            </tr>;
  },
  renderTableRow(featureDefinition) {
    return <tr>
            <td>{featureDefinition.label}</td>
            <td><strong>{featureDefinition.supported ? 'x' : '-'}</strong></td>
            <td>{featureDefinition.comment}</td>
        </tr>;
  },
  render(featuresByCategory) {
    let rows = [];
    for (let category in featuresByCategory) {
      rows.push(this.renderTableHeader(category));
      featuresByCategory[category].forEach(feature => {
        rows.push(this.renderTableRow(feature));
      });
    }
    return <div>
            <h2>Feature list</h2>
            <table>
                <thead>
                <tr>
                    <th>Feature</th>
                    <th>Supported</th>
                    <th>Additional information</th>
                </tr>
                </thead>
                <tbody>
                {rows}
                </tbody>
            </table>
        </div>;
  }
};

## How to integrate

1. Register an account at ONELOX
2. Create a File Fulfiller integration
3. Configure (S)FTP credentials and directories
4. Use our provided XML File Schemas to build your custom system integration

<FeatureList
  type="fulfiller"
  features={[
{
    id: Features.essentials.ProductData.id
},
{
    id: Features.essentials.DeliveryNotes.id
},
{
    id: Features.essentials.Shipments.id
},
{
    id: Features.essentials.Inventory.id
},
{
    id: Features.delivery_notes.Filtering.id,
    comment: "The file integration allows you to route Delivery Notes to a Fulfiller Integration based on related Warehouses"
},
{
    id: Features.delivery_notes.Documents.id,
    comment: "Supported in v2"
},
{
    id: Features.products.PartsLists.id,
    comment: "Parts lists configured in ONELOX will be automatically split into separate positions within Delivery Notes"
},
{
    id: Features.products.Filtering.id,
    comment: "Products will be automatically transmitted based on Product source and Warehouse associations"
},
{
    id: Features.inventory.Types.id
},
{
    id: Features.inventory.Shelves.id
},
{
    id: Features.inventory.Batches.id,
},
{
    id: Features.inventory.SellByDates.id
},
{
    id: Features.inventory.Warehouses.id
},
{
    id: Features.shipments.PartialShipments.id
},
{
    id: Features.shipments.Batches.id
},
{
    id: Features.shipments.SellByDates.id
},
{
    id: Features.warehouses.Warehouses.id
}
]}
  additionalFeatures={[
{
   label: "Customizable import and export directories",
   supported: true,
   comment: "Custom directories on the same server can be configured for each resource type"
}
]}
/>
