-
Notifications
You must be signed in to change notification settings - Fork 98
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
feat(container): added an invitation modal to accept contract #14041
base: master
Are you sure you want to change the base?
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.
Should we not do a separated PR for the common changes ?
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.
They will disappear once their dedicated PR will be merged (#14025)
const { data } = await fetchIcebergV2<IamResource>({ | ||
route: '/iam/resource?resourceType=account', | ||
}); | ||
/* |
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.
Add a note to say why it s commented
const { t } = useTranslation('agreements-update-modal'); | ||
const { data: urn } = useAccountUrn({ enabled: region !== 'US' && current === ModalTypes.agreements && window.location.href !== myContractsLink }); | ||
const { isAuthorized: canUserAcceptAgreements } = useAuthorizationIam(['account:apiovh:me/agreements/accept'], urn); | ||
const { data: agreements, isLoading } = useAgreementsUpdate({ enabled: canUserAcceptAgreements }); |
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.
isloading is not used
@@ -22,6 +25,7 @@ export default function Container(): JSX.Element { | |||
chatbotReduced, | |||
setChatbotReduced, | |||
} = useContainer(); | |||
useModals(); |
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 guess it is on oversight ?
bd620ea
18c993f
Quality Gate failedFailed conditions |
@@ -0,0 +1,11 @@ | |||
import { fetchIcebergV6, FilterComparator } from "@ovh-ux/manager-core-api"; | |||
|
|||
const fetchAgreementsUpdates = async () => { |
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.
nitpick: Considering the filters applied, it would make more sense to use more precise function name.
const fetchAgreementsUpdates = async () => { | |
const fetchPendingAgreements = async () => { |
const useAgreementsUpdate = (options?: Partial<DefinedInitialDataOptions<Agreements[]>>) => | ||
useQuery({ | ||
...options, | ||
queryKey: ['agreements'], | ||
queryFn: fetchAgreementsUpdates, | ||
}); |
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.
Same as https://github.com/ovh/manager/pull/14041/files#r1901556827 + Query key is too subtle with no info regarding the applied filters. It can easily induce errors if same key is used with different filters.
const useAgreementsUpdate = (options?: Partial<DefinedInitialDataOptions<Agreements[]>>) => | |
useQuery({ | |
...options, | |
queryKey: ['agreements'], | |
queryFn: fetchAgreementsUpdates, | |
}); | |
const usePendingAgreements = (options?: Partial<DefinedInitialDataOptions<Agreements[]>>) => | |
useQuery({ | |
...options, | |
queryKey: ['agreements'], | |
queryFn: fetchAgreementsUpdates, | |
}); |
ref: MANAGER-14722 Signed-off-by: Maxime Bajeux <[email protected]>
}; | ||
|
||
useEffect(() => { | ||
const shouldManageModal = region !== 'US' && current === ModalTypes.agreements && window.location.href !== myContractsLink; |
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.
nitpick: This logic is repeated in L29. I think we should extract it to function.
// We consider we have loaded all information if conditions are not respected to try to display the modal | ||
const hasFullyLoaded = !shouldManageModal | ||
// Or authorization are loaded but user does have right to accept contract or has no contract to accept | ||
|| !isAuthorizationLoading && (!canUserAcceptAgreements || !areAgreementsLoading); | ||
// We handle the modal display only when the Agreements modal is the current one, contract management is available | ||
// (region is not US) and we are not on the page where the user can do the related action (accepts his contract) | ||
if (shouldManageModal) { | ||
// We will wait for all data to be retrieved before handling the modal lifecycle | ||
if (hasFullyLoaded) { | ||
// If no contract are to be accepted we go to the next modal (if it exists) | ||
if (!agreements?.length) { | ||
shell.getPlugin('ux').notifyModalActionDone(); | ||
} | ||
// Otherwise we display the modal | ||
else { | ||
setShowModal(true); | ||
} | ||
} |
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.
suggestion: Instead of spreading the comments per line, it's better to comment the business requirements at the top of useEffect
. This way we create distinction between code and comment and does not break the continuity if one wants to read only the code/comment.
const shouldManageModal = current === ModalTypes.kyc && window.location.href !== kycURL; | ||
// We handle the modal display only when the KYC modal is the current one, and we are not on the page | ||
// where the user can do the related action (upload his documents) | ||
if (shouldManageModal) { | ||
// We will wait for feature availability response before handling the modal lifecycle | ||
if (!isFeatureAvailabilityLoading && availability) { | ||
// If the KYC feature is not available we can safely switch to the next modal | ||
if (!isKycAvailable) { | ||
shell.getPlugin('ux').notifyModalActionDone(); | ||
} | ||
// Otherwise we will wait for the KYC procedure status to decide either we display th modal or switch to the | ||
// next one | ||
else if (!isProcedureStatusLoading && statusDataResponse) { | ||
// If the procedure's status is 'required' we display the modal | ||
if (statusDataResponse?.data?.status === requiredStatusKey) { | ||
setShowModal(true); | ||
} | ||
// Otherwise we go to the next modal (if it exists) | ||
else if (shouldManageModal) { | ||
shell.getPlugin('ux').notifyModalActionDone(); | ||
} | ||
} | ||
} | ||
} | ||
}, [statusDataResponse?.data?.status]); | ||
}, [current, isFeatureAvailabilityLoading, availability, isKycAvailable, isProcedureStatusLoading, statusDataResponse]); |
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 base branch was changed.
ref: MANAGER-14722 Signed-off-by: Jacques Larique <[email protected]>
ref: MANAGER-14722 Signed-off-by: Jacques Larique <[email protected]>
ref: MANAGER-14722 Signed-off-by: Jacques Larique <[email protected]>
ref: MANAGER-14722 Signed-off-by: Jacques Larique <[email protected]>
ref: MANAGER-14722 Signed-off-by: Jacques Larique <[email protected]>
ref: MANAGER-14722 Signed-off-by: Jacques Larique <[email protected]>
ref: MANAGER-14722 Signed-off-by: Jacques Larique <[email protected]>
ref: MANAGER-14722 Signed-off-by: Jacques Larique <[email protected]>
Quality Gate failedFailed conditions |
master
Breaking change is mentioned in relevant commits(n/a)Description
Reworked modal display in order to avoid the possibility of having multiple modals displayed at the same time
Set up a new modal to invite customer to accept new / updated contracts
Fix a small tracking issue on KYC India modal
Related