chore: release v0.26.0
This commit is contained in:
@@ -631,6 +631,20 @@ export function RecentQSOsGrid({ rows, myGrid, selectAllSignal, selectRowSignal,
|
||||
api.setColumnsVisible(ids, false);
|
||||
saveColumnState();
|
||||
}
|
||||
// Whole-dialog show/hide. showAll/hideAll cover the CATALOGUE only; the award
|
||||
// columns live in their own persisted code set, so a global that skipped them
|
||||
// would leave a row of columns behind and look broken.
|
||||
function setEverything(visible: boolean) {
|
||||
const api = gridRef.current?.api;
|
||||
if (!api) return;
|
||||
api.setColumnsVisible(COL_CATALOG.map((c) => c.colId!), visible);
|
||||
if (awardCols && awardCols.length > 0) {
|
||||
persistAwardShown(visible ? new Set(awardCols.map((a) => a.code.toUpperCase())) : new Set());
|
||||
api.setColumnsVisible(awardCols.map((a) => `award_${a.code}`), visible);
|
||||
}
|
||||
saveColumnState();
|
||||
}
|
||||
|
||||
function resetDefaults() {
|
||||
const api = gridRef.current?.api;
|
||||
if (!api) return;
|
||||
@@ -711,11 +725,15 @@ export function RecentQSOsGrid({ rows, myGrid, selectAllSignal, selectRowSignal,
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Every handler is passed STRAIGHT through, never wrapped in an arrow: a
|
||||
wrapper is always truthy, so the menu drew "Fix country" and "Update
|
||||
from the callsign databases" even in a grid that wired neither — and
|
||||
clicking them did nothing at all. */}
|
||||
<QSOContextMenu
|
||||
menu={menu}
|
||||
onClose={() => setMenu(null)}
|
||||
onUpdateFromCty={(ids) => onUpdateFromCty?.(ids)}
|
||||
onUpdateFromQRZ={(ids) => onUpdateFromQRZ?.(ids)}
|
||||
onUpdateFromCty={onUpdateFromCty}
|
||||
onUpdateFromQRZ={onUpdateFromQRZ}
|
||||
onUpdateFromClublog={onUpdateFromClublog}
|
||||
onUpdateCountyFromULS={onUpdateCountyFromULS}
|
||||
onSendTo={onSendTo}
|
||||
@@ -738,6 +756,16 @@ export function RecentQSOsGrid({ rows, myGrid, selectAllSignal, selectRowSignal,
|
||||
{t('rqg.pickerDesc')}
|
||||
</DialogDescription>
|
||||
</DialogHeader>
|
||||
{/* Whole-dialog controls. The per-group links alone meant hiding
|
||||
everything was one click PER GROUP, and there are a dozen. */}
|
||||
<div className="flex items-center gap-1 px-5 text-[11px] text-muted-foreground">
|
||||
<span>{t('rqg.pickerAllGroups')}</span>
|
||||
<button type="button" className="text-[11px] text-primary hover:underline px-1"
|
||||
onClick={() => setEverything(true)}>{t('rqg.all')}</button>
|
||||
<span className="opacity-40">·</span>
|
||||
<button type="button" className="text-[11px] text-muted-foreground hover:underline px-1"
|
||||
onClick={() => setEverything(false)}>{t('rqg.none')}</button>
|
||||
</div>
|
||||
<div className="grid grid-cols-3 gap-4 max-h-[60vh] overflow-y-auto px-5 py-3">
|
||||
{GROUP_ORDER.map((group) => {
|
||||
const cols = COL_CATALOG.filter((c) => c.group === group);
|
||||
|
||||
Reference in New Issue
Block a user