Skip to content

Commit

Permalink
feat(crud): change action names and add option for generating collection
Browse files Browse the repository at this point in the history
  • Loading branch information
patryk-zielinski93 committed Jul 15, 2019
1 parent afb9ece commit f1b9a7b
Show file tree
Hide file tree
Showing 9 changed files with 175 additions and 144 deletions.
6 changes: 6 additions & 0 deletions src/collection/crud/crud-schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,12 @@
"type": "string",
"description": "Add map operator to response pipe.",
"x-prompt": "What is response object path to map?"
},
"collection": {
"type": "boolean",
"default": false,
"description": "Generate collection fetching in READ operation.",
"x-prompt": "Shall generate actions for fetching collection of entities?"
}
}
}
3 changes: 3 additions & 0 deletions src/collection/crud/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ import { crudReducer } from './rules/crud-reducer.rule';
export interface CrudOptions {
actionPrefix: string;
actionsNamespace: string;
collection: boolean;
dataService: {
names: Names;
path: string;
Expand Down Expand Up @@ -75,6 +76,7 @@ export interface CrudOptions {
};
}

// tslint:disable-next-line:cognitive-complexity
export function parseOptions(host: Tree, options: CrudSchema): CrudOptions {
const {
stateDir,
Expand Down Expand Up @@ -137,6 +139,7 @@ export function parseOptions(host: Tree, options: CrudSchema): CrudOptions {

return {
actionsNamespace: findNamespaceName(host, parsedStateDir.actions),
collection: options.collection || false,
effects: {
name: findClassNameInFile(host, parsedStateDir.effects)
},
Expand Down
48 changes: 25 additions & 23 deletions src/collection/crud/rules/crud-actions.rule.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,29 +35,31 @@ function createActionRules(options: CrudOptions): Rule[] {
})
);

rules.push(
action({
payload: '',
name: `Get${entity.name}s`,
prefix: actionPrefix,
stateDir: statePath,
skipFormat: true
}),
action({
payload: 'HttpErrorResponse',
name: `Get${entity.name}sFail`,
prefix: actionPrefix,
stateDir: statePath,
skipFormat: true
}),
action({
payload: `${entity.name}[]`,
name: `Get${entity.name}sSuccess`,
prefix: actionPrefix,
stateDir: statePath,
skipFormat: true
})
);
if (options.collection) {
rules.push(
action({
payload: '',
name: `Get${entity.name}Collection`,
prefix: actionPrefix,
stateDir: statePath,
skipFormat: true
}),
action({
payload: 'HttpErrorResponse',
name: `Get${entity.name}CollectionFail`,
prefix: actionPrefix,
stateDir: statePath,
skipFormat: true
}),
action({
payload: `${entity.name}[]`,
name: `Get${entity.name}CollectionSuccess`,
prefix: actionPrefix,
stateDir: statePath,
skipFormat: true
})
);
}
}

if (toGenerate.create) {
Expand Down
44 changes: 23 additions & 21 deletions src/collection/crud/rules/crud-data-service-methods.rule.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,29 +36,31 @@ function createDataServiceMethodRules(options: CrudOptions): Rule[] {
})
);

const collectionResponseType = response.read.type.split('>');
for (let i = collectionResponseType.length - 1; i >= 0; i--) {
if (collectionResponseType[i] !== '') {
collectionResponseType[i] += '[]';
break;
if (options.collection) {
const collectionResponseType = response.read.type.split('>');
for (let i = collectionResponseType.length - 1; i >= 0; i--) {
if (collectionResponseType[i] !== '') {
collectionResponseType[i] += '[]';
break;
}
}
}

rules.push(
backend === DataServiceBackend.Http
? dataServiceHttpMethod({
...baseConfig,
collection: true,
operation: CrudOperation.Read,
httpResponse: collectionResponseType.join('>'),
responseMap: response.read.map
})
: dataServiceLocalStorageMethod({
...baseConfig,
collection: true,
operation: CrudOperation.Read
})
);
rules.push(
backend === DataServiceBackend.Http
? dataServiceHttpMethod({
...baseConfig,
collection: true,
operation: CrudOperation.Read,
httpResponse: collectionResponseType.join('>'),
responseMap: response.read.map
})
: dataServiceLocalStorageMethod({
...baseConfig,
collection: true,
operation: CrudOperation.Read
})
);
}
}

if (toGenerate.create) {
Expand Down
33 changes: 18 additions & 15 deletions src/collection/crud/rules/crud-effects.rule.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import { insertCustomImport, insertTypeImport } from '../../../utils/import.util
import { names } from '../../../utils/name.utils';
import { findByIdentifier, findClassBodyInFile } from '../../../utils/ts.utils';
import { config } from '../../config';
import { CrudOperation } from '../../data-service/data-service-schema';
import { CrudOptions } from '../index';

function getEffectSpecTemplate(
Expand Down Expand Up @@ -161,13 +160,15 @@ function createEffectsSpec(host: Tree, options: CrudOptions): Change[] {
)
);

changes.push(
new InsertChange(
effectsFilePath,
describeFnSecondArgument.getEnd() - 1,
getEffectSpecTemplate(options, `Get${entity.name}s`, false)
)
);
if (options.collection) {
changes.push(
new InsertChange(
effectsFilePath,
describeFnSecondArgument.getEnd() - 1,
getEffectSpecTemplate(options, `Get${entity.name}Collection`, false)
)
);
}
}

if (toGenerate.create) {
Expand Down Expand Up @@ -218,13 +219,15 @@ function createEffects(host: Tree, options: CrudOptions): Change[] {
)
);

changes.push(
new InsertChange(
effectsFilePath,
classBody.getStart(),
getEffectFetchTemplate(options, `Get${entity.name}s`, false)
)
);
if (options.collection) {
changes.push(
new InsertChange(
effectsFilePath,
classBody.getStart(),
getEffectFetchTemplate(options, `Get${entity.name}Collection`, false)
)
);
}
}

