This one goes out to @AJS on Sitecore slack who asked how they could implement the query string provider in Sitecore Forms (headless/JSS).
Firstly, make sure you add the QueryStringProvider from Sitecore Forms Extensions, as well adding the required Sitecore item(s) to your instance.
Once that's done see the Sitecore documentation on adding a React/Next.JS form to your headless app.
Finally you're ready to implement a custom field factory (see my previous post) with a custom hidden element, setting the value based on the value from the query string:
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import { useRouter } from 'next/router'; | |
import { | |
FieldViewModel, | |
InputViewModel | |
} from '@sitecore-jss/sitecore-jss-forms'; | |
import { | |
createDefaultFieldFactory, | |
ValueFieldProps | |
} from '@sitecore-jss/sitecore-jss-react-forms'; | |
export interface ValueProviderViewModel extends FieldViewModel { | |
valueProviderSettings: { | |
valueProviderItemId: string; | |
parameters: string; | |
}; | |
} | |
export interface ValueProviderInputViewModel extends InputViewModel, ValueProviderViewModel {} | |
const CustomFieldFactory = createDefaultFieldFactory(); | |
// GUID for Hidden field - /sitecore/system/Settings/Forms/Field Types/Basic/Hidden | |
CustomFieldFactory.setComponent('{B67C70C1-6776-4BCB-8529-AA28E02F6412}', ({ field }: ValueFieldProps<ValueProviderInputViewModel>) => { | |
const router = useRouter(); | |
// GUID is for Query String Value Provider | |
// https://github.com/bartverdonck/Sitecore-Forms-Extensions/blob/master/src/Feature/FormsExtensions/items/ValueProviders/Value%20Providers/URL%20Parameter%20-%20Query%20String.yml | |
if(field.model.valueProviderSettings.valueProviderItemId == '{ACF6ABAD-6B2C-4294-808B-02FED11552A2}') | |
field.model.value = router.query[field.model.valueProviderSettings.parameters] as string; | |
return ( | |
<input type="hidden" id={field.valueField.id} name={field.valueField.name} value={field.model.value as string} /> | |
); | |
}); |
Enjoy!
No comments:
Post a Comment