aboutsummaryrefslogtreecommitdiffstats
path: root/dashboard/src/components/model
diff options
context:
space:
mode:
Diffstat (limited to 'dashboard/src/components/model')
-rw-r--r--dashboard/src/components/model/AddCategory.vue126
-rw-r--r--dashboard/src/components/model/AddMetarule.vue111
-rw-r--r--dashboard/src/components/model/Category.vue64
-rw-r--r--dashboard/src/components/model/CreateModel.vue57
-rw-r--r--dashboard/src/components/model/Metarule.vue155
-rw-r--r--dashboard/src/components/model/Model.vue112
-rw-r--r--dashboard/src/components/model/OrphanCategory.vue65
-rw-r--r--dashboard/src/components/model/Orphans.vue79
8 files changed, 769 insertions, 0 deletions
diff --git a/dashboard/src/components/model/AddCategory.vue b/dashboard/src/components/model/AddCategory.vue
new file mode 100644
index 00000000..c22ab333
--- /dev/null
+++ b/dashboard/src/components/model/AddCategory.vue
@@ -0,0 +1,126 @@
+<template>
+ <div>
+ <template v-if="categories.length > 0">
+ <h4>Select category:</h4>
+ <form data-vv-scope="select">
+ <div class="form-group">
+ <select v-model="selectedCategoryId" v-validate.initial="'required'">
+ <option disabled value>Please select one</option>
+ <option
+ v-for="category in categories"
+ :value="category.id"
+ :key="category.id"
+ >{{category.name}}</option>
+ </select>
+ </div>
+ <button type="button" class="btn btn-secondary" @click="close()">Cancel</button>
+ <span>&nbsp;</span>
+ <button
+ type="button"
+ :disabled="errors.any('select')"
+ class="btn btn-primary"
+ @click="addCategory()"
+ >Add</button>
+ </form>
+ <br>
+ <br>
+ <h4>Or create a new one:</h4>
+ </template>
+ <h4 v-else>Create a category:</h4>
+ <form data-vv-scope="create">
+ <div class="form-group">
+ <label for="categoryName">Name</label>
+ <input
+ type="text"
+ name="name"
+ v-model="categoryCreate.name"
+ v-validate.initial="'alpha_dash|required|min:3'"
+ class="form-control"
+ id="categoryName"
+ >
+ </div>
+ <div class="form-group">
+ <label for="modelDescription">Description</label>
+ <textarea
+ name="description"
+ v-model="categoryCreate.description"
+ v-validate="'required|min:3'"
+ class="form-control"
+ ></textarea>
+ </div>
+ <ul>
+ <li v-for="error in errors.all('create')" :key="error.id">{{ error }}</li>
+ </ul>
+ <button type="button" class="btn btn-secondary" @click="close()">Cancel</button>
+ <span>&nbsp;</span>
+ <button
+ type="button"
+ :disabled="errors.any('create')"
+ class="btn btn-primary"
+ @click="createCategory()"
+ >Create</button>
+ </form>
+ </div>
+</template>
+
+<script>
+import ModelService from "./../../services/Model.service.js";
+import util from "./../../services/Util.service.js";
+
+var categoryMap = {
+ subject: {
+ listName: "subject_categories",
+ serviceListName: "subjectCategories"
+ },
+ object: {
+ listName: "object_categories",
+ serviceListName: "objectCategories"
+ },
+ action: {
+ listName: "action_categories",
+ serviceListName: "actionCategories"
+ }
+};
+
+export default {
+ name: "addCategory",
+ data: function() {
+ return {
+ selectedCategoryId: null,
+ categoryCreate: {
+ name: "",
+ description: ""
+ }
+ };
+ },
+ props: {
+ metarule: Object,
+ type: String
+ },
+ methods: {
+ createCategory() {
+ ModelService.createCategory(this.type, this.categoryCreate).then(category => {
+ this.selectedCategoryId = category.id;
+ this.addCategory();
+ });
+ },
+ addCategory() {
+ var category = ModelService.getCategory(this.type, this.selectedCategoryId);
+ var metaRuleCopy = util.clone(this.metarule);
+ metaRuleCopy[categoryMap[this.type].listName].push(category);
+ ModelService.updateMetaRule(metaRuleCopy);
+ this.close();
+ },
+ close() {
+ this.$emit("close");
+ }
+ },
+ computed: {
+ categories() {
+ return ModelService[categoryMap[this.type].serviceListName].filter(
+ el => !this.metarule[categoryMap[this.type].listName].includes(el)
+ );
+ }
+ }
+};
+</script>
diff --git a/dashboard/src/components/model/AddMetarule.vue b/dashboard/src/components/model/AddMetarule.vue
new file mode 100644
index 00000000..ef6e8503
--- /dev/null
+++ b/dashboard/src/components/model/AddMetarule.vue
@@ -0,0 +1,111 @@
+<template>
+ <div>
+ <hr>
+ <template v-if="metarules.length > 0">
+ <h4>Select metarule:</h4>
+ <form data-vv-scope="select">
+ <div class="form-group">
+ <select v-model="selectedMetaruleId" v-validate.initial="'required'">
+ <option disabled value>Please select one</option>
+ <option
+ v-for="metarule in metarules"
+ :value="metarule.id"
+ :key="metarule.id"
+ >{{metarule.name}}</option>
+ </select>
+ </div>
+ <button type="button" class="btn btn-secondary" @click="close()">Cancel</button>
+ <span>&nbsp;</span>
+ <button
+ type="button"
+ :disabled="errors.any('select')"
+ class="btn btn-primary"
+ @click="addMetarule()"
+ >Add</button>
+ </form>
+ <br>
+ <br>
+ <h4>Or create a new one:</h4>
+ </template>
+ <h4 v-else>Create a metarule:</h4>
+ <form data-vv-scope="create">
+ <div class="form-group">
+ <label for="metaruleName">Name</label>
+ <input
+ type="text"
+ name="name"
+ v-model="metaruleCreate.name"
+ v-validate.initial="'alpha_dash|required|min:3'"
+ class="form-control"
+ id="metaruleName"
+ >
+ </div>
+ <div class="form-group">
+ <label for="modelDescription">Description</label>
+ <textarea
+ name="description"
+ v-model="metaruleCreate.description"
+ v-validate="'required|min:3'"
+ class="form-control"
+ ></textarea>
+ </div>
+ <ul>
+ <li v-for="error in errors.all('create')" :key="error.id">{{ error }}</li>
+ </ul>
+ <button type="button" class="btn btn-secondary" @click="close()">Cancel</button>
+ <span>&nbsp;</span>
+ <button
+ type="button"
+ :disabled="errors.any('create')"
+ class="btn btn-primary"
+ @click="createMetarule()"
+ >Create and add</button>
+ </form>
+ </div>
+</template>
+
+<script>
+import ModelService from "./../../services/Model.service.js";
+import util from "./../../services/Util.service.js";
+
+export default {
+ name: "addMetarule",
+ data: function() {
+ return {
+ selectedMetaruleId: null,
+ metaruleCreate: {
+ name: "",
+ description: ""
+ }
+ };
+ },
+ props: {
+ model: Object
+ },
+ methods: {
+ createMetarule() {
+ ModelService.createMetaRule(this.metaruleCreate).then(metarule => {
+ this.selectedMetaruleId = metarule.id;
+ this.addMetarule();
+ });
+ },
+ addMetarule() {
+ var metaRule = ModelService.getMetaRule(this.selectedMetaruleId);
+ var modelCopy = util.clone(this.model);
+ modelCopy.meta_rules.push(metaRule);
+ ModelService.updateModel(modelCopy);
+ this.close();
+ },
+ close() {
+ this.$emit("close");
+ }
+ },
+ computed: {
+ metarules() {
+ return ModelService.metaRules.filter(
+ el => !this.model.meta_rules.includes(el)
+ );
+ }
+ }
+};
+</script>
diff --git a/dashboard/src/components/model/Category.vue b/dashboard/src/components/model/Category.vue
new file mode 100644
index 00000000..81efb1ed
--- /dev/null
+++ b/dashboard/src/components/model/Category.vue
@@ -0,0 +1,64 @@
+<template>
+ <div>
+ <span :title="category.description">{{ category.name }}</span>
+ <button type="button" class="fa fa-trash pull-right btn btn-dark btn-sm" @click="removeCategory()" title="Remove"></button>
+ <div v-for="attribute in attributes" :key="attribute.id">
+ <b>attributes: </b> {{attribute.id}}
+ </div>
+ </div>
+</template>
+
+<script>
+import ModelService from "./../../services/Model.service.js";
+import util from "./../../services/Util.service.js";
+
+var categoryMap = {
+ subject: {
+ addTitle: "Add Subject Category",
+ removeTitleFromMetaRule:
+ "Are you sure to remove from meta rule this Subject Category?",
+ removeTitle: "Are you sure to remove this Subject Category?",
+ listName: "subject_categories",
+ serviceListName: "subjectCategories"
+ },
+ object: {
+ addTitle: "Add Object Category",
+ removeTitleFromMetaRule:
+ "Are you sure to remove from meta rule this Object Category?",
+ removeTitle: "Are you sure to remove this Object Category?",
+ listName: "object_categories",
+ serviceListName: "objectCategories"
+ },
+ action: {
+ addTitle: "Add Action Category",
+ removeTitleFromMetaRule:
+ "Are you sure to remove from meta rule this Action Category?",
+ removeTitle: "Are you sure to remove this Action Category?",
+ listName: "action_categories",
+ serviceListName: "actionCategories"
+ }
+};
+
+export default {
+ name: "category",
+ props: {
+ metarule: Object,
+ category: Object,
+ attributes: Array,
+ type: String
+ },
+ methods: {
+ removeCategory() {
+ var typeValue = categoryMap[this.type];
+ if (confirm(typeValue.removeTitleFromMetaRule)) {
+ var metaruleCopy = util.clone(this.metarule);
+ metaruleCopy[typeValue.listName].splice(
+ metaruleCopy[typeValue.listName].indexOf(this.category),
+ 1
+ );
+ ModelService.updateMetaRule(metaruleCopy);
+ }
+ }
+ }
+};
+</script>
diff --git a/dashboard/src/components/model/CreateModel.vue b/dashboard/src/components/model/CreateModel.vue
new file mode 100644
index 00000000..d5403e7b
--- /dev/null
+++ b/dashboard/src/components/model/CreateModel.vue
@@ -0,0 +1,57 @@
+<template>
+ <div class="list-group-item row">
+ <form>
+ <div class="form-group">
+ <label for="modelName">Name</label>
+ <input
+ type="text"
+ name="name"
+ v-model="modelCreate.name"
+ v-validate.initial="'alpha_dash|required|min:3'"
+ class="form-control"
+ id="modelName"
+ >
+ </div>
+ <div class="form-group">
+ <label for="modelDescription">Description</label>
+ <textarea
+ name="description"
+ v-model="modelCreate.description"
+ v-validate.initial="'required|min:3'"
+ class="form-control"
+ ></textarea>
+ </div>
+ <ul>
+ <li v-for="error in errors.all()" :key="error.id">{{ error }}</li>
+ </ul>
+ <button type="button" class="btn btn-secondary" @click="close()">Cancel</button>
+ <span>&nbsp;</span>
+ <button type="button" :disabled="errors.any()" class="btn btn-primary" @click="createModel()">Create</button>
+ </form>
+ </div>
+</template>
+
+<script>
+import ModelService from "./../../services/Model.service.js";
+
+export default {
+ name: "createModel",
+ data: function() {
+ return {
+ modelCreate: {
+ name: "",
+ description: ""
+ }
+ };
+ },
+ methods: {
+ createModel() {
+ ModelService.createModel(this.modelCreate);
+ this.close();
+ },
+ close() {
+ this.$emit("close")
+ }
+ }
+};
+</script>
diff --git a/dashboard/src/components/model/Metarule.vue b/dashboard/src/components/model/Metarule.vue
new file mode 100644
index 00000000..1cb266bd
--- /dev/null
+++ b/dashboard/src/components/model/Metarule.vue
@@ -0,0 +1,155 @@
+<template>
+ <div class="">
+ <template v-if="edit">
+ <form>
+ <div class="form-group">
+ <label for="metaruleName">Name</label>
+ <input
+ type="text"
+ name="name"
+ v-model="metaruleEdit.name"
+ v-validate="'alpha_dash|required|min:3'"
+ class="form-control"
+ id="metaruleName"
+ >
+ </div>
+ <div class="form-group">
+ <label for="modelDescription">Description</label>
+ <textarea
+ name="description"
+ v-model="metaruleEdit.description"
+ v-validate="'required|min:3'"
+ class="form-control"
+ ></textarea>
+ </div>
+ <ul>
+ <li v-for="error in errors.all()" :key="error.id">{{ error }}</li>
+ </ul>
+ <button type="button" class="btn btn-secondary" @click="edit = false">Cancel</button>
+ <span>&nbsp;</span>
+ <button type="button" :disabled="errors.any()" class="btn btn-primary" @click="updateMetarule()">Update</button>
+ </form>
+ </template>
+ <template v-else>
+ <h3 class="list-group-item-heading inline">{{ metarule.name }}</h3>
+ <div class="pull-right">
+ <button
+ type="button"
+ class="fa fa-trash btn btn-dark btn-sm"
+ @click="removeMetarule()"
+ title="Remove Meta Rule"
+ ></button>
+ <button
+ type="button"
+ class="fa fa-edit btn btn-dark btn-sm"
+ @click="updatingMetarule()"
+ title="Edit Meta Rule"
+ ></button>
+ </div>
+ <p class="list-group-item-text">{{ metarule.description }}</p>
+ <p class="list-group-item-text"></p>
+ <table class="table categories">
+ <thead>
+ <tr>
+ <th>
+ <span>Subjects</span>
+ <i class="fa fa-question-circle" style="margin-left: 2%" v-if="metaruleHelpStrings.subject" data-toggle="tooltip" :title="metaruleHelpStrings.subject"></i>
+ <button
+ type="button"
+ class="fa fa-plus pull-right btn btn-dark btn-sm"
+ @click="addSubjectCategory = true"
+ title="Add Subject"
+ ></button>
+ </th>
+ <th>
+ <span>Objects</span>
+ <i class="fa fa-question-circle" style="margin-left: 2%" v-if="metaruleHelpStrings.object" data-toggle="tooltip" :title="metaruleHelpStrings.object"></i>
+ <button
+ type="button"
+ class="fa fa-plus pull-right btn btn-dark btn-sm"
+ @click="addObjectCategory = true"
+ title="Add Object"
+ ></button>
+ </th>
+ <th>
+ <span>Actions</span>
+ <i class="fa fa-question-circle" style="margin-left: 2%" v-if="metaruleHelpStrings.action" data-toggle="tooltip" :title="metaruleHelpStrings.action"></i>
+ <button
+ type="button"
+ class="fa fa-plus pull-right btn btn-dark btn-sm"
+ @click="addActionCategory = true"
+ title="Add Action"
+ ></button>
+ </th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>
+ <AddCategory v-if="addSubjectCategory" :metarule="metarule" type="subject" @close="addSubjectCategory = false"></AddCategory>
+ <Category v-else v-for="category in metarule.subject_categories" :key="category.id" :category="category" :metarule="metarule" :attributes="metarule.subjectAttributes" type="subject"></Category>
+ </td>
+ <td>
+ <AddCategory v-if="addObjectCategory" :metarule="metarule" type="object" @close="addObjectCategory = false"></AddCategory>
+ <Category v-else v-for="category in metarule.object_categories" :key="category.id" :category="category" :metarule="metarule" :attributes="metarule.objectAttributes" type="object"></Category>
+ </td>
+ <td>
+ <AddCategory v-if="addActionCategory" :metarule="metarule" type="action" @close="addActionCategory = false"></AddCategory>
+ <Category v-else v-for="category in metarule.action_categories" :key="category.id" :category="category" :metarule="metarule" :attributes="metarule.actionAttributes" type="action"></Category>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </template>
+ </div>
+</template>
+
+<script>
+import Category from './Category.vue'
+import AddCategory from './AddCategory.vue'
+import ModelService from "./../../services/Model.service.js";
+import util from "./../../services/Util.service.js";
+import helpstrings from "../../helpstrings";
+
+export default {
+ name: "metarule",
+ data: function() {
+ return {
+ edit: false,
+ metaruleEdit: {},
+ addSubjectCategory: false,
+ addObjectCategory: false,
+ addActionCategory: false,
+ metaruleHelpStrings: {}
+ };
+ },
+ components: {
+ Category,
+ AddCategory
+ },
+ props: {
+ metarule: Object,
+ model: Object,
+ },
+ mounted() {
+ this.metaruleHelpStrings = helpstrings.metarule;
+ },
+ methods: {
+ updatingMetarule() {
+ this.metaruleEdit = util.clone(this.metarule);
+ this.edit = true;
+ },
+ updateMetarule() {
+ this.edit = false;
+ ModelService.updateMetaRule(this.metaruleEdit);
+ },
+ removeMetarule() {
+ if (confirm('Are you sure to remove this Meta Rule from model?')) {
+ var modelCopy = util.clone(this.model);
+ modelCopy.meta_rules.splice(modelCopy.meta_rules.indexOf(this.metarule), 1);
+ ModelService.updateModel(modelCopy);
+ }
+ }
+ }
+};
+</script>
diff --git a/dashboard/src/components/model/Model.vue b/dashboard/src/components/model/Model.vue
new file mode 100644
index 00000000..82ad992d
--- /dev/null
+++ b/dashboard/src/components/model/Model.vue
@@ -0,0 +1,112 @@
+<template>
+ <div>
+ <template v-if="edit">
+ <form>
+ <div class="form-group">
+ <label for="modelName">Name</label>
+ <input
+ type="text"
+ name="name"
+ v-model="modelEdit.name"
+ v-validate="'alpha_dash|required|min:3'"
+ class="form-control"
+ id="modelName"
+ >
+ </div>
+ <div class="form-group">
+ <label for="modelDescription">Description</label>
+ <textarea
+ name="description"
+ v-model="modelEdit.description"
+ v-validate="'required|min:3'"
+ class="form-control"
+ ></textarea>
+ </div>
+ <ul>
+ <li v-for="error in errors.all()" :key="error.id">{{ error }}</li>
+ </ul>
+ <button type="button" class="btn btn-secondary" @click="edit = false">Cancel</button>
+ <span>&nbsp;</span>
+ <button type="button" :disabled="errors.any()" class="btn btn-primary" @click="updateModel()">Update</button>
+ </form>
+ </template>
+ <template v-else>
+ <h3 class="list-group-item-heading inline">{{ model.name }}</h3>
+ <div class="pull-right">
+ <button type="button" class="fa fa-trash btn btn-dark btn-sm" @click="removeModel()" title="Remove Model"></button>
+ <button type="button" class="fa fa-edit btn btn-dark btn-sm" @click="updatingModel()" title="Edit Model"></button>
+ </div>
+ <p class="list-group-item-text">{{ model.description }}</p>
+
+ <AddMetarule v-if="addMetarule" :model="model" @close="addMetarule = false"></AddMetarule>
+ <details class="list-group-item-text" v-else>
+ <summary>
+ <h4 class="inline-block width-200">
+ {{ model.meta_rules.length + ' meta rule' + (model.meta_rules.length > 1 ? 's' : '&nbsp;') }}
+ <i class="fa fa-question-circle" v-if="modelHelpStrings.metarule" data-toggle="tooltip" :title="modelHelpStrings.metarule"></i>
+ </h4>
+ <button
+ type="button"
+ class="fa fa-plus btn btn-dark btn-sm"
+ @click="addMetarule = true"
+ title="Add Meta Rule"
+ ></button>
+ </summary>
+ <div class="list-group">
+ <Metarule
+ v-for="metarule in model.meta_rules"
+ :key="metarule.id"
+ :metarule="metarule"
+ :model="model"
+ ></Metarule>
+ </div>
+ </details>
+ </template>
+ <hr>
+ </div>
+</template>
+
+<script>
+import Metarule from "./Metarule.vue";
+import ModelService from "./../../services/Model.service.js";
+import AddMetarule from "./AddMetarule.vue";
+import util from "./../../services/Util.service.js";
+import helpstrings from "../../helpstrings";
+
+export default {
+ name: "model",
+ data: function() {
+ return {
+ edit: false,
+ addMetarule: false,
+ modelEdit: {},
+ modelHelpStrings: {}
+ };
+ },
+ components: {
+ Metarule,
+ AddMetarule
+ },
+ props: {
+ model: Object
+ },
+ mounted() {
+ this.modelHelpStrings = helpstrings.model;
+ },
+ methods: {
+ updatingModel() {
+ this.modelEdit = util.clone(this.model);
+ this.edit = true;
+ },
+ updateModel() {
+ this.edit = false;
+ ModelService.updateModel(this.modelEdit);
+ },
+ removeModel() {
+ if (confirm('Are you sure to delete this Model?')) {
+ ModelService.removeModel(this.model);
+ }
+ }
+ }
+};
+</script>
diff --git a/dashboard/src/components/model/OrphanCategory.vue b/dashboard/src/components/model/OrphanCategory.vue
new file mode 100644
index 00000000..316b8095
--- /dev/null
+++ b/dashboard/src/components/model/OrphanCategory.vue
@@ -0,0 +1,65 @@
+<template>
+ <div class="list-group col-lg-3">
+ <h3 class="list-group-item active">{{title}}</h3>
+ <div v-for="category in categories" class="list-group-item" :key="category.id">
+ <h4 class="list-group-item-heading inline">{{ category.name }}</h4>
+ <button
+ type="button"
+ class="fa fa-trash pull-right btn btn-dark btn-sm"
+ @click="removeCategory(category)"
+ :title="buttonTitle"
+ ></button>
+ <p class="list-group-item-text">{{ category.description }}</p>
+ </div>
+ </div>
+</template>
+
+<script>
+import ModelService from "./../../services/Model.service.js";
+
+var categoryMap = {
+ subject: {
+ title: "Orphan Subject categories",
+ removeButtonTitle: "Remove Subject category",
+ removeTitle: "Are you sure to remove this Subject Category?",
+ listName: "subject_categories",
+ serviceListName: "subjectCategories"
+ },
+ object: {
+ title: "Orphan Object categories",
+ removeButtonTitle: "Remove Object category",
+ removeTitle: "Are you sure to remove this Object Category?",
+ listName: "object_categories",
+ serviceListName: "objectCategories"
+ },
+ action: {
+ title: "Orphan Action categories",
+ removeButtonTitle: "Remove Action category",
+ removeTitle: "Are you sure to remove this Action Category?",
+ listName: "action_categories",
+ serviceListName: "actionCategories"
+ }
+};
+
+export default {
+ props: {
+ categories: Array,
+ type: String
+ },
+ computed: {
+ title() {
+ return categoryMap[this.type].title;
+ },
+ buttonTitle() {
+ return categoryMap[this.type].removeButtonTitle;
+ }
+ },
+ methods: {
+ removeCategory(category) {
+ if (confirm(categoryMap[this.type].removeTitle)) {
+ ModelService.removeCategory(this.type, category);
+ }
+ }
+ }
+};
+</script>
diff --git a/dashboard/src/components/model/Orphans.vue b/dashboard/src/components/model/Orphans.vue
new file mode 100644
index 00000000..b3c1c524
--- /dev/null
+++ b/dashboard/src/components/model/Orphans.vue
@@ -0,0 +1,79 @@
+<template>
+ <div>
+ <div class="alert alert-dismissable alert-warning">
+ <button type="button" class="close" data-dismiss="alert" @click="showOrphan = false; $emit('close')">×</button>
+ <h4>Warning!</h4>
+ <p>
+ Some metarules or categories are orphan, please check them and delete them if necessary.
+ <a
+ href
+ @click.prevent="showOrphan = true"
+ v-show="!showOrphan"
+ >Show orphans</a>
+ <a href @click.prevent="showOrphan = false" v-show="showOrphan">Hide orphans</a>
+ </p>
+ </div>
+
+ <div class="row" v-show="showOrphan">
+ <div class="list-group col-lg-3" v-if="orphanMetaRules.length">
+ <h3 class="list-group-item active">Orphan Meta rules</h3>
+ <div v-for="metaRule in orphanMetaRules" class="list-group-item" :key="metaRule.id">
+ <h4 class="list-group-item-heading inline">{{ metaRule.name }}</h4>
+ <button
+ type="button"
+ class="fa fa-trash pull-right btn btn-dark btn-sm"
+ @click="removeMetarule(metaRule)"
+ title="Remove Meta rule"
+ ></button>
+ <p class="list-group-item-text">{{ metaRule.description }}</p>
+ </div>
+ </div>
+
+ <OrphanCategory
+ v-if="orphanSubjectCategories.length"
+ type="subject"
+ :categories="orphanSubjectCategories"
+ ></OrphanCategory>
+ <OrphanCategory
+ v-if="orphanObjectCategories.length"
+ type="object"
+ :categories="orphanObjectCategories"
+ ></OrphanCategory>
+ <OrphanCategory
+ v-if="orphanActionCategories.length"
+ type="action"
+ :categories="orphanActionCategories"
+ ></OrphanCategory>
+ </div>
+ </div>
+</template>
+
+<script>
+import ModelService from "./../../services/Model.service.js";
+import OrphanCategory from "./OrphanCategory.vue";
+
+export default {
+ props: {
+ orphanMetaRules: Array,
+ orphanSubjectCategories: Array,
+ orphanObjectCategories: Array,
+ orphanActionCategories: Array
+ },
+ components: {
+ OrphanCategory,
+ },
+ data() {
+ return {
+ showOrphan: false,
+ allowAlert: true
+ };
+ },
+ methods: {
+ removeMetarule(metarule) {
+ if (confirm("Are you sure to remove this Meta Rule?")) {
+ ModelService.removeMetaRule(metarule);
+ }
+ }
+ }
+};
+</script> \ No newline at end of file