sass-cms-template-common 0.0.5 → 0.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sass-cms-template-common",
3
- "version": "0.0.5",
3
+ "version": "0.0.7",
4
4
  "description": "Componentes y utilidades compartidas para CMS Bluestack",
5
5
  "type": "module",
6
6
  "engines": {
@@ -54,6 +54,7 @@
54
54
  "@emotion/react": "^11.14.0",
55
55
  "@emotion/styled": "^11.14.1",
56
56
  "@eslint/js": "^10.0.1",
57
+ "@fontsource/roboto": "^5.2.10",
57
58
  "@mui/icons-material": "^9.0.1",
58
59
  "@mui/material": "^9.0.1",
59
60
  "@mui/material-nextjs": "^9.0.1",
@@ -1,178 +0,0 @@
1
- //#region src/lib/utils/site-selector.ts
2
- var e = "#ECEDF6", t = "#D8E2FF", n = "#FFFFFF", r = "bluestack-es";
3
- function i(e) {
4
- return e.flatMap((e) => e.publications);
5
- }
6
- function a(e, t) {
7
- return i(e).find((e) => String(e.id) === t);
8
- }
9
- function o(e, t) {
10
- return i(e).find((e) => String(e.id) === t)?.description ?? "Seleccionar publicación";
11
- }
12
- function s(e) {
13
- let t = i(e)[0];
14
- return t ? String(t.id) : "1";
15
- }
16
- function c(e) {
17
- let t = Number(e);
18
- return Number.isFinite(t) && t > 0 ? t : 1;
19
- }
20
- //#endregion
21
- //#region src/lib/services/users.ts
22
- var l = class {
23
- props;
24
- authentication;
25
- constructor(e) {
26
- this.props = e, this.authentication = e.authentication;
27
- }
28
- getUsers = async (e = {}) => {
29
- try {
30
- return (await this.props.axiosApi.post("/users/get", {
31
- authentication: this.authentication,
32
- filters: e
33
- })).data;
34
- } catch (e) {
35
- return console.error("[/users/get]", e), Promise.reject(e);
36
- }
37
- };
38
- getPublicationUsers = async (e = {}) => {
39
- try {
40
- return (await this.props.axiosApi.post("/users/publication", {
41
- authentication: this.authentication,
42
- filters: e
43
- })).data;
44
- } catch (e) {
45
- return console.error("[/users/publication]", e), Promise.reject(e);
46
- }
47
- };
48
- getGroups = async (e = "/") => {
49
- try {
50
- return (await this.props.axiosApi.post("/users/groups/get", {
51
- authentication: this.authentication,
52
- ou: e
53
- })).data;
54
- } catch (e) {
55
- return console.error("[/users/groups/get]", e), Promise.reject(e);
56
- }
57
- };
58
- getPins = async () => {
59
- try {
60
- return (await this.props.axiosApi.post("/users/pin/get", { authentication: this.authentication })).data;
61
- } catch (e) {
62
- return console.error("[/users/pin/get]", e), Promise.reject(e);
63
- }
64
- };
65
- addPin = async (e) => {
66
- try {
67
- return (await this.props.axiosApi.post("/users/pin/add", {
68
- authentication: this.authentication,
69
- pines: { pin: [e] }
70
- })).data;
71
- } catch (e) {
72
- return console.error("[/users/pin/add]", e), Promise.reject(e);
73
- }
74
- };
75
- deletePins = async (e) => {
76
- try {
77
- let t = e.map((e) => ({ id: e }));
78
- return (await this.props.axiosApi.post("/users/pin/delete", {
79
- authentication: this.authentication,
80
- pines: { pin: t }
81
- })).data;
82
- } catch (e) {
83
- return console.error("[/users/pin/delete]", e), Promise.reject(e);
84
- }
85
- };
86
- setUserStatus = async (e, t) => {
87
- try {
88
- return (await this.props.axiosApi.post("/users/action/setStatus", {
89
- authentication: this.authentication,
90
- username: e,
91
- action: t
92
- })).data;
93
- } catch (e) {
94
- return console.error("[/users/action/setStatus]", e), Promise.reject(e);
95
- }
96
- };
97
- resetPassword = async (e) => {
98
- try {
99
- return (await this.props.axiosApi.post("/users/action/resetPass", {
100
- authentication: this.authentication,
101
- username: e
102
- })).data;
103
- } catch (e) {
104
- return console.error("[/users/action/resetPass]", e), Promise.reject(e);
105
- }
106
- };
107
- resetMfa = async (e, t) => {
108
- try {
109
- return (await this.props.axiosApi.post("/users/action/resetMfa", {
110
- authentication: this.authentication,
111
- username: e,
112
- reason: t
113
- })).data;
114
- } catch (e) {
115
- return console.error("[/users/action/resetMfa]", e), Promise.reject(e);
116
- }
117
- };
118
- }, u = class {
119
- props;
120
- authentication;
121
- constructor(e) {
122
- this.props = e, this.authentication = e.authentication;
123
- }
124
- getDefaultPublication = async () => {
125
- try {
126
- return (await this.props.axiosApi.post("/publications/default", { authentication: this.authentication })).data;
127
- } catch (e) {
128
- return console.log(`[/publications/default] Error: ${e.message}`), Promise.reject(e);
129
- }
130
- };
131
- getProfile = async () => {
132
- try {
133
- return (await this.props.axiosApi.post("/profile/get", { authentication: this.authentication })).data;
134
- } catch (e) {
135
- return console.error("[/profile/get]", e), Promise.reject(e);
136
- }
137
- };
138
- getCountNotifications = async () => {
139
- try {
140
- return (await this.props.axiosApi.post("/dashboard/countNotifications", { authentication: this.authentication })).data;
141
- } catch (e) {
142
- return console.error("[/dashboard/countNotificatio]", e), Promise.reject(e);
143
- }
144
- };
145
- getNotifications = async () => {
146
- try {
147
- return (await this.props.axiosApi.post("/dashboard/notification", { authentication: this.authentication })).data;
148
- } catch (e) {
149
- return console.error("[/dashboard/notification]", e), Promise.reject(e);
150
- }
151
- };
152
- getSitesAndPublications = async () => {
153
- try {
154
- let [e, t, n, r] = await Promise.all([
155
- this.props.axiosApi.post("/sites/get", { authentication: this.authentication }),
156
- this.props.axiosApi.post("/publications/get", { authentication: this.authentication }),
157
- this.props.axiosApi.post("/auth/modulesAvailable", { authentication: this.authentication }),
158
- this.props.axiosApi.post("/auth/permissions", { authentication: this.authentication })
159
- ]), i = e.data.sites.map((e) => ({
160
- title: e.title,
161
- publications: t.data.publications.filter((t) => t.site === e.name)
162
- }));
163
- return console.log(r, "permissions"), {
164
- sites: i.filter((e) => e.publications.length > 0),
165
- modules: n.data.modules
166
- };
167
- } catch (e) {
168
- return console.error(e), {
169
- sites: [],
170
- modules: []
171
- };
172
- }
173
- };
174
- };
175
- //#endregion
176
- export { t as a, o as c, c as d, n as i, i as l, l as n, e as o, r, a as s, u as t, s as u };
177
-
178
- //# sourceMappingURL=services-CK6pkce_.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"services-CK6pkce_.js","names":[],"sources":["../src/lib/utils/site-selector.ts","../src/lib/services/users.ts","../src/lib/services/index.ts"],"sourcesContent":["import type { Publication } from '../types/publication';\nimport type { SiteSection } from '../types/site';\n\nexport const MENU_BG = '#ECEDF6';\nexport const ITEM_HOVER_BG = '#D8E2FF';\nexport const ITEM_DEFAULT_BG = '#FFFFFF';\n\nexport const DEFAULT_SITE_ID = 'bluestack-es';\n\nexport function getAllPublications(sites: SiteSection[]): Publication[] {\n return sites.flatMap((section) => section.publications);\n}\n\nexport function findPublicationBySlug(\n sites: SiteSection[],\n slug: string,\n): Publication | undefined {\n return getAllPublications(sites).find((p) => String(p.id) === slug);\n}\n\nexport function findPublicationLabel(\n sites: SiteSection[],\n publicationId: string,\n): string {\n const publication = getAllPublications(sites).find(\n (p) => String(p.id) === publicationId,\n );\n return publication?.description ?? 'Seleccionar publicación';\n}\n\nexport function getDefaultPublicationSlug(sites: SiteSection[]): string {\n const first = getAllPublications(sites)[0];\n return first ? String(first.id) : '1';\n}\n\nexport function parsePublicationSlug(slug: string): number {\n const id = Number(slug);\n return Number.isFinite(id) && id > 0 ? id : 1;\n}\n","import type { AxiosInstance } from 'axios';\n\nimport type { Authentication } from '../types/authentication';\n\n/** Envelope común de respuesta de los webservices de OpenCms. */\nexport interface CmsResponse {\n status: 'ok' | 'fail' | 'error';\n errorCode?: string;\n error?: string;\n}\n\n/** Estado posible de un usuario del sistema. */\nexport type UserStatus = 'active' | 'block' | 'pending';\n\n/** Formato de respuesta soportado por POST /users/get. */\nexport type UsersFieldsFormat = 'all' | 'FullName' | 'detail' | '';\n\n/**\n * Ámbito de publicación: `\"pub\"` (solo publicación), `\"admin\"` (solo admins\n * globales) o cualquier otro valor (ambos).\n */\nexport type PublicationScope = 'pub' | 'admin' | (string & {});\n\n/** Filtro sobre campos adicionales del usuario (`filters.advance`). */\nexport interface UsersAdvanceFilter {\n name: string;\n value: string;\n}\n\n/** Filtros de POST /users/get. */\nexport interface UsersGetFilters {\n /** Cantidad de resultados por página (default: 100). */\n size?: number;\n /** Número de página (default: 1). */\n page?: number;\n /** Fuerza búsqueda global (default: false). */\n searchGlobal?: boolean;\n /**\n * Campo + dirección. Campos válidos: `username`, `firstname`, `lastname`,\n * `email`, `datecreated`. Ej: `\"datecreated desc\"`.\n */\n order?: string;\n /** Nombre del grupo para filtrar usuarios. */\n grupo?: string;\n /** Organizational Unit (default: \"/\"). */\n ou?: string;\n /** Estado del usuario. */\n status?: UserStatus;\n /** Timestamp en milisegundos (inicio del rango de fecha de creación). */\n fromDate?: string;\n /** Timestamp en milisegundos (fin del rango de fecha de creación). */\n toDate?: string;\n /** Filtra por ámbito de publicación. */\n publicationScope?: PublicationScope;\n /** Formato de respuesta. */\n fields?: UsersFieldsFormat;\n /** Búsqueda libre por email, username, apellido o nombre (LIKE). */\n text?: string;\n /** Filtros sobre campos adicionales del usuario. */\n advance?: UsersAdvanceFilter[];\n}\n\n/** Usuario del CMS. Los campos presentes dependen del formato `fields`. */\nexport interface CmsUser {\n username?: string;\n firstname?: string;\n lastname?: string;\n fullName?: string;\n email?: string;\n datecreated?: string;\n status?: string;\n [key: string]: unknown;\n}\n\n/** Cuerpo de la respuesta de POST /users/get. */\nexport interface UsersGetResponse extends CmsResponse {\n users: CmsUser[];\n total?: number;\n page?: number;\n size?: number;\n}\n\n/** Formato de respuesta soportado por POST /users/publication. */\nexport type UsersPublicationFieldsFormat = 'all' | 'summary' | 'FullName' | '';\n\n/** Filtros de POST /users/publication. */\nexport interface UsersPublicationFilters {\n /** Texto libre para búsqueda de usuario. */\n text?: string;\n /** Formato de respuesta. */\n fields?: UsersPublicationFieldsFormat;\n}\n\n/** Cuerpo de la respuesta de POST /users/publication. */\nexport interface UsersPublicationResponse extends CmsResponse {\n users: CmsUser[];\n}\n\n/** Grupo del sistema devuelto por POST /users/groups/get. */\nexport interface UserGroup {\n id: string;\n name: string;\n}\n\n/** Cuerpo de la respuesta de POST /users/groups/get. */\nexport interface UserGroupsResponse extends CmsResponse {\n groups: UserGroup[];\n}\n\n/** Pin (recurso fijado) de un usuario. */\nexport interface UserPin {\n id: number;\n [key: string]: unknown;\n}\n\n/** Cuerpo de la respuesta de POST /users/pin/get. */\nexport interface UserPinsGetResponse extends CmsResponse {\n pins: UserPin[];\n total?: number;\n}\n\n/** Cuerpo de la respuesta de POST /users/pin/add. */\nexport interface UserPinAddResponse extends CmsResponse {\n /** ID del pin creado. */\n id?: number;\n}\n\n/** Pin a eliminar en POST /users/pin/delete. */\nexport interface UserPinDeleteInput {\n id: number;\n}\n\n/** Acción soportada por POST /users/action/setStatus. */\nexport type UserStatusAction = 'activate' | 'deactivate';\n\ninterface IUsersServices {\n axiosApi: AxiosInstance;\n authentication: Authentication;\n}\n\n/**\n * Servicios HTTP del módulo `users` del CMS.\n *\n * Se construye igual que `CmsCommonServices`, con `{ axiosApi, authentication }`.\n */\nexport class CmsUsersServices {\n protected props: IUsersServices;\n protected authentication: Authentication;\n\n constructor(props: IUsersServices) {\n this.props = props;\n this.authentication = props.authentication;\n }\n\n /** POST /users/get — lista paginada de usuarios con filtros. */\n getUsers = async (\n filters: UsersGetFilters = {},\n ): Promise<UsersGetResponse> => {\n try {\n const response = await this.props.axiosApi.post<UsersGetResponse>(\n '/users/get',\n {\n authentication: this.authentication,\n filters,\n },\n );\n return response.data;\n } catch (error: any) {\n console.error('[/users/get]', error);\n return Promise.reject(error);\n }\n };\n\n /** POST /users/publication — usuarios asociados a la publicación. */\n getPublicationUsers = async (\n filters: UsersPublicationFilters = {},\n ): Promise<UsersPublicationResponse> => {\n try {\n const response =\n await this.props.axiosApi.post<UsersPublicationResponse>(\n '/users/publication',\n {\n authentication: this.authentication,\n filters,\n },\n );\n return response.data;\n } catch (error: any) {\n console.error('[/users/publication]', error);\n return Promise.reject(error);\n }\n };\n\n /** POST /users/groups/get — grupos disponibles del sistema. */\n getGroups = async (ou = '/'): Promise<UserGroupsResponse> => {\n try {\n const response = await this.props.axiosApi.post<UserGroupsResponse>(\n '/users/groups/get',\n {\n authentication: this.authentication,\n ou,\n },\n );\n return response.data;\n } catch (error: any) {\n console.error('[/users/groups/get]', error);\n return Promise.reject(error);\n }\n };\n\n /** POST /users/pin/get — pins del usuario autenticado. */\n getPins = async (): Promise<UserPinsGetResponse> => {\n try {\n const response = await this.props.axiosApi.post<UserPinsGetResponse>(\n '/users/pin/get',\n {\n authentication: this.authentication,\n },\n );\n return response.data;\n } catch (error: any) {\n console.error('[/users/pin/get]', error);\n return Promise.reject(error);\n }\n };\n\n /** POST /users/pin/add — agrega un pin de recurso. */\n addPin = async (pin: string): Promise<UserPinAddResponse> => {\n try {\n const response = await this.props.axiosApi.post<UserPinAddResponse>(\n '/users/pin/add',\n {\n authentication: this.authentication,\n pines: { pin: [pin] },\n },\n );\n return response.data;\n } catch (error: any) {\n console.error('[/users/pin/add]', error);\n return Promise.reject(error);\n }\n };\n\n /** POST /users/pin/delete — elimina uno o más pins por ID. */\n deletePins = async (ids: number[]): Promise<CmsResponse> => {\n try {\n const pin: UserPinDeleteInput[] = ids.map((id) => ({ id }));\n const response = await this.props.axiosApi.post<CmsResponse>(\n '/users/pin/delete',\n {\n authentication: this.authentication,\n pines: { pin },\n },\n );\n return response.data;\n } catch (error: any) {\n console.error('[/users/pin/delete]', error);\n return Promise.reject(error);\n }\n };\n\n /** POST /users/action/setStatus — activa o desactiva un usuario. */\n setUserStatus = async (\n username: string,\n action: UserStatusAction,\n ): Promise<CmsResponse> => {\n try {\n const response = await this.props.axiosApi.post<CmsResponse>(\n '/users/action/setStatus',\n {\n authentication: this.authentication,\n username,\n action,\n },\n );\n return response.data;\n } catch (error: any) {\n console.error('[/users/action/setStatus]', error);\n return Promise.reject(error);\n }\n };\n\n /** POST /users/action/resetPass — restablece la contraseña de un usuario. */\n resetPassword = async (username: string): Promise<CmsResponse> => {\n try {\n const response = await this.props.axiosApi.post<CmsResponse>(\n '/users/action/resetPass',\n {\n authentication: this.authentication,\n username,\n },\n );\n return response.data;\n } catch (error: any) {\n console.error('[/users/action/resetPass]', error);\n return Promise.reject(error);\n }\n };\n\n /** POST /users/action/resetMfa — resetea la configuración MFA de un usuario. */\n resetMfa = async (username: string, reason: string): Promise<CmsResponse> => {\n try {\n const response = await this.props.axiosApi.post<CmsResponse>(\n '/users/action/resetMfa',\n {\n authentication: this.authentication,\n username,\n reason,\n },\n );\n return response.data;\n } catch (error: any) {\n console.error('[/users/action/resetMfa]', error);\n return Promise.reject(error);\n }\n };\n}\n","import type { AxiosInstance } from 'axios';\n\nimport type { Authentication } from '../types/authentication';\nimport type {\n CountNotificationsResponse,\n NotificationsListResponse,\n} from '../types/notification';\nimport type { ProfileGetResponse } from '../types/profile';\nimport type { SiteSection } from '../types/site';\nimport type { Publication, PublicationsGetResponse } from './publication';\nimport type {\n ModulesAvailableResponse,\n SitesAndPublicationsResult,\n SitesGetResponse,\n} from './site';\n\nexport type {\n Publication,\n PublicationPermissions,\n PublicationsGetResponse,\n PublicationUpdateAdmin,\n PublicationZoneConfig,\n} from './publication';\n\nexport type {\n ModulesAvailableResponse,\n Site,\n SitesAndPublicationsResult,\n SitesGetResponse,\n} from './site';\n\nexport { CmsUsersServices } from './users';\nexport type {\n CmsResponse,\n CmsUser,\n PublicationScope,\n UserGroup,\n UserGroupsResponse,\n UserPin,\n UserPinAddResponse,\n UserPinDeleteInput,\n UserPinsGetResponse,\n UserStatus,\n UserStatusAction,\n UsersAdvanceFilter,\n UsersFieldsFormat,\n UsersGetFilters,\n UsersGetResponse,\n UsersPublicationFieldsFormat,\n UsersPublicationFilters,\n UsersPublicationResponse,\n} from './users';\n\ninterface ICommonServices {\n axiosApi: AxiosInstance;\n authentication: Authentication;\n}\n\nexport class CmsCommonServices {\n protected props: ICommonServices;\n protected authentication: Authentication;\n\n constructor(props: ICommonServices) {\n this.props = props;\n this.authentication = props.authentication;\n }\n\n getDefaultPublication = async () => {\n try {\n const response = await this.props.axiosApi.post<Publication>(\n '/publications/default',\n {\n authentication: this.authentication,\n },\n );\n return response.data;\n } catch (error: any) {\n console.log(`[/publications/default] Error: ${error.message}`);\n return Promise.reject(error);\n }\n };\n\n getProfile = async (): Promise<ProfileGetResponse> => {\n try {\n const response = await this.props.axiosApi.post<ProfileGetResponse>(\n '/profile/get',\n {\n authentication: this.authentication,\n },\n );\n return response.data;\n } catch (error: any) {\n console.error('[/profile/get]', error);\n return Promise.reject(error);\n }\n };\n\n getCountNotifications = async (): Promise<CountNotificationsResponse> => {\n try {\n const response =\n await this.props.axiosApi.post<CountNotificationsResponse>(\n '/dashboard/countNotifications',\n {\n authentication: this.authentication,\n },\n );\n return response.data;\n } catch (error: any) {\n console.error('[/dashboard/countNotificatio]', error);\n return Promise.reject(error);\n }\n };\n\n getNotifications = async (): Promise<NotificationsListResponse> => {\n try {\n const response =\n await this.props.axiosApi.post<NotificationsListResponse>(\n '/dashboard/notification',\n {\n authentication: this.authentication,\n },\n );\n return response.data;\n } catch (error: any) {\n console.error('[/dashboard/notification]', error);\n return Promise.reject(error);\n }\n };\n\n getSitesAndPublications = async (): Promise<SitesAndPublicationsResult> => {\n try {\n const [resSites, resPublications, resModules, permissions] =\n await Promise.all([\n this.props.axiosApi.post<SitesGetResponse>('/sites/get', {\n authentication: this.authentication,\n }),\n this.props.axiosApi.post<PublicationsGetResponse>(\n '/publications/get',\n {\n authentication: this.authentication,\n },\n ),\n this.props.axiosApi.post<ModulesAvailableResponse>(\n '/auth/modulesAvailable',\n {\n authentication: this.authentication,\n },\n ),\n this.props.axiosApi.post<ModulesAvailableResponse>(\n '/auth/permissions',\n {\n authentication: this.authentication,\n },\n ),\n ]);\n\n const sites: SiteSection[] = resSites.data.sites.map((site) => ({\n title: site.title,\n publications: resPublications.data.publications.filter(\n (publication) => publication.site === site.name,\n ),\n }));\n\n console.log(permissions, 'permissions');\n\n return {\n sites: sites.filter((site) => site.publications.length > 0),\n modules: resModules.data.modules,\n };\n } catch (error) {\n console.error(error);\n return {\n sites: [],\n modules: [],\n };\n }\n };\n}\n"],"mappings":"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"}