gtsocial-umbx

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

submit.js (1970B)


      1 /*
      2 	GoToSocial
      3 	Copyright (C) GoToSocial Authors admin@gotosocial.org
      4 	SPDX-License-Identifier: AGPL-3.0-or-later
      5 
      6 	This program is free software: you can redistribute it and/or modify
      7 	it under the terms of the GNU Affero General Public License as published by
      8 	the Free Software Foundation, either version 3 of the License, or
      9 	(at your option) any later version.
     10 
     11 	This program is distributed in the hope that it will be useful,
     12 	but WITHOUT ANY WARRANTY; without even the implied warranty of
     13 	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     14 	GNU Affero General Public License for more details.
     15 
     16 	You should have received a copy of the GNU Affero General Public License
     17 	along with this program.  If not, see <http://www.gnu.org/licenses/>.
     18 */
     19 
     20 "use strict";
     21 
     22 const Promise = require("bluebird");
     23 const React = require("react");
     24 const getFormMutations = require("./get-form-mutations");
     25 
     26 module.exports = function useFormSubmit(form, mutationQuery, { changedOnly = true, onFinish } = {}) {
     27 	if (!Array.isArray(mutationQuery)) {
     28 		throw new ("useFormSubmit: mutationQuery was not an Array. Is a valid useMutation RTK Query provided?");
     29 	}
     30 	const [runMutation, result] = mutationQuery;
     31 	const usedAction = React.useRef(null);
     32 	return [
     33 		function submitForm(e) {
     34 			let action;
     35 			if (e?.preventDefault) {
     36 				e.preventDefault();
     37 				action = e.nativeEvent.submitter.name;
     38 			} else {
     39 				action = e;
     40 			}
     41 
     42 			if (action == "") {
     43 				action = undefined;
     44 			}
     45 			usedAction.current = action;
     46 			// transform the field definitions into an object with just their values 
     47 
     48 			const { mutationData, updatedFields } = getFormMutations(form, { changedOnly });
     49 
     50 			if (updatedFields.length == 0) {
     51 				return;
     52 			}
     53 
     54 			mutationData.action = action;
     55 
     56 			return Promise.try(() => {
     57 				return runMutation(mutationData);
     58 			}).then((res) => {
     59 				if (onFinish) {
     60 					return onFinish(res);
     61 				}
     62 			});
     63 		},
     64 		{
     65 			...result,
     66 			action: usedAction.current
     67 		}
     68 	];
     69 };