Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
145 changes: 145 additions & 0 deletions bbbeasy-frontend/src/components/ModalSocialLinks.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
import React, { useEffect, useState } from 'react';

import { Trans } from 'react-i18next';

import {Button, Input, Modal, Space, Typography} from 'antd';
import CopyTextToClipBoard from "./CopyTextToClipBoard";
import {
FacebookIcon,
FacebookShareButton,
LinkedinIcon,
LinkedinShareButton,
TwitterIcon,
TwitterShareButton
} from "react-share";
import Form from 'antd/lib/form';
import {RecordingType} from "../types/RecordingType";
import {ShareAltOutlined} from "@ant-design/icons";
import DynamicIcon from "./DynamicIcon";

const { Title } = Typography;
type Props = {
recording : RecordingType;
from : string;
};

const ModalSocialLinks = (props: Props) => {
const myRecording = props;
const [isModalVisible, setIsModalVisible] = React.useState<boolean>(false);
const [modalFormats, setModalFormats] = React.useState<string[]>(null);
const [modalUrl, setModalUrl] = React.useState<string>(null);
const { Link } = Typography;

// share
const showModal = (formats: string[], url: string) => {
setIsModalVisible(true);
setModalFormats(formats);
setModalUrl(url);
};

//room.link
const handleShare = () => {
console.log(myRecording.recording.url);
};
const cancelShare = () => {
setIsModalVisible(false);
};

const getFormatIcons = (formats: string[], showDisabled?: boolean) => {
const getFormatIcon = (format: string, icon: string, iconClass?: string) => {
const enabled = formats.includes(format);
if (enabled || showDisabled) {
return (
<div className={(!enabled && 'disabled ') + (iconClass ?? '')}>
<DynamicIcon type={icon} className={!enabled && 'icon-disabled'} />
</div>
);
}
};
return (
<Space size="middle" className="recording-formats">
{getFormatIcon('presentation', 'playback-presentation')}
{getFormatIcon('podcast', 'playback-podcast')}
{getFormatIcon('screenshare', 'DesktopOutlined', 'icon-desktop')}
{getFormatIcon('mp4', 'mp4')}
{getFormatIcon('reports', 'activity-reports')}
</Space>
);
};
return (
<>
{
myRecording.from == "Recordings" ?
<Link onClick={() => showModal(myRecording.recording.formats, myRecording.recording.url)}>
<ShareAltOutlined />
</Link>
:
<Button
className="share-icon"
size="middle"
type="primary"
shape="circle"
icon={<ShareAltOutlined />}
onClick={() => showModal(myRecording.recording.formats, myRecording.recording.url)}
/>
}

{isModalVisible && (
<Modal
className="share-modal"
centered
open={true}
onOk={handleShare}
onCancel={cancelShare}
footer={null}
maskClosable={false}
>
<Form layout="vertical" hideRequiredMark onFinish={handleShare} validateTrigger="onSubmit">
<Space size={38} direction="vertical" className="modal-content">
<div className="mt-24">{getFormatIcons(modalFormats, true)}</div>
<Space size="middle" className="social-medias">
<div className="bbbeasy-white-btn">
<FacebookShareButton
url={myRecording.recording.url}

quote={'Join us!'}
>
<FacebookIcon size={75} round />
</FacebookShareButton>
</div>
<div className="bbbeasy-white-btn">
<TwitterShareButton
url={myRecording.recording.url}
>
<TwitterIcon size={75} round />
</TwitterShareButton>
</div>

<div className="bbbeasy-white-btn">
<LinkedinShareButton
url={myRecording.recording.url}
title="Create LinkedIn Share button on Website Webpages"
>
<LinkedinIcon size={75} round />
</LinkedinShareButton>

</div>
</Space>
<Input
readOnly
defaultValue={myRecording.recording.url}
suffix={<CopyTextToClipBoard textToCopy={myRecording.recording.url} />}
/>
<Form.Item className="modal-submit-btn">
<Button type="primary" id="submit-btn" onClick={() => {window.open(myRecording.recording.url)}} htmlType="submit" block>
<Trans i18nKey="replay" />
</Button>
</Form.Item>
</Space>
</Form>
</Modal>
)}
</>
);
}
export default ModalSocialLinks;
27 changes: 6 additions & 21 deletions bbbeasy-frontend/src/components/Recordings.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,9 @@ import RecordingsService from '../services/recordings.service';

