diff options
Diffstat (limited to 'src/client/util/SettingsManager.tsx')
-rw-r--r-- | src/client/util/SettingsManager.tsx | 86 |
1 files changed, 49 insertions, 37 deletions
diff --git a/src/client/util/SettingsManager.tsx b/src/client/util/SettingsManager.tsx index 8594a1c92..e2971895a 100644 --- a/src/client/util/SettingsManager.tsx +++ b/src/client/util/SettingsManager.tsx @@ -1,11 +1,11 @@ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import { Button, ColorPicker, Dropdown, DropdownType, EditableText, Group, NumberDropdown, Size, Toggle, ToggleType, Type } from 'browndash-components'; -import { action, computed, makeObservable, observable, runInAction } from 'mobx'; +import { action, computed, makeObservable, observable, reaction, runInAction } from 'mobx'; import { observer } from 'mobx-react'; import * as React from 'react'; import { BsGoogle } from 'react-icons/bs'; import { FaFillDrip, FaPalette } from 'react-icons/fa'; -import { Utils, addStyleSheet, addStyleSheetRule } from '../../Utils'; +import { ClientUtils, addStyleSheet, addStyleSheetRule } from '../../ClientUtils'; import { Doc, Opt } from '../../fields/Doc'; import { DashVersion } from '../../fields/DocSymbols'; import { BoolCast, Cast, NumCast, StrCast } from '../../fields/Types'; @@ -18,6 +18,7 @@ import { FontIconBox } from '../views/nodes/FontIconBox/FontIconBox'; import { GroupManager } from './GroupManager'; import './SettingsManager.scss'; import { undoBatch } from './UndoManager'; +import { SnappingManager } from './SnappingManager'; export enum ColorScheme { Dark = 'Dark', @@ -34,6 +35,7 @@ export enum freeformScrollMode { @observer export class SettingsManager extends React.Component<{}> { + // eslint-disable-next-line no-use-before-define public static Instance: SettingsManager; static _settingsStyle = addStyleSheet(); @observable public isOpen = false; @@ -60,6 +62,16 @@ export class SettingsManager extends React.Component<{}> { } // undefined means ColorScheme.Light until all CSS is updated with values for each color scheme (e.g., see MainView.scss, DocumentDecorations.scss) }); + reaction( + () => [SettingsManager.userBackgroundColor, SettingsManager.userColor, SettingsManager.userVariantColor], + ([back, user, variant]) => { + SnappingManager.userBackgroundColor = back; + SnappingManager.userVariantColor = variant; + SnappingManager.userColor = user; + }, + { fireImmediately: true } + ); + SnappingManager.SettingsStyle = SettingsManager._settingsStyle; } matchSystem = () => { if (Doc.UserDoc().userThemeSystem) { @@ -116,7 +128,7 @@ export class SettingsManager extends React.Component<{}> { if (this.playgroundMode) { DocServer.Control.makeReadOnly(); addStyleSheetRule(SettingsManager._settingsStyle, 'topbar-inner-container', { background: 'red !important' }); - } else Doc.CurrentUserEmail !== 'guest' && DocServer.Control.makeEditable(); + } else ClientUtils.CurrentUserEmail !== 'guest' && DocServer.Control.makeEditable(); }); @undoBatch @@ -176,7 +188,7 @@ export class SettingsManager extends React.Component<{}> { {userTheme === ColorScheme.Custom && ( <Group formLabel="Custom Theme"> <ColorPicker - tooltip={'User Color'} // + tooltip="User Color" // color={SettingsManager.userColor} type={Type.SEC} icon={<FaFillDrip />} @@ -185,7 +197,7 @@ export class SettingsManager extends React.Component<{}> { setFinalColor={this.switchUserColor} /> <ColorPicker - tooltip={'User Background Color'} + tooltip="User Background Color" color={SettingsManager.userColor} type={Type.SEC} icon={<FaPalette />} @@ -194,7 +206,7 @@ export class SettingsManager extends React.Component<{}> { setFinalColor={this.switchUserBackgroundColor} /> <ColorPicker - tooltip={'User Variant Color'} + tooltip="User Variant Color" color={SettingsManager.userColor} type={Type.SEC} icon={<FaPalette />} @@ -212,8 +224,8 @@ export class SettingsManager extends React.Component<{}> { return ( <div className="prefs-content"> <Toggle - formLabel={'Show document header'} - formLabelPlacement={'right'} + formLabel="Show document header" + formLabelPlacement="right" toggleType={ToggleType.SWITCH} onClick={e => (Doc.UserDoc().layout_showTitle = Doc.UserDoc().layout_showTitle ? undefined : 'author_date')} toggleStatus={Doc.UserDoc().layout_showTitle !== undefined} @@ -221,8 +233,8 @@ export class SettingsManager extends React.Component<{}> { color={SettingsManager.userColor} /> <Toggle - formLabel={'Show Full Toolbar'} - formLabelPlacement={'right'} + formLabel="Show Full Toolbar" + formLabelPlacement="right" toggleType={ToggleType.SWITCH} onClick={e => (Doc.UserDoc()['documentLinksButton-fullMenu'] = !Doc.UserDoc()['documentLinksButton-fullMenu'])} toggleStatus={BoolCast(Doc.UserDoc()['documentLinksButton-fullMenu'])} @@ -230,8 +242,8 @@ export class SettingsManager extends React.Component<{}> { color={SettingsManager.userColor} /> <Toggle - formLabel={'Show Button Labels'} - formLabelPlacement={'right'} + formLabel="Show Button Labels" + formLabelPlacement="right" toggleType={ToggleType.SWITCH} onClick={e => (FontIconBox.ShowIconLabels = !FontIconBox.ShowIconLabels)} toggleStatus={FontIconBox.ShowIconLabels} @@ -239,8 +251,8 @@ export class SettingsManager extends React.Component<{}> { color={SettingsManager.userColor} /> <Toggle - formLabel={'Recognize Ink Gestures'} - formLabelPlacement={'right'} + formLabel="Recognize Ink Gestures" + formLabelPlacement="right" toggleType={ToggleType.SWITCH} onClick={e => (GestureOverlay.RecognizeGestures = !GestureOverlay.RecognizeGestures)} toggleStatus={GestureOverlay.RecognizeGestures} @@ -248,8 +260,8 @@ export class SettingsManager extends React.Component<{}> { color={SettingsManager.userColor} /> <Toggle - formLabel={'Hide Labels In Ink Shapes'} - formLabelPlacement={'right'} + formLabel="Hide Labels In Ink Shapes" + formLabelPlacement="right" toggleType={ToggleType.SWITCH} onClick={e => (Doc.UserDoc().activeInkHideTextLabels = !Doc.UserDoc().activeInkHideTextLabels)} toggleStatus={BoolCast(Doc.UserDoc().activeInkHideTextLabels)} @@ -257,8 +269,8 @@ export class SettingsManager extends React.Component<{}> { color={SettingsManager.userColor} /> <Toggle - formLabel={'Open Ink Docs in Lightbox'} - formLabelPlacement={'right'} + formLabel="Open Ink Docs in Lightbox" + formLabelPlacement="right" toggleType={ToggleType.SWITCH} onClick={e => (Doc.UserDoc().openInkInLightbox = !Doc.UserDoc().openInkInLightbox)} toggleStatus={BoolCast(Doc.UserDoc().openInkInLightbox)} @@ -266,8 +278,8 @@ export class SettingsManager extends React.Component<{}> { color={SettingsManager.userColor} /> <Toggle - formLabel={'Show Link Lines'} - formLabelPlacement={'right'} + formLabel="Show Link Lines" + formLabelPlacement="right" toggleType={ToggleType.SWITCH} onClick={e => (Doc.UserDoc().showLinkLines = !Doc.UserDoc().showLinkLines)} toggleStatus={BoolCast(Doc.UserDoc().showLinkLines)} @@ -278,12 +290,12 @@ export class SettingsManager extends React.Component<{}> { <NumberDropdown number={NumCast(Doc.UserDoc().headerHeight, 30)} color={SettingsManager.userColor} - numberDropdownType={'slider'} + numberDropdownType="slider" min={6} max={60} step={2} type={Type.TERT} - unit={'px'} + unit="px" setNumber={val => console.log('GOT: ' + (Doc.UserDoc().headerHeight = val))} /> </Group> @@ -316,7 +328,7 @@ export class SettingsManager extends React.Component<{}> { <div className="tab-column-title">Text</div> <div className="tab-column-content"> {/* <NumberInput/> */} - <Group formLabel={'Default Font'}> + <Group formLabel="Default Font"> <NumberDropdown color={SettingsManager.userColor} numberDropdownType="slider" @@ -325,7 +337,7 @@ export class SettingsManager extends React.Component<{}> { step={2} type={Type.PRIM} number={NumCast(Doc.UserDoc().fontSize, Number(StrCast(Doc.UserDoc().fontSize).replace('px', '')))} - unit={'px'} + unit="px" setNumber={val => (Doc.UserDoc().fontSize = val + 'px')} /> <Dropdown @@ -373,12 +385,12 @@ export class SettingsManager extends React.Component<{}> { @computed get passwordContent() { return ( <div className="password-content"> - <EditableText placeholder="Current password" type={Type.SEC} color={SettingsManager.userColor} val={''} setVal={val => this.changeVal(val as string, 'curr')} fillWidth password /> - <EditableText placeholder="New password" type={Type.SEC} color={SettingsManager.userColor} val={''} setVal={val => this.changeVal(val as string, 'new')} fillWidth password /> - <EditableText placeholder="Confirm new password" type={Type.SEC} color={SettingsManager.userColor} val={''} setVal={val => this.changeVal(val as string, 'conf')} fillWidth password /> + <EditableText placeholder="Current password" type={Type.SEC} color={SettingsManager.userColor} val="" setVal={val => this.changeVal(val as string, 'curr')} fillWidth password /> + <EditableText placeholder="New password" type={Type.SEC} color={SettingsManager.userColor} val="" setVal={val => this.changeVal(val as string, 'new')} fillWidth password /> + <EditableText placeholder="Confirm new password" type={Type.SEC} color={SettingsManager.userColor} val="" setVal={val => this.changeVal(val as string, 'conf')} fillWidth password /> {!this.passwordResultText ? null : <div className={`${this.passwordResultText.startsWith('Error') ? 'error' : 'success'}-text`}>{this.passwordResultText}</div>} - <Button type={Type.SEC} text={'Forgot Password'} color={SettingsManager.userColor} /> - <Button type={Type.TERT} text={'Submit'} onClick={this.changePassword} color={SettingsManager.userColor} /> + <Button type={Type.SEC} text="Forgot Password" color={SettingsManager.userColor} /> + <Button type={Type.TERT} text="Submit" onClick={this.changePassword} color={SettingsManager.userColor} /> </div> ); } @@ -386,7 +398,7 @@ export class SettingsManager extends React.Component<{}> { @computed get accountOthersContent() { return ( <div className="account-others-content"> - <Button type={Type.TERT} text={'Connect to Google'} iconPlacement="left" icon={<BsGoogle />} onClick={() => this.googleAuthorize()} /> + <Button type={Type.TERT} text="Connect to Google" iconPlacement="left" icon={<BsGoogle />} onClick={() => this.googleAuthorize()} /> </div> ); } @@ -417,7 +429,7 @@ export class SettingsManager extends React.Component<{}> { <div className="tab-column-title">Modes</div> <div className="tab-column-content"> <Dropdown - formLabel={'Mode'} + formLabel="Mode" closeOnSelect={true} items={[ { @@ -442,7 +454,7 @@ export class SettingsManager extends React.Component<{}> { color={SettingsManager.userColor} fillWidth /> - <Toggle formLabel={'Playground Mode'} toggleType={ToggleType.SWITCH} toggleStatus={this.playgroundMode} onClick={this.playgroundModeToggle} color={SettingsManager.userColor} /> + <Toggle formLabel="Playground Mode" toggleType={ToggleType.SWITCH} toggleStatus={this.playgroundMode} onClick={this.playgroundModeToggle} color={SettingsManager.userColor} /> </div> <div className="tab-column-title" style={{ marginTop: 20, marginBottom: 10 }}> Freeform Navigation @@ -475,10 +487,10 @@ export class SettingsManager extends React.Component<{}> { <div className="tab-column"> <div className="tab-column-title">Permissions</div> <div className="tab-column-content"> - <Button text={'Manage Groups'} type={Type.TERT} onClick={() => GroupManager.Instance?.open()} color={SettingsManager.userColor} /> + <Button text="Manage Groups" type={Type.TERT} onClick={() => GroupManager.Instance?.open()} color={SettingsManager.userColor} /> <Toggle toggleType={ToggleType.SWITCH} - formLabel={'Default access private'} + formLabel="Default access private" color={SettingsManager.userColor} toggleStatus={BoolCast(Doc.defaultAclPrivate)} onClick={action(() => (Doc.defaultAclPrivate = !Doc.defaultAclPrivate))} @@ -525,14 +537,14 @@ export class SettingsManager extends React.Component<{}> { <div className="settings-user"> <div style={{ color: SettingsManager.userBackgroundColor }}>{DashVersion}</div> <div className="settings-username" style={{ color: SettingsManager.userBackgroundColor }}> - {Doc.CurrentUserEmail} + {ClientUtils.CurrentUserEmail} </div> - <Button text={Doc.GuestDashboard ? 'Exit' : 'Log Out'} type={Type.TERT} color={SettingsManager.userVariantColor} onClick={() => window.location.assign(Utils.prepend('/logout'))} /> + <Button text={Doc.GuestDashboard ? 'Exit' : 'Log Out'} type={Type.TERT} color={SettingsManager.userVariantColor} onClick={() => window.location.assign(ClientUtils.prepend('/logout'))} /> </div> </div> <div className="close-button"> - <Button icon={<FontAwesomeIcon icon={'times'} size={'lg'} />} onClick={this.close} color={SettingsManager.userColor} /> + <Button icon={<FontAwesomeIcon icon="times" size="lg" />} onClick={this.close} color={SettingsManager.userColor} /> </div> <div className="settings-content" style={{ color: SettingsManager.userColor, background: SettingsManager.userBackgroundColor }}> |