mirror of
https://github.com/mountain-loop/yaak.git
synced 2026-03-17 23:14:03 +01:00
63 lines
1.6 KiB
TypeScript
63 lines
1.6 KiB
TypeScript
import type { LicenseCheckStatus } from '@yaakapp-internal/license';
|
|
import { useLicense } from '@yaakapp-internal/license';
|
|
import { settingsAtom } from '@yaakapp-internal/models';
|
|
import { useAtomValue } from 'jotai';
|
|
import type { ReactNode } from 'react';
|
|
import { openSettings } from '../commands/openSettings';
|
|
import { CargoFeature } from './CargoFeature';
|
|
import { BadgeButton } from './core/BadgeButton';
|
|
import type { ButtonProps } from './core/Button';
|
|
|
|
const details: Record<
|
|
LicenseCheckStatus['type'],
|
|
{ label: ReactNode; color: ButtonProps['color'] } | null
|
|
> = {
|
|
commercial_use: null,
|
|
invalid_license: { label: 'License Error', color: 'danger' },
|
|
personal_use: { label: 'Personal Use', color: 'notice' },
|
|
trialing: { label: 'Trialing', color: 'info' },
|
|
};
|
|
|
|
export function LicenseBadge() {
|
|
return (
|
|
<CargoFeature feature="license">
|
|
<LicenseBadgeCmp />
|
|
</CargoFeature>
|
|
);
|
|
}
|
|
|
|
function LicenseBadgeCmp() {
|
|
const { check } = useLicense();
|
|
const settings = useAtomValue(settingsAtom);
|
|
|
|
if (check.error) {
|
|
// Failed to check for license. Probably a network or server error so just don't
|
|
// show anything.
|
|
return null;
|
|
}
|
|
|
|
// Hasn't loaded yet
|
|
if (check.data == null) {
|
|
return null;
|
|
}
|
|
|
|
// Dismissed license badge
|
|
if (settings.hideLicenseBadge) {
|
|
return null;
|
|
}
|
|
|
|
const detail = details[check.data.type];
|
|
if (detail == null) {
|
|
return null;
|
|
}
|
|
|
|
return (
|
|
<BadgeButton
|
|
color={detail.color}
|
|
onClick={() => openSettings.mutate('license')}
|
|
>
|
|
{detail.label}
|
|
</BadgeButton>
|
|
);
|
|
}
|