# This PR - Revise my previous work (PR #5969) Because it would break the current logic and cause unexpected behavior. (Issue #5979) - Solve (Issue #5915) with another way @lucasbordeau What do you think about my current approach? @JarWarren Please check it out—I'd love to get your feedback too! --------- Co-authored-by: Achsan <achsanh@gmail.com> Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>
84 lines
2.5 KiB
TypeScript
84 lines
2.5 KiB
TypeScript
import { useEffect } from 'react';
|
|
import { useRecoilState, useRecoilValue, useSetRecoilState } from 'recoil';
|
|
|
|
import { useGetCurrentView } from '@/views/hooks/useGetCurrentView';
|
|
import { useGetAvailableFieldsForKanban } from '@/views/view-picker/hooks/useGetAvailableFieldsForKanban';
|
|
import { useViewPickerStates } from '@/views/view-picker/hooks/useViewPickerStates';
|
|
import { isDefined } from '~/utils/isDefined';
|
|
|
|
export const ViewPickerCreateOrEditContentEffect = () => {
|
|
const {
|
|
viewPickerSelectedIconState,
|
|
viewPickerInputNameState,
|
|
viewPickerReferenceViewIdState,
|
|
viewPickerIsPersistingState,
|
|
viewPickerKanbanFieldMetadataIdState,
|
|
viewPickerTypeState,
|
|
viewPickerIsDirtyState,
|
|
} = useViewPickerStates();
|
|
|
|
const setViewPickerSelectedIcon = useSetRecoilState(
|
|
viewPickerSelectedIconState,
|
|
);
|
|
const setViewPickerInputName = useSetRecoilState(viewPickerInputNameState);
|
|
|
|
const [viewPickerKanbanFieldMetadataId, setViewPickerKanbanFieldMetadataId] =
|
|
useRecoilState(viewPickerKanbanFieldMetadataIdState);
|
|
const setViewPickerType = useSetRecoilState(viewPickerTypeState);
|
|
|
|
const viewPickerReferenceViewId = useRecoilValue(
|
|
viewPickerReferenceViewIdState,
|
|
);
|
|
|
|
const viewPickerIsDirty = useRecoilValue(viewPickerIsDirtyState);
|
|
|
|
const viewPickerIsPersisting = useRecoilValue(viewPickerIsPersistingState);
|
|
|
|
const { viewsOnCurrentObject } = useGetCurrentView();
|
|
const referenceView = viewsOnCurrentObject.find(
|
|
(view) => view.id === viewPickerReferenceViewId,
|
|
);
|
|
|
|
const { availableFieldsForKanban } = useGetAvailableFieldsForKanban();
|
|
|
|
useEffect(() => {
|
|
if (
|
|
isDefined(referenceView) &&
|
|
!viewPickerIsPersisting &&
|
|
!viewPickerIsDirty
|
|
) {
|
|
setViewPickerSelectedIcon(referenceView.icon);
|
|
setViewPickerInputName(referenceView.name);
|
|
setViewPickerType(referenceView.type);
|
|
}
|
|
}, [
|
|
referenceView,
|
|
setViewPickerInputName,
|
|
setViewPickerSelectedIcon,
|
|
setViewPickerType,
|
|
viewPickerIsPersisting,
|
|
viewPickerIsDirty,
|
|
]);
|
|
|
|
useEffect(() => {
|
|
if (
|
|
isDefined(referenceView) &&
|
|
availableFieldsForKanban.length > 0 &&
|
|
viewPickerKanbanFieldMetadataId === ''
|
|
) {
|
|
setViewPickerKanbanFieldMetadataId(
|
|
referenceView.kanbanFieldMetadataId !== ''
|
|
? referenceView.kanbanFieldMetadataId
|
|
: availableFieldsForKanban[0].id,
|
|
);
|
|
}
|
|
}, [
|
|
referenceView,
|
|
availableFieldsForKanban,
|
|
viewPickerKanbanFieldMetadataId,
|
|
setViewPickerKanbanFieldMetadataId,
|
|
]);
|
|
|
|
return <></>;
|
|
};
|