Skip to content

Commit 1129982

Browse files
committed
Merge branch 'PC-50' of https://github.com/wahanegi/clever-calculator into PC-50
2 parents 6ce636d + 93597f6 commit 1129982

3 files changed

Lines changed: 112 additions & 106 deletions

File tree

Lines changed: 1 addition & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -1,63 +1,7 @@
11
//= require active_admin/base
22
//= require formula_builder
3+
//= require new_parameter
34

4-
document.addEventListener("DOMContentLoaded", function () {
5-
function toggleFields() {
6-
const val = document.querySelector('input[name="parameter_type"]:checked');
7-
const type = val ? val.value : "";
8-
9-
document.getElementById("fixed_fields").style.display = type === "Fixed" ? "block" : "none";
10-
document.getElementById("open_fields").style.display = type === "Open" ? "block" : "none";
11-
document.getElementById("select_fields").style.display = type === "Select" ? "block" : "none";
12-
}
13-
14-
const radios = document.querySelectorAll('input[name="parameter_type"]');
15-
radios.forEach((radio) => {
16-
radio.addEventListener("change", toggleFields);
17-
});
18-
19-
toggleFields();
20-
});
21-
22-
23-
document.addEventListener("DOMContentLoaded", function () {
24-
const addParamLinks = document.querySelectorAll(".store-and-navigate");
25-
26-
if (!addParamLinks.length) return;
27-
28-
addParamLinks.forEach(link => {
29-
link.addEventListener("click", function (event) {
30-
event.preventDefault();
31-
32-
const nameField = document.querySelector("#item_name");
33-
const descriptionField = document.querySelector("#item_description");
34-
const categoryField = document.querySelector("#item_category_id");
35-
36-
const data = {
37-
name: nameField?.value || "",
38-
description: descriptionField?.value || "",
39-
category_id: categoryField?.value || ""
40-
};
41-
42-
const itemId = link.dataset.itemId || "new";
43-
44-
fetch(`/admin/items/${itemId}/save_meta_to_session`, {
45-
method: "POST",
46-
headers: {
47-
"Content-Type": "application/json",
48-
"X-CSRF-Token": document.querySelector('meta[name="csrf-token"]').content
49-
},
50-
body: JSON.stringify(data)
51-
}).then(response => {
52-
if (response.ok) {
53-
window.location.href = link.dataset.redirect;
54-
} else {
55-
alert("⚠️ Failed to save temporary data to session");
56-
}
57-
});
58-
});
59-
});
60-
});
615

626

637
// clear new item session
@@ -108,53 +52,6 @@ document.addEventListener("DOMContentLoaded", function () {
10852
});
10953

11054

111-
document.addEventListener("DOMContentLoaded", () => {
112-
const wrapper = document.getElementById("select-options-wrapper");
113-
const addBtn = document.getElementById("add-option-button");
114-
115-
const createOptionRow = () => {
116-
const row = document.createElement("div");
117-
row.className = "select-option-row";
11855

119-
row.innerHTML = `
120-
<div class="select-field">
121-
<label>Description</label>
122-
<input type="text" name="select_options[][description]" />
123-
</div>
124-
<div class="select-field">
125-
<label>Value</label>
126-
<input type="text" name="select_options[][value]" />
127-
</div>
128-
<button type="button" class="delete-option-button button light">Delete</button>
129-
`;
130-
131-
row.querySelector(".delete-option-button").addEventListener("click", () => {
132-
if (wrapper.querySelectorAll(".select-option-row").length > 2) {
133-
row.remove();
134-
} else {
135-
alert("At least 2 options are required.");
136-
}
137-
});
138-
139-
return row;
140-
};
141-
142-
addBtn.addEventListener("click", () => {
143-
const newRow = createOptionRow();
144-
wrapper.appendChild(newRow);
145-
});
146-
147-
148-
wrapper.querySelectorAll(".select-option-row").forEach((row) => {
149-
const delBtn = row.querySelector(".delete-option-button");
150-
delBtn.addEventListener("click", () => {
151-
if (wrapper.querySelectorAll(".select-option-row").length > 2) {
152-
row.remove();
153-
} else {
154-
alert("At least 2 options are required.");
155-
}
156-
});
157-
});
158-
});
15956

