UNPKG

@graphql-codegen/typescript-react-offix

Version:

GraphQL Code Generator plugin for generating useOffline mutations for offix use

73 lines (72 loc) 3.83 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ReactApolloVisitor = void 0; const tslib_1 = require("tslib"); const visitor_plugin_common_1 = require("@graphql-codegen/visitor-plugin-common"); const auto_bind_1 = tslib_1.__importDefault(require("auto-bind")); const change_case_all_1 = require("change-case-all"); class ReactApolloVisitor extends visitor_plugin_common_1.ClientSideBaseVisitor { constructor(schema, fragments, rawConfig, documents) { super(schema, fragments, rawConfig, {}); this.imports = new Set(); this._externalImportPrefix = this.config.importOperationTypesFrom ? `${this.config.importOperationTypesFrom}.` : ''; this._documents = documents; (0, auto_bind_1.default)(this); } getOffixReactHooksImport() { return `import * as OffixReactHooks from "react-offix-hooks";`; } getDocumentNodeVariable(node, documentVariableName) { return this.config.documentMode === visitor_plugin_common_1.DocumentMode.external ? `Operations.${node.name.value}` : documentVariableName; } getImports() { const baseImports = super.getImports({ excludeFragments: true }); const hasOperations = this._collectedOperations.length > 0; if (!hasOperations) { return baseImports; } return [...baseImports, ...Array.from(this.imports)]; } _buildHooks(node, operationType, documentVariableName, operationResultType, operationVariablesTypes) { var _a, _b; const operationName = this.convertName((_b = (_a = node.name) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : '', { useTypesPrefix: false, }); this.imports.add(this.getOffixReactHooksImport()); const hookFns = []; if (operationType === 'Mutation') { hookFns.push(`export function useOffline${operationName}(baseOptions?: OffixReactHooks.${operationType}HookOptions<${operationResultType}, ${operationVariablesTypes}>) { return OffixReactHooks.useOfflineMutation<${operationResultType}, ${operationVariablesTypes}>(${this.getDocumentNodeVariable(node, documentVariableName)}, baseOptions); }`); } return [...hookFns].join('\n'); } buildOperation(node, documentVariableName, operationType, operationResultType, operationVariablesTypes) { operationResultType = this._externalImportPrefix + operationResultType; operationVariablesTypes = this._externalImportPrefix + operationVariablesTypes; const hooks = this._buildHooks(node, operationType, documentVariableName, operationResultType, operationVariablesTypes); return [hooks].filter(a => a).join('\n'); } OperationDefinition(node) { if (!node.name || !node.name.value) { return null; } this._collectedOperations.push(node); const documentVariableName = this.convertName(node, { suffix: this.config.documentVariableSuffix, prefix: this.config.documentVariablePrefix, useTypesPrefix: false, }); const operationType = (0, change_case_all_1.pascalCase)(node.operation); const operationTypeSuffix = this.getOperationSuffix(node, operationType); const operationResultType = this.convertName(node, { suffix: operationTypeSuffix + this._parsedConfig.operationResultSuffix, }); const operationVariablesTypes = this.convertName(node, { suffix: operationTypeSuffix + 'Variables', }); const additional = this.buildOperation(node, documentVariableName, operationType, operationResultType, operationVariablesTypes); return [additional].filter(a => a).join('\n'); } } exports.ReactApolloVisitor = ReactApolloVisitor;