Calendar View: persist field updates (#14517)

<img width="1919" height="956" alt="image"
src="https://github.com/user-attachments/assets/726738db-68fc-4cdc-949a-d2adc29a436c"
/>
This commit is contained in:
Charles Bochet
2025-09-15 18:38:03 +02:00
committed by GitHub
parent fbc4328448
commit 0c4496409a
3 changed files with 35 additions and 5 deletions
@@ -11,8 +11,9 @@ const StyledContainer = styled.div<{ isOtherMonth: boolean }>`
width: calc(100% / 7);
flex-direction: column;
min-height: 122px;
padding: ${({ theme }) => theme.spacing(0.5)};
padding: ${({ theme }) => theme.spacing(1)};
background: ${({ theme }) => theme.background.primary};
min-width: 0;
&:not(:last-child) {
border-right: 0.5px solid ${({ theme }) => theme.border.color.light};
@@ -4,6 +4,7 @@ import { RecordCalendarCardBody } from '@/object-record/record-calendar/record-c
import { RecordCalendarCardHeader } from '@/object-record/record-calendar/record-calendar-card/components/RecordCalendarCardHeader';
import { RecordCalendarCardComponentInstanceContext } from '@/object-record/record-calendar/record-calendar-card/states/contexts/RecordCalendarCardComponentInstanceContext';
import { RecordCard } from '@/object-record/record-card/components/RecordCard';
import { useOpenRecordFromIndexView } from '@/object-record/record-index/hooks/useOpenRecordFromIndexView';
import styled from '@emotion/styled';
const StyledContainer = styled.div`
@@ -12,6 +13,7 @@ const StyledContainer = styled.div`
const StyledRecordCard = styled(RecordCard)`
margin-bottom: ${({ theme }) => theme.spacing(1)};
width: calc(100% - 2px);
`;
type RecordCalendarCardProps = {
@@ -19,6 +21,12 @@ type RecordCalendarCardProps = {
};
export const RecordCalendarCard = ({ recordId }: RecordCalendarCardProps) => {
const { openRecordFromIndexView } = useOpenRecordFromIndexView();
const handleCardClick = () => {
openRecordFromIndexView({ recordId });
};
return (
<RecordCalendarCardComponentInstanceContext.Provider
value={{
@@ -26,7 +34,7 @@ export const RecordCalendarCard = ({ recordId }: RecordCalendarCardProps) => {
}}
>
<StyledContainer>
<StyledRecordCard>
<StyledRecordCard onClick={handleCardClick}>
<RecordCalendarCardHeader recordId={recordId} />
<RecordCalendarCardBody
recordId={recordId}
@@ -1,3 +1,4 @@
import { useUpdateOneRecord } from '@/object-record/hooks/useUpdateOneRecord';
import { isRecordFieldReadOnly } from '@/object-record/read-only/utils/isRecordFieldReadOnly';
import { StopPropagationContainer } from '@/object-record/record-board/record-board-card/components/StopPropagationContainer';
import { useRecordCalendarContextOrThrow } from '@/object-record/record-calendar/contexts/RecordCalendarContext';
@@ -5,7 +6,11 @@ import { RECORD_CALENDAR_CARD_INPUT_ID_PREFIX } from '@/object-record/record-cal
import { recordCalendarCardHoverPositionComponentState } from '@/object-record/record-calendar/record-calendar-card/states/recordCalendarCardHoverPositionComponentState';
import { RecordCardBodyContainer } from '@/object-record/record-card/components/RecordCardBodyContainer';
import { visibleRecordFieldsComponentSelector } from '@/object-record/record-field/states/visibleRecordFieldsComponentSelector';
import { FieldContext } from '@/object-record/record-field/ui/contexts/FieldContext';
import {
FieldContext,
type RecordUpdateHook,
type RecordUpdateHookParams,
} from '@/object-record/record-field/ui/contexts/FieldContext';
import { RecordFieldComponentInstanceContext } from '@/object-record/record-field/ui/states/contexts/RecordFieldComponentInstanceContext';
import { useRecordIndexContextOrThrow } from '@/object-record/record-index/contexts/RecordIndexContext';
import { RecordInlineCell } from '@/object-record/record-inline-cell/components/RecordInlineCell';
@@ -22,7 +27,23 @@ export const RecordCalendarCardBody = ({
recordId,
isRecordReadOnly,
}: RecordCalendarCardBodyProps) => {
const { objectPermissions } = useRecordCalendarContextOrThrow();
const { objectPermissions, objectMetadataItem } =
useRecordCalendarContextOrThrow();
const { updateOneRecord } = useUpdateOneRecord({
objectNameSingular: objectMetadataItem.nameSingular,
});
const useUpdateOneRecordHook: RecordUpdateHook = () => {
const updateEntity = ({ variables }: RecordUpdateHookParams) => {
updateOneRecord?.({
idToUpdate: variables.where.id as string,
updateOneRecordInput: variables.updateOneRecordInput,
});
};
return [updateEntity, { loading: false }];
};
const {
labelIdentifierFieldMetadataItem,
@@ -70,7 +91,7 @@ export const RecordCalendarCardBody = ({
},
}),
fieldDefinition: correspondingFieldDefinition,
useUpdateRecord: () => [() => undefined, { loading: false }],
useUpdateRecord: useUpdateOneRecordHook,
isDisplayModeFixHeight: true,
triggerEvent: 'CLICK',
anchorId: `${RECORD_CALENDAR_CARD_INPUT_ID_PREFIX}-${recordId}-${correspondingFieldDefinition.metadata.fieldName}`,