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

Add option for email fields to set logged in users email as default #72

Open
wants to merge 6 commits into
base: main
Choose a base branch
from

Conversation

mbarde
Copy link
Contributor

@mbarde mbarde commented Sep 12, 2023

Adds checkbox to email fields Use email of logged in user as default.

If selected and user is logged in, the field will get pre-filled with the users email address.

Copy link
Member

@pnicolli pnicolli left a comment

Choose a reason for hiding this comment

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

This PR is really interesting, I like the feature it adds. Thanks!
I left a couple notes on improvements that can be done.

src/components/FormView.jsx Outdated Show resolved Hide resolved
);
const dispatch = useDispatch();
useEffect(() => {
if (userId?.length > 0 && curUserEmail === false) dispatch(getUser(userId));
Copy link
Member

Choose a reason for hiding this comment

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

I think we have this info in redux already, if the user is logged in, right? No need to dispatch again if we do have it

Copy link
Contributor Author

Choose a reason for hiding this comment

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

If the user is logged in we can retrieve the userId via (state) => jwtDecode(state.userSession.token).sub, but this is not necessarily the same as the users email address (depends on the corresponding setting of the Plone instance).
For additional user info (like email) we have to dispatch getUser.
Via 1c44b11 I make sure it is not dispatched, if another component already did it.

) {
const name = getFieldName(subblock.label, subblock.id);
if (!formData.hasOwnProperty(name))
formData[name] = { value: curUserEmail };
Copy link
Member

Choose a reason for hiding this comment

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

I recommend against doing it this way. It is considered a bad practice to mutate props and also to mutate state while rendering. All state changes should be done in a useEffect callback and in this specific situation should be done using the onChangeFormData function in order to properly handle state changes.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Thank you for the feedback! Resolved via ed8cf11

In order to use onChangeFormData I had to compute fields_to_send_with_value. This is done at an other location in the component as well. So I decided to create a reusable function getFieldsToSendWithValue for it.

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