From 938328cd077d40b75e0834d56ff8d43ad035fd2b Mon Sep 17 00:00:00 2001 From: f0x52 Date: Thu, 29 Sep 2022 12:02:41 +0200 Subject: [frontend] Unified panels (#812) * settings panel restructuring * clean up old Gin handlers * colorscheme redesign, some other small css tweaks * basic router layout, error boundary * colorscheme redesign, some other small css tweaks * kebab-case consistency * superfluous padding on applist * remove unused consts * redux, whitespace changes.. * use .jsx extensions for components * login flow up till app registration * full redux oauth implementation, with basic error handling * split oauth api functions * oauth api revocation handling * basic profile change submission * move old dir * profile overview * fix keeping track of the wrong instance url (for different instance/api domains) * use redux state for profile form * delete old/index.js, old/basic.js, fully implemented * implement old/user/profile.js * implement password change * remove debug logging * support future api for removing files * customize profile css * remove unneeded wrapper components * restructure form fields * start on admin pages * admin panel settings * admin settings panel * remove old/admin files * add top-level redirect * refactor/cleanup forms * only do API checks on logged-in state * admin-status based routing * federation block routing * federation blocks * upgrade dependencies * react 18 changes * media cleanup * fix useEffect hooks * remove unused require * custom emoji base * emoji uploader * delete last old panel files * sidebar styling, remove unused page * refactor submit functions * fix sidebar boxshadow-border * fix old css variables * fix fake-toot avatar * fix non-square emoji * fix user settings redux keys * properly get admin account contact from instance response * Account.source default values * source.status_format key * mobile responsiveness * mobile element tweaks * proper redirect after removing block * add redirects for old setting panel urls * deletes * fix mobile overflow * clean up debug logging calls --- web/source/panels/admin/settings.js | 182 ------------------------------------ 1 file changed, 182 deletions(-) delete mode 100644 web/source/panels/admin/settings.js (limited to 'web/source/panels/admin/settings.js') diff --git a/web/source/panels/admin/settings.js b/web/source/panels/admin/settings.js deleted file mode 100644 index c9f470464..000000000 --- a/web/source/panels/admin/settings.js +++ /dev/null @@ -1,182 +0,0 @@ -/* - GoToSocial - Copyright (C) 2021-2022 GoToSocial Authors admin@gotosocial.org - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . -*/ - -"use strict"; - -const Promise = require("bluebird"); -const React = require("react"); - -module.exports = function Settings({oauth}) { - const [info, setInfo] = React.useState({}); - const [errorMsg, setError] = React.useState(""); - const [statusMsg, setStatus] = React.useState("Fetching instance info"); - - React.useEffect(() => { - Promise.try(() => { - return oauth.apiRequest("/api/v1/instance", "GET"); - }).then((json) => { - setInfo(json); - }).catch((e) => { - setError(e.message); - setStatus(""); - }); - }, []); - - function submit() { - setStatus("PATCHing"); - setError(""); - return Promise.try(() => { - let formDataInfo = new FormData(); - Object.entries(info).forEach(([key, val]) => { - if (key == "contact_account") { - key = "contact_username"; - val = val.username; - } - if (key == "email") { - key = "contact_email"; - } - if (typeof val != "object") { - formDataInfo.append(key, val); - } - }); - return oauth.apiRequest("/api/v1/instance", "PATCH", formDataInfo, "form"); - }).then((json) => { - setStatus("Config saved"); - console.log(json); - }).catch((e) => { - setError(e.message); - setStatus(""); - }); - } - - return ( -
-

Instance Information

-
- {errorMsg} -
-
- {statusMsg} -
-
e.preventDefault()}> - {editableObject(info)} -
-
- ); -}; - -function editableObject(obj, path=[]) { - const readOnlyKeys = ["uri", "version", "urls_streaming_api", "stats"]; - const hiddenKeys = ["contact_account_", "urls"]; - const explicitShownKeys = ["contact_account_username"]; - const implementedKeys = "title, contact_account_username, email, short_description, description, terms, avatar, header".split(", "); - const textareaKeys = ["short_description", "description"] - - let listing = Object.entries(obj).map(([key, val]) => { - let fullkey = [...path, key].join("_"); - - if ( - hiddenKeys.includes(fullkey) || - hiddenKeys.includes(path.join("_")+"_") // also match just parent path - ) { - if (!explicitShownKeys.includes(fullkey)) { - return null; - } - } - - if (Array.isArray(val)) { - // FIXME: handle this - } else if (typeof val == "object") { - return ( - {editableObject(val, [...path, key])} - ); - } - - let isImplemented = ""; - if (!implementedKeys.includes(fullkey)) { - isImplemented = " notImplemented"; - } - - let isReadOnly = ( - readOnlyKeys.includes(fullkey) || - readOnlyKeys.includes(path.join("_")) || - isImplemented != "" - ); - - let label = key.replace(/_/g, " "); - if (path.length > 0) { - label = `\u00A0`.repeat(4 * path.length) + label; - } - - let inputProps; - let changeFunc; - if (val === true || val === false) { - inputProps = { - type: "checkbox", - defaultChecked: val, - disabled: isReadOnly - }; - changeFunc = (e) => e.target.checked; - } else if (val.length != 0 && !isNaN(val)) { - inputProps = { - type: "number", - defaultValue: val, - readOnly: isReadOnly - }; - changeFunc = (e) => e.target.value; - } else { - inputProps = { - type: "text", - defaultValue: val, - readOnly: isReadOnly - }; - changeFunc = (e) => e.target.value; - } - - function setRef(element) { - if (element != null) { - element.addEventListener("change", (e) => { - obj[key] = changeFunc(e); - }); - } - } - - let field; - if (textareaKeys.includes(fullkey)) { - field = - } else { - field = - } - return ( - - -
- {field} -
-
- ); - }); - return ( - - {path != "" && - <>{path}: - } - {listing} - - ); -} \ No newline at end of file -- cgit v1.2.3