mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-11-04 09:32:25 -06:00 
			
		
		
		
	
		
			
	
	
		
			76 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			76 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
									GoToSocial
							 | 
						||
| 
								 | 
							
									Copyright (C) GoToSocial Authors admin@gotosocial.org
							 | 
						||
| 
								 | 
							
									SPDX-License-Identifier: AGPL-3.0-or-later
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									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 <http://www.gnu.org/licenses/>.
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import React from "react";
							 | 
						||
| 
								 | 
							
								import { Link } from "wouter";
							 | 
						||
| 
								 | 
							
								import { useInstanceRulesQuery, useAddInstanceRuleMutation } from "../../../lib/query/admin";
							 | 
						||
| 
								 | 
							
								import { useBaseUrl } from "../../../lib/navigation/util";
							 | 
						||
| 
								 | 
							
								import { useTextInput } from "../../../lib/form";
							 | 
						||
| 
								 | 
							
								import useFormSubmit from "../../../lib/form/submit";
							 | 
						||
| 
								 | 
							
								import { TextArea } from "../../../components/form/inputs";
							 | 
						||
| 
								 | 
							
								import MutationButton from "../../../components/form/mutation-button";
							 | 
						||
| 
								 | 
							
								import { InstanceRule, MappedRules } from "../../../lib/types/rules";
							 | 
						||
| 
								 | 
							
								import FormWithData from "../../../lib/form/form-with-data";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export default function InstanceRules() {
							 | 
						||
| 
								 | 
							
									return (
							 | 
						||
| 
								 | 
							
										<>
							 | 
						||
| 
								 | 
							
											<h1>Instance Rules</h1>
							 | 
						||
| 
								 | 
							
											<FormWithData
							 | 
						||
| 
								 | 
							
												dataQuery={useInstanceRulesQuery}
							 | 
						||
| 
								 | 
							
												DataForm={InstanceRulesForm}
							 | 
						||
| 
								 | 
							
											/>
							 | 
						||
| 
								 | 
							
										</>
							 | 
						||
| 
								 | 
							
									);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function InstanceRulesForm({ data: rules }: { data: MappedRules }) {
							 | 
						||
| 
								 | 
							
									const baseUrl = useBaseUrl();
							 | 
						||
| 
								 | 
							
									const newRule = useTextInput("text");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									const [submitForm, result] = useFormSubmit({ newRule }, useAddInstanceRuleMutation(), {
							 | 
						||
| 
								 | 
							
										changedOnly: true,
							 | 
						||
| 
								 | 
							
										onFinish: () => newRule.reset()
							 | 
						||
| 
								 | 
							
									});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									return (
							 | 
						||
| 
								 | 
							
										<form onSubmit={submitForm} className="new-rule">
							 | 
						||
| 
								 | 
							
											<ol className="instance-rules">
							 | 
						||
| 
								 | 
							
												{Object.values(rules).map((rule: InstanceRule) => (
							 | 
						||
| 
								 | 
							
													<Link key={"link-"+rule.id} className="rule" to={`~${baseUrl}/rules/${rule.id}`}>
							 | 
						||
| 
								 | 
							
														<li key={rule.id}>
							 | 
						||
| 
								 | 
							
															<h2>{rule.text} <i className="fa fa-pencil edit-icon" /></h2>
							 | 
						||
| 
								 | 
							
														</li>
							 | 
						||
| 
								 | 
							
														<span>{new Date(rule.created_at).toLocaleString()}</span>
							 | 
						||
| 
								 | 
							
													</Link>
							 | 
						||
| 
								 | 
							
												))}
							 | 
						||
| 
								 | 
							
											</ol>
							 | 
						||
| 
								 | 
							
											<TextArea
							 | 
						||
| 
								 | 
							
												field={newRule}
							 | 
						||
| 
								 | 
							
												label="New instance rule"
							 | 
						||
| 
								 | 
							
											/>
							 | 
						||
| 
								 | 
							
											<MutationButton
							 | 
						||
| 
								 | 
							
												disabled={newRule.value === undefined || newRule.value.length === 0}
							 | 
						||
| 
								 | 
							
												label="Add rule"
							 | 
						||
| 
								 | 
							
												result={result}
							 | 
						||
| 
								 | 
							
											/>
							 | 
						||
| 
								 | 
							
										</form>
							 | 
						||
| 
								 | 
							
									);
							 | 
						||
| 
								 | 
							
								}
							 |