import { TableColumnType } from '../types/TableColumnType';
import { RecordingType } from '../types/RecordingType';

import ModalSocialLinks from "./ModalSocialLinks";

import CopyTextToClipBoard from './CopyTextToClipBoard';
import {
FacebookIcon,
Expand All @@ -63,6 +66,7 @@ import {
TwitterShareButton,
} from 'react-share';


const { Link } = Typography;
const { Option } = Select;

Expand All @@ -85,10 +89,6 @@ const Recordings = () => {
const [errorsEdit, setErrorsEdit] = React.useState({});
const [cancelVisibility, setCancelVisibility] = React.useState<boolean>(false);

const [isModalVisible, setIsModalVisible] = React.useState<boolean>(false);
const [modalFormats, setModalFormats] = React.useState<string[]>(null);
const [modalUrl, setModalUrl] = React.useState<string>(null);

//list
const getRecordings = () => {
setLoading(true);
Expand Down Expand Up @@ -242,19 +242,6 @@ const Recordings = () => {
});
};

// share
const showModal = (formats: string[], url: string) => {
setIsModalVisible(true);
setModalFormats(formats);
setModalUrl(url);
};
const cancelShare = () => {
setIsModalVisible(false);
};
const handleShare = () => {
console.log(modalUrl);
};

const getFormatIcons = (formats: string[], showDisabled?: boolean) => {
const getFormatIcon = (format: string, icon: string, iconClass?: string) => {
const enabled = formats.includes(format);
Expand Down Expand Up @@ -439,9 +426,7 @@ const Recordings = () => {
placement={LocaleService.direction == 'rtl' ? 'right' : 'left'}
title={getFormatIcons(record.formats, true)}
>
<Link onClick={() => showModal(record.formats, record.url)}>
<ShareAltOutlined />
</Link>
<ModalSocialLinks recording={record} from="Recordings"/>
</Tooltip>
)}
</Space>
Expand Down Expand Up @@ -542,4 +527,4 @@ const Recordings = () => {
);
};

export default withTranslation()(Recordings);
export default withTranslation()(Recordings);
24 changes: 12 additions & 12 deletions bbbeasy-frontend/src/components/RoomRecordings.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,11 @@ import React, { useEffect } from 'react';
import { Trans } from 'react-i18next';
import { t } from 'i18next';

import { Button, Card, Col, Dropdown, Input, Row, Space, Typography, Menu, Form, Popconfirm } from 'antd';
import { Button, Card, Col, Dropdown, Input, Row, Space, Typography, Menu, Form, Popconfirm, Modal } from 'antd';

import {
CalendarOutlined,
ClockCircleOutlined,
CalendarOutlined, CheckOutlined,
ClockCircleOutlined, CloseOutlined,
MoreOutlined,
SearchOutlined,
ShareAltOutlined,
Expand All @@ -40,10 +41,14 @@ import LocaleService from '../services/locale.service';

import { RecordingType } from '../types/RecordingType';
import { MenuProps } from 'antd/lib/menu';

import ModalSocialLinks from "./ModalSocialLinks";

import recordingsService from 'services/recordings.service';

import Notifications from './Notifications';


const { Title } = Typography;

type Props = {
Expand Down Expand Up @@ -222,8 +227,9 @@ const RoomRecordings = (props: Props) => {
: recording.name.substring(0, 21) + '...';

return (
<Col span={6} key={recording.key}>
<Col style={{maxWidth:"300px"}} key={recording.key}>
<Card
style={{maxWidth:"300px"}}
bordered={false}
hoverable
cover={
Expand Down Expand Up @@ -334,14 +340,7 @@ const RoomRecordings = (props: Props) => {
<ClockCircleOutlined /> {recording.duration}
</span>
</Space>

<Button
className="share-icon"
size="middle"
type="primary"
shape="circle"
icon={<ShareAltOutlined />}
/>
<ModalSocialLinks recording={recording} from="RoomRecordings"/>
</div>
</div>
}
Expand All @@ -351,6 +350,7 @@ const RoomRecordings = (props: Props) => {
<Button
size="middle"
type="primary"
onClick={() => {window.open(recording.url)}}
icon={
<DynamicIcon
type="playback-presentation"
Expand Down