1
1
"use client" ;
2
2
3
- import { FC , useMemo , useState } from "react" ;
3
+ import { FC , useMemo } from "react" ;
4
4
import { observer } from "mobx-react" ;
5
+ import { useLocalStorage } from "@plane/hooks" ;
5
6
// types
6
7
import { TFileSignedURLResponse , TIssueComment } from "@plane/types" ;
7
8
import { EFileAssetType } from "@plane/types/src/enums" ;
@@ -10,6 +11,8 @@ import { TOAST_TYPE, setToast } from "@plane/ui";
10
11
// components
11
12
import { IssueCommentCreate } from "@/components/issues" ;
12
13
import { ActivitySortRoot , IssueActivityCommentRoot } from "@/components/issues/issue-detail" ;
14
+ // constants
15
+ import { TSORT_ORDER } from "@/constants/common" ;
13
16
// hooks
14
17
import { useIssueDetail , useProject , useUser , useUserPermissions } from "@/hooks/store" ;
15
18
// plane web components
@@ -38,12 +41,14 @@ export type TActivityOperations = {
38
41
39
42
export const IssueActivity : FC < TIssueActivity > = observer ( ( props ) => {
40
43
const { workspaceSlug, projectId, issueId, disabled = false , isIntakeIssue = false } = props ;
41
- // state
42
- const [ selectedFilters , setSelectedFilters ] = useState < TActivityFilters [ ] > ( defaultActivityFilters ) ;
43
44
// hooks
45
+ const { setValue : setFilterValue , storedValue : selectedFilters } = useLocalStorage (
46
+ "issue_activity_filters" ,
47
+ defaultActivityFilters
48
+ ) ;
49
+ const { setValue : setSortOrder , storedValue : sortOrder } = useLocalStorage ( "activity_sort_order" , TSORT_ORDER . ASC ) ;
44
50
const {
45
51
issue : { getIssueById } ,
46
- activity : { sortOrder, toggleSortOrder } ,
47
52
createComment,
48
53
updateComment,
49
54
removeComment,
@@ -60,14 +65,20 @@ export const IssueActivity: FC<TIssueActivity> = observer((props) => {
60
65
const isWorklogButtonEnabled = ! isIntakeIssue && ! isGuest && ( isAdmin || isAssigned ) ;
61
66
// toggle filter
62
67
const toggleFilter = ( filter : TActivityFilters ) => {
63
- setSelectedFilters ( ( prevFilters ) => {
64
- if ( prevFilters . includes ( filter ) ) {
65
- if ( prevFilters . length === 1 ) return prevFilters ; // Ensure at least one filter is applied
66
- return prevFilters . filter ( ( f ) => f !== filter ) ;
67
- } else {
68
- return [ ...prevFilters , filter ] ;
69
- }
70
- } ) ;
68
+ if ( ! selectedFilters ) return ;
69
+ let _filters = [ ] ;
70
+ if ( selectedFilters . includes ( filter ) ) {
71
+ if ( selectedFilters . length === 1 ) return selectedFilters ; // Ensure at least one filter is applied
72
+ _filters = selectedFilters . filter ( ( f ) => f !== filter ) ;
73
+ } else {
74
+ _filters = [ ...selectedFilters , filter ] ;
75
+ }
76
+
77
+ setFilterValue ( _filters ) ;
78
+ } ;
79
+
80
+ const toggleSortOrder = ( ) => {
81
+ setSortOrder ( sortOrder === TSORT_ORDER . ASC ? TSORT_ORDER . DESC : TSORT_ORDER . ASC ) ;
71
82
} ;
72
83
73
84
const activityOperations : TActivityOperations = useMemo (
@@ -163,9 +174,9 @@ export const IssueActivity: FC<TIssueActivity> = observer((props) => {
163
174
disabled = { disabled }
164
175
/>
165
176
) }
166
- < ActivitySortRoot sortOrder = { sortOrder } toggleSort = { toggleSortOrder } />
177
+ < ActivitySortRoot sortOrder = { sortOrder || TSORT_ORDER . ASC } toggleSort = { toggleSortOrder } />
167
178
< ActivityFilterRoot
168
- selectedFilters = { selectedFilters }
179
+ selectedFilters = { selectedFilters || defaultActivityFilters }
169
180
toggleFilter = { toggleFilter }
170
181
isIntakeIssue = { isIntakeIssue }
171
182
projectId = { projectId }
@@ -181,10 +192,11 @@ export const IssueActivity: FC<TIssueActivity> = observer((props) => {
181
192
projectId = { projectId }
182
193
workspaceSlug = { workspaceSlug }
183
194
issueId = { issueId }
184
- selectedFilters = { selectedFilters }
195
+ selectedFilters = { selectedFilters || defaultActivityFilters }
185
196
activityOperations = { activityOperations }
186
197
showAccessSpecifier = { ! ! project . anchor }
187
198
disabled = { disabled }
199
+ sortOrder = { sortOrder || TSORT_ORDER . ASC }
188
200
/>
189
201
{ ! disabled && (
190
202
< IssueCommentCreate
0 commit comments