@optifye/dashboard-core 6.11.0 → 6.11.2
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/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +9 -107
- package/dist/index.mjs +9 -107
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -4630,7 +4630,7 @@ declare class UserManagementService {
|
|
|
4630
4630
|
* @param roleFilter - Optional filter by role
|
|
4631
4631
|
* @returns Promise<CompanyUserWithDetails[]>
|
|
4632
4632
|
*/
|
|
4633
|
-
getCompanyUsers(companyId: string, roleFilter?:
|
|
4633
|
+
getCompanyUsers(companyId: string, roleFilter?: string): Promise<CompanyUserWithDetails[]>;
|
|
4634
4634
|
/**
|
|
4635
4635
|
* Get ALL users across all companies (optifye role only)
|
|
4636
4636
|
* This method bypasses company filtering and returns all users in the system
|
package/dist/index.d.ts
CHANGED
|
@@ -4630,7 +4630,7 @@ declare class UserManagementService {
|
|
|
4630
4630
|
* @param roleFilter - Optional filter by role
|
|
4631
4631
|
* @returns Promise<CompanyUserWithDetails[]>
|
|
4632
4632
|
*/
|
|
4633
|
-
getCompanyUsers(companyId: string, roleFilter?:
|
|
4633
|
+
getCompanyUsers(companyId: string, roleFilter?: string): Promise<CompanyUserWithDetails[]>;
|
|
4634
4634
|
/**
|
|
4635
4635
|
* Get ALL users across all companies (optifye role only)
|
|
4636
4636
|
* This method bypasses company filtering and returns all users in the system
|
package/dist/index.js
CHANGED
|
@@ -69275,74 +69275,6 @@ var buildInitials = (name) => {
|
|
|
69275
69275
|
const second = parts.length > 1 ? parts[1]?.[0] || "" : "";
|
|
69276
69276
|
return `${first}${second}`.toUpperCase();
|
|
69277
69277
|
};
|
|
69278
|
-
var MOCK_IE_TEAM_USER_ID = "mock-industrial-engineering-team";
|
|
69279
|
-
var MOCK_IE_TICKET_ID = "mock-ie-rack-too-far-away";
|
|
69280
|
-
var getRandomVideoGalleryClips = (recommendations, maxClips = 3) => {
|
|
69281
|
-
const seen = /* @__PURE__ */ new Set();
|
|
69282
|
-
const candidates = [];
|
|
69283
|
-
recommendations.forEach((rec) => {
|
|
69284
|
-
if (!Array.isArray(rec.evidence)) return;
|
|
69285
|
-
rec.evidence.forEach((evidenceItem) => {
|
|
69286
|
-
if (evidenceItem.type !== "video_gallery" || !Array.isArray(evidenceItem.clips)) return;
|
|
69287
|
-
evidenceItem.clips.forEach((rawClip) => {
|
|
69288
|
-
if (!rawClip || typeof rawClip.clip_id !== "string") return;
|
|
69289
|
-
const key = `${rawClip.clip_id}:${rawClip.workspace_id || ""}`;
|
|
69290
|
-
if (seen.has(key)) return;
|
|
69291
|
-
seen.add(key);
|
|
69292
|
-
candidates.push({
|
|
69293
|
-
clip_id: rawClip.clip_id,
|
|
69294
|
-
workspace_id: typeof rawClip.workspace_id === "string" ? rawClip.workspace_id : void 0,
|
|
69295
|
-
cycle_time_seconds: typeof rawClip.cycle_time_seconds === "number" ? rawClip.cycle_time_seconds : void 0,
|
|
69296
|
-
cycle_sec: typeof rawClip.cycle_sec === "number" ? rawClip.cycle_sec : void 0
|
|
69297
|
-
});
|
|
69298
|
-
});
|
|
69299
|
-
});
|
|
69300
|
-
});
|
|
69301
|
-
for (let i = candidates.length - 1; i > 0; i -= 1) {
|
|
69302
|
-
const j = Math.floor(Math.random() * (i + 1));
|
|
69303
|
-
[candidates[i], candidates[j]] = [candidates[j], candidates[i]];
|
|
69304
|
-
}
|
|
69305
|
-
return candidates.slice(0, Math.max(1, maxClips));
|
|
69306
|
-
};
|
|
69307
|
-
var buildIEMockRecommendation = (recommendations, lineNameById) => {
|
|
69308
|
-
const now4 = /* @__PURE__ */ new Date();
|
|
69309
|
-
const firstSeen = new Date(now4.getTime() - 3 * 24 * 60 * 60 * 1e3).toISOString();
|
|
69310
|
-
const sampleRec = recommendations.find((rec) => !!rec.line_id) || recommendations[0];
|
|
69311
|
-
const lineId = sampleRec?.line_id;
|
|
69312
|
-
const line = lineId ? lineNameById.get(lineId) || sampleRec?.line || "Line 1" : sampleRec?.line || "Line 1";
|
|
69313
|
-
const shiftLabel = sampleRec?.shift_label;
|
|
69314
|
-
const shiftId = sampleRec?.shift_id;
|
|
69315
|
-
const randomClips = getRandomVideoGalleryClips(recommendations, 3);
|
|
69316
|
-
return {
|
|
69317
|
-
id: MOCK_IE_TICKET_ID,
|
|
69318
|
-
issue_id: MOCK_IE_TICKET_ID,
|
|
69319
|
-
issue_number: 0,
|
|
69320
|
-
issue_status: "open",
|
|
69321
|
-
template_code: "ie_rack_too_far_away_mock",
|
|
69322
|
-
type: "cycle_time",
|
|
69323
|
-
title: "Rack too far away",
|
|
69324
|
-
location: "Industrial Engineering Review",
|
|
69325
|
-
line,
|
|
69326
|
-
line_id: lineId,
|
|
69327
|
-
description: "We analyzed 30 slow clips and saw that the top reason was the operator having to reach for the desk.",
|
|
69328
|
-
resolution_instructions: "Completion condition: Move the rack 3 inches closer to the operator for better ergonomic posture.",
|
|
69329
|
-
shift_id: shiftId,
|
|
69330
|
-
shift_label: shiftLabel,
|
|
69331
|
-
first_seen_at: firstSeen,
|
|
69332
|
-
visible_since: firstSeen,
|
|
69333
|
-
weeks_open: 1,
|
|
69334
|
-
ticket_status: "active",
|
|
69335
|
-
assigned_to_user_id: MOCK_IE_TEAM_USER_ID,
|
|
69336
|
-
assigned_user_ids: [MOCK_IE_TEAM_USER_ID],
|
|
69337
|
-
evidence: randomClips.length > 0 ? [
|
|
69338
|
-
{
|
|
69339
|
-
type: "video_gallery",
|
|
69340
|
-
title: "Slow clips analyzed",
|
|
69341
|
-
clips: randomClips
|
|
69342
|
-
}
|
|
69343
|
-
] : []
|
|
69344
|
-
};
|
|
69345
|
-
};
|
|
69346
69278
|
var ClipVideoCarousel = ({ clips, clipsService }) => {
|
|
69347
69279
|
const [currentIndex, setCurrentIndex] = React141.useState(0);
|
|
69348
69280
|
const [videos, setVideos] = React141.useState([]);
|
|
@@ -69801,21 +69733,6 @@ var ImprovementCenterView = () => {
|
|
|
69801
69733
|
return map;
|
|
69802
69734
|
}, [companyLines, configuredLines]);
|
|
69803
69735
|
const companyId = user?.company_id || entityConfig.companyId;
|
|
69804
|
-
const industrialEngineeringTeamMember = React141.useMemo(
|
|
69805
|
-
() => ({
|
|
69806
|
-
id: MOCK_IE_TEAM_USER_ID,
|
|
69807
|
-
name: "Industrial Engineering Team",
|
|
69808
|
-
role: "industrial_engineering",
|
|
69809
|
-
initials: "IE"
|
|
69810
|
-
}),
|
|
69811
|
-
[]
|
|
69812
|
-
);
|
|
69813
|
-
const teamMembersWithIETeam = React141.useMemo(() => {
|
|
69814
|
-
if (teamMembers.some((member) => member.id === MOCK_IE_TEAM_USER_ID)) {
|
|
69815
|
-
return teamMembers;
|
|
69816
|
-
}
|
|
69817
|
-
return [...teamMembers, industrialEngineeringTeamMember];
|
|
69818
|
-
}, [teamMembers, industrialEngineeringTeamMember]);
|
|
69819
69736
|
const clipsService = React141.useMemo(() => {
|
|
69820
69737
|
try {
|
|
69821
69738
|
return new S3ClipsSupabaseService(dashboardConfig);
|
|
@@ -69829,20 +69746,9 @@ var ImprovementCenterView = () => {
|
|
|
69829
69746
|
if (!supabase || !companyId) return;
|
|
69830
69747
|
try {
|
|
69831
69748
|
const userService2 = createUserManagementService(supabase);
|
|
69832
|
-
const
|
|
69833
|
-
|
|
69834
|
-
|
|
69835
|
-
);
|
|
69836
|
-
roleResults.forEach((result, index) => {
|
|
69837
|
-
if (result.status === "rejected") {
|
|
69838
|
-
console.warn(
|
|
69839
|
-
`[ImprovementCenterView] Failed to load ${roleFilters[index]} users`,
|
|
69840
|
-
result.reason
|
|
69841
|
-
);
|
|
69842
|
-
}
|
|
69843
|
-
});
|
|
69844
|
-
const users = roleResults.flatMap(
|
|
69845
|
-
(result) => result.status === "fulfilled" ? result.value : []
|
|
69749
|
+
const users = await userService2.getCompanyUsers(
|
|
69750
|
+
companyId,
|
|
69751
|
+
"supervisor,owner,industrial_engineer"
|
|
69846
69752
|
);
|
|
69847
69753
|
if (cancelled) return;
|
|
69848
69754
|
const membersById = /* @__PURE__ */ new Map();
|
|
@@ -69928,11 +69834,7 @@ var ImprovementCenterView = () => {
|
|
|
69928
69834
|
});
|
|
69929
69835
|
const allowed = new Set(scopeLineIds);
|
|
69930
69836
|
const scopedRecommendations = recs.filter((r2) => !r2.line_id || allowed.has(r2.line_id));
|
|
69931
|
-
|
|
69932
|
-
setRecommendations([
|
|
69933
|
-
mockRecommendation,
|
|
69934
|
-
...scopedRecommendations.filter((recommendation) => recommendation.id !== MOCK_IE_TICKET_ID)
|
|
69935
|
-
]);
|
|
69837
|
+
setRecommendations(scopedRecommendations);
|
|
69936
69838
|
} catch (err) {
|
|
69937
69839
|
if (cancelled) return;
|
|
69938
69840
|
setLoadError(err?.message || "Failed to load recommendations");
|
|
@@ -69945,10 +69847,10 @@ var ImprovementCenterView = () => {
|
|
|
69945
69847
|
return () => {
|
|
69946
69848
|
cancelled = true;
|
|
69947
69849
|
};
|
|
69948
|
-
}, [supabase, companyId, scopeLineIdsKey
|
|
69850
|
+
}, [supabase, companyId, scopeLineIdsKey]);
|
|
69949
69851
|
const teamMembersById = React141.useMemo(() => {
|
|
69950
|
-
return new Map(
|
|
69951
|
-
}, [
|
|
69852
|
+
return new Map(teamMembers.map((member) => [member.id, member]));
|
|
69853
|
+
}, [teamMembers]);
|
|
69952
69854
|
const filteredRecommendations = React141.useMemo(() => {
|
|
69953
69855
|
return recommendations.filter((rec) => {
|
|
69954
69856
|
if (selectedLineId !== "all" && rec.line_id !== selectedLineId) return false;
|
|
@@ -70066,7 +69968,7 @@ var ImprovementCenterView = () => {
|
|
|
70066
69968
|
setSelectedWeeksRange(weeksRange);
|
|
70067
69969
|
};
|
|
70068
69970
|
const handleMemberFilterChange = (memberId) => {
|
|
70069
|
-
const memberName = memberId === "all" ? "all" :
|
|
69971
|
+
const memberName = memberId === "all" ? "all" : teamMembers.find((member) => member.id === memberId)?.name || memberId;
|
|
70070
69972
|
trackCoreEvent("Improvement Center Filter Applied", {
|
|
70071
69973
|
filter_type: "member",
|
|
70072
69974
|
filter_value: memberName,
|
|
@@ -70148,7 +70050,7 @@ var ImprovementCenterView = () => {
|
|
|
70148
70050
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-3", children: [
|
|
70149
70051
|
{ value: selectedShift, onChange: handleShiftFilterChange, options: shiftOptions, label: "Shift" },
|
|
70150
70052
|
{ value: selectedWeeksRange, onChange: handleWeeksFilterChange, options: weekOptions.map((o) => o.id), labels: weekOptions, label: "Duration" },
|
|
70151
|
-
{ value: selectedMemberId, onChange: handleMemberFilterChange, options: ["all", ...
|
|
70053
|
+
{ value: selectedMemberId, onChange: handleMemberFilterChange, options: ["all", ...teamMembers.map((m) => m.id)], labels: teamMembers, label: "Member" },
|
|
70152
70054
|
{ value: selectedLineId, onChange: handleLineFilterChange, options: lineOptions.map((o) => o.id), labels: lineOptions, label: "Line" }
|
|
70153
70055
|
].map((filter2, idx) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1", children: [
|
|
70154
70056
|
/* @__PURE__ */ jsxRuntime.jsx("label", { className: "text-xs font-medium text-gray-500 uppercase tracking-wide ml-1", children: filter2.label }),
|
package/dist/index.mjs
CHANGED
|
@@ -69246,74 +69246,6 @@ var buildInitials = (name) => {
|
|
|
69246
69246
|
const second = parts.length > 1 ? parts[1]?.[0] || "" : "";
|
|
69247
69247
|
return `${first}${second}`.toUpperCase();
|
|
69248
69248
|
};
|
|
69249
|
-
var MOCK_IE_TEAM_USER_ID = "mock-industrial-engineering-team";
|
|
69250
|
-
var MOCK_IE_TICKET_ID = "mock-ie-rack-too-far-away";
|
|
69251
|
-
var getRandomVideoGalleryClips = (recommendations, maxClips = 3) => {
|
|
69252
|
-
const seen = /* @__PURE__ */ new Set();
|
|
69253
|
-
const candidates = [];
|
|
69254
|
-
recommendations.forEach((rec) => {
|
|
69255
|
-
if (!Array.isArray(rec.evidence)) return;
|
|
69256
|
-
rec.evidence.forEach((evidenceItem) => {
|
|
69257
|
-
if (evidenceItem.type !== "video_gallery" || !Array.isArray(evidenceItem.clips)) return;
|
|
69258
|
-
evidenceItem.clips.forEach((rawClip) => {
|
|
69259
|
-
if (!rawClip || typeof rawClip.clip_id !== "string") return;
|
|
69260
|
-
const key = `${rawClip.clip_id}:${rawClip.workspace_id || ""}`;
|
|
69261
|
-
if (seen.has(key)) return;
|
|
69262
|
-
seen.add(key);
|
|
69263
|
-
candidates.push({
|
|
69264
|
-
clip_id: rawClip.clip_id,
|
|
69265
|
-
workspace_id: typeof rawClip.workspace_id === "string" ? rawClip.workspace_id : void 0,
|
|
69266
|
-
cycle_time_seconds: typeof rawClip.cycle_time_seconds === "number" ? rawClip.cycle_time_seconds : void 0,
|
|
69267
|
-
cycle_sec: typeof rawClip.cycle_sec === "number" ? rawClip.cycle_sec : void 0
|
|
69268
|
-
});
|
|
69269
|
-
});
|
|
69270
|
-
});
|
|
69271
|
-
});
|
|
69272
|
-
for (let i = candidates.length - 1; i > 0; i -= 1) {
|
|
69273
|
-
const j = Math.floor(Math.random() * (i + 1));
|
|
69274
|
-
[candidates[i], candidates[j]] = [candidates[j], candidates[i]];
|
|
69275
|
-
}
|
|
69276
|
-
return candidates.slice(0, Math.max(1, maxClips));
|
|
69277
|
-
};
|
|
69278
|
-
var buildIEMockRecommendation = (recommendations, lineNameById) => {
|
|
69279
|
-
const now4 = /* @__PURE__ */ new Date();
|
|
69280
|
-
const firstSeen = new Date(now4.getTime() - 3 * 24 * 60 * 60 * 1e3).toISOString();
|
|
69281
|
-
const sampleRec = recommendations.find((rec) => !!rec.line_id) || recommendations[0];
|
|
69282
|
-
const lineId = sampleRec?.line_id;
|
|
69283
|
-
const line = lineId ? lineNameById.get(lineId) || sampleRec?.line || "Line 1" : sampleRec?.line || "Line 1";
|
|
69284
|
-
const shiftLabel = sampleRec?.shift_label;
|
|
69285
|
-
const shiftId = sampleRec?.shift_id;
|
|
69286
|
-
const randomClips = getRandomVideoGalleryClips(recommendations, 3);
|
|
69287
|
-
return {
|
|
69288
|
-
id: MOCK_IE_TICKET_ID,
|
|
69289
|
-
issue_id: MOCK_IE_TICKET_ID,
|
|
69290
|
-
issue_number: 0,
|
|
69291
|
-
issue_status: "open",
|
|
69292
|
-
template_code: "ie_rack_too_far_away_mock",
|
|
69293
|
-
type: "cycle_time",
|
|
69294
|
-
title: "Rack too far away",
|
|
69295
|
-
location: "Industrial Engineering Review",
|
|
69296
|
-
line,
|
|
69297
|
-
line_id: lineId,
|
|
69298
|
-
description: "We analyzed 30 slow clips and saw that the top reason was the operator having to reach for the desk.",
|
|
69299
|
-
resolution_instructions: "Completion condition: Move the rack 3 inches closer to the operator for better ergonomic posture.",
|
|
69300
|
-
shift_id: shiftId,
|
|
69301
|
-
shift_label: shiftLabel,
|
|
69302
|
-
first_seen_at: firstSeen,
|
|
69303
|
-
visible_since: firstSeen,
|
|
69304
|
-
weeks_open: 1,
|
|
69305
|
-
ticket_status: "active",
|
|
69306
|
-
assigned_to_user_id: MOCK_IE_TEAM_USER_ID,
|
|
69307
|
-
assigned_user_ids: [MOCK_IE_TEAM_USER_ID],
|
|
69308
|
-
evidence: randomClips.length > 0 ? [
|
|
69309
|
-
{
|
|
69310
|
-
type: "video_gallery",
|
|
69311
|
-
title: "Slow clips analyzed",
|
|
69312
|
-
clips: randomClips
|
|
69313
|
-
}
|
|
69314
|
-
] : []
|
|
69315
|
-
};
|
|
69316
|
-
};
|
|
69317
69249
|
var ClipVideoCarousel = ({ clips, clipsService }) => {
|
|
69318
69250
|
const [currentIndex, setCurrentIndex] = useState(0);
|
|
69319
69251
|
const [videos, setVideos] = useState([]);
|
|
@@ -69772,21 +69704,6 @@ var ImprovementCenterView = () => {
|
|
|
69772
69704
|
return map;
|
|
69773
69705
|
}, [companyLines, configuredLines]);
|
|
69774
69706
|
const companyId = user?.company_id || entityConfig.companyId;
|
|
69775
|
-
const industrialEngineeringTeamMember = useMemo(
|
|
69776
|
-
() => ({
|
|
69777
|
-
id: MOCK_IE_TEAM_USER_ID,
|
|
69778
|
-
name: "Industrial Engineering Team",
|
|
69779
|
-
role: "industrial_engineering",
|
|
69780
|
-
initials: "IE"
|
|
69781
|
-
}),
|
|
69782
|
-
[]
|
|
69783
|
-
);
|
|
69784
|
-
const teamMembersWithIETeam = useMemo(() => {
|
|
69785
|
-
if (teamMembers.some((member) => member.id === MOCK_IE_TEAM_USER_ID)) {
|
|
69786
|
-
return teamMembers;
|
|
69787
|
-
}
|
|
69788
|
-
return [...teamMembers, industrialEngineeringTeamMember];
|
|
69789
|
-
}, [teamMembers, industrialEngineeringTeamMember]);
|
|
69790
69707
|
const clipsService = useMemo(() => {
|
|
69791
69708
|
try {
|
|
69792
69709
|
return new S3ClipsSupabaseService(dashboardConfig);
|
|
@@ -69800,20 +69717,9 @@ var ImprovementCenterView = () => {
|
|
|
69800
69717
|
if (!supabase || !companyId) return;
|
|
69801
69718
|
try {
|
|
69802
69719
|
const userService2 = createUserManagementService(supabase);
|
|
69803
|
-
const
|
|
69804
|
-
|
|
69805
|
-
|
|
69806
|
-
);
|
|
69807
|
-
roleResults.forEach((result, index) => {
|
|
69808
|
-
if (result.status === "rejected") {
|
|
69809
|
-
console.warn(
|
|
69810
|
-
`[ImprovementCenterView] Failed to load ${roleFilters[index]} users`,
|
|
69811
|
-
result.reason
|
|
69812
|
-
);
|
|
69813
|
-
}
|
|
69814
|
-
});
|
|
69815
|
-
const users = roleResults.flatMap(
|
|
69816
|
-
(result) => result.status === "fulfilled" ? result.value : []
|
|
69720
|
+
const users = await userService2.getCompanyUsers(
|
|
69721
|
+
companyId,
|
|
69722
|
+
"supervisor,owner,industrial_engineer"
|
|
69817
69723
|
);
|
|
69818
69724
|
if (cancelled) return;
|
|
69819
69725
|
const membersById = /* @__PURE__ */ new Map();
|
|
@@ -69899,11 +69805,7 @@ var ImprovementCenterView = () => {
|
|
|
69899
69805
|
});
|
|
69900
69806
|
const allowed = new Set(scopeLineIds);
|
|
69901
69807
|
const scopedRecommendations = recs.filter((r2) => !r2.line_id || allowed.has(r2.line_id));
|
|
69902
|
-
|
|
69903
|
-
setRecommendations([
|
|
69904
|
-
mockRecommendation,
|
|
69905
|
-
...scopedRecommendations.filter((recommendation) => recommendation.id !== MOCK_IE_TICKET_ID)
|
|
69906
|
-
]);
|
|
69808
|
+
setRecommendations(scopedRecommendations);
|
|
69907
69809
|
} catch (err) {
|
|
69908
69810
|
if (cancelled) return;
|
|
69909
69811
|
setLoadError(err?.message || "Failed to load recommendations");
|
|
@@ -69916,10 +69818,10 @@ var ImprovementCenterView = () => {
|
|
|
69916
69818
|
return () => {
|
|
69917
69819
|
cancelled = true;
|
|
69918
69820
|
};
|
|
69919
|
-
}, [supabase, companyId, scopeLineIdsKey
|
|
69821
|
+
}, [supabase, companyId, scopeLineIdsKey]);
|
|
69920
69822
|
const teamMembersById = useMemo(() => {
|
|
69921
|
-
return new Map(
|
|
69922
|
-
}, [
|
|
69823
|
+
return new Map(teamMembers.map((member) => [member.id, member]));
|
|
69824
|
+
}, [teamMembers]);
|
|
69923
69825
|
const filteredRecommendations = useMemo(() => {
|
|
69924
69826
|
return recommendations.filter((rec) => {
|
|
69925
69827
|
if (selectedLineId !== "all" && rec.line_id !== selectedLineId) return false;
|
|
@@ -70037,7 +69939,7 @@ var ImprovementCenterView = () => {
|
|
|
70037
69939
|
setSelectedWeeksRange(weeksRange);
|
|
70038
69940
|
};
|
|
70039
69941
|
const handleMemberFilterChange = (memberId) => {
|
|
70040
|
-
const memberName = memberId === "all" ? "all" :
|
|
69942
|
+
const memberName = memberId === "all" ? "all" : teamMembers.find((member) => member.id === memberId)?.name || memberId;
|
|
70041
69943
|
trackCoreEvent("Improvement Center Filter Applied", {
|
|
70042
69944
|
filter_type: "member",
|
|
70043
69945
|
filter_value: memberName,
|
|
@@ -70119,7 +70021,7 @@ var ImprovementCenterView = () => {
|
|
|
70119
70021
|
/* @__PURE__ */ jsx("div", { className: "space-y-3", children: [
|
|
70120
70022
|
{ value: selectedShift, onChange: handleShiftFilterChange, options: shiftOptions, label: "Shift" },
|
|
70121
70023
|
{ value: selectedWeeksRange, onChange: handleWeeksFilterChange, options: weekOptions.map((o) => o.id), labels: weekOptions, label: "Duration" },
|
|
70122
|
-
{ value: selectedMemberId, onChange: handleMemberFilterChange, options: ["all", ...
|
|
70024
|
+
{ value: selectedMemberId, onChange: handleMemberFilterChange, options: ["all", ...teamMembers.map((m) => m.id)], labels: teamMembers, label: "Member" },
|
|
70123
70025
|
{ value: selectedLineId, onChange: handleLineFilterChange, options: lineOptions.map((o) => o.id), labels: lineOptions, label: "Line" }
|
|
70124
70026
|
].map((filter2, idx) => /* @__PURE__ */ jsxs("div", { className: "space-y-1", children: [
|
|
70125
70027
|
/* @__PURE__ */ jsx("label", { className: "text-xs font-medium text-gray-500 uppercase tracking-wide ml-1", children: filter2.label }),
|