Create empty page for calendar table (#14479)

<img width="1512" height="876" alt="image"
src="https://github.com/user-attachments/assets/e845fb3a-9977-4ab7-9eb7-4e60e499165b"
/>
This commit is contained in:
Charles Bochet
2025-09-14 18:03:38 +02:00
committed by GitHub
parent e3035bd4d7
commit e13db84f48
17 changed files with 93 additions and 8 deletions
@@ -98,6 +98,7 @@ const createStory = (contentId: ObjectOptionsContentId | null): Story => ({
objectNameSingular: 'company',
objectMetadataItem: companyObjectMetadataItem,
recordIndexId: instanceId,
viewBarInstanceId: instanceId,
fieldDefinitionByFieldMetadataItemId,
fieldMetadataItemByFieldMetadataItemId,
labelIdentifierFieldMetadataItem,
@@ -0,0 +1,15 @@
import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
import { type RecordField } from '@/object-record/record-field/types/RecordField';
import { type ObjectPermission } from '~/generated/graphql';
import { createRequiredContext } from '~/utils/createRequiredContext';
type RecordCalendarContextValue = {
viewBarInstanceId: string;
objectNameSingular: string;
objectMetadataItem: ObjectMetadataItem;
objectPermissions: ObjectPermission;
visibleRecordFields: RecordField[];
};
export const [RecordCalendarContextProvider, useRecordCalendarContextOrThrow] =
createRequiredContext<RecordCalendarContextValue>('RecordCalendarContext');
@@ -0,0 +1,4 @@
import { createComponentInstanceContext } from '@/ui/utilities/state/component-state/utils/createComponentInstanceContext';
export const RecordCalendarComponentInstanceContext =
createComponentInstanceContext();
@@ -48,6 +48,7 @@ const meta: Meta = {
objectNameSingular: CoreObjectNameSingular.Company,
objectMetadataItem: companyObjectMetadataItem,
recordIndexId: instanceId,
viewBarInstanceId: instanceId,
fieldDefinitionByFieldMetadataItemId,
fieldMetadataItemByFieldMetadataItemId,
labelIdentifierFieldMetadataItem,
@@ -0,0 +1,45 @@
import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
import { useObjectPermissionsForObject } from '@/object-record/hooks/useObjectPermissionsForObject';
import { RecordCalendarContextProvider } from '@/object-record/record-calendar/contexts/RecordCalendarContext';
import { RecordCalendarComponentInstanceContext } from '@/object-record/record-calendar/states/contexts/RecordCalendarComponentInstanceContext';
import { useRecordIndexContextOrThrow } from '@/object-record/record-index/contexts/RecordIndexContext';
type RecordIndexCalendarContainerProps = {
recordCalendarInstanceId: string;
viewBarInstanceId: string;
};
export const RecordIndexCalendarContainer = ({
viewBarInstanceId,
recordCalendarInstanceId,
}: RecordIndexCalendarContainerProps) => {
const { objectNameSingular } = useRecordIndexContextOrThrow();
const { objectMetadataItem } = useObjectMetadataItem({
objectNameSingular,
});
const objectPermissions = useObjectPermissionsForObject(
objectMetadataItem.id,
);
return (
<RecordCalendarComponentInstanceContext.Provider
value={{
instanceId: recordCalendarInstanceId,
}}
>
<RecordCalendarContextProvider
value={{
viewBarInstanceId,
objectNameSingular,
visibleRecordFields: [],
objectMetadataItem,
objectPermissions,
}}
>
Calendar View
</RecordCalendarContextProvider>
</RecordCalendarComponentInstanceContext.Provider>
);
};
@@ -13,6 +13,7 @@ import { InformationBannerWrapper } from '@/information-banner/components/Inform
import { useRecordIndexContextOrThrow } from '@/object-record/record-index/contexts/RecordIndexContext';
import { SpreadsheetImportProvider } from '@/spreadsheet-import/provider/components/SpreadsheetImportProvider';
import { RecordIndexCalendarContainer } from '@/object-record/record-index/components/RecordIndexCalendarContainer';
import { RecordIndexFiltersToContextStoreEffect } from '@/object-record/record-index/components/RecordIndexFiltersToContextStoreEffect';
import { RecordIndexTableContainerEffect } from '@/object-record/record-index/components/RecordIndexTableContainerEffect';
import { ViewBar } from '@/views/components/ViewBar';
@@ -66,10 +67,7 @@ export const RecordIndexContainer = () => {
<RecordIndexFiltersToContextStoreEffect />
{recordIndexViewType === ViewType.Table && (
<>
<RecordIndexTableContainer
recordTableId={recordIndexId}
viewBarId={recordIndexId}
/>
<RecordIndexTableContainer recordTableId={recordIndexId} />
<RecordIndexTableContainerEffect />
</>
)}
@@ -87,6 +85,14 @@ export const RecordIndexContainer = () => {
<RecordIndexBoardDataLoaderEffect recordBoardId={recordIndexId} />
</StyledContainerWithPadding>
)}
{recordIndexViewType === ViewType.Calendar && (
<StyledContainerWithPadding>
<RecordIndexCalendarContainer
recordCalendarInstanceId={recordIndexId}
viewBarInstanceId={recordIndexId}
/>
</StyledContainerWithPadding>
)}
</StyledContainer>
</>
);
@@ -73,6 +73,7 @@ export const RecordIndexContainerGater = () => {
value={{
objectPermissionsByObjectMetadataId,
recordIndexId,
viewBarInstanceId: recordIndexId,
objectNamePlural: objectMetadataItem.namePlural,
objectNameSingular: objectMetadataItem.nameSingular,
objectMetadataItem,
@@ -9,14 +9,13 @@ import { useRecoilComponentValue } from '@/ui/utilities/state/component-state/ho
type RecordIndexTableContainerProps = {
recordTableId: string;
viewBarId: string;
};
export const RecordIndexTableContainer = ({
recordTableId,
viewBarId,
}: RecordIndexTableContainerProps) => {
const { objectNameSingular } = useRecordIndexContextOrThrow();
const { objectNameSingular, viewBarInstanceId } =
useRecordIndexContextOrThrow();
const isRecordIndexRemoveSortingModalOpened = useRecoilComponentValue(
isModalOpenedComponentState,
@@ -39,7 +38,7 @@ export const RecordIndexTableContainer = ({
<RecordTableWithWrappers
recordTableId={recordTableId}
objectNameSingular={objectNameSingular}
viewBarId={viewBarId}
viewBarId={viewBarInstanceId}
updateRecordMutation={updateEntity}
/>
{isRecordIndexRemoveSortingModalOpened && (
@@ -17,6 +17,7 @@ export type RecordIndexContextValue = {
ObjectPermissions & { objectMetadataId: string }
>;
recordIndexId: string;
viewBarInstanceId: string;
recordFieldByFieldMetadataItemId: Record<string, RecordField>;
labelIdentifierFieldMetadataItem: FieldMetadataItem | undefined;
fieldMetadataItemByFieldMetadataItemId: Record<string, FieldMetadataItem>;
@@ -142,6 +142,7 @@ const meta: Meta = {
// TODO: update performance mocks with new data, and merge with common mocks if possible
objectMetadataItem: mockPerformance.objectMetadataItem as any,
recordIndexId: 'recordIndexId',
viewBarInstanceId: 'recordIndexId',
fieldDefinitionByFieldMetadataItemId,
fieldMetadataItemByFieldMetadataItemId,
labelIdentifierFieldMetadataItem,
@@ -34,6 +34,7 @@ export const SettingsDataModelLabelIdentifierPreviewContextWrapper = ({
objectMetadataItem,
objectPermissionsByObjectMetadataId: {},
recordIndexId: '',
viewBarInstanceId: '',
recordFieldByFieldMetadataItemId: {},
labelIdentifierFieldMetadataItem,
fieldMetadataItemByFieldMetadataItemId: {},
@@ -56,6 +56,7 @@ export const SignInBackgroundMockContainer = () => {
value={{
objectPermissionsByObjectMetadataId: {},
recordIndexId,
viewBarInstanceId: recordIndexId,
objectNamePlural,
objectNameSingular,
objectMetadataItem: objectMetadataItem ?? objectMetadataItems[0],
@@ -93,6 +93,7 @@ const meta: Meta<typeof ViewBarFilterDropdown> = {
objectNameSingular: CoreObjectNameSingular.Company,
objectMetadataItem: companyObjectMetadataItem,
recordIndexId: instanceId,
viewBarInstanceId: instanceId,
labelIdentifierFieldMetadataItem,
recordFieldByFieldMetadataItemId,
fieldDefinitionByFieldMetadataItemId,
@@ -185,6 +185,7 @@ export const WorkflowEditActionFindRecords = ({
objectNameSingular: selectedObjectMetadataItem.nameSingular,
objectMetadataItem: selectedObjectMetadataItem,
recordIndexId: instanceId,
viewBarInstanceId: instanceId,
objectPermissionsByObjectMetadataId,
labelIdentifierFieldMetadataItem,
recordFieldByFieldMetadataItemId,
@@ -145,6 +145,7 @@ const InternalTableContextProviders = ({
objectMetadataItem: objectMetadataItem,
objectPermissionsByObjectMetadataId,
recordIndexId: 'record-index',
viewBarInstanceId: 'viewBarInstanceId',
labelIdentifierFieldMetadataItem,
recordFieldByFieldMetadataItemId,
fieldDefinitionByFieldMetadataItemId,
@@ -28,6 +28,7 @@ export const JestRecordIndexContextProviderWrapper = ({
objectNameSingular: objectMetadataItem.nameSingular,
objectMetadataItem: objectMetadataItem,
recordIndexId: 'recordIndexId',
viewBarInstanceId: 'recordIndexId',
labelIdentifierFieldMetadataItem,
recordFieldByFieldMetadataItemId,
fieldDefinitionByFieldMetadataItemId,
@@ -70,6 +70,11 @@ export const seedFeatureFlags = async (
workspaceId: workspaceId,
value: false,
},
{
key: FeatureFlagKey.IS_CALENDAR_VIEW_ENABLED,
workspaceId: workspaceId,
value: true,
},
])
.execute();
};