Compare commits

...

2 Commits

14 changed files with 286 additions and 18 deletions

1
.env
View File

@ -2,3 +2,4 @@ NODE_ENV=development
API_URL=http://localhost:3001/api/ API_URL=http://localhost:3001/api/
EXTERNAL_LOGIN=true EXTERNAL_LOGIN=true
CKEDITOR_LICENSE_KEY=GPL CKEDITOR_LICENSE_KEY=GPL
STICKER_TEXT=Source

View File

@ -1,3 +0,0 @@
NODE_ENV=development
API_URL=http://localhost:3001/api/
EXTERNAL_LOGIN=true

View File

View File

@ -0,0 +1,206 @@
{
"SaveChangesToLinkSSOAccount": "Guarda los cambios para iniciar el proceso que vinculará tu cuenta SSO.",
"Account": "Cuenta",
"Activate": "Activar",
"Active": "Activo",
"Add": "Añadir",
"AddDomain": "Añadir dominio",
"Address": "Dirección",
"AddUser": "Añadir usuario",
"Admin": "Administrador",
"Allowed": "Permitido",
"AnEmailWithPasswordResetLinkHasBeenSent": "Se ha enviado un correo electrónico con un enlace para restablecer la contraseña.",
"AnErrorOccurred": "Se ha producido un error",
"Application": "Aplicación",
"Applications": "Aplicaciones",
"AreYouSure": "¿Estás seguro?",
"AuditLog": "Registros de auditoría",
"AuditLogs": "Registros de auditoría",
"Authenticate": "Autenticar",
"AuthenticationCode": "Código de autenticación",
"AuthorizationEndpoint": "Punto de autorización",
"Blocked": "Bloqueado",
"BlockedIPAddresses": "Direcciones IP bloqueadas",
"BlockedIPs": "IPs bloqueadas",
"Cancel": "Cancelar",
"Changes": "Cambios",
"ClientDomainManager": "Gestor de dominios del cliente",
"ClientDomains": "Dominios del cliente",
"ClientId": "ID de cliente",
"ClientSecret": "Secreto de cliente",
"Close": "Cerrar",
"Comment": "Comentario",
"Confirm": "Confirmar",
"ConfirmEmailResent": "Correo de confirmación reenviado",
"ConfirmPassword": "Confirmar contraseña",
"Continuous": "Continuo",
"Created": "Creado",
"CustomField": "Campo personalizado",
"CustomFieldEdited": "Campo personalizado editado",
"CustomFieldForChildEntries": "Campo personalizado para entradas secundarias",
"CustomFieldManager": "Gestor de campos personalizados",
"CustomFields": "Campos personalizados",
"Day": "Día",
"DefaultMustBeGreaterThanOrEqualToMinimumValue": "\"Valor predeterminado\" debe ser mayor o igual que el \"Valor mínimo\"",
"DefaultMustBeLessThanOrEqualToMaximumValue": "\"Valor predeterminado\" debe ser menor o igual que el \"Valor máximo\"",
"DefaultValue": "Valor predeterminado",
"Definition": "Definición",
"DisableAuthenticator": "Desactivar autenticador",
"Disabled": "Desactivado",
"DisplayName": "Nombre visible",
"Domain": "Dominio",
"DomainEdited": "Dominio editado",
"e-print": "e-print",
"e-suite": "e-suite",
"e-suiteLogo": "Logo de e-suite",
"Edit": "Editar",
"EditDomain": "Editar dominio",
"EditUser": "Editar usuario",
"EFlowAppId": "e-flow AppId",
"EFlowCategoryId": "e-flow CategoryId",
"EFlowHostname": "Nombre de host de e-flow",
"Email": "Correo electrónico",
"EmailTemplateSaved": "Plantilla de correo guardada",
"Enabled": "Habilitado",
"EntityDisplayName": "Nombre visible de la entidad",
"ErrorLogs": "Registros de errores",
"ExceptionJson": "JSON de excepción",
"ExceptionLogs": "Registros de excepciones",
"FailedToDisableAuthenticator": "No se pudo desactivar el autenticador:",
"FailedToSaveFormInstance": "No se pudo guardar la instancia del formulario",
"Field": "Campo",
"FieldType": "Tipo de campo",
"FirstName": "Nombre",
"ForgottenPassword": "Contraseña olvidada",
"Form": "Formulario",
"Forms": "Formularios",
"FormTemplate": "Plantilla de formulario",
"FormTemplateEdited": "Plantilla de formulario editada",
"FormTemplateManager": "Gestor de plantillas de formulario",
"General": "General",
"Glossaries": "Glosarios",
"Glossary": "Glosario",
"GlossaryItem": "Elemento del glosario",
"GlossaryItemEdited": "Elemento del glosario editado",
"GlossaryManager": "Gestor de glosarios",
"Group": "Grupo",
"Home": "Inicio",
"Id": "Id",
"Increment": "Incremento",
"IPAddress": "Dirección IP",
"IPAddressUnblocked": "Dirección IP '{{ip}}' desbloqueada.",
"IsPublic": "Es público",
"Items": "Elementos",
"LastName": "Apellidos",
"LastUpdated": "Última actualización",
"Loading": "Cargando",
"LoginMethod": "Método de inicio de sesión",
"LoggingOut": "Cerrando sesión",
"Logout": "Cerrar sesión",
"Mail": "Correo",
"MailTemplates": "Plantillas de correo",
"MaxEntriesEmptyUnlimited": "Entradas máximas (vacío = ilimitado)",
"MaximumValue": "Valor máximo",
"Message": "Mensaje",
"MiddleNames": "Segundo nombre",
"MinEntries": "Entradas mínimas",
"MinimumValue": "Valor mínimo",
"Month": "Mes",
"MultiLine": "Multilínea",
"Name": "Nombre",
"NewCustomFieldAdded": "Nuevo campo personalizado añadido",
"NewDomainAdded": "Nuevo dominio añadido",
"NewFormTemplateAdded": "Nueva plantilla de formulario añadida",
"NewGlossaryItemAdded": "Nuevo elemento del glosario añadido",
"NewOrganisationAdded": "Nueva organización añadida",
"NewPassword": "Nueva contraseña",
"NewRoleAdded": "Nuevo rol añadido",
"NewSequenceAdded": "Nueva secuencia añadida",
"NewSiteAdded": "Nuevo sitio añadido",
"NewSpecificationsAdded": "Nuevas especificaciones añadidas",
"NewSsoProviderAdded": "Nuevo proveedor SSO añadido",
"NewUserAdded": "Nuevo usuario añadido",
"NewValue": "Nuevo valor",
"NotFound": "No encontrado",
"Number": "Número",
"NumberOfAttempts": "Número de intentos",
"OccuredAt": "Ocurrido en",
"OldValue": "Valor anterior",
"Organisation": "Organización",
"OrganisationEdited": "Organización editada",
"Password": "Contraseña",
"PasswordIsRequired": "La contraseña es obligatoria",
"PasswordMinLength": "La contraseña debe tener al menos {{minPasswordLength}} caracteres",
"PasswordMinSymbols": "La contraseña debe contener al menos {{minSymbols}} símbolo(s)",
"PasswordMinNumbers": "La contraseña debe contener al menos {{minNumbers}} número(s)",
"PasswordMinUppercase": "La contraseña debe contener al menos {{minUppercase}} letra(s) mayúscula(s)",
"PasswordMinLowercase": "La contraseña debe contener al menos {{minLowercase}} letra(s) minúscula(s)",
"PasswordsMustMatch": "Debes confirmar escribiendo exactamente la misma contraseña nueva",
"Pattern": "Patrón",
"Pending": "Pendiente",
"PressAgainToDelete": "Pulsa de nuevo para eliminar",
"PressAgainToUnblock": "Pulsa de nuevo para desbloquear",
"PrintSpecification": "Imprimir especificación",
"Profile": "Perfil",
"ProfileSaved": "Perfil actualizado.",
"Required": "Obligatorio",
"ResendConfirm": "Reenviar confirmación",
"ResetPassword": "Restablecer contraseña",
"Role": "Rol",
"RoleAccess": "Acceso del rol",
"RoleAccessUpdated": "Acceso del rol actualizado correctamente.",
"RoleEdited": "Rol editado",
"RolloverType": "Tipo de traspaso",
"Save": "Guardar",
"SaveAndClose": "Guardar y cerrar",
"SecurityRoles": "Roles de seguridad",
"Seed": "Semilla",
"Sequence": "Secuencia",
"SequenceEdited": "Secuencia editada",
"SequenceFormGlossary": "Secuencia/Formulario/Glosario",
"SequenceManager": "Gestor de secuencias",
"ShowJSON": "Mostrar JSON",
"ShowStackTrace": "Mostrar traza",
"SigmaId": "Sigma Id",
"Site": "Sitio",
"SiteEdited": "Sitio editado",
"SiteManager": "Gestor de sitios",
"SpecificationManager": "Gestor de especificaciones",
"Specifications": "Especificaciones",
"SpecificationsEdited": "Especificaciones editadas",
"SsoManager": "Gestor SSO",
"SsoProvider": "Proveedor SSO",
"SsoProviderEdited": "Proveedor SSO editado",
"StackTrace": "Traza",
"Status": "Estado",
"Step": "Paso",
"Subject": "Asunto",
"Support": "Soporte",
"SupportingData": "Datos de soporte",
"TemplateIdCannotBeNull": "El ID de plantilla no puede ser nulo",
"TemplateUnknown": "Plantilla desconocida",
"Text": "Texto",
"TheDetailsBelowAreLoadedFromMasterTemplate": "Los detalles a continuación se cargan desde la plantilla maestra. Guardar esta plantilla hará que los cambios futuros en la plantilla maestra no aparezcan automáticamente aquí.",
"ThereAreErrorsOnTheForm": "Hay errores en el formulario",
"ThisTemplateIsCustomForThisDomainOnly": "Esta plantilla es personalizada solo para este dominio",
"Timing": "Temporización",
"TokenEndpoint": "Punto de token",
"TwoFactorAuthentication": "Autenticación en dos pasos",
"Type": "Tipo",
"UnblockedInMinutes": "Desbloqueado en (minutos)",
"Up": "Arriba",
"User": "Usuario",
"UserAddedToRole": "Usuario añadido al rol",
"UserEdited": "Usuario editado",
"UserManager": "Gestor de usuarios",
"UserName": "Nombre de usuario",
"UsernameIsRequired": "El nombre de usuario es obligatorio",
"UsernameMustBeValidEmail": "El nombre de usuario debe ser un correo electrónico válido",
"Users": "Usuarios",
"UsingTwoFactorAuthentication": "Usando autenticación en dos pasos",
"ValidIssuer": "Emisor válido",
"Version": "Versión",
"VersionCannotBeNull": "La versión no puede ser nula",
"Year": "Año",
"YourProfileSettingsHaveBeenSaved": "La configuración de tu perfil ha sido guardada"
}

