Research
Security News
Malicious PyPI Package ‘pycord-self’ Targets Discord Developers with Token Theft and Backdoor Exploit
Socket researchers uncover the risks of a malicious Python package targeting Discord developers.
apollo-forms
Advanced tools
import gql from 'graphql-tag';
const fragment = gql`
fragment client on ClientData {
name
age
}
`;
import gql from 'graphql-tag';
const inputQuery = gql`
${fragment}
{
sampleForm @client {
...client
}
}
`;
Error queries are namespaced like so: {FORM_NAME}Errors
import gql from 'graphql-tag';
const errorsQuery = gql`
${fragment}
{
sampleFormErrors @client {
...client
}
}
`;
import { combineValidators, composeValidators } from 'revalidate';
const validator = combineValidators({
name: composeValidators(isRequired, isAlphabetic)('Name'),
age: composeValidators(isRequired, isNumeric)('Age'),
});
const initialData = {
name: null,
age: null,
}
const sampleMutation = gql`
mutation($inputData: PersonInput) {
createSample(inputData: $inputData)
}
`;
import { createForm, FormSchema, FormProvider } from 'apollo-forms';
const Form = createForm({ mutation: sampleMutation, inputQuery, errorsQuery })(FormProvider);
export default function Root() {
return (
<Form
initialData={initialData}
formName="sampleForm"
>
</Form>
);
}
import { withInput } from 'apollo-forms';
const Input = withInput('input');
export default function Root() {
return (
<Form
formName="sampleForm"
>
<Input
field="name"
/>
<Input
type="number"
field="age"
/>
</Form>
);
}
export default function Root() {
return (
<FormProvider
formName="sampleForm"
>
<Input
field="name"
/>
<Input
type="number"
field="age"
/>
<button type="submit">Submit</button>
</FormProvider>
);
}
As long as a FormProvider
gets initialData
the form will hydrate the appropriate fields in the form.
There are some utils provided that may help you hydrate your Form:
import { createHydrateProvider } from 'apollo-forms';
const query = gql`
{
query sample {
sampleForm {
name
age
}
}
}
`;
const HydrateProvider = createHydrateProvider({
query,
queryKey: 'sampleForm',
});
export default function Root() {
return (
<HydrateProvider>
{(data) => {
return (
<Form
initialData={data}
formName="sampleForm"
>
<Input field="name" />
<Input type="number" field="age" />
<SubmitControls />
</Form>
);
}}
</HydrateProvider>
);
}
import { withHandlers } from 'recompose';
function Root({ renderForm }) {
return (
<HydrateProvider>
{renderForm}
</HydrateProvider>
);
}
export default withHandlers({
renderForm: () => {
return (data) => {
return (
<Form
initialData={data}
formName="sampleForm"
>
<Input field="name" />
<Input type="number" field="age" />
<SubmitControls />
</Form>
);
}
}
})(Root);
Under the hood, apollo-forms
creates a ApolloClient
instance with apollo-linked-state
. The form gets its own
state graph to work with keyed off formName
. When onChange
is called from the Input
components, both internal react state is updated as well as the local ApolloClient
cache.
Validation through the revalidate
library is run when the inputs have values and validation messages are passed as props to the base component.
onSubmit
, the FormProvider
component takes the form state and passes it to the supplied mutation
in the form. By default the variables are formatted like this: { inputData: FORM_STATE }
. To customize your mutation arguments, pass a transform
to the FormProvider to return the form state however you wish.
FAQs
Form Bindings with Apollo
We found that apollo-forms demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket researchers uncover the risks of a malicious Python package targeting Discord developers.
Security News
The UK is proposing a bold ban on ransomware payments by public entities to disrupt cybercrime, protect critical services, and lead global cybersecurity efforts.
Security News
Snyk's use of malicious npm packages for research raises ethical concerns, highlighting risks in public deployment, data exfiltration, and unauthorized testing.