|
@@ -862,6 +862,7 @@ function PrinterCard({
|
|
|
viewMode = 'expanded',
|
|
viewMode = 'expanded',
|
|
|
amsThresholds,
|
|
amsThresholds,
|
|
|
spoolmanEnabled = false,
|
|
spoolmanEnabled = false,
|
|
|
|
|
+ hasUnlinkedSpools = false,
|
|
|
}: {
|
|
}: {
|
|
|
printer: Printer;
|
|
printer: Printer;
|
|
|
hideIfDisconnected?: boolean;
|
|
hideIfDisconnected?: boolean;
|
|
@@ -874,6 +875,7 @@ function PrinterCard({
|
|
|
tempFair: number;
|
|
tempFair: number;
|
|
|
};
|
|
};
|
|
|
spoolmanEnabled?: boolean;
|
|
spoolmanEnabled?: boolean;
|
|
|
|
|
+ hasUnlinkedSpools?: boolean;
|
|
|
}) {
|
|
}) {
|
|
|
const queryClient = useQueryClient();
|
|
const queryClient = useQueryClient();
|
|
|
const navigate = useNavigate();
|
|
const navigate = useNavigate();
|
|
@@ -1923,6 +1925,7 @@ function PrinterCard({
|
|
|
data={filamentData}
|
|
data={filamentData}
|
|
|
spoolman={{
|
|
spoolman={{
|
|
|
enabled: spoolmanEnabled,
|
|
enabled: spoolmanEnabled,
|
|
|
|
|
+ hasUnlinkedSpools,
|
|
|
onLinkSpool: spoolmanEnabled && filamentData.trayUuid ? (uuid) => {
|
|
onLinkSpool: spoolmanEnabled && filamentData.trayUuid ? (uuid) => {
|
|
|
setLinkSpoolModal({
|
|
setLinkSpoolModal({
|
|
|
trayUuid: uuid,
|
|
trayUuid: uuid,
|
|
@@ -2082,6 +2085,7 @@ function PrinterCard({
|
|
|
data={filamentData}
|
|
data={filamentData}
|
|
|
spoolman={{
|
|
spoolman={{
|
|
|
enabled: spoolmanEnabled,
|
|
enabled: spoolmanEnabled,
|
|
|
|
|
+ hasUnlinkedSpools,
|
|
|
onLinkSpool: spoolmanEnabled && filamentData.trayUuid ? (uuid) => {
|
|
onLinkSpool: spoolmanEnabled && filamentData.trayUuid ? (uuid) => {
|
|
|
setLinkSpoolModal({
|
|
setLinkSpoolModal({
|
|
|
trayUuid: uuid,
|
|
trayUuid: uuid,
|
|
@@ -2186,6 +2190,7 @@ function PrinterCard({
|
|
|
data={extFilamentData}
|
|
data={extFilamentData}
|
|
|
spoolman={{
|
|
spoolman={{
|
|
|
enabled: spoolmanEnabled,
|
|
enabled: spoolmanEnabled,
|
|
|
|
|
+ hasUnlinkedSpools,
|
|
|
onLinkSpool: spoolmanEnabled && extFilamentData.trayUuid ? (uuid) => {
|
|
onLinkSpool: spoolmanEnabled && extFilamentData.trayUuid ? (uuid) => {
|
|
|
setLinkSpoolModal({
|
|
setLinkSpoolModal({
|
|
|
trayUuid: uuid,
|
|
trayUuid: uuid,
|
|
@@ -3372,6 +3377,15 @@ export function PrintersPage() {
|
|
|
});
|
|
});
|
|
|
const spoolmanEnabled = spoolmanStatus?.enabled && spoolmanStatus?.connected;
|
|
const spoolmanEnabled = spoolmanStatus?.enabled && spoolmanStatus?.connected;
|
|
|
|
|
|
|
|
|
|
+ // Fetch unlinked spools to know if link button should be enabled
|
|
|
|
|
+ const { data: unlinkedSpools } = useQuery({
|
|
|
|
|
+ queryKey: ['unlinked-spools'],
|
|
|
|
|
+ queryFn: api.getUnlinkedSpools,
|
|
|
|
|
+ enabled: !!spoolmanEnabled,
|
|
|
|
|
+ staleTime: 30 * 1000, // 30 seconds
|
|
|
|
|
+ });
|
|
|
|
|
+ const hasUnlinkedSpools = unlinkedSpools && unlinkedSpools.length > 0;
|
|
|
|
|
+
|
|
|
// Create a map of printer_id -> maintenance info for quick lookup
|
|
// Create a map of printer_id -> maintenance info for quick lookup
|
|
|
const maintenanceByPrinter = maintenanceOverview?.reduce(
|
|
const maintenanceByPrinter = maintenanceOverview?.reduce(
|
|
|
(acc, overview) => {
|
|
(acc, overview) => {
|
|
@@ -3647,6 +3661,7 @@ export function PrintersPage() {
|
|
|
tempFair: Number(settings.ams_temp_fair) || 35,
|
|
tempFair: Number(settings.ams_temp_fair) || 35,
|
|
|
} : undefined}
|
|
} : undefined}
|
|
|
spoolmanEnabled={spoolmanEnabled}
|
|
spoolmanEnabled={spoolmanEnabled}
|
|
|
|
|
+ hasUnlinkedSpools={hasUnlinkedSpools}
|
|
|
/>
|
|
/>
|
|
|
))}
|
|
))}
|
|
|
</div>
|
|
</div>
|
|
@@ -3668,6 +3683,7 @@ export function PrintersPage() {
|
|
|
maintenanceInfo={maintenanceByPrinter[printer.id]}
|
|
maintenanceInfo={maintenanceByPrinter[printer.id]}
|
|
|
viewMode={viewMode}
|
|
viewMode={viewMode}
|
|
|
spoolmanEnabled={spoolmanEnabled}
|
|
spoolmanEnabled={spoolmanEnabled}
|
|
|
|
|
+ hasUnlinkedSpools={hasUnlinkedSpools}
|
|
|
amsThresholds={settings ? {
|
|
amsThresholds={settings ? {
|
|
|
humidityGood: Number(settings.ams_humidity_good) || 40,
|
|
humidityGood: Number(settings.ams_humidity_good) || 40,
|
|
|
humidityFair: Number(settings.ams_humidity_fair) || 60,
|
|
humidityFair: Number(settings.ams_humidity_fair) || 60,
|