mirror of
				https://github.com/owncast/owncast.git
				synced 2025-11-04 05:17:27 +08:00 
			
		
		
		
	* refactor: move/rename BanUserButton file * refactor: move/rename Chart file * refactor: update generic component filenames to PascalCase * refactor: update config component filenames to PascalCase * refactor: update AdminLayout component filename to PascalCase * refactor: update/move VideoJS component * chore(eslint): disable bad react/require-default-props rule * refactor: normalize ActionButton component * refactor: normalize ActionButtonRow component * refactor: normalize FollowButton component * refactor: normalize NotifyButton component * refactor: normalize ChatActionMessage component * refactor: normalize ChatContainer component * refactor: normalize ChatJoinMessage component * refactor: normalize ChatModerationActionMenu component * refactor: normalize ChatModerationDetailsModal component * refactor: normalize ChatModeratorNotification component * refactor: normalize ChatSocialMessage component * refactor: normalize ChatSystemMessage component * refactor: normalize ChatTextField component * refactor: normalize ChatUserBadge component * refactor: normalize ChatUserMessage component * refactor: normalize ContentHeader component * refactor: normalize OwncastLogo component * refactor: normalize UserDropdown component * chore(eslint): modify react/function-component-definition rule * refactor: normalize CodecSelector component * refactor: update a bunch of functional components using eslint * refactor: update a bunch of functional components using eslint, pt2 * refactor: update a bunch of functional components using eslint, pt3 * refactor: replace all component->component default imports with named imports * refactor: replace all component-stories->component default imports with named imports * refactor: remove default exports from most components * chore(eslint): add eslint config files for the components and pages dirs * fix: use-before-define error in ChatContainer * Fix ChatContainer import * Only process .tsx files in Next builds Co-authored-by: Gabe Kangas <gabek@real-ity.com>
		
			
				
	
	
		
			83 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import React, { FC, useState } from 'react';
 | 
						|
 | 
						|
import { Button, Space, Input, Modal } from 'antd';
 | 
						|
import { STATUS_ERROR, STATUS_SUCCESS } from '../utils/input-statuses';
 | 
						|
import { fetchData, FEDERATION_MESSAGE_SEND } from '../utils/apis';
 | 
						|
 | 
						|
const { TextArea } = Input;
 | 
						|
 | 
						|
export type ComposeFederatedPostProps = {
 | 
						|
  visible: boolean;
 | 
						|
  handleClose: () => void;
 | 
						|
};
 | 
						|
 | 
						|
export const ComposeFederatedPost: FC<ComposeFederatedPostProps> = ({ visible, handleClose }) => {
 | 
						|
  const [content, setContent] = useState('');
 | 
						|
  const [postPending, setPostPending] = useState(false);
 | 
						|
  const [postSuccessState, setPostSuccessState] = useState(null);
 | 
						|
 | 
						|
  function handleEditorChange(e) {
 | 
						|
    setContent(e.target.value);
 | 
						|
  }
 | 
						|
 | 
						|
  function close() {
 | 
						|
    setPostPending(false);
 | 
						|
    setPostSuccessState(null);
 | 
						|
    handleClose();
 | 
						|
  }
 | 
						|
 | 
						|
  async function sendButtonClicked() {
 | 
						|
    setPostPending(true);
 | 
						|
 | 
						|
    const data = {
 | 
						|
      value: content,
 | 
						|
    };
 | 
						|
    try {
 | 
						|
      await fetchData(FEDERATION_MESSAGE_SEND, {
 | 
						|
        data,
 | 
						|
        method: 'POST',
 | 
						|
        auth: true,
 | 
						|
      });
 | 
						|
      setPostSuccessState(STATUS_SUCCESS);
 | 
						|
      setTimeout(close, 1000);
 | 
						|
    } catch (e) {
 | 
						|
      // eslint-disable-next-line no-console
 | 
						|
      console.error(e);
 | 
						|
      setPostSuccessState(STATUS_ERROR);
 | 
						|
    }
 | 
						|
    setPostPending(false);
 | 
						|
  }
 | 
						|
 | 
						|
  return (
 | 
						|
    <Modal
 | 
						|
      destroyOnClose
 | 
						|
      width={600}
 | 
						|
      title="Post to Followers"
 | 
						|
      visible={visible}
 | 
						|
      onCancel={handleClose}
 | 
						|
      footer={[
 | 
						|
        <Button onClick={() => handleClose()}>Cancel</Button>,
 | 
						|
        <Button
 | 
						|
          type="primary"
 | 
						|
          onClick={sendButtonClicked}
 | 
						|
          disabled={postPending || postSuccessState}
 | 
						|
          loading={postPending}
 | 
						|
        >
 | 
						|
          {postSuccessState?.toUpperCase() || 'Post'}
 | 
						|
        </Button>,
 | 
						|
      ]}
 | 
						|
    >
 | 
						|
      <Space id="fediverse-post-container" direction="vertical">
 | 
						|
        <TextArea
 | 
						|
          placeholder="Tell the world about your streaming plans..."
 | 
						|
          size="large"
 | 
						|
          showCount
 | 
						|
          maxLength={500}
 | 
						|
          style={{ height: '150px' }}
 | 
						|
          onChange={handleEditorChange}
 | 
						|
        />
 | 
						|
      </Space>
 | 
						|
    </Modal>
 | 
						|
  );
 | 
						|
};
 |