diff --git a/package-lock.json b/package-lock.json
deleted file mode 100644
index d5557062c..000000000
--- a/package-lock.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "name": "ita-wiki",
- "lockfileVersion": 3,
- "requires": true,
- "packages": {}
-}
diff --git a/web/usuaris/CHANGELOG.md b/web/usuaris/CHANGELOG.md
index a2cfb38f7..b4ecdef4c 100644
--- a/web/usuaris/CHANGELOG.md
+++ b/web/usuaris/CHANGELOG.md
@@ -2,6 +2,15 @@
All notable changes to this project will be documented in this file.
+
+## [0.16.0] - 2024-05-09
+
+### Added
+
+- Added Role column to UsersTable
+- Added Roles filter feature
+
+
## [0.15.0] - 2024-05-08
### Added
@@ -14,6 +23,7 @@ All notable changes to this project will be documented in this file.
- Refetch users after user status changes to update interface
+
## [0.13.0] - 2024-04-29
### Added
@@ -22,6 +32,7 @@ All notable changes to this project will be documented in this file.
- Added dates to filters to fetch users in FiltersWidget
- Changed qs to handle null, undefined and empty string
+
## [0.12.0] - 2024-04-29
### Added
diff --git a/web/usuaris/package-lock.json b/web/usuaris/package-lock.json
index 45d475010..b671a3b78 100644
--- a/web/usuaris/package-lock.json
+++ b/web/usuaris/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "web_usuaris",
- "version": "0.13.0",
+ "version": "0.16.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "web_usuaris",
- "version": "0.13.0",
+ "version": "0.16.0",
"dependencies": {
"@hookform/resolvers": "^3.0.0",
"@itacademy/schemas": "^0.3.0",
@@ -53,7 +53,7 @@
"msw": "2.1.5",
"prettier": "2.8.4",
"typescript": "^5.0.4",
- "vite": "^5.0.13",
+ "vite": "5.0.13",
"vitest": "1.2.1"
}
},
diff --git a/web/usuaris/package.json b/web/usuaris/package.json
index fb53a8d13..daf62e6a9 100644
--- a/web/usuaris/package.json
+++ b/web/usuaris/package.json
@@ -1,7 +1,7 @@
{
"name": "web_usuaris",
"private": true,
- "version": "0.15.0",
+ "version": "0.16.0",
"type": "module",
"scripts": {
"dev": "vite",
@@ -57,7 +57,7 @@
"msw": "2.1.5",
"prettier": "2.8.4",
"typescript": "^5.0.4",
- "vite": "^5.0.13",
+ "vite": "5.0.13",
"vitest": "1.2.1"
}
}
diff --git a/web/usuaris/src/__mocks__/handlers.ts b/web/usuaris/src/__mocks__/handlers.ts
index c828d35bb..42ee9d7b0 100644
--- a/web/usuaris/src/__mocks__/handlers.ts
+++ b/web/usuaris/src/__mocks__/handlers.ts
@@ -1,6 +1,7 @@
import { HttpResponse, http } from 'msw'
import { urls } from '../constants'
import { UserStatus } from '../types'
+import { UserRole } from '../types/types'
export const handlers = [
http.get(urls.getUsers, ({ request }) => {
@@ -45,6 +46,7 @@ export const handlers = [
name: 'Ona Sitgar',
dni: '12345678A',
status: 'PENDING',
+ role: UserRole.ADMIN,
createdAt: '2023/11/05 00:00:00.000',
itineraryName: 'Backend Node',
},
@@ -53,6 +55,7 @@ export const handlers = [
name: 'Marc Bofill',
dni: '87654321B',
status: 'ACTIVE',
+ role: UserRole.REGISTERED,
createdAt: '2023/11/06 00:00:00.000',
itineraryName: 'Frontend React',
},
@@ -61,6 +64,7 @@ export const handlers = [
name: 'Montserrat Capdevila',
dni: '45678912C',
status: 'BLOCKED',
+ role: UserRole.REGISTERED,
createdAt: '2023/11/07 00:00:00.000',
itineraryName: 'Fullstack Php',
},
@@ -69,6 +73,7 @@ export const handlers = [
name: 'Anna Brull',
dni: '45678912D',
status: 'BLOCKED',
+ role: UserRole.ADMIN,
createdAt: '2023/11/08 00:00:00.000',
itineraryName: 'Frontend React',
},
@@ -77,6 +82,7 @@ export const handlers = [
name: 'Marc Serra',
dni: '12378912D',
status: 'BLOCKED',
+ role: UserRole.ADMIN,
createdAt: '2023/11/09 00:00:00.000',
itineraryName: 'Frontend Angular',
},
@@ -106,7 +112,7 @@ export const handlers = [
{
dni: '12345678A',
email: 'test@example.cat',
- role: 'ADMIN',
+ role: UserRole.ADMIN,
},
],
{ status: 200 }
diff --git a/web/usuaris/src/__tests__/hooks/useGetUsers.test.tsx b/web/usuaris/src/__tests__/hooks/useGetUsers.test.tsx
index defd76179..11ccf670e 100644
--- a/web/usuaris/src/__tests__/hooks/useGetUsers.test.tsx
+++ b/web/usuaris/src/__tests__/hooks/useGetUsers.test.tsx
@@ -4,6 +4,7 @@ import { renderHook, waitFor } from '../test-utils'
import { queryClient } from '../setup'
import { type TFilters } from '../../types'
import { UserStatus } from '../../types'
+import { UserRole } from '../../types/types'
describe('useGetUsers', () => {
it('fetches users successfully', async () => {
@@ -23,6 +24,7 @@ describe('useGetUsers', () => {
name: 'Ona Sitgar',
dni: '12345678A',
status: 'PENDING',
+ role: UserRole.ADMIN,
createdAt: '2023/11/05 00:00:00.000',
itineraryName: 'Backend Node',
},
@@ -31,6 +33,7 @@ describe('useGetUsers', () => {
name: 'Marc Bofill',
dni: '87654321B',
status: 'ACTIVE',
+ role: UserRole.REGISTERED,
createdAt: '2023/11/06 00:00:00.000',
itineraryName: 'Frontend React',
},
@@ -39,6 +42,7 @@ describe('useGetUsers', () => {
name: 'Montserrat Capdevila',
dni: '45678912C',
status: 'BLOCKED',
+ role: UserRole.REGISTERED,
createdAt: '2023/11/07 00:00:00.000',
itineraryName: 'Fullstack Php',
},
@@ -47,6 +51,7 @@ describe('useGetUsers', () => {
name: 'Anna Brull',
dni: '45678912D',
status: 'BLOCKED',
+ role: UserRole.ADMIN,
createdAt: '2023/11/08 00:00:00.000',
itineraryName: 'Frontend React',
},
@@ -55,6 +60,7 @@ describe('useGetUsers', () => {
name: 'Marc Serra',
dni: '12378912D',
status: 'BLOCKED',
+ role: UserRole.ADMIN,
createdAt: '2023/11/09 00:00:00.000',
itineraryName: 'Frontend Angular',
},
@@ -69,7 +75,6 @@ describe('useGetUsers', () => {
endDate: '2026-03-05T00:00:00.000Z',
name: 'John Doe',
dni: '99999999R',
- role: 'ADMIN',
}
const wrapper = ({ children }: { children: React.ReactNode }) => (
{children}
diff --git a/web/usuaris/src/__tests__/molecules/RoleFilter.test.tsx b/web/usuaris/src/__tests__/molecules/RoleFilter.test.tsx
new file mode 100644
index 000000000..82067f1af
--- /dev/null
+++ b/web/usuaris/src/__tests__/molecules/RoleFilter.test.tsx
@@ -0,0 +1,51 @@
+import { vi } from 'vitest'
+import { fireEvent, render, screen, waitFor } from '../test-utils'
+import { RoleFilter } from '../../components/molecules/RoleFilter'
+import { UserRole } from '../../types/types'
+import { roles } from '../../constants'
+
+const mockHandleClick = vi.fn()
+
+afterEach(() => {
+ vi.restoreAllMocks()
+})
+
+describe('RolesFilter', () => {
+ it('renders correctly', () => {
+ render()
+
+ waitFor(() => expect(screen.getByText(/rol/i)).toBeInTheDocument())
+ })
+
+ it('renders RoleList options when dropdown is clicked', async () => {
+ render()
+
+ const dropdown = screen.getByTestId('dropdown-header')
+
+ fireEvent.click(dropdown)
+
+ const promises = roles.map((role) =>
+ waitFor(() => screen.getByTestId(role.id))
+ )
+
+ await Promise.all(promises)
+ })
+
+ it('calls handleRole with the correct role when an option is clicked', () => {
+ render()
+
+ const dropdown = screen.getByTestId('dropdown-header')
+
+ fireEvent.click(dropdown)
+
+ const roleOption = screen.getByText(/ADMIN/i)
+
+ fireEvent.click(roleOption)
+
+ expect(mockHandleClick).toHaveBeenCalledWith({
+ id: UserRole.ADMIN,
+ name: 'Administrador',
+ slug: UserRole.ADMIN,
+ })
+ })
+})
diff --git a/web/usuaris/src/__tests__/organisms/UsersTable.test.tsx b/web/usuaris/src/__tests__/organisms/UsersTable.test.tsx
index 4e7f308ae..942d2e86d 100644
--- a/web/usuaris/src/__tests__/organisms/UsersTable.test.tsx
+++ b/web/usuaris/src/__tests__/organisms/UsersTable.test.tsx
@@ -3,6 +3,7 @@ import { UsersTable } from '../../components/organisms'
import { errorHandlers } from '../../__mocks__/handlers'
import { server } from '../../__mocks__/server'
import { UserStatus } from '../../types'
+import { UserRole } from '../../types/types'
afterEach(() => {
server.resetHandlers()
@@ -37,13 +38,16 @@ describe('UsersTable', () => {
expect(screen.getByText(/Pendent/i)).toBeInTheDocument()
expect(screen.getByText(/Backend Node/i)).toBeInTheDocument()
expect(screen.getByText(/Acceptar/i)).toBeInTheDocument()
- expect(screen.getByText(/Actiu/i)).toBeInTheDocument()
expect(screen.getByText('Bloquejar')).toBeInTheDocument()
+ expect(screen.getByText(/Actiu/i)).toBeInTheDocument()
expect(screen.getByText(/Fullstack Php/i)).toBeInTheDocument()
const frontReact = screen.getAllByText(/Frontend React/i)
frontReact.forEach((item) => expect(item).toBeInTheDocument())
+ const adminRol = screen.getAllByText(/Administrador/i)
+ adminRol.forEach((item) => expect(item).toBeInTheDocument())
+
const blockedStatus = screen.getAllByText('Bloquejat')
blockedStatus.forEach((status) => expect(status).toBeInTheDocument())
@@ -65,6 +69,7 @@ describe('UsersTable', () => {
endDate: '2023/11/06 00:00:00.000',
name: 'marc',
dni: 'marc',
+ role: UserRole.ADMIN,
}}
/>
)
diff --git a/web/usuaris/src/components/molecules/RoleFilter.tsx b/web/usuaris/src/components/molecules/RoleFilter.tsx
new file mode 100644
index 000000000..57771dc34
--- /dev/null
+++ b/web/usuaris/src/components/molecules/RoleFilter.tsx
@@ -0,0 +1,60 @@
+import { FC } from 'react'
+import styled from 'styled-components'
+import {
+ colors,
+ dimensions,
+ Dropdown,
+ font,
+ type TDropdownOption,
+} from '@itacademy/ui'
+import { useTranslation } from 'react-i18next'
+import { TRole } from '../../types/types'
+import { roles } from '../../constants'
+
+const StyledDropdown = styled(Dropdown)`
+ && button {
+ width: 210px;
+ padding: ${dimensions.spacing.xxs};
+ font-size: ${font.xs};
+ font-weight: 500;
+
+ &:hover {
+ background-color: ${colors.primary};
+ color: ${colors.white};
+ }
+
+ > span {
+ padding-left: ${dimensions.spacing.xxxs};
+ font-weight: 400;
+ }
+ }
+`
+
+type TRoleFilter = {
+ handleRole: (value: TRole | undefined) => void
+}
+
+export const RoleFilter: FC = ({ handleRole }) => {
+ const { t } = useTranslation()
+
+ const handleSelectedValue = (selectedOption: TDropdownOption | undefined) => {
+ if (selectedOption) {
+ const selectedRole = roles.find(
+ (role: TRole) => role.id === selectedOption.id
+ )
+ if (selectedRole) {
+ handleRole(selectedRole)
+ }
+ } else {
+ handleRole(undefined)
+ }
+ }
+
+ return roles && roles.length > 0 ? (
+
+ ) : null
+}
diff --git a/web/usuaris/src/components/molecules/index.ts b/web/usuaris/src/components/molecules/index.ts
index c13e681e1..2d7926fcb 100644
--- a/web/usuaris/src/components/molecules/index.ts
+++ b/web/usuaris/src/components/molecules/index.ts
@@ -1,4 +1,6 @@
export { DateRange, type TDateRange } from './DateRange'
export { ItineraryDropdown } from './ItineraryDropdown'
export { StatusDropdown } from './StatusDropdown'
+export { RoleFilter } from './RoleFilter'
+
export { Table, type TTable } from './Table'
diff --git a/web/usuaris/src/components/organisms/FiltersWidget.tsx b/web/usuaris/src/components/organisms/FiltersWidget.tsx
index 2d29a17fc..674531c33 100644
--- a/web/usuaris/src/components/organisms/FiltersWidget.tsx
+++ b/web/usuaris/src/components/organisms/FiltersWidget.tsx
@@ -5,6 +5,8 @@ import { useTranslation } from 'react-i18next'
import { DateRange, StatusDropdown } from '../molecules'
import { ItineraryDropdown } from '../molecules/ItineraryDropdown'
import { type TFilters, TItinerary, UserStatus } from '../../types'
+import { RoleFilter } from '../molecules/RoleFilter'
+import { TRole } from '../../types/types'
const FiltersContainer = styled(FlexBox)`
width: 100%;
@@ -21,6 +23,9 @@ export const FiltersWidget: FC = ({ filters, setFilters }) => {
const handleItinerary = (itinerary: TItinerary | undefined) => {
setFilters({ ...filters, itinerarySlug: itinerary?.slug })
}
+ const handleRole = (role: TRole | undefined) => {
+ setFilters({ ...filters, role: role?.slug })
+ }
const handleStatus = (selectedStatus: UserStatus | undefined) => {
setFilters({ ...filters, status: selectedStatus })
@@ -54,6 +59,8 @@ export const FiltersWidget: FC = ({ filters, setFilters }) => {
>
+
+
`
@@ -39,9 +40,9 @@ export const StatusStyled = styled.div`
border-radius: ${dimensions.borderRadius.xs};
background-color: ${({ status }) => {
switch (status) {
- case 'PENDING':
+ case UserStatus.PENDING:
return '#FCD9D9'
- case 'BLOCKED':
+ case UserStatus.BLOCKED:
return '#FCDEC0'
default:
return '#C6F1DA'
diff --git a/web/usuaris/src/components/organisms/UsersTable/UsersTable.tsx b/web/usuaris/src/components/organisms/UsersTable/UsersTable.tsx
index 6a27b9967..5c54cbd98 100644
--- a/web/usuaris/src/components/organisms/UsersTable/UsersTable.tsx
+++ b/web/usuaris/src/components/organisms/UsersTable/UsersTable.tsx
@@ -19,6 +19,7 @@ import {
StatusStyled,
TableContainer,
} from './UsersTable.styles'
+import { UserRole } from '../../../types/types'
type TUsersTable = {
filtersSelected: TFilters | Record
@@ -34,6 +35,7 @@ export const UsersTable: FC = ({ filtersSelected }) => {
const [selectedStatus, setSelectedStatus] = useState(
undefined
)
+
const [selectedUsers, setSelectedUsers] = useState([])
const { changeUserStatus } = useUpdateUser()
@@ -96,7 +98,7 @@ export const UsersTable: FC = ({ filtersSelected }) => {
const columHelper = createColumnHelper()
- const columns: ColumnDef[] = [
+ const columns: ColumnDef[] = [
columHelper.accessor('id', {
header: '',
cell: ({ row }) => {
@@ -217,6 +219,24 @@ export const UsersTable: FC = ({ filtersSelected }) => {
)
},
}),
+
+ columHelper.accessor('role', {
+ header: `${t('Rol')}`,
+ cell: ({ row }) => {
+ const role: UserRole = row.getValue('role')
+ const status: UserStatus = row.getValue('status')
+ let isDisabled: boolean | undefined
+
+ if (selectedStatus && selectedStatus !== status) {
+ isDisabled = true
+ } else {
+ isDisabled = undefined
+ }
+
+ return {t(role)}
+ },
+ }),
+
columHelper.display({
id: 'actions',
header: () => (
diff --git a/web/usuaris/src/constants/index.ts b/web/usuaris/src/constants/index.ts
index ac1dd127d..42848d028 100644
--- a/web/usuaris/src/constants/index.ts
+++ b/web/usuaris/src/constants/index.ts
@@ -1,2 +1,3 @@
export { urls } from './urls'
export { paths } from './paths'
+export { roles } from './roles'
diff --git a/web/usuaris/src/constants/roles.ts b/web/usuaris/src/constants/roles.ts
new file mode 100644
index 000000000..4366a761a
--- /dev/null
+++ b/web/usuaris/src/constants/roles.ts
@@ -0,0 +1,13 @@
+import i18n from '../i18n'
+import { TRole, UserRole } from '../types/types'
+
+type TRoleKey = keyof typeof UserRole
+
+const getRoles = (roles: TRoleKey[]): TRole[] =>
+ roles.map((role: TRoleKey) => ({
+ id: role,
+ name: i18n.t(role),
+ slug: role,
+ }))
+
+export const roles = getRoles(Object.keys(UserRole) as TRoleKey[])
diff --git a/web/usuaris/src/helpers/fetchers.ts b/web/usuaris/src/helpers/fetchers.ts
index 307ad9c66..d722f8232 100644
--- a/web/usuaris/src/helpers/fetchers.ts
+++ b/web/usuaris/src/helpers/fetchers.ts
@@ -13,6 +13,7 @@ export const getItineraries = async () =>
throw new Error(`Error fetching itineraries: ${err.message}`)
})
+
export const getUsers = async (filters: string) => {
const response = await fetch(`${urls.getUsers}?${filters}`)
if (!response.ok) {
diff --git a/web/usuaris/src/locales/cat.json b/web/usuaris/src/locales/cat.json
index 51f6f6234..7e3db5ab1 100644
--- a/web/usuaris/src/locales/cat.json
+++ b/web/usuaris/src/locales/cat.json
@@ -4,28 +4,23 @@
"RegistrarmeBtn": "Registrar-me",
"EntrarBtn": "Entrar",
"Funcionalitats": "Funcionalitats bàsiques que t'ofereix aquesta plataforma:",
-
"Guarda els teus recursos": "Guarda els teus recursos preferits",
"Tingues els teus recursos": "Tingues els teus recursos ben organitzats",
-
"Col·labora": "Col·labora amb els teus companys i companyes",
"Recursos compartits": "Recursos compartits",
-
"Vota els recursos": "Vota els recursos",
"La comunitat decideix": "La comunitat decideix quins són més rellevants",
-
"Configuración": "Configuració",
"Añadir recurso": "Afegeix un recurs",
"Menú": "Menú",
"Ajustes": "Ajustaments",
"Cerrar": "Tanca",
"camp obligatori": "Aquest camp és obligatori",
-
"Administrador de Usuarios": "Administrador d'Usuaris",
-
"Registre": "Registre",
"DNI": "DNI o NIE",
"Especialidad": "Especialitat",
+ "Rol": "Rol",
"Password": "Contrasenya",
"repetirpassword": "Repetir contrasenya",
"password error": "La contrasenya ha de contenir només lletres i números, mínim 8 caràcters, un número, una majúscula i una minúscula",
@@ -36,16 +31,13 @@
"tienes una cuenta?": "Tens un compte?, entra",
"recordar/cambiar": "Recordar/canviar la contrasenya",
"no tienes una cuenta?": "No tens un compte?, crea'n un",
-
"Acceso restringido": "Accés restringit",
"Regístrate para subir o votar contenido": "Registra't per pujar o votar contingut",
"Registrarme": "Registrar-me",
"Entrar": "Entrar",
-
"Editar recurso": "Edita el recurs",
"Eliminar de favoritos": "Elimina de preferits",
"Añadir a favoritos": "Afegeix a preferits",
-
"Recursos favoritos": "Recursos preferits",
"Recursos que te gustan": "Recursos que t'agraden",
"Regístrate": "Registra't",
@@ -57,16 +49,13 @@
"Mis recursos": "Els meus recursos",
"Tus recursos": "Els teus recursos",
"No has subido ningún recurso": "No has publicat cap recurs",
-
"Temas": "Temes",
"Usuarios": "Usuaris",
-
"No hay temas disponibles.": "No hi ha temes disponibles.",
"Accede desde una categoría para ver o gestionar sus temas.": "Accedeix des d'una categoria per veure o gestionar els temes.",
"Temas de (category)": "Temes de {{name}}",
"No tienes permiso de acceso": "No tens els permisos necessaris per accedir a aquest contingut.",
"Ha habido un error...": "Hi ha hagut un error...",
-
"Lista de usuarios": "Llista d'usuaris",
"Buscar por DNI:": "Cerca per DNI:",
"Introduce el DNI": "Introdueix el DNI",
@@ -76,7 +65,6 @@
"Cambiar estado": "Canviar estat",
"Desactivar": "Desactivar",
"Activar": "Activar",
-
"+ Crear nuevo tema": "+ Crea un nou tema",
"Nombre del tema": "Nom del tema",
"Nombre del nuevo tema": "Nom del tema nou",
@@ -87,7 +75,6 @@
"Cancelar": "Cancel·la",
"Borrar tema": "Esborra el tema",
"No es posible borrar el tema.": "No és possible esborrar el tema.",
-
"Filtros": "Filtres",
"Recursos de (category)": "Recursos de {{name}}",
"Buscar recurso": "Buscar recurs",
@@ -96,28 +83,23 @@
"Fecha": "Data",
"Crear nuevo recurso": "Crear nou recurs",
"searchErrorMessage": "Escriu al menys 2 caràcters",
-
"Crear": "Crear",
"Título": "Títol",
"Descripción": "Descripció",
"Opciones": "Opcions",
"Tema": "Tema",
"Curso": "Curs",
-
"Todos": "Tots",
"Por ver": "Pendents",
"Vistos": "Vistos",
"Tipo": "Format",
-
"¡Vaya! :/": "Vaja! :/",
"Todavía no hay recursos de este tipo.": "Encara no hi ha recursos d'aquest tipus.",
-
"Error 401 - No autorizado": "Operació no autoritzada. És necessari iniciar sessió d'usuari.",
"Error 403 - Acceso denegado": "Accés denegat. No tens els permisos necessaris per realitzar l'operació.",
"Error 404 - No se puede guardar": "Error en desar a la base de dades. Si us plau, torna a intentar-ho i si l'error persisteix, contacta amb l'administrador.",
"Error 405 - Id de usuario inválido": "Identificador d'usuari no vàlid.",
"Error 500 - Error bbdd": "Error en la base de dades. Per favor, intenta-ho més tard.",
-
"Volver": "Torna",
"Cerrar sesión": "Tanca sessió",
"Sin imagen de usuario": "Sense imatge d'usuari",
@@ -125,17 +107,14 @@
"Votos recibidos": "Vots rebuts",
"Favoritos guardados": "Recursos preferits",
"n/d": "n/d",
-
"Mostrando": "Mostrant",
"resultados para": "resultat per",
"Nuevo Recurso": "Nou recurs",
-
"Fecha de inicio": "Data d'inici",
"Fecha final": "Data final",
"De...": "De...",
"Hasta...": "Fins...",
"calendarLanguage": "ca",
-
"Especialización": "Especialització",
"Fecha alta": "Data alta",
"Acciones": "Accions",
@@ -144,20 +123,18 @@
"BLOCKED": "Bloquejat",
"Aceptar": "Acceptar",
"Bloquear": "Bloquejar",
+ "ADMIN": "Administrador",
+ "REGISTERED": "Registrat",
+ "MENTOR": "Mentor",
"Desbloquear": "Desbloquejar",
"No hay usuarios para mostrar": "No hi ha usuaris per mostrar",
-
"Mentores": "Mentors",
"Connector": "Connector",
-
"Identificador o contraseña incorrectos": "Identificador o contrasenya incorrectes",
-
"Credenciales incorrectas.": "Credencials incorrectes.",
"Sólo accesible a usuarios administradores activos.": "Només accessible a usuaris administradors actius.",
-
"Abrir": "Obre",
"Deseleccionar": "Deselecciona",
-
"Búsqueda de usuarios": "Cerca d'usuaris",
"Buscar": "Cercar"
-}
+}
\ No newline at end of file
diff --git a/web/usuaris/src/locales/en.json b/web/usuaris/src/locales/en.json
index 2a50f059a..2b2e4d5af 100644
--- a/web/usuaris/src/locales/en.json
+++ b/web/usuaris/src/locales/en.json
@@ -4,28 +4,23 @@
"RegistrarmeBtn": "Sign Up",
"EntrarBtn": "Log In",
"Funcionalitats": "This is what you can do on this platform:",
-
"Guarda els teus recursos": "Save your favorite resources",
"Tingues els teus recursos": "Have your resources well organized",
-
"Col·labora": "Collaborate with your course mates",
"Recursos compartits": "Shared resources",
-
"Vota els recursos": "Vote resources",
"La comunitat decideix": "The community decides which ones are the most relevant",
-
"Configuración": "Settings",
"Añadir recurso": "Add resource",
"Menú": "Menu",
"Ajustes": "Settings",
"Cerrar": "Close",
"camp obligatori": "This field is required",
-
"Administrador de Usuarios": "Users Manager",
-
"Registre": "Register",
"DNI": "DNI or NIE",
"Especialidad": "Specialization",
+ "Rol": "Role",
"Password": "Password",
"repetirpassword": "Confirm password",
"password error": "Password must contain only letters and numbers, at least 8 characters, a number, an uppercase letter and a lowercase letter",
@@ -36,16 +31,13 @@
"tienes una cuenta?": "Do you have an account?, log in",
"recordar/cambiar": "Remember/change password",
"no tienes una cuenta?": "Don't have an account?, create one",
-
"Acceso restringido": "Restricted access",
"Regístrate para subir o votar contenido": "Sign up to upload or vote on content",
"Registrarme": "Sign up",
"Entrar": "Login",
-
"Editar recurso": "Edit resource",
"Eliminar de favoritos": "Remove from favorites",
"Añadir a favoritos": "Add to favorites",
-
"Recursos favoritos": "Favorite resources",
"Recursos que te gustan": "Resources you like",
"Regístrate": "Sign up",
@@ -57,16 +49,13 @@
"Mis recursos": "My resources",
"Tus recursos": "Your resources",
"No has subido ningún recurso": "You do not have resources",
-
"Temas": "Topics",
"Usuarios": "Users",
-
"No hay temas disponibles.": "No topics available.",
"Accede desde una categoría para ver o gestionar sus temas.": "Access from a category to view or manage its topics.",
"Temas de (category)": "{{name}} topics",
"No tienes permiso de acceso": "You do not have the necessary permissions to access this content.",
"Ha habido un error...": "An error has occurred.",
-
"Lista de usuarios": "Users list",
"Buscar por DNI:": "Search by DNI:",
"Introduce el DNI": "Enter DNI",
@@ -76,7 +65,6 @@
"Cambiar estado": "Change status",
"Desactivar": "Deactivate",
"Activar": "Activate",
-
"+ Crear nuevo tema": "+ Create new topic",
"Nombre del tema": "Topic name",
"Nombre del nuevo tema": "New topic name",
@@ -87,7 +75,6 @@
"Cancelar": "Cancel",
"Borrar tema": "Delete topic",
"No es posible borrar el tema.": "The topic cannot be deleted.",
-
"Filtros": "Filters",
"Recursos de (category)": "Resources of {{name}}",
"Buscar recurso": "Find resource",
@@ -96,28 +83,23 @@
"Fecha": "Date",
"Crear nuevo recurso": "Create new resource",
"searchErrorMessage": "Enter at least 2 characters",
-
"Crear": "Create",
"Título": "Title",
"Descripción": "Description",
"Opciones": "Options",
"Tema": "Topic",
"Curso": "Course",
-
"Todos": "All",
"Por ver": "To be seen",
"Vistos": "Seen",
"Tipo": "Type",
-
"¡Vaya! :/": "Oops! :/",
"Todavía no hay recursos de este tipo.": "There are no available resources of this kind yet.",
-
"Error 401 - No autorizado": "Unauthorized operation. User login required.",
"Error 403 - Acceso denegado": "Access denied. You do not have the necessary permissions to perform the operation.",
"Error 404 - No se puede guardar": "Error saving to database. Please try again and if the error persists, contact the administrator.",
"Error 405 - Id de usuario inválido": "Invalid user ID.",
"Error 500 - Error bbdd": "Database error. Please try again later.",
-
"Volver": "Back",
"Cerrar sesión": "Logout",
"Sin imagen de usuario": "No user image",
@@ -125,17 +107,14 @@
"Votos recibidos": "Votes received",
"Favoritos guardados": "Saved favorites",
"n/d": "n/a",
-
"Mostrando": "Showing",
"resultados para": "results for",
"Nuevo Recurso": "New resource",
-
"Fecha de inicio": "Initial date",
"Fecha final": "Final date",
"De...": "From...",
"Hasta...": "To...",
"calendarLanguage": "en-IN",
-
"Especialización": "Specialization",
"Fecha alta": "Registration date",
"Acciones": "Actions",
@@ -145,19 +124,17 @@
"Aceptar": "Accept",
"Bloquear": "Block",
"Desbloquear": "Unblock",
+ "ADMIN": "Admin",
+ "REGISTERED": "Registered",
+ "MENTOR": "Mentor",
"No hay usuarios para mostrar": "There are no users to display",
-
"Mentores": "Mentors",
"Connector": "Connector",
-
"Identificador o contraseña incorrectos": "Invalid Id or password",
-
"Credenciales incorrectas.": "Wrong credentials.",
"Sólo accesible a usuarios administradores activos.": "Only accesible to active administrator users.",
-
"Abrir": "Open",
"Deseleccionar": "Deselect",
-
"Búsqueda de usuarios": "Usears search",
"Buscar": "Search"
}
diff --git a/web/usuaris/src/locales/es.json b/web/usuaris/src/locales/es.json
index 836ec187d..9e673f5a6 100644
--- a/web/usuaris/src/locales/es.json
+++ b/web/usuaris/src/locales/es.json
@@ -4,28 +4,23 @@
"RegistrarmeBtn": "Registrarme",
"EntrarBtn": "Entrar",
"Funcionalitats": "Funcionalidades básicas que te ofrece esta plataforma:",
-
"Guarda els teus recursos": "Guarda tus recursos favoritos",
"Tingues els teus recursos": "Ten tus recursos bien organizados",
-
"Col·labora": "Colabora con tus compañer@s",
"Recursos compartits": "Recursos compartidos",
-
"Vota els recursos": "Vota los recursos",
"La comunitat decideix": "La comunidad decide cuáles son más relevantes",
-
"Configuración": "Configuración",
"Añadir recurso": "Añadir recurso",
"Menú": "Menú",
"Ajustes": "Ajustes",
"Cerrar": "Cerrar",
"camp obligatori": "Este campo es obligatorio",
-
"Administrador de Usuarios": "Administrador de Usuarios",
-
"Registre": "Registro",
"DNI": "DNI o NIE",
"Especialidad": "Especialidad",
+ "Rol": "Rol",
"Password": "Contraseña",
"repetirpassword": "Repetir contraseña",
"password error": "La contraseña debe contener solo letras y números, mínimo 8 caracteres, un número, una mayúscula y una minúscula",
@@ -36,16 +31,13 @@
"tienes una cuenta?": "¿Tienes una cuenta?, entrar",
"recordar/cambiar": "Recordar/cambiar contraseña",
"no tienes una cuenta?": "¿No tienes una cuenta?, crear una",
-
"Acceso restringido": "Acceso restringido",
"Regístrate para subir o votar contenido": "Regístrate para subir o votar contenido",
"Registrarme": "Registrarme",
"Entrar": "Entrar",
-
"Editar recurso": "Editar recurso",
"Eliminar de favoritos": "Eliminar de favoritos",
"Añadir a favoritos": "Añadir a favoritos",
-
"Recursos favoritos": "Recursos favoritos",
"Recursos que te gustan": "Recursos que te gustan",
"Regístrate": "Regístrate",
@@ -57,16 +49,13 @@
"Mis recursos": "Mis recursos",
"Tus recursos": "Tus recursos",
"No has subido ningún recurso": "No has subido ningún recurso",
-
"Temas": "Temas",
"Usuarios": "Usuarios",
-
"No hay temas disponibles.": "No hay temas disponibles.",
"Accede desde una categoría para ver o gestionar sus temas.": "Accede desde una categoría para ver o gestionar sus temas.",
"Temas de (category)": "Temas de {{name}}",
"No tienes permiso de acceso": "No tienes los permisos necesarios para acceder a este contenido.",
"Ha habido un error...": "Ha habido un error...",
-
"Lista de usuarios": "Lista de usuarios",
"Buscar por DNI:": "Buscar por DNI:",
"Introduce el DNI": "Introduce el DNI",
@@ -76,7 +65,6 @@
"Cambiar estado": "Cambiar estado",
"Desactivar": "Desactivar",
"Activar": "Activar",
-
"+ Crear nuevo tema": "+ Crear nuevo tema",
"Nombre del tema": "Nombre del tema",
"Nombre del nuevo tema": "Nombre del nuevo tema",
@@ -87,7 +75,6 @@
"Cancelar": "Cancelar",
"Borrar tema": "Borrar tema",
"No es posible borrar el tema.": "No es posible borrar el tema.",
-
"Filtros": "Filtros",
"Recursos de (category)": "Recursos de {{name}}",
"Buscar recurso": "Buscar recurso",
@@ -96,28 +83,23 @@
"Fecha": "Fecha",
"Crear nuevo recurso": "Crear nuevo recurso",
"searchErrorMessage": "Escribe al menos 2 carácteres",
-
"Crear": "Crear",
"Título": "Título",
"Descripción": "Descripción",
"Opciones": "Opciones",
"Tema": "Tema",
"Curso": "Curso",
-
"Todos": "Todos",
"Por ver": "Por ver",
"Vistos": "Vistos",
"Tipo": "Tipo",
-
"¡Vaya! :/": "¡Vaya! :/",
"Todavía no hay recursos de este tipo.": "Todavía no hay recursos de este tipo.",
-
"Error 401 - No autorizado": "Operación no autorizada. Es necesario iniciar sesión de usuario.",
"Error 403 - Acceso denegado": "Acceso denegado. No tienes los permisos necesarios para realizar la operación.",
"Error 404 - No se puede guardar": "Error al guardar en la base de datos. Por favor, inténtalo de nuevo y si el error persiste, contacta con el administrador.",
"Error 405 - Id de usuario inválido": "Identificador de usuario no válido.",
"Error 500 - Error bbdd": "Error en la base de datos. Por favor, inténtalo más tarde.",
-
"Volver": "Volver",
"Cerrar sesión": "Cerrar sesión",
"Sin imagen de usuario": "Sin imagen de usuario",
@@ -125,17 +107,14 @@
"Votos recibidos": "Votos recibidos",
"Favoritos guardados": "Favoritos guardados",
"n/d": "n/d",
-
"Mostrando": "Mostrando",
"resultados para": "resultados para",
"Nuevo Recurso": "Nuevo recurso",
-
"Fecha de inicio": "Fecha de inicio",
"Fecha final": "Fecha final",
"De...": "De...",
"Hasta...": "Hasta...",
"calendarLanguage": "es",
-
"Especialización": "Especialización",
"Fecha alta": "Fecha alta",
"Acciones": "Acciones",
@@ -145,19 +124,17 @@
"Aceptar": "Aceptar",
"Bloquear": "Bloquear",
"Desbloquear": "Desbloquear",
+ "ADMIN": "Administrador",
+ "REGISTERED": "Registrado",
+ "MENTOR": "Mentor",
"No hay usuarios para mostrar": "No hay usuarios para mostrar",
-
"Mentores": "Mentores",
"Connector": "Conector",
-
"Identificador o contraseña incorrectos": "Identificador o contraseña incorrectos",
-
"Credenciales incorrectas.": "Credenciales incorrectas.",
"Sólo accesible a usuarios administradores activos.": "Sólo accesible a usuarios administradores activos.",
-
"Abrir": "Obre",
"Deseleccionar": "Deselecciona",
-
"Búsqueda de usuarios": "Búsqueda de usuarios",
"Buscar": "Buscar"
}
diff --git a/web/usuaris/src/types/types.tsx b/web/usuaris/src/types/types.tsx
index f3b9450cb..7fdbae23a 100644
--- a/web/usuaris/src/types/types.tsx
+++ b/web/usuaris/src/types/types.tsx
@@ -20,14 +20,20 @@ export type TItinerary = {
slug: string
}
+export type TRole = {
+ id: string
+ name: string
+ slug: string
+}
+
export type TUpdatedUser = {
id: string
dni?: string
email?: string
name?: string
password?: string
- role?: string
status?: UserStatus
+ role?: UserRole
deletedAt?: string
itineraryId?: string
}
@@ -36,7 +42,14 @@ export type TUserData = {
id: string
name: string
dni: string
- status: UserStatus
+ status: string
createdAt: string
itineraryName: string
+ role: string
+}
+
+export enum UserRole {
+ ADMIN = 'ADMIN',
+ REGISTERED = 'REGISTERED',
+ MENTOR = 'MENTOR',
}