diff --git a/plugins/CommunityScriptsUILibrary/README.md b/plugins/CommunityScriptsUILibrary/README.md index b03c56b3..e641f698 100644 --- a/plugins/CommunityScriptsUILibrary/README.md +++ b/plugins/CommunityScriptsUILibrary/README.md @@ -49,6 +49,26 @@ All the following functions are exposed under `window.csLib` and `csLib` */ ``` +## setConfiguration +```js +/** + * Set configuration of a plugin in the server via GraphQL + * @param {string} pluginId - The ID of the plugin as it is registered in the server + * @param {*} values - The configuration object with the values you want to save in the server + * @returns {Object} - The configuration object of the plugin as it is stored in the server after update + * + * @example + * // fetch config from the server + * const config = await getConfiguration('CommunityScriptsUIPlugin', defaultConfig); + * // config = { theme: 'dark' } + * // update the config based on user input + * // config = { theme: 'light' } + * // save config in the server + * await setConfiguration('CommunityScriptsUIPlugin', config); + * } + */ +``` + ## waitForElement ```js /** diff --git a/plugins/CommunityScriptsUILibrary/cs-ui-lib.js b/plugins/CommunityScriptsUILibrary/cs-ui-lib.js index 90902142..ba346c90 100644 --- a/plugins/CommunityScriptsUILibrary/cs-ui-lib.js +++ b/plugins/CommunityScriptsUILibrary/cs-ui-lib.js @@ -54,6 +54,35 @@ return response.configuration.plugins?.[pluginId] ?? fallback; }; + /** + * Set configuration of a plugin in the server via GraphQL + * @param {string} pluginId - The ID of the plugin as it is registered in the server + * @param {*} values - The configuration object with the values you want to save in the server + * @returns {Object} - The configuration object of the plugin as it is stored in the server after update + * + * @example + * // fetch config from the server + * const config = await getConfiguration('CommunityScriptsUIPlugin', defaultConfig); + * // config = { theme: 'dark' } + * // update the config based on user input + * // config = { theme: 'light' } + * // save config in the server + * await setConfiguration('CommunityScriptsUIPlugin', config); + * } + */ + const setConfiguration = async (pluginId, values) => { + const query = `mutation ConfigurePlugin($pluginId: ID!, $input: Map!) { configurePlugin(plugin_id: $pluginId, input: $input) }`; + const queryBody = { + query: query, + variables: { + pluginId: pluginId, + input: values, + }, + }; + const response = await csLib.callGQL({ ...queryBody }); + return response.configurePlugin; + }; + /** * Waits for an element to be available in the DOM and runs the callback function once it is * @param {string} selector - The CSS selector of the element to wait for @@ -105,6 +134,7 @@ baseURL, callGQL, getConfiguration, + setConfiguration, waitForElement, PathElementListener, };