Fixed Custom Icon Persistance Across New View Creations (#9070)
closes #8714
This commit is contained in:
@ -30,7 +30,7 @@ import { viewPickerIsPersistingComponentState } from '@/views/view-picker/states
|
|||||||
import { viewPickerKanbanFieldMetadataIdComponentState } from '@/views/view-picker/states/viewPickerKanbanFieldMetadataIdComponentState';
|
import { viewPickerKanbanFieldMetadataIdComponentState } from '@/views/view-picker/states/viewPickerKanbanFieldMetadataIdComponentState';
|
||||||
import { viewPickerSelectedIconComponentState } from '@/views/view-picker/states/viewPickerSelectedIconComponentState';
|
import { viewPickerSelectedIconComponentState } from '@/views/view-picker/states/viewPickerSelectedIconComponentState';
|
||||||
import { viewPickerTypeComponentState } from '@/views/view-picker/states/viewPickerTypeComponentState';
|
import { viewPickerTypeComponentState } from '@/views/view-picker/states/viewPickerTypeComponentState';
|
||||||
import { useState } from 'react';
|
import { useMemo, useState } from 'react';
|
||||||
|
|
||||||
const StyledNoKanbanFieldAvailableContainer = styled.div`
|
const StyledNoKanbanFieldAvailableContainer = styled.div`
|
||||||
color: ${({ theme }) => theme.font.color.light};
|
color: ${({ theme }) => theme.font.color.light};
|
||||||
@ -41,7 +41,7 @@ const StyledNoKanbanFieldAvailableContainer = styled.div`
|
|||||||
`;
|
`;
|
||||||
|
|
||||||
export const ViewPickerContentCreateMode = () => {
|
export const ViewPickerContentCreateMode = () => {
|
||||||
const { setViewPickerMode } = useViewPickerMode();
|
const { viewPickerMode, setViewPickerMode } = useViewPickerMode();
|
||||||
const [hasManuallySelectedIcon, setHasManuallySelectedIcon] = useState(false);
|
const [hasManuallySelectedIcon, setHasManuallySelectedIcon] = useState(false);
|
||||||
|
|
||||||
const [viewPickerInputName, setViewPickerInputName] =
|
const [viewPickerInputName, setViewPickerInputName] =
|
||||||
@ -92,9 +92,20 @@ export const ViewPickerContentCreateMode = () => {
|
|||||||
const defaultIcon =
|
const defaultIcon =
|
||||||
viewPickerType === ViewType.Kanban ? 'IconLayoutKanban' : 'IconTable';
|
viewPickerType === ViewType.Kanban ? 'IconLayoutKanban' : 'IconTable';
|
||||||
|
|
||||||
const selectedIcon = hasManuallySelectedIcon
|
const selectedIcon = useMemo(() => {
|
||||||
? viewPickerSelectedIcon
|
if (hasManuallySelectedIcon) {
|
||||||
: defaultIcon;
|
return viewPickerSelectedIcon;
|
||||||
|
}
|
||||||
|
if (viewPickerMode === 'create-from-current') {
|
||||||
|
return viewPickerSelectedIcon || defaultIcon;
|
||||||
|
}
|
||||||
|
return defaultIcon;
|
||||||
|
}, [
|
||||||
|
hasManuallySelectedIcon,
|
||||||
|
viewPickerSelectedIcon,
|
||||||
|
viewPickerMode,
|
||||||
|
defaultIcon,
|
||||||
|
]);
|
||||||
|
|
||||||
const onIconChange = ({ iconKey }: { iconKey: string }) => {
|
const onIconChange = ({ iconKey }: { iconKey: string }) => {
|
||||||
setViewPickerIsDirty(true);
|
setViewPickerIsDirty(true);
|
||||||
|
|||||||
@ -4,7 +4,9 @@ import { useRecoilComponentStateV2 } from '@/ui/utilities/state/component-state/
|
|||||||
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2';
|
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2';
|
||||||
import { useSetRecoilComponentStateV2 } from '@/ui/utilities/state/component-state/hooks/useSetRecoilComponentStateV2';
|
import { useSetRecoilComponentStateV2 } from '@/ui/utilities/state/component-state/hooks/useSetRecoilComponentStateV2';
|
||||||
import { useGetCurrentView } from '@/views/hooks/useGetCurrentView';
|
import { useGetCurrentView } from '@/views/hooks/useGetCurrentView';
|
||||||
|
import { ViewType } from '@/views/types/ViewType';
|
||||||
import { useGetAvailableFieldsForKanban } from '@/views/view-picker/hooks/useGetAvailableFieldsForKanban';
|
import { useGetAvailableFieldsForKanban } from '@/views/view-picker/hooks/useGetAvailableFieldsForKanban';
|
||||||
|
import { useViewPickerMode } from '@/views/view-picker/hooks/useViewPickerMode';
|
||||||
import { viewPickerInputNameComponentState } from '@/views/view-picker/states/viewPickerInputNameComponentState';
|
import { viewPickerInputNameComponentState } from '@/views/view-picker/states/viewPickerInputNameComponentState';
|
||||||
import { viewPickerIsDirtyComponentState } from '@/views/view-picker/states/viewPickerIsDirtyComponentState';
|
import { viewPickerIsDirtyComponentState } from '@/views/view-picker/states/viewPickerIsDirtyComponentState';
|
||||||
import { viewPickerIsPersistingComponentState } from '@/views/view-picker/states/viewPickerIsPersistingComponentState';
|
import { viewPickerIsPersistingComponentState } from '@/views/view-picker/states/viewPickerIsPersistingComponentState';
|
||||||
@ -21,11 +23,12 @@ export const ViewPickerContentEffect = () => {
|
|||||||
const setViewPickerInputName = useSetRecoilComponentStateV2(
|
const setViewPickerInputName = useSetRecoilComponentStateV2(
|
||||||
viewPickerInputNameComponentState,
|
viewPickerInputNameComponentState,
|
||||||
);
|
);
|
||||||
|
const { viewPickerMode } = useViewPickerMode();
|
||||||
|
|
||||||
const [viewPickerKanbanFieldMetadataId, setViewPickerKanbanFieldMetadataId] =
|
const [viewPickerKanbanFieldMetadataId, setViewPickerKanbanFieldMetadataId] =
|
||||||
useRecoilComponentStateV2(viewPickerKanbanFieldMetadataIdComponentState);
|
useRecoilComponentStateV2(viewPickerKanbanFieldMetadataIdComponentState);
|
||||||
|
|
||||||
const setViewPickerType = useSetRecoilComponentStateV2(
|
const [viewPickerType, setViewPickerType] = useRecoilComponentStateV2(
|
||||||
viewPickerTypeComponentState,
|
viewPickerTypeComponentState,
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -54,7 +57,13 @@ export const ViewPickerContentEffect = () => {
|
|||||||
!viewPickerIsPersisting &&
|
!viewPickerIsPersisting &&
|
||||||
!viewPickerIsDirty
|
!viewPickerIsDirty
|
||||||
) {
|
) {
|
||||||
setViewPickerSelectedIcon(referenceView.icon);
|
const defaultIcon =
|
||||||
|
viewPickerType === ViewType.Kanban ? 'IconLayoutKanban' : 'IconTable';
|
||||||
|
if (viewPickerMode === 'create-empty') {
|
||||||
|
setViewPickerSelectedIcon(defaultIcon);
|
||||||
|
} else {
|
||||||
|
setViewPickerSelectedIcon(referenceView.icon);
|
||||||
|
}
|
||||||
setViewPickerInputName(referenceView.name);
|
setViewPickerInputName(referenceView.name);
|
||||||
setViewPickerType(referenceView.type);
|
setViewPickerType(referenceView.type);
|
||||||
}
|
}
|
||||||
@ -65,6 +74,8 @@ export const ViewPickerContentEffect = () => {
|
|||||||
setViewPickerType,
|
setViewPickerType,
|
||||||
viewPickerIsPersisting,
|
viewPickerIsPersisting,
|
||||||
viewPickerIsDirty,
|
viewPickerIsDirty,
|
||||||
|
viewPickerMode,
|
||||||
|
viewPickerType,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
|||||||
Reference in New Issue
Block a user