Skip to content

Commit

Permalink
ON-33232 # Fixed freshdesk dependant field options never loading
Browse files Browse the repository at this point in the history
  • Loading branch information
mymattcarroll committed Jul 14, 2023
1 parent 47910d0 commit 7bd634f
Show file tree
Hide file tree
Showing 3 changed files with 66 additions and 4 deletions.
47 changes: 45 additions & 2 deletions src/form-elements/FormElementFreshdeskDependentField.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,12 @@ import FormElementForm, { Props } from './FormElementForm'
import generateFreshdeskDependentFieldElements, {
getNestedOptions,
} from '../services/generateFreshdeskDependentFieldElements'
import { UpdateFormElementsHandler } from '../typedoc'
import { typeCastService } from '@oneblink/sdk-core'

function FormElementFreshdeskDependentField({
element,
onUpdateFormElements,
...props
}: Omit<Props, 'element'> & {
element: FormTypes.FreshdeskDependentFieldElement
Expand All @@ -16,7 +19,7 @@ function FormElementFreshdeskDependentField({
[element],
)

const formElement = React.useMemo<FormTypes.FormFormElement>(() => {
const formFormElement = React.useMemo<FormTypes.FormFormElement>(() => {
const [categoryElement, subcategoryElement, itemElement] = freshdeskElements
const elements = [categoryElement]
const value = props.value as
Expand Down Expand Up @@ -49,7 +52,47 @@ function FormElementFreshdeskDependentField({
}
}, [element, props.value, freshdeskElements])

return <FormElementForm element={formElement} {...props} />
const handleUpdateNestedFormElements =
React.useCallback<UpdateFormElementsHandler>(
(setter) => {
const [newFormFormElement] = setter([formFormElement])
if (
newFormFormElement.type !== 'form' ||
!Array.isArray(newFormFormElement.elements) ||
!newFormFormElement.elements[0]
) {
return
}
const categoryElementWithOptions =
typeCastService.formElements.toOptionsElement(
newFormFormElement.elements[0],
)
if (!categoryElementWithOptions?.options) {
return
}

onUpdateFormElements((formElements) => {
return formElements.map((formElement) => {
if (formElement.id === element.id) {
return {
...formElement,
options: categoryElementWithOptions.options,
}
}
return formElement
})
})
},
[element.id, formFormElement, onUpdateFormElements],
)

return (
<FormElementForm
element={formFormElement}
onUpdateFormElements={handleUpdateNestedFormElements}
{...props}
/>
)
}

export default React.memo(FormElementFreshdeskDependentField)
21 changes: 19 additions & 2 deletions src/hooks/useDynamicOptionsLoaderState.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,25 @@ export function FormElementOptionsContextProvider({

const [freshdeskFieldsState] = useLoadDataState(loadFreshdeskFields)

const hasOptionsSets = React.useMemo<boolean>(() => {
return !!formElementsService.findFormElement(
form.elements,
(formElement) => {
const formElementWithOptions =
typeCastService.formElements.toOptionsElement(formElement)
return (
formElementWithOptions?.optionsType === 'DYNAMIC' &&
!!formElementWithOptions.dynamicOptionSetId
)
},
)
}, [form.elements])

const loadFormElementOptionsSets = React.useCallback(
async (abortSignal) => {
async (abortSignal): Promise<OptionsSetResult[]> => {
if (!hasOptionsSets) {
return []
}
const formElementOptionsSets =
await formService.getFormElementOptionsSets(
form.organisationId,
Expand All @@ -69,7 +86,7 @@ export function FormElementOptionsContextProvider({
}),
)
},
[form.organisationId],
[form.organisationId, hasOptionsSets],
)

const [optionsSetResultsState, , setOptionsSetResults] = useLoadDataState(
Expand Down
2 changes: 2 additions & 0 deletions src/services/generateFreshdeskDependentFieldElements.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,8 @@ export default function generateFreshdeskDependentFieldElements(
hint: element.hint,
defaultValue: element.defaultValue?.category,
options: element.options,
freshdeskFieldName: element.freshdeskFieldName,
optionsType: 'FRESHDESK_FIELD',
}
const formElements = [categoryElement]

Expand Down

0 comments on commit 7bd634f

Please sign in to comment.