blob: 8a4f3712177ec210548ee686a03ce533585d3526 (
plain)
| 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
 | import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { action, computed, observable } from 'mobx';
import { observer } from 'mobx-react';
import * as React from 'react';
import { Doc } from '../../fields/Doc';
import { DocCast, StrCast } from '../../fields/Types';
import { addStyleSheet } from '../../Utils';
import { LightboxView } from '../views/LightboxView';
import { MainViewModal } from '../views/MainViewModal';
import './CaptureManager.scss';
import { LinkManager } from './LinkManager';
import { SelectionManager } from './SelectionManager';
@observer
export class CaptureManager extends React.Component<{}> {
    public static Instance: CaptureManager;
    static _settingsStyle = addStyleSheet();
    @observable _document: any;
    @observable isOpen: boolean = false; // whether the CaptureManager is to be displayed or not.
    constructor(props: {}) {
        super(props);
        CaptureManager.Instance = this;
    }
    public close = action(() => (this.isOpen = false));
    public open = action((doc: Doc) => {
        this.isOpen = true;
        this._document = doc;
    });
    @computed get visibilityContent() {
        return (
            <div className="capture-block">
                <div className="capture-block-title">Visibility</div>
                <div className="capture-block-radio">
                    <div className="radio-container">
                        <input type="radio" value="private" name="visibility" style={{ margin: 0, marginRight: 5 }} /> Private
                    </div>
                    <div className="radio-container">
                        <input type="radio" value="public" name="visibility" style={{ margin: 0, marginRight: 5 }} /> Public
                    </div>
                </div>
            </div>
        );
    }
    @computed get linksContent() {
        const doc = this._document;
        const order: JSX.Element[] = [];
        if (doc) {
            LinkManager.Links(doc).forEach((l, i) =>
                order.push(
                    <div className="list-item">
                        <div className="number">{i}</div>
                        {StrCast(DocCast(l.link_anchor_1)?.title)}
                    </div>
                )
            );
        }
        return (
            <div className="capture-block">
                <div className="capture-block-title">Links</div>
                <div className="capture-block-list">{order}</div>
            </div>
        );
    }
    @computed get closeButtons() {
        return (
            <div className="capture-block">
                <div className="buttons">
                    <div
                        className="save"
                        onClick={() => {
                            LightboxView.Instance.SetLightboxDoc(this._document);
                            this.close();
                        }}>
                        Save
                    </div>
                    <div
                        className="cancel"
                        onClick={() => {
                            const selected = SelectionManager.Views().slice();
                            SelectionManager.DeselectAll();
                            selected.map(dv => dv.props.removeDocument?.(dv.props.Document));
                            this.close();
                        }}>
                        Cancel
                    </div>
                </div>
            </div>
        );
    }
    private get captureInterface() {
        return (
            <div className="capture-interface">
                <div className="capture-t1">
                    <div className="recordButtonOutline" style={{}}>
                        <div className="recordButtonInner" style={{}}></div>
                    </div>
                    Conversation Capture
                </div>
                <div className="capture-t2"></div>
                {this.visibilityContent}
                {this.linksContent}
                <div className="close-button" onClick={this.close}>
                    <FontAwesomeIcon icon={'times'} color="black" size={'lg'} />
                </div>
                {this.closeButtons}
            </div>
        );
    }
    render() {
        return (
            <MainViewModal
                contents={this.captureInterface}
                isDisplayed={this.isOpen}
                interactive={true}
                closeOnExternalClick={this.close}
                dialogueBoxStyle={{ width: '500px', height: '350px', border: 'none', background: 'whitesmoke' }}
                overlayStyle={{ background: 'black' }}
                overlayDisplayedOpacity={0.6}
            />
        );
    }
}
 |