In the Users tab in the Admin Panel, we have a lot of user information displayed in a tabular form. This information is fetched from the accounting objects of each user. As the users are now able to also store their name in their respective accounting object, hence we needed to implement a feature to display the name of the users in the Users table in a separate column. This blog post explains how the user names are fetched from the respective accounting objects and are then displayed in the Users table in the Admin Panel.
How is name of user stored on the server?
The name of any user is stored in the user’s accounting object. All the settings of a user are stored in a JSONObject with the key name as ‘settings’. The name of a user is also stored in ‘settings’ JSONObject. This is shown as follows:
Modifying GetUsers.java to return name of users
The endpoint /aaa/getUsers.json is used to return the accounting info of all users. This includes their signup time, last login time, last login IP, etc. We needed to modify it to return the name of users also along with the already returned data. This is implemented as follows:
if(accounting.getJSON().has("settings")) { JSONObject settings = accounting.getJSON().getJSONObject("settings"); if(settings.has("userName")) { json.put("userName", settings.get("userName")); } else { json.put("userName", ""); } } else { json.put("userName", ""); } accounting.commit();
Fetching names of all users from the server
We need to make an AJAX call to ‘/aaa/getUsers.json’ as soon as we switch to the Users tab in the Admin Panel. We need to extract all the required data from the JSON response object and put them in state variables so that they can further be used as data indexes for different columns of the table. The implementation of the AJAX call is as follows:
let url = `${urls.API_URL}/aaa/getUsers.json?access_token=` + cookies.get('loggedIn') + '&page=' + page; $.ajax({ url: url, dataType: 'jsonp', jsonp: 'callback', crossDomain: true, success: function(response) { let userList = response.users; let users = []; userList.map((data, i) => { let user = { userName: data.userName, }; users.push(user); return 1; }); this.setState({ data: users, }); }.bind(this) });
Displaying name of users in Users tab in Admin Panel
We needed to add another column titled ‘User Name’ in the Users table in the Admin Panel. The ‘dataIndex’ attribute of the Ant Design table component specifies the data value which is to be used for that particular column. For our purpose, our data value which needs to be displayed in the ‘User Name’ column is ‘userName’. We also specify a width of the column as another attribute. The implementation is as follows:
this.columns = [ // other columns { title: 'User Name', dataIndex: 'userName', width: '12%', } // other columns ];
This is how the names of users are fetched from their accounting object and are then being displayed in the Users tab in Admin Panel.