Gmail Label Manager
{/* Auth status - handled by createGoogleAuth utility */}
{fullUI}
{/* Refresh labels button - protected until authenticated */}
{ifElse(
isReady,
,
null,
)}
{/* Result display */}
{ifElse(
derive(result, (r: OperationResult | null) => r?.success === true),
Labels Updated Successfully!
Modified {derive(result, (r: OperationResult | null) =>
r?.messageCount)} message(s)
,
null,
)}
{ifElse(
derive(result, (r: OperationResult | null) =>
r?.success === false),
Failed to Update Labels
{derive(result, (r: OperationResult | null) =>
r?.error)}
,
null,
)}
{/* Message count indicator */}
{ifElse(
hasMessages,
{messageCount} message(s) selected for label changes
,
No messages selected. Link messageIds from a Gmail Importer.
,
)}
{/* Label selection */}
{ifElse(
derive(availableLabels, (l: GmailLabel[]) => l.length > 0),
{/* Add labels section */}
+ Add Labels
{derive(availableLabels, (labels) =>
labels.map((label) => {
const isSelected = derive(labelsToAdd, (add) =>
add.includes(label.id));
const isInRemove = derive(labelsToRemove, (rem) =>
rem.includes(label.id));
return (
);
}))}
{/* Remove labels section */}
− Remove Labels
{derive(availableLabels, (labels) =>
labels.map((label) => {
const isSelected = derive(labelsToRemove, (rem) =>
rem.includes(label.id));
const isInAdd = derive(labelsToAdd, (add) =>
add.includes(label.id));
return (
);
}))}
,
{ifElse(
hasAuth,
Click "Refresh Labels" above to load your Gmail labels.
,
Authenticate to load labels.,
)}
,
)}
{/* Apply button */}
{/* CONFIRMATION DIALOG */}
{ifElse(
pendingOp,
{/* Header */}
🏷️
Confirm Label Changes
{/* Content */}
Modifying{" "}
{derive(pendingOp, (op: LabelOperation | null) =>
op?.messageIds.length || 0)}
{" "}
message(s)
{/* Labels to add */}
{ifElse(
derive(
pendingOp,
(op: LabelOperation | null) =>
(op?.addLabelNames.length || 0) > 0,
),
+ Adding:
{derive(pendingOp, (op: LabelOperation | null) =>
(op?.addLabelNames || []).map((name: string) => (
{name}
)))}
,
null,
)}
{/* Labels to remove */}
{ifElse(
derive(
pendingOp,
(op: LabelOperation | null) =>
(op?.removeLabelNames.length || 0) > 0,
),
− Removing:
{derive(pendingOp, (op: LabelOperation | null) =>
(op?.removeLabelNames || []).map((name: string) => (
{name}
)))}
,
null,
)}
{/* Warning */}
This will modify your Gmail labels
The selected labels will be added or removed from the
specified messages in your Gmail account.
{/* Footer */}
,
null,
)}
),
messageIds,
labelsToAdd,
labelsToRemove,
result,
availableLabels,
};
},
);