From 3eb497058854bbb487db8e1554fb070b946d5c98 Mon Sep 17 00:00:00 2001 From: Miguel Angel <miguelangeldev@icloud.com> Date: Tue, 11 Jun 2024 11:42:16 -0400 Subject: [PATCH] feat: add bypass toggle --- src/components/computed-properties.vue | 26 +++++++++++++++---- src/components/sortable/Sortable.vue | 6 +++-- .../sortable/sortableList/SortableList.vue | 12 +++++++-- .../sortable/sortableList/sortableList.scss | 4 +++ 4 files changed, 39 insertions(+), 9 deletions(-) diff --git a/src/components/computed-properties.vue b/src/components/computed-properties.vue index 064404cf2..dd05bb68b 100644 --- a/src/components/computed-properties.vue +++ b/src/components/computed-properties.vue @@ -19,6 +19,7 @@ :fields="fields" :items="current" filter-key="name" + disable-key="byPass" :inline-edit="false" :data-test-actions="{ tableBox: { 'data-cy': 'calcs-table' }, @@ -30,13 +31,15 @@ @item-delete="deleteProperty" @add-page="displayFormProperty" > - <template #options> + <template #options="{ item }"> <button v-b-tooltip="{ customClass: 'bypass-btn-tooltip' }" - title="Unbypass Calc" + :title="item.byPass ? 'Unbypass Calc' : 'Bypass Calc'" class="btn" + @click="toggleBypass(item.id)" > - <i class="fas fa-sign-in-alt"></i> + <i v-show="!item.byPass" class="fas fa-sign-out-alt"></i> + <i v-show="item.byPass" class="fas fa-sign-in-alt"></i> </button> <div class="sortable-item-vr"></div> </template> @@ -238,9 +241,14 @@ export default { this.value.forEach((item) => { this.numberItem++; item.id = this.numberItem; + + if (!Object.hasOwn(item, 'byPass')) { + item.byPass = false; + } }); + this.current = this.value; - } + }, }, created() { Validator.register( @@ -314,6 +322,13 @@ export default { this.focusFirstCalculatedPropertiesError(); } }, + toggleBypass(itemId) { + this.current = this.current.map((item) => + item.id === itemId ? { ...item, byPass: !item.byPass } : item, + ); + + this.$emit("input", this.current); + }, saveProperty() { if (this.add.id === 0) { this.numberItem++; @@ -322,7 +337,8 @@ export default { property: this.add.property, name: this.add.name, formula: this.add.formula, - type: this.add.type + type: this.add.type, + byPass: false, }); } else { this.current.forEach((item) => { diff --git a/src/components/sortable/Sortable.vue b/src/components/sortable/Sortable.vue index fecd72674..d78a621e1 100644 --- a/src/components/sortable/Sortable.vue +++ b/src/components/sortable/Sortable.vue @@ -28,13 +28,14 @@ :items="items" :filtered-items="filteredItems" :inline-edit="inlineEdit" + :disable-key="disableKey" :data-test-actions="dataTestActions" @ordered="$emit('ordered', $event)" @item-edit="$emit('item-edit', $event)" @item-delete="$emit('item-delete', $event)" > - <template #options> - <slot name="options"></slot> + <template #options="{ item }"> + <slot name="options" :item="item"></slot> </template> </SortableList> </div> @@ -52,6 +53,7 @@ export default { fields: { type: Array, required: true }, items: { type: Array, required: true }, filterKey: { type: String, required: true }, + disableKey: { type: String, default: null }, inlineEdit: { type: Boolean, default: true }, dataTestActions: { type: Object, diff --git a/src/components/sortable/sortableList/SortableList.vue b/src/components/sortable/sortableList/SortableList.vue index b3b37e057..221a32241 100644 --- a/src/components/sortable/sortableList/SortableList.vue +++ b/src/components/sortable/sortableList/SortableList.vue @@ -22,7 +22,11 @@ :data-order="item.order" :data-test="`item-${item.order}`" :title="item.name" - class="sortable-list-tr sortable-item" + :class="[ + 'sortable-list-tr', + 'sortable-item', + { 'sortable-item-disabled': isDisabled(item) }, + ]" draggable="true" @dragstart="(event) => dragStart(event, item.order)" @dragenter="(event) => dragEnter(event, item.order)" @@ -69,7 +73,7 @@ <i class="fas fa-edit"></i> </button> <div class="sortable-item-vr"></div> - <slot name="options"></slot> + <slot name="options" :item="item"></slot> <button class="btn" title="Delete" @@ -93,6 +97,7 @@ export default { items: { type: Array, required: true }, filteredItems: { type: Array, required: true }, inlineEdit: { type: Boolean, default: true }, + disableKey: { type: String, default: null }, dataTestActions: { type: Object, required: true }, }, data() { @@ -223,6 +228,9 @@ export default { dragOver(event) { event.preventDefault(); }, + isDisabled(item) { + return this.disableKey ? item[this.disableKey] : false; + }, }, } </script> diff --git a/src/components/sortable/sortableList/sortableList.scss b/src/components/sortable/sortableList/sortableList.scss index 2ed1fe629..14be0d65c 100644 --- a/src/components/sortable/sortableList/sortableList.scss +++ b/src/components/sortable/sortableList/sortableList.scss @@ -77,6 +77,10 @@ $border-color: #cdddee; margin: 9px 0; border-right: 1px solid $border-color; } + + &-disabled > .sortable-item-prop { + color: rgba(85, 98, 113, 0.5); + } } }