add query method

This commit is contained in:
Владислав Чикалкин 2020-11-10 15:58:55 +03:00
parent c6c31d1f3e
commit 47e1dcf4cd
2 changed files with 91 additions and 3 deletions

View File

@ -3,7 +3,10 @@ import { API_HOSTNAME } from 'client/common/constants';
import { CRM_GRAPHQL_PROXY_URL, CRM_GRAPHQL_URL } from 'core/constants/urls';
import { convertEntityToOption } from 'core/tools/entities';
import { convertJSONToGQLQuery } from 'core/tools/query';
import { IGetEntitiesRequest } from 'core/types/Calculation/Requests';
import {
IGetEntitiesRequest,
IRequestToCRMGQL,
} from 'core/types/Calculation/Requests';
import { IGetEntitiesResponse } from 'core/types/Calculation/Responses';
import { IBaseOption } from 'core/types/Calculation/Store/options';
import { TCRMEntity } from 'core/types/Entities/crmEntities';
@ -37,10 +40,81 @@ const client = new ApolloClient({
});
class CalculationService {
static crmgqlquery = ({
query,
toOptions,
variables,
}: IRequestToCRMGQL): Promise<IGetEntitiesResponse> =>
new Promise(async (resolve, reject) => {
await client
.query({
query,
variables,
})
.then(res => {
if (!res.data || res.errors) {
throw res.error || res.errors;
}
let resEntities: TEntities<TCRMEntity | TCRMEntity[]> = res.data;
Object.keys(resEntities).forEach(targetName => {
//@ts-ignore
const targetEnt: TCRMEntity | TCRMEntity[] =
//@ts-ignore
resEntities[targetName];
if (toOptions)
if (toOptions.includes(targetName)) {
if (Array.isArray(targetEnt)) {
let optionatedEntities: (TCRMEntity & IBaseOption)[] = [];
for (let entity of targetEnt) {
const entityOption = convertEntityToOption(
entity,
entity.__typename,
);
if (entityOption) {
optionatedEntities.push(entityOption);
}
}
//@ts-ignore
resEntities[
//@ts-ignore
!CRMEntityAliases.includes(targetName) &&
isPlural(targetName)
? singular(targetName)
: targetName
] = optionatedEntities;
} else {
const entityOption = convertEntityToOption(
targetEnt,
targetEnt.__typename,
);
//@ts-ignore
resEntities[
//@ts-ignore
!CRMEntityAliases.includes(targetName) &&
isPlural(targetName)
? singular(targetName)
: targetName
] = entityOption;
}
}
});
resolve({ entities: resEntities });
})
.catch(err => {
throw err;
});
});
/**
* @deprecated
*/
static getEntities = ({
queries,
}: IGetEntitiesRequest): Promise<IGetEntitiesResponse> =>
new Promise((resolve, reject) => {
new Promise(async (resolve, reject) => {
// remove queries with invalid where
queries = queries.filter(query => {
return Object.values(query.where).some(
@ -49,13 +123,17 @@ class CalculationService {
});
const convertedQuery = convertJSONToGQLQuery(queries);
client
await client
.query({
query: gql`
${convertedQuery}
`,
})
.then(res => {
if (!res.data || res.errors || res.error) {
throw res.error || res.errors;
}
const toOptions = queries
.filter(x => x.toOption)
.map(x => x.alias || x.entityName);

View File

@ -1,3 +1,7 @@
import {
CRMEntityAliasesUnion,
CRMEntityNames,
} from 'core/types/Entities/crmEntityNames';
import { TEntityQuery } from '../Entities/query';
import { ValuesTables } from './Store/tables';
import { TValue, TValues } from './Store/values';
@ -6,6 +10,12 @@ export interface IGetEntitiesRequest {
queries: TEntityQuery[];
}
export interface IRequestToCRMGQL {
query: any;
toOptions?: (CRMEntityNames | CRMEntityAliasesUnion)[];
variables: { [prop: string]: any };
}
export interface IGetCalculationRequest {
values: TValues<TValue>;
tables: ValuesTables;