feat: persist view filters and sorts on Update View button click (#1290)

* feat: add viewFilters table

Closes #1121

* feat: add Update View button + Create View dropdown

Closes #1124, #1289

* feat: add View Filter resolvers

* feat: persist view filters and sorts on Update View button click

Closes #1123

* refactor: code review

- Rename recoil selectors
- Rename filters `field` property to `key`
This commit is contained in:
Thaïs
2023-08-23 18:20:43 +02:00
committed by GitHub
parent 76246ec880
commit 74ab0142c7
54 changed files with 1331 additions and 277 deletions

View File

@ -3,47 +3,49 @@ import { Injectable } from '@nestjs/common';
import { PureAbility, AbilityBuilder } from '@casl/ability';
import { createPrismaAbility, PrismaQuery, Subjects } from '@casl/prisma';
import {
Attachment,
Activity,
Company,
ActivityTarget,
Attachment,
Comment,
Company,
Favorite,
Person,
Pipeline,
PipelineProgress,
PipelineStage,
RefreshToken,
User,
Workspace,
WorkspaceMember,
ActivityTarget,
Pipeline,
PipelineStage,
PipelineProgress,
UserSettings,
View,
ViewField,
Favorite,
ViewFilter,
ViewSort,
Workspace,
WorkspaceMember,
} from '@prisma/client';
import { AbilityAction } from './ability.action';
type SubjectsAbility = Subjects<{
User: User;
Workspace: Workspace;
WorkspaceMember: WorkspaceMember;
Company: Company;
Person: Person;
RefreshToken: RefreshToken;
Activity: Activity;
Comment: Comment;
ActivityTarget: ActivityTarget;
Pipeline: Pipeline;
PipelineStage: PipelineStage;
PipelineProgress: PipelineProgress;
Attachment: Attachment;
Comment: Comment;
Company: Company;
Favorite: Favorite;
Person: Person;
Pipeline: Pipeline;
PipelineProgress: PipelineProgress;
PipelineStage: PipelineStage;
RefreshToken: RefreshToken;
User: User;
UserSettings: UserSettings;
View: View;
ViewField: ViewField;
Favorite: Favorite;
ViewFilter: ViewFilter;
ViewSort: ViewSort;
Workspace: Workspace;
WorkspaceMember: WorkspaceMember;
}>;
export type AppAbility = PureAbility<
@ -147,10 +149,11 @@ export class AbilityFactory {
can(AbilityAction.Create, 'ViewField', { workspaceId: workspace.id });
can(AbilityAction.Update, 'ViewField', { workspaceId: workspace.id });
//Favorite
can(AbilityAction.Read, 'Favorite', { workspaceId: workspace.id });
can(AbilityAction.Create, 'Favorite');
can(AbilityAction.Delete, 'Favorite', { workspaceId: workspace.id });
// ViewFilter
can(AbilityAction.Read, 'ViewFilter', { workspaceId: workspace.id });
can(AbilityAction.Create, 'ViewFilter', { workspaceId: workspace.id });
can(AbilityAction.Update, 'ViewFilter', { workspaceId: workspace.id });
can(AbilityAction.Delete, 'ViewFilter', { workspaceId: workspace.id });
// ViewSort
can(AbilityAction.Read, 'ViewSort', { workspaceId: workspace.id });
@ -158,6 +161,11 @@ export class AbilityFactory {
can(AbilityAction.Update, 'ViewSort', { workspaceId: workspace.id });
can(AbilityAction.Delete, 'ViewSort', { workspaceId: workspace.id });
// Favorite
can(AbilityAction.Read, 'Favorite', { workspaceId: workspace.id });
can(AbilityAction.Create, 'Favorite');
can(AbilityAction.Delete, 'Favorite', { workspaceId: workspace.id });
return build();
}
}