@ieeesa-npm/groups 0.15.15 → 0.15.17

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.
@@ -38,7 +38,7 @@ export declare class CustomQuestionEditorComponent implements OnInit {
38
38
  * @return {string}
39
39
  * @memberof CustomQuestionEditorComponent
40
40
  */
41
- parseOptionsString(optionsJson: string | undefined): string;
41
+ parseOptionsString(optionsJson: string[] | string | undefined): string;
42
42
  /**
43
43
  * Whether the currently selected type requires an options list.
44
44
  * @return {boolean}
@@ -1,4 +1,4 @@
1
- import { OnInit } from '@angular/core';
1
+ import { OnDestroy, OnInit } from '@angular/core';
2
2
  import { MatDialog, MatDialogRef } from '@angular/material/dialog';
3
3
  import { CdkDragDrop } from '@angular/cdk/drag-drop';
4
4
  import { RadioOption, SlideToggleOption } from '@ieeesa-npm/presentation';
@@ -28,7 +28,7 @@ export interface StandardQuestionRow {
28
28
  * @export
29
29
  * @class InterestFormComponent
30
30
  */
31
- export declare class InterestFormComponent implements OnInit {
31
+ export declare class InterestFormComponent implements OnInit, OnDestroy {
32
32
  private dialogRef;
33
33
  group: GroupInfo;
34
34
  private interestFormService;
@@ -199,6 +199,12 @@ export declare class InterestFormComponent implements OnInit {
199
199
  * @memberof InterestFormComponent
200
200
  */
201
201
  trackByQuestionId(index: number, question: CustomQuestion): string;
202
+ /**
203
+ * Emits and completes the destroy subject so any in-flight requests are
204
+ * unsubscribed when the component is destroyed.
205
+ * @memberof InterestFormComponent
206
+ */
207
+ ngOnDestroy(): void;
202
208
  static ɵfac: i0.ɵɵFactoryDeclaration<InterestFormComponent, [{ optional: true; }, { optional: true; }, null, null, null, null]>;
203
209
  static ɵcmp: i0.ɵɵComponentDeclaration<InterestFormComponent, "ieeesa-interest-form", never, {}, {}, never, never, true, never>;
204
210
  }
@@ -60,8 +60,14 @@ export declare class RosterImportComponent implements OnInit, OnDestroy {
60
60
  uploadResult: RosterImportResult | null;
61
61
  /** Row-level errors for the completed job. */
62
62
  jobErrors: RosterImportRowError[];
63
- /** Inline validation / API error message. */
63
+ /** Inline validation / API error message (single-line case). */
64
64
  errorMessage: string | null;
65
+ /**
66
+ * All API error messages when the BE returns multiple error codes at once
67
+ * (e.g. several fields failed). Rendered as a list in the error banner. Empty
68
+ * for single-message validation errors (which use {@link errorMessage}).
69
+ */
70
+ errorMessages: string[];
65
71
  /**
66
72
  * Info banner shown when the file has headers but no data rows
67
73
  * (Figma: "No roster data found...").
@@ -95,6 +95,12 @@ export declare class GroupsService {
95
95
  "2017": string;
96
96
  "2018": string;
97
97
  "2019": string;
98
+ /**
99
+ * Returns group user details if email is found, else throws error.
100
+ * @param {string} email
101
+ * @return {Observable<SearchUserByEmailResponse>}
102
+ * @memberof GroupsService
103
+ */
98
104
  "2020": string;
99
105
  "2021": string;
100
106
  "2022": string;
@@ -29,6 +29,15 @@ export declare class InterestFormService {
29
29
  private httpService;
30
30
  apiBaseUrl: string;
31
31
  constructor(httpService: HttpService);
32
+ /**
33
+ * Validates the application-level envelope for a write operation. A 2xx
34
+ * response can still carry an unsuccessful envelope ({ status: false }); this
35
+ * throws it so callers' error handlers run instead of treating it as success.
36
+ * @param {InterestApiResponse<T>} response
37
+ * @return {InterestApiResponse<T>}
38
+ * @memberof InterestFormService
39
+ */
40
+ private assertSuccess;
32
41
  /**
33
42
  * Sets the API base URL (resolved from the hosting application's config).
34
43
  * @param {string} apiBaseUrl
@@ -43,14 +52,15 @@ export declare class InterestFormService {
43
52
  */
44
53
  getInterestConfig(groupId: string): Observable<InterestApiResponse<GroupInterestConfig>>;
45
54
  /**
46
- * Loads the tenant's roles. Member levels (used to populate the default
47
- * membership level options) are the subset where roleTypeName is
48
- * "Member Level"; filtering is done by the caller.
49
- * @param {string} appId
55
+ * Loads the roles configured for a group type via
56
+ * GET /groups/config/rolesByGroupType/{groupTypeId}. Member levels (used to
57
+ * populate the default membership level options) are the subset where
58
+ * roleTypeName is "Member Level"; filtering is done by the caller.
59
+ * @param {string} groupTypeId
50
60
  * @return {Observable<InterestApiResponse<GroupRole[]>>}
51
61
  * @memberof InterestFormService
52
62
  */
53
- getRoles(appId: string): Observable<InterestApiResponse<GroupRole[]>>;
63
+ getRoles(groupTypeId: string): Observable<InterestApiResponse<GroupRole[]>>;
54
64
  /**
55
65
  * Saves a group's interest configuration.
56
66
  * @param {GroupInterestConfig} config
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ieeesa-npm/groups",
3
- "version": "0.15.15",
3
+ "version": "0.15.17",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^16.1.0",
6
6
  "@angular/core": "^16.1.0"