Skip to content

Upgrade to vue js3#231

Open
hcvdwerf wants to merge 9 commits intoFAIRDataTeam:developfrom
Health-RI:Upgrade-to-VueJs3
Open

Upgrade to vue js3#231
hcvdwerf wants to merge 9 commits intoFAIRDataTeam:developfrom
Health-RI:Upgrade-to-VueJs3

Conversation

@hcvdwerf
Copy link

Main reason
Security vulnerability fixes with modernization: upgrade to latest Vue.js, enable strict TypeScript, and update styling approach.

What changed

  • Security-related dependency updates and fixes.
  • Vue.js updated to the latest version.
  • TypeScript strict mode enabled with necessary code adjustments.
  • Styling pipeline updated (CSS ordering / build approach) to stabilize theme overrides.

Notes

  • Build and lint pass.
  • Docker runtime config improved for API URL and styling rebuild behavior.

Hans-christian and others added 3 commits January 22, 2026 12:51
…RDataTeam#198)

* add isOptionalBlankNode to fieldUtils

* use isOptionalBlankNode in FormRenderer.isList

  this is ugly, but is the least invasive way to do it

  we could rename isList to something more fitting

* do not add default fields in case of optional blank node

* simplify condition for createDefaultValueArray by using isOptionalBlankNode
…ditor (FAIRDataTeam#209)

* rename `isOptionalBlankNode` to `isOptionalNode`

* check for `sh:NodeShape` instead of `dash:BlankNodeEditor` in `isOptionalNode`
Copy link

@kburger kburger left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • The font in the rdf preview when creating new metadata is not a monospaced font.
  • The issued/modified date(time)picker is not showing the the stylized widget, date selection does work.
  • when creating a dataset and setting a theme to http://example.com, the viewer does not show the url in the list.
  • in advanced search, the sparql query is not syntax-highlighted (not the case in the vue2 version either)

@dennisvang
Copy link
Contributor

dennisvang commented Jan 22, 2026

Thanks for the PR, but

image

So many changes in a single commit, out of the blue.

I'm not sure how we're supposed to review this...

UPDATE:

It turns out the bulk of the changed lines is due to package-lock.json: +5,556 / -22,123 out of +9,429 / -25,517 total
This leaves +3873 / -3394 relevant changes, which may be a little less daunting, but it is still far from reasonable for what is basically a single commit.

To put things in perspective: the total project is approx. 14110 lines in 171 files

@dennisvang dennisvang added the generated Contains AI generated code, a.k.a. Vibe coding label Jan 22, 2026
@hcvdwerf
Copy link
Author

hcvdwerf commented Jan 22, 2026

Thanks for the PR, but

image So many changes in a single commit, out of the blue.

I'm not sure how we're supposed to review this...

Thanks for the feedback. fair point about “out of the blue.” This started as security (required by hospitals) work and then expanded into follow‑ups (Vue 3, TS strictness, styling update, not maintained packages, Docker/runtime config to make it work, and upstream backports). I should’ve communicated earlier.
I agree the PR is too large to review as‑is. Let me know if you have a preferred split.

@hcvdwerf
Copy link
Author

hcvdwerf commented Jan 22, 2026

  • The font in the rdf preview when creating new metadata is not a monospaced font.
  • The issued/modified date(time)picker is not showing the the stylized widget, date selection does work. Not bootstrap anymore
  • when creating a dataset and setting a theme to http://example.com, the viewer does not show the url in the list. Which list? I see it in the top list view
  • in advanced search, the sparql query is not syntax-highlighted (not the case in the vue2 version either) Changed

first and last modified. Theme I see in the list. datepicker was first bootstrap. now I think VueJs one

},

postApiKey(apiKey) {
postApiKey(apiKey: Record<string, unknown>) {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not 100% sure but for postApiKey i think the parameters should be empty, based on no values being passed on from the index.vue postApiKey: https://github.com/Health-RI/FAIRDataPoint-client/blob/a713836b54920c753492fcff1637f7726aaf51e3/src/views/ApiKeys/index.vue#L88

},

getChildren(_id, child, page) {
getChildren(_id: string | number, child: string, page: number) {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

},

put(_id, data) {
put(_id: string | number, data: string) {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this is an entity and entityId is a string, but not 100% sure better to double check. (line 26: https://github.com/Health-RI/FAIRDataPoint-client/blob/a713836b54920c753492fcff1637f7726aaf51e3/src/entity/EntityConfig.ts)


export default {
postReset(reset) {
postReset(reset: Record<string, unknown>) {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

},

getChildren(id, child, page) {
getChildren(id: string | number, child: string, page: number) {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also here id should be any

background: $color-light;
margin: 0;
padding: 0;
max-height: 250px;

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

also these CSS changed don't have much to do with Vue3 migration i think, maybe change back to normal ?

const conformsTo = graph.findAll(DCT('conformsTo'))
if (conformsTo.length > 0) {
const data = conformsTo.map((uri) => {
const uriString = typeof uri === 'string' ? uri : _.get(uri, 'value', '')

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

figure out what type uri is so that you can remove this line

  const uriString = typeof uri === 'string' ? uri : _.get(uri, 'value', '')

if (!path) return null

const pathValue = typeof path === 'string' ? path : _.get(path, 'value')
if (!pathValue) {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

figure out what type pathValue is so that you can remove this line

const pathValue = typeof path === 'string' ? path : _.get(path, 'value')


function field(label, input, extra = {}) {
function field(label: string, input: unknown, extra: Record<string, unknown> = {}) {
if (typeof input !== 'object') {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

figure out what type input is so that you can remove this line

if (typeof input !== 'object') {

Avatar,
// eslint-disable-next-line no-use-before-define
ItemTree,
MembershipBadge,

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

double check if ItemTree was removed correcty or it should be kept in here

Copy link

@SeanBerrieHRI SeanBerrieHRI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I prioritized maintaining the original logic and structure. I intentionally ignored "nice-to-have" refactors or stylistic changes that weren't strictly required for Vue3 migrtation. This minimizes the risk of introducing behavioral regressions during the upgrade.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

generated Contains AI generated code, a.k.a. Vibe coding

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants