plane/apps/app/hooks/use-inbox-view.tsx
pablohashescobar e9a0eb87cc
feat: inbox (#1023)
* dev: initialize inbox

* dev: inbox and inbox issues models, views and serializers

* dev: issue object filter for inbox

* dev: filter for search issues

* dev: inbox snooze and duplicates

* dev: set duplicate to null by default

* feat: inbox ui and services

* feat: project detail in inbox

* style: layout, popover, icons, sidebar

* dev: default inbox for project and pending issues count

* dev: fix exception when creating default inbox

* fix: empty state for inbox

* dev: auto issue state updation when rejected or marked duplicate

* fix: inbox update status

* fix: hydrating chose with old values

filters workflow

* feat: inbox issue filtering

* fix: issue inbox filtering

* feat: filter inbox issues

* refactor: analytics, border colors

* dev: filters and views for inbox

* dev: source for inboxissue and update list inbox issue

* dev: update list endpoint to house filters and additional data

* dev: bridge id for list

* dev: remove print logs

* dev: update inbox issue workflow

* dev: add description_html in issue details

* fix: inbox track event auth, chore: inbox issue action authorization

* fix: removed unnecessary api calls

* style: viewed issues

* fix: priority validation

* dev: remove print logs

* dev: update issue inbox update workflow

* chore: added inbox view context

* fix: type errors

* fix: build errors and warnings

* dev: update issue inbox workflow and log all the changes

* fix: filters logic, sidebar fields to show

* dev: update issue filtering status

* chore: update create inbox issue modal, fix: mutation issues

* dev: update issue accept workflow

* chore: add comment to inbox issues

* chore: remove inboxIssueId from url after deleting

* dev: update the issue triage workflow

* fix: mutation after issue status change

* chore: issue details sidebar divider

* fix: issue activity for inbox issues

* dev: update inbox perrmissions

* dev: create new permission layer

* chore: auth layer for inbox

* chore: show accepting status

* chore: show issue status at the top of issue details

---------

Co-authored-by: Dakshesh Jain <dakshesh.jain14@gmail.com>
Co-authored-by: gurusainath <gurusainath007@gmail.com>
Co-authored-by: Aaryan Khandelwal <aaryankhandu123@gmail.com>
2023-06-16 18:57:17 +05:30

61 lines
1.6 KiB
TypeScript

import { useContext } from "react";
import { useRouter } from "next/router";
import useSWR from "swr";
// contexts
import { inboxViewContext } from "contexts/inbox-view-context";
// services
import inboxServices from "services/inbox.service";
// types
import { IInboxQueryParams } from "types";
// fetch-keys
import { INBOX_ISSUES } from "constants/fetch-keys";
const useInboxView = () => {
const { filters, setFilters } = useContext(inboxViewContext);
const router = useRouter();
const { workspaceSlug, projectId, inboxId } = router.query;
const params: IInboxQueryParams = {
priority: filters?.priority ? filters?.priority.join(",") : null,
inbox_status: filters?.inbox_status ? filters?.inbox_status.join(",") : null,
};
const { data: inboxIssues, mutate: mutateInboxIssues } = useSWR(
workspaceSlug && projectId && inboxId && params
? INBOX_ISSUES(inboxId.toString(), params)
: null,
workspaceSlug && projectId && inboxId && params
? () =>
inboxServices.getInboxIssues(
workspaceSlug.toString(),
projectId.toString(),
inboxId.toString(),
params
)
: null
);
let filtersLength = 0;
Object.keys(filters ?? {}).forEach((key) => {
const filterKey = key as keyof typeof filters;
if (filters[filterKey] && Array.isArray(filters[filterKey]))
filtersLength += (filters[filterKey] ?? []).length;
});
return {
filters,
setFilters,
params,
issues: inboxIssues,
mutate: mutateInboxIssues,
filtersLength,
} as const;
};
export default useInboxView;