@memberjunction/ng-find-record 5.30.1 → 5.32.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,8 +1,9 @@
1
1
  import { EventEmitter, OnDestroy, OnInit } from '@angular/core';
2
2
  import { BaseEntity, EntityFieldInfo } from '@memberjunction/core';
3
+ import { BaseAngularComponent } from '@memberjunction/ng-base-types';
3
4
  import { ColDef, GridReadyEvent, RowSelectionOptions, SelectionChangedEvent, type Theme } from 'ag-grid-community';
4
5
  import * as i0 from "@angular/core";
5
- export declare class FindRecordComponent implements OnInit, OnDestroy {
6
+ export declare class FindRecordComponent extends BaseAngularComponent implements OnInit, OnDestroy {
6
7
  /**
7
8
  * The name of the entity to show records for.
8
9
  */
@@ -1 +1 @@
1
- {"version":3,"file":"find-record.component.d.ts","sourceRoot":"","sources":["../../src/lib/find-record.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,YAAY,EAAU,SAAS,EAAE,MAAM,EAAU,MAAM,eAAe,CAAC;AAC5F,OAAO,EAAE,UAAU,EAAE,eAAe,EAA2C,MAAM,sBAAsB,CAAC;AAG5G,OAAO,EACL,MAAM,EACN,cAAc,EAId,mBAAmB,EACnB,qBAAqB,EAGrB,KAAK,KAAK,EACX,MAAM,mBAAmB,CAAC;;AAK3B,qBAMa,mBAAoB,YAAW,MAAM,EAAE,SAAS;IAC3D;;OAEG;IACM,UAAU,EAAE,MAAM,CAAM;IAEjC;;OAEG;IACa,aAAa,EAAE,eAAe,EAAE,CAAM;IAEtD;;OAEG;IACa,kBAAkB,EAAE,MAAM,CAAO;IAGjD;;OAEG;IACO,gBAAgB,oCAAkC;IAErD,UAAU,EAAE,MAAM,CAAM;IACxB,OAAO,EAAE,UAAU,EAAE,CAAM;IAE3B,OAAO,UAAS;IAChB,YAAY,EAAE,OAAO,CAAS;IACrC,OAAO,CAAC,UAAU,CAAyB;IAE3C,OAAO,CAAC,aAAa,CAAyB;IAC9C,OAAO,CAAC,kBAAkB,CAA2B;IAG9C,UAAU,EAAE,MAAM,EAAE,CAAM;IAC1B,aAAa,EAAE,MAAM,CAI1B;IACK,kBAAkB,EAAE,mBAAmB,CAI5C;IACK,SAAS,EAAE,KAAK,CAA6C;IACpE,OAAO,CAAC,OAAO,CAAwB;IAGvC,QAAQ;IAyCR,WAAW;IAQX,MAAM;IAIN,kBAAkB,CAAC,IAAI,EAAE,MAAM;IAKxB,iBAAiB,CAAC,KAAK,EAAE,qBAAqB;IAO9C,WAAW,CAAC,KAAK,EAAE,cAAc;IAIxC,OAAO,CAAC,eAAe;cAQP,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;yCA7HxD,mBAAmB;2CAAnB,mBAAmB;CA8I/B"}
1
+ {"version":3,"file":"find-record.component.d.ts","sourceRoot":"","sources":["../../src/lib/find-record.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,YAAY,EAAU,SAAS,EAAE,MAAM,EAAU,MAAM,eAAe,CAAC;AAC5F,OAAO,EAAE,UAAU,EAAE,eAAe,EAAiC,MAAM,sBAAsB,CAAC;AAClG,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAGrE,OAAO,EACL,MAAM,EACN,cAAc,EAId,mBAAmB,EACnB,qBAAqB,EAGrB,KAAK,KAAK,EACX,MAAM,mBAAmB,CAAC;;AAK3B,qBAMa,mBAAoB,SAAQ,oBAAqB,YAAW,MAAM,EAAE,SAAS;IACxF;;OAEG;IACM,UAAU,EAAE,MAAM,CAAM;IAEjC;;OAEG;IACa,aAAa,EAAE,eAAe,EAAE,CAAM;IAEtD;;OAEG;IACa,kBAAkB,EAAE,MAAM,CAAO;IAGjD;;OAEG;IACO,gBAAgB,oCAAkC;IAErD,UAAU,EAAE,MAAM,CAAM;IACxB,OAAO,EAAE,UAAU,EAAE,CAAM;IAE3B,OAAO,UAAS;IAChB,YAAY,EAAE,OAAO,CAAS;IACrC,OAAO,CAAC,UAAU,CAAyB;IAE3C,OAAO,CAAC,aAAa,CAAyB;IAC9C,OAAO,CAAC,kBAAkB,CAA2B;IAG9C,UAAU,EAAE,MAAM,EAAE,CAAM;IAC1B,aAAa,EAAE,MAAM,CAI1B;IACK,kBAAkB,EAAE,mBAAmB,CAI5C;IACK,SAAS,EAAE,KAAK,CAA6C;IACpE,OAAO,CAAC,OAAO,CAAwB;IAGvC,QAAQ;IAyCR,WAAW;IAQX,MAAM;IAIN,kBAAkB,CAAC,IAAI,EAAE,MAAM;IAKxB,iBAAiB,CAAC,KAAK,EAAE,qBAAqB;IAO9C,WAAW,CAAC,KAAK,EAAE,cAAc;IAIxC,OAAO,CAAC,eAAe;cAQP,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;yCA7HxD,mBAAmB;2CAAnB,mBAAmB;CA8I/B"}
@@ -1,5 +1,6 @@
1
1
  import { Component, EventEmitter, Input, Output } from '@angular/core';
2
- import { LogError, Metadata, RunView } from '@memberjunction/core';
2
+ import { LogError, RunView } from '@memberjunction/core';
3
+ import { BaseAngularComponent } from '@memberjunction/ng-base-types';
3
4
  import { Subject } from 'rxjs';
4
5
  import { debounceTime, distinctUntilChanged, switchMap } from 'rxjs/operators';
5
6
  import { ModuleRegistry, AllCommunityModule, themeAlpine, colorSchemeVariable } from 'ag-grid-community';
@@ -29,7 +30,7 @@ function FindRecordComponent_Conditional_6_Template(rf, ctx) { if (rf & 1) {
29
30
  } }
30
31
  // Register AG Grid modules
31
32
  ModuleRegistry.registerModules([AllCommunityModule]);
32
- export class FindRecordComponent {
33
+ export class FindRecordComponent extends BaseAngularComponent {
33
34
  /**
34
35
  * The name of the entity to show records for.
35
36
  */
@@ -69,7 +70,7 @@ export class FindRecordComponent {
69
70
  gridApi = null;
70
71
  ngOnInit() {
71
72
  // Fetch the entity metadata based on EntityName
72
- const md = new Metadata();
73
+ const md = this.ProviderToUse;
73
74
  this.entityInfo = md.EntityByName(this.EntityName);
74
75
  if (!this.entityInfo) {
75
76
  LogError(`Entity ${this.EntityName} not found`);
@@ -146,8 +147,8 @@ export class FindRecordComponent {
146
147
  throw new Error(errorMessage);
147
148
  }
148
149
  }
149
- static ɵfac = function FindRecordComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || FindRecordComponent)(); };
150
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: FindRecordComponent, selectors: [["mj-find-record"]], inputs: { EntityName: "EntityName", DisplayFields: "DisplayFields", SearchDebounceTime: "SearchDebounceTime" }, outputs: { OnRecordSelected: "OnRecordSelected" }, standalone: false, decls: 7, vars: 4, consts: [["type", "text", "placeholder", "Start typing to search...", 1, "mj-input", "find-textbox", 3, "ngModelChange", "ngModel"], ["mjButton", "", "variant", "primary", 1, "find-button", 3, "click"], [1, "find-grid-wrapper"], [1, "find-grid", 3, "selectionChanged", "gridReady", "theme", "rowData", "columnDefs", "defaultColDef", "rowSelection"]], template: function FindRecordComponent_Template(rf, ctx) { if (rf & 1) {
150
+ static ɵfac = /*@__PURE__*/ (() => { let ɵFindRecordComponent_BaseFactory; return function FindRecordComponent_Factory(__ngFactoryType__) { return (ɵFindRecordComponent_BaseFactory || (ɵFindRecordComponent_BaseFactory = i0.ɵɵgetInheritedFactory(FindRecordComponent)))(__ngFactoryType__ || FindRecordComponent); }; })();
151
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: FindRecordComponent, selectors: [["mj-find-record"]], inputs: { EntityName: "EntityName", DisplayFields: "DisplayFields", SearchDebounceTime: "SearchDebounceTime" }, outputs: { OnRecordSelected: "OnRecordSelected" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 7, vars: 4, consts: [["type", "text", "placeholder", "Start typing to search...", 1, "mj-input", "find-textbox", 3, "ngModelChange", "ngModel"], ["mjButton", "", "variant", "primary", 1, "find-button", 3, "click"], [1, "find-grid-wrapper"], [1, "find-grid", 3, "selectionChanged", "gridReady", "theme", "rowData", "columnDefs", "defaultColDef", "rowSelection"]], template: function FindRecordComponent_Template(rf, ctx) { if (rf & 1) {
151
152
  i0.ɵɵelementStart(0, "div")(1, "input", 0);
152
153
  i0.ɵɵtwoWayListener("ngModelChange", function FindRecordComponent_Template_input_ngModelChange_1_listener($event) { i0.ɵɵtwoWayBindingSet(ctx.searchTerm, $event) || (ctx.searchTerm = $event); return $event; });
153
154
  i0.ɵɵlistener("ngModelChange", function FindRecordComponent_Template_input_ngModelChange_1_listener($event) { return ctx.onSearchTermChange($event); });
@@ -183,5 +184,5 @@ export class FindRecordComponent {
183
184
  }], OnRecordSelected: [{
184
185
  type: Output
185
186
  }] }); })();
186
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(FindRecordComponent, { className: "FindRecordComponent", filePath: "src/lib/find-record.component.ts", lineNumber: 27 }); })();
187
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(FindRecordComponent, { className: "FindRecordComponent", filePath: "src/lib/find-record.component.ts", lineNumber: 28 }); })();
187
188
  //# sourceMappingURL=find-record.component.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"find-record.component.js","sourceRoot":"","sources":["../../src/lib/find-record.component.ts","../../src/lib/find-record.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\nimport { BaseEntity, EntityFieldInfo, EntityInfo, LogError, Metadata, RunView } from '@memberjunction/core';\nimport { Subject, Subscription } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, switchMap } from 'rxjs/operators';\nimport {\n ColDef,\n GridReadyEvent,\n GridApi,\n ModuleRegistry,\n AllCommunityModule,\n RowSelectionOptions,\n SelectionChangedEvent,\n themeAlpine,\n colorSchemeVariable,\n type Theme\n} from 'ag-grid-community';\n\n// Register AG Grid modules\nModuleRegistry.registerModules([AllCommunityModule]);\n \n@Component({\n standalone: false,\n selector: 'mj-find-record',\n templateUrl: './find-record.component.html',\n styleUrls: ['./find-record.component.css']\n})\nexport class FindRecordComponent implements OnInit, OnDestroy {\n /**\n * The name of the entity to show records for.\n */\n @Input() EntityName: string = '';\n\n /**\n * Optional, list of fields to be displayed in the grid of search results, if not specified, the default fields will be displayed\n */\n @Input() public DisplayFields: EntityFieldInfo[] = []; // Fields to display in the grid\n\n /**\n * Optional, the number of milliseconds to wait after the last keypress before triggering a search. Default is 300ms\n */\n @Input() public SearchDebounceTime: number = 300; // Debounce time for search\n\n\n /**\n * When a record is selected, this event is emitted with the selected record\n */\n @Output() OnRecordSelected = new EventEmitter<BaseEntity>();\n\n public searchTerm: string = ''; // User search term\n public records: BaseEntity[] = []; // Store search results\n\n public loading = false; // Loading state for search\n public searchHasRun: boolean = false; // has a search been run\n private entityInfo: EntityInfo | undefined; // Entity metadata\n\n private searchSubject = new Subject<string>(); // Subject to emit search term changes\n private searchSubscription: Subscription | undefined;\n\n // AG Grid configuration\n public ColumnDefs: ColDef[] = [];\n public DefaultColDef: ColDef = {\n sortable: true,\n resizable: true,\n filter: false\n };\n public RowSelectionConfig: RowSelectionOptions = {\n mode: 'singleRow',\n checkboxes: false,\n enableClickSelection: true\n };\n public GridTheme: Theme = themeAlpine.withPart(colorSchemeVariable);\n private gridApi: GridApi | null = null;\n\n \n ngOnInit() {\n // Fetch the entity metadata based on EntityName\n const md = new Metadata();\n this.entityInfo = md.EntityByName(this.EntityName);\n if (!this.entityInfo) {\n LogError(`Entity ${this.EntityName} not found`);\n return;\n }\n\n // Set display fields (you can adjust the logic based on your entity structure)\n if (this.DisplayFields.length === 0) {\n this.DisplayFields = this.entityInfo.Fields.filter(\n (field: EntityFieldInfo) => field.DefaultInView || field.IsPrimaryKey || field.IsNameField || field.IncludeInUserSearchAPI\n );\n }\n\n // Build AG Grid column definitions from display fields\n this.ColumnDefs = this.buildColumnDefs();\n\n // Subscribe to the searchSubject with debounce\n this.searchSubscription = this.searchSubject.pipe(\n debounceTime(this.SearchDebounceTime), // Delay search execution by 300ms\n distinctUntilChanged(), // Only proceed if the search term has changed\n switchMap(term => {\n this.loading = true;\n return this.doSearch(term);\n })\n ).subscribe({\n next: (results: BaseEntity[]) => {\n this.records = results;\n this.loading = false;\n this.searchHasRun = true;\n },\n error: (error) => {\n LogError(error.message);\n this.loading = false;\n this.searchHasRun = true;\n }\n }); \n }\n\n ngOnDestroy() {\n // Cleanup the subscription\n if (this.searchSubscription) {\n this.searchSubscription.unsubscribe();\n }\n }\n\n\n onFind() {\n this.searchSubject.next(this.searchTerm); // Trigger the debounced search\n } \n\n onSearchTermChange(term: string) {\n this.searchTerm = term;\n this.searchSubject.next(term); // Emit the new search term\n }\n\n public onSelectionChange(event: SelectionChangedEvent) {\n const selectedRows = event.api.getSelectedRows();\n if (selectedRows.length > 0) {\n this.OnRecordSelected.emit(selectedRows[0]);\n }\n }\n\n public onGridReady(event: GridReadyEvent) {\n this.gridApi = event.api;\n }\n\n private buildColumnDefs(): ColDef[] {\n return this.DisplayFields.map((field: EntityFieldInfo) => ({\n field: field.Name,\n headerName: field.DisplayNameOrName\n }));\n }\n\n // Stub function for simulating a database search (replace with actual search logic)\n protected async doSearch(searchTerm: string): Promise<BaseEntity[]> {\n const rv = new RunView();\n const result = await rv.RunView({\n EntityName: this.EntityName, \n UserSearchString: searchTerm, \n ResultType: 'entity_object'\n });\n if (result && result.Success) {\n return result.Results;\n this.searchHasRun = true;\n }\n else {\n const errorMessage = `Error searching for ${this.EntityName}: ${result.ErrorMessage}`;\n LogError(errorMessage);\n throw new Error(errorMessage);\n }\n } \n}\n","<div>\n <input\n type=\"text\"\n class=\"mj-input find-textbox\"\n placeholder=\"Start typing to search...\"\n [(ngModel)]=\"searchTerm\"\n (ngModelChange)=\"onSearchTermChange($event)\" />\n <button mjButton variant=\"primary\" class=\"find-button\" (click)=\"onFind()\">Find</button>\n\n @if (loading) {\n <div>Searching...</div>\n }\n @if (!loading && records.length > 0) {\n <div class=\"find-grid-wrapper\">\n <ag-grid-angular\n class=\"find-grid\"\n [theme]=\"GridTheme\"\n [rowData]=\"records\"\n [columnDefs]=\"ColumnDefs\"\n [defaultColDef]=\"DefaultColDef\"\n [rowSelection]=\"RowSelectionConfig\"\n (selectionChanged)=\"onSelectionChange($event)\"\n (gridReady)=\"onGridReady($event)\">\n </ag-grid-angular>\n </div>\n }\n @if (!loading && records.length === 0 && searchHasRun) {\n <div>No records found.</div>\n }\n</div>\n"]}
1
+ {"version":3,"file":"find-record.component.js","sourceRoot":"","sources":["../../src/lib/find-record.component.ts","../../src/lib/find-record.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\nimport { BaseEntity, EntityFieldInfo, EntityInfo, LogError, RunView } from '@memberjunction/core';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { Subject, Subscription } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, switchMap } from 'rxjs/operators';\nimport {\n ColDef,\n GridReadyEvent,\n GridApi,\n ModuleRegistry,\n AllCommunityModule,\n RowSelectionOptions,\n SelectionChangedEvent,\n themeAlpine,\n colorSchemeVariable,\n type Theme\n} from 'ag-grid-community';\n\n// Register AG Grid modules\nModuleRegistry.registerModules([AllCommunityModule]);\n \n@Component({\n standalone: false,\n selector: 'mj-find-record',\n templateUrl: './find-record.component.html',\n styleUrls: ['./find-record.component.css']\n})\nexport class FindRecordComponent extends BaseAngularComponent implements OnInit, OnDestroy {\n /**\n * The name of the entity to show records for.\n */\n @Input() EntityName: string = '';\n\n /**\n * Optional, list of fields to be displayed in the grid of search results, if not specified, the default fields will be displayed\n */\n @Input() public DisplayFields: EntityFieldInfo[] = []; // Fields to display in the grid\n\n /**\n * Optional, the number of milliseconds to wait after the last keypress before triggering a search. Default is 300ms\n */\n @Input() public SearchDebounceTime: number = 300; // Debounce time for search\n\n\n /**\n * When a record is selected, this event is emitted with the selected record\n */\n @Output() OnRecordSelected = new EventEmitter<BaseEntity>();\n\n public searchTerm: string = ''; // User search term\n public records: BaseEntity[] = []; // Store search results\n\n public loading = false; // Loading state for search\n public searchHasRun: boolean = false; // has a search been run\n private entityInfo: EntityInfo | undefined; // Entity metadata\n\n private searchSubject = new Subject<string>(); // Subject to emit search term changes\n private searchSubscription: Subscription | undefined;\n\n // AG Grid configuration\n public ColumnDefs: ColDef[] = [];\n public DefaultColDef: ColDef = {\n sortable: true,\n resizable: true,\n filter: false\n };\n public RowSelectionConfig: RowSelectionOptions = {\n mode: 'singleRow',\n checkboxes: false,\n enableClickSelection: true\n };\n public GridTheme: Theme = themeAlpine.withPart(colorSchemeVariable);\n private gridApi: GridApi | null = null;\n\n \n ngOnInit() {\n // Fetch the entity metadata based on EntityName\n const md = this.ProviderToUse;\n this.entityInfo = md.EntityByName(this.EntityName);\n if (!this.entityInfo) {\n LogError(`Entity ${this.EntityName} not found`);\n return;\n }\n\n // Set display fields (you can adjust the logic based on your entity structure)\n if (this.DisplayFields.length === 0) {\n this.DisplayFields = this.entityInfo.Fields.filter(\n (field: EntityFieldInfo) => field.DefaultInView || field.IsPrimaryKey || field.IsNameField || field.IncludeInUserSearchAPI\n );\n }\n\n // Build AG Grid column definitions from display fields\n this.ColumnDefs = this.buildColumnDefs();\n\n // Subscribe to the searchSubject with debounce\n this.searchSubscription = this.searchSubject.pipe(\n debounceTime(this.SearchDebounceTime), // Delay search execution by 300ms\n distinctUntilChanged(), // Only proceed if the search term has changed\n switchMap(term => {\n this.loading = true;\n return this.doSearch(term);\n })\n ).subscribe({\n next: (results: BaseEntity[]) => {\n this.records = results;\n this.loading = false;\n this.searchHasRun = true;\n },\n error: (error) => {\n LogError(error.message);\n this.loading = false;\n this.searchHasRun = true;\n }\n }); \n }\n\n ngOnDestroy() {\n // Cleanup the subscription\n if (this.searchSubscription) {\n this.searchSubscription.unsubscribe();\n }\n }\n\n\n onFind() {\n this.searchSubject.next(this.searchTerm); // Trigger the debounced search\n } \n\n onSearchTermChange(term: string) {\n this.searchTerm = term;\n this.searchSubject.next(term); // Emit the new search term\n }\n\n public onSelectionChange(event: SelectionChangedEvent) {\n const selectedRows = event.api.getSelectedRows();\n if (selectedRows.length > 0) {\n this.OnRecordSelected.emit(selectedRows[0]);\n }\n }\n\n public onGridReady(event: GridReadyEvent) {\n this.gridApi = event.api;\n }\n\n private buildColumnDefs(): ColDef[] {\n return this.DisplayFields.map((field: EntityFieldInfo) => ({\n field: field.Name,\n headerName: field.DisplayNameOrName\n }));\n }\n\n // Stub function for simulating a database search (replace with actual search logic)\n protected async doSearch(searchTerm: string): Promise<BaseEntity[]> {\n const rv = new RunView();\n const result = await rv.RunView({\n EntityName: this.EntityName, \n UserSearchString: searchTerm, \n ResultType: 'entity_object'\n });\n if (result && result.Success) {\n return result.Results;\n this.searchHasRun = true;\n }\n else {\n const errorMessage = `Error searching for ${this.EntityName}: ${result.ErrorMessage}`;\n LogError(errorMessage);\n throw new Error(errorMessage);\n }\n } \n}\n","<div>\n <input\n type=\"text\"\n class=\"mj-input find-textbox\"\n placeholder=\"Start typing to search...\"\n [(ngModel)]=\"searchTerm\"\n (ngModelChange)=\"onSearchTermChange($event)\" />\n <button mjButton variant=\"primary\" class=\"find-button\" (click)=\"onFind()\">Find</button>\n\n @if (loading) {\n <div>Searching...</div>\n }\n @if (!loading && records.length > 0) {\n <div class=\"find-grid-wrapper\">\n <ag-grid-angular\n class=\"find-grid\"\n [theme]=\"GridTheme\"\n [rowData]=\"records\"\n [columnDefs]=\"ColumnDefs\"\n [defaultColDef]=\"DefaultColDef\"\n [rowSelection]=\"RowSelectionConfig\"\n (selectionChanged)=\"onSelectionChange($event)\"\n (gridReady)=\"onGridReady($event)\">\n </ag-grid-angular>\n </div>\n }\n @if (!loading && records.length === 0 && searchHasRun) {\n <div>No records found.</div>\n }\n</div>\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@memberjunction/ng-find-record",
3
- "version": "5.30.1",
3
+ "version": "5.32.0",
4
4
  "description": "MemberJunction: Angular Component to allow a user to find a single record in any entity",
5
5
  "main": "./dist/public-api.js",
6
6
  "typings": "./dist/public-api.d.ts",
@@ -29,12 +29,13 @@
29
29
  "ag-grid-community": "^35.0.1"
30
30
  },
31
31
  "dependencies": {
32
- "@memberjunction/core": "5.30.1",
33
- "@memberjunction/core-entities": "5.30.1",
34
- "@memberjunction/global": "5.30.1",
35
- "@memberjunction/ng-container-directives": "5.30.1",
36
- "@memberjunction/ng-shared": "5.30.1",
37
- "@memberjunction/ng-ui-components": "5.30.1",
32
+ "@memberjunction/core": "5.32.0",
33
+ "@memberjunction/ng-base-types": "5.32.0",
34
+ "@memberjunction/core-entities": "5.32.0",
35
+ "@memberjunction/global": "5.32.0",
36
+ "@memberjunction/ng-container-directives": "5.32.0",
37
+ "@memberjunction/ng-shared": "5.32.0",
38
+ "@memberjunction/ng-ui-components": "5.32.0",
38
39
  "rxjs": "^7.8.2",
39
40
  "tslib": "^2.8.1"
40
41
  },