5 changed files with 139 additions and 1 deletions
After Width: | Height: | Size: 110 KiB |
@ -0,0 +1,103 @@ |
|||
import { patch } from "@web/core/utils/patch"; |
|||
import { ViewButton } from "@web/views/view_button/view_button"; |
|||
import { SettingsConfirmationDialog } from "@web/webclient/settings_form_view/settings_confirmation_dialog"; |
|||
import { useService } from "@web/core/utils/hooks"; |
|||
import { _t } from "@web/core/l10n/translation"; |
|||
import { pick } from "@web/core/utils/objects"; |
|||
|
|||
patch(ViewButton.prototype, { |
|||
setup() { |
|||
super.setup(...arguments); |
|||
this.dialogService = useService("dialog"); |
|||
}, |
|||
|
|||
async onClick(ev) { |
|||
const proceed = await this._confirmSave(); |
|||
|
|||
if (!proceed) { |
|||
return; |
|||
} |
|||
|
|||
if (this.props.tag === "a") { |
|||
ev.preventDefault(); |
|||
} |
|||
|
|||
if (this.props.onClick) { |
|||
return this.props.onClick(); |
|||
} |
|||
}, |
|||
|
|||
discard() { |
|||
const model = this.props.record || this.props.model; |
|||
|
|||
if (!model) { |
|||
console.warn("No model available to discard or save."); |
|||
return; |
|||
} |
|||
|
|||
this.env.onClickViewButton({ |
|||
clickParams: { |
|||
name: "cancel", |
|||
type: "object", |
|||
special: "cancel", |
|||
}, |
|||
getResParams: () => |
|||
pick(model, "context", "evalContext", "resModel", "resId", "resIds"), |
|||
}); |
|||
}, |
|||
|
|||
async _confirmSave() { |
|||
let _continue = true; |
|||
|
|||
await new Promise((resolve) => { |
|||
this.dialogService.add(SettingsConfirmationDialog, { |
|||
body: _t("Would you like to save your changes?"), |
|||
confirm: async () => { |
|||
// Check if `clickParams` is available
|
|||
const clickParams = this.clickParams || { |
|||
name: "execute", |
|||
type: "object", |
|||
}; |
|||
|
|||
const model = this.props.record || this.props.model; |
|||
if (model) { |
|||
await this.env.onClickViewButton({ |
|||
clickParams, |
|||
getResParams: () => |
|||
pick( |
|||
model, |
|||
"context", |
|||
"evalContext", |
|||
"resModel", |
|||
"resId", |
|||
"resIds" |
|||
), |
|||
}); |
|||
} else { |
|||
console.warn("No model available to execute save."); |
|||
} |
|||
|
|||
_continue = true; |
|||
resolve(); |
|||
}, |
|||
cancel: async () => { |
|||
const model = this.props.record || this.props.model; |
|||
if (model) { |
|||
await model?.discard?.(); |
|||
await model?.save?.(); |
|||
} else { |
|||
console.warn("No model available to discard or save."); |
|||
} |
|||
_continue = true; |
|||
resolve(); |
|||
}, |
|||
stayHere: () => { |
|||
_continue = false; |
|||
resolve(); |
|||
}, |
|||
}); |
|||
}); |
|||
|
|||
return _continue; |
|||
}, |
|||
}); |
Loading…
Reference in new issue