Configurator API

The client-side configurator API contains functions for retrieving and setting the product attribute values and can be accessed from the player API, which in turn is the result of the promise returned when embedding the player.

Initialize the Configurator

Threekit's Configurator API is initialized by calling player.getConfigurator()
This can be initialized at anytime but typically it's initialized with the player and stored somewhere for later use.

async function init() {
  const player = await window.threekitPlayer({
    assetId: "079838d8-60e9-40d8-93a8-6af73c255bef",
    authToken: "00000000-0000-0000-0000-000000000000",
    el: document.getElementById("player-el"),
  });

  window.player = player;
  window.configurator = await player.getConfigurator();
}

init();

Prefetch Attributes

Prefetches all images for attributes specified to improve loading performance (only applies to 2D player).

const configurator = await player.getConfigurator();
await configurator.prefetchAttributes(['Rotation'])

Get Attributes

Returns an array of attribute objects. This object contains defaultValue, id, name, type and an array of values for that attribute.

configurator.getAttributes()

returns:

[
 {
   id: "d5ed540b-4852-4da2-8134-0c96c347df6e",
   type: "Asset",
   name: "Front Cover Color",
   blacklist: [],
   assetType: "item",
   values: [
      {
       assetId: "0126ce54-5bd8-4f37-b83b-d00db596750c",
       name: "Matte Blue",
       tags: ["luggage-matte"],
       metadata: {},
       fileSize: null,
       label: "Matte Blue",
       visible: true,
       enabled: true
     },...
 },...
]

Get Display Attributes

Returns all visible attributes and their associated data to make integrations easier and more robust. For example, attribute tags and metadata are now returned to build better configuration experiences, like attribute option groupings and styles. Using includeHidden and enabledOnly boolean options, you can also return hidden or disabled attributes.

configurator.getDisplayAttributes();

returns:

[
 {
  id: "40670f6a-4faa-4d7c-9db5-bf1492f72aff",
  type: "Color",
  name: "Color",
  defaultValue: "#84f542",
  visible: true,
  enabled: true,
  hiddenValues: [],
  disabledValues: [],
  values: ["#84f542", "#FFFFFF"],
  value: "#84f542"
 }...
]

Get Configuration

Returns the current configuration for the product as an object containing Attribute/Value pairs.

player.configurator.getConfiguration()

returns:

{ 
      [attributeName]: "atributeValue",
      ....
}

Set Configuration

Sets product configuration using a Configuration Object as parameter. Can assign one or multiple attributes within the same call.

configurator.setConfiguration({attrName: attrValue})

Configuration Object

Here is an example of the type definition for the Configuration Object that can be passed to the setConfiguration method.

type AttributeValue =
  | string // if it's a String Attribute
  | number // if it's a Number Attribute
  | boolean // if it's a Boolean Attribute
  | { r: number, g: number, b: number } // if it's a Color Attribute
  | { // If it's a Part Reference or Asset Attribute
    // Exactly 1 of these 3 should be provided:
    assetId?: string;
    customId?: string;
    query?: { metadata: { [key: string]: any } };

    configuration?: Configuration // Optional, for nested configurations
}

type Configuration = {
  [attributeName: string]: 
    | AttributeValue // For single value Attributes
    | AttributeValue[] // for Array Attributes
}

Custom IDs

You can set a Threekit configuration using the Custom ID you have associated with a catalog item. This will work with part-reference attributes.

configurator.setConfiguration({attrName: {customId: yourCustomID}})

Metadata Queries

If you would like to be able to set a part-reference attribute type with data that is human readable or that aligns with client-data identifiers, you can use a metadata query. Ensure the key: value pair on your item exists and matches what you are using to setConfiguration.

Please be sure you do not have items with duplicate metadata or you may see unexpected results

configurator.setConfiguration({
  Finish: { // The attribute you would like to set
    query: {
      metadata: {
        Finish: "Brass", // the metadata key:value pair that exists on the item
      },
    },
  },
});

Stage Configurator

In the case you need to get/set the attributes on the stage you have associated with your Threekit item, you will initialize it similarly to the configurator API and you can use the same methods listed above:

const stageConfigurator = await player.getStageConfigurator();

Attribute Types

It's worth mentioning the difference between primitive values & part reference values. Primitive values (e.g. String, Number, etc) are straightforward.

Primitive

configurator.setConfiguration({ "Color Attribute": "Red" });

However, reference attributes (e.g. materials, parts, etc.) receive the id of the Threekit Item/Asset. For example, to set the Wheels attribute in this example, we need to pass the id of the Wheel Item as the value.

Part References

configurator.setConfiguration({
  "Wheels Attribute": { assetId: "26e0c72c-77a2-4fae-a81d-c995e32187f2" }
});

Arrays

configurator.setConfiguration({
  "Items Attribute": [ 
    { 
     assetId: "26e0c72c-77a2-4fae-a81d-c995e32187f2", 
     configuration:{},
     type: "model"
    }, 
    { 
     assetId: "26e0c72c-abcd-456-a81d-c995e32187f2", 
     configuration:{},
     type: "model"
    }, 
]
});