Skip to content

Commit d1b9bac

Browse files
committed
Add disabled conditions
1 parent 33b761f commit d1b9bac

File tree

3 files changed

+27
-2
lines changed

3 files changed

+27
-2
lines changed

src/check-conditions.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { Filter } from '@directus/shared/types';
2+
import { validatePayload } from '@directus/shared/utils';
3+
4+
export function checkConditions(item: Record<string, any>, conditions: Filter) {
5+
const errors = validatePayload(conditions, item, { requireAll: true });
6+
return errors.length === 0;
7+
}

src/index.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ export default defineInterface({
1212
types: ['alias'],
1313
localTypes: ['presentation'],
1414
group: 'presentation',
15-
options: [
15+
options: ({ collection }) => [
1616
{
1717
field: 'layout',
1818
name: 'Layout',
@@ -127,6 +127,17 @@ export default defineInterface({
127127
},
128128
},
129129
},
130+
{
131+
field: 'disabledConditions',
132+
name: 'Disabled Conditions',
133+
type: 'json',
134+
meta: {
135+
interface: 'system-filter',
136+
options: {
137+
collectionName: collection,
138+
},
139+
},
140+
},
130141
],
131142
},
132143
},

src/interface.vue

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
class="action"
77
:class="[trigger.type]"
88
:loading="loadings[index].value"
9+
:disabled="disableds[index]"
910
:secondary="trigger.type !== 'primary'"
1011
v-bind="{ [trigger.size]: true }"
1112
@click="onClick(trigger.method, parsedUrls[index], index)"
@@ -19,7 +20,9 @@
1920
<script lang="ts">
2021
import { computed, defineComponent, inject, PropType, ref } from 'vue';
2122
import { useApi, useStores } from '@directus/extensions-sdk';
23+
import { Filter } from '@directus/shared/types';
2224
import { render } from 'micromustache';
25+
import { checkConditions } from './check-conditions';
2326
2427
type Trigger = {
2528
label: string;
@@ -28,6 +31,7 @@ type Trigger = {
2831
icon: string;
2932
url: string;
3033
method: string;
34+
disabledConditions: Filter;
3135
};
3236
3337
export default defineComponent({
@@ -48,10 +52,13 @@ export default defineComponent({
4852
4953
const values = inject('values', ref<Record<string, any>>({}));
5054
const parsedUrls = computed(() => props.triggers.map((trigger) => render(trigger.url ?? '', values.value)));
55+
const disableds = computed(() => props.triggers.map((trigger) => (
56+
trigger.disabledConditions && checkConditions(values.value, trigger.disabledConditions)),
57+
));
5158
5259
const loadings = props.triggers.map(() => ref(false));
5360
54-
return { loadings, parsedUrls, onClick };
61+
return { loadings, parsedUrls, disableds, onClick };
5562
5663
async function onClick(method: string, url: string, index: number) {
5764
const loading = loadings[index];

0 commit comments

Comments
 (0)