nitro-react/src/components/help/HelpView.tsx

118 lines
4.1 KiB
TypeScript
Raw Normal View History

2022-02-09 04:26:22 +01:00
import { ILinkEventTracker } from '@nitrots/nitro-renderer';
import { FC, useEffect, useState } from 'react';
import { AddEventLinkTracker, LocalizeText, RemoveLinkEventTracker, ReportState } from '../../api';
2022-03-03 08:23:01 +01:00
import { Base, Column, Grid, NitroCardContentView, NitroCardHeaderView, NitroCardView } from '../../common';
import { useHelp } from '../../hooks';
2022-02-09 04:26:22 +01:00
import { DescribeReportView } from './views/DescribeReportView';
import { HelpIndexView } from './views/HelpIndexView';
import { NameChangeView } from './views/name-change/NameChangeView';
import { ReportSummaryView } from './views/ReportSummaryView';
2022-02-09 04:26:22 +01:00
import { SanctionSatusView } from './views/SanctionStatusView';
import { SelectReportedChatsView } from './views/SelectReportedChatsView';
import { SelectReportedUserView } from './views/SelectReportedUserView';
import { SelectTopicView } from './views/SelectTopicView';
export const HelpView: FC<{}> = props =>
{
const [ isVisible, setIsVisible ] = useState(false);
const { activeReport = null, setActiveReport = null, report = null } = useHelp();
2022-02-09 04:26:22 +01:00
2022-07-28 01:08:53 +02:00
const onClose = () =>
2022-02-09 04:26:22 +01:00
{
setActiveReport(null);
setIsVisible(false);
}
2022-02-09 04:26:22 +01:00
useEffect(() =>
{
const linkTracker: ILinkEventTracker = {
linkReceived: (url: string) =>
{
const parts = url.split('/');
if(parts.length < 2) return;
switch(parts[1])
{
case 'show':
setIsVisible(true);
return;
case 'hide':
setIsVisible(false);
return;
case 'toggle':
setIsVisible(prevValue => !prevValue);
return;
case 'tour':
// todo: launch tour
return;
case 'report':
if((parts.length >= 5) && (parts[2] === 'room'))
{
const roomId = parseInt(parts[3]);
const unknown = unescape(parts.splice(4).join('/'));
//this.reportRoom(roomId, unknown, "");
}
return;
}
},
2022-02-09 04:26:22 +01:00
eventUrlPrefix: 'help/'
};
AddEventLinkTracker(linkTracker);
return () => RemoveLinkEventTracker(linkTracker);
}, []);
2022-02-09 04:26:22 +01:00
useEffect(() =>
{
if(!activeReport) return;
2022-02-09 04:26:22 +01:00
setIsVisible(true);
}, [ activeReport ]);
2022-02-09 04:26:22 +01:00
if(!isVisible && !activeReport) return null;
const CurrentStepView = () =>
2022-02-09 04:26:22 +01:00
{
if(activeReport)
2022-02-09 04:26:22 +01:00
{
switch(activeReport.currentStep)
{
case ReportState.SELECT_USER:
return <SelectReportedUserView />;
case ReportState.SELECT_CHATS:
return <SelectReportedChatsView />;
case ReportState.SELECT_TOPICS:
return <SelectTopicView />;
case ReportState.INPUT_REPORT_MESSAGE:
return <DescribeReportView />;
case ReportState.REPORT_SUMMARY:
return <ReportSummaryView />;
}
2022-02-09 04:26:22 +01:00
}
return <HelpIndexView />;
}
2022-02-09 04:26:22 +01:00
return (
<>
<NitroCardView className="nitro-help" theme="primary-slim">
2022-07-28 01:08:53 +02:00
<NitroCardHeaderView headerText={ LocalizeText('help.button.cfh') } onCloseClick={ onClose } />
<NitroCardContentView className="text-black">
<Grid>
<Column center size={ 5 } overflow="hidden">
<Base className="index-image" />
</Column>
<Column justifyContent="between" size={ 7 } overflow="hidden">
<CurrentStepView />
</Column>
</Grid>
</NitroCardContentView>
</NitroCardView>
2022-02-09 04:26:22 +01:00
<SanctionSatusView />
<NameChangeView />
</>
2022-02-09 04:26:22 +01:00
);
}