Skip to content

Commit

Permalink
bug: M2-5260 Fixed default answers for hidden activities, removing co…
Browse files Browse the repository at this point in the history
…nditionally hidden item answers dynamically
  • Loading branch information
vmkhitaryanscn committed Feb 15, 2024
1 parent 7986acd commit 890d550
Show file tree
Hide file tree
Showing 6 changed files with 39 additions and 12 deletions.
1 change: 1 addition & 0 deletions src/entities/activity/lib/types/item.ts
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ export interface ActivityItemBase {
answer: Answer
additionalText?: string | null
conditionalLogic: ConditionalLogic | null
isHidden: boolean
}

export type Config =
Expand Down
8 changes: 3 additions & 5 deletions src/entities/applet/model/hooks/useActivityProgress.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,9 @@ export const useActivityProgress = () => {
splashScreenItem = mapSplashScreenToRecord(props.activity.splashScreen)
}

const preparedActivityItemProgressRecords = props.activity.items
.filter(x => !x.isHidden)
.map(item => {
return mapItemToRecord(item)
})
const preparedActivityItemProgressRecords = props.activity.items.map(item => {
return mapItemToRecord(item)
})

const items = splashScreenItem
? [splashScreenItem, ...preparedActivityItemProgressRecords]
Expand Down
8 changes: 8 additions & 0 deletions src/entities/applet/model/hooks/useSaveActivityItemAnswer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,16 @@ export const useSaveItemAnswer = ({ activityId, eventId }: Props) => {
[dispatch, activityId, eventId],
)

const removeItemAnswer = useCallback(
(itemId: string) => {
saveItemAnswer(itemId, [])
},
[saveItemAdditionalText, saveItemAnswer],
)

return {
saveItemAnswer,
saveItemAdditionalText,
removeItemAnswer,
}
}
1 change: 1 addition & 0 deletions src/entities/applet/model/mapper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,5 +59,6 @@ export function mapSplashScreenToRecord(splashScreen: string): ItemRecord {
responseValues: null,
answer: [],
conditionalLogic: null,
isHidden: false,
}
}
16 changes: 12 additions & 4 deletions src/widgets/ActivityDetails/model/hooks/useSurvey.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,14 @@ import { appletModel } from "~/entities/applet"
export const useSurvey = (activityProgress: appletModel.ActivityProgress) => {
const items = useMemo(() => activityProgress?.items ?? [], [activityProgress.items])

const processedItems = appletModel.conditionalLogicBuilder.process(items)
const visibleItems = items.filter(x => !x.isHidden)

const processedItems = appletModel.conditionalLogicBuilder.process(visibleItems)

const visibleItemIds = visibleItems.map(x => x.id)
const processedItemIds = processedItems.map(x => x.id)

const conditionallyHiddenItemIds = visibleItemIds.filter(id => !processedItemIds.includes(id))

const step = activityProgress?.step ?? 0

Expand All @@ -18,15 +25,16 @@ export const useSurvey = (activityProgress: appletModel.ActivityProgress) => {
const progress = useMemo(() => {
const defaultProgressPercentage = 0

if (!items) {
if (!visibleItems) {
return defaultProgressPercentage
}

return ((step + 1) / items.length) * 100
}, [items, step])
return ((step + 1) / visibleItems.length) * 100
}, [visibleItems, step])

return {
item,
conditionallyHiddenItemIds,

hasNextStep,
hasPrevStep,
Expand Down
17 changes: 14 additions & 3 deletions src/widgets/ActivityDetails/ui/AssessmentPassingScreen.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -58,12 +58,12 @@ export const AssessmentPassingScreen = (props: Props) => {
eventId,
})

const { saveItemAnswer, saveItemAdditionalText } = appletModel.hooks.useSaveItemAnswer({
const { saveItemAnswer, saveItemAdditionalText, removeItemAnswer } = appletModel.hooks.useSaveItemAnswer({
activityId,
eventId,
})

const { step, item, hasPrevStep, hasNextStep, progress } = useSurvey(activityProgress)
const { step, item, hasPrevStep, hasNextStep, progress, conditionallyHiddenItemIds } = useSurvey(activityProgress)

const canGoBack = !item?.config.removeBackButton && props.activityDetails.responseIsEditable

Expand Down Expand Up @@ -149,12 +149,23 @@ export const AssessmentPassingScreen = (props: Props) => {
return
}

conditionallyHiddenItemIds?.forEach(id => removeItemAnswer(id))

if (!hasNextStep) {
return setIsModalOpen(true)
}

return onNext()
}, [hasNextStep, item, onNext, props.activityDetails, showWarningNotification, t])
}, [
conditionallyHiddenItemIds,
removeItemAnswer,
hasNextStep,
item,
onNext,
props.activityDetails,
showWarningNotification,
t,
])

const onItemValueChange = (value: string[]) => {
saveItemAnswer(item.id, value)
Expand Down

0 comments on commit 890d550

Please sign in to comment.