feat: create default views on workspace creation + add views seed (#1313)

Closes #1311
This commit is contained in:
Thaïs
2023-08-25 21:17:28 +02:00
committed by GitHub
parent 8a3a176571
commit 209e8b64d9
11 changed files with 356 additions and 16 deletions

View File

@ -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}

View File

@ -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 };
};

View File

@ -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);
},
});