@flusys/ng-shared 8.1.2 → 8.1.4

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flusys/ng-shared",
3
- "version": "8.1.2",
3
+ "version": "8.1.4",
4
4
  "description": "Shared components and utilities for FLUSYS Angular packages",
5
5
  "license": "MIT",
6
6
  "peerDependencies": {
@@ -8,8 +8,8 @@
8
8
  "@angular/core": ">=22.0.0",
9
9
  "@angular/forms": ">=22.0.0",
10
10
  "@angular/router": ">=22.0.0",
11
- "@flusys/ng-core": ">=8.1.2",
12
- "@flusys/ng-ui": ">=8.1.2",
11
+ "@flusys/ng-core": ">=8.1.4",
12
+ "@flusys/ng-ui": ">=8.1.4",
13
13
  "rxjs": "^7.8.0"
14
14
  },
15
15
  "sideEffects": false,
@@ -572,6 +572,14 @@ interface ICompanyBasicInfo {
572
572
  name: string;
573
573
  slug?: string;
574
574
  }
575
+ /**
576
+ * Branch basic info for dropdowns and display
577
+ */
578
+ interface IBranchBasicInfo {
579
+ id: string;
580
+ name: string;
581
+ slug?: string;
582
+ }
575
583
  /**
576
584
  * Company API Provider Interface
577
585
  */
@@ -581,6 +589,10 @@ interface ICompanyApiProvider {
581
589
  pageSize?: number;
582
590
  search?: string;
583
591
  }): Observable<IListResponse<ICompanyBasicInfo>>;
592
+ /** Resolve basic display info for a specific set of company IDs (e.g. reverse permission lookups) */
593
+ getCompaniesByIds?(ids: string[]): Observable<IListResponse<ICompanyBasicInfo>>;
594
+ /** Resolve basic display info for a specific set of branch IDs (e.g. reverse permission lookups) */
595
+ getBranchesByIds?(ids: string[]): Observable<IListResponse<IBranchBasicInfo>>;
584
596
  }
585
597
  /**
586
598
  * User role info for profile display
@@ -1183,11 +1195,13 @@ declare class FileSelectorDialogComponent {
1183
1195
  readonly searchTerm: _angular_core.WritableSignal<string>;
1184
1196
  readonly folders: _angular_core.WritableSignal<IFolderBasicInfo[]>;
1185
1197
  readonly selectedFolderId: _angular_core.WritableSignal<string | null>;
1198
+ readonly selectedFolderObject: _angular_core.WritableSignal<IFolderBasicInfo | null>;
1186
1199
  readonly foldersLoading: _angular_core.WritableSignal<boolean>;
1187
1200
  readonly foldersPagination: _angular_core.WritableSignal<IPagination>;
1188
1201
  readonly foldersTotal: _angular_core.WritableSignal<number | undefined>;
1189
1202
  readonly storageConfigs: _angular_core.WritableSignal<IStorageConfigBasicInfo[]>;
1190
1203
  readonly selectedStorageConfigId: _angular_core.WritableSignal<string | null>;
1204
+ readonly selectedStorageConfigObject: _angular_core.WritableSignal<IStorageConfigBasicInfo | null>;
1191
1205
  readonly storageConfigsLoading: _angular_core.WritableSignal<boolean>;
1192
1206
  readonly storageConfigsPagination: _angular_core.WritableSignal<IPagination>;
1193
1207
  readonly storageConfigsTotal: _angular_core.WritableSignal<number | undefined>;
@@ -1296,11 +1310,13 @@ declare class InlineSvgComponent {
1296
1310
  declare class LazyMultiSelectComponent extends BaseFormControl<string[] | null> implements OnDestroy {
1297
1311
  private readonly document;
1298
1312
  private readonly appRef;
1313
+ private readonly overlayStack;
1299
1314
  private readonly translateAdapter;
1300
1315
  private readonly onDocumentClickBound;
1301
1316
  readonly pSelectRef: _angular_core.Signal<ElementRef<HTMLDivElement>>;
1302
1317
  readonly overlayTemplate: _angular_core.Signal<TemplateRef<unknown>>;
1303
1318
  private overlayViewRef;
1319
+ private detachOverlayPosition;
1304
1320
  readonly placeHolder: _angular_core.InputSignal<string>;
1305
1321
  readonly showClear: _angular_core.InputSignal<boolean>;
1306
1322
  readonly displayPlaceholder: _angular_core.Signal<string>;
@@ -1309,7 +1325,18 @@ declare class LazyMultiSelectComponent extends BaseFormControl<string[] | null>
1309
1325
  readonly total: _angular_core.InputSignal<number | undefined>;
1310
1326
  readonly pagination: _angular_core.InputSignal<IPagination>;
1311
1327
  readonly selectDataList: _angular_core.InputSignal<IDropDown[]>;
1328
+ /**
1329
+ * Full option objects for the currently selected values, supplied by the
1330
+ * caller (or a subclass like UserMultiSelectComponent). Pinned into
1331
+ * `mergedDataList` (deduped by `value`) so chips/labels/checkboxes survive
1332
+ * a later search/page reload that replaces `selectDataList()` without the
1333
+ * selection having changed. This component renders its own overlay list
1334
+ * (it does not build on f-multiselect), so the merge has to happen here.
1335
+ */
1336
+ readonly selectedObjects: _angular_core.InputSignal<IDropDown[]>;
1312
1337
  readonly value: _angular_core.ModelSignal<string[] | null>;
