|
|
@@ -1530,6 +1530,7 @@ function PrinterCard({
|
|
|
spoolmanEnabled = false,
|
|
|
linkedSpools,
|
|
|
spoolmanUrl,
|
|
|
+ spoolmanSyncMode,
|
|
|
onGetAssignment,
|
|
|
onUnassignSpool,
|
|
|
timeFormat = 'system',
|
|
|
@@ -1553,6 +1554,7 @@ function PrinterCard({
|
|
|
hasUnlinkedSpools?: boolean;
|
|
|
linkedSpools?: Record<string, LinkedSpoolInfo>;
|
|
|
spoolmanUrl?: string | null;
|
|
|
+ spoolmanSyncMode?: string | null;
|
|
|
spoolAssignments?: SpoolAssignment[];
|
|
|
onGetAssignment?: (printerId: number, amsId: number, trayId: number) => SpoolAssignment | undefined;
|
|
|
onUnassignSpool?: (printerId: number, amsId: number, trayId: number) => void;
|
|
|
@@ -3176,7 +3178,7 @@ function PrinterCard({
|
|
|
const slotPreset = slotPresets?.[globalTrayId];
|
|
|
|
|
|
// Fill level fallback chain: Spoolman → Inventory → AMS remain
|
|
|
- const trayTag = (tray?.tag_uid || tray?.tray_uuid || getFallbackSpoolTag(printer.serial_number, ams.id, slotIdx))?.toUpperCase();
|
|
|
+ const trayTag = (tray?.tray_uuid || tray?.tag_uid || getFallbackSpoolTag(printer.serial_number, ams.id, slotIdx))?.toUpperCase();
|
|
|
const linkedSpool = trayTag ? linkedSpools?.[trayTag] : undefined;
|
|
|
const spoolmanFill = getSpoolmanFillLevel(linkedSpool);
|
|
|
const inventoryAssignment = onGetAssignment?.(printer.id, ams.id, slotIdx);
|
|
|
@@ -3303,6 +3305,7 @@ function PrinterCard({
|
|
|
? linkedSpools?.[trayTag]?.id
|
|
|
: undefined,
|
|
|
spoolmanUrl,
|
|
|
+ syncMode: spoolmanSyncMode,
|
|
|
onLinkSpool: spoolmanEnabled ? () => {
|
|
|
const linkTag = (filamentData.trayUuid || filamentData.tagUid || getFallbackSpoolTag(printer.serial_number, ams.id, slotIdx)).toUpperCase();
|
|
|
setLinkSpoolModal({
|
|
|
@@ -3619,6 +3622,7 @@ function PrinterCard({
|
|
|
? linkedSpools?.[htTrayTag]?.id
|
|
|
: undefined,
|
|
|
spoolmanUrl,
|
|
|
+ syncMode: spoolmanSyncMode,
|
|
|
onLinkSpool: spoolmanEnabled ? () => {
|
|
|
const linkTag = (filamentData.trayUuid || filamentData.tagUid || getFallbackSpoolTag(printer.serial_number, ams.id, htSlotId)).toUpperCase();
|
|
|
setLinkSpoolModal({
|
|
|
@@ -3832,6 +3836,7 @@ function PrinterCard({
|
|
|
? linkedSpools?.[extTrayTag]?.id
|
|
|
: undefined,
|
|
|
spoolmanUrl,
|
|
|
+ syncMode: spoolmanSyncMode,
|
|
|
onLinkSpool: spoolmanEnabled ? () => {
|
|
|
const linkTag = (extFilamentData.trayUuid || extFilamentData.tagUid || getFallbackSpoolTag(printer.serial_number, 255, slotTrayId)).toUpperCase();
|
|
|
setLinkSpoolModal({
|
|
|
@@ -5715,6 +5720,15 @@ export function PrintersPage() {
|
|
|
});
|
|
|
const spoolmanEnabled = spoolmanStatus?.enabled && spoolmanStatus?.connected;
|
|
|
|
|
|
+ // Fetch Spoolman settings to get sync mode
|
|
|
+ const { data: spoolmanSettings } = useQuery({
|
|
|
+ queryKey: ['spoolman-settings'],
|
|
|
+ queryFn: api.getSpoolmanSettings,
|
|
|
+ enabled: !!spoolmanEnabled,
|
|
|
+ staleTime: 60 * 1000, // 1 minute
|
|
|
+ });
|
|
|
+ const spoolmanSyncMode = spoolmanSettings?.spoolman_sync_mode;
|
|
|
+
|
|
|
// Fetch unlinked spools to know if link button should be enabled
|
|
|
const { data: unlinkedSpools } = useQuery({
|
|
|
queryKey: ['unlinked-spools'],
|
|
|
@@ -6064,6 +6078,7 @@ export function PrintersPage() {
|
|
|
hasUnlinkedSpools={hasUnlinkedSpools}
|
|
|
linkedSpools={linkedSpools}
|
|
|
spoolmanUrl={spoolmanStatus?.url}
|
|
|
+ spoolmanSyncMode={spoolmanSyncMode}
|
|
|
onGetAssignment={getAssignment}
|
|
|
onUnassignSpool={(pid, aid, tid) => unassignMutation.mutate({ printerId: pid, amsId: aid, trayId: tid })}
|
|
|
timeFormat={settings?.time_format || 'system'}
|
|
|
@@ -6092,6 +6107,7 @@ export function PrintersPage() {
|
|
|
hasUnlinkedSpools={hasUnlinkedSpools}
|
|
|
linkedSpools={linkedSpools}
|
|
|
spoolmanUrl={spoolmanStatus?.url}
|
|
|
+ spoolmanSyncMode={spoolmanSyncMode}
|
|
|
onGetAssignment={getAssignment}
|
|
|
onUnassignSpool={(pid, aid, tid) => unassignMutation.mutate({ printerId: pid, amsId: aid, trayId: tid })}
|
|
|
amsThresholds={settings ? {
|