User Data Provider
UserDataProvider is similar to LayoutProvider but it manages user-defined data.
Like LayoutProvider, UserDataProvider is a way to connect external storage with a DXcharts React application.
What can be user-defined data in DXcharts React
The following data can be stored as user-defined data:
- custom aggregations
- custom colors from color picker
- custom timeframe presets
- favorite drawings
- recent drawings
- positions of elements such as the
drawings toolbarorchart layers popover element - drawings sidebar state
How it works
Below is an implementation of UserDataProvider that stores UserData in the localStorage.
import { UserDataProvider, UserData } from '@dx-private/dxchart5-react/dist/providers/user-data-provider';interface LSUserDataProviderOptions {/*** timestamp in milliseconds when the layouts should be removed*/expirationPeriod: number;}const USER_DATA_LS_KEY = 'userData';const USERDATA_EXPIRATION_DATE_LS_KEY = 'userDataExpirationDate';const DEFAULT_EXPIRATION_PERIOD = Number.MAX_SAFE_INTEGER;/*** Creates a {@link UserDataProvider} that stores {@link UserData} in {@link localStorage}.*/export const createLocalStorageUserDataProvider = (udLSKey = USER_DATA_LS_KEY,options?: LSUserDataProviderOptions,): UserDataProvider => {const getExpirationDateFromLS = (): number | undefined => {const expirationDateFromLS = localStorage.getItem(USERDATA_EXPIRATION_DATE_LS_KEY);if (!expirationDateFromLS) {return undefined;}return JSON.parse(expirationDateFromLS);};const setExpirationDateToLS = () => {localStorage.setItem(USERDATA_EXPIRATION_DATE_LS_KEY,JSON.stringify(options?.expirationPeriod ?? DEFAULT_EXPIRATION_PERIOD),);};const getUserDataFromLS = (): UserData | undefined => {const userDataFromLS = localStorage.getItem(udLSKey);if (!userDataFromLS) {return undefined;}return JSON.parse(userDataFromLS);};const setUserDataToLS = (userData: UserData) => {localStorage.setItem(udLSKey, JSON.stringify(userData));};const clearUserDataFromLS = () => {localStorage.removeItem(udLSKey);localStorage.removeItem(USERDATA_EXPIRATION_DATE_LS_KEY);};/*** Check if the expiration date is set and if it's expired*/const expirationDate = getExpirationDateFromLS();if (!expirationDate) {clearUserDataFromLS();setExpirationDateToLS();} else {if (Date.now() > expirationDate) {clearUserDataFromLS();setExpirationDateToLS();}}/*** This method `dxcharts-react` will call on init and some other lifecycle events* to get the stored {@link UserData}*/const getUserData = () => {const userData = getUserDataFromLS();if (!userData) {console.warn('No user data created yet');return Promise.resolve(null);}return Promise.resolve(userData);};/*** When a user changes something in {@link UserData} this method is called by `dxcharts-react`* to notify that you should sync {@link UserData} state with external store*/const setUserData = (newUserData: UserData) => {setUserDataToLS(newUserData);return Promise.resolve(void 0);};return {getUserData,setUserData,};};
API reference
UserDataProvider
To remember global user settings like custom colors and custom aggregation periods
- UserDataProvider.getUserData
- Returns
- Promise<UserData>
UserDataProvider.getUserData(): Promise<UserData>
Returns custom user data. If no data available, Promise.reject() is also valid return value
- UserDataProvider.setUserData
- Parameters
- userData: UserData
- Returns
- Promise<void>
UserDataProvider.setUserData(userData: UserData): Promise<void>
Updates custom user data