The spv.ds.DsClient Class

spv.ds.DsClient(service_url, in_settings)

DsClient provides a layer of abstraction between GUI code and session-/protocol-handling. The configurator system is stateful. Session state is shared between server and client, this is a source of complexity and can hopefully be removed at some point in the future. DsClient provides synchronization of session state between server and client by centralizing management of the shared state inside this class. Member functions are stateful if the member function name begins with "session". Other member functions are state- and session-less and can be called at any time, in any order. Most session dependent functions also require a loaded configuration. Preconditions should be documented for each member function in this class. The configurator system can be simplified as the following three phases: A. The user finds the configurator application on the web or in the showroom. B. The user choose and change the product components (called items) until the user is satisfied or leaved the application. C. The user saves the configuration for a later time or choose to place an order or request a sales contact for the built configuration. Technical usage example 1, Starting a new configuration session and interacting with the user. (Step-by-step example of phase B): 1. Construct an instance of spv.ds.Client 2. Call sessionInit 3. Call getIntroPage to retrieve the available start configurations 4. Generate images for the start configurations using getConfigImage 5. Display the available start configuration images to the user using the appropriate techniques for the GUI implementation. 6. The user chooses a start configuration 7. Send that start configuration to sessionLoadConfig 8. On success, call sessionGetRootMenuItems and sessionGetImage 9. Populate the GUI root menu with menu items and wait for the image response 10. On image success, load and display the configuration image 11. The user makes a choice about which menu to open 12. Call sessionToggleItem for the user chosen MenuItem (both menus and product components are MenuItems) 13. On success, call sessionGetStateUpdate to populate the currently open menu with menu items. 14. The user clicks an item in the currently open menu, send that MenuItem to sessionToggleItem and handle response. 15. On success, update the currently open menu with new MenuItems (most menu items will usually be unchanged, but some may change state and some may disappear while others may be added). Call sessionGetImage to get the new configuration image and wait for response. 16. On image success, load and display the configuration image 17. The user clicks a new item and the sessionToggleItem cycle continues until the user closes the application or decides to place an order for the built configuration. (this step is customized action for each configurator application, eg. cars and bathroom products require different types of shopping cart solutions) @export

service_url {!string}
in_settings {!spv.ds.DsClientSettings=}

.constructDefaultImageParams()

Create a ImageParams instance with default values, however, defaults are likely not good enough for most contexts. Preconditions: None. @export

returns {spv.ds.ImageParams}

.generatePublicConfig(on_success, on_failure)

Save the current configuration for the logged in user as a public config. The generated name is returned as a string to the on_success function. Preconditions: Initialized session, loaded configuration, logged in user. @export

on_success {function(string)}
on_failure {function(Error)}

.getConfigImage(conf, img_params, on_success, on_failure)

Requests an image for a serialized configuration. Preconditions: None. @export

conf {spv.ds.Config}
img_params {spv.ds.ImageParams}
on_success {function(spv.ds.ImageResult)}
on_failure {function(Error)}

.getFreshConfigs(limit, scale_width, scale_height, on_success, on_failure)

Requests the most recently built car configurations. @export

limit {number}
Max number of configs in result
scale_width {number}
scale_height {number}
on_success {function(Array.<spv.ds.FreshConfig>)}
on_failure {function(Error)}

.getIntroPage(on_success, on_failure)

Requests the "Intro page" data including available start-configurations, typically one config for each car model. Preconditions: None. @export

on_success {function(spv.ds.IntroPage)}
on_failure {function(Error)}

.getSessionId()

Get the session id or throw if null @export

returns {string}

.getUserConfigList(username, on_success, on_failure)

Gets all configurations stored in the database by the given username. This is a heavy operation and is included here for utility purposes. @export

username {string}
on_success {function(Array.<spv.ds.SavedConfig>)}
on_failure {function(Error)}

.sessionAddGuiGroupSubscriptions(group_ids, on_success, on_failure)

group_ids {Array.<string>}
on_success {function()}
on_failure {function(Error)}

.sessionApplySuggestion(suggestion, on_success, on_failure)

Apply a configuration change suggestion on the current configuration. Preconditions: Initialized session, loaded configuration, caller code has a valid instance of spv.ds.Suggestion retrieved by calling sessionToggleItem, no requests that modify the session configuration has been dispatched between suggestion construction and the call to this function. @export

