import { useFormContext } from 'react-hook-form'; import { LayoutAnimation, View } from 'react-native'; import React, { useContext, useEffect, useCallback } from 'react'; import { SlackChannelsSelector } from './components'; import { useSlackSubmission } from './useSlackSubmission.hook'; import { useSlackChannels, useSlackSwitch } from './hooks'; import { SlackComponents as SlackComponentsEnum } from './Slack.types'; import { initSlackApi } from './slackApi.service'; import { Alert, Typography, GlobalProps, AttachmentAlert, IReportFormValues, SubmissionOrderEnum, } from '../../components'; export const useSlackIntegration = () => { const slackChannels = useSlackChannels(); const Switch = useSlackSwitch(); const { ts, isDone, isLoading, isAttaching, submitToSlack, } = useSlackSubmission(); const { slack } = useContext(GlobalProps); const { formState } = useFormContext(); const { watch } = useFormContext(); const isEnabled = watch('slackSwitch'); const order = slack?.order || [ SlackComponentsEnum.SlackSwitch, SlackComponentsEnum.SlackChannelsSelector, ]; useEffect(() => { if (!slack) return; initSlackApi(slack); }, [slack]); useEffect(() => { LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut); }, [isEnabled]); const components = { [SlackComponentsEnum.SlackSwitch]: Switch, [SlackComponentsEnum.SlackChannelsSelector]: isEnabled && ( ), }; const slackComponents = useCallback( (ref: any) => {order.map((key) => components[key])}, [components] ); const slackConfirmationComponents = ts && ( <> Slack message sent ); const slackFailureComponents = ts && formState.isSubmitted && ( ); const handleSubmit = isEnabled ? submitToSlack : null; return { submitToSlack: handleSubmit, slackComponents, slackFailureComponents, isSlackEnabled: isEnabled, isSlackLoading: isLoading, isSlackUploadDone: isDone, slackConfirmationComponents: { [SubmissionOrderEnum.Slack]: slackConfirmationComponents, }, }; };