Skip to content

2.0.0#255

Open
volarname wants to merge 54 commits into
developfrom
feature/#85491/upgrade
Open

2.0.0#255
volarname wants to merge 54 commits into
developfrom
feature/#85491/upgrade

Conversation

@volarname

Copy link
Copy Markdown
Contributor

No description provided.

volarname and others added 30 commits February 9, 2026 13:22
 Added:                                                                                                                                                                                                                              
  - Internal image flag support for asset licences (DamAssetLicenceExtended type, internalRule config, override/internal flag switches in asset metadata)
  - Two new job types: jobAssetFileReprocessInternalFlag and jobSynchronizeImageChanged with full create/detail UI
Co-authored-by: Tomas Hermanek <tomas.hermanek@petitpress.sk>
added `mainFileOverrideInternal` and `mainFileInternal` boolean fields in `AssetMetadataBulkItem` for asset metadata updates
… eslint, watch-common-admin, browserslist:update
Reorganize src/ into src/domains/<system>/<entity>/{api,components,
composables,factory,filter,store,types,valueObject} per entity. Three
top-level systems: system/ (auth, app shell, system views), common/
(anzuUser, log, permission, permissionConfig, permissionGroup),
coreDam/ (17 DAM entities + shared/ slot for cross-entity DAM code:
anzutap, ColorBox, FileUpload, customMetadata, ABtnAdvanced,
CachedDamUserChip, FilterClosestColor, distribution helpers,
assetFileRoute, upload service).

Cross-system generics moved to src/shared/ (apiClients/, types/,
utils/, EnvConfigService.ts, ErrorHandlerApiService.ts,
BetaTestFeaturesService.ts, systems.ts, configurationApi.ts).

Old top-level folders src/{components,composables,services,stores,
types,model,views,utils}/ deleted entirely. Every move via git mv so
git log --follow traces full history. layouts/, pages/, plugins/,
styles/, locales/, router/ stay at root.

system/auth/Auth.ts -> simpleLogin.ts (Linux case-sensitive collision
with sibling auth.ts composable rejected by TS forceConsistentCasing
InFileNames). Affects only the import path; SimpleLoginForm export
unchanged.

views/coreDam/externalProviderAsset/ consolidated into
domains/coreDam/externalProvider/components/.

eslint.config.mjs: anzu/no-deprecated-imports toggled warn -> off to
keep CI signal clean during restructure; re-enable in dedicated
cleanup PR.
common-admin chunk dropped from 1,113 kB to 4 parts (all <500 kB):
- common-admin (main, 415 kB)
- common-admin-internals (index-*.mjs, 461 kB)
- common-admin-autocomplete (AFormRemoteAutocomplete async chunk, 176 kB)
- common-admin-labs (labs.js, only loaded when used)

vue-i18n + @intlify/* pulled out of vue-core (49 kB own chunk).

New vendor-utils chunk (115 kB) for axios, @vuelidate, @floating-ui,
jwt-decode, universal-cookie, uuid, rusha, sortablejs.

No more "chunks larger than 500 kB" Rollup warning.
volar and others added 15 commits May 27, 2026 21:25
- vite.config.ts: resolve.dedupe: ['vuetify'] — prevents subtle
  double-bundling if any transitive dep pulls in its own vuetify copy
- package.json: add dotenv ^17.4.2 devDep for future env-loading scripts

yarn.lock reshuffled by yarn install.
- api: apiFetch*/apiFetchByIds/apiFetchOne... → useApiFetchList/useApiFetchByIds/useApiRequest factories
- filters: makeFilterHelper → createFilter/createFilterStore/MakeFilterOption (/labs); preserve apiName + elastic setup
- datatables: usePagination ref + provide(DatatablePaginationKey) + useFilterHelpers(filterData, filterConfig)
- asset & external-provider filter sidebars rebuilt on AFilterWrapperSidebar (develop layout parity)
- createdAt ranges → AFilterTimeInterval; add timeInterval helper
- re-enable anzu/no-deprecated-imports: 'error' (no skipFiles)
Renamed filter fields produced titleT keys with no translation (raw key shown). Match develop:
- ExternalProviderAssetFilter: term titleT → coreDam.asset.filter.text ("Text")
- LogFilter: resourceId titleT → common.log.filter.resourceIds ("ID entity")
- AssetLicenceFilter: extSystem titleT → coreDam.extSystem.filter.extSystem ("Externý systém")
- DistributionCategorySelectFilter: serviceSlug titleT → coreDam.distributionCategorySelect.filter.name ("Meno"); unhide type ("Typ assetu")
 feat #84735 synthetic audio (TTS) admin UI

  Added:
  - VoiceFamily module: list/detail/edit views, datatable, filter, remote
    autocomplete, cached chip, and per-family Voice bindings with
    ElevenLabs / Google TTS discriminated forms (create/update routed to
    per-provider endpoints)
  - TtsNarrationRequest module: list/detail views, synthesize dialog
    (text 10-50k chars, voice family, podcasts, licence), cancel dialog,
    chunk progress display, status/mode chips
  - Asset integration: ttsAudio metadata flag (switch, list filter,
    meta-icon) and ACL-gated TTS tab in asset detail sidebar
  - ExtSystem TTS settings form: active provider mode, default voice
    family, auto keyword, free-audio epilog asset select
  - 10 new DAM_TTS_* ACL permissions, routes, breadcrumbs and full
    sk/en locales for all new modules

  Changed:
  - PublicExport: single assetLicence replaced by multi-licence
    (licences[] with minLength validation) to match the BE join-table
    redesign shipped with this task
  - PodcastRemoteAutocomplete: defineModel + optional extSystemId
    scoping (used by the synthesize dialog)
  - extSystem/assetLicence stores: dropped pass-through setters in
    favor of direct ref assignment
  - Job create/detail forms: minValue(1) on targetLicenceId,
    dateTimePretty date display
  - Dependency bumps (axios, uuid, postcss, vite)
