Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
1963cd7
chore: bump version to 26.10.2-SNAPSHOT
marioserrano09 Oct 12, 2026
8964557
ci: bump GitHub Actions to Node 24 versions
marioserrano09 Oct 12, 2026
ebd0d95
ci: use setup-java server-*-env-var inputs
marioserrano09 Oct 12, 2026
a39fcb9
Merge pull request #241 from dynamiatools/chore/bump-version-26.10.2-…
marioserrano09 Oct 12, 2026
bf44ff6
Merge pull request #242 from dynamiatools/ci/bump-github-actions
marioserrano09 Oct 12, 2026
36d93ce
fix(ui-core,vue): keep the calendar day of date-only values and honor…
marioserrano09 Oct 12, 2026
713a0fe
feat(ui-core,vue,dashboard-vue): DynamiaViewer resolves any descripto…
marioserrano09 Oct 13, 2026
dd7c43c
feat(app): pluggable HTTP cache policy for the metadata endpoints, ET…
marioserrano09 Oct 13, 2026
7e64d97
Merge pull request #245 from dynamiatools/fix/244-date-only-converters
marioserrano09 Oct 13, 2026
66dd684
Merge pull request #247 from dynamiatools/feature/246-viewer-descript…
marioserrano09 Oct 13, 2026
3947e40
Merge pull request #249 from dynamiatools/feature/248-metadata-http-c…
marioserrano09 Oct 13, 2026
af454fe
fix(vue): view renderers return the real components so DynamiaViewer …
marioserrano09 Oct 13, 2026
28b13dd
feat(reports): send the designer's cell and column styles in ReportCo…
marioserrano09 Oct 13, 2026
aaf3d0f
Merge pull request #251 from dynamiatools/fix/250-renderers-return-co…
marioserrano09 Oct 13, 2026
b884bc6
Merge pull request #253 from dynamiatools/feature/252-report-column-s…
marioserrano09 Oct 13, 2026
17c0f7c
chore: bump version to 26.10.2
marioserrano09 Oct 13, 2026
243567a
Merge main into chore/bump-version-26.10.2-release
marioserrano09 Oct 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/maven.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@ jobs:
timeout-minutes: 30

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v7
- name: Set up JDK 25
uses: actions/setup-java@v4
uses: actions/setup-java@v6
with:
java-version: 25
architecture: x64
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/publish-npm.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,15 @@ jobs:

steps:
- name: Checkout repository
uses: actions/checkout@v4
uses: actions/checkout@v7

- name: Setup pnpm
uses: pnpm/action-setup@v4
uses: pnpm/action-setup@v6
with:
run_install: false

- name: Setup Node.js
uses: actions/setup-node@v4
uses: actions/setup-node@v7
with:
node-version: '24'
registry-url: 'https://registry.npmjs.org'
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/publish-snapshot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,17 +28,17 @@ jobs:
timeout-minutes: 30

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v7
- name: Set up JDK 25
uses: actions/setup-java@v4
uses: actions/setup-java@v6
with:
java-version: 25
architecture: x64
distribution: temurin
cache: maven
server-id: github
server-username: MAVEN_USERNAME
server-password: MAVEN_PASSWORD
server-username-env-var: MAVEN_USERNAME
server-password-env-var: MAVEN_PASSWORD

- name: Verify and deploy SNAPSHOT
# Se invoca deploy:deploy directo porque central-publishing-maven-plugin (extensions=true)
Expand Down
16 changes: 8 additions & 8 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,17 +37,17 @@ jobs:
timeout-minutes: 45

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v7
- name: Set up JDK 25
uses: actions/setup-java@v4
uses: actions/setup-java@v6
with:
java-version: 25
architecture: x64
distribution: temurin
cache: maven
server-id: github
server-username: MAVEN_USERNAME
server-password: MAVEN_PASSWORD
server-username-env-var: MAVEN_USERNAME
server-password-env-var: MAVEN_PASSWORD

- name: Check the version
# A wrong version would publish an immutable artifact (and spend Central quota), so fail before building.
Expand Down Expand Up @@ -86,17 +86,17 @@ jobs:
timeout-minutes: 45

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v7
- name: Set up JDK 25
uses: actions/setup-java@v4
uses: actions/setup-java@v6
with:
java-version: 25
architecture: x64
distribution: temurin
cache: maven
server-id: central
server-username: MAVEN_USERNAME # env variable for username in deploy
server-password: MAVEN_PASSWORD # env variable for token in deploy
server-username-env-var: MAVEN_USERNAME # env variable for username in deploy
server-password-env-var: MAVEN_PASSWORD # env variable for token in deploy
gpg-private-key: ${{ secrets.GPG_PRIVATE_KEY }}