View File

@ -0,0 +1,8 @@
{
"island": {
"loadError": "No se pudo cargar esta sección.",
"networkError": "Error de red al guardar.",
"serverError": "Error del servidor al guardar.",
"saveSuccess": "Guardado correctamente."
}
}

View File

@ -0,0 +1,6 @@
{
"ConfirmEmailAddress": "Confirmar dirección de correo electrónico",
"DisableAuthenticator": "Desactivar la autenticación en dos pasos",
"PasswordReset": "Restablecer contraseña",
"PasswordResetCompleted": "Confirmación de restablecimiento de contraseña"
}

View File

@ -1 +1 @@
window.__RUNTIME_CONFIG__ = {"NODE_ENV":"development","API_URL":"http://localhost:3001/api/","EXTERNAL_LOGIN":"true","CKEDITOR_LICENSE_KEY":"GPL"}; window.__RUNTIME_CONFIG__ = {"NODE_ENV":"development","API_URL":"http://localhost:3001/api/","EXTERNAL_LOGIN":"true","CKEDITOR_LICENSE_KEY":"GPL","STICKER_TEXT":"Source"};

View File

@ -1,22 +1,45 @@
@import './_esuiteVariables.scss'; @import "./_esuiteVariables.scss";
.frame { .frame {
width: 100vw; width: 100vw;
height: 100vh; height: 100vh;
overflow: hidden; overflow: hidden;
.sticker {
position: fixed;
top: 30px;
left: -60px;
padding: 4px 0;
width: 200px;
text-align: center;
text-transform: uppercase;
font-weight: bold;
font-size: 0.875em;
line-height: 1em;
background: #fffe4e;
color: #333;
border-top: 2px solid #c9c353;
border-bottom: 2px solid #c9c353;
-webkit-transform: rotate(-45deg);
-moz-transform: rotate(-45deg);
-ms-transform: rotate(-45deg);
-o-transform: rotate(-45deg);
transform: rotate(-45deg);
z-index: 2;
}
} }
.frame-row { .frame-row {
display: flex; display: flex;
} }
.frame-leftMenu { .frame-leftMenu {
height: auto; height: auto;
} }
.frame-workArea { .frame-workArea {
height: calc(100vh - 76px); height: calc(100vh - 76px);
width: 100%; width: 100%;
overflow: auto; overflow: auto;
padding: $frameWorkAreaPadding; padding: $frameWorkAreaPadding;
} }