suggestion {spv.ds.Suggestion}
The suggestion to be applied to the current configuration.
on_success {Function}
Called when the suggestion has been successfully applied.
on_failure {function(Error)}
Called on any kind of failure.

.sessionClearGuiGroupSubscriptions(on_success, on_failure)

on_success {function()}
on_failure {function(Error)}

.sessionGeneratePdf(on_success, on_failure)

Create a pdf using current session state and returns the pdf url through a callback if a pdf was generated successfully. Preconditions: Initialized session, loaded configuration. @export

on_success {function(string)}
Callback taking the generated pdf url
on_failure {function(Error)}

.sessionGetConfig(encoding, on_success, on_failure)

Requests the current session config Available encodings are: "" : internal encoding, only for debug Preconditions: Initialized session, loaded config. @export

encoding {string}
on_success {function(spv.ds.Config)}
on_failure {function(Error)}

.sessionGetConfigNames(on_success, on_failure)

Get the saved configs for the logged in user Preconditions: Initialized session, logged in user. @export

on_success {function(Array.<string>)}
A callback taking an array of names of saved configurations. The configuration names can be used to remove or load configs for the logged in user by sessionRemoveConfigByName and sessionLoadConfigByName.
on_failure {function(Error)}

.sessionGetFacebookShareData(on_success, on_failure)

Requests the text, images etc used for facebook sharing. Preconditions: Initialized session, loaded configuration. @export

on_success {function(spv.ds.FacebookShareData)}
on_failure {function(Error)}

.sessionGetImage(img_params, on_success, on_failure)

Builds an image for the current configuration state in this session. Preconditions: Initialized session, loaded configuration. @export

img_params {spv.ds.ImageParams}
on_success {function(spv.ds.ImageResult)}
on_failure {function(Error)}

.sessionGetImageSerieInfos()

Get image serie info for the current configuration Preconditions: Initialized session, loaded configuration. @export

returns {Array.<spv.ds.ImageSerieInfo>}

.sessionGetIntroDisclaimer()

Gets the disclaimer to be displayed when the configurator is started. @export

returns {spv.ds.Disclaimer}

.sessionGetItemInfo(item_ids, on_success, on_failure)

Get complete item info for items by item id Preconditions: Initialized session, loaded configuration. @export

item_ids {Array.<string>}
on_success {function(Array.<spv.ds.MenuItem>)}
on_failure {function(Error)}

.sessionGetLongText(item_id)

Get 'long_text' text for item_id or empty string on failure Texts are configuration dependent. In practice updating texts is only needed after loading a configuration, not when simply toggling an item in the configuration. Preconditions: Initialized session, loaded configuration. @export

item_id {string}
returns {string}

.sessionGetMediumText(item_id)

Get 'medium_text' text for item_id or empty string on failure Texts are configuration dependent. In practice updating texts is only needed after loading a configuration, not when simply toggling an item in the configuration. Preconditions: Initialized session, loaded configuration. @export

item_id {string}
returns {string}

.sessionGetModelDisclaimer(model_id)

Get the disclaimer specific for a model. If no model id is passed, it'll default to the active configuration's model. @export

model_id {string=}
returns {spv.ds.Disclaimer}

.sessionGetRootMenuItems()

Get the root menu items for the current configuration Preconditions: Initialized session, loaded config. @export

returns {Array.<spv.ds.MenuItem>}

.sessionGetShortText(item_id)

Get 'short_text' text for item_id or empty string on failure Texts are configuration dependent. In practice updating texts is only needed after loading a configuration, not when simply toggling an item in the configuration. Preconditions: Initialized session, loaded configuration. @export

item_id {string}
returns {string}

.sessionGetStateUpdate()

Get the last state update. Call this function on successful load of configs or on successful sessionToggleItem. Preconditions: Initialized session, loaded configuration. @export

returns {spv.ds.SessionStateUpdate}

.sessionGetSummary(on_success, on_failure)

Get the summary for the current session and configuration Preconditions: Initialized session, loaded configuration. @export

on_success {function(spv.ds.Summary)}
on_failure {function(Error)}

.sessionGetUrlSettings()

Get base urls needed for most HTTP GET paths to images Preconditions: Initialized session. @export

returns {spv.ds.UrlSettings}

.sessionGetUserConfigImage(config_name, img_params, on_success, on_failure)

Requests an image for a saved configuration Preconditions: Initialized session, logged in user. @export

config_name {string}
img_params {spv.ds.ImageParams}
on_success {function(spv.ds.ImageResult)}
on_failure {function(Error)}