- name: Sign and deploy to Maven Central
Expand Down
18 changes: 18 additions & 0 deletions docs/backend/ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -403,6 +403,24 @@ Rules:
browser on its own.
- Unauthenticated requests get a JSON 401 (not a redirect to `/login`), so `fetch` callers can handle them.

### Caching the metadata endpoints

View descriptors, entity metadata and navigation (`GET /apps/api/metadata/views/{id}`, `/entities`, `/entities/{id}`,
`/entities/{id}/views[/{view}]`, `/entities/by-path`, `/navigation`) are practically static, but not always: texts depend
on the request locale (`Messages.getDefaultLocale()`, which an application resolves per request through its
`LocaleProvider`), and an application may build descriptors dynamically or vary them per user. The framework therefore
adds nothing by default and leaves the decision to the application through `MetadataHttpCachePolicy`:

- **Default:** no cache headers, exactly as before.
- **`dynamia.app.metadata.http-cache=etag`:** the included `ContentEtagMetadataHttpCachePolicy`. A strong ETag from the
content and the locale, `Cache-Control: private, no-cache` and `Vary: Accept-Language`. The client revalidates on every
use and gets a `304` with no body when nothing changed, and never a stale descriptor after a deployment or a hot-reload.
- **Your own policy:** register a `MetadataHttpCachePolicy` bean (for example an ETag from the application version, or a
`Vary` that includes the user). It replaces the included one.

Only the read-only endpoints above take part; actions, entity data (`/entities/ref/**`) and executions are never cached,
and neither are `/apps/api/dashboard` or `/apps/api/reports`.

---

## Dependency Injection & Spring Integration
Expand Down
2 changes: 1 addition & 1 deletion examples/demo-zk-books/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@
<timestamp>${maven.build.timestamp}</timestamp>
<maven.build.timestamp.format>yyyyMMdd</maven.build.timestamp.format>

<tools.version>26.10.1</tools.version>
<tools.version>26.10.2</tools.version>

</properties>

Expand Down
2 changes: 1 addition & 1 deletion examples/dynamia-movies/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

A movie catalog in the spirit of IMDb, built to try **everything new in DynamiaTools** in one project that was
generated with the CLI (`dynamia new`, backend Java + frontend Vue) and runs against the **SNAPSHOT** of this
repository (`26.10.1`).
repository (`26.10.2`).

| Folder | What it is |
|---|---|
Expand Down
2 changes: 1 addition & 1 deletion examples/dynamia-movies/backend/README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Dynamia Movies — backend

Spring Boot 4 + DynamiaTools `26.10.1`. See the [project README](../README.md) for the whole picture.
Spring Boot 4 + DynamiaTools `26.10.2`. See the [project README](../README.md) for the whole picture.

