Fix view deletion (#2314)
* fix view deletion * fix view deletion bugs * improve code readability
This commit is contained in:
@ -41,6 +41,7 @@ export const ViewBarEffect = () => {
|
|||||||
} = useView();
|
} = useView();
|
||||||
|
|
||||||
const [searchParams] = useSearchParams();
|
const [searchParams] = useSearchParams();
|
||||||
|
const currentViewIdFromUrl = searchParams.get('view');
|
||||||
|
|
||||||
const { viewType, viewObjectId } = useViewGetStates(viewScopeId);
|
const { viewType, viewObjectId } = useViewGetStates(viewScopeId);
|
||||||
|
|
||||||
@ -63,7 +64,7 @@ export const ViewBarEffect = () => {
|
|||||||
|
|
||||||
if (!nextViews.length) return;
|
if (!nextViews.length) return;
|
||||||
|
|
||||||
if (!currentViewId) return changeViewInUrl(nextViews[0].id);
|
if (!currentViewIdFromUrl) return changeViewInUrl(nextViews[0].id);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
});
|
});
|
||||||
@ -223,8 +224,6 @@ export const ViewBarEffect = () => {
|
|||||||
),
|
),
|
||||||
});
|
});
|
||||||
|
|
||||||
const currentViewIdFromUrl = searchParams.get('view');
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!currentViewIdFromUrl) return;
|
if (!currentViewIdFromUrl) return;
|
||||||
loadView(currentViewIdFromUrl);
|
loadView(currentViewIdFromUrl);
|
||||||
|
|||||||
@ -77,11 +77,11 @@ export const useViewSorts = (viewScopeId: string) => {
|
|||||||
if (!viewSortIdsToDelete.length) return;
|
if (!viewSortIdsToDelete.length) return;
|
||||||
|
|
||||||
return Promise.all(
|
return Promise.all(
|
||||||
viewSortIdsToDelete.map((viewFilterId) =>
|
viewSortIdsToDelete.map((viewSortId) =>
|
||||||
apolloClient.mutate({
|
apolloClient.mutate({
|
||||||
mutation: deleteOneMutation,
|
mutation: deleteOneMutation,
|
||||||
variables: {
|
variables: {
|
||||||
idToDelete: viewFilterId,
|
idToDelete: viewSortId,
|
||||||
},
|
},
|
||||||
}),
|
}),
|
||||||
),
|
),
|
||||||
|
|||||||
@ -7,10 +7,14 @@ import { viewTypeScopedState } from '@/views/states/viewTypeScopedState';
|
|||||||
import { View } from '@/views/types/View';
|
import { View } from '@/views/types/View';
|
||||||
|
|
||||||
export const useViews = (scopeId: string) => {
|
export const useViews = (scopeId: string) => {
|
||||||
const { updateOneMutation, createOneMutation, findManyQuery } =
|
const {
|
||||||
useFindOneObjectMetadataItem({
|
updateOneMutation,
|
||||||
objectNameSingular: 'viewV2',
|
createOneMutation,
|
||||||
});
|
deleteOneMutation,
|
||||||
|
findManyQuery,
|
||||||
|
} = useFindOneObjectMetadataItem({
|
||||||
|
objectNameSingular: 'viewV2',
|
||||||
|
});
|
||||||
const apolloClient = useApolloClient();
|
const apolloClient = useApolloClient();
|
||||||
|
|
||||||
const createView = useRecoilCallback(
|
const createView = useRecoilCallback(
|
||||||
@ -54,11 +58,14 @@ export const useViews = (scopeId: string) => {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
const deleteView = async (_viewId: string) => {
|
const deleteView = async (viewId: string) => {
|
||||||
// await deleteViewMutation({
|
await apolloClient.mutate({
|
||||||
// variables: { where: { id: viewId } },
|
mutation: deleteOneMutation,
|
||||||
// refetchQueries: [getOperationName(GET_VIEWS) ?? ''],
|
variables: {
|
||||||
// });
|
idToDelete: viewId,
|
||||||
|
},
|
||||||
|
refetchQueries: [findManyQuery],
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|||||||
@ -227,20 +227,22 @@ export const useView = (props?: UseViewProps) => {
|
|||||||
|
|
||||||
const removeView = useRecoilCallback(
|
const removeView = useRecoilCallback(
|
||||||
({ set, snapshot }) =>
|
({ set, snapshot }) =>
|
||||||
async (viewId: string) => {
|
async (viewIdToDelete: string) => {
|
||||||
const currentViewId = await snapshot.getPromise(
|
const currentViewId = await snapshot.getPromise(
|
||||||
currentViewIdScopedState({ scopeId }),
|
currentViewIdScopedState({ scopeId }),
|
||||||
);
|
);
|
||||||
|
|
||||||
if (currentViewId === viewId)
|
if (currentViewId === viewIdToDelete)
|
||||||
set(currentViewIdScopedState({ scopeId }), undefined);
|
set(currentViewIdScopedState({ scopeId }), undefined);
|
||||||
|
|
||||||
set(viewsScopedState({ scopeId }), (previousViews) =>
|
set(viewsScopedState({ scopeId }), (previousViews) =>
|
||||||
previousViews.filter((view) => view.id !== viewId),
|
previousViews.filter((view) => view.id !== viewIdToDelete),
|
||||||
);
|
);
|
||||||
internalDeleteView(viewId);
|
internalDeleteView(viewIdToDelete);
|
||||||
|
|
||||||
|
if (currentViewId === viewIdToDelete) setSearchParams();
|
||||||
},
|
},
|
||||||
[internalDeleteView, scopeId],
|
[internalDeleteView, scopeId, setSearchParams],
|
||||||
);
|
);
|
||||||
|
|
||||||
const handleViewNameSubmit = useRecoilCallback(
|
const handleViewNameSubmit = useRecoilCallback(
|
||||||
|
|||||||
Reference in New Issue
Block a user