refactor: Migrate quick actions to hooks (#29948)
parent
3d039db6af
commit
0187ef0a4b
@ -0,0 +1,16 @@ |
||||
import { useMemo } from 'react'; |
||||
|
||||
import { QuickActionsEnum, type QuickActionsActionConfig } from '../../views/room/lib/quickActions'; |
||||
|
||||
export const useChatForwardQuickAction = (): QuickActionsActionConfig => { |
||||
return useMemo( |
||||
() => ({ |
||||
groups: ['live'], |
||||
id: QuickActionsEnum.ChatForward, |
||||
title: 'Forward_chat', |
||||
icon: 'balloon-arrow-top-right', |
||||
order: 2, |
||||
}), |
||||
[], |
||||
); |
||||
}; |
||||
@ -0,0 +1,17 @@ |
||||
import { useMemo } from 'react'; |
||||
|
||||
import { QuickActionsEnum, type QuickActionsActionConfig } from '../../views/room/lib/quickActions'; |
||||
|
||||
export const useCloseChatQuickAction = (): QuickActionsActionConfig => { |
||||
return useMemo( |
||||
() => ({ |
||||
groups: ['live'], |
||||
id: QuickActionsEnum.CloseChat, |
||||
title: 'End_conversation', |
||||
icon: 'balloon-close-top-right', |
||||
order: 5, |
||||
color: 'danger', |
||||
}), |
||||
[], |
||||
); |
||||
}; |
||||
@ -0,0 +1,16 @@ |
||||
import { useMemo } from 'react'; |
||||
|
||||
import { QuickActionsEnum, type QuickActionsActionConfig } from '../../views/room/lib/quickActions'; |
||||
|
||||
export const useMoveQueueQuickAction = (): QuickActionsActionConfig => { |
||||
return useMemo( |
||||
() => ({ |
||||
groups: ['live'], |
||||
id: QuickActionsEnum.MoveQueue, |
||||
title: 'Move_queue', |
||||
icon: 'burger-arrow-left', |
||||
order: 1, |
||||
}), |
||||
[], |
||||
); |
||||
}; |
||||
@ -0,0 +1,28 @@ |
||||
import { useMemo } from 'react'; |
||||
|
||||
import type { QuickActionsActionConfig } from '../../views/room/lib/quickActions'; |
||||
import { QuickActionsEnum } from '../../views/room/lib/quickActions'; |
||||
|
||||
export const useTranscriptQuickAction = (): QuickActionsActionConfig => { |
||||
return useMemo( |
||||
() => ({ |
||||
groups: ['live'], |
||||
id: QuickActionsEnum.Transcript, |
||||
title: 'Send_transcript', |
||||
icon: 'mail-arrow-top-right', |
||||
order: 3, |
||||
options: [ |
||||
{ label: 'Send_via_email', id: QuickActionsEnum.TranscriptEmail }, |
||||
{ |
||||
label: 'Export_as_PDF', |
||||
id: QuickActionsEnum.TranscriptPDF, |
||||
validate: (room) => ({ |
||||
tooltip: 'Export_enabled_at_the_end_of_the_conversation', |
||||
value: !room?.open, |
||||
}), |
||||
}, |
||||
], |
||||
}), |
||||
[], |
||||
); |
||||
}; |
||||
@ -1 +1,3 @@ |
||||
export { default } from './QuickActions'; |
||||
import { lazy } from 'react'; |
||||
|
||||
export default lazy(() => import('./QuickActions')); |
||||
|
||||
@ -1,21 +0,0 @@ |
||||
import type { EventHandlerOf } from '@rocket.chat/emitter'; |
||||
import { createContext, useContext } from 'react'; |
||||
|
||||
import type { QuickActionsActionConfig, QuickActionsAction, Events } from '.'; |
||||
import { actions, listen } from '.'; |
||||
|
||||
import './defaultActions'; |
||||
|
||||
type QuickActionsEventHandler = (handler: EventHandlerOf<Events, 'change'>) => unknown; |
||||
|
||||
type QuickActionsContextValue = { |
||||
actions: Map<QuickActionsActionConfig['id'], QuickActionsAction>; |
||||
listen: QuickActionsEventHandler; |
||||
}; |
||||
|
||||
const QuickActionsContext = createContext<QuickActionsContextValue>({ |
||||
actions, |
||||
listen, |
||||
}); |
||||
|
||||
export const useQuickActionsContext = (): QuickActionsContextValue => useContext(QuickActionsContext); |
||||
@ -1,45 +0,0 @@ |
||||
import { addAction, QuickActionsEnum } from '.'; |
||||
|
||||
addAction(QuickActionsEnum.MoveQueue, { |
||||
groups: ['live'], |
||||
id: QuickActionsEnum.MoveQueue, |
||||
title: 'Move_queue', |
||||
icon: 'burger-arrow-left', |
||||
order: 1, |
||||
}); |
||||
|
||||
addAction(QuickActionsEnum.ChatForward, { |
||||
groups: ['live'], |
||||
id: QuickActionsEnum.ChatForward, |
||||
title: 'Forward_chat', |
||||
icon: 'balloon-arrow-top-right', |
||||
order: 2, |
||||
}); |
||||
|
||||
addAction(QuickActionsEnum.Transcript, { |
||||
groups: ['live'], |
||||
id: QuickActionsEnum.Transcript, |
||||
title: 'Send_transcript', |
||||
icon: 'mail-arrow-top-right', |
||||
order: 3, |
||||
options: [ |
||||
{ label: 'Send_via_email', id: QuickActionsEnum.TranscriptEmail }, |
||||
{ |
||||
label: 'Export_as_PDF', |
||||
id: QuickActionsEnum.TranscriptPDF, |
||||
validate: (room) => ({ |
||||
tooltip: 'Export_enabled_at_the_end_of_the_conversation', |
||||
value: !room?.open, |
||||
}), |
||||
}, |
||||
], |
||||
}); |
||||
|
||||
addAction(QuickActionsEnum.CloseChat, { |
||||
groups: ['live'], |
||||
id: QuickActionsEnum.CloseChat, |
||||
title: 'End_conversation', |
||||
icon: 'balloon-close-top-right', |
||||
order: 5, |
||||
color: 'danger', |
||||
}); |
||||
@ -1,14 +0,0 @@ |
||||
import { hasLicense } from '../../license/client'; |
||||
import '../lib/messageTypes'; |
||||
import './startup'; |
||||
|
||||
hasLicense('livechat-enterprise').then((enabled) => { |
||||
if (!enabled) { |
||||
return; |
||||
} |
||||
|
||||
require('./views/livechatSideNavItems'); |
||||
require('./views/business-hours/Multiple'); |
||||
require('../lib/QuickActions/defaultActions'); |
||||
require('./messageTypes'); |
||||
}); |
||||
@ -0,0 +1,11 @@ |
||||
import { hasLicense } from '../../license/client'; |
||||
import '../lib/messageTypes'; |
||||
import './startup'; |
||||
|
||||
void hasLicense('livechat-enterprise').then((enabled) => { |
||||
if (!enabled) { |
||||
return; |
||||
} |
||||
|
||||
return Promise.all([import('./views/livechatSideNavItems'), import('./views/business-hours/Multiple'), import('./messageTypes')]); |
||||
}); |
||||
@ -1,9 +0,0 @@ |
||||
import { addAction, QuickActionsEnum } from '../../../../../client/views/room/lib/QuickActions'; |
||||
|
||||
addAction(QuickActionsEnum.OnHoldChat, { |
||||
groups: ['live'], |
||||
id: QuickActionsEnum.OnHoldChat, |
||||
title: 'Omnichannel_onHold_Chat', |
||||
icon: 'pause-unfilled', |
||||
order: 4, |
||||
}); |
||||
@ -0,0 +1,22 @@ |
||||
import { useMemo } from 'react'; |
||||
|
||||
import { QuickActionsEnum, type QuickActionsActionConfig } from '../../../../client/views/room/lib/quickActions'; |
||||
import { useHasLicenseModule } from '../useHasLicenseModule'; |
||||
|
||||
export const useOnHoldChatQuickAction = (): QuickActionsActionConfig | undefined => { |
||||
const licensed = useHasLicenseModule('livechat-enterprise') === true; |
||||
|
||||
return useMemo(() => { |
||||
if (!licensed) { |
||||
return undefined; |
||||
} |
||||
|
||||
return { |
||||
groups: ['live'], |
||||
id: QuickActionsEnum.OnHoldChat, |
||||
title: 'Omnichannel_onHold_Chat', |
||||
icon: 'pause-unfilled', |
||||
order: 4, |
||||
}; |
||||
}, [licensed]); |
||||
}; |
||||
Loading…
Reference in new issue