Skip to content

Commit

Permalink
feat: try better async query
Browse files Browse the repository at this point in the history
  • Loading branch information
Pascal Klesse committed Sep 3, 2024
1 parent 5d62c53 commit 5c4cca9
Showing 1 changed file with 72 additions and 72 deletions.
144 changes: 72 additions & 72 deletions src/runtime/composables/gql-async-query.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,94 +31,94 @@ export async function gqlAsyncQuery<T = any>(method: string, options: IGraphQLOp
hashPasswords: options.hashPasswords ?? true,
};

const fields = config.fields as unknown as string[];
return useAsyncData(
method,
async () => {
const fields = config.fields as unknown as string[];

if (config.log) {
console.debug('gqlQuery::fields ', fields);
console.debug('gqlQuery::variables ', config.variables);
}
if (config.log) {
console.debug('gqlQuery::fields ', fields);
console.debug('gqlQuery::variables ', config.variables);
}

if (!_meta) {
throw new Error('GraphQLMeta is not available.');
}
if (!_meta) {
throw new Error('GraphQLMeta is not available.');
}

if (config.hashPasswords) {
config.variables = await hashPasswords(config.variables);
}
if (config.hashPasswords) {
config.variables = await hashPasswords(config.variables);
}

const argType = _meta.getArgs(method);
const builderInput = {};
const metaFields = _meta.getFields(method);
const availableFields = [];
const variables = _meta.parseVariables(config.variables, argType.fields, config.log);

if (!fields) {
for (const [key] of Object.entries(metaFields.fields)) {
if (Object.keys(metaFields.fields[key].fields).length) {
if (metaFields.fields[key].fields['id']) {
const subObject = {};
subObject[key] = ['id'];
availableFields.push(subObject);
} else {
const subObject = {};
const subFields = [];
for (const [subKey] of Object.entries(metaFields.fields[key].fields)) {
if (!Object.keys(metaFields.fields[key].fields[subKey].fields).length) {
subFields.push(subKey);
const argType = _meta.getArgs(method);
const builderInput = {};
const metaFields = _meta.getFields(method);
const availableFields = [];
const variables = _meta.parseVariables(config.variables, argType.fields, config.log);

if (!fields) {
for (const [key] of Object.entries(metaFields.fields)) {
if (Object.keys(metaFields.fields[key].fields).length) {
if (metaFields.fields[key].fields['id']) {
const subObject = {};
subObject[key] = ['id'];
availableFields.push(subObject);
} else {
const subObject = {};
const subFields = [];
for (const [subKey] of Object.entries(metaFields.fields[key].fields)) {
if (!Object.keys(metaFields.fields[key].fields[subKey].fields).length) {
subFields.push(subKey);
}
}
subObject[key] = subFields;
availableFields.push(subObject);
}
} else {
availableFields.push(key);
}
subObject[key] = subFields;
availableFields.push(subObject);
}
} else {
availableFields.push(key);
}
}
}

for (const [key, value] of Object.entries(argType.fields)) {
let type: string;
for (const [key, value] of Object.entries(argType.fields)) {
let type: string;

if (value.isList) {
type = value.isItemRequired ? `${value.type}!` : value.type;
} else {
type = value.isRequired ? `${value.type}!` : value.type;
}
if (value.isList) {
type = value.isItemRequired ? `${value.type}!` : value.type;
} else {
type = value.isRequired ? `${value.type}!` : value.type;
}

builderInput[key] = {
list: value.isList,
type,
value: variables[key],
};
}
builderInput[key] = {
list: value.isList,
type,
value: variables[key],
};
}

if (config.log) {
console.debug('gqlQuery::builderInput ', builderInput);
console.debug('gqlQuery::availableFields ', availableFields);
}
if (config.log) {
console.debug('gqlQuery::builderInput ', builderInput);
console.debug('gqlQuery::availableFields ', availableFields);
}

const queryBody = query({
fields: fields !== null ? fields : availableFields,
operation: method,
variables: builderInput,
});
const documentNode = gql(queryBody.query);

if (config.log) {
console.debug('gqlQuery::queryBody ', queryBody);
console.debug('gqlQuery::query ', queryBody.query);
console.debug('gqlQuery::documentNode ', documentNode);
}
const queryBody = query({
fields: fields !== null ? fields : availableFields,
operation: method,
variables: builderInput,
});
const documentNode = gql(queryBody.query);

if (config.log) {
console.debug('gqlQuery::queryBody ', queryBody);
console.debug('gqlQuery::query ', queryBody.query);
console.debug('gqlQuery::documentNode ', documentNode);
}

await callWithNuxt(_nuxtApp, checkTokenAndRenew);
await callWithNuxt(_nuxtApp, checkTokenAndRenew);

const requestHeaders = {
authorization: `Bearer ${accessTokenState.value}`,
};
const requestHeaders = {
authorization: `Bearer ${accessTokenState.value}`,
};

return useAsyncData(
method,
async () => {
return await $graphql.default.request(documentNode, variables, requestHeaders);
},
options.asyncDataOptions,
Expand Down

0 comments on commit 5c4cca9

Please sign in to comment.