diff --git a/src/pages/Compose.tsx b/src/pages/Compose.tsx index bb2f6af..ad24bca 100644 --- a/src/pages/Compose.tsx +++ b/src/pages/Compose.tsx @@ -39,7 +39,11 @@ import ComposeMediaAttachment from "../components/ComposeMediaAttachment"; import EmojiPicker from "../components/EmojiPicker"; import { DateTimePicker, MuiPickersUtilsProvider } from "material-ui-pickers"; import MomentUtils from "@date-io/moment"; -import { getUserDefaultVisibility, getConfig } from "../utilities/settings"; +import { + getUserDefaultVisibility, + getConfig, + getUserDefaultBool +} from "../utilities/settings"; interface IComposerState { account: UAccount; @@ -75,7 +79,9 @@ class Composer extends Component { sensitive: false, visibilityMenu: false, text: "", - remainingChars: 500, + remainingChars: getUserDefaultBool("imposeCharacterLimit") + ? 500 + : 9999999999999, showEmojis: false, federated: true }; @@ -95,7 +101,9 @@ class Composer extends Component { acct: state.acct, visibility: state.visibility, text, - remainingChars: 500 - text.length + remainingChars: getUserDefaultBool("imposeCharacterLimit") + ? 500 - text.length + : 99999999 }); }); } @@ -108,7 +116,9 @@ class Composer extends Component { acct: state.acct, visibility: state.visibility, text, - remainingChars: 500 - text.length + remainingChars: getUserDefaultBool("imposeCharacterLimit") + ? 500 - text.length + : 99999999 }); } @@ -145,7 +155,12 @@ class Composer extends Component { } updateTextFromField(text: string) { - this.setState({ text, remainingChars: 500 - text.length }); + this.setState({ + text, + remainingChars: getUserDefaultBool("imposeCharacterLimit") + ? 500 - text.length + : 99999999 + }); } updateWarningFromField(sensitiveText: string) { @@ -467,18 +482,28 @@ class Composer extends Component { }} value={this.state.text} /> - - {`${this.state.remainingChars} character${ - this.state.remainingChars === 1 ? "" : "s" - } remaining`} - + {getUserDefaultBool("imposeCharacterLimit") ? ( + + {`${this.state.remainingChars} character${ + this.state.remainingChars === 1 ? "" : "s" + } remaining`} + + ) : ( + + {" "} + You have the character limit turned off. Make sure + that your post matches your instance's character + limit before posting. + + )} + {this.state.attachments && this.state.attachments.length > 0 ? (
diff --git a/src/pages/Settings.tsx b/src/pages/Settings.tsx index 2764e34..8abe80e 100644 --- a/src/pages/Settings.tsx +++ b/src/pages/Settings.tsx @@ -63,6 +63,7 @@ import RefreshIcon from "@material-ui/icons/Refresh"; import UndoIcon from "@material-ui/icons/Undo"; import DomainDisabledIcon from "@material-ui/icons/DomainDisabled"; import AccountSettingsIcon from "mdi-material-ui/AccountSettings"; +import AlphabeticalVariantOffIcon from "mdi-material-ui/AlphabeticalVariantOff"; import { Config } from "../types/Config"; import { Account } from "../types/Account"; @@ -84,6 +85,7 @@ interface ISettingsState { brandName: string; federated: boolean; currentUser?: Account; + imposeCharacterLimit: boolean; } class SettingsPage extends Component { @@ -114,7 +116,8 @@ class SettingsPage extends Component { setHyperspaceTheme(defaultTheme), defaultVisibility: getUserDefaultVisibility() || "public", brandName: "Hyperspace", - federated: true + federated: true, + imposeCharacterLimit: getUserDefaultBool("imposeCharacterLimit") }; this.toggleDarkMode = this.toggleDarkMode.bind(this); @@ -218,6 +221,16 @@ class SettingsPage extends Component { }); } + toggleCharacterLimit() { + this.setState({ + imposeCharacterLimit: !this.state.imposeCharacterLimit + }); + setUserDefaultBool( + "imposeCharacterLimit", + !this.state.imposeCharacterLimit + ); + } + toggleResetDialog() { this.setState({ resetHyperspaceDialog: !this.state.resetHyperspaceDialog @@ -632,6 +645,25 @@ class SettingsPage extends Component { + + + + + + + + this.toggleCharacterLimit() + } + /> + +
diff --git a/src/utilities/settings.tsx b/src/utilities/settings.tsx index 95ad574..43b36ee 100644 --- a/src/utilities/settings.tsx +++ b/src/utilities/settings.tsx @@ -12,6 +12,7 @@ type SettingsTemplate = { clearNotificationsOnRead: boolean; displayAllOnNotificationBadge: boolean; defaultVisibility: string; + imposeCharacterLimit: boolean; }; /** @@ -99,7 +100,8 @@ export function createUserDefaults() { enablePushNotifications: true, clearNotificationsOnRead: false, displayAllOnNotificationBadge: false, - defaultVisibility: "public" + defaultVisibility: "public", + imposeCharacterLimit: true }; let settings = [ @@ -107,7 +109,8 @@ export function createUserDefaults() { "systemDecidesDarkMode", "clearNotificationsOnRead", "displayAllOnNotificationBadge", - "defaultVisibility" + "defaultVisibility", + "imposeCharacterLimit" ]; migrateExistingSettings();