Skip to content

Commit cb614da

Browse files
committed
tryfix(OUT-2112): shifted clientDetailsAppBridge rendering from server component to sidebar
1 parent fa817dc commit cb614da

3 files changed

Lines changed: 25 additions & 20 deletions

File tree

src/app/detail/[task_id]/[user_type]/page.tsx

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -111,15 +111,6 @@ export default async function TaskDetailPage({
111111

112112
return (
113113
<DetailStateUpdate isRedirect={!!searchParams.isRedirect} token={token} tokenPayload={tokenPayload} task={task}>
114-
{params.user_type === UserType.CLIENT_USER && !getPreviewMode(tokenPayload) && (
115-
<ClientDetailAppBridge
116-
portalUrl={workspace.portalUrl}
117-
handleTaskComplete={async (workflowState) => {
118-
'use server'
119-
await clientUpdateTask(token, task_id, workflowState.id)
120-
}}
121-
/>
122-
)}
123114
<RealTime tokenPayload={tokenPayload}>
124115
<EscapeHandler />
125116
<ResponsiveStack>
@@ -212,6 +203,7 @@ export default async function TaskDetailPage({
212203
<Sidebar
213204
task_id={task_id}
214205
selectedAssigneeId={task?.assigneeId}
206+
userType={user_type}
215207
selectedWorkflowState={task?.workflowState}
216208
updateWorkflowState={async (workflowState) => {
217209
'use server'

src/app/detail/ui/ClientDetailAppBridge.tsx

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,35 +9,32 @@ import { useCallback, useEffect, useState } from 'react'
99
import { useSelector } from 'react-redux'
1010

1111
interface DetailAppBridgeProps {
12-
handleTaskComplete: (workflowState: WorkflowStateResponse) => void
12+
handleTaskComplete: () => void
13+
isTaskCompleted: boolean
1314
portalUrl?: string
1415
}
1516

16-
export const ClientDetailAppBridge = ({ handleTaskComplete, portalUrl }: DetailAppBridgeProps) => {
17-
const { activeTask, workflowStates } = useSelector(selectTaskBoard)
18-
const completedWorkflowState = workflowStates.find((state) => state.type === 'completed')
19-
const isTaskCompleted = activeTask?.workflowStateId === completedWorkflowState?.id
20-
21-
console.log(portalUrl)
22-
17+
export const ClientDetailAppBridge = ({ handleTaskComplete, isTaskCompleted, portalUrl }: DetailAppBridgeProps) => {
2318
const [awake, setAwake] = useState(false)
2419

20+
console.log(isTaskCompleted)
21+
2522
useEffect(() => {
2623
setTimeout(() => {
2724
setAwake(true)
2825
}, 0)
2926
}, [])
3027

3128
const handleMarkAsDone = useCallback(() => {
32-
completedWorkflowState && handleTaskComplete(completedWorkflowState)
29+
handleTaskComplete()
3330
// "awaken" callback using one more render to avoid hydration issues
3431
// eslint-disable-next-line react-hooks/exhaustive-deps
3532
}, [awake])
3633

3734
usePrimaryCta(
3835
{
3936
label: 'Mark as Done',
40-
icon: Icons.PLUS,
37+
icon: Icons.CHECK,
4138
onClick: handleMarkAsDone,
4239
},
4340
{ portalUrl },

src/app/detail/ui/Sidebar.tsx

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import store from '@/redux/store'
1818
import { DateStringSchema } from '@/types/date'
1919
import { UpdateTaskRequest } from '@/types/dto/tasks.dto'
2020
import { WorkflowStateResponse } from '@/types/dto/workflowStates.dto'
21-
import { IAssigneeCombined, InputValue, Sizes } from '@/types/interfaces'
21+
import { IAssigneeCombined, InputValue, Sizes, UserType } from '@/types/interfaces'
2222
import { getAssigneeId, getAssigneeName, getUserIds, UserIdsType } from '@/utils/assignee'
2323
import { createDateFromFormattedDateString, formatDate } from '@/utils/dateHelper'
2424
import { getSelectedUserIds, getSelectorAssignee, getSelectorAssigneeFromTask } from '@/utils/selector'
@@ -28,6 +28,7 @@ import { Box, Skeleton, Stack, styled, Typography } from '@mui/material'
2828
import { useEffect, useState } from 'react'
2929
import { useSelector } from 'react-redux'
3030
import { z } from 'zod'
31+
import { ClientDetailAppBridge } from '@/app/detail/ui/ClientDetailAppBridge'
3132

3233
const StyledText = styled(Typography)(({ theme }) => ({
3334
color: theme.color.gray[500],
@@ -41,6 +42,7 @@ export const Sidebar = ({
4142
updateTask,
4243
disabled,
4344
workflowDisabled,
45+
userType,
4446
}: {
4547
task_id: string
4648
selectedWorkflowState: WorkflowStateResponse
@@ -50,6 +52,7 @@ export const Sidebar = ({
5052
updateTask: (payload: UpdateTaskRequest) => void
5153
disabled: boolean
5254
workflowDisabled?: false
55+
userType: UserType
5356
}) => {
5457
const { activeTask, workflowStates, assignee, previewMode } = useSelector(selectTaskBoard)
5558
const { showSidebar, showConfirmAssignModal } = useSelector(selectTaskDetails)
@@ -74,6 +77,10 @@ export const Sidebar = ({
7477

7578
const statusValue = _statusValue as WorkflowStateResponse //typecasting
7679

80+
const completedWorkflowState = workflowStates.find((state) => state.type === 'completed')
81+
82+
const isTaskCompleted = activeTask?.workflowStateId === completedWorkflowState?.id
83+
7784
useEffect(() => {
7885
if (activeTask && workflowStates && updateStatusValue) {
7986
const currentTask = activeTask
@@ -406,6 +413,15 @@ export const Sidebar = ({
406413
title="Reassign task?"
407414
/>
408415
</StyledModal>
416+
{userType == UserType.CLIENT_USER && !previewMode && (
417+
<ClientDetailAppBridge
418+
isTaskCompleted={isTaskCompleted}
419+
handleTaskComplete={() => {
420+
completedWorkflowState && updateStatusValue(completedWorkflowState)
421+
completedWorkflowState && updateWorkflowState(completedWorkflowState)
422+
}}
423+
/>
424+
)}
409425
</Box>
410426
)
411427
}

0 commit comments

Comments
 (0)