Add Dashboard in Lab, make Calendar available out of lab (#15560)
As per title!
This commit is contained in:
@@ -6,12 +6,17 @@ import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadat
|
||||
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
|
||||
import { coreViewsState } from '@/views/states/coreViewState';
|
||||
import { convertCoreViewToView } from '@/views/utils/convertCoreViewToView';
|
||||
import { useFeatureFlagsMap } from '@/workspace/hooks/useFeatureFlagsMap';
|
||||
import { useMemo } from 'react';
|
||||
import { useRecoilValue } from 'recoil';
|
||||
import { FieldMetadataType } from '~/generated-metadata/graphql';
|
||||
import {
|
||||
FeatureFlagKey,
|
||||
FieldMetadataType,
|
||||
} from '~/generated-metadata/graphql';
|
||||
import { usePrefetchedFavoritesData } from './usePrefetchedFavoritesData';
|
||||
|
||||
export const useWorkspaceFavorites = () => {
|
||||
const featureFlags = useFeatureFlagsMap();
|
||||
const { workspaceFavorites } = usePrefetchedFavoritesData();
|
||||
const coreViews = useRecoilValue(coreViewsState);
|
||||
const objectMetadataItems = useRecoilValue(objectMetadataItemsState);
|
||||
@@ -33,7 +38,17 @@ export const useWorkspaceFavorites = () => {
|
||||
[favoriteObjectMetadataItem.fields],
|
||||
);
|
||||
|
||||
const views = coreViews.map(convertCoreViewToView);
|
||||
const [dashboardObjectMetadataId] = objectMetadataItems
|
||||
.filter((item) => item.nameSingular === CoreObjectNameSingular.Dashboard)
|
||||
.map((item) => item.id);
|
||||
|
||||
const views = coreViews
|
||||
.map(convertCoreViewToView)
|
||||
.filter(
|
||||
(view) =>
|
||||
featureFlags[FeatureFlagKey.IS_PAGE_LAYOUT_ENABLED] === true ||
|
||||
view.objectMetadataId !== dashboardObjectMetadataId,
|
||||
);
|
||||
|
||||
const sortedWorkspaceFavorites = useMemo(
|
||||
() =>
|
||||
@@ -76,7 +91,6 @@ export const useWorkspaceFavorites = () => {
|
||||
);
|
||||
|
||||
return {
|
||||
workspaceFavorites: sortedWorkspaceFavorites,
|
||||
workspaceFavoritesObjectMetadataItems:
|
||||
activeNonSystemObjectMetadataItemsInWorkspaceFavorites,
|
||||
};
|
||||
|
||||
+16
-23
@@ -21,7 +21,6 @@ import { ViewOpenRecordInType } from '@/views/types/ViewOpenRecordInType';
|
||||
import { ViewType, viewTypeIconMapping } from '@/views/types/ViewType';
|
||||
import { useGetAvailableFieldsForCalendar } from '@/views/view-picker/hooks/useGetAvailableFieldsForCalendar';
|
||||
import { useGetAvailableFieldsForKanban } from '@/views/view-picker/hooks/useGetAvailableFieldsForKanban';
|
||||
import { useFeatureFlagsMap } from '@/workspace/hooks/useFeatureFlagsMap';
|
||||
import { useLingui } from '@lingui/react/macro';
|
||||
import { useCallback } from 'react';
|
||||
import { useRecoilValue } from 'recoil';
|
||||
@@ -38,7 +37,7 @@ import {
|
||||
OverflowingTextWithTooltip,
|
||||
} from 'twenty-ui/display';
|
||||
import { MenuItem, MenuItemSelect, MenuItemToggle } from 'twenty-ui/navigation';
|
||||
import { FeatureFlagKey, ViewCalendarLayout } from '~/generated/graphql';
|
||||
import { ViewCalendarLayout } from '~/generated/graphql';
|
||||
|
||||
export const ObjectOptionsDropdownLayoutContent = () => {
|
||||
const { t } = useLingui();
|
||||
@@ -113,14 +112,10 @@ export const ObjectOptionsDropdownLayoutContent = () => {
|
||||
const isDefaultView = currentView?.key === 'INDEX';
|
||||
const nbsp = '\u00A0';
|
||||
|
||||
const featureFlags = useFeatureFlagsMap();
|
||||
const hasCalendarViewEnabled =
|
||||
featureFlags[FeatureFlagKey.IS_CALENDAR_VIEW_ENABLED];
|
||||
|
||||
const selectableItemIdArray = [
|
||||
ViewType.Table,
|
||||
...(isDefaultView ? [] : [ViewType.Kanban]),
|
||||
...(!isDefaultView && hasCalendarViewEnabled ? [ViewType.Calendar] : []),
|
||||
...(!isDefaultView ? [ViewType.Calendar] : []),
|
||||
ViewOpenRecordInType.SIDE_PANEL,
|
||||
...(currentView?.type === ViewType.Kanban ? ['Group'] : []),
|
||||
...(currentView?.type === ViewType.Calendar
|
||||
@@ -172,22 +167,20 @@ export const ObjectOptionsDropdownLayoutContent = () => {
|
||||
}}
|
||||
/>
|
||||
</SelectableListItem>
|
||||
{hasCalendarViewEnabled && (
|
||||
<SelectableListItem
|
||||
itemId={ViewType.Calendar}
|
||||
onEnter={() => {
|
||||
setAndPersistViewType(ViewType.Calendar);
|
||||
}}
|
||||
>
|
||||
<MenuItemSelect
|
||||
LeftIcon={viewTypeIconMapping(ViewType.Calendar)}
|
||||
text={t`Calendar`}
|
||||
selected={currentView?.type === ViewType.Calendar}
|
||||
focused={selectedItemId === ViewType.Calendar}
|
||||
onClick={handleSelectCalendarViewType}
|
||||
/>
|
||||
</SelectableListItem>
|
||||
)}
|
||||
<SelectableListItem
|
||||
itemId={ViewType.Calendar}
|
||||
onEnter={() => {
|
||||
setAndPersistViewType(ViewType.Calendar);
|
||||
}}
|
||||
>
|
||||
<MenuItemSelect
|
||||
LeftIcon={viewTypeIconMapping(ViewType.Calendar)}
|
||||
text={t`Calendar`}
|
||||
selected={currentView?.type === ViewType.Calendar}
|
||||
focused={selectedItemId === ViewType.Calendar}
|
||||
onClick={handleSelectCalendarViewType}
|
||||
/>
|
||||
</SelectableListItem>
|
||||
<SelectableListItem
|
||||
itemId={ViewType.Kanban}
|
||||
onEnter={() => {
|
||||
|
||||
+3
-3
@@ -108,7 +108,7 @@ describe('evaluateTabVisibility', () => {
|
||||
evaluateTabVisibility(
|
||||
{
|
||||
...baseConfig,
|
||||
ifFeaturesDisabled: [FeatureFlagKey.IS_CALENDAR_VIEW_ENABLED],
|
||||
ifFeaturesDisabled: [FeatureFlagKey.IS_PAGE_LAYOUT_ENABLED],
|
||||
},
|
||||
baseContext,
|
||||
),
|
||||
@@ -121,7 +121,7 @@ describe('evaluateTabVisibility', () => {
|
||||
currentWorkspace: {
|
||||
featureFlags: [
|
||||
{ key: FeatureFlagKey.IS_AI_ENABLED, value: true },
|
||||
{ key: FeatureFlagKey.IS_CALENDAR_VIEW_ENABLED, value: true },
|
||||
{ key: FeatureFlagKey.IS_PAGE_LAYOUT_ENABLED, value: true },
|
||||
],
|
||||
},
|
||||
};
|
||||
@@ -129,7 +129,7 @@ describe('evaluateTabVisibility', () => {
|
||||
evaluateTabVisibility(
|
||||
{
|
||||
...baseConfig,
|
||||
ifFeaturesDisabled: [FeatureFlagKey.IS_CALENDAR_VIEW_ENABLED],
|
||||
ifFeaturesDisabled: [FeatureFlagKey.IS_PAGE_LAYOUT_ENABLED],
|
||||
},
|
||||
ctx,
|
||||
),
|
||||
|
||||
@@ -4,8 +4,8 @@ import { useLabPublicFeatureFlags } from '@/settings/lab/hooks/useLabPublicFeatu
|
||||
import styled from '@emotion/styled';
|
||||
import { useState } from 'react';
|
||||
import { useRecoilValue } from 'recoil';
|
||||
import { type FeatureFlagKey } from '~/generated/graphql';
|
||||
import { Card } from 'twenty-ui/layout';
|
||||
import { type FeatureFlagKey } from '~/generated/graphql';
|
||||
|
||||
const StyledCardGrid = styled.div`
|
||||
display: grid;
|
||||
|
||||
+1
-13
@@ -36,11 +36,9 @@ import { viewPickerIsPersistingComponentState } from '@/views/view-picker/states
|
||||
import { viewPickerKanbanFieldMetadataIdComponentState } from '@/views/view-picker/states/viewPickerKanbanFieldMetadataIdComponentState';
|
||||
import { viewPickerSelectedIconComponentState } from '@/views/view-picker/states/viewPickerSelectedIconComponentState';
|
||||
import { viewPickerTypeComponentState } from '@/views/view-picker/states/viewPickerTypeComponentState';
|
||||
import { useFeatureFlagsMap } from '@/workspace/hooks/useFeatureFlagsMap';
|
||||
import { useLingui } from '@lingui/react/macro';
|
||||
import { useMemo, useState } from 'react';
|
||||
import { IconX } from 'twenty-ui/display';
|
||||
import { FeatureFlagKey } from '~/generated/graphql';
|
||||
|
||||
const StyledFieldAvailableContainer = styled.div`
|
||||
color: ${({ theme }) => theme.font.color.light};
|
||||
@@ -93,16 +91,6 @@ export const ViewPickerContentCreateMode = () => {
|
||||
const { availableFieldsForKanban } = useGetAvailableFieldsForKanban();
|
||||
|
||||
const { availableFieldsForCalendar } = useGetAvailableFieldsForCalendar();
|
||||
const featureFlags = useFeatureFlagsMap();
|
||||
|
||||
const hasCalendarViewEnabled =
|
||||
featureFlags[FeatureFlagKey.IS_CALENDAR_VIEW_ENABLED];
|
||||
|
||||
const viewPickerTypeOptions = VIEW_PICKER_TYPE_SELECT_OPTIONS.filter(
|
||||
(option) => {
|
||||
return option.value !== ViewType.Calendar || hasCalendarViewEnabled;
|
||||
},
|
||||
);
|
||||
|
||||
useHotkeysOnFocusedElement({
|
||||
keys: [Key.Enter],
|
||||
@@ -187,7 +175,7 @@ export const ViewPickerContentCreateMode = () => {
|
||||
setViewPickerIsDirty(true);
|
||||
setViewPickerType(value);
|
||||
}}
|
||||
options={viewPickerTypeOptions.map((option) => ({
|
||||
options={VIEW_PICKER_TYPE_SELECT_OPTIONS.map((option) => ({
|
||||
...option,
|
||||
label: t(option.label),
|
||||
}))}
|
||||
|
||||
Reference in New Issue
Block a user