View File

@ -4,6 +4,7 @@
export const availableLocales = [ export const availableLocales = [
"en-GB", "en-GB",
"en-US", "en-US",
"es-ES",
"fr-CA", "fr-CA",
"fr-FR", "fr-FR",
"hi-IN", "hi-IN",
@ -38,6 +39,9 @@ export const fallbackLng = {
"en-US": [ "en-US": [
"en" "en"
], ],
"es-ES": [
"en"
],
"fr-CA": [ "fr-CA": [
"fr", "fr",
"en" "en"

View File

@ -3,6 +3,7 @@ import TopMenu from "./TopMenu";
import LeftMenu from "./LeftMenu"; import LeftMenu from "./LeftMenu";
import "../../../Sass/_frame.scss"; import "../../../Sass/_frame.scss";
import Sticker from "./Sticker";
type MainFrameProps = { type MainFrameProps = {
title?: string | null; title?: string | null;
@ -19,6 +20,7 @@ const Mainframe: React.FC<MainFrameProps> = ({ title, children }) => {
</div> </div>
<div className="frame-workArea">{children}</div> <div className="frame-workArea">{children}</div>
</div> </div>
<Sticker />
</div> </div>
); );
}; };

View File

@ -0,0 +1,14 @@
const isBlank = (value: string | null | undefined) =>
!value || value.trim().length === 0;
const Sticker: React.FC = () => {
if (isBlank(window.__RUNTIME_CONFIG__.STICKER_TEXT)) {
return null;
}
return (
<span className="sticker">{window.__RUNTIME_CONFIG__.STICKER_TEXT}</span>
);
};
export default Sticker;

View File

@ -3,6 +3,7 @@ import React from "react";
import "../../../Sass/login.scss"; import "../../../Sass/login.scss";
import Logo from "../../../img/logo"; import Logo from "../../../img/logo";
import Sticker from "./Sticker";
interface LoginFrameProps { interface LoginFrameProps {
children?: JSX.Element; children?: JSX.Element;
@ -10,7 +11,7 @@ interface LoginFrameProps {
const LoginFrame: React.FC<LoginFrameProps> = ({ children }) => { const LoginFrame: React.FC<LoginFrameProps> = ({ children }) => {
return ( return (
<div className="container-fluid vh-100"> <div className="frame">
<div className="col-md-2"> <div className="col-md-2">
<div className="loginFormContainer"> <div className="loginFormContainer">
<div className="col-12 logo"> <div className="col-12 logo">
@ -21,6 +22,7 @@ const LoginFrame: React.FC<LoginFrameProps> = ({ children }) => {
</div> </div>
<div className="col-md-8"></div> <div className="col-md-8"></div>
<Sticker />
</div> </div>
); );
}; };

View File

@ -22,6 +22,10 @@ const EnvPage: React.FC = () => {
? "GPL" ? "GPL"
: "hidden"} : "hidden"}
</p> </p>
<p>
window.__RUNTIME_CONFIG__.STICKER_TEXT ={" "}
{window.__RUNTIME_CONFIG__.STICKER_TEXT}
</p>
</> </>
); );
}; };

View File

@ -7,6 +7,7 @@ declare global {
API_URL: string; API_URL: string;
EXTERNAL_LOGIN: boolean; EXTERNAL_LOGIN: boolean;
CKEDITOR_LICENSE_KEY?: string; CKEDITOR_LICENSE_KEY?: string;
STICKER_TEXT: string;
}; };
} }
} }