@memberjunction/ng-find-record 6.2.0-edge.0 → 6.2.0-edge.1
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.
|
@@ -20,10 +20,22 @@ export declare class FindRecordComponent extends BaseAngularComponent implements
|
|
|
20
20
|
* When a record is selected, this event is emitted with the selected record
|
|
21
21
|
*/
|
|
22
22
|
OnRecordSelected: EventEmitter<BaseEntity<unknown>>;
|
|
23
|
-
|
|
23
|
+
SearchTerm: string;
|
|
24
|
+
/** @deprecated Use {@link SearchTerm}. */
|
|
25
|
+
get searchTerm(): string;
|
|
26
|
+
/** @deprecated Use {@link SearchTerm}. */
|
|
27
|
+
set searchTerm(value: string);
|
|
24
28
|
records: BaseEntity[];
|
|
25
|
-
|
|
26
|
-
|
|
29
|
+
Loading: boolean;
|
|
30
|
+
/** @deprecated Use {@link Loading}. */
|
|
31
|
+
get loading(): boolean;
|
|
32
|
+
/** @deprecated Use {@link Loading}. */
|
|
33
|
+
set loading(value: boolean);
|
|
34
|
+
SearchHasRun: boolean;
|
|
35
|
+
/** @deprecated Use {@link SearchHasRun}. */
|
|
36
|
+
get searchHasRun(): boolean;
|
|
37
|
+
/** @deprecated Use {@link SearchHasRun}. */
|
|
38
|
+
set searchHasRun(value: boolean);
|
|
27
39
|
private entityInfo;
|
|
28
40
|
private searchSubject;
|
|
29
41
|
private searchSubscription;
|
|
@@ -34,9 +46,17 @@ export declare class FindRecordComponent extends BaseAngularComponent implements
|
|
|
34
46
|
private gridApi;
|
|
35
47
|
ngOnInit(): void;
|
|
36
48
|
ngOnDestroy(): void;
|
|
49
|
+
OnFind(): void;
|
|
50
|
+
/** @deprecated Use {@link OnFind}. */
|
|
37
51
|
onFind(): void;
|
|
52
|
+
OnSearchTermChange(term: string): void;
|
|
53
|
+
/** @deprecated Use {@link OnSearchTermChange}. */
|
|
38
54
|
onSearchTermChange(term: string): void;
|
|
55
|
+
OnSelectionChange(event: SelectionChangedEvent): void;
|
|
56
|
+
/** @deprecated Use {@link OnSelectionChange}. */
|
|
39
57
|
onSelectionChange(event: SelectionChangedEvent): void;
|
|
58
|
+
OnGridReady(event: GridReadyEvent): void;
|
|
59
|
+
/** @deprecated Use {@link OnGridReady}. */
|
|
40
60
|
onGridReady(event: GridReadyEvent): void;
|
|
41
61
|
private buildColumnDefs;
|
|
42
62
|
protected doSearch(searchTerm: string): Promise<BaseEntity[]>;
|
|
@@ -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,EAAiC,MAAM,sBAAsB,CAAC;AAClG,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAIrE,OAAO,EACL,MAAM,EACN,cAAc,EAId,mBAAmB,EACnB,qBAAqB,EAErB,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;
|
|
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;AAIrE,OAAO,EACL,MAAM,EACN,cAAc,EAId,mBAAmB,EACnB,qBAAqB,EAErB,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;IAE/B,0CAA0C;IAC1C,IAAW,UAAU,IAAI,MAAM,CAE9B;IACD,0CAA0C;IAC1C,IAAW,UAAU,CAAC,KAAK,EAAE,MAAM,EAElC;IACM,OAAO,EAAE,UAAU,EAAE,CAAM;IAE3B,OAAO,UAAS;IAEvB,uCAAuC;IACvC,IAAW,OAAO,YAEjB;IACD,uCAAuC;IACvC,IAAW,OAAO,CAAC,KAAK,SAAA,EAEvB;IACM,YAAY,EAAE,OAAO,CAAS;IAErC,4CAA4C;IAC5C,IAAW,YAAY,IAAI,OAAO,CAEjC;IACD,4CAA4C;IAC5C,IAAW,YAAY,CAAC,KAAK,EAAE,OAAO,EAErC;IACD,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;IAGK,SAAS,EAAE,KAAK,CAAmD;IAC1E,OAAO,CAAC,OAAO,CAAwB;IAGvC,QAAQ;IAyCR,WAAW;IAQX,MAAM;IAIN,sCAAsC;IACtC,MAAM;IAIN,kBAAkB,CAAC,IAAI,EAAE,MAAM;IAK/B,kDAAkD;IAClD,kBAAkB,CAAC,IAAI,EAAE,MAAM;IAIxB,iBAAiB,CAAC,KAAK,EAAE,qBAAqB;IAOrD,iDAAiD;IAC1C,iBAAiB,CAAC,KAAK,EAAE,qBAAqB;IAI9C,WAAW,CAAC,KAAK,EAAE,cAAc;IAIxC,2CAA2C;IACpC,WAAW,CAAC,KAAK,EAAE,cAAc;IAIxC,OAAO,CAAC,eAAe;cAQP,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;yCA9KxD,mBAAmB;2CAAnB,mBAAmB;CA+L/B"}
|
|
@@ -48,10 +48,34 @@ export class FindRecordComponent extends BaseAngularComponent {
|
|
|
48
48
|
* When a record is selected, this event is emitted with the selected record
|
|
49
49
|
*/
|
|
50
50
|
OnRecordSelected = new EventEmitter();
|
|
51
|
-
|
|
51
|
+
SearchTerm = '';
|
|
52
|
+
/** @deprecated Use {@link SearchTerm}. */
|
|
53
|
+
get searchTerm() {
|
|
54
|
+
return this.SearchTerm;
|
|
55
|
+
}
|
|
56
|
+
/** @deprecated Use {@link SearchTerm}. */
|
|
57
|
+
set searchTerm(value) {
|
|
58
|
+
this.SearchTerm = value;
|
|
59
|
+
} // User search term
|
|
52
60
|
records = []; // Store search results
|
|
53
|
-
|
|
54
|
-
|
|
61
|
+
Loading = false;
|
|
62
|
+
/** @deprecated Use {@link Loading}. */
|
|
63
|
+
get loading() {
|
|
64
|
+
return this.Loading;
|
|
65
|
+
}
|
|
66
|
+
/** @deprecated Use {@link Loading}. */
|
|
67
|
+
set loading(value) {
|
|
68
|
+
this.Loading = value;
|
|
69
|
+
} // Loading state for search
|
|
70
|
+
SearchHasRun = false;
|
|
71
|
+
/** @deprecated Use {@link SearchHasRun}. */
|
|
72
|
+
get searchHasRun() {
|
|
73
|
+
return this.SearchHasRun;
|
|
74
|
+
}
|
|
75
|
+
/** @deprecated Use {@link SearchHasRun}. */
|
|
76
|
+
set searchHasRun(value) {
|
|
77
|
+
this.SearchHasRun = value;
|
|
78
|
+
} // has a search been run
|
|
55
79
|
entityInfo; // Entity metadata
|
|
56
80
|
searchSubject = new Subject(); // Subject to emit search term changes
|
|
57
81
|
searchSubscription;
|
|
@@ -89,18 +113,18 @@ export class FindRecordComponent extends BaseAngularComponent {
|
|
|
89
113
|
this.searchSubscription = this.searchSubject.pipe(debounceTime(this.SearchDebounceTime), // Delay search execution by 300ms
|
|
90
114
|
distinctUntilChanged(), // Only proceed if the search term has changed
|
|
91
115
|
switchMap(term => {
|
|
92
|
-
this.
|
|
116
|
+
this.Loading = true;
|
|
93
117
|
return this.doSearch(term);
|
|
94
118
|
})).subscribe({
|
|
95
119
|
next: (results) => {
|
|
96
120
|
this.records = results;
|
|
97
|
-
this.
|
|
98
|
-
this.
|
|
121
|
+
this.Loading = false;
|
|
122
|
+
this.SearchHasRun = true;
|
|
99
123
|
},
|
|
100
124
|
error: (error) => {
|
|
101
125
|
LogError(error.message);
|
|
102
|
-
this.
|
|
103
|
-
this.
|
|
126
|
+
this.Loading = false;
|
|
127
|
+
this.SearchHasRun = true;
|
|
104
128
|
}
|
|
105
129
|
});
|
|
106
130
|
}
|
|
@@ -110,22 +134,38 @@ export class FindRecordComponent extends BaseAngularComponent {
|
|
|
110
134
|
this.searchSubscription.unsubscribe();
|
|
111
135
|
}
|
|
112
136
|
}
|
|
137
|
+
OnFind() {
|
|
138
|
+
this.searchSubject.next(this.SearchTerm); // Trigger the debounced search
|
|
139
|
+
}
|
|
140
|
+
/** @deprecated Use {@link OnFind}. */
|
|
113
141
|
onFind() {
|
|
114
|
-
this.
|
|
142
|
+
return this.OnFind();
|
|
115
143
|
}
|
|
116
|
-
|
|
117
|
-
this.
|
|
144
|
+
OnSearchTermChange(term) {
|
|
145
|
+
this.SearchTerm = term;
|
|
118
146
|
this.searchSubject.next(term); // Emit the new search term
|
|
119
147
|
}
|
|
120
|
-
|
|
148
|
+
/** @deprecated Use {@link OnSearchTermChange}. */
|
|
149
|
+
onSearchTermChange(term) {
|
|
150
|
+
return this.OnSearchTermChange(term);
|
|
151
|
+
}
|
|
152
|
+
OnSelectionChange(event) {
|
|
121
153
|
const selectedRows = event.api.getSelectedRows();
|
|
122
154
|
if (selectedRows.length > 0) {
|
|
123
155
|
this.OnRecordSelected.emit(selectedRows[0]);
|
|
124
156
|
}
|
|
125
157
|
}
|
|
126
|
-
|
|
158
|
+
/** @deprecated Use {@link OnSelectionChange}. */
|
|
159
|
+
onSelectionChange(event) {
|
|
160
|
+
return this.OnSelectionChange(event);
|
|
161
|
+
}
|
|
162
|
+
OnGridReady(event) {
|
|
127
163
|
this.gridApi = event.api;
|
|
128
164
|
}
|
|
165
|
+
/** @deprecated Use {@link OnGridReady}. */
|
|
166
|
+
onGridReady(event) {
|
|
167
|
+
return this.OnGridReady(event);
|
|
168
|
+
}
|
|
129
169
|
buildColumnDefs() {
|
|
130
170
|
return this.DisplayFields.map((field) => ({
|
|
131
171
|
field: field.Name,
|
|
@@ -142,7 +182,7 @@ export class FindRecordComponent extends BaseAngularComponent {
|
|
|
142
182
|
});
|
|
143
183
|
if (result && result.Success) {
|
|
144
184
|
return result.Results;
|
|
145
|
-
this.
|
|
185
|
+
this.SearchHasRun = true;
|
|
146
186
|
}
|
|
147
187
|
else {
|
|
148
188
|
const errorMessage = `Error searching for ${this.EntityName}: ${result.ErrorMessage}`;
|
|
@@ -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, RunView } from '@memberjunction/core';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { MJ_AG_GRID_THEME_PARAMS } from '@memberjunction/ng-shared-generic';\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 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 // Themed from the shared --mj-* token params so this grid follows light/dark and\n // the org brand overlay, matching the main entity/query grids.\n public GridTheme: Theme = themeAlpine.withParams(MJ_AG_GRID_THEME_PARAMS);\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 = RunView.FromMetadataProvider(this.ProviderToUse);\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 { MJ_AG_GRID_THEME_PARAMS } from '@memberjunction/ng-shared-generic';\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 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 = '';\n\n /** @deprecated Use {@link SearchTerm}. */\n public get searchTerm(): string {\n return this.SearchTerm;\n }\n /** @deprecated Use {@link SearchTerm}. */\n public set searchTerm(value: string) {\n this.SearchTerm = value;\n } // User search term\n public records: BaseEntity[] = []; // Store search results\n\n public Loading = false;\n\n /** @deprecated Use {@link Loading}. */\n public get loading() {\n return this.Loading;\n }\n /** @deprecated Use {@link Loading}. */\n public set loading(value) {\n this.Loading = value;\n } // Loading state for search\n public SearchHasRun: boolean = false;\n\n /** @deprecated Use {@link SearchHasRun}. */\n public get searchHasRun(): boolean {\n return this.SearchHasRun;\n }\n /** @deprecated Use {@link SearchHasRun}. */\n public set searchHasRun(value: boolean) {\n this.SearchHasRun = value;\n } // 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 // Themed from the shared --mj-* token params so this grid follows light/dark and\n // the org brand overlay, matching the main entity/query grids.\n public GridTheme: Theme = themeAlpine.withParams(MJ_AG_GRID_THEME_PARAMS);\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 /** @deprecated Use {@link OnFind}. */\n onFind() {\n return this.OnFind();\n } \n\n OnSearchTermChange(term: string) {\n this.SearchTerm = term;\n this.searchSubject.next(term); // Emit the new search term\n }\n\n /** @deprecated Use {@link OnSearchTermChange}. */\n onSearchTermChange(term: string) {\n return this.OnSearchTermChange(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 /** @deprecated Use {@link OnSelectionChange}. */\n public onSelectionChange(event: SelectionChangedEvent) {\n return this.OnSelectionChange(event);\n }\n\n public OnGridReady(event: GridReadyEvent) {\n this.gridApi = event.api;\n }\n\n /** @deprecated Use {@link OnGridReady}. */\n public onGridReady(event: GridReadyEvent) {\n return this.OnGridReady(event);\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 = RunView.FromMetadataProvider(this.ProviderToUse);\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": "6.2.0-edge.
|
|
3
|
+
"version": "6.2.0-edge.1",
|
|
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",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"devDependencies": {
|
|
14
14
|
"@angular/compiler": "21.2.22",
|
|
15
15
|
"@angular/compiler-cli": "21.2.22",
|
|
16
|
-
"@memberjunction/ng-test-utils": "6.2.0-edge.
|
|
16
|
+
"@memberjunction/ng-test-utils": "6.2.0-edge.1",
|
|
17
17
|
"vitest": "^4.0.18"
|
|
18
18
|
},
|
|
19
19
|
"peerDependencies": {
|
|
@@ -24,13 +24,13 @@
|
|
|
24
24
|
"ag-grid-community": "^35.0.1"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@memberjunction/core": "6.2.0-edge.
|
|
28
|
-
"@memberjunction/ng-base-types": "6.2.0-edge.
|
|
29
|
-
"@memberjunction/core-entities": "6.2.0-edge.
|
|
30
|
-
"@memberjunction/global": "6.2.0-edge.
|
|
31
|
-
"@memberjunction/ng-container-directives": "6.2.0-edge.
|
|
32
|
-
"@memberjunction/ng-shared-generic": "6.2.0-edge.
|
|
33
|
-
"@memberjunction/ng-ui-components": "6.2.0-edge.
|
|
27
|
+
"@memberjunction/core": "6.2.0-edge.1",
|
|
28
|
+
"@memberjunction/ng-base-types": "6.2.0-edge.1",
|
|
29
|
+
"@memberjunction/core-entities": "6.2.0-edge.1",
|
|
30
|
+
"@memberjunction/global": "6.2.0-edge.1",
|
|
31
|
+
"@memberjunction/ng-container-directives": "6.2.0-edge.1",
|
|
32
|
+
"@memberjunction/ng-shared-generic": "6.2.0-edge.1",
|
|
33
|
+
"@memberjunction/ng-ui-components": "6.2.0-edge.1",
|
|
34
34
|
"rxjs": "^7.8.2",
|
|
35
35
|
"tslib": "^2.8.1"
|
|
36
36
|
},
|