Skip to content

Commit

Permalink
refactor(client-react-query): add independent axios function
Browse files Browse the repository at this point in the history
  • Loading branch information
anymaniax committed Nov 16, 2020
1 parent 35dc9a1 commit 30d8266
Show file tree
Hide file tree
Showing 16 changed files with 200 additions and 122 deletions.
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ typings/
.yarn-integrity

# dotenv environment variables file
.env
.env*

lib
.cache
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Generated by orval v3.1.8 馃嵑
* Generated by orval v3.1.9 馃嵑
* Do not edit manually.
* Swagger Petstore
* OpenAPI spec version: 1.0.0
Expand All @@ -18,7 +18,7 @@ rest.get('*/v:version/pets', (req, res, ctx) => {
return res(
ctx.delay(1000),
ctx.status(200, 'Mocked status'),
ctx.json([...Array(faker.random.number({min: 1, max: 10}))].map(() => ({id: (() => faker.random.number({ min: 1, max: 99999 }))(), name: (() => faker.name.lastName())(), tag: (() => faker.name.lastName())()}))),
ctx.json([...Array(faker.random.number({min: 1, max: 10}))].map(() => ({id: faker.random.number(), name: (() => faker.name.lastName())(), tag: (() => faker.name.lastName())()}))),
)
}),rest.post('*/v:version/pets', (req, res, ctx) => {
return res(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,61 +1,76 @@
/*
* Generated by orval v3.1.8 馃嵑
* Generated by orval v3.1.9 馃嵑
* Do not edit manually.
* Swagger Petstore
* OpenAPI spec version: 1.0.0
*/
import axios, { AxiosError, AxiosRequestConfig, AxiosResponse } from 'axios';
import axios, { AxiosRequestConfig, AxiosResponse, AxiosError, AxiosPromise } from 'axios';
import { useQuery, useMutation, QueryConfig, MutationConfig } from 'react-query';
import {
MutationConfig,
QueryConfig,
useMutation,
useQuery,
} from 'react-query';
import { CreatePetsBody, ListPetsParams, Pet, Pets } from '../model';
CreatePetsBody,
ListPetsParams,
Pet,
Pets,
} from '../model';

export const useListPets = (
params?: ListPetsParams,
version: number = 1,
queryConfig?: QueryConfig<AxiosResponse<Pets>, AxiosError>,
) => {
return useQuery<AxiosResponse<Pets>, AxiosError>(
[
export const listPets = (
params?: ListPetsParams,
version: number = 1,
): AxiosPromise<Pets> => {
type Mutator = (url: string, config?: object) => [string, object | undefined]

const mutator: Mutator = (url, config) => [url, { ...config, responseType: 'json' }]

return axios.get(...mutator(
`/v${version}/pets`,
{
params,
},
],
(path: string, options: Partial<AxiosRequestConfig>) =>
axios.get<Pets>(path, options),
{ enabled: version, ...queryConfig },
);
};
));
}


export const useListPets = (
params?: ListPetsParams,
version: number = 1,
queryConfig?: QueryConfig<AxiosResponse<Pets>, AxiosError>
) => {
return useQuery<AxiosResponse<Pets>, AxiosError>([`/v${version}/pets`, params], () => listPets(params,version), {enabled: version, ...queryConfig} )
}
export const createPets = (
createPetsBody: CreatePetsBody,
version: number = 1,
): AxiosPromise<unknown> => {
return axios.post(
`/v${version}/pets`,
createPetsBody,
);
}


export const useCreatePets = (
mutationConfig?: MutationConfig<
AxiosResponse<unknown>,
AxiosError,
{ version?: number; data: CreatePetsBody }
>,
) => {
return useMutation<
AxiosResponse<unknown>,
AxiosError,
{ version?: number; data: CreatePetsBody }
>((props) => {
const { version = 1, data } = props || {};

return axios.post(`/v${version}/pets`, data);
}, mutationConfig);
};
mutationConfig?: MutationConfig<AxiosResponse<unknown>, AxiosError, {data: CreatePetsBody;version?: number}>
) => {
return useMutation<AxiosResponse<unknown>, AxiosError, {data: CreatePetsBody;version?: number}>((props) => {
const {data,version} = props || {};

return createPets(data,version)
}, mutationConfig)
}
export const showPetById = (
petId: string,
version: number = 1,
): AxiosPromise<Pet> => {
return axios.get(
`/v${version}/pets/${petId}`,
);
}


export const useShowPetById = (
petId: string,
version: number = 1,
queryConfig?: QueryConfig<AxiosResponse<Pet>, AxiosError>,
) => {
return useQuery<AxiosResponse<Pet>, AxiosError>(
[`/v${version}/pets/${petId}`],
(path: string, options: Partial<AxiosRequestConfig>) =>
axios.get<Pet>(path, options),
{ enabled: version && petId, ...queryConfig },
);
};
petId: string,
version: number = 1,
queryConfig?: QueryConfig<AxiosResponse<Pet>, AxiosError>
) => {
return useQuery<AxiosResponse<Pet>, AxiosError>([`/v${version}/pets/${petId}`], () => showPetById(petId,version), {enabled: version && petId, ...queryConfig} )
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Generated by orval v3.1.8 馃嵑
* Generated by orval v3.1.9 馃嵑
* Do not edit manually.
* Swagger Petstore
* OpenAPI spec version: 1.0.0
Expand Down
2 changes: 1 addition & 1 deletion samples/react-app-with-react-query/src/api/model/error.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Generated by orval v3.1.8 馃嵑
* Generated by orval v3.1.9 馃嵑
* Do not edit manually.
* Swagger Petstore
* OpenAPI spec version: 1.0.0
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Generated by orval v3.1.8 馃嵑
* Generated by orval v3.1.9 馃嵑
* Do not edit manually.
* Swagger Petstore
* OpenAPI spec version: 1.0.0
Expand Down
2 changes: 1 addition & 1 deletion samples/react-app-with-react-query/src/api/model/pet.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Generated by orval v3.1.8 馃嵑
* Generated by orval v3.1.9 馃嵑
* Do not edit manually.
* Swagger Petstore
* OpenAPI spec version: 1.0.0
Expand Down
2 changes: 1 addition & 1 deletion samples/react-app-with-react-query/src/api/model/pets.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Generated by orval v3.1.8 馃嵑
* Generated by orval v3.1.9 馃嵑
* Do not edit manually.
* Swagger Petstore
* OpenAPI spec version: 1.0.0
Expand Down
8 changes: 5 additions & 3 deletions src/core/generators/angular.mock.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { GeneratorOptions, GeneratorVerbOptions } from '../../types/generator';
import { toObjectString } from '../../utils/string';
import { getMockDefinition, getMockOptionsDataOverride } from './mocks';

const toDelayMock = (value: unknown, definition: string) =>
Expand All @@ -18,9 +19,10 @@ export const generateAngularMock = (

const mockData = getMockOptionsDataOverride(operationId, override);

return ` ${definitionName}(${props.definition}): Observable<${
response.definition
}> {
return ` ${definitionName}(${toObjectString(
props,
'definition',
)}): Observable<${response.definition}> {
return ${
mockData
? toDelayMock(mockData, response.definition)
Expand Down
15 changes: 11 additions & 4 deletions src/core/generators/angular.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import {
GeneratorVerbOptions,
} from '../../types/generator';
import { pascal } from '../../utils/case';
import { toObjectString } from '../../utils/string';
import { generateFormData } from './formData';
import { generateOptions } from './options';

Expand Down Expand Up @@ -77,7 +78,10 @@ const generateDefinition = ({
value += `\n // ${summary}`;
}

value += `\n abstract ${definitionName}(\n ${props.definition}\n ): Observable<${response.definition}>;`;
value += `\n abstract ${definitionName}(\n ${toObjectString(
props,
'definition',
)}\n ): Observable<${response.definition}>;`;

return value;
};
Expand All @@ -102,9 +106,12 @@ const generateImplementation = (
verb,
});

return ` ${definitionName}(\n ${props.implementation}\n ): Observable<${
response.definition
}> {${mutator}${generateFormData(body)}
return ` ${definitionName}(\n ${toObjectString(
props,
'implementation',
)}\n ): Observable<${response.definition}> {${mutator}${generateFormData(
body,
)}
return this.http.${verb}<${response.definition}>(${
mutator ? `...mutator(${options})` : options
});
Expand Down
8 changes: 5 additions & 3 deletions src/core/generators/axios.mock.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { GeneratorOptions, GeneratorVerbOptions } from '../../types/generator';
import { toObjectString } from '../../utils/string';
import { getMockDefinition, getMockOptionsDataOverride } from './mocks';

const toAxiosPromiseMock = (value: unknown, definition: string) =>
Expand All @@ -18,9 +19,10 @@ export const generateAxiosMock = (

const mockData = getMockOptionsDataOverride(operationId, override);

return ` ${definitionName}(${props.definition}): AxiosPromise<${
response.definition
}> {
return ` ${definitionName}(${toObjectString(
props,
'definition',
)}): AxiosPromise<${response.definition}> {
return ${
mockData
? toAxiosPromiseMock(mockData, response.definition)
Expand Down
14 changes: 9 additions & 5 deletions src/core/generators/axios.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import {
GeneratorVerbOptions,
} from '../../types/generator';
import { pascal } from '../../utils/case';
import { sanitize } from '../../utils/string';
import { sanitize, toObjectString } from '../../utils/string';
import { generateFormData } from './formData';
import { generateOptions } from './options';

Expand All @@ -26,7 +26,10 @@ const generateAxiosDefinition = ({
value += `\n // ${summary}`;
}

value += `\n ${definitionName}(\n ${props.definition}\n ): AxiosPromise<${response.definition}>;`;
value += `\n ${definitionName}(\n ${toObjectString(
props,
'definition',
)}\n ): AxiosPromise<${response.definition}>;`;

return value;
};
Expand All @@ -51,9 +54,10 @@ const generateAxiosImplementation = (
verb,
});

return ` ${definitionName}(\n ${
props.implementation
}\n ): AxiosPromise<${response.definition}> {${mutator}${generateFormData(
return ` ${definitionName}(\n ${toObjectString(
props,
'implementation',
)}\n ): AxiosPromise<${response.definition}> {${mutator}${generateFormData(
body,
)}
return axios.${verb}(${mutator ? `...mutator(${options})` : options});
Expand Down

0 comments on commit 30d8266

Please sign in to comment.