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

[3389] Add support for DateTime widget #3390

Merged
merged 2 commits into from
May 6, 2024
Merged

Conversation

lfasani
Copy link
Contributor

@lfasani lfasani commented Apr 16, 2024

Bug: #3389

Pull request template

General purpose

What is the main goal of this pull request?

  • Bug fixes
  • New features
  • Documentation
  • Cleanup
  • Tests
  • Build / releng

Project management

  • Has the pull request been added to the relevant project and milestone? (Only if you know that your work is part of a specific iteration such as the current one)
  • Have the priority: and pr: labels been added to the pull request? (In case of doubt, start with the labels priority: low and pr: to review later)
  • Have the relevant issues been added to the pull request?
  • Have the relevant labels been added to the issues? (area:, difficulty:, type:)
  • Have the relevant issues been added to the same project and milestone as the pull request?
  • Has the CHANGELOG.adoc been updated to reference the relevant issues?
  • Have the relevant API breaks been described in the CHANGELOG.adoc? (Including changes in the GraphQL API)
  • In case of a change with a visual impact, are there any screenshots in the CHANGELOG.adoc? For example in doc/screenshots/2022.5.0-my-new-feature.png

Architectural decision records (ADR)

  • Does the title of the commit contributing the ADR start with [doc]?
  • Are the ADRs mentioned in the relevant section of the CHANGELOG.adoc?

Dependencies

  • Are the new / upgraded dependencies mentioned in the relevant section of the CHANGELOG.adoc?
  • Are the new dependencies justified in the CHANGELOG.adoc?

Frontend

This section is not relevant if your contribution does not come with changes to the frontend.

General purpose

  • Is the code properly tested? (Plain old JavaScript tests for business code and tests based on React Testing Library for the components)

Typing

We need to improve the typing of our code, as such, we require every contribution to come with proper TypeScript typing for both changes contributing new files and those modifying existing files.
Please ensure that the following statements are true for each file created or modified (this may require you to improve code outside of your contribution).

  • Variables have a proper type
  • Functions’ arguments have a proper type
  • Functions’ return type are specified
  • Hooks are properly typed:
    • useMutation<DATA_TYPE, VARIABLE_TYPE>(…)
    • useQuery<DATA_TYPE, VARIABLE_TYPE>(…)
    • useSubscription<DATA_TYPE, VARIABLE_TYPE>(…)
    • useMachine<CONTEXT_TYPE, EVENTS_TYPE>(…)
    • useState<STATE_TYPE>(…)
  • All components have a proper typing for their props
  • No useless optional chaining with ?. (if the GraphQL API specifies that a field cannot be null, do not treat it has potentially null for example)
  • Nullable values have a proper type (for example let diagram: Diagram | null = null;)

Backend

This section is not relevant if your contribution does not come with changes to the backend.

General purpose

  • Are all the event handlers tested?
  • Are the event processor tested?
  • Is the business code (services) tested?
  • Are diagram layout changes tested?

Architecture

  • Are data structure classes properly separated from behavioral classes?
  • Are all the relevant fields final?
  • Is any data structure mutable? If so, please write a comment indicating why
  • Are behavioral classes either stateless or side effect free?

Review

How to test this PR?

Please describe here the various use cases to test this pull request

  • Has the Kiwi TCMS test suite been updated with tests for this contribution?

@lfasani lfasani added this to the 2024.5.0 milestone Apr 16, 2024
@lfasani lfasani self-assigned this Apr 16, 2024
@lfasani lfasani linked an issue Apr 16, 2024 that may be closed by this pull request
1 task
Copy link
Contributor

@AxelRICHARD AxelRICHARD left a comment

Choose a reason for hiding this comment

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

first review of the code, I didn't test it yet.

@AxelRICHARD
Copy link
Contributor

AxelRICHARD commented Apr 16, 2024

Could you please rebase this PR on master instead on one of your own branch?

Comment on lines 82 to 101
function useErrorReporting<T>(
result: MutationResult<T>,
extractPayload: (data: T | null) => GQLPayload | undefined,
addErrorMessage: (message: string) => any,
addMessages: (messages: any) => any
) {
useEffect(() => {
const { loading, data, error } = result;
if (!loading) {
if (error) {
addErrorMessage(error.message);
}
const payload: GQLPayload | undefined = extractPayload(data || null);
if (payload && (isSuccessPayload(payload) || isErrorPayload(payload))) {
const { messages } = payload;
addMessages(messages);
}
}
}, [result.loading, result.data, result.error]);
}
Copy link
Member

Choose a reason for hiding this comment

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