bind public export create to licences array
Integrate main's 6 new commits into the domain-driven /labs structure
(restructure + @anzusystems/common-admin/labs migration + file-based routing):

- New modules voiceFamily & ttsNarrationRequest relocated into
  src/domains/coreDam, migrated off the deprecated barrel to /labs, wired via
  file-based src/pages routes (manual ROUTE enum / routes.ts dropped)
- Resolve 33 conflicts across asset, assetLicence, extSystem, job, podcast,
  publicExport, asset/user filters and the router
- Features: mainFileInternal + ttsAudio asset filters (#253); publicExport
  licences[] (#256); podcast extSystemId-scoped select; extSystem TTS settings;
  internal-image/synchronize-image job kinds; asset-detail TTS panel
- Fix sidebar nav to file-based route names; cancel request POSTs an explicit
  {} body to match main (Symfony reads the request body)

Gates green: vue-tsc, eslint (anzu/no-deprecated-imports), oxlint, stylelint, build.
The :model-value cast used a TS union inside the template binding. It only
passed eslint because of wrapping parens — but oxfmt strips those "redundant"
parens, after which vue-eslint-parser reads `string | string[]` as a deprecated
Vue filter (vue/no-deprecated-filter). Move the union into a script-side type
alias so no `|` appears in the template; oxfmt and eslint are now both stable.
Replace the deprecated ASortable with the /labs list editors, matching admin-cms:
- podcast PodcastEditForm: ASortable -> ASortableListEditor (item-factory using
  nextListEditorTempId for stable row keys, manage-delete, update-position);
  editing stays in the existing dialog via @edit/@added
- asset DistributionManage: ASortable (disable-dragable) -> AListEditor; delete
  stays API-backed via :on-delete; editing via the existing dialog

No ASortable usages remain in admin-dam.
…mputed

Replace the one-off type alias (added to keep the TS union out of the template
binding, where oxfmt strips the parens and vue-eslint-parser then misreads `|`
as a deprecated Vue filter) with a computed that does the same narrowing in
script. Cleaner and self-explanatory; template binding stays `|`-free so oxfmt
and eslint are both stable.
…in-cms parity)

These are auto-generated by the vite plugins (unplugin-vue-router /
unplugin-auto-import) and regenerated by `generate:dts`, which runs first in
`yarn ci`. Tracking them just produces churn (e.g. ~900-line typed-router diffs)
on every regeneration. admin-cms already gitignores both; match that.
Routine version bumps (already present in the working tree): @anzusystems/common-admin
dev build, @tiptap/* 3.27, axios 1.18, vue 3.5.38, vuetify 4.1.2, @sentry/vue,
vue-i18n; dev tooling oxfmt 0.55, oxlint 1.70, eslint 10.5, vite, vue-tsc, cypress,
@types/node. yarn.lock regenerated to match.
@volarname volarname force-pushed the feature/#85491/upgrade branch from 3b3c9a9 to 89f5aed Compare June 17, 2026 09:50
volar and others added 9 commits June 28, 2026 17:49
a8da3a0 migrated to props that don't exist in the labs v2 API (item-factory/manage-delete/update-position/@added/@add). Vue treats unknown props/events as silent fall-through, so it type-checked but the Add actions in podcast export-data and asset distributions were dead at runtime, and none of the consumer recipe was applied.

- podcast: drop dead props, restore add via external button + dialog (cancel removes the new row), sort exportData by position at ingress, renumber + adopt response + commit() to re-baseline on save, gate form on !detailLoading
- asset distributions: hide built-in add, add external button opening the type-select dialog
- distributionCategorySelect: migrate off raw useSortable to inline ASortableListEditor; validateAll() save gate, position sort at ingress, renumber + temp-id strip (id stays '' for new in the payload) + response adopt + commit() on save

yarn ci green.
New export-data rows carry a negative temp id for the list-editor key, but core-dam's deserializer treats a non-zero unknown id as a reference to an existing entity (Doctrine then fails with a cascade-persist error on Podcast#exportData). Map negative temp ids to 0 in the save payload so the backend creates them, matching the pre-migration convention and the DistributionCategoryOption handling. Verified end-to-end: add export-data -> save -> 200.
Author ids are UUIDs (DocId), so sorting by id produced an arbitrary
order. Both the author list (useAuthorListActions) and the author
select autocomplete (useAuthorSelectActions) hard-set pagination.sortBy
to 'id' on non-text fetches; default them to createdAt so the newest
authors show first, while keeping relevance ordering for fulltext search.
…ted-at

fix(author): order author list by createdAt instead of id
Route pluralization in #85491 left many singular cy.visit/urlContains
targets that now 404 (no redirect layer). Update asset, podcast,
video-show, user, public-export and distribution-category-select detail
paths plus nav hrefs to the plural routes. API URLs are left unchanged.
The "Najkratšia dimenzia" (shortestDimensionFrom/Until) filter was sent
to the search API but core-dam's AssetQueryFactory never applies it (no
ES clause, field not indexed), so it silently did nothing. Remove the
dead field from the asset list filter config, form and locales.
Conflict in author/composables/authorActions.ts (moved to src/domains on
this branch): kept the new labs-API version. Preserved main's PR #257
intent (order author lists by createdAt): AuthorDatatable.vue now
usePagination('createdAt') instead of SORT_BY_ID. Author select
autocomplete sort stays on common-admin default (pagination built there,
not controllable from admin-dam).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants