feat(core): init feature flag service (#7856)

This commit is contained in:
EYHN
2024-08-14 10:35:21 +00:00
parent 339c39c1ec
commit 0504d0b0ff
19 changed files with 361 additions and 312 deletions
@@ -5,7 +5,6 @@ import {
MenuSeparator,
useConfirmModal,
} from '@affine/component';
import { useAppSettingHelper } from '@affine/core/hooks/affine/use-app-setting-helper';
import { useDeleteCollectionInfo } from '@affine/core/hooks/affine/use-delete-collection-info';
import { track } from '@affine/core/mixpanel';
import { CollectionService } from '@affine/core/modules/collection';
@@ -21,7 +20,12 @@ import {
PlusIcon,
SplitViewIcon,
} from '@blocksuite/icons/rc';
import { DocsService, useLiveData, useServices } from '@toeverything/infra';
import {
DocsService,
FeatureFlagService,
useLiveData,
useServices,
} from '@toeverything/infra';
import { useCallback, useMemo } from 'react';
import type { NodeOperation } from '../../tree/types';
@@ -32,20 +36,24 @@ export const useExplorerCollectionNodeOperations = (
onOpenEdit: () => void
): NodeOperation[] => {
const t = useI18n();
const { appSettings } = useAppSettingHelper();
const {
workbenchService,
docsService,
collectionService,
compatibleFavoriteItemsAdapter,
featureFlagService,
} = useServices({
DocsService,
WorkbenchService,
CollectionService,
CompatibleFavoriteItemsAdapter,
FeatureFlagService,
});
const deleteInfo = useDeleteCollectionInfo();
const enableMultiView = useLiveData(
featureFlagService.flags.enable_multi_view.$
);
const favorite = useLiveData(
useMemo(
() =>
@@ -200,7 +208,7 @@ export const useExplorerCollectionNodeOperations = (
</MenuItem>
),
},
...(appSettings.enableMultiView
...(environment.isDesktop && enableMultiView
? [
{
index: 99,
@@ -241,7 +249,7 @@ export const useExplorerCollectionNodeOperations = (
},
],
[
appSettings.enableMultiView,
enableMultiView,
favorite,
handleAddDocToCollection,
handleDeleteCollection,
@@ -6,7 +6,6 @@ import {
toast,
useConfirmModal,
} from '@affine/component';
import { useAppSettingHelper } from '@affine/core/hooks/affine/use-app-setting-helper';
import { useAsyncCallback } from '@affine/core/hooks/affine-async-hooks';
import { track } from '@affine/core/mixpanel';
import { CompatibleFavoriteItemsAdapter } from '@affine/core/modules/properties';
@@ -22,7 +21,12 @@ import {
PlusIcon,
SplitViewIcon,
} from '@blocksuite/icons/rc';
import { DocsService, useLiveData, useServices } from '@toeverything/infra';
import {
DocsService,
FeatureFlagService,
useLiveData,
useServices,
} from '@toeverything/infra';
import { useCallback, useMemo } from 'react';
import type { NodeOperation } from '../../tree/types';
@@ -35,13 +39,20 @@ export const useExplorerDocNodeOperations = (
}
): NodeOperation[] => {
const t = useI18n();
const { appSettings } = useAppSettingHelper();
const { workbenchService, docsService, compatibleFavoriteItemsAdapter } =
useServices({
DocsService,
WorkbenchService,
CompatibleFavoriteItemsAdapter,
});
const {
workbenchService,
docsService,
compatibleFavoriteItemsAdapter,
featureFlagService,
} = useServices({
DocsService,
WorkbenchService,
CompatibleFavoriteItemsAdapter,
FeatureFlagService,
});
const enableMultiView = useLiveData(
featureFlagService.flags.enable_multi_view.$
);
const { openConfirmModal } = useConfirmModal();
const docRecord = useLiveData(docsService.list.doc$(docId));
@@ -179,7 +190,7 @@ export const useExplorerDocNodeOperations = (
</MenuItem>
),
},
...(appSettings.enableMultiView
...(enableMultiView && environment.isDesktop
? [
{
index: 100,
@@ -243,7 +254,7 @@ export const useExplorerDocNodeOperations = (
},
],
[
appSettings.enableMultiView,
enableMultiView,
favorite,
handleAddLinkedPage,
handleMoveToTrash,
@@ -5,7 +5,6 @@ import {
MenuSeparator,
toast,
} from '@affine/component';
import { useAppSettingHelper } from '@affine/core/hooks/affine/use-app-setting-helper';
import { track } from '@affine/core/mixpanel';
import { FavoriteService } from '@affine/core/modules/favorite';
import { TagService } from '@affine/core/modules/tag';
@@ -19,7 +18,12 @@ import {
PlusIcon,
SplitViewIcon,
} from '@blocksuite/icons/rc';
import { DocsService, useLiveData, useServices } from '@toeverything/infra';
import {
DocsService,
FeatureFlagService,
useLiveData,
useServices,
} from '@toeverything/infra';
import { useCallback, useMemo } from 'react';
import type { NodeOperation } from '../../tree/types';
@@ -33,19 +37,27 @@ export const useExplorerTagNodeOperations = (
}
): NodeOperation[] => {
const t = useI18n();
const { appSettings } = useAppSettingHelper();
const { docsService, workbenchService, tagService, favoriteService } =
useServices({
WorkbenchService,
TagService,
DocsService,
FavoriteService,
});
const {
docsService,
workbenchService,
tagService,
favoriteService,
featureFlagService,
} = useServices({
WorkbenchService,
TagService,
DocsService,
FavoriteService,
FeatureFlagService,
});
const favorite = useLiveData(
favoriteService.favoriteList.favorite$('tag', tagId)
);
const tagRecord = useLiveData(tagService.tagList.tagByTagId$(tagId));
const enableMultiView = useLiveData(
featureFlagService.flags.enable_multi_view.$
);
const handleNewDoc = useCallback(() => {
if (tagRecord) {
@@ -114,7 +126,7 @@ export const useExplorerTagNodeOperations = (
</MenuItem>
),
},
...(appSettings.enableMultiView
...(enableMultiView && environment.isDesktop
? [
{
index: 100,
@@ -178,7 +190,7 @@ export const useExplorerTagNodeOperations = (
},
],
[
appSettings.enableMultiView,
enableMultiView,
favorite,
handleMoveToTrash,
handleNewDoc,
@@ -1,7 +1,10 @@
import { useAppSettingHelper } from '@affine/core/hooks/affine/use-app-setting-helper';
import { useCatchEventCallback } from '@affine/core/hooks/use-catch-event-hook';
import { isNewTabTrigger } from '@affine/core/utils';
import { useLiveData, useService } from '@toeverything/infra';
import {
FeatureFlagService,
useLiveData,
useServices,
} from '@toeverything/infra';
import { type To } from 'history';
import { forwardRef, type MouseEvent } from 'react';
@@ -16,8 +19,14 @@ export const WorkbenchLink = forwardRef<
} & React.HTMLProps<HTMLAnchorElement>
>
>(function WorkbenchLink({ to, onClick, ...other }, ref) {
const workbench = useService(WorkbenchService).workbench;
const { appSettings } = useAppSettingHelper();
const { featureFlagService, workbenchService } = useServices({
FeatureFlagService,
WorkbenchService,
});
const enableMultiView = useLiveData(
featureFlagService.flags.enable_multi_view.$
);
const workbench = workbenchService.workbench;
const basename = useLiveData(workbench.basename$);
const link =
basename +
@@ -30,7 +39,7 @@ export const WorkbenchLink = forwardRef<
}
const at = (() => {
if (isNewTabTrigger(event)) {
return event.altKey && appSettings.enableMultiView
return event.altKey && enableMultiView && environment.isDesktop
? 'tail'
: 'new-tab';
}
@@ -39,7 +48,7 @@ export const WorkbenchLink = forwardRef<
workbench.open(to, { at });
event.preventDefault();
},
[appSettings.enableMultiView, onClick, to, workbench]
[enableMultiView, onClick, to, workbench]
);
// eslint suspicious runtime error