From 33166735116c821c714e9ddbb26deb60a21b7285 Mon Sep 17 00:00:00 2001
From: DCoded <dcoded@live.com>
Date: Wed, 4 Nov 2020 11:46:58 -0500
Subject: [PATCH] Added base rename function for all facilities

---
 devTools/types/FC/facilities.d.ts |  1 +
 src/004-base/facility.js          |  9 +++++++++
 src/facilities/facilities.css     |  3 +++
 src/facilities/pit/pit.js         | 20 +++-----------------
 src/facilities/utils.js           | 25 +++++++++++++++++++++++++
 5 files changed, 41 insertions(+), 17 deletions(-)
 create mode 100644 src/facilities/facilities.css
 create mode 100644 src/facilities/utils.js

diff --git a/devTools/types/FC/facilities.d.ts b/devTools/types/FC/facilities.d.ts
index e31140fcb24..e2f030c5748 100644
--- a/devTools/types/FC/facilities.d.ts
+++ b/devTools/types/FC/facilities.d.ts
@@ -1,5 +1,6 @@
 declare namespace FC {
 	namespace Facilities {
+		export type Facility = InstanceType<typeof App.Entity.Facilities.Facility>;
 		export type Animal = InstanceType<typeof App.Entity.Animal>;
 
 		interface Pit {
diff --git a/src/004-base/facility.js b/src/004-base/facility.js
index 779bdfa2d95..b88bd4b2072 100644
--- a/src/004-base/facility.js
+++ b/src/004-base/facility.js
@@ -267,6 +267,15 @@ App.Entity.Facilities.Facility = class {
 		return res !== undefined ? res : 'the ' + this.genericName;
 	}
 
+	set name(newName) {
+		const stateObj = V[this.desc.baseName];
+		if (stateObj && typeof stateObj === "object") {
+			stateObj.name = newName;
+		} else {
+			V[this.desc.baseName + "Name"] = newName;
+		}
+	}
+
 	/** @returns {string} */
 	get nameCaps() {
 		return capFirstChar(this.name);
diff --git a/src/facilities/facilities.css b/src/facilities/facilities.css
new file mode 100644
index 00000000000..0c64d4f6e5e
--- /dev/null
+++ b/src/facilities/facilities.css
@@ -0,0 +1,3 @@
+.facility-rename {
+	margin-top: 1em;
+}
diff --git a/src/facilities/pit/pit.js b/src/facilities/pit/pit.js
index bfc8fa414b6..dd09ab878aa 100644
--- a/src/facilities/pit/pit.js
+++ b/src/facilities/pit/pit.js
@@ -19,7 +19,9 @@ App.Facilities.Pit.pit = function() {
 		App.UI.DOM.appendNewElement("div", frag, App.UI.SlaveList.listSJFacilitySlaves(App.Entity.facilities.pit, passage(), false, {assign: "Select a slave to fight", remove: "Cancel a slave's fight", transfer: null}), "pit-assign");
 	}
 
-	frag.appendChild(rename());
+	frag.appendChild(App.Facilities.rename(App.Entity.facilities.pit, () => {
+		App.UI.DOM.replace(introDiv, intro);
+	}));
 
 	return frag;
 
@@ -395,22 +397,6 @@ App.Facilities.Pit.pit = function() {
 
 		return scheduledDiv;
 	}
-
-	function rename() {
-		const renameDiv = App.UI.DOM.makeElement("div", `Rename ${V.pit.name}: `, ["pit-rename"]);
-		const renameNote = App.UI.DOM.makeElement("span", ` Use a noun or similar short phrase`, ["note"]);
-
-		renameDiv.append(App.UI.DOM.makeTextBox(V.pit.name, newName => {
-			V.pit.name = newName;
-
-			App.UI.DOM.replace(renameDiv, rename);
-			App.UI.DOM.replace(introDiv, intro);
-		}));
-
-		renameDiv.append(renameNote);
-
-		return renameDiv;
-	}
 };
 
 App.Facilities.Pit.init = function() {
diff --git a/src/facilities/utils.js b/src/facilities/utils.js
new file mode 100644
index 00000000000..872757fa83a
--- /dev/null
+++ b/src/facilities/utils.js
@@ -0,0 +1,25 @@
+/**
+ * Adds a new "Rename Facility" textbox.
+ *
+ * Allows the use of custom handler functions.
+ * @param {App.Entity.Facilities.Facility} facility The name of the facility in variable form.
+ * @param {function():void} [handler] Any custom function to be run upon entering a new name.
+ */
+App.Facilities.rename = function rename(facility, handler) {
+	const renameDiv = App.UI.DOM.makeElement("div", `Rename ${facility.name}: `, ["facility-rename"]);
+	const renameNote = App.UI.DOM.makeElement("span", ` Use a noun or similar short phrase`, ["note"]);
+
+	renameDiv.appendChild(App.UI.DOM.makeTextBox(facility.name, newName => {
+		facility.name = newName;
+
+		App.UI.DOM.replace(renameDiv, App.Facilities.rename(facility));
+
+		if (handler) {
+			handler();
+		}
+	}));
+
+	renameDiv.appendChild(renameNote);
+
+	return renameDiv;
+};
-- 
GitLab