.sessionInit(menu_query, readmore_mode, on_success, on_failure)

Initialize session. This must be called before calling any other member function with "session". For most other session calls a configuration needs to be loaded as well. This is not done in the constructor in order to allow state-/session-less calls without initializing a session. Preconditions: None. @export

menu_query {string}
readmore_mode {spv.ds.ipprot_nova.input.BopReadMoreMode}
on_success {function(spv.ds.IntroPage)}
on_failure {function(Error)}

.sessionLoadConfig(config, on_success, on_failure)

Loads a configuration into the current session and replaces to current configuration state. Preconditions: Initialized session. @export

config {spv.ds.Config}
on_success {function(spv.ds.ConfigLoadResult)}
on_failure {function(Error)}

.sessionLoadConfigByName(config_name, on_success, on_failure)

Loads a configuration into the current session and replaces to current configuration state. The config is referenced by it's name retrieved from sessionGetConfigNames. Preconditions: Initialized session, logged in user. @export

config_name {string}
on_success {function(spv.ds.ConfigLoadResult)}
on_failure {function(Error)}

.sessionLoadPublicConfig(public_config_id, on_success, on_failure)

Loads a configuration from the "public" database into the current session replacing the current configuration state. "Public Configs" are anonymous configurations saved without any user information that can be loaded by a unique key. Preconditions: Initialized session. @export

public_config_id {string}
on_success {function(spv.ds.ConfigLoadResult)}
on_failure {function(Error)}

.sessionLogin(user_name, on_success, on_failure)

Login a user by username, passwords are not required at the moment since no private information is supposed to be saved using this system. An account will be crated if the username has not been used before. Preconditions: Initialized session. @export

user_name {string}
Typically an email address
on_success {Function}
on_failure {function(Error)}

.sessionRemoveConfigByName(config_name, on_success, on_failure)

Remove a saved configuration for the logged in user Preconditions: Initialized session, logged in user. @export

config_name {string}
Name retrieved by sessionGetConfigNames
on_success {Function}
on_failure {function(Error)}

.sessionResume(session_id, on_success, on_failure)

Initialize with existing session. Used instead of sessionInit. Preconditions: Client not initialized. @export

session_id {string}
on_success {function(spv.ds.IntroPage)}
on_failure {function(Error)}

.sessionSaveConfigByName(config_name, allow_overwrite, on_success, on_failure)

Save the current configuration for the logged in user Preconditions: Initialized session, loaded configuration, logged in user. @export

config_name {string}
allow_overwrite {boolean}
on_success {Function}
on_failure {function(Error)}

.sessionSendHeartBeat(on_success, on_failure)

Call this function to keep the session alive Preconditions: Initialized session. @export

on_success {function()}
on_failure {function(Error)}

.sessionSetPriceLocalization(price_localization_id, on_success, on_failure)

Choose which collection of price rules to use for the current session Preconditions: Initialized session. @export

price_localization_id {string}
on_success {Function}
on_failure {function(Error)}

.sessionToggleItem(menu_item, on_success, on_suggestions, on_failure)

Try to change item state for one item in the current configuration. An item has two states, On or Off, eg. an item is part of the current configuration or it is not. The result of this operation can only be determined by the server. Any call to this function may result in suggestions being returned through the callback on_suggestions. If suggestions Preconditions: Initialized session, loaded configuration, caller code has a valid instance of spv.ds.MenuItem. @export

menu_item {spv.ds.MenuItem}
Menu item to toggle on or off. User code should not modify or construct instances of MenuItem, only pass MenuItem instances returned by this class.
on_success {Function}
Will be called on toggle success if toggle has no important side effects. Caller code should call sessionGetStateUpdate on this object to get the latest session state update.
on_suggestions {function(Array.<spv.ds.Suggestion>)}
Will be called if item toggle has important side effects or if relevant alternative configuration states has been found.
on_failure {function(Error)}
Called on any kind of failure.

.startAutomaticHeartbeat(interval, on_heartbeat, on_failure)

Starts the automatic heartbeat for the session. Don't forget to call stopAutomaticHeartbeat if you attempt to destroy or replace the DsClient object. If you don't, there'll be an orphaned DsClient object heartbeating forever. (Well, until the browser session ends. ) @public

interval {number}
How often the heartbeat is triggered, in milliseconds.
on_heartbeat {function()}
This callback is called for every heartbeat.
on_failure {function(Error)}

.stopAutomaticHeartbeat()