Something like this should probably be a hook in sirius-components-core directly to be usable by all downstream projects. The hook in question should have the dependency to addErrorMessage / addMessages and given the pattern used by our mutation data fetchers (on purpose), I'm pretty sure you don't need anyone to tell you how to extract the payload.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

yes but not in the PR. We must define the scope of this change because currently useErrorReporting pattern is used in portal, deck, gantt and DateTimeWidget. Ideally, we should use it everywhere it is needed. It implies lots of changes including GQLPayloadXxx that are define everywhere.

Copy link
Contributor Author

@lfasani lfasani Apr 17, 2024

Choose a reason for hiding this comment

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

We could simplify useErrorReporting by using useMultiToast inside. Then we would have only result and extractPayload parameters.
We could even force all GQLxxxMutationData to have a payload attribute of type GQLPayload (defined in sirius-components-core) and then only the result parameter would be necessary. (isErrorPayload and isSuccessPayload would be included in useErrorReporting too

Copy link
Member

Choose a reason for hiding this comment

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

yes but not in the PR. We must define the scope of this change because currently useErrorReporting pattern is used in portal, deck, gantt and DateTimeWidget.

Yes in this PR. I don't know why this kind of situation happens again and again where people try to improve just their own piece of code. This code should either be removed or in sirius-components-core and that's the same for its other occurences.

It implies lots of changes including GQLPayloadXxx that are define everywhere.

I'm not asking for all pieces of code where errors are treated to be updated, I'm just asking for this specific piece of code, those 20 lines of code, to be accessible by everybody by being in sirius-components-core. And if they are moved there, it should be very easy to update both the portal and gantt part too instead of copying and pasting stuff.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

done

@lfasani lfasani requested a review from gcoutable as a code owner April 16, 2024 13:31
@lfasani lfasani changed the base branch from lfa/enh/expand to master April 16, 2024 13:31
@lfasani lfasani force-pushed the lfa/enh/dateTimeWidget branch 3 times, most recently from e29fc09 to a3691f8 Compare April 17, 2024 10:45
@lfasani lfasani requested a review from frouene April 17, 2024 12:13
@lfasani lfasani requested a review from sbegaudeau April 23, 2024 09:26
@lfasani lfasani force-pushed the lfa/enh/dateTimeWidget branch 3 times, most recently from 36ba2bc to bb61155 Compare April 23, 2024 13:20
@sbegaudeau sbegaudeau changed the title Add support for DateTime widget [3389] Add support for DateTime widget Apr 25, 2024
@lfasani lfasani linked an issue Apr 30, 2024 that may be closed by this pull request
1 task
Copy link
Member

@sbegaudeau sbegaudeau left a comment

Choose a reason for hiding this comment

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

I'll handle the comments that I've made and update the PR accordingly

@@ -16,6 +16,7 @@ export interface GQLMessage {
level: string;
}

export interface GQLErrorPayload {
export interface GQLPayload {
Copy link
Member

Choose a reason for hiding this comment

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

There's no generic GQLPayload in the GraphQL API with such signature

Copy link
Member

Choose a reason for hiding this comment

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

I've removed it since it was wrong

@sbegaudeau sbegaudeau force-pushed the lfa/enh/dateTimeWidget branch 2 times, most recently from 130a461 to 179b13d Compare May 5, 2024 19:39
@@ -259,7 +237,7 @@ export const useDeckMutations = (editingContextId: string, representationId: str
const [rawcreateCard, rawCreateCardResult] = useMutation<GQLCreateCardData, GQLCreateCardVariables>(
createCardMutation
);
useErrorReporting(rawCreateCardResult, (data) => data?.createCard);
useReporting(rawCreateCardResult, (data: GQLCreateCardData) => data.createCard);
Copy link
Member

Choose a reason for hiding this comment

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

This is wrong, it's not your fault, the error has been on master for quite some time. We have a simple pattern where everything follows a logic yet people want to change things and they make mistakes. The name of the mutation is not createCard so the name of the payload, type etc should change. Because of that, here we are extracting a payload which do not exist. The existing code either did not properly execute the code or made incorrect assumptions.

lfasani and others added 2 commits May 6, 2024 10:45
Bug: #3389
Signed-off-by: Laurent Fasani <laurent.fasani@obeo.fr>
Signed-off-by: Stéphane Bégaudeau <stephane.begaudeau@obeo.fr>
@sbegaudeau sbegaudeau merged commit 3717bb4 into master May 6, 2024
4 checks passed
@sbegaudeau sbegaudeau deleted the lfa/enh/dateTimeWidget branch May 6, 2024 08:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants