/* GoToSocial Copyright (C) 2021-2023 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 React = require("react"); const Redux = require("react-redux"); const query = require("../lib/query"); const { useTextInput } = require("../components/form"); const FakeProfile = require("../components/fake-profile"); const syncpipe = require("syncpipe"); const MutationButton = require("../components/mutation-button"); module.exports = function UserProfile() { const allowCustomCSS = Redux.useSelector(state => state.instances.current.configuration.accounts.allow_custom_css); const profile = Redux.useSelector(state => state.user.profile); /* User profile update form keys - bool bot - bool locked - string display_name - string note - file avatar - file header - string source[privacy] - bool source[sensitive] - string source[language] - string source[status_format] - bool enable_rss - string custom_css (if enabled) */ const form = { display_name: useTextInput("displayName", {defaultValue: profile.display_name}) }; const [result, submitForm] = useFormSubmit(form, query.useUpdateCredentialsMutation()); return (

Profile

{/* */}

Header

{/* */}

Avatar

{/* */}
{/* } */} ); }; function FormTextInput({label, placeHolder, field}) { let [onChange, _reset, {value, ref}] = field; return (
); } function useFormSubmit(form, [mutationQuery, result]) { return [ result, function submitForm(e) { e.preventDefault(); // transform the field definitions into an object with just their values let updatedFields = 0; const mutationData = syncpipe(form, [ (_) => Object.entries(_), (_) => _.map(([key, field]) => { let data = field[2]; // [onChange, reset, {}] if (data.hasChanged()) { return [key, data.value]; } else { return null; } }), (_) => _.filter((value) => value != null), (_) => { updatedFields = _.length; return _; }, (_) => Object.fromEntries(_) ]); if (updatedFields > 0) { return mutationQuery(mutationData); } }, ]; } // function useForm(formSpec) { // const form = {}; // Object.entries(formSpec).forEach(([name, cfg]) => { // const [useTypedInput, defaultValue] = cfg; // form[name] = useTypedInput(name, ); // }); // form.submit = function submitForm() { // }; // return form; // }