Files
discourse-adplugin/admin/assets/javascripts/discourse/controllers/admin-plugins-house-ads-show.js
T

116 lines
3.3 KiB
JavaScript
Raw Normal View History

2023-11-07 17:07:33 +00:00
import Controller, { inject as controller } from "@ember/controller";
import { not, or } from "@ember/object/computed";
2024-01-15 12:24:24 +01:00
import { inject as service } from "@ember/service";
2019-04-18 17:52:59 -04:00
import { ajax } from "discourse/lib/ajax";
import { popupAjaxError } from "discourse/lib/ajax-error";
import { propertyNotEqual } from "discourse/lib/computed";
import { bufferedProperty } from "discourse/mixins/buffered-content";
2023-11-07 17:07:33 +00:00
import I18n from "I18n";
2019-04-18 17:52:59 -04:00
2022-03-06 19:52:19 +01:00
export default Controller.extend(bufferedProperty("model"), {
adminPluginsHouseAds: controller("adminPlugins.houseAds"),
2024-01-15 12:24:24 +01:00
router: service(),
2019-04-18 17:52:59 -04:00
saving: false,
savingStatus: "",
nameDirty: propertyNotEqual("buffered.name", "model.name"),
htmlDirty: propertyNotEqual("buffered.html", "model.html"),
visibleToAnonsDirty: propertyNotEqual(
"buffered.visible_to_anons",
"model.visible_to_anons"
),
visibleToLoggedInDirty: propertyNotEqual(
"buffered.visible_to_logged_in_users",
"model.visible_to_logged_in_users"
),
dirty: or(
"nameDirty",
"htmlDirty",
"visibleToLoggedInDirty",
"visibleToAnonsDirty"
),
2022-03-06 19:52:19 +01:00
disableSave: not("dirty"),
2019-04-18 17:52:59 -04:00
actions: {
save() {
if (!this.get("saving")) {
this.setProperties({
saving: true,
2020-09-04 13:24:14 +02:00
savingStatus: I18n.t("saving"),
2019-04-18 17:52:59 -04:00
});
const data = {},
buffered = this.get("buffered"),
newRecord = !buffered.get("id");
if (!newRecord) {
data.id = buffered.get("id");
}
data.name = buffered.get("name");
data.html = buffered.get("html");
data.visible_to_logged_in_users = buffered.get(
"visible_to_logged_in_users"
);
data.visible_to_anons = buffered.get("visible_to_anons");
2019-04-18 17:52:59 -04:00
ajax(
newRecord
? `/admin/plugins/pluginad/house_creatives`
: `/admin/plugins/pluginad/house_creatives/${buffered.get("id")}`,
2019-04-18 17:52:59 -04:00
{
type: newRecord ? "POST" : "PUT",
2020-09-04 13:24:14 +02:00
data,
2019-04-18 17:52:59 -04:00
}
)
2020-09-04 13:24:14 +02:00
.then((ajaxData) => {
2019-04-18 17:52:59 -04:00
this.commitBuffer();
this.set("savingStatus", I18n.t("saved"));
if (newRecord) {
const model = this.get("model");
2019-06-14 12:10:11 -04:00
model.set("id", ajaxData.house_ad.id);
2019-04-18 17:52:59 -04:00
const houseAds = this.get("adminPluginsHouseAds.model");
if (!houseAds.includes(model)) {
houseAds.pushObject(model);
}
2024-01-15 12:24:24 +01:00
this.router.transitionTo(
2019-04-18 17:52:59 -04:00
"adminPlugins.houseAds.show",
model.get("id")
);
}
})
.catch(popupAjaxError)
.finally(() => {
this.setProperties({
saving: false,
2020-09-04 13:24:14 +02:00
savingStatus: "",
2019-04-18 17:52:59 -04:00
});
});
}
},
cancel() {
this.rollbackBuffer();
},
destroy() {
const houseAds = this.get("adminPluginsHouseAds.model");
const model = this.get("model");
if (!model.get("id")) {
2024-01-15 12:24:24 +01:00
this.router.transitionTo("adminPlugins.houseAds.index");
2019-04-18 17:52:59 -04:00
return;
}
ajax(`/admin/plugins/pluginad/house_creatives/${model.get("id")}`, {
2020-09-04 13:24:14 +02:00
type: "DELETE",
2019-04-18 17:52:59 -04:00
})
.then(() => {
houseAds.removeObject(model);
2024-01-15 12:24:24 +01:00
this.router.transitionTo("adminPlugins.houseAds.index");
2019-04-18 17:52:59 -04:00
})
.catch(popupAjaxError);
2020-09-04 13:24:14 +02:00
},
},
2019-04-18 17:52:59 -04:00
});