Home Reference Source

cables_dev/cables_ui/src/ui/dialogs/modalopdependencies.js

  1. import { utils } from "cables";
  2. import ModalDialog from "./modaldialog.js";
  3. import { gui } from "../gui.js";
  4. import OpDependencyTabPanel from "../elements/tabpanel/opdependencytabpanel.js";
  5. import OpDependencyTab from "../components/tabs/tab_opdependency.js";
  6. /** @typedef {import("cables-shared-client").OpDoc} OpDoc */
  7. export default class ModalOpDependencies
  8. {
  9. /** @type {OpDependencyTabPanel} */
  10. #tabs;
  11. /** @type {ModalDialog} */
  12. #dialog;
  13. /** @type {OpDoc} */
  14. #opDoc;
  15. /** @type {boolean} */
  16. #canEdit;
  17. /**
  18. *
  19. * @param {OpDoc} opDoc
  20. */
  21. constructor(opDoc)
  22. {
  23. this.#opDoc = opDoc;
  24. this.#canEdit = gui.serverOps.canEditOp(gui.user, this.#opDoc.name);
  25. /** @type {import("./modaldialog.js").ModalDialogOptions} */
  26. const modalOptions = {
  27. "title": "Add dependency for " + this.#opDoc.name,
  28. "html": this.getHtml(),
  29. "showOkButton": !this.#canEdit,
  30. "warning": !this.#canEdit,
  31. "choice": this.#canEdit
  32. };
  33. if (this.#canEdit)
  34. {
  35. modalOptions.choice = true;
  36. modalOptions.okButton = {
  37. "text": "Add",
  38. "disabled": true,
  39. "callback": (done) =>
  40. {
  41. const activeTab = this.#tabs.getActiveTab();
  42. activeTab.submit(done);
  43. }
  44. };
  45. }
  46. else
  47. {
  48. modalOptions.showOkButton = true;
  49. modalOptions.warning = true;
  50. }
  51. this.#dialog = new ModalDialog(modalOptions);
  52. this.#initTabs();
  53. }
  54. /**
  55. * @returns {string}
  56. */
  57. getHtml()
  58. {
  59. if (this.#canEdit)
  60. {
  61. return "<div id=\"dependencytabs\" class=\"dependencytabs\"></div>";
  62. }
  63. else
  64. {
  65. return "You are not allowed to change attachments of this op";
  66. }
  67. }
  68. #initTabs()
  69. {
  70. if (this.#canEdit)
  71. {
  72. const allLibs = gui.opDocs.libs.sort((a, b) => { return a.localeCompare(b); });
  73. const libs = [];
  74. allLibs.forEach((lib) =>
  75. {
  76. libs.push({
  77. "url": lib,
  78. "name": utils.basename(lib),
  79. "isAssetLib": lib.startsWith("/assets/")
  80. });
  81. });
  82. this.#tabs = new OpDependencyTabPanel("dependencytabs", this.#opDoc);
  83. this.#tabs.init();
  84. }
  85. }
  86. close()
  87. {
  88. this.#dialog.close();
  89. this.#dialog = null;
  90. }
  91. }