From 8c85ee5c529c608ca074ad711c11ee1ed1168323 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 8 Dec 2020 16:58:32 +0300 Subject: [PATCH 01/10] Added Entity-Action-Extensions document --- .../UI/AspNetCore/Entity-Action-Extensions.md | 108 ++++++++++++++++++ .../images/user-action-extension-click-me.png | Bin 0 -> 71534 bytes .../user-action-extension-on-solution.png | Bin 0 -> 29911 bytes 3 files changed, 108 insertions(+) create mode 100644 docs/en/UI/AspNetCore/Entity-Action-Extensions.md create mode 100644 docs/en/images/user-action-extension-click-me.png create mode 100644 docs/en/images/user-action-extension-on-solution.png diff --git a/docs/en/UI/AspNetCore/Entity-Action-Extensions.md b/docs/en/UI/AspNetCore/Entity-Action-Extensions.md new file mode 100644 index 0000000000..f6e865375d --- /dev/null +++ b/docs/en/UI/AspNetCore/Entity-Action-Extensions.md @@ -0,0 +1,108 @@ +# Entity Action Extensions for ASP.NET Core UI + +## Introduction + +Entity action extension system allows you to add a **new action** to the action menu for an entity. A **Click Me** action was added to the *User Management* page below: + +![user-action-extension-click-me](../../images/user-action-extension-click-me.png) + +You can take any action (open a modal, make an HTTP API call, redirect to another page... etc) by writing your custom code. You can access to the current entity in your code. + +## How to Set Up + +In this example, we will add a "Click Me!" action and execute a JavaScript code for the user management page of the [Identity Module](../../Modules/Identity.md). + +### Create a JavaScript File + +First, add a new JavaScript file to your solution. We added inside the `/Pages/Identity/Users` folder of the `.Web` project: + +![user-action-extension-on-solution](../../images/user-action-extension-on-solution.png) + +Here, the content of this JavaScript file: + +```js +var clickMeAction = { + text: 'Click Me!', + action: function(data) { + //TODO: Write your custom code + alert(data.record.userName); + } +}; + +abp.ui.extensions.entityActions + .get('identity.user') + .addContributor(function(actionList) { + actionList.addTail(clickMeAction); + }); +``` + +In the `action` function, you can do anything you need. See the API section for a detailed usage. + +### Add the File to the User Management Page + +Then you need to add this JavaScript file to the user management page. You can take the power of the [Bundling & Minification System](Bundling-Minification.md). + +Write the following code inside the `ConfigureServices` of your module class: + +```csharp +Configure(options => +{ + options.ScriptBundles.Configure( + typeof(Volo.Abp.Identity.Web.Pages.Identity.Users.IndexModel).FullName, + bundleConfiguration => + { + bundleConfiguration.AddFiles( + "/Pages/Identity/Users/my-user-extensions.js" + ); + }); +}); +``` + +This configuration adds `my-user-extensions.js` to the user management page of the Identity Module. `typeof(Volo.Abp.Identity.Web.Pages.Identity.Users.IndexModel).FullName` is the name of the bundle in the user management page. This is a common convention used for all the ABP Commercial modules. + +That's all. Run your application to see the result. + +## API + +This section explains details of the `abp.ui.extensions.entityActions` JavaScript API. + +### abp.ui.extensions.entityActions.get(entityName) + +This method is used to access the entity actions of a specific module. It takes one parameter: + +* **entityName**: The name of the entity defined by the related module. + +### abp.ui.extensions.entityActions.get(entityName).actions + +The `actions` property is used to retrieve a [doubly linked list](../Common/Utils/Linked-List.md) of previously defined actions for an entity. All contributors are executed in order to prepare the final actions list. This is normally called by the modules to show the actions in the grid. However, you can use it if you are building your own extensible UIs. + +### abp.ui.extensions.entityActions.get(entityName).addContributor(contributeCallback) + +The `addContributor` method covers all scenarios, e.g. you want to add your action in a different position in the list, change or remove an existing action item. `addContributor` with the following parameter: + +* **contributeCallback**: A callback function that is called whenever the action list should be created. You can freely modify the action list inside this callback method. + +#### Example + +```js +var clickMe2Action = { + text: 'Click Me 2!', + icon: 'fas fa-hand-point-right', + action: function(data) { + //TODO: Write your custom code + alert(data.record.userName); + } +}; + +abp.ui.extensions.entityActions + .get('identity.user') + .addContributor(function(actionList) { + // Remove an item from actionList + actionList.dropHead(); + + // Add the new item to the actionList + actionList.addHead(clickMe2Action); + }); +``` + +> `actionList` is [linked list](../Common/Utils/Linked-List.md). You can use its methods to build a list of columns however you need. diff --git a/docs/en/images/user-action-extension-click-me.png b/docs/en/images/user-action-extension-click-me.png new file mode 100644 index 0000000000000000000000000000000000000000..4046630f48d333f5bba44e385df5a0822c38974a GIT binary patch literal 71534 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 Date: Tue, 8 Dec 2020 17:08:49 +0300 Subject: [PATCH 02/10] Document Data Table Column Extensions for ASP.NET Core UI --- .../Data-Table-Column-Extensions.md | 161 ++++++++++++++++++ .../images/table-column-extension-example.png | Bin 0 -> 53957 bytes 2 files changed, 161 insertions(+) create mode 100644 docs/en/UI/AspNetCore/Data-Table-Column-Extensions.md create mode 100644 docs/en/images/table-column-extension-example.png diff --git a/docs/en/UI/AspNetCore/Data-Table-Column-Extensions.md b/docs/en/UI/AspNetCore/Data-Table-Column-Extensions.md new file mode 100644 index 0000000000..fec0ac71fb --- /dev/null +++ b/docs/en/UI/AspNetCore/Data-Table-Column-Extensions.md @@ -0,0 +1,161 @@ +# Data Table Column Extensions for ASP.NET Core UI + +## Introduction + +Data table column extension system allows you to add a **new table column** on the user interface. The example below adds a new column with the "Social security no" title: + +![user-action-extension-click-me](../../images/table-column-extension-example.png) + +You can use the standard column options to fine control the table column. + +> Note that this is a low level API to find control the table column. If you want to show an extension property on the table, see the [module entity extension](../../Module-Entity-Extensions.md) document. + +## How to Set Up + +### Create a JavaScript File + +First, add a new JavaScript file to your solution. We added inside the `/Pages/Identity/Users` folder of the `.Web` project: + +![user-action-extension-on-solution](../../images/user-action-extension-on-solution.png) + +Here, the content of this JavaScript file: + +```js +abp.ui.extensions.tableColumns + .get('identity.user') + .addContributor(function (columnList) { + columnList.addTail({ //add as the last column + title: 'Social security no', + data: 'extraProperties.SocialSecurityNumber', + orderable: false, + render: function (data, type, row) { + if (row.extraProperties.SocialSecurityNumber) { + return '' + + row.extraProperties.SocialSecurityNumber + + ''; + } else { + return 'undefined'; + } + } + }); + }); +``` + +This example defines a custom `render` function to return a custom HTML to render in the column. + +### Add the File to the User Management Page + +Then you need to add this JavaScript file to the user management page. You can take the power of the [Bundling & Minification system](https://docs.abp.io/en/abp/latest/UI/AspNetCore/Bundling-Minification). + +Write the following code inside the `ConfigureServices` of your module class: + +```csharp +Configure(options => +{ + options.ScriptBundles.Configure( + typeof(Volo.Abp.Identity.Web.Pages.Identity.Users.IndexModel).FullName, + bundleConfiguration => + { + bundleConfiguration.AddFiles( + "/Pages/Identity/Users/my-user-extensions.js" + ); + }); +}); +``` + +This configuration adds `my-user-extensions.js` to the user management page of the Identity Module. `typeof(Volo.Abp.Identity.Web.Pages.Identity.Users.IndexModel).FullName` is the name of the bundle in the user management page. This is a common convention used for all the ABP Commercial modules. + +### Rendering the Column + +This example assumes that you've defined a `SocialSecurityNumber` extra property using the [module entity extension](../../Module-Entity-Extensions.md) system. However; + +* You can add a new column that is related to an existing property of the user (that was not added to the table by default). Example: + +````js +abp.ui.extensions.tableColumns + .get('identity.user') + .addContributor(function (columnList) { + columnList.addTail({ + title: 'Phone confirmed?', + data: 'phoneNumberConfirmed', + render: function (data, type, row) { + if (row.phoneNumberConfirmed) { + return 'YES'; + } else { + return 'NO'; + } + } + }); + }); +```` + +* You can add a new custom column that is not related to any entity property, but a completely custom information. Example: + +````js +abp.ui.extensions.tableColumns + .get('identity.user') + .addContributor(function (columnList) { + columnList.addTail({ + title: 'Custom column', + data: {}, + orderable: false, + render: function (data) { + if (data.phoneNumber) { + return "call: " + data.phoneNumber; + } else { + return ''; + } + } + }); + }); +```` + +## API + +This section explains details of the `abp.ui.extensions.tableColumns` JavaScript API. + +### abp.ui.extensions.tableColumns.get(entityName) + +This method is used to access the table columns for an entity of a specific module. It takes one parameter: + +* **entityName**: The name of the entity defined by the related module. + +### abp.ui.extensions.tableColumns.get(entityName).columns + +The `columns` property is used to retrieve a [doubly linked list](../Common/Utils/Linked-List.md) of previously defined columns for a table. All contributors are executed in order to prepare the final column list. This is normally called by the modules to show the columns in the table. However, you can use it if you are building your own extensible UIs. + +### abp.ui.extensions.tableColumns.get(entityName).addContributor(contributeCallback [, order]) + +The `addContributor` method covers all scenarios, e.g. you want to add your column in a different position in the list, change or remove an existing column. `addContributor` has the following parameters: + +* **contributeCallback**: A callback function that is called whenever the column list should be created. You can freely modify the column list inside this callback method. +* **order** (optional): The order of the callback in the callback list. Your callback is added to the end of the list (so, you have opportunity to modify columns added by the previous contributors). You can set it `0` to add your contributor as the first item. + +#### Example + +```js +var myColumnDefinition = { + title: 'Custom column', + data: {}, + orderable: false, + render: function(data) { + if (data.phoneNumber) { + return "call: " + data.phoneNumber; + } else { + return ''; + } + } +}; + +abp.ui.extensions.tableColumns + .get('identity.user') + .addContributor(function (columnList) { + // Remove an item from actionList + columnList.dropHead(); + + // Add a new item to the actionList + columnList.addHead(myColumnDefinition); + }); +``` + +> `columnList` is [linked list](../Common/Utils/Linked-List.md). You can use its methods to build a list of columns however you need. diff --git a/docs/en/images/table-column-extension-example.png b/docs/en/images/table-column-extension-example.png new file mode 100644 index 0000000000000000000000000000000000000000..84d87bf46c1fb4458f8b2c1340726557d29be133 GIT binary patch literal 53957 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 Date: Tue, 8 Dec 2020 17:26:06 +0300 Subject: [PATCH 03/10] feat: add Options utility type --- .../packages/schematics/src/models/util.ts | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/npm/ng-packs/packages/schematics/src/models/util.ts b/npm/ng-packs/packages/schematics/src/models/util.ts index 5ff732ccfe..0588ed7d5b 100644 --- a/npm/ng-packs/packages/schematics/src/models/util.ts +++ b/npm/ng-packs/packages/schematics/src/models/util.ts @@ -1,2 +1,16 @@ // Omissible (given keys will become optional) export type Omissible = Partial> & Omit; + +// ExcludeKeys (keys will be excluded based on their type) +type ExcludeKeys = Exclude< + { + [Key in keyof Type]: Type[Key] extends Excluded ? never : Key; + }[keyof Type], + never +>; + +// tslint:disable-next-line: ban-types +type ExcludeMethods = Pick>; + +// Options (methods will be omitted, given keys will become optional) +export type Options> = Omissible, K>; From 92f475c6880c77f2f134586af165a6496562da46 Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Tue, 8 Dec 2020 17:27:37 +0300 Subject: [PATCH 04/10] feat: update types and add Generic class --- .../packages/schematics/src/models/model.ts | 94 +++++++++++++++---- 1 file changed, 74 insertions(+), 20 deletions(-) diff --git a/npm/ng-packs/packages/schematics/src/models/model.ts b/npm/ng-packs/packages/schematics/src/models/model.ts index 6c7feb318d..048c08a1b0 100644 --- a/npm/ng-packs/packages/schematics/src/models/model.ts +++ b/npm/ng-packs/packages/schematics/src/models/model.ts @@ -1,43 +1,97 @@ import { Import } from './import'; -import { Omissible } from './util'; +import { Options } from './util'; export class Model { - imports: Import[] = []; - interfaces: Interface[] = []; - namespace: string; - path: string; + readonly imports: Import[] = []; + readonly interfaces: Interface[] = []; + readonly namespace: string; + readonly path: string; constructor(options: ModelOptions) { Object.assign(this, options); } } -export type ModelOptions = Omissible; +export type ModelOptions = Options; export class Interface { - base: string | null; - identifier: string; - namespace: string; - properties: Property[] = []; - ref: string; + readonly base: string | null; + readonly identifier: string; + readonly namespace: string; + readonly generics: Generic[] = []; + readonly properties: Property[] = []; + readonly ref: string; constructor(options: InterfaceOptions) { Object.assign(this, options); } } -export type InterfaceOptions = Omissible; +export type InterfaceOptions = Options; -export class Property { - name: string; - type: string; - default = ''; - optional: '' | '?' = ''; - refs: string[] = []; +abstract class TypeRef { + readonly refs: string[] = []; - constructor(options: PropertyOptions) { + protected _type = ''; + get type() { + return this._type; + } + set type(value: string) { + if (!value) return; + this._type = value; + } + + protected _default = ''; + get default() { + return this._default; + } + set default(value: string) { + if (!value) return; + this._default = ` = ${value}`; + } + + constructor(options: TypeRefOptions) { Object.assign(this, options); } + + setDefault(value: string) { + this.default = value; + } + + setType(value: string) { + this.type = value; + } +} + +type TypeRefOptionalKeys = 'default' | 'refs'; +type TypeRefOptions = Options; + +export class Generic extends TypeRef { + constructor(options: GenericOptions) { + super(options); + } +} + +export type GenericOptions = Options; + +export class Property extends TypeRef { + readonly name: string; + private _optional: '' | '?' = ''; + get optional() { + return this.default ? '' : this._optional; + } + + set optional(value: '' | '?') { + this._optional = value; + } + + constructor(options: PropertyOptions) { + super(options); + } + + setOptional(isOptional: boolean) { + this.optional = isOptional ? '?' : ''; + } } -export type PropertyOptions = Omissible; +export type PropertyOptions = Options; From 8754ef3a95e1cb93581d6d49dd589b4d2cfe2c4b Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Tue, 8 Dec 2020 17:28:07 +0300 Subject: [PATCH 05/10] feat: add utilities for generics --- .../packages/schematics/src/utils/generics.ts | 100 ++++++++++++++++++ .../packages/schematics/src/utils/index.ts | 1 + 2 files changed, 101 insertions(+) create mode 100644 npm/ng-packs/packages/schematics/src/utils/generics.ts diff --git a/npm/ng-packs/packages/schematics/src/utils/generics.ts b/npm/ng-packs/packages/schematics/src/utils/generics.ts new file mode 100644 index 0000000000..8dc7fb2629 --- /dev/null +++ b/npm/ng-packs/packages/schematics/src/utils/generics.ts @@ -0,0 +1,100 @@ +import { Generic } from '../models'; + +export class GenericsCollector { + private _generics: Generic[] = []; + get generics() { + return this._generics; + } + + apply = (value: string, index: number) => { + const generic = this.get(index); + if (generic) { + if (!generic.type) generic.setType(value); + return value + generic.default; + } + + return value; + }; + + constructor(private getTypeIdentifier = (type: string) => type) {} + + private createGeneric(type: string, ref: string, defaultValue: string) { + const _default = this.getTypeIdentifier(defaultValue); + const refs = [generateRefWithPlaceholders(ref)]; + const generic = new Generic({ type, default: _default, refs }); + return generic; + } + + private register(index: number, generic: Generic) { + const existing = this.get(index); + if (existing) { + existing.setDefault(generic.default); + existing.setType(generic.type); + } else this.set(index, generic); + } + + collect(generics: string[], genericArguments: string[]) { + generics.forEach((ref, i) => { + const generic = this.createGeneric( + genericArguments[i], + ref, + genericArguments.includes(ref) ? '' : ref, + ); + this.register(i, generic); + }); + } + + get(index: number) { + return this.generics[index]; + } + + set(index: number, value: Generic) { + this.generics[index] = value; + } + + reset() { + this._generics = []; + } +} + +export function generateRefWithPlaceholders(sourceType: string) { + let { identifier, generics } = extractGenerics(sourceType); + + identifier = identifier; + generics = generics.map((_, i) => `T${i}`); + + return generics.length ? `${identifier}<${generics}>` : identifier; +} + +export function extractSimpleGenerics(sourceType: string) { + const { identifier, generics } = extractGenerics(sourceType); + + return { + identifier: getLastSegment(identifier), + generics: generics.map(getLastSegment), + }; +} + +export function extractGenerics(sourceType: string) { + const regex = /(?[^<]+)(<(?.+)>)?/g; + const { identifier = '', generics = '' } = regex.exec(sourceType)?.groups ?? {}; + + return { + identifier, + generics: generics.split(/,\s*/).filter(Boolean), + }; +} + +function getLastSegment(str: string) { + return str.split('.').pop()!; +} + +export function replacePlaceholdersWithGenerics( + type: string, + generics: string[], + genericsCollector: GenericsCollector, +) { + return generics + .map(genericsCollector.apply) + .reduce((acc, v, i) => acc.replace(new RegExp(`([<, ])T${i}([,>])`, 'g'), `$1${v}$2`), type); +} diff --git a/npm/ng-packs/packages/schematics/src/utils/index.ts b/npm/ng-packs/packages/schematics/src/utils/index.ts index 178920dccc..e6df05b2e2 100644 --- a/npm/ng-packs/packages/schematics/src/utils/index.ts +++ b/npm/ng-packs/packages/schematics/src/utils/index.ts @@ -5,6 +5,7 @@ export * from './barrel'; export * from './common'; export * from './enum'; export * from './file'; +export * from './generics'; export * from './import'; export * from './model'; export * from './namespace'; From 40094d13f267f08fc11f616422f6ca4dc650ff57 Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Tue, 8 Dec 2020 17:30:02 +0300 Subject: [PATCH 06/10] fix: improve generic parse in type simplifier --- .../packages/schematics/src/utils/type.ts | 20 ++++++------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/npm/ng-packs/packages/schematics/src/utils/type.ts b/npm/ng-packs/packages/schematics/src/utils/type.ts index 781794c463..1c7eda81bb 100644 --- a/npm/ng-packs/packages/schematics/src/utils/type.ts +++ b/npm/ng-packs/packages/schematics/src/utils/type.ts @@ -1,7 +1,7 @@ -import { SYSTEM_TYPES } from '../constants'; -import { VOLO_REGEX } from '../constants/volo'; +import { SYSTEM_TYPES, VOLO_REGEX } from '../constants'; import { eImportKeyword } from '../enums'; import { Import, TypeWithEnum } from '../models'; +import { extractSimpleGenerics } from './generics'; import { parseNamespace } from './namespace'; import { relativePathToEnum, relativePathToModel } from './path'; import { parseGenerics } from './tree'; @@ -15,14 +15,9 @@ export function createTypeSimplifier() { type = /any.+)<.*(?<=[\.<])(?.+)>/gm); - const { generic, genericType } = regexp.exec(type)?.groups ?? {}; + const { identifier, generics } = extractSimpleGenerics(type); - return generic - ? generic === 'any' - ? 'any' - : `${generic}<${genericType}>` - : type.split('.').pop()!; + return generics.length ? `${identifier}<${generics.join(', ')}>` : identifier; }); return (type: string) => { @@ -40,9 +35,7 @@ export function createTypeParser(replacerFn = (t: string) => t) { export function createTypeNormalizer(replacerFn = (t: string) => t) { return (type: string) => { - type = normalizeTypeAnnotations(type); - - return replacerFn(type); + return replacerFn(normalizeTypeAnnotations(type)); }; } @@ -56,8 +49,7 @@ export function flattenDictionaryTypes(types: string[], type: string) { } export function normalizeTypeAnnotations(type: string) { - type = type.replace(/\[(.+)+\]/g, '$1[]'); - return type.replace(/\?/g, ''); + return type.replace(/\[(.+)+\]/g, '$1[]').replace(/\?/g, ''); } export function removeGenerics(type: string) { From d1cb728c8d07426c0fe13917ebcdef6b9b965e5e Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Tue, 8 Dec 2020 17:30:09 +0300 Subject: [PATCH 07/10] feat: add extendsSelf to type utilities --- npm/ng-packs/packages/schematics/src/utils/type.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/npm/ng-packs/packages/schematics/src/utils/type.ts b/npm/ng-packs/packages/schematics/src/utils/type.ts index 1c7eda81bb..a087392d40 100644 --- a/npm/ng-packs/packages/schematics/src/utils/type.ts +++ b/npm/ng-packs/packages/schematics/src/utils/type.ts @@ -107,3 +107,8 @@ export function createTypeAdapter() { const simplifyType = createTypeSimplifier(); return (type: string) => parseGenerics(type, node => simplifyType(node.data)).toString(); } + +// naming here is depictive only +export function extendsSelf(type: string, base: string) { + return removeGenerics(base) === removeGenerics(type); +} From 08e812299045a2081096730ff1651bc48902ba0a Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Tue, 8 Dec 2020 17:30:59 +0300 Subject: [PATCH 08/10] fix: use setDefault and setOptional in service utils --- npm/ng-packs/packages/schematics/src/utils/service.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/npm/ng-packs/packages/schematics/src/utils/service.ts b/npm/ng-packs/packages/schematics/src/utils/service.ts index b8a2d692b2..70655c821d 100644 --- a/npm/ng-packs/packages/schematics/src/utils/service.ts +++ b/npm/ng-packs/packages/schematics/src/utils/service.ts @@ -83,8 +83,8 @@ export function createActionToSignatureMapper() { signature.parameters = action.parametersOnMethod.map(p => { const type = adaptType(p.typeSimple); const parameter = new Property({ name: p.name, type }); - if (p.defaultValue) parameter.default = ` = ${p.defaultValue}`; - else if (p.isOptional) parameter.optional = '?'; + parameter.setDefault(p.defaultValue); + parameter.setOptional(p.isOptional); return parameter; }); From 577faa96d82247c6583550c38e36ec15f70f830d Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Tue, 8 Dec 2020 17:32:22 +0300 Subject: [PATCH 09/10] fix: collect and use generics with defaults in models --- .../packages/schematics/src/utils/model.ts | 49 +++++++++++++------ 1 file changed, 33 insertions(+), 16 deletions(-) diff --git a/npm/ng-packs/packages/schematics/src/utils/model.ts b/npm/ng-packs/packages/schematics/src/utils/model.ts index fc8dde37c1..49d3c0fcf5 100644 --- a/npm/ng-packs/packages/schematics/src/utils/model.ts +++ b/npm/ng-packs/packages/schematics/src/utils/model.ts @@ -1,5 +1,11 @@ -import { VOLO_NAME_VALUE, VOLO_REGEX } from '../constants'; +import { VOLO_REGEX } from '../constants'; import { Interface, Model, Property, PropertyDef, Type, TypeWithEnum } from '../models'; +import { + extractGenerics, + generateRefWithPlaceholders, + GenericsCollector, + replacePlaceholdersWithGenerics, +} from './generics'; import { parseNamespace } from './namespace'; import { relativePathToModel } from './path'; import { camel } from './text'; @@ -8,6 +14,7 @@ import { createTypeParser, createTypeSimplifier, createTypesToImportsReducer, + extendsSelf, removeTypeModifiers, } from './type'; @@ -27,6 +34,7 @@ export function createImportRefsToModelReducer(params: ModelGeneratorParams) { return (models: Model[], importRefs: string[]) => { const enums: string[] = []; const interfaces = importRefs.reduce(reduceImportRefsToInterfaces, []); + sortInterfaces(interfaces); interfaces.forEach(_interface => { @@ -40,12 +48,9 @@ export function createImportRefsToModelReducer(params: ModelGeneratorParams) { const index = models.findIndex(m => m.namespace === _interface.namespace); if (index > -1) { if (models[index].interfaces.some(i => i.identifier === _interface.identifier)) return; - if (_interface.ref.startsWith(VOLO_NAME_VALUE.ref)) return; models[index].interfaces.push(_interface); } else { - if (_interface.ref.startsWith(VOLO_NAME_VALUE.ref)) _interface = VOLO_NAME_VALUE; - const { namespace } = _interface; models.push( @@ -70,7 +75,7 @@ export function createImportRefsToModelReducer(params: ModelGeneratorParams) { isEnum: false, }); - _interface.properties.forEach(prop => { + [..._interface.properties, ..._interface.generics].forEach(prop => { prop.refs.forEach(ref => { const propType = types[ref]; if (!propType) return; @@ -100,38 +105,50 @@ export function createImportRefToInterfaceReducerCreator(params: ModelGeneratorP const parseType = createTypeParser(removeTypeModifiers); const simplifyType = createTypeSimplifier(); const getIdentifier = (type: string) => removeTypeModifiers(simplifyType(type)); + const genericsCollector = new GenericsCollector(getIdentifier); return reduceRefsToInterfaces; - function reduceRefsToInterfaces(interfaces: Interface[], ref: string) { + function reduceRefsToInterfaces(interfaces: Interface[], ref: string): Interface[] { const typeDef = types[ref]; if (!typeDef) return interfaces; const namespace = parseNamespace(solution, ref); - const identifier = (typeDef.genericArguments ?? []).reduce( - (acc, t, i) => acc.replace(`T${i}`, t), - getIdentifier(ref), - ); + let { baseType: base, genericArguments } = typeDef; + genericArguments = genericArguments || []; + let identifier = getIdentifier(ref); + identifier = replacePlaceholdersWithGenerics(identifier, genericArguments, genericsCollector); + + if (base) { + if (extendsSelf(ref, base)) { + genericsCollector.collect(extractGenerics(base).generics, genericArguments); + return reduceRefsToInterfaces(interfaces, generateRefWithPlaceholders(base)); + } else { + base = getIdentifier(base); + } + } - const base = typeDef.baseType ? getIdentifier(typeDef.baseType) : null; - const _interface = new Interface({ identifier, base, namespace, ref }); + const { generics } = genericsCollector; + const _interface = new Interface({ identifier, base, namespace, ref, generics }); + genericsCollector.reset(); typeDef.properties?.forEach(prop => { const name = camel(prop.name); - const optional = isOptionalProperty(prop) ? '?' : ''; const type = simplifyType(prop.typeSimple); const refs = parseType(prop.type).reduce( (acc: string[], r) => acc.concat(parseGenerics(r).toGenerics()), [], ); + const property = new Property({ name, type, refs }); + property.setOptional(isOptionalProperty(prop)); - _interface.properties.push(new Property({ name, optional, type, refs })); + _interface.properties.push(property); }); interfaces.push(_interface); - return _interface.properties + return [..._interface.properties, ..._interface.generics] .reduce((refs, prop) => { prop.refs.forEach(type => { if (types[type]?.isEnum) return; @@ -142,7 +159,7 @@ export function createImportRefToInterfaceReducerCreator(params: ModelGeneratorP return refs; }, []) .concat(base ? parseGenerics(typeDef.baseType!).toGenerics() : []) - .reduce(reduceRefsToInterfaces, interfaces); + .reduce(reduceRefsToInterfaces, interfaces); } } From 721ce34588adc1c13bd911d40a6dc7ce808c6818 Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Tue, 8 Dec 2020 17:32:49 +0300 Subject: [PATCH 10/10] refactor: delete unused interface constant --- .../packages/schematics/src/constants/volo.ts | 21 ------------------- 1 file changed, 21 deletions(-) diff --git a/npm/ng-packs/packages/schematics/src/constants/volo.ts b/npm/ng-packs/packages/schematics/src/constants/volo.ts index 12aa166d66..00fde72c79 100644 --- a/npm/ng-packs/packages/schematics/src/constants/volo.ts +++ b/npm/ng-packs/packages/schematics/src/constants/volo.ts @@ -1,22 +1 @@ -import { Interface, Property } from '../models'; - export const VOLO_REGEX = /^Volo\.Abp\.(Application\.Dtos|ObjectExtending)/; - -export const VOLO_NAME_VALUE = new Interface({ - base: null, - identifier: 'NameValue', - ref: 'Volo.Abp.NameValue', - namespace: 'Volo.Abp', - properties: [ - new Property({ - name: 'name', - type: 'string', - refs: ['System.String'], - }), - new Property({ - name: 'value', - type: 'T', - refs: ['T'], - }), - ], -});