41 lines
1.2 KiB
JavaScript
41 lines
1.2 KiB
JavaScript
|
import produce from 'immer';
|
||
|
|
||
|
export const updateSecurityTrainingOptimisticResponse = (changes) => ({
|
||
|
// False positive i18n lint: https://gitlab.com/gitlab-org/frontend/eslint-plugin-i18n/issues/26
|
||
|
// eslint-disable-next-line @gitlab/require-i18n-strings
|
||
|
__typename: 'Mutation',
|
||
|
securityTrainingUpdate: {
|
||
|
__typename: 'SecurityTrainingUpdatePayload',
|
||
|
training: {
|
||
|
__typename: 'ProjectSecurityTraining',
|
||
|
...changes,
|
||
|
},
|
||
|
errors: [],
|
||
|
},
|
||
|
});
|
||
|
|
||
|
export const updateSecurityTrainingCache = ({ query, variables }) => (cache, { data }) => {
|
||
|
const {
|
||
|
securityTrainingUpdate: { training: updatedProvider },
|
||
|
} = data;
|
||
|
const { project } = cache.readQuery({ query, variables });
|
||
|
if (!updatedProvider.isPrimary) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
// when we set a new primary provider, we need to unset the previous one(s)
|
||
|
const updatedProject = produce(project, (draft) => {
|
||
|
draft.securityTrainingProviders.forEach((provider) => {
|
||
|
// eslint-disable-next-line no-param-reassign
|
||
|
provider.isPrimary = provider.id === updatedProvider.id;
|
||
|
});
|
||
|
});
|
||
|
|
||
|
// write to the cache
|
||
|
cache.writeQuery({
|
||
|
query,
|
||
|
variables,
|
||
|
data: { project: updatedProject },
|
||
|
});
|
||
|
};
|