@feedmepos/mf-hrm-portal 2.3.2-dev.3 → 2.3.2-dev.5
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/dist/{ApprovalCodeList-D3U4nvlF.js → ApprovalCodeList-NYJNwdDZ.js} +14 -15
- package/dist/{AuditLogList-qGCW7tf0.js → AuditLogList-Ghn4aBnn.js} +12 -12
- package/dist/ConditionBuilderForm.vue_vue_type_script_setup_true_lang-BxZ9t3MZ.js +459 -0
- package/dist/EmployeeList-jc8LTznV.js +896 -0
- package/dist/FormSection.vue_vue_type_script_setup_true_lang-DLgm6oCz.js +90 -0
- package/dist/{GrantUserList-C71pal0N.js → GrantUserList-BtPTpypR.js} +15 -16
- package/dist/Main-BF8hlYeV.js +101 -0
- package/dist/{Main-CCdTWngg.js → Main-BizCV-_x.js} +11 -11
- package/dist/{Main-BWJPyEU1.js → Main-McMZU_cR.js} +5 -5
- package/dist/MyPosProfile-BjeCnBvL.js +290 -0
- package/dist/PasscodePinField.vue_vue_type_script_setup_true_lang-TXPEqa46.js +126 -0
- package/dist/{PermissionSetList-BS-oBunI.js → PermissionSetList-NWLoqFHC.js} +45 -46
- package/dist/PortalPermissionEditor.vue_vue_type_script_setup_true_lang-UPcpeVD5.js +4243 -0
- package/dist/PortalUserSearcher.vue_vue_type_style_index_0_scoped_827dfd60_lang-nwpdr7T7.js +1831 -0
- package/dist/RoleForm.vue_vue_type_script_setup_true_lang-eT-dPsOX.js +547 -0
- package/dist/RoleList-CIfN10zu.js +274 -0
- package/dist/{ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-BXihM4sl.js → ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-CMTXC_UR.js} +1 -1
- package/dist/{ScheduleGeneralPage-DpNvWNGs.js → ScheduleGeneralPage-8vS1DUrk.js} +2 -2
- package/dist/{ScheduleModal.vue_vue_type_script_setup_true_lang-DIYLOF9N.js → ScheduleModal.vue_vue_type_script_setup_true_lang-Br4AcF1g.js} +187 -186
- package/dist/{SchedulePage-QW-cYvu2.js → SchedulePage-DqbE1PoV.js} +13 -13
- package/dist/{SchedulePositionPage-BtFfVo2N.js → SchedulePositionPage-DUnkT0Tp.js} +3 -3
- package/dist/{SelectFilter-BXeVKgHN.js → SelectFilter-voMj4_j1.js} +1 -1
- package/dist/TeamMemberList-DoEOWNDC.js +2086 -0
- package/dist/{TimesheetList-D-bESKe5.js → TimesheetList-BBv2SV96.js} +9 -9
- package/dist/{TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-D0zAVqCa.js → TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-h-bWBmpI.js} +3 -3
- package/dist/{app-D-MUq9Ab.js → app-CDCO87ji.js} +6389 -3455
- package/dist/app.js +3 -3
- package/dist/{approval-code-BXUiojPH.js → approval-code-CLE9s5dL.js} +1 -1
- package/dist/{dayjs.min-BZ1pM-6M.js → dayjs.min-BW6-XAUB.js} +21 -21
- package/dist/{employee-HQEU8fjb.js → employee-BaCU-FLC.js} +48 -47
- package/dist/{grant-user-CBJ3gEgW.js → grant-user-DMtilLJx.js} +1 -1
- package/dist/{iteration-ogxW2-Tv.js → iteration-CPLGGFBb.js} +1 -1
- package/dist/{lodash-Def4gaas.js → lodash-snXoiw60.js} +1 -1
- package/dist/member-grant-CJyOr-q0.js +55 -0
- package/dist/restaurant-BMlLIUqe.js +51 -0
- package/dist/{role-JDoDFVd9.js → role-DqcBOWHL.js} +5 -4
- package/dist/{rule-DPtqlnz-.js → rule-B5YNhGJ4.js} +105 -100
- package/dist/src/api/my-pos-profile/index.d.ts +3 -0
- package/dist/src/api/sso-provider/index.d.ts +5 -0
- package/dist/src/api/staff-invite/index.d.ts +16 -0
- package/dist/src/components/CollapsibleWrapper.vue.d.ts +11 -3
- package/dist/src/components/form/SegmentedTabs.vue.d.ts +23 -0
- package/dist/src/composables/useMenuAccess.d.ts +56 -0
- package/dist/src/composables/useSsoProviders.d.ts +19 -0
- package/dist/src/composables/useStaffInviteProviders.d.ts +8 -0
- package/dist/src/helpers/member-grant.d.ts +36 -0
- package/dist/src/helpers/my-pos-profile.d.ts +37 -0
- package/dist/src/helpers/pos-assignment-rows.d.ts +28 -0
- package/dist/src/helpers/staff-invite.d.ts +54 -0
- package/dist/src/helpers/string.d.ts +10 -1
- package/dist/src/router/menu-access-guard.d.ts +17 -0
- package/dist/src/router/shared.d.ts +3 -1
- package/dist/src/stores/restaurant.d.ts +7 -7
- package/dist/src/stores/team.d.ts +30 -0
- package/dist/src/types/my-pos-profile.d.ts +24 -0
- package/dist/src/types/sso-provider.d.ts +10 -0
- package/dist/src/types/staff-invite.d.ts +100 -0
- package/dist/src/types/team.d.ts +17 -1
- package/dist/src/views/hr/locales/index.d.ts +20 -0
- package/dist/src/views/hr/role/RoleForm.vue.d.ts +29 -2
- package/dist/src/views/my-pos-profile/MyPosProfile.vue.d.ts +2 -0
- package/dist/src/views/my-pos-profile/components/PasscodeChangedDialog.vue.d.ts +4 -0
- package/dist/src/views/my-pos-profile/locales/index.d.ts +196 -0
- package/dist/src/views/scheduling/composables/useScheduleOnboardingAvailability.d.ts +1 -1
- package/dist/src/views/scheduling/composables/useScheduleOnboardingWizard.d.ts +1 -1
- package/dist/src/views/scheduling/composables/useScheduleShiftDraft.d.ts +1 -1
- package/dist/src/views/scheduling/composables/useScheduleShiftPopover.d.ts +1 -1
- package/dist/src/views/team/components/BasePermission.vue.d.ts +11 -0
- package/dist/src/views/team/components/ConditionPermission.vue.d.ts +11 -0
- package/dist/src/views/team/components/MemberGrantFields.vue.d.ts +51 -0
- package/dist/src/views/team/{member/MemberInfo.vue.d.ts → components/MemberStatusBadge.vue.d.ts} +2 -2
- package/dist/src/views/team/components/PortalPermissionEditor.vue.d.ts +21 -0
- package/dist/src/views/team/components/PosAssignmentRows.vue.d.ts +44 -0
- package/dist/src/views/team/components/PosRolePermission.vue.d.ts +11 -0
- package/dist/src/views/team/locales/index.d.ts +716 -0
- package/dist/src/views/team/member/AddMemberForm.vue.d.ts +48 -3
- package/dist/src/views/team/member/ExistingMemberNotice.vue.d.ts +11 -0
- package/dist/src/views/team/member/MemberDetailsCard.vue.d.ts +35 -0
- package/dist/src/views/team/member/MemberHeaderCard.vue.d.ts +19 -0
- package/dist/src/views/team/member/TeamMemberList.vue.d.ts +1 -0
- package/dist/string-DZQ1uNjn.js +22 -0
- package/dist/style.css +1 -1
- package/dist/tsconfig.app.tsbuildinfo +1 -1
- package/dist/{useAppStore-DZCdxlCd.js → useAppStore-pKAGQL6q.js} +1 -1
- package/dist/{useLoading-Nygx2zn8.js → useLoading-D67DIqfk.js} +1 -1
- package/dist/{useReportPermissions-CxV7Dz1B.js → useReportPermissions-CfgnE0NY.js} +5 -5
- package/package.json +1 -1
- package/dist/ConditionBuilderForm.vue_vue_type_script_setup_true_lang-B0VcRYUg.js +0 -438
- package/dist/EmployeeList-Bd73xDCX.js +0 -776
- package/dist/FormItem.vue_vue_type_script_setup_true_lang-cLEnrtC6.js +0 -45
- package/dist/FormSection.vue_vue_type_script_setup_true_lang-DknXTYiK.js +0 -49
- package/dist/Main-DGf0bQvy.js +0 -96
- package/dist/PasscodePinField.vue_vue_type_script_setup_true_lang-CqG0v0Sz.js +0 -243
- package/dist/PortalPermissionEditor.vue_vue_type_script_setup_true_lang-CkOAT-oX.js +0 -4167
- package/dist/PortalUserSearcher.vue_vue_type_style_index_0_scoped_827dfd60_lang-DQcgZ0nF.js +0 -35
- package/dist/RoleList-B_7UnVNb.js +0 -740
- package/dist/TeamMemberList-DoisBYnk.js +0 -1154
- package/dist/restaurant-D2mfKHaH.js +0 -1880
- package/dist/string-VNuQNweN.js +0 -15
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { FdtoMyPosProfile, FdtoMyPosProfileAssignment } from '@/types/my-pos-profile';
|
|
2
|
+
type Profile = NonNullable<FdtoMyPosProfile['profile']>;
|
|
3
|
+
export interface MyPosProfileRow {
|
|
4
|
+
/** Name and contact show on the first row only, as in the design. */
|
|
5
|
+
name: string | null;
|
|
6
|
+
contact: string | null;
|
|
7
|
+
restaurant: string;
|
|
8
|
+
role: string;
|
|
9
|
+
assignment: FdtoMyPosProfileAssignment;
|
|
10
|
+
}
|
|
11
|
+
/** A null phone number shows the email instead (contract). */
|
|
12
|
+
export declare const profileContact: (profile: Profile) => string;
|
|
13
|
+
/** One row per assignment; name and contact on the first row only. */
|
|
14
|
+
export declare function toProfileRows(profile: Profile): MyPosProfileRow[];
|
|
15
|
+
/**
|
|
16
|
+
* "Updated …" for the passcode card: null when the change time is unknown (D53: the line
|
|
17
|
+
* is hidden), "just now" under a minute, else a localized relative time. Weeks run to 13
|
|
18
|
+
* (the design shows "12 weeks ago") before months take over.
|
|
19
|
+
*/
|
|
20
|
+
export declare function formatPasscodeUpdated(updatedAt: string | null, t: (key: string, values?: Record<string, unknown>) => string, locale: string, now?: number): string | null;
|
|
21
|
+
/**
|
|
22
|
+
* Opens account-service's Manage Account page through the FeedMeAuth that
|
|
23
|
+
* @feedmepos/mf-common exposes (the same page the portal shell's "Manage Account" leads
|
|
24
|
+
* to). openManageProfile is newer than the @feedmepos/auth types this app builds against,
|
|
25
|
+
* so it is looked up at runtime. Returns false when it is missing or throws (e.g. no
|
|
26
|
+
* FeedMe session), for the caller to report.
|
|
27
|
+
*/
|
|
28
|
+
export declare function openManageAccount(auth: object): boolean;
|
|
29
|
+
/**
|
|
30
|
+
* 409 `pos_user_shared`: the POS user's id is shared with another team member, so the
|
|
31
|
+
* backend refuses to show or change it (KDI-5225 review #1). Checked structurally, so
|
|
32
|
+
* callers need not import the API client.
|
|
33
|
+
*/
|
|
34
|
+
export declare const isPosUserSharedError: (err: unknown) => boolean;
|
|
35
|
+
/** Locale key for a failed Change passcode. */
|
|
36
|
+
export declare function passcodeChangeErrorKey(err: unknown): string;
|
|
37
|
+
export {};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { HrmRestaurant } from '@/types/restaurant';
|
|
2
|
+
import type { Role } from '@/types/role';
|
|
3
|
+
import type { IFdtoPermissionPosUserRole } from '@/types/team';
|
|
4
|
+
/** One row of the POS access card: the outlets that share a POS role. */
|
|
5
|
+
export interface PosAssignmentRow {
|
|
6
|
+
restaurantIds: string[];
|
|
7
|
+
roleId: string;
|
|
8
|
+
}
|
|
9
|
+
export interface SelectOption {
|
|
10
|
+
label: string;
|
|
11
|
+
value: string;
|
|
12
|
+
disabled: boolean;
|
|
13
|
+
}
|
|
14
|
+
/** Groups a POS user's per-outlet roles into rows by role, in first-seen order. */
|
|
15
|
+
export declare function toRows(roles: IFdtoPermissionPosUserRole[]): PosAssignmentRow[];
|
|
16
|
+
/** The per-outlet roles a POS user stores. A row without outlets adds nothing. */
|
|
17
|
+
export declare function toRoles(rows: PosAssignmentRow[]): IFdtoPermissionPosUserRole[];
|
|
18
|
+
export declare function sameRoles(a: IFdtoPermissionPosUserRole[], b: IFdtoPermissionPosUserRole[]): boolean;
|
|
19
|
+
export declare function restaurantLabel(restaurant: HrmRestaurant): string;
|
|
20
|
+
/** The row's outlets as one line for its select field, in the order the list shows them. */
|
|
21
|
+
export declare function rowRestaurantSummary(restaurants: HrmRestaurant[], row: PosAssignmentRow): string;
|
|
22
|
+
/** Outlets for a row; one already in another row can't be picked twice. */
|
|
23
|
+
export declare function rowRestaurantOptions(restaurants: HrmRestaurant[], rows: PosAssignmentRow[], index: number): SelectOption[];
|
|
24
|
+
/** Roles that exist at every outlet of the row; unusable ones stay visible but disabled. */
|
|
25
|
+
export declare function rowRoleOptions(roles: Role[], row: PosAssignmentRow, isRoleUsable: (role: Role) => boolean): SelectOption[];
|
|
26
|
+
/** Keeps the row's role when it still applies to all its outlets, else the first usable one. */
|
|
27
|
+
export declare function pickRowRole(roles: Role[], row: PosAssignmentRow, isRoleUsable: (role: Role) => boolean): string;
|
|
28
|
+
export declare function canAddRow(restaurants: HrmRestaurant[], rows: PosAssignmentRow[]): boolean;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { RawRule } from '@casl/ability';
|
|
2
|
+
import { type IFdtoCreateStaffInviteReq, type IFdtoCreateStaffInviteRes, type IFdtoStaffInvite, type IFdtoStaffInviteProvider, type IFdtoUpdateStaffInviteReq, type StaffInviteMatch, type StaffInviteWarning } from '@/types/staff-invite';
|
|
3
|
+
import type { IFdtoSsoProvider } from '@/types/sso-provider';
|
|
4
|
+
type Translate = (key: string, params?: Record<string, unknown>) => string;
|
|
5
|
+
/**
|
|
6
|
+
* Same check the backend makes for POST /portal-users: create on hrm::portalUsers, which the
|
|
7
|
+
* Team member toggle (hrm_teamMember:manage) grants through its system permission set.
|
|
8
|
+
*/
|
|
9
|
+
export declare function canCreatePortalUsers(permissions: RawRule[]): boolean;
|
|
10
|
+
/** The providers invites can go through: switched on, with a key to match people on. */
|
|
11
|
+
export declare function invitableProviders(providers: IFdtoSsoProvider[]): IFdtoStaffInviteProvider[];
|
|
12
|
+
export declare function canInviteStaff(providers: IFdtoStaffInviteProvider[], permissions: RawRule[]): boolean;
|
|
13
|
+
/** E.164 form of a valid phone number, or null. */
|
|
14
|
+
export declare function toE164(phone: string): string | null;
|
|
15
|
+
/** False for an empty field, including the bare dial code FmPhoneNumber keeps in its model. */
|
|
16
|
+
export declare function hasPhoneInput(phone: string): boolean;
|
|
17
|
+
export declare function isValidEmail(email: string): boolean;
|
|
18
|
+
export declare const DISPLAY_NAME_MAX_LENGTH = 100;
|
|
19
|
+
export declare const EMPLOYEE_ID_MAX_LENGTH = 50;
|
|
20
|
+
export declare function staffInviteKey(invite: IFdtoStaffInvite): string;
|
|
21
|
+
/** What the Update member sheet edits besides the grant. */
|
|
22
|
+
export interface InviteDetailsEdit {
|
|
23
|
+
displayName: string;
|
|
24
|
+
employeeId: string;
|
|
25
|
+
/** The contact that isn't the sign-in key; '' clears it. */
|
|
26
|
+
contact: string;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* An invite edit from the Update member sheet. Without `details` the name, employee ID and
|
|
30
|
+
* contact stay as saved (the backend clears a contact that is left out, so it is resent).
|
|
31
|
+
*/
|
|
32
|
+
export declare function toInviteGrantUpdateReq(invite: IFdtoStaffInvite, grant: Pick<IFdtoCreateStaffInviteReq, 'permissions' | 'customPermissions' | 'permissionSetIds' | 'posUser'>, details?: InviteDetailsEdit): IFdtoUpdateStaffInviteReq;
|
|
33
|
+
/** Provider label and key type, for copy that names the IdP or says "number"/"email". */
|
|
34
|
+
export interface StaffInviteCopyContext {
|
|
35
|
+
label: string;
|
|
36
|
+
match: StaffInviteMatch;
|
|
37
|
+
}
|
|
38
|
+
/** One message per warning. A direct add has no invite, so its copy says so. */
|
|
39
|
+
export declare function staffInviteWarningMessages(warnings: StaffInviteWarning[], ctx: StaffInviteCopyContext, t: Translate, result?: IFdtoCreateStaffInviteRes['result']): string[];
|
|
40
|
+
export declare function staffInviteResultMessage(res: IFdtoCreateStaffInviteRes, ctx: StaffInviteCopyContext, t: Translate): {
|
|
41
|
+
title: string;
|
|
42
|
+
lines: string[];
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* The message of a rejected request. The portal's own client rejects with an `ApiError`;
|
|
46
|
+
* mf-common's `baseClientInstance` (used when no backend URL is configured) rejects with the
|
|
47
|
+
* plain message string.
|
|
48
|
+
*/
|
|
49
|
+
export declare function errorMessageOf(err: unknown): string;
|
|
50
|
+
/** The invite was claimed, revoked or deleted elsewhere: the row is stale. */
|
|
51
|
+
export declare function isStaleInviteError(err: unknown): boolean;
|
|
52
|
+
/** Copy for a backend error code; any other message is shown as is. */
|
|
53
|
+
export declare function staffInviteErrorMessage(err: unknown, ctx: StaffInviteCopyContext, t: Translate): string;
|
|
54
|
+
export {};
|
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
declare function randomString(length: number, config?: {
|
|
2
2
|
includeSpecialCase: boolean;
|
|
3
3
|
}): string;
|
|
4
|
+
/**
|
|
5
|
+
* "A, B +2 more" for a selection; null means everything (the "include future" choice).
|
|
6
|
+
* Collapsed permission rows show it under their title.
|
|
7
|
+
*/
|
|
8
|
+
declare function summarizeNames(names: string[] | null, labels: {
|
|
9
|
+
all: string;
|
|
10
|
+
none: string;
|
|
11
|
+
more: (count: number) => string;
|
|
12
|
+
}, shown?: number): string;
|
|
4
13
|
declare const filter: {
|
|
5
14
|
alphabetOnly(word: string): string;
|
|
6
15
|
alphaNumeric(word: string): string;
|
|
@@ -10,4 +19,4 @@ declare const validate: {
|
|
|
10
19
|
email(input: string): RegExpMatchArray | null;
|
|
11
20
|
};
|
|
12
21
|
declare function nameInitials(name: string | null | undefined): string;
|
|
13
|
-
export { filter, validate, randomString, nameInitials };
|
|
22
|
+
export { filter, validate, randomString, nameInitials, summarizeNames };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type Component } from 'vue';
|
|
2
|
+
/**
|
|
3
|
+
* Wraps a top-level route component so a user who can't open the current route lands on
|
|
4
|
+
* the first menu item they can open (D52). It lives in the route records, so it works in
|
|
5
|
+
* the standalone router and in the host portal that mounts `routes`.
|
|
6
|
+
*
|
|
7
|
+
* - Accessible: render the page.
|
|
8
|
+
* - Not accessible, access still loading: render nothing (no flash of the no-permission page).
|
|
9
|
+
* - Not accessible, some item accessible: replace with that item.
|
|
10
|
+
* - Nothing accessible: today's behaviour. A route with a permission manifest renders its
|
|
11
|
+
* page, whose `withPermission` shows the no-permission screen; any other route (landing,
|
|
12
|
+
* My POS Profile) goes to Employee, which does the same. Targets are always either
|
|
13
|
+
* accessible or manifest-guarded, so this never loops.
|
|
14
|
+
*/
|
|
15
|
+
export declare function withMenuAccess(Comp?: Component): Component;
|
|
16
|
+
/** `/`: shows nothing and sends the user to the first page they can open. */
|
|
17
|
+
export declare const MenuLanding: Component;
|
|
@@ -8,12 +8,14 @@ export declare enum RouteName {
|
|
|
8
8
|
TEAM = "team",
|
|
9
9
|
TEAM_MEMBER = "team-member",
|
|
10
10
|
TEAM_ROLE = "team-role",
|
|
11
|
+
TEAM_INVITE = "team-invite",
|
|
11
12
|
POS_ACCESS = "pos-access",
|
|
12
13
|
POS_GRANT = "pos-grant",
|
|
13
14
|
APPROVAL_CODE = "approval-code",
|
|
14
15
|
SCHEDULE = "schedule",
|
|
15
16
|
SCHEDULE_POSITION = "schedule-position",
|
|
16
|
-
SCHEDULE_GENERAL = "schedule-general"
|
|
17
|
+
SCHEDULE_GENERAL = "schedule-general",
|
|
18
|
+
MY_POS_PROFILE = "my-pos-profile"
|
|
17
19
|
}
|
|
18
20
|
declare const routes: RouteRecordRaw[];
|
|
19
21
|
export { routes };
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { HrmRestaurant } from '@/types/restaurant';
|
|
2
2
|
export declare const useRestaurantStore: () => {
|
|
3
|
+
isLoading: import("vue").Ref<boolean, boolean>;
|
|
3
4
|
restaurants: import("vue").Ref<{
|
|
4
5
|
_id: string;
|
|
5
6
|
businessId: string;
|
|
@@ -19,8 +20,8 @@ export declare const useRestaurantStore: () => {
|
|
|
19
20
|
};
|
|
20
21
|
managable: boolean;
|
|
21
22
|
}[]>;
|
|
22
|
-
isLoading: import("vue").Ref<boolean, boolean>;
|
|
23
23
|
$state: {
|
|
24
|
+
isLoading: boolean;
|
|
24
25
|
restaurants: {
|
|
25
26
|
_id: string;
|
|
26
27
|
businessId: string;
|
|
@@ -31,7 +32,6 @@ export declare const useRestaurantStore: () => {
|
|
|
31
32
|
};
|
|
32
33
|
managable: boolean;
|
|
33
34
|
}[];
|
|
34
|
-
isLoading: boolean;
|
|
35
35
|
} & import("pinia").PiniaCustomStateProperties<Pick<{
|
|
36
36
|
restaurants: import("vue").Ref<{
|
|
37
37
|
_id: string;
|
|
@@ -54,8 +54,9 @@ export declare const useRestaurantStore: () => {
|
|
|
54
54
|
}[]>;
|
|
55
55
|
isLoading: import("vue").Ref<boolean, boolean>;
|
|
56
56
|
readRestaurants: (force?: boolean) => Promise<void>;
|
|
57
|
-
}, "
|
|
57
|
+
}, "isLoading" | "restaurants">>;
|
|
58
58
|
$patch(partialState: import("pinia")._DeepPartial<{
|
|
59
|
+
isLoading: boolean;
|
|
59
60
|
restaurants: {
|
|
60
61
|
_id: string;
|
|
61
62
|
businessId: string;
|
|
@@ -66,9 +67,9 @@ export declare const useRestaurantStore: () => {
|
|
|
66
67
|
};
|
|
67
68
|
managable: boolean;
|
|
68
69
|
}[];
|
|
69
|
-
isLoading: boolean;
|
|
70
70
|
}>): void;
|
|
71
71
|
$patch<F extends (state: {
|
|
72
|
+
isLoading: boolean;
|
|
72
73
|
restaurants: {
|
|
73
74
|
_id: string;
|
|
74
75
|
businessId: string;
|
|
@@ -79,7 +80,6 @@ export declare const useRestaurantStore: () => {
|
|
|
79
80
|
};
|
|
80
81
|
managable: boolean;
|
|
81
82
|
}[];
|
|
82
|
-
isLoading: boolean;
|
|
83
83
|
}) => any>(stateMutator: ReturnType<F> extends Promise<any> ? never : F): void;
|
|
84
84
|
$reset(): void;
|
|
85
85
|
$subscribe(callback: import("pinia").SubscriptionCallback<Pick<{
|
|
@@ -104,7 +104,7 @@ export declare const useRestaurantStore: () => {
|
|
|
104
104
|
}[]>;
|
|
105
105
|
isLoading: import("vue").Ref<boolean, boolean>;
|
|
106
106
|
readRestaurants: (force?: boolean) => Promise<void>;
|
|
107
|
-
}, "
|
|
107
|
+
}, "isLoading" | "restaurants">>, options?: {
|
|
108
108
|
detached?: boolean;
|
|
109
109
|
} & import("vue").WatchOptions): () => void;
|
|
110
110
|
$onAction(callback: import("pinia").StoreOnActionListener<"restaurant", Pick<{
|
|
@@ -129,7 +129,7 @@ export declare const useRestaurantStore: () => {
|
|
|
129
129
|
}[]>;
|
|
130
130
|
isLoading: import("vue").Ref<boolean, boolean>;
|
|
131
131
|
readRestaurants: (force?: boolean) => Promise<void>;
|
|
132
|
-
}, "
|
|
132
|
+
}, "isLoading" | "restaurants">, Pick<{
|
|
133
133
|
restaurants: import("vue").Ref<{
|
|
134
134
|
_id: string;
|
|
135
135
|
businessId: string;
|
|
@@ -17,6 +17,8 @@ declare const useTeamStore: import("pinia").StoreDefinition<"team", Pick<{
|
|
|
17
17
|
actions: ("update" | "create" | "read" | "delete" | "manage")[];
|
|
18
18
|
}[];
|
|
19
19
|
permissionLabels: string[];
|
|
20
|
+
status: import("@/types/team").TeamMemberStatus;
|
|
21
|
+
loginMethod: import("@/types/team").TeamMemberLoginMethod;
|
|
20
22
|
doc: {
|
|
21
23
|
id: string;
|
|
22
24
|
posUserId: string;
|
|
@@ -34,6 +36,9 @@ declare const useTeamStore: import("pinia").StoreDefinition<"team", Pick<{
|
|
|
34
36
|
roleId: string;
|
|
35
37
|
}[];
|
|
36
38
|
} | undefined;
|
|
39
|
+
employeeId?: string | null | undefined;
|
|
40
|
+
loginMethod: import("@/types/team").TeamMemberLoginMethod;
|
|
41
|
+
status: import("@/types/team").TeamMemberStatus;
|
|
37
42
|
businessId: string;
|
|
38
43
|
userId: string;
|
|
39
44
|
permissions: {
|
|
@@ -63,6 +68,8 @@ declare const useTeamStore: import("pinia").StoreDefinition<"team", Pick<{
|
|
|
63
68
|
actions: ("update" | "create" | "read" | "delete" | "manage")[];
|
|
64
69
|
}[];
|
|
65
70
|
permissionLabels: string[];
|
|
71
|
+
status: import("@/types/team").TeamMemberStatus;
|
|
72
|
+
loginMethod: import("@/types/team").TeamMemberLoginMethod;
|
|
66
73
|
doc: {
|
|
67
74
|
id: string;
|
|
68
75
|
posUserId: string;
|
|
@@ -80,6 +87,9 @@ declare const useTeamStore: import("pinia").StoreDefinition<"team", Pick<{
|
|
|
80
87
|
roleId: string;
|
|
81
88
|
}[];
|
|
82
89
|
} | undefined;
|
|
90
|
+
employeeId?: string | null | undefined;
|
|
91
|
+
loginMethod: import("@/types/team").TeamMemberLoginMethod;
|
|
92
|
+
status: import("@/types/team").TeamMemberStatus;
|
|
83
93
|
businessId: string;
|
|
84
94
|
userId: string;
|
|
85
95
|
permissions: {
|
|
@@ -119,6 +129,8 @@ declare const useTeamStore: import("pinia").StoreDefinition<"team", Pick<{
|
|
|
119
129
|
actions: ("update" | "create" | "read" | "delete" | "manage")[];
|
|
120
130
|
}[];
|
|
121
131
|
permissionLabels: string[];
|
|
132
|
+
status: import("@/types/team").TeamMemberStatus;
|
|
133
|
+
loginMethod: import("@/types/team").TeamMemberLoginMethod;
|
|
122
134
|
doc: {
|
|
123
135
|
id: string;
|
|
124
136
|
posUserId: string;
|
|
@@ -136,6 +148,9 @@ declare const useTeamStore: import("pinia").StoreDefinition<"team", Pick<{
|
|
|
136
148
|
roleId: string;
|
|
137
149
|
}[];
|
|
138
150
|
} | undefined;
|
|
151
|
+
employeeId?: string | null | undefined;
|
|
152
|
+
loginMethod: import("@/types/team").TeamMemberLoginMethod;
|
|
153
|
+
status: import("@/types/team").TeamMemberStatus;
|
|
139
154
|
businessId: string;
|
|
140
155
|
userId: string;
|
|
141
156
|
permissions: {
|
|
@@ -165,6 +180,8 @@ declare const useTeamStore: import("pinia").StoreDefinition<"team", Pick<{
|
|
|
165
180
|
actions: ("update" | "create" | "read" | "delete" | "manage")[];
|
|
166
181
|
}[];
|
|
167
182
|
permissionLabels: string[];
|
|
183
|
+
status: import("@/types/team").TeamMemberStatus;
|
|
184
|
+
loginMethod: import("@/types/team").TeamMemberLoginMethod;
|
|
168
185
|
doc: {
|
|
169
186
|
id: string;
|
|
170
187
|
posUserId: string;
|
|
@@ -182,6 +199,9 @@ declare const useTeamStore: import("pinia").StoreDefinition<"team", Pick<{
|
|
|
182
199
|
roleId: string;
|
|
183
200
|
}[];
|
|
184
201
|
} | undefined;
|
|
202
|
+
employeeId?: string | null | undefined;
|
|
203
|
+
loginMethod: import("@/types/team").TeamMemberLoginMethod;
|
|
204
|
+
status: import("@/types/team").TeamMemberStatus;
|
|
185
205
|
businessId: string;
|
|
186
206
|
userId: string;
|
|
187
207
|
permissions: {
|
|
@@ -221,6 +241,8 @@ declare const useTeamStore: import("pinia").StoreDefinition<"team", Pick<{
|
|
|
221
241
|
actions: ("update" | "create" | "read" | "delete" | "manage")[];
|
|
222
242
|
}[];
|
|
223
243
|
permissionLabels: string[];
|
|
244
|
+
status: import("@/types/team").TeamMemberStatus;
|
|
245
|
+
loginMethod: import("@/types/team").TeamMemberLoginMethod;
|
|
224
246
|
doc: {
|
|
225
247
|
id: string;
|
|
226
248
|
posUserId: string;
|
|
@@ -238,6 +260,9 @@ declare const useTeamStore: import("pinia").StoreDefinition<"team", Pick<{
|
|
|
238
260
|
roleId: string;
|
|
239
261
|
}[];
|
|
240
262
|
} | undefined;
|
|
263
|
+
employeeId?: string | null | undefined;
|
|
264
|
+
loginMethod: import("@/types/team").TeamMemberLoginMethod;
|
|
265
|
+
status: import("@/types/team").TeamMemberStatus;
|
|
241
266
|
businessId: string;
|
|
242
267
|
userId: string;
|
|
243
268
|
permissions: {
|
|
@@ -267,6 +292,8 @@ declare const useTeamStore: import("pinia").StoreDefinition<"team", Pick<{
|
|
|
267
292
|
actions: ("update" | "create" | "read" | "delete" | "manage")[];
|
|
268
293
|
}[];
|
|
269
294
|
permissionLabels: string[];
|
|
295
|
+
status: import("@/types/team").TeamMemberStatus;
|
|
296
|
+
loginMethod: import("@/types/team").TeamMemberLoginMethod;
|
|
270
297
|
doc: {
|
|
271
298
|
id: string;
|
|
272
299
|
posUserId: string;
|
|
@@ -284,6 +311,9 @@ declare const useTeamStore: import("pinia").StoreDefinition<"team", Pick<{
|
|
|
284
311
|
roleId: string;
|
|
285
312
|
}[];
|
|
286
313
|
} | undefined;
|
|
314
|
+
employeeId?: string | null | undefined;
|
|
315
|
+
loginMethod: import("@/types/team").TeamMemberLoginMethod;
|
|
316
|
+
status: import("@/types/team").TeamMemberStatus;
|
|
287
317
|
businessId: string;
|
|
288
318
|
userId: string;
|
|
289
319
|
permissions: {
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/** GET /my-pos-profile response (shared contract with the HRM menu, KDI-5225). */
|
|
2
|
+
export interface FdtoMyPosProfile {
|
|
3
|
+
hasPosUser: boolean;
|
|
4
|
+
profile: null | {
|
|
5
|
+
name: string;
|
|
6
|
+
/** The caller's own current passcode, shown on reveal (D50). */
|
|
7
|
+
passcode: string;
|
|
8
|
+
phoneNumber: string | null;
|
|
9
|
+
email: string | null;
|
|
10
|
+
assignments: {
|
|
11
|
+
restaurantId: string;
|
|
12
|
+
restaurantName: string;
|
|
13
|
+
restaurantCode: string | null;
|
|
14
|
+
roleId: string;
|
|
15
|
+
roleName: string;
|
|
16
|
+
}[];
|
|
17
|
+
passcodeUpdatedAt: string | null;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
export type FdtoMyPosProfileAssignment = NonNullable<FdtoMyPosProfile['profile']>['assignments'][number];
|
|
21
|
+
export interface FdtoRegenerateMyPosPasscodeRes {
|
|
22
|
+
passcode: string;
|
|
23
|
+
passcodeUpdatedAt: string;
|
|
24
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { StaffInviteMatch } from '@/types/staff-invite';
|
|
2
|
+
/** A business's SSO provider (GET /businesses/:businessId/sso-providers), on or off. */
|
|
3
|
+
export interface IFdtoSsoProvider {
|
|
4
|
+
slug: string;
|
|
5
|
+
label: string;
|
|
6
|
+
type: string;
|
|
7
|
+
enabled: boolean;
|
|
8
|
+
/** The key invites match people on; `none` turns invites off for this provider. */
|
|
9
|
+
inviteMatch: StaffInviteMatch | 'none';
|
|
10
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import type { FdoPermissionRule } from '@feedmepos/core/entity';
|
|
2
|
+
import type { IFdtoPermissionPosUser } from '@/types/team';
|
|
3
|
+
/** Wire contract: account-service-zus-lark-sso/part-b-contract.md §2.2. */
|
|
4
|
+
export type StaffInviteMatch = 'mobile' | 'email';
|
|
5
|
+
export type StaffInviteWarning = 'not_in_org' | 'dm_unavailable' | 'dm_failed';
|
|
6
|
+
export declare const STAFF_INVITE_ERROR_CODES: readonly ["provider_unavailable", "key_mismatch", "key_required", "invalid_key", "invalid_contact", "already_member", "ambiguous_account", "invite_exists", "not_pending"];
|
|
7
|
+
export type StaffInviteErrorCode = (typeof STAFF_INVITE_ERROR_CODES)[number];
|
|
8
|
+
export type StaffInvitePosUser = IFdtoPermissionPosUser | null;
|
|
9
|
+
export type StaffInviteDmStatus = 'sent' | 'not_in_org' | 'unsupported' | 'failed';
|
|
10
|
+
export interface IFdtoStaffInviteProvider {
|
|
11
|
+
slug: string;
|
|
12
|
+
label: string;
|
|
13
|
+
type: string;
|
|
14
|
+
inviteMatch: StaffInviteMatch;
|
|
15
|
+
}
|
|
16
|
+
export interface IFdtoStaffInviteGrant {
|
|
17
|
+
permissions: FdoPermissionRule[];
|
|
18
|
+
customPermissions: FdoPermissionRule[];
|
|
19
|
+
permissionSetIds: string[];
|
|
20
|
+
posUser: StaffInvitePosUser;
|
|
21
|
+
}
|
|
22
|
+
export interface IFdtoStaffInvite {
|
|
23
|
+
_id: string;
|
|
24
|
+
businessId: string;
|
|
25
|
+
provider: string;
|
|
26
|
+
match: StaffInviteMatch;
|
|
27
|
+
mobile?: string;
|
|
28
|
+
email?: string;
|
|
29
|
+
/** The other way to reach them; never matched on. */
|
|
30
|
+
contact?: {
|
|
31
|
+
mobile?: string;
|
|
32
|
+
email?: string;
|
|
33
|
+
};
|
|
34
|
+
displayName?: string;
|
|
35
|
+
employeeId?: string | null;
|
|
36
|
+
grant: IFdtoStaffInviteGrant;
|
|
37
|
+
status: 'pending' | 'claiming' | 'claimed' | 'revoked';
|
|
38
|
+
createdBy: string;
|
|
39
|
+
createdAt: string;
|
|
40
|
+
updatedAt: string;
|
|
41
|
+
claimedBy?: string;
|
|
42
|
+
claimedAt?: string;
|
|
43
|
+
claimOutcome?: 'granted' | 'already_member' | 'granted_without_pos';
|
|
44
|
+
posConflict?: {
|
|
45
|
+
restaurantId: string;
|
|
46
|
+
reason: 'passcode_taken';
|
|
47
|
+
}[];
|
|
48
|
+
dm?: {
|
|
49
|
+
status: StaffInviteDmStatus;
|
|
50
|
+
at: string;
|
|
51
|
+
};
|
|
52
|
+
revokedBy?: string;
|
|
53
|
+
revokedAt?: string;
|
|
54
|
+
}
|
|
55
|
+
export interface IFdtoCreateStaffInviteReq {
|
|
56
|
+
provider: string;
|
|
57
|
+
/** The sign-in key; the other of mobile/email is contact only. */
|
|
58
|
+
match: StaffInviteMatch;
|
|
59
|
+
mobile?: string;
|
|
60
|
+
email?: string;
|
|
61
|
+
displayName: string;
|
|
62
|
+
employeeId?: string;
|
|
63
|
+
permissions: FdoPermissionRule[];
|
|
64
|
+
customPermissions: FdoPermissionRule[];
|
|
65
|
+
permissionSetIds?: string[];
|
|
66
|
+
posUser?: StaffInvitePosUser;
|
|
67
|
+
}
|
|
68
|
+
/** The key is fixed: only the mobile/email that isn't the key applies ('' clears it). */
|
|
69
|
+
export type IFdtoUpdateStaffInviteReq = Omit<IFdtoCreateStaffInviteReq, 'provider' | 'match'>;
|
|
70
|
+
/** Who already answers to a sign-in key: a member, or an open invite. */
|
|
71
|
+
export type IFdtoStaffInviteLookup = {
|
|
72
|
+
kind: 'member';
|
|
73
|
+
id: string;
|
|
74
|
+
name: string;
|
|
75
|
+
restaurantCount: number;
|
|
76
|
+
isOwner: boolean;
|
|
77
|
+
} | {
|
|
78
|
+
kind: 'invite';
|
|
79
|
+
id: string;
|
|
80
|
+
name: string;
|
|
81
|
+
restaurantCount: number;
|
|
82
|
+
invite: IFdtoStaffInvite;
|
|
83
|
+
};
|
|
84
|
+
export type IFdtoCreateStaffInviteRes = {
|
|
85
|
+
result: 'added';
|
|
86
|
+
uid: string;
|
|
87
|
+
portalUserId: string;
|
|
88
|
+
warnings: StaffInviteWarning[];
|
|
89
|
+
} | {
|
|
90
|
+
result: 'invited';
|
|
91
|
+
invite: IFdtoStaffInvite;
|
|
92
|
+
warnings: StaffInviteWarning[];
|
|
93
|
+
};
|
|
94
|
+
export interface IFdtoResendStaffInviteRes {
|
|
95
|
+
dm: {
|
|
96
|
+
status: StaffInviteDmStatus;
|
|
97
|
+
at: string;
|
|
98
|
+
};
|
|
99
|
+
warnings: StaffInviteWarning[];
|
|
100
|
+
}
|
package/dist/src/types/team.d.ts
CHANGED
|
@@ -19,7 +19,12 @@ export interface IFdtoPortalUser extends IPermissionUser {
|
|
|
19
19
|
phoneNumber: string;
|
|
20
20
|
email: string;
|
|
21
21
|
posUser?: IFdtoPermissionPosUser;
|
|
22
|
+
employeeId?: string | null;
|
|
23
|
+
loginMethod: TeamMemberLoginMethod;
|
|
24
|
+
status: TeamMemberStatus;
|
|
22
25
|
}
|
|
26
|
+
export type TeamMemberStatus = 'active' | 'invited';
|
|
27
|
+
export type TeamMemberLoginMethod = 'sso' | 'feedme';
|
|
23
28
|
export interface IFdtoPortalUserPage {
|
|
24
29
|
items: IFdtoPortalUser[];
|
|
25
30
|
total: number;
|
|
@@ -34,10 +39,16 @@ export interface IFdtoPermissionPosUserRole {
|
|
|
34
39
|
restaurantId: string;
|
|
35
40
|
roleId: string;
|
|
36
41
|
}
|
|
42
|
+
/** On a member edit `passcode` is sent only when the admin changed it; absent keeps the stored one. */
|
|
43
|
+
export type IFdtoUpdatePermissionPosUser = Omit<IFdtoPermissionPosUser, 'passcode'> & {
|
|
44
|
+
passcode?: string;
|
|
45
|
+
};
|
|
37
46
|
export interface IFdtoUpdatePortalUserReq {
|
|
47
|
+
/** Absent keeps the stored one; '' clears it. */
|
|
48
|
+
employeeId?: string;
|
|
38
49
|
/** @deprecated use customPermissions instead */
|
|
39
50
|
permissions?: FdoPermissionRule[];
|
|
40
|
-
posUser?:
|
|
51
|
+
posUser?: IFdtoUpdatePermissionPosUser | null;
|
|
41
52
|
permissionSetIds?: string[];
|
|
42
53
|
customPermissions?: FdoPermissionRule[];
|
|
43
54
|
}
|
|
@@ -49,6 +60,7 @@ export interface IFdtoCreatePortalUserReq {
|
|
|
49
60
|
permissionSetIds?: string[];
|
|
50
61
|
customPermissions: FdoPermissionRule[];
|
|
51
62
|
name?: string;
|
|
63
|
+
employeeId?: string;
|
|
52
64
|
posUser?: IFdtoPermissionPosUser | null;
|
|
53
65
|
}
|
|
54
66
|
export interface FTeamMember {
|
|
@@ -60,6 +72,8 @@ export interface FTeamMember {
|
|
|
60
72
|
managableRestaurantIds: string[] | null;
|
|
61
73
|
permissions: FdoPermissionRule[];
|
|
62
74
|
permissionLabels: string[];
|
|
75
|
+
status: TeamMemberStatus;
|
|
76
|
+
loginMethod: TeamMemberLoginMethod;
|
|
63
77
|
doc: IFdtoPortalUser;
|
|
64
78
|
}
|
|
65
79
|
export interface IReadTeamMembersPageReq {
|
|
@@ -69,6 +83,8 @@ export interface IReadTeamMembersPageReq {
|
|
|
69
83
|
restaurantIds?: string[];
|
|
70
84
|
permissionSubjects?: string[];
|
|
71
85
|
permissionSetIds?: string[];
|
|
86
|
+
statuses?: TeamMemberStatus[];
|
|
87
|
+
loginMethods?: TeamMemberLoginMethod[];
|
|
72
88
|
}
|
|
73
89
|
export interface IFdtoTeamMemberPage {
|
|
74
90
|
items: FTeamMember[];
|
|
@@ -160,6 +160,11 @@ export declare const i18nMessages: {
|
|
|
160
160
|
"report:timesheet": string;
|
|
161
161
|
"report:counterPayment": string;
|
|
162
162
|
};
|
|
163
|
+
addTitle: string;
|
|
164
|
+
permissionsSubtitle: string;
|
|
165
|
+
namePlaceholder: string;
|
|
166
|
+
permissionAllowed: string;
|
|
167
|
+
permissionsAllowed: string;
|
|
163
168
|
};
|
|
164
169
|
noData: {
|
|
165
170
|
title: string;
|
|
@@ -368,6 +373,11 @@ export declare const i18nMessages: {
|
|
|
368
373
|
"report:timesheet": string;
|
|
369
374
|
"report:counterPayment": string;
|
|
370
375
|
};
|
|
376
|
+
addTitle: string;
|
|
377
|
+
permissionsSubtitle: string;
|
|
378
|
+
namePlaceholder: string;
|
|
379
|
+
permissionAllowed: string;
|
|
380
|
+
permissionsAllowed: string;
|
|
371
381
|
};
|
|
372
382
|
noData: {
|
|
373
383
|
title: string;
|
|
@@ -576,6 +586,11 @@ export declare const i18nMessages: {
|
|
|
576
586
|
"report:timesheet": string;
|
|
577
587
|
"report:counterPayment": string;
|
|
578
588
|
};
|
|
589
|
+
addTitle: string;
|
|
590
|
+
permissionsSubtitle: string;
|
|
591
|
+
namePlaceholder: string;
|
|
592
|
+
permissionAllowed: string;
|
|
593
|
+
permissionsAllowed: string;
|
|
579
594
|
};
|
|
580
595
|
noData: {
|
|
581
596
|
title: string;
|
|
@@ -783,6 +798,11 @@ export declare const i18nMessages: {
|
|
|
783
798
|
"report:timesheet": string;
|
|
784
799
|
"report:counterPayment": string;
|
|
785
800
|
};
|
|
801
|
+
addTitle: string;
|
|
802
|
+
permissionsSubtitle: string;
|
|
803
|
+
namePlaceholder: string;
|
|
804
|
+
permissionAllowed: string;
|
|
805
|
+
permissionsAllowed: string;
|
|
786
806
|
};
|
|
787
807
|
noData: {
|
|
788
808
|
title: string;
|
|
@@ -1,17 +1,44 @@
|
|
|
1
|
+
import { type PropType } from 'vue';
|
|
1
2
|
declare const _default: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
2
3
|
id: {
|
|
3
4
|
type: StringConstructor;
|
|
4
5
|
default: undefined;
|
|
5
6
|
};
|
|
7
|
+
/** Outlets ticked when creating a role (the member sheet passes the row's outlets). */
|
|
8
|
+
restaurantIds: {
|
|
9
|
+
type: PropType<string[]>;
|
|
10
|
+
default: () => never[];
|
|
11
|
+
};
|
|
12
|
+
/** Opened over another sheet: a back arrow returns to it. */
|
|
13
|
+
showBack: {
|
|
14
|
+
type: BooleanConstructor;
|
|
15
|
+
default: boolean;
|
|
16
|
+
};
|
|
6
17
|
}>, {
|
|
7
18
|
show: import("vue").Ref<boolean, boolean>;
|
|
8
19
|
trigger: () => void;
|
|
9
|
-
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}
|
|
20
|
+
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
21
|
+
created: (roleId: string) => any;
|
|
22
|
+
}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
10
23
|
id: {
|
|
11
24
|
type: StringConstructor;
|
|
12
25
|
default: undefined;
|
|
13
26
|
};
|
|
14
|
-
|
|
27
|
+
/** Outlets ticked when creating a role (the member sheet passes the row's outlets). */
|
|
28
|
+
restaurantIds: {
|
|
29
|
+
type: PropType<string[]>;
|
|
30
|
+
default: () => never[];
|
|
31
|
+
};
|
|
32
|
+
/** Opened over another sheet: a back arrow returns to it. */
|
|
33
|
+
showBack: {
|
|
34
|
+
type: BooleanConstructor;
|
|
35
|
+
default: boolean;
|
|
36
|
+
};
|
|
37
|
+
}>> & Readonly<{
|
|
38
|
+
onCreated?: ((roleId: string) => any) | undefined;
|
|
39
|
+
}>, {
|
|
15
40
|
id: string;
|
|
41
|
+
restaurantIds: string[];
|
|
42
|
+
showBack: boolean;
|
|
16
43
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
17
44
|
export default _default;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
2
|
+
export default _default;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
declare const _default: import("vue").DefineComponent<{}, {
|
|
2
|
+
open: (code: string) => void;
|
|
3
|
+
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
4
|
+
export default _default;
|