Users reusable renders the Manage users area in the Profile page.Reusables/Users/Default.js via Alpine (x-data="usersreusabledefault.initComponent(...)").Components/Profile/Default.liquiduserManagementx-data='usersreusabledefault.initComponent({{ userManagement | serialize | escape }}, {{ currentPage }}, {{ totalPages }}, "{{ Reusables.Users.Translations.FetchUsersErrorMessage }}")'Reusables/Users:userManagement (+ userManagement.metadata.roles and userManagement.metadata.branches)translations are not included here (they come from Reusables.Users.Translations.*){
"userManagement": {
"canManageUsers": true,
"users": [
{
"id": "516d2d09-71c1-4c80-a47e-167b0e138dba",
"email": "user1@example.com",
"firstName": "Afroditi",
"lastName": "Asimakopoulou",
"isEmailConfirmed": true,
"customerId": "75a4bd09-4369-43ee-a7f4-04203ff68fb2",
"roleId": "admin",
"roleName": "Διαχειριστής",
"hasCompanyAccess": true,
"hasAllBranchesAccess": true,
"branchIds": []
},
{
"id": "896cb52c-9b43-46a4-8085-757701da145a",
"email": "user2@example.com",
"firstName": "GEORGE",
"lastName": "GOUVITSAS",
"isEmailConfirmed": true,
"customerId": "75a4bd09-4369-43ee-a7f4-04203ff68fb2",
"roleId": "admin",
"roleName": "Διαχειριστής",
"hasCompanyAccess": true,
"hasAllBranchesAccess": true,
"branchIds": []
},
{
"id": "2efebe85-32b1-4aa5-9773-71e5ee8c9484",
"email": "user3@example.com",
"firstName": "",
"lastName": "",
"isEmailConfirmed": false,
"customerId": "75a4bd09-4369-43ee-a7f4-04203ff68fb2",
"roleId": "03d0afdd-4e92-43b8-afd1-98421abd6a41",
"roleName": "Αγοραστής",
"hasCompanyAccess": false,
"hasAllBranchesAccess": false,
"branchIds": []
}
],
"pagination": {
"totalCount": 0,
"pageSize": 12,
"pageNumber": 1,
"numberOfPages": 2
},
"metadata": {
"roles": [
{
"id": "admin",
"name": "Διαχειριστής"
},
{
"id": "03d0afdd-4e92-43b8-afd1-98421abd6a41",
"name": "Αγοραστής"
}
],
"branches": [
{
"id": "fb3cce2e-675c-4f45-9fb1-1b1be89a72f8",
"name": "Afroditi Branch"
}
]
}
}
}userManagement.canManageUsers is true:userManagement.users.size > 0):for user in userManagement.users.x-for template for an updated users array after refresh (updateFlag).GlobalData.User.UserId to disable deleting your own user row.currentPage from userManagement.pagination.pageNumbertotalPages from userManagement.pagination.numberOfPagespages is generated in Liquid and passed into the Alpine component.Reusables/Users/Default.js exposes:usersreusabledefault.initComponent(userManagement, currentPage, totalPages, fetchUsersErrorMessage)users: current users listdata: userManagement.metadata (roles + branches)pagination: pagination infoloading, updateFlag$store.modal) to render 3 modal flows:removeUser(user, errorMessage).roleId (select from userManagement.metadata.roles)hasCompanyAccess (switch)hasAllBranchesAccess (switch)branchIds (checkbox list from userManagement.metadata.branches, conditionally hidden)$store.modalopen(...)close()shouldReinitializecurrent.data (used to find and toggle visibility of branchIds field)$store.toastremoveAll()add(message, iconClass, type, keepAlive, extraHtml, extraHtmlIndex)promptmodalreusabledefault.isDataValid(modalData) (from Reusables/PromptModal)servicesreusabledefault:servicesreusabledefault.deleteUser(user)servicesreusabledefault.updateUser(userToSend)servicesreusabledefault.inviteUser(...) (invite flow)servicesreusabledefault.fetchUsers(...) (refresh/pagination)servicesreusabledefault.Reusables/Users/Default.liquidReusables/Users/Default.jsReusables/Users/Default.json (consumed as Reusables.Users.Translations.*)GlobalData.User.UserId.hasAllBranchesAccess.x-for) after refresh; this is why updateFlag exists.