tango-app-ui-store-builder 1.2.16 → 1.2.18
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/esm2022/lib/components/access-denied/access-denied.component.mjs +31 -0
- package/esm2022/lib/components/collection-update-ai/collection-update-ai.component.mjs +3 -3
- package/esm2022/lib/components/collection-update-ai/find-replace-layout/prepare-template/prepare-template.component.mjs +3 -3
- package/esm2022/lib/components/collection-update-ai/find-replace-layout/review-replace/review-replace.component.mjs +3 -3
- package/esm2022/lib/components/fixture-template/template-assign-stores/preview-modal/preview-modal.component.mjs +3 -3
- package/esm2022/lib/components/fixture-template/template-assign-stores/template-assign-stores.component.mjs +3 -3
- package/esm2022/lib/components/fixture-template-table/find-and-replace/find-and-replace.component.mjs +3 -3
- package/esm2022/lib/components/fixture-template-table/fixture-template-table.component.mjs +25 -3
- package/esm2022/lib/components/fixture-template-tree/fixture-template-tree.component.mjs +3 -3
- package/esm2022/lib/components/manage-store-plano/manage-store-plano.component.mjs +3 -3
- package/esm2022/lib/components/manage-store-plano/plano-rollout/plano-rollout.component.mjs +3 -3
- package/esm2022/lib/components/manage-store-plano/verification-feedback/verification-feedback.component.mjs +9 -3
- package/esm2022/lib/components/manage-store-plano/zone-verification-feedback/zone-verification-feedback.component.mjs +9 -3
- package/esm2022/lib/components/onboard-store-plano/onboard-store-plano.component.mjs +133 -21
- package/esm2022/lib/components/plano-configurations/plano-configurations.component.mjs +25 -9
- package/esm2022/lib/components/plano-library/fixture-library/fixture-library.component.mjs +28 -5
- package/esm2022/lib/components/plano-tools/allow-edit/allow-edit.component.mjs +4 -3
- package/esm2022/lib/components/plano-tools/cad-files/cad-files.component.mjs +5 -4
- package/esm2022/lib/components/plano-tools/cad-render/cad-render.component.mjs +6 -5
- package/esm2022/lib/components/plano-tools/delete-floor/delete-floor.component.mjs +4 -3
- package/esm2022/lib/components/plano-tools/delete-task/delete-task.component.mjs +4 -3
- package/esm2022/lib/components/plano-tools/layout-touchup/layout-touchup.component.mjs +134 -0
- package/esm2022/lib/components/plano-tools/layout-touchup/touchup-editor/touchup-editor.component.mjs +5103 -0
- package/esm2022/lib/components/plano-tools/modify-fixture-numbers/modify-fixture-numbers.component.mjs +4 -3
- package/esm2022/lib/components/plano-tools/move-bucket/move-bucket.component.mjs +4 -3
- package/esm2022/lib/components/plano-tools/plano-data-export/plano-data-export.component.mjs +4 -3
- package/esm2022/lib/components/plano-tools/plano-migrate/plano-migrate.component.mjs +6 -5
- package/esm2022/lib/components/plano-tools/store-exports/store-exports.component.mjs +4 -3
- package/esm2022/lib/components/plano-tools/swap-template/swap-template.component.mjs +4 -3
- package/esm2022/lib/components/plano-tools/tool-page-header/tool-page-header.component.mjs +22 -0
- package/esm2022/lib/components/plano-tools/tools-parent/tools-parent.component.mjs +27 -8
- package/esm2022/lib/components/planogram/merch-compliance/merch-compliance.component.mjs +3 -3
- package/esm2022/lib/components/planogram/merch-compliance/product-locator/product-locator.component.mjs +3 -3
- package/esm2022/lib/components/planogram/plano-overview/plano-comparison/plano-comparison.component.mjs +3 -3
- package/esm2022/lib/components/planogram/plano-overview/plano-overview.component.mjs +3 -3
- package/esm2022/lib/components/popups/publish-plano-modal/publish-plano-modal.component.mjs +1 -1
- package/esm2022/lib/components/store-plano/store-plano-tree-view/store-plano-tree-view.component.mjs +3 -3
- package/esm2022/lib/components/store-plano/store-plano.component.mjs +3 -3
- package/esm2022/lib/functions/feature-access.guard.mjs +20 -0
- package/esm2022/lib/functions/plano.function.mjs +22 -1
- package/esm2022/lib/services/store-builder.service.mjs +24 -3
- package/esm2022/lib/tango-store-builder-routing.module.mjs +35 -55
- package/esm2022/lib/tango-store-builder.module.mjs +14 -2
- package/fesm2022/tango-app-ui-store-builder.mjs +5863 -376
- package/fesm2022/tango-app-ui-store-builder.mjs.map +1 -1
- package/lib/components/access-denied/access-denied.component.d.ts +18 -0
- package/lib/components/fixture-template-table/fixture-template-table.component.d.ts +6 -0
- package/lib/components/manage-plano/rollout-table/rollout-table.component.d.ts +4 -4
- package/lib/components/manage-plano/verification-table/verification-table.component.d.ts +5 -5
- package/lib/components/manage-store-plano/verification-feedback/verification-feedback.component.d.ts +1 -0
- package/lib/components/manage-store-plano/zone-verification-feedback/zone-verification-feedback.component.d.ts +1 -0
- package/lib/components/onboard-store-plano/onboard-store-plano.component.d.ts +8 -0
- package/lib/components/plano-configurations/plano-configurations.component.d.ts +9 -1
- package/lib/components/plano-library/fixture-library/fixture-library.component.d.ts +5 -1
- package/lib/components/plano-tools/layout-touchup/layout-touchup.component.d.ts +50 -0
- package/lib/components/plano-tools/layout-touchup/touchup-editor/touchup-editor.component.d.ts +331 -0
- package/lib/components/plano-tools/tool-page-header/tool-page-header.component.d.ts +8 -0
- package/lib/components/plano-tools/tools-parent/tools-parent.component.d.ts +4 -2
- package/lib/functions/feature-access.guard.d.ts +9 -0
- package/lib/functions/plano.function.d.ts +9 -0
- package/lib/services/store-builder.service.d.ts +16 -0
- package/lib/tango-store-builder.module.d.ts +62 -58
- package/package.json +1 -1
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { OnInit } from '@angular/core';
|
|
2
|
+
import { ActivatedRoute } from '@angular/router';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/**
|
|
5
|
+
* Shared "Access denied" panel for the email-gated features. Reused two ways:
|
|
6
|
+
* - Inline, with [feature] bound (e.g. inside the Find & Replace tab).
|
|
7
|
+
* - As a route component (the findReplaceAccessGuard redirect target), reading
|
|
8
|
+
* the feature name from the `feature` query param.
|
|
9
|
+
* Mirrors the access-denied markup used by the Looks page.
|
|
10
|
+
*/
|
|
11
|
+
export declare class AccessDeniedComponent implements OnInit {
|
|
12
|
+
private route;
|
|
13
|
+
feature: string;
|
|
14
|
+
constructor(route: ActivatedRoute);
|
|
15
|
+
ngOnInit(): void;
|
|
16
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AccessDeniedComponent, never>;
|
|
17
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<AccessDeniedComponent, "lib-access-denied", never, { "feature": { "alias": "feature"; "required": false; }; }, {}, never, never, false, never>;
|
|
18
|
+
}
|
|
@@ -22,6 +22,8 @@ export declare class FixtureTemplateTableComponent implements OnInit, OnDestroy
|
|
|
22
22
|
viewMode: "list" | "grid" | "tree" | string;
|
|
23
23
|
fixtureTemplateChildList: any;
|
|
24
24
|
activeTab: string;
|
|
25
|
+
frAccessChecked: boolean;
|
|
26
|
+
frAllowed: boolean;
|
|
25
27
|
sortedColumn: string;
|
|
26
28
|
sortOrder: number;
|
|
27
29
|
childSortedColumn: string;
|
|
@@ -54,6 +56,10 @@ export declare class FixtureTemplateTableComponent implements OnInit, OnDestroy
|
|
|
54
56
|
ngOnInit(): void;
|
|
55
57
|
getVmsList(): Promise<void>;
|
|
56
58
|
setPageData(): void;
|
|
59
|
+
/** Resolve whether the session user may use Find & Replace. Never throws.
|
|
60
|
+
* Hides the tab when denied; the tab content falls back to an access-denied
|
|
61
|
+
* panel for anyone who deep-links to ?tab=find-replace. */
|
|
62
|
+
private checkFindReplaceAccess;
|
|
57
63
|
getFixtureLibList(): void;
|
|
58
64
|
getFixtureTemplatesList(): void;
|
|
59
65
|
getBrandsList(): void;
|
|
@@ -54,13 +54,13 @@ export declare class PlanoRolloutTableComponent implements OnInit, OnDestroy {
|
|
|
54
54
|
paginationSize(): number;
|
|
55
55
|
onPageChange(pageOffset: number): void;
|
|
56
56
|
onPageSizeChange(pageSize: number): void;
|
|
57
|
-
getTaskStatus(data: any, type: string): "completed" | "yetToAssign" | "
|
|
58
|
-
getTaskTooltip(data: any, type: string): "
|
|
57
|
+
getTaskStatus(data: any, type: string): "completed" | "yetToAssign" | "taskAssigned" | "reviewPending" | undefined;
|
|
58
|
+
getTaskTooltip(data: any, type: string): "Completed" | "Yet to Assign" | "Task Assigned" | "Review Pending" | undefined;
|
|
59
59
|
showBreach(data: any, type: string): boolean;
|
|
60
60
|
updateQueryParams(): void;
|
|
61
61
|
ngOnDestroy(): void;
|
|
62
|
-
getStatus(data: any): "
|
|
63
|
-
getStatusBadge(data: any): "yetToAssign" | "
|
|
62
|
+
getStatus(data: any): "Yet to Assign" | "Task Assigned" | "Review Pending" | "Ready to Publish" | "Published" | undefined;
|
|
63
|
+
getStatusBadge(data: any): "yetToAssign" | "taskAssigned" | "reviewPending" | "primaryBadgeStyle" | "bg-success" | undefined;
|
|
64
64
|
onExport(): void;
|
|
65
65
|
static ɵfac: i0.ɵɵFactoryDeclaration<PlanoRolloutTableComponent, never>;
|
|
66
66
|
static ɵcmp: i0.ɵɵComponentDeclaration<PlanoRolloutTableComponent, "lib-plano-rollout-table", never, {}, {}, never, never, false, never>;
|
|
@@ -54,14 +54,14 @@ export declare class PlanoVerificationTableComponent implements OnInit, OnDestro
|
|
|
54
54
|
onPageChange(pageOffset: number): void;
|
|
55
55
|
onPageSizeChange(pageSize: number): void;
|
|
56
56
|
planoFloorDetails(data: any): string | 1;
|
|
57
|
-
getTaskStatus(data: any, type: string): "completed" | "yetToAssign" | "
|
|
58
|
-
getTaskTooltip(data: any, type: string): "
|
|
59
|
-
getZoneStatus(data: any): "completed" | "yetToAssign" | "
|
|
57
|
+
getTaskStatus(data: any, type: string): "completed" | "yetToAssign" | "taskAssigned" | "reviewPending" | undefined;
|
|
58
|
+
getTaskTooltip(data: any, type: string): "Completed" | "Yet to Assign" | "Task Assigned" | "Review Pending" | "Task Scheduled" | undefined;
|
|
59
|
+
getZoneStatus(data: any): "completed" | "yetToAssign" | "taskAssigned" | "reviewPending" | "flag";
|
|
60
60
|
getZoneTooltip(data: any): any;
|
|
61
61
|
getProgressValue(data: any): 100 | 50 | 25;
|
|
62
62
|
showBreach(data: any, type: string): boolean;
|
|
63
|
-
getStatus(data: any): "
|
|
64
|
-
getStatusBadge(data: any): "completed" | "yetToAssign" | "
|
|
63
|
+
getStatus(data: any): "Completed" | "Yet to Assign" | "Task Assigned" | "Review Pending" | "Ready to Publish" | "Published" | "Task Scheduled" | undefined;
|
|
64
|
+
getStatusBadge(data: any): "completed" | "yetToAssign" | "taskAssigned" | "reviewPending" | "primaryBadgeStyle" | "bg-success" | undefined;
|
|
65
65
|
getSubmit(data: any): boolean;
|
|
66
66
|
updateQueryParams(): void;
|
|
67
67
|
ngOnDestroy(): void;
|
package/lib/components/manage-store-plano/verification-feedback/verification-feedback.component.d.ts
CHANGED
|
@@ -23,6 +23,7 @@ export declare class VerificationFeedbackComponent implements OnInit, OnChanges,
|
|
|
23
23
|
currentFixtureIndex: number;
|
|
24
24
|
planoFixture: any;
|
|
25
25
|
aiFixture: any;
|
|
26
|
+
get planoFixtureCapacity(): number;
|
|
26
27
|
selectedImageForPreview: string | null;
|
|
27
28
|
imagePreviewZoom: number;
|
|
28
29
|
imagePreviewPanX: number;
|
|
@@ -20,6 +20,7 @@ export declare class ZoneVerificationFeedbackComponent implements OnChanges {
|
|
|
20
20
|
constructor(ngbModal: NgbModal);
|
|
21
21
|
planoFixture: any;
|
|
22
22
|
zoneFixture: any;
|
|
23
|
+
get planoFixtureCapacity(): number;
|
|
23
24
|
currentFixtureIndex: number;
|
|
24
25
|
selectedImageForPreview: string | null;
|
|
25
26
|
imagePreviewZoom: number;
|
|
@@ -118,12 +118,20 @@ export declare class OnboardStorePlanoComponent implements AfterViewInit, OnDest
|
|
|
118
118
|
private similarityRatio;
|
|
119
119
|
private isLibraryMatch;
|
|
120
120
|
validateFixtures(): void;
|
|
121
|
+
private readonly allocationExemptGroups;
|
|
122
|
+
private isAllocationExempt;
|
|
123
|
+
private hasBrandValue;
|
|
124
|
+
private hasZoneWithoutAllocation;
|
|
125
|
+
validateZoneAllocations(): void;
|
|
121
126
|
get hasInvalidHeaderFixtures(): boolean;
|
|
122
127
|
get invalidHeaderFixtureCount(): number;
|
|
123
128
|
get hasInvalidLibraryFixtures(): boolean;
|
|
124
129
|
get invalidLibraryFixtureCount(): number;
|
|
125
130
|
get hasInvalidFixtures(): boolean;
|
|
126
131
|
get invalidFixturesTooltip(): string;
|
|
132
|
+
get hasUnallocatedZoneFixtures(): boolean;
|
|
133
|
+
get unallocatedZoneFixtureCount(): number;
|
|
134
|
+
get unallocatedZonesTooltip(): string;
|
|
127
135
|
get isEditLayoutAllowed(): boolean;
|
|
128
136
|
renderFloor(update?: boolean): Promise<void>;
|
|
129
137
|
drawInitialContent(): Promise<void>;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { ChangeDetectorRef, ElementRef, OnInit } from "@angular/core";
|
|
2
2
|
import { AbstractControl, FormArray, FormBuilder, FormGroup } from "@angular/forms";
|
|
3
3
|
import { NgbModal } from "@ng-bootstrap/ng-bootstrap";
|
|
4
|
+
import { Router } from "@angular/router";
|
|
4
5
|
import { GlobalStateService, PageInfoService } from "tango-app-ui-global";
|
|
5
6
|
import { ToastService } from "tango-app-ui-shared";
|
|
6
7
|
import { PlanoDataService } from "../../services/plano-data.service";
|
|
@@ -16,6 +17,7 @@ export declare class PlanoConfigurationsComponent implements OnInit {
|
|
|
16
17
|
private modelService;
|
|
17
18
|
private cd;
|
|
18
19
|
private pageInfo;
|
|
20
|
+
private router;
|
|
19
21
|
formRef: ElementRef;
|
|
20
22
|
brandMetaRef: ElementRef;
|
|
21
23
|
selectedTab: string;
|
|
@@ -29,7 +31,13 @@ export declare class PlanoConfigurationsComponent implements OnInit {
|
|
|
29
31
|
brandMetaList: any[];
|
|
30
32
|
isBrandMetaEdit: boolean;
|
|
31
33
|
brandMetaSearch: string;
|
|
32
|
-
constructor(fb: FormBuilder, dataService: PlanoDataService, gs: GlobalStateService, builderService: StoreBuilderService, toast: ToastService, modelService: NgbModal, cd: ChangeDetectorRef, pageInfo: PageInfoService);
|
|
34
|
+
constructor(fb: FormBuilder, dataService: PlanoDataService, gs: GlobalStateService, builderService: StoreBuilderService, toast: ToastService, modelService: NgbModal, cd: ChangeDetectorRef, pageInfo: PageInfoService, router: Router);
|
|
35
|
+
/**
|
|
36
|
+
* Hidden entry point to the internal plano-tools page.
|
|
37
|
+
* Triggered from an invisible 1×1 hit-area below the config side card —
|
|
38
|
+
* for ops/devs who know it's there. Not discoverable in the UI.
|
|
39
|
+
*/
|
|
40
|
+
goToPlanoTools(): void;
|
|
33
41
|
ngOnInit(): Promise<void>;
|
|
34
42
|
setPageData(): void;
|
|
35
43
|
loadBrandData(): Promise<void>;
|
|
@@ -40,11 +40,15 @@ export declare class FixtureLibraryComponent implements OnInit, OnDestroy {
|
|
|
40
40
|
isFilterApplied: boolean;
|
|
41
41
|
isPageLoading: boolean;
|
|
42
42
|
isError: boolean;
|
|
43
|
+
accessChecked: boolean;
|
|
44
|
+
allowed: boolean;
|
|
43
45
|
private readonly destroy$;
|
|
44
46
|
private libSub?;
|
|
45
47
|
constructor(ngbModal: NgbModal, router: Router, route: ActivatedRoute, storeBuilderService: StoreBuilderService, gs: GlobalStateService, toast: ToastService, pageInfo: PageInfoService);
|
|
46
|
-
ngOnInit(): void
|
|
48
|
+
ngOnInit(): Promise<void>;
|
|
47
49
|
setPageData(): void;
|
|
50
|
+
/** Resolve whether the session user may access the Fixture Library. Never throws. */
|
|
51
|
+
private checkAccess;
|
|
48
52
|
getFixturesList(): void;
|
|
49
53
|
getFixtureSizesList(): void;
|
|
50
54
|
downloadEmptyTemplate(): void;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { OnDestroy, OnInit } from "@angular/core";
|
|
2
|
+
import { Router } from "@angular/router";
|
|
3
|
+
import { GlobalStateService } from "tango-app-ui-global";
|
|
4
|
+
import { ToastService } from "tango-app-ui-shared";
|
|
5
|
+
import { StoreBuilderService } from "../../../services/store-builder.service";
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
interface StoreTouchupOption {
|
|
8
|
+
id: string;
|
|
9
|
+
label: string;
|
|
10
|
+
storeId?: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Layout Touchup — internal tool selector.
|
|
14
|
+
*
|
|
15
|
+
* Two-step selector (Store → Floor). On "Open Editor", navigates to the
|
|
16
|
+
* existing manage-planogram route with `touchup=1` query param. The existing
|
|
17
|
+
* ManageStorePlanoComponent detects this and switches to touchup behaviour:
|
|
18
|
+
* - status-affecting buttons (publish / assign / redo / revoke) hidden
|
|
19
|
+
* - Save calls /managePlano/updateLayoutTouchup (no task cascade)
|
|
20
|
+
*
|
|
21
|
+
* No canvas rendering or fixture editor lives here — the existing edit-plano
|
|
22
|
+
* surface IS the editor, so the visual is identical to the verification flow.
|
|
23
|
+
*/
|
|
24
|
+
export declare class LayoutTouchupComponent implements OnInit, OnDestroy {
|
|
25
|
+
private apiService;
|
|
26
|
+
private gs;
|
|
27
|
+
private toast;
|
|
28
|
+
private router;
|
|
29
|
+
private destroy$;
|
|
30
|
+
clientId: string;
|
|
31
|
+
storeOptions: StoreTouchupOption[];
|
|
32
|
+
selectedStore: StoreTouchupOption | null;
|
|
33
|
+
floorOptions: {
|
|
34
|
+
id: string;
|
|
35
|
+
label: string;
|
|
36
|
+
}[];
|
|
37
|
+
selectedFloorId: string;
|
|
38
|
+
isLoadingStores: boolean;
|
|
39
|
+
isLoadingFloor: boolean;
|
|
40
|
+
constructor(apiService: StoreBuilderService, gs: GlobalStateService, toast: ToastService, router: Router);
|
|
41
|
+
ngOnInit(): void;
|
|
42
|
+
ngOnDestroy(): void;
|
|
43
|
+
loadStores(): void;
|
|
44
|
+
onStoreChange(planoId: string | null): void;
|
|
45
|
+
loadFloorsForPlano(planoId: string): void;
|
|
46
|
+
openEditor(): void;
|
|
47
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<LayoutTouchupComponent, never>;
|
|
48
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<LayoutTouchupComponent, "lib-layout-touchup", never, {}, {}, never, never, false, never>;
|
|
49
|
+
}
|
|
50
|
+
export {};
|
package/lib/components/plano-tools/layout-touchup/touchup-editor/touchup-editor.component.d.ts
ADDED
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
import { AfterViewInit, ChangeDetectorRef, ElementRef, OnDestroy, OnInit, TemplateRef } from "@angular/core";
|
|
2
|
+
import { Location, TitleCasePipe } from "@angular/common";
|
|
3
|
+
import { FormArray, FormBuilder, FormControl, FormGroup } from "@angular/forms";
|
|
4
|
+
import { ActivatedRoute, Router } from "@angular/router";
|
|
5
|
+
import { Subject, Subscription } from "rxjs";
|
|
6
|
+
import { NgbAccordionDirective, NgbModal } from "@ng-bootstrap/ng-bootstrap";
|
|
7
|
+
import * as fabric from "fabric";
|
|
8
|
+
import { GlobalStateService, PageInfoService } from "tango-app-ui-global";
|
|
9
|
+
import { ToastService } from "tango-app-ui-shared";
|
|
10
|
+
import { StoreBuilderService } from "../../../../services/store-builder.service";
|
|
11
|
+
import { DropdownIF } from "../../../../interfaces/plano-general.interface";
|
|
12
|
+
import * as i0 from "@angular/core";
|
|
13
|
+
type BoundFixtureGroup = {
|
|
14
|
+
fixtureGroup: fabric.Group;
|
|
15
|
+
offsetX: number;
|
|
16
|
+
offsetY: number;
|
|
17
|
+
_tempOldTop?: number;
|
|
18
|
+
_tempOldLeft?: number;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Layout Touchup Editor — full clone of ManageStorePlanoComponent for the
|
|
22
|
+
* internal Layout Touchup tool flow.
|
|
23
|
+
*
|
|
24
|
+
* Identical canvas rendering, fixture editor (uses the same 3 standalone tab
|
|
25
|
+
* components from TangoStoreBuilderModule with `revertOnEdit=false` so per-
|
|
26
|
+
* fixture saves don't cascade), and form patching logic — verification /
|
|
27
|
+
* task / publish / assign UI is removed from the template so users can't
|
|
28
|
+
* accidentally mutate task state.
|
|
29
|
+
*
|
|
30
|
+
* Top "Save" calls /managePlano/updateLayoutTouchup which on the backend:
|
|
31
|
+
* - rejects any add/remove of walls / fixtures / entrances / otherElements
|
|
32
|
+
* - upserts geometry + fixture detail fields ONLY
|
|
33
|
+
* - never touches processedTask / planoTaskCompliance / planoCompliance
|
|
34
|
+
* - never flips floor status (verificationStatus, isPlanoApproved, etc.)
|
|
35
|
+
*
|
|
36
|
+
* Maintenance note: keep this file in approximate sync with
|
|
37
|
+
* manage-store-plano.component.ts for canvas-rendering bug fixes. The two are
|
|
38
|
+
* intentionally independent so the verification flow is never destabilized by
|
|
39
|
+
* touchup changes (and vice versa).
|
|
40
|
+
*/
|
|
41
|
+
export declare class TouchupEditorComponent implements AfterViewInit, OnDestroy, OnInit {
|
|
42
|
+
private apiService;
|
|
43
|
+
private route;
|
|
44
|
+
private fb;
|
|
45
|
+
private gs;
|
|
46
|
+
private titleCase;
|
|
47
|
+
private toastService;
|
|
48
|
+
private modalService;
|
|
49
|
+
private pageInfo;
|
|
50
|
+
private location;
|
|
51
|
+
private router;
|
|
52
|
+
private cd;
|
|
53
|
+
canvasRef: ElementRef<HTMLCanvasElement>;
|
|
54
|
+
containerRef: ElementRef<HTMLDivElement>;
|
|
55
|
+
noStoreVideoModalRef: TemplateRef<any>;
|
|
56
|
+
applyLogicsModalRef: TemplateRef<any>;
|
|
57
|
+
approveLayoutModalRef: TemplateRef<any>;
|
|
58
|
+
bodyAccordion?: NgbAccordionDirective;
|
|
59
|
+
onResize(): void;
|
|
60
|
+
destroy$: Subject<unknown>;
|
|
61
|
+
clientId: string;
|
|
62
|
+
canvas: fabric.Canvas;
|
|
63
|
+
zoomLevel: number;
|
|
64
|
+
wallThickness: number;
|
|
65
|
+
verticalMargin: number;
|
|
66
|
+
wallBindings: Map<fabric.Group, BoundFixtureGroup[]>;
|
|
67
|
+
layoutForm: FormGroup;
|
|
68
|
+
selectedFloorId: FormControl<string | null>;
|
|
69
|
+
floorsList: DropdownIF[][];
|
|
70
|
+
fixtureConfigSubscriptions: Subscription[];
|
|
71
|
+
fixtureTemplateIdSubscriptions: Subscription[];
|
|
72
|
+
otherElementsSubscriptions: Subscription[];
|
|
73
|
+
planoData: any;
|
|
74
|
+
floorData: any;
|
|
75
|
+
readonly originalFloorData: any;
|
|
76
|
+
cdnUrl: string;
|
|
77
|
+
fixtureTemplates: any[];
|
|
78
|
+
allFixtures: any[];
|
|
79
|
+
allFixtureInstances: any[];
|
|
80
|
+
storeFeedback: any;
|
|
81
|
+
zoneFeedback: any;
|
|
82
|
+
selectedZoneFeedback: any;
|
|
83
|
+
private isClComplianceRow;
|
|
84
|
+
get zonePendingCount(): number;
|
|
85
|
+
get zoneRedoCount(): number;
|
|
86
|
+
get zoneRedoStatus(): boolean;
|
|
87
|
+
get zoneTaskStyle(): {
|
|
88
|
+
name: string;
|
|
89
|
+
class: string;
|
|
90
|
+
};
|
|
91
|
+
get showTopPublish(): boolean;
|
|
92
|
+
get topPublishDisabled(): boolean;
|
|
93
|
+
readonly shouldRevertOnEdit: boolean;
|
|
94
|
+
readonly canMutateStructure: boolean;
|
|
95
|
+
isSyncingZoneResponse: boolean;
|
|
96
|
+
selectedFixture: any;
|
|
97
|
+
selectedFixtureData: any;
|
|
98
|
+
selectedFixtureFeedback: any;
|
|
99
|
+
editFixture: boolean;
|
|
100
|
+
editFixtureSection: "basic-details" | "products" | "vms";
|
|
101
|
+
activeFeedbackTab: "fixture" | "zone";
|
|
102
|
+
editFromTab: "fixture" | "zone";
|
|
103
|
+
submitFixture: boolean;
|
|
104
|
+
highlightedFixtureFormId: string | null;
|
|
105
|
+
storeMetrics: {
|
|
106
|
+
floorCount: number;
|
|
107
|
+
fixtureCount: number;
|
|
108
|
+
vmCount: number;
|
|
109
|
+
};
|
|
110
|
+
isPageLoading: boolean;
|
|
111
|
+
isRightPanelCollapsed: boolean;
|
|
112
|
+
isLeftPanelCollapsed: boolean;
|
|
113
|
+
selectedView: "tree" | "detail";
|
|
114
|
+
publishingState: "layout" | "layout-redo" | "fixture" | "fixture-redo" | "vm" | "vm-redo" | "complete" | "";
|
|
115
|
+
disabledPublish: boolean;
|
|
116
|
+
disableEdit: boolean;
|
|
117
|
+
isSavingLayout: boolean;
|
|
118
|
+
layoutHasUnsavedChanges: boolean;
|
|
119
|
+
taskInfo: any;
|
|
120
|
+
taskStyle: {
|
|
121
|
+
layout: {
|
|
122
|
+
name: string;
|
|
123
|
+
class: string;
|
|
124
|
+
};
|
|
125
|
+
fixture: {
|
|
126
|
+
name: string;
|
|
127
|
+
class: string;
|
|
128
|
+
};
|
|
129
|
+
vm: {
|
|
130
|
+
name: string;
|
|
131
|
+
class: string;
|
|
132
|
+
};
|
|
133
|
+
};
|
|
134
|
+
otherElementList: DropdownIF[];
|
|
135
|
+
storeList: any;
|
|
136
|
+
selectedStoreName: any;
|
|
137
|
+
private activeHighlight;
|
|
138
|
+
private cancelHighlightBlink;
|
|
139
|
+
isButtonLoading: boolean;
|
|
140
|
+
isStoreTourLoading: boolean;
|
|
141
|
+
layoutBounds: any;
|
|
142
|
+
showLayout: boolean;
|
|
143
|
+
clCount: number;
|
|
144
|
+
wallCount: number;
|
|
145
|
+
toggle: boolean;
|
|
146
|
+
constructor(apiService: StoreBuilderService, route: ActivatedRoute, fb: FormBuilder, gs: GlobalStateService, titleCase: TitleCasePipe, toastService: ToastService, modalService: NgbModal, pageInfo: PageInfoService, location: Location, router: Router, cd: ChangeDetectorRef);
|
|
147
|
+
ngOnInit(): void;
|
|
148
|
+
ngAfterViewInit(): void;
|
|
149
|
+
updateAllPositions(): Promise<void>;
|
|
150
|
+
applyGroupTransform(selection: fabric.ActiveSelection): void;
|
|
151
|
+
resizeCanvas(): void;
|
|
152
|
+
setupZoomHandlers(): void;
|
|
153
|
+
setPageData(): void;
|
|
154
|
+
onFixtureSave(): void;
|
|
155
|
+
onFixturePageCancel(): Promise<void>;
|
|
156
|
+
onFixtureSubmit(event: any): void;
|
|
157
|
+
togglePanel(side: "left" | "right", action?: boolean): void;
|
|
158
|
+
onFeedbackTabChange(tab: "fixture" | "zone"): void;
|
|
159
|
+
getZoneVerificationFeedback(planoId: string, floorId: string): Promise<unknown>;
|
|
160
|
+
selectZoneFeedback(fixtureId: string): void;
|
|
161
|
+
getStoreFeedback(planoId: string, floorId: string, filter: any, checkPublishState?: boolean): Promise<unknown>;
|
|
162
|
+
calculatePublishingState(): void;
|
|
163
|
+
getTemplate(fixtureConfigId: string): Promise<Object>;
|
|
164
|
+
processLayoutFeedback(storeFeedback: any[]): Promise<void>;
|
|
165
|
+
processFixtureFeedback(storeFeedback: any[]): void;
|
|
166
|
+
processVmFeedback(storeFeedback: any[]): void;
|
|
167
|
+
transferArrayItem<T = any>(currentArray: T[], targetArray: T[], currentIndex: number, targetIndex: number): void;
|
|
168
|
+
reorderFixture(floorData: any): void;
|
|
169
|
+
getElementValue(group: any): any;
|
|
170
|
+
private getWallByNumber;
|
|
171
|
+
roundToTwo(num: number): number;
|
|
172
|
+
getStoreFixtures(storeId: string, enable?: boolean): Promise<void>;
|
|
173
|
+
extractAllFixtures(floorData: any): void;
|
|
174
|
+
renderFloor(update?: boolean): Promise<void>;
|
|
175
|
+
drawInitialContent(): Promise<void>;
|
|
176
|
+
private getFullLayoutBounds;
|
|
177
|
+
private fitCanvasToLayoutAnimated;
|
|
178
|
+
drawLayoutElements(): Promise<true | undefined>;
|
|
179
|
+
private isPointInsidePolygon;
|
|
180
|
+
private getOccupiedRects;
|
|
181
|
+
private rectsOverlap;
|
|
182
|
+
private computeEmptyMargin;
|
|
183
|
+
drawFixtureRowLabel(text: string, x: number, y: number): void;
|
|
184
|
+
drawWall(canvas: fabric.Canvas, x: number, y: number, height: number, width: number, elementData: any): Promise<fabric.Group & {
|
|
185
|
+
objType: string;
|
|
186
|
+
data: any;
|
|
187
|
+
}>;
|
|
188
|
+
drawFixture(canvas: fabric.Canvas, x: number, y: number, height: number, width: number, fixtureData: any): Promise<(fabric.Group & {
|
|
189
|
+
wallIndex: number;
|
|
190
|
+
fixtureIndex: number;
|
|
191
|
+
fixtureId: string;
|
|
192
|
+
fixtureType: "wall" | "floor";
|
|
193
|
+
issue: boolean;
|
|
194
|
+
issueData: any;
|
|
195
|
+
taskType: string;
|
|
196
|
+
vmConfig: [];
|
|
197
|
+
objType: string;
|
|
198
|
+
}) | undefined>;
|
|
199
|
+
drawEntrance(canvas: fabric.Canvas, x: number, y: number, width: number, height: number, arrowWidth: number, elementData: any): void;
|
|
200
|
+
drawOtherElementsWithLabel(canvas: fabric.Canvas, x: number, y: number, a: number, width: number, height: number, element: any): fabric.Group;
|
|
201
|
+
drawBg(): void;
|
|
202
|
+
subscribeToFixtureConfigIdChanges(): void;
|
|
203
|
+
subscribeToOtherElementsChanges(): void;
|
|
204
|
+
updateCanvasOtherElementLabel(elementRef: any): void;
|
|
205
|
+
rotateCanvas(canvas: fabric.Canvas, angleDeg: number): void;
|
|
206
|
+
selectFixtureOnCanvasClick(target: any, collapseTaskInfo?: boolean): void;
|
|
207
|
+
selectFixtureFeedback(fixtureId: string, collapseTaskInfo?: boolean): void;
|
|
208
|
+
getFixtureTemplates(): Promise<void>;
|
|
209
|
+
createForm(): void;
|
|
210
|
+
get getFormWalls(): FormArray<any>;
|
|
211
|
+
get getFormFloorFixtures(): FormArray<any>;
|
|
212
|
+
get getFormFloorOtherElements(): FormArray<any>;
|
|
213
|
+
get getEntrances(): any;
|
|
214
|
+
get showFixturePreview(): boolean;
|
|
215
|
+
getWallOtherElements(wallIndex: number): FormArray<any>;
|
|
216
|
+
getFormFixtures(wallIndex: number): FormArray<any>;
|
|
217
|
+
patchWallElements({ elementType, elementNumber }: Record<string, any>): FormGroup<{
|
|
218
|
+
elementType: FormControl<any>;
|
|
219
|
+
elementNumber: FormControl<any>;
|
|
220
|
+
fixtures: FormArray<FormControl<unknown>>;
|
|
221
|
+
otherElements: FormArray<FormControl<unknown>>;
|
|
222
|
+
}>;
|
|
223
|
+
patchFixture({ fixtureName, fixtureConfigId, _id }: Record<string, any>): FormGroup<{
|
|
224
|
+
fixtureName: FormControl<any>;
|
|
225
|
+
fixtureConfigId: FormControl<any>;
|
|
226
|
+
_id: FormControl<any>;
|
|
227
|
+
}>;
|
|
228
|
+
addWallSpace(wallIndex: number, operation: "increment" | "decrement"): void;
|
|
229
|
+
deleteFixture(fixtureType: "wall" | "floor", fixtureIndex: number, wallIndex?: number): void;
|
|
230
|
+
private hasUnsavedLayoutChanges;
|
|
231
|
+
removeOtherElement(elementType: "wall" | "floor", elementIndex: number, wallIndex?: number): void;
|
|
232
|
+
changeFixtureTemplate(configId: string, fixtureType: "wall" | "floor", fixtureIndex: number, wallIndex?: number): void;
|
|
233
|
+
onDrop(event: any, destinationWallIndex: number | "floor", destinationFixtureIndex?: number): void;
|
|
234
|
+
downloadCanvas(): void;
|
|
235
|
+
private createExportLayoutBackground;
|
|
236
|
+
private buildLayoutPolygonFromWalls;
|
|
237
|
+
handleFeedbackAction(userAction: any): Promise<void>;
|
|
238
|
+
private mergeAiFixtureData;
|
|
239
|
+
private replaceFixtureInFloorData;
|
|
240
|
+
private buildLocalActionComment;
|
|
241
|
+
private mergeZoneFixtureData;
|
|
242
|
+
handleZoneFeedbackAction(userAction: any): Promise<void>;
|
|
243
|
+
private buildZoneModifiedAnswer;
|
|
244
|
+
private persistZoneEditAccepted;
|
|
245
|
+
rotateWall(eleNumber: number): void;
|
|
246
|
+
addNewWall(eleNumber: number): void;
|
|
247
|
+
addNewEntrance(): void;
|
|
248
|
+
private isAddingFixture;
|
|
249
|
+
addNewFixture(fixtureType: "wall" | "floor", wallIndex?: number): Promise<void>;
|
|
250
|
+
private addNewFixtureInternal;
|
|
251
|
+
addNewOtherElements(posType: "wall" | "floor", wallIndex?: number): void;
|
|
252
|
+
findEmptyCenterSpot(objectWidthPx: number, objectHeightPx: number, tempOccupied?: {
|
|
253
|
+
x: number;
|
|
254
|
+
y: number;
|
|
255
|
+
width: number;
|
|
256
|
+
height: number;
|
|
257
|
+
}[]): {
|
|
258
|
+
x: number;
|
|
259
|
+
y: number;
|
|
260
|
+
} | null;
|
|
261
|
+
cancelEdit(): Promise<void>;
|
|
262
|
+
listenToDeleteKey(): void;
|
|
263
|
+
deleteEntrance(): void;
|
|
264
|
+
deleteWall(eleNumber: number): Promise<void>;
|
|
265
|
+
updateWallElementNumber(): void;
|
|
266
|
+
toPixels(value: number, unit: string, dpi?: number): number;
|
|
267
|
+
fromPixels(pixels: number, unit: string, dpi?: number): number;
|
|
268
|
+
confirmEdit(): Promise<boolean>;
|
|
269
|
+
confirmDeleteWall(): Promise<boolean>;
|
|
270
|
+
updateFixtureCoordinates(fixtures?: any): void;
|
|
271
|
+
updateOtherElementsCoordinates(): void;
|
|
272
|
+
updateWallCoordinates(): void;
|
|
273
|
+
updateEntranceCoordinates(): void;
|
|
274
|
+
/**
|
|
275
|
+
* Touchup save — calls /managePlano/updateLayoutTouchup which never wipes
|
|
276
|
+
* task rows or flips floor status. Shows a touchup-specific confirm dialog
|
|
277
|
+
* (the original verification flow's confirmEdit warns about resetting
|
|
278
|
+
* progress — not applicable here).
|
|
279
|
+
*
|
|
280
|
+
* editMode arg is kept for template parity with manage-store-plano's Save
|
|
281
|
+
* button, but is ignored — every touchup save behaves the same way.
|
|
282
|
+
*/
|
|
283
|
+
updateLayout(_editMode?: boolean): Promise<void>;
|
|
284
|
+
/**
|
|
285
|
+
* Layout Touchup — Sync zone response.
|
|
286
|
+
*
|
|
287
|
+
* For each zone-verification compliance row on this floor, rewrites
|
|
288
|
+
* `answers[0].shelfConfig` to match the fixture's current shelves: shelf
|
|
289
|
+
* count + per-shelf zone come from the fixture, user-submitted
|
|
290
|
+
* productBrandName / productCategory are preserved (zone-normalized for
|
|
291
|
+
* newly added shelves). See /managePlano/syncZoneResponseFromFixtures on
|
|
292
|
+
* the BE.
|
|
293
|
+
*
|
|
294
|
+
* Only available in non-edit mode (gated in template via *ngIf="!layoutForm.enabled").
|
|
295
|
+
*/
|
|
296
|
+
syncZoneResponse(): Promise<void>;
|
|
297
|
+
assignTask(): Promise<void>;
|
|
298
|
+
revokeZoneTask(): void;
|
|
299
|
+
publishZoneVerification(): Promise<void>;
|
|
300
|
+
publishZoneRedo(): Promise<void>;
|
|
301
|
+
onClickEdit(): void;
|
|
302
|
+
taskDetails(planoId: any, floorId: any): Promise<unknown>;
|
|
303
|
+
getStatus(type: any): {
|
|
304
|
+
name: string;
|
|
305
|
+
class: string;
|
|
306
|
+
};
|
|
307
|
+
getElementNumber(group: any): number | null;
|
|
308
|
+
highlightFixture(group: any, blink?: boolean): void;
|
|
309
|
+
removeHighlight(): void;
|
|
310
|
+
keepHighlightOnTop: () => void;
|
|
311
|
+
highlightFixtureInAccordion(fixtureData: any): void;
|
|
312
|
+
onChangeFixtureOnFeedbackPanel({ currentFixture, action, }: {
|
|
313
|
+
currentFixture?: string;
|
|
314
|
+
action?: "next" | "previous";
|
|
315
|
+
}, collapseTaskInfo?: boolean): void;
|
|
316
|
+
revokeTask(): void;
|
|
317
|
+
publish(): void;
|
|
318
|
+
goToStoreTourPage(): Promise<void>;
|
|
319
|
+
openNoVideoFoundModal(): Promise<void>;
|
|
320
|
+
goToStoreCameraPage(): void;
|
|
321
|
+
getStoreList(planoId?: string): void;
|
|
322
|
+
onSelected(event: any): Promise<void>;
|
|
323
|
+
applyPIDLogics(): Promise<void>;
|
|
324
|
+
onClickApplyLogics(): Promise<void>;
|
|
325
|
+
onClickApproveLayout(): Promise<void>;
|
|
326
|
+
approveLayout(): Promise<void>;
|
|
327
|
+
ngOnDestroy(): void;
|
|
328
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<TouchupEditorComponent, never>;
|
|
329
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<TouchupEditorComponent, "lib-touchup-editor", never, {}, {}, never, never, false, never>;
|
|
330
|
+
}
|
|
331
|
+
export {};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
export declare class ToolPageHeaderComponent {
|
|
3
|
+
title: string;
|
|
4
|
+
description: string;
|
|
5
|
+
backLink: string;
|
|
6
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ToolPageHeaderComponent, never>;
|
|
7
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ToolPageHeaderComponent, "lib-tool-page-header", never, { "title": { "alias": "title"; "required": false; }; "description": { "alias": "description"; "required": false; }; "backLink": { "alias": "backLink"; "required": false; }; }, {}, never, never, false, never>;
|
|
8
|
+
}
|
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
import { OnInit } from "@angular/core";
|
|
2
2
|
import { NgbModal } from "@ng-bootstrap/ng-bootstrap";
|
|
3
|
-
import { GlobalStateService } from "tango-app-ui-global";
|
|
3
|
+
import { GlobalStateService, PageInfoService } from "tango-app-ui-global";
|
|
4
4
|
import { Router } from "@angular/router";
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
export declare class ToolsParentComponent implements OnInit {
|
|
7
7
|
private ngbModal;
|
|
8
8
|
private router;
|
|
9
9
|
private gs;
|
|
10
|
+
private pageInfo;
|
|
10
11
|
clientId: string;
|
|
11
12
|
private readonly destroy$;
|
|
12
|
-
constructor(ngbModal: NgbModal, router: Router, gs: GlobalStateService);
|
|
13
|
+
constructor(ngbModal: NgbModal, router: Router, gs: GlobalStateService, pageInfo: PageInfoService);
|
|
13
14
|
ngOnInit(): void;
|
|
15
|
+
setPageData(): void;
|
|
14
16
|
onClickCreateFixtureTemplate(): void;
|
|
15
17
|
ngOnDestroy(): void;
|
|
16
18
|
static ɵfac: i0.ɵɵFactoryDeclaration<ToolsParentComponent, never>;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { CanActivateFn } from '@angular/router';
|
|
2
|
+
/**
|
|
3
|
+
* Route guard for the Find & Replace pages. Allows navigation only when the
|
|
4
|
+
* session user's email is in the planostaticdatas `allowedFindReplaceUsers`
|
|
5
|
+
* allowlist (checked server-side via StoreBuilderService.getFindReplaceAccess).
|
|
6
|
+
* Denied users — and any error resolving access — are redirected to the shared
|
|
7
|
+
* Access-denied view. Same email-based mechanism the Looks feature uses.
|
|
8
|
+
*/
|
|
9
|
+
export declare const findReplaceAccessGuard: CanActivateFn;
|
|
@@ -20,4 +20,13 @@ export declare function uniqueFieldInFormArrayValidator(fieldName: string): Vali
|
|
|
20
20
|
export declare const getNameFromEmail: (email: string) => string;
|
|
21
21
|
export declare const indianPincodeValidator: () => ValidatorFn;
|
|
22
22
|
export declare const getFixtureCanvasLabel: (fixture: any) => string;
|
|
23
|
+
/**
|
|
24
|
+
* Computes a fixture's product capacity as the live sum of its individual
|
|
25
|
+
* shelf capacities, mirroring the backend rule: a tray holds
|
|
26
|
+
* productPerShelf x trayRows, a plain shelf holds productPerShelf, and
|
|
27
|
+
* VM-only shelves carry no products. Always derive the displayed "Products"
|
|
28
|
+
* count from this (the shelf config) rather than the stored fixtureCapacity,
|
|
29
|
+
* which can be stale relative to the current shelves.
|
|
30
|
+
*/
|
|
31
|
+
export declare const getFixtureProductCapacity: (shelfConfig: any) => number;
|
|
23
32
|
export declare const lightenColor: (hex: string, amount?: number) => string;
|
|
@@ -79,6 +79,16 @@ export declare class StoreBuilderService implements OnDestroy {
|
|
|
79
79
|
updateApprovalStatus(data: any): import("rxjs").Observable<Object>;
|
|
80
80
|
getStoreFixturesfeedback(data: any): import("rxjs").Observable<Object>;
|
|
81
81
|
updateStorePlano(data: any): import("rxjs").Observable<Object>;
|
|
82
|
+
updateLayoutTouchup(data: {
|
|
83
|
+
planoId: string;
|
|
84
|
+
floorId: string;
|
|
85
|
+
data: any;
|
|
86
|
+
}): import("rxjs").Observable<Object>;
|
|
87
|
+
getStoresForTouchup(): import("rxjs").Observable<Object>;
|
|
88
|
+
syncZoneResponseFromFixtures(data: {
|
|
89
|
+
planoId: string;
|
|
90
|
+
floorId: string;
|
|
91
|
+
}): import("rxjs").Observable<Object>;
|
|
82
92
|
getStoreFeedback(data: any): import("rxjs").Observable<Object>;
|
|
83
93
|
getRolloutFeedback(data: any): import("rxjs").Observable<Object>;
|
|
84
94
|
getZoneVerificationFeedback(data: any): import("rxjs").Observable<Object>;
|
|
@@ -272,6 +282,12 @@ export declare class StoreBuilderService implements OnDestroy {
|
|
|
272
282
|
storeNames: string[];
|
|
273
283
|
vmName: string;
|
|
274
284
|
}): import("rxjs").Observable<Object>;
|
|
285
|
+
/** Whether the current session user may access Find & Replace
|
|
286
|
+
* (email present in planostaticdatas `allowedFindReplaceUsers`). */
|
|
287
|
+
getFindReplaceAccess(): import("rxjs").Observable<Object>;
|
|
288
|
+
/** Whether the current session user may access the Fixture Library
|
|
289
|
+
* (email present in planostaticdatas `allowedFixtureLibraryUsers`). */
|
|
290
|
+
getFixtureLibraryAccess(): import("rxjs").Observable<Object>;
|
|
275
291
|
/** Whether the current session user may access the Looks feature
|
|
276
292
|
* (email present in planostaticdatas `allowedLookUsers`). */
|
|
277
293
|
getLookAccess(): import("rxjs").Observable<Object>;
|