-
Notifications
You must be signed in to change notification settings - Fork 32
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
[Sponsor by MEL] Add feature Metadata Quality Widget #497
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks @gkeimeHDF for the contribution !
It looks overall quite good.
I've just done a very quick first review, more about the "forme" than the "fond" 😄
I will deeply test it and review it next week, from there, you can still start with
- rebase your work on the last
main
- add tests to your UI components
- add tests to the components that you've changed (to check if the widget is present or not for instance)
- add stories to your UI components
- address the first comments
Note that it's easier if you name your PR branch with a description of what it's about, rather than using the main
tag.
In term of rendering, I really think that the progress bar component is not adapted for the metadata quality widget, it should stick to something similar to what we have on data.gouv.
Here is a first mockup about what the customer wants for the design, it's way better integrated and discret.
We will test the behavior and the computation better next week, thanks again for your great work.
Cheers
libs/ui/elements/src/lib/metadata-quality-info/metadata-quality-info.component.ts
Outdated
Show resolved
Hide resolved
@Input() value: boolean | ||
|
||
get display() { | ||
const name_snake_upper = this.name.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`).toUpperCase(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Variable name must be camel case.
libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.css
Outdated
Show resolved
Hide resolved
libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.spec.ts
Show resolved
Hide resolved
libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.ts
Outdated
Show resolved
Hide resolved
Hello @gkeimeHDF, any news on the topic, regarding my first bunch of comments ? |
@fgravin i was waiting some time if u have more comments, looks like it was completed. Today i had fixed all the issues. Have a good day |
Ok no worry sorry, we haven't tested it yet deeply. |
No because it's the progress bar is the one that MEL has choosen, the meter component was denied by them. Best regards Guillaume |
The screenshot that I provided above comes from MEL UX/UI work, it is what they expect. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for the enhancements.
I've done a deeper review and unfortunately there is an architecture issue with the way your dumb components initiate their state (from the config).
I've made several comments as well.
Also, please add the documentation in the datahub readme for now, otherwise, people won't know how to use the new fields to sort on the quality.
Thanks a lot.
apps/datahub/src/styles.css
Outdated
@@ -7,6 +7,9 @@ body { | |||
margin: 0; | |||
} | |||
|
|||
.container-xs { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I wonder if this shouldn't be supported by https://tailwindcss.com/docs/container
.container-sm
shouldn't exist (it's our responsibility to remove it), do not take it as an exemple.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
On this comment, we should do something or let the code like this?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You should remove the code because we try as much as possible to avoid having global CSS (which is very hard to maintain in the long run). For styling you can either use tailwind classes or, if styling is too elaborate, use the component stylesheet, which is encapsulated.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
i can remove the code but when we will reduce the screen the the title can overflow above the widget. Is it ok? @jahow
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No, we still need to have a working layout
conf/default.toml
Outdated
# if you add an indexed field to calculate the qualityScore, the datahub search allow you to sort on this field with this parameter | ||
# sortable = true | ||
|
||
# by default the wudget appear in 2 location in search list and in detail page |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
# by default the wudget appear in 2 location in search list and in detail page | |
# by default the widget appears in 2 locations: in the search list and in the detail page |
conf/default.toml
Outdated
# by default the wudget appear in 2 location in search list and in detail page | ||
# display_widget_in_detail = false // allow you to hide the widget in detail | ||
# display_widget_in_search = false // allow you to hide the widget in search list | ||
# If you want see the widget in the two location, don't fill theses configurations |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
# If you want see the widget in the two location, don't fill theses configurations | |
# If you want see the widget in the two locations, don't fill theses configurations |
@@ -60,7 +62,11 @@ export class RecordMetadataComponent { | |||
private searchService: SearchService, | |||
private sourceService: SourcesService, | |||
private orgsService: OrganisationsServiceInterface | |||
) {} | |||
) { } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
the formatting is wrong, you should install a prettier plugin within your IDE to auto format the files.
just run a npm run format
to fix all formatting at once.
MD_LegalConstraintsUseLimitationObject: (output, source) => { | ||
const legalConstraints = getAsArray( | ||
selectField<SourceWithUnknownProps[]>(source, 'MD_LegalConstraintsUseLimitationObject') | ||
).map((MD_LegalConstraintsUseLimitationObject) => selectTranslatedValue<string>(MD_LegalConstraintsUseLimitationObject)); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
variables should always be camel case.
}) | ||
export class MetadataQualityInfoComponent { | ||
|
||
metadataQualityConfig: MetadataQualityConfig = getMetadataQualityConfig(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ui
library, even every library are not allow to import the config.
an application could run without the configuration, it means that no dependency are allowed, configuration is only available from the applications.
We have set up linting rules for that, I would suggest you to run npm run lint
before pushing a PR to check that everything is correct. The CI should do it I will enable it on your PR.
This means that you'll have to refactor your approach. You should read the configuration, extract meaningful informations out of it, and pass those flags to the dedicated components like "displayQualityInRecordPage
" and drill them in.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The config is not required because there is a default config
@Input() name: string | ||
@Input() value: boolean | ||
|
||
get display() { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think that the display should be handled outside of the component as well
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
font-size: 15px; | ||
} | ||
|
||
.menu { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
should be done with tailwind CSS, no css is needed here
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Try to remove all css properties here and use tailwind classes with the HTML template instead.
it('content', () => { | ||
expect(component.metadata?.contact?.organisation).toBe("Ifremer"); | ||
}) | ||
}) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You should test the sub component inputs as well with component mocks.
@Component({
selector: 'gn-ui-metadata-quality-info',
template: '',
})
class MockMetadataQualityInfoComponent {
@Input() name: string;
@Input() value: any;
}
..
await TestBed.configureTestingModule({
declarations: [MetadataQualityComponent, MockMetadataQualityInfoComponent],
}).compileComponents();
...
component.metadata = {
qualityScore: 80, // Sample metadata for testing
title: 'Sample Title',
abstract: 'Sample Abstract',
topic: ['Topic 1', 'Topic 2'],
keywords: ['Keyword 1', 'Keyword 2'],
legalConstraints: ['Legal Constraint 1', 'Legal Constraint 2'],
contact: {
organisation: 'Sample Organization',
email: '[email protected]',
},
updateFrequency: 'Monthly',
};
...
it('should display sub-components with correct inputs', () => {
const metadataInfoElements = fixture.nativeElement.querySelectorAll('gn-ui-metadata-quality-info');
expect(metadataInfoElements.length).toBe(8);
const titleElement = metadataInfoElements[0];
expect(titleElement.componentInstance.name).toBe('title');
expect(titleElement.componentInstance.value).toBe('Sample Title');
const abstractElement = metadataInfoElements[1];
expect(abstractElement.componentInstance.name).toBe('description');
expect(abstractElement.componentInstance.value).toBe('Sample Abstract');
const topicElement = metadataInfoElements[2];
expect(topicElement.componentInstance.name).toBe('topic');
expect(topicElement.componentInstance.value).toBe(true);
const keywordsElement = metadataInfoElements[3];
expect(keywordsElement.componentInstance.name).toBe('keywords');
expect(keywordsElement.componentInstance.value).toBe(true);
const legalConstraintsElement = metadataInfoElements[4];
expect(legalConstraintsElement.componentInstance.name).toBe('legalConstraints');
expect(legalConstraintsElement.componentInstance.value).toBe(true);
const organizationElement = metadataInfoElements[5];
expect(organizationElement.componentInstance.name).toBe('organisation');
expect(organizationElement.componentInstance.value).toBe('Sample Organization');
const contactElement = metadataInfoElements[6];
expect(contactElement.componentInstance.name).toBe('contact');
expect(contactElement.componentInstance.value).toBe('[email protected]');
const updateFrequencyElement = metadataInfoElements[7];
expect(updateFrequencyElement.componentInstance.name).toBe('updateFrequency');
expect(updateFrequencyElement.componentInstance.value).toBe('Monthly');
});
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
i just need to put this snippet in the test page ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
the snippet is just intended as an example, I don't think it'll work as-is. The idea is that you test things in a more complete way by checking that the children component get the right inputs for each field in the list.
DISPLAY_ORGANISATION: parsedMetadataQualitySection.display_organisation, | ||
} as MetadataQualityConfig) | ||
|
||
searchConfig = |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
why do you have code about the geometry ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
there is no geometry? Nothing to do here?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
the lines 249 from 255 look like they were duplicated by mistake, as they are about the filter geometry parameter
conf/default.toml
Outdated
@@ -54,6 +54,9 @@ background_color = "#fdfbff" | |||
# title_font = "'My Custom Title Font', fallback-font-title" | |||
# fonts_stylesheet_url = "https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;700&family=Permanent+Marker&display=swap" | |||
|
|||
# This optional parameter allow you to change the default class on progress bar, by default is font-bold | |||
# progress_bar_text_class = 'font-normal' |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I forgot this point but we don't want to introduce this kind of config. You can just get rid of it.
Thanks
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I need remove the code? did we change the default font by font-normal and let it to font-bold?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think you can remove this change and enforce the font weight of the progress bar from the parent component.
One solution is to use CSS variables in the progress bar component, such as:
.label {
font-weight: var(--progress-bar-font-weight, 'bold');
}
And then from the parent component:
:host {
--progress-bar-font-weight: 'normal';
}
See a concrete example with this component: https://github.com/geonetwork/geonetwork-ui/blob/main/libs/ui/inputs/src/lib/star-toggle/star-toggle.component.css
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
i can revert my code and let it like before without change the font-weight and let it bold for all in tailwind css. Is it ok ? @jahow
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No I think you should find a solution like the one I suggested
Snyk security is failed but it's not from the code provided ? |
No that's probably because the snyk workflow is lacking permission. |
@@ -3,10 +3,12 @@ import { marker } from '@biesbjerg/ngx-translate-extract-marker' | |||
import { SortByEnum } from '@geonetwork-ui/util/shared' | |||
import { SearchFacade } from '../state/search.facade' | |||
import { SearchService } from '../utils/service/search.service' | |||
import { getMetadataQualityConfig } from '@geonetwork-ui/util/app-config' |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We try to avoid importing the app config from libs because components can exist without an app configuration (e.g. in web components); in this situation such an import might cause a crash.
See other comment by @fgravin
if (check('TITLE')) { | ||
if (selectField(source, 'resourceTitleObject')) { | ||
success++; | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nested if
s can be combined 🙂
Big thanks for your continued work on this @gkeimeHDF, I have added a few comments to hopefully make things clearer for you. I feel like we're getting close to having something mergeable! Did you manage to run the Edit: also keep in mind that the PR will need to be rebased before merging, as conflicts have appeared with the main branch, thanks! |
@jahow How to launch lint and format ? I tried :
npm run lint
|
Hi @gkeimeHDF,
|
yes else i will got error if no package.json is present. |
Indeed, my bad. Maybe you could have a try with We have released the 1.1.0 version this morning, you can rebase on it. Let me know if it works ! |
Hi, #464 was just merged and it changes significantly the internal data format used in geonetwork-ui. Please use this issue if you need any pointers or indications on how to adapt your work consequently, thanks. |
47bae6b
to
258ebf7
Compare
Hi @gkeimeHDF sure we'll have a look today or tomorrow, thanks for your work. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for the refactoring @gkeimeHDF it looks very good.
I have made some minor comments for the final adjustments.
There is so much prop drilling that I wonder if a service
wouldn't have been more appropriate... This is good enough though.
Thanks 👍
@@ -11,7 +11,14 @@ export const ES_SOURCE_SUMMARY = [ | |||
'linkProtocol', | |||
'contactForResource.organisation', | |||
'contact.organisation', | |||
'contact.email', |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This change is redundant with FIELDS_SUMMARY
.
I think that ES_SOURCE_SUMMARY
should be removed, what do you think @jahow .
@gkeimeHDF it's not your responsability, but I don't think that you need this change, as this constant is just used in the related records
request.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
no big deal, there's probably some more cleanup to do but that doesn't have to be part of this PR; I'm fine either way
@@ -58,10 +58,14 @@ export interface BaseRecord { | |||
keywords: Array<string> // TODO: handle thesaurus and id | |||
accessConstraints: Array<AccessConstraint> | |||
useLimitations: Array<string> | |||
legalConstraints?: Array<string> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't know what to think with these changes, you are updating the pivot format which has been carefuly designed from various standards. I let @jahow judge, maybe those properties were missing.
BTW How do we manage topic
over themes
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
legal constraints are accessConstraints
of type legal
, so no need for a new field I would say
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Topics and themes are semantically the same thing I would say. In ISO they are in two different places but we can probably append them together in the themes
array for now. Non-INSPIRE records will get their themes from the cl_topic
field, whereas INSPIRE records will get them from the inspireTheme
field.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@jahow legalConstraints doesn't go to accessConstraints, it go to useLimitations which is a string Array.
The field is MD_LegalConstraintsUseLimitationObject
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@jahow Des nouvelles sur le sujet?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@gkeimeHDF sorry for taking so long to answer. It's a tricky subject, I think we can leave it like that and improve it later on. Thanks!
@@ -34,6 +39,12 @@ export class SortByComponent { | |||
private searchService: SearchService | |||
) {} | |||
|
|||
ngOnInit(): void { | |||
if (!this.isQualitySortable) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would prefer that you do the opposite, cause this method won't work if we want a setting for another sort property.
If it's enable, then add the option in the choices
array.
font-size: 15px; | ||
} | ||
|
||
.menu { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Try to remove all css properties here and use tailwind classes with the HTML template instead.
} | ||
|
||
ngOnChanges(changes: SimpleChanges): void { | ||
if (changes['metadata'] || changes['metadataQualityDisplay']) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Does it enter here (except on component init) ? I don't understand how this component could see its input changed 🤔
Ok it does on the metadata view, because we first load a ghost page with a small metadata object, and when the full object is loaded, we hydrate the content with the new object.
Anyway, ngOnChanges
is also called on init so there is a redundancy here, remove the ngOnInit
method.
I would load the widget only when the full metadata object is fetched, not on pre-loading though.
@@ -50,6 +52,8 @@ import { PaginationButtonsComponent } from './pagination-buttons/pagination-butt | |||
RelatedRecordCardComponent, | |||
MetadataContactComponent, | |||
MetadataCatalogComponent, | |||
MetadataQualityComponent, | |||
MetadataQualityInfoComponent, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Honestly, it's hard to understand at first sight that MetadataQualityInfoComponent
is one item of the MetadataQualityComponent
component, the name is not talkative enough IMO.
@@ -0,0 +1,3 @@ | |||
.text-4 { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
why not keeping font-bold
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Added some comments, I hope it clarifies things a bit. We're almost there @gkeimeHDF, thanks for the continued work.
licenses: Array<License> | ||
overviews: Array<GraphicOverview> | ||
extras?: Record<string, unknown> | ||
landingPage?: URL | ||
topic?: Array<string> | ||
updateFrequency?: UpdateFrequency | ||
qualityScore?: number |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This should go in extras
I think
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't understand this comment, can you more details?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
So the mapper can output things that are too specific for the pivot format in an extras
field, see for example:
geonetwork-ui/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts
Lines 205 to 211 in 7a84a5b
userSavedCount: (output, source) => | |
this.addExtra( | |
{ | |
favoriteCount: parseInt(selectField(source, 'userSavedCount')), | |
}, | |
output | |
), |
I think you should also use addExtra
for the qualityScore
field
@@ -58,10 +58,14 @@ export interface BaseRecord { | |||
keywords: Array<string> // TODO: handle thesaurus and id | |||
accessConstraints: Array<AccessConstraint> | |||
useLimitations: Array<string> | |||
legalConstraints?: Array<string> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
legal constraints are accessConstraints
of type legal
, so no need for a new field I would say
@@ -11,7 +11,14 @@ export const ES_SOURCE_SUMMARY = [ | |||
'linkProtocol', | |||
'contactForResource.organisation', | |||
'contact.organisation', | |||
'contact.email', |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
no big deal, there's probably some more cleanup to do but that doesn't have to be part of this PR; I'm fine either way
@@ -58,10 +58,14 @@ export interface BaseRecord { | |||
keywords: Array<string> // TODO: handle thesaurus and id | |||
accessConstraints: Array<AccessConstraint> | |||
useLimitations: Array<string> | |||
legalConstraints?: Array<string> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Topics and themes are semantically the same thing I would say. In ISO they are in two different places but we can probably append them together in the themes
array for now. Non-INSPIRE records will get their themes from the cl_topic
field, whereas INSPIRE records will get them from the inspireTheme
field.
licenses: Array<License> | ||
overviews: Array<GraphicOverview> | ||
extras?: Record<string, unknown> | ||
landingPage?: URL | ||
topic?: Array<string> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
See comment above, this new field should not be necessary.
83eaea6
to
f6ac8b4
Compare
Thank you @gkeimeHDF, we have been busy with the |
@gkeimeHDF could you please fix the issues pointed by the CI ? |
@fgravin i had already runned format lint and test without issue. Which is the issue? |
The CI is failing there https://github.com/geonetwork/geonetwork-ui/actions/runs/6302671953/job/17815157041#step:6:13 |
Yes i see, it works in local without prompt any errors, so i guess you need to fix the issue in your ci. |
The CI rarely lies 😉 If you run Thanks |
Did you try the branch ? i had even downgraded my node version to match your ci node version without any errors.
i would suggest you to add --verbose to view what are the issue from your CI. |
I fetched your fork, and set me on detached HEAD on your branch. Then running the fgravin@wkr19:~/dev/geonetwork-ui$ git st
HEAD detached at neogeo/main
no changes added to commit (use "git add" and/or "git commit -a")
fgravin@wkr19:~/dev/geonetwork-ui$ npx nx format:check
libs/api/repository/src/lib/gn4/elasticsearch/constant.ts
libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.spec.ts
libs/ui/search/src/lib/results-list-item/results-list-item.component.ts
fgravin@wkr19:~/dev/geonetwork-ui$ git branch Are you sure that you pushed everything ? Don't you have anything in your stage ? Would be weird if not. |
Yes all is pushed i don't have issue. I did: npm install then: % npx nx format:check % git status % git push |
Ok, weird. I can't see any reason why the Anyway, to move forward, let's merge my PR and re-run the CI. |
Fix formatting
i have merged the PR, maybe the formatter had an issue on macos ? |
Hello @gkeimeHDF, what IDE do you use ? In IntelliJ, I had to update the Prettier configuration. |
@f-necas i use vscode with macos |
This is not an issue about the IDE, cause it does not work apparently from the command line either. |
npx prettier --version |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
All green except Snyk which is a problem that is on the CI, not on this PR
Thanks @gkeimeHDF for the ongoing work
#446