Show app version in sidebar and split 4-word FirmaEC names in 1.2.26
This commit is contained in:
+6
-1
@@ -2,10 +2,15 @@
|
|||||||
|
|
||||||
## Versión actual
|
## Versión actual
|
||||||
|
|
||||||
- Versión base: `1.2.25`
|
- Versión base: `1.2.26`
|
||||||
|
|
||||||
## Historial
|
## Historial
|
||||||
|
|
||||||
|
### 1.2.26 - 2026-05-22
|
||||||
|
|
||||||
|
- El sidebar web muestra la versión activa junto a `LinkedSign`.
|
||||||
|
- `FirmaEC` divide nombres de 4 palabras en `2 + 2` dentro del sello visible del PDF.
|
||||||
|
|
||||||
### 1.2.25 - 2026-05-22
|
### 1.2.25 - 2026-05-22
|
||||||
|
|
||||||
- La firma normal usa las preferencias visuales guardadas del usuario al momento de firmar, evitando que un estado viejo del frontend vuelva a enviar `FirmaEC` con borde.
|
- La firma normal usa las preferencias visuales guardadas del usuario al momento de firmar, evitando que un estado viejo del frontend vuelva a enviar `FirmaEC` con borde.
|
||||||
|
|||||||
+1
-1
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
## Versión actual
|
## Versión actual
|
||||||
|
|
||||||
- Base actual: `1.2.25`
|
- Base actual: `1.2.26`
|
||||||
- Fuente de verdad: [VERSION](/home/mgonzalez/desarrollo/react/linkedsign/VERSION)
|
- Fuente de verdad: [VERSION](/home/mgonzalez/desarrollo/react/linkedsign/VERSION)
|
||||||
- Historial de cambios: [CHANGELOG.md](/home/mgonzalez/desarrollo/react/linkedsign/CHANGELOG.md)
|
- Historial de cambios: [CHANGELOG.md](/home/mgonzalez/desarrollo/react/linkedsign/CHANGELOG.md)
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
## Versión actual
|
## Versión actual
|
||||||
|
|
||||||
- Base actual: `1.2.25`
|
- Base actual: `1.2.26`
|
||||||
- Fuente de verdad: [VERSION](/home/mgonzalez/desarrollo/react/linkedsign/VERSION)
|
- Fuente de verdad: [VERSION](/home/mgonzalez/desarrollo/react/linkedsign/VERSION)
|
||||||
- Historial de cambios: [CHANGELOG.md](/home/mgonzalez/desarrollo/react/linkedsign/CHANGELOG.md)
|
- Historial de cambios: [CHANGELOG.md](/home/mgonzalez/desarrollo/react/linkedsign/CHANGELOG.md)
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
## Versión actual
|
## Versión actual
|
||||||
|
|
||||||
- Base actual: `1.2.25`
|
- Base actual: `1.2.26`
|
||||||
- Fuente de verdad: [VERSION](/home/mgonzalez/desarrollo/react/linkedsign/VERSION)
|
- Fuente de verdad: [VERSION](/home/mgonzalez/desarrollo/react/linkedsign/VERSION)
|
||||||
- Historial de cambios: [CHANGELOG.md](/home/mgonzalez/desarrollo/react/linkedsign/CHANGELOG.md)
|
- Historial de cambios: [CHANGELOG.md](/home/mgonzalez/desarrollo/react/linkedsign/CHANGELOG.md)
|
||||||
|
|
||||||
|
|||||||
@@ -18,8 +18,8 @@ android {
|
|||||||
applicationId "net.linkedcorp.linkedsign"
|
applicationId "net.linkedcorp.linkedsign"
|
||||||
minSdk 26
|
minSdk 26
|
||||||
targetSdk 35
|
targetSdk 35
|
||||||
versionCode 10225
|
versionCode 10226
|
||||||
versionName "1.2.25"
|
versionName "1.2.26"
|
||||||
|
|
||||||
buildConfigField "String", "API_BASE_URL", "\"${apiBaseUrl}\""
|
buildConfigField "String", "API_BASE_URL", "\"${apiBaseUrl}\""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "linkedsign-backend",
|
"name": "linkedsign-backend",
|
||||||
"version": "1.2.25",
|
"version": "1.2.26",
|
||||||
"private": true,
|
"private": true,
|
||||||
"description": "Initial backend for LinkedSign",
|
"description": "Initial backend for LinkedSign",
|
||||||
"main": "src/server.js",
|
"main": "src/server.js",
|
||||||
|
|||||||
@@ -59,6 +59,23 @@ function wrapToLines(text, font, size, maxWidth, maxLines) {
|
|||||||
return lines;
|
return lines;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getFirmaEcNameLines(signerName, font, size, maxWidth) {
|
||||||
|
const words = String(signerName || '')
|
||||||
|
.trim()
|
||||||
|
.toUpperCase()
|
||||||
|
.split(/\s+/)
|
||||||
|
.filter(Boolean);
|
||||||
|
|
||||||
|
if (words.length === 4) {
|
||||||
|
return [
|
||||||
|
words.slice(0, 2).join(' '),
|
||||||
|
words.slice(2).join(' '),
|
||||||
|
].map((line) => truncate(line, font, size, maxWidth));
|
||||||
|
}
|
||||||
|
|
||||||
|
return wrapToLines(words.join(' '), font, size, maxWidth, 2);
|
||||||
|
}
|
||||||
|
|
||||||
function buildLocalizedSignatureTimestamp({ locale, timeZone } = {}) {
|
function buildLocalizedSignatureTimestamp({ locale, timeZone } = {}) {
|
||||||
const now = new Date();
|
const now = new Date();
|
||||||
const normalizedLocale = locale || 'es-EC';
|
const normalizedLocale = locale || 'es-EC';
|
||||||
@@ -343,9 +360,8 @@ async function drawStyleFirmaEC(pdfDoc, page, sx, sy, sw, sh, { signerName, veri
|
|||||||
page.drawText('Firmado electronicamente por:', { x: textX, y: sy + sh - 21, size: 6, font: fReg, color: rgb(0.12, 0.12, 0.14) });
|
page.drawText('Firmado electronicamente por:', { x: textX, y: sy + sh - 21, size: 6, font: fReg, color: rgb(0.12, 0.12, 0.14) });
|
||||||
|
|
||||||
// Name — bold, uppercase, word-wrapped up to 2 lines
|
// Name — bold, uppercase, word-wrapped up to 2 lines
|
||||||
const nameUpper = signerName.toUpperCase();
|
|
||||||
const nameSize = 8.5;
|
const nameSize = 8.5;
|
||||||
const nameLines = wrapToLines(nameUpper, fBold, nameSize, textW, 2);
|
const nameLines = getFirmaEcNameLines(signerName, fBold, nameSize, textW);
|
||||||
nameLines.forEach((line, i) => {
|
nameLines.forEach((line, i) => {
|
||||||
page.drawText(line, { x: textX, y: sy + sh - 34 - (i * 13), size: nameSize, font: fBold, color: rgb(0.05, 0.05, 0.07) });
|
page.drawText(line, { x: textX, y: sy + sh - 34 - (i * 13), size: nameSize, font: fBold, color: rgb(0.05, 0.05, 0.07) });
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "frontend",
|
"name": "frontend",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "1.2.25",
|
"version": "1.2.26",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite",
|
"dev": "vite",
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import { Link, useNavigate, useLocation } from 'react-router-dom';
|
|||||||
import { useAuth } from '../../contexts/AuthContext';
|
import { useAuth } from '../../contexts/AuthContext';
|
||||||
import { FileText, Shield, PenTool, LayoutDashboard, LogOut, Palette, Menu, X, KeyRound, Users, Settings, ScrollText, Scale } from 'lucide-react';
|
import { FileText, Shield, PenTool, LayoutDashboard, LogOut, Palette, Menu, X, KeyRound, Users, Settings, ScrollText, Scale } from 'lucide-react';
|
||||||
import ChangePasswordModal from '../ui/ChangePasswordModal';
|
import ChangePasswordModal from '../ui/ChangePasswordModal';
|
||||||
|
import packageInfo from '../../../package.json';
|
||||||
|
|
||||||
const navSections = [
|
const navSections = [
|
||||||
{
|
{
|
||||||
@@ -86,7 +87,7 @@ export default function Layout({ children }) {
|
|||||||
<img src="/app-icon-96.png" alt="LinkedSign" width="32" height="32" style={{ display: 'block' }} />
|
<img src="/app-icon-96.png" alt="LinkedSign" width="32" height="32" style={{ display: 'block' }} />
|
||||||
</div>
|
</div>
|
||||||
<div className="sidebar-brand-copy">
|
<div className="sidebar-brand-copy">
|
||||||
<span>LinkedSign</span>
|
<span>LinkedSign <em>v{packageInfo.version}</em></span>
|
||||||
<small>Firma Electrónica @LinkedCorp</small>
|
<small>Firma Electrónica @LinkedCorp</small>
|
||||||
</div>
|
</div>
|
||||||
<button
|
<button
|
||||||
|
|||||||
@@ -134,6 +134,16 @@ select {
|
|||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
color: var(--c-text);
|
color: var(--c-text);
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: baseline;
|
||||||
|
gap: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar-brand-copy span em {
|
||||||
|
font-size: 10px;
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
color: var(--c-muted);
|
||||||
}
|
}
|
||||||
|
|
||||||
.sidebar-brand-copy small {
|
.sidebar-brand-copy small {
|
||||||
|
|||||||
Reference in New Issue
Block a user