```bash
./mvnw spring-boot:run # http://localhost:8484 (admin / adminadmin)
Expand Down
4 changes: 2 additions & 2 deletions examples/dynamia-movies/backend/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,12 @@
</parent>
<groupId>tools.dynamia.demos</groupId>
<artifactId>movies</artifactId>
<version>26.10.1</version>
<version>26.10.2</version>
<name>dynamia-movies</name>
<description>Movie catalog demo: Dynamia Tools backoffice + public Vue site</description>
<properties>
<java.version>25</java.version>
<dynamia.version>26.10.1</dynamia.version>
<dynamia.version>26.10.2</dynamia.version>
</properties>
<dependencies>
<dependency>
Expand Down
2 changes: 1 addition & 1 deletion examples/dynamia-movies/frontend/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "dynamia-movies",
"private": true,
"version": "26.10.1",
"version": "26.10.2",
"description": "Public movie site (Vue 3) for the Dynamia Movies demo. It reads the automatic REST API of DynamiaTools.",
"type": "module",
"scripts": {
Expand Down
2 changes: 1 addition & 1 deletion extensions/dashboard/packages/dashboard-sdk/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@dynamia-tools/dashboard-sdk",
"version": "26.10.1",
"version": "26.10.2",
"website": "https://dynamia.tools",
"description": "TypeScript/JavaScript client SDK for the Dynamia Dashboard extension REST API",
"keywords": [
Expand Down
2 changes: 1 addition & 1 deletion extensions/dashboard/packages/dashboard-vue/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@dynamia-tools/dashboard-vue",
"version": "26.10.1",
"version": "26.10.2",
"website": "https://dynamia.tools",
"description": "Vue 3 components and composables to render Dynamia dashboards without ZK",
"keywords": [
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
<!-- ViewerWidget.vue: built-in renderer of `viewer` widgets; uses the DynamiaViewer component of @dynamia-tools/vue -->
<template>
<DynamiaViewer
ref="viewer"
:descriptor-id="data?.descriptorId ?? undefined"
:view-type="data?.viewType ?? undefined"
:source="rows"
:value="single"
:read-only="true"
@ready="applyValue"
/>
</template>

<script setup lang="ts">
import { ref, resolveComponent, watch } from 'vue';
import { computed, resolveComponent } from 'vue';
import type { ViewerWidgetData } from '@dynamia-tools/dashboard-sdk';

const props = defineProps<{
Expand All @@ -20,11 +20,8 @@ const props = defineProps<{

// Registered globally by `app.use(DynamiaVue)` from @dynamia-tools/vue
const DynamiaViewer = resolveComponent('DynamiaViewer');
const viewer = ref<{ setValue(value: unknown): void } | null>(null);

function applyValue(): void {
if (props.data) viewer.value?.setValue(props.data.value);
}

watch(() => props.data?.value, applyValue);
// A list is the data source of a table/tree view (its rows); anything else is the value of a form-like view.
const rows = computed(() => (Array.isArray(props.data?.value) ? props.data.value : undefined));
const single = computed(() => (Array.isArray(props.data?.value) ? undefined : props.data?.value));
</script>
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
import { defineComponent } from 'vue';
import { defineComponent, h } from 'vue';
import { flushPromises, mount } from '@vue/test-utils';
import { DynamiaDashboard, KpiWidget, WidgetRendererRegistry, registerBuiltinWidgets } from '../src/index.js';
import { DynamiaDashboard, KpiWidget, ViewerWidget, WidgetRendererRegistry, registerBuiltinWidgets } from '../src/index.js';
import { dashboardDescriptor, makeClient, widgetResponse } from './helpers.js';

const chartCtor = vi.fn();
Expand Down Expand Up @@ -139,3 +139,23 @@ describe('built-in widgets', () => {
expect(chartDestroy).toHaveBeenCalled();
});
});

describe('ViewerWidget', () => {
const Viewer = defineComponent({ props: ['descriptorId', 'viewType', 'source', 'value', 'readOnly'], setup: () => () => h('div', { 'data-testid': 'viewer' }) });
const mountWidget = (data: unknown) => mount(ViewerWidget, { props: { data: data as never }, global: { stubs: { DynamiaViewer: Viewer } } });

it('gives a list value to the viewer as its data source', () => {
const rows = [{ a: 1 }, { a: 2 }];
const props = mountWidget({ descriptorId: 'clientesWidget', value: rows }).findComponent(Viewer).props();

expect(props).toMatchObject({ descriptorId: 'clientesWidget', source: rows, readOnly: true });
expect(props.value).toBeUndefined();
});

it('gives any other value to the viewer as its value', () => {
const props = mountWidget({ viewType: 'form', value: { name: 'Ana' } }).findComponent(Viewer).props();

expect(props).toMatchObject({ viewType: 'form', value: { name: 'Ana' } });
expect(props.source).toBeUndefined();
});
});
6 changes: 3 additions & 3 deletions extensions/dashboard/sources/core/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
<parent>
<groupId>tools.dynamia.modules</groupId>
<artifactId>tools.dynamia.modules.dashboard.parent</artifactId>
<version>26.10.1</version>
<version>26.10.2</version>
<relativePath>../pom.xml</relativePath>
</parent>

Expand All @@ -36,12 +36,12 @@
<dependency>
<groupId>tools.dynamia</groupId>
<artifactId>tools.dynamia.viewers</artifactId>
<version>26.10.1</version>
<version>26.10.2</version>
</dependency>
<dependency>
<groupId>tools.dynamia</groupId>
<artifactId>tools.dynamia.web</artifactId>
<version>26.10.1</version>
<version>26.10.2</version>
</dependency>

<!-- TEST DEPENDENCIES -->
Expand Down
2 changes: 1 addition & 1 deletion extensions/dashboard/sources/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
<parent>
<groupId>tools.dynamia.modules</groupId>
<artifactId>tools.dynamia.modules.parent</artifactId>
<version>26.10.1</version>
<version>26.10.2</version>
<relativePath>../../pom.xml</relativePath>
</parent>

Expand Down
8 changes: 4 additions & 4 deletions extensions/dashboard/sources/zk/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
<parent>
<groupId>tools.dynamia.modules</groupId>
<artifactId>tools.dynamia.modules.dashboard.parent</artifactId>
<version>26.10.1</version>
<version>26.10.2</version>
<relativePath>../pom.xml</relativePath>
</parent>

Expand All @@ -38,17 +38,17 @@
<dependency>
<groupId>tools.dynamia.modules</groupId>
<artifactId>tools.dynamia.modules.dashboard.core</artifactId>
<version>26.10.1</version>
<version>26.10.2</version>
</dependency>
<dependency>
<groupId>tools.dynamia</groupId>
<artifactId>tools.dynamia.zk</artifactId>
<version>26.10.1</version>
<version>26.10.2</version>
</dependency>
<dependency>
<groupId>tools.dynamia.modules</groupId>
<artifactId>tools.dynamia.modules.saas.api</artifactId>
<version>26.10.1</version>
<version>26.10.2</version>
</dependency>

<!-- TEST DEPENDENCIES -->
Expand Down
8 changes: 4 additions & 4 deletions extensions/email-sms/sources/core/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
<parent>
<artifactId>tools.dynamia.modules.email.parent</artifactId>
<groupId>tools.dynamia.modules</groupId>
<version>26.10.1</version>
<version>26.10.2</version>
</parent>

<artifactId>tools.dynamia.modules.email</artifactId>
Expand All @@ -50,17 +50,17 @@
<dependency>
<groupId>tools.dynamia</groupId>
<artifactId>tools.dynamia.domain.jpa</artifactId>
<version>26.10.1</version>
<version>26.10.2</version>
</dependency>
<dependency>
<groupId>tools.dynamia</groupId>
<artifactId>tools.dynamia.crud</artifactId>
<version>26.10.1</version>
<version>26.10.2</version>
</dependency>
<dependency>
<groupId>tools.dynamia</groupId>
<artifactId>tools.dynamia.templates</artifactId>
<version>26.10.1</version>
<version>26.10.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
Expand Down
4 changes: 2 additions & 2 deletions extensions/email-sms/sources/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
<parent>
<groupId>tools.dynamia.modules</groupId>
<artifactId>tools.dynamia.modules.parent</artifactId>
<version>26.10.1</version>
<version>26.10.2</version>
<relativePath>../../pom.xml</relativePath>
</parent>

Expand Down Expand Up @@ -85,7 +85,7 @@
<dependency>
<groupId>tools.dynamia.modules</groupId>
<artifactId>tools.dynamia.modules.saas.jpa</artifactId>
<version>26.10.1</version>
<version>26.10.2</version>
</dependency>


Expand Down
6 changes: 3 additions & 3 deletions extensions/email-sms/sources/ui/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
<parent>
<artifactId>tools.dynamia.modules.email.parent</artifactId>
<groupId>tools.dynamia.modules</groupId>
<version>26.10.1</version>
<version>26.10.2</version>
</parent>

<name>DynamiaModules - Email UI</name>
Expand All @@ -34,12 +34,12 @@
<dependency>
<groupId>tools.dynamia</groupId>
<artifactId>tools.dynamia.zk</artifactId>
<version>26.10.1</version>
<version>26.10.2</version>
</dependency>
<dependency>
<groupId>tools.dynamia.modules</groupId>
<artifactId>tools.dynamia.modules.email</artifactId>
<version>26.10.1</version>
<version>26.10.2</version>
</dependency>
<dependency>
<groupId>tools.dynamia.zk.addons</groupId>
Expand Down
2 changes: 1 addition & 1 deletion extensions/entity-files/packages/files-sdk/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@dynamia-tools/files-sdk",
"version": "26.10.1",
"version": "26.10.2",
"website": "https://dynamia.tools",
"description": "TypeScript/JavaScript client SDK for the Dynamia Entity Files extension REST API",
"keywords": [
Expand Down
Loading
Loading