From 0a2894b378baeb68334310f0c9cc1cb531e8668b Mon Sep 17 00:00:00 2001 From: Sirttas Date: Mon, 25 May 2026 18:36:18 +0200 Subject: [PATCH] sortable --- package-lock.json | 7 +++++++ package.json | 3 ++- src/ledger/LedgerSelect.vue | 9 ++++----- src/rules/RuleInput.vue | 6 +----- src/rules/RuleSetInput.vue | 35 ++++++++++++++++++++++++++++++----- 5 files changed, 44 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index 25f7247..9af1fd2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,6 +18,7 @@ "loglevel": "^1.8.1", "loglevel-plugin-prefix": "^0.8.4", "pinia": "^3.0.4", + "sortablejs": "^1.15.7", "vue": "^3.3.4", "vue-router": "^5.0.7" }, @@ -2572,6 +2573,12 @@ "dev": true, "license": "ISC" }, + "node_modules/sortablejs": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.15.7.tgz", + "integrity": "sha512-Kk8wLQPlS+yi1ZEf48a4+fzHa4yxjC30M/Sr2AnQu+f/MPwvvX9XjZ6OWejiz8crBsLwSq8GHqaxaET7u6ux0A==", + "license": "MIT" + }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", diff --git a/package.json b/package.json index 0677677..0032c24 100644 --- a/package.json +++ b/package.json @@ -20,15 +20,16 @@ "loglevel": "^1.8.1", "loglevel-plugin-prefix": "^0.8.4", "pinia": "^3.0.4", + "sortablejs": "^1.15.7", "vue": "^3.3.4", "vue-router": "^5.0.7" }, "devDependencies": { + "@tailwindcss/vite": "^4.3.0", "@types/node": "^25.8.0", "@vitejs/plugin-vue": "^6.0.7", "tailwindcss": "^4.3.0", "typescript": "^6.0.3", - "@tailwindcss/vite": "^4.3.0", "vite": "^8.0.13", "vite-plugin-runtime-env": "^1.0.0", "vitest": "^4.1.6", diff --git a/src/ledger/LedgerSelect.vue b/src/ledger/LedgerSelect.vue index 75410b4..d6621ff 100644 --- a/src/ledger/LedgerSelect.vue +++ b/src/ledger/LedgerSelect.vue @@ -12,16 +12,16 @@ const ledger = defineModel(); const {ledgers: allLedgers} = storeToRefs(useLedgersStore()); const ledgersToUse = computed(() => props.ledgers || allLedgers); -const legerId = computed({ +const ledgerId = computed({ get: () => ledger.value?.ledgerId, - set: value => ledger.value = ledgersToUse.value[ledgersToUse.value.findIndex(x => x.value === value)] + set: value => ledger.value = ledgersToUse.value.find(l => l.ledgerId === value) }) @@ -31,5 +31,4 @@ const legerId = computed({ .system-ledger { @apply text-emerald-400; } - \ No newline at end of file diff --git a/src/rules/RuleInput.vue b/src/rules/RuleInput.vue index a4c9a17..b66c31a 100644 --- a/src/rules/RuleInput.vue +++ b/src/rules/RuleInput.vue @@ -34,8 +34,4 @@ const toLedger = ledgerComputed('toLedgerId') - - - \ No newline at end of file + \ No newline at end of file diff --git a/src/rules/RuleSetInput.vue b/src/rules/RuleSetInput.vue index d12b546..5cbbb10 100644 --- a/src/rules/RuleSetInput.vue +++ b/src/rules/RuleSetInput.vue @@ -2,8 +2,9 @@ import {RuleResponse, RuleResponseRateEnum, RuleSetResponse} from "@/generated/mammon"; import RuleInput from "@/rules/RuleInput.vue"; -import {computed} from "vue"; -import {PlusIcon, TrashIcon} from '@heroicons/vue/24/outline'; +import {computed, useTemplateRef} from "vue"; +import {Bars4Icon, PlusIcon, TrashIcon} from '@heroicons/vue/24/outline'; +import {useSortable} from "@vueuse/integrations/useSortable"; const ruleSet = defineModel(); const rules = computed({ @@ -25,16 +26,40 @@ const setRule = (index: number, rule?: RuleResponse) => { const removeRule = (index: number) => { rules.value = rules.value.toSpliced(index, 1) } + +const sortableContainer = useTemplateRef('sortable-container') +useSortable(sortableContainer, rules, { handle: '.sortable-handle'}); + + \ No newline at end of file