16057

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
// --- Parameter type switch ---
2+
document.addEventListener("DOMContentLoaded", function () {
3+
function toggleFields() {
4+
const val = document.querySelector('input[name="parameter_type"]:checked');
5+
const type = val ? val.value : "";
6+
7+
document.getElementById("fixed_fields").style.display = type === "Fixed" ? "block" : "none";
8+
document.getElementById("open_fields").style.display = type === "Open" ? "block" : "none";
9+
document.getElementById("select_fields").style.display = type === "Select" ? "block" : "none";
10+
}
11+
12+
const radios = document.querySelectorAll('input[name="parameter_type"]');
13+
radios.forEach((radio) => {
14+
radio.addEventListener("change", toggleFields);
15+
});
16+
17+
toggleFields();
18+
});
19+
20+
// --- Add Option and Delete ---
21+
document.addEventListener("DOMContentLoaded", () => {
22+
const wrapper = document.getElementById("select-options-wrapper");
23+
const addBtn = document.getElementById("add-option-button");
24+
25+
const createOptionRow = () => {
26+
const row = document.createElement("div");
27+
row.className = "select-option-row";
28+
29+
row.innerHTML = `
30+
<div class="select-field">
31+
<label>Description</label>
32+
<input type="text" name="select_options[][description]" />
33+
</div>
34+
<div class="select-field">
35+
<label>Value</label>
36+
<input type="text" name="select_options[][value]" />
37+
</div>
38+
<button type="button" class="delete-option-button button light">Delete</button>
39+
`;
40+
41+
row.querySelector(".delete-option-button").addEventListener("click", () => {
42+
if (wrapper.querySelectorAll(".select-option-row").length > 2) {
43+
row.remove();
44+
} else {
45+
alert("At least 2 options are required.");
46+
}
47+
});
48+
49+
return row;
50+
};
51+
52+
addBtn.addEventListener("click", () => {
53+
const newRow = createOptionRow();
54+
wrapper.appendChild(newRow);
55+
});
56+
57+
58+
wrapper.querySelectorAll(".select-option-row").forEach((row) => {
59+
const delBtn = row.querySelector(".delete-option-button");
60+
delBtn.addEventListener("click", () => {
61+
if (wrapper.querySelectorAll(".select-option-row").length > 2) {
62+
row.remove();
63+
} else {
64+
alert("At least 2 options are required.");
65+
}
66+
});
67+
});
68+
});
69+
70+
// --- Save meta info (name, desc, category_id) before transition ---
71+
document.addEventListener("DOMContentLoaded", function () {
72+
const addParamLinks = document.querySelectorAll(".store-and-navigate");
73+
74+
if (!addParamLinks.length) return;
75+
76+
addParamLinks.forEach(link => {
77+
link.addEventListener("click", function (event) {
78+
event.preventDefault();
79+
80+
const nameField = document.querySelector("#item_name");
81+
const descriptionField = document.querySelector("#item_description");
82+
const categoryField = document.querySelector("#item_category_id");
83+
84+
const data = {
85+
name: nameField?.value || "",
86+
description: descriptionField?.value || "",
87+
category_id: categoryField?.value || ""
88+
};
89+
90+
const itemId = link.dataset.itemId || "new";
91+
92+
fetch(`/admin/items/${itemId}/save_meta_to_session`, {
93+
method: "POST",
94+
headers: {
95+
"Content-Type": "application/json",
96+
"X-CSRF-Token": document.querySelector('meta[name="csrf-token"]').content
97+
},
98+
body: JSON.stringify(data)
99+
}).then(response => {
100+
if (response.ok) {
101+
window.location.href = link.dataset.redirect;
102+
} else {
103+
alert("⚠️ Failed to save temporary data to session");
104+
}
105+
});
106+
});
107+
});
108+
});
109+

app/views/admin/items/_parameters.html.erb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
<td style="width: 40%;">Value is entered by the user</td>
4747
<% if mode == :edit %>
4848
<td style="width: 20%;">
49-
<%= link_to "Delete", remove_parameter_admin_item_path(item_key, param_type: :fixed, param_key: label.to_s),
49+
<%= link_to "Delete", remove_parameter_admin_item_path(item_key, param_type: :open, param_key: label.to_s),
5050
method: :delete, data: { confirm: "Delete fixed param '#{label}'?" } %>
5151
</td>
5252
<% end %>
@@ -93,7 +93,7 @@
9393
</td>
9494
<% if mode == :edit %>
9595
<td>
96-
<%= link_to "Delete", remove_parameter_admin_item_path(item_key, param_type: :fixed, param_key: sel_name.to_s),
96+
<%= link_to "Delete", remove_parameter_admin_item_path(item_key, param_type: :select, param_key: sel_name.to_s),
9797
method: :delete, data: { confirm: "Delete fixed param '#{sel_name}'?" } %>
9898
</td>
9999
<% end %>

0 commit comments

Comments
 (0)