feat: create default views on workspace creation + add views seed (#1313)
Closes #1311
This commit is contained in:
@ -96,7 +96,7 @@ export const TableViewsDropdownButton = ({
|
||||
|
||||
const handleViewSelect = useRecoilCallback(
|
||||
({ set, snapshot }) =>
|
||||
async (viewId?: string) => {
|
||||
async (viewId: string) => {
|
||||
const savedColumns = await snapshot.getPromise(
|
||||
savedTableColumnsScopedState(viewId),
|
||||
);
|
||||
@ -164,7 +164,7 @@ export const TableViewsDropdownButton = ({
|
||||
<StyledViewIcon size={theme.icon.size.md} />
|
||||
{currentView?.name || defaultViewName}{' '}
|
||||
<StyledDropdownLabelAdornments>
|
||||
· {views.length + 1} <IconChevronDown size={theme.icon.size.sm} />
|
||||
· {views.length} <IconChevronDown size={theme.icon.size.sm} />
|
||||
</StyledDropdownLabelAdornments>
|
||||
</>
|
||||
}
|
||||
@ -175,10 +175,6 @@ export const TableViewsDropdownButton = ({
|
||||
HotkeyScope={HotkeyScope}
|
||||
>
|
||||
<StyledDropdownMenuItemsContainer>
|
||||
<DropdownMenuItem onClick={() => handleViewSelect(undefined)}>
|
||||
<IconList size={theme.icon.size.md} />
|
||||
{defaultViewName}
|
||||
</DropdownMenuItem>
|
||||
{views.map((view) => (
|
||||
<DropdownMenuItem
|
||||
key={view.id}
|
||||
|
||||
@ -68,7 +68,7 @@ export const useTableViewFields = ({
|
||||
columns: ViewFieldDefinition<ViewFieldMetadata>[],
|
||||
viewId = currentViewId,
|
||||
) => {
|
||||
if (!columns.length) return;
|
||||
if (!viewId || !columns.length) return;
|
||||
|
||||
return createViewFieldsMutation({
|
||||
variables: {
|
||||
@ -84,7 +84,7 @@ export const useTableViewFields = ({
|
||||
|
||||
const updateViewFields = useCallback(
|
||||
(columns: ViewFieldDefinition<ViewFieldMetadata>[]) => {
|
||||
if (!columns.length) return;
|
||||
if (!currentViewId || !columns.length) return;
|
||||
|
||||
return Promise.all(
|
||||
columns.map((column) =>
|
||||
@ -100,10 +100,11 @@ export const useTableViewFields = ({
|
||||
),
|
||||
);
|
||||
},
|
||||
[updateViewFieldMutation],
|
||||
[currentViewId, updateViewFieldMutation],
|
||||
);
|
||||
|
||||
const { refetch } = useGetViewFieldsQuery({
|
||||
skip: !currentViewId,
|
||||
variables: {
|
||||
orderBy: { index: SortOrder.Asc },
|
||||
where: {
|
||||
@ -139,6 +140,8 @@ export const useTableViewFields = ({
|
||||
});
|
||||
|
||||
const persistColumns = useCallback(async () => {
|
||||
if (!currentViewId) return;
|
||||
|
||||
const viewFieldsToUpdate = columns.filter(
|
||||
(column) =>
|
||||
savedColumnsById[column.id] &&
|
||||
@ -148,7 +151,7 @@ export const useTableViewFields = ({
|
||||
await updateViewFields(viewFieldsToUpdate);
|
||||
|
||||
return refetch();
|
||||
}, [columns, refetch, savedColumnsById, updateViewFields]);
|
||||
}, [columns, currentViewId, refetch, savedColumnsById, updateViewFields]);
|
||||
|
||||
return { createViewFields, persistColumns };
|
||||
};
|
||||
|
||||
@ -2,6 +2,7 @@ import { useCallback } from 'react';
|
||||
|
||||
import { TableRecoilScopeContext } from '@/ui/table/states/recoil-scope-contexts/TableRecoilScopeContext';
|
||||
import {
|
||||
currentTableViewIdState,
|
||||
type TableView,
|
||||
tableViewsByIdState,
|
||||
tableViewsState,
|
||||
@ -24,6 +25,10 @@ export const useViews = ({
|
||||
objectId: 'company' | 'person';
|
||||
onViewCreate: (viewId: string) => Promise<void>;
|
||||
}) => {
|
||||
const [currentViewId, setCurrentViewId] = useRecoilScopedState(
|
||||
currentTableViewIdState,
|
||||
TableRecoilScopeContext,
|
||||
);
|
||||
const [views, setViews] = useRecoilScopedState(
|
||||
tableViewsState,
|
||||
TableRecoilScopeContext,
|
||||
@ -102,6 +107,8 @@ export const useViews = ({
|
||||
}));
|
||||
|
||||
if (!isDeeplyEqual(views, nextViews)) setViews(nextViews);
|
||||
|
||||
if (nextViews.length && !currentViewId) setCurrentViewId(nextViews[0].id);
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user