UNPKG

@baseplate-dev/react-generators

Version:

React Generators for Baseplate

56 lines 2.46 kB
import { tsCodeFragment, tsImportBuilder, tsTypeImportBuilder, } from '@baseplate-dev/core-generators'; import { pluralize } from 'inflection'; import { lowerCaseFirst } from '#src/utils/case.js'; import { mergeGraphQLFields } from '#src/writers/graphql/index.js'; import { convertExpressionToField } from './graphql.js'; export function createForeignDataDependency({ foreignModelName, modelName, reactApollo, labelExpression, valueExpression, }) { const fragmentName = `${modelName}${foreignModelName}Option`; const dataName = `${fragmentName}s`; const propName = lowerCaseFirst(dataName); const querySubcomponent = lowerCaseFirst(pluralize(foreignModelName)); const loaderValueName = `${lowerCaseFirst(dataName)}Data`; const loaderErrorName = `${lowerCaseFirst(dataName)}Error`; const dataDependency = { propName, propType: tsCodeFragment(`${fragmentName}Fragment[]`, tsTypeImportBuilder([`${fragmentName}Fragment`]).from(reactApollo.getGeneratedFilePath())), graphFragments: [ { name: fragmentName, type: foreignModelName, fields: mergeGraphQLFields([ convertExpressionToField(labelExpression), convertExpressionToField(valueExpression), ]), }, ], graphRoots: [ { type: 'query', name: `Get${dataName}`, fields: [ { type: 'simple', name: querySubcomponent, fields: [ { type: 'spread', on: fragmentName, }, ], }, ], }, ], loader: { loader: tsCodeFragment(`const { data: ${loaderValueName}, error: ${loaderErrorName} } = useQuery(Get${dataName}Document);`, [ tsImportBuilder([`useQuery`]).from('@apollo/client'), tsImportBuilder([`Get${dataName}Document`]).from(reactApollo.getGeneratedFilePath()), ]), loaderErrorName, loaderValueName, }, propLoaderValueGetter: (value) => `${value}.${querySubcomponent}`, }; return { dataDependency, propName }; } //# sourceMappingURL=foreign-data-dependency.js.map