mirror of
https://github.com/shlinkio/shlink-web-client.git
synced 2026-02-27 12:16:36 +00:00
Convert feature flags into hooks
This commit is contained in:
@@ -1,16 +1,30 @@
|
||||
import { useMemo } from 'react';
|
||||
import type { SelectedServer } from '../../servers/data';
|
||||
import { isReachableServer } from '../../servers/data';
|
||||
import { selectServer } from '../../servers/reducers/selectedServer';
|
||||
import type { SemVerPattern } from './version';
|
||||
import { versionMatch } from './version';
|
||||
|
||||
const serverMatchesMinVersion = (minVersion: SemVerPattern) => (selectedServer: SelectedServer): boolean =>
|
||||
const matchesMinVersion = (minVersion: SemVerPattern) => (selectedServer: SelectedServer): boolean =>
|
||||
isReachableServer(selectedServer) && versionMatch(selectedServer.version, { minVersion });
|
||||
|
||||
export const supportsForwardQuery = serverMatchesMinVersion('2.9.0');
|
||||
export const supportsNonRestCors = supportsForwardQuery;
|
||||
export const supportsDefaultDomainRedirectsEdition = serverMatchesMinVersion('2.10.0');
|
||||
export const supportsNonOrphanVisits = serverMatchesMinVersion('3.0.0');
|
||||
export const supportsAllTagsFiltering = supportsNonOrphanVisits;
|
||||
export const supportsDomainVisits = serverMatchesMinVersion('3.1.0');
|
||||
export const supportsExcludeBotsOnShortUrls = serverMatchesMinVersion('3.4.0');
|
||||
export const supportsFilterDisabledUrls = supportsExcludeBotsOnShortUrls;
|
||||
export const supportedFeatures = {
|
||||
forwardQuery: matchesMinVersion('2.9.0'),
|
||||
nonRestCors: matchesMinVersion('2.9.0'),
|
||||
defaultDomainRedirectsEdition: matchesMinVersion('2.10.0'),
|
||||
nonOrphanVisits: matchesMinVersion('3.0.0'),
|
||||
allTagsFiltering: matchesMinVersion('3.0.0'),
|
||||
domainVisits: matchesMinVersion('3.1.0'),
|
||||
excludeBotsOnShortUrls: matchesMinVersion('3.4.0'),
|
||||
filterDisabledUrls: matchesMinVersion('3.4.0'),
|
||||
deviceLongUrls: matchesMinVersion('3.5.0'),
|
||||
} as const;
|
||||
|
||||
Object.freeze(supportedFeatures);
|
||||
|
||||
type Features = keyof typeof supportedFeatures;
|
||||
|
||||
export const useFeature = (feature: Features, selectedServer: SelectedServer) => useMemo(
|
||||
() => supportedFeatures[feature](selectedServer),
|
||||
[feature, selectServer],
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user