Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

le transformer Array ne fonctionne pas correctement #2133

Closed
Bonvallot opened this issue Aug 8, 2024 · 3 comments · Fixed by #2141
Closed

le transformer Array ne fonctionne pas correctement #2133

Bonvallot opened this issue Aug 8, 2024 · 3 comments · Fixed by #2141
Labels
Triage Nouveau problème ou besoin à étudier et à classer

Comments

@Bonvallot
Copy link
Contributor

Décrire le bogue
Lorsqu'on lance le transformer Array, il crée un tableau quand il n'y a qu'une valeur. Il crée un tableau de tableau quand il y a plusieurs valeurs

Reproduire
Étapes pour reproduire le comportement :

  1. Allez à ...'
  2. Voir l'aperçu de la valeur :
    ["HD 101065"]
    [["Iron"],["iron"],["sugar"],["haem iron"]]

Comportement attendu
Ne pas créer de tableaux dans le tableau mais avoir un seul tableau avec plusieurs valeurs
["HD 101065"]
["Iron","iron","sugar","haem iron"]

Captures d'écran
Le cas échéant, ajoutez des captures d'écran pour expliquer votre problème.
image

Environnement (veuillez compléter les informations suivantes) :

  • Navigateur Mozilla
  • Version de LODEX [ex. 14.0.57]

Contexte supplémentaire
Pour contourner l'actuel Array, on enchaîne un Join puis un Split

@Bonvallot Bonvallot added the Triage Nouveau problème ou besoin à étudier et à classer label Aug 8, 2024
@AnaelKremer
Copy link
Collaborator

AnaelKremer commented Aug 19, 2024

Tout fonctionne comme c'est censé fonctionner en fait. Le problème ne vient pas de l'utilisation du transformer "Array" mais de l'utilisation de "Get".

Pour info, les transformers testent le type des données et s'adaptent en fonction. Puisque le 1er exemple renvoyé après "Get" est un string, le transformer transforme la chaîne en tableau. Dans les cas où ce sont déjà des tableaux le transformer va agir su chaque élement du tableau, et donc transformer chaque chaîne ou élément en tableau et c'est pourquoi on obtient un tableau de tableaux.

L'utilisation du transformer "Array" dans ce contexte revient à exécuter ce code .map(item=>_.castArray(item)) quand on a un tableau,
et simplement .castArray() quand c'est une chaîne.

Le résultat du transformer "Array" est donc tout à fait normal.

Le problème apparaît à l'utlisation de "Get" car on voit que pour le 1er exemple on n'a bien un tableau d'une seule valeur
image

c'est l'usage de "Get" qui transforme ce taleau d'une valeur en un string.

image

Mais ce n'est pas un bug, en vérifiant le code du transformer "Get" il y a bien une ligne qui spécifie que si le tableau contient exactement 1 élément alors on renvoie directement l'élément sous forme de chaîne. Si le tableau est vide ou s'il contient pus d'un élément on renvoie le tableau d'origine >> https://github.com/Inist-CNRS/lodex/blob/master/packages/transformers/src/operations/GET.js

ligne 8 :
return values.length === 1 ? values[0] : values;

A voir si @touv veut modifier le code de ce transformer et si cette ligne en particulier a une utilité. Si non je pense qu'il suffit de remplacer par return values;

Pour l'heure, le problème peut être résolu en passant par le mode enrichissement en écrivant simplement
[assign] path=value value=get("value.chemTag.chemical")

le get de Lodash ne modifiant pas la structure des données.

@touv
Copy link
Contributor

touv commented Aug 26, 2024

Le Transformer GET est peut-être le Transformer le plus utilisé, du coup, modifier son comportement risque de casser beaucoup de modèles. Je préférais modifier le comportement du transformer ARRAY pour éviter de créer des matrices car l'idée de ce Transformer était d’homogénéiser les types de données pour être certain de créer un tableau de valeurs directement exploitable par le format liste.

@AnaelKremer
Copy link
Collaborator

ok ok je comprends l'argument, par contre je laisse la main pour la résolution car pour moi le code spécifie déjà de ne pas créer de tableau si l'on a déjà un tableau...
`export const valueToArray = value => {
const arr = Array.isArray(value) ? value : [value];
return arr.filter(x => x);
};

https://github.com/Inist-CNRS/lodex/blob/master/packages/transformers/src/operations/ARRAY.js`

@touv touv linked a pull request Aug 26, 2024 that will close this issue
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Triage Nouveau problème ou besoin à étudier et à classer
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants