Fix(view): Create Button is not visible when creating Kanban View (#5969)

Closes #5915 

This issue occurs only when there is no select field.

The user then creates a new one in settings and returns back to the view
picker.
And the bug arises, it because `viewPickerKanbanFieldMetadataId` is not
being set correctly.

When a user navigate to settings, the dirty state should be set to
false. As a result, after re-rendering the view picker component, it
triggers the effect to set `viewPickerKanbanFieldMetadataId`

---------

Co-authored-by: Achsan <achsanh@gmail.com>
Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>
This commit is contained in:
Us3r-gitHub
2024-06-21 17:13:27 +07:00
committed by GitHub
parent 9228667a57
commit 7a0f097df4
2 changed files with 28 additions and 4 deletions

View File

@ -1,6 +1,6 @@
import { useTheme } from '@emotion/react';
import styled from '@emotion/styled';
import { useRecoilValue } from 'recoil';
import { useRecoilValue, useSetRecoilState } from 'recoil';
import {
IconChevronDown,
IconList,
@ -19,6 +19,7 @@ import { ViewPickerListContent } from '@/views/view-picker/components/ViewPicker
import { VIEW_PICKER_DROPDOWN_ID } from '@/views/view-picker/constants/ViewPickerDropdownId';
import { useViewPickerMode } from '@/views/view-picker/hooks/useViewPickerMode';
import { useViewPickerPersistView } from '@/views/view-picker/hooks/useViewPickerPersistView';
import { useViewPickerStates } from '@/views/view-picker/hooks/useViewPickerStates';
import { isDefined } from '~/utils/isDefined';
import { useViewStates } from '../../hooks/internal/useViewStates';
@ -52,6 +53,8 @@ export const ViewPickerDropdown = () => {
const { entityCountInCurrentViewState } = useViewStates();
const { viewPickerIsDirtyState } = useViewPickerStates();
const { currentViewWithCombinedFiltersAndSorts } = useGetCurrentView();
const { handleUpdate } = useViewPickerPersistView();
@ -60,6 +63,8 @@ export const ViewPickerDropdown = () => {
entityCountInCurrentViewState,
);
const setViewPickerIsDirty = useSetRecoilState(viewPickerIsDirtyState);
const { isDropdownOpen: isViewsListDropdownOpen } = useDropdown(
VIEW_PICKER_DROPDOWN_ID,
);
@ -70,6 +75,7 @@ export const ViewPickerDropdown = () => {
const CurrentViewIcon = getIcon(currentViewWithCombinedFiltersAndSorts?.icon);
const handleClickOutside = async () => {
setViewPickerIsDirty(false);
if (isViewsListDropdownOpen && viewPickerMode === 'edit') {
await handleUpdate();
}

View File

@ -1,16 +1,24 @@
import { useCallback } from 'react';
import { useNavigate } from 'react-router-dom';
import { useRecoilValue } from 'recoil';
import { useLocation, useNavigate } from 'react-router-dom';
import { useRecoilValue, useSetRecoilState } from 'recoil';
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
import { navigationMemorizedUrlState } from '@/ui/navigation/states/navigationMemorizedUrlState';
import { useViewStates } from '@/views/hooks/internal/useViewStates';
import { useViewPickerStates } from '@/views/view-picker/hooks/useViewPickerStates';
import { FieldMetadataType } from '~/generated-metadata/graphql';
export const useGetAvailableFieldsForKanban = () => {
const { viewObjectMetadataIdState } = useViewStates();
const { viewPickerIsDirtyState } = useViewPickerStates();
const viewObjectMetadataId = useRecoilValue(viewObjectMetadataIdState);
const objectMetadataItems = useRecoilValue(objectMetadataItemsState);
const setViewPickerIsDirty = useSetRecoilState(viewPickerIsDirtyState);
const setNavigationMemorizedUrl = useSetRecoilState(
navigationMemorizedUrlState,
);
const location = useLocation();
const objectMetadataItem = objectMetadataItems.find(
(objectMetadata) => objectMetadata.id === viewObjectMetadataId,
@ -24,8 +32,18 @@ export const useGetAvailableFieldsForKanban = () => {
const navigate = useNavigate();
const navigateToSelectSettings = useCallback(() => {
setViewPickerIsDirty(false);
setNavigationMemorizedUrl(location.pathname + location.search);
navigate(`/settings/objects/${objectMetadataItem?.namePlural}`);
}, [navigate, objectMetadataItem?.namePlural]);
}, [
navigate,
objectMetadataItem?.namePlural,
setViewPickerIsDirty,
setNavigationMemorizedUrl,
location,
]);
return {
availableFieldsForKanban,