1338
+ private readonly selectedObjectEntries;
1339
+ readonly mergedDataList: _angular_core.Signal<IDropDown[]>;
1313
1340
  readonly onSearch: _angular_core.OutputEmitterRef<string>;
1314
1341
  readonly onPagination: _angular_core.OutputEmitterRef<IPagination>;
1315
1342
  readonly searchTerm: _angular_core.WritableSignal<string>;
@@ -1331,7 +1358,7 @@ declare class LazyMultiSelectComponent extends BaseFormControl<string[] | null>
1331
1358
  clear(event: Event): void;
1332
1359
  private t;
1333
1360
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<LazyMultiSelectComponent, never>;
1334
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<LazyMultiSelectComponent, "lib-lazy-multi-select", never, { "placeHolder": { "alias": "placeHolder"; "required": false; "isSignal": true; }; "showClear": { "alias": "showClear"; "required": false; "isSignal": true; }; "isEditMode": { "alias": "isEditMode"; "required": true; "isSignal": true; }; "isLoading": { "alias": "isLoading"; "required": true; "isSignal": true; }; "total": { "alias": "total"; "required": true; "isSignal": true; }; "pagination": { "alias": "pagination"; "required": true; "isSignal": true; }; "selectDataList": { "alias": "selectDataList"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "onSearch": "onSearch"; "onPagination": "onPagination"; }, never, never, true, never>;
1361
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LazyMultiSelectComponent, "lib-lazy-multi-select", never, { "placeHolder": { "alias": "placeHolder"; "required": false; "isSignal": true; }; "showClear": { "alias": "showClear"; "required": false; "isSignal": true; }; "isEditMode": { "alias": "isEditMode"; "required": true; "isSignal": true; }; "isLoading": { "alias": "isLoading"; "required": true; "isSignal": true; }; "total": { "alias": "total"; "required": true; "isSignal": true; }; "pagination": { "alias": "pagination"; "required": true; "isSignal": true; }; "selectDataList": { "alias": "selectDataList"; "required": true; "isSignal": true; }; "selectedObjects": { "alias": "selectedObjects"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "onSearch": "onSearch"; "onPagination": "onPagination"; }, never, never, true, never>;
1335
1362
  }
1336
1363
 
1337
1364
  /**
@@ -1359,6 +1386,13 @@ declare class LazySelectComponent extends BaseFormControl<string | null> {
1359
1386
  readonly total: _angular_core.InputSignal<number | undefined>;
1360
1387
  readonly pagination: _angular_core.InputSignal<IPagination>;
1361
1388
  readonly selectDataList: _angular_core.InputSignal<IDropDown[]>;
1389
+ /**
1390
+ * Full option object for the current value, supplied by the caller (or a
1391
+ * subclass like UserSelectComponent). Forwarded to f-select's own
1392
+ * `selectedObject` input so the label survives a later search/page reload
1393
+ * that replaces `selectDataList()` without the value having changed.
1394
+ */
1395
+ readonly selectedObject: _angular_core.InputSignal<unknown>;
1362
1396
  readonly value: _angular_core.ModelSignal<string | null>;
1363
1397
  readonly onSearch: _angular_core.OutputEmitterRef<string>;
1364
1398
  readonly onPagination: _angular_core.OutputEmitterRef<IPagination>;
@@ -1369,7 +1403,7 @@ declare class LazySelectComponent extends BaseFormControl<string | null> {
1369
1403
  showPanel(): void;
1370
1404
  private t;
1371
1405
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<LazySelectComponent, never>;
1372
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<LazySelectComponent, "lib-lazy-select", never, { "placeHolder": { "alias": "placeHolder"; "required": false; "isSignal": true; }; "showClear": { "alias": "showClear"; "required": false; "isSignal": true; }; "optionLabel": { "alias": "optionLabel"; "required": true; "isSignal": true; }; "optionValue": { "alias": "optionValue"; "required": true; "isSignal": true; }; "isEditMode": { "alias": "isEditMode"; "required": true; "isSignal": true; }; "isLoading": { "alias": "isLoading"; "required": true; "isSignal": true; }; "total": { "alias": "total"; "required": true; "isSignal": true; }; "pagination": { "alias": "pagination"; "required": true; "isSignal": true; }; "selectDataList": { "alias": "selectDataList"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "onSearch": "onSearch"; "onPagination": "onPagination"; }, never, never, true, never>;
1406
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LazySelectComponent, "lib-lazy-select", never, { "placeHolder": { "alias": "placeHolder"; "required": false; "isSignal": true; }; "showClear": { "alias": "showClear"; "required": false; "isSignal": true; }; "optionLabel": { "alias": "optionLabel"; "required": true; "isSignal": true; }; "optionValue": { "alias": "optionValue"; "required": true; "isSignal": true; }; "isEditMode": { "alias": "isEditMode"; "required": true; "isSignal": true; }; "isLoading": { "alias": "isLoading"; "required": true; "isSignal": true; }; "total": { "alias": "total"; "required": true; "isSignal": true; }; "pagination": { "alias": "pagination"; "required": true; "isSignal": true; }; "selectDataList": { "alias": "selectDataList"; "required": true; "isSignal": true; }; "selectedObject": { "alias": "selectedObject"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "onSearch": "onSearch"; "onPagination": "onPagination"; }, never, never, true, never>;
1373
1407
  }
1374
1408
 
1375
1409
  interface RouterTabItem {
@@ -1411,6 +1445,17 @@ declare abstract class BaseUserSelectComponent {
1411
1445
  readonly pagination: _angular_core.WritableSignal<IPagination>;
1412
1446
  readonly searchTerm: _angular_core.WritableSignal<string>;
1413
1447
  readonly dropdownUsers: _angular_core.Signal<IDropDown[]>;
1448
+ private readonly _knownUsers;
1449
+ protected toDropDown(user: IUserBasicInfo): IDropDown;
1450
+ /** Resolves a single previously-seen user id, even if it's no longer in `users()`. */
1451
+ protected resolveKnownUser(id: string | null | undefined): IDropDown | null;
1452
+ /** Resolves multiple previously-seen user ids, even if no longer in `users()`. */
1453
+ protected resolveKnownUsers(ids: string[]): IDropDown[];
1454
+ /** Same as resolveKnownUser, but returns the raw IUserBasicInfo (for outputs like userSelected). */
1455
+ protected resolveKnownUserRaw(id: string | null | undefined): IUserBasicInfo | null;
1456
+ /** Same as resolveKnownUsers, but returns the raw IUserBasicInfo[] (for outputs like usersSelected). */
1457
+ protected resolveKnownUsersRaw(ids: string[]): IUserBasicInfo[];
1458
+ private rememberUsers;
1414
1459
  readonly displayPlaceholder: _angular_core.Signal<string>;
1415
1460
  constructor();
1416
1461
  /** Setup effect to track value changes and emit selection events */
@@ -1459,6 +1504,7 @@ declare class UserMultiSelectComponent extends BaseUserSelectComponent {
1459
1504
  readonly showClear: _angular_core.InputSignal<boolean>;
1460
1505
  readonly value: _angular_core.ModelSignal<string[] | null>;
1461
1506
  readonly usersSelected: _angular_core.OutputEmitterRef<IUserBasicInfo[]>;
1507
+ readonly selectedObjects: _angular_core.Signal<_flusys_ng_shared.IDropDown[]>;
1462
1508
  protected setupValueEffect(): void;
1463
1509
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UserMultiSelectComponent, never>;
1464
1510
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<UserMultiSelectComponent, "lib-user-multi-select", never, { "showClear": { "alias": "showClear"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "usersSelected": "usersSelected"; }, never, never, true, never>;
@@ -1495,6 +1541,7 @@ declare class UserSelectComponent extends BaseUserSelectComponent {
1495
1541
  readonly showClear: _angular_core.InputSignal<boolean>;
1496
1542
  readonly value: _angular_core.ModelSignal<string | null>;
1497
1543
  readonly userSelected: _angular_core.OutputEmitterRef<IUserBasicInfo | null>;
1544
+ readonly selectedObject: _angular_core.Signal<_flusys_ng_shared.IDropDown | null>;
1498
1545
  protected setupValueEffect(): void;
1499
1546
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UserSelectComponent, never>;
1500
1547
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<UserSelectComponent, "lib-user-select", never, { "showClear": { "alias": "showClear"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "userSelected": "userSelected"; }, never, never, true, never>;
@@ -1670,4 +1717,4 @@ interface ScrollPaginationConfig {
1670
1717
  declare function checkScrollPagination(event: Event, config: ScrollPaginationConfig): IPagination | null;
1671
1718
 
1672
1719
  export { ACTION_PERMISSIONS, AUTH_STATE_PROVIDER, ApiResourceService, ApiResourceService as ApiService, BRANCH_PERMISSIONS, BaseFormComponent, BaseFormControl, BaseFormTemplateDirective, BaseListComponent, BaseListTemplateDirective, BaseUserSelectComponent, COMPANY_ACTION_PERMISSIONS, COMPANY_API_PROVIDER, COMPANY_PERMISSIONS, CookieService, EMAIL_CONFIG_PERMISSIONS, EMAIL_TEMPLATE_PERMISSIONS, EVENT_PERMISSIONS, EditModeElementChangerDirective, FILE_PERMISSIONS, FILE_PROVIDER, FILE_TYPE_FILTERS, FOLDER_PERMISSIONS, FORM_PERMISSIONS, FORM_RESULT_PERMISSIONS, FaviconService, FileSelectorDialogComponent, FileUploaderComponent, FileUrlService, HasPermissionDirective, IconComponent, IconTypeEnum, InlineSvgComponent, IsEmptyImageDirective, LANGUAGE_PERMISSIONS, LazyMultiSelectComponent, LazySelectComponent, NOTIFICATION_PERMISSIONS, PERMISSIONS, PROFILE_PERMISSION_PROVIDER, PermissionValidatorService, PlatformService, PreventDefaultDirective, ROLE_ACTION_PERMISSIONS, ROLE_PERMISSIONS, RouterTabsComponent, SHARED_MESSAGES, SKIP_ERROR_TOAST, SOCIAL_AUTH_CONFIG_PERMISSIONS, STORAGE_CONFIG_PERMISSIONS, TRANSLATION_KEY_PERMISSIONS, TRANSLATION_PERMISSIONS, TranslatePipe, TranslateService, UPLOAD_CONFIG_PERMISSIONS, USER_ACTION_PERMISSIONS, USER_PERMISSIONS, USER_PERMISSION_PROVIDER, USER_PROVIDER, USER_ROLE_PERMISSIONS, UserMultiSelectComponent, UserSelectComponent, allPermissionsGuard, anyPermissionGuard, authenticatedGuard, checkScrollPagination, errorCatchingInterceptor, evaluateLogicNode, evaluatePermission, formatFileSize, formatInTimezone, getAcceptString, getFileIconClass, getUserTimezone, hasAllPermissions, hasAnyPermission, hasPermission, isFileTypeAllowed, localToUtc, permissionGuard, provideValueAccessor, resolveTranslationModule, utcToLocal };
1673
- export type { ActionSeverity, DeleteType, FilesResponseDto, FormFieldType, IActionNode, IActivatable, IApiService, IAuthStateProvider, IBaseEntity, IBulkMeta, IBulkResponse, ICompanyApiProvider, ICompanyBasicInfo, IDeleteData, IDropDown, IFileBasicInfo, IFileProvider, IFileSelectFilter, IFileUploadOptions, IFilter, IFilterData, IFolderBasicInfo, IFormField, IFormSelectOption, IGroupNode, IListResponse, ILoggedUserInfo, ILogicNode, IMessageResponse, IOrderable, IPagination, IPaginationMeta, IProfileActionInfo, IProfilePermissionProvider, IProfileRoleInfo, IRequestMeta, IResolverModuleConfig, ISelectFilter, ISingleResponse, ISoftDeletable, ISort, IStorageConfigBasicInfo, ITableAction, ITableColumn, ITagConfig, ITimestampable, IUploadedFile, IUserBasicInfo, IUserBranchPermission, IUserCompanyInfo, IUserPermissionProvider, IUserProvider, IUserSelectFilter, LoadUsersFn, PermissionCode, RouterTabItem, ScrollPaginationConfig, TableColumnType, UploadFileFn, UploadMultipleFilesFn };
1720
+ export type { ActionSeverity, DeleteType, FilesResponseDto, FormFieldType, IActionNode, IActivatable, IApiService, IAuthStateProvider, IBaseEntity, IBranchBasicInfo, IBulkMeta, IBulkResponse, ICompanyApiProvider, ICompanyBasicInfo, IDeleteData, IDropDown, IFileBasicInfo, IFileProvider, IFileSelectFilter, IFileUploadOptions, IFilter, IFilterData, IFolderBasicInfo, IFormField, IFormSelectOption, IGroupNode, IListResponse, ILoggedUserInfo, ILogicNode, IMessageResponse, IOrderable, IPagination, IPaginationMeta, IProfileActionInfo, IProfilePermissionProvider, IProfileRoleInfo, IRequestMeta, IResolverModuleConfig, ISelectFilter, ISingleResponse, ISoftDeletable, ISort, IStorageConfigBasicInfo, ITableAction, ITableColumn, ITagConfig, ITimestampable, IUploadedFile, IUserBasicInfo, IUserBranchPermission, IUserCompanyInfo, IUserPermissionProvider, IUserProvider, IUserSelectFilter, LoadUsersFn, PermissionCode, RouterTabItem, ScrollPaginationConfig, TableColumnType, UploadFileFn, UploadMultipleFilesFn };