Skip to content

Commit

Permalink
fix(mrf): form duplication with MRF (#6985)
Browse files Browse the repository at this point in the history
fix: form duplication with MRF
  • Loading branch information
justynoh authored Jan 2, 2024
1 parent fa328c2 commit 2e23236
Show file tree
Hide file tree
Showing 9 changed files with 51 additions and 28 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import {
CreateEmailFormBodyDto,
CreateMultirespondentFormBodyDto,
CreateStorageFormBodyDto,
FormDto,
} from '~shared/types'
Expand All @@ -18,9 +19,9 @@ export const createEmailModeTemplateForm = async (
).then(({ data }) => data)
}

export const createStorageModeTemplateForm = async (
export const createStorageModeOrMultirespondentTemplateForm = async (
formId: string,
body: CreateStorageFormBodyDto,
body: CreateStorageFormBodyDto | CreateMultirespondentFormBodyDto,
): Promise<FormDto> => {
return ApiService.post<FormDto>(
`${ADMIN_FORM_ENDPOINT}/${formId}/use-template`,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,14 +43,22 @@ export const useUseTemplateWizardContext = (

const {
useEmailModeFormTemplateMutation,
useStorageModeFormTemplateMutation,
useStorageModeOrMultirespondentFormTemplateMutation,
} = useUseTemplateMutations()

const handleCreateStorageModeForm = handleSubmit(
const handleCreateStorageModeOrMultirespondentForm = handleSubmit(
({ title, responseMode }) => {
if (responseMode !== FormResponseMode.Encrypt || !formId) return

return useStorageModeFormTemplateMutation.mutate({
if (
!(
responseMode === FormResponseMode.Encrypt ||
responseMode === FormResponseMode.Multirespondent
) ||
!formId
) {
return
}

return useStorageModeOrMultirespondentFormTemplateMutation.mutate({
formIdToDuplicate: formId,
title,
responseMode,
Expand All @@ -76,13 +84,13 @@ export const useUseTemplateWizardContext = (
isFetching: isTemplateFormLoading,
isLoading:
useEmailModeFormTemplateMutation.isLoading ||
useStorageModeFormTemplateMutation.isLoading,
useStorageModeOrMultirespondentFormTemplateMutation.isLoading,
keypair,
currentStep,
direction,
formMethods,
handleDetailsSubmit,
handleCreateStorageModeForm,
handleCreateStorageModeOrMultirespondentForm,
modalHeader: 'Duplicate form',
}
}
Expand Down
13 changes: 8 additions & 5 deletions frontend/src/features/admin-form/template/mutation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { useNavigate } from 'react-router-dom'

import {
CreateEmailFormBodyDto,
CreateMultirespondentFormBodyDto,
CreateStorageFormBodyDto,
FormDto,
} from '~shared/types'
Expand All @@ -18,7 +19,7 @@ import { workspaceKeys } from '~features/workspace/queries'

import {
createEmailModeTemplateForm,
createStorageModeTemplateForm,
createStorageModeOrMultirespondentTemplateForm,
} from './TemplateFormService'

const useCommonHooks = () => {
Expand Down Expand Up @@ -67,13 +68,15 @@ export const useUseTemplateMutations = () => {
},
)

const useStorageModeFormTemplateMutation = useMutation<
const useStorageModeOrMultirespondentFormTemplateMutation = useMutation<
FormDto,
ApiError,
CreateStorageFormBodyDto & { formIdToDuplicate: string }
(CreateStorageFormBodyDto | CreateMultirespondentFormBodyDto) & {
formIdToDuplicate: string
}
>(
({ formIdToDuplicate, ...params }) =>
createStorageModeTemplateForm(formIdToDuplicate, params),
createStorageModeOrMultirespondentTemplateForm(formIdToDuplicate, params),
{
onSuccess: handleSuccess,
onError: handleError,
Expand All @@ -82,6 +85,6 @@ export const useUseTemplateMutations = () => {

return {
useEmailModeFormTemplateMutation,
useStorageModeFormTemplateMutation,
useStorageModeOrMultirespondentFormTemplateMutation,
}
}
2 changes: 1 addition & 1 deletion frontend/src/features/workspace/WorkspaceService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ export const dupeEmailModeForm = async (
).then(({ data }) => data)
}

export const dupeStorageModeForm = async (
export const dupeStorageModeOrMultirespondentForm = async (
formId: string,
body: DuplicateFormBodyDto,
): Promise<FormDto> => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,8 +77,9 @@ const useCreateFormWizardContext = (): CreateFormWizardContextReturn => {
responseMode === FormResponseMode.Encrypt ||
responseMode === FormResponseMode.Multirespondent
)
)
) {
return
}

return createStorageModeOrMultirespondentFormMutation.mutate({
title,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,21 +57,30 @@ export const useDupeFormWizardContext = (): CreateFormWizardContextReturn => {

const { handleSubmit } = formMethods

const { dupeEmailModeFormMutation, dupeStorageModeFormMutation } =
useDuplicateFormMutations()
const {
dupeEmailModeFormMutation,
dupeStorageModeOrMultirespondentFormMutation,
} = useDuplicateFormMutations()

const { activeWorkspace, isDefaultWorkspace } = useWorkspaceContext()

// do not mutate with workspaceId if it is 'All Forms' (default workspace)
// as the default workspace contains an empty string as workspaceId
const workspaceId = isDefaultWorkspace ? undefined : activeWorkspace._id

const handleCreateStorageModeForm = handleSubmit(
const handleCreateStorageModeOrMultirespondentForm = handleSubmit(
({ title, responseMode }) => {
if (responseMode !== FormResponseMode.Encrypt || !activeFormMeta?._id)
if (
!(
responseMode === FormResponseMode.Encrypt ||
responseMode === FormResponseMode.Multirespondent
) ||
!activeFormMeta?._id
) {
return
}

return dupeStorageModeFormMutation.mutate({
return dupeStorageModeOrMultirespondentFormMutation.mutate({
formIdToDuplicate: activeFormMeta._id,
title,
responseMode,
Expand Down Expand Up @@ -99,13 +108,13 @@ export const useDupeFormWizardContext = (): CreateFormWizardContextReturn => {
isFetching: isWorkspaceLoading || isPreviewFormLoading,
isLoading:
dupeEmailModeFormMutation.isLoading ||
dupeStorageModeFormMutation.isLoading,
dupeStorageModeOrMultirespondentFormMutation.isLoading,
keypair,
currentStep,
direction,
formMethods,
handleDetailsSubmit,
handleCreateStorageModeForm,
handleCreateStorageModeOrMultirespondentForm,
modalHeader: 'Duplicate form',
}
}
Expand Down
8 changes: 4 additions & 4 deletions frontend/src/features/workspace/mutations.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ import {
deleteAdminForm,
deleteWorkspace,
dupeEmailModeForm,
dupeStorageModeForm,
dupeStorageModeOrMultirespondentForm,
moveFormsToWorkspace,
removeFormsFromWorkspaces,
updateAdminFeedback,
Expand Down Expand Up @@ -108,13 +108,13 @@ export const useDuplicateFormMutations = () => {
},
)

const dupeStorageModeFormMutation = useMutation<
const dupeStorageModeOrMultirespondentFormMutation = useMutation<
FormDto,
ApiError,
DuplicateFormBodyDto & { formIdToDuplicate: string }
>(
({ formIdToDuplicate, ...params }) =>
dupeStorageModeForm(formIdToDuplicate, params),
dupeStorageModeOrMultirespondentForm(formIdToDuplicate, params),
{
onSuccess: handleSuccess,
onError: handleError,
Expand All @@ -123,7 +123,7 @@ export const useDuplicateFormMutations = () => {

return {
dupeEmailModeFormMutation,
dupeStorageModeFormMutation,
dupeStorageModeOrMultirespondentFormMutation,
}
}

Expand Down
2 changes: 1 addition & 1 deletion shared/types/form/form.ts
Original file line number Diff line number Diff line change
Expand Up @@ -316,7 +316,7 @@ export type DuplicateFormOverwriteDto = {
emails: string | string[]
}
| {
responseMode: FormResponseMode.Encrypt
responseMode: FormResponseMode.Encrypt | FormResponseMode.Multirespondent
publicKey: string
}
)
Expand Down
1 change: 1 addition & 0 deletions src/app/modules/form/admin-form/admin-form.utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -344,6 +344,7 @@ export const processDuplicateOverrideProps = (

switch (params.responseMode) {
case FormResponseMode.Encrypt:
case FormResponseMode.Multirespondent:
overrideProps.publicKey = params.publicKey
break
case FormResponseMode.Email:
Expand Down

0 comments on commit 2e23236

Please sign in to comment.