if (toGenerate.create) {
Expand Down
52 changes: 27 additions & 25 deletions src/collection/crud/rules/crud-facade-spec.rule.ts
Original file line number Diff line number Diff line change
Expand Up @@ -111,32 +111,34 @@ function createCrudFacadeSpec(host: Tree, options: CrudOptions): Change[] {
)
);

changes.push(
new InsertChange(
stateDir.facadeSpec,
pos,
getTestTemplate(
options,
response.read.map,
`get${entity.name}s`,
[
{
name: `${getEntityName}s`,
expectedValue: 'response'
},
{
name: `${getEntityName}sLoading`,
expectedValue: 'false'
},
{
name: `${getEntityName}sLoadError`,
expectedValue: 'null'
}
],
false
if (options.collection) {
changes.push(
new InsertChange(
stateDir.facadeSpec,
pos,
getTestTemplate(
options,
response.read.map,
`get${entity.name}Collection`,
[
{
name: `${getEntityName}Collection`,
expectedValue: 'response'
},
{
name: `${getEntityName}CollectionLoading`,
expectedValue: 'false'
},
{
name: `${getEntityName}CollectionLoadError`,
expectedValue: 'null'
}
],
false
)
)
)
);
);
}
}

if (toGenerate.create) {
Expand Down
53 changes: 29 additions & 24 deletions src/collection/crud/rules/crud-facade.rule.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,23 +33,25 @@ function createFacade(host: Tree, options: CrudOptions): Change[] {
const facadeClassBody = findClassBodyInFile(host, stateDir.facade);

if (toGenerate.read) {
selectorChanges.push(
new InsertChange(
stateDir.facade,
facadeClassBody.getStart(),
getSelectorTemplate(`${entityPropertyName}s`, facade.queryName)
),
new InsertChange(
stateDir.facade,
facadeClassBody.getStart(),
getSelectorTemplate(`${entityPropertyName}sLoading`, facade.queryName)
),
new InsertChange(
stateDir.facade,
facadeClassBody.getStart(),
getSelectorTemplate(`${entityPropertyName}sLoadError`, facade.queryName)
)
);
if (options.collection) {
selectorChanges.push(
new InsertChange(
stateDir.facade,
facadeClassBody.getStart(),
getSelectorTemplate(`${entityPropertyName}Collection`, facade.queryName)
),
new InsertChange(
stateDir.facade,
facadeClassBody.getStart(),
getSelectorTemplate(`${entityPropertyName}CollectionLoading`, facade.queryName)
),
new InsertChange(
stateDir.facade,
facadeClassBody.getStart(),
getSelectorTemplate(`${entityPropertyName}CollectionLoadError`, facade.queryName)
)
);
}

selectorChanges.push(
new InsertChange(
Expand Down Expand Up @@ -80,13 +82,16 @@ function createFacade(host: Tree, options: CrudOptions): Change[] {
)
)
);
methodsChanges.push(
new InsertChange(
stateDir.facade,
facadeClassBody.getEnd(),
getMethodTemplate(actionsNamespace, `Get${entity.name}s`)
)
);

if (options.collection) {
methodsChanges.push(
new InsertChange(
stateDir.facade,
facadeClassBody.getEnd(),
getMethodTemplate(actionsNamespace, `Get${entity.name}Collection`)
)
);
}
}

if (toGenerate.create) {
Expand Down
Loading

0 comments on commit f1b9a7b

Please sign in to comment.