@feedmepos/mf-hrm-portal 2.2.5-dev.9 → 2.3.0-dev
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-D5l9vIsE.js → ApprovalCodeList-cG0zmQVJ.js} +5 -5
- package/dist/{AuditLogList-ByTa5UJY.js → AuditLogList-BTifJhO1.js} +4 -4
- package/dist/{ConditionBuilderForm.vue_vue_type_script_setup_true_lang-mNdn1TYV.js → ConditionBuilderForm.vue_vue_type_script_setup_true_lang-qr5TwLTK.js} +2 -2
- package/dist/{EmployeeList-Bv6ANk-P.js → EmployeeList-DzcMtxJ3.js} +6 -6
- package/dist/{GrantUserList-Bt8w3p4j.js → GrantUserList-D5b7tJ8Y.js} +6 -6
- package/dist/{Main-DqiGpT4v.js → Main-B2r59IOW.js} +5 -5
- package/dist/{Main-DHJcgePj.js → Main-DFwdAWqn.js} +8 -8
- package/dist/{Main-DkP8dWgn.js → Main-DkLBemi7.js} +11 -11
- package/dist/{PermissionSetList-BIGv1u67.js → PermissionSetList-B80hrfMW.js} +7 -7
- package/dist/PortalPermissionEditor.vue_vue_type_script_setup_true_lang-DjNcJQM9.js +4167 -0
- package/dist/{PortalUserSearcher.vue_vue_type_style_index_0_scoped_827dfd60_lang-XHuHin8t.js → PortalUserSearcher.vue_vue_type_style_index_0_scoped_827dfd60_lang-fe-Rdwn4.js} +1 -1
- package/dist/{RoleList-CH6NDKPU.js → RoleList-DHO4JRKF.js} +9 -9
- package/dist/ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-B-XtB64L.js +452 -0
- package/dist/ScheduleGeneralPage-WlBM8bxV.js +629 -0
- package/dist/SchedulePage-Nm0krGVU.js +17056 -0
- package/dist/SchedulePositionPage-C0hrO11d.js +263 -0
- package/dist/ScheduleSelect.vue_vue_type_script_setup_true_lang-DTDXir_7.js +1150 -0
- package/dist/{TeamMemberList-BwfG3go2.js → TeamMemberList-CgFWLRBM.js} +10 -10
- package/dist/{TimesheetList-DcoqzbLO.js → TimesheetList-Dp40G-0I.js} +7 -7
- package/dist/{TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-RyhiKTSd.js → TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-BFjrMhUG.js} +3 -3
- package/dist/{app-BcZ6C8M8.js → app-CmBSTvaI.js} +851 -739
- package/dist/app.js +1 -1
- package/dist/{approval-code-jIjkeVEb.js → approval-code-C9DmR4Md.js} +1 -1
- package/dist/{dayjs.min-Ch0iysTG.js → dayjs.min-CfL2DQ3d.js} +1 -1
- package/dist/{employee-DwYHFacQ.js → employee-DQcHjoij.js} +4 -4
- package/dist/{grant-user-SNiDV22U.js → grant-user-Bv-pJ9Wt.js} +1 -1
- package/dist/{iteration-D1uWLp0V.js → iteration-BlavheWG.js} +1 -1
- package/dist/{lodash-DErxm7xf.js → lodash-QerqayrJ.js} +1 -1
- package/dist/{restaurant-BTpBmfBV.js → restaurant-D7PEQjPY.js} +257 -251
- package/dist/{role-B9VanAny.js → role-RM2YLO7n.js} +2 -2
- package/dist/{rule-C4f_Ilzr.js → rule-DjlvYIuP.js} +3 -3
- package/dist/src/api/restaurant/index.d.ts +2 -0
- package/dist/src/api/schedule/index.d.ts +12 -2
- package/dist/src/composables/useMessage.d.ts +8 -2
- package/dist/src/types/schedule.d.ts +10 -218
- package/dist/src/views/scheduling/components/ScheduleAddEmployeeModal.vue.d.ts +2 -0
- package/dist/src/views/scheduling/components/ScheduleAreaRows.vue.d.ts +11 -0
- package/dist/src/views/scheduling/components/ScheduleAutoScheduleDetailsModal.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleCloneOutletModal.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/{ScheduleLegendBar.vue.d.ts → ScheduleCoach.vue.d.ts} +2 -2
- package/dist/src/views/scheduling/components/ScheduleConfirmModal.vue.d.ts +9 -1
- package/dist/src/views/scheduling/components/ScheduleCostRailEmptyArt.vue.d.ts +2 -0
- package/dist/src/views/scheduling/components/ScheduleExportDoneDialog.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleLeaveEditModal.vue.d.ts +0 -2
- package/dist/src/views/scheduling/components/ScheduleOnboardingComplete.vue.d.ts +10 -0
- package/dist/src/views/scheduling/components/ScheduleOnboardingDoneArt.vue.d.ts +2 -0
- package/dist/src/views/scheduling/components/ScheduleOnboardingWelcome.vue.d.ts +1 -2
- package/dist/src/views/scheduling/components/ScheduleShiftCardMenu.vue.d.ts +2 -2
- package/dist/src/views/scheduling/components/ScheduleShiftCell.vue.d.ts +6 -6
- package/dist/src/views/scheduling/components/ScheduleShiftMoreOptions.vue.d.ts +2 -0
- package/dist/src/views/scheduling/components/ScheduleStaffRail.vue.d.ts +0 -2
- package/dist/src/views/scheduling/components/ScheduleStaffRows.vue.d.ts +6 -6
- package/dist/src/views/scheduling/components/ScheduleTourAllSet.vue.d.ts +6 -0
- package/dist/src/views/scheduling/composables/auto-schedule-mapping.d.ts +33 -0
- package/dist/src/views/scheduling/composables/onboarding-constants.d.ts +5 -0
- package/dist/src/views/scheduling/composables/onboarding-hours.d.ts +7 -0
- package/dist/src/views/scheduling/composables/onboarding-types.d.ts +50 -0
- package/dist/src/views/scheduling/composables/schedule-add-employee-form.d.ts +8 -2
- package/dist/src/views/scheduling/composables/schedule-board-helpers.d.ts +22 -1
- package/dist/src/views/scheduling/composables/schedule-breaks.d.ts +3 -0
- package/dist/src/views/scheduling/composables/schedule-day-meta.d.ts +2 -8
- package/dist/src/views/scheduling/composables/schedule-shift-time.d.ts +12 -0
- package/dist/src/views/scheduling/composables/useScheduleAddEmployee.d.ts +11 -8
- package/dist/src/views/scheduling/composables/useScheduleAddPick.d.ts +10 -2
- package/dist/src/views/scheduling/composables/useScheduleAreaBoard.d.ts +13 -0
- package/dist/src/views/scheduling/composables/useScheduleAutoSchedule.d.ts +158 -12
- package/dist/src/views/scheduling/composables/useScheduleBoard.d.ts +110 -13
- package/dist/src/views/scheduling/composables/useScheduleClashDetection.d.ts +11 -1
- package/dist/src/views/scheduling/composables/useScheduleCloneOutletModal.d.ts +19 -0
- package/dist/src/views/scheduling/composables/useScheduleCoach.d.ts +80 -0
- package/dist/src/views/scheduling/composables/useScheduleDayNote.d.ts +0 -3
- package/dist/src/views/scheduling/composables/useScheduleDayTimeline.d.ts +24 -1
- package/dist/src/views/scheduling/composables/useScheduleDemandRow.d.ts +4 -2
- package/dist/src/views/scheduling/composables/useScheduleDragDrop.d.ts +33 -1
- package/dist/src/views/scheduling/composables/useScheduleExport.d.ts +17 -0
- package/dist/src/views/scheduling/composables/useScheduleGapPopover.d.ts +1 -3
- package/dist/src/views/scheduling/composables/useScheduleLeave.d.ts +20 -31
- package/dist/src/views/scheduling/composables/useScheduleOnboardingFlow.d.ts +9 -0
- package/dist/src/views/scheduling/composables/useScheduleOnboardingPersistence.d.ts +13 -0
- package/dist/src/views/scheduling/composables/useScheduleOnboardingWizard.d.ts +327 -75
- package/dist/src/views/scheduling/composables/useScheduleOutlet.d.ts +5 -3
- package/dist/src/views/scheduling/composables/useSchedulePageBootstrap.d.ts +9 -0
- package/dist/src/views/scheduling/composables/useSchedulePageClearActions.d.ts +20 -0
- package/dist/src/views/scheduling/composables/useSchedulePageOverlays.d.ts +18 -0
- package/dist/src/views/scheduling/composables/useSchedulePositionModal.d.ts +2 -0
- package/dist/src/views/scheduling/composables/useSchedulePositions.d.ts +0 -5
- package/dist/src/views/scheduling/composables/useSchedulePublish.d.ts +25 -0
- package/dist/src/views/scheduling/composables/useScheduleRoster.d.ts +53 -1
- package/dist/src/views/scheduling/composables/useScheduleSettings.d.ts +7 -4
- package/dist/src/views/scheduling/composables/useScheduleSetupBanner.d.ts +8 -9
- package/dist/src/views/scheduling/composables/useScheduleShiftActions.d.ts +63 -92
- package/dist/src/views/scheduling/composables/useScheduleShiftPopover.d.ts +30 -2
- package/dist/src/views/scheduling/composables/useScheduleStaffRail.d.ts +5 -11
- package/dist/src/views/scheduling/composables/useScheduleStatsRow.d.ts +0 -1
- package/dist/src/views/scheduling/composables/useScheduleTopbar.d.ts +4 -4
- package/dist/src/views/scheduling/composables/useScheduleTour.d.ts +93 -0
- package/dist/src/views/scheduling/data.d.ts +6 -19
- package/dist/src/views/scheduling/locales/index.d.ts +116 -4
- package/dist/src/views/scheduling/schedule-state.d.ts +679 -0
- package/dist/src/views/scheduling/schedule-store.d.ts +16 -60
- package/dist/src/views/scheduling/types.d.ts +29 -2
- package/dist/style.css +1 -1
- package/dist/tsconfig.app.tsbuildinfo +1 -1
- package/dist/{useAppStore-DCwd8GWN.js → useAppStore-d_nHyK5u.js} +1 -1
- package/dist/{useLoading-CXzTpIVv.js → useLoading-JFoghhRz.js} +1 -1
- package/dist/{useReportPermissions-CTr56kBo.js → useReportPermissions-Bl6Br79r.js} +3 -3
- package/package.json +3 -2
- package/dist/PortalPermissionEditor.vue_vue_type_script_setup_true_lang-niywl_DX.js +0 -4167
- package/dist/ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-T1ACkX_6.js +0 -426
- package/dist/ScheduleButton.vue_vue_type_script_setup_true_lang-BzQuLLf5.js +0 -690
- package/dist/ScheduleGeneralPage-DJPENJZ2.js +0 -320
- package/dist/SchedulePage-C1egcbIC.js +0 -14421
- package/dist/SchedulePositionPage-OhL_hsqG.js +0 -293
- package/dist/ScheduleSelect.vue_vue_type_script_setup_true_lang-B8W4sTsA.js +0 -242
- package/dist/src/views/scheduling/composables/scheduleAutoSolver.d.ts +0 -21
- package/dist/src/views/scheduling/composables/useScheduleLegendBar.d.ts +0 -35
|
@@ -6,9 +6,11 @@ import type { ScheduleSelectOption } from '../components/ScheduleSelect.vue';
|
|
|
6
6
|
* the outlet that was already being looked at. Only when the shell has no opinion does this
|
|
7
7
|
* fall back to the first outlet in the business, which is better than an empty board.
|
|
8
8
|
*
|
|
9
|
-
* Switching from the picker
|
|
10
|
-
*
|
|
11
|
-
*
|
|
9
|
+
* Switching from the picker writes the new id back into `?restaurantId=` too — via
|
|
10
|
+
* `router.replace`, not a navigation, so it does not reload the page or add a history entry.
|
|
11
|
+
* The picker already re-fetches everything the new outlet needs (see switchTo below); this just
|
|
12
|
+
* keeps the address bar honest about which one is on screen, so a refresh or a copied link lands
|
|
13
|
+
* back on it instead of silently snapping to whatever the shell had before. */
|
|
12
14
|
export declare function useScheduleOutlet(): {
|
|
13
15
|
options: import("vue").ComputedRef<ScheduleSelectOption[]>;
|
|
14
16
|
ready: import("vue").Ref<boolean, boolean>;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ScheduleBoardApi } from './useScheduleBoard';
|
|
2
|
+
import type { ScheduleDemandApi } from './useScheduleDemand';
|
|
3
|
+
import type { ScheduleOutletApi } from './useScheduleOutlet';
|
|
4
|
+
/** Owns SchedulePage's data bootstrap and loading lifecycle, separate from rendering concerns. */
|
|
5
|
+
export declare function useSchedulePageBootstrap(board: ScheduleBoardApi, demand: ScheduleDemandApi, outlet: ScheduleOutletApi): {
|
|
6
|
+
booting: import("vue").Ref<boolean, boolean>;
|
|
7
|
+
showSkeleton: import("vue").ComputedRef<boolean>;
|
|
8
|
+
applyStoredDemand: () => void;
|
|
9
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { ScheduleBoardApi } from './useScheduleBoard';
|
|
2
|
+
import type { ScheduleDemandApi } from './useScheduleDemand';
|
|
3
|
+
export type ClearKind = 'both' | 'shifts' | 'demand';
|
|
4
|
+
export declare const CLEAR_COPY: Record<ClearKind, {
|
|
5
|
+
title: string;
|
|
6
|
+
message: string;
|
|
7
|
+
confirm: string;
|
|
8
|
+
}>;
|
|
9
|
+
type Snackbar = {
|
|
10
|
+
open: (options: {
|
|
11
|
+
message: string;
|
|
12
|
+
type: 'error' | 'info' | 'success';
|
|
13
|
+
}) => void;
|
|
14
|
+
};
|
|
15
|
+
export declare function useSchedulePageClearActions(board: ScheduleBoardApi, demand: ScheduleDemandApi, snackbar: Snackbar): {
|
|
16
|
+
clearKind: import("vue").Ref<ClearKind | null, ClearKind | null>;
|
|
17
|
+
onConfirmClear: () => Promise<void>;
|
|
18
|
+
};
|
|
19
|
+
export type SchedulePageClearActionsApi = ReturnType<typeof useSchedulePageClearActions>;
|
|
20
|
+
export {};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ScheduleAddPickApi } from './useScheduleAddPick';
|
|
2
|
+
import type { ScheduleAllShiftsRowApi } from './useScheduleAllShiftsRow';
|
|
3
|
+
import type { ScheduleDayNoteApi } from './useScheduleDayNote';
|
|
4
|
+
import type { ScheduleGapPopoverApi } from './useScheduleGapPopover';
|
|
5
|
+
import type { ScheduleOpenShiftCardApi } from './useScheduleOpenShiftCard';
|
|
6
|
+
import type { ScheduleShiftActionsApi } from './useScheduleShiftActions';
|
|
7
|
+
import type { ScheduleTimePickerApi } from './useScheduleTimePicker';
|
|
8
|
+
import type { ScheduleTopbarApi } from './useScheduleTopbar';
|
|
9
|
+
export declare function useSchedulePageOverlays(apis: {
|
|
10
|
+
topbar: ScheduleTopbarApi;
|
|
11
|
+
dayNote: ScheduleDayNoteApi;
|
|
12
|
+
allShiftsRow: ScheduleAllShiftsRowApi;
|
|
13
|
+
gap: ScheduleGapPopoverApi;
|
|
14
|
+
timePicker: ScheduleTimePickerApi;
|
|
15
|
+
addPick: ScheduleAddPickApi;
|
|
16
|
+
shiftActions: ScheduleShiftActionsApi;
|
|
17
|
+
openShiftCard: ScheduleOpenShiftCardApi;
|
|
18
|
+
}): void;
|
|
@@ -39,7 +39,9 @@ export declare function useSchedulePositionModal(onCreated?: (positionName: stri
|
|
|
39
39
|
allPicked: import("vue").ComputedRef<boolean>;
|
|
40
40
|
nameTaken: import("vue").ComputedRef<boolean>;
|
|
41
41
|
canSave: import("vue").ComputedRef<boolean>;
|
|
42
|
+
editingId: import("vue").Ref<string | null, string | null>;
|
|
42
43
|
openNew: () => void;
|
|
44
|
+
openEdit: (id: string, currentName: string) => void;
|
|
43
45
|
close: () => void;
|
|
44
46
|
toggle: (employeeId: string) => void;
|
|
45
47
|
toggleAll: () => void;
|
|
@@ -13,8 +13,6 @@ export declare function useSchedulePositions(): {
|
|
|
13
13
|
count: import("vue").ComputedRef<number>;
|
|
14
14
|
isAdding: import("vue").Ref<boolean, boolean>;
|
|
15
15
|
newName: import("vue").Ref<string, string>;
|
|
16
|
-
editingId: import("vue").Ref<string | null, string | null>;
|
|
17
|
-
editingName: import("vue").Ref<string, string>;
|
|
18
16
|
pendingDeleteId: import("vue").Ref<string | null, string | null>;
|
|
19
17
|
saving: import("vue").Ref<boolean, boolean>;
|
|
20
18
|
error: import("vue").Ref<string | null, string | null>;
|
|
@@ -22,9 +20,6 @@ export declare function useSchedulePositions(): {
|
|
|
22
20
|
startAdd: () => void;
|
|
23
21
|
cancelAdd: () => void;
|
|
24
22
|
confirmAdd: () => Promise<void>;
|
|
25
|
-
startEdit: (id: string) => void;
|
|
26
|
-
cancelEdit: () => void;
|
|
27
|
-
saveEdit: (id: string) => Promise<void>;
|
|
28
23
|
askDelete: (id: string) => void;
|
|
29
24
|
cancelDelete: () => void;
|
|
30
25
|
confirmDelete: (id: string) => Promise<void>;
|
|
@@ -47,9 +47,23 @@ export declare function useSchedulePublish(board: ScheduleBoardApi): {
|
|
|
47
47
|
conflictReason?: string | undefined;
|
|
48
48
|
openId?: number | undefined;
|
|
49
49
|
breakMins?: number | undefined;
|
|
50
|
+
breaks?: ({
|
|
51
|
+
type: "DURATION";
|
|
52
|
+
minutes: number;
|
|
53
|
+
breakPayType: "PAID" | "UNPAID";
|
|
54
|
+
} | {
|
|
55
|
+
type: "TIME_RANGE";
|
|
56
|
+
startTime: string;
|
|
57
|
+
endTime: string;
|
|
58
|
+
breakPayType: "PAID" | "UNPAID";
|
|
59
|
+
})[] | undefined;
|
|
50
60
|
assignmentId?: string | undefined;
|
|
61
|
+
splitGroupId?: string | undefined;
|
|
51
62
|
} | {
|
|
52
63
|
timeOff: "approved" | "pending";
|
|
64
|
+
requestId?: string | undefined;
|
|
65
|
+
type?: "OFF_DAY" | "LEAVE" | undefined;
|
|
66
|
+
leaveType?: "ANNUAL" | "MEDICAL" | "EMERGENCY" | "UNPAID" | undefined;
|
|
53
67
|
reason: string;
|
|
54
68
|
half?: boolean | undefined;
|
|
55
69
|
halfPart?: "AM" | "PM" | undefined;
|
|
@@ -80,7 +94,18 @@ export declare function useSchedulePublish(board: ScheduleBoardApi): {
|
|
|
80
94
|
conflictReason?: string | undefined;
|
|
81
95
|
openId?: number | undefined;
|
|
82
96
|
breakMins?: number | undefined;
|
|
97
|
+
breaks?: ({
|
|
98
|
+
type: "DURATION";
|
|
99
|
+
minutes: number;
|
|
100
|
+
breakPayType: "PAID" | "UNPAID";
|
|
101
|
+
} | {
|
|
102
|
+
type: "TIME_RANGE";
|
|
103
|
+
startTime: string;
|
|
104
|
+
endTime: string;
|
|
105
|
+
breakPayType: "PAID" | "UNPAID";
|
|
106
|
+
})[] | undefined;
|
|
83
107
|
assignmentId?: string | undefined;
|
|
108
|
+
splitGroupId?: string | undefined;
|
|
84
109
|
}[] | null)[];
|
|
85
110
|
}[];
|
|
86
111
|
}[]>;
|
|
@@ -12,6 +12,7 @@ export declare function useScheduleRoster(board: ScheduleBoardApi): {
|
|
|
12
12
|
filteredEmployees: import("vue").ComputedRef<{
|
|
13
13
|
id: number;
|
|
14
14
|
name: string;
|
|
15
|
+
employmentType: "FULLTIME" | "PARTTIME";
|
|
15
16
|
role: string;
|
|
16
17
|
initials: string;
|
|
17
18
|
color: string;
|
|
@@ -34,9 +35,23 @@ export declare function useScheduleRoster(board: ScheduleBoardApi): {
|
|
|
34
35
|
conflictReason?: string | undefined;
|
|
35
36
|
openId?: number | undefined;
|
|
36
37
|
breakMins?: number | undefined;
|
|
38
|
+
breaks?: ({
|
|
39
|
+
type: "DURATION";
|
|
40
|
+
minutes: number;
|
|
41
|
+
breakPayType: "PAID" | "UNPAID";
|
|
42
|
+
} | {
|
|
43
|
+
type: "TIME_RANGE";
|
|
44
|
+
startTime: string;
|
|
45
|
+
endTime: string;
|
|
46
|
+
breakPayType: "PAID" | "UNPAID";
|
|
47
|
+
})[] | undefined;
|
|
37
48
|
assignmentId?: string | undefined;
|
|
49
|
+
splitGroupId?: string | undefined;
|
|
38
50
|
} | {
|
|
39
51
|
timeOff: "approved" | "pending";
|
|
52
|
+
requestId?: string | undefined;
|
|
53
|
+
type?: "OFF_DAY" | "LEAVE" | undefined;
|
|
54
|
+
leaveType?: "ANNUAL" | "MEDICAL" | "EMERGENCY" | "UNPAID" | undefined;
|
|
40
55
|
reason: string;
|
|
41
56
|
half?: boolean | undefined;
|
|
42
57
|
halfPart?: "AM" | "PM" | undefined;
|
|
@@ -67,7 +82,18 @@ export declare function useScheduleRoster(board: ScheduleBoardApi): {
|
|
|
67
82
|
conflictReason?: string | undefined;
|
|
68
83
|
openId?: number | undefined;
|
|
69
84
|
breakMins?: number | undefined;
|
|
85
|
+
breaks?: ({
|
|
86
|
+
type: "DURATION";
|
|
87
|
+
minutes: number;
|
|
88
|
+
breakPayType: "PAID" | "UNPAID";
|
|
89
|
+
} | {
|
|
90
|
+
type: "TIME_RANGE";
|
|
91
|
+
startTime: string;
|
|
92
|
+
endTime: string;
|
|
93
|
+
breakPayType: "PAID" | "UNPAID";
|
|
94
|
+
})[] | undefined;
|
|
70
95
|
assignmentId?: string | undefined;
|
|
96
|
+
splitGroupId?: string | undefined;
|
|
71
97
|
}[] | null)[];
|
|
72
98
|
remarks: {
|
|
73
99
|
author: string;
|
|
@@ -99,6 +125,7 @@ export declare function useScheduleRoster(board: ScheduleBoardApi): {
|
|
|
99
125
|
orderedEmployees: import("vue").ComputedRef<{
|
|
100
126
|
id: number;
|
|
101
127
|
name: string;
|
|
128
|
+
employmentType: "FULLTIME" | "PARTTIME";
|
|
102
129
|
role: string;
|
|
103
130
|
initials: string;
|
|
104
131
|
color: string;
|
|
@@ -121,9 +148,23 @@ export declare function useScheduleRoster(board: ScheduleBoardApi): {
|
|
|
121
148
|
conflictReason?: string | undefined;
|
|
122
149
|
openId?: number | undefined;
|
|
123
150
|
breakMins?: number | undefined;
|
|
151
|
+
breaks?: ({
|
|
152
|
+
type: "DURATION";
|
|
153
|
+
minutes: number;
|
|
154
|
+
breakPayType: "PAID" | "UNPAID";
|
|
155
|
+
} | {
|
|
156
|
+
type: "TIME_RANGE";
|
|
157
|
+
startTime: string;
|
|
158
|
+
endTime: string;
|
|
159
|
+
breakPayType: "PAID" | "UNPAID";
|
|
160
|
+
})[] | undefined;
|
|
124
161
|
assignmentId?: string | undefined;
|
|
162
|
+
splitGroupId?: string | undefined;
|
|
125
163
|
} | {
|
|
126
164
|
timeOff: "approved" | "pending";
|
|
165
|
+
requestId?: string | undefined;
|
|
166
|
+
type?: "OFF_DAY" | "LEAVE" | undefined;
|
|
167
|
+
leaveType?: "ANNUAL" | "MEDICAL" | "EMERGENCY" | "UNPAID" | undefined;
|
|
127
168
|
reason: string;
|
|
128
169
|
half?: boolean | undefined;
|
|
129
170
|
halfPart?: "AM" | "PM" | undefined;
|
|
@@ -154,7 +195,18 @@ export declare function useScheduleRoster(board: ScheduleBoardApi): {
|
|
|
154
195
|
conflictReason?: string | undefined;
|
|
155
196
|
openId?: number | undefined;
|
|
156
197
|
breakMins?: number | undefined;
|
|
198
|
+
breaks?: ({
|
|
199
|
+
type: "DURATION";
|
|
200
|
+
minutes: number;
|
|
201
|
+
breakPayType: "PAID" | "UNPAID";
|
|
202
|
+
} | {
|
|
203
|
+
type: "TIME_RANGE";
|
|
204
|
+
startTime: string;
|
|
205
|
+
endTime: string;
|
|
206
|
+
breakPayType: "PAID" | "UNPAID";
|
|
207
|
+
})[] | undefined;
|
|
157
208
|
assignmentId?: string | undefined;
|
|
209
|
+
splitGroupId?: string | undefined;
|
|
158
210
|
}[] | null)[];
|
|
159
211
|
remarks: {
|
|
160
212
|
author: string;
|
|
@@ -184,6 +236,6 @@ export declare function useScheduleRoster(board: ScheduleBoardApi): {
|
|
|
184
236
|
masterUser?: boolean | undefined;
|
|
185
237
|
}[]>;
|
|
186
238
|
order: import("vue").Ref<number[], number[]>;
|
|
187
|
-
reorder: (draggedId: number, targetId: number, after: boolean) => void
|
|
239
|
+
reorder: (draggedId: number, targetId: number, after: boolean) => Promise<void>;
|
|
188
240
|
};
|
|
189
241
|
export type ScheduleRosterApi = ReturnType<typeof useScheduleRoster>;
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
export type ScheduleSettingsSection = 'budget' | 'overtime' | 'notify';
|
|
1
|
+
export type ScheduleSettingsSection = 'budget' | 'payrates' | 'overtime' | 'notify';
|
|
2
2
|
/** Labour budget and Notifications are out of the General page for now — see
|
|
3
3
|
* ScheduleSettingsPage's own note. `ScheduleSettingsSection` stays the full union (rather
|
|
4
|
-
* than narrowing to a literal `'overtime'`) so `draft`/`save()` below don't have
|
|
5
|
-
* shape the day a section comes back; only the nav and the page's own rendering
|
|
4
|
+
* than narrowing to a literal `'payrates' | 'overtime'`) so `draft`/`save()` below don't have
|
|
5
|
+
* to change shape the day a section comes back; only the nav and the page's own rendering
|
|
6
|
+
* are trimmed. */
|
|
6
7
|
export declare const SETTINGS_SECTIONS: {
|
|
7
8
|
key: ScheduleSettingsSection;
|
|
8
9
|
label: string;
|
|
@@ -46,9 +47,11 @@ export declare function useScheduleSettings(): {
|
|
|
46
47
|
};
|
|
47
48
|
};
|
|
48
49
|
dirty: import("vue").ComputedRef<boolean>;
|
|
50
|
+
loading: import("vue").Ref<boolean, boolean>;
|
|
51
|
+
load: () => Promise<void>;
|
|
49
52
|
open: (section?: ScheduleSettingsSection) => void;
|
|
50
53
|
close: () => boolean;
|
|
51
54
|
discard: () => void;
|
|
52
|
-
save: () => void
|
|
55
|
+
save: () => Promise<void>;
|
|
53
56
|
};
|
|
54
57
|
export type ScheduleSettingsApi = ReturnType<typeof useScheduleSettings>;
|
|
@@ -1,18 +1,17 @@
|
|
|
1
1
|
/** "Set it up" banner — shown while the outlet has not finished scheduling setup, i.e. while
|
|
2
|
-
* `scheduleSetupCompleted` (schedule-store) is false.
|
|
3
|
-
* backend settings carry it. Dismissing is a session choice: the banner is cheap enough to see
|
|
2
|
+
* `scheduleSetupCompleted` (schedule-store) is false. Dismissing is a session choice: the banner is cheap enough to see
|
|
4
3
|
* again on the next visit while the outlet really is unconfigured.
|
|
5
4
|
*
|
|
6
|
-
* The welcome dialog
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
5
|
+
* The welcome dialog shares that same gate, plus its own session dismiss so closing it doesn't
|
|
6
|
+
* also close the banner. `scheduleSetupCompleted` lands from an async fetch and starts `false`
|
|
7
|
+
* before that fetch resolves, so gating on it alone would flash the dialog open for an outlet
|
|
8
|
+
* whose real answer just hasn't arrived yet — `payload` is what distinguishes "not set up" from
|
|
9
|
+
* "don't know yet": it is only ever non-null once a board fetch for the current outlet has
|
|
10
|
+
* actually landed. */
|
|
12
11
|
export declare function useScheduleSetupBanner(): {
|
|
13
12
|
open: import("vue").ComputedRef<boolean>;
|
|
14
13
|
start: () => void;
|
|
15
|
-
dismiss: () => void
|
|
14
|
+
dismiss: () => Promise<void>;
|
|
16
15
|
welcomeOpen: import("vue").ComputedRef<boolean>;
|
|
17
16
|
dismissWelcome: () => void;
|
|
18
17
|
};
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
+
import type { Employee } from '../types';
|
|
1
2
|
import type { ScheduleBoardApi } from './useScheduleBoard';
|
|
2
3
|
export interface ScheduleCardMenuState {
|
|
3
4
|
open: boolean;
|
|
4
5
|
empId: number | null;
|
|
5
6
|
dayIdx: number | null;
|
|
7
|
+
/** Which period on that day the menu was opened from — the card's own slot index. */
|
|
8
|
+
slotIndex: number;
|
|
6
9
|
left: number;
|
|
7
10
|
top: number;
|
|
8
11
|
}
|
|
@@ -10,11 +13,23 @@ export interface ScheduleChangeState {
|
|
|
10
13
|
open: boolean;
|
|
11
14
|
empId: number | null;
|
|
12
15
|
dayIdx: number | null;
|
|
16
|
+
slotIndex: number;
|
|
13
17
|
}
|
|
14
18
|
export interface ScheduleSwapState {
|
|
15
19
|
open: boolean;
|
|
16
20
|
empId: number | null;
|
|
17
21
|
dayIdx: number | null;
|
|
22
|
+
/** Which period of `dayIdx` is actually being traded — a sibling shift on that same day
|
|
23
|
+
* stays with its owner untouched. */
|
|
24
|
+
slotIndex: number;
|
|
25
|
+
/** How many periods starting at `slotIndex` go together — a genuine split's own period
|
|
26
|
+
* count, so dragging its one merged card trades the whole shift; 1 for anything else. */
|
|
27
|
+
slotCount: number;
|
|
28
|
+
/** Set when the swap came from dropping one shift on another: that shift is the only choice. */
|
|
29
|
+
preset: {
|
|
30
|
+
empId: number;
|
|
31
|
+
dayIdx: number;
|
|
32
|
+
} | null;
|
|
18
33
|
}
|
|
19
34
|
/** The shift card's "⋯" menu (Change employee / Swap shifts / Edit / Remove), plus the two
|
|
20
35
|
* dialogs it opens that the rest of Phase 1 didn't need: handing a shift to somebody else,
|
|
@@ -26,20 +41,23 @@ export declare function useScheduleShiftActions(board: ScheduleBoardApi): {
|
|
|
26
41
|
open: boolean;
|
|
27
42
|
empId: number | null;
|
|
28
43
|
dayIdx: number | null;
|
|
44
|
+
slotIndex: number;
|
|
29
45
|
left: number;
|
|
30
46
|
top: number;
|
|
31
47
|
};
|
|
32
|
-
openMenu: (empId: number, dayIdx: number, anchor: HTMLElement) => void;
|
|
48
|
+
openMenu: (empId: number, dayIdx: number, anchor: HTMLElement, slotIndex?: number) => void;
|
|
33
49
|
closeMenu: () => void;
|
|
34
50
|
change: {
|
|
35
51
|
open: boolean;
|
|
36
52
|
empId: number | null;
|
|
37
53
|
dayIdx: number | null;
|
|
54
|
+
slotIndex: number;
|
|
38
55
|
};
|
|
39
56
|
changeSlot: import("vue").ComputedRef<import("../types").WorkSlot[]>;
|
|
40
57
|
changeCandidates: import("vue").ComputedRef<{
|
|
41
58
|
id: number;
|
|
42
59
|
name: string;
|
|
60
|
+
employmentType: "FULLTIME" | "PARTTIME";
|
|
43
61
|
role: string;
|
|
44
62
|
initials: string;
|
|
45
63
|
color: string;
|
|
@@ -62,9 +80,23 @@ export declare function useScheduleShiftActions(board: ScheduleBoardApi): {
|
|
|
62
80
|
conflictReason?: string | undefined;
|
|
63
81
|
openId?: number | undefined;
|
|
64
82
|
breakMins?: number | undefined;
|
|
83
|
+
breaks?: ({
|
|
84
|
+
type: "DURATION";
|
|
85
|
+
minutes: number;
|
|
86
|
+
breakPayType: "PAID" | "UNPAID";
|
|
87
|
+
} | {
|
|
88
|
+
type: "TIME_RANGE";
|
|
89
|
+
startTime: string;
|
|
90
|
+
endTime: string;
|
|
91
|
+
breakPayType: "PAID" | "UNPAID";
|
|
92
|
+
})[] | undefined;
|
|
65
93
|
assignmentId?: string | undefined;
|
|
94
|
+
splitGroupId?: string | undefined;
|
|
66
95
|
} | {
|
|
67
96
|
timeOff: "approved" | "pending";
|
|
97
|
+
requestId?: string | undefined;
|
|
98
|
+
type?: "OFF_DAY" | "LEAVE" | undefined;
|
|
99
|
+
leaveType?: "ANNUAL" | "MEDICAL" | "EMERGENCY" | "UNPAID" | undefined;
|
|
68
100
|
reason: string;
|
|
69
101
|
half?: boolean | undefined;
|
|
70
102
|
halfPart?: "AM" | "PM" | undefined;
|
|
@@ -95,7 +127,18 @@ export declare function useScheduleShiftActions(board: ScheduleBoardApi): {
|
|
|
95
127
|
conflictReason?: string | undefined;
|
|
96
128
|
openId?: number | undefined;
|
|
97
129
|
breakMins?: number | undefined;
|
|
130
|
+
breaks?: ({
|
|
131
|
+
type: "DURATION";
|
|
132
|
+
minutes: number;
|
|
133
|
+
breakPayType: "PAID" | "UNPAID";
|
|
134
|
+
} | {
|
|
135
|
+
type: "TIME_RANGE";
|
|
136
|
+
startTime: string;
|
|
137
|
+
endTime: string;
|
|
138
|
+
breakPayType: "PAID" | "UNPAID";
|
|
139
|
+
})[] | undefined;
|
|
98
140
|
assignmentId?: string | undefined;
|
|
141
|
+
splitGroupId?: string | undefined;
|
|
99
142
|
}[] | null)[];
|
|
100
143
|
remarks: {
|
|
101
144
|
author: string;
|
|
@@ -124,108 +167,36 @@ export declare function useScheduleShiftActions(board: ScheduleBoardApi): {
|
|
|
124
167
|
passcode?: string | undefined;
|
|
125
168
|
masterUser?: boolean | undefined;
|
|
126
169
|
}[]>;
|
|
127
|
-
openChange: (empId: number, dayIdx: number) => void;
|
|
170
|
+
openChange: (empId: number, dayIdx: number, slotIndex?: number) => void;
|
|
128
171
|
closeChange: () => void;
|
|
129
172
|
confirmChange: (toId: number) => void;
|
|
130
173
|
swap: {
|
|
131
174
|
open: boolean;
|
|
132
175
|
empId: number | null;
|
|
133
176
|
dayIdx: number | null;
|
|
177
|
+
slotIndex: number;
|
|
178
|
+
slotCount: number;
|
|
179
|
+
preset: {
|
|
180
|
+
empId: number;
|
|
181
|
+
dayIdx: number;
|
|
182
|
+
} | null;
|
|
134
183
|
};
|
|
135
184
|
swapSlot: import("vue").ComputedRef<import("../types").WorkSlot[]>;
|
|
136
185
|
swapCandidates: import("vue").ComputedRef<{
|
|
137
|
-
emp:
|
|
138
|
-
|
|
139
|
-
name: string;
|
|
140
|
-
role: string;
|
|
141
|
-
initials: string;
|
|
142
|
-
color: string;
|
|
143
|
-
weekHours: number;
|
|
144
|
-
pct: number;
|
|
145
|
-
contractHours?: number | undefined;
|
|
146
|
-
rate: number;
|
|
147
|
-
positions: string[];
|
|
148
|
-
shifts: ({
|
|
149
|
-
start: string;
|
|
150
|
-
end: string;
|
|
151
|
-
role: string;
|
|
152
|
-
status: import("../types").ShiftStatus;
|
|
153
|
-
clock?: {
|
|
154
|
-
in: string | null;
|
|
155
|
-
out: string | null;
|
|
156
|
-
status: "on-time" | "late" | "early-out" | "absent";
|
|
157
|
-
} | undefined;
|
|
158
|
-
conflict?: boolean | undefined;
|
|
159
|
-
conflictReason?: string | undefined;
|
|
160
|
-
openId?: number | undefined;
|
|
161
|
-
breakMins?: number | undefined;
|
|
162
|
-
assignmentId?: string | undefined;
|
|
163
|
-
} | {
|
|
164
|
-
timeOff: "approved" | "pending";
|
|
165
|
-
reason: string;
|
|
166
|
-
half?: boolean | undefined;
|
|
167
|
-
halfPart?: "AM" | "PM" | undefined;
|
|
168
|
-
from?: string | undefined;
|
|
169
|
-
to?: string | undefined;
|
|
170
|
-
appliedOn?: string | undefined;
|
|
171
|
-
note?: string | undefined;
|
|
172
|
-
cert?: {
|
|
173
|
-
name: string;
|
|
174
|
-
size: string;
|
|
175
|
-
} | null | undefined;
|
|
176
|
-
bal?: {
|
|
177
|
-
type: string;
|
|
178
|
-
entitled: number;
|
|
179
|
-
used: number;
|
|
180
|
-
} | undefined;
|
|
181
|
-
} | {
|
|
182
|
-
start: string;
|
|
183
|
-
end: string;
|
|
184
|
-
role: string;
|
|
185
|
-
status: import("../types").ShiftStatus;
|
|
186
|
-
clock?: {
|
|
187
|
-
in: string | null;
|
|
188
|
-
out: string | null;
|
|
189
|
-
status: "on-time" | "late" | "early-out" | "absent";
|
|
190
|
-
} | undefined;
|
|
191
|
-
conflict?: boolean | undefined;
|
|
192
|
-
conflictReason?: string | undefined;
|
|
193
|
-
openId?: number | undefined;
|
|
194
|
-
breakMins?: number | undefined;
|
|
195
|
-
assignmentId?: string | undefined;
|
|
196
|
-
}[] | null)[];
|
|
197
|
-
remarks: {
|
|
198
|
-
author: string;
|
|
199
|
-
date: string;
|
|
200
|
-
type: "note" | "warning" | "praise";
|
|
201
|
-
text: string;
|
|
202
|
-
}[];
|
|
203
|
-
section: string;
|
|
204
|
-
compGroup?: string | undefined;
|
|
205
|
-
mobile?: string | undefined;
|
|
206
|
-
dial?: string | undefined;
|
|
207
|
-
locations?: string[] | undefined;
|
|
208
|
-
payBasis?: "hourly" | "monthly" | undefined;
|
|
209
|
-
payAmount?: number | undefined;
|
|
210
|
-
maxHours?: number | undefined;
|
|
211
|
-
maxOtHours?: number | undefined;
|
|
212
|
-
minHours?: number | undefined;
|
|
213
|
-
otAfterDaily?: number | undefined;
|
|
214
|
-
preferences?: string[] | undefined;
|
|
215
|
-
seniority?: "senior" | "junior" | "" | undefined;
|
|
216
|
-
availDays?: boolean[] | undefined;
|
|
217
|
-
availHours?: {
|
|
218
|
-
from: string;
|
|
219
|
-
to: string;
|
|
220
|
-
}[] | undefined;
|
|
221
|
-
passcode?: string | undefined;
|
|
222
|
-
masterUser?: boolean | undefined;
|
|
223
|
-
};
|
|
186
|
+
emp: Employee;
|
|
187
|
+
dayIdx: number;
|
|
224
188
|
slot: import("../types").WorkSlot[];
|
|
189
|
+
soft: string | null;
|
|
225
190
|
}[]>;
|
|
226
|
-
|
|
191
|
+
swapPreset: import("vue").ComputedRef<{
|
|
192
|
+
emp: Employee;
|
|
193
|
+
dayIdx: number;
|
|
194
|
+
slot: import("../types").WorkSlot[];
|
|
195
|
+
soft: string | null;
|
|
196
|
+
} | null>;
|
|
197
|
+
openSwap: (empId: number, dayIdx: number, preset?: ScheduleSwapState["preset"], slotIndex?: number, slotCount?: number) => void;
|
|
227
198
|
closeSwap: () => void;
|
|
228
|
-
confirmSwap: (toEmpId: number) => void;
|
|
229
|
-
removeShift: (empId: number, dayIdx: number) => void;
|
|
199
|
+
confirmSwap: (toEmpId: number, toDayIdx: number) => void;
|
|
200
|
+
removeShift: (empId: number, dayIdx: number, slotIndex?: number) => void;
|
|
230
201
|
};
|
|
231
202
|
export type ScheduleShiftActionsApi = ReturnType<typeof useScheduleShiftActions>;
|
|
@@ -65,6 +65,9 @@ export declare function useScheduleShiftPopover(board: ScheduleBoardApi, demand:
|
|
|
65
65
|
breakChoice: import("vue").Ref<ScheduleBreakChoice, ScheduleBreakChoice>;
|
|
66
66
|
breakCustomMins: import("vue").Ref<number, number>;
|
|
67
67
|
breakCustomUnit: import("vue").Ref<"mins" | "hrs", "mins" | "hrs">;
|
|
68
|
+
breakMode: import("vue").Ref<"time" | "duration", "time" | "duration">;
|
|
69
|
+
breakStartTime: import("vue").Ref<string, string>;
|
|
70
|
+
breakEndTime: import("vue").Ref<string, string>;
|
|
68
71
|
repeatDays: import("vue").Ref<boolean[], boolean[]>;
|
|
69
72
|
gapNote: import("vue").Ref<string | null, string | null>;
|
|
70
73
|
conflictNote: import("vue").Ref<string | null, string | null>;
|
|
@@ -75,6 +78,7 @@ export declare function useScheduleShiftPopover(board: ScheduleBoardApi, demand:
|
|
|
75
78
|
whoOptions: import("vue").ComputedRef<{
|
|
76
79
|
id: number;
|
|
77
80
|
name: string;
|
|
81
|
+
employmentType: "FULLTIME" | "PARTTIME";
|
|
78
82
|
role: string;
|
|
79
83
|
initials: string;
|
|
80
84
|
color: string;
|
|
@@ -97,9 +101,23 @@ export declare function useScheduleShiftPopover(board: ScheduleBoardApi, demand:
|
|
|
97
101
|
conflictReason?: string | undefined;
|
|
98
102
|
openId?: number | undefined;
|
|
99
103
|
breakMins?: number | undefined;
|
|
104
|
+
breaks?: ({
|
|
105
|
+
type: "DURATION";
|
|
106
|
+
minutes: number;
|
|
107
|
+
breakPayType: "PAID" | "UNPAID";
|
|
108
|
+
} | {
|
|
109
|
+
type: "TIME_RANGE";
|
|
110
|
+
startTime: string;
|
|
111
|
+
endTime: string;
|
|
112
|
+
breakPayType: "PAID" | "UNPAID";
|
|
113
|
+
})[] | undefined;
|
|
100
114
|
assignmentId?: string | undefined;
|
|
115
|
+
splitGroupId?: string | undefined;
|
|
101
116
|
} | {
|
|
102
117
|
timeOff: "approved" | "pending";
|
|
118
|
+
requestId?: string | undefined;
|
|
119
|
+
type?: "OFF_DAY" | "LEAVE" | undefined;
|
|
120
|
+
leaveType?: "ANNUAL" | "MEDICAL" | "EMERGENCY" | "UNPAID" | undefined;
|
|
103
121
|
reason: string;
|
|
104
122
|
half?: boolean | undefined;
|
|
105
123
|
halfPart?: "AM" | "PM" | undefined;
|
|
@@ -130,7 +148,18 @@ export declare function useScheduleShiftPopover(board: ScheduleBoardApi, demand:
|
|
|
130
148
|
conflictReason?: string | undefined;
|
|
131
149
|
openId?: number | undefined;
|
|
132
150
|
breakMins?: number | undefined;
|
|
151
|
+
breaks?: ({
|
|
152
|
+
type: "DURATION";
|
|
153
|
+
minutes: number;
|
|
154
|
+
breakPayType: "PAID" | "UNPAID";
|
|
155
|
+
} | {
|
|
156
|
+
type: "TIME_RANGE";
|
|
157
|
+
startTime: string;
|
|
158
|
+
endTime: string;
|
|
159
|
+
breakPayType: "PAID" | "UNPAID";
|
|
160
|
+
})[] | undefined;
|
|
133
161
|
assignmentId?: string | undefined;
|
|
162
|
+
splitGroupId?: string | undefined;
|
|
134
163
|
}[] | null)[];
|
|
135
164
|
remarks: {
|
|
136
165
|
author: string;
|
|
@@ -167,11 +196,10 @@ export declare function useScheduleShiftPopover(board: ScheduleBoardApi, demand:
|
|
|
167
196
|
totalHours: import("vue").ComputedRef<number>;
|
|
168
197
|
totalLabel: import("vue").ComputedRef<string>;
|
|
169
198
|
warnings: import("vue").ComputedRef<string[]>;
|
|
170
|
-
openForEmployee: (forEmpId: number, day: number, roleHint?: string, hours?: ScheduleShiftSegment) => void;
|
|
199
|
+
openForEmployee: (forEmpId: number, day: number, roleHint?: string, hours?: ScheduleShiftSegment, slotIndex?: number) => void;
|
|
171
200
|
openForNewOpenShift: (day: number, roleHint?: string, hours?: ScheduleShiftSegment) => void;
|
|
172
201
|
openForEditOpenShift: (openShiftId: number) => void;
|
|
173
202
|
close: () => void;
|
|
174
|
-
addSegment: () => void;
|
|
175
203
|
removeSegment: (i: number) => void;
|
|
176
204
|
addRole: () => void;
|
|
177
205
|
removeRole: (i: number) => void;
|
|
@@ -1,23 +1,17 @@
|
|
|
1
1
|
import type { Proposal } from '../types';
|
|
2
2
|
import type { ScheduleBoardApi } from './useScheduleBoard';
|
|
3
3
|
import type { ScheduleEmployeeLoad } from './useScheduleEmployeeIdentity';
|
|
4
|
-
export type ScheduleRailSort = 'load' | 'name' | 'hours' | 'cost';
|
|
5
4
|
/** The rail's rows ARE the shared identity block's data — one derivation, so the rail and the
|
|
6
5
|
* employee grid's name column can't disagree about somebody's load. */
|
|
7
6
|
export type ScheduleRailRow = ScheduleEmployeeLoad;
|
|
8
|
-
/** The area view's staff rail —
|
|
9
|
-
* column shows, plus each person's load bar and
|
|
10
|
-
*
|
|
11
|
-
*
|
|
7
|
+
/** The area view's staff rail — least-loaded first over the same roster the employee view's
|
|
8
|
+
* name column shows, plus each person's load bar. Search and the sort picker both live in the
|
|
9
|
+
* filter bar / name column now, not here. Ported from the mockup's
|
|
10
|
+
* renderStaffRail()/orderedRoster()/staffLoad(), scoped to a single week (no day/area
|
|
11
|
+
* combination — Daily view stays employee-only for now). */
|
|
12
12
|
export declare function useScheduleStaffRail(board: ScheduleBoardApi,
|
|
13
13
|
/** Lazy: the auto-scheduler is built after the rail, and only read when rows are computed. */
|
|
14
14
|
proposalAt?: () => ((empId: number, dayIdx: number) => Proposal | undefined) | undefined): {
|
|
15
|
-
search: import("vue").Ref<string, string>;
|
|
16
|
-
sort: import("vue").Ref<ScheduleRailSort, ScheduleRailSort>;
|
|
17
15
|
rows: import("vue").ComputedRef<ScheduleEmployeeLoad[]>;
|
|
18
|
-
openSummary: import("vue").ComputedRef<{
|
|
19
|
-
count: number;
|
|
20
|
-
hours: number;
|
|
21
|
-
}>;
|
|
22
16
|
};
|
|
23
17
|
export type ScheduleStaffRailApi = ReturnType<typeof useScheduleStaffRail>;
|
|
@@ -17,7 +17,6 @@ export declare function useScheduleStatsRow(board: ScheduleBoardApi, costRail: S
|
|
|
17
17
|
visibleHours: import("vue").ComputedRef<number>;
|
|
18
18
|
salesFor: (dayIdx: number) => number;
|
|
19
19
|
isDayOverridden: (dayIdx: number) => boolean;
|
|
20
|
-
setForecast: (value: string) => void;
|
|
21
20
|
setDayForecast: (dayIdx: number, value: string) => void;
|
|
22
21
|
labourPct: (dayIdx: number) => number | null;
|
|
23
22
|
isShort: (dayIdx: number) => boolean;
|