feat: create default opportunities view on workspace creation + add seed data (#1461)

Closes #1314
This commit is contained in:
Thaïs
2023-09-06 12:05:33 +02:00
committed by GitHub
parent 08b56ec7e2
commit 5c7660f588
8 changed files with 106 additions and 30 deletions

View File

@ -1,10 +1,7 @@
import { useCallback } from 'react';
import { useRecoilValue, useSetRecoilState } from 'recoil';
import type {
ViewFieldMetadata,
ViewFieldTextMetadata,
} from '@/ui/editable-field/types/ViewField';
import type { ViewFieldMetadata } from '@/ui/editable-field/types/ViewField';
import { availableTableColumnsScopedState } from '@/ui/table/states/availableTableColumnsScopedState';
import { TableRecoilScopeContext } from '@/ui/table/states/recoil-scope-contexts/TableRecoilScopeContext';
import { savedTableColumnsScopedState } from '@/ui/table/states/savedTableColumnsScopedState';
@ -20,14 +17,9 @@ import {
useGetViewFieldsQuery,
useUpdateViewFieldMutation,
} from '~/generated/graphql';
import { assertNotNull } from '~/utils/assert';
import { isDeeplyEqual } from '~/utils/isDeeplyEqual';
const DEFAULT_VIEW_FIELD_METADATA: ViewFieldTextMetadata = {
type: 'text',
placeHolder: '',
fieldName: '',
};
const toViewFieldInput = (
objectId: 'company' | 'person',
fieldDefinition: ColumnDefinition<ViewFieldMetadata>,
@ -119,7 +111,6 @@ export const useTableViewFields = ({
variables: {
orderBy: { index: SortOrder.Asc },
where: {
objectId: { equals: objectId },
viewId: { equals: currentTableViewId },
},
},
@ -130,18 +121,24 @@ export const useTableViewFields = ({
return refetch();
}
const nextColumns = data.viewFields.map<
ColumnDefinition<ViewFieldMetadata>
>((viewField) => ({
...(columnDefinitions.find(({ key }) => viewField.key === key) || {
metadata: DEFAULT_VIEW_FIELD_METADATA,
}),
key: viewField.key,
name: viewField.name,
index: viewField.index,
size: viewField.size,
isVisible: viewField.isVisible,
}));
const nextColumns = data.viewFields
.map<ColumnDefinition<ViewFieldMetadata> | null>((viewField) => {
const columnDefinition = columnDefinitions.find(
({ key }) => viewField.key === key,
);
return columnDefinition
? {
...columnDefinition,
key: viewField.key,
name: viewField.name,
index: viewField.index,
size: viewField.size ?? columnDefinition.size,
isVisible: viewField.isVisible,
}
: null;
})
.filter<ColumnDefinition<ViewFieldMetadata>>(assertNotNull);
if (!isDeeplyEqual(tableColumns, nextColumns)) {
setSavedTableColumns(nextColumns);

View File

@ -10,6 +10,7 @@ import { tableColumnsScopedState } from '@/ui/table/states/tableColumnsScopedSta
import { currentTableViewIdState } from '@/ui/table/states/tableViewsState';
import type { ColumnDefinition } from '@/ui/table/types/ColumnDefinition';
import { useRecoilScopedValue } from '@/ui/utilities/recoil-scope/hooks/useRecoilScopedValue';
import { ViewType } from '~/generated/graphql';
import { useTableViewFields } from './useTableViewFields';
import { useViewFilters } from './useViewFilters';
@ -44,6 +45,7 @@ export const useTableViews = <Entity, SortField>({
const { handleViewsChange, isFetchingViews } = useViews({
objectId,
onViewCreate: handleViewCreate,
type: ViewType.Table,
});
const { createViewFields, persistColumns } = useTableViewFields({
objectId,

View File

@ -24,9 +24,11 @@ import { isDeeplyEqual } from '~/utils/isDeeplyEqual';
export const useViews = ({
objectId,
onViewCreate,
type,
}: {
objectId: 'company' | 'person';
onViewCreate: (viewId: string) => Promise<void>;
type: ViewType;
}) => {
const [currentTableViewId, setCurrentTableViewId] = useRecoilScopedState(
currentTableViewIdState,
@ -86,6 +88,7 @@ export const useViews = ({
variables: {
where: {
objectId: { equals: objectId },
type: { equals: type },
},
},
onCompleted: (data) => {