@feedmepos/mf-hrm-portal 2.2.5-dev.7 → 2.2.5-dev.9
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-dn-WwNAd.js → ApprovalCodeList-D5l9vIsE.js} +2 -2
- package/dist/{AuditLogList-BqVp9fxD.js → AuditLogList-ByTa5UJY.js} +3 -3
- package/dist/{ConditionBuilderForm.vue_vue_type_script_setup_true_lang-DnAet2oc.js → ConditionBuilderForm.vue_vue_type_script_setup_true_lang-mNdn1TYV.js} +2 -2
- package/dist/{EmployeeList-BwTJre5k.js → EmployeeList-Bv6ANk-P.js} +8 -9
- package/dist/{GrantUserList-CZek1r4F.js → GrantUserList-Bt8w3p4j.js} +3 -3
- package/dist/{Main-MjSYZdOq.js → Main-DHJcgePj.js} +5 -5
- package/dist/{Main-CbmA-SYo.js → Main-DkP8dWgn.js} +9 -9
- package/dist/{Main-DVA51sj2.js → Main-DqiGpT4v.js} +2 -2
- package/dist/{PermissionSetList-lkHmXhNm.js → PermissionSetList-BIGv1u67.js} +10 -11
- package/dist/{PortalPermissionEditor.vue_vue_type_script_setup_true_lang-cFQDQCal.js → PortalPermissionEditor.vue_vue_type_script_setup_true_lang-niywl_DX.js} +687 -688
- package/dist/{RoleList-BSs0SmFo.js → RoleList-CH6NDKPU.js} +7 -7
- package/dist/ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-T1ACkX_6.js +426 -0
- package/dist/ScheduleButton.vue_vue_type_script_setup_true_lang-BzQuLLf5.js +690 -0
- package/dist/ScheduleGeneralPage-DJPENJZ2.js +320 -0
- package/dist/SchedulePage-C1egcbIC.js +14421 -0
- package/dist/SchedulePositionPage-OhL_hsqG.js +293 -0
- package/dist/ScheduleSelect.vue_vue_type_script_setup_true_lang-B8W4sTsA.js +242 -0
- package/dist/{TeamMemberList-Dit_nV6d.js → TeamMemberList-BwfG3go2.js} +8 -9
- package/dist/{TimesheetList-B-FlRO7E.js → TimesheetList-DcoqzbLO.js} +5 -5
- package/dist/{TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-DZUJR8K_.js → TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-RyhiKTSd.js} +2 -2
- package/dist/{app-BpnOPodL.js → app-BcZ6C8M8.js} +8 -8
- package/dist/app.js +1 -1
- package/dist/{dayjs.min-4GLfSOGZ.js → dayjs.min-Ch0iysTG.js} +1 -1
- package/dist/employee-DwYHFacQ.js +204 -0
- package/dist/{index-DYoVJQTd.js → iteration-D1uWLp0V.js} +726 -698
- package/dist/{lodash-CcFIMCiJ.js → lodash-DErxm7xf.js} +1 -1
- package/dist/{role-OXCiWTVq.js → role-B9VanAny.js} +3 -4
- package/dist/{rule-8iyCO_LZ.js → rule-C4f_Ilzr.js} +36 -37
- package/dist/src/api/schedule/index.d.ts +0 -3
- package/dist/src/views/scheduling/ScheduleGeneralPage.vue.d.ts +1 -2
- package/dist/src/views/scheduling/SchedulePage.vue.d.ts +1 -2
- package/dist/src/views/scheduling/SchedulePositionPage.vue.d.ts +1 -2
- package/dist/src/views/scheduling/components/ScheduleAddEmployeeModal.vue.d.ts +5 -1
- package/dist/src/views/scheduling/components/ScheduleAddEmployeePositionsSection.vue.d.ts +5 -1
- package/dist/src/views/scheduling/components/ScheduleAddPositionModal.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleAutoScheduleModal.vue.d.ts +5 -1
- package/dist/src/views/scheduling/components/ScheduleButton.vue.d.ts +23 -0
- package/dist/src/views/scheduling/components/ScheduleConfirmModal.vue.d.ts +1 -1
- package/dist/src/views/scheduling/components/ScheduleEmployeeMenu.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleGridSkeleton.vue.d.ts +2 -0
- package/dist/src/views/scheduling/components/ScheduleLeaveEditModal.vue.d.ts +4 -2
- package/dist/src/views/scheduling/components/ScheduleOnboardingWizard.vue.d.ts +3 -0
- package/dist/src/views/scheduling/components/ScheduleSelect.vue.d.ts +32 -2
- package/dist/src/views/scheduling/components/ScheduleShiftCell.vue.d.ts +4 -0
- package/dist/src/views/scheduling/components/ScheduleShiftHeadcountEditor.vue.d.ts +5 -1
- package/dist/src/views/scheduling/components/ScheduleShiftPopover.vue.d.ts +2 -0
- package/dist/src/views/scheduling/components/ScheduleStaffRail.vue.d.ts +4 -2
- package/dist/src/views/scheduling/components/ScheduleStaffRows.vue.d.ts +8 -2
- package/dist/src/views/scheduling/components/ScheduleTopbar.vue.d.ts +4 -6
- package/dist/src/views/scheduling/composables/schedule-add-employee-form.d.ts +5 -0
- package/dist/src/views/scheduling/composables/schedule-popover-position.d.ts +16 -0
- package/dist/src/views/scheduling/composables/scheduleAutoSolver.d.ts +21 -0
- package/dist/src/views/scheduling/composables/useCollapsedList.d.ts +9 -0
- package/dist/src/views/scheduling/composables/useScheduleAddEmployee.d.ts +12 -0
- package/dist/src/views/scheduling/composables/useScheduleAddPick.d.ts +14 -7
- package/dist/src/views/scheduling/composables/useScheduleAssign.d.ts +11 -2
- package/dist/src/views/scheduling/composables/useScheduleAutoSchedule.d.ts +18 -11
- package/dist/src/views/scheduling/composables/useScheduleBoard.d.ts +11 -0
- package/dist/src/views/scheduling/composables/useScheduleCopyWeek.d.ts +5 -3
- package/dist/src/views/scheduling/composables/useScheduleDayTimeline.d.ts +0 -5
- package/dist/src/views/scheduling/composables/useScheduleDemand.d.ts +12 -4
- package/dist/src/views/scheduling/composables/useScheduleDemandSheet.d.ts +7 -1
- package/dist/src/views/scheduling/composables/useScheduleEmployeeIdentity.d.ts +11 -2
- package/dist/src/views/scheduling/composables/useScheduleEmployeeMenu.d.ts +35 -0
- package/dist/src/views/scheduling/composables/useScheduleGapPopover.d.ts +2 -0
- package/dist/src/views/scheduling/composables/useScheduleLeave.d.ts +53 -3
- package/dist/src/views/scheduling/composables/useScheduleOnboardingWizard.d.ts +1192 -55
- package/dist/src/views/scheduling/composables/useScheduleOutlet.d.ts +1 -0
- package/dist/src/views/scheduling/composables/useSchedulePositionModal.d.ts +50 -0
- package/dist/src/views/scheduling/composables/useSchedulePublish.d.ts +2 -0
- package/dist/src/views/scheduling/composables/useScheduleRangeCalendar.d.ts +10 -1
- package/dist/src/views/scheduling/composables/useScheduleRoster.d.ts +6 -0
- package/dist/src/views/scheduling/composables/useScheduleSetupBanner.d.ts +5 -5
- package/dist/src/views/scheduling/composables/useScheduleShiftActions.d.ts +6 -0
- package/dist/src/views/scheduling/composables/useScheduleShiftPopover.d.ts +7 -0
- package/dist/src/views/scheduling/composables/useScheduleStaffRail.d.ts +4 -1
- package/dist/src/views/scheduling/composables/useScheduleTimePicker.d.ts +6 -1
- package/dist/src/views/scheduling/composables/useScheduleViewportFit.d.ts +9 -0
- package/dist/src/views/scheduling/data.d.ts +6 -1
- package/dist/src/views/scheduling/schedule-store.d.ts +36 -1
- package/dist/src/views/scheduling/types.d.ts +14 -1
- package/dist/style.css +1 -1
- package/dist/tsconfig.app.tsbuildinfo +1 -1
- package/dist/{useReportPermissions-C3fuFTUC.js → useReportPermissions-CTr56kBo.js} +3 -3
- package/package.json +1 -1
- package/dist/ScheduleGeneralPage-DD9n2TUe.js +0 -242
- package/dist/SchedulePage-B0X97zVC.js +0 -10761
- package/dist/SchedulePositionPage-BXz1USn3.js +0 -220
- package/dist/ScheduleSelect.vue_vue_type_script_setup_true_lang-DAHke2rH.js +0 -201
- package/dist/employee-ChdVnSmd.js +0 -139
- package/dist/index-CilJxsY7.js +0 -70
- package/dist/iteration-CcXrOMQe.js +0 -30
- package/dist/useScheduleOutlet-TPZJHgSY.js +0 -546
- package/dist/useSchedulePositions-DCkaKHQm.js +0 -103
|
@@ -19,6 +19,7 @@ export declare function useScheduleAddEmployee(board: ScheduleBoardApi): {
|
|
|
19
19
|
payBasis: "hourly" | "monthly";
|
|
20
20
|
payAmount: string;
|
|
21
21
|
maxHours: string;
|
|
22
|
+
minHours: string;
|
|
22
23
|
otAfterDaily: string;
|
|
23
24
|
maxOtHours: string;
|
|
24
25
|
availDays: boolean[];
|
|
@@ -32,6 +33,8 @@ export declare function useScheduleAddEmployee(board: ScheduleBoardApi): {
|
|
|
32
33
|
seniority: "" | "senior" | "junior";
|
|
33
34
|
passcode: string[];
|
|
34
35
|
masterUser: boolean;
|
|
36
|
+
roleId: string;
|
|
37
|
+
masterCode: string;
|
|
35
38
|
};
|
|
36
39
|
sectionId: import("vue").Ref<string, string>;
|
|
37
40
|
isEditing: import("vue").ComputedRef<boolean>;
|
|
@@ -48,6 +51,15 @@ export declare function useScheduleAddEmployee(board: ScheduleBoardApi): {
|
|
|
48
51
|
effectiveRate: import("vue").ComputedRef<number>;
|
|
49
52
|
passcodeValue: import("vue").ComputedRef<string>;
|
|
50
53
|
passcodeOk: import("vue").ComputedRef<boolean>;
|
|
54
|
+
currentLocationLabel: import("vue").ComputedRef<string>;
|
|
55
|
+
roleOptions: import("vue").ComputedRef<{
|
|
56
|
+
value: string;
|
|
57
|
+
label: string;
|
|
58
|
+
}[]>;
|
|
59
|
+
roleError: import("vue").ComputedRef<boolean>;
|
|
60
|
+
masterCodeError: import("vue").ComputedRef<boolean>;
|
|
61
|
+
isNewUser: import("vue").ComputedRef<boolean>;
|
|
62
|
+
needsRole: import("vue").ComputedRef<boolean>;
|
|
51
63
|
footerHint: import("vue").ComputedRef<"Pick who — this outlet's own pay, position and hours are still set here." | "One short form. Rest days are set on their profile afterwards.">;
|
|
52
64
|
primaryRoleLabel: import("vue").ComputedRef<string>;
|
|
53
65
|
locationsSummary: import("vue").ComputedRef<string>;
|
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
import type { ScheduleBoardApi } from './useScheduleBoard';
|
|
2
2
|
import type { ScheduleDemandApi } from './useScheduleDemand';
|
|
3
|
+
import { type ScheduleAnchorRect } from './schedule-popover-position';
|
|
3
4
|
export interface ScheduleAddPickState {
|
|
4
5
|
open: boolean;
|
|
5
6
|
empId: number | null;
|
|
6
7
|
dayIdx: number | null;
|
|
8
|
+
/** Measured rect of the cell the popup opened from; the popup component places itself from it
|
|
9
|
+
* once rendered (V6.2 placePopover), writing the result to `left`/`top`. */
|
|
10
|
+
anchor: ScheduleAnchorRect | null;
|
|
7
11
|
left: number;
|
|
8
|
-
/** Only one of `top`/`bottom` is live at a time, picked by `openAbove` — anchoring from the
|
|
9
|
-
* bottom when flipped up lets the box grow with its own content (the query input plus
|
|
10
|
-
* however many pick-list rows there are) instead of a height guessed in JS. */
|
|
11
12
|
top: number;
|
|
12
|
-
bottom: number;
|
|
13
|
-
openAbove: boolean;
|
|
14
13
|
}
|
|
15
14
|
export interface ScheduleAddPickLeaveOption {
|
|
16
15
|
reason: string;
|
|
@@ -21,6 +20,8 @@ export interface ScheduleAddPickSuggestion {
|
|
|
21
20
|
end: string;
|
|
22
21
|
short: number;
|
|
23
22
|
label: string;
|
|
23
|
+
/** "Covers 16:00–22:00 demand" — the demand this offer answers, shown under the label. */
|
|
24
|
+
covers: string;
|
|
24
25
|
title: string;
|
|
25
26
|
}
|
|
26
27
|
/** The "+ Add" quick-pick popover on an employee's empty cell — ported from the mockup's
|
|
@@ -35,15 +36,21 @@ export interface ScheduleAddPickSuggestion {
|
|
|
35
36
|
export declare function useScheduleAddPick(board: ScheduleBoardApi, demand: ScheduleDemandApi, handlers: {
|
|
36
37
|
onCommitted: (message: string) => void;
|
|
37
38
|
onOpenFullEditor: (empId: number, dayIdx: number) => void;
|
|
39
|
+
/** The leave editor, on this cell. `reason` is the row's own type, or null for the plain "Leave" row. */
|
|
40
|
+
onOpenLeave: (empId: number, dayIdx: number, reason: string | null) => void;
|
|
38
41
|
}): {
|
|
39
42
|
state: {
|
|
40
43
|
open: boolean;
|
|
41
44
|
empId: number | null;
|
|
42
45
|
dayIdx: number | null;
|
|
46
|
+
anchor: {
|
|
47
|
+
left: number;
|
|
48
|
+
right: number;
|
|
49
|
+
top: number;
|
|
50
|
+
bottom: number;
|
|
51
|
+
} | null;
|
|
43
52
|
left: number;
|
|
44
53
|
top: number;
|
|
45
|
-
bottom: number;
|
|
46
|
-
openAbove: boolean;
|
|
47
54
|
};
|
|
48
55
|
query: import("vue").Ref<string, string>;
|
|
49
56
|
parsedRange: import("vue").ComputedRef<{
|
|
@@ -51,6 +51,11 @@ export interface ScheduleAssignGroup {
|
|
|
51
51
|
export interface ScheduleAssignSlot {
|
|
52
52
|
key: string;
|
|
53
53
|
position: string;
|
|
54
|
+
/** One requirement of a demand gap: shows whether the people scheduled fulfil it (progress bar),
|
|
55
|
+
* and can be picked to assign people as that position. */
|
|
56
|
+
tracker?: boolean;
|
|
57
|
+
/** 0–100, for a tracker's progress bar. */
|
|
58
|
+
pct?: number;
|
|
54
59
|
start: string;
|
|
55
60
|
end: string;
|
|
56
61
|
chip: string;
|
|
@@ -98,14 +103,18 @@ export declare function useScheduleAssign(board: ScheduleBoardApi, demand: Sched
|
|
|
98
103
|
breakMins?: number | undefined;
|
|
99
104
|
} | null>;
|
|
100
105
|
title: import("vue").ComputedRef<string>;
|
|
101
|
-
|
|
106
|
+
subParts: import("vue").ComputedRef<{
|
|
107
|
+
position: string;
|
|
108
|
+
range: string;
|
|
109
|
+
duration: string;
|
|
110
|
+
} | null>;
|
|
102
111
|
footLead: import("vue").ComputedRef<string>;
|
|
103
112
|
footRest: import("vue").ComputedRef<string>;
|
|
104
113
|
groups: import("vue").ComputedRef<ScheduleAssignGroup[]>;
|
|
105
114
|
shiftSlots: import("vue").ComputedRef<ScheduleAssignSlot[]>;
|
|
106
115
|
switchTo: (slot: ScheduleAssignSlot) => void;
|
|
107
116
|
openFor: (openShiftId: number) => void;
|
|
108
|
-
openForGap: (dayIdx: number,
|
|
117
|
+
openForGap: (dayIdx: number, _position: string, start: string, end: string, required: number, scheduled: number, gapFrom: number, gapTo: number) => void;
|
|
109
118
|
close: () => void;
|
|
110
119
|
fillOpenShift: (openShiftId: number, empId: number) => void;
|
|
111
120
|
armAssign: (empId: number) => void;
|
|
@@ -7,6 +7,11 @@ export interface ScheduleAutoScheduleOptions {
|
|
|
7
7
|
fillGaps: boolean;
|
|
8
8
|
objective: FdtoScheduleAutoScheduleObjective;
|
|
9
9
|
allowOvertime: boolean;
|
|
10
|
+
/** Shown as preferences in the dialog but not sent: the generator takes no input for them yet
|
|
11
|
+
* (availability and time off are always respected; patterns and cost ride on the objective). */
|
|
12
|
+
respectAvailability: boolean;
|
|
13
|
+
followPatterns: boolean;
|
|
14
|
+
costEfficient: boolean;
|
|
10
15
|
}
|
|
11
16
|
/** Backend-powered draft generation and local proposal review. Generation never writes;
|
|
12
17
|
* accepted proposals use the board's existing assignment persistence path. */
|
|
@@ -17,6 +22,9 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
|
|
|
17
22
|
fillGaps: boolean;
|
|
18
23
|
objective: FdtoScheduleAutoScheduleObjective;
|
|
19
24
|
allowOvertime: boolean;
|
|
25
|
+
respectAvailability: boolean;
|
|
26
|
+
followPatterns: boolean;
|
|
27
|
+
costEfficient: boolean;
|
|
20
28
|
};
|
|
21
29
|
generating: import("vue").Ref<boolean, boolean>;
|
|
22
30
|
generateError: import("vue").Ref<string | null, string | null>;
|
|
@@ -94,22 +102,16 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
|
|
|
94
102
|
solver: string;
|
|
95
103
|
} | null>;
|
|
96
104
|
gapCount: import("vue").ComputedRef<number>;
|
|
105
|
+
hasDemand: import("vue").ComputedRef<boolean>;
|
|
106
|
+
noDemandOpen: import("vue").Ref<boolean, boolean>;
|
|
107
|
+
rangeLabel: import("vue").ComputedRef<string>;
|
|
97
108
|
openWizard: () => void;
|
|
98
109
|
closeWizard: () => void;
|
|
99
110
|
next: () => void;
|
|
100
111
|
back: () => void;
|
|
101
112
|
generate: () => Promise<void>;
|
|
102
|
-
reviewMode: import("vue").
|
|
103
|
-
proposals: import("vue").
|
|
104
|
-
id: number;
|
|
105
|
-
empId: number;
|
|
106
|
-
dayIdx: number;
|
|
107
|
-
start: string;
|
|
108
|
-
end: string;
|
|
109
|
-
role: string;
|
|
110
|
-
openId?: number | undefined;
|
|
111
|
-
status: "pending" | "rejected";
|
|
112
|
-
}[], Proposal[] | {
|
|
113
|
+
reviewMode: import("vue").ComputedRef<boolean>;
|
|
114
|
+
proposals: import("vue").ComputedRef<{
|
|
113
115
|
id: number;
|
|
114
116
|
empId: number;
|
|
115
117
|
dayIdx: number;
|
|
@@ -118,7 +120,10 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
|
|
|
118
120
|
role: string;
|
|
119
121
|
openId?: number | undefined;
|
|
120
122
|
status: "pending" | "rejected";
|
|
123
|
+
weekKey?: string | undefined;
|
|
124
|
+
reason?: string | undefined;
|
|
121
125
|
}[]>;
|
|
126
|
+
weekHasProposals: import("vue").ComputedRef<boolean>;
|
|
122
127
|
unmetCount: import("vue").Ref<number, number>;
|
|
123
128
|
acceptedCount: import("vue").ComputedRef<number>;
|
|
124
129
|
rejectedCount: import("vue").ComputedRef<number>;
|
|
@@ -128,6 +133,8 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
|
|
|
128
133
|
conflictCount: import("vue").ComputedRef<number>;
|
|
129
134
|
projectedCost: import("vue").ComputedRef<number | null>;
|
|
130
135
|
proposalAt: (empId: number, dayIdx: number) => Proposal | undefined;
|
|
136
|
+
draggingId: import("vue").Ref<number | null, number | null>;
|
|
137
|
+
moveProposal: (id: number, empId: number, dayIdx: number) => string | null;
|
|
131
138
|
toggleReject: (id: number) => void;
|
|
132
139
|
rejectAll: () => void;
|
|
133
140
|
exitReview: () => void;
|
|
@@ -56,6 +56,8 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
56
56
|
reason: string;
|
|
57
57
|
half?: boolean | undefined;
|
|
58
58
|
halfPart?: "AM" | "PM" | undefined;
|
|
59
|
+
from?: string | undefined;
|
|
60
|
+
to?: string | undefined;
|
|
59
61
|
appliedOn?: string | undefined;
|
|
60
62
|
note?: string | undefined;
|
|
61
63
|
cert?: {
|
|
@@ -98,6 +100,7 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
98
100
|
payAmount?: number | undefined;
|
|
99
101
|
maxHours?: number | undefined;
|
|
100
102
|
maxOtHours?: number | undefined;
|
|
103
|
+
minHours?: number | undefined;
|
|
101
104
|
otAfterDaily?: number | undefined;
|
|
102
105
|
preferences?: string[] | undefined;
|
|
103
106
|
seniority?: "senior" | "junior" | "" | undefined;
|
|
@@ -139,6 +142,8 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
139
142
|
reason: string;
|
|
140
143
|
half?: boolean | undefined;
|
|
141
144
|
halfPart?: "AM" | "PM" | undefined;
|
|
145
|
+
from?: string | undefined;
|
|
146
|
+
to?: string | undefined;
|
|
142
147
|
appliedOn?: string | undefined;
|
|
143
148
|
note?: string | undefined;
|
|
144
149
|
cert?: {
|
|
@@ -181,6 +186,7 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
181
186
|
payAmount?: number | undefined;
|
|
182
187
|
maxHours?: number | undefined;
|
|
183
188
|
maxOtHours?: number | undefined;
|
|
189
|
+
minHours?: number | undefined;
|
|
184
190
|
otAfterDaily?: number | undefined;
|
|
185
191
|
preferences?: string[] | undefined;
|
|
186
192
|
seniority?: "senior" | "junior" | "" | undefined;
|
|
@@ -228,6 +234,7 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
228
234
|
end: string;
|
|
229
235
|
breakMins?: number | undefined;
|
|
230
236
|
}[]>;
|
|
237
|
+
highlightEmpId: import("vue").Ref<number | null, number | null>;
|
|
231
238
|
rangeStart: import("vue").Ref<Date, Date>;
|
|
232
239
|
weekOffset: import("vue").ComputedRef<number>;
|
|
233
240
|
peekWeek: (offset: number) => import("./schedule-week-cache").WeekBucket;
|
|
@@ -283,6 +290,8 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
283
290
|
reason: string;
|
|
284
291
|
half?: boolean | undefined;
|
|
285
292
|
halfPart?: "AM" | "PM" | undefined;
|
|
293
|
+
from?: string | undefined;
|
|
294
|
+
to?: string | undefined;
|
|
286
295
|
appliedOn?: string | undefined;
|
|
287
296
|
note?: string | undefined;
|
|
288
297
|
cert?: {
|
|
@@ -342,6 +351,8 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
342
351
|
reason: string;
|
|
343
352
|
half?: boolean | undefined;
|
|
344
353
|
halfPart?: "AM" | "PM" | undefined;
|
|
354
|
+
from?: string | undefined;
|
|
355
|
+
to?: string | undefined;
|
|
345
356
|
appliedOn?: string | undefined;
|
|
346
357
|
note?: string | undefined;
|
|
347
358
|
cert?: {
|
|
@@ -10,8 +10,10 @@ export interface ScheduleCopySkipReport {
|
|
|
10
10
|
* board's per-week-offset bucket cache instead of the mockup's absolute 91-day horizon. Split
|
|
11
11
|
* shifts (copyUnitsOf in the mockup) aren't ported — WorkSlot has no splitId concept in this
|
|
12
12
|
* data model, so each slot is copied as its own unit. */
|
|
13
|
-
export declare function useScheduleCopyWeek(board: ScheduleBoardApi
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
export declare function useScheduleCopyWeek(board: ScheduleBoardApi, handlers?: {
|
|
14
|
+
onDemandChanged?: () => void;
|
|
15
|
+
}): {
|
|
16
|
+
copyLastWeek: (mode: "staffed" | "open") => Promise<void>;
|
|
17
|
+
copyThisWeekForward: (mode: "staffed" | "open") => Promise<void>;
|
|
16
18
|
};
|
|
17
19
|
export type ScheduleCopyWeekApi = ReturnType<typeof useScheduleCopyWeek>;
|
|
@@ -41,11 +41,6 @@ export interface ScheduleHourCell {
|
|
|
41
41
|
title: string;
|
|
42
42
|
n: number;
|
|
43
43
|
}
|
|
44
|
-
/** The day's hourly timeline (rows with shift bars placed by time), replacing the multi-day
|
|
45
|
-
* grid for the one day Daily view is looking at. Ported from the mockup's
|
|
46
|
-
* renderDayTimeline() + renderHourFooter() — the `else` (area) branch groups rows by position
|
|
47
|
-
* instead of by employee, reusing the same axis/bar/lane geometry. Auto-Schedule proposal
|
|
48
|
-
* review isn't carried over here; it stays week-view-only for now. */
|
|
49
44
|
export declare function useScheduleDayTimeline(board: ScheduleBoardApi, roster: ScheduleRosterApi, areaBoard: ScheduleAreaBoardApi, handlers: {
|
|
50
45
|
onAddShift: (empId: number, dayIdx: number) => void;
|
|
51
46
|
onEditShift: (empId: number, dayIdx: number) => void;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { CoverageSegment, DaySlot, DemandPeriod } from '../types';
|
|
1
|
+
import type { CoverageSegment, DaySlot, DemandPeriod, Employee, Proposal } from '../types';
|
|
2
2
|
import type { ScheduleBoardApi } from './useScheduleBoard';
|
|
3
3
|
export declare function toMin(t: string): number;
|
|
4
4
|
export declare function minToHHMM(m: number): string;
|
|
@@ -8,8 +8,7 @@ export declare function spanOf(start: string, end: string): [number, number];
|
|
|
8
8
|
/** 12-hour clock for prose — the sheet and the popovers read as sentences, and "16:00" in the
|
|
9
9
|
* middle of one does not. */
|
|
10
10
|
export declare function t12(hhmm: string): string;
|
|
11
|
-
/** The
|
|
12
|
-
* for the hour and not for the meridiem spelled out. */
|
|
11
|
+
/** The timeline's two end labels — "8am", "10:30pm", meridiem spelled out. */
|
|
13
12
|
export declare function minToShort(m: number): string;
|
|
14
13
|
export declare function rangeText(from: number, to: number): string;
|
|
15
14
|
export declare function roleTotalOf(p: DemandPeriod): number;
|
|
@@ -41,8 +40,17 @@ export declare function useScheduleDemand(board: ScheduleBoardApi): {
|
|
|
41
40
|
setWeekdayDemand: (weekday: number, periods: DemandPeriod[]) => void;
|
|
42
41
|
coverageAxis: (dayIdx: number) => ScheduleCoverageAxis;
|
|
43
42
|
coverageSegments: (dayIdx: number) => CoverageSegment[];
|
|
44
|
-
|
|
43
|
+
setPreview: (items: Proposal[]) => void;
|
|
44
|
+
segmentsWith: (dayIdx: number, employees: Employee[]) => CoverageSegment[];
|
|
45
|
+
dayHeadcount: (dayIdx: number) => {
|
|
46
|
+
crew: number;
|
|
47
|
+
peak: number;
|
|
48
|
+
};
|
|
49
|
+
coverageImpact: (dayIdx: number, empId: number | null, slot: DaySlot) => {
|
|
45
50
|
when: string;
|
|
51
|
+
pctBefore: number;
|
|
52
|
+
pctAfter: number;
|
|
53
|
+
stillShort: number;
|
|
46
54
|
before: {
|
|
47
55
|
required: number;
|
|
48
56
|
scheduled: number;
|
|
@@ -9,6 +9,9 @@ export interface ScheduleDemandSheetOptions {
|
|
|
9
9
|
onToast?: (message: string) => void;
|
|
10
10
|
/** Positions the breakdown can name — the same list the shift editor offers. */
|
|
11
11
|
positionOptions: () => string[];
|
|
12
|
+
/** Called instead of a toast when "+ Position breakdown" is pressed and there is no position
|
|
13
|
+
* to name yet — the page opens its Add Position popup for that period. */
|
|
14
|
+
onNeedPosition?: (periodIdx: number, roleIdx: number) => void;
|
|
12
15
|
}
|
|
13
16
|
/** The demand sheet — editing happens on a DRAFT, so Save is a real commit and closing is a
|
|
14
17
|
* real cancel. The sheet also carries the recurrence choice, because "every Tuesday" is a
|
|
@@ -41,7 +44,7 @@ export declare function useScheduleDemandSheet(board: ScheduleBoardApi, demand:
|
|
|
41
44
|
sub: string;
|
|
42
45
|
} | {
|
|
43
46
|
on: boolean;
|
|
44
|
-
key: "
|
|
47
|
+
key: "every";
|
|
45
48
|
label: string;
|
|
46
49
|
sub: string;
|
|
47
50
|
} | {
|
|
@@ -70,6 +73,8 @@ export declare function useScheduleDemandSheet(board: ScheduleBoardApi, demand:
|
|
|
70
73
|
removePeriod: (i: number) => void;
|
|
71
74
|
setHeads: (i: number, value: number | string) => void;
|
|
72
75
|
addRole: (i: number) => void;
|
|
76
|
+
addRoleNamed: (i: number, position: string) => void;
|
|
77
|
+
requestNewPosition: (i: number, k: number) => void;
|
|
73
78
|
removeRole: (i: number, k: number) => void;
|
|
74
79
|
setRoleCount: (i: number, k: number, value: number | string) => void;
|
|
75
80
|
setRolePosition: (i: number, k: number, position: string) => void;
|
|
@@ -78,6 +83,7 @@ export declare function useScheduleDemandSheet(board: ScheduleBoardApi, demand:
|
|
|
78
83
|
when: string;
|
|
79
84
|
required: number;
|
|
80
85
|
scheduled: number;
|
|
86
|
+
varies: boolean;
|
|
81
87
|
pct: number;
|
|
82
88
|
tone: "short" | "part" | "met" | "over";
|
|
83
89
|
note: string;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Employee } from '../types';
|
|
1
|
+
import type { Employee, Proposal } from '../types';
|
|
2
2
|
/** The one form every SMALL avatar wears — `.sc-av`, `.ch-av`, `.ap-av`, `.tl-av`, and the
|
|
3
3
|
* shift editor's `.sp2-who-av`. A tint of the person's colour behind their own colour, never a
|
|
4
4
|
* solid fill with white text: at 17–30px the initials are the only identifier, and knocking
|
|
@@ -21,7 +21,16 @@ export interface ScheduleEmployeeLoad {
|
|
|
21
21
|
pct: number;
|
|
22
22
|
barColor: string;
|
|
23
23
|
otHours: number;
|
|
24
|
+
/** Of `hours`, how many are auto-schedule suggestions not yet on the board. */
|
|
25
|
+
proposedHours: number;
|
|
26
|
+
/** The board's own hours as a fraction of contract: where the fill ends and the suggested part starts. */
|
|
27
|
+
boardPct: number;
|
|
28
|
+
/** The suggested part's width on the bar, as a fraction of contract. With no contract to measure
|
|
29
|
+
* against it fills the track, so suggested hours still show. */
|
|
30
|
+
proposedPct: number;
|
|
24
31
|
}
|
|
32
|
+
/** This person's live (not rejected) suggestions in the week on screen. */
|
|
33
|
+
export declare function proposedSlotsOf(emp: Employee, proposalAt?: (empId: number, dayIdx: number) => Proposal | undefined): Pick<Proposal, 'start' | 'end'>[];
|
|
25
34
|
/** One person's load against their contract, derived from the shifts actually on the board
|
|
26
35
|
* rather than from the stored `weekHours` field, so the bar can never disagree with the row
|
|
27
36
|
* of cards beside it.
|
|
@@ -29,4 +38,4 @@ export interface ScheduleEmployeeLoad {
|
|
|
29
38
|
* The staff rail (area view) and the grid's name column (employee view) are the same list of
|
|
30
39
|
* the same people; they used to be two pieces of markup reading two different numbers. This
|
|
31
40
|
* is the single one — the mockup's own note on empIdentityHTML(). */
|
|
32
|
-
export declare function employeeLoadOf(emp: Employee): ScheduleEmployeeLoad;
|
|
41
|
+
export declare function employeeLoadOf(emp: Employee, proposed?: Pick<Proposal, 'start' | 'end'>[]): ScheduleEmployeeLoad;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { ScheduleBoardApi } from './useScheduleBoard';
|
|
2
|
+
import type { ScheduleAnchorRect } from './schedule-popover-position';
|
|
3
|
+
export type ScheduleEmployeeMenuAction = 'profile' | 'edit' | 'hl' | 'remove';
|
|
4
|
+
export interface ScheduleEmployeeMenuState {
|
|
5
|
+
open: boolean;
|
|
6
|
+
empId: number | null;
|
|
7
|
+
anchor: ScheduleAnchorRect | null;
|
|
8
|
+
left: number;
|
|
9
|
+
top: number;
|
|
10
|
+
}
|
|
11
|
+
/** The ⋯ menu on a team member's row — V6.2's #empMenu: profile, update, highlight, remove. The actions that need a page-level surface (profile panel,
|
|
12
|
+
* edit wizard, confirm dialog) come in as handlers; highlight lives here. */
|
|
13
|
+
export declare function useScheduleEmployeeMenu(board: ScheduleBoardApi, handlers: {
|
|
14
|
+
onProfile: (empId: number) => void;
|
|
15
|
+
onEdit: (empId: number) => void;
|
|
16
|
+
onRemove: (empId: number) => void;
|
|
17
|
+
}): {
|
|
18
|
+
state: {
|
|
19
|
+
open: boolean;
|
|
20
|
+
empId: number | null;
|
|
21
|
+
anchor: {
|
|
22
|
+
left: number;
|
|
23
|
+
right: number;
|
|
24
|
+
top: number;
|
|
25
|
+
bottom: number;
|
|
26
|
+
} | null;
|
|
27
|
+
left: number;
|
|
28
|
+
top: number;
|
|
29
|
+
};
|
|
30
|
+
employee: import("vue").ComputedRef<import("../types").Employee | undefined>;
|
|
31
|
+
openFor: (empId: number, anchor: HTMLElement) => void;
|
|
32
|
+
close: () => void;
|
|
33
|
+
go: (action: ScheduleEmployeeMenuAction) => void;
|
|
34
|
+
};
|
|
35
|
+
export type ScheduleEmployeeMenuApi = ReturnType<typeof useScheduleEmployeeMenu>;
|
|
@@ -1,20 +1,70 @@
|
|
|
1
|
+
import type { LeaveSlot } from '../types';
|
|
1
2
|
import type { ScheduleBoardApi } from './useScheduleBoard';
|
|
3
|
+
/** What a day off can be booked as. "Rest Day" leads: it is the most-used reason a day is not
|
|
4
|
+
* worked. */
|
|
5
|
+
export declare const LEAVE_REASONS: string[];
|
|
6
|
+
/** The type the menu's plain "Leave" row books. */
|
|
7
|
+
export declare const DEFAULT_LEAVE_REASON = "Annual Leave";
|
|
8
|
+
export type ScheduleLeaveMode = 'all' | 'am' | 'pm' | 'custom';
|
|
2
9
|
export interface ScheduleLeaveState {
|
|
3
10
|
open: boolean;
|
|
4
11
|
empId: number | null;
|
|
5
12
|
dayIdx: number | null;
|
|
13
|
+
/** Booking a new record, rather than editing one that is already on the day. */
|
|
14
|
+
isNew: boolean;
|
|
15
|
+
reason: string;
|
|
16
|
+
mode: ScheduleLeaveMode;
|
|
17
|
+
/** The hours when mode is 'custom'. */
|
|
18
|
+
from: string;
|
|
19
|
+
to: string;
|
|
6
20
|
}
|
|
7
|
-
/**
|
|
21
|
+
/** The leave editor — V6.2's "Book leave" dialog: a reason, how much of the day it covers, and
|
|
22
|
+
* what that does to the person's availability. Opened from the add popup's Rest Day / Leave rows
|
|
23
|
+
* (booking) and from an existing leave card (editing, or approving a pending request). */
|
|
8
24
|
export declare function useScheduleLeave(board: ScheduleBoardApi): {
|
|
9
25
|
state: {
|
|
10
26
|
open: boolean;
|
|
11
27
|
empId: number | null;
|
|
12
28
|
dayIdx: number | null;
|
|
29
|
+
isNew: boolean;
|
|
30
|
+
reason: string;
|
|
31
|
+
mode: ScheduleLeaveMode;
|
|
32
|
+
from: string;
|
|
33
|
+
to: string;
|
|
13
34
|
};
|
|
14
|
-
|
|
15
|
-
|
|
35
|
+
employee: import("vue").ComputedRef<import("../types").Employee | undefined>;
|
|
36
|
+
activeSlot: import("vue").ComputedRef<LeaveSlot | null>;
|
|
37
|
+
options: import("vue").ComputedRef<({
|
|
38
|
+
hrs: string;
|
|
39
|
+
mode: "custom";
|
|
40
|
+
name: "Specific hours";
|
|
41
|
+
} | {
|
|
42
|
+
hrs: string;
|
|
43
|
+
mode: "all";
|
|
44
|
+
name: "All day";
|
|
45
|
+
} | {
|
|
46
|
+
hrs: string;
|
|
47
|
+
mode: "am";
|
|
48
|
+
name: "Morning";
|
|
49
|
+
} | {
|
|
50
|
+
hrs: string;
|
|
51
|
+
mode: "pm";
|
|
52
|
+
name: "Afternoon";
|
|
53
|
+
})[]>;
|
|
54
|
+
span: import("vue").ComputedRef<{
|
|
55
|
+
from: string;
|
|
56
|
+
to: string;
|
|
57
|
+
hours: number;
|
|
58
|
+
}>;
|
|
59
|
+
valid: import("vue").ComputedRef<boolean>;
|
|
60
|
+
dayLabel: import("vue").ComputedRef<string>;
|
|
61
|
+
hoursText: import("vue").ComputedRef<string>;
|
|
62
|
+
coverText: import("vue").ComputedRef<string>;
|
|
63
|
+
openFor: (empId: number, dayIdx: number, reason?: string | null) => void;
|
|
16
64
|
close: () => void;
|
|
65
|
+
save: () => void;
|
|
17
66
|
approve: () => void;
|
|
18
67
|
reject: () => void;
|
|
19
68
|
remove: () => void;
|
|
20
69
|
};
|
|
70
|
+
export type ScheduleLeaveApi = ReturnType<typeof useScheduleLeave>;
|