@memberjunction/ng-simple-record-list 5.30.1 → 5.31.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,8 @@
1
1
  import { OnInit, EventEmitter } from '@angular/core';
2
2
  import { BaseEntity } from '@memberjunction/core';
3
+ import { BaseAngularComponent } from '@memberjunction/ng-base-types';
3
4
  import * as i0 from "@angular/core";
4
- export declare class SimpleRecordListComponent implements OnInit {
5
+ export declare class SimpleRecordListComponent extends BaseAngularComponent implements OnInit {
5
6
  /**
6
7
  * Name of the entity to display records for.
7
8
  */
@@ -1 +1 @@
1
- {"version":3,"file":"simple-record-list.component.d.ts","sourceRoot":"","sources":["../../../src/lib/simple-record-list/simple-record-list.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAS,YAAY,EAAU,MAAM,eAAe,CAAC;AAE/E,OAAO,EAAE,UAAU,EAAqB,MAAM,sBAAsB,CAAC;;AAIrE,qBAMa,yBAA0B,YAAW,MAAM;IACtD;;OAEG;IACM,UAAU,EAAE,MAAM,CAAM;IACjC;;OAEG;IACM,OAAO,EAAE,MAAM,EAAE,CAAM;IAChC;;OAEG;IACM,MAAM,EAAE,MAAM,CAAM;IAC7B;;OAEG;IACM,WAAW,EAAE,OAAO,CAAQ;IACrC;;OAEG;IACM,QAAQ,EAAE,OAAO,CAAQ;IAClC;;OAEG;IACM,SAAS,EAAE,OAAO,CAAQ;IACnC;;OAEG;IACM,iBAAiB,EAAE,OAAO,CAAS;IAC5C;;OAEG;IACM,gBAAgB,EAAE,MAAM,CAAM;IACvC;;;;OAIG;IACM,wBAAwB,EAAE,CAAC,CAAC,MAAM,EAAE,UAAU,KAAK,MAAM,CAAC,GAAG,IAAI,CAAQ;IAClF;;OAEG;IACM,mBAAmB,EAAE,MAAM,CAAM;IAC1C;;;;OAIG;IACM,2BAA2B,EAAE,CAAC,CAAC,MAAM,EAAE,UAAU,KAAK,MAAM,CAAC,GAAG,IAAI,CAAQ;IACrF;;OAEG;IACM,uBAAuB,EAAE,MAAM,CAAoB;IAC5D;;OAEG;IACM,yBAAyB,EAAE,MAAM,CAAmD;IAC7F;;OAEG;IACM,sBAAsB,EAAE,MAAM,CAAM;IAC7C;;OAEG;IACM,eAAe,EAAE,MAAM,CAAa;IAEnC,cAAc,oCAAkC;IAChD,YAAY,oCAAkC;IAC9C,aAAa,oCAAkC;IAC/C,mBAAmB,oCAAkC;IACrD,qBAAqB,oCAAkC;IAE1D,SAAS,EAAE,OAAO,CAAS;IAC3B,OAAO,EAAE,UAAU,EAAE,CAAM;;IAKlC,QAAQ,IAAI,IAAI;IAIV,OAAO;IAoCN,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,SAAS,EAAE,CAAC,EAAE,UAAU;IAOzD,yBAAyB,EAAE,OAAO,CAAS;IAC3C,yBAAyB,EAAE,OAAO,CAAS;IAC3C,gBAAgB,EAAG,UAAU,GAAG,IAAI,CAAC;IACrC,gBAAgB,EAAG,UAAU,GAAG,SAAS,CAAC;IAEpC,YAAY,CAAC,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU;IAQ7C,mBAAmB,CAAC,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU;IAWjE;;OAEG;IACI,mBAAmB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;IAOtD;;OAEG;IACI,sBAAsB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;IAO5C,uBAAuB,CAAC,MAAM,EAAE,KAAK,GAAG,IAAI;IAS5C,iBAAiB,CAAC,MAAM,EAAE,KAAK,GAAG,IAAI;IAe5C,eAAe,EAAG,UAAU,CAAC;IAC7B,uBAAuB,EAAE,OAAO,CAAS;IACzC,UAAU,EAAE,KAAK,GAAG,MAAM,CAAS;IAC7B,eAAe;IAWf,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU;IAQ3C,2BAA2B,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ;IAsB3D,aAAa,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM;yCA7OhC,yBAAyB;2CAAzB,yBAAyB;CAkQrC"}
1
+ {"version":3,"file":"simple-record-list.component.d.ts","sourceRoot":"","sources":["../../../src/lib/simple-record-list/simple-record-list.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAS,YAAY,EAAU,MAAM,eAAe,CAAC;AAE/E,OAAO,EAAE,UAAU,EAAqB,MAAM,sBAAsB,CAAC;AAIrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;;AACrE,qBAMa,yBAA0B,SAAQ,oBAAqB,YAAW,MAAM;IACnF;;OAEG;IACM,UAAU,EAAE,MAAM,CAAM;IACjC;;OAEG;IACM,OAAO,EAAE,MAAM,EAAE,CAAM;IAChC;;OAEG;IACM,MAAM,EAAE,MAAM,CAAM;IAC7B;;OAEG;IACM,WAAW,EAAE,OAAO,CAAQ;IACrC;;OAEG;IACM,QAAQ,EAAE,OAAO,CAAQ;IAClC;;OAEG;IACM,SAAS,EAAE,OAAO,CAAQ;IACnC;;OAEG;IACM,iBAAiB,EAAE,OAAO,CAAS;IAC5C;;OAEG;IACM,gBAAgB,EAAE,MAAM,CAAM;IACvC;;;;OAIG;IACM,wBAAwB,EAAE,CAAC,CAAC,MAAM,EAAE,UAAU,KAAK,MAAM,CAAC,GAAG,IAAI,CAAQ;IAClF;;OAEG;IACM,mBAAmB,EAAE,MAAM,CAAM;IAC1C;;;;OAIG;IACM,2BAA2B,EAAE,CAAC,CAAC,MAAM,EAAE,UAAU,KAAK,MAAM,CAAC,GAAG,IAAI,CAAQ;IACrF;;OAEG;IACM,uBAAuB,EAAE,MAAM,CAAoB;IAC5D;;OAEG;IACM,yBAAyB,EAAE,MAAM,CAAmD;IAC7F;;OAEG;IACM,sBAAsB,EAAE,MAAM,CAAM;IAC7C;;OAEG;IACM,eAAe,EAAE,MAAM,CAAa;IAEnC,cAAc,oCAAkC;IAChD,YAAY,oCAAkC;IAC9C,aAAa,oCAAkC;IAC/C,mBAAmB,oCAAkC;IACrD,qBAAqB,oCAAkC;IAE1D,SAAS,EAAE,OAAO,CAAS;IAC3B,OAAO,EAAE,UAAU,EAAE,CAAM;;IAMlC,QAAQ,IAAI,IAAI;IAIV,OAAO;IAoCN,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,SAAS,EAAE,CAAC,EAAE,UAAU;IAOzD,yBAAyB,EAAE,OAAO,CAAS;IAC3C,yBAAyB,EAAE,OAAO,CAAS;IAC3C,gBAAgB,EAAG,UAAU,GAAG,IAAI,CAAC;IACrC,gBAAgB,EAAG,UAAU,GAAG,SAAS,CAAC;IAEpC,YAAY,CAAC,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU;IAQ7C,mBAAmB,CAAC,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU;IAWjE;;OAEG;IACI,mBAAmB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;IAOtD;;OAEG;IACI,sBAAsB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;IAO5C,uBAAuB,CAAC,MAAM,EAAE,KAAK,GAAG,IAAI;IAS5C,iBAAiB,CAAC,MAAM,EAAE,KAAK,GAAG,IAAI;IAe5C,eAAe,EAAG,UAAU,CAAC;IAC7B,uBAAuB,EAAE,OAAO,CAAS;IACzC,UAAU,EAAE,KAAK,GAAG,MAAM,CAAS;IAC7B,eAAe;IAWf,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU;IAQ3C,2BAA2B,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ;IAsB3D,aAAa,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM;yCA9OhC,yBAAyB;2CAAzB,yBAAyB;CAmQrC"}
@@ -1,6 +1,7 @@
1
1
  import { Component, Input, EventEmitter, Output } from '@angular/core';
2
- import { Metadata, RunView } from '@memberjunction/core';
2
+ import { RunView } from '@memberjunction/core';
3
3
  import { MJNotificationService } from '@memberjunction/ng-notifications';
4
+ import { BaseAngularComponent } from '@memberjunction/ng-base-types';
4
5
  import * as i0 from "@angular/core";
5
6
  import * as i1 from "@memberjunction/ng-ui-components";
6
7
  import * as i2 from "@memberjunction/ng-entity-form-dialog";
@@ -176,7 +177,7 @@ function SimpleRecordListComponent_Conditional_5_Template(rf, ctx) { if (rf & 1)
176
177
  i0.ɵɵadvance();
177
178
  i0.ɵɵconditional(ctx_r1.CustomActionDialogInfo ? 3 : -1);
178
179
  } }
179
- export class SimpleRecordListComponent {
180
+ export class SimpleRecordListComponent extends BaseAngularComponent {
180
181
  /**
181
182
  * Name of the entity to display records for.
182
183
  */
@@ -249,13 +250,14 @@ export class SimpleRecordListComponent {
249
250
  isLoading = false;
250
251
  records = [];
251
252
  constructor() {
253
+ super();
252
254
  }
253
255
  ngOnInit() {
254
256
  this.Refresh();
255
257
  }
256
258
  async Refresh() {
257
259
  this.isLoading = true;
258
- const md = new Metadata();
260
+ const md = this.ProviderToUse;
259
261
  if (this.Columns.length === 0) {
260
262
  // populate this by default by taking all columns if entity has < 10 columns, otherwise include columns that have DefaultInView=1, and if we have no columns with DefaultInView=1, then include the first 10 columns
261
263
  const e = md.Entities.find(e => e.Name === this.EntityName);
@@ -271,7 +273,7 @@ export class SimpleRecordListComponent {
271
273
  }
272
274
  }
273
275
  }
274
- const rv = new RunView();
276
+ const rv = RunView.FromMetadataProvider(this.ProviderToUse);
275
277
  const result = await rv.RunView({
276
278
  EntityName: this.EntityName,
277
279
  ResultType: 'entity_object'
@@ -357,7 +359,7 @@ export class SimpleRecordListComponent {
357
359
  recordMode = 'new';
358
360
  async createNewRecord() {
359
361
  // attempt to create a new record and if success, navigate to the new record
360
- const md = new Metadata();
362
+ const md = this.ProviderToUse;
361
363
  this.editOrNewRecord = await md.GetEntityObject(this.EntityName);
362
364
  if (this.editOrNewRecord) {
363
365
  this.editOrNewRecord.NewRecord();
@@ -392,7 +394,7 @@ export class SimpleRecordListComponent {
392
394
  }
393
395
  getRecordName(r) {
394
396
  // check to see if we have any columns in the entity that have IsNameField = 1, the fall back from there is to look for a column named "Name", and if that doesn't work we return the primary key(s)
395
- const md = new Metadata();
397
+ const md = this.ProviderToUse;
396
398
  const e = md.Entities.find(e => e.Name === this.EntityName);
397
399
  if (!e)
398
400
  throw new Error('Entity not found: ' + this.EntityName);
@@ -411,7 +413,7 @@ export class SimpleRecordListComponent {
411
413
  }
412
414
  }
413
415
  static ɵfac = function SimpleRecordListComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SimpleRecordListComponent)(); };
414
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SimpleRecordListComponent, selectors: [["mj-simple-record-list"]], inputs: { EntityName: "EntityName", Columns: "Columns", SortBy: "SortBy", AllowDelete: "AllowDelete", AllowNew: "AllowNew", AllowEdit: "AllowEdit", AllowCustomAction: "AllowCustomAction", CustomActionIcon: "CustomActionIcon", CustomActionIconFunction: "CustomActionIconFunction", CustomActionTooltip: "CustomActionTooltip", CustomActionTooltipFunction: "CustomActionTooltipFunction", CustomActionDialogTitle: "CustomActionDialogTitle", CustomActionDialogMessage: "CustomActionDialogMessage", CustomActionDialogInfo: "CustomActionDialogInfo", EditSectionName: "EditSectionName" }, outputs: { RecordSelected: "RecordSelected", RecordEdited: "RecordEdited", RecordCreated: "RecordCreated", CustomActionClicked: "CustomActionClicked", CustomActionConfirmed: "CustomActionConfirmed" }, standalone: false, decls: 6, vars: 4, consts: [["entityForm", ""], [1, "wrapper", "scrollable"], [1, "vertical-full-width"], ["Mode", "section", 3, "Record", "SectionName", "Visible", "AutoRevertOnCancel", "HandleSave", "Width", "Height"], [3, "Visible", "Title", "Width", "Height"], ["size", "medium", 3, "showText"], ["mjButton", ""], [1, "grid"], [1, "sticky-header"], ["mjButton", "", 3, "click"], [1, "fa-solid", "fa-plus"], [3, "click"], ["title", "Edit", 1, "fa-solid", "fa-pen-to-square", "icon"], [3, "class", "title"], ["title", "Delete", 1, "fa-solid", "fa-trash-can", "icon"], ["title", "Edit", 1, "fa-solid", "fa-pen-to-square", "icon", 3, "click"], [3, "click", "title"], ["title", "Delete", 1, "fa-solid", "fa-trash-can", "icon", 3, "click"], ["Mode", "section", 3, "DialogClosed", "Record", "SectionName", "Visible", "AutoRevertOnCancel", "HandleSave", "Width", "Height"], [3, "Close", "Visible", "Title", "Width", "Height"], ["mjButton", "", "variant", "primary", 3, "click"]], template: function SimpleRecordListComponent_Template(rf, ctx) { if (rf & 1) {
416
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SimpleRecordListComponent, selectors: [["mj-simple-record-list"]], inputs: { EntityName: "EntityName", Columns: "Columns", SortBy: "SortBy", AllowDelete: "AllowDelete", AllowNew: "AllowNew", AllowEdit: "AllowEdit", AllowCustomAction: "AllowCustomAction", CustomActionIcon: "CustomActionIcon", CustomActionIconFunction: "CustomActionIconFunction", CustomActionTooltip: "CustomActionTooltip", CustomActionTooltipFunction: "CustomActionTooltipFunction", CustomActionDialogTitle: "CustomActionDialogTitle", CustomActionDialogMessage: "CustomActionDialogMessage", CustomActionDialogInfo: "CustomActionDialogInfo", EditSectionName: "EditSectionName" }, outputs: { RecordSelected: "RecordSelected", RecordEdited: "RecordEdited", RecordCreated: "RecordCreated", CustomActionClicked: "CustomActionClicked", CustomActionConfirmed: "CustomActionConfirmed" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 6, vars: 4, consts: [["entityForm", ""], [1, "wrapper", "scrollable"], [1, "vertical-full-width"], ["Mode", "section", 3, "Record", "SectionName", "Visible", "AutoRevertOnCancel", "HandleSave", "Width", "Height"], [3, "Visible", "Title", "Width", "Height"], ["size", "medium", 3, "showText"], ["mjButton", ""], [1, "grid"], [1, "sticky-header"], ["mjButton", "", 3, "click"], [1, "fa-solid", "fa-plus"], [3, "click"], ["title", "Edit", 1, "fa-solid", "fa-pen-to-square", "icon"], [3, "class", "title"], ["title", "Delete", 1, "fa-solid", "fa-trash-can", "icon"], ["title", "Edit", 1, "fa-solid", "fa-pen-to-square", "icon", 3, "click"], [3, "click", "title"], ["title", "Delete", 1, "fa-solid", "fa-trash-can", "icon", 3, "click"], ["Mode", "section", 3, "DialogClosed", "Record", "SectionName", "Visible", "AutoRevertOnCancel", "HandleSave", "Width", "Height"], [3, "Close", "Visible", "Title", "Width", "Height"], ["mjButton", "", "variant", "primary", 3, "click"]], template: function SimpleRecordListComponent_Template(rf, ctx) { if (rf & 1) {
415
417
  i0.ɵɵelementStart(0, "div", 1);
416
418
  i0.ɵɵconditionalCreate(1, SimpleRecordListComponent_Conditional_1_Template, 2, 1, "div")(2, SimpleRecordListComponent_Conditional_2_Template, 10, 1, "div", 2);
417
419
  i0.ɵɵelementEnd();
@@ -473,5 +475,5 @@ export class SimpleRecordListComponent {
473
475
  }], CustomActionConfirmed: [{
474
476
  type: Output
475
477
  }] }); })();
476
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SimpleRecordListComponent, { className: "SimpleRecordListComponent", filePath: "src/lib/simple-record-list/simple-record-list.component.ts", lineNumber: 13 }); })();
478
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SimpleRecordListComponent, { className: "SimpleRecordListComponent", filePath: "src/lib/simple-record-list/simple-record-list.component.ts", lineNumber: 14 }); })();
477
479
  //# sourceMappingURL=simple-record-list.component.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"simple-record-list.component.js","sourceRoot":"","sources":["../../../src/lib/simple-record-list/simple-record-list.component.ts","../../../src/lib/simple-record-list/simple-record-list.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, Input, EventEmitter, Output } from '@angular/core';\n\nimport { BaseEntity, Metadata, RunView } from '@memberjunction/core';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\n \n \n@Component({\n standalone: false,\n selector: 'mj-simple-record-list',\n templateUrl: './simple-record-list.component.html',\n styleUrls: ['./simple-record-list.component.css']\n})\nexport class SimpleRecordListComponent implements OnInit {\n /**\n * Name of the entity to display records for.\n */\n @Input() EntityName: string = '';\n /**\n * List of columns to display in the grid. If empty and the entity has > 10 columns, those columns marked as DefaultInView=1 will be used, otherwise the first 10 columns will be used.\n */\n @Input() Columns: string[] = [];\n /**\n * Name of the column to sort by. If empty, no sorting is done.\n */\n @Input() SortBy: string = '';\n /**\n * If true, the delete button will be shown for each record.\n */\n @Input() AllowDelete: boolean = true;\n /**\n * If true, the new button will be shown.\n */\n @Input() AllowNew: boolean = true;\n /**\n * If true, the edit button will be shown for each record.\n */\n @Input() AllowEdit: boolean = true;\n /**\n * If true, a custom action button will be shown for each record.\n */\n @Input() AllowCustomAction: boolean = false;\n /**\n * The CSS class for the custom action button icon (e.g. 'fa-user-lock')\n */\n @Input() CustomActionIcon: string = '';\n /**\n * A function that returns the appropriate icon based on the record\n * Signature: (record: BaseEntity) => string\n * If provided, overrides CustomActionIcon\n */\n @Input() CustomActionIconFunction: ((record: BaseEntity) => string) | null = null;\n /**\n * Tooltip text for the custom action button\n */\n @Input() CustomActionTooltip: string = '';\n /**\n * A function that returns the appropriate tooltip text based on the record\n * Signature: (record: BaseEntity) => string\n * If provided, overrides CustomActionTooltip\n */\n @Input() CustomActionTooltipFunction: ((record: BaseEntity) => string) | null = null;\n /**\n * Title for the custom action confirmation dialog\n */\n @Input() CustomActionDialogTitle: string = 'Confirm Action';\n /**\n * Message for the custom action confirmation dialog\n */\n @Input() CustomActionDialogMessage: string = 'Are you sure you want to perform this action?';\n /**\n * Optional additional information for the custom action confirmation dialog\n */\n @Input() CustomActionDialogInfo: string = '';\n /**\n * If AllowEdit or AllowNew is true, this is the section name to display for editing a new or existing record.\n */\n @Input() EditSectionName: string = 'details';\n\n @Output() RecordSelected = new EventEmitter<BaseEntity>();\n @Output() RecordEdited = new EventEmitter<BaseEntity>();\n @Output() RecordCreated = new EventEmitter<BaseEntity>();\n @Output() CustomActionClicked = new EventEmitter<BaseEntity>();\n @Output() CustomActionConfirmed = new EventEmitter<BaseEntity>();\n\n public isLoading: boolean = false;\n public records: BaseEntity[] = [];\n\n constructor() {\n }\n \n ngOnInit(): void {\n this.Refresh()\n }\n\n async Refresh() { \n this.isLoading = true\n\n const md = new Metadata();\n if (this.Columns.length === 0) {\n // populate this by default by taking all columns if entity has < 10 columns, otherwise include columns that have DefaultInView=1, and if we have no columns with DefaultInView=1, then include the first 10 columns\n const e = md.Entities.find(e => e.Name === this.EntityName);\n if (e) {\n if (e.Fields.length < 10)\n this.Columns = e.Fields.map(f => f.Name);\n else {\n const defaultInViewColumns = e.Fields.filter(c => c.DefaultInView);\n if (defaultInViewColumns.length > 0)\n this.Columns = defaultInViewColumns.map(f => f.Name);\n else\n this.Columns = e.Fields.slice(0, 10).map(f => f.Name);\n }\n }\n }\n const rv = new RunView();\n const result = await rv.RunView({\n EntityName: this.EntityName,\n ResultType: 'entity_object'\n })\n if (result.Success) {\n this.records = result.Results;\n if (this.SortBy && this.SortBy.trim().length > 0) {\n this.records.sort((a, b) => a.Get(this.SortBy).localeCompare(b.Get(this.SortBy)));\n }\n }\n else {\n throw new Error(\"Error loading records: \" + result.ErrorMessage)\n }\n this.isLoading = false\n }\n\n public selectRecord(event: MouseEvent | undefined, r: BaseEntity) {\n if (event)\n event.stopPropagation(); // prevent row from getting click\n\n this.RecordSelected.emit(r);\n }\n\n public deleteRecordDialogVisible: boolean = false;\n public customActionDialogVisible: boolean = false;\n public deleteRecordItem!: BaseEntity | null;\n public customActionItem!: BaseEntity | undefined;\n \n public async deleteRecord(event: MouseEvent, r: BaseEntity) {\n // confirm with the user first\n this.deleteRecordItem = r;\n this.deleteRecordDialogVisible = true;\n if (event)\n event.stopPropagation(); // prevent row from getting click\n }\n\n public async performCustomAction(event: MouseEvent, r: BaseEntity) {\n // first emit the clicked event to allow the parent to react\n this.CustomActionClicked.emit(r);\n \n // confirm with the user\n this.customActionItem = r;\n this.customActionDialogVisible = true;\n if (event)\n event.stopPropagation(); // prevent row from getting click\n }\n \n /**\n * Gets the custom action icon for a record, using the function if provided, otherwise the static icon\n */\n public getCustomActionIcon(record: BaseEntity): string {\n if (this.CustomActionIconFunction) {\n return this.CustomActionIconFunction(record);\n }\n return this.CustomActionIcon;\n }\n \n /**\n * Gets the custom action tooltip for a record, using the function if provided, otherwise the static tooltip\n */\n public getCustomActionTooltip(record: BaseEntity): string {\n if (this.CustomActionTooltipFunction) {\n return this.CustomActionTooltipFunction(record);\n }\n return this.CustomActionTooltip;\n }\n\n public async closeCustomActionDialog(result: 'Yes' | 'No') {\n this.customActionDialogVisible = false;\n if (result === 'Yes') {\n // emit the event so the parent can handle the action\n this.CustomActionConfirmed.emit(this.customActionItem);\n }\n this.customActionItem = undefined;\n }\n\n public async closeDeleteDialog(result: 'Yes' | 'No') {\n // if the user confirms, delete the record\n this.deleteRecordDialogVisible = false;\n if (result === 'Yes') {\n if (!await this.deleteRecordItem!.Delete()) {\n // show an error message\n const errorMessage = this.deleteRecordItem!.LatestResult.CompleteMessage;\n MJNotificationService.Instance.CreateSimpleNotification('Error deleting record: ' + errorMessage, 'error', 3000);\n }\n else \n this.Refresh(); // refresh the list\n }\n this.deleteRecordItem = null;\n }\n\n public editOrNewRecord!: BaseEntity;\n public showEditOrNewRecordForm: boolean = false;\n public recordMode: 'new' | 'edit' = 'new';\n public async createNewRecord() {\n // attempt to create a new record and if success, navigate to the new record\n const md = new Metadata();\n this.editOrNewRecord = await md.GetEntityObject(this.EntityName);\n if (this.editOrNewRecord) {\n this.editOrNewRecord.NewRecord();\n this.recordMode = 'new';\n this.showEditOrNewRecordForm = true;\n }\n }\n\n public async editRecord(event: MouseEvent, r: BaseEntity) {\n this.editOrNewRecord = r;\n this.recordMode = 'edit';\n this.showEditOrNewRecordForm = true;\n if (event)\n event.stopPropagation(); // prevent row from getting click\n }\n\n public async onEditOrNewRecordFormClosed(result: 'Save' | 'Cancel') {\n if (!this.editOrNewRecord)\n return; // this can happen if the user closes the form before the record is loaded\n\n this.showEditOrNewRecordForm = false;\n \n if (result === 'Save') {\n // the dialog already saved the record, just check to make sure it was saved and if so, navigate\n if (this.editOrNewRecord.IsSaved) {\n if (this.recordMode === 'edit')\n this.RecordEdited.emit(this.editOrNewRecord);\n else\n this.RecordCreated.emit(this.editOrNewRecord);\n\n // refresh our grid now\n await this.Refresh();\n }\n else\n throw new Error('Record was not saved');\n }\n }\n\n public getRecordName(r: BaseEntity): string {\n // check to see if we have any columns in the entity that have IsNameField = 1, the fall back from there is to look for a column named \"Name\", and if that doesn't work we return the primary key(s)\n const md = new Metadata();\n const e = md.Entities.find(e => e.Name === this.EntityName);\n if (!e)\n throw new Error('Entity not found: ' + this.EntityName);\n\n const nameField = e.Fields.find(c => c.IsNameField);\n if (nameField)\n return r.Get(nameField.Name);\n else {\n const nameField = e.Fields.find(c => c.Name === 'Name');\n if (nameField)\n return r.Get(\"Name\");\n else {\n // iterate through all primary keys and form a comma separated list\n const pkString = r.PrimaryKeys.map(pk => r.Get(pk.Name)).join(', ');\n return \"Record: \" + pkString;\n }\n }\n }\n}\n","<div class=\"wrapper scrollable\">\n @if(isLoading) {\n <div>\n <mj-loading [showText]=\"false\" size=\"medium\"></mj-loading>\n </div>\n }\n @else {\n <div class=\"vertical-full-width\">\n @if(AllowNew) {\n <button mjButton (click)=\"createNewRecord()\"><span class=\"fa-solid fa-plus\"></span> New</button>\n }\n <table class=\"grid\">\n <thead class=\"sticky-header\">\n <tr>\n @for (c of Columns; track c) {\n <th>\n {{ c }}\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @for (r of records; track r) {\n <tr (click)=\"selectRecord(undefined, r)\">\n @for (c of Columns; track c; let i = $index) {\n <td>\n <span>{{ r.Get(c) }}</span>\n @if(i === 0 && (AllowDelete || AllowEdit)) {\n <span>\n @if (AllowEdit) {\n <span class=\"fa-solid fa-pen-to-square icon\" (click)=\"editRecord($event, r)\" title=\"Edit\"></span>\n }\n @if (AllowCustomAction) {\n <span\n class=\"fa-solid {{getCustomActionIcon(r)}} icon\"\n (click)=\"performCustomAction($event, r)\"\n title=\"{{getCustomActionTooltip(r)}}\"\n ></span>\n }\n @if (AllowDelete) {\n <span class=\"fa-solid fa-trash-can icon\" (click)=\"deleteRecord($event, r)\" title=\"Delete\"></span>\n }\n </span>\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n}\n</div>\n\n@if(AllowNew || AllowEdit) {\n <mj-entity-form-dialog #entityForm\n [Record]=\"editOrNewRecord\"\n [SectionName]=\"EditSectionName\"\n Mode=\"section\"\n [Visible]=\"showEditOrNewRecordForm\"\n [AutoRevertOnCancel]=\"true\"\n [HandleSave]=\"true\"\n [Width]=\"550\"\n [Height]=\"450\"\n (DialogClosed)=\"onEditOrNewRecordFormClosed($event)\">\n </mj-entity-form-dialog>\n}\n\n@if(deleteRecordDialogVisible && AllowDelete) {\n <mj-dialog\n [Visible]=\"true\"\n [Title]=\"'Delete ' + EntityName + '?'\"\n [Width]=\"450\"\n [Height]=\"200\"\n (Close)=\"closeDeleteDialog('No')\" >\n <div>\n Are you sure you want to delete '{{getRecordName(deleteRecordItem!)}}'?\n </div>\n <mj-dialog-actions>\n <button mjButton variant=\"primary\" (click)=\"closeDeleteDialog('Yes')\">Yes</button>\n <button mjButton (click)=\"closeDeleteDialog('No')\">No</button>\n </mj-dialog-actions>\n </mj-dialog>\n}\n\n@if(customActionDialogVisible && AllowCustomAction) {\n <mj-dialog\n [Visible]=\"true\"\n [Title]=\"CustomActionDialogTitle\"\n [Width]=\"450\"\n [Height]=\"200\"\n (Close)=\"closeCustomActionDialog('No')\" >\n <div>\n {{ CustomActionDialogMessage.replace('{{recordName}}', getRecordName(customActionItem!)) }}\n @if(CustomActionDialogInfo) {\n <p>{{ CustomActionDialogInfo }}</p>\n }\n </div>\n <mj-dialog-actions>\n <button mjButton variant=\"primary\" (click)=\"closeCustomActionDialog('Yes')\">Yes</button>\n <button mjButton (click)=\"closeCustomActionDialog('No')\">No</button>\n </mj-dialog-actions>\n </mj-dialog>\n}\n"]}
1
+ {"version":3,"file":"simple-record-list.component.js","sourceRoot":"","sources":["../../../src/lib/simple-record-list/simple-record-list.component.ts","../../../src/lib/simple-record-list/simple-record-list.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, Input, EventEmitter, Output } from '@angular/core';\n\nimport { BaseEntity, Metadata, RunView } from '@memberjunction/core';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\n \n \nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\n@Component({\n standalone: false,\n selector: 'mj-simple-record-list',\n templateUrl: './simple-record-list.component.html',\n styleUrls: ['./simple-record-list.component.css']\n})\nexport class SimpleRecordListComponent extends BaseAngularComponent implements OnInit {\n /**\n * Name of the entity to display records for.\n */\n @Input() EntityName: string = '';\n /**\n * List of columns to display in the grid. If empty and the entity has > 10 columns, those columns marked as DefaultInView=1 will be used, otherwise the first 10 columns will be used.\n */\n @Input() Columns: string[] = [];\n /**\n * Name of the column to sort by. If empty, no sorting is done.\n */\n @Input() SortBy: string = '';\n /**\n * If true, the delete button will be shown for each record.\n */\n @Input() AllowDelete: boolean = true;\n /**\n * If true, the new button will be shown.\n */\n @Input() AllowNew: boolean = true;\n /**\n * If true, the edit button will be shown for each record.\n */\n @Input() AllowEdit: boolean = true;\n /**\n * If true, a custom action button will be shown for each record.\n */\n @Input() AllowCustomAction: boolean = false;\n /**\n * The CSS class for the custom action button icon (e.g. 'fa-user-lock')\n */\n @Input() CustomActionIcon: string = '';\n /**\n * A function that returns the appropriate icon based on the record\n * Signature: (record: BaseEntity) => string\n * If provided, overrides CustomActionIcon\n */\n @Input() CustomActionIconFunction: ((record: BaseEntity) => string) | null = null;\n /**\n * Tooltip text for the custom action button\n */\n @Input() CustomActionTooltip: string = '';\n /**\n * A function that returns the appropriate tooltip text based on the record\n * Signature: (record: BaseEntity) => string\n * If provided, overrides CustomActionTooltip\n */\n @Input() CustomActionTooltipFunction: ((record: BaseEntity) => string) | null = null;\n /**\n * Title for the custom action confirmation dialog\n */\n @Input() CustomActionDialogTitle: string = 'Confirm Action';\n /**\n * Message for the custom action confirmation dialog\n */\n @Input() CustomActionDialogMessage: string = 'Are you sure you want to perform this action?';\n /**\n * Optional additional information for the custom action confirmation dialog\n */\n @Input() CustomActionDialogInfo: string = '';\n /**\n * If AllowEdit or AllowNew is true, this is the section name to display for editing a new or existing record.\n */\n @Input() EditSectionName: string = 'details';\n\n @Output() RecordSelected = new EventEmitter<BaseEntity>();\n @Output() RecordEdited = new EventEmitter<BaseEntity>();\n @Output() RecordCreated = new EventEmitter<BaseEntity>();\n @Output() CustomActionClicked = new EventEmitter<BaseEntity>();\n @Output() CustomActionConfirmed = new EventEmitter<BaseEntity>();\n\n public isLoading: boolean = false;\n public records: BaseEntity[] = [];\n\n constructor() {\n super();\n }\n \n ngOnInit(): void {\n this.Refresh()\n }\n\n async Refresh() { \n this.isLoading = true\n\n const md = this.ProviderToUse;\n if (this.Columns.length === 0) {\n // populate this by default by taking all columns if entity has < 10 columns, otherwise include columns that have DefaultInView=1, and if we have no columns with DefaultInView=1, then include the first 10 columns\n const e = md.Entities.find(e => e.Name === this.EntityName);\n if (e) {\n if (e.Fields.length < 10)\n this.Columns = e.Fields.map(f => f.Name);\n else {\n const defaultInViewColumns = e.Fields.filter(c => c.DefaultInView);\n if (defaultInViewColumns.length > 0)\n this.Columns = defaultInViewColumns.map(f => f.Name);\n else\n this.Columns = e.Fields.slice(0, 10).map(f => f.Name);\n }\n }\n }\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result = await rv.RunView({\n EntityName: this.EntityName,\n ResultType: 'entity_object'\n })\n if (result.Success) {\n this.records = result.Results;\n if (this.SortBy && this.SortBy.trim().length > 0) {\n this.records.sort((a, b) => a.Get(this.SortBy).localeCompare(b.Get(this.SortBy)));\n }\n }\n else {\n throw new Error(\"Error loading records: \" + result.ErrorMessage)\n }\n this.isLoading = false\n }\n\n public selectRecord(event: MouseEvent | undefined, r: BaseEntity) {\n if (event)\n event.stopPropagation(); // prevent row from getting click\n\n this.RecordSelected.emit(r);\n }\n\n public deleteRecordDialogVisible: boolean = false;\n public customActionDialogVisible: boolean = false;\n public deleteRecordItem!: BaseEntity | null;\n public customActionItem!: BaseEntity | undefined;\n \n public async deleteRecord(event: MouseEvent, r: BaseEntity) {\n // confirm with the user first\n this.deleteRecordItem = r;\n this.deleteRecordDialogVisible = true;\n if (event)\n event.stopPropagation(); // prevent row from getting click\n }\n\n public async performCustomAction(event: MouseEvent, r: BaseEntity) {\n // first emit the clicked event to allow the parent to react\n this.CustomActionClicked.emit(r);\n \n // confirm with the user\n this.customActionItem = r;\n this.customActionDialogVisible = true;\n if (event)\n event.stopPropagation(); // prevent row from getting click\n }\n \n /**\n * Gets the custom action icon for a record, using the function if provided, otherwise the static icon\n */\n public getCustomActionIcon(record: BaseEntity): string {\n if (this.CustomActionIconFunction) {\n return this.CustomActionIconFunction(record);\n }\n return this.CustomActionIcon;\n }\n \n /**\n * Gets the custom action tooltip for a record, using the function if provided, otherwise the static tooltip\n */\n public getCustomActionTooltip(record: BaseEntity): string {\n if (this.CustomActionTooltipFunction) {\n return this.CustomActionTooltipFunction(record);\n }\n return this.CustomActionTooltip;\n }\n\n public async closeCustomActionDialog(result: 'Yes' | 'No') {\n this.customActionDialogVisible = false;\n if (result === 'Yes') {\n // emit the event so the parent can handle the action\n this.CustomActionConfirmed.emit(this.customActionItem);\n }\n this.customActionItem = undefined;\n }\n\n public async closeDeleteDialog(result: 'Yes' | 'No') {\n // if the user confirms, delete the record\n this.deleteRecordDialogVisible = false;\n if (result === 'Yes') {\n if (!await this.deleteRecordItem!.Delete()) {\n // show an error message\n const errorMessage = this.deleteRecordItem!.LatestResult.CompleteMessage;\n MJNotificationService.Instance.CreateSimpleNotification('Error deleting record: ' + errorMessage, 'error', 3000);\n }\n else \n this.Refresh(); // refresh the list\n }\n this.deleteRecordItem = null;\n }\n\n public editOrNewRecord!: BaseEntity;\n public showEditOrNewRecordForm: boolean = false;\n public recordMode: 'new' | 'edit' = 'new';\n public async createNewRecord() {\n // attempt to create a new record and if success, navigate to the new record\n const md = this.ProviderToUse;\n this.editOrNewRecord = await md.GetEntityObject(this.EntityName);\n if (this.editOrNewRecord) {\n this.editOrNewRecord.NewRecord();\n this.recordMode = 'new';\n this.showEditOrNewRecordForm = true;\n }\n }\n\n public async editRecord(event: MouseEvent, r: BaseEntity) {\n this.editOrNewRecord = r;\n this.recordMode = 'edit';\n this.showEditOrNewRecordForm = true;\n if (event)\n event.stopPropagation(); // prevent row from getting click\n }\n\n public async onEditOrNewRecordFormClosed(result: 'Save' | 'Cancel') {\n if (!this.editOrNewRecord)\n return; // this can happen if the user closes the form before the record is loaded\n\n this.showEditOrNewRecordForm = false;\n \n if (result === 'Save') {\n // the dialog already saved the record, just check to make sure it was saved and if so, navigate\n if (this.editOrNewRecord.IsSaved) {\n if (this.recordMode === 'edit')\n this.RecordEdited.emit(this.editOrNewRecord);\n else\n this.RecordCreated.emit(this.editOrNewRecord);\n\n // refresh our grid now\n await this.Refresh();\n }\n else\n throw new Error('Record was not saved');\n }\n }\n\n public getRecordName(r: BaseEntity): string {\n // check to see if we have any columns in the entity that have IsNameField = 1, the fall back from there is to look for a column named \"Name\", and if that doesn't work we return the primary key(s)\n const md = this.ProviderToUse;\n const e = md.Entities.find(e => e.Name === this.EntityName);\n if (!e)\n throw new Error('Entity not found: ' + this.EntityName);\n\n const nameField = e.Fields.find(c => c.IsNameField);\n if (nameField)\n return r.Get(nameField.Name);\n else {\n const nameField = e.Fields.find(c => c.Name === 'Name');\n if (nameField)\n return r.Get(\"Name\");\n else {\n // iterate through all primary keys and form a comma separated list\n const pkString = r.PrimaryKeys.map(pk => r.Get(pk.Name)).join(', ');\n return \"Record: \" + pkString;\n }\n }\n }\n}\n","<div class=\"wrapper scrollable\">\n @if(isLoading) {\n <div>\n <mj-loading [showText]=\"false\" size=\"medium\"></mj-loading>\n </div>\n }\n @else {\n <div class=\"vertical-full-width\">\n @if(AllowNew) {\n <button mjButton (click)=\"createNewRecord()\"><span class=\"fa-solid fa-plus\"></span> New</button>\n }\n <table class=\"grid\">\n <thead class=\"sticky-header\">\n <tr>\n @for (c of Columns; track c) {\n <th>\n {{ c }}\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @for (r of records; track r) {\n <tr (click)=\"selectRecord(undefined, r)\">\n @for (c of Columns; track c; let i = $index) {\n <td>\n <span>{{ r.Get(c) }}</span>\n @if(i === 0 && (AllowDelete || AllowEdit)) {\n <span>\n @if (AllowEdit) {\n <span class=\"fa-solid fa-pen-to-square icon\" (click)=\"editRecord($event, r)\" title=\"Edit\"></span>\n }\n @if (AllowCustomAction) {\n <span\n class=\"fa-solid {{getCustomActionIcon(r)}} icon\"\n (click)=\"performCustomAction($event, r)\"\n title=\"{{getCustomActionTooltip(r)}}\"\n ></span>\n }\n @if (AllowDelete) {\n <span class=\"fa-solid fa-trash-can icon\" (click)=\"deleteRecord($event, r)\" title=\"Delete\"></span>\n }\n </span>\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n}\n</div>\n\n@if(AllowNew || AllowEdit) {\n <mj-entity-form-dialog #entityForm\n [Record]=\"editOrNewRecord\"\n [SectionName]=\"EditSectionName\"\n Mode=\"section\"\n [Visible]=\"showEditOrNewRecordForm\"\n [AutoRevertOnCancel]=\"true\"\n [HandleSave]=\"true\"\n [Width]=\"550\"\n [Height]=\"450\"\n (DialogClosed)=\"onEditOrNewRecordFormClosed($event)\">\n </mj-entity-form-dialog>\n}\n\n@if(deleteRecordDialogVisible && AllowDelete) {\n <mj-dialog\n [Visible]=\"true\"\n [Title]=\"'Delete ' + EntityName + '?'\"\n [Width]=\"450\"\n [Height]=\"200\"\n (Close)=\"closeDeleteDialog('No')\" >\n <div>\n Are you sure you want to delete '{{getRecordName(deleteRecordItem!)}}'?\n </div>\n <mj-dialog-actions>\n <button mjButton variant=\"primary\" (click)=\"closeDeleteDialog('Yes')\">Yes</button>\n <button mjButton (click)=\"closeDeleteDialog('No')\">No</button>\n </mj-dialog-actions>\n </mj-dialog>\n}\n\n@if(customActionDialogVisible && AllowCustomAction) {\n <mj-dialog\n [Visible]=\"true\"\n [Title]=\"CustomActionDialogTitle\"\n [Width]=\"450\"\n [Height]=\"200\"\n (Close)=\"closeCustomActionDialog('No')\" >\n <div>\n {{ CustomActionDialogMessage.replace('{{recordName}}', getRecordName(customActionItem!)) }}\n @if(CustomActionDialogInfo) {\n <p>{{ CustomActionDialogInfo }}</p>\n }\n </div>\n <mj-dialog-actions>\n <button mjButton variant=\"primary\" (click)=\"closeCustomActionDialog('Yes')\">Yes</button>\n <button mjButton (click)=\"closeCustomActionDialog('No')\">No</button>\n </mj-dialog-actions>\n </mj-dialog>\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@memberjunction/ng-simple-record-list",
3
- "version": "5.30.1",
3
+ "version": "5.31.0",
4
4
  "description": "MemberJunction: Very simple and reusable Angular component for displaying, editing, creating and deleting records in any entity",
5
5
  "main": "./dist/public-api.js",
6
6
  "typings": "./dist/public-api.d.ts",
@@ -25,14 +25,15 @@
25
25
  "@angular/router": "21.1.3"
26
26
  },
27
27
  "dependencies": {
28
- "@memberjunction/core": "5.30.1",
29
- "@memberjunction/core-entities": "5.30.1",
30
- "@memberjunction/global": "5.30.1",
31
- "@memberjunction/ng-container-directives": "5.30.1",
32
- "@memberjunction/ng-entity-form-dialog": "5.30.1",
33
- "@memberjunction/ng-notifications": "5.30.1",
34
- "@memberjunction/ng-shared-generic": "5.30.1",
35
- "@memberjunction/ng-ui-components": "5.30.1",
28
+ "@memberjunction/core": "5.31.0",
29
+ "@memberjunction/core-entities": "5.31.0",
30
+ "@memberjunction/global": "5.31.0",
31
+ "@memberjunction/ng-base-types": "5.31.0",
32
+ "@memberjunction/ng-container-directives": "5.31.0",
33
+ "@memberjunction/ng-entity-form-dialog": "5.31.0",
34
+ "@memberjunction/ng-notifications": "5.31.0",
35
+ "@memberjunction/ng-shared-generic": "5.31.0",
36
+ "@memberjunction/ng-ui-components": "5.31.0",
36
37
  "tslib": "^2.8.1"
37
38
  },
38
39
  "sideEffects": false,