mirror of
https://github.com/lingble/twenty.git
synced 2025-11-03 14:17:58 +00:00
* Handled new url v2 type * Fixed refetch queries * wip * Ok delete but views bug * Fix lint --------- Co-authored-by: Charles Bochet <charles@twenty.com>
82 lines
2.6 KiB
TypeScript
82 lines
2.6 KiB
TypeScript
import { useSearchParams } from 'react-router-dom';
|
|
|
|
import { TableRecoilScopeContext } from '@/ui/data/data-table/states/recoil-scope-contexts/TableRecoilScopeContext';
|
|
import { tableColumnsScopedState } from '@/ui/data/data-table/states/tableColumnsScopedState';
|
|
import { filtersScopedState } from '@/ui/data/view-bar/states/filtersScopedState';
|
|
import { sortsScopedState } from '@/ui/data/view-bar/states/sortsScopedState';
|
|
import { useRecoilScopedValue } from '@/ui/utilities/recoil-scope/hooks/useRecoilScopedValue';
|
|
import { useTableViewFields } from '@/views/hooks/useTableViewFields';
|
|
import { useViewFilters } from '@/views/hooks/useViewFilters';
|
|
import { useViews } from '@/views/hooks/useViews';
|
|
import { useViewSorts } from '@/views/hooks/useViewSorts';
|
|
import { ViewType } from '~/generated/graphql';
|
|
|
|
import { useMetadataObjectInContext } from './useMetadataObjectInContext';
|
|
|
|
export const useMetadataTableViews = () => {
|
|
const { objectNamePlural, columnDefinitions } = useMetadataObjectInContext();
|
|
|
|
const tableColumns = useRecoilScopedValue(
|
|
tableColumnsScopedState,
|
|
TableRecoilScopeContext,
|
|
);
|
|
const filters = useRecoilScopedValue(
|
|
filtersScopedState,
|
|
TableRecoilScopeContext,
|
|
);
|
|
const sorts = useRecoilScopedValue(sortsScopedState, TableRecoilScopeContext);
|
|
|
|
const [_, setSearchParams] = useSearchParams();
|
|
|
|
const handleViewCreate = async (viewId: string) => {
|
|
await createViewFields(tableColumns, viewId);
|
|
await createViewFilters(filters, viewId);
|
|
await createViewSorts(sorts, viewId);
|
|
setSearchParams({ view: viewId });
|
|
};
|
|
|
|
const objectId = objectNamePlural;
|
|
|
|
const { createView, deleteView, isFetchingViews, updateView } = useViews({
|
|
objectId,
|
|
onViewCreate: handleViewCreate,
|
|
type: ViewType.Table,
|
|
RecoilScopeContext: TableRecoilScopeContext,
|
|
});
|
|
|
|
const { createViewFields, persistColumns } = useTableViewFields({
|
|
objectId,
|
|
columnDefinitions,
|
|
skipFetch: isFetchingViews,
|
|
});
|
|
|
|
const createDefaultViewFields = async () => {
|
|
await createViewFields(tableColumns);
|
|
};
|
|
|
|
const { createViewFilters, persistFilters } = useViewFilters({
|
|
RecoilScopeContext: TableRecoilScopeContext,
|
|
skipFetch: isFetchingViews,
|
|
});
|
|
|
|
const { createViewSorts, persistSorts } = useViewSorts({
|
|
RecoilScopeContext: TableRecoilScopeContext,
|
|
skipFetch: isFetchingViews,
|
|
});
|
|
|
|
const submitCurrentView = async () => {
|
|
await persistFilters();
|
|
await persistSorts();
|
|
};
|
|
|
|
return {
|
|
createView,
|
|
deleteView,
|
|
persistColumns,
|
|
submitCurrentView,
|
|
updateView,
|
|
createDefaultViewFields,
|
|
isFetchingViews,
|
|
};
|
|
};
|