( threadInfos: $ReadOnlyArray<ThreadInfo>, permission: ThreadPermission, )
| 175 | } |
| 176 | |
| 177 | function useThreadsWithPermission( |
| 178 | threadInfos: $ReadOnlyArray<ThreadInfo>, |
| 179 | permission: ThreadPermission, |
| 180 | ): $ReadOnlyArray<ThreadInfo> { |
| 181 | const loggedInUserInfo = useLoggedInUserInfo(); |
| 182 | const userInfos = useSelector(state => state.userStore.userInfos); |
| 183 | |
| 184 | return React.useMemo(() => { |
| 185 | return threadInfos.filter((threadInfo: ThreadInfo) => { |
| 186 | const canBeFrozen = threadSpecs[threadInfo.type] |
| 187 | .protocol() |
| 188 | .canBeFrozen(threadInfo); |
| 189 | if (!canBeFrozen || !loggedInUserInfo) { |
| 190 | return hasPermission(threadInfo.currentUser.permissions, permission); |
| 191 | } |
| 192 | |
| 193 | const threadFrozen = threadIsWithBlockedUserOnlyWithoutAdminRoleCheck( |
| 194 | threadInfo, |
| 195 | loggedInUserInfo.id, |
| 196 | userInfos, |
| 197 | false, |
| 198 | ); |
| 199 | |
| 200 | const permissions = threadFrozen |
| 201 | ? filterOutDisabledPermissions(threadInfo.currentUser.permissions) |
| 202 | : threadInfo.currentUser.permissions; |
| 203 | |
| 204 | return hasPermission(permissions, permission); |
| 205 | }); |
| 206 | }, [threadInfos, loggedInUserInfo, userInfos, permission]); |
| 207 | } |
| 208 | |
| 209 | function useThreadHasPermission( |
| 210 | threadInfo: ?ThreadInfo, |